@weaverse/react 1.0.32 → 1.0.34

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.
Files changed (3) hide show
  1. package/dist/index.js +1297 -1299
  2. package/dist/index.mjs +1325 -1327
  3. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -62,649 +62,255 @@ var css = {
62
62
  var button_default = Button;
63
63
 
64
64
  // src/elements/container.tsx
65
- import React2, { forwardRef as forwardRef2 } from "react";
66
- var Container = forwardRef2(
67
- (props, ref) => {
68
- let { children, ...rest } = props;
69
- return /* @__PURE__ */ React2.createElement("div", { ref, ...rest }, children);
70
- }
71
- );
72
- var css2 = {
73
- "@desktop": {
74
- display: "flex",
75
- alignItems: "flex-start",
76
- justifyContent: "flex-start",
77
- gridArea: "1 / 1 / 3 / 6",
78
- overflow: "hidden",
79
- // minWidth: '300px',
80
- minHeight: "100px"
81
- },
82
- "@mobile": {
83
- minHeight: "100px"
84
- }
85
- };
86
- Container.defaultProps = {};
87
- var container_default = Container;
88
-
89
- // src/elements/countdown/index.tsx
90
- import React4, { forwardRef as forwardRef3, useContext as useContext2, useEffect } from "react";
91
-
92
- // src/constant/index.ts
93
- var TIMES = ["days", "hours", "minutes", "seconds"];
94
- var COUNTDOWN_KEY = "wv-cd-evergreen-start";
95
- var INSTAGRAM_API = "https://graph.instagram.com";
65
+ import React14, { Children, forwardRef as forwardRef4 } from "react";
96
66
 
97
- // src/utils/index.ts
98
- function getTime(_seconds) {
99
- let ONE_MINUTE = 60 * 1e3;
100
- let ONE_HOUR = 60 * ONE_MINUTE;
101
- let ONE_DAY = 24 * ONE_HOUR;
102
- let days = Math.floor(_seconds / ONE_DAY);
103
- let hours = Math.floor((_seconds - days * ONE_DAY) / ONE_HOUR);
104
- let minutes = Math.floor(
105
- (_seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE
106
- );
107
- let seconds = Math.floor(
108
- (_seconds - days * ONE_DAY - hours * ONE_HOUR - minutes * ONE_MINUTE) / 1e3
109
- );
110
- return { days, hours, minutes, seconds };
111
- }
112
- function getYoutubeEmbedId(url) {
113
- const match = url.match(
114
- /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/
115
- );
116
- return match ? match[1] : null;
117
- }
118
- function getVimeoId(url) {
119
- const match = url.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);
120
- return match ? match[1] : null;
121
- }
67
+ // src/components/modal/index.tsx
68
+ var modal_exports = {};
69
+ __export(modal_exports, {
70
+ Modal: () => Modal,
71
+ ModalClose: () => ModalClose,
72
+ ModalContent: () => ModalContent,
73
+ ModalHeader: () => ModalHeader,
74
+ ModalTrigger: () => ModalTrigger
75
+ });
76
+ import { Close, Portal, Root, Trigger } from "@radix-ui/react-dialog";
77
+ import React4, { forwardRef as forwardRef2 } from "react";
122
78
 
123
- // src/elements/countdown/timer-block.tsx
79
+ // src/components/icons/index.tsx
124
80
  import React3 from "react";
125
- function TimerBlock({ value, label }) {
126
- return /* @__PURE__ */ React3.createElement("div", { className: "wv-cd-block" }, /* @__PURE__ */ React3.createElement("div", { className: "wv-cd-number" }, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ React3.createElement("div", { className: "wv-cd-label" }, label));
127
- }
128
81
 
129
- // src/elements/countdown/index.tsx
130
- var Countdown = forwardRef3(
131
- (props, ref) => {
132
- const { isDesignMode } = useContext2(WeaverseContext);
133
- let {
134
- timerType,
135
- startTime: startTimeProp,
136
- endTime: endTimeProp,
137
- periods: periodsProp,
138
- redirectWhenTimerStops,
139
- redirectUrl,
140
- openInNewTab,
141
- showColon,
142
- showLabel,
143
- ...rest
144
- } = props;
145
- const [remaining, setRemaining] = React4.useState(0);
146
- let periods = periodsProp * 60 * 1e3;
147
- const handleEnd = () => {
148
- if (!isDesignMode && redirectWhenTimerStops && redirectUrl)
149
- window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
150
- };
151
- const getStartTime = () => {
152
- let startTime = startTimeProp;
153
- if (timerType === "evergreen") {
154
- const start = localStorage.getItem(COUNTDOWN_KEY);
155
- if (start) {
156
- startTime = Number.parseInt(start);
157
- if (startTime + periods < Date.now()) {
158
- startTime = Date.now();
159
- localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
160
- }
161
- } else {
162
- startTime = Date.now();
163
- localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
164
- }
165
- }
166
- return startTime;
167
- };
168
- const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
169
- const handleRemaining = () => {
170
- let startTime = getStartTime();
171
- let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
172
- let isActive = checkActive(startTime);
173
- const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
174
- if (remainingTime > 0 && remainingTime < 1e3) {
175
- handleEnd();
82
+ // src/components/icons/phosphor.tsx
83
+ var phosphor_exports = {};
84
+ __export(phosphor_exports, {
85
+ ArrowLeft: () => ArrowLeft,
86
+ ArrowRight: () => ArrowRight,
87
+ Backpack: () => Backpack,
88
+ CaretLeft: () => CaretLeft,
89
+ CaretRight: () => CaretRight,
90
+ Circle: () => Circle,
91
+ CircleNotch: () => CircleNotch,
92
+ Eye: () => Eye,
93
+ HandBag: () => HandBag,
94
+ Image: () => Image,
95
+ Minus: () => Minus,
96
+ Newspaper: () => Newspaper,
97
+ Package: () => Package,
98
+ Plus: () => Plus,
99
+ ShoppingCart: () => ShoppingCart,
100
+ Storefront: () => Storefront,
101
+ Tag: () => Tag,
102
+ X: () => X
103
+ });
104
+ import React2 from "react";
105
+ var Circle = (props) => {
106
+ return /* @__PURE__ */ React2.createElement(
107
+ "svg",
108
+ {
109
+ xmlns: "http://www.w3.org/2000/svg",
110
+ width: "192",
111
+ height: "192",
112
+ fill: "currentColor",
113
+ viewBox: "0 0 256 256",
114
+ ...props
115
+ },
116
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
117
+ /* @__PURE__ */ React2.createElement("circle", { cx: "128", cy: "128", r: "104" })
118
+ );
119
+ };
120
+ var CircleNotch = (props) => {
121
+ return /* @__PURE__ */ React2.createElement(
122
+ "svg",
123
+ {
124
+ xmlns: "http://www.w3.org/2000/svg",
125
+ fill: "none",
126
+ viewBox: "0 0 24 24",
127
+ ...props
128
+ },
129
+ /* @__PURE__ */ React2.createElement(
130
+ "circle",
131
+ {
132
+ style: { opacity: ".25" },
133
+ cx: "12",
134
+ cy: "12",
135
+ r: "10",
136
+ stroke: "currentColor",
137
+ strokeWidth: "4"
176
138
  }
177
- setRemaining(remainingTime);
178
- };
179
- useEffect(() => {
180
- let intervalFlag = setInterval(
181
- handleRemaining,
182
- 1e3
183
- );
184
- return () => {
185
- clearInterval(intervalFlag);
186
- };
187
- }, [startTimeProp, endTimeProp, periods, timerType]);
188
- const timer = getTime(remaining);
189
- return /* @__PURE__ */ React4.createElement("div", { ref, ...rest }, TIMES.map((time) => {
190
- return /* @__PURE__ */ React4.createElement(React4.Fragment, { key: time }, /* @__PURE__ */ React4.createElement(
191
- TimerBlock,
192
- {
193
- label: showLabel ? time : "",
194
- value: remaining === 0 ? "--" : timer[time]
195
- }
196
- ), time !== "seconds" && /* @__PURE__ */ React4.createElement("div", { className: "wv-cd-separator" }, showColon && /* @__PURE__ */ React4.createElement("span", null, ":")));
197
- }));
198
- }
199
- );
200
- var css3 = {
201
- "@desktop": {
202
- fontSize: "36px",
203
- fontWeight: 500,
204
- display: "flex",
205
- alignItems: "center",
206
- overflow: "hidden",
207
- justifyContent: "center",
208
- gap: 10,
209
- lineHeight: "initial",
210
- ".wv-cd-block": {
211
- width: 48,
212
- textAlign: "center",
213
- ".wv-cd-label": {
214
- fontSize: 10
139
+ ),
140
+ /* @__PURE__ */ React2.createElement(
141
+ "path",
142
+ {
143
+ style: { opacity: ".75" },
144
+ fill: "currentColor",
145
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
215
146
  }
147
+ )
148
+ );
149
+ };
150
+ var X = (props) => {
151
+ return /* @__PURE__ */ React2.createElement(
152
+ "svg",
153
+ {
154
+ xmlns: "http://www.w3.org/2000/svg",
155
+ width: "20",
156
+ height: "20",
157
+ fill: "currentColor",
158
+ viewBox: "0 0 256 256",
159
+ ...props
216
160
  },
217
- ".wv-cd-separator": {
218
- span: {
219
- lineHeight: "100%"
220
- },
221
- ".hidden": {
222
- visibility: "hidden"
161
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
162
+ /* @__PURE__ */ React2.createElement(
163
+ "line",
164
+ {
165
+ x1: "200",
166
+ y1: "56",
167
+ x2: "56",
168
+ y2: "200",
169
+ fill: "none",
170
+ stroke: "currentColor",
171
+ strokeLinecap: "round",
172
+ strokeLinejoin: "round",
173
+ strokeWidth: "12"
223
174
  }
224
- }
225
- }
226
- };
227
- Countdown.defaultProps = {
228
- timerType: "fixed-time",
229
- startTime: Date.now(),
230
- endTime: Date.now() + 1e3 * 60 * 60 * 24,
231
- periods: 90,
232
- redirectWhenTimerStops: false,
233
- redirectUrl: "",
234
- openInNewTab: false,
235
- showLabel: true,
236
- showColon: true
175
+ ),
176
+ /* @__PURE__ */ React2.createElement(
177
+ "line",
178
+ {
179
+ x1: "200",
180
+ y1: "200",
181
+ x2: "56",
182
+ y2: "56",
183
+ fill: "none",
184
+ stroke: "currentColor",
185
+ strokeLinecap: "round",
186
+ strokeLinejoin: "round",
187
+ strokeWidth: "12"
188
+ }
189
+ )
190
+ );
237
191
  };
238
- var countdown_default = Countdown;
239
-
240
- // src/elements/image.tsx
241
- import React5 from "react";
242
- var Image = React5.forwardRef(
243
- (props, ref) => {
244
- let {
245
- src,
246
- alt,
247
- objectFit,
248
- objectPosition,
249
- clickAction,
250
- openLinkInNewTab,
251
- linkTo,
252
- ...rest
253
- } = props;
254
- let style = {
255
- "--img-object-fit": objectFit,
256
- "--img-object-position": objectPosition
257
- };
258
- let content = /* @__PURE__ */ React5.createElement("img", { alt, "data-blink-src": src });
259
- if (clickAction === "openLink" && linkTo) {
260
- content = /* @__PURE__ */ React5.createElement(
261
- "a",
262
- {
263
- href: linkTo,
264
- target: openLinkInNewTab ? "_blank" : "_self",
265
- rel: "noreferrer"
266
- },
267
- /* @__PURE__ */ React5.createElement("img", { alt, "data-blink-src": src })
268
- );
269
- }
270
- return /* @__PURE__ */ React5.createElement("div", { ref, style, ...rest }, content);
271
- }
272
- );
273
- var css4 = {
274
- "@desktop": {
275
- display: "flex",
276
- overflow: "hidden",
277
- justifyContent: "center",
278
- alignItems: "center",
279
- img: {
280
- width: "100%",
281
- height: "100%",
282
- objectFit: "var(--img-object-fit, cover)",
283
- objectPosition: "var(--img-object-position, center)"
284
- }
285
- }
286
- };
287
- Image.defaultProps = {
288
- src: "https://ucarecdn.com/dac0f414-2b1f-46df-99ce-41554f0f653a/",
289
- alt: "Alternative information",
290
- objectFit: "cover",
291
- objectPosition: "center center",
292
- clickAction: "none",
293
- openLinkInNewTab: false,
294
- linkTo: ""
192
+ var Minus = (props) => {
193
+ return /* @__PURE__ */ React2.createElement(
194
+ "svg",
195
+ {
196
+ xmlns: "http://www.w3.org/2000/svg",
197
+ width: "192",
198
+ height: "192",
199
+ fill: "currentColor",
200
+ viewBox: "0 0 256 256",
201
+ ...props
202
+ },
203
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
204
+ /* @__PURE__ */ React2.createElement(
205
+ "line",
206
+ {
207
+ x1: "40",
208
+ y1: "128",
209
+ x2: "216",
210
+ y2: "128",
211
+ fill: "none",
212
+ stroke: "currentColor",
213
+ strokeLinecap: "round",
214
+ strokeLinejoin: "round",
215
+ strokeWidth: "16"
216
+ }
217
+ )
218
+ );
295
219
  };
296
- var image_default = Image;
297
-
298
- // src/elements/layout.tsx
299
- import React8, { forwardRef as forwardRef4 } from "react";
300
-
301
- // src/components/background.tsx
302
- import React6 from "react";
303
- function Background(props) {
304
- let {
305
- backgroundColor,
306
- backgroundImage,
307
- backgroundFit,
308
- backgroundPosition,
309
- className
310
- } = props;
311
- let style = {
312
- display: "block",
313
- position: "absolute",
314
- inset: 0,
315
- backgroundColor
316
- };
317
- if (backgroundImage || backgroundColor) {
318
- return /* @__PURE__ */ React6.createElement("div", { style, className }, backgroundImage && /* @__PURE__ */ React6.createElement(
319
- "img",
220
+ var Plus = (props) => {
221
+ return /* @__PURE__ */ React2.createElement(
222
+ "svg",
223
+ {
224
+ xmlns: "http://www.w3.org/2000/svg",
225
+ width: "192",
226
+ height: "192",
227
+ fill: "currentColor",
228
+ viewBox: "0 0 256 256",
229
+ ...props
230
+ },
231
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
232
+ /* @__PURE__ */ React2.createElement(
233
+ "line",
320
234
  {
321
- width: "100%",
322
- height: "100%",
323
- "data-blink-src": backgroundImage,
324
- alt: "Background",
325
- style: {
326
- objectFit: backgroundFit,
327
- objectPosition: backgroundPosition
328
- }
235
+ x1: "40",
236
+ y1: "128",
237
+ x2: "216",
238
+ y2: "128",
239
+ fill: "none",
240
+ stroke: "currentColor",
241
+ strokeLinecap: "round",
242
+ strokeLinejoin: "round",
243
+ strokeWidth: "16"
329
244
  }
330
- ));
331
- }
332
- return null;
333
- }
334
-
335
- // src/components/overlay.tsx
336
- import React7 from "react";
337
- function Overlay(props) {
338
- let { enableOverlay, overlayOpacity, className } = props;
339
- if (enableOverlay) {
340
- return /* @__PURE__ */ React7.createElement(
341
- "div",
245
+ ),
246
+ /* @__PURE__ */ React2.createElement(
247
+ "line",
342
248
  {
343
- className,
344
- style: {
345
- position: "absolute",
346
- inset: 0,
347
- display: "block",
348
- backgroundColor: `rgba(0, 0, 0, ${overlayOpacity / 100})`
349
- }
249
+ x1: "128",
250
+ y1: "40",
251
+ x2: "128",
252
+ y2: "216",
253
+ fill: "none",
254
+ stroke: "currentColor",
255
+ strokeLinecap: "round",
256
+ strokeLinejoin: "round",
257
+ strokeWidth: "16"
350
258
  }
351
- );
352
- }
353
- return null;
354
- }
355
-
356
- // src/elements/layout.tsx
357
- var Layout = forwardRef4((props, ref) => {
358
- let {
359
- children,
360
- rows,
361
- gap,
362
- rowSize,
363
- columns,
364
- contentSize,
365
- gridSize,
366
- backgroundColor,
367
- backgroundImage,
368
- objectFit,
369
- objectPosition,
370
- enableOverlay,
371
- overlayOpacity,
372
- ...rest
373
- } = props;
374
- let style = {
375
- "--layout-content-width": "100vw",
376
- "--content-size": contentSize + "px",
377
- "--grid-size": gridSize + "px",
378
- "--rows": rows,
379
- "--columns": columns,
380
- "--gap": gap + "px",
381
- "--row-size": rowSize + "px",
382
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
383
- };
384
- return /* @__PURE__ */ React8.createElement("div", { ref, ...rest, style }, /* @__PURE__ */ React8.createElement(
385
- Background,
386
- {
387
- backgroundImage,
388
- backgroundColor,
389
- backgroundFit: objectFit,
390
- backgroundPosition: objectPosition
391
- }
392
- ), /* @__PURE__ */ React8.createElement(Overlay, { enableOverlay, overlayOpacity }), /* @__PURE__ */ React8.createElement("div", { "data-layout-content": true }, children));
393
- });
394
- var css5 = {
395
- "@desktop": {
396
- position: "relative",
397
- "> [data-layout-content]": {
398
- // paddingTop: 'var(--gap)',
399
- // paddingBottom: 'var(--gap)',
400
- margin: "0 auto",
401
- display: "grid",
402
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
403
- gridTemplateColumns: "calc((var(--layout-content-width) - var(--content-size)) / 2) 1fr repeat(var(--columns), minmax(0, var(--col-size))) 1fr calc((var(--layout-content-width) - var(--content-size)) / 2)",
404
- gridAutoRows: "var(--row-size)",
405
- gap: "var(--gap)",
406
- maxWidth: "var(--layout-content-width)"
407
- }
408
- },
409
- "@mobile": {
410
- padding: "0 16px",
411
- "> [data-layout-content]": {
412
- display: "flex",
413
- flexDirection: "column"
414
- }
415
- }
259
+ )
260
+ );
416
261
  };
417
- Layout.defaultProps = {
418
- contentSize: 1600,
419
- gridSize: 1224,
420
- rows: 16,
421
- columns: 12,
422
- gap: 16,
423
- rowSize: 48,
424
- objectFit: "cover",
425
- objectPosition: "center center",
426
- enableOverlay: false,
427
- overlayOpacity: 30
262
+ var CaretLeft = (props) => {
263
+ return /* @__PURE__ */ React2.createElement(
264
+ "svg",
265
+ {
266
+ xmlns: "http://www.w3.org/2000/svg",
267
+ width: "192",
268
+ height: "192",
269
+ fill: "currentColor",
270
+ viewBox: "0 0 256 256",
271
+ ...props
272
+ },
273
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
274
+ /* @__PURE__ */ React2.createElement(
275
+ "polyline",
276
+ {
277
+ points: "160 208 80 128 160 48",
278
+ fill: "none",
279
+ stroke: "currentColor",
280
+ strokeLinecap: "round",
281
+ strokeLinejoin: "round",
282
+ strokeWidth: "16"
283
+ }
284
+ )
285
+ );
428
286
  };
429
- var layout_default = Layout;
430
-
431
- // src/elements/map.tsx
432
- import React9, { forwardRef as forwardRef5 } from "react";
433
- var Map = forwardRef5((props, ref) => {
434
- let { place, zoom, ...rest } = props;
435
- return /* @__PURE__ */ React9.createElement("div", { ref, ...rest }, /* @__PURE__ */ React9.createElement(
436
- "iframe",
287
+ var CaretRight = (props) => {
288
+ return /* @__PURE__ */ React2.createElement(
289
+ "svg",
437
290
  {
438
- loading: "lazy",
439
- width: "100%",
440
- height: "100%",
441
- title: "map",
442
- src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
443
- style: { pointerEvents: "none" }
444
- }
445
- ));
446
- });
447
- var css6 = {
448
- "@desktop": {
449
- iframe: {
450
- border: "none"
451
- }
452
- },
453
- "@mobile": {
454
- iframe: {
455
- border: "none"
456
- }
457
- }
458
- };
459
- Map.defaultProps = {
460
- place: "Hanoi",
461
- zoom: 14
462
- };
463
- var map_default = Map;
464
-
465
- // src/elements/text.tsx
466
- import * as React10 from "react";
467
- var Text = React10.forwardRef(
468
- (props, ref) => {
469
- let { children, value, ...rest } = props;
470
- return /* @__PURE__ */ React10.createElement("div", { ref, ...rest }, /* @__PURE__ */ React10.createElement(
471
- "div",
291
+ xmlns: "http://www.w3.org/2000/svg",
292
+ width: "192",
293
+ height: "192",
294
+ fill: "currentColor",
295
+ viewBox: "0 0 256 256",
296
+ ...props
297
+ },
298
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
299
+ /* @__PURE__ */ React2.createElement(
300
+ "polyline",
472
301
  {
473
- className: "wv-text-content",
474
- dangerouslySetInnerHTML: { __html: value }
475
- }
476
- ));
477
- }
478
- );
479
- var css7 = {
480
- "@desktop": {
481
- display: "flex",
482
- padding: "10px",
483
- overflow: "hidden",
484
- ".wv-text-content": {
485
- width: "100%",
486
- height: "fit-content",
487
- "> p, > h1, > h2, > h3, > h4, > h5, > h6": {
488
- all: "inherit",
489
- margin: "0",
490
- wordBreak: "break-word",
491
- overflowWrap: "break-word",
492
- width: "auto",
493
- height: "auto"
494
- }
495
- }
496
- }
497
- };
498
- Text.defaultProps = {
499
- value: "<p>The quick brown fox jumps over the lazy dog</p>"
500
- };
501
- var text_default = Text;
502
-
503
- // src/elements/scrolling-text.tsx
504
- import React11 from "react";
505
- import { useState } from "react";
506
- var ScrollingText = React11.forwardRef((props, ref) => {
507
- let { children, value, gap, speed, pauseOnHover, ...rest } = props;
508
- let [playState, setPlayState] = useState("running");
509
- let style = {
510
- "--gap": `${gap}px`,
511
- "--speed": `${speed}s`,
512
- "--play-state": playState
513
- };
514
- let events = {};
515
- if (pauseOnHover) {
516
- events = {
517
- onMouseEnter: () => setPlayState("paused"),
518
- onMouseLeave: () => setPlayState("running")
519
- };
520
- }
521
- return /* @__PURE__ */ React11.createElement("div", { ref, ...rest }, /* @__PURE__ */ React11.createElement("div", { className: "wv-scrolling-text__container", style, ...events }, Array.from({ length: 30 }).map((_, i) => /* @__PURE__ */ React11.createElement(
522
- "div",
523
- {
524
- key: i,
525
- className: "wv-text-content",
526
- dangerouslySetInnerHTML: { __html: value }
527
- }
528
- ))));
529
- });
530
- var css8 = {
531
- "@desktop": {
532
- display: "flex",
533
- padding: "10px",
534
- overflow: "hidden",
535
- ".wv-scrolling-text__container": {
536
- visibility: "visible",
537
- whiteSpace: "nowrap",
538
- display: "flex",
539
- gap: "var(--gap, 40px)",
540
- animation: "wv-scrolling-text var(--speed, 100s) linear infinite",
541
- animationPlayState: "var(--play-state, running)",
542
- ".wv-text-content": {
543
- width: "100%",
544
- height: "fit-content",
545
- "> p, > h1, > h2, > h3, > h4, > h5, > h6": {
546
- all: "inherit",
547
- margin: "0",
548
- wordBreak: "break-word",
549
- overflowWrap: "break-word",
550
- width: "auto",
551
- height: "auto"
552
- }
302
+ points: "96 48 176 128 96 208",
303
+ fill: "none",
304
+ stroke: "currentColor",
305
+ strokeLinecap: "round",
306
+ strokeLinejoin: "round",
307
+ strokeWidth: "16"
553
308
  }
554
- }
555
- }
556
- };
557
- ScrollingText.defaultProps = {
558
- value: "<p>The quick brown fox jumps over the lazy dog</p>",
559
- gap: 40,
560
- speed: 200,
561
- pauseOnHover: true
562
- };
563
- var scrolling_text_default = ScrollingText;
564
-
565
- // src/elements/video/index.tsx
566
- import React15, { forwardRef as forwardRef7, useContext as useContext3 } from "react";
567
-
568
- // src/elements/video/html-video.tsx
569
- import React12 from "react";
570
- function HTMLVideo(props) {
571
- let { src, type, controls, autoPlay, loop, muted } = props;
572
- return /* @__PURE__ */ React12.createElement(
573
- "video",
574
- {
575
- controls,
576
- autoPlay,
577
- loop,
578
- muted,
579
- controlsList: "nodownload",
580
- disablePictureInPicture: true
581
- },
582
- /* @__PURE__ */ React12.createElement("source", { src, type: type || "video/mp4" }),
583
- /* @__PURE__ */ React12.createElement("source", { src, type: "video/ogg" }),
584
- "Your browser does not support the video tag."
309
+ )
585
310
  );
586
- }
587
-
588
- // src/elements/video/vimeo.tsx
589
- import React13 from "react";
590
- function Vimeo(props) {
591
- let { vimeoId, controls, autoPlay, loop, muted } = props;
592
- let params = `autoplay=${autoPlay}&loop=${loop}&controls=${controls}&muted=${muted}`;
593
- let vimeoSrc = `https://player.vimeo.com/video/${vimeoId}?${params}`;
594
- return /* @__PURE__ */ React13.createElement("iframe", { src: vimeoSrc, width: "100%", height: "100%", allowFullScreen: true });
595
- }
596
-
597
- // src/elements/video/youtube.tsx
598
- import React14 from "react";
599
- function Youtube(props) {
600
- let { youtubeId, controls, autoPlay, loop, muted } = props;
601
- let params = new URLSearchParams({
602
- autoplay: autoPlay ? "1" : "0",
603
- controls: controls ? "1" : "0",
604
- loop: loop ? "1" : "0",
605
- mute: muted ? "1" : "0"
606
- });
607
- let youtubeSrc = `https://www.youtube.com/embed/${youtubeId}?playlist=${youtubeId}&${params.toString()}`;
608
- let allow = `accelerometer;${autoPlay ? "autoplay;" : ""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`;
609
- return /* @__PURE__ */ React14.createElement("iframe", { src: youtubeSrc, width: "100%", height: "100%", allow });
610
- }
611
-
612
- // src/elements/video/index.tsx
613
- var Video = forwardRef7((props, ref) => {
614
- let { isDesignMode } = useContext3(WeaverseContext);
615
- let {
616
- src,
617
- controls,
618
- poster,
619
- autoPlay: originAutoPlay,
620
- loop,
621
- muted,
622
- ...rest
623
- } = props;
624
- let autoPlay = !isDesignMode && originAutoPlay;
625
- let videoProps = { src, controls, poster, autoPlay, loop, muted };
626
- let content;
627
- let youtubeId = getYoutubeEmbedId(src);
628
- let vimeoId = getVimeoId(src);
629
- if (youtubeId) {
630
- content = /* @__PURE__ */ React15.createElement(Youtube, { ...videoProps, youtubeId });
631
- } else if (vimeoId) {
632
- content = /* @__PURE__ */ React15.createElement(Vimeo, { ...videoProps, vimeoId });
633
- } else {
634
- content = /* @__PURE__ */ React15.createElement(HTMLVideo, { ...videoProps });
635
- }
636
- return /* @__PURE__ */ React15.createElement("div", { ref, ...rest }, content);
637
- });
638
- var css9 = {
639
- "@desktop": {
640
- video: {
641
- height: "100%",
642
- width: "100%",
643
- aspectRatio: "16 / 9"
644
- },
645
- iframe: {
646
- border: "none"
647
- }
648
- },
649
- "@mobile": {
650
- iframe: {
651
- border: "none"
652
- }
653
- }
654
- };
655
- Video.defaultProps = {
656
- src: "https://youtu.be/wM-NT6hcw48",
657
- poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
658
- loop: false,
659
- controls: false,
660
- autoPlay: true,
661
- muted: true
662
311
  };
663
- var video_default = Video;
664
-
665
- // src/elements/instagram.tsx
666
- import React26, { forwardRef as forwardRef10, useEffect as useEffect3, useState as useState4 } from "react";
667
-
668
- // src/components/modal/index.tsx
669
- var modal_exports = {};
670
- __export(modal_exports, {
671
- Modal: () => Modal,
672
- ModalClose: () => ModalClose,
673
- ModalContent: () => ModalContent,
674
- ModalHeader: () => ModalHeader,
675
- ModalTrigger: () => ModalTrigger
676
- });
677
- import { Close, Portal, Root, Trigger } from "@radix-ui/react-dialog";
678
- import React18, { forwardRef as forwardRef8 } from "react";
679
-
680
- // src/components/icons/index.tsx
681
- import React17 from "react";
682
-
683
- // src/components/icons/phosphor.tsx
684
- var phosphor_exports = {};
685
- __export(phosphor_exports, {
686
- ArrowLeft: () => ArrowLeft,
687
- ArrowRight: () => ArrowRight,
688
- Backpack: () => Backpack,
689
- CaretLeft: () => CaretLeft,
690
- CaretRight: () => CaretRight,
691
- Circle: () => Circle,
692
- CircleNotch: () => CircleNotch,
693
- Eye: () => Eye,
694
- HandBag: () => HandBag,
695
- Image: () => Image2,
696
- Minus: () => Minus,
697
- Newspaper: () => Newspaper,
698
- Package: () => Package,
699
- Plus: () => Plus,
700
- ShoppingCart: () => ShoppingCart,
701
- Storefront: () => Storefront,
702
- Tag: () => Tag,
703
- X: () => X
704
- });
705
- import React16 from "react";
706
- var Circle = (props) => {
707
- return /* @__PURE__ */ React16.createElement(
312
+ var ArrowLeft = (props) => {
313
+ return /* @__PURE__ */ React2.createElement(
708
314
  "svg",
709
315
  {
710
316
  xmlns: "http://www.w3.org/2000/svg",
@@ -714,215 +320,8 @@ var Circle = (props) => {
714
320
  viewBox: "0 0 256 256",
715
321
  ...props
716
322
  },
717
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
718
- /* @__PURE__ */ React16.createElement("circle", { cx: "128", cy: "128", r: "104" })
719
- );
720
- };
721
- var CircleNotch = (props) => {
722
- return /* @__PURE__ */ React16.createElement(
723
- "svg",
724
- {
725
- xmlns: "http://www.w3.org/2000/svg",
726
- fill: "none",
727
- viewBox: "0 0 24 24",
728
- ...props
729
- },
730
- /* @__PURE__ */ React16.createElement(
731
- "circle",
732
- {
733
- style: { opacity: ".25" },
734
- cx: "12",
735
- cy: "12",
736
- r: "10",
737
- stroke: "currentColor",
738
- strokeWidth: "4"
739
- }
740
- ),
741
- /* @__PURE__ */ React16.createElement(
742
- "path",
743
- {
744
- style: { opacity: ".75" },
745
- fill: "currentColor",
746
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
747
- }
748
- )
749
- );
750
- };
751
- var X = (props) => {
752
- return /* @__PURE__ */ React16.createElement(
753
- "svg",
754
- {
755
- xmlns: "http://www.w3.org/2000/svg",
756
- width: "20",
757
- height: "20",
758
- fill: "currentColor",
759
- viewBox: "0 0 256 256",
760
- ...props
761
- },
762
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
763
- /* @__PURE__ */ React16.createElement(
764
- "line",
765
- {
766
- x1: "200",
767
- y1: "56",
768
- x2: "56",
769
- y2: "200",
770
- fill: "none",
771
- stroke: "currentColor",
772
- strokeLinecap: "round",
773
- strokeLinejoin: "round",
774
- strokeWidth: "12"
775
- }
776
- ),
777
- /* @__PURE__ */ React16.createElement(
778
- "line",
779
- {
780
- x1: "200",
781
- y1: "200",
782
- x2: "56",
783
- y2: "56",
784
- fill: "none",
785
- stroke: "currentColor",
786
- strokeLinecap: "round",
787
- strokeLinejoin: "round",
788
- strokeWidth: "12"
789
- }
790
- )
791
- );
792
- };
793
- var Minus = (props) => {
794
- return /* @__PURE__ */ React16.createElement(
795
- "svg",
796
- {
797
- xmlns: "http://www.w3.org/2000/svg",
798
- width: "192",
799
- height: "192",
800
- fill: "currentColor",
801
- viewBox: "0 0 256 256",
802
- ...props
803
- },
804
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
805
- /* @__PURE__ */ React16.createElement(
806
- "line",
807
- {
808
- x1: "40",
809
- y1: "128",
810
- x2: "216",
811
- y2: "128",
812
- fill: "none",
813
- stroke: "currentColor",
814
- strokeLinecap: "round",
815
- strokeLinejoin: "round",
816
- strokeWidth: "16"
817
- }
818
- )
819
- );
820
- };
821
- var Plus = (props) => {
822
- return /* @__PURE__ */ React16.createElement(
823
- "svg",
824
- {
825
- xmlns: "http://www.w3.org/2000/svg",
826
- width: "192",
827
- height: "192",
828
- fill: "currentColor",
829
- viewBox: "0 0 256 256",
830
- ...props
831
- },
832
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
833
- /* @__PURE__ */ React16.createElement(
834
- "line",
835
- {
836
- x1: "40",
837
- y1: "128",
838
- x2: "216",
839
- y2: "128",
840
- fill: "none",
841
- stroke: "currentColor",
842
- strokeLinecap: "round",
843
- strokeLinejoin: "round",
844
- strokeWidth: "16"
845
- }
846
- ),
847
- /* @__PURE__ */ React16.createElement(
848
- "line",
849
- {
850
- x1: "128",
851
- y1: "40",
852
- x2: "128",
853
- y2: "216",
854
- fill: "none",
855
- stroke: "currentColor",
856
- strokeLinecap: "round",
857
- strokeLinejoin: "round",
858
- strokeWidth: "16"
859
- }
860
- )
861
- );
862
- };
863
- var CaretLeft = (props) => {
864
- return /* @__PURE__ */ React16.createElement(
865
- "svg",
866
- {
867
- xmlns: "http://www.w3.org/2000/svg",
868
- width: "192",
869
- height: "192",
870
- fill: "currentColor",
871
- viewBox: "0 0 256 256",
872
- ...props
873
- },
874
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
875
- /* @__PURE__ */ React16.createElement(
876
- "polyline",
877
- {
878
- points: "160 208 80 128 160 48",
879
- fill: "none",
880
- stroke: "currentColor",
881
- strokeLinecap: "round",
882
- strokeLinejoin: "round",
883
- strokeWidth: "16"
884
- }
885
- )
886
- );
887
- };
888
- var CaretRight = (props) => {
889
- return /* @__PURE__ */ React16.createElement(
890
- "svg",
891
- {
892
- xmlns: "http://www.w3.org/2000/svg",
893
- width: "192",
894
- height: "192",
895
- fill: "currentColor",
896
- viewBox: "0 0 256 256",
897
- ...props
898
- },
899
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
900
- /* @__PURE__ */ React16.createElement(
901
- "polyline",
902
- {
903
- points: "96 48 176 128 96 208",
904
- fill: "none",
905
- stroke: "currentColor",
906
- strokeLinecap: "round",
907
- strokeLinejoin: "round",
908
- strokeWidth: "16"
909
- }
910
- )
911
- );
912
- };
913
- var ArrowLeft = (props) => {
914
- return /* @__PURE__ */ React16.createElement(
915
- "svg",
916
- {
917
- xmlns: "http://www.w3.org/2000/svg",
918
- width: "192",
919
- height: "192",
920
- fill: "currentColor",
921
- viewBox: "0 0 256 256",
922
- ...props
923
- },
924
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
925
- /* @__PURE__ */ React16.createElement(
323
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
324
+ /* @__PURE__ */ React2.createElement(
926
325
  "line",
927
326
  {
928
327
  x1: "216",
@@ -936,7 +335,7 @@ var ArrowLeft = (props) => {
936
335
  strokeWidth: "16"
937
336
  }
938
337
  ),
939
- /* @__PURE__ */ React16.createElement(
338
+ /* @__PURE__ */ React2.createElement(
940
339
  "polyline",
941
340
  {
942
341
  points: "112 56 40 128 112 200",
@@ -950,7 +349,7 @@ var ArrowLeft = (props) => {
950
349
  );
951
350
  };
952
351
  var ArrowRight = (props) => {
953
- return /* @__PURE__ */ React16.createElement(
352
+ return /* @__PURE__ */ React2.createElement(
954
353
  "svg",
955
354
  {
956
355
  xmlns: "http://www.w3.org/2000/svg",
@@ -960,8 +359,8 @@ var ArrowRight = (props) => {
960
359
  viewBox: "0 0 256 256",
961
360
  ...props
962
361
  },
963
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
964
- /* @__PURE__ */ React16.createElement(
362
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
363
+ /* @__PURE__ */ React2.createElement(
965
364
  "line",
966
365
  {
967
366
  x1: "40",
@@ -975,7 +374,7 @@ var ArrowRight = (props) => {
975
374
  strokeWidth: "16"
976
375
  }
977
376
  ),
978
- /* @__PURE__ */ React16.createElement(
377
+ /* @__PURE__ */ React2.createElement(
979
378
  "polyline",
980
379
  {
981
380
  points: "144 56 216 128 144 200",
@@ -988,8 +387,8 @@ var ArrowRight = (props) => {
988
387
  )
989
388
  );
990
389
  };
991
- var Image2 = (props) => {
992
- return /* @__PURE__ */ React16.createElement(
390
+ var Image = (props) => {
391
+ return /* @__PURE__ */ React2.createElement(
993
392
  "svg",
994
393
  {
995
394
  xmlns: "http://www.w3.org/2000/svg",
@@ -998,11 +397,11 @@ var Image2 = (props) => {
998
397
  viewBox: "0 0 640 512",
999
398
  ...props
1000
399
  },
1001
- /* @__PURE__ */ React16.createElement("path", { d: "M480 80C480 35.82 515.8 0 560 0C604.2 0 640 35.82 640 80C640 124.2 604.2 160 560 160C515.8 160 480 124.2 480 80zM0 456.1C0 445.6 2.964 435.3 8.551 426.4L225.3 81.01C231.9 70.42 243.5 64 256 64C268.5 64 280.1 70.42 286.8 81.01L412.7 281.7L460.9 202.7C464.1 196.1 472.2 192 480 192C487.8 192 495 196.1 499.1 202.7L631.1 419.1C636.9 428.6 640 439.7 640 450.9C640 484.6 612.6 512 578.9 512H55.91C25.03 512 .0006 486.1 .0006 456.1L0 456.1z" })
400
+ /* @__PURE__ */ React2.createElement("path", { d: "M480 80C480 35.82 515.8 0 560 0C604.2 0 640 35.82 640 80C640 124.2 604.2 160 560 160C515.8 160 480 124.2 480 80zM0 456.1C0 445.6 2.964 435.3 8.551 426.4L225.3 81.01C231.9 70.42 243.5 64 256 64C268.5 64 280.1 70.42 286.8 81.01L412.7 281.7L460.9 202.7C464.1 196.1 472.2 192 480 192C487.8 192 495 196.1 499.1 202.7L631.1 419.1C636.9 428.6 640 439.7 640 450.9C640 484.6 612.6 512 578.9 512H55.91C25.03 512 .0006 486.1 .0006 456.1L0 456.1z" })
1002
401
  );
1003
402
  };
1004
403
  var ShoppingCart = (props) => {
1005
- return /* @__PURE__ */ React16.createElement(
404
+ return /* @__PURE__ */ React2.createElement(
1006
405
  "svg",
1007
406
  {
1008
407
  xmlns: "http://www.w3.org/2000/svg",
@@ -1012,8 +411,8 @@ var ShoppingCart = (props) => {
1012
411
  viewBox: "0 0 256 256",
1013
412
  ...props
1014
413
  },
1015
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1016
- /* @__PURE__ */ React16.createElement(
414
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
415
+ /* @__PURE__ */ React2.createElement(
1017
416
  "path",
1018
417
  {
1019
418
  d: "M184,184H69.8L41.9,30.6A8,8,0,0,0,34.1,24H16",
@@ -1024,7 +423,7 @@ var ShoppingCart = (props) => {
1024
423
  strokeWidth: "16"
1025
424
  }
1026
425
  ),
1027
- /* @__PURE__ */ React16.createElement(
426
+ /* @__PURE__ */ React2.createElement(
1028
427
  "circle",
1029
428
  {
1030
429
  cx: "80",
@@ -1037,7 +436,7 @@ var ShoppingCart = (props) => {
1037
436
  strokeWidth: "16"
1038
437
  }
1039
438
  ),
1040
- /* @__PURE__ */ React16.createElement(
439
+ /* @__PURE__ */ React2.createElement(
1041
440
  "circle",
1042
441
  {
1043
442
  cx: "184",
@@ -1050,7 +449,7 @@ var ShoppingCart = (props) => {
1050
449
  strokeWidth: "16"
1051
450
  }
1052
451
  ),
1053
- /* @__PURE__ */ React16.createElement(
452
+ /* @__PURE__ */ React2.createElement(
1054
453
  "path",
1055
454
  {
1056
455
  d: "M62.5,144H188.1a15.9,15.9,0,0,0,15.7-13.1L216,64H48",
@@ -1064,7 +463,7 @@ var ShoppingCart = (props) => {
1064
463
  );
1065
464
  };
1066
465
  var Storefront = (props) => {
1067
- return /* @__PURE__ */ React16.createElement(
466
+ return /* @__PURE__ */ React2.createElement(
1068
467
  "svg",
1069
468
  {
1070
469
  xmlns: "http://www.w3.org/2000/svg",
@@ -1074,8 +473,8 @@ var Storefront = (props) => {
1074
473
  viewBox: "0 0 256 256",
1075
474
  ...props
1076
475
  },
1077
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1078
- /* @__PURE__ */ React16.createElement(
476
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
477
+ /* @__PURE__ */ React2.createElement(
1079
478
  "path",
1080
479
  {
1081
480
  d: "M48,139.6V208a8,8,0,0,0,8,8H200a8,8,0,0,0,8-8V139.6",
@@ -1086,7 +485,7 @@ var Storefront = (props) => {
1086
485
  strokeWidth: "12"
1087
486
  }
1088
487
  ),
1089
- /* @__PURE__ */ React16.createElement(
488
+ /* @__PURE__ */ React2.createElement(
1090
489
  "path",
1091
490
  {
1092
491
  d: "M54,40H202a8.1,8.1,0,0,1,7.7,5.8L224,96H32L46.3,45.8A8.1,8.1,0,0,1,54,40Z",
@@ -1097,7 +496,7 @@ var Storefront = (props) => {
1097
496
  strokeWidth: "12"
1098
497
  }
1099
498
  ),
1100
- /* @__PURE__ */ React16.createElement(
499
+ /* @__PURE__ */ React2.createElement(
1101
500
  "path",
1102
501
  {
1103
502
  d: "M96,96v16a32,32,0,0,1-64,0V96",
@@ -1108,7 +507,7 @@ var Storefront = (props) => {
1108
507
  strokeWidth: "12"
1109
508
  }
1110
509
  ),
1111
- /* @__PURE__ */ React16.createElement(
510
+ /* @__PURE__ */ React2.createElement(
1112
511
  "path",
1113
512
  {
1114
513
  d: "M160,96v16a32,32,0,0,1-64,0V96",
@@ -1119,7 +518,7 @@ var Storefront = (props) => {
1119
518
  strokeWidth: "12"
1120
519
  }
1121
520
  ),
1122
- /* @__PURE__ */ React16.createElement(
521
+ /* @__PURE__ */ React2.createElement(
1123
522
  "path",
1124
523
  {
1125
524
  d: "M224,96v16a32,32,0,0,1-64,0V96",
@@ -1133,7 +532,7 @@ var Storefront = (props) => {
1133
532
  );
1134
533
  };
1135
534
  var Package = (props) => {
1136
- return /* @__PURE__ */ React16.createElement(
535
+ return /* @__PURE__ */ React2.createElement(
1137
536
  "svg",
1138
537
  {
1139
538
  xmlns: "http://www.w3.org/2000/svg",
@@ -1143,8 +542,8 @@ var Package = (props) => {
1143
542
  viewBox: "0 0 256 256",
1144
543
  ...props
1145
544
  },
1146
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1147
- /* @__PURE__ */ React16.createElement(
545
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
546
+ /* @__PURE__ */ React2.createElement(
1148
547
  "path",
1149
548
  {
1150
549
  d: "M224,177.3V78.7a8.1,8.1,0,0,0-4.1-7l-88-49.5a7.8,7.8,0,0,0-7.8,0l-88,49.5a8.1,8.1,0,0,0-4.1,7v98.6a8.1,8.1,0,0,0,4.1,7l88,49.5a7.8,7.8,0,0,0,7.8,0l88-49.5A8.1,8.1,0,0,0,224,177.3Z",
@@ -1155,7 +554,7 @@ var Package = (props) => {
1155
554
  strokeWidth: "8"
1156
555
  }
1157
556
  ),
1158
- /* @__PURE__ */ React16.createElement(
557
+ /* @__PURE__ */ React2.createElement(
1159
558
  "polyline",
1160
559
  {
1161
560
  points: "177 152.5 177 100.5 80 47",
@@ -1166,7 +565,7 @@ var Package = (props) => {
1166
565
  strokeWidth: "8"
1167
566
  }
1168
567
  ),
1169
- /* @__PURE__ */ React16.createElement(
568
+ /* @__PURE__ */ React2.createElement(
1170
569
  "polyline",
1171
570
  {
1172
571
  points: "222.9 74.6 128.9 128 33.1 74.6",
@@ -1177,7 +576,7 @@ var Package = (props) => {
1177
576
  strokeWidth: "8"
1178
577
  }
1179
578
  ),
1180
- /* @__PURE__ */ React16.createElement(
579
+ /* @__PURE__ */ React2.createElement(
1181
580
  "line",
1182
581
  {
1183
582
  x1: "128.9",
@@ -1194,7 +593,7 @@ var Package = (props) => {
1194
593
  );
1195
594
  };
1196
595
  var HandBag = (props) => {
1197
- return /* @__PURE__ */ React16.createElement(
596
+ return /* @__PURE__ */ React2.createElement(
1198
597
  "svg",
1199
598
  {
1200
599
  xmlns: "http://www.w3.org/2000/svg",
@@ -1204,8 +603,8 @@ var HandBag = (props) => {
1204
603
  viewBox: "0 0 256 256",
1205
604
  ...props
1206
605
  },
1207
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1208
- /* @__PURE__ */ React16.createElement(
606
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
607
+ /* @__PURE__ */ React2.createElement(
1209
608
  "path",
1210
609
  {
1211
610
  d: "M208.8,72H47.2a8.1,8.1,0,0,0-8,7.1L25,207.1a8,8,0,0,0,7.9,8.9H223.1a8,8,0,0,0,7.9-8.9l-14.2-128A8.1,8.1,0,0,0,208.8,72Z",
@@ -1216,7 +615,7 @@ var HandBag = (props) => {
1216
615
  strokeWidth: "16"
1217
616
  }
1218
617
  ),
1219
- /* @__PURE__ */ React16.createElement(
618
+ /* @__PURE__ */ React2.createElement(
1220
619
  "path",
1221
620
  {
1222
621
  d: "M88,104V72a40,40,0,0,1,80,0v32",
@@ -1230,7 +629,7 @@ var HandBag = (props) => {
1230
629
  );
1231
630
  };
1232
631
  var Tag = (props) => {
1233
- return /* @__PURE__ */ React16.createElement(
632
+ return /* @__PURE__ */ React2.createElement(
1234
633
  "svg",
1235
634
  {
1236
635
  xmlns: "http://www.w3.org/2000/svg",
@@ -1240,8 +639,8 @@ var Tag = (props) => {
1240
639
  viewBox: "0 0 256 256",
1241
640
  ...props
1242
641
  },
1243
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1244
- /* @__PURE__ */ React16.createElement(
642
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
643
+ /* @__PURE__ */ React2.createElement(
1245
644
  "path",
1246
645
  {
1247
646
  d: "M122.7,25.9,42,42,25.9,122.7a8,8,0,0,0,2.2,7.2L132.5,234.3a7.9,7.9,0,0,0,11.3,0l90.5-90.5a7.9,7.9,0,0,0,0-11.3L129.9,28.1A8,8,0,0,0,122.7,25.9Z",
@@ -1252,11 +651,11 @@ var Tag = (props) => {
1252
651
  strokeWidth: "16"
1253
652
  }
1254
653
  ),
1255
- /* @__PURE__ */ React16.createElement("circle", { cx: "84", cy: "84", r: "12" })
654
+ /* @__PURE__ */ React2.createElement("circle", { cx: "84", cy: "84", r: "12" })
1256
655
  );
1257
656
  };
1258
657
  var Backpack = (props) => {
1259
- return /* @__PURE__ */ React16.createElement(
658
+ return /* @__PURE__ */ React2.createElement(
1260
659
  "svg",
1261
660
  {
1262
661
  xmlns: "http://www.w3.org/2000/svg",
@@ -1266,8 +665,8 @@ var Backpack = (props) => {
1266
665
  viewBox: "0 0 256 256",
1267
666
  ...props
1268
667
  },
1269
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1270
- /* @__PURE__ */ React16.createElement(
668
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
669
+ /* @__PURE__ */ React2.createElement(
1271
670
  "path",
1272
671
  {
1273
672
  d: "M96,48h64a48,48,0,0,1,48,48V216a8,8,0,0,1-8,8H56a8,8,0,0,1-8-8V96A48,48,0,0,1,96,48Z",
@@ -1278,7 +677,7 @@ var Backpack = (props) => {
1278
677
  strokeWidth: "12"
1279
678
  }
1280
679
  ),
1281
- /* @__PURE__ */ React16.createElement(
680
+ /* @__PURE__ */ React2.createElement(
1282
681
  "path",
1283
682
  {
1284
683
  d: "M80,224V152a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v72",
@@ -1289,7 +688,7 @@ var Backpack = (props) => {
1289
688
  strokeWidth: "12"
1290
689
  }
1291
690
  ),
1292
- /* @__PURE__ */ React16.createElement(
691
+ /* @__PURE__ */ React2.createElement(
1293
692
  "path",
1294
693
  {
1295
694
  d: "M96,48V32a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V48",
@@ -1300,7 +699,7 @@ var Backpack = (props) => {
1300
699
  strokeWidth: "12"
1301
700
  }
1302
701
  ),
1303
- /* @__PURE__ */ React16.createElement(
702
+ /* @__PURE__ */ React2.createElement(
1304
703
  "line",
1305
704
  {
1306
705
  x1: "112",
@@ -1314,7 +713,7 @@ var Backpack = (props) => {
1314
713
  strokeWidth: "12"
1315
714
  }
1316
715
  ),
1317
- /* @__PURE__ */ React16.createElement(
716
+ /* @__PURE__ */ React2.createElement(
1318
717
  "line",
1319
718
  {
1320
719
  x1: "80",
@@ -1328,7 +727,7 @@ var Backpack = (props) => {
1328
727
  strokeWidth: "12"
1329
728
  }
1330
729
  ),
1331
- /* @__PURE__ */ React16.createElement(
730
+ /* @__PURE__ */ React2.createElement(
1332
731
  "line",
1333
732
  {
1334
733
  x1: "144",
@@ -1345,7 +744,7 @@ var Backpack = (props) => {
1345
744
  );
1346
745
  };
1347
746
  var Newspaper = (props) => {
1348
- return /* @__PURE__ */ React16.createElement(
747
+ return /* @__PURE__ */ React2.createElement(
1349
748
  "svg",
1350
749
  {
1351
750
  xmlns: "http://www.w3.org/2000/svg",
@@ -1355,8 +754,8 @@ var Newspaper = (props) => {
1355
754
  viewBox: "0 0 256 256",
1356
755
  ...props
1357
756
  },
1358
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1359
- /* @__PURE__ */ React16.createElement(
757
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
758
+ /* @__PURE__ */ React2.createElement(
1360
759
  "line",
1361
760
  {
1362
761
  x1: "96",
@@ -1370,7 +769,7 @@ var Newspaper = (props) => {
1370
769
  strokeWidth: "8"
1371
770
  }
1372
771
  ),
1373
- /* @__PURE__ */ React16.createElement(
772
+ /* @__PURE__ */ React2.createElement(
1374
773
  "line",
1375
774
  {
1376
775
  x1: "96",
@@ -1384,7 +783,7 @@ var Newspaper = (props) => {
1384
783
  strokeWidth: "8"
1385
784
  }
1386
785
  ),
1387
- /* @__PURE__ */ React16.createElement(
786
+ /* @__PURE__ */ React2.createElement(
1388
787
  "path",
1389
788
  {
1390
789
  d: "M32,200a16,16,0,0,0,16-16V64a8,8,0,0,1,8-8H216a8,8,0,0,1,8,8V184a16,16,0,0,1-16,16Z",
@@ -1395,7 +794,7 @@ var Newspaper = (props) => {
1395
794
  strokeWidth: "8"
1396
795
  }
1397
796
  ),
1398
- /* @__PURE__ */ React16.createElement(
797
+ /* @__PURE__ */ React2.createElement(
1399
798
  "path",
1400
799
  {
1401
800
  d: "M32,200a16,16,0,0,1-16-16h0V88",
@@ -1409,7 +808,7 @@ var Newspaper = (props) => {
1409
808
  );
1410
809
  };
1411
810
  var Eye = (props) => {
1412
- return /* @__PURE__ */ React16.createElement(
811
+ return /* @__PURE__ */ React2.createElement(
1413
812
  "svg",
1414
813
  {
1415
814
  xmlns: "http://www.w3.org/2000/svg",
@@ -1419,8 +818,8 @@ var Eye = (props) => {
1419
818
  viewBox: "0 0 256 256",
1420
819
  ...props
1421
820
  },
1422
- /* @__PURE__ */ React16.createElement("rect", { width: "256", height: "256", fill: "none" }),
1423
- /* @__PURE__ */ React16.createElement(
821
+ /* @__PURE__ */ React2.createElement("rect", { width: "256", height: "256", fill: "none" }),
822
+ /* @__PURE__ */ React2.createElement(
1424
823
  "path",
1425
824
  {
1426
825
  d: "M128,56C48,56,16,128,16,128s32,72,112,72,112-72,112-72S208,56,128,56Z",
@@ -1431,515 +830,1114 @@ var Eye = (props) => {
1431
830
  strokeWidth: "12"
1432
831
  }
1433
832
  ),
1434
- /* @__PURE__ */ React16.createElement(
833
+ /* @__PURE__ */ React2.createElement(
1435
834
  "circle",
1436
835
  {
1437
- cx: "128",
1438
- cy: "128",
1439
- r: "40",
1440
- fill: "none",
1441
- stroke: "currentColor",
1442
- strokeLinecap: "round",
1443
- strokeLinejoin: "round",
1444
- strokeWidth: "12"
836
+ cx: "128",
837
+ cy: "128",
838
+ r: "40",
839
+ fill: "none",
840
+ stroke: "currentColor",
841
+ strokeLinecap: "round",
842
+ strokeLinejoin: "round",
843
+ strokeWidth: "12"
844
+ }
845
+ )
846
+ );
847
+ };
848
+
849
+ // src/components/icons/index.tsx
850
+ import clsx from "clsx";
851
+ function Icon({ name, className, ...props }) {
852
+ let WeaverseIcon = phosphor_exports[name];
853
+ let cls = clsx("wv-icon", className);
854
+ return /* @__PURE__ */ React3.createElement(WeaverseIcon, { className: cls, ...props });
855
+ }
856
+
857
+ // src/components/modal/styled.ts
858
+ import { Content, Overlay, Title } from "@radix-ui/react-dialog";
859
+ import { keyframes, styled } from "@stitches/react";
860
+ var overlayShow = keyframes({
861
+ "0%": { opacity: 0 },
862
+ "100%": { opacity: 1 }
863
+ });
864
+ var contentShow = keyframes({
865
+ "0%": { opacity: 0, transform: "translate(-50%, -48%) scale(.96)" },
866
+ "100%": { opacity: 1, transform: "translate(-50%, -50%) scale(1)" }
867
+ });
868
+ var StyledOverlay = styled(Overlay, {
869
+ display: "block !important",
870
+ backgroundColor: "rgba(0, 0, 0, .3)",
871
+ position: "fixed",
872
+ zIndex: 99999,
873
+ inset: 0,
874
+ animation: `${overlayShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`
875
+ });
876
+ var StyledTitle = styled(Title, {
877
+ margin: "0 0 24px",
878
+ fontWeight: 500,
879
+ fontSize: 24,
880
+ "@media (max-width: 768px)": {
881
+ margin: "0 0 16px",
882
+ fontSize: 20
883
+ }
884
+ });
885
+ var StyledContent = styled(Content, {
886
+ backgroundColor: "white",
887
+ borderRadius: 6,
888
+ boxShadow: "hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",
889
+ position: "fixed",
890
+ top: "50%",
891
+ left: "50%",
892
+ transform: "translate(-50%, -50%)",
893
+ padding: 24,
894
+ animation: `${contentShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,
895
+ zIndex: 99999,
896
+ maxWidth: "90vw",
897
+ width: "auto",
898
+ "*": {
899
+ maxWidth: "100%"
900
+ },
901
+ "&:focus": { outline: "none" },
902
+ '&[data-size="fullscreen"]': {
903
+ width: "100vw",
904
+ height: "100vh",
905
+ maxWidth: "100vw",
906
+ borderRadius: 0
907
+ },
908
+ "@media (max-width: 768px)": {
909
+ width: "90vw",
910
+ padding: 12,
911
+ '&[data-size="fullscreen"]': {
912
+ width: "100vw"
913
+ }
914
+ }
915
+ });
916
+ var StyledCloseIcon = styled("button", {
917
+ all: "unset",
918
+ cursor: "pointer",
919
+ fontFamily: "inherit",
920
+ borderRadius: "100%",
921
+ height: 32,
922
+ width: 32,
923
+ padding: 4,
924
+ display: "inline-flex",
925
+ alignItems: "center",
926
+ justifyContent: "center",
927
+ color: "rgb(55, 65, 81)",
928
+ position: "absolute",
929
+ top: 8,
930
+ right: 8,
931
+ "&:hover": {
932
+ backgroundColor: "rgba(112, 112, 112, .1)"
933
+ },
934
+ svg: {
935
+ width: 24,
936
+ height: 24
937
+ }
938
+ });
939
+
940
+ // src/components/modal/use-open-change-effect.ts
941
+ import { useContext as useContext2, useEffect } from "react";
942
+ function useOpenChangeEffect(props) {
943
+ let { open, defaultOpen, onOpenChange } = props;
944
+ let rootCtx = useContext2(WeaverseContext);
945
+ let toggleRootzIndex = (open2) => {
946
+ let { contentRootElement } = rootCtx;
947
+ if (contentRootElement) {
948
+ if (open2) {
949
+ contentRootElement.classList.add("modal-open");
950
+ } else {
951
+ contentRootElement.classList.remove("modal-open");
952
+ }
953
+ }
954
+ };
955
+ useEffect(() => {
956
+ let isOpen = open || defaultOpen;
957
+ toggleRootzIndex(isOpen);
958
+ }, [open, defaultOpen]);
959
+ let handleOpenChange = (open2) => {
960
+ toggleRootzIndex(open2);
961
+ onOpenChange?.(open2);
962
+ };
963
+ return handleOpenChange;
964
+ }
965
+
966
+ // src/components/modal/index.tsx
967
+ var Modal = (props) => {
968
+ let { children, open, defaultOpen, onOpenChange, ...rest } = props;
969
+ let handleOpenChange = useOpenChangeEffect(props);
970
+ return /* @__PURE__ */ React4.createElement(
971
+ Root,
972
+ {
973
+ open,
974
+ defaultOpen,
975
+ onOpenChange: handleOpenChange,
976
+ ...rest
977
+ },
978
+ children
979
+ );
980
+ };
981
+ var ModalTrigger = Trigger;
982
+ var ModalHeader = forwardRef2(
983
+ (props, ref) => {
984
+ let { children, ...rest } = props;
985
+ return /* @__PURE__ */ React4.createElement(StyledTitle, { ref, ...rest, "data-wv-modal-header": true }, children);
986
+ }
987
+ );
988
+ var ModalContent = forwardRef2(
989
+ (props, ref) => {
990
+ let { children, size, portal, ...rest } = props;
991
+ let modalContent = /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(StyledOverlay, null), /* @__PURE__ */ React4.createElement(
992
+ StyledContent,
993
+ {
994
+ ...rest,
995
+ onCloseAutoFocus: (e) => e.preventDefault(),
996
+ "data-wv-modal": true,
997
+ "data-size": size,
998
+ ref
999
+ },
1000
+ /* @__PURE__ */ React4.createElement(ModalClose, null),
1001
+ /* @__PURE__ */ React4.createElement("div", { className: "wv-modal-content" }, children)
1002
+ ));
1003
+ if (portal) {
1004
+ return /* @__PURE__ */ React4.createElement(Portal, null, modalContent);
1005
+ }
1006
+ return modalContent;
1007
+ }
1008
+ );
1009
+ ModalContent.defaultProps = {
1010
+ size: "auto",
1011
+ portal: false
1012
+ };
1013
+ var ModalClose = forwardRef2(
1014
+ (props, ref) => {
1015
+ let { asChild, children, ...rest } = props;
1016
+ let closeIcon = /* @__PURE__ */ React4.createElement(StyledCloseIcon, null, /* @__PURE__ */ React4.createElement(Icon, { name: "X" }));
1017
+ return /* @__PURE__ */ React4.createElement(Close, { asChild: true, ...rest, ref }, asChild ? children : closeIcon);
1018
+ }
1019
+ );
1020
+
1021
+ // src/components/spinner.tsx
1022
+ import React5 from "react";
1023
+ function Spinner() {
1024
+ return /* @__PURE__ */ React5.createElement("span", { className: "wv-spinner-wrapper" }, /* @__PURE__ */ React5.createElement(Icon, { name: "CircleNotch", className: "wv-spinner" }));
1025
+ }
1026
+
1027
+ // src/components/tooltip.tsx
1028
+ import React6 from "react";
1029
+ function Tooltip({ children }) {
1030
+ return /* @__PURE__ */ React6.createElement("span", { className: "wv-tooltip" }, children);
1031
+ }
1032
+
1033
+ // src/components/slider/index.tsx
1034
+ import clsx3 from "clsx";
1035
+ import { useKeenSlider } from "keen-slider/react";
1036
+ import React8, { useState } from "react";
1037
+
1038
+ // src/components/slider/arrows.tsx
1039
+ import { styled as styled2 } from "@stitches/react";
1040
+ import clsx2 from "clsx";
1041
+ import React7 from "react";
1042
+ function Arrows(props) {
1043
+ let { currentSlide, instanceRef, className, icon, offset } = props;
1044
+ let isFirst = currentSlide === 0;
1045
+ let isLast = false;
1046
+ if (instanceRef.current) {
1047
+ isLast = currentSlide === instanceRef?.current?.track?.details?.maxIdx;
1048
+ }
1049
+ let style = {
1050
+ "--offset": `${offset}px`
1051
+ };
1052
+ return /* @__PURE__ */ React7.createElement(StyledArrows, { className, style }, /* @__PURE__ */ React7.createElement(
1053
+ "button",
1054
+ {
1055
+ type: "button",
1056
+ className: clsx2("arrow arrow--left", isFirst && "arrow--disabled"),
1057
+ onClick: (e) => {
1058
+ e.stopPropagation();
1059
+ instanceRef?.current?.prev();
1060
+ }
1061
+ },
1062
+ /* @__PURE__ */ React7.createElement(Icon, { name: icon === "caret" ? "CaretLeft" : "ArrowLeft" })
1063
+ ), /* @__PURE__ */ React7.createElement(
1064
+ "button",
1065
+ {
1066
+ type: "button",
1067
+ className: clsx2("arrow arrow--right", isLast && "arrow--disabled"),
1068
+ onClick: (e) => {
1069
+ e.stopPropagation();
1070
+ instanceRef?.current?.next();
1071
+ }
1072
+ },
1073
+ /* @__PURE__ */ React7.createElement(Icon, { name: icon === "caret" ? "CaretRight" : "ArrowRight" })
1074
+ ));
1075
+ }
1076
+ var StyledArrows = styled2("div", {
1077
+ ".arrow": {
1078
+ position: "absolute",
1079
+ top: "50%",
1080
+ transform: "translateY(-50%)",
1081
+ width: "44px",
1082
+ height: "44px",
1083
+ padding: "8px",
1084
+ color: "#191919",
1085
+ backgroundColor: "#f2f2f2",
1086
+ textAlign: "center",
1087
+ transition: "all 0.2s ease-in-out",
1088
+ borderRadius: "4px",
1089
+ border: "none",
1090
+ cursor: "pointer",
1091
+ "&:hover": {
1092
+ backgroundColor: "#191919",
1093
+ color: "#f2f2f2"
1094
+ },
1095
+ svg: {
1096
+ verticalAlign: "middle",
1097
+ width: "22px",
1098
+ height: "22px"
1099
+ },
1100
+ "&.arrow--left": {
1101
+ left: "var(--offset, 0px)"
1102
+ },
1103
+ "&.arrow--right": {
1104
+ right: "var(--offset, 0px)"
1105
+ },
1106
+ "&.arrow--disabled": {
1107
+ opacity: 0.5
1108
+ }
1109
+ },
1110
+ "@media (max-width: 768px)": {
1111
+ ".arrow": {
1112
+ display: "none"
1113
+ }
1114
+ }
1115
+ });
1116
+
1117
+ // src/components/slider/resize-plugin.ts
1118
+ var ResizePlugin = (slider) => {
1119
+ let observer = new ResizeObserver(() => slider.update());
1120
+ slider.on("created", () => {
1121
+ observer.observe(slider.container);
1122
+ });
1123
+ slider.on("destroyed", () => {
1124
+ observer.unobserve(slider.container);
1125
+ });
1126
+ };
1127
+
1128
+ // src/components/slider/index.tsx
1129
+ function Slider(props) {
1130
+ let { children, className, gap, slidesPerView, arrowOffset } = props;
1131
+ let [currentSlide, setCurrentSlide] = useState(0);
1132
+ let [created, setCreated] = useState(false);
1133
+ let [ref, instanceRef] = useKeenSlider(
1134
+ {
1135
+ slides: { perView: slidesPerView, spacing: gap },
1136
+ breakpoints: {
1137
+ "(max-width: 1024px)": {
1138
+ slides: { perView: 3, spacing: gap }
1139
+ },
1140
+ "(max-width: 768px)": {
1141
+ slides: {
1142
+ perView: 1,
1143
+ spacing: 32
1144
+ }
1145
+ }
1146
+ },
1147
+ created: () => {
1148
+ setCreated(true);
1149
+ },
1150
+ slideChanged: (slider) => {
1151
+ setCurrentSlide(slider.track.details.rel);
1152
+ }
1153
+ },
1154
+ [ResizePlugin]
1155
+ );
1156
+ let _className = clsx3("keen-slider", className);
1157
+ let arrowsClass = clsx3(className && `${className}-arrows`);
1158
+ return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("div", { ref, className: _className }, /* @__PURE__ */ React8.createElement(
1159
+ "link",
1160
+ {
1161
+ rel: "stylesheet",
1162
+ href: "https://cdn.jsdelivr.net/npm/keen-slider@latest/keen-slider.min.css"
1163
+ }
1164
+ ), children), created && instanceRef?.current && /* @__PURE__ */ React8.createElement(
1165
+ Arrows,
1166
+ {
1167
+ currentSlide,
1168
+ instanceRef,
1169
+ className: arrowsClass,
1170
+ offset: arrowOffset,
1171
+ icon: "arrow"
1172
+ }
1173
+ ));
1174
+ }
1175
+
1176
+ // src/components/background.tsx
1177
+ import React9 from "react";
1178
+ function Background(props) {
1179
+ let {
1180
+ backgroundColor,
1181
+ backgroundImage,
1182
+ backgroundFit,
1183
+ backgroundPosition,
1184
+ className
1185
+ } = props;
1186
+ let style = {
1187
+ display: "block",
1188
+ position: "absolute",
1189
+ inset: 0,
1190
+ backgroundColor
1191
+ };
1192
+ if (backgroundImage || backgroundColor) {
1193
+ return /* @__PURE__ */ React9.createElement("div", { style, className }, backgroundImage && /* @__PURE__ */ React9.createElement(
1194
+ "img",
1195
+ {
1196
+ width: "100%",
1197
+ height: "100%",
1198
+ "data-blink-src": backgroundImage,
1199
+ alt: "Background",
1200
+ style: {
1201
+ objectFit: backgroundFit,
1202
+ objectPosition: backgroundPosition
1203
+ }
1445
1204
  }
1446
- )
1447
- );
1448
- };
1449
-
1450
- // src/components/icons/index.tsx
1451
- import clsx from "clsx";
1452
- function Icon({ name, className, ...props }) {
1453
- let WeaverseIcon = phosphor_exports[name];
1454
- let cls = clsx("wv-icon", className);
1455
- return /* @__PURE__ */ React17.createElement(WeaverseIcon, { className: cls, ...props });
1205
+ ));
1206
+ }
1207
+ return null;
1456
1208
  }
1457
1209
 
1458
- // src/components/modal/styled.ts
1459
- import { Content, Overlay as Overlay2, Title } from "@radix-ui/react-dialog";
1460
- import { keyframes, styled } from "@stitches/react";
1461
- var overlayShow = keyframes({
1462
- "0%": { opacity: 0 },
1463
- "100%": { opacity: 1 }
1464
- });
1465
- var contentShow = keyframes({
1466
- "0%": { opacity: 0, transform: "translate(-50%, -48%) scale(.96)" },
1467
- "100%": { opacity: 1, transform: "translate(-50%, -50%) scale(1)" }
1468
- });
1469
- var StyledOverlay = styled(Overlay2, {
1470
- display: "block !important",
1471
- backgroundColor: "rgba(0, 0, 0, .3)",
1472
- position: "fixed",
1473
- zIndex: 99999,
1474
- inset: 0,
1475
- animation: `${overlayShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`
1476
- });
1477
- var StyledTitle = styled(Title, {
1478
- margin: "0 0 24px",
1479
- fontWeight: 500,
1480
- fontSize: 24,
1481
- "@media (max-width: 768px)": {
1482
- margin: "0 0 16px",
1483
- fontSize: 20
1210
+ // src/components/overlay.tsx
1211
+ import React10 from "react";
1212
+ function Overlay2(props) {
1213
+ let { enableOverlay, overlayOpacity, className } = props;
1214
+ if (enableOverlay) {
1215
+ return /* @__PURE__ */ React10.createElement(
1216
+ "div",
1217
+ {
1218
+ className,
1219
+ style: {
1220
+ position: "absolute",
1221
+ inset: 0,
1222
+ display: "block",
1223
+ backgroundColor: `rgba(0, 0, 0, ${overlayOpacity / 100})`
1224
+ }
1225
+ }
1226
+ );
1484
1227
  }
1485
- });
1486
- var StyledContent = styled(Content, {
1487
- backgroundColor: "white",
1488
- borderRadius: 6,
1489
- boxShadow: "hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",
1490
- position: "fixed",
1491
- top: "50%",
1492
- left: "50%",
1493
- transform: "translate(-50%, -50%)",
1494
- padding: 24,
1495
- animation: `${contentShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,
1496
- zIndex: 99999,
1497
- maxWidth: "90vw",
1498
- width: "auto",
1499
- "*": {
1500
- maxWidth: "100%"
1228
+ return null;
1229
+ }
1230
+
1231
+ // src/components/slider/dots.tsx
1232
+ import { styled as styled3 } from "@stitches/react";
1233
+ import clsx4 from "clsx";
1234
+ import React11 from "react";
1235
+ function Dots(props) {
1236
+ let { currentSlide, instanceRef, className, absolute, position, color } = props;
1237
+ let _className = clsx4(
1238
+ className,
1239
+ absolute && "dots--absolute",
1240
+ position && `dots--${position}`,
1241
+ color && `dots--${color}`
1242
+ );
1243
+ return /* @__PURE__ */ React11.createElement(StyledDots, { className: _className }, [...Array(instanceRef.current?.track.details.slides.length).keys()].map(
1244
+ (idx) => {
1245
+ let className2 = clsx4("dot", currentSlide === idx && "dot--active");
1246
+ return /* @__PURE__ */ React11.createElement(
1247
+ "button",
1248
+ {
1249
+ key: idx,
1250
+ type: "button",
1251
+ onClick: () => instanceRef.current?.moveToIdx(idx),
1252
+ className: className2
1253
+ }
1254
+ );
1255
+ }
1256
+ ));
1257
+ }
1258
+ var StyledDots = styled3("div", {
1259
+ padding: "10px 0",
1260
+ display: "flex",
1261
+ justifyContent: "center",
1262
+ alignItems: "center",
1263
+ gap: "12px",
1264
+ "&.dots--absolute": {
1265
+ position: "absolute",
1266
+ "&.dots--top, &.dots--bottom": { left: 0, right: 0 },
1267
+ "&.dots--top": { top: 10 },
1268
+ "&.dots--bottom": { bottom: 10 },
1269
+ "&.dots--left, &.dots--right": {
1270
+ top: 0,
1271
+ bottom: 0,
1272
+ flexDirection: "column"
1273
+ },
1274
+ "&.dots--left": { left: 20 },
1275
+ "&.dots--right": { right: 20 }
1501
1276
  },
1502
- "&:focus": { outline: "none" },
1503
- '&[data-size="fullscreen"]': {
1504
- width: "100vw",
1505
- height: "100vh",
1506
- maxWidth: "100vw",
1507
- borderRadius: 0
1277
+ "&.dots--light": {
1278
+ ".dot": {
1279
+ backgroundColor: "#ffffff66",
1280
+ "&.dot--active": {
1281
+ backgroundColor: "#ffffff"
1282
+ }
1283
+ }
1508
1284
  },
1509
- "@media (max-width: 768px)": {
1510
- width: "90vw",
1511
- padding: 12,
1512
- '&[data-size="fullscreen"]': {
1513
- width: "100vw"
1285
+ "&.dots--dark": {
1286
+ ".dot": {
1287
+ backgroundColor: "#00000033",
1288
+ "&.dot--active": {
1289
+ backgroundColor: "#000000"
1290
+ }
1514
1291
  }
1515
- }
1516
- });
1517
- var StyledCloseIcon = styled("button", {
1518
- all: "unset",
1519
- cursor: "pointer",
1520
- fontFamily: "inherit",
1521
- borderRadius: "100%",
1522
- height: 32,
1523
- width: 32,
1524
- padding: 4,
1525
- display: "inline-flex",
1526
- alignItems: "center",
1527
- justifyContent: "center",
1528
- color: "rgb(55, 65, 81)",
1529
- position: "absolute",
1530
- top: 8,
1531
- right: 8,
1532
- "&:hover": {
1533
- backgroundColor: "rgba(112, 112, 112, .1)"
1534
1292
  },
1535
- svg: {
1536
- width: 24,
1537
- height: 24
1293
+ ".dot": {
1294
+ width: "9px",
1295
+ height: "9px",
1296
+ padding: "0",
1297
+ border: "none",
1298
+ borderRadius: "50%",
1299
+ transition: "all 0.2s ease-in-out"
1538
1300
  }
1539
1301
  });
1540
1302
 
1541
- // src/components/modal/use-open-change-effect.ts
1542
- import { useContext as useContext4, useEffect as useEffect2 } from "react";
1543
- function useOpenChangeEffect(props) {
1544
- let { open, defaultOpen, onOpenChange } = props;
1545
- let rootCtx = useContext4(WeaverseContext);
1546
- let toggleRootzIndex = (open2) => {
1547
- let { contentRootElement } = rootCtx;
1548
- if (contentRootElement) {
1549
- if (open2) {
1550
- contentRootElement.classList.add("modal-open");
1551
- } else {
1552
- contentRootElement.classList.remove("modal-open");
1553
- }
1303
+ // src/components/slider/autoplay-plugin.ts
1304
+ function AutoplayPlugin(changeSlidesEvery) {
1305
+ return (slider) => {
1306
+ let timeout;
1307
+ let mouseOver = false;
1308
+ function clearNextTimeout() {
1309
+ clearTimeout(timeout);
1554
1310
  }
1311
+ function nextTimeout() {
1312
+ clearTimeout(timeout);
1313
+ if (mouseOver)
1314
+ return;
1315
+ timeout = setTimeout(() => {
1316
+ slider.next();
1317
+ }, changeSlidesEvery * 1e3);
1318
+ }
1319
+ slider.on("created", () => {
1320
+ slider.container.addEventListener("mouseover", () => {
1321
+ mouseOver = true;
1322
+ clearNextTimeout();
1323
+ });
1324
+ slider.container.addEventListener("mouseout", () => {
1325
+ mouseOver = false;
1326
+ nextTimeout();
1327
+ });
1328
+ nextTimeout();
1329
+ });
1330
+ slider.on("dragStarted", clearNextTimeout);
1331
+ slider.on("animationEnded", nextTimeout);
1332
+ slider.on("updated", nextTimeout);
1555
1333
  };
1556
- useEffect2(() => {
1557
- let isOpen = open || defaultOpen;
1558
- toggleRootzIndex(isOpen);
1559
- }, [open, defaultOpen]);
1560
- let handleOpenChange = (open2) => {
1561
- toggleRootzIndex(open2);
1562
- onOpenChange?.(open2);
1563
- };
1564
- return handleOpenChange;
1565
1334
  }
1566
1335
 
1567
- // src/components/modal/index.tsx
1568
- var Modal = (props) => {
1569
- let { children, open, defaultOpen, onOpenChange, ...rest } = props;
1570
- let handleOpenChange = useOpenChangeEffect(props);
1571
- return /* @__PURE__ */ React18.createElement(
1572
- Root,
1573
- {
1574
- open,
1575
- defaultOpen,
1576
- onOpenChange: handleOpenChange,
1577
- ...rest
1578
- },
1579
- children
1580
- );
1581
- };
1582
- var ModalTrigger = Trigger;
1583
- var ModalHeader = forwardRef8(
1584
- (props, ref) => {
1585
- let { children, ...rest } = props;
1586
- return /* @__PURE__ */ React18.createElement(StyledTitle, { ref, ...rest, "data-wv-modal-header": true }, children);
1587
- }
1588
- );
1589
- var ModalContent = forwardRef8(
1336
+ // src/components/placeholder.tsx
1337
+ import React12, { forwardRef as forwardRef3 } from "react";
1338
+ var Placeholder = forwardRef3(
1590
1339
  (props, ref) => {
1591
- let { children, size, portal, ...rest } = props;
1592
- let modalContent = /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(StyledOverlay, null), /* @__PURE__ */ React18.createElement(
1593
- StyledContent,
1340
+ let { element, className, children, ...rest } = props;
1341
+ return /* @__PURE__ */ React12.createElement("div", { "data-wv-placeholder": true, ref, className, ...rest }, /* @__PURE__ */ React12.createElement(
1342
+ "div",
1343
+ {
1344
+ style: { fontWeight: 600, margin: "10px 0 5px", padding: "0 10px" }
1345
+ },
1346
+ element
1347
+ ), /* @__PURE__ */ React12.createElement(
1348
+ "div",
1594
1349
  {
1595
- ...rest,
1596
- onCloseAutoFocus: (e) => e.preventDefault(),
1597
- "data-wv-modal": true,
1598
- "data-size": size,
1599
- ref
1350
+ style: {
1351
+ margin: "5px 0 10px",
1352
+ textAlign: "center",
1353
+ padding: "0 10px"
1354
+ }
1600
1355
  },
1601
- /* @__PURE__ */ React18.createElement(ModalClose, null),
1602
- /* @__PURE__ */ React18.createElement("div", { className: "wv-modal-content" }, children)
1356
+ children
1603
1357
  ));
1604
- if (portal) {
1605
- return /* @__PURE__ */ React18.createElement(Portal, null, modalContent);
1606
- }
1607
- return modalContent;
1608
1358
  }
1609
1359
  );
1610
- ModalContent.defaultProps = {
1611
- size: "auto",
1612
- portal: false
1360
+ var placeholder_default = Placeholder;
1361
+
1362
+ // src/components/no-hydrate.tsx
1363
+ import React13, { useState as useState2 } from "react";
1364
+ function NoHydrate({ id, getHTML, ...rest }) {
1365
+ let [html] = useState2(() => {
1366
+ if (typeof document === "undefined") {
1367
+ return getHTML?.() ?? "";
1368
+ }
1369
+ let el = document.getElementById(id);
1370
+ if (!el)
1371
+ return getHTML?.() ?? "";
1372
+ return el.innerHTML;
1373
+ });
1374
+ return /* @__PURE__ */ React13.createElement("div", { ...rest, id, dangerouslySetInnerHTML: { __html: html } });
1375
+ }
1376
+
1377
+ // src/components/index.ts
1378
+ var Components = {
1379
+ Background,
1380
+ Icon,
1381
+ ModalComponents: modal_exports,
1382
+ Overlay: Overlay2,
1383
+ Placeholder: placeholder_default,
1384
+ Spinner,
1385
+ Slider,
1386
+ Tooltip,
1387
+ NoHydrate
1388
+ };
1389
+ var SliderComponents = {
1390
+ Arrows,
1391
+ Dots,
1392
+ ResizePlugin,
1393
+ AutoplayPlugin
1613
1394
  };
1614
- var ModalClose = forwardRef8(
1395
+
1396
+ // src/elements/container.tsx
1397
+ var Container = forwardRef4(
1615
1398
  (props, ref) => {
1616
- let { asChild, children, ...rest } = props;
1617
- let closeIcon = /* @__PURE__ */ React18.createElement(StyledCloseIcon, null, /* @__PURE__ */ React18.createElement(Icon, { name: "X" }));
1618
- return /* @__PURE__ */ React18.createElement(Close, { asChild: true, ...rest, ref }, asChild ? children : closeIcon);
1399
+ let { children, ...rest } = props;
1400
+ return /* @__PURE__ */ React14.createElement("div", { ref, ...rest }, Children.count(children) ? children : /* @__PURE__ */ React14.createElement(Components.Placeholder, { element: "Container" }, "Drop element here"));
1619
1401
  }
1620
1402
  );
1403
+ var css2 = {
1404
+ "@desktop": {
1405
+ display: "flex",
1406
+ alignItems: "flex-start",
1407
+ justifyContent: "flex-start",
1408
+ gridArea: "1 / 1 / 3 / 6",
1409
+ overflow: "hidden",
1410
+ // minWidth: '300px',
1411
+ minHeight: "100px"
1412
+ },
1413
+ "@mobile": {
1414
+ minHeight: "100px"
1415
+ }
1416
+ };
1417
+ Container.defaultProps = {};
1418
+ var container_default = Container;
1621
1419
 
1622
- // src/components/spinner.tsx
1623
- import React19 from "react";
1624
- function Spinner() {
1625
- return /* @__PURE__ */ React19.createElement("span", { className: "wv-spinner-wrapper" }, /* @__PURE__ */ React19.createElement(Icon, { name: "CircleNotch", className: "wv-spinner" }));
1626
- }
1420
+ // src/elements/countdown/index.tsx
1421
+ import React16, { forwardRef as forwardRef5, useContext as useContext3, useEffect as useEffect2 } from "react";
1627
1422
 
1628
- // src/components/tooltip.tsx
1629
- import React20 from "react";
1630
- function Tooltip({ children }) {
1631
- return /* @__PURE__ */ React20.createElement("span", { className: "wv-tooltip" }, children);
1423
+ // src/constant/index.ts
1424
+ var TIMES = ["days", "hours", "minutes", "seconds"];
1425
+ var COUNTDOWN_KEY = "wv-cd-evergreen-start";
1426
+ var INSTAGRAM_API = "https://graph.instagram.com";
1427
+
1428
+ // src/utils/index.ts
1429
+ function getTime(_seconds) {
1430
+ let ONE_MINUTE = 60 * 1e3;
1431
+ let ONE_HOUR = 60 * ONE_MINUTE;
1432
+ let ONE_DAY = 24 * ONE_HOUR;
1433
+ let days = Math.floor(_seconds / ONE_DAY);
1434
+ let hours = Math.floor((_seconds - days * ONE_DAY) / ONE_HOUR);
1435
+ let minutes = Math.floor(
1436
+ (_seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE
1437
+ );
1438
+ let seconds = Math.floor(
1439
+ (_seconds - days * ONE_DAY - hours * ONE_HOUR - minutes * ONE_MINUTE) / 1e3
1440
+ );
1441
+ return { days, hours, minutes, seconds };
1442
+ }
1443
+ function getYoutubeEmbedId(url) {
1444
+ const match = url.match(
1445
+ /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/
1446
+ );
1447
+ return match ? match[1] : null;
1448
+ }
1449
+ function getVimeoId(url) {
1450
+ const match = url.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);
1451
+ return match ? match[1] : null;
1632
1452
  }
1633
1453
 
1634
- // src/components/slider/index.tsx
1635
- import clsx3 from "clsx";
1636
- import { useKeenSlider } from "keen-slider/react";
1637
- import React22, { useState as useState2 } from "react";
1454
+ // src/elements/countdown/timer-block.tsx
1455
+ import React15 from "react";
1456
+ function TimerBlock({ value, label }) {
1457
+ return /* @__PURE__ */ React15.createElement("div", { className: "wv-cd-block" }, /* @__PURE__ */ React15.createElement("div", { className: "wv-cd-number" }, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ React15.createElement("div", { className: "wv-cd-label" }, label));
1458
+ }
1638
1459
 
1639
- // src/components/slider/arrows.tsx
1640
- import { styled as styled2 } from "@stitches/react";
1641
- import clsx2 from "clsx";
1642
- import React21 from "react";
1643
- function Arrows(props) {
1644
- let { currentSlide, instanceRef, className, icon, offset } = props;
1645
- let isFirst = currentSlide === 0;
1646
- let isLast = false;
1647
- if (instanceRef.current) {
1648
- isLast = currentSlide === instanceRef?.current?.track?.details?.maxIdx;
1649
- }
1650
- let style = {
1651
- "--offset": `${offset}px`
1652
- };
1653
- return /* @__PURE__ */ React21.createElement(StyledArrows, { className, style }, /* @__PURE__ */ React21.createElement(
1654
- "button",
1655
- {
1656
- type: "button",
1657
- className: clsx2("arrow arrow--left", isFirst && "arrow--disabled"),
1658
- onClick: (e) => {
1659
- e.stopPropagation();
1660
- instanceRef?.current?.prev();
1460
+ // src/elements/countdown/index.tsx
1461
+ var Countdown = forwardRef5(
1462
+ (props, ref) => {
1463
+ const { isDesignMode } = useContext3(WeaverseContext);
1464
+ let {
1465
+ timerType,
1466
+ startTime: startTimeProp,
1467
+ endTime: endTimeProp,
1468
+ periods: periodsProp,
1469
+ redirectWhenTimerStops,
1470
+ redirectUrl,
1471
+ openInNewTab,
1472
+ showColon,
1473
+ showLabel,
1474
+ ...rest
1475
+ } = props;
1476
+ const [remaining, setRemaining] = React16.useState(0);
1477
+ let periods = periodsProp * 60 * 1e3;
1478
+ const handleEnd = () => {
1479
+ if (!isDesignMode && redirectWhenTimerStops && redirectUrl)
1480
+ window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
1481
+ };
1482
+ const getStartTime = () => {
1483
+ let startTime = startTimeProp;
1484
+ if (timerType === "evergreen") {
1485
+ const start = localStorage.getItem(COUNTDOWN_KEY);
1486
+ if (start) {
1487
+ startTime = Number.parseInt(start);
1488
+ if (startTime + periods < Date.now()) {
1489
+ startTime = Date.now();
1490
+ localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
1491
+ }
1492
+ } else {
1493
+ startTime = Date.now();
1494
+ localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
1495
+ }
1661
1496
  }
1662
- },
1663
- /* @__PURE__ */ React21.createElement(Icon, { name: icon === "caret" ? "CaretLeft" : "ArrowLeft" })
1664
- ), /* @__PURE__ */ React21.createElement(
1665
- "button",
1666
- {
1667
- type: "button",
1668
- className: clsx2("arrow arrow--right", isLast && "arrow--disabled"),
1669
- onClick: (e) => {
1670
- e.stopPropagation();
1671
- instanceRef?.current?.next();
1497
+ return startTime;
1498
+ };
1499
+ const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
1500
+ const handleRemaining = () => {
1501
+ let startTime = getStartTime();
1502
+ let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
1503
+ let isActive = checkActive(startTime);
1504
+ const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
1505
+ if (remainingTime > 0 && remainingTime < 1e3) {
1506
+ handleEnd();
1507
+ }
1508
+ setRemaining(remainingTime);
1509
+ };
1510
+ useEffect2(() => {
1511
+ let intervalFlag = setInterval(
1512
+ handleRemaining,
1513
+ 1e3
1514
+ );
1515
+ return () => {
1516
+ clearInterval(intervalFlag);
1517
+ };
1518
+ }, [startTimeProp, endTimeProp, periods, timerType]);
1519
+ const timer = getTime(remaining);
1520
+ return /* @__PURE__ */ React16.createElement("div", { ref, ...rest }, TIMES.map((time) => {
1521
+ return /* @__PURE__ */ React16.createElement(React16.Fragment, { key: time }, /* @__PURE__ */ React16.createElement(
1522
+ TimerBlock,
1523
+ {
1524
+ label: showLabel ? time : "",
1525
+ value: remaining === 0 ? "--" : timer[time]
1526
+ }
1527
+ ), time !== "seconds" && /* @__PURE__ */ React16.createElement("div", { className: "wv-cd-separator" }, showColon && /* @__PURE__ */ React16.createElement("span", null, ":")));
1528
+ }));
1529
+ }
1530
+ );
1531
+ var css3 = {
1532
+ "@desktop": {
1533
+ fontSize: "36px",
1534
+ fontWeight: 500,
1535
+ display: "flex",
1536
+ alignItems: "center",
1537
+ overflow: "hidden",
1538
+ justifyContent: "center",
1539
+ gap: 10,
1540
+ lineHeight: "initial",
1541
+ ".wv-cd-block": {
1542
+ width: 48,
1543
+ textAlign: "center",
1544
+ ".wv-cd-label": {
1545
+ fontSize: 10
1546
+ }
1547
+ },
1548
+ ".wv-cd-separator": {
1549
+ span: {
1550
+ lineHeight: "100%"
1551
+ },
1552
+ ".hidden": {
1553
+ visibility: "hidden"
1672
1554
  }
1673
- },
1674
- /* @__PURE__ */ React21.createElement(Icon, { name: icon === "caret" ? "CaretRight" : "ArrowRight" })
1675
- ));
1676
- }
1677
- var StyledArrows = styled2("div", {
1678
- ".arrow": {
1679
- position: "absolute",
1680
- top: "50%",
1681
- transform: "translateY(-50%)",
1682
- width: "44px",
1683
- height: "44px",
1684
- padding: "8px",
1685
- color: "#191919",
1686
- backgroundColor: "#f2f2f2",
1687
- textAlign: "center",
1688
- transition: "all 0.2s ease-in-out",
1689
- borderRadius: "4px",
1690
- border: "none",
1691
- cursor: "pointer",
1692
- "&:hover": {
1693
- backgroundColor: "#191919",
1694
- color: "#f2f2f2"
1695
- },
1696
- svg: {
1697
- verticalAlign: "middle",
1698
- width: "22px",
1699
- height: "22px"
1700
- },
1701
- "&.arrow--left": {
1702
- left: "var(--offset, 0px)"
1703
- },
1704
- "&.arrow--right": {
1705
- right: "var(--offset, 0px)"
1706
- },
1707
- "&.arrow--disabled": {
1708
- opacity: 0.5
1709
- }
1710
- },
1711
- "@media (max-width: 768px)": {
1712
- ".arrow": {
1713
- display: "none"
1714
1555
  }
1715
1556
  }
1716
- });
1717
-
1718
- // src/components/slider/resize-plugin.ts
1719
- var ResizePlugin = (slider) => {
1720
- let observer = new ResizeObserver(() => slider.update());
1721
- slider.on("created", () => {
1722
- observer.observe(slider.container);
1723
- });
1724
- slider.on("destroyed", () => {
1725
- observer.unobserve(slider.container);
1726
- });
1727
1557
  };
1558
+ Countdown.defaultProps = {
1559
+ timerType: "fixed-time",
1560
+ startTime: Date.now(),
1561
+ endTime: Date.now() + 1e3 * 60 * 60 * 24,
1562
+ periods: 90,
1563
+ redirectWhenTimerStops: false,
1564
+ redirectUrl: "",
1565
+ openInNewTab: false,
1566
+ showLabel: true,
1567
+ showColon: true
1568
+ };
1569
+ var countdown_default = Countdown;
1728
1570
 
1729
- // src/components/slider/index.tsx
1730
- function Slider(props) {
1731
- let { children, className, gap, slidesPerView, arrowOffset } = props;
1732
- let [currentSlide, setCurrentSlide] = useState2(0);
1733
- let [created, setCreated] = useState2(false);
1734
- let [ref, instanceRef] = useKeenSlider(
1735
- {
1736
- slides: { perView: slidesPerView, spacing: gap },
1737
- breakpoints: {
1738
- "(max-width: 1024px)": {
1739
- slides: { perView: 3, spacing: gap }
1571
+ // src/elements/image.tsx
1572
+ import React17 from "react";
1573
+ var Image2 = React17.forwardRef(
1574
+ (props, ref) => {
1575
+ let {
1576
+ src,
1577
+ alt,
1578
+ objectFit,
1579
+ objectPosition,
1580
+ clickAction,
1581
+ openLinkInNewTab,
1582
+ linkTo,
1583
+ ...rest
1584
+ } = props;
1585
+ let style = {
1586
+ "--img-object-fit": objectFit,
1587
+ "--img-object-position": objectPosition
1588
+ };
1589
+ let content = /* @__PURE__ */ React17.createElement("img", { alt, "data-blink-src": src });
1590
+ if (clickAction === "openLink" && linkTo) {
1591
+ content = /* @__PURE__ */ React17.createElement(
1592
+ "a",
1593
+ {
1594
+ href: linkTo,
1595
+ target: openLinkInNewTab ? "_blank" : "_self",
1596
+ rel: "noreferrer"
1740
1597
  },
1741
- "(max-width: 768px)": {
1742
- slides: {
1743
- perView: 1,
1744
- spacing: 32
1745
- }
1746
- }
1747
- },
1748
- created: () => {
1749
- setCreated(true);
1750
- },
1751
- slideChanged: (slider) => {
1752
- setCurrentSlide(slider.track.details.rel);
1753
- }
1754
- },
1755
- [ResizePlugin]
1756
- );
1757
- let _className = clsx3("keen-slider", className);
1758
- let arrowsClass = clsx3(className && `${className}-arrows`);
1759
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("div", { ref, className: _className }, /* @__PURE__ */ React22.createElement(
1760
- "link",
1761
- {
1762
- rel: "stylesheet",
1763
- href: "https://cdn.jsdelivr.net/npm/keen-slider@latest/keen-slider.min.css"
1598
+ /* @__PURE__ */ React17.createElement("img", { alt, "data-blink-src": src })
1599
+ );
1764
1600
  }
1765
- ), children), created && instanceRef?.current && /* @__PURE__ */ React22.createElement(
1766
- Arrows,
1767
- {
1768
- currentSlide,
1769
- instanceRef,
1770
- className: arrowsClass,
1771
- offset: arrowOffset,
1772
- icon: "arrow"
1601
+ return /* @__PURE__ */ React17.createElement("div", { ref, style, ...rest }, content);
1602
+ }
1603
+ );
1604
+ var css4 = {
1605
+ "@desktop": {
1606
+ display: "flex",
1607
+ overflow: "hidden",
1608
+ justifyContent: "center",
1609
+ alignItems: "center",
1610
+ img: {
1611
+ width: "100%",
1612
+ height: "100%",
1613
+ objectFit: "var(--img-object-fit, cover)",
1614
+ objectPosition: "var(--img-object-position, center)"
1773
1615
  }
1774
- ));
1775
- }
1616
+ }
1617
+ };
1618
+ Image2.defaultProps = {
1619
+ src: "https://ucarecdn.com/dac0f414-2b1f-46df-99ce-41554f0f653a/",
1620
+ alt: "Alternative information",
1621
+ objectFit: "cover",
1622
+ objectPosition: "center center",
1623
+ clickAction: "none",
1624
+ openLinkInNewTab: false,
1625
+ linkTo: ""
1626
+ };
1627
+ var image_default = Image2;
1776
1628
 
1777
- // src/components/slider/dots.tsx
1778
- import { styled as styled3 } from "@stitches/react";
1779
- import clsx4 from "clsx";
1780
- import React23 from "react";
1781
- function Dots(props) {
1782
- let { currentSlide, instanceRef, className, absolute, position, color } = props;
1783
- let _className = clsx4(
1784
- className,
1785
- absolute && "dots--absolute",
1786
- position && `dots--${position}`,
1787
- color && `dots--${color}`
1788
- );
1789
- return /* @__PURE__ */ React23.createElement(StyledDots, { className: _className }, [...Array(instanceRef.current?.track.details.slides.length).keys()].map(
1790
- (idx) => {
1791
- let className2 = clsx4("dot", currentSlide === idx && "dot--active");
1792
- return /* @__PURE__ */ React23.createElement(
1793
- "button",
1794
- {
1795
- key: idx,
1796
- type: "button",
1797
- onClick: () => instanceRef.current?.moveToIdx(idx),
1798
- className: className2
1799
- }
1800
- );
1629
+ // src/elements/layout.tsx
1630
+ import React18, { forwardRef as forwardRef6 } from "react";
1631
+ var Layout = forwardRef6((props, ref) => {
1632
+ let {
1633
+ children,
1634
+ rows,
1635
+ gap,
1636
+ rowSize,
1637
+ columns,
1638
+ contentSize,
1639
+ gridSize,
1640
+ backgroundColor,
1641
+ backgroundImage,
1642
+ objectFit,
1643
+ objectPosition,
1644
+ enableOverlay,
1645
+ overlayOpacity,
1646
+ ...rest
1647
+ } = props;
1648
+ let style = {
1649
+ "--layout-content-width": "100vw",
1650
+ "--content-size": contentSize + "px",
1651
+ "--grid-size": gridSize + "px",
1652
+ "--rows": rows,
1653
+ "--columns": columns,
1654
+ "--gap": gap + "px",
1655
+ "--row-size": rowSize + "px",
1656
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
1657
+ };
1658
+ return /* @__PURE__ */ React18.createElement("div", { ref, ...rest, style }, /* @__PURE__ */ React18.createElement(
1659
+ Background,
1660
+ {
1661
+ backgroundImage,
1662
+ backgroundColor,
1663
+ backgroundFit: objectFit,
1664
+ backgroundPosition: objectPosition
1801
1665
  }
1802
- ));
1803
- }
1804
- var StyledDots = styled3("div", {
1805
- padding: "10px 0",
1806
- display: "flex",
1807
- justifyContent: "center",
1808
- alignItems: "center",
1809
- gap: "12px",
1810
- "&.dots--absolute": {
1811
- position: "absolute",
1812
- "&.dots--top, &.dots--bottom": { left: 0, right: 0 },
1813
- "&.dots--top": { top: 10 },
1814
- "&.dots--bottom": { bottom: 10 },
1815
- "&.dots--left, &.dots--right": {
1816
- top: 0,
1817
- bottom: 0,
1818
- flexDirection: "column"
1819
- },
1820
- "&.dots--left": { left: 20 },
1821
- "&.dots--right": { right: 20 }
1822
- },
1823
- "&.dots--light": {
1824
- ".dot": {
1825
- backgroundColor: "#ffffff66",
1826
- "&.dot--active": {
1827
- backgroundColor: "#ffffff"
1828
- }
1666
+ ), /* @__PURE__ */ React18.createElement(Overlay2, { enableOverlay, overlayOpacity }), /* @__PURE__ */ React18.createElement("div", { "data-layout-content": true }, children));
1667
+ });
1668
+ var css5 = {
1669
+ "@desktop": {
1670
+ position: "relative",
1671
+ "> [data-layout-content]": {
1672
+ // paddingTop: 'var(--gap)',
1673
+ // paddingBottom: 'var(--gap)',
1674
+ margin: "0 auto",
1675
+ display: "grid",
1676
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
1677
+ gridTemplateColumns: "calc((var(--layout-content-width) - var(--content-size)) / 2) 1fr repeat(var(--columns), minmax(0, var(--col-size))) 1fr calc((var(--layout-content-width) - var(--content-size)) / 2)",
1678
+ gridAutoRows: "var(--row-size)",
1679
+ gap: "var(--gap)",
1680
+ maxWidth: "var(--layout-content-width)"
1829
1681
  }
1830
1682
  },
1831
- "&.dots--dark": {
1832
- ".dot": {
1833
- backgroundColor: "#00000033",
1834
- "&.dot--active": {
1835
- backgroundColor: "#000000"
1836
- }
1683
+ "@mobile": {
1684
+ padding: "0 16px",
1685
+ "> [data-layout-content]": {
1686
+ display: "flex",
1687
+ flexDirection: "column"
1837
1688
  }
1838
- },
1839
- ".dot": {
1840
- width: "9px",
1841
- height: "9px",
1842
- padding: "0",
1843
- border: "none",
1844
- borderRadius: "50%",
1845
- transition: "all 0.2s ease-in-out"
1846
1689
  }
1690
+ };
1691
+ Layout.defaultProps = {
1692
+ contentSize: 1600,
1693
+ gridSize: 1224,
1694
+ rows: 16,
1695
+ columns: 12,
1696
+ gap: 16,
1697
+ rowSize: 48,
1698
+ objectFit: "cover",
1699
+ objectPosition: "center center",
1700
+ enableOverlay: false,
1701
+ overlayOpacity: 30
1702
+ };
1703
+ var layout_default = Layout;
1704
+
1705
+ // src/elements/map.tsx
1706
+ import React19, { forwardRef as forwardRef7 } from "react";
1707
+ var Map = forwardRef7((props, ref) => {
1708
+ let { place, zoom, ...rest } = props;
1709
+ return /* @__PURE__ */ React19.createElement("div", { ref, ...rest }, /* @__PURE__ */ React19.createElement(
1710
+ "iframe",
1711
+ {
1712
+ loading: "lazy",
1713
+ width: "100%",
1714
+ height: "100%",
1715
+ title: "map",
1716
+ src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
1717
+ style: { pointerEvents: "none" }
1718
+ }
1719
+ ));
1847
1720
  });
1848
-
1849
- // src/components/slider/autoplay-plugin.ts
1850
- function AutoplayPlugin(changeSlidesEvery) {
1851
- return (slider) => {
1852
- let timeout;
1853
- let mouseOver = false;
1854
- function clearNextTimeout() {
1855
- clearTimeout(timeout);
1721
+ var css6 = {
1722
+ "@desktop": {
1723
+ iframe: {
1724
+ border: "none"
1856
1725
  }
1857
- function nextTimeout() {
1858
- clearTimeout(timeout);
1859
- if (mouseOver)
1860
- return;
1861
- timeout = setTimeout(() => {
1862
- slider.next();
1863
- }, changeSlidesEvery * 1e3);
1726
+ },
1727
+ "@mobile": {
1728
+ iframe: {
1729
+ border: "none"
1864
1730
  }
1865
- slider.on("created", () => {
1866
- slider.container.addEventListener("mouseover", () => {
1867
- mouseOver = true;
1868
- clearNextTimeout();
1869
- });
1870
- slider.container.addEventListener("mouseout", () => {
1871
- mouseOver = false;
1872
- nextTimeout();
1873
- });
1874
- nextTimeout();
1875
- });
1876
- slider.on("dragStarted", clearNextTimeout);
1877
- slider.on("animationEnded", nextTimeout);
1878
- slider.on("updated", nextTimeout);
1879
- };
1880
- }
1731
+ }
1732
+ };
1733
+ Map.defaultProps = {
1734
+ place: "Hanoi",
1735
+ zoom: 14
1736
+ };
1737
+ var map_default = Map;
1881
1738
 
1882
- // src/components/placeholder.tsx
1883
- import React24, { forwardRef as forwardRef9 } from "react";
1884
- var Placeholder = forwardRef9(
1739
+ // src/elements/text.tsx
1740
+ import * as React20 from "react";
1741
+ var Text = React20.forwardRef(
1885
1742
  (props, ref) => {
1886
- let { element, className, children, ...rest } = props;
1887
- return /* @__PURE__ */ React24.createElement("div", { "data-wv-placeholder": true, ref, className, ...rest }, /* @__PURE__ */ React24.createElement(
1888
- "div",
1889
- {
1890
- style: { fontWeight: 600, margin: "10px 0 5px", padding: "0 10px" }
1891
- },
1892
- element
1893
- ), /* @__PURE__ */ React24.createElement(
1743
+ let { children, value, ...rest } = props;
1744
+ return /* @__PURE__ */ React20.createElement("div", { ref, ...rest }, /* @__PURE__ */ React20.createElement(
1894
1745
  "div",
1895
1746
  {
1896
- style: {
1897
- margin: "5px 0 10px",
1898
- textAlign: "center",
1899
- padding: "0 10px"
1900
- }
1901
- },
1902
- children
1747
+ className: "wv-text-content",
1748
+ dangerouslySetInnerHTML: { __html: value }
1749
+ }
1903
1750
  ));
1904
1751
  }
1905
1752
  );
1906
- var placeholder_default = Placeholder;
1753
+ var css7 = {
1754
+ "@desktop": {
1755
+ display: "flex",
1756
+ padding: "10px",
1757
+ overflow: "hidden",
1758
+ ".wv-text-content": {
1759
+ width: "100%",
1760
+ height: "fit-content",
1761
+ "> p, > h1, > h2, > h3, > h4, > h5, > h6": {
1762
+ all: "inherit",
1763
+ margin: "0",
1764
+ wordBreak: "break-word",
1765
+ overflowWrap: "break-word",
1766
+ width: "auto",
1767
+ height: "auto"
1768
+ }
1769
+ }
1770
+ }
1771
+ };
1772
+ Text.defaultProps = {
1773
+ value: "<p>The quick brown fox jumps over the lazy dog</p>"
1774
+ };
1775
+ var text_default = Text;
1907
1776
 
1908
- // src/components/no-hydrate.tsx
1909
- import React25, { useState as useState3 } from "react";
1910
- function NoHydrate({ id, getHTML, ...rest }) {
1911
- let [html] = useState3(() => {
1912
- if (typeof document === "undefined") {
1913
- return getHTML?.() ?? "";
1777
+ // src/elements/scrolling-text.tsx
1778
+ import React21 from "react";
1779
+ import { useState as useState3 } from "react";
1780
+ var ScrollingText = React21.forwardRef((props, ref) => {
1781
+ let { children, value, gap, speed, pauseOnHover, ...rest } = props;
1782
+ let [playState, setPlayState] = useState3("running");
1783
+ let style = {
1784
+ "--gap": `${gap}px`,
1785
+ "--speed": `${speed}s`,
1786
+ "--play-state": playState
1787
+ };
1788
+ let events = {};
1789
+ if (pauseOnHover) {
1790
+ events = {
1791
+ onMouseEnter: () => setPlayState("paused"),
1792
+ onMouseLeave: () => setPlayState("running")
1793
+ };
1794
+ }
1795
+ return /* @__PURE__ */ React21.createElement("div", { ref, ...rest }, /* @__PURE__ */ React21.createElement("div", { className: "wv-scrolling-text__container", style, ...events }, Array.from({ length: 30 }).map((_, i) => /* @__PURE__ */ React21.createElement(
1796
+ "div",
1797
+ {
1798
+ key: i,
1799
+ className: "wv-text-content",
1800
+ dangerouslySetInnerHTML: { __html: value }
1914
1801
  }
1915
- let el = document.getElementById(id);
1916
- if (!el)
1917
- return getHTML?.() ?? "";
1918
- return el.innerHTML;
1802
+ ))));
1803
+ });
1804
+ var css8 = {
1805
+ "@desktop": {
1806
+ display: "flex",
1807
+ padding: "10px",
1808
+ overflow: "hidden",
1809
+ ".wv-scrolling-text__container": {
1810
+ visibility: "visible",
1811
+ whiteSpace: "nowrap",
1812
+ display: "flex",
1813
+ gap: "var(--gap, 40px)",
1814
+ animation: "wv-scrolling-text var(--speed, 100s) linear infinite",
1815
+ animationPlayState: "var(--play-state, running)",
1816
+ ".wv-text-content": {
1817
+ width: "100%",
1818
+ height: "fit-content",
1819
+ "> p, > h1, > h2, > h3, > h4, > h5, > h6": {
1820
+ all: "inherit",
1821
+ margin: "0",
1822
+ wordBreak: "break-word",
1823
+ overflowWrap: "break-word",
1824
+ width: "auto",
1825
+ height: "auto"
1826
+ }
1827
+ }
1828
+ }
1829
+ }
1830
+ };
1831
+ ScrollingText.defaultProps = {
1832
+ value: "<p>The quick brown fox jumps over the lazy dog</p>",
1833
+ gap: 40,
1834
+ speed: 200,
1835
+ pauseOnHover: true
1836
+ };
1837
+ var scrolling_text_default = ScrollingText;
1838
+
1839
+ // src/elements/video/index.tsx
1840
+ import React25, { forwardRef as forwardRef9, useContext as useContext4 } from "react";
1841
+
1842
+ // src/elements/video/html-video.tsx
1843
+ import React22 from "react";
1844
+ function HTMLVideo(props) {
1845
+ let { src, type, controls, autoPlay, loop, muted } = props;
1846
+ return /* @__PURE__ */ React22.createElement(
1847
+ "video",
1848
+ {
1849
+ controls,
1850
+ autoPlay,
1851
+ loop,
1852
+ muted,
1853
+ controlsList: "nodownload",
1854
+ disablePictureInPicture: true
1855
+ },
1856
+ /* @__PURE__ */ React22.createElement("source", { src, type: type || "video/mp4" }),
1857
+ /* @__PURE__ */ React22.createElement("source", { src, type: "video/ogg" }),
1858
+ "Your browser does not support the video tag."
1859
+ );
1860
+ }
1861
+
1862
+ // src/elements/video/vimeo.tsx
1863
+ import React23 from "react";
1864
+ function Vimeo(props) {
1865
+ let { vimeoId, controls, autoPlay, loop, muted } = props;
1866
+ let params = `autoplay=${autoPlay}&loop=${loop}&controls=${controls}&muted=${muted}`;
1867
+ let vimeoSrc = `https://player.vimeo.com/video/${vimeoId}?${params}`;
1868
+ return /* @__PURE__ */ React23.createElement("iframe", { src: vimeoSrc, width: "100%", height: "100%", allowFullScreen: true });
1869
+ }
1870
+
1871
+ // src/elements/video/youtube.tsx
1872
+ import React24 from "react";
1873
+ function Youtube(props) {
1874
+ let { youtubeId, controls, autoPlay, loop, muted } = props;
1875
+ let params = new URLSearchParams({
1876
+ autoplay: autoPlay ? "1" : "0",
1877
+ controls: controls ? "1" : "0",
1878
+ loop: loop ? "1" : "0",
1879
+ mute: muted ? "1" : "0"
1919
1880
  });
1920
- return /* @__PURE__ */ React25.createElement("div", { ...rest, id, dangerouslySetInnerHTML: { __html: html } });
1881
+ let youtubeSrc = `https://www.youtube.com/embed/${youtubeId}?playlist=${youtubeId}&${params.toString()}`;
1882
+ let allow = `accelerometer;${autoPlay ? "autoplay;" : ""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`;
1883
+ return /* @__PURE__ */ React24.createElement("iframe", { src: youtubeSrc, width: "100%", height: "100%", allow });
1921
1884
  }
1922
1885
 
1923
- // src/components/index.ts
1924
- var Components = {
1925
- Background,
1926
- Icon,
1927
- ModalComponents: modal_exports,
1928
- Overlay,
1929
- Placeholder: placeholder_default,
1930
- Spinner,
1931
- Slider,
1932
- Tooltip,
1933
- NoHydrate
1886
+ // src/elements/video/index.tsx
1887
+ var Video = forwardRef9((props, ref) => {
1888
+ let { isDesignMode } = useContext4(WeaverseContext);
1889
+ let {
1890
+ src,
1891
+ controls,
1892
+ poster,
1893
+ autoPlay: originAutoPlay,
1894
+ loop,
1895
+ muted,
1896
+ ...rest
1897
+ } = props;
1898
+ let autoPlay = !isDesignMode && originAutoPlay;
1899
+ let videoProps = { src, controls, poster, autoPlay, loop, muted };
1900
+ let content;
1901
+ let youtubeId = getYoutubeEmbedId(src);
1902
+ let vimeoId = getVimeoId(src);
1903
+ if (youtubeId) {
1904
+ content = /* @__PURE__ */ React25.createElement(Youtube, { ...videoProps, youtubeId });
1905
+ } else if (vimeoId) {
1906
+ content = /* @__PURE__ */ React25.createElement(Vimeo, { ...videoProps, vimeoId });
1907
+ } else {
1908
+ content = /* @__PURE__ */ React25.createElement(HTMLVideo, { ...videoProps });
1909
+ }
1910
+ return /* @__PURE__ */ React25.createElement("div", { ref, ...rest }, content);
1911
+ });
1912
+ var css9 = {
1913
+ "@desktop": {
1914
+ video: {
1915
+ height: "100%",
1916
+ width: "100%",
1917
+ aspectRatio: "16 / 9"
1918
+ },
1919
+ iframe: {
1920
+ border: "none"
1921
+ }
1922
+ },
1923
+ "@mobile": {
1924
+ iframe: {
1925
+ border: "none"
1926
+ }
1927
+ }
1934
1928
  };
1935
- var SliderComponents = {
1936
- Arrows,
1937
- Dots,
1938
- ResizePlugin,
1939
- AutoplayPlugin
1929
+ Video.defaultProps = {
1930
+ src: "https://youtu.be/wM-NT6hcw48",
1931
+ poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
1932
+ loop: false,
1933
+ controls: false,
1934
+ autoPlay: true,
1935
+ muted: true
1940
1936
  };
1937
+ var video_default = Video;
1941
1938
 
1942
1939
  // src/elements/instagram.tsx
1940
+ import React26, { forwardRef as forwardRef10, useEffect as useEffect3, useState as useState4 } from "react";
1943
1941
  var Instagram = forwardRef10(
1944
1942
  (props, ref) => {
1945
1943
  let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
@@ -2375,7 +2373,7 @@ var Slide = forwardRef12((props, ref) => {
2375
2373
  className: "slide-background"
2376
2374
  }
2377
2375
  ), /* @__PURE__ */ React29.createElement(
2378
- Overlay,
2376
+ Overlay2,
2379
2377
  {
2380
2378
  enableOverlay,
2381
2379
  overlayOpacity,