@weaverse/react 0.7.33 → 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,1014 +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_react14 = 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_react13 = __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/elements/Instagram.tsx
674
- var Instagram = (0, import_react13.forwardRef)(
675
- (props, ref) => {
676
- let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
677
- let [media, setMedia] = (0, import_react13.useState)([]);
678
- let [error, setError] = (0, import_react13.useState)(null);
679
- (0, import_react13.useEffect)(() => {
680
- if (token) {
681
- let params = new URLSearchParams({
682
- access_token: token,
683
- fields: "id,media_type,caption,media_url,permalink"
684
- });
685
- fetch(`${INSTAGRAM_API}/me/media?${params.toString()}`).then((res) => res.json()).then((res) => {
686
- if (res.error) {
687
- setError(res);
688
- } else {
689
- setError(null);
690
- setMedia([...res.data]);
691
- }
692
- }).catch(setError);
693
- }
694
- }, [token]);
695
- if (!token || error) {
696
- return /* @__PURE__ */ import_react13.default.createElement("div", {
697
- ref,
698
- ...rest
699
- }, /* @__PURE__ */ import_react13.default.createElement(Placeholder_default, {
700
- element: "Instagram"
701
- }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
702
- }
703
- let style = {
704
- "--wv-ig-images-per-row": imagesPerRow,
705
- "--wv-ig-images-gap": gap + "px"
706
- };
707
- return /* @__PURE__ */ import_react13.default.createElement("div", {
708
- ref,
709
- ...rest,
710
- style
711
- }, /* @__PURE__ */ import_react13.default.createElement("div", {
712
- className: "wv-ig-media-container"
713
- }, media.slice(0, numberOfImages).map((item) => {
714
- let { id, permalink, caption, media_url } = item;
715
- return /* @__PURE__ */ import_react13.default.createElement("a", {
716
- key: id,
717
- href: permalink,
718
- target: "_blank",
719
- rel: "noreferrer"
720
- }, /* @__PURE__ */ import_react13.default.createElement("img", {
721
- alt: caption,
722
- src: media_url
723
- }));
724
- })));
725
- }
726
- );
727
- var css9 = {};
728
- var permanentCss2 = {
729
- "@desktop": {
730
- ".wv-ig-media-container": {
731
- overflow: "hidden",
732
- maxWidth: "100%",
733
- maxHeight: "100%",
734
- display: "grid",
735
- gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
736
- gap: "var(--wv-ig-images-gap, 0px)",
737
- img: {
738
- maxWidth: "100%",
739
- maxHeight: "100%",
740
- objectFit: "cover"
741
- }
742
- }
743
- },
744
- "@mobile": {
745
- ".wv-ig-media-container": {
746
- overflowX: "auto",
747
- display: "flex",
748
- scrollSnapType: "x mandatory"
749
- },
750
- ".wv-ig-media-container a": {
751
- scrollSnapAlign: "start",
752
- flexGrow: 0,
753
- flexShrink: 0,
754
- flexBasis: "100%"
755
- }
756
- }
757
- };
758
- Instagram.defaultProps = {
759
- token: "",
760
- username: "",
761
- numberOfImages: 8,
762
- imagesPerRow: 4,
763
- gap: 0
764
- };
765
- var Instagram_default = Instagram;
766
-
767
- // src/elements/index.ts
768
- var Elements = {
769
- Countdown: {
770
- Component: Countdown_default,
771
- type: "countdown",
772
- defaultCss: css3
773
- },
774
- Button: {
775
- Component: Button_default,
776
- type: "button",
777
- defaultCss: css
778
- },
779
- Container: {
780
- Component: Container_default,
781
- type: "container",
782
- defaultCss: css2
783
- },
784
- Image: {
785
- Component: Image_default,
786
- type: "image",
787
- defaultCss: css4
788
- },
789
- Instagram: {
790
- Component: Instagram_default,
791
- type: "instagram",
792
- defaultCss: css9,
793
- permanentCss: permanentCss2
794
- },
795
- Layout: {
796
- Component: Layout_default,
797
- type: "layout",
798
- defaultCss: css5,
799
- permanentCss
800
- },
801
- Map: {
802
- Component: Map_default,
803
- type: "map",
804
- defaultCss: css6
805
- },
806
- Text: {
807
- Component: Text_default,
808
- type: "text",
809
- defaultCss: css7
810
- },
811
- Video: {
812
- Component: Video_default,
813
- type: "video",
814
- defaultCss: css8
815
- }
816
- };
817
-
818
- // src/context.ts
819
- var createRootContext = (configs) => {
820
- let rootContext = new import_core.Weaverse(configs);
821
- Object.keys(Elements).forEach((key) => {
822
- rootContext.registerElement(Elements[key]);
823
- });
824
- return rootContext;
825
- };
826
- var WeaverseContext = (0, import_react14.createContext)({});
827
- var WeaverseContextProvider = WeaverseContext.Provider;
828
- var WeaverseContextConsumer = WeaverseContext.Consumer;
829
-
830
- // src/components/Modal.tsx
831
- var Modal_exports = {};
832
- __export(Modal_exports, {
833
- Modal: () => Modal,
834
- ModalClose: () => ModalClose,
835
- ModalContent: () => ModalContent,
836
- ModalHeader: () => ModalHeader,
837
- ModalTrigger: () => ModalTrigger
838
- });
839
- var import_react15 = __toESM(require("react"));
840
- var import_react_dialog = require("@radix-ui/react-dialog");
841
- var import_react16 = require("@stitches/react");
842
- var Modal = import_react_dialog.Root;
843
- var ModalTrigger = import_react_dialog.Trigger;
844
- var ModalHeader = (0, import_react16.styled)(import_react_dialog.Title, {
845
- margin: 0,
846
- fontWeight: 500,
847
- color: "#ededef",
848
- fontSize: 17
849
- });
850
- var ModalContent = (0, import_react15.forwardRef)(
851
- (props, ref) => {
852
- let { children, ...rest } = props;
853
- return /* @__PURE__ */ import_react15.default.createElement(import_react_dialog.Portal, null, /* @__PURE__ */ import_react15.default.createElement(StyledOverlay, null), /* @__PURE__ */ import_react15.default.createElement(StyledContent, {
854
- ...rest,
855
- onCloseAutoFocus: (e) => e.preventDefault(),
856
- ref
857
- }, /* @__PURE__ */ import_react15.default.createElement("div", null, /* @__PURE__ */ import_react15.default.createElement(ModalClose, null), /* @__PURE__ */ import_react15.default.createElement("div", null, children))));
858
- }
859
- );
860
- var ModalClose = import_react_dialog.Close;
861
- ModalClose.defaultProps = {
862
- asChild: true
863
- };
864
- var overlayShow = (0, import_react16.keyframes)({
865
- "0%": { opacity: 0 },
866
- "100%": { opacity: 1 }
867
- });
868
- var contentShow = (0, import_react16.keyframes)({
869
- "0%": { opacity: 0, transform: "translate(-50%, -48%) scale(.96)" },
870
- "100%": { opacity: 1, transform: "translate(-50%, -50%) scale(1)" }
871
- });
872
- var StyledOverlay = (0, import_react16.styled)(import_react_dialog.Overlay, {
873
- backgroundColor: "#707070",
874
- position: "fixed",
875
- zIndex: 9999,
876
- inset: 0,
877
- animation: `${overlayShow} 150ms cubic-bezier(0.16, 1, 0.3, 1)`
878
- });
879
- var StyledContent = (0, import_react16.styled)(import_react_dialog.Content, {
880
- backgroundColor: "white",
881
- borderRadius: 6,
882
- boxShadow: "hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",
883
- position: "fixed",
884
- top: "50%",
885
- left: "50%",
886
- transform: "translate(-50%, -50%)",
887
- width: "90vw",
888
- maxWidth: "450px",
889
- maxHeight: "85vh",
890
- padding: 25,
891
- animation: `${contentShow} 150ms cubic-bezier(0.16, 1, 0.3, 1)`,
892
- "&:focus": { outline: "none" },
893
- zIndex: 9999
894
- });
895
-
896
- // src/components/Spinner.tsx
897
- var import_react17 = __toESM(require("react"));
898
- function Spinner() {
899
- return /* @__PURE__ */ import_react17.default.createElement("span", {
900
- className: "wv-spinner-wrapper"
901
- }, /* @__PURE__ */ import_react17.default.createElement("svg", {
902
- className: "wv-spinner",
903
- xmlns: "http://www.w3.org/2000/svg",
904
- fill: "none",
905
- viewBox: "0 0 24 24"
906
- }, /* @__PURE__ */ import_react17.default.createElement("circle", {
907
- style: { opacity: ".25" },
908
- cx: "12",
909
- cy: "12",
910
- r: "10",
911
- stroke: "currentColor",
912
- strokeWidth: "4"
913
- }), /* @__PURE__ */ import_react17.default.createElement("path", {
914
- style: { opacity: ".75" },
915
- fill: "currentColor",
916
- 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"
917
- })));
918
- }
919
-
920
- // src/components/index.ts
921
- var Components = {
922
- Placeholder: Placeholder_default,
923
- Spinner,
924
- ModalComponents: Modal_exports
925
- };
926
-
927
- // src/renderer.tsx
928
- var import_core2 = require("@weaverse/core");
929
- var import_react18 = __toESM(require("react"));
930
- var WeaverseRoot = ({ context }) => {
931
- let [, setData] = (0, import_react18.useState)(context.projectData);
932
- let rootRef = (0, import_react18.useRef)();
933
- let renderRoot = () => setData({});
934
- (0, import_react18.useEffect)(() => {
935
- context.subscribe(renderRoot);
936
- context.contentRootElement = rootRef.current;
937
- return () => {
938
- context.unsubscribe(renderRoot);
939
- };
940
- }, []);
941
- let eventHandlers = context?.studioBridge?.eventHandlers || {};
942
- let themeClass = context.stitchesInstance.theme.className;
943
- if (context.projectData?.rootId) {
944
- return /* @__PURE__ */ import_react18.default.createElement("div", {
945
- className: `weaverse-content-root ${themeClass}`,
946
- ...eventHandlers,
947
- ref: rootRef
948
- }, /* @__PURE__ */ import_react18.default.createElement(WeaverseContextProvider, {
949
- value: context
950
- }, /* @__PURE__ */ import_react18.default.createElement(ItemInstance, {
951
- id: context.projectData.rootId
952
- })));
953
- }
954
- return null;
955
- };
956
- var ItemComponent = ({ instance }) => {
957
- let { stitchesInstance, elementInstances } = (0, import_react18.useContext)(WeaverseContext);
958
- let [data, setData] = (0, import_react18.useState)(instance.data);
959
- let { id, type, childIds = [], css: css10, className, ...rest } = data;
960
- (0, import_react18.useEffect)(() => {
961
- let render = (data2) => setData({ ...data2 });
962
- instance.subscribe(render);
963
- if (import_core2.isBrowser && !instance.ref.current) {
964
- Object.assign(instance.ref, {
965
- current: document.querySelector(`[data-wv-id="${id}"]`)
966
- });
967
- }
968
- return () => instance.unsubscribe(render);
969
- }, []);
970
- let Element = elementInstances.get(type);
971
- if (Element?.Component) {
972
- let Component = Element.Component;
973
- if (Component.$$typeof === Symbol.for("react.forward_ref")) {
974
- rest.ref = instance.ref;
975
- }
976
- return /* @__PURE__ */ import_react18.default.createElement(Component, {
977
- key: id,
978
- "data-wv-type": type,
979
- "data-wv-id": id,
980
- className: generateItemClass(instance, stitchesInstance),
981
- ...rest
982
- }, childIds.map((id2) => /* @__PURE__ */ import_react18.default.createElement(ItemInstance, {
983
- key: id2,
984
- id: id2
985
- })));
986
- } else {
987
- console.log(`Unknown element: ${type}`);
988
- return null;
989
- }
990
- };
991
- var ItemInstance = ({ id }) => {
992
- let context = (0, import_react18.useContext)(WeaverseContext);
993
- let { itemInstances } = context;
994
- let instance = itemInstances.get(id);
995
- if (!instance) {
996
- return /* @__PURE__ */ import_react18.default.createElement("div", {
997
- style: { display: "none" }
998
- }, "Item instance ", id, " not found");
999
- }
1000
- return /* @__PURE__ */ import_react18.default.createElement(ItemComponent, {
1001
- key: id,
1002
- instance
1003
- });
1004
- };
1005
- // Annotate the CommonJS export names for ESM import in node:
1006
- 0 && (module.exports = {
1007
- Components,
1008
- Elements,
1009
- WeaverseContext,
1010
- WeaverseContextConsumer,
1011
- WeaverseContextProvider,
1012
- WeaverseRoot,
1013
- createRootContext
1014
- });
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});