@weaverse/react 0.7.20 → 0.7.21
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 +1 -1
- package/dist/index.js +134 -106
- package/dist/index.mjs +73 -45
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
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) {
|
|
@@ -682,10 +710,10 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
682
710
|
// src/renderer.tsx
|
|
683
711
|
var WeaverseRoot = ({ context }) => {
|
|
684
712
|
var _a, _b;
|
|
685
|
-
let [, setData] = (0,
|
|
686
|
-
let rootRef = (0,
|
|
713
|
+
let [, setData] = (0, import_react12.useState)(context.projectData);
|
|
714
|
+
let rootRef = (0, import_react12.useRef)();
|
|
687
715
|
let renderRoot = () => setData({});
|
|
688
|
-
(0,
|
|
716
|
+
(0, import_react12.useEffect)(() => {
|
|
689
717
|
context.subscribe(renderRoot);
|
|
690
718
|
context.contentRootElement = rootRef.current;
|
|
691
719
|
return () => {
|
|
@@ -695,23 +723,23 @@ var WeaverseRoot = ({ context }) => {
|
|
|
695
723
|
let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
|
|
696
724
|
let themeClass = context.stitchesInstance.theme.className;
|
|
697
725
|
if ((_b = context.projectData) == null ? void 0 : _b.rootId) {
|
|
698
|
-
return /* @__PURE__ */
|
|
726
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", {
|
|
699
727
|
className: `weaverse-content-root ${themeClass}`,
|
|
700
728
|
...eventHandlers,
|
|
701
729
|
ref: rootRef
|
|
702
|
-
}, /* @__PURE__ */
|
|
730
|
+
}, /* @__PURE__ */ import_react12.default.createElement(WeaverseContextProvider, {
|
|
703
731
|
value: context
|
|
704
|
-
}, /* @__PURE__ */
|
|
732
|
+
}, /* @__PURE__ */ import_react12.default.createElement(ItemInstance, {
|
|
705
733
|
id: context.projectData.rootId
|
|
706
734
|
})));
|
|
707
735
|
}
|
|
708
736
|
return null;
|
|
709
737
|
};
|
|
710
738
|
var ItemComponent = ({ instance }) => {
|
|
711
|
-
let { stitchesInstance, elementInstances } = (0,
|
|
712
|
-
let [data, setData] = (0,
|
|
739
|
+
let { stitchesInstance, elementInstances } = (0, import_react12.useContext)(WeaverseContext);
|
|
740
|
+
let [data, setData] = (0, import_react12.useState)(instance.data);
|
|
713
741
|
let { id, type, childIds = [], css: css10, className, ...rest } = data;
|
|
714
|
-
(0,
|
|
742
|
+
(0, import_react12.useEffect)(() => {
|
|
715
743
|
let render = (data2) => setData({ ...data2 });
|
|
716
744
|
instance.subscribe(render);
|
|
717
745
|
if (import_core2.isBrowser && !instance.ref.current) {
|
|
@@ -727,13 +755,13 @@ var ItemComponent = ({ instance }) => {
|
|
|
727
755
|
if (Component.$$typeof === Symbol.for("react.forward_ref")) {
|
|
728
756
|
rest.ref = instance.ref;
|
|
729
757
|
}
|
|
730
|
-
return /* @__PURE__ */
|
|
758
|
+
return /* @__PURE__ */ import_react12.default.createElement(Component, {
|
|
731
759
|
key: id,
|
|
732
760
|
"data-wv-type": type,
|
|
733
761
|
"data-wv-id": id,
|
|
734
762
|
className: generateItemClass(instance, stitchesInstance),
|
|
735
763
|
...rest
|
|
736
|
-
}, childIds.map((id2) => /* @__PURE__ */
|
|
764
|
+
}, childIds.map((id2) => /* @__PURE__ */ import_react12.default.createElement(ItemInstance, {
|
|
737
765
|
key: id2,
|
|
738
766
|
id: id2
|
|
739
767
|
})));
|
|
@@ -743,15 +771,15 @@ var ItemComponent = ({ instance }) => {
|
|
|
743
771
|
}
|
|
744
772
|
};
|
|
745
773
|
var ItemInstance = ({ id }) => {
|
|
746
|
-
let context = (0,
|
|
774
|
+
let context = (0, import_react12.useContext)(WeaverseContext);
|
|
747
775
|
let { itemInstances } = context;
|
|
748
776
|
let instance = itemInstances.get(id);
|
|
749
777
|
if (!instance) {
|
|
750
|
-
return /* @__PURE__ */
|
|
778
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", {
|
|
751
779
|
style: { display: "none" }
|
|
752
780
|
}, "Item instance ", id, " not found");
|
|
753
781
|
}
|
|
754
|
-
return /* @__PURE__ */
|
|
782
|
+
return /* @__PURE__ */ import_react12.default.createElement(ItemComponent, {
|
|
755
783
|
key: id,
|
|
756
784
|
instance
|
|
757
785
|
});
|
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) {
|
|
@@ -669,7 +697,7 @@ var WeaverseRoot = ({ context }) => {
|
|
|
669
697
|
return null;
|
|
670
698
|
};
|
|
671
699
|
var ItemComponent = ({ instance }) => {
|
|
672
|
-
let { stitchesInstance, elementInstances } =
|
|
700
|
+
let { stitchesInstance, elementInstances } = useContext4(WeaverseContext);
|
|
673
701
|
let [data, setData] = useState2(instance.data);
|
|
674
702
|
let { id, type, childIds = [], css: css10, className, ...rest } = data;
|
|
675
703
|
useEffect3(() => {
|
|
@@ -704,7 +732,7 @@ var ItemComponent = ({ instance }) => {
|
|
|
704
732
|
}
|
|
705
733
|
};
|
|
706
734
|
var ItemInstance = ({ id }) => {
|
|
707
|
-
let context =
|
|
735
|
+
let context = useContext4(WeaverseContext);
|
|
708
736
|
let { itemInstances } = context;
|
|
709
737
|
let instance = itemInstances.get(id);
|
|
710
738
|
if (!instance) {
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.7.
|
|
2
|
+
"version": "0.7.21",
|
|
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.21",
|
|
35
35
|
"nuka-carousel": "^5.4.0"
|
|
36
36
|
}
|
|
37
37
|
}
|