@weaverse/react 0.6.21 → 0.6.24
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 +74 -5
- package/dist/index.js +280 -100
- package/dist/index.mjs +276 -96
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import { WeaverseType, Weaverse, ElementCSS, WeaverseItemStore } from '@weaverse/core';
|
|
3
4
|
export * from '@weaverse/core';
|
|
4
5
|
|
|
5
6
|
declare let createRootContext: (configs: WeaverseType) => Weaverse;
|
|
@@ -7,17 +8,85 @@ declare let WeaverseContext: react.Context<Weaverse>;
|
|
|
7
8
|
declare let WeaverseContextProvider: react.Provider<Weaverse>;
|
|
8
9
|
declare let WeaverseContextConsumer: react.Consumer<Weaverse>;
|
|
9
10
|
|
|
10
|
-
interface WeaverseElementProps {
|
|
11
|
-
|
|
11
|
+
interface WeaverseElementProps extends ReactElement {
|
|
12
|
+
css?: ElementCSS;
|
|
13
|
+
children?: ReactElement | ReactElement[] | ReactNode | ReactNode[];
|
|
12
14
|
}
|
|
13
15
|
declare type WeaverseRootPropsType = {
|
|
14
16
|
context: Weaverse;
|
|
15
17
|
};
|
|
16
|
-
declare type CountdownTimeKey = 'days' | 'hours' | 'minutes' | 'seconds';
|
|
17
18
|
declare type ItemComponentProps = {
|
|
18
19
|
instance: InstanceType<typeof WeaverseItemStore>;
|
|
19
20
|
};
|
|
21
|
+
interface PlaceholderProps extends WeaverseElementProps {
|
|
22
|
+
element: string;
|
|
23
|
+
}
|
|
24
|
+
interface ButtonElementProps extends WeaverseElementProps {
|
|
25
|
+
value: string;
|
|
26
|
+
openInNewTab: boolean;
|
|
27
|
+
target: string;
|
|
28
|
+
type: 'button' | 'submit' | 'reset';
|
|
29
|
+
}
|
|
30
|
+
interface ContainerElementProps extends WeaverseElementProps {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
}
|
|
33
|
+
interface ImageElementProps extends WeaverseElementProps {
|
|
34
|
+
src: string;
|
|
35
|
+
alt: string;
|
|
36
|
+
}
|
|
37
|
+
interface LayoutElementProps extends WeaverseElementProps {
|
|
38
|
+
gridSize: number;
|
|
39
|
+
rows: number;
|
|
40
|
+
columns: number;
|
|
41
|
+
gap: number;
|
|
42
|
+
rowSize: number;
|
|
43
|
+
}
|
|
44
|
+
interface MapElementProps extends WeaverseElementProps {
|
|
45
|
+
place: string;
|
|
46
|
+
zoom: number;
|
|
47
|
+
}
|
|
48
|
+
interface TextElementProps extends WeaverseElementProps {
|
|
49
|
+
value: string;
|
|
50
|
+
}
|
|
51
|
+
interface VideoElementProps extends WeaverseElementProps {
|
|
52
|
+
src: string;
|
|
53
|
+
poster: string;
|
|
54
|
+
loop: boolean;
|
|
55
|
+
type: string;
|
|
56
|
+
controls: boolean;
|
|
57
|
+
autoPlay: boolean;
|
|
58
|
+
muted: boolean;
|
|
59
|
+
}
|
|
60
|
+
declare type CountdownTimeKey = 'days' | 'hours' | 'minutes' | 'seconds';
|
|
61
|
+
interface CountdownElementProps extends WeaverseElementProps {
|
|
62
|
+
timerType: 'fixed-time' | 'evergreen';
|
|
63
|
+
startTime: number;
|
|
64
|
+
endTime: number;
|
|
65
|
+
periods: number;
|
|
66
|
+
redirectUrl: string;
|
|
67
|
+
openInNewTab: boolean;
|
|
68
|
+
showLabel: boolean;
|
|
69
|
+
showColon: boolean;
|
|
70
|
+
}
|
|
71
|
+
declare type TimerBlockProps = {
|
|
72
|
+
label: string;
|
|
73
|
+
value: number;
|
|
74
|
+
};
|
|
75
|
+
interface InstagramElementProps extends WeaverseElementProps {
|
|
76
|
+
token: string;
|
|
77
|
+
username: string;
|
|
78
|
+
numberOfImages: number;
|
|
79
|
+
imagesPerRow: number;
|
|
80
|
+
gap: number;
|
|
81
|
+
}
|
|
82
|
+
declare type InstagramMedia = {
|
|
83
|
+
id: string;
|
|
84
|
+
media_type: 'IMAGE' | 'CAROUSEL_ALBUM';
|
|
85
|
+
media_url: string;
|
|
86
|
+
permalink: string;
|
|
87
|
+
caption: string;
|
|
88
|
+
};
|
|
20
89
|
|
|
21
90
|
declare let WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element;
|
|
22
91
|
|
|
23
|
-
export { CountdownTimeKey, ItemComponentProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
|
|
92
|
+
export { ButtonElementProps, ContainerElementProps, CountdownElementProps, CountdownTimeKey, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutElementProps, MapElementProps, PlaceholderProps, TextElementProps, TimerBlockProps, VideoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
|
package/dist/index.js
CHANGED
|
@@ -62,12 +62,12 @@ module.exports = __toCommonJS(src_exports);
|
|
|
62
62
|
|
|
63
63
|
// src/context.ts
|
|
64
64
|
var import_core = require("@weaverse/core");
|
|
65
|
-
var
|
|
65
|
+
var import_react13 = require("react");
|
|
66
66
|
|
|
67
67
|
// src/elements/button.tsx
|
|
68
68
|
var React = __toESM(require("react"));
|
|
69
69
|
var Button = React.forwardRef((props, ref) => {
|
|
70
|
-
|
|
70
|
+
let _a = props, { openInNewTab, target, value } = _a, rest = __objRest(_a, ["openInNewTab", "target", "value"]);
|
|
71
71
|
if (target) {
|
|
72
72
|
return /* @__PURE__ */ React.createElement("a", __spreadProps(__spreadValues({
|
|
73
73
|
href: target,
|
|
@@ -102,9 +102,10 @@ var button_default = Button;
|
|
|
102
102
|
// src/elements/container.tsx
|
|
103
103
|
var import_react = __toESM(require("react"));
|
|
104
104
|
var Container = (0, import_react.forwardRef)((props, ref) => {
|
|
105
|
+
let _a = props, { children } = _a, rest = __objRest(_a, ["children"]);
|
|
105
106
|
return /* @__PURE__ */ import_react.default.createElement("div", __spreadValues({
|
|
106
107
|
ref
|
|
107
|
-
},
|
|
108
|
+
}, rest), children);
|
|
108
109
|
});
|
|
109
110
|
Container.defaultProps = {
|
|
110
111
|
css: {
|
|
@@ -178,7 +179,7 @@ var Countdown = (0, import_react3.forwardRef)((props, ref) => {
|
|
|
178
179
|
}
|
|
179
180
|
(0, import_react3.useEffect)(() => {
|
|
180
181
|
const flag = setInterval(() => {
|
|
181
|
-
const remainingTime = Math.max((timerType === "
|
|
182
|
+
const remainingTime = Math.max((timerType === "fixed-time" ? new Date(endTime).getTime() : new Date(startTime).getTime() + periods * 60 * 1e3) - Date.now(), 0);
|
|
182
183
|
if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
|
|
183
184
|
window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
|
|
184
185
|
}
|
|
@@ -203,7 +204,7 @@ var Countdown = (0, import_react3.forwardRef)((props, ref) => {
|
|
|
203
204
|
}));
|
|
204
205
|
});
|
|
205
206
|
Countdown.defaultProps = {
|
|
206
|
-
timerType: "
|
|
207
|
+
timerType: "fixed-time",
|
|
207
208
|
startTime: Date.now(),
|
|
208
209
|
endTime: 1661140528e3,
|
|
209
210
|
periods: 90,
|
|
@@ -223,7 +224,7 @@ Countdown.defaultProps = {
|
|
|
223
224
|
width: 48,
|
|
224
225
|
textAlign: "center"
|
|
225
226
|
},
|
|
226
|
-
"
|
|
227
|
+
".wv-countdown-label": {
|
|
227
228
|
fontSize: 10
|
|
228
229
|
},
|
|
229
230
|
"& > span": {
|
|
@@ -240,10 +241,10 @@ var countdown_default = Countdown;
|
|
|
240
241
|
// src/elements/image.tsx
|
|
241
242
|
var import_react4 = __toESM(require("react"));
|
|
242
243
|
var Image = import_react4.default.forwardRef((props, ref) => {
|
|
243
|
-
let _a = props, { src, alt
|
|
244
|
-
return /* @__PURE__ */ import_react4.default.createElement("
|
|
244
|
+
let _a = props, { src, alt } = _a, rest = __objRest(_a, ["src", "alt"]);
|
|
245
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", __spreadValues({
|
|
245
246
|
ref
|
|
246
|
-
}, rest), {
|
|
247
|
+
}, rest), /* @__PURE__ */ import_react4.default.createElement("img", {
|
|
247
248
|
alt,
|
|
248
249
|
src
|
|
249
250
|
}));
|
|
@@ -253,12 +254,11 @@ Image.defaultProps = {
|
|
|
253
254
|
alt: "weaverse image element",
|
|
254
255
|
css: {
|
|
255
256
|
"@desktop": {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
display: "block"
|
|
257
|
+
img: {
|
|
258
|
+
width: "100%",
|
|
259
|
+
height: "100%",
|
|
260
|
+
objectFit: "cover"
|
|
261
|
+
}
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
};
|
|
@@ -268,17 +268,19 @@ var image_default = Image;
|
|
|
268
268
|
var import_react5 = __toESM(require("react"));
|
|
269
269
|
var Layout = (0, import_react5.forwardRef)((props, ref) => {
|
|
270
270
|
let _a = props, { children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["children", "rows", "gap", "rowSize", "columns", "gridSize"]);
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}, rest),
|
|
271
|
+
let style = {
|
|
272
|
+
"--grid-size": gridSize + "px",
|
|
273
|
+
"--rows": rows,
|
|
274
|
+
"--columns": columns,
|
|
275
|
+
"--gap": gap + "px",
|
|
276
|
+
"--row-size": rowSize + "px",
|
|
277
|
+
"--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
|
|
278
|
+
};
|
|
279
|
+
return /* @__PURE__ */ import_react5.default.createElement("section", __spreadProps(__spreadValues({
|
|
280
|
+
ref
|
|
281
|
+
}, rest), {
|
|
282
|
+
style
|
|
283
|
+
}), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
282
284
|
"data-layout-content": true
|
|
283
285
|
}, children));
|
|
284
286
|
});
|
|
@@ -317,7 +319,7 @@ var layout_default = Layout;
|
|
|
317
319
|
// src/elements/map.tsx
|
|
318
320
|
var import_react6 = __toESM(require("react"));
|
|
319
321
|
var Map = (0, import_react6.forwardRef)((props, ref) => {
|
|
320
|
-
|
|
322
|
+
let _a = props, { place, zoom } = _a, rest = __objRest(_a, ["place", "zoom"]);
|
|
321
323
|
return /* @__PURE__ */ import_react6.default.createElement("div", __spreadValues({
|
|
322
324
|
ref
|
|
323
325
|
}, rest), /* @__PURE__ */ import_react6.default.createElement("iframe", {
|
|
@@ -327,19 +329,12 @@ var Map = (0, import_react6.forwardRef)((props, ref) => {
|
|
|
327
329
|
height: "100%",
|
|
328
330
|
title: "map",
|
|
329
331
|
src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
|
|
330
|
-
style: {
|
|
331
|
-
pointerEvents: "none"
|
|
332
|
-
}
|
|
332
|
+
style: { pointerEvents: "none" }
|
|
333
333
|
}));
|
|
334
334
|
});
|
|
335
335
|
Map.defaultProps = {
|
|
336
336
|
place: "Hanoi",
|
|
337
|
-
zoom: 14
|
|
338
|
-
css: {
|
|
339
|
-
"@desktop": {
|
|
340
|
-
gridArea: "1 / 1 / 11 / 13"
|
|
341
|
-
}
|
|
342
|
-
}
|
|
337
|
+
zoom: 14
|
|
343
338
|
};
|
|
344
339
|
var map_default = Map;
|
|
345
340
|
|
|
@@ -359,8 +354,7 @@ Text.defaultProps = {
|
|
|
359
354
|
"@desktop": {
|
|
360
355
|
width: "100%",
|
|
361
356
|
height: "fit-content",
|
|
362
|
-
padding:
|
|
363
|
-
margin: 0,
|
|
357
|
+
padding: "20px",
|
|
364
358
|
outline: "none",
|
|
365
359
|
wordBreak: "break-word",
|
|
366
360
|
overflowWrap: "break-word",
|
|
@@ -373,23 +367,24 @@ var text_default = Text;
|
|
|
373
367
|
// src/elements/video.tsx
|
|
374
368
|
var import_react7 = __toESM(require("react"));
|
|
375
369
|
var Video = (0, import_react7.forwardRef)((props, ref) => {
|
|
376
|
-
|
|
370
|
+
let { isDesignMode } = (0, import_react7.useContext)(WeaverseContext);
|
|
377
371
|
let _a = props, { src, type, controls, poster, autoPlay, loop, muted } = _a, rest = __objRest(_a, ["src", "type", "controls", "poster", "autoPlay", "loop", "muted"]);
|
|
378
|
-
return /* @__PURE__ */ import_react7.default.createElement("
|
|
379
|
-
ref
|
|
372
|
+
return /* @__PURE__ */ import_react7.default.createElement("div", __spreadValues({
|
|
373
|
+
ref
|
|
374
|
+
}, rest), /* @__PURE__ */ import_react7.default.createElement("video", {
|
|
380
375
|
controls: isDesignMode ? false : controls,
|
|
381
376
|
autoPlay: isDesignMode ? false : autoPlay,
|
|
382
377
|
loop,
|
|
383
378
|
muted: true,
|
|
384
379
|
controlsList: "nodownload",
|
|
385
380
|
disablePictureInPicture: true
|
|
386
|
-
},
|
|
381
|
+
}, /* @__PURE__ */ import_react7.default.createElement("source", {
|
|
387
382
|
src,
|
|
388
383
|
type: type || "video/mp4"
|
|
389
|
-
}));
|
|
384
|
+
}), "Your browser does not support the video tag."));
|
|
390
385
|
});
|
|
391
386
|
Video.defaultProps = {
|
|
392
|
-
src: "https://
|
|
387
|
+
src: "https://youtu.be/wM-NT6hcw48",
|
|
393
388
|
poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
|
|
394
389
|
loop: false,
|
|
395
390
|
type: "video/mp4",
|
|
@@ -398,64 +393,117 @@ Video.defaultProps = {
|
|
|
398
393
|
muted: true,
|
|
399
394
|
css: {
|
|
400
395
|
"@desktop": {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
whitespace: "break-spaces",
|
|
407
|
-
width: "100%",
|
|
408
|
-
wordBreak: "break-word"
|
|
396
|
+
video: {
|
|
397
|
+
height: "100%",
|
|
398
|
+
width: "100%",
|
|
399
|
+
aspectRatio: "16 / 9"
|
|
400
|
+
}
|
|
409
401
|
}
|
|
410
402
|
}
|
|
411
403
|
};
|
|
412
404
|
var video_default = Video;
|
|
413
405
|
|
|
414
406
|
// src/elements/instagram.tsx
|
|
407
|
+
var import_react9 = __toESM(require("react"));
|
|
408
|
+
|
|
409
|
+
// src/elements/shared/Placeholder.tsx
|
|
415
410
|
var import_react8 = __toESM(require("react"));
|
|
416
|
-
var
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
411
|
+
var Placeholder = (0, import_react8.forwardRef)((props, ref) => {
|
|
412
|
+
let _a = props, { element, children } = _a, rest = __objRest(_a, ["element", "children"]);
|
|
413
|
+
let style = {
|
|
414
|
+
position: "absolute",
|
|
415
|
+
height: "100%",
|
|
416
|
+
width: "100%",
|
|
417
|
+
display: "flex",
|
|
418
|
+
flexDirection: "column",
|
|
419
|
+
alignItems: "center",
|
|
420
|
+
justifyContent: "center",
|
|
421
|
+
color: "#374151",
|
|
422
|
+
pointerEvents: "none",
|
|
423
|
+
zIndex: 1
|
|
428
424
|
};
|
|
429
|
-
const { className: instagramClass = "" } = stitchesInstance.css(css)();
|
|
430
425
|
return /* @__PURE__ */ import_react8.default.createElement("div", __spreadValues({
|
|
431
|
-
|
|
426
|
+
style,
|
|
432
427
|
ref
|
|
433
|
-
}, rest),
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
428
|
+
}, rest), /* @__PURE__ */ import_react8.default.createElement("div", {
|
|
429
|
+
style: { fontWeight: 600, marginBottom: "10px" }
|
|
430
|
+
}, element), /* @__PURE__ */ import_react8.default.createElement("div", null, children));
|
|
431
|
+
});
|
|
432
|
+
var Placeholder_default = Placeholder;
|
|
433
|
+
|
|
434
|
+
// src/elements/instagram.tsx
|
|
435
|
+
var INSTAGRAM_API = "https://graph.instagram.com";
|
|
436
|
+
var Instagram = (0, import_react9.forwardRef)((props, ref) => {
|
|
437
|
+
const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
|
|
438
|
+
const [media, setMedia] = (0, import_react9.useState)([]);
|
|
439
|
+
const [error, setError] = (0, import_react9.useState)(null);
|
|
440
|
+
let { isDesignMode } = (0, import_react9.useContext)(WeaverseContext);
|
|
441
|
+
(0, import_react9.useEffect)(() => {
|
|
442
|
+
if (token) {
|
|
443
|
+
let params = new URLSearchParams({
|
|
444
|
+
access_token: token,
|
|
445
|
+
fields: "id,media_type,caption,media_url,permalink"
|
|
446
|
+
});
|
|
447
|
+
fetch(`${INSTAGRAM_API}/me/media?${params.toString()}`).then((res) => res.json()).then((res) => {
|
|
448
|
+
if (res.error) {
|
|
449
|
+
setError(res);
|
|
450
|
+
} else {
|
|
451
|
+
setError(null);
|
|
452
|
+
setMedia([...res.data]);
|
|
453
|
+
}
|
|
454
|
+
}).catch(setError);
|
|
455
|
+
}
|
|
456
|
+
}, [token]);
|
|
457
|
+
if (!token || error) {
|
|
458
|
+
return /* @__PURE__ */ import_react9.default.createElement("div", __spreadValues({
|
|
459
|
+
ref
|
|
460
|
+
}, rest), /* @__PURE__ */ import_react9.default.createElement(Placeholder_default, {
|
|
461
|
+
element: "Instagram"
|
|
462
|
+
}, !token ? "Connect your Instagram account to display photos on your site." : "Invalid or expired token!"));
|
|
463
|
+
}
|
|
464
|
+
let style = {
|
|
465
|
+
"--wv-ig-images-per-row": imagesPerRow,
|
|
466
|
+
"--wv-ig-images-gap": gap
|
|
467
|
+
};
|
|
468
|
+
return /* @__PURE__ */ import_react9.default.createElement("div", __spreadProps(__spreadValues({
|
|
469
|
+
ref
|
|
470
|
+
}, rest), {
|
|
471
|
+
style
|
|
472
|
+
}), /* @__PURE__ */ import_react9.default.createElement("div", {
|
|
473
|
+
className: "wv-ig-media-container"
|
|
474
|
+
}, media.slice(0, numberOfImages).map((item) => {
|
|
475
|
+
let linkProps;
|
|
476
|
+
if (!isDesignMode) {
|
|
477
|
+
linkProps = { href: item.permalink, target: "_blank" };
|
|
478
|
+
}
|
|
479
|
+
return /* @__PURE__ */ import_react9.default.createElement("a", __spreadValues({
|
|
480
|
+
key: item.id
|
|
481
|
+
}, linkProps), /* @__PURE__ */ import_react9.default.createElement("img", {
|
|
440
482
|
alt: item.caption,
|
|
441
483
|
src: item.media_url
|
|
442
484
|
}));
|
|
443
|
-
}));
|
|
485
|
+
})));
|
|
444
486
|
});
|
|
445
487
|
Instagram.defaultProps = {
|
|
446
488
|
token: "",
|
|
447
|
-
|
|
448
|
-
|
|
489
|
+
username: "",
|
|
490
|
+
numberOfImages: 8,
|
|
491
|
+
imagesPerRow: 4,
|
|
492
|
+
gap: 0,
|
|
449
493
|
css: {
|
|
450
494
|
"@desktop": {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
"
|
|
458
|
-
|
|
495
|
+
".wv-ig-media-container": {
|
|
496
|
+
overflow: "hidden",
|
|
497
|
+
maxWidth: "100%",
|
|
498
|
+
maxHeight: "100%",
|
|
499
|
+
display: "grid",
|
|
500
|
+
gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
|
|
501
|
+
gap: "var(--wv-ig-images-gap, 0px)",
|
|
502
|
+
img: {
|
|
503
|
+
aspectRatio: "1 / 1",
|
|
504
|
+
width: "100%",
|
|
505
|
+
height: "100%",
|
|
506
|
+
objectFit: "cover"
|
|
459
507
|
}
|
|
460
508
|
}
|
|
461
509
|
}
|
|
@@ -463,6 +511,126 @@ Instagram.defaultProps = {
|
|
|
463
511
|
};
|
|
464
512
|
var instagram_default = Instagram;
|
|
465
513
|
|
|
514
|
+
// src/elements/accordion/index.tsx
|
|
515
|
+
var import_react10 = __toESM(require("react"));
|
|
516
|
+
var AccordionContext = (0, import_react10.createContext)({
|
|
517
|
+
active: null,
|
|
518
|
+
setActive: () => {
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
var Accordion = (0, import_react10.forwardRef)((props, ref) => {
|
|
522
|
+
const _a = props, { items, children } = _a, rest = __objRest(_a, ["items", "children"]);
|
|
523
|
+
const [active, setActive] = (0, import_react10.useState)(null);
|
|
524
|
+
const setOpenAccordion = (id) => {
|
|
525
|
+
if (id === active) {
|
|
526
|
+
setActive(null);
|
|
527
|
+
} else {
|
|
528
|
+
setActive(id);
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
console.info("9779 active", active);
|
|
532
|
+
return /* @__PURE__ */ import_react10.default.createElement("div", __spreadValues({
|
|
533
|
+
ref
|
|
534
|
+
}, rest), /* @__PURE__ */ import_react10.default.createElement(AccordionContext.Provider, {
|
|
535
|
+
value: { active, setActive: setOpenAccordion }
|
|
536
|
+
}, children));
|
|
537
|
+
});
|
|
538
|
+
Accordion.defaultProps = {
|
|
539
|
+
items: [
|
|
540
|
+
{
|
|
541
|
+
id: 1,
|
|
542
|
+
headerText: "Header 1",
|
|
543
|
+
childrenId: true
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
id: 2,
|
|
547
|
+
headerText: "Header 2"
|
|
548
|
+
}
|
|
549
|
+
],
|
|
550
|
+
css: {
|
|
551
|
+
"@desktop": {
|
|
552
|
+
display: "flex",
|
|
553
|
+
flexDirection: "column",
|
|
554
|
+
gap: 4,
|
|
555
|
+
".wv-accordion-header": {
|
|
556
|
+
borderRadius: 4,
|
|
557
|
+
padding: 4,
|
|
558
|
+
marginBottom: 4,
|
|
559
|
+
backgroundColor: "#aaa",
|
|
560
|
+
"&.active": {
|
|
561
|
+
color: "blue"
|
|
562
|
+
},
|
|
563
|
+
'&.active + [data-wv-type="accordion.content"]': {
|
|
564
|
+
display: "grid"
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
};
|
|
570
|
+
var accordion_default = Accordion;
|
|
571
|
+
|
|
572
|
+
// src/elements/accordion/AccordionWrapper.tsx
|
|
573
|
+
var import_react11 = __toESM(require("react"));
|
|
574
|
+
var AccordionWrapper = (0, import_react11.forwardRef)((props, ref) => {
|
|
575
|
+
const _a = props, { wrapperId, headerText, children } = _a, rest = __objRest(_a, ["wrapperId", "headerText", "children"]);
|
|
576
|
+
const { active, setActive } = (0, import_react11.useContext)(AccordionContext);
|
|
577
|
+
return /* @__PURE__ */ import_react11.default.createElement("div", __spreadValues({
|
|
578
|
+
ref
|
|
579
|
+
}, rest), /* @__PURE__ */ import_react11.default.createElement("div", {
|
|
580
|
+
onClick: () => setActive(wrapperId),
|
|
581
|
+
className: `wv-accordion-header ${active === wrapperId ? "active" : ""}`
|
|
582
|
+
}, headerText, " #", wrapperId), children);
|
|
583
|
+
});
|
|
584
|
+
AccordionWrapper.defaultProps = {
|
|
585
|
+
wrapperId: 1,
|
|
586
|
+
headerText: "Header 1",
|
|
587
|
+
css: {
|
|
588
|
+
"@desktop": {
|
|
589
|
+
maxHeight: "100%"
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
var AccordionWrapper_default = AccordionWrapper;
|
|
594
|
+
|
|
595
|
+
// src/elements/accordion/AccordionContent.tsx
|
|
596
|
+
var import_react12 = __toESM(require("react"));
|
|
597
|
+
var AccordionContent = (0, import_react12.forwardRef)((props, ref) => {
|
|
598
|
+
const _a = props, { rows, columns, gap, rowSize, children } = _a, rest = __objRest(_a, ["rows", "columns", "gap", "rowSize", "children"]);
|
|
599
|
+
let style = {
|
|
600
|
+
"--rows": rows,
|
|
601
|
+
"--columns": columns,
|
|
602
|
+
"--gap": gap + "px",
|
|
603
|
+
"--row-size": rowSize + "px",
|
|
604
|
+
"--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
|
|
605
|
+
};
|
|
606
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", __spreadProps(__spreadValues({
|
|
607
|
+
ref
|
|
608
|
+
}, rest), {
|
|
609
|
+
style
|
|
610
|
+
}), import_react12.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react12.default.createElement(Placeholder_default, {
|
|
611
|
+
element: "Accordion"
|
|
612
|
+
}, "Item Content"));
|
|
613
|
+
});
|
|
614
|
+
AccordionContent.defaultProps = {
|
|
615
|
+
rows: 2,
|
|
616
|
+
columns: 12,
|
|
617
|
+
gap: 4,
|
|
618
|
+
rowSize: 48,
|
|
619
|
+
css: {
|
|
620
|
+
"@desktop": {
|
|
621
|
+
width: "100%",
|
|
622
|
+
maxWidth: "var(--grid-size)",
|
|
623
|
+
backgroundColor: "#DDD",
|
|
624
|
+
display: "none",
|
|
625
|
+
gridTemplateRows: "repeat(var(--rows), var(--row-size))",
|
|
626
|
+
gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
|
|
627
|
+
gap: "var(--gap)",
|
|
628
|
+
borderRadius: 4
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
var AccordionContent_default = AccordionContent;
|
|
633
|
+
|
|
466
634
|
// src/elements/index.ts
|
|
467
635
|
var elements = {
|
|
468
636
|
Countdown: {
|
|
@@ -500,6 +668,18 @@ var elements = {
|
|
|
500
668
|
Video: {
|
|
501
669
|
Component: video_default,
|
|
502
670
|
type: "video"
|
|
671
|
+
},
|
|
672
|
+
Accordion: {
|
|
673
|
+
Component: accordion_default,
|
|
674
|
+
type: "accordion"
|
|
675
|
+
},
|
|
676
|
+
AccordionWrapper: {
|
|
677
|
+
Component: AccordionWrapper_default,
|
|
678
|
+
type: "accordion.wrapper"
|
|
679
|
+
},
|
|
680
|
+
AccordionContent: {
|
|
681
|
+
Component: AccordionContent_default,
|
|
682
|
+
type: "accordion.content"
|
|
503
683
|
}
|
|
504
684
|
};
|
|
505
685
|
var elements_default = elements;
|
|
@@ -512,13 +692,13 @@ var createRootContext = (configs) => {
|
|
|
512
692
|
});
|
|
513
693
|
return rootContext;
|
|
514
694
|
};
|
|
515
|
-
var WeaverseContext = (0,
|
|
695
|
+
var WeaverseContext = (0, import_react13.createContext)({});
|
|
516
696
|
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
517
697
|
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
518
698
|
|
|
519
699
|
// src/renderer.tsx
|
|
520
700
|
var import_core2 = require("@weaverse/core");
|
|
521
|
-
var
|
|
701
|
+
var import_react14 = __toESM(require("react"));
|
|
522
702
|
|
|
523
703
|
// src/utils/index.ts
|
|
524
704
|
var shortCssObject = (css) => {
|
|
@@ -546,9 +726,9 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
546
726
|
// src/renderer.tsx
|
|
547
727
|
var WeaverseRoot = ({ context }) => {
|
|
548
728
|
var _a;
|
|
549
|
-
let [, setData] = (0,
|
|
550
|
-
let rootRef = (0,
|
|
551
|
-
(0,
|
|
729
|
+
let [, setData] = (0, import_react14.useState)(context.projectData);
|
|
730
|
+
let rootRef = (0, import_react14.useRef)();
|
|
731
|
+
(0, import_react14.useEffect)(() => {
|
|
552
732
|
let update = () => setData({});
|
|
553
733
|
context.subscribe(update);
|
|
554
734
|
if (context.projectData) {
|
|
@@ -561,21 +741,21 @@ var WeaverseRoot = ({ context }) => {
|
|
|
561
741
|
}, []);
|
|
562
742
|
let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
|
|
563
743
|
let themeClass = context.stitchesInstance.theme.className;
|
|
564
|
-
return /* @__PURE__ */
|
|
744
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", __spreadProps(__spreadValues({
|
|
565
745
|
className: `weaverse-content-root ${themeClass}`
|
|
566
746
|
}, eventHandlers), {
|
|
567
747
|
ref: rootRef
|
|
568
|
-
}), /* @__PURE__ */
|
|
748
|
+
}), /* @__PURE__ */ import_react14.default.createElement(WeaverseContextProvider, {
|
|
569
749
|
value: context
|
|
570
|
-
}, /* @__PURE__ */
|
|
750
|
+
}, /* @__PURE__ */ import_react14.default.createElement(ItemInstance, {
|
|
571
751
|
id: context.projectData.rootId || 0
|
|
572
752
|
})));
|
|
573
753
|
};
|
|
574
754
|
var ItemComponent = ({ instance }) => {
|
|
575
|
-
let { stitchesInstance, elementInstances } = (0,
|
|
576
|
-
let [data, setData] = (0,
|
|
755
|
+
let { stitchesInstance, elementInstances } = (0, import_react14.useContext)(WeaverseContext);
|
|
756
|
+
let [data, setData] = (0, import_react14.useState)(instance.data);
|
|
577
757
|
let _a = data, { id, type, childIds = [], css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
|
|
578
|
-
(0,
|
|
758
|
+
(0, import_react14.useEffect)(() => {
|
|
579
759
|
var _a2;
|
|
580
760
|
let update = (data2) => setData(__spreadValues({}, data2));
|
|
581
761
|
instance.subscribe(update);
|
|
@@ -595,12 +775,12 @@ var ItemComponent = ({ instance }) => {
|
|
|
595
775
|
if (Component.$$typeof === Symbol.for("react.forward_ref")) {
|
|
596
776
|
rest.ref = instance.ref;
|
|
597
777
|
}
|
|
598
|
-
return /* @__PURE__ */
|
|
778
|
+
return /* @__PURE__ */ import_react14.default.createElement(Component, __spreadValues({
|
|
599
779
|
key: id,
|
|
600
780
|
"data-wv-type": type,
|
|
601
781
|
"data-wv-id": id,
|
|
602
782
|
className: generateItemClass(instance, stitchesInstance)
|
|
603
|
-
}, rest), childIds.map((id2) => /* @__PURE__ */
|
|
783
|
+
}, rest), childIds.map((id2) => /* @__PURE__ */ import_react14.default.createElement(ItemInstance, {
|
|
604
784
|
key: id2,
|
|
605
785
|
id: id2
|
|
606
786
|
})));
|
|
@@ -608,15 +788,15 @@ var ItemComponent = ({ instance }) => {
|
|
|
608
788
|
return null;
|
|
609
789
|
};
|
|
610
790
|
var ItemInstance = ({ id }) => {
|
|
611
|
-
let context = (0,
|
|
791
|
+
let context = (0, import_react14.useContext)(WeaverseContext);
|
|
612
792
|
let { itemInstances } = context;
|
|
613
793
|
let instance = itemInstances.get(id);
|
|
614
794
|
if (!instance) {
|
|
615
|
-
return /* @__PURE__ */
|
|
795
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", {
|
|
616
796
|
style: { display: "none" }
|
|
617
797
|
}, "Item instance ", id, " not found");
|
|
618
798
|
}
|
|
619
|
-
return /* @__PURE__ */
|
|
799
|
+
return /* @__PURE__ */ import_react14.default.createElement(ItemComponent, {
|
|
620
800
|
instance
|
|
621
801
|
});
|
|
622
802
|
};
|
package/dist/index.mjs
CHANGED
|
@@ -32,12 +32,12 @@ var __objRest = (source, exclude) => {
|
|
|
32
32
|
|
|
33
33
|
// src/context.ts
|
|
34
34
|
import { Weaverse } from "@weaverse/core";
|
|
35
|
-
import { createContext } from "react";
|
|
35
|
+
import { createContext as createContext2 } from "react";
|
|
36
36
|
|
|
37
37
|
// src/elements/button.tsx
|
|
38
38
|
import * as React from "react";
|
|
39
39
|
var Button = React.forwardRef((props, ref) => {
|
|
40
|
-
|
|
40
|
+
let _a = props, { openInNewTab, target, value } = _a, rest = __objRest(_a, ["openInNewTab", "target", "value"]);
|
|
41
41
|
if (target) {
|
|
42
42
|
return /* @__PURE__ */ React.createElement("a", __spreadProps(__spreadValues({
|
|
43
43
|
href: target,
|
|
@@ -72,9 +72,10 @@ var button_default = Button;
|
|
|
72
72
|
// src/elements/container.tsx
|
|
73
73
|
import React2, { forwardRef as forwardRef2 } from "react";
|
|
74
74
|
var Container = forwardRef2((props, ref) => {
|
|
75
|
+
let _a = props, { children } = _a, rest = __objRest(_a, ["children"]);
|
|
75
76
|
return /* @__PURE__ */ React2.createElement("div", __spreadValues({
|
|
76
77
|
ref
|
|
77
|
-
},
|
|
78
|
+
}, rest), children);
|
|
78
79
|
});
|
|
79
80
|
Container.defaultProps = {
|
|
80
81
|
css: {
|
|
@@ -148,7 +149,7 @@ var Countdown = forwardRef3((props, ref) => {
|
|
|
148
149
|
}
|
|
149
150
|
useEffect(() => {
|
|
150
151
|
const flag = setInterval(() => {
|
|
151
|
-
const remainingTime = Math.max((timerType === "
|
|
152
|
+
const remainingTime = Math.max((timerType === "fixed-time" ? new Date(endTime).getTime() : new Date(startTime).getTime() + periods * 60 * 1e3) - Date.now(), 0);
|
|
152
153
|
if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
|
|
153
154
|
window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
|
|
154
155
|
}
|
|
@@ -173,7 +174,7 @@ var Countdown = forwardRef3((props, ref) => {
|
|
|
173
174
|
}));
|
|
174
175
|
});
|
|
175
176
|
Countdown.defaultProps = {
|
|
176
|
-
timerType: "
|
|
177
|
+
timerType: "fixed-time",
|
|
177
178
|
startTime: Date.now(),
|
|
178
179
|
endTime: 1661140528e3,
|
|
179
180
|
periods: 90,
|
|
@@ -193,7 +194,7 @@ Countdown.defaultProps = {
|
|
|
193
194
|
width: 48,
|
|
194
195
|
textAlign: "center"
|
|
195
196
|
},
|
|
196
|
-
"
|
|
197
|
+
".wv-countdown-label": {
|
|
197
198
|
fontSize: 10
|
|
198
199
|
},
|
|
199
200
|
"& > span": {
|
|
@@ -210,10 +211,10 @@ var countdown_default = Countdown;
|
|
|
210
211
|
// src/elements/image.tsx
|
|
211
212
|
import React5 from "react";
|
|
212
213
|
var Image = React5.forwardRef((props, ref) => {
|
|
213
|
-
let _a = props, { src, alt
|
|
214
|
-
return /* @__PURE__ */ React5.createElement("
|
|
214
|
+
let _a = props, { src, alt } = _a, rest = __objRest(_a, ["src", "alt"]);
|
|
215
|
+
return /* @__PURE__ */ React5.createElement("div", __spreadValues({
|
|
215
216
|
ref
|
|
216
|
-
}, rest), {
|
|
217
|
+
}, rest), /* @__PURE__ */ React5.createElement("img", {
|
|
217
218
|
alt,
|
|
218
219
|
src
|
|
219
220
|
}));
|
|
@@ -223,12 +224,11 @@ Image.defaultProps = {
|
|
|
223
224
|
alt: "weaverse image element",
|
|
224
225
|
css: {
|
|
225
226
|
"@desktop": {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
display: "block"
|
|
227
|
+
img: {
|
|
228
|
+
width: "100%",
|
|
229
|
+
height: "100%",
|
|
230
|
+
objectFit: "cover"
|
|
231
|
+
}
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
};
|
|
@@ -238,17 +238,19 @@ var image_default = Image;
|
|
|
238
238
|
import React6, { forwardRef as forwardRef4 } from "react";
|
|
239
239
|
var Layout = forwardRef4((props, ref) => {
|
|
240
240
|
let _a = props, { children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["children", "rows", "gap", "rowSize", "columns", "gridSize"]);
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}, rest),
|
|
241
|
+
let style = {
|
|
242
|
+
"--grid-size": gridSize + "px",
|
|
243
|
+
"--rows": rows,
|
|
244
|
+
"--columns": columns,
|
|
245
|
+
"--gap": gap + "px",
|
|
246
|
+
"--row-size": rowSize + "px",
|
|
247
|
+
"--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
|
|
248
|
+
};
|
|
249
|
+
return /* @__PURE__ */ React6.createElement("section", __spreadProps(__spreadValues({
|
|
250
|
+
ref
|
|
251
|
+
}, rest), {
|
|
252
|
+
style
|
|
253
|
+
}), /* @__PURE__ */ React6.createElement("div", {
|
|
252
254
|
"data-layout-content": true
|
|
253
255
|
}, children));
|
|
254
256
|
});
|
|
@@ -287,7 +289,7 @@ var layout_default = Layout;
|
|
|
287
289
|
// src/elements/map.tsx
|
|
288
290
|
import React7, { forwardRef as forwardRef5 } from "react";
|
|
289
291
|
var Map = forwardRef5((props, ref) => {
|
|
290
|
-
|
|
292
|
+
let _a = props, { place, zoom } = _a, rest = __objRest(_a, ["place", "zoom"]);
|
|
291
293
|
return /* @__PURE__ */ React7.createElement("div", __spreadValues({
|
|
292
294
|
ref
|
|
293
295
|
}, rest), /* @__PURE__ */ React7.createElement("iframe", {
|
|
@@ -297,19 +299,12 @@ var Map = forwardRef5((props, ref) => {
|
|
|
297
299
|
height: "100%",
|
|
298
300
|
title: "map",
|
|
299
301
|
src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
|
|
300
|
-
style: {
|
|
301
|
-
pointerEvents: "none"
|
|
302
|
-
}
|
|
302
|
+
style: { pointerEvents: "none" }
|
|
303
303
|
}));
|
|
304
304
|
});
|
|
305
305
|
Map.defaultProps = {
|
|
306
306
|
place: "Hanoi",
|
|
307
|
-
zoom: 14
|
|
308
|
-
css: {
|
|
309
|
-
"@desktop": {
|
|
310
|
-
gridArea: "1 / 1 / 11 / 13"
|
|
311
|
-
}
|
|
312
|
-
}
|
|
307
|
+
zoom: 14
|
|
313
308
|
};
|
|
314
309
|
var map_default = Map;
|
|
315
310
|
|
|
@@ -329,8 +324,7 @@ Text.defaultProps = {
|
|
|
329
324
|
"@desktop": {
|
|
330
325
|
width: "100%",
|
|
331
326
|
height: "fit-content",
|
|
332
|
-
padding:
|
|
333
|
-
margin: 0,
|
|
327
|
+
padding: "20px",
|
|
334
328
|
outline: "none",
|
|
335
329
|
wordBreak: "break-word",
|
|
336
330
|
overflowWrap: "break-word",
|
|
@@ -343,23 +337,24 @@ var text_default = Text;
|
|
|
343
337
|
// src/elements/video.tsx
|
|
344
338
|
import React9, { forwardRef as forwardRef7, useContext as useContext2 } from "react";
|
|
345
339
|
var Video = forwardRef7((props, ref) => {
|
|
346
|
-
|
|
340
|
+
let { isDesignMode } = useContext2(WeaverseContext);
|
|
347
341
|
let _a = props, { src, type, controls, poster, autoPlay, loop, muted } = _a, rest = __objRest(_a, ["src", "type", "controls", "poster", "autoPlay", "loop", "muted"]);
|
|
348
|
-
return /* @__PURE__ */ React9.createElement("
|
|
349
|
-
ref
|
|
342
|
+
return /* @__PURE__ */ React9.createElement("div", __spreadValues({
|
|
343
|
+
ref
|
|
344
|
+
}, rest), /* @__PURE__ */ React9.createElement("video", {
|
|
350
345
|
controls: isDesignMode ? false : controls,
|
|
351
346
|
autoPlay: isDesignMode ? false : autoPlay,
|
|
352
347
|
loop,
|
|
353
348
|
muted: true,
|
|
354
349
|
controlsList: "nodownload",
|
|
355
350
|
disablePictureInPicture: true
|
|
356
|
-
},
|
|
351
|
+
}, /* @__PURE__ */ React9.createElement("source", {
|
|
357
352
|
src,
|
|
358
353
|
type: type || "video/mp4"
|
|
359
|
-
}));
|
|
354
|
+
}), "Your browser does not support the video tag."));
|
|
360
355
|
});
|
|
361
356
|
Video.defaultProps = {
|
|
362
|
-
src: "https://
|
|
357
|
+
src: "https://youtu.be/wM-NT6hcw48",
|
|
363
358
|
poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
|
|
364
359
|
loop: false,
|
|
365
360
|
type: "video/mp4",
|
|
@@ -368,64 +363,117 @@ Video.defaultProps = {
|
|
|
368
363
|
muted: true,
|
|
369
364
|
css: {
|
|
370
365
|
"@desktop": {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
whitespace: "break-spaces",
|
|
377
|
-
width: "100%",
|
|
378
|
-
wordBreak: "break-word"
|
|
366
|
+
video: {
|
|
367
|
+
height: "100%",
|
|
368
|
+
width: "100%",
|
|
369
|
+
aspectRatio: "16 / 9"
|
|
370
|
+
}
|
|
379
371
|
}
|
|
380
372
|
}
|
|
381
373
|
};
|
|
382
374
|
var video_default = Video;
|
|
383
375
|
|
|
384
376
|
// src/elements/instagram.tsx
|
|
385
|
-
import
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
377
|
+
import React11, { forwardRef as forwardRef9, useContext as useContext3, useEffect as useEffect2, useState } from "react";
|
|
378
|
+
|
|
379
|
+
// src/elements/shared/Placeholder.tsx
|
|
380
|
+
import React10, { forwardRef as forwardRef8 } from "react";
|
|
381
|
+
var Placeholder = forwardRef8((props, ref) => {
|
|
382
|
+
let _a = props, { element, children } = _a, rest = __objRest(_a, ["element", "children"]);
|
|
383
|
+
let style = {
|
|
384
|
+
position: "absolute",
|
|
385
|
+
height: "100%",
|
|
386
|
+
width: "100%",
|
|
387
|
+
display: "flex",
|
|
388
|
+
flexDirection: "column",
|
|
389
|
+
alignItems: "center",
|
|
390
|
+
justifyContent: "center",
|
|
391
|
+
color: "#374151",
|
|
392
|
+
pointerEvents: "none",
|
|
393
|
+
zIndex: 1
|
|
394
|
+
};
|
|
395
|
+
return /* @__PURE__ */ React10.createElement("div", __spreadValues({
|
|
396
|
+
style,
|
|
397
|
+
ref
|
|
398
|
+
}, rest), /* @__PURE__ */ React10.createElement("div", {
|
|
399
|
+
style: { fontWeight: 600, marginBottom: "10px" }
|
|
400
|
+
}, element), /* @__PURE__ */ React10.createElement("div", null, children));
|
|
401
|
+
});
|
|
402
|
+
var Placeholder_default = Placeholder;
|
|
403
|
+
|
|
404
|
+
// src/elements/instagram.tsx
|
|
405
|
+
var INSTAGRAM_API = "https://graph.instagram.com";
|
|
406
|
+
var Instagram = forwardRef9((props, ref) => {
|
|
407
|
+
const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
|
|
389
408
|
const [media, setMedia] = useState([]);
|
|
409
|
+
const [error, setError] = useState(null);
|
|
410
|
+
let { isDesignMode } = useContext3(WeaverseContext);
|
|
390
411
|
useEffect2(() => {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
412
|
+
if (token) {
|
|
413
|
+
let params = new URLSearchParams({
|
|
414
|
+
access_token: token,
|
|
415
|
+
fields: "id,media_type,caption,media_url,permalink"
|
|
416
|
+
});
|
|
417
|
+
fetch(`${INSTAGRAM_API}/me/media?${params.toString()}`).then((res) => res.json()).then((res) => {
|
|
418
|
+
if (res.error) {
|
|
419
|
+
setError(res);
|
|
420
|
+
} else {
|
|
421
|
+
setError(null);
|
|
422
|
+
setMedia([...res.data]);
|
|
423
|
+
}
|
|
424
|
+
}).catch(setError);
|
|
425
|
+
}
|
|
395
426
|
}, [token]);
|
|
396
|
-
|
|
397
|
-
|
|
427
|
+
if (!token || error) {
|
|
428
|
+
return /* @__PURE__ */ React11.createElement("div", __spreadValues({
|
|
429
|
+
ref
|
|
430
|
+
}, rest), /* @__PURE__ */ React11.createElement(Placeholder_default, {
|
|
431
|
+
element: "Instagram"
|
|
432
|
+
}, !token ? "Connect your Instagram account to display photos on your site." : "Invalid or expired token!"));
|
|
433
|
+
}
|
|
434
|
+
let style = {
|
|
435
|
+
"--wv-ig-images-per-row": imagesPerRow,
|
|
436
|
+
"--wv-ig-images-gap": gap
|
|
398
437
|
};
|
|
399
|
-
|
|
400
|
-
return /* @__PURE__ */ React10.createElement("div", __spreadValues({
|
|
401
|
-
className: `${className} ${instagramClass}`,
|
|
438
|
+
return /* @__PURE__ */ React11.createElement("div", __spreadProps(__spreadValues({
|
|
402
439
|
ref
|
|
403
|
-
}, rest),
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
440
|
+
}, rest), {
|
|
441
|
+
style
|
|
442
|
+
}), /* @__PURE__ */ React11.createElement("div", {
|
|
443
|
+
className: "wv-ig-media-container"
|
|
444
|
+
}, media.slice(0, numberOfImages).map((item) => {
|
|
445
|
+
let linkProps;
|
|
446
|
+
if (!isDesignMode) {
|
|
447
|
+
linkProps = { href: item.permalink, target: "_blank" };
|
|
448
|
+
}
|
|
449
|
+
return /* @__PURE__ */ React11.createElement("a", __spreadValues({
|
|
450
|
+
key: item.id
|
|
451
|
+
}, linkProps), /* @__PURE__ */ React11.createElement("img", {
|
|
410
452
|
alt: item.caption,
|
|
411
453
|
src: item.media_url
|
|
412
454
|
}));
|
|
413
|
-
}));
|
|
455
|
+
})));
|
|
414
456
|
});
|
|
415
457
|
Instagram.defaultProps = {
|
|
416
458
|
token: "",
|
|
417
|
-
|
|
418
|
-
|
|
459
|
+
username: "",
|
|
460
|
+
numberOfImages: 8,
|
|
461
|
+
imagesPerRow: 4,
|
|
462
|
+
gap: 0,
|
|
419
463
|
css: {
|
|
420
464
|
"@desktop": {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
"
|
|
428
|
-
|
|
465
|
+
".wv-ig-media-container": {
|
|
466
|
+
overflow: "hidden",
|
|
467
|
+
maxWidth: "100%",
|
|
468
|
+
maxHeight: "100%",
|
|
469
|
+
display: "grid",
|
|
470
|
+
gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
|
|
471
|
+
gap: "var(--wv-ig-images-gap, 0px)",
|
|
472
|
+
img: {
|
|
473
|
+
aspectRatio: "1 / 1",
|
|
474
|
+
width: "100%",
|
|
475
|
+
height: "100%",
|
|
476
|
+
objectFit: "cover"
|
|
429
477
|
}
|
|
430
478
|
}
|
|
431
479
|
}
|
|
@@ -433,6 +481,126 @@ Instagram.defaultProps = {
|
|
|
433
481
|
};
|
|
434
482
|
var instagram_default = Instagram;
|
|
435
483
|
|
|
484
|
+
// src/elements/accordion/index.tsx
|
|
485
|
+
import React12, { createContext, forwardRef as forwardRef10, useState as useState2 } from "react";
|
|
486
|
+
var AccordionContext = createContext({
|
|
487
|
+
active: null,
|
|
488
|
+
setActive: () => {
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
var Accordion = forwardRef10((props, ref) => {
|
|
492
|
+
const _a = props, { items, children } = _a, rest = __objRest(_a, ["items", "children"]);
|
|
493
|
+
const [active, setActive] = useState2(null);
|
|
494
|
+
const setOpenAccordion = (id) => {
|
|
495
|
+
if (id === active) {
|
|
496
|
+
setActive(null);
|
|
497
|
+
} else {
|
|
498
|
+
setActive(id);
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
console.info("9779 active", active);
|
|
502
|
+
return /* @__PURE__ */ React12.createElement("div", __spreadValues({
|
|
503
|
+
ref
|
|
504
|
+
}, rest), /* @__PURE__ */ React12.createElement(AccordionContext.Provider, {
|
|
505
|
+
value: { active, setActive: setOpenAccordion }
|
|
506
|
+
}, children));
|
|
507
|
+
});
|
|
508
|
+
Accordion.defaultProps = {
|
|
509
|
+
items: [
|
|
510
|
+
{
|
|
511
|
+
id: 1,
|
|
512
|
+
headerText: "Header 1",
|
|
513
|
+
childrenId: true
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
id: 2,
|
|
517
|
+
headerText: "Header 2"
|
|
518
|
+
}
|
|
519
|
+
],
|
|
520
|
+
css: {
|
|
521
|
+
"@desktop": {
|
|
522
|
+
display: "flex",
|
|
523
|
+
flexDirection: "column",
|
|
524
|
+
gap: 4,
|
|
525
|
+
".wv-accordion-header": {
|
|
526
|
+
borderRadius: 4,
|
|
527
|
+
padding: 4,
|
|
528
|
+
marginBottom: 4,
|
|
529
|
+
backgroundColor: "#aaa",
|
|
530
|
+
"&.active": {
|
|
531
|
+
color: "blue"
|
|
532
|
+
},
|
|
533
|
+
'&.active + [data-wv-type="accordion.content"]': {
|
|
534
|
+
display: "grid"
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
var accordion_default = Accordion;
|
|
541
|
+
|
|
542
|
+
// src/elements/accordion/AccordionWrapper.tsx
|
|
543
|
+
import React13, { forwardRef as forwardRef11, useContext as useContext4 } from "react";
|
|
544
|
+
var AccordionWrapper = forwardRef11((props, ref) => {
|
|
545
|
+
const _a = props, { wrapperId, headerText, children } = _a, rest = __objRest(_a, ["wrapperId", "headerText", "children"]);
|
|
546
|
+
const { active, setActive } = useContext4(AccordionContext);
|
|
547
|
+
return /* @__PURE__ */ React13.createElement("div", __spreadValues({
|
|
548
|
+
ref
|
|
549
|
+
}, rest), /* @__PURE__ */ React13.createElement("div", {
|
|
550
|
+
onClick: () => setActive(wrapperId),
|
|
551
|
+
className: `wv-accordion-header ${active === wrapperId ? "active" : ""}`
|
|
552
|
+
}, headerText, " #", wrapperId), children);
|
|
553
|
+
});
|
|
554
|
+
AccordionWrapper.defaultProps = {
|
|
555
|
+
wrapperId: 1,
|
|
556
|
+
headerText: "Header 1",
|
|
557
|
+
css: {
|
|
558
|
+
"@desktop": {
|
|
559
|
+
maxHeight: "100%"
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
var AccordionWrapper_default = AccordionWrapper;
|
|
564
|
+
|
|
565
|
+
// src/elements/accordion/AccordionContent.tsx
|
|
566
|
+
import React14, { forwardRef as forwardRef12 } from "react";
|
|
567
|
+
var AccordionContent = forwardRef12((props, ref) => {
|
|
568
|
+
const _a = props, { rows, columns, gap, rowSize, children } = _a, rest = __objRest(_a, ["rows", "columns", "gap", "rowSize", "children"]);
|
|
569
|
+
let style = {
|
|
570
|
+
"--rows": rows,
|
|
571
|
+
"--columns": columns,
|
|
572
|
+
"--gap": gap + "px",
|
|
573
|
+
"--row-size": rowSize + "px",
|
|
574
|
+
"--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
|
|
575
|
+
};
|
|
576
|
+
return /* @__PURE__ */ React14.createElement("div", __spreadProps(__spreadValues({
|
|
577
|
+
ref
|
|
578
|
+
}, rest), {
|
|
579
|
+
style
|
|
580
|
+
}), React14.Children.count(children) > 0 ? children : /* @__PURE__ */ React14.createElement(Placeholder_default, {
|
|
581
|
+
element: "Accordion"
|
|
582
|
+
}, "Item Content"));
|
|
583
|
+
});
|
|
584
|
+
AccordionContent.defaultProps = {
|
|
585
|
+
rows: 2,
|
|
586
|
+
columns: 12,
|
|
587
|
+
gap: 4,
|
|
588
|
+
rowSize: 48,
|
|
589
|
+
css: {
|
|
590
|
+
"@desktop": {
|
|
591
|
+
width: "100%",
|
|
592
|
+
maxWidth: "var(--grid-size)",
|
|
593
|
+
backgroundColor: "#DDD",
|
|
594
|
+
display: "none",
|
|
595
|
+
gridTemplateRows: "repeat(var(--rows), var(--row-size))",
|
|
596
|
+
gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
|
|
597
|
+
gap: "var(--gap)",
|
|
598
|
+
borderRadius: 4
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
var AccordionContent_default = AccordionContent;
|
|
603
|
+
|
|
436
604
|
// src/elements/index.ts
|
|
437
605
|
var elements = {
|
|
438
606
|
Countdown: {
|
|
@@ -470,6 +638,18 @@ var elements = {
|
|
|
470
638
|
Video: {
|
|
471
639
|
Component: video_default,
|
|
472
640
|
type: "video"
|
|
641
|
+
},
|
|
642
|
+
Accordion: {
|
|
643
|
+
Component: accordion_default,
|
|
644
|
+
type: "accordion"
|
|
645
|
+
},
|
|
646
|
+
AccordionWrapper: {
|
|
647
|
+
Component: AccordionWrapper_default,
|
|
648
|
+
type: "accordion.wrapper"
|
|
649
|
+
},
|
|
650
|
+
AccordionContent: {
|
|
651
|
+
Component: AccordionContent_default,
|
|
652
|
+
type: "accordion.content"
|
|
473
653
|
}
|
|
474
654
|
};
|
|
475
655
|
var elements_default = elements;
|
|
@@ -482,13 +662,13 @@ var createRootContext = (configs) => {
|
|
|
482
662
|
});
|
|
483
663
|
return rootContext;
|
|
484
664
|
};
|
|
485
|
-
var WeaverseContext =
|
|
665
|
+
var WeaverseContext = createContext2({});
|
|
486
666
|
var WeaverseContextProvider = WeaverseContext.Provider;
|
|
487
667
|
var WeaverseContextConsumer = WeaverseContext.Consumer;
|
|
488
668
|
|
|
489
669
|
// src/renderer.tsx
|
|
490
670
|
import { isBrowser } from "@weaverse/core";
|
|
491
|
-
import
|
|
671
|
+
import React15, { useContext as useContext5, useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
492
672
|
|
|
493
673
|
// src/utils/index.ts
|
|
494
674
|
var shortCssObject = (css) => {
|
|
@@ -516,7 +696,7 @@ function generateItemClass(instance, stitchesInstance) {
|
|
|
516
696
|
// src/renderer.tsx
|
|
517
697
|
var WeaverseRoot = ({ context }) => {
|
|
518
698
|
var _a;
|
|
519
|
-
let [, setData] =
|
|
699
|
+
let [, setData] = useState3(context.projectData);
|
|
520
700
|
let rootRef = useRef();
|
|
521
701
|
useEffect3(() => {
|
|
522
702
|
let update = () => setData({});
|
|
@@ -531,19 +711,19 @@ var WeaverseRoot = ({ context }) => {
|
|
|
531
711
|
}, []);
|
|
532
712
|
let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
|
|
533
713
|
let themeClass = context.stitchesInstance.theme.className;
|
|
534
|
-
return /* @__PURE__ */
|
|
714
|
+
return /* @__PURE__ */ React15.createElement("div", __spreadProps(__spreadValues({
|
|
535
715
|
className: `weaverse-content-root ${themeClass}`
|
|
536
716
|
}, eventHandlers), {
|
|
537
717
|
ref: rootRef
|
|
538
|
-
}), /* @__PURE__ */
|
|
718
|
+
}), /* @__PURE__ */ React15.createElement(WeaverseContextProvider, {
|
|
539
719
|
value: context
|
|
540
|
-
}, /* @__PURE__ */
|
|
720
|
+
}, /* @__PURE__ */ React15.createElement(ItemInstance, {
|
|
541
721
|
id: context.projectData.rootId || 0
|
|
542
722
|
})));
|
|
543
723
|
};
|
|
544
724
|
var ItemComponent = ({ instance }) => {
|
|
545
|
-
let { stitchesInstance, elementInstances } =
|
|
546
|
-
let [data, setData] =
|
|
725
|
+
let { stitchesInstance, elementInstances } = useContext5(WeaverseContext);
|
|
726
|
+
let [data, setData] = useState3(instance.data);
|
|
547
727
|
let _a = data, { id, type, childIds = [], css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
|
|
548
728
|
useEffect3(() => {
|
|
549
729
|
var _a2;
|
|
@@ -565,12 +745,12 @@ var ItemComponent = ({ instance }) => {
|
|
|
565
745
|
if (Component.$$typeof === Symbol.for("react.forward_ref")) {
|
|
566
746
|
rest.ref = instance.ref;
|
|
567
747
|
}
|
|
568
|
-
return /* @__PURE__ */
|
|
748
|
+
return /* @__PURE__ */ React15.createElement(Component, __spreadValues({
|
|
569
749
|
key: id,
|
|
570
750
|
"data-wv-type": type,
|
|
571
751
|
"data-wv-id": id,
|
|
572
752
|
className: generateItemClass(instance, stitchesInstance)
|
|
573
|
-
}, rest), childIds.map((id2) => /* @__PURE__ */
|
|
753
|
+
}, rest), childIds.map((id2) => /* @__PURE__ */ React15.createElement(ItemInstance, {
|
|
574
754
|
key: id2,
|
|
575
755
|
id: id2
|
|
576
756
|
})));
|
|
@@ -578,15 +758,15 @@ var ItemComponent = ({ instance }) => {
|
|
|
578
758
|
return null;
|
|
579
759
|
};
|
|
580
760
|
var ItemInstance = ({ id }) => {
|
|
581
|
-
let context =
|
|
761
|
+
let context = useContext5(WeaverseContext);
|
|
582
762
|
let { itemInstances } = context;
|
|
583
763
|
let instance = itemInstances.get(id);
|
|
584
764
|
if (!instance) {
|
|
585
|
-
return /* @__PURE__ */
|
|
765
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
586
766
|
style: { display: "none" }
|
|
587
767
|
}, "Item instance ", id, " not found");
|
|
588
768
|
}
|
|
589
|
-
return /* @__PURE__ */
|
|
769
|
+
return /* @__PURE__ */ React15.createElement(ItemComponent, {
|
|
590
770
|
instance
|
|
591
771
|
});
|
|
592
772
|
};
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.6.
|
|
2
|
+
"version": "0.6.24",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
"name": "@weaverse/react",
|
|
32
32
|
"author": "Weaverse Team",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@weaverse/core": "0.6.
|
|
34
|
+
"@weaverse/core": "0.6.24"
|
|
35
35
|
}
|
|
36
36
|
}
|