@weaverse/react 0.6.14 → 0.6.17

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
@@ -64,230 +64,182 @@ module.exports = __toCommonJS(src_exports);
64
64
  var import_core = require("@weaverse/core");
65
65
  var import_react9 = require("react");
66
66
 
67
- // src/elements/base.tsx
68
- var import_react = __toESM(require("react"));
69
- var BaseElement = import_react.default.forwardRef((_a, ref) => {
70
- var _b = _a, { tag, children } = _b, props = __objRest(_b, ["tag", "children"]);
71
- return import_react.default.createElement(tag, __spreadValues({
72
- ref
73
- }, props), children);
74
- });
75
- BaseElement.defaultProps = {
76
- tag: "div",
77
- style: {}
78
- };
79
- var schema = {
80
- type: "base",
81
- parentType: "container",
82
- title: "Base",
83
- settings: []
84
- };
85
- var base_default = BaseElement;
86
-
87
67
  // src/elements/button.tsx
88
- var React2 = __toESM(require("react"));
89
- var Button = React2.forwardRef((props, ref) => {
90
- const _a = props, { buttonType, css, openInNewTab = false, target = "" } = _a, rest = __objRest(_a, ["buttonType", "css", "openInNewTab", "target"]);
68
+ var React = __toESM(require("react"));
69
+ var Button = React.forwardRef((props, ref) => {
70
+ const _a = props, { openInNewTab, target, value } = _a, rest = __objRest(_a, ["openInNewTab", "target", "value"]);
91
71
  if (target) {
92
- return /* @__PURE__ */ React2.createElement("a", {
72
+ return /* @__PURE__ */ React.createElement("a", __spreadProps(__spreadValues({
93
73
  href: target,
94
- target: openInNewTab ? "_blank" : "_self"
95
- }, /* @__PURE__ */ React2.createElement("button", __spreadValues({
74
+ target: openInNewTab ? "_blank" : "_self",
75
+ rel: "noreferrer"
76
+ }, rest), {
96
77
  ref
97
- }, rest), props.value));
78
+ }), value);
98
79
  }
99
- return /* @__PURE__ */ React2.createElement("button", __spreadValues({
80
+ return /* @__PURE__ */ React.createElement("button", __spreadValues({
100
81
  ref
101
- }, rest), props.value);
82
+ }, rest), value);
102
83
  });
103
84
  Button.defaultProps = {
104
- value: "Shop now"
105
- };
106
- var schema2 = {
107
- title: "Button",
85
+ value: "Shop now",
86
+ openInNewTab: false,
87
+ target: "",
108
88
  type: "button",
109
- parentType: "container",
110
- styles: [
111
- {
112
- type: "dimensions"
113
- },
114
- {
115
- type: "alignment"
116
- },
117
- {
118
- type: "border"
119
- },
120
- {
121
- type: "background"
122
- },
123
- {
124
- type: "spacing"
89
+ css: {
90
+ "@desktop": {
91
+ borderRadius: "72px",
92
+ border: "none",
93
+ backgroundColor: "#0F71FF",
94
+ color: "#fff",
95
+ fontSize: "13px",
96
+ padding: "10px 20px"
125
97
  }
126
- ],
127
- settings: [],
128
- toolbar: [
129
- {
130
- type: "delete"
131
- },
132
- {
133
- type: "duplicate"
134
- },
135
- {
136
- type: "link"
137
- },
138
- {
139
- type: "color"
140
- }
141
- ],
142
- data: {
143
- css: {
144
- "@desktop": {
145
- borderRadius: "72px",
146
- border: "none",
147
- backgroundColor: "#0F71FF",
148
- color: "#fff",
149
- fontSize: "13px",
150
- padding: "10px 20px"
151
- }
152
- },
153
- target: "",
154
- openInNewTab: false
155
- },
156
- flags: {
157
- draggable: true
158
98
  }
159
99
  };
160
100
  var button_default = Button;
161
101
 
162
102
  // src/elements/container.tsx
163
- var import_react2 = __toESM(require("react"));
164
- var Container = (0, import_react2.forwardRef)((props, ref) => {
165
- return /* @__PURE__ */ import_react2.default.createElement("div", __spreadValues({
103
+ var import_react = __toESM(require("react"));
104
+ var Container = (0, import_react.forwardRef)((props, ref) => {
105
+ return /* @__PURE__ */ import_react.default.createElement("div", __spreadValues({
166
106
  ref
167
107
  }, props));
168
108
  });
169
- var schema3 = {
170
- title: "Container",
171
- type: "container",
172
- parentType: "layout",
173
- data: {
174
- css: {
175
- "@desktop": {
176
- display: "flex",
177
- backgroundColor: "rgba(248,203,203,0.38)",
178
- flexDirection: "column",
179
- alignItems: "flex-start",
180
- justifyContent: "flex-start",
181
- textAlign: "left",
182
- gridArea: "1 / 1 / 3 / 6",
183
- width: "100%",
184
- height: "fit-content"
185
- }
109
+ Container.defaultProps = {
110
+ css: {
111
+ "@desktop": {
112
+ alignItems: "flex-start",
113
+ backgroundColor: "rgba(248,203,203,0.38)",
114
+ display: "flex",
115
+ flexDirection: "column",
116
+ gridArea: "1 / 1 / 3 / 6",
117
+ height: "fit-content",
118
+ justifyContent: "flex-start",
119
+ overflow: "hidden",
120
+ textAlign: "left",
121
+ width: "100%"
186
122
  }
187
- },
188
- settings: [],
189
- flags: {
190
- draggable: true,
191
- resizable: true,
192
- sortable: true
193
123
  }
194
124
  };
195
125
  var container_default = Container;
196
126
 
197
- // src/elements/layout.tsx
127
+ // src/elements/countdown/index.tsx
198
128
  var import_react3 = __toESM(require("react"));
199
- var Layout = (0, import_react3.forwardRef)((props, ref) => {
200
- const _a = props, { css, children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["css", "children", "rows", "gap", "rowSize", "columns", "gridSize"]);
201
- return /* @__PURE__ */ import_react3.default.createElement("section", __spreadValues({
202
- ref,
203
- style: {
204
- "--grid-size": gridSize + "px",
205
- "--rows": rows,
206
- "--columns": columns,
207
- "--gap": gap + "px",
208
- "--row-size": rowSize + "px",
209
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
210
- }
211
- }, rest), /* @__PURE__ */ import_react3.default.createElement("div", {
212
- "data-layout-content": true
213
- }, children));
214
- });
215
- var schema4 = {
216
- title: "Layout",
217
- type: "layout",
218
- parentType: "root",
219
- data: {
220
- css: {
221
- "@desktop": {
222
- paddingTop: "16px",
223
- paddingBottom: "16px",
224
- paddingLeft: "var(--gap)",
225
- paddingRight: "var(--gap)",
226
- "> [data-layout-content]": {
227
- margin: "0 auto",
228
- display: "grid !important",
229
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
230
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
231
- gap: "var(--gap)",
232
- maxWidth: "var(--grid-size)"
233
- }
234
- },
235
- "@mobile": {
236
- padding: "0 16px",
237
- "> [data-layout-content]": {
238
- display: "flex !important",
239
- flexDirection: "column"
240
- }
241
- }
242
- },
243
- gridSize: 1224,
244
- rows: 12,
245
- columns: 12,
246
- gap: 16,
247
- rowSize: 48
248
- },
249
- settings: []
250
- };
251
- var layout_default = Layout;
252
129
 
253
- // src/elements/text.tsx
254
- var React5 = __toESM(require("react"));
255
- var Text = React5.forwardRef((props, ref) => {
256
- let _a = props, { children, value } = _a, rest = __objRest(_a, ["children", "value"]);
257
- return /* @__PURE__ */ React5.createElement("div", __spreadProps(__spreadValues({
130
+ // src/elements/countdown/timer-block.tsx
131
+ var import_react2 = __toESM(require("react"));
132
+ function TimerBlock({ value, label }) {
133
+ return /* @__PURE__ */ import_react2.default.createElement("div", null, /* @__PURE__ */ import_react2.default.createElement("div", {
134
+ className: "wv-countdown-number"
135
+ }, value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react2.default.createElement("div", {
136
+ className: "wv-countdown-label"
137
+ }, label));
138
+ }
139
+
140
+ // src/elements/countdown/utils.ts
141
+ var times = ["days", "hours", "minutes", "seconds"];
142
+ function getTime(_seconds) {
143
+ const ONE_MINUTE = 60 * 1e3;
144
+ const ONE_HOUR = 60 * ONE_MINUTE;
145
+ const ONE_DAY = 24 * ONE_HOUR;
146
+ const days = Math.floor(_seconds / ONE_DAY);
147
+ const hours = Math.floor((_seconds - days * ONE_DAY) / ONE_HOUR);
148
+ const minutes = Math.floor((_seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE);
149
+ const seconds = Math.floor((_seconds - days * ONE_DAY - hours * ONE_HOUR - minutes * ONE_MINUTE) / 1e3);
150
+ return { days, hours, minutes, seconds };
151
+ }
152
+
153
+ // src/elements/countdown/index.tsx
154
+ var Countdown = (0, import_react3.forwardRef)((props, ref) => {
155
+ const { isDesignMode } = (0, import_react3.useContext)(WeaverseContext);
156
+ let _a = props, {
157
+ timerType,
158
+ startTime,
159
+ endTime,
160
+ periods,
161
+ redirectUrl,
162
+ openInNewTab,
163
+ showColon,
164
+ showLabel
165
+ } = _a, rest = __objRest(_a, [
166
+ "timerType",
167
+ "startTime",
168
+ "endTime",
169
+ "periods",
170
+ "redirectUrl",
171
+ "openInNewTab",
172
+ "showColon",
173
+ "showLabel"
174
+ ]);
175
+ const [remaining, setRemaining] = import_react3.default.useState(0);
176
+ if (typeof endTime !== "number") {
177
+ endTime = Number.parseInt(endTime);
178
+ }
179
+ (0, import_react3.useEffect)(() => {
180
+ const flag = setInterval(() => {
181
+ const remainingTime = Math.max((timerType === "specific" ? new Date(endTime).getTime() : new Date(startTime).getTime() + periods * 60 * 1e3) - Date.now(), 0);
182
+ if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
183
+ window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
184
+ }
185
+ setRemaining(remainingTime);
186
+ }, 1e3);
187
+ return () => {
188
+ clearInterval(flag);
189
+ };
190
+ }, [startTime, endTime, periods, timerType]);
191
+ const timer = getTime(remaining);
192
+ return /* @__PURE__ */ import_react3.default.createElement("div", __spreadValues({
258
193
  ref
259
- }, rest), {
260
- dangerouslySetInnerHTML: { __html: value }
194
+ }, rest), times.map((time) => {
195
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, {
196
+ key: time
197
+ }, /* @__PURE__ */ import_react3.default.createElement(TimerBlock, {
198
+ label: showLabel ? time : "",
199
+ value: timer[time]
200
+ }), time !== "seconds" && /* @__PURE__ */ import_react3.default.createElement("span", {
201
+ className: `wv-countdown-number ${showColon ? "" : "hidden"}`
202
+ }, ":"));
261
203
  }));
262
204
  });
263
- Text.defaultProps = {
264
- value: "sample text"
265
- };
266
- var schema5 = {
267
- type: "text",
268
- parentType: "container",
269
- title: "Text",
270
- settings: [],
271
- data: {
272
- css: {
273
- "@desktop": {
274
- width: "100%",
275
- height: "fit-content",
276
- padding: 0,
277
- margin: 0,
278
- outline: "none",
279
- wordBreak: "break-word",
280
- overflowWrap: "break-word",
281
- whiteSpace: "break-spaces"
205
+ Countdown.defaultProps = {
206
+ timerType: "specific",
207
+ startTime: Date.now(),
208
+ endTime: 1661140528e3,
209
+ periods: 90,
210
+ redirectUrl: "https://myshop.com",
211
+ openInNewTab: false,
212
+ showLabel: true,
213
+ showColon: true,
214
+ css: {
215
+ "@desktop": {
216
+ fontFamily: "Inter",
217
+ fontSize: 36,
218
+ fontWeight: 500,
219
+ display: "grid",
220
+ gridAutoFlow: "column",
221
+ gap: 10,
222
+ "& > div": {
223
+ width: 48,
224
+ textAlign: "center"
225
+ },
226
+ "& .wv-countdown-label": {
227
+ fontSize: 10
228
+ },
229
+ "& > span": {
230
+ lineHeight: "100%"
231
+ },
232
+ "& .hidden": {
233
+ visibility: "hidden"
282
234
  }
283
235
  }
284
236
  }
285
237
  };
286
- var text_default = Text;
238
+ var countdown_default = Countdown;
287
239
 
288
240
  // src/elements/image.tsx
289
241
  var import_react4 = __toESM(require("react"));
290
- var Image = import_react4.default.forwardRef(function Image2(props, ref) {
242
+ var Image = import_react4.default.forwardRef((props, ref) => {
291
243
  let _a = props, { src, alt, children } = _a, rest = __objRest(_a, ["src", "alt", "children"]);
292
244
  return /* @__PURE__ */ import_react4.default.createElement("img", __spreadProps(__spreadValues({
293
245
  ref
@@ -298,101 +250,77 @@ var Image = import_react4.default.forwardRef(function Image2(props, ref) {
298
250
  });
299
251
  Image.defaultProps = {
300
252
  src: "https://ucarecdn.com/1cdc9d39-ca62-492e-8ec7-f1a86b241a90/",
301
- alt: "weaverse image element"
302
- };
303
- var schema6 = {
304
- settings: [],
305
- type: "image",
306
- parentType: "layout",
307
- title: "Image",
308
- data: {
309
- css: {
310
- "@desktop": {
311
- width: "100%",
312
- height: "100%",
313
- objectFit: "cover"
314
- },
315
- "@mobile": {
316
- display: "block"
317
- }
253
+ alt: "weaverse image element",
254
+ css: {
255
+ "@desktop": {
256
+ width: "100%",
257
+ height: "100%",
258
+ objectFit: "cover"
259
+ },
260
+ "@mobile": {
261
+ display: "block"
318
262
  }
319
- },
320
- flags: {
321
- resizable: true,
322
- draggable: true,
323
- sortable: true
324
263
  }
325
264
  };
326
265
  var image_default = Image;
327
266
 
328
- // src/elements/video.tsx
267
+ // src/elements/layout.tsx
329
268
  var import_react5 = __toESM(require("react"));
330
- var Video = (0, import_react5.forwardRef)((props, ref) => {
331
- const { isDesignMode } = (0, import_react5.useContext)(WeaverseContext);
332
- let _a = props, { src, type, controls, autoPlay, loop, muted } = _a, rest = __objRest(_a, ["src", "type", "controls", "autoPlay", "loop", "muted"]);
333
- if (isDesignMode) {
334
- controls = false;
335
- autoPlay = false;
336
- }
337
- console.info("9779 props", props, isDesignMode);
338
- return /* @__PURE__ */ import_react5.default.createElement("video", __spreadValues({
269
+ var Layout = (0, import_react5.forwardRef)((props, ref) => {
270
+ let _a = props, { children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["children", "rows", "gap", "rowSize", "columns", "gridSize"]);
271
+ return /* @__PURE__ */ import_react5.default.createElement("section", __spreadValues({
339
272
  ref,
340
- controls,
341
- autoPlay,
342
- loop,
343
- muted: true
344
- }, rest), /* @__PURE__ */ import_react5.default.createElement("source", {
345
- src,
346
- type: type || "video/mp4",
347
- controlsList: "nodownload",
348
- disablePictureInPicture: true
349
- }));
273
+ style: {
274
+ "--grid-size": gridSize + "px",
275
+ "--rows": rows,
276
+ "--columns": columns,
277
+ "--gap": gap + "px",
278
+ "--row-size": rowSize + "px",
279
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
280
+ }
281
+ }, rest), /* @__PURE__ */ import_react5.default.createElement("div", {
282
+ "data-layout-content": true
283
+ }, children));
350
284
  });
351
- Video.defaultProps = {
352
- src: "https://ucarecdn.com/7cae0dab-8966-4484-9998-602728c360ca/IMG_0048.MOV",
353
- poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
354
- loop: false,
355
- type: "video/mp4",
356
- controls: false,
357
- autoPlay: true,
358
- muted: true,
359
- width: "100%",
360
- height: "auto"
361
- };
362
- var schema7 = {
363
- title: "Video",
364
- type: "video",
365
- parentType: "layout",
366
- toolbar: [
367
- {
368
- type: "delete"
369
- },
370
- {
371
- type: "duplicate"
372
- },
373
- {
374
- type: "link"
285
+ Layout.defaultProps = {
286
+ gridSize: 1224,
287
+ rows: 12,
288
+ columns: 12,
289
+ gap: 16,
290
+ rowSize: 48,
291
+ css: {
292
+ "@desktop": {
293
+ paddingTop: "16px",
294
+ paddingBottom: "16px",
295
+ paddingLeft: "var(--gap)",
296
+ paddingRight: "var(--gap)",
297
+ "> [data-layout-content]": {
298
+ margin: "0 auto",
299
+ display: "grid !important",
300
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
301
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
302
+ gap: "var(--gap)",
303
+ maxWidth: "var(--grid-size)"
304
+ }
375
305
  },
376
- {
377
- type: "color"
306
+ "@mobile": {
307
+ padding: "0 16px",
308
+ "> [data-layout-content]": {
309
+ display: "flex !important",
310
+ flexDirection: "column"
311
+ }
378
312
  }
379
- ],
380
- flags: {
381
- resizable: true,
382
- draggable: true,
383
- sortable: true
384
313
  }
385
314
  };
386
- var video_default = Video;
315
+ var layout_default = Layout;
387
316
 
388
317
  // src/elements/map.tsx
389
318
  var import_react6 = __toESM(require("react"));
390
319
  var Map = (0, import_react6.forwardRef)((props, ref) => {
391
- const { place, zoom } = props;
392
- console.info("9779 props", props);
320
+ const _a = props, { place, zoom } = _a, rest = __objRest(_a, ["place", "zoom"]);
393
321
  return /* @__PURE__ */ import_react6.default.createElement("div", __spreadValues({
394
322
  ref
395
- }, props), /* @__PURE__ */ import_react6.default.createElement("iframe", {
323
+ }, rest), /* @__PURE__ */ import_react6.default.createElement("iframe", {
396
324
  loading: "lazy",
397
325
  scrolling: "no",
398
326
  width: "100%",
@@ -406,203 +334,172 @@ var Map = (0, import_react6.forwardRef)((props, ref) => {
406
334
  });
407
335
  Map.defaultProps = {
408
336
  place: "Hanoi",
409
- zoom: 14
410
- };
411
- var schema8 = {
412
- title: "Map",
413
- type: "map",
414
- parentType: "layout",
415
- toolbar: [
416
- {
417
- type: "delete"
418
- },
419
- {
420
- type: "duplicate"
421
- },
422
- {
423
- type: "link"
424
- },
425
- {
426
- type: "color"
427
- }
428
- ],
429
- data: {
430
- css: {
431
- "@desktop": {
432
- gridArea: "1 / 1 / 11 / 13"
433
- }
337
+ zoom: 14,
338
+ css: {
339
+ "@desktop": {
340
+ gridArea: "1 / 1 / 11 / 13"
434
341
  }
435
- },
436
- flags: {
437
- resizable: true,
438
- draggable: true,
439
- sortable: true
440
342
  }
441
343
  };
442
344
  var map_default = Map;
443
345
 
444
- // src/elements/countdown/index.tsx
445
- var import_react8 = __toESM(require("react"));
446
-
447
- // src/elements/countdown/utils.ts
448
- function getTime(seconds) {
449
- const ONE_MINUTE = 60 * 1e3;
450
- const ONE_HOUR = 60 * ONE_MINUTE;
451
- const ONE_DAY = 24 * ONE_HOUR;
452
- const days = Math.floor(seconds / ONE_DAY);
453
- const hours = Math.floor((seconds - days * ONE_DAY) / ONE_HOUR);
454
- const mins = Math.floor((seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE);
455
- const secs = Math.floor((seconds - days * ONE_DAY - hours * ONE_HOUR - mins * ONE_MINUTE) / 1e3);
456
- return { days, hours, mins, secs };
457
- }
346
+ // src/elements/text.tsx
347
+ var React8 = __toESM(require("react"));
348
+ var Text = React8.forwardRef((props, ref) => {
349
+ let _a = props, { children, value } = _a, rest = __objRest(_a, ["children", "value"]);
350
+ return /* @__PURE__ */ React8.createElement("div", __spreadProps(__spreadValues({
351
+ ref
352
+ }, rest), {
353
+ dangerouslySetInnerHTML: { __html: value }
354
+ }));
355
+ });
356
+ Text.defaultProps = {
357
+ value: "The quick brown fox jumps over the lazy dog",
358
+ css: {
359
+ "@desktop": {
360
+ width: "100%",
361
+ height: "fit-content",
362
+ padding: 0,
363
+ margin: 0,
364
+ outline: "none",
365
+ wordBreak: "break-word",
366
+ overflowWrap: "break-word",
367
+ whiteSpace: "break-spaces"
368
+ }
369
+ }
370
+ };
371
+ var text_default = Text;
458
372
 
459
- // src/elements/countdown/timer-block.tsx
373
+ // src/elements/video.tsx
460
374
  var import_react7 = __toESM(require("react"));
461
- var TimerBlock = (props) => {
462
- return /* @__PURE__ */ import_react7.default.createElement("div", null, /* @__PURE__ */ import_react7.default.createElement("div", null, props.value.toString().padStart(2, "0")), props.label && /* @__PURE__ */ import_react7.default.createElement("div", {
463
- className: "wv-countdown-label"
464
- }, props.label));
375
+ var Video = (0, import_react7.forwardRef)((props, ref) => {
376
+ const { isDesignMode } = (0, import_react7.useContext)(WeaverseContext);
377
+ 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("video", __spreadValues({
379
+ ref,
380
+ controls: isDesignMode ? false : controls,
381
+ autoPlay: isDesignMode ? false : autoPlay,
382
+ loop,
383
+ muted: true,
384
+ controlsList: "nodownload",
385
+ disablePictureInPicture: true
386
+ }, rest), /* @__PURE__ */ import_react7.default.createElement("source", {
387
+ src,
388
+ type: type || "video/mp4"
389
+ }));
390
+ });
391
+ Video.defaultProps = {
392
+ src: "https://ucarecdn.com/7cae0dab-8966-4484-9998-602728c360ca/IMG_0048.MOV",
393
+ poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
394
+ loop: false,
395
+ type: "video/mp4",
396
+ controls: false,
397
+ autoPlay: true,
398
+ muted: true,
399
+ css: {
400
+ "@desktop": {
401
+ height: "fit-content",
402
+ margin: 0,
403
+ outline: "none",
404
+ overflowWrap: "break-word",
405
+ padding: 0,
406
+ whitespace: "break-spaces",
407
+ width: "100%",
408
+ wordBreak: "break-word"
409
+ }
410
+ }
465
411
  };
466
- var timer_block_default = TimerBlock;
412
+ var video_default = Video;
467
413
 
468
- // src/elements/countdown/index.tsx
469
- var Countdown = (0, import_react8.forwardRef)((props, ref) => {
470
- const { isDesignMode } = (0, import_react8.useContext)(WeaverseContext);
471
- let { type, startTime, endTime, periods, redirectUrl, openInNewTab, showColon, showLabel } = props;
472
- const [remaining, setRemaining] = import_react8.default.useState(0);
473
- if (typeof endTime !== "number") {
474
- endTime = Number.parseInt(endTime);
475
- }
414
+ // src/elements/instagram.tsx
415
+ var import_react8 = __toESM(require("react"));
416
+ var Instagram = (0, import_react8.forwardRef)((props, ref) => {
417
+ const { stitchesInstance } = (0, import_react8.useContext)(WeaverseContext);
418
+ const _a = props, { token, numberOfImages, imagesPerRow, className } = _a, rest = __objRest(_a, ["token", "numberOfImages", "imagesPerRow", "className"]);
419
+ const [media, setMedia] = (0, import_react8.useState)([]);
476
420
  (0, import_react8.useEffect)(() => {
477
- const flag = setInterval(() => {
478
- const remainingTime = Math.max((type === "specific" ? new Date(endTime).getTime() : new Date(startTime) + periods * 60 * 1e3) - Date.now(), 0);
479
- if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
480
- window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
481
- }
482
- setRemaining(remainingTime);
483
- }, 1e3);
484
- return () => {
485
- clearInterval(flag);
486
- };
487
- }, [startTime, endTime, periods, type]);
488
- const timer = getTime(remaining);
421
+ const url = `https://graph.instagram.com/me/media?fields=id,media_type,caption,media_url&access_token=${token}`;
422
+ fetch(url).then((res) => res.json()).then((res) => {
423
+ setMedia(res.data);
424
+ });
425
+ }, [token]);
426
+ const css = {
427
+ gridTemplateColumns: `repeat(${imagesPerRow[0] || 1}, 1fr)`
428
+ };
429
+ const { className: instagramClass = "" } = stitchesInstance.css(css)();
489
430
  return /* @__PURE__ */ import_react8.default.createElement("div", __spreadValues({
431
+ className: `${className} ${instagramClass}`,
490
432
  ref
491
- }, props), /* @__PURE__ */ import_react8.default.createElement(timer_block_default, {
492
- value: timer.days,
493
- label: showLabel && "days"
494
- }), /* @__PURE__ */ import_react8.default.createElement("span", {
495
- className: !showColon && "hidden"
496
- }, ":"), /* @__PURE__ */ import_react8.default.createElement(timer_block_default, {
497
- value: timer.hours,
498
- label: showLabel && "hours"
499
- }), /* @__PURE__ */ import_react8.default.createElement("span", {
500
- className: !showColon && "hidden"
501
- }, ":"), /* @__PURE__ */ import_react8.default.createElement(timer_block_default, {
502
- value: timer.mins,
503
- label: showLabel && "minutes"
504
- }), /* @__PURE__ */ import_react8.default.createElement("span", {
505
- className: !showColon && "hidden"
506
- }, ":"), /* @__PURE__ */ import_react8.default.createElement(timer_block_default, {
507
- value: timer.secs,
508
- label: showLabel && "seconds"
433
+ }, rest), !token ? "Token is empty" : media.map((item, key) => {
434
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
435
+ key,
436
+ className: "wv-instagram-item"
437
+ }, /* @__PURE__ */ import_react8.default.createElement("img", {
438
+ width: "100%",
439
+ height: "100%",
440
+ alt: item.caption,
441
+ src: item.media_url
442
+ }));
509
443
  }));
510
444
  });
511
- Countdown.defaultProps = {
512
- type: "specific",
513
- startTime: Date.now(),
514
- endTime: 1661140528e3,
515
- redirectUrl: "",
516
- openInNewTab: false,
517
- showLabel: true,
518
- showColon: true
519
- };
520
- var schema9 = {
521
- title: "Countdown",
522
- type: "countdown",
523
- parentType: "container",
524
- toolbar: [
525
- {
526
- type: "delete"
527
- },
528
- {
529
- type: "duplicate"
530
- },
531
- {
532
- type: "link"
533
- },
534
- {
535
- type: "color"
536
- }
537
- ],
538
- data: {
539
- css: {
540
- "@desktop": {
541
- fontFamily: "Inter",
542
- fontSize: 36,
543
- fontWeight: 500,
544
- display: "grid",
545
- gridAutoFlow: "column",
546
- gap: 10,
547
- "& > div": {
548
- width: 48,
549
- textAlign: "center"
550
- },
551
- "& .wv-countdown-label": {
552
- fontSize: 10
553
- },
554
- "& > span": {
555
- lineHeight: "100%"
556
- },
557
- "& .hidden": {
558
- visibility: "hidden"
445
+ Instagram.defaultProps = {
446
+ token: "",
447
+ numberOfImages: [12],
448
+ imagesPerRow: [4],
449
+ css: {
450
+ "@desktop": {
451
+ display: "grid",
452
+ gridTemplateColumns: "repeat(4, 1fr)",
453
+ "& .wv-instagram-item": {
454
+ width: "100%",
455
+ height: "100%",
456
+ backgroundColor: "red",
457
+ "& img": {
458
+ objectFit: "contain"
559
459
  }
560
460
  }
561
461
  }
562
- },
563
- flags: {
564
- draggable: true
565
462
  }
566
463
  };
567
- var countdown_default = Countdown;
464
+ var instagram_default = Instagram;
568
465
 
569
466
  // src/elements/index.ts
570
467
  var elements = {
468
+ Countdown: {
469
+ Component: countdown_default,
470
+ type: "countdown"
471
+ },
571
472
  Button: {
572
473
  Component: button_default,
573
- schema: schema2
574
- },
575
- BaseElement: {
576
- Component: base_default,
577
- schema
578
- },
579
- Text: {
580
- Component: text_default,
581
- schema: schema5
582
- },
583
- Layout: {
584
- Component: layout_default,
585
- schema: schema4
474
+ type: "button"
586
475
  },
587
476
  Container: {
588
477
  Component: container_default,
589
- schema: schema3
478
+ type: "container"
590
479
  },
591
480
  Image: {
592
481
  Component: image_default,
593
- schema: schema6
482
+ type: "image"
594
483
  },
595
- Video: {
596
- Component: video_default,
597
- schema: schema7
484
+ Instagram: {
485
+ Component: instagram_default,
486
+ type: "instagram"
487
+ },
488
+ Layout: {
489
+ Component: layout_default,
490
+ type: "layout"
598
491
  },
599
492
  Map: {
600
493
  Component: map_default,
601
- schema: schema8
494
+ type: "map"
602
495
  },
603
- Countdown: {
604
- Component: countdown_default,
605
- schema: schema9
496
+ Text: {
497
+ Component: text_default,
498
+ type: "text"
499
+ },
500
+ Video: {
501
+ Component: video_default,
502
+ type: "video"
606
503
  }
607
504
  };
608
505
  var elements_default = elements;
@@ -626,19 +523,20 @@ var import_react10 = __toESM(require("react"));
626
523
  // src/utils/index.ts
627
524
  var shortCssObject = (css) => {
628
525
  return {
629
- "@desktop": css[`@desktop`],
630
- "@mobile": css[`@mobile`]
526
+ "@desktop": css["@desktop"],
527
+ "@mobile": css["@mobile"]
631
528
  };
632
529
  };
633
530
  function generateItemClass(instance, stitchesInstance) {
634
- var _a;
531
+ var _a, _b, _c, _d;
635
532
  let { css, className: cls = "" } = instance.data;
533
+ let defaultCss = ((_c = (_b = (_a = instance.Element) == null ? void 0 : _a.Component) == null ? void 0 : _b.defaultProps) == null ? void 0 : _c.css) || {};
636
534
  let className = "";
637
- if (css) {
638
- let formattedCss = shortCssObject(css);
535
+ if (css || defaultCss) {
536
+ let formattedCss = shortCssObject(css || defaultCss);
639
537
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
640
538
  let { stitchesClass } = instance;
641
- let otherClass = (((_a = instance.ref.current) == null ? void 0 : _a.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
539
+ let otherClass = (((_d = instance.ref.current) == null ? void 0 : _d.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
642
540
  className = `${cls} ${newClass} ${otherClass}`.trim();
643
541
  instance.stitchesClass = newClass;
644
542
  }
@@ -676,8 +574,9 @@ var WeaverseRoot = ({ context }) => {
676
574
  var ItemComponent = ({ instance }) => {
677
575
  let { stitchesInstance, elementInstances } = (0, import_react10.useContext)(WeaverseContext);
678
576
  let [data, setData] = (0, import_react10.useState)(instance.data);
679
- let _a = data, { id, type, childIds = [], css, className: cls = "" } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
577
+ let _a = data, { id, type, childIds = [], css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
680
578
  (0, import_react10.useEffect)(() => {
579
+ var _a2;
681
580
  let update = (data2) => setData(__spreadValues({}, data2));
682
581
  instance.subscribe(update);
683
582
  if (import_core2.isBrowser && !instance.ref.current) {
@@ -685,11 +584,12 @@ var ItemComponent = ({ instance }) => {
685
584
  current: document.querySelector(`[data-wv-id="${id}"]`)
686
585
  });
687
586
  }
587
+ (_a2 = instance.ref.current) == null ? void 0 : _a2.removeAttribute("css");
688
588
  return () => {
689
589
  instance.unsubscribe(update);
690
590
  };
691
591
  }, []);
692
- let Element = elementInstances.get(type || "base");
592
+ let Element = elementInstances.get(type);
693
593
  if (Element == null ? void 0 : Element.Component) {
694
594
  let Component = Element.Component;
695
595
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {