@weaverse/react 0.7.20 → 0.7.22
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.d.ts +7 -2
- package/dist/index.js +139 -113
- package/dist/index.mjs +78 -52
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -63,6 +63,11 @@ interface BackgroundDataProps {
|
|
|
63
63
|
interface LayoutElementProps extends BackgroundDataProps, GridContentElementProps {
|
|
64
64
|
gridSize: number;
|
|
65
65
|
}
|
|
66
|
+
interface LayoutBackgroundProps {
|
|
67
|
+
imgUrl?: string;
|
|
68
|
+
bgColor?: string;
|
|
69
|
+
objectFit?: CSSProperties['objectFit'];
|
|
70
|
+
}
|
|
66
71
|
interface MapElementProps extends WeaverseElementProps {
|
|
67
72
|
place: string;
|
|
68
73
|
zoom: number;
|
|
@@ -93,7 +98,7 @@ interface CountdownElementProps extends WeaverseElementProps {
|
|
|
93
98
|
}
|
|
94
99
|
declare type TimerBlockProps = {
|
|
95
100
|
label: string;
|
|
96
|
-
value: number;
|
|
101
|
+
value: string | number;
|
|
97
102
|
};
|
|
98
103
|
interface InstagramElementProps extends WeaverseElementProps {
|
|
99
104
|
token: string;
|
|
@@ -112,4 +117,4 @@ declare type InstagramMedia = {
|
|
|
112
117
|
|
|
113
118
|
declare let WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element | null;
|
|
114
119
|
|
|
115
|
-
export { ButtonElementProps, ContainerElementProps, CountdownElementProps, CountdownTimeKey, CountdownTimerType, Elements, GridContentElementProps, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutElementProps, MapElementProps, PlaceholderProps, SharedComponents, TextElementProps, TimerBlockProps, VideoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
|
|
120
|
+
export { ButtonElementProps, ContainerElementProps, CountdownElementProps, CountdownTimeKey, CountdownTimerType, Elements, GridContentElementProps, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutBackgroundProps, LayoutElementProps, MapElementProps, PlaceholderProps, SharedComponents, TextElementProps, TimerBlockProps, VideoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
|
package/dist/index.js
CHANGED
|
@@ -39,11 +39,29 @@ module.exports = __toCommonJS(src_exports);
|
|
|
39
39
|
|
|
40
40
|
// src/elements/button.tsx
|
|
41
41
|
var React = __toESM(require("react"));
|
|
42
|
+
var import_react2 = require("react");
|
|
43
|
+
|
|
44
|
+
// src/context.ts
|
|
45
|
+
var import_core = require("@weaverse/core");
|
|
46
|
+
var import_react = require("react");
|
|
47
|
+
var createRootContext = (configs) => {
|
|
48
|
+
let rootContext = new import_core.Weaverse(configs);
|
|
49
|
+
Object.keys(Elements).forEach((key) => {
|
|
50
|
+
rootContext.registerElement(Elements[key]);
|
|
51
|
+
});
|
|
52
|
+
return rootContext;
|
|
53
|
+
};
|
|
54
|
+
var WeaverseContext = (0, import_react.createContext)({});
|
|
55
|
+
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
56
|
+
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
57
|
+
|
|
58
|
+
// src/elements/button.tsx
|
|
42
59
|
var Button = React.forwardRef((props, ref) => {
|
|
60
|
+
let { isDesignMode } = (0, import_react2.useContext)(WeaverseContext);
|
|
43
61
|
let { text, clickAction, linkTo, openInNewTab, ...rest } = props;
|
|
44
62
|
if (clickAction && linkTo) {
|
|
45
63
|
return /* @__PURE__ */ React.createElement("a", {
|
|
46
|
-
href: linkTo,
|
|
64
|
+
href: !isDesignMode ? linkTo : void 0,
|
|
47
65
|
target: openInNewTab ? "_blank" : "_self",
|
|
48
66
|
rel: "noreferrer",
|
|
49
67
|
...rest,
|
|
@@ -76,11 +94,11 @@ var css = {
|
|
|
76
94
|
var button_default = Button;
|
|
77
95
|
|
|
78
96
|
// src/elements/container.tsx
|
|
79
|
-
var
|
|
80
|
-
var Container = (0,
|
|
97
|
+
var import_react3 = __toESM(require("react"));
|
|
98
|
+
var Container = (0, import_react3.forwardRef)(
|
|
81
99
|
(props, ref) => {
|
|
82
100
|
let { children, ...rest } = props;
|
|
83
|
-
return /* @__PURE__ */
|
|
101
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
84
102
|
ref,
|
|
85
103
|
...rest
|
|
86
104
|
}, children);
|
|
@@ -104,30 +122,16 @@ Container.defaultProps = {};
|
|
|
104
122
|
var container_default = Container;
|
|
105
123
|
|
|
106
124
|
// src/elements/countdown/index.tsx
|
|
107
|
-
var
|
|
108
|
-
|
|
109
|
-
// src/context.ts
|
|
110
|
-
var import_core = require("@weaverse/core");
|
|
111
|
-
var import_react2 = require("react");
|
|
112
|
-
var createRootContext = (configs) => {
|
|
113
|
-
let rootContext = new import_core.Weaverse(configs);
|
|
114
|
-
Object.keys(Elements).forEach((key) => {
|
|
115
|
-
rootContext.registerElement(Elements[key]);
|
|
116
|
-
});
|
|
117
|
-
return rootContext;
|
|
118
|
-
};
|
|
119
|
-
var WeaverseContext = (0, import_react2.createContext)({});
|
|
120
|
-
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
121
|
-
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
125
|
+
var import_react5 = __toESM(require("react"));
|
|
122
126
|
|
|
123
127
|
// src/elements/countdown/timer-block.tsx
|
|
124
|
-
var
|
|
128
|
+
var import_react4 = __toESM(require("react"));
|
|
125
129
|
function TimerBlock({ value, label }) {
|
|
126
|
-
return /* @__PURE__ */
|
|
130
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
127
131
|
className: "wv-cd-block"
|
|
128
|
-
}, /* @__PURE__ */
|
|
132
|
+
}, /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
129
133
|
className: "wv-cd-number"
|
|
130
|
-
}, value.toString().padStart(2, "0")), label && /* @__PURE__ */
|
|
134
|
+
}, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react4.default.createElement("div", {
|
|
131
135
|
className: "wv-cd-label"
|
|
132
136
|
}, label));
|
|
133
137
|
}
|
|
@@ -150,51 +154,75 @@ function getTime(_seconds) {
|
|
|
150
154
|
}
|
|
151
155
|
|
|
152
156
|
// src/elements/countdown/index.tsx
|
|
153
|
-
var
|
|
157
|
+
var countdownKey = "wv-cd-evergreen-start";
|
|
158
|
+
var Countdown = (0, import_react5.forwardRef)(
|
|
154
159
|
(props, ref) => {
|
|
155
|
-
const { isDesignMode } = (0,
|
|
160
|
+
const { isDesignMode } = (0, import_react5.useContext)(WeaverseContext);
|
|
156
161
|
let {
|
|
157
162
|
timerType,
|
|
158
|
-
startTime,
|
|
159
|
-
endTime,
|
|
160
|
-
periods,
|
|
163
|
+
startTime: startTimeProp,
|
|
164
|
+
endTime: endTimeProp,
|
|
165
|
+
periods: periodsProp,
|
|
161
166
|
redirectUrl,
|
|
162
167
|
openInNewTab,
|
|
163
168
|
showColon,
|
|
164
169
|
showLabel,
|
|
165
170
|
...rest
|
|
166
171
|
} = props;
|
|
167
|
-
const [remaining, setRemaining] =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
);
|
|
177
|
-
if (
|
|
178
|
-
|
|
179
|
-
|
|
172
|
+
const [remaining, setRemaining] = import_react5.default.useState(0);
|
|
173
|
+
let periods = periodsProp * 60 * 1e3;
|
|
174
|
+
const handleEnd = () => {
|
|
175
|
+
if (!isDesignMode && redirectUrl)
|
|
176
|
+
window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
|
|
177
|
+
};
|
|
178
|
+
const getStartTime = () => {
|
|
179
|
+
let startTime = startTimeProp;
|
|
180
|
+
if (timerType === "evergreen") {
|
|
181
|
+
const start = localStorage.getItem(countdownKey);
|
|
182
|
+
if (start) {
|
|
183
|
+
startTime = Number.parseInt(start);
|
|
184
|
+
if (startTime + periods < Date.now()) {
|
|
185
|
+
startTime = Date.now();
|
|
186
|
+
localStorage.setItem(countdownKey, startTime.toString());
|
|
187
|
+
}
|
|
188
|
+
} else {
|
|
189
|
+
startTime = Date.now();
|
|
190
|
+
localStorage.setItem(countdownKey, startTime.toString());
|
|
180
191
|
}
|
|
181
|
-
|
|
182
|
-
|
|
192
|
+
}
|
|
193
|
+
return startTime;
|
|
194
|
+
};
|
|
195
|
+
const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
|
|
196
|
+
const handleRemaining = () => {
|
|
197
|
+
let startTime = getStartTime();
|
|
198
|
+
let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
|
|
199
|
+
let isActive = checkActive(startTime);
|
|
200
|
+
const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
|
|
201
|
+
if (remainingTime > 0 && remainingTime < 1e3) {
|
|
202
|
+
handleEnd();
|
|
203
|
+
}
|
|
204
|
+
setRemaining(remainingTime);
|
|
205
|
+
};
|
|
206
|
+
(0, import_react5.useEffect)(() => {
|
|
207
|
+
let intervalFlag = setInterval(
|
|
208
|
+
handleRemaining,
|
|
209
|
+
1e3
|
|
210
|
+
);
|
|
183
211
|
return () => {
|
|
184
|
-
clearInterval(
|
|
212
|
+
clearInterval(intervalFlag);
|
|
185
213
|
};
|
|
186
|
-
}, [
|
|
214
|
+
}, [startTimeProp, endTimeProp, periods, timerType]);
|
|
187
215
|
const timer = getTime(remaining);
|
|
188
|
-
return /* @__PURE__ */
|
|
216
|
+
return /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
189
217
|
ref,
|
|
190
218
|
...rest
|
|
191
219
|
}, times.map((time) => {
|
|
192
|
-
return /* @__PURE__ */
|
|
220
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, {
|
|
193
221
|
key: time
|
|
194
|
-
}, /* @__PURE__ */
|
|
222
|
+
}, /* @__PURE__ */ import_react5.default.createElement(TimerBlock, {
|
|
195
223
|
label: showLabel ? time : "",
|
|
196
|
-
value: timer[time]
|
|
197
|
-
}), time !== "seconds" && /* @__PURE__ */
|
|
224
|
+
value: remaining === 0 ? "--" : timer[time]
|
|
225
|
+
}), time !== "seconds" && /* @__PURE__ */ import_react5.default.createElement("div", null, /* @__PURE__ */ import_react5.default.createElement("span", {
|
|
198
226
|
className: `wv-cd-number ${showColon ? "" : "hidden"}`
|
|
199
227
|
}, ":")));
|
|
200
228
|
}));
|
|
@@ -229,9 +257,9 @@ var css3 = {
|
|
|
229
257
|
Countdown.defaultProps = {
|
|
230
258
|
timerType: "fixed-time",
|
|
231
259
|
startTime: Date.now(),
|
|
232
|
-
endTime:
|
|
260
|
+
endTime: Date.now() + 1e3 * 60 * 60 * 24,
|
|
233
261
|
periods: 90,
|
|
234
|
-
redirectUrl: "
|
|
262
|
+
redirectUrl: "",
|
|
235
263
|
openInNewTab: false,
|
|
236
264
|
showLabel: true,
|
|
237
265
|
showColon: true
|
|
@@ -239,8 +267,8 @@ Countdown.defaultProps = {
|
|
|
239
267
|
var countdown_default = Countdown;
|
|
240
268
|
|
|
241
269
|
// src/elements/image.tsx
|
|
242
|
-
var
|
|
243
|
-
var Image =
|
|
270
|
+
var import_react6 = __toESM(require("react"));
|
|
271
|
+
var Image = import_react6.default.forwardRef(
|
|
244
272
|
(props, ref) => {
|
|
245
273
|
let {
|
|
246
274
|
src,
|
|
@@ -256,18 +284,18 @@ var Image = import_react5.default.forwardRef(
|
|
|
256
284
|
"--wv-img-object-fit": objectFit,
|
|
257
285
|
"--wv-img-object-position": objectPosition
|
|
258
286
|
};
|
|
259
|
-
let content = /* @__PURE__ */
|
|
287
|
+
let content = /* @__PURE__ */ import_react6.default.createElement("img", {
|
|
260
288
|
alt,
|
|
261
289
|
"data-blink-src": src
|
|
262
290
|
});
|
|
263
291
|
if (onClickAction === "open-link" && linkTo) {
|
|
264
292
|
let target = openLinkInNewTab ? "_blank" : "_self";
|
|
265
|
-
content = /* @__PURE__ */
|
|
293
|
+
content = /* @__PURE__ */ import_react6.default.createElement("a", {
|
|
266
294
|
href: linkTo,
|
|
267
295
|
target
|
|
268
296
|
}, content);
|
|
269
297
|
}
|
|
270
|
-
return /* @__PURE__ */
|
|
298
|
+
return /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
271
299
|
ref,
|
|
272
300
|
...rest,
|
|
273
301
|
style
|
|
@@ -299,8 +327,8 @@ Image.defaultProps = {
|
|
|
299
327
|
var image_default = Image;
|
|
300
328
|
|
|
301
329
|
// src/elements/layout.tsx
|
|
302
|
-
var
|
|
303
|
-
var Layout = (0,
|
|
330
|
+
var import_react7 = __toESM(require("react"));
|
|
331
|
+
var Layout = (0, import_react7.forwardRef)((props, ref) => {
|
|
304
332
|
let {
|
|
305
333
|
children,
|
|
306
334
|
rows,
|
|
@@ -321,15 +349,15 @@ var Layout = (0, import_react6.forwardRef)((props, ref) => {
|
|
|
321
349
|
"--row-size": rowSize + "px",
|
|
322
350
|
"--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
|
|
323
351
|
};
|
|
324
|
-
return /* @__PURE__ */
|
|
352
|
+
return /* @__PURE__ */ import_react7.default.createElement("section", {
|
|
325
353
|
ref,
|
|
326
354
|
...rest,
|
|
327
355
|
style
|
|
328
|
-
}, /* @__PURE__ */
|
|
356
|
+
}, /* @__PURE__ */ import_react7.default.createElement(LayoutBackground, {
|
|
329
357
|
imgUrl: backgroundImage,
|
|
330
358
|
bgColor: backgroundColor,
|
|
331
359
|
objectFit
|
|
332
|
-
}), /* @__PURE__ */
|
|
360
|
+
}), /* @__PURE__ */ import_react7.default.createElement("div", {
|
|
333
361
|
"data-layout-content": true
|
|
334
362
|
}, children));
|
|
335
363
|
});
|
|
@@ -339,10 +367,10 @@ var LayoutBackground = (props) => {
|
|
|
339
367
|
["--bg-color"]: bgColor,
|
|
340
368
|
["--object-fit"]: objectFit
|
|
341
369
|
};
|
|
342
|
-
return imgUrl || bgColor ? /* @__PURE__ */
|
|
370
|
+
return imgUrl || bgColor ? /* @__PURE__ */ import_react7.default.createElement("div", {
|
|
343
371
|
"data-wv-bg": true,
|
|
344
372
|
style
|
|
345
|
-
}, imgUrl && /* @__PURE__ */
|
|
373
|
+
}, imgUrl && /* @__PURE__ */ import_react7.default.createElement("img", {
|
|
346
374
|
width: "100%",
|
|
347
375
|
height: "100%",
|
|
348
376
|
"data-blink-src": imgUrl,
|
|
@@ -394,13 +422,13 @@ Layout.defaultProps = {
|
|
|
394
422
|
var layout_default = Layout;
|
|
395
423
|
|
|
396
424
|
// src/elements/map.tsx
|
|
397
|
-
var
|
|
398
|
-
var Map = (0,
|
|
425
|
+
var import_react8 = __toESM(require("react"));
|
|
426
|
+
var Map = (0, import_react8.forwardRef)((props, ref) => {
|
|
399
427
|
let { place, zoom, ...rest } = props;
|
|
400
|
-
return /* @__PURE__ */
|
|
428
|
+
return /* @__PURE__ */ import_react8.default.createElement("div", {
|
|
401
429
|
ref,
|
|
402
430
|
...rest
|
|
403
|
-
}, /* @__PURE__ */
|
|
431
|
+
}, /* @__PURE__ */ import_react8.default.createElement("iframe", {
|
|
404
432
|
loading: "lazy",
|
|
405
433
|
scrolling: "no",
|
|
406
434
|
width: "100%",
|
|
@@ -443,24 +471,24 @@ Text.defaultProps = {
|
|
|
443
471
|
var text_default = Text;
|
|
444
472
|
|
|
445
473
|
// src/elements/video.tsx
|
|
446
|
-
var
|
|
447
|
-
var Video = (0,
|
|
448
|
-
let { isDesignMode } = (0,
|
|
474
|
+
var import_react9 = __toESM(require("react"));
|
|
475
|
+
var Video = (0, import_react9.forwardRef)((props, ref) => {
|
|
476
|
+
let { isDesignMode } = (0, import_react9.useContext)(WeaverseContext);
|
|
449
477
|
let { src, type, controls, poster, autoPlay, loop, muted, ...rest } = props;
|
|
450
|
-
return /* @__PURE__ */
|
|
478
|
+
return /* @__PURE__ */ import_react9.default.createElement("div", {
|
|
451
479
|
ref,
|
|
452
480
|
...rest
|
|
453
|
-
}, /* @__PURE__ */
|
|
481
|
+
}, /* @__PURE__ */ import_react9.default.createElement("video", {
|
|
454
482
|
controls: isDesignMode ? false : controls,
|
|
455
483
|
autoPlay: isDesignMode ? false : autoPlay,
|
|
456
484
|
loop,
|
|
457
485
|
muted: true,
|
|
458
486
|
controlsList: "nodownload",
|
|
459
487
|
disablePictureInPicture: true
|
|
460
|
-
}, /* @__PURE__ */
|
|
488
|
+
}, /* @__PURE__ */ import_react9.default.createElement("source", {
|
|
461
489
|
src,
|
|
462
490
|
type: type || "video/mp4"
|
|
463
|
-
}), /* @__PURE__ */
|
|
491
|
+
}), /* @__PURE__ */ import_react9.default.createElement("source", {
|
|
464
492
|
src,
|
|
465
493
|
type: "video/ogg"
|
|
466
494
|
}), "Your browser does not support the video tag."));
|
|
@@ -486,33 +514,33 @@ Video.defaultProps = {
|
|
|
486
514
|
var video_default = Video;
|
|
487
515
|
|
|
488
516
|
// src/elements/instagram.tsx
|
|
489
|
-
var
|
|
517
|
+
var import_react11 = __toESM(require("react"));
|
|
490
518
|
|
|
491
519
|
// src/elements/shared/Placeholder.tsx
|
|
492
|
-
var
|
|
493
|
-
var Placeholder = (0,
|
|
520
|
+
var import_react10 = __toESM(require("react"));
|
|
521
|
+
var Placeholder = (0, import_react10.forwardRef)(
|
|
494
522
|
(props, ref) => {
|
|
495
523
|
let { element, children, ...rest } = props;
|
|
496
|
-
return /* @__PURE__ */
|
|
524
|
+
return /* @__PURE__ */ import_react10.default.createElement("div", {
|
|
497
525
|
"data-wv-placeholder": true,
|
|
498
526
|
style: { display: "none" },
|
|
499
527
|
ref,
|
|
500
528
|
...rest
|
|
501
|
-
}, /* @__PURE__ */
|
|
529
|
+
}, /* @__PURE__ */ import_react10.default.createElement("div", {
|
|
502
530
|
style: { fontWeight: 600, marginBottom: "10px" }
|
|
503
|
-
}, element), /* @__PURE__ */
|
|
531
|
+
}, element), /* @__PURE__ */ import_react10.default.createElement("div", null, children));
|
|
504
532
|
}
|
|
505
533
|
);
|
|
506
534
|
var Placeholder_default = Placeholder;
|
|
507
535
|
|
|
508
536
|
// src/elements/instagram.tsx
|
|
509
537
|
var INSTAGRAM_API = "https://graph.instagram.com";
|
|
510
|
-
var Instagram = (0,
|
|
538
|
+
var Instagram = (0, import_react11.forwardRef)(
|
|
511
539
|
(props, ref) => {
|
|
512
540
|
let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
|
|
513
|
-
let [media, setMedia] = (0,
|
|
514
|
-
let [error, setError] = (0,
|
|
515
|
-
(0,
|
|
541
|
+
let [media, setMedia] = (0, import_react11.useState)([]);
|
|
542
|
+
let [error, setError] = (0, import_react11.useState)(null);
|
|
543
|
+
(0, import_react11.useEffect)(() => {
|
|
516
544
|
if (token) {
|
|
517
545
|
let params = new URLSearchParams({
|
|
518
546
|
access_token: token,
|
|
@@ -529,10 +557,10 @@ var Instagram = (0, import_react10.forwardRef)(
|
|
|
529
557
|
}
|
|
530
558
|
}, [token]);
|
|
531
559
|
if (!token || error) {
|
|
532
|
-
return /* @__PURE__ */
|
|
560
|
+
return /* @__PURE__ */ import_react11.default.createElement("div", {
|
|
533
561
|
ref,
|
|
534
562
|
...rest
|
|
535
|
-
}, /* @__PURE__ */
|
|
563
|
+
}, /* @__PURE__ */ import_react11.default.createElement(Placeholder_default, {
|
|
536
564
|
element: "Instagram"
|
|
537
565
|
}, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
|
|
538
566
|
}
|
|
@@ -540,20 +568,20 @@ var Instagram = (0, import_react10.forwardRef)(
|
|
|
540
568
|
"--wv-ig-images-per-row": imagesPerRow,
|
|
541
569
|
"--wv-ig-images-gap": gap + "px"
|
|
542
570
|
};
|
|
543
|
-
return /* @__PURE__ */
|
|
571
|
+
return /* @__PURE__ */ import_react11.default.createElement("div", {
|
|
544
572
|
ref,
|
|
545
573
|
...rest,
|
|
546
574
|
style
|
|
547
|
-
}, /* @__PURE__ */
|
|
575
|
+
}, /* @__PURE__ */ import_react11.default.createElement("div", {
|
|
548
576
|
className: "wv-ig-media-container"
|
|
549
577
|
}, media.slice(0, numberOfImages).map((item) => {
|
|
550
578
|
let { id, permalink, caption, media_url } = item;
|
|
551
|
-
return /* @__PURE__ */
|
|
579
|
+
return /* @__PURE__ */ import_react11.default.createElement("a", {
|
|
552
580
|
key: id,
|
|
553
581
|
href: permalink,
|
|
554
582
|
target: "_blank",
|
|
555
583
|
rel: "noreferrer"
|
|
556
|
-
}, /* @__PURE__ */
|
|
584
|
+
}, /* @__PURE__ */ import_react11.default.createElement("img", {
|
|
557
585
|
alt: caption,
|
|
558
586
|
src: media_url
|
|
559
587
|
}));
|
|
@@ -642,7 +670,7 @@ var Elements = {
|
|
|
642
670
|
|
|
643
671
|
// src/renderer.tsx
|
|
644
672
|
var import_core2 = require("@weaverse/core");
|
|
645
|
-
var
|
|
673
|
+
var import_react12 = __toESM(require("react"));
|
|
646
674
|
|
|
647
675
|
// src/utils/index.ts
|
|
648
676
|
function shortCssObject(css10) {
|
|
@@ -653,11 +681,10 @@ function shortCssObject(css10) {
|
|
|
653
681
|
}
|
|
654
682
|
var permanentClasses = {};
|
|
655
683
|
function generateItemClass(instance, stitchesInstance) {
|
|
656
|
-
var _a, _b;
|
|
657
684
|
let { css: css10, type, className: cls = "" } = instance.data;
|
|
658
685
|
let className = "";
|
|
659
686
|
let permanentClass = "";
|
|
660
|
-
let perCss =
|
|
687
|
+
let perCss = instance.Element?.permanentCss;
|
|
661
688
|
if (perCss) {
|
|
662
689
|
if (type in permanentClasses) {
|
|
663
690
|
permanentClass = permanentClasses[type];
|
|
@@ -672,7 +699,7 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
672
699
|
let formattedCss = shortCssObject(css10);
|
|
673
700
|
let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
|
|
674
701
|
let { stitchesClass } = instance;
|
|
675
|
-
let otherClass = (
|
|
702
|
+
let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
|
|
676
703
|
className = `${permanentClass} ${cls} ${newClass} ${otherClass}`.trim();
|
|
677
704
|
instance.stitchesClass = newClass;
|
|
678
705
|
}
|
|
@@ -681,37 +708,36 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
681
708
|
|
|
682
709
|
// src/renderer.tsx
|
|
683
710
|
var WeaverseRoot = ({ context }) => {
|
|
684
|
-
|
|
685
|
-
let
|
|
686
|
-
let rootRef = (0, import_react11.useRef)();
|
|
711
|
+
let [, setData] = (0, import_react12.useState)(context.projectData);
|
|
712
|
+
let rootRef = (0, import_react12.useRef)();
|
|
687
713
|
let renderRoot = () => setData({});
|
|
688
|
-
(0,
|
|
714
|
+
(0, import_react12.useEffect)(() => {
|
|
689
715
|
context.subscribe(renderRoot);
|
|
690
716
|
context.contentRootElement = rootRef.current;
|
|
691
717
|
return () => {
|
|
692
718
|
context.unsubscribe(renderRoot);
|
|
693
719
|
};
|
|
694
720
|
}, []);
|
|
695
|
-
let eventHandlers =
|
|
721
|
+
let eventHandlers = context?.studioBridge?.eventHandlers || {};
|
|
696
722
|
let themeClass = context.stitchesInstance.theme.className;
|
|
697
|
-
if (
|
|
698
|
-
return /* @__PURE__ */
|
|
723
|
+
if (context.projectData?.rootId) {
|
|
724
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", {
|
|
699
725
|
className: `weaverse-content-root ${themeClass}`,
|
|
700
726
|
...eventHandlers,
|
|
701
727
|
ref: rootRef
|
|
702
|
-
}, /* @__PURE__ */
|
|
728
|
+
}, /* @__PURE__ */ import_react12.default.createElement(WeaverseContextProvider, {
|
|
703
729
|
value: context
|
|
704
|
-
}, /* @__PURE__ */
|
|
730
|
+
}, /* @__PURE__ */ import_react12.default.createElement(ItemInstance, {
|
|
705
731
|
id: context.projectData.rootId
|
|
706
732
|
})));
|
|
707
733
|
}
|
|
708
734
|
return null;
|
|
709
735
|
};
|
|
710
736
|
var ItemComponent = ({ instance }) => {
|
|
711
|
-
let { stitchesInstance, elementInstances } = (0,
|
|
712
|
-
let [data, setData] = (0,
|
|
737
|
+
let { stitchesInstance, elementInstances } = (0, import_react12.useContext)(WeaverseContext);
|
|
738
|
+
let [data, setData] = (0, import_react12.useState)(instance.data);
|
|
713
739
|
let { id, type, childIds = [], css: css10, className, ...rest } = data;
|
|
714
|
-
(0,
|
|
740
|
+
(0, import_react12.useEffect)(() => {
|
|
715
741
|
let render = (data2) => setData({ ...data2 });
|
|
716
742
|
instance.subscribe(render);
|
|
717
743
|
if (import_core2.isBrowser && !instance.ref.current) {
|
|
@@ -722,18 +748,18 @@ var ItemComponent = ({ instance }) => {
|
|
|
722
748
|
return () => instance.unsubscribe(render);
|
|
723
749
|
}, []);
|
|
724
750
|
let Element = elementInstances.get(type);
|
|
725
|
-
if (Element
|
|
751
|
+
if (Element?.Component) {
|
|
726
752
|
let Component = Element.Component;
|
|
727
753
|
if (Component.$$typeof === Symbol.for("react.forward_ref")) {
|
|
728
754
|
rest.ref = instance.ref;
|
|
729
755
|
}
|
|
730
|
-
return /* @__PURE__ */
|
|
756
|
+
return /* @__PURE__ */ import_react12.default.createElement(Component, {
|
|
731
757
|
key: id,
|
|
732
758
|
"data-wv-type": type,
|
|
733
759
|
"data-wv-id": id,
|
|
734
760
|
className: generateItemClass(instance, stitchesInstance),
|
|
735
761
|
...rest
|
|
736
|
-
}, childIds.map((id2) => /* @__PURE__ */
|
|
762
|
+
}, childIds.map((id2) => /* @__PURE__ */ import_react12.default.createElement(ItemInstance, {
|
|
737
763
|
key: id2,
|
|
738
764
|
id: id2
|
|
739
765
|
})));
|
|
@@ -743,15 +769,15 @@ var ItemComponent = ({ instance }) => {
|
|
|
743
769
|
}
|
|
744
770
|
};
|
|
745
771
|
var ItemInstance = ({ id }) => {
|
|
746
|
-
let context = (0,
|
|
772
|
+
let context = (0, import_react12.useContext)(WeaverseContext);
|
|
747
773
|
let { itemInstances } = context;
|
|
748
774
|
let instance = itemInstances.get(id);
|
|
749
775
|
if (!instance) {
|
|
750
|
-
return /* @__PURE__ */
|
|
776
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", {
|
|
751
777
|
style: { display: "none" }
|
|
752
778
|
}, "Item instance ", id, " not found");
|
|
753
779
|
}
|
|
754
|
-
return /* @__PURE__ */
|
|
780
|
+
return /* @__PURE__ */ import_react12.default.createElement(ItemComponent, {
|
|
755
781
|
key: id,
|
|
756
782
|
instance
|
|
757
783
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
// src/elements/button.tsx
|
|
2
2
|
import * as React from "react";
|
|
3
|
+
import { useContext } from "react";
|
|
4
|
+
|
|
5
|
+
// src/context.ts
|
|
6
|
+
import { Weaverse } from "@weaverse/core";
|
|
7
|
+
import { createContext } from "react";
|
|
8
|
+
var createRootContext = (configs) => {
|
|
9
|
+
let rootContext = new Weaverse(configs);
|
|
10
|
+
Object.keys(Elements).forEach((key) => {
|
|
11
|
+
rootContext.registerElement(Elements[key]);
|
|
12
|
+
});
|
|
13
|
+
return rootContext;
|
|
14
|
+
};
|
|
15
|
+
var WeaverseContext = createContext({});
|
|
16
|
+
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
17
|
+
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
18
|
+
|
|
19
|
+
// src/elements/button.tsx
|
|
3
20
|
var Button = React.forwardRef((props, ref) => {
|
|
21
|
+
let { isDesignMode } = useContext(WeaverseContext);
|
|
4
22
|
let { text, clickAction, linkTo, openInNewTab, ...rest } = props;
|
|
5
23
|
if (clickAction && linkTo) {
|
|
6
24
|
return /* @__PURE__ */ React.createElement("a", {
|
|
7
|
-
href: linkTo,
|
|
25
|
+
href: !isDesignMode ? linkTo : void 0,
|
|
8
26
|
target: openInNewTab ? "_blank" : "_self",
|
|
9
27
|
rel: "noreferrer",
|
|
10
28
|
...rest,
|
|
@@ -65,21 +83,7 @@ Container.defaultProps = {};
|
|
|
65
83
|
var container_default = Container;
|
|
66
84
|
|
|
67
85
|
// src/elements/countdown/index.tsx
|
|
68
|
-
import React4, { forwardRef as forwardRef3, useContext, useEffect } from "react";
|
|
69
|
-
|
|
70
|
-
// src/context.ts
|
|
71
|
-
import { Weaverse } from "@weaverse/core";
|
|
72
|
-
import { createContext } from "react";
|
|
73
|
-
var createRootContext = (configs) => {
|
|
74
|
-
let rootContext = new Weaverse(configs);
|
|
75
|
-
Object.keys(Elements).forEach((key) => {
|
|
76
|
-
rootContext.registerElement(Elements[key]);
|
|
77
|
-
});
|
|
78
|
-
return rootContext;
|
|
79
|
-
};
|
|
80
|
-
var WeaverseContext = createContext({});
|
|
81
|
-
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
82
|
-
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
86
|
+
import React4, { forwardRef as forwardRef3, useContext as useContext2, useEffect } from "react";
|
|
83
87
|
|
|
84
88
|
// src/elements/countdown/timer-block.tsx
|
|
85
89
|
import React3 from "react";
|
|
@@ -88,7 +92,7 @@ function TimerBlock({ value, label }) {
|
|
|
88
92
|
className: "wv-cd-block"
|
|
89
93
|
}, /* @__PURE__ */ React3.createElement("div", {
|
|
90
94
|
className: "wv-cd-number"
|
|
91
|
-
}, value.toString().padStart(2, "0")), label && /* @__PURE__ */ React3.createElement("div", {
|
|
95
|
+
}, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ React3.createElement("div", {
|
|
92
96
|
className: "wv-cd-label"
|
|
93
97
|
}, label));
|
|
94
98
|
}
|
|
@@ -111,14 +115,15 @@ function getTime(_seconds) {
|
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
// src/elements/countdown/index.tsx
|
|
118
|
+
var countdownKey = "wv-cd-evergreen-start";
|
|
114
119
|
var Countdown = forwardRef3(
|
|
115
120
|
(props, ref) => {
|
|
116
|
-
const { isDesignMode } =
|
|
121
|
+
const { isDesignMode } = useContext2(WeaverseContext);
|
|
117
122
|
let {
|
|
118
123
|
timerType,
|
|
119
|
-
startTime,
|
|
120
|
-
endTime,
|
|
121
|
-
periods,
|
|
124
|
+
startTime: startTimeProp,
|
|
125
|
+
endTime: endTimeProp,
|
|
126
|
+
periods: periodsProp,
|
|
122
127
|
redirectUrl,
|
|
123
128
|
openInNewTab,
|
|
124
129
|
showColon,
|
|
@@ -126,25 +131,48 @@ var Countdown = forwardRef3(
|
|
|
126
131
|
...rest
|
|
127
132
|
} = props;
|
|
128
133
|
const [remaining, setRemaining] = React4.useState(0);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
);
|
|
138
|
-
if (
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
let periods = periodsProp * 60 * 1e3;
|
|
135
|
+
const handleEnd = () => {
|
|
136
|
+
if (!isDesignMode && redirectUrl)
|
|
137
|
+
window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
|
|
138
|
+
};
|
|
139
|
+
const getStartTime = () => {
|
|
140
|
+
let startTime = startTimeProp;
|
|
141
|
+
if (timerType === "evergreen") {
|
|
142
|
+
const start = localStorage.getItem(countdownKey);
|
|
143
|
+
if (start) {
|
|
144
|
+
startTime = Number.parseInt(start);
|
|
145
|
+
if (startTime + periods < Date.now()) {
|
|
146
|
+
startTime = Date.now();
|
|
147
|
+
localStorage.setItem(countdownKey, startTime.toString());
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
startTime = Date.now();
|
|
151
|
+
localStorage.setItem(countdownKey, startTime.toString());
|
|
141
152
|
}
|
|
142
|
-
|
|
143
|
-
|
|
153
|
+
}
|
|
154
|
+
return startTime;
|
|
155
|
+
};
|
|
156
|
+
const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
|
|
157
|
+
const handleRemaining = () => {
|
|
158
|
+
let startTime = getStartTime();
|
|
159
|
+
let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
|
|
160
|
+
let isActive = checkActive(startTime);
|
|
161
|
+
const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
|
|
162
|
+
if (remainingTime > 0 && remainingTime < 1e3) {
|
|
163
|
+
handleEnd();
|
|
164
|
+
}
|
|
165
|
+
setRemaining(remainingTime);
|
|
166
|
+
};
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
let intervalFlag = setInterval(
|
|
169
|
+
handleRemaining,
|
|
170
|
+
1e3
|
|
171
|
+
);
|
|
144
172
|
return () => {
|
|
145
|
-
clearInterval(
|
|
173
|
+
clearInterval(intervalFlag);
|
|
146
174
|
};
|
|
147
|
-
}, [
|
|
175
|
+
}, [startTimeProp, endTimeProp, periods, timerType]);
|
|
148
176
|
const timer = getTime(remaining);
|
|
149
177
|
return /* @__PURE__ */ React4.createElement("div", {
|
|
150
178
|
ref,
|
|
@@ -154,7 +182,7 @@ var Countdown = forwardRef3(
|
|
|
154
182
|
key: time
|
|
155
183
|
}, /* @__PURE__ */ React4.createElement(TimerBlock, {
|
|
156
184
|
label: showLabel ? time : "",
|
|
157
|
-
value: timer[time]
|
|
185
|
+
value: remaining === 0 ? "--" : timer[time]
|
|
158
186
|
}), time !== "seconds" && /* @__PURE__ */ React4.createElement("div", null, /* @__PURE__ */ React4.createElement("span", {
|
|
159
187
|
className: `wv-cd-number ${showColon ? "" : "hidden"}`
|
|
160
188
|
}, ":")));
|
|
@@ -190,9 +218,9 @@ var css3 = {
|
|
|
190
218
|
Countdown.defaultProps = {
|
|
191
219
|
timerType: "fixed-time",
|
|
192
220
|
startTime: Date.now(),
|
|
193
|
-
endTime:
|
|
221
|
+
endTime: Date.now() + 1e3 * 60 * 60 * 24,
|
|
194
222
|
periods: 90,
|
|
195
|
-
redirectUrl: "
|
|
223
|
+
redirectUrl: "",
|
|
196
224
|
openInNewTab: false,
|
|
197
225
|
showLabel: true,
|
|
198
226
|
showColon: true
|
|
@@ -404,9 +432,9 @@ Text.defaultProps = {
|
|
|
404
432
|
var text_default = Text;
|
|
405
433
|
|
|
406
434
|
// src/elements/video.tsx
|
|
407
|
-
import React9, { forwardRef as forwardRef7, useContext as
|
|
435
|
+
import React9, { forwardRef as forwardRef7, useContext as useContext3 } from "react";
|
|
408
436
|
var Video = forwardRef7((props, ref) => {
|
|
409
|
-
let { isDesignMode } =
|
|
437
|
+
let { isDesignMode } = useContext3(WeaverseContext);
|
|
410
438
|
let { src, type, controls, poster, autoPlay, loop, muted, ...rest } = props;
|
|
411
439
|
return /* @__PURE__ */ React9.createElement("div", {
|
|
412
440
|
ref,
|
|
@@ -603,7 +631,7 @@ var Elements = {
|
|
|
603
631
|
|
|
604
632
|
// src/renderer.tsx
|
|
605
633
|
import { isBrowser } from "@weaverse/core";
|
|
606
|
-
import React12, { useContext as
|
|
634
|
+
import React12, { useContext as useContext4, useEffect as useEffect3, useRef, useState as useState2 } from "react";
|
|
607
635
|
|
|
608
636
|
// src/utils/index.ts
|
|
609
637
|
function shortCssObject(css10) {
|
|
@@ -614,11 +642,10 @@ function shortCssObject(css10) {
|
|
|
614
642
|
}
|
|
615
643
|
var permanentClasses = {};
|
|
616
644
|
function generateItemClass(instance, stitchesInstance) {
|
|
617
|
-
var _a, _b;
|
|
618
645
|
let { css: css10, type, className: cls = "" } = instance.data;
|
|
619
646
|
let className = "";
|
|
620
647
|
let permanentClass = "";
|
|
621
|
-
let perCss =
|
|
648
|
+
let perCss = instance.Element?.permanentCss;
|
|
622
649
|
if (perCss) {
|
|
623
650
|
if (type in permanentClasses) {
|
|
624
651
|
permanentClass = permanentClasses[type];
|
|
@@ -633,7 +660,7 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
633
660
|
let formattedCss = shortCssObject(css10);
|
|
634
661
|
let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
|
|
635
662
|
let { stitchesClass } = instance;
|
|
636
|
-
let otherClass = (
|
|
663
|
+
let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
|
|
637
664
|
className = `${permanentClass} ${cls} ${newClass} ${otherClass}`.trim();
|
|
638
665
|
instance.stitchesClass = newClass;
|
|
639
666
|
}
|
|
@@ -642,7 +669,6 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
642
669
|
|
|
643
670
|
// src/renderer.tsx
|
|
644
671
|
var WeaverseRoot = ({ context }) => {
|
|
645
|
-
var _a, _b;
|
|
646
672
|
let [, setData] = useState2(context.projectData);
|
|
647
673
|
let rootRef = useRef();
|
|
648
674
|
let renderRoot = () => setData({});
|
|
@@ -653,9 +679,9 @@ var WeaverseRoot = ({ context }) => {
|
|
|
653
679
|
context.unsubscribe(renderRoot);
|
|
654
680
|
};
|
|
655
681
|
}, []);
|
|
656
|
-
let eventHandlers =
|
|
682
|
+
let eventHandlers = context?.studioBridge?.eventHandlers || {};
|
|
657
683
|
let themeClass = context.stitchesInstance.theme.className;
|
|
658
|
-
if (
|
|
684
|
+
if (context.projectData?.rootId) {
|
|
659
685
|
return /* @__PURE__ */ React12.createElement("div", {
|
|
660
686
|
className: `weaverse-content-root ${themeClass}`,
|
|
661
687
|
...eventHandlers,
|
|
@@ -669,7 +695,7 @@ var WeaverseRoot = ({ context }) => {
|
|
|
669
695
|
return null;
|
|
670
696
|
};
|
|
671
697
|
var ItemComponent = ({ instance }) => {
|
|
672
|
-
let { stitchesInstance, elementInstances } =
|
|
698
|
+
let { stitchesInstance, elementInstances } = useContext4(WeaverseContext);
|
|
673
699
|
let [data, setData] = useState2(instance.data);
|
|
674
700
|
let { id, type, childIds = [], css: css10, className, ...rest } = data;
|
|
675
701
|
useEffect3(() => {
|
|
@@ -683,7 +709,7 @@ var ItemComponent = ({ instance }) => {
|
|
|
683
709
|
return () => instance.unsubscribe(render);
|
|
684
710
|
}, []);
|
|
685
711
|
let Element = elementInstances.get(type);
|
|
686
|
-
if (Element
|
|
712
|
+
if (Element?.Component) {
|
|
687
713
|
let Component = Element.Component;
|
|
688
714
|
if (Component.$$typeof === Symbol.for("react.forward_ref")) {
|
|
689
715
|
rest.ref = instance.ref;
|
|
@@ -704,7 +730,7 @@ var ItemComponent = ({ instance }) => {
|
|
|
704
730
|
}
|
|
705
731
|
};
|
|
706
732
|
var ItemInstance = ({ id }) => {
|
|
707
|
-
let context =
|
|
733
|
+
let context = useContext4(WeaverseContext);
|
|
708
734
|
let { itemInstances } = context;
|
|
709
735
|
let instance = itemInstances.get(id);
|
|
710
736
|
if (!instance) {
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.7.
|
|
2
|
+
"version": "0.7.22",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"name": "@weaverse/react",
|
|
32
32
|
"author": "Weaverse Team",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@weaverse/core": "0.7.
|
|
34
|
+
"@weaverse/core": "0.7.22",
|
|
35
35
|
"nuka-carousel": "^5.4.0"
|
|
36
36
|
}
|
|
37
37
|
}
|