@weaverse/react 0.7.53 → 0.7.54

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 CHANGED
@@ -4,6 +4,7 @@ import * as React$1 from 'react';
4
4
  import React__default, { HTMLAttributes, ReactElement, ReactNode, CSSProperties } from 'react';
5
5
  import * as _radix_ui_react_dialog from '@radix-ui/react-dialog';
6
6
  import { DialogContentProps, DialogProps, DialogTitleProps, DialogCloseProps } from '@radix-ui/react-dialog';
7
+ import { KeenSliderInstance } from 'keen-slider';
7
8
 
8
9
  declare let createRootContext: (configs: WeaverseType) => Weaverse;
9
10
  declare let WeaverseContext: React$1.Context<Weaverse>;
@@ -54,6 +55,15 @@ interface WeaverseIconProps extends HTMLAttributes<SVGElement> {
54
55
  interface TooltipProps {
55
56
  children: React.ReactNode;
56
57
  }
58
+ interface SliderProps {
59
+ children: React.ReactNode;
60
+ className?: string;
61
+ }
62
+ interface SliderArrowsProps {
63
+ currentSlide: number;
64
+ instanceRef: React.MutableRefObject<KeenSliderInstance | null>;
65
+ className?: string;
66
+ }
57
67
 
58
68
  interface WeaverseElementProps extends Partial<ReactElement> {
59
69
  css?: ElementCSS;
@@ -201,11 +211,14 @@ declare function Icon({ name, className, ...props }: WeaverseIconProps): JSX.Ele
201
211
 
202
212
  declare function Tooltip({ children }: TooltipProps): JSX.Element;
203
213
 
214
+ declare function Slider({ children, className }: SliderProps): JSX.Element;
215
+
204
216
  declare let Components: {
205
217
  Placeholder: React$1.ForwardRefExoticComponent<PlaceholderProps & React$1.RefAttributes<HTMLDivElement>>;
206
218
  Spinner: typeof Spinner;
207
219
  ModalComponents: typeof ModalComponents;
208
220
  Icon: typeof Icon;
221
+ Slider: typeof Slider;
209
222
  Tooltip: typeof Tooltip;
210
223
  };
211
224
 
@@ -213,4 +226,4 @@ declare const Elements: Record<string, WeaverseElement>;
213
226
 
214
227
  declare let WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element | null;
215
228
 
216
- export { ButtonElementProps, Components, ContainerElementProps, CountdownElementProps, CountdownTimeKey, CountdownTimerType, Elements, GridContentElementProps, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutBackgroundProps, LayoutElementProps, MapElementProps, ModalContentProps, PlaceholderProps, TextElementProps, TimerBlockProps, TooltipProps, VideoCommonProps, VideoElementProps, VimeoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseIcon, WeaverseIconProps, WeaverseRoot, WeaverseRootPropsType, YoutubeElementProps, createRootContext };
229
+ export { ButtonElementProps, Components, ContainerElementProps, CountdownElementProps, CountdownTimeKey, CountdownTimerType, Elements, GridContentElementProps, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutBackgroundProps, LayoutElementProps, MapElementProps, ModalContentProps, PlaceholderProps, SliderArrowsProps, SliderProps, TextElementProps, TimerBlockProps, TooltipProps, VideoCommonProps, VideoElementProps, VimeoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseIcon, WeaverseIconProps, WeaverseRoot, WeaverseRootPropsType, YoutubeElementProps, createRootContext };
package/dist/index.js CHANGED
@@ -40,7 +40,7 @@ __reExport(src_exports, require("@weaverse/core"), module.exports);
40
40
 
41
41
  // src/context.ts
42
42
  var import_core = require("@weaverse/core");
43
- var import_react23 = require("react");
43
+ var import_react26 = require("react");
44
44
 
45
45
  // src/elements/Button.tsx
46
46
  var React = __toESM(require("react"));
@@ -122,15 +122,15 @@ var INSTAGRAM_API = "https://graph.instagram.com";
122
122
 
123
123
  // src/utils/css.ts
124
124
  var import_clsx = __toESM(require("clsx"));
125
- function formatCSS(css9) {
125
+ function formatCSS(css10) {
126
126
  return {
127
- "@desktop": css9["@desktop"],
128
- "@mobile": css9["@mobile"]
127
+ "@desktop": css10["@desktop"],
128
+ "@mobile": css10["@mobile"]
129
129
  };
130
130
  }
131
131
  var permanentClasses = {};
132
132
  function generateItemClassName(instance, stitchesInstance) {
133
- let { css: css9, type, className: cls = "" } = instance.data;
133
+ let { css: css10, type, className: cls = "" } = instance.data;
134
134
  let className = "";
135
135
  let permanentClass = "";
136
136
  let perCss = instance.Element?.permanentCss;
@@ -144,8 +144,8 @@ function generateItemClassName(instance, stitchesInstance) {
144
144
  }
145
145
  }
146
146
  className = permanentClass;
147
- if (css9) {
148
- let formattedCss = formatCSS(css9);
147
+ if (css10) {
148
+ let formattedCss = formatCSS(css10);
149
149
  let newStitchesClass = stitchesInstance.css(formattedCss)().className || "";
150
150
  let { stitchesClass } = instance;
151
151
  let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -690,7 +690,7 @@ Video.defaultProps = {
690
690
  var Video_default = Video;
691
691
 
692
692
  // src/elements/Instagram.tsx
693
- var import_react22 = __toESM(require("react"));
693
+ var import_react25 = __toESM(require("react"));
694
694
 
695
695
  // src/components/Placeholder.tsx
696
696
  var import_react14 = __toESM(require("react"));
@@ -1160,22 +1160,153 @@ function Tooltip({ children }) {
1160
1160
  }, children);
1161
1161
  }
1162
1162
 
1163
+ // src/components/Slider/index.tsx
1164
+ var import_clsx4 = __toESM(require("clsx"));
1165
+ var import_react23 = require("keen-slider/react");
1166
+ var import_react24 = __toESM(require("react"));
1167
+
1168
+ // src/components/Slider/Arrows.tsx
1169
+ var import_clsx3 = __toESM(require("clsx"));
1170
+ var import_react22 = __toESM(require("react"));
1171
+ function Arrows(props) {
1172
+ let { currentSlide, instanceRef, className } = props;
1173
+ let { stitchesInstance } = (0, import_react22.useContext)(WeaverseContext);
1174
+ let { className: cssClass } = stitchesInstance.css(css9)();
1175
+ let isFirstSlide = currentSlide === 0;
1176
+ let isLastSlide = false;
1177
+ if (instanceRef.current) {
1178
+ isLastSlide = currentSlide === instanceRef?.current?.track?.details?.maxIdx;
1179
+ }
1180
+ let _className = (0, import_clsx3.default)(className, cssClass);
1181
+ let arrowLeftClass = (0, import_clsx3.default)(
1182
+ "wv-slider-arrow arrow--left",
1183
+ isFirstSlide && "arrow--disabled"
1184
+ );
1185
+ let arrowRightClass = (0, import_clsx3.default)(
1186
+ "wv-slider-arrow arrow--right",
1187
+ isLastSlide && "arrow--disabled"
1188
+ );
1189
+ return /* @__PURE__ */ import_react22.default.createElement("div", {
1190
+ className: _className
1191
+ }, /* @__PURE__ */ import_react22.default.createElement("button", {
1192
+ type: "button",
1193
+ className: arrowLeftClass,
1194
+ onClick: (e) => {
1195
+ e.stopPropagation();
1196
+ instanceRef?.current?.prev();
1197
+ }
1198
+ }, /* @__PURE__ */ import_react22.default.createElement(Icon, {
1199
+ name: "ArrowLeft"
1200
+ })), /* @__PURE__ */ import_react22.default.createElement("button", {
1201
+ type: "button",
1202
+ className: arrowRightClass,
1203
+ onClick: (e) => {
1204
+ e.stopPropagation();
1205
+ instanceRef?.current?.next();
1206
+ }
1207
+ }, /* @__PURE__ */ import_react22.default.createElement(Icon, {
1208
+ name: "ArrowRight"
1209
+ })));
1210
+ }
1211
+ var css9 = {
1212
+ "@desktop": {
1213
+ ".wv-slider-arrow": {
1214
+ position: "absolute",
1215
+ top: "50%",
1216
+ transform: "translateY(-50%)",
1217
+ width: "44px",
1218
+ height: "44px",
1219
+ padding: "8px",
1220
+ color: "#191919",
1221
+ backgroundColor: "#f2f2f2",
1222
+ textAlign: "center",
1223
+ transition: "all 0.2s ease-in-out",
1224
+ borderRadius: "4px",
1225
+ border: "none",
1226
+ cursor: "pointer",
1227
+ "&:hover": {
1228
+ backgroundColor: "#191919",
1229
+ color: "#f2f2f2"
1230
+ },
1231
+ svg: {
1232
+ verticalAlign: "middle",
1233
+ width: "22px",
1234
+ height: "22px"
1235
+ },
1236
+ "&.arrow--left": {
1237
+ left: "-80px"
1238
+ },
1239
+ "&.arrow--right": {
1240
+ right: "-80px"
1241
+ },
1242
+ "&.arrow--disabled": {
1243
+ opacity: 0.5
1244
+ }
1245
+ }
1246
+ },
1247
+ "@mobile": {
1248
+ ".wv-slider-arrow": {
1249
+ display: "none"
1250
+ }
1251
+ }
1252
+ };
1253
+
1254
+ // src/components/Slider/index.tsx
1255
+ function Slider({ children, className }) {
1256
+ let [currentSlide, setCurrentSlide] = (0, import_react24.useState)(0);
1257
+ let [created, setCreated] = (0, import_react24.useState)(false);
1258
+ let [ref, instanceRef] = (0, import_react23.useKeenSlider)({
1259
+ slides: { perView: 4, spacing: 16 },
1260
+ breakpoints: {
1261
+ "(max-width: 1024px)": {
1262
+ slides: { perView: 3, spacing: 16 }
1263
+ },
1264
+ "(max-width: 768px)": {
1265
+ slides: {
1266
+ perView: 1,
1267
+ spacing: 32
1268
+ }
1269
+ }
1270
+ },
1271
+ created: () => {
1272
+ setCreated(true);
1273
+ },
1274
+ slideChanged: (slider) => {
1275
+ setCurrentSlide(slider.track.details.rel);
1276
+ }
1277
+ });
1278
+ let _className = (0, import_clsx4.default)("keen-slider", className);
1279
+ let arrowsClass = (0, import_clsx4.default)(className && `${className}-arrows`);
1280
+ return /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("div", {
1281
+ ref,
1282
+ className: _className
1283
+ }, /* @__PURE__ */ import_react24.default.createElement("link", {
1284
+ rel: "stylesheet",
1285
+ href: "https://cdn.jsdelivr.net/npm/keen-slider@latest/keen-slider.min.css"
1286
+ }), children), created && instanceRef?.current && /* @__PURE__ */ import_react24.default.createElement(Arrows, {
1287
+ currentSlide,
1288
+ instanceRef,
1289
+ className: arrowsClass
1290
+ }));
1291
+ }
1292
+
1163
1293
  // src/components/index.ts
1164
1294
  var Components = {
1165
1295
  Placeholder: Placeholder_default,
1166
1296
  Spinner,
1167
1297
  ModalComponents: Modal_exports,
1168
1298
  Icon,
1299
+ Slider,
1169
1300
  Tooltip
1170
1301
  };
1171
1302
 
1172
1303
  // src/elements/Instagram.tsx
1173
- var Instagram = (0, import_react22.forwardRef)(
1304
+ var Instagram = (0, import_react25.forwardRef)(
1174
1305
  (props, ref) => {
1175
1306
  let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
1176
- let [media, setMedia] = (0, import_react22.useState)([]);
1177
- let [error, setError] = (0, import_react22.useState)(null);
1178
- (0, import_react22.useEffect)(() => {
1307
+ let [media, setMedia] = (0, import_react25.useState)([]);
1308
+ let [error, setError] = (0, import_react25.useState)(null);
1309
+ (0, import_react25.useEffect)(() => {
1179
1310
  if (token) {
1180
1311
  let params = new URLSearchParams({
1181
1312
  access_token: token,
@@ -1192,10 +1323,10 @@ var Instagram = (0, import_react22.forwardRef)(
1192
1323
  }
1193
1324
  }, [token]);
1194
1325
  if (!token || error) {
1195
- return /* @__PURE__ */ import_react22.default.createElement("div", {
1326
+ return /* @__PURE__ */ import_react25.default.createElement("div", {
1196
1327
  ref,
1197
1328
  ...rest
1198
- }, /* @__PURE__ */ import_react22.default.createElement(Components.Placeholder, {
1329
+ }, /* @__PURE__ */ import_react25.default.createElement(Components.Placeholder, {
1199
1330
  element: "Instagram"
1200
1331
  }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
1201
1332
  }
@@ -1203,11 +1334,11 @@ var Instagram = (0, import_react22.forwardRef)(
1203
1334
  "--wv-ig-images-per-row": imagesPerRow,
1204
1335
  "--wv-ig-images-gap": gap + "px"
1205
1336
  };
1206
- return /* @__PURE__ */ import_react22.default.createElement("div", {
1337
+ return /* @__PURE__ */ import_react25.default.createElement("div", {
1207
1338
  ref,
1208
1339
  ...rest,
1209
1340
  style
1210
- }, /* @__PURE__ */ import_react22.default.createElement("div", {
1341
+ }, /* @__PURE__ */ import_react25.default.createElement("div", {
1211
1342
  className: "wv-ig-media-container"
1212
1343
  }, media.slice(0, numberOfImages).map((item) => {
1213
1344
  let {
@@ -1219,21 +1350,21 @@ var Instagram = (0, import_react22.forwardRef)(
1219
1350
  thumbnail_url
1220
1351
  } = item;
1221
1352
  if (media_type === "VIDEO") {
1222
- return /* @__PURE__ */ import_react22.default.createElement("video", {
1353
+ return /* @__PURE__ */ import_react25.default.createElement("video", {
1223
1354
  key: id,
1224
1355
  controls: true,
1225
1356
  poster: thumbnail_url
1226
- }, /* @__PURE__ */ import_react22.default.createElement("source", {
1357
+ }, /* @__PURE__ */ import_react25.default.createElement("source", {
1227
1358
  src: media_url,
1228
1359
  type: "video/mp4"
1229
1360
  }));
1230
1361
  }
1231
- return /* @__PURE__ */ import_react22.default.createElement("a", {
1362
+ return /* @__PURE__ */ import_react25.default.createElement("a", {
1232
1363
  key: id,
1233
1364
  href: permalink,
1234
1365
  target: "_blank",
1235
1366
  rel: "noreferrer"
1236
- }, /* @__PURE__ */ import_react22.default.createElement("img", {
1367
+ }, /* @__PURE__ */ import_react25.default.createElement("img", {
1237
1368
  alt: caption,
1238
1369
  src: media_url
1239
1370
  }));
@@ -1300,18 +1431,18 @@ var createRootContext = (configs) => {
1300
1431
  });
1301
1432
  return rootContext;
1302
1433
  };
1303
- var WeaverseContext = (0, import_react23.createContext)({});
1434
+ var WeaverseContext = (0, import_react26.createContext)({});
1304
1435
  var WeaverseContextProvider = WeaverseContext.Provider;
1305
1436
  var WeaverseContextConsumer = WeaverseContext.Consumer;
1306
1437
 
1307
1438
  // src/renderer.tsx
1308
1439
  var import_core2 = require("@weaverse/core");
1309
- var import_react24 = __toESM(require("react"));
1440
+ var import_react27 = __toESM(require("react"));
1310
1441
  var WeaverseRoot = ({ context }) => {
1311
- let [, setData] = (0, import_react24.useState)(context.projectData);
1312
- let rootRef = (0, import_react24.useRef)();
1442
+ let [, setData] = (0, import_react27.useState)(context.projectData);
1443
+ let rootRef = (0, import_react27.useRef)();
1313
1444
  let renderRoot = () => setData({});
1314
- (0, import_react24.useEffect)(() => {
1445
+ (0, import_react27.useEffect)(() => {
1315
1446
  context.subscribe(renderRoot);
1316
1447
  context.contentRootElement = rootRef.current;
1317
1448
  return () => {
@@ -1321,23 +1452,23 @@ var WeaverseRoot = ({ context }) => {
1321
1452
  let eventHandlers = context?.studioBridge?.eventHandlers || {};
1322
1453
  let themeClass = context.stitchesInstance.theme.className;
1323
1454
  if (context.projectData?.rootId) {
1324
- return /* @__PURE__ */ import_react24.default.createElement("div", {
1455
+ return /* @__PURE__ */ import_react27.default.createElement("div", {
1325
1456
  className: `weaverse-content-root ${themeClass}`,
1326
1457
  ...eventHandlers,
1327
1458
  ref: rootRef
1328
- }, /* @__PURE__ */ import_react24.default.createElement(WeaverseContextProvider, {
1459
+ }, /* @__PURE__ */ import_react27.default.createElement(WeaverseContextProvider, {
1329
1460
  value: context
1330
- }, /* @__PURE__ */ import_react24.default.createElement(ItemInstance, {
1461
+ }, /* @__PURE__ */ import_react27.default.createElement(ItemInstance, {
1331
1462
  id: context.projectData.rootId
1332
1463
  })));
1333
1464
  }
1334
1465
  return null;
1335
1466
  };
1336
1467
  var ItemComponent = ({ instance }) => {
1337
- let { stitchesInstance, elementInstances } = (0, import_react24.useContext)(WeaverseContext);
1338
- let [data, setData] = (0, import_react24.useState)(instance.data);
1339
- let { id, type, childIds = [], css: css9, className, ...rest } = data;
1340
- (0, import_react24.useEffect)(() => {
1468
+ let { stitchesInstance, elementInstances } = (0, import_react27.useContext)(WeaverseContext);
1469
+ let [data, setData] = (0, import_react27.useState)(instance.data);
1470
+ let { id, type, childIds = [], css: css10, className, ...rest } = data;
1471
+ (0, import_react27.useEffect)(() => {
1341
1472
  let render = (data2) => setData({ ...data2 });
1342
1473
  instance.subscribe(render);
1343
1474
  if (import_core2.isBrowser && !instance.ref.current) {
@@ -1353,13 +1484,13 @@ var ItemComponent = ({ instance }) => {
1353
1484
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1354
1485
  rest.ref = instance.ref;
1355
1486
  }
1356
- return /* @__PURE__ */ import_react24.default.createElement(Component, {
1487
+ return /* @__PURE__ */ import_react27.default.createElement(Component, {
1357
1488
  key: id,
1358
1489
  "data-wv-type": type,
1359
1490
  "data-wv-id": id,
1360
1491
  className: generateItemClassName(instance, stitchesInstance),
1361
1492
  ...rest
1362
- }, childIds.map((id2) => /* @__PURE__ */ import_react24.default.createElement(ItemInstance, {
1493
+ }, childIds.map((id2) => /* @__PURE__ */ import_react27.default.createElement(ItemInstance, {
1363
1494
  key: id2,
1364
1495
  id: id2
1365
1496
  })));
@@ -1369,15 +1500,15 @@ var ItemComponent = ({ instance }) => {
1369
1500
  }
1370
1501
  };
1371
1502
  var ItemInstance = ({ id }) => {
1372
- let context = (0, import_react24.useContext)(WeaverseContext);
1503
+ let context = (0, import_react27.useContext)(WeaverseContext);
1373
1504
  let { itemInstances } = context;
1374
1505
  let instance = itemInstances.get(id);
1375
1506
  if (!instance) {
1376
- return /* @__PURE__ */ import_react24.default.createElement("div", {
1507
+ return /* @__PURE__ */ import_react27.default.createElement("div", {
1377
1508
  style: { display: "none" }
1378
1509
  }, "Item instance ", id, " not found");
1379
1510
  }
1380
- return /* @__PURE__ */ import_react24.default.createElement(ItemComponent, {
1511
+ return /* @__PURE__ */ import_react27.default.createElement(ItemComponent, {
1381
1512
  key: id,
1382
1513
  instance
1383
1514
  });
package/dist/index.mjs CHANGED
@@ -91,15 +91,15 @@ var INSTAGRAM_API = "https://graph.instagram.com";
91
91
 
92
92
  // src/utils/css.ts
93
93
  import clsx from "clsx";
94
- function formatCSS(css9) {
94
+ function formatCSS(css10) {
95
95
  return {
96
- "@desktop": css9["@desktop"],
97
- "@mobile": css9["@mobile"]
96
+ "@desktop": css10["@desktop"],
97
+ "@mobile": css10["@mobile"]
98
98
  };
99
99
  }
100
100
  var permanentClasses = {};
101
101
  function generateItemClassName(instance, stitchesInstance) {
102
- let { css: css9, type, className: cls = "" } = instance.data;
102
+ let { css: css10, type, className: cls = "" } = instance.data;
103
103
  let className = "";
104
104
  let permanentClass = "";
105
105
  let perCss = instance.Element?.permanentCss;
@@ -113,8 +113,8 @@ function generateItemClassName(instance, stitchesInstance) {
113
113
  }
114
114
  }
115
115
  className = permanentClass;
116
- if (css9) {
117
- let formattedCss = formatCSS(css9);
116
+ if (css10) {
117
+ let formattedCss = formatCSS(css10);
118
118
  let newStitchesClass = stitchesInstance.css(formattedCss)().className || "";
119
119
  let { stitchesClass } = instance;
120
120
  let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -659,7 +659,7 @@ Video.defaultProps = {
659
659
  var Video_default = Video;
660
660
 
661
661
  // src/elements/Instagram.tsx
662
- import React21, { forwardRef as forwardRef10, useEffect as useEffect4, useState } from "react";
662
+ import React23, { forwardRef as forwardRef10, useEffect as useEffect4, useState as useState2 } from "react";
663
663
 
664
664
  // src/components/Placeholder.tsx
665
665
  import React15, { forwardRef as forwardRef8 } from "react";
@@ -1129,12 +1129,143 @@ function Tooltip({ children }) {
1129
1129
  }, children);
1130
1130
  }
1131
1131
 
1132
+ // src/components/Slider/index.tsx
1133
+ import clsx4 from "clsx";
1134
+ import { useKeenSlider } from "keen-slider/react";
1135
+ import React22, { useState } from "react";
1136
+
1137
+ // src/components/Slider/Arrows.tsx
1138
+ import clsx3 from "clsx";
1139
+ import React21, { useContext as useContext4 } from "react";
1140
+ function Arrows(props) {
1141
+ let { currentSlide, instanceRef, className } = props;
1142
+ let { stitchesInstance } = useContext4(WeaverseContext);
1143
+ let { className: cssClass } = stitchesInstance.css(css9)();
1144
+ let isFirstSlide = currentSlide === 0;
1145
+ let isLastSlide = false;
1146
+ if (instanceRef.current) {
1147
+ isLastSlide = currentSlide === instanceRef?.current?.track?.details?.maxIdx;
1148
+ }
1149
+ let _className = clsx3(className, cssClass);
1150
+ let arrowLeftClass = clsx3(
1151
+ "wv-slider-arrow arrow--left",
1152
+ isFirstSlide && "arrow--disabled"
1153
+ );
1154
+ let arrowRightClass = clsx3(
1155
+ "wv-slider-arrow arrow--right",
1156
+ isLastSlide && "arrow--disabled"
1157
+ );
1158
+ return /* @__PURE__ */ React21.createElement("div", {
1159
+ className: _className
1160
+ }, /* @__PURE__ */ React21.createElement("button", {
1161
+ type: "button",
1162
+ className: arrowLeftClass,
1163
+ onClick: (e) => {
1164
+ e.stopPropagation();
1165
+ instanceRef?.current?.prev();
1166
+ }
1167
+ }, /* @__PURE__ */ React21.createElement(Icon, {
1168
+ name: "ArrowLeft"
1169
+ })), /* @__PURE__ */ React21.createElement("button", {
1170
+ type: "button",
1171
+ className: arrowRightClass,
1172
+ onClick: (e) => {
1173
+ e.stopPropagation();
1174
+ instanceRef?.current?.next();
1175
+ }
1176
+ }, /* @__PURE__ */ React21.createElement(Icon, {
1177
+ name: "ArrowRight"
1178
+ })));
1179
+ }
1180
+ var css9 = {
1181
+ "@desktop": {
1182
+ ".wv-slider-arrow": {
1183
+ position: "absolute",
1184
+ top: "50%",
1185
+ transform: "translateY(-50%)",
1186
+ width: "44px",
1187
+ height: "44px",
1188
+ padding: "8px",
1189
+ color: "#191919",
1190
+ backgroundColor: "#f2f2f2",
1191
+ textAlign: "center",
1192
+ transition: "all 0.2s ease-in-out",
1193
+ borderRadius: "4px",
1194
+ border: "none",
1195
+ cursor: "pointer",
1196
+ "&:hover": {
1197
+ backgroundColor: "#191919",
1198
+ color: "#f2f2f2"
1199
+ },
1200
+ svg: {
1201
+ verticalAlign: "middle",
1202
+ width: "22px",
1203
+ height: "22px"
1204
+ },
1205
+ "&.arrow--left": {
1206
+ left: "-80px"
1207
+ },
1208
+ "&.arrow--right": {
1209
+ right: "-80px"
1210
+ },
1211
+ "&.arrow--disabled": {
1212
+ opacity: 0.5
1213
+ }
1214
+ }
1215
+ },
1216
+ "@mobile": {
1217
+ ".wv-slider-arrow": {
1218
+ display: "none"
1219
+ }
1220
+ }
1221
+ };
1222
+
1223
+ // src/components/Slider/index.tsx
1224
+ function Slider({ children, className }) {
1225
+ let [currentSlide, setCurrentSlide] = useState(0);
1226
+ let [created, setCreated] = useState(false);
1227
+ let [ref, instanceRef] = useKeenSlider({
1228
+ slides: { perView: 4, spacing: 16 },
1229
+ breakpoints: {
1230
+ "(max-width: 1024px)": {
1231
+ slides: { perView: 3, spacing: 16 }
1232
+ },
1233
+ "(max-width: 768px)": {
1234
+ slides: {
1235
+ perView: 1,
1236
+ spacing: 32
1237
+ }
1238
+ }
1239
+ },
1240
+ created: () => {
1241
+ setCreated(true);
1242
+ },
1243
+ slideChanged: (slider) => {
1244
+ setCurrentSlide(slider.track.details.rel);
1245
+ }
1246
+ });
1247
+ let _className = clsx4("keen-slider", className);
1248
+ let arrowsClass = clsx4(className && `${className}-arrows`);
1249
+ return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("div", {
1250
+ ref,
1251
+ className: _className
1252
+ }, /* @__PURE__ */ React22.createElement("link", {
1253
+ rel: "stylesheet",
1254
+ href: "https://cdn.jsdelivr.net/npm/keen-slider@latest/keen-slider.min.css"
1255
+ }), children), created && instanceRef?.current && /* @__PURE__ */ React22.createElement(Arrows, {
1256
+ currentSlide,
1257
+ instanceRef,
1258
+ className: arrowsClass
1259
+ }));
1260
+ }
1261
+
1132
1262
  // src/components/index.ts
1133
1263
  var Components = {
1134
1264
  Placeholder: Placeholder_default,
1135
1265
  Spinner,
1136
1266
  ModalComponents: Modal_exports,
1137
1267
  Icon,
1268
+ Slider,
1138
1269
  Tooltip
1139
1270
  };
1140
1271
 
@@ -1142,8 +1273,8 @@ var Components = {
1142
1273
  var Instagram = forwardRef10(
1143
1274
  (props, ref) => {
1144
1275
  let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
1145
- let [media, setMedia] = useState([]);
1146
- let [error, setError] = useState(null);
1276
+ let [media, setMedia] = useState2([]);
1277
+ let [error, setError] = useState2(null);
1147
1278
  useEffect4(() => {
1148
1279
  if (token) {
1149
1280
  let params = new URLSearchParams({
@@ -1161,10 +1292,10 @@ var Instagram = forwardRef10(
1161
1292
  }
1162
1293
  }, [token]);
1163
1294
  if (!token || error) {
1164
- return /* @__PURE__ */ React21.createElement("div", {
1295
+ return /* @__PURE__ */ React23.createElement("div", {
1165
1296
  ref,
1166
1297
  ...rest
1167
- }, /* @__PURE__ */ React21.createElement(Components.Placeholder, {
1298
+ }, /* @__PURE__ */ React23.createElement(Components.Placeholder, {
1168
1299
  element: "Instagram"
1169
1300
  }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
1170
1301
  }
@@ -1172,11 +1303,11 @@ var Instagram = forwardRef10(
1172
1303
  "--wv-ig-images-per-row": imagesPerRow,
1173
1304
  "--wv-ig-images-gap": gap + "px"
1174
1305
  };
1175
- return /* @__PURE__ */ React21.createElement("div", {
1306
+ return /* @__PURE__ */ React23.createElement("div", {
1176
1307
  ref,
1177
1308
  ...rest,
1178
1309
  style
1179
- }, /* @__PURE__ */ React21.createElement("div", {
1310
+ }, /* @__PURE__ */ React23.createElement("div", {
1180
1311
  className: "wv-ig-media-container"
1181
1312
  }, media.slice(0, numberOfImages).map((item) => {
1182
1313
  let {
@@ -1188,21 +1319,21 @@ var Instagram = forwardRef10(
1188
1319
  thumbnail_url
1189
1320
  } = item;
1190
1321
  if (media_type === "VIDEO") {
1191
- return /* @__PURE__ */ React21.createElement("video", {
1322
+ return /* @__PURE__ */ React23.createElement("video", {
1192
1323
  key: id,
1193
1324
  controls: true,
1194
1325
  poster: thumbnail_url
1195
- }, /* @__PURE__ */ React21.createElement("source", {
1326
+ }, /* @__PURE__ */ React23.createElement("source", {
1196
1327
  src: media_url,
1197
1328
  type: "video/mp4"
1198
1329
  }));
1199
1330
  }
1200
- return /* @__PURE__ */ React21.createElement("a", {
1331
+ return /* @__PURE__ */ React23.createElement("a", {
1201
1332
  key: id,
1202
1333
  href: permalink,
1203
1334
  target: "_blank",
1204
1335
  rel: "noreferrer"
1205
- }, /* @__PURE__ */ React21.createElement("img", {
1336
+ }, /* @__PURE__ */ React23.createElement("img", {
1206
1337
  alt: caption,
1207
1338
  src: media_url
1208
1339
  }));
@@ -1275,9 +1406,9 @@ var WeaverseContextConsumer = WeaverseContext.Consumer;
1275
1406
 
1276
1407
  // src/renderer.tsx
1277
1408
  import { isBrowser } from "@weaverse/core";
1278
- import React22, { useContext as useContext4, useEffect as useEffect5, useRef, useState as useState2 } from "react";
1409
+ import React24, { useContext as useContext5, useEffect as useEffect5, useRef, useState as useState3 } from "react";
1279
1410
  var WeaverseRoot = ({ context }) => {
1280
- let [, setData] = useState2(context.projectData);
1411
+ let [, setData] = useState3(context.projectData);
1281
1412
  let rootRef = useRef();
1282
1413
  let renderRoot = () => setData({});
1283
1414
  useEffect5(() => {
@@ -1290,22 +1421,22 @@ var WeaverseRoot = ({ context }) => {
1290
1421
  let eventHandlers = context?.studioBridge?.eventHandlers || {};
1291
1422
  let themeClass = context.stitchesInstance.theme.className;
1292
1423
  if (context.projectData?.rootId) {
1293
- return /* @__PURE__ */ React22.createElement("div", {
1424
+ return /* @__PURE__ */ React24.createElement("div", {
1294
1425
  className: `weaverse-content-root ${themeClass}`,
1295
1426
  ...eventHandlers,
1296
1427
  ref: rootRef
1297
- }, /* @__PURE__ */ React22.createElement(WeaverseContextProvider, {
1428
+ }, /* @__PURE__ */ React24.createElement(WeaverseContextProvider, {
1298
1429
  value: context
1299
- }, /* @__PURE__ */ React22.createElement(ItemInstance, {
1430
+ }, /* @__PURE__ */ React24.createElement(ItemInstance, {
1300
1431
  id: context.projectData.rootId
1301
1432
  })));
1302
1433
  }
1303
1434
  return null;
1304
1435
  };
1305
1436
  var ItemComponent = ({ instance }) => {
1306
- let { stitchesInstance, elementInstances } = useContext4(WeaverseContext);
1307
- let [data, setData] = useState2(instance.data);
1308
- let { id, type, childIds = [], css: css9, className, ...rest } = data;
1437
+ let { stitchesInstance, elementInstances } = useContext5(WeaverseContext);
1438
+ let [data, setData] = useState3(instance.data);
1439
+ let { id, type, childIds = [], css: css10, className, ...rest } = data;
1309
1440
  useEffect5(() => {
1310
1441
  let render = (data2) => setData({ ...data2 });
1311
1442
  instance.subscribe(render);
@@ -1322,13 +1453,13 @@ var ItemComponent = ({ instance }) => {
1322
1453
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1323
1454
  rest.ref = instance.ref;
1324
1455
  }
1325
- return /* @__PURE__ */ React22.createElement(Component, {
1456
+ return /* @__PURE__ */ React24.createElement(Component, {
1326
1457
  key: id,
1327
1458
  "data-wv-type": type,
1328
1459
  "data-wv-id": id,
1329
1460
  className: generateItemClassName(instance, stitchesInstance),
1330
1461
  ...rest
1331
- }, childIds.map((id2) => /* @__PURE__ */ React22.createElement(ItemInstance, {
1462
+ }, childIds.map((id2) => /* @__PURE__ */ React24.createElement(ItemInstance, {
1332
1463
  key: id2,
1333
1464
  id: id2
1334
1465
  })));
@@ -1338,15 +1469,15 @@ var ItemComponent = ({ instance }) => {
1338
1469
  }
1339
1470
  };
1340
1471
  var ItemInstance = ({ id }) => {
1341
- let context = useContext4(WeaverseContext);
1472
+ let context = useContext5(WeaverseContext);
1342
1473
  let { itemInstances } = context;
1343
1474
  let instance = itemInstances.get(id);
1344
1475
  if (!instance) {
1345
- return /* @__PURE__ */ React22.createElement("div", {
1476
+ return /* @__PURE__ */ React24.createElement("div", {
1346
1477
  style: { display: "none" }
1347
1478
  }, "Item instance ", id, " not found");
1348
1479
  }
1349
- return /* @__PURE__ */ React22.createElement(ItemComponent, {
1480
+ return /* @__PURE__ */ React24.createElement(ItemComponent, {
1350
1481
  key: id,
1351
1482
  instance
1352
1483
  });
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.53",
2
+ "version": "0.7.54",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -34,7 +34,8 @@
34
34
  "dependencies": {
35
35
  "@radix-ui/react-dialog": "^1.0.2",
36
36
  "@stitches/react": "^1.2.8",
37
- "@weaverse/core": "0.7.53",
38
- "clsx": "^1.2.1"
37
+ "@weaverse/core": "0.7.54",
38
+ "clsx": "^1.2.1",
39
+ "keen-slider": "^6.8.5"
39
40
  }
40
41
  }