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