@weaverse/react 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -27,6 +27,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
27
27
  // src/index.ts
28
28
  var src_exports = {};
29
29
  __export(src_exports, {
30
+ Elements: () => Elements,
31
+ SharedComponents: () => SharedComponents,
30
32
  WeaverseContext: () => WeaverseContext,
31
33
  WeaverseContextConsumer: () => WeaverseContextConsumer,
32
34
  WeaverseContextProvider: () => WeaverseContextProvider,
@@ -35,10 +37,6 @@ __export(src_exports, {
35
37
  });
36
38
  module.exports = __toCommonJS(src_exports);
37
39
 
38
- // src/context.ts
39
- var import_core = require("@weaverse/core");
40
- var import_react20 = require("react");
41
-
42
40
  // src/elements/button.tsx
43
41
  var React = __toESM(require("react"));
44
42
  var Button = React.forwardRef((props, ref) => {
@@ -87,33 +85,46 @@ var Container = (0, import_react.forwardRef)(
87
85
  }, children);
88
86
  }
89
87
  );
90
- Container.defaultProps = {
91
- css: {
92
- "@desktop": {
93
- alignItems: "flex-start",
94
- backgroundColor: "rgba(248,203,203,0.38)",
95
- display: "flex",
96
- flexDirection: "column",
97
- gridArea: "1 / 1 / 3 / 6",
98
- height: "fit-content",
99
- justifyContent: "flex-start",
100
- overflow: "hidden",
101
- textAlign: "left",
102
- width: "100%"
103
- }
88
+ var css = {
89
+ "@desktop": {
90
+ alignItems: "flex-start",
91
+ backgroundColor: "rgba(248,203,203,0.38)",
92
+ display: "flex",
93
+ flexDirection: "column",
94
+ gridArea: "1 / 1 / 3 / 6",
95
+ height: "fit-content",
96
+ justifyContent: "flex-start",
97
+ overflow: "hidden",
98
+ textAlign: "left",
99
+ width: "100%"
104
100
  }
105
101
  };
102
+ Container.defaultProps = {};
106
103
  var container_default = Container;
107
104
 
108
105
  // src/elements/countdown/index.tsx
109
- var import_react3 = __toESM(require("react"));
106
+ var import_react4 = __toESM(require("react"));
107
+
108
+ // src/context.ts
109
+ var import_core = require("@weaverse/core");
110
+ var import_react2 = require("react");
111
+ var createRootContext = (configs) => {
112
+ let rootContext = new import_core.Weaverse(configs);
113
+ Object.keys(Elements).forEach((key) => {
114
+ rootContext.registerElement(Elements[key]);
115
+ });
116
+ return rootContext;
117
+ };
118
+ var WeaverseContext = (0, import_react2.createContext)({});
119
+ var WeaverseContextProvider = WeaverseContext.Provider;
120
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
110
121
 
111
122
  // src/elements/countdown/timer-block.tsx
112
- var import_react2 = __toESM(require("react"));
123
+ var import_react3 = __toESM(require("react"));
113
124
  function TimerBlock({ value, label }) {
114
- return /* @__PURE__ */ import_react2.default.createElement("div", null, /* @__PURE__ */ import_react2.default.createElement("div", {
125
+ return /* @__PURE__ */ import_react3.default.createElement("div", null, /* @__PURE__ */ import_react3.default.createElement("div", {
115
126
  className: "wv-countdown-number"
116
- }, value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react2.default.createElement("div", {
127
+ }, value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react3.default.createElement("div", {
117
128
  className: "wv-countdown-label"
118
129
  }, label));
119
130
  }
@@ -136,9 +147,9 @@ function getTime(_seconds) {
136
147
  }
137
148
 
138
149
  // src/elements/countdown/index.tsx
139
- var Countdown = (0, import_react3.forwardRef)(
150
+ var Countdown = (0, import_react4.forwardRef)(
140
151
  (props, ref) => {
141
- const { isDesignMode } = (0, import_react3.useContext)(WeaverseContext);
152
+ const { isDesignMode } = (0, import_react4.useContext)(WeaverseContext);
142
153
  let {
143
154
  timerType,
144
155
  startTime,
@@ -150,11 +161,11 @@ var Countdown = (0, import_react3.forwardRef)(
150
161
  showLabel,
151
162
  ...rest
152
163
  } = props;
153
- const [remaining, setRemaining] = import_react3.default.useState(0);
164
+ const [remaining, setRemaining] = import_react4.default.useState(0);
154
165
  if (typeof endTime !== "number") {
155
166
  endTime = Number.parseInt(endTime);
156
167
  }
157
- (0, import_react3.useEffect)(() => {
168
+ (0, import_react4.useEffect)(() => {
158
169
  const flag = setInterval(() => {
159
170
  const remainingTime = Math.max(
160
171
  (timerType === "fixed-time" ? new Date(endTime).getTime() : new Date(startTime).getTime() + periods * 60 * 1e3) - Date.now(),
@@ -170,21 +181,44 @@ var Countdown = (0, import_react3.forwardRef)(
170
181
  };
171
182
  }, [startTime, endTime, periods, timerType]);
172
183
  const timer = getTime(remaining);
173
- return /* @__PURE__ */ import_react3.default.createElement("div", {
184
+ return /* @__PURE__ */ import_react4.default.createElement("div", {
174
185
  ref,
175
186
  ...rest
176
187
  }, times.map((time) => {
177
- return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, {
188
+ return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, {
178
189
  key: time
179
- }, /* @__PURE__ */ import_react3.default.createElement(TimerBlock, {
190
+ }, /* @__PURE__ */ import_react4.default.createElement(TimerBlock, {
180
191
  label: showLabel ? time : "",
181
192
  value: timer[time]
182
- }), time !== "seconds" && /* @__PURE__ */ import_react3.default.createElement("span", {
193
+ }), time !== "seconds" && /* @__PURE__ */ import_react4.default.createElement("span", {
183
194
  className: `wv-countdown-number ${showColon ? "" : "hidden"}`
184
195
  }, ":"));
185
196
  }));
186
197
  }
187
198
  );
199
+ var css2 = {
200
+ "@desktop": {
201
+ fontFamily: "Inter",
202
+ fontSize: 36,
203
+ fontWeight: 500,
204
+ display: "grid",
205
+ gridAutoFlow: "column",
206
+ gap: 10,
207
+ "& > div": {
208
+ width: 48,
209
+ textAlign: "center"
210
+ },
211
+ ".wv-countdown-label": {
212
+ fontSize: 10
213
+ },
214
+ "& > span": {
215
+ lineHeight: "100%"
216
+ },
217
+ "& .hidden": {
218
+ visibility: "hidden"
219
+ }
220
+ }
221
+ };
188
222
  Countdown.defaultProps = {
189
223
  timerType: "fixed-time",
190
224
  startTime: Date.now(),
@@ -193,38 +227,15 @@ Countdown.defaultProps = {
193
227
  redirectUrl: "https://myshop.com",
194
228
  openInNewTab: false,
195
229
  showLabel: true,
196
- showColon: true,
197
- css: {
198
- "@desktop": {
199
- fontFamily: "Inter",
200
- fontSize: 36,
201
- fontWeight: 500,
202
- display: "grid",
203
- gridAutoFlow: "column",
204
- gap: 10,
205
- "& > div": {
206
- width: 48,
207
- textAlign: "center"
208
- },
209
- ".wv-countdown-label": {
210
- fontSize: 10
211
- },
212
- "& > span": {
213
- lineHeight: "100%"
214
- },
215
- "& .hidden": {
216
- visibility: "hidden"
217
- }
218
- }
219
- }
230
+ showColon: true
220
231
  };
221
232
  var countdown_default = Countdown;
222
233
 
223
234
  // src/elements/image.tsx
224
- var import_react4 = __toESM(require("react"));
225
- var Image = import_react4.default.forwardRef(
235
+ var import_react5 = __toESM(require("react"));
236
+ var Image = import_react5.default.forwardRef(
226
237
  (props, ref) => {
227
- let { isDesignMode } = (0, import_react4.useContext)(WeaverseContext);
238
+ let { isDesignMode } = (0, import_react5.useContext)(WeaverseContext);
228
239
  let {
229
240
  src,
230
241
  alt,
@@ -246,40 +257,40 @@ var Image = import_react4.default.forwardRef(
246
257
  console.log("TODO: click action:", onClickAction);
247
258
  }
248
259
  };
249
- return /* @__PURE__ */ import_react4.default.createElement("div", {
260
+ return /* @__PURE__ */ import_react5.default.createElement("div", {
250
261
  ref,
251
262
  ...rest,
252
263
  style,
253
264
  onClick: handleClick
254
- }, /* @__PURE__ */ import_react4.default.createElement("img", {
265
+ }, /* @__PURE__ */ import_react5.default.createElement("img", {
255
266
  alt,
256
267
  src
257
268
  }));
258
269
  }
259
270
  );
271
+ var css3 = {
272
+ "@desktop": {
273
+ img: {
274
+ width: "100%",
275
+ height: "100%",
276
+ objectFit: "var(--wv-img-object-fit, cover)",
277
+ objectPosition: "var(--wv-img-object-position, center)"
278
+ }
279
+ }
280
+ };
260
281
  Image.defaultProps = {
261
282
  src: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/",
262
283
  alt: "Image alt text",
263
284
  objectFit: "cover",
264
285
  objectPosition: "center",
265
286
  onClickAction: "open-lightbox",
266
- openLinkInNewTab: false,
267
- css: {
268
- "@desktop": {
269
- img: {
270
- width: "100%",
271
- height: "100%",
272
- objectFit: "var(--wv-img-object-fit, cover)",
273
- objectPosition: "var(--wv-img-object-position, center)"
274
- }
275
- }
276
- }
287
+ openLinkInNewTab: false
277
288
  };
278
289
  var image_default = Image;
279
290
 
280
291
  // src/elements/layout.tsx
281
- var import_react5 = __toESM(require("react"));
282
- var Layout = (0, import_react5.forwardRef)((props, ref) => {
292
+ var import_react6 = __toESM(require("react"));
293
+ var Layout = (0, import_react6.forwardRef)((props, ref) => {
283
294
  let { children, rows, gap, rowSize, columns, gridSize, ...rest } = props;
284
295
  let style = {
285
296
  "--grid-size": gridSize + "px",
@@ -289,54 +300,54 @@ var Layout = (0, import_react5.forwardRef)((props, ref) => {
289
300
  "--row-size": rowSize + "px",
290
301
  "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
291
302
  };
292
- return /* @__PURE__ */ import_react5.default.createElement("section", {
303
+ return /* @__PURE__ */ import_react6.default.createElement("section", {
293
304
  ref,
294
305
  ...rest,
295
306
  style
296
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
307
+ }, /* @__PURE__ */ import_react6.default.createElement("div", {
297
308
  "data-layout-content": true
298
309
  }, children));
299
310
  });
311
+ var css4 = {
312
+ "@desktop": {
313
+ paddingTop: "16px",
314
+ paddingBottom: "16px",
315
+ paddingLeft: "var(--gap)",
316
+ paddingRight: "var(--gap)",
317
+ "> [data-layout-content]": {
318
+ margin: "0 auto",
319
+ display: "grid !important",
320
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
321
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
322
+ gap: "var(--gap)",
323
+ maxWidth: "var(--grid-size)"
324
+ }
325
+ },
326
+ "@mobile": {
327
+ padding: "0 16px",
328
+ "> [data-layout-content]": {
329
+ display: "flex !important",
330
+ flexDirection: "column"
331
+ }
332
+ }
333
+ };
300
334
  Layout.defaultProps = {
301
335
  gridSize: 1224,
302
336
  rows: 12,
303
337
  columns: 12,
304
338
  gap: 16,
305
- rowSize: 48,
306
- css: {
307
- "@desktop": {
308
- paddingTop: "16px",
309
- paddingBottom: "16px",
310
- paddingLeft: "var(--gap)",
311
- paddingRight: "var(--gap)",
312
- "> [data-layout-content]": {
313
- margin: "0 auto",
314
- display: "grid !important",
315
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
316
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
317
- gap: "var(--gap)",
318
- maxWidth: "var(--grid-size)"
319
- }
320
- },
321
- "@mobile": {
322
- padding: "0 16px",
323
- "> [data-layout-content]": {
324
- display: "flex !important",
325
- flexDirection: "column"
326
- }
327
- }
328
- }
339
+ rowSize: 48
329
340
  };
330
341
  var layout_default = Layout;
331
342
 
332
343
  // src/elements/map.tsx
333
- var import_react6 = __toESM(require("react"));
334
- var Map = (0, import_react6.forwardRef)((props, ref) => {
344
+ var import_react7 = __toESM(require("react"));
345
+ var Map = (0, import_react7.forwardRef)((props, ref) => {
335
346
  let { place, zoom, ...rest } = props;
336
- return /* @__PURE__ */ import_react6.default.createElement("div", {
347
+ return /* @__PURE__ */ import_react7.default.createElement("div", {
337
348
  ref,
338
349
  ...rest
339
- }, /* @__PURE__ */ import_react6.default.createElement("iframe", {
350
+ }, /* @__PURE__ */ import_react7.default.createElement("iframe", {
340
351
  loading: "lazy",
341
352
  scrolling: "no",
342
353
  width: "100%",
@@ -346,6 +357,7 @@ var Map = (0, import_react6.forwardRef)((props, ref) => {
346
357
  style: { pointerEvents: "none" }
347
358
  }));
348
359
  });
360
+ var css5 = {};
349
361
  Map.defaultProps = {
350
362
  place: "Hanoi",
351
363
  zoom: 14
@@ -364,39 +376,48 @@ var Text = React8.forwardRef(
364
376
  });
365
377
  }
366
378
  );
367
- Text.defaultProps = {
368
- value: "The quick brown fox jumps over the lazy dog",
369
- css: {
370
- "@desktop": {
371
- padding: "10px",
372
- wordBreak: "break-word",
373
- overflowWrap: "break-word",
374
- whiteSpace: "break-spaces"
375
- }
379
+ var css6 = {
380
+ "@desktop": {
381
+ padding: "10px",
382
+ wordBreak: "break-word",
383
+ overflowWrap: "break-word",
384
+ whiteSpace: "break-spaces"
376
385
  }
377
386
  };
387
+ Text.defaultProps = {
388
+ value: "The quick brown fox jumps over the lazy dog"
389
+ };
378
390
  var text_default = Text;
379
391
 
380
392
  // src/elements/video.tsx
381
- var import_react7 = __toESM(require("react"));
382
- var Video = (0, import_react7.forwardRef)((props, ref) => {
383
- let { isDesignMode } = (0, import_react7.useContext)(WeaverseContext);
393
+ var import_react8 = __toESM(require("react"));
394
+ var Video = (0, import_react8.forwardRef)((props, ref) => {
395
+ let { isDesignMode } = (0, import_react8.useContext)(WeaverseContext);
384
396
  let { src, type, controls, poster, autoPlay, loop, muted, ...rest } = props;
385
- return /* @__PURE__ */ import_react7.default.createElement("div", {
397
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
386
398
  ref,
387
399
  ...rest
388
- }, /* @__PURE__ */ import_react7.default.createElement("video", {
400
+ }, /* @__PURE__ */ import_react8.default.createElement("video", {
389
401
  controls: isDesignMode ? false : controls,
390
402
  autoPlay: isDesignMode ? false : autoPlay,
391
403
  loop,
392
404
  muted: true,
393
405
  controlsList: "nodownload",
394
406
  disablePictureInPicture: true
395
- }, /* @__PURE__ */ import_react7.default.createElement("source", {
407
+ }, /* @__PURE__ */ import_react8.default.createElement("source", {
396
408
  src,
397
409
  type: type || "video/mp4"
398
410
  }), "Your browser does not support the video tag."));
399
411
  });
412
+ var css7 = {
413
+ "@desktop": {
414
+ video: {
415
+ height: "100%",
416
+ width: "100%",
417
+ aspectRatio: "16 / 9"
418
+ }
419
+ }
420
+ };
400
421
  Video.defaultProps = {
401
422
  src: "https://youtu.be/wM-NT6hcw48",
402
423
  poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
@@ -404,47 +425,38 @@ Video.defaultProps = {
404
425
  type: "video/mp4",
405
426
  controls: false,
406
427
  autoPlay: true,
407
- muted: true,
408
- css: {
409
- "@desktop": {
410
- video: {
411
- height: "100%",
412
- width: "100%",
413
- aspectRatio: "16 / 9"
414
- }
415
- }
416
- }
428
+ muted: true
417
429
  };
418
430
  var video_default = Video;
419
431
 
420
432
  // src/elements/instagram.tsx
421
- var import_react9 = __toESM(require("react"));
433
+ var import_react10 = __toESM(require("react"));
422
434
 
423
435
  // src/elements/shared/Placeholder.tsx
424
- var import_react8 = __toESM(require("react"));
425
- var Placeholder = (0, import_react8.forwardRef)(
436
+ var import_react9 = __toESM(require("react"));
437
+ var Placeholder = (0, import_react9.forwardRef)(
426
438
  (props, ref) => {
427
439
  let { element, children, ...rest } = props;
428
- return /* @__PURE__ */ import_react8.default.createElement("div", {
440
+ return /* @__PURE__ */ import_react9.default.createElement("div", {
429
441
  "data-wv-type": "placeholder",
430
442
  style: { display: "none" },
431
443
  ref,
432
444
  ...rest
433
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
445
+ }, /* @__PURE__ */ import_react9.default.createElement("div", {
434
446
  style: { fontWeight: 600, marginBottom: "10px" }
435
- }, element), /* @__PURE__ */ import_react8.default.createElement("div", null, children));
447
+ }, element), /* @__PURE__ */ import_react9.default.createElement("div", null, children));
436
448
  }
437
449
  );
438
450
  var Placeholder_default = Placeholder;
439
451
 
440
452
  // src/elements/instagram.tsx
441
453
  var INSTAGRAM_API = "https://graph.instagram.com";
442
- var Instagram = (0, import_react9.forwardRef)(
454
+ var Instagram = (0, import_react10.forwardRef)(
443
455
  (props, ref) => {
444
456
  let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
445
- let [media, setMedia] = (0, import_react9.useState)([]);
446
- let [error, setError] = (0, import_react9.useState)(null);
447
- (0, import_react9.useEffect)(() => {
457
+ let [media, setMedia] = (0, import_react10.useState)([]);
458
+ let [error, setError] = (0, import_react10.useState)(null);
459
+ (0, import_react10.useEffect)(() => {
448
460
  if (token) {
449
461
  let params = new URLSearchParams({
450
462
  access_token: token,
@@ -461,10 +473,10 @@ var Instagram = (0, import_react9.forwardRef)(
461
473
  }
462
474
  }, [token]);
463
475
  if (!token || error) {
464
- return /* @__PURE__ */ import_react9.default.createElement("div", {
476
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
465
477
  ref,
466
478
  ...rest
467
- }, /* @__PURE__ */ import_react9.default.createElement(Placeholder_default, {
479
+ }, /* @__PURE__ */ import_react10.default.createElement(Placeholder_default, {
468
480
  element: "Instagram"
469
481
  }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
470
482
  }
@@ -472,65 +484,65 @@ var Instagram = (0, import_react9.forwardRef)(
472
484
  "--wv-ig-images-per-row": imagesPerRow,
473
485
  "--wv-ig-images-gap": gap + "px"
474
486
  };
475
- return /* @__PURE__ */ import_react9.default.createElement("div", {
487
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
476
488
  ref,
477
489
  ...rest,
478
490
  style
479
- }, /* @__PURE__ */ import_react9.default.createElement("div", {
491
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
480
492
  className: "wv-ig-media-container"
481
493
  }, media.slice(0, numberOfImages).map((item) => {
482
494
  let { id, permalink, caption, media_url } = item;
483
- return /* @__PURE__ */ import_react9.default.createElement("a", {
495
+ return /* @__PURE__ */ import_react10.default.createElement("a", {
484
496
  key: id,
485
497
  href: permalink,
486
498
  target: "_blank",
487
499
  rel: "noreferrer"
488
- }, /* @__PURE__ */ import_react9.default.createElement("img", {
500
+ }, /* @__PURE__ */ import_react10.default.createElement("img", {
489
501
  alt: caption,
490
502
  src: media_url
491
503
  }));
492
504
  })));
493
505
  }
494
506
  );
507
+ var css8 = {
508
+ "@desktop": {
509
+ ".wv-ig-media-container": {
510
+ overflow: "hidden",
511
+ maxWidth: "100%",
512
+ maxHeight: "100%",
513
+ display: "grid",
514
+ gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
515
+ gap: "var(--wv-ig-images-gap, 0px)",
516
+ img: {
517
+ aspectRatio: "1 / 1",
518
+ width: "100%",
519
+ height: "100%",
520
+ objectFit: "cover"
521
+ }
522
+ }
523
+ }
524
+ };
495
525
  Instagram.defaultProps = {
496
526
  token: "",
497
527
  username: "",
498
528
  numberOfImages: 8,
499
529
  imagesPerRow: 4,
500
- gap: 0,
501
- css: {
502
- "@desktop": {
503
- ".wv-ig-media-container": {
504
- overflow: "hidden",
505
- maxWidth: "100%",
506
- maxHeight: "100%",
507
- display: "grid",
508
- gridTemplateColumns: "repeat(var(--wv-ig-images-per-row, 4), 1fr)",
509
- gap: "var(--wv-ig-images-gap, 0px)",
510
- img: {
511
- aspectRatio: "1 / 1",
512
- width: "100%",
513
- height: "100%",
514
- objectFit: "cover"
515
- }
516
- }
517
- }
518
- }
530
+ gap: 0
519
531
  };
520
532
  var instagram_default = Instagram;
521
533
 
522
534
  // src/elements/accordion/index.tsx
523
- var import_react10 = __toESM(require("react"));
524
- var AccordionContext = (0, import_react10.createContext)({
535
+ var import_react11 = __toESM(require("react"));
536
+ var AccordionContext = (0, import_react11.createContext)({
525
537
  iconName: "arrow",
526
538
  active: [],
527
539
  setActive: () => {
528
540
  }
529
541
  });
530
- var Accordion = (0, import_react10.forwardRef)(
542
+ var Accordion = (0, import_react11.forwardRef)(
531
543
  (props, ref) => {
532
544
  const { iconName, children, ...rest } = props;
533
- const [active, setActive] = (0, import_react10.useState)([]);
545
+ const [active, setActive] = (0, import_react11.useState)([]);
534
546
  const setOpenAccordion = (id) => {
535
547
  if (active.includes(id)) {
536
548
  setActive(active.filter((_id) => _id !== id));
@@ -538,31 +550,31 @@ var Accordion = (0, import_react10.forwardRef)(
538
550
  setActive([...active, id]);
539
551
  }
540
552
  };
541
- return /* @__PURE__ */ import_react10.default.createElement("div", {
553
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
542
554
  ref,
543
555
  ...rest
544
- }, /* @__PURE__ */ import_react10.default.createElement(AccordionContext.Provider, {
556
+ }, /* @__PURE__ */ import_react11.default.createElement(AccordionContext.Provider, {
545
557
  value: { active, setActive: setOpenAccordion, iconName }
546
558
  }, children));
547
559
  }
548
560
  );
549
- Accordion.defaultProps = {
550
- iconName: "arrow",
551
- css: {
552
- "@desktop": {
553
- display: "flex",
554
- flexDirection: "column",
555
- gap: 4
556
- }
561
+ var css9 = {
562
+ "@desktop": {
563
+ display: "flex",
564
+ flexDirection: "column",
565
+ gap: 4
557
566
  }
558
567
  };
568
+ Accordion.defaultProps = {
569
+ iconName: "arrow"
570
+ };
559
571
  var accordion_default = Accordion;
560
572
 
561
573
  // src/elements/accordion/AccordionWrapper.tsx
562
- var import_react12 = __toESM(require("react"));
574
+ var import_react13 = __toESM(require("react"));
563
575
 
564
576
  // src/elements/accordion/Icon.tsx
565
- var import_react11 = __toESM(require("react"));
577
+ var import_react12 = __toESM(require("react"));
566
578
  var ICONS = {
567
579
  caret: {
568
580
  animationType: "rotate90",
@@ -619,72 +631,72 @@ var rotateAnimation = {
619
631
  };
620
632
  function Icon(props) {
621
633
  let { name, active = false, style, ...rest } = props;
622
- let { stitchesInstance } = (0, import_react11.useContext)(WeaverseContext);
623
- const { animationType, css } = ICONS[name];
634
+ let { stitchesInstance } = (0, import_react12.useContext)(WeaverseContext);
635
+ const { animationType, css: css16 } = ICONS[name];
624
636
  if (active && animationType === "rotate90") {
625
637
  style = { ...rotateAnimation, ...style };
626
638
  }
627
- let { className } = stitchesInstance.css(css)();
639
+ let { className } = stitchesInstance.css(css16)();
628
640
  if (active)
629
641
  className += " active";
630
- return /* @__PURE__ */ import_react11.default.createElement("span", {
642
+ return /* @__PURE__ */ import_react12.default.createElement("span", {
631
643
  style,
632
644
  ...rest
633
- }, /* @__PURE__ */ import_react11.default.createElement("i", {
645
+ }, /* @__PURE__ */ import_react12.default.createElement("i", {
634
646
  className
635
647
  }));
636
648
  }
637
649
  var Icon_default = Icon;
638
650
 
639
651
  // src/elements/accordion/AccordionWrapper.tsx
640
- var AccordionWrapper = (0, import_react12.forwardRef)((props, ref) => {
652
+ var AccordionWrapper = (0, import_react13.forwardRef)((props, ref) => {
641
653
  const { ["data-wv-id"]: wvId, name, children, ...rest } = props;
642
- const { iconName, active, setActive } = (0, import_react12.useContext)(AccordionContext);
654
+ const { iconName, active, setActive } = (0, import_react13.useContext)(AccordionContext);
643
655
  const isActive = active.includes(wvId);
644
- return /* @__PURE__ */ import_react12.default.createElement("div", {
656
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
645
657
  ref,
646
658
  ...rest
647
- }, /* @__PURE__ */ import_react12.default.createElement("div", {
659
+ }, /* @__PURE__ */ import_react13.default.createElement("div", {
648
660
  onClick: () => setActive(wvId),
649
661
  className: `wv-acc-header ${isActive ? "active" : ""}`
650
- }, /* @__PURE__ */ import_react12.default.createElement("span", null, name), /* @__PURE__ */ import_react12.default.createElement(Icon_default, {
662
+ }, /* @__PURE__ */ import_react13.default.createElement("span", null, name), /* @__PURE__ */ import_react13.default.createElement(Icon_default, {
651
663
  className: "wv-acc-icon",
652
664
  active: isActive,
653
665
  name: iconName
654
666
  })), children);
655
667
  });
656
- AccordionWrapper.defaultProps = {
657
- name: "Accordion item",
658
- css: {
659
- "@desktop": {
660
- maxHeight: "100%",
661
- ".wv-acc-icon": {
662
- position: "absolute",
663
- right: 16,
664
- width: 16,
665
- height: 16,
666
- transition: "all 0.3s ease-in-out 0s"
667
- },
668
- ".wv-acc-header": {
669
- display: "flex",
670
- alignItems: "center",
671
- borderRadius: 4,
672
- padding: 12,
673
- marginBottom: 4,
674
- border: "1px solid #76A9FA",
675
- cursor: "pointer",
676
- '&.active + [data-wv-type="accordion.content"]': {
677
- maxHeight: "var(--max-height, inherit)"
678
- }
668
+ var css10 = {
669
+ "@desktop": {
670
+ maxHeight: "100%",
671
+ ".wv-acc-icon": {
672
+ position: "absolute",
673
+ right: 16,
674
+ width: 16,
675
+ height: 16,
676
+ transition: "all 0.3s ease-in-out 0s"
677
+ },
678
+ ".wv-acc-header": {
679
+ display: "flex",
680
+ alignItems: "center",
681
+ borderRadius: 4,
682
+ padding: 12,
683
+ marginBottom: 4,
684
+ border: "1px solid #76A9FA",
685
+ cursor: "pointer",
686
+ '&.active + [data-wv-type="accordion.content"]': {
687
+ maxHeight: "var(--max-height, inherit)"
679
688
  }
680
689
  }
681
690
  }
682
691
  };
692
+ AccordionWrapper.defaultProps = {
693
+ name: "Accordion item"
694
+ };
683
695
  var AccordionWrapper_default = AccordionWrapper;
684
696
 
685
697
  // src/elements/accordion/AccordionContent.tsx
686
- var import_react13 = __toESM(require("react"));
687
- var AccordionContent = (0, import_react13.forwardRef)(
698
+ var import_react14 = __toESM(require("react"));
699
+ var AccordionContent = (0, import_react14.forwardRef)(
688
700
  (props, ref) => {
689
701
  const { rows, columns, gap, rowSize, children, ...rest } = props;
690
702
  let style = {
@@ -695,132 +707,132 @@ var AccordionContent = (0, import_react13.forwardRef)(
695
707
  "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
696
708
  "--max-height": rows * rowSize + gap * (rowSize - 1) + "px"
697
709
  };
698
- return /* @__PURE__ */ import_react13.default.createElement("div", {
710
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
699
711
  ref,
700
712
  ...rest,
701
713
  style
702
- }, import_react13.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react13.default.createElement(Placeholder_default, {
714
+ }, import_react14.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react14.default.createElement(Placeholder_default, {
703
715
  element: "Accordion Content"
704
716
  }, "Drag and drop an element here."));
705
717
  }
706
718
  );
719
+ var css11 = {
720
+ "@desktop": {
721
+ width: "100%",
722
+ maxWidth: "var(--grid-size)",
723
+ display: "grid",
724
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
725
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
726
+ gap: "var(--gap)",
727
+ overflow: "hidden",
728
+ maxHeight: 0,
729
+ transition: "all var(--transition-duration, 0.3s) ease-in-out",
730
+ borderRadius: 4
731
+ }
732
+ };
707
733
  AccordionContent.defaultProps = {
708
734
  rows: 3,
709
735
  columns: 12,
710
736
  gap: 4,
711
- rowSize: 48,
712
- css: {
713
- "@desktop": {
714
- width: "100%",
715
- maxWidth: "var(--grid-size)",
716
- display: "grid",
717
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
718
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
719
- gap: "var(--gap)",
720
- overflow: "hidden",
721
- maxHeight: 0,
722
- transition: "all var(--transition-duration, 0.3s) ease-in-out",
723
- borderRadius: 4
724
- }
725
- }
737
+ rowSize: 48
726
738
  };
727
739
  var AccordionContent_default = AccordionContent;
728
740
 
729
741
  // src/elements/tab/index.tsx
730
- var import_react15 = __toESM(require("react"));
742
+ var import_react16 = __toESM(require("react"));
731
743
 
732
744
  // src/elements/tab/TabHeaderWrapper.tsx
733
- var import_react14 = __toESM(require("react"));
745
+ var import_react15 = __toESM(require("react"));
734
746
  function TabHeader(props) {
735
747
  const { wvId } = props;
736
- const { active, setActive } = (0, import_react14.useContext)(TabContext);
737
- const { itemInstances } = (0, import_react14.useContext)(WeaverseContext);
748
+ const { active, setActive } = (0, import_react15.useContext)(TabContext);
749
+ const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
738
750
  const instance = itemInstances.get(wvId);
739
- let [data, setData] = (0, import_react14.useState)(instance.data);
740
- (0, import_react14.useEffect)(() => {
751
+ let [data, setData] = (0, import_react15.useState)(instance.data);
752
+ (0, import_react15.useEffect)(() => {
741
753
  let update = (data2) => setData({ ...data2 });
742
754
  instance.subscribe(update);
743
755
  }, []);
744
- return /* @__PURE__ */ import_react14.default.createElement("div", {
756
+ return /* @__PURE__ */ import_react15.default.createElement("div", {
745
757
  onClick: () => setActive(wvId),
746
758
  className: `wv-tab-header${active === wvId ? " active" : ""}`
747
759
  }, data.name);
748
760
  }
749
761
  function TabHeaderWrapper(props) {
750
- const { itemInstances } = (0, import_react14.useContext)(WeaverseContext);
762
+ const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
751
763
  const instance = itemInstances.get(props.wvId);
752
764
  const data = instance.data;
753
765
  const childIds = data.childIds;
754
- return /* @__PURE__ */ import_react14.default.createElement("div", {
766
+ return /* @__PURE__ */ import_react15.default.createElement("div", {
755
767
  className: "wv-tab-header-wrapper"
756
- }, childIds.map((id) => /* @__PURE__ */ import_react14.default.createElement(TabHeader, {
768
+ }, childIds.map((id) => /* @__PURE__ */ import_react15.default.createElement(TabHeader, {
757
769
  key: id,
758
770
  wvId: id
759
771
  })));
760
772
  }
761
773
 
762
774
  // src/elements/tab/index.tsx
763
- var TabContext = (0, import_react15.createContext)({
775
+ var TabContext = (0, import_react16.createContext)({
764
776
  active: null,
765
777
  setActive: () => {
766
778
  }
767
779
  });
768
- var Tab = (0, import_react15.forwardRef)((props, ref) => {
780
+ var Tab = (0, import_react16.forwardRef)((props, ref) => {
769
781
  var _a, _b, _c;
770
782
  const wvId = props["data-wv-id"];
771
783
  const { fullWidthTabHeader, children, ...rest } = props;
772
- const defaultActive = (_c = (_b = (_a = import_react15.default.Children.toArray(children)) == null ? void 0 : _a[0]) == null ? void 0 : _b.props) == null ? void 0 : _c.id;
773
- const [active, setActive] = (0, import_react15.useState)(defaultActive);
784
+ const defaultActive = (_c = (_b = (_a = import_react16.default.Children.toArray(children)) == null ? void 0 : _a[0]) == null ? void 0 : _b.props) == null ? void 0 : _c.id;
785
+ const [active, setActive] = (0, import_react16.useState)(defaultActive);
774
786
  const setOpenTab = (id) => {
775
787
  if (id !== active) {
776
788
  setActive(id);
777
789
  }
778
790
  };
779
- return /* @__PURE__ */ import_react15.default.createElement("div", {
791
+ return /* @__PURE__ */ import_react16.default.createElement("div", {
780
792
  ref,
781
793
  ...rest,
782
794
  style: {
783
795
  "--tab-width": fullWidthTabHeader ? "100%" : "auto"
784
796
  }
785
- }, /* @__PURE__ */ import_react15.default.createElement(TabContext.Provider, {
797
+ }, /* @__PURE__ */ import_react16.default.createElement(TabContext.Provider, {
786
798
  value: { active, setActive: setOpenTab }
787
- }, /* @__PURE__ */ import_react15.default.createElement(TabHeaderWrapper, {
799
+ }, /* @__PURE__ */ import_react16.default.createElement(TabHeaderWrapper, {
788
800
  wvId
789
801
  }), children));
790
802
  });
791
- Tab.defaultProps = {
792
- fullWidthTabHeader: false,
793
- css: {
794
- "@desktop": {
803
+ var css12 = {
804
+ "@desktop": {
805
+ display: "flex",
806
+ flexDirection: "column",
807
+ gap: 4,
808
+ "& .wv-tab-header-wrapper": {
809
+ width: "100%",
795
810
  display: "flex",
796
- flexDirection: "column",
797
- gap: 4,
798
- "& .wv-tab-header-wrapper": {
799
- width: "100%",
800
- display: "flex",
801
- marginBottom: 10
802
- },
803
- "& .wv-tab-header": {
804
- backgroundColor: "#fff",
805
- padding: "15px 24px",
806
- border: "1px solid #E4E7EB",
807
- cursor: "pointer",
808
- textAlign: "center",
809
- width: "var(--tab-width, auto)",
810
- "&.active": {
811
- backgroundColor: "#E4E7EB"
812
- }
811
+ marginBottom: 10
812
+ },
813
+ "& .wv-tab-header": {
814
+ backgroundColor: "#fff",
815
+ padding: "15px 24px",
816
+ border: "1px solid #E4E7EB",
817
+ cursor: "pointer",
818
+ textAlign: "center",
819
+ width: "var(--tab-width, auto)",
820
+ "&.active": {
821
+ backgroundColor: "#E4E7EB"
813
822
  }
814
823
  }
815
824
  }
816
825
  };
826
+ Tab.defaultProps = {
827
+ fullWidthTabHeader: false
828
+ };
817
829
  var tab_default = Tab;
818
830
 
819
831
  // src/elements/tab/TabContent.tsx
820
- var import_react16 = __toESM(require("react"));
821
- var TabContent = (0, import_react16.forwardRef)(
832
+ var import_react17 = __toESM(require("react"));
833
+ var TabContent = (0, import_react17.forwardRef)(
822
834
  (props, ref) => {
823
- const { active } = (0, import_react16.useContext)(TabContext);
835
+ const { active } = (0, import_react17.useContext)(TabContext);
824
836
  const wvId = props["data-wv-id"];
825
837
  const { rows, columns, gap, rowSize, children, ...rest } = props;
826
838
  let style = {
@@ -832,58 +844,58 @@ var TabContent = (0, import_react16.forwardRef)(
832
844
  "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
833
845
  "--content-active": active === wvId ? "grid" : "none"
834
846
  };
835
- return /* @__PURE__ */ import_react16.default.createElement("div", {
847
+ return /* @__PURE__ */ import_react17.default.createElement("div", {
836
848
  ref,
837
849
  ...rest,
838
850
  style
839
- }, import_react16.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react16.default.createElement(Placeholder_default, {
851
+ }, import_react17.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react17.default.createElement(Placeholder_default, {
840
852
  element: "Tab Content"
841
853
  }, "Drag and drop an element here."));
842
854
  }
843
855
  );
856
+ var css13 = {
857
+ "@desktop": {
858
+ width: "100%",
859
+ maxWidth: "var(--grid-size)",
860
+ display: "var(--content-active, none)",
861
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
862
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
863
+ gap: "var(--gap)",
864
+ borderRadius: 4
865
+ }
866
+ };
844
867
  TabContent.defaultProps = {
845
868
  rows: 3,
846
869
  columns: 12,
847
870
  gap: 4,
848
871
  rowSize: 48,
849
- name: "Tab header",
850
- css: {
851
- "@desktop": {
852
- width: "100%",
853
- maxWidth: "var(--grid-size)",
854
- display: "var(--content-active, none)",
855
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
856
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
857
- gap: "var(--gap)",
858
- borderRadius: 4
859
- }
860
- }
872
+ name: "Tab header"
861
873
  };
862
874
  var TabContent_default = TabContent;
863
875
 
864
876
  // src/elements/slider/index.tsx
865
- var import_react17 = __toESM(require("react"));
877
+ var import_react18 = __toESM(require("react"));
866
878
  var import_carousel = require("nuka-carousel/lib/carousel");
867
- var Slider = (0, import_react17.forwardRef)((props, ref) => {
868
- const { isDesignMode } = (0, import_react17.useContext)(WeaverseContext);
879
+ var Slider = (0, import_react18.forwardRef)((props, ref) => {
880
+ const { isDesignMode } = (0, import_react18.useContext)(WeaverseContext);
869
881
  const { autoplay, delay, children, ...rest } = props;
870
- return /* @__PURE__ */ import_react17.default.createElement("div", {
882
+ return /* @__PURE__ */ import_react18.default.createElement("div", {
871
883
  ...rest,
872
884
  ref
873
- }, /* @__PURE__ */ import_react17.default.createElement(import_carousel.Carousel, {
885
+ }, /* @__PURE__ */ import_react18.default.createElement(import_carousel.Carousel, {
874
886
  dragging: false,
875
- renderCenterLeftControls: (props2) => /* @__PURE__ */ import_react17.default.createElement("button", {
887
+ renderCenterLeftControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
876
888
  className: "wv-slider-btn",
877
889
  onClick: props2.previousSlide,
878
890
  disabled: (isDesignMode || !autoplay) && props2.currentSlide === 0
879
- }, /* @__PURE__ */ import_react17.default.createElement("i", {
891
+ }, /* @__PURE__ */ import_react18.default.createElement("i", {
880
892
  className: "wv-slider-arrow wv-slider-arrow-left"
881
893
  })),
882
- renderCenterRightControls: (props2) => /* @__PURE__ */ import_react17.default.createElement("button", {
894
+ renderCenterRightControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
883
895
  className: "wv-slider-btn",
884
896
  onClick: props2.nextSlide,
885
897
  disabled: (isDesignMode || !autoplay) && props2.slideCount === props2.currentSlide
886
- }, /* @__PURE__ */ import_react17.default.createElement("i", {
898
+ }, /* @__PURE__ */ import_react18.default.createElement("i", {
887
899
  className: "wv-slider-arrow wv-slider-arrow-right"
888
900
  })),
889
901
  wrapAround: !isDesignMode,
@@ -891,50 +903,50 @@ var Slider = (0, import_react17.forwardRef)((props, ref) => {
891
903
  autoplayInterval: delay * 1e3
892
904
  }, children));
893
905
  });
894
- Slider.defaultProps = {
895
- fullWidth: true,
896
- autoplay: true,
897
- delay: 3,
898
- css: {
899
- "@desktop": {
900
- "& .wv-slider-btn": {
901
- borderRadius: "100%",
902
- width: 40,
903
- height: 40,
904
- background: "#fff",
905
- border: "none",
906
- cursor: "pointer",
907
- "&[disabled]": {
908
- cursor: "not-allowed"
909
- },
910
- "&:hover .wv-slider-arrow": {
911
- borderColor: "#999"
912
- },
913
- "& .wv-slider-arrow": {
914
- border: "solid black",
915
- borderWidth: "0 1px 1px 0",
916
- display: "inline-block",
917
- padding: 5
918
- },
919
- "& .wv-slider-arrow-right": {
920
- transform: "rotate(-45deg)",
921
- marginRight: 5
922
- },
923
- "& .wv-slider-arrow-left": {
924
- transform: "rotate(135deg)",
925
- marginLeft: 5
926
- }
906
+ var css14 = {
907
+ "@desktop": {
908
+ "& .wv-slider-btn": {
909
+ borderRadius: "100%",
910
+ width: 40,
911
+ height: 40,
912
+ background: "#fff",
913
+ border: "none",
914
+ cursor: "pointer",
915
+ "&[disabled]": {
916
+ cursor: "not-allowed"
917
+ },
918
+ "&:hover .wv-slider-arrow": {
919
+ borderColor: "#999"
920
+ },
921
+ "& .wv-slider-arrow": {
922
+ border: "solid black",
923
+ borderWidth: "0 1px 1px 0",
924
+ display: "inline-block",
925
+ padding: 5
926
+ },
927
+ "& .wv-slider-arrow-right": {
928
+ transform: "rotate(-45deg)",
929
+ marginRight: 5
930
+ },
931
+ "& .wv-slider-arrow-left": {
932
+ transform: "rotate(135deg)",
933
+ marginLeft: 5
927
934
  }
928
935
  }
929
936
  }
930
937
  };
938
+ Slider.defaultProps = {
939
+ fullWidth: true,
940
+ autoplay: true,
941
+ delay: 3
942
+ };
931
943
  var slider_default = Slider;
932
944
 
933
945
  // src/elements/slider/SliderContent.tsx
934
- var import_react18 = __toESM(require("react"));
935
- var SliderContent = (0, import_react18.forwardRef)(
946
+ var import_react19 = __toESM(require("react"));
947
+ var SliderContent = (0, import_react19.forwardRef)(
936
948
  (props, ref) => {
937
- const { isDesignMode } = (0, import_react18.useContext)(WeaverseContext);
949
+ const { isDesignMode } = (0, import_react19.useContext)(WeaverseContext);
938
950
  const {
939
951
  mediaUrl,
940
952
  targetLink,
@@ -960,15 +972,27 @@ var SliderContent = (0, import_react18.forwardRef)(
960
972
  window.open(targetLink, openInNewTab ? "_blank" : "_self");
961
973
  }
962
974
  };
963
- return /* @__PURE__ */ import_react18.default.createElement("div", {
975
+ return /* @__PURE__ */ import_react19.default.createElement("div", {
964
976
  ...rest,
965
977
  style,
966
978
  onClick: handleClick
967
- }, import_react18.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react18.default.createElement(Placeholder_default, {
979
+ }, import_react19.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react19.default.createElement(Placeholder_default, {
968
980
  element: "Slider Content"
969
981
  }, "Drag and drop an element here."));
970
982
  }
971
983
  );
984
+ var css15 = {
985
+ "@desktop": {
986
+ width: "100%",
987
+ maxWidth: "var(--grid-size)",
988
+ display: "grid",
989
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
990
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
991
+ gap: "var(--gap)",
992
+ borderRadius: 4,
993
+ backgroundImage: "var(--background-url, none)"
994
+ }
995
+ };
972
996
  SliderContent.defaultProps = {
973
997
  name: "Slider",
974
998
  mediaUrl: "",
@@ -977,64 +1001,19 @@ SliderContent.defaultProps = {
977
1001
  rows: 4,
978
1002
  columns: 12,
979
1003
  gap: 4,
980
- rowSize: 48,
981
- css: {
982
- "@desktop": {
983
- width: "100%",
984
- maxWidth: "var(--grid-size)",
985
- display: "grid",
986
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
987
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
988
- gap: "var(--gap)",
989
- borderRadius: 4,
990
- backgroundImage: "var(--background-url, none)"
991
- }
992
- }
1004
+ rowSize: 48
993
1005
  };
994
1006
  var SliderContent_default = SliderContent;
995
1007
 
996
- // src/elements/custom-html.tsx
997
- var import_react19 = __toESM(require("react"));
998
- var CustomHTML = (0, import_react19.forwardRef)(
999
- (props, ref) => {
1000
- const { content, children, ...rest } = props;
1001
- const { isDesignMode } = (0, import_react19.useContext)(WeaverseContext);
1002
- const style = {
1003
- "--pointer-events": isDesignMode ? "none" : "auto"
1004
- };
1005
- if (!content)
1006
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1007
- ref,
1008
- ...rest
1009
- }, /* @__PURE__ */ import_react19.default.createElement(Placeholder_default, {
1010
- element: "Custom HTML"
1011
- }, "Add your custom HTML code."));
1012
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1013
- ref,
1014
- ...rest,
1015
- style,
1016
- dangerouslySetInnerHTML: { __html: content }
1017
- });
1018
- }
1019
- );
1020
- CustomHTML.defaultProps = {
1021
- content: "",
1022
- type: "custom.html",
1023
- css: {
1024
- "@desktop": {
1025
- "& > *": {
1026
- pointerEvents: "var(--pointer-events, unset)"
1027
- }
1028
- }
1029
- }
1030
- };
1031
- var custom_html_default = CustomHTML;
1032
-
1033
1008
  // src/elements/index.ts
1009
+ var SharedComponents = {
1010
+ Placeholder: Placeholder_default
1011
+ };
1034
1012
  var Elements = {
1035
1013
  Countdown: {
1036
1014
  Component: countdown_default,
1037
- type: "countdown"
1015
+ type: "countdown",
1016
+ defaultCss: css2
1038
1017
  },
1039
1018
  Button: {
1040
1019
  Component: button_default,
@@ -1042,100 +1021,110 @@ var Elements = {
1042
1021
  },
1043
1022
  Container: {
1044
1023
  Component: container_default,
1045
- type: "container"
1024
+ type: "container",
1025
+ defaultCss: css
1046
1026
  },
1047
1027
  Image: {
1048
1028
  Component: image_default,
1049
- type: "image"
1029
+ type: "image",
1030
+ defaultCss: css3
1050
1031
  },
1051
1032
  Instagram: {
1052
1033
  Component: instagram_default,
1053
- type: "instagram"
1034
+ type: "instagram",
1035
+ defaultCss: css8
1054
1036
  },
1055
1037
  Layout: {
1056
1038
  Component: layout_default,
1057
- type: "layout"
1039
+ type: "layout",
1040
+ defaultCss: css4
1058
1041
  },
1059
1042
  Map: {
1060
1043
  Component: map_default,
1061
- type: "map"
1044
+ type: "map",
1045
+ defaultCss: css5
1062
1046
  },
1063
1047
  Text: {
1064
1048
  Component: text_default,
1065
- type: "text"
1049
+ type: "text",
1050
+ defaultCss: css6
1066
1051
  },
1067
1052
  Video: {
1068
1053
  Component: video_default,
1069
- type: "video"
1054
+ type: "video",
1055
+ defaultCss: css7
1070
1056
  },
1071
1057
  Accordion: {
1072
1058
  Component: accordion_default,
1073
- type: "accordion"
1059
+ type: "accordion",
1060
+ defaultCss: css9
1074
1061
  },
1075
1062
  AccordionWrapper: {
1076
1063
  Component: AccordionWrapper_default,
1077
- type: "accordion.wrapper"
1064
+ type: "accordion.wrapper",
1065
+ defaultCss: css10
1078
1066
  },
1079
1067
  AccordionContent: {
1080
1068
  Component: AccordionContent_default,
1081
- type: "accordion.content"
1069
+ type: "accordion.content",
1070
+ defaultCss: css11
1082
1071
  },
1083
1072
  Tab: {
1084
1073
  Component: tab_default,
1085
- type: "tab"
1074
+ type: "tab",
1075
+ defaultCss: css12
1086
1076
  },
1087
1077
  TabContent: {
1088
1078
  Component: TabContent_default,
1089
- type: "tab.content"
1079
+ type: "tab.content",
1080
+ defaultCss: css13
1090
1081
  },
1091
1082
  Slider: {
1092
1083
  Component: slider_default,
1093
- type: "slider"
1084
+ type: "slider",
1085
+ defaultCss: css14
1094
1086
  },
1095
1087
  SliderContent: {
1096
1088
  Component: SliderContent_default,
1097
- type: "slider.content"
1098
- },
1099
- CustomHTML: {
1100
- Component: custom_html_default,
1101
- type: "custom.html"
1089
+ type: "slider.content",
1090
+ defaultCss: css15
1102
1091
  }
1103
1092
  };
1104
1093
 
1105
- // src/context.ts
1106
- var createRootContext = (configs) => {
1107
- let rootContext = new import_core.Weaverse(configs);
1108
- Object.keys(Elements).forEach((key) => {
1109
- rootContext.registerElement(Elements[key]);
1110
- });
1111
- return rootContext;
1112
- };
1113
- var WeaverseContext = (0, import_react20.createContext)({});
1114
- var WeaverseContextProvider = WeaverseContext.Provider;
1115
- var WeaverseContextConsumer = WeaverseContext.Consumer;
1116
-
1117
1094
  // src/renderer.tsx
1118
1095
  var import_core2 = require("@weaverse/core");
1119
- var import_react21 = __toESM(require("react"));
1096
+ var import_react20 = __toESM(require("react"));
1120
1097
 
1121
1098
  // src/utils/index.ts
1122
- function shortCssObject(css) {
1099
+ function shortCssObject(css16) {
1123
1100
  return {
1124
- "@desktop": css["@desktop"],
1125
- "@mobile": css["@mobile"]
1101
+ "@desktop": css16["@desktop"],
1102
+ "@mobile": css16["@mobile"]
1126
1103
  };
1127
1104
  }
1105
+ var permanentClasses = {};
1128
1106
  function generateItemClass(instance, stitchesInstance) {
1129
- var _a, _b, _c, _d;
1130
- let { css, className: cls = "" } = instance.data;
1131
- let defaultCss = ((_c = (_b = (_a = instance.Element) == null ? void 0 : _a.Component) == null ? void 0 : _b.defaultProps) == null ? void 0 : _c.css) || {};
1107
+ var _a, _b;
1108
+ let { css: css16, type, className: cls = "" } = instance.data;
1132
1109
  let className = "";
1133
- if (css || defaultCss) {
1134
- let formattedCss = shortCssObject(css || defaultCss);
1110
+ let permanentClass = "";
1111
+ let perCss = (_a = instance.Element) == null ? void 0 : _a.permanentCss;
1112
+ if (perCss) {
1113
+ if (type in permanentClasses) {
1114
+ permanentClass = permanentClasses[type];
1115
+ } else {
1116
+ let { className: perCls } = stitchesInstance.css(perCss)();
1117
+ Object.assign(permanentClasses, { [type]: perCls });
1118
+ permanentClass = perCls;
1119
+ }
1120
+ }
1121
+ className = permanentClass;
1122
+ if (css16) {
1123
+ let formattedCss = shortCssObject(css16);
1135
1124
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
1136
1125
  let { stitchesClass } = instance;
1137
- let otherClass = (((_d = instance.ref.current) == null ? void 0 : _d.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
1138
- className = `${cls} ${newClass} ${otherClass}`.trim();
1126
+ let otherClass = (((_b = instance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
1127
+ className = `${permanentClass} ${cls} ${newClass} ${otherClass}`.trim();
1139
1128
  instance.stitchesClass = newClass;
1140
1129
  }
1141
1130
  return className;
@@ -1144,10 +1133,10 @@ function generateItemClass(instance, stitchesInstance) {
1144
1133
  // src/renderer.tsx
1145
1134
  var WeaverseRoot = ({ context }) => {
1146
1135
  var _a, _b;
1147
- let [, setData] = (0, import_react21.useState)(context.projectData);
1148
- let rootRef = (0, import_react21.useRef)();
1136
+ let [, setData] = (0, import_react20.useState)(context.projectData);
1137
+ let rootRef = (0, import_react20.useRef)();
1149
1138
  let update = () => setData({});
1150
- (0, import_react21.useEffect)(() => {
1139
+ (0, import_react20.useEffect)(() => {
1151
1140
  context.subscribe(update);
1152
1141
  context.contentRootElement = rootRef.current;
1153
1142
  return () => {
@@ -1156,22 +1145,21 @@ var WeaverseRoot = ({ context }) => {
1156
1145
  }, []);
1157
1146
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
1158
1147
  let themeClass = context.stitchesInstance.theme.className;
1159
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react21.default.createElement("div", {
1148
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react20.default.createElement("div", {
1160
1149
  className: `weaverse-content-root ${themeClass}`,
1161
1150
  ...eventHandlers,
1162
1151
  ref: rootRef
1163
- }, /* @__PURE__ */ import_react21.default.createElement(WeaverseContextProvider, {
1152
+ }, /* @__PURE__ */ import_react20.default.createElement(WeaverseContextProvider, {
1164
1153
  value: context
1165
- }, /* @__PURE__ */ import_react21.default.createElement(ItemInstance, {
1154
+ }, /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
1166
1155
  id: context.projectData.rootId
1167
1156
  }))) : null;
1168
1157
  };
1169
1158
  var ItemComponent = ({ instance }) => {
1170
- let { stitchesInstance, elementInstances } = (0, import_react21.useContext)(WeaverseContext);
1171
- let [data, setData] = (0, import_react21.useState)(instance.data);
1172
- let { id, type, childIds = [], css, className, ...rest } = data;
1173
- (0, import_react21.useEffect)(() => {
1174
- var _a;
1159
+ let { stitchesInstance, elementInstances } = (0, import_react20.useContext)(WeaverseContext);
1160
+ let [data, setData] = (0, import_react20.useState)(instance.data);
1161
+ let { id, type, childIds = [], css: css16, className, ...rest } = data;
1162
+ (0, import_react20.useEffect)(() => {
1175
1163
  let update = (data2) => setData({ ...data2 });
1176
1164
  instance.subscribe(update);
1177
1165
  if (import_core2.isBrowser && !instance.ref.current) {
@@ -1179,10 +1167,7 @@ var ItemComponent = ({ instance }) => {
1179
1167
  current: document.querySelector(`[data-wv-id="${id}"]`)
1180
1168
  });
1181
1169
  }
1182
- (_a = instance.ref.current) == null ? void 0 : _a.removeAttribute("css");
1183
- return () => {
1184
- instance.unsubscribe(update);
1185
- };
1170
+ return () => instance.unsubscribe(update);
1186
1171
  }, []);
1187
1172
  let Element = elementInstances.get(type);
1188
1173
  if (Element == null ? void 0 : Element.Component) {
@@ -1190,13 +1175,13 @@ var ItemComponent = ({ instance }) => {
1190
1175
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1191
1176
  rest.ref = instance.ref;
1192
1177
  }
1193
- return /* @__PURE__ */ import_react21.default.createElement(Component, {
1178
+ return /* @__PURE__ */ import_react20.default.createElement(Component, {
1194
1179
  key: id,
1195
1180
  "data-wv-type": type,
1196
1181
  "data-wv-id": id,
1197
1182
  className: generateItemClass(instance, stitchesInstance),
1198
1183
  ...rest
1199
- }, childIds.map((id2) => /* @__PURE__ */ import_react21.default.createElement(ItemInstance, {
1184
+ }, childIds.map((id2) => /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
1200
1185
  key: id2,
1201
1186
  id: id2
1202
1187
  })));
@@ -1204,15 +1189,15 @@ var ItemComponent = ({ instance }) => {
1204
1189
  return null;
1205
1190
  };
1206
1191
  var ItemInstance = ({ id }) => {
1207
- let context = (0, import_react21.useContext)(WeaverseContext);
1192
+ let context = (0, import_react20.useContext)(WeaverseContext);
1208
1193
  let { itemInstances } = context;
1209
1194
  let instance = itemInstances.get(id);
1210
1195
  if (!instance) {
1211
- return /* @__PURE__ */ import_react21.default.createElement("div", {
1196
+ return /* @__PURE__ */ import_react20.default.createElement("div", {
1212
1197
  style: { display: "none" }
1213
1198
  }, "Item instance ", id, " not found");
1214
1199
  }
1215
- return /* @__PURE__ */ import_react21.default.createElement(ItemComponent, {
1200
+ return /* @__PURE__ */ import_react20.default.createElement(ItemComponent, {
1216
1201
  instance
1217
1202
  });
1218
1203
  };
@@ -1221,6 +1206,8 @@ var ItemInstance = ({ id }) => {
1221
1206
  __reExport(src_exports, require("@weaverse/core"), module.exports);
1222
1207
  // Annotate the CommonJS export names for ESM import in node:
1223
1208
  0 && (module.exports = {
1209
+ Elements,
1210
+ SharedComponents,
1224
1211
  WeaverseContext,
1225
1212
  WeaverseContextConsumer,
1226
1213
  WeaverseContextProvider,