@weaverse/react 0.7.34 → 0.7.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,1120 +1 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
- mod
24
- ));
25
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
-
27
- // src/index.ts
28
- var src_exports = {};
29
- __export(src_exports, {
30
- Components: () => Components,
31
- Elements: () => Elements,
32
- WeaverseContext: () => WeaverseContext,
33
- WeaverseContextConsumer: () => WeaverseContextConsumer,
34
- WeaverseContextProvider: () => WeaverseContextProvider,
35
- WeaverseRoot: () => WeaverseRoot,
36
- createRootContext: () => createRootContext
37
- });
38
- module.exports = __toCommonJS(src_exports);
39
- __reExport(src_exports, require("@weaverse/core"), module.exports);
40
-
41
- // src/context.ts
42
- var import_core = require("@weaverse/core");
43
- var import_react17 = require("react");
44
-
45
- // src/elements/Button.tsx
46
- var React = __toESM(require("react"));
47
- var import_react = require("react");
48
- var Button = React.forwardRef((props, ref) => {
49
- let { isDesignMode } = (0, import_react.useContext)(WeaverseContext);
50
- let { text, clickAction, linkTo, openInNewTab, ...rest } = props;
51
- if (clickAction && linkTo) {
52
- return /* @__PURE__ */ React.createElement("a", {
53
- href: !isDesignMode ? linkTo : void 0,
54
- target: openInNewTab ? "_blank" : "_self",
55
- rel: "noreferrer",
56
- ...rest,
57
- ref
58
- }, text);
59
- }
60
- return /* @__PURE__ */ React.createElement("button", {
61
- ref,
62
- ...rest
63
- }, text);
64
- });
65
- Button.defaultProps = {
66
- type: "button",
67
- text: "Button",
68
- clickAction: "none",
69
- linkTo: "",
70
- openInNewTab: false
71
- };
72
- var css = {
73
- "@desktop": {
74
- borderRadius: "8px",
75
- border: "none",
76
- backgroundColor: "#393e46",
77
- color: "#fff",
78
- fontSize: "14px",
79
- fontWeight: "medium",
80
- padding: "10px 20px",
81
- height: "42px",
82
- minWidth: "120px",
83
- textDecoration: "none",
84
- ":hover": {
85
- backgroundColor: "#222831"
86
- }
87
- }
88
- };
89
- var Button_default = Button;
90
-
91
- // src/elements/Container.tsx
92
- var import_react2 = __toESM(require("react"));
93
- var Container = (0, import_react2.forwardRef)(
94
- (props, ref) => {
95
- let { children, ...rest } = props;
96
- return /* @__PURE__ */ import_react2.default.createElement("div", {
97
- ref,
98
- ...rest
99
- }, children);
100
- }
101
- );
102
- var css2 = {
103
- "@desktop": {
104
- alignItems: "flex-start",
105
- display: "flex",
106
- flexDirection: "column",
107
- gridArea: "1 / 1 / 3 / 6",
108
- height: "fit-content",
109
- justifyContent: "flex-start",
110
- overflow: "hidden",
111
- textAlign: "left",
112
- width: "100%"
113
- }
114
- };
115
- Container.defaultProps = {};
116
- var Container_default = Container;
117
-
118
- // src/elements/Countdown/index.tsx
119
- var import_react4 = __toESM(require("react"));
120
-
121
- // src/constant/index.ts
122
- var TIMES = ["days", "hours", "minutes", "seconds"];
123
- var COUNTDOWN_KEY = "wv-cd-evergreen-start";
124
- var INSTAGRAM_API = "https://graph.instagram.com";
125
-
126
- // src/utils/css.ts
127
- function shortCssObject(css10) {
128
- return {
129
- "@desktop": css10["@desktop"],
130
- "@mobile": css10["@mobile"]
131
- };
132
- }
133
- var permanentClasses = {};
134
- function generateItemClass(instance, stitchesInstance) {
135
- let { css: css10, type, className: cls = "" } = instance.data;
136
- let className = "";
137
- let permanentClass = "";
138
- let perCss = instance.Element?.permanentCss;
139
- if (perCss) {
140
- if (type in permanentClasses) {
141
- permanentClass = permanentClasses[type];
142
- } else {
143
- let { className: perCls } = stitchesInstance.css(perCss)();
144
- Object.assign(permanentClasses, { [type]: perCls });
145
- permanentClass = perCls;
146
- }
147
- }
148
- className = permanentClass;
149
- if (css10) {
150
- let formattedCss = shortCssObject(css10);
151
- let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
152
- let { stitchesClass } = instance;
153
- let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
154
- className = `${permanentClass} ${cls} ${newClass} ${otherClass}`.trim();
155
- instance.stitchesClass = newClass;
156
- }
157
- return className;
158
- }
159
-
160
- // src/utils/index.ts
161
- function getTime(_seconds) {
162
- let ONE_MINUTE = 60 * 1e3;
163
- let ONE_HOUR = 60 * ONE_MINUTE;
164
- let ONE_DAY = 24 * ONE_HOUR;
165
- let days = Math.floor(_seconds / ONE_DAY);
166
- let hours = Math.floor((_seconds - days * ONE_DAY) / ONE_HOUR);
167
- let minutes = Math.floor(
168
- (_seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE
169
- );
170
- let seconds = Math.floor(
171
- (_seconds - days * ONE_DAY - hours * ONE_HOUR - minutes * ONE_MINUTE) / 1e3
172
- );
173
- return { days, hours, minutes, seconds };
174
- }
175
- function getYoutubeEmbedId(url) {
176
- const match = url.match(
177
- /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/
178
- );
179
- return match ? match[1] : null;
180
- }
181
- function getVimeoId(url) {
182
- const match = url.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);
183
- return match ? match[1] : null;
184
- }
185
-
186
- // src/elements/Countdown/TimerBlock.tsx
187
- var import_react3 = __toESM(require("react"));
188
- function TimerBlock({ value, label }) {
189
- return /* @__PURE__ */ import_react3.default.createElement("div", {
190
- className: "wv-cd-block"
191
- }, /* @__PURE__ */ import_react3.default.createElement("div", {
192
- className: "wv-cd-number"
193
- }, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react3.default.createElement("div", {
194
- className: "wv-cd-label"
195
- }, label));
196
- }
197
-
198
- // src/elements/Countdown/index.tsx
199
- var Countdown = (0, import_react4.forwardRef)(
200
- (props, ref) => {
201
- const { isDesignMode } = (0, import_react4.useContext)(WeaverseContext);
202
- let {
203
- timerType,
204
- startTime: startTimeProp,
205
- endTime: endTimeProp,
206
- periods: periodsProp,
207
- redirectUrl,
208
- openInNewTab,
209
- showColon,
210
- showLabel,
211
- ...rest
212
- } = props;
213
- const [remaining, setRemaining] = import_react4.default.useState(0);
214
- let periods = periodsProp * 60 * 1e3;
215
- const handleEnd = () => {
216
- if (!isDesignMode && redirectUrl)
217
- window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
218
- };
219
- const getStartTime = () => {
220
- let startTime = startTimeProp;
221
- if (timerType === "evergreen") {
222
- const start = localStorage.getItem(COUNTDOWN_KEY);
223
- if (start) {
224
- startTime = Number.parseInt(start);
225
- if (startTime + periods < Date.now()) {
226
- startTime = Date.now();
227
- localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
228
- }
229
- } else {
230
- startTime = Date.now();
231
- localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
232
- }
233
- }
234
- return startTime;
235
- };
236
- const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
237
- const handleRemaining = () => {
238
- let startTime = getStartTime();
239
- let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
240
- let isActive = checkActive(startTime);
241
- const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
242
- if (remainingTime > 0 && remainingTime < 1e3) {
243
- handleEnd();
244
- }
245
- setRemaining(remainingTime);
246
- };
247
- (0, import_react4.useEffect)(() => {
248
- let intervalFlag = setInterval(
249
- handleRemaining,
250
- 1e3
251
- );
252
- return () => {
253
- clearInterval(intervalFlag);
254
- };
255
- }, [startTimeProp, endTimeProp, periods, timerType]);
256
- const timer = getTime(remaining);
257
- return /* @__PURE__ */ import_react4.default.createElement("div", {
258
- ref,
259
- ...rest
260
- }, TIMES.map((time) => {
261
- return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, {
262
- key: time
263
- }, /* @__PURE__ */ import_react4.default.createElement(TimerBlock, {
264
- label: showLabel ? time : "",
265
- value: remaining === 0 ? "--" : timer[time]
266
- }), time !== "seconds" && /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("span", {
267
- className: `wv-cd-number ${showColon ? "" : "hidden"}`
268
- }, ":")));
269
- }));
270
- }
271
- );
272
- var css3 = {
273
- "@desktop": {
274
- fontFamily: "Inter",
275
- fontSize: "36px",
276
- fontWeight: 500,
277
- display: "flex",
278
- alignItems: "center",
279
- overflow: "hidden",
280
- justifyContent: "center",
281
- gap: 10,
282
- lineHeight: "initial",
283
- ".wv-cd-block": {
284
- width: 48,
285
- textAlign: "center"
286
- },
287
- ".wv-cd-label": {
288
- fontSize: 10
289
- },
290
- "& > span": {
291
- lineHeight: "100%"
292
- },
293
- "& .hidden": {
294
- visibility: "hidden"
295
- }
296
- }
297
- };
298
- Countdown.defaultProps = {
299
- timerType: "fixed-time",
300
- startTime: Date.now(),
301
- endTime: Date.now() + 1e3 * 60 * 60 * 24,
302
- periods: 90,
303
- redirectUrl: "",
304
- openInNewTab: false,
305
- showLabel: true,
306
- showColon: true
307
- };
308
- var Countdown_default = Countdown;
309
-
310
- // src/elements/Image.tsx
311
- var import_react5 = __toESM(require("react"));
312
- var Image = import_react5.default.forwardRef(
313
- (props, ref) => {
314
- let {
315
- src,
316
- alt,
317
- objectFit,
318
- objectPosition,
319
- onClickAction,
320
- openLinkInNewTab,
321
- linkTo,
322
- ...rest
323
- } = props;
324
- let style = {
325
- "--wv-img-object-fit": objectFit,
326
- "--wv-img-object-position": objectPosition
327
- };
328
- let content = /* @__PURE__ */ import_react5.default.createElement("img", {
329
- alt,
330
- "data-blink-src": src
331
- });
332
- if (onClickAction === "open-link" && linkTo) {
333
- let target = openLinkInNewTab ? "_blank" : "_self";
334
- content = /* @__PURE__ */ import_react5.default.createElement("a", {
335
- href: linkTo,
336
- target
337
- }, content);
338
- }
339
- return /* @__PURE__ */ import_react5.default.createElement("div", {
340
- ref,
341
- ...rest,
342
- style
343
- }, content);
344
- }
345
- );
346
- var css4 = {
347
- "@desktop": {
348
- display: "flex",
349
- overflow: "hidden",
350
- img: {
351
- width: "100%",
352
- height: "100%",
353
- objectFit: "var(--wv-img-object-fit, cover)",
354
- objectPosition: "var(--wv-img-object-position, center)"
355
- },
356
- "& [data-blink-src]": {
357
- visibility: "hidden"
358
- }
359
- }
360
- };
361
- Image.defaultProps = {
362
- src: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/",
363
- alt: "Image alt text",
364
- objectFit: "cover",
365
- objectPosition: "center",
366
- onClickAction: "open-link",
367
- openLinkInNewTab: false,
368
- linkTo: ""
369
- };
370
- var Image_default = Image;
371
-
372
- // src/elements/Layout.tsx
373
- var import_react6 = __toESM(require("react"));
374
- var Layout = (0, import_react6.forwardRef)((props, ref) => {
375
- let {
376
- children,
377
- rows,
378
- gap,
379
- rowSize,
380
- columns,
381
- contentSize,
382
- gridSize,
383
- backgroundColor,
384
- backgroundImage,
385
- objectFit,
386
- ...rest
387
- } = props;
388
- let style = {
389
- "--layout-content-width": "100vw",
390
- "--content-size": contentSize + "px",
391
- "--grid-size": gridSize + "px",
392
- "--rows": rows,
393
- "--columns": columns,
394
- "--gap": gap + "px",
395
- "--row-size": rowSize + "px",
396
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
397
- };
398
- return /* @__PURE__ */ import_react6.default.createElement("div", {
399
- ref,
400
- ...rest,
401
- style
402
- }, /* @__PURE__ */ import_react6.default.createElement(LayoutBackground, {
403
- imgUrl: backgroundImage,
404
- bgColor: backgroundColor,
405
- objectFit
406
- }), /* @__PURE__ */ import_react6.default.createElement("div", {
407
- "data-layout-content": true
408
- }, children));
409
- });
410
- var LayoutBackground = (props) => {
411
- let { bgColor, imgUrl, objectFit } = props;
412
- let style = {
413
- ["--bg-color"]: bgColor,
414
- ["--object-fit"]: objectFit
415
- };
416
- if (imgUrl || bgColor) {
417
- return /* @__PURE__ */ import_react6.default.createElement("div", {
418
- style,
419
- className: "wv-layout-background"
420
- }, imgUrl && /* @__PURE__ */ import_react6.default.createElement("img", {
421
- width: "100%",
422
- height: "100%",
423
- "data-blink-src": imgUrl,
424
- alt: "Section background"
425
- }));
426
- }
427
- return null;
428
- };
429
- var css5 = {
430
- "@desktop": {
431
- "> [data-layout-content]": {
432
- paddingTop: "var(--gap)",
433
- paddingBottom: "var(--gap)",
434
- margin: "0 auto",
435
- display: "grid",
436
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
437
- 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)",
438
- gridAutoRows: "var(--row-size)",
439
- gap: "var(--gap)",
440
- maxWidth: "var(--layout-content-width)"
441
- }
442
- },
443
- "@mobile": {
444
- padding: "0 16px",
445
- "> [data-layout-content]": {
446
- display: "flex",
447
- flexDirection: "column"
448
- }
449
- }
450
- };
451
- var permanentCss = {
452
- "@desktop": {
453
- ".wv-layout-background": {
454
- position: "absolute",
455
- inset: 0,
456
- backgroundColor: "var(--bg-color)"
457
- },
458
- img: {
459
- objectFit: "var(--object-fit, cover)"
460
- }
461
- }
462
- };
463
- Layout.defaultProps = {
464
- contentSize: 1600,
465
- gridSize: 1224,
466
- rows: 16,
467
- columns: 12,
468
- gap: 16,
469
- rowSize: 48
470
- };
471
- var Layout_default = Layout;
472
-
473
- // src/elements/Map.tsx
474
- var import_react7 = __toESM(require("react"));
475
- var Map = (0, import_react7.forwardRef)((props, ref) => {
476
- let { place, zoom, ...rest } = props;
477
- return /* @__PURE__ */ import_react7.default.createElement("div", {
478
- ref,
479
- ...rest
480
- }, /* @__PURE__ */ import_react7.default.createElement("iframe", {
481
- loading: "lazy",
482
- width: "100%",
483
- height: "100%",
484
- title: "map",
485
- src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
486
- style: { pointerEvents: "none" }
487
- }));
488
- });
489
- var css6 = {
490
- "@desktop": {
491
- iframe: {
492
- border: "none"
493
- }
494
- },
495
- "@mobile": {
496
- iframe: {
497
- border: "none"
498
- }
499
- }
500
- };
501
- Map.defaultProps = {
502
- place: "Hanoi",
503
- zoom: 14
504
- };
505
- var Map_default = Map;
506
-
507
- // src/elements/Text.tsx
508
- var React8 = __toESM(require("react"));
509
- var Text = React8.forwardRef(
510
- (props, ref) => {
511
- let { children, value, ...rest } = props;
512
- return /* @__PURE__ */ React8.createElement("div", {
513
- ref,
514
- ...rest,
515
- dangerouslySetInnerHTML: { __html: value }
516
- });
517
- }
518
- );
519
- var css7 = {
520
- "@desktop": {
521
- padding: "10px",
522
- wordBreak: "break-word",
523
- overflowWrap: "break-word",
524
- whiteSpace: "break-spaces"
525
- }
526
- };
527
- Text.defaultProps = {
528
- value: "The quick brown fox jumps over the lazy dog"
529
- };
530
- var Text_default = Text;
531
-
532
- // src/elements/Video/index.tsx
533
- var import_react11 = __toESM(require("react"));
534
-
535
- // src/elements/Video/HTMLVideo.tsx
536
- var import_react8 = __toESM(require("react"));
537
- function HTMLVideo(props) {
538
- let { src, type, controls, autoPlay, loop, muted } = props;
539
- return /* @__PURE__ */ import_react8.default.createElement("video", {
540
- controls,
541
- autoPlay,
542
- loop,
543
- muted,
544
- controlsList: "nodownload",
545
- disablePictureInPicture: true
546
- }, /* @__PURE__ */ import_react8.default.createElement("source", {
547
- src,
548
- type: type || "video/mp4"
549
- }), /* @__PURE__ */ import_react8.default.createElement("source", {
550
- src,
551
- type: "video/ogg"
552
- }), "Your browser does not support the video tag.");
553
- }
554
-
555
- // src/elements/Video/Vimeo.tsx
556
- var import_react9 = __toESM(require("react"));
557
- function Vimeo(props) {
558
- let { vimeoId, controls, autoPlay, loop, muted } = props;
559
- let params = `autoplay=${autoPlay}&loop=${loop}&controls=${controls}&muted=${muted}`;
560
- let vimeoSrc = `https://player.vimeo.com/video/${vimeoId}?${params}`;
561
- return /* @__PURE__ */ import_react9.default.createElement("iframe", {
562
- src: vimeoSrc,
563
- width: "100%",
564
- height: "100%",
565
- allowFullScreen: true
566
- });
567
- }
568
-
569
- // src/elements/Video/Youtube.tsx
570
- var import_react10 = __toESM(require("react"));
571
- function Youtube(props) {
572
- let { youtubeId, controls, autoPlay, loop, muted } = props;
573
- let params = new URLSearchParams({
574
- autoplay: autoPlay ? "1" : "0",
575
- controls: controls ? "1" : "0",
576
- loop: loop ? "1" : "0",
577
- mute: muted ? "1" : "0"
578
- });
579
- let youtubeSrc = `https://www.youtube.com/embed/${youtubeId}?${params.toString()}`;
580
- let allow = `accelerometer;${autoPlay ? "autoplay;" : ""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`;
581
- return /* @__PURE__ */ import_react10.default.createElement("iframe", {
582
- src: youtubeSrc,
583
- width: "100%",
584
- height: "100%",
585
- allowFullScreen: true,
586
- allow
587
- });
588
- }
589
-
590
- // src/elements/Video/index.tsx
591
- var Video = (0, import_react11.forwardRef)((props, ref) => {
592
- let { isDesignMode } = (0, import_react11.useContext)(WeaverseContext);
593
- let {
594
- src,
595
- controls,
596
- poster,
597
- autoPlay: originAutoPlay,
598
- loop,
599
- muted,
600
- ...rest
601
- } = props;
602
- let autoPlay = !isDesignMode && originAutoPlay;
603
- let videoProps = { src, controls, poster, autoPlay, loop, muted };
604
- let content;
605
- let youtubeId = getYoutubeEmbedId(src);
606
- let vimeoId = getVimeoId(src);
607
- if (youtubeId) {
608
- content = /* @__PURE__ */ import_react11.default.createElement(Youtube, {
609
- ...videoProps,
610
- youtubeId
611
- });
612
- } else if (vimeoId) {
613
- content = /* @__PURE__ */ import_react11.default.createElement(Vimeo, {
614
- ...videoProps,
615
- vimeoId
616
- });
617
- } else {
618
- content = /* @__PURE__ */ import_react11.default.createElement(HTMLVideo, {
619
- ...videoProps
620
- });
621
- }
622
- return /* @__PURE__ */ import_react11.default.createElement("div", {
623
- ref,
624
- ...rest
625
- }, content);
626
- });
627
- var css8 = {
628
- "@desktop": {
629
- video: {
630
- height: "100%",
631
- width: "100%",
632
- aspectRatio: "16 / 9"
633
- },
634
- iframe: {
635
- border: "none"
636
- }
637
- },
638
- "@mobile": {
639
- iframe: {
640
- border: "none"
641
- }
642
- }
643
- };
644
- Video.defaultProps = {
645
- src: "https://youtu.be/wM-NT6hcw48",
646
- poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
647
- loop: false,
648
- controls: false,
649
- autoPlay: true,
650
- muted: true
651
- };
652
- var Video_default = Video;
653
-
654
- // src/elements/Instagram.tsx
655
- var import_react16 = __toESM(require("react"));
656
-
657
- // src/components/Placeholder.tsx
658
- var import_react12 = __toESM(require("react"));
659
- var Placeholder = (0, import_react12.forwardRef)(
660
- (props, ref) => {
661
- let { element, children, ...rest } = props;
662
- return /* @__PURE__ */ import_react12.default.createElement("div", {
663
- "data-wv-placeholder": true,
664
- ref,
665
- ...rest
666
- }, /* @__PURE__ */ import_react12.default.createElement("div", {
667
- style: { fontWeight: 600, marginBottom: "10px" }
668
- }, element), /* @__PURE__ */ import_react12.default.createElement("div", null, children));
669
- }
670
- );
671
- var Placeholder_default = Placeholder;
672
-
673
- // src/components/Modal/index.tsx
674
- var Modal_exports = {};
675
- __export(Modal_exports, {
676
- Modal: () => Modal,
677
- ModalClose: () => ModalClose,
678
- ModalContent: () => ModalContent,
679
- ModalHeader: () => ModalHeader,
680
- ModalTrigger: () => ModalTrigger
681
- });
682
- var import_react_dialog2 = require("@radix-ui/react-dialog");
683
- var import_react14 = __toESM(require("react"));
684
-
685
- // src/components/Modal/styled.ts
686
- var import_react_dialog = require("@radix-ui/react-dialog");
687
- var import_react13 = require("@stitches/react");
688
- var overlayShow = (0, import_react13.keyframes)({
689
- "0%": { opacity: 0 },
690
- "100%": { opacity: 1 }
691
- });
692
- var contentShow = (0, import_react13.keyframes)({
693
- "0%": { opacity: 0, transform: "translate(-50%, -48%) scale(.96)" },
694
- "100%": { opacity: 1, transform: "translate(-50%, -50%) scale(1)" }
695
- });
696
- var StyledOverlay = (0, import_react13.styled)(import_react_dialog.Overlay, {
697
- display: "block !important",
698
- backgroundColor: "rgba(0, 0, 0, .3)",
699
- position: "fixed",
700
- zIndex: 9999,
701
- inset: 0,
702
- animation: `${overlayShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`
703
- });
704
- var StyledTitle = (0, import_react13.styled)(import_react_dialog.Title, {
705
- margin: "0 0 24px",
706
- fontWeight: 500,
707
- fontSize: 24,
708
- "@media (max-width: 768px)": {
709
- margin: "0 0 16px",
710
- fontSize: 20
711
- }
712
- });
713
- var StyledContent = (0, import_react13.styled)(import_react_dialog.Content, {
714
- backgroundColor: "white",
715
- borderRadius: 6,
716
- boxShadow: "hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",
717
- position: "fixed",
718
- top: "50%",
719
- left: "50%",
720
- transform: "translate(-50%, -50%)",
721
- padding: 24,
722
- animation: `${contentShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,
723
- zIndex: 9999,
724
- maxWidth: "90vw",
725
- width: "auto",
726
- "*": {
727
- maxWidth: "100%"
728
- },
729
- "&:focus": { outline: "none" },
730
- '&[data-size="fullscreen"]': {
731
- width: "100vw",
732
- height: "100vh",
733
- maxWidth: "100vw",
734
- borderRadius: 0
735
- },
736
- "@media (max-width: 768px)": {
737
- width: "90vw",
738
- padding: 12,
739
- '&[data-size="fullscreen"]': {
740
- width: "100vw"
741
- }
742
- }
743
- });
744
- var StyledCloseIcon = (0, import_react13.styled)("button", {
745
- all: "unset",
746
- cursor: "pointer",
747
- fontFamily: "inherit",
748
- borderRadius: "100%",
749
- height: 25,
750
- width: 25,
751
- padding: 4,
752
- display: "inline-flex",
753
- alignItems: "center",
754
- justifyContent: "center",
755
- color: "rgb(55, 65, 81)",
756
- position: "absolute",
757
- top: 8,
758
- right: 8,
759
- "&:hover": {
760
- backgroundColor: "rgba(112, 112, 112, .1)"
761
- },
762
- svg: {
763
- width: 20,
764
- height: 20
765
- }
766
- });
767
-
768
- // src/components/Modal/index.tsx
769
- var Modal = import_react_dialog2.Root;
770
- var ModalTrigger = import_react_dialog2.Trigger;
771
- var ModalHeader = (0, import_react14.forwardRef)(
772
- (props, ref) => {
773
- let { children, ...rest } = props;
774
- return /* @__PURE__ */ import_react14.default.createElement(StyledTitle, {
775
- ref,
776
- ...rest,
777
- "data-wv-modal-header": true
778
- }, children);
779
- }
780
- );
781
- var ModalContent = (0, import_react14.forwardRef)(
782
- (props, ref) => {
783
- let { children, size, portal, ...rest } = props;
784
- let modalContent = /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement(StyledOverlay, null), /* @__PURE__ */ import_react14.default.createElement(StyledContent, {
785
- ...rest,
786
- onCloseAutoFocus: (e) => e.preventDefault(),
787
- "data-wv-modal": true,
788
- "data-size": size,
789
- ref
790
- }, /* @__PURE__ */ import_react14.default.createElement(ModalClose, null), /* @__PURE__ */ import_react14.default.createElement("div", {
791
- className: "wv-modal-content"
792
- }, children)));
793
- if (portal) {
794
- return /* @__PURE__ */ import_react14.default.createElement(import_react_dialog2.Portal, null, modalContent);
795
- }
796
- return modalContent;
797
- }
798
- );
799
- ModalContent.defaultProps = {
800
- size: "auto",
801
- portal: false
802
- };
803
- var ModalClose = (0, import_react14.forwardRef)(
804
- (props, ref) => {
805
- let { asChild, children, ...rest } = props;
806
- let closeIcon = /* @__PURE__ */ import_react14.default.createElement(StyledCloseIcon, null, /* @__PURE__ */ import_react14.default.createElement("svg", {
807
- xmlns: "http://www.w3.org/2000/svg",
808
- width: "20",
809
- height: "20",
810
- fill: "#000000",
811
- viewBox: "0 0 256 256"
812
- }, /* @__PURE__ */ import_react14.default.createElement("rect", {
813
- width: "256",
814
- height: "256",
815
- fill: "none"
816
- }), /* @__PURE__ */ import_react14.default.createElement("line", {
817
- x1: "200",
818
- y1: "56",
819
- x2: "56",
820
- y2: "200",
821
- fill: "none",
822
- stroke: "#000000",
823
- strokeLinecap: "round",
824
- strokeLinejoin: "round",
825
- strokeWidth: "12"
826
- }), /* @__PURE__ */ import_react14.default.createElement("line", {
827
- x1: "200",
828
- y1: "200",
829
- x2: "56",
830
- y2: "56",
831
- fill: "none",
832
- stroke: "#000000",
833
- strokeLinecap: "round",
834
- strokeLinejoin: "round",
835
- strokeWidth: "12"
836
- })));
837
- return /* @__PURE__ */ import_react14.default.createElement(import_react_dialog2.Close, {
838
- asChild: true,
839
- ...rest,
840
- ref
841
- }, asChild ? children : closeIcon);
842
- }
843
- );
844
-
845
- // src/components/Spinner.tsx
846
- var import_react15 = __toESM(require("react"));
847
- function Spinner() {
848
- return /* @__PURE__ */ import_react15.default.createElement("span", {
849
- className: "wv-spinner-wrapper"
850
- }, /* @__PURE__ */ import_react15.default.createElement("svg", {
851
- className: "wv-spinner",
852
- xmlns: "http://www.w3.org/2000/svg",
853
- fill: "none",
854
- viewBox: "0 0 24 24"
855
- }, /* @__PURE__ */ import_react15.default.createElement("circle", {
856
- style: { opacity: ".25" },
857
- cx: "12",
858
- cy: "12",
859
- r: "10",
860
- stroke: "currentColor",
861
- strokeWidth: "4"
862
- }), /* @__PURE__ */ import_react15.default.createElement("path", {
863
- style: { opacity: ".75" },
864
- fill: "currentColor",
865
- 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"
866
- })));
867
- }
868
-
869
- // src/components/index.ts
870
- var Components = {
871
- Placeholder: Placeholder_default,
872
- Spinner,
873
- ModalComponents: Modal_exports
874
- };
875
-
876
- // src/elements/Instagram.tsx
877
- var Instagram = (0, import_react16.forwardRef)(
878
- (props, ref) => {
879
- let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
880
- let [media, setMedia] = (0, import_react16.useState)([]);
881
- let [error, setError] = (0, import_react16.useState)(null);
882
- (0, import_react16.useEffect)(() => {
883
- if (token) {
884
- let params = new URLSearchParams({
885
- access_token: token,
886
- fields: "id,media_type,caption,media_url,permalink"
887
- });
888
- fetch(`${INSTAGRAM_API}/me/media?${params.toString()}`).then((res) => res.json()).then((res) => {
889
- if (res.error) {
890
- setError(res);
891
- } else {
892
- setError(null);
893
- setMedia([...res.data]);
894
- }
895
- }).catch(setError);
896
- }
897
- }, [token]);
898
- if (!token || error) {
899
- return /* @__PURE__ */ import_react16.default.createElement("div", {
900
- ref,
901
- ...rest
902
- }, /* @__PURE__ */ import_react16.default.createElement(Components.Placeholder, {
903
- element: "Instagram"
904
- }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
905
- }
906
- let style = {
907
- "--wv-ig-images-per-row": imagesPerRow,
908
- "--wv-ig-images-gap": gap + "px"
909
- };
910
- return /* @__PURE__ */ import_react16.default.createElement("div", {
911
- ref,
912
- ...rest,
913
- style
914
- }, /* @__PURE__ */ import_react16.default.createElement("div", {
915
- className: "wv-ig-media-container"
916
- }, media.slice(0, numberOfImages).map((item) => {
917
- let { id, permalink, caption, media_url } = item;
918
- return /* @__PURE__ */ import_react16.default.createElement("a", {
919
- key: id,
920
- href: permalink,
921
- target: "_blank",
922
- rel: "noreferrer"
923
- }, /* @__PURE__ */ import_react16.default.createElement("img", {
924
- alt: caption,
925
- src: media_url
926
- }));
927
- })));
928
- }
929
- );
930
- var css9 = {};
931
- var permanentCss2 = {
932
- "@desktop": {
933
- ".wv-ig-media-container": {
934
- overflow: "hidden",
935
- maxWidth: "100%",
936
- maxHeight: "100%",
937
- display: "grid",
938
- gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
939
- gap: "var(--wv-ig-images-gap, 0px)",
940
- img: {
941
- maxWidth: "100%",
942
- maxHeight: "100%",
943
- objectFit: "cover"
944
- }
945
- }
946
- },
947
- "@mobile": {
948
- ".wv-ig-media-container": {
949
- overflowX: "auto",
950
- display: "flex",
951
- scrollSnapType: "x mandatory"
952
- },
953
- ".wv-ig-media-container a": {
954
- scrollSnapAlign: "start",
955
- flexGrow: 0,
956
- flexShrink: 0,
957
- flexBasis: "100%"
958
- }
959
- }
960
- };
961
- Instagram.defaultProps = {
962
- token: "",
963
- username: "",
964
- numberOfImages: 8,
965
- imagesPerRow: 4,
966
- gap: 0
967
- };
968
- var Instagram_default = Instagram;
969
-
970
- // src/elements/index.ts
971
- var Elements = {
972
- Countdown: {
973
- Component: Countdown_default,
974
- type: "countdown",
975
- defaultCss: css3
976
- },
977
- Button: {
978
- Component: Button_default,
979
- type: "button",
980
- defaultCss: css
981
- },
982
- Container: {
983
- Component: Container_default,
984
- type: "container",
985
- defaultCss: css2
986
- },
987
- Image: {
988
- Component: Image_default,
989
- type: "image",
990
- defaultCss: css4
991
- },
992
- Instagram: {
993
- Component: Instagram_default,
994
- type: "instagram",
995
- defaultCss: css9,
996
- permanentCss: permanentCss2
997
- },
998
- Layout: {
999
- Component: Layout_default,
1000
- type: "layout",
1001
- defaultCss: css5,
1002
- permanentCss
1003
- },
1004
- Map: {
1005
- Component: Map_default,
1006
- type: "map",
1007
- defaultCss: css6
1008
- },
1009
- Text: {
1010
- Component: Text_default,
1011
- type: "text",
1012
- defaultCss: css7
1013
- },
1014
- Video: {
1015
- Component: Video_default,
1016
- type: "video",
1017
- defaultCss: css8
1018
- }
1019
- };
1020
-
1021
- // src/context.ts
1022
- var createRootContext = (configs) => {
1023
- let rootContext = new import_core.Weaverse(configs);
1024
- Object.keys(Elements).forEach((key) => {
1025
- rootContext.registerElement(Elements[key]);
1026
- });
1027
- return rootContext;
1028
- };
1029
- var WeaverseContext = (0, import_react17.createContext)({});
1030
- var WeaverseContextProvider = WeaverseContext.Provider;
1031
- var WeaverseContextConsumer = WeaverseContext.Consumer;
1032
-
1033
- // src/renderer.tsx
1034
- var import_core2 = require("@weaverse/core");
1035
- var import_react18 = __toESM(require("react"));
1036
- var WeaverseRoot = ({ context }) => {
1037
- let [, setData] = (0, import_react18.useState)(context.projectData);
1038
- let rootRef = (0, import_react18.useRef)();
1039
- let renderRoot = () => setData({});
1040
- (0, import_react18.useEffect)(() => {
1041
- context.subscribe(renderRoot);
1042
- context.contentRootElement = rootRef.current;
1043
- return () => {
1044
- context.unsubscribe(renderRoot);
1045
- };
1046
- }, []);
1047
- let eventHandlers = context?.studioBridge?.eventHandlers || {};
1048
- let themeClass = context.stitchesInstance.theme.className;
1049
- if (context.projectData?.rootId) {
1050
- return /* @__PURE__ */ import_react18.default.createElement("div", {
1051
- className: `weaverse-content-root ${themeClass}`,
1052
- ...eventHandlers,
1053
- ref: rootRef
1054
- }, /* @__PURE__ */ import_react18.default.createElement(WeaverseContextProvider, {
1055
- value: context
1056
- }, /* @__PURE__ */ import_react18.default.createElement(ItemInstance, {
1057
- id: context.projectData.rootId
1058
- })));
1059
- }
1060
- return null;
1061
- };
1062
- var ItemComponent = ({ instance }) => {
1063
- let { stitchesInstance, elementInstances } = (0, import_react18.useContext)(WeaverseContext);
1064
- let [data, setData] = (0, import_react18.useState)(instance.data);
1065
- let { id, type, childIds = [], css: css10, className, ...rest } = data;
1066
- (0, import_react18.useEffect)(() => {
1067
- let render = (data2) => setData({ ...data2 });
1068
- instance.subscribe(render);
1069
- if (import_core2.isBrowser && !instance.ref.current) {
1070
- Object.assign(instance.ref, {
1071
- current: document.querySelector(`[data-wv-id="${id}"]`)
1072
- });
1073
- }
1074
- return () => instance.unsubscribe(render);
1075
- }, []);
1076
- let Element = elementInstances.get(type);
1077
- if (Element?.Component) {
1078
- let Component = Element.Component;
1079
- if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1080
- rest.ref = instance.ref;
1081
- }
1082
- return /* @__PURE__ */ import_react18.default.createElement(Component, {
1083
- key: id,
1084
- "data-wv-type": type,
1085
- "data-wv-id": id,
1086
- className: generateItemClass(instance, stitchesInstance),
1087
- ...rest
1088
- }, childIds.map((id2) => /* @__PURE__ */ import_react18.default.createElement(ItemInstance, {
1089
- key: id2,
1090
- id: id2
1091
- })));
1092
- } else {
1093
- console.log(`Unknown element: ${type}`);
1094
- return null;
1095
- }
1096
- };
1097
- var ItemInstance = ({ id }) => {
1098
- let context = (0, import_react18.useContext)(WeaverseContext);
1099
- let { itemInstances } = context;
1100
- let instance = itemInstances.get(id);
1101
- if (!instance) {
1102
- return /* @__PURE__ */ import_react18.default.createElement("div", {
1103
- style: { display: "none" }
1104
- }, "Item instance ", id, " not found");
1105
- }
1106
- return /* @__PURE__ */ import_react18.default.createElement(ItemComponent, {
1107
- key: id,
1108
- instance
1109
- });
1110
- };
1111
- // Annotate the CommonJS export names for ESM import in node:
1112
- 0 && (module.exports = {
1113
- Components,
1114
- Elements,
1115
- WeaverseContext,
1116
- WeaverseContextConsumer,
1117
- WeaverseContextProvider,
1118
- WeaverseRoot,
1119
- createRootContext
1120
- });
1
+ "use strict";var it=Object.create;var B=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var lt=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty;var J=(e,t)=>{for(var o in t)B(e,o,{get:t[o],enumerable:!0})},A=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of lt(t))!pt.call(e,n)&&n!==o&&B(e,n,{get:()=>t[n],enumerable:!(r=st(t,n))||r.enumerable});return e},E=(e,t,o)=>(A(e,t,"default"),o&&A(o,t,"default")),m=(e,t,o)=>(o=e!=null?it(at(e)):{},A(t||!e||!e.__esModule?B(o,"default",{value:e,enumerable:!0}):o,e)),mt=e=>A(B({},"__esModule",{value:!0}),e);var k={};J(k,{Components:()=>te,Elements:()=>U,WeaverseContext:()=>C,WeaverseContextConsumer:()=>At,WeaverseContextProvider:()=>oe,WeaverseRoot:()=>Bt,createRootContext:()=>zt});module.exports=mt(k);E(k,require("@weaverse/core"),module.exports);var tt=require("@weaverse/core"),ot=require("react");var D=m(require("react")),re=require("react");var ne=D.forwardRef((e,t)=>{let{isDesignMode:o}=(0,re.useContext)(C),{text:r,clickAction:n,linkTo:i,openInNewTab:s,...l}=e;return n&&i?D.createElement("a",{href:o?void 0:i,target:s?"_blank":"_self",rel:"noreferrer",...l,ref:t},r):D.createElement("button",{ref:t,...l},r)});ne.defaultProps={type:"button",text:"Button",clickAction:"none",linkTo:"",openInNewTab:!1};var ie={"@desktop":{borderRadius:"8px",border:"none",backgroundColor:"#393e46",color:"#fff",fontSize:"14px",fontWeight:"medium",padding:"10px 20px",height:"42px",minWidth:"120px",textDecoration:"none",":hover":{backgroundColor:"#222831"}}},se=ne;var V=m(require("react")),le=(0,V.forwardRef)((e,t)=>{let{children:o,...r}=e;return V.default.createElement("div",{ref:t,...r},o)}),ae={"@desktop":{alignItems:"flex-start",display:"flex",flexDirection:"column",gridArea:"1 / 1 / 3 / 6",height:"fit-content",justifyContent:"flex-start",overflow:"hidden",textAlign:"left",width:"100%"}};le.defaultProps={};var pe=le;var h=m(require("react"));var me=["days","hours","minutes","seconds"],O="wv-cd-evergreen-start",de="https://graph.instagram.com";function ut(e){return{"@desktop":e["@desktop"],"@mobile":e["@mobile"]}}var Q={};function ce(e,t){let{css:o,type:r,className:n=""}=e.data,i="",s="",l=e.Element?.permanentCss;if(l)if(r in Q)s=Q[r];else{let{className:g}=t.css(l)();Object.assign(Q,{[r]:g}),s=g}if(i=s,o){let g=ut(o),{className:x=""}=t.css(g)(),{stitchesClass:b}=e,p=(e.ref.current?.className||"").replace(b,"").replace(n,"").replace(s,"").trim();i=`${s} ${n} ${x} ${p}`.trim(),e.stitchesClass=x}return i}function ue(e){let t=6e4,o=60*t,r=24*o,n=Math.floor(e/r),i=Math.floor((e-n*r)/o),s=Math.floor((e-n*r-i*o)/t),l=Math.floor((e-n*r-i*o-s*t)/1e3);return{days:n,hours:i,minutes:s,seconds:l}}function fe(e){let t=e.match(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/);return t?t[1]:null}function ge(e){let t=e.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);return t?t[1]:null}var _=m(require("react"));function ve({value:e,label:t}){return _.default.createElement("div",{className:"wv-cd-block"},_.default.createElement("div",{className:"wv-cd-number"},typeof e=="string"?e:e.toString().padStart(2,"0")),t&&_.default.createElement("div",{className:"wv-cd-label"},t))}var ye=(0,h.forwardRef)((e,t)=>{let{isDesignMode:o}=(0,h.useContext)(C),{timerType:r,startTime:n,endTime:i,periods:s,redirectUrl:l,openInNewTab:g,showColon:x,showLabel:b,...p}=e,[f,y]=h.default.useState(0),w=s*60*1e3,G=()=>{!o&&l&&window.open(l,g?"_blank":"_self")},Y=()=>{let d=n;if(r==="evergreen"){let z=localStorage.getItem(O);z?(d=Number.parseInt(z),d+w<Date.now()&&(d=Date.now(),localStorage.setItem(O,d.toString()))):(d=Date.now(),localStorage.setItem(O,d.toString()))}return d},j=d=>d<Date.now()&&i>Date.now(),K=()=>{let d=Y(),z=r==="fixed-time"?i:d+w,X=j(d)?Math.max(z-Date.now(),0):0;X>0&&X<1e3&&G(),y(X)};(0,h.useEffect)(()=>{let d=setInterval(K,1e3);return()=>{clearInterval(d)}},[n,i,w,r]);let q=ue(f);return h.default.createElement("div",{ref:t,...p},me.map(d=>h.default.createElement(h.default.Fragment,{key:d},h.default.createElement(ve,{label:b?d:"",value:f===0?"--":q[d]}),d!=="seconds"&&h.default.createElement("div",{className:"wv-cd-separator"},x&&h.default.createElement("span",null,":")))))}),we={"@desktop":{fontFamily:"Inter",fontSize:"36px",fontWeight:500,display:"flex",alignItems:"center",overflow:"hidden",justifyContent:"center",gap:10,lineHeight:"initial",".wv-cd-block":{width:48,textAlign:"center",".wv-cd-label":{fontSize:10}},".wv-cd-separator":{span:{lineHeight:"100%"},".hidden":{visibility:"hidden"}}}};ye.defaultProps={timerType:"fixed-time",startTime:Date.now(),endTime:Date.now()+1e3*60*60*24,periods:90,redirectUrl:"",openInNewTab:!1,showLabel:!0,showColon:!0};var he=ye;var H=m(require("react")),xe=H.default.forwardRef((e,t)=>{let{src:o,alt:r,objectFit:n,objectPosition:i,onClickAction:s,openLinkInNewTab:l,linkTo:g,...x}=e,b={"--wv-img-object-fit":n,"--wv-img-object-position":i},p=H.default.createElement("img",{alt:r,"data-blink-src":o});return s==="open-link"&&g&&(p=H.default.createElement("a",{href:g,target:l?"_blank":"_self"},p)),H.default.createElement("div",{ref:t,...x,style:b},p)}),be={"@desktop":{display:"flex",overflow:"hidden",img:{width:"100%",height:"100%",objectFit:"var(--wv-img-object-fit, cover)",objectPosition:"var(--wv-img-object-position, center)","&[data-blink-src]":{visibility:"hidden"}}}};xe.defaultProps={src:"https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/",alt:"Image alt text",objectFit:"cover",objectPosition:"center",onClickAction:"open-link",openLinkInNewTab:!1,linkTo:""};var Ce=xe;var S=m(require("react")),Pe=(0,S.forwardRef)((e,t)=>{let{children:o,rows:r,gap:n,rowSize:i,columns:s,contentSize:l,gridSize:g,backgroundColor:x,backgroundImage:b,objectFit:p,...f}=e,y={"--layout-content-width":"100vw","--content-size":l+"px","--grid-size":g+"px","--rows":r,"--columns":s,"--gap":n+"px","--row-size":i+"px","--col-size":"calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"};return S.default.createElement("div",{ref:t,...f,style:y},S.default.createElement(vt,{imgUrl:b,bgColor:x,objectFit:p}),S.default.createElement("div",{"data-layout-content":!0},o))}),vt=e=>{let{bgColor:t,imgUrl:o,objectFit:r}=e,n={["--bg-color"]:t,["--object-fit"]:r};return o||t?S.default.createElement("div",{style:n,className:"wv-layout-background"},o&&S.default.createElement("img",{width:"100%",height:"100%","data-blink-src":o,alt:"Section background"})):null},ke={"@desktop":{"> [data-layout-content]":{paddingTop:"var(--gap)",paddingBottom:"var(--gap)",margin:"0 auto",display:"grid",gridTemplateRows:"repeat(var(--rows), var(--row-size))",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)",gridAutoRows:"var(--row-size)",gap:"var(--gap)",maxWidth:"var(--layout-content-width)"}},"@mobile":{padding:"0 16px","> [data-layout-content]":{display:"flex",flexDirection:"column"}}},Ee={"@desktop":{".wv-layout-background":{position:"absolute",inset:0,backgroundColor:"var(--bg-color)"},img:{objectFit:"var(--object-fit, cover)"}}};Pe.defaultProps={contentSize:1600,gridSize:1224,rows:16,columns:12,gap:16,rowSize:48};var Se=Pe;var N=m(require("react")),Te=(0,N.forwardRef)((e,t)=>{let{place:o,zoom:r,...n}=e;return N.default.createElement("div",{ref:t,...n},N.default.createElement("iframe",{loading:"lazy",width:"100%",height:"100%",title:"map",src:`https://maps.google.com/maps?z=${r}&t=m&q=${o}&ie=UTF8&&output=embed`,style:{pointerEvents:"none"}}))}),Ie={"@desktop":{iframe:{border:"none"}},"@mobile":{iframe:{border:"none"}}};Te.defaultProps={place:"Hanoi",zoom:14};var Le=Te;var $=m(require("react")),Me=$.forwardRef((e,t)=>{let{children:o,value:r,...n}=e;return $.createElement("div",{ref:t,...n,dangerouslySetInnerHTML:{__html:r}})}),We={"@desktop":{padding:"10px",wordBreak:"break-word",overflowWrap:"break-word",whiteSpace:"break-spaces"}};Me.defaultProps={value:"The quick brown fox jumps over the lazy dog"};var De=Me;var P=m(require("react"));var F=m(require("react"));function He(e){let{src:t,type:o,controls:r,autoPlay:n,loop:i,muted:s}=e;return F.default.createElement("video",{controls:r,autoPlay:n,loop:i,muted:s,controlsList:"nodownload",disablePictureInPicture:!0},F.default.createElement("source",{src:t,type:o||"video/mp4"}),F.default.createElement("source",{src:t,type:"video/ogg"}),"Your browser does not support the video tag.")}var Ne=m(require("react"));function je(e){let{vimeoId:t,controls:o,autoPlay:r,loop:n,muted:i}=e,s=`autoplay=${r}&loop=${n}&controls=${o}&muted=${i}`,l=`https://player.vimeo.com/video/${t}?${s}`;return Ne.default.createElement("iframe",{src:l,width:"100%",height:"100%",allowFullScreen:!0})}var ze=m(require("react"));function Ae(e){let{youtubeId:t,controls:o,autoPlay:r,loop:n,muted:i}=e,s=new URLSearchParams({autoplay:r?"1":"0",controls:o?"1":"0",loop:n?"1":"0",mute:i?"1":"0"}),l=`https://www.youtube.com/embed/${t}?${s.toString()}`;return ze.default.createElement("iframe",{src:l,width:"100%",height:"100%",allowFullScreen:!0,allow:`accelerometer;${r?"autoplay;":""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`})}var Be=(0,P.forwardRef)((e,t)=>{let{isDesignMode:o}=(0,P.useContext)(C),{src:r,controls:n,poster:i,autoPlay:s,loop:l,muted:g,...x}=e,p={src:r,controls:n,poster:i,autoPlay:!o&&s,loop:l,muted:g},f,y=fe(r),w=ge(r);return y?f=P.default.createElement(Ae,{...p,youtubeId:y}):w?f=P.default.createElement(je,{...p,vimeoId:w}):f=P.default.createElement(He,{...p}),P.default.createElement("div",{ref:t,...x},f)}),Ve={"@desktop":{video:{height:"100%",width:"100%",aspectRatio:"16 / 9"},iframe:{border:"none"}},"@mobile":{iframe:{border:"none"}}};Be.defaultProps={src:"https://youtu.be/wM-NT6hcw48",poster:"https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",loop:!1,controls:!1,autoPlay:!0,muted:!0};var Oe=Be;var v=m(require("react"));var L=m(require("react")),bt=(0,L.forwardRef)((e,t)=>{let{element:o,children:r,...n}=e;return L.default.createElement("div",{"data-wv-placeholder":!0,ref:t,...n},L.default.createElement("div",{style:{fontWeight:600,marginBottom:"10px"}},o),L.default.createElement("div",null,r))}),_e=bt;var R={};J(R,{Modal:()=>Dt,ModalClose:()=>Xe,ModalContent:()=>qe,ModalHeader:()=>Nt,ModalTrigger:()=>Ht});var I=require("@radix-ui/react-dialog"),c=m(require("react"));var $e=m(require("react"));var Z={};J(Z,{ArrowLeft:()=>St,ArrowRight:()=>Tt,CircleNotch:()=>Ct,Image:()=>It,Minus:()=>kt,Plus:()=>Et,ShoppingCart:()=>Lt,X:()=>Pt});var a=m(require("react")),Ct=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",...e},a.default.createElement("circle",{style:{opacity:".25"},cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),a.default.createElement("path",{style:{opacity:".75"},fill:"currentColor",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"})),Pt=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",fill:"#000000",viewBox:"0 0 256 256",...e},a.default.createElement("rect",{width:"256",height:"256",fill:"none"}),a.default.createElement("line",{x1:"200",y1:"56",x2:"56",y2:"200",fill:"none",stroke:"#000000",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"}),a.default.createElement("line",{x1:"200",y1:"200",x2:"56",y2:"56",fill:"none",stroke:"#000000",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"})),kt=e=>a.default.createElement("svg",{width:"196",height:"196",fill:"currentColor",stroke:"currentColor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",...e},a.default.createElement("path",{d:"M376 232H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h368c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"})),Et=e=>a.default.createElement("svg",{width:"196",height:"196",fill:"currentColor",stroke:"currentColor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",...e},a.default.createElement("path",{d:"M376 232H216V72c0-4.42-3.58-8-8-8h-32c-4.42 0-8 3.58-8 8v160H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h160v160c0 4.42 3.58 8 8 8h32c4.42 0 8-3.58 8-8V280h160c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"})),St=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},a.default.createElement("rect",{width:"256",height:"256",fill:"none"}),a.default.createElement("line",{x1:"216",y1:"128",x2:"40",y2:"128",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),a.default.createElement("polyline",{points:"112 56 40 128 112 200",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"})),Tt=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},a.default.createElement("rect",{width:"256",height:"256",fill:"none"}),a.default.createElement("line",{x1:"40",y1:"128",x2:"216",y2:"128",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),a.default.createElement("polyline",{points:"144 56 216 128 144 200",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"})),It=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",fill:"currentColor",viewBox:"0 0 640 512",...e},a.default.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"})),Lt=e=>a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},a.default.createElement("rect",{width:"256",height:"256",fill:"none"}),a.default.createElement("path",{d:"M184,184H69.8L41.9,30.6A8,8,0,0,0,34.1,24H16",fill:"none",stroke:"#ffffff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),a.default.createElement("circle",{cx:"80",cy:"204",r:"20",fill:"none",stroke:"#ffffff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),a.default.createElement("circle",{cx:"184",cy:"204",r:"20",fill:"none",stroke:"#ffffff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),a.default.createElement("path",{d:"M62.5,144H188.1a15.9,15.9,0,0,0,15.7-13.1L216,64H48",fill:"none",stroke:"#ffffff",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}));var Fe=m(require("clsx"));function M({name:e,className:t,...o}){let r=Z[e],n=(0,Fe.default)("wv-icon",t);return $e.default.createElement(r,{className:n,...o})}var W=require("@radix-ui/react-dialog"),T=require("@stitches/react"),Mt=(0,T.keyframes)({"0%":{opacity:0},"100%":{opacity:1}}),Wt=(0,T.keyframes)({"0%":{opacity:0,transform:"translate(-50%, -48%) scale(.96)"},"100%":{opacity:1,transform:"translate(-50%, -50%) scale(1)"}}),Ue=(0,T.styled)(W.Overlay,{display:"block !important",backgroundColor:"rgba(0, 0, 0, .3)",position:"fixed",zIndex:9999,inset:0,animation:`${Mt} 300ms cubic-bezier(0.16, 1, 0.3, 1)`}),Ge=(0,T.styled)(W.Title,{margin:"0 0 24px",fontWeight:500,fontSize:24,"@media (max-width: 768px)":{margin:"0 0 16px",fontSize:20}}),Ye=(0,T.styled)(W.Content,{backgroundColor:"white",borderRadius:6,boxShadow:"hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",position:"fixed",top:"50%",left:"50%",transform:"translate(-50%, -50%)",padding:24,animation:`${Wt} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,zIndex:9999,maxWidth:"90vw",width:"auto","*":{maxWidth:"100%"},"&:focus":{outline:"none"},'&[data-size="fullscreen"]':{width:"100vw",height:"100vh",maxWidth:"100vw",borderRadius:0},"@media (max-width: 768px)":{width:"90vw",padding:12,'&[data-size="fullscreen"]':{width:"100vw"}}}),Ke=(0,T.styled)("button",{all:"unset",cursor:"pointer",fontFamily:"inherit",borderRadius:"100%",height:25,width:25,padding:4,display:"inline-flex",alignItems:"center",justifyContent:"center",color:"rgb(55, 65, 81)",position:"absolute",top:8,right:8,"&:hover":{backgroundColor:"rgba(112, 112, 112, .1)"},svg:{width:20,height:20}});var Dt=e=>{let{children:t,open:o,defaultOpen:r,onOpenChange:n,...i}=e;return(0,c.useEffect)(()=>{o||r?document.body.classList.add("wv-modal-open"):document.body.classList.remove("wv-modal-open")},[o,r]),c.default.createElement(I.Root,{onOpenChange:l=>{l?document.body.classList.add("wv-modal-open"):document.body.classList.remove("wv-modal-open"),n?.(l)},open:o,defaultOpen:r,...i},t)},Ht=I.Trigger,Nt=(0,c.forwardRef)((e,t)=>{let{children:o,...r}=e;return c.default.createElement(Ge,{ref:t,...r,"data-wv-modal-header":!0},o)}),qe=(0,c.forwardRef)((e,t)=>{let{children:o,size:r,portal:n,...i}=e,s=c.default.createElement(c.default.Fragment,null,c.default.createElement(Ue,null),c.default.createElement(Ye,{...i,onCloseAutoFocus:l=>l.preventDefault(),"data-wv-modal":!0,"data-size":r,ref:t},c.default.createElement(Xe,null),c.default.createElement("div",{className:"wv-modal-content"},o)));return n?c.default.createElement(I.Portal,null,s):s});qe.defaultProps={size:"auto",portal:!1};var Xe=(0,c.forwardRef)((e,t)=>{let{asChild:o,children:r,...n}=e,i=c.default.createElement(Ke,null,c.default.createElement(M,{name:"X"}));return c.default.createElement(I.Close,{asChild:!0,...n,ref:t},o?r:i)});var ee=m(require("react"));function Je(){return ee.default.createElement("span",{className:"wv-spinner-wrapper"},ee.default.createElement(M,{name:"CircleNotch",className:"wv-spinner"}))}var te={Placeholder:_e,Spinner:Je,ModalComponents:R,Icon:M};var Qe=(0,v.forwardRef)((e,t)=>{let{token:o,username:r,numberOfImages:n,imagesPerRow:i,gap:s,...l}=e,[g,x]=(0,v.useState)([]),[b,p]=(0,v.useState)(null);if((0,v.useEffect)(()=>{if(o){let y=new URLSearchParams({access_token:o,fields:"id,media_type,caption,media_url,permalink,thumbnail_url"});fetch(`${de}/me/media?${y.toString()}`).then(w=>w.json()).then(w=>{w.error?p(w):(p(null),x([...w.data]))}).catch(p)}},[o]),!o||b)return v.default.createElement("div",{ref:t,...l},v.default.createElement(te.Placeholder,{element:"Instagram"},o?"Invalid or expired token!":"Connect to Instagram to display photos on your site."));let f={"--wv-ig-images-per-row":i,"--wv-ig-images-gap":s+"px"};return v.default.createElement("div",{ref:t,...l,style:f},v.default.createElement("div",{className:"wv-ig-media-container"},g.slice(0,n).map(y=>{let{id:w,permalink:G,caption:Y,media_url:j,media_type:K,thumbnail_url:q}=y;return K==="VIDEO"?v.default.createElement("video",{key:w,controls:!0,poster:q},v.default.createElement("source",{src:j,type:"video/mp4"})):v.default.createElement("a",{key:w,href:G,target:"_blank",rel:"noreferrer"},v.default.createElement("img",{alt:Y,src:j}))})))}),Ze={},Re={"@desktop":{".wv-ig-media-container":{overflow:"hidden",maxWidth:"100%",maxHeight:"100%",display:"grid",gridTemplateColumns:"repeat(var(--wv-ig-images-per-row, 4), 1fr)",gap:"var(--wv-ig-images-gap, 0px)",img:{maxWidth:"100%",maxHeight:"100%",objectFit:"cover"},video:{width:"100%",height:"100%"}}},"@mobile":{".wv-ig-media-container":{overflowX:"auto",display:"flex",scrollSnapType:"x mandatory"},".wv-ig-media-container a":{scrollSnapAlign:"start",flexGrow:0,flexShrink:0,flexBasis:"100%"}}};Qe.defaultProps={token:"",username:"",numberOfImages:8,imagesPerRow:4,gap:0};var et=Qe;var U={Countdown:{Component:he,type:"countdown",defaultCss:we},Button:{Component:se,type:"button",defaultCss:ie},Container:{Component:pe,type:"container",defaultCss:ae},Image:{Component:Ce,type:"image",defaultCss:be},Instagram:{Component:et,type:"instagram",defaultCss:Ze,permanentCss:Re},Layout:{Component:Se,type:"layout",defaultCss:ke,permanentCss:Ee},Map:{Component:Le,type:"map",defaultCss:Ie},Text:{Component:De,type:"text",defaultCss:We},Video:{Component:Oe,type:"video",defaultCss:Ve}};var zt=e=>{let t=new tt.Weaverse(e);return Object.keys(U).forEach(o=>{t.registerElement(U[o])}),t},C=(0,ot.createContext)({}),oe=C.Provider,At=C.Consumer;var rt=require("@weaverse/core"),u=m(require("react"));var Bt=({context:e})=>{let[,t]=(0,u.useState)(e.projectData),o=(0,u.useRef)(),r=()=>t({});(0,u.useEffect)(()=>(e.subscribe(r),e.contentRootElement=o.current,()=>{e.unsubscribe(r)}),[]);let n=e?.studioBridge?.eventHandlers||{},i=e.stitchesInstance.theme.className;return e.projectData?.rootId?u.default.createElement("div",{className:`weaverse-content-root ${i}`,...n,ref:o},u.default.createElement(oe,{value:e},u.default.createElement(nt,{id:e.projectData.rootId}))):null},Vt=({instance:e})=>{let{stitchesInstance:t,elementInstances:o}=(0,u.useContext)(C),[r,n]=(0,u.useState)(e.data),{id:i,type:s,childIds:l=[],css:g,className:x,...b}=r;(0,u.useEffect)(()=>{let f=y=>n({...y});return e.subscribe(f),rt.isBrowser&&!e.ref.current&&Object.assign(e.ref,{current:document.querySelector(`[data-wv-id="${i}"]`)}),()=>e.unsubscribe(f)},[]);let p=o.get(s);if(p?.Component){let f=p.Component;return f.$$typeof===Symbol.for("react.forward_ref")&&(b.ref=e.ref),u.default.createElement(f,{key:i,"data-wv-type":s,"data-wv-id":i,className:ce(e,t),...b},l.map(y=>u.default.createElement(nt,{key:y,id:y})))}else return console.log(`Unknown element: ${s}`),null},nt=({id:e})=>{let t=(0,u.useContext)(C),{itemInstances:o}=t,r=o.get(e);return r?u.default.createElement(Vt,{key:e,instance:r}):u.default.createElement("div",{style:{display:"none"}},"Item instance ",e," not found")};0&&(module.exports={Components,Elements,WeaverseContext,WeaverseContextConsumer,WeaverseContextProvider,WeaverseRoot,createRootContext});