@cntrl-site/components 0.1.6-19 → 0.1.6-20

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
@@ -4,7 +4,6 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const reactSplide = require("@splidejs/react-splide");
6
6
  const cn = require("classnames");
7
- const framerMotion = require("framer-motion");
8
7
  const reactDom = require("react-dom");
9
8
  const wrapper = "ControlSlider-module__wrapper___sHEkd";
10
9
  const sliderItem = "ControlSlider-module__sliderItem___QQSkR";
@@ -1041,12 +1040,10 @@ const ControlSliderComponent = {
1041
1040
  const imageRevealSlider = "ImageRevealSlider-module__imageRevealSlider___UE5Ob";
1042
1041
  const image = "ImageRevealSlider-module__image___Qjt-e";
1043
1042
  const link = "ImageRevealSlider-module__link___N-iLG";
1044
- const cursor = "ImageRevealSlider-module__cursor___2U03d";
1045
1043
  const styles = {
1046
1044
  imageRevealSlider,
1047
1045
  image,
1048
- link,
1049
- cursor
1046
+ link
1050
1047
  };
1051
1048
  function isMouseOverImage(mouseX, mouseY, placedImages) {
1052
1049
  for (const img2 of placedImages) {
@@ -1094,23 +1091,20 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1094
1091
  const [placedImages, setPlacedImages] = React.useState([]);
1095
1092
  const [counter, setCounter] = React.useState(0);
1096
1093
  const imageIdCounter = React.useRef(0);
1097
- const defaultImageCount = 1;
1098
- const lastMousePos = React.useRef({ x: 0, y: 0 });
1099
- const [isInside, setIsInside] = React.useState(false);
1100
- const cursorX = framerMotion.useMotionValue(-100);
1101
- const cursorY = framerMotion.useMotionValue(-100);
1102
1094
  const defaultScale = 32;
1103
- const cursorW = framerMotion.useMotionValue(32);
1104
- const cursorH = framerMotion.useMotionValue(32);
1095
+ const [cursorPos, setCursorPos] = React.useState({ x: -100, y: -100 });
1096
+ const [cursorSize, setCursorSize] = React.useState({ w: 32, h: 32 });
1105
1097
  const [customCursorImg, setCustomCursorImg] = React.useState("none");
1098
+ const lastMousePos = React.useRef({ x: 0, y: 0 });
1099
+ const [isInside, setIsInside] = React.useState(false);
1106
1100
  React.useEffect(() => {
1107
1101
  if (!divRef) return;
1108
1102
  const updateCursorPosition = (clientX, clientY) => {
1109
- const divRect = divRef.getBoundingClientRect();
1110
- const newX = clientX - cursorW.get() / 2 - divRect.left;
1111
- const newY = clientY - cursorH.get() / 2 - divRect.top;
1112
- cursorX.jump(newX);
1113
- cursorY.jump(newY);
1103
+ const rect = divRef.getBoundingClientRect();
1104
+ setCursorPos({
1105
+ x: clientX - cursorSize.w / 2 - rect.left,
1106
+ y: clientY - cursorSize.h / 2 - rect.top
1107
+ });
1114
1108
  };
1115
1109
  const mouseMove = (e) => {
1116
1110
  e.stopPropagation();
@@ -1127,12 +1121,11 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1127
1121
  divRef.removeEventListener("mousemove", mouseMove);
1128
1122
  window.removeEventListener("scroll", handleScroll, true);
1129
1123
  };
1130
- }, [cursorX, cursorY, cursorW, cursorH, divRef, isInside]);
1124
+ }, [divRef, cursorSize, isInside]);
1131
1125
  React.useEffect(() => {
1132
1126
  if (!isInside) {
1133
1127
  setCustomCursorImg("none");
1134
- cursorW.set(0);
1135
- cursorH.set(0);
1128
+ setCursorSize({ w: 0, h: 0 });
1136
1129
  }
1137
1130
  }, [isInside]);
1138
1131
  const { sizeType, imageWidth: customWidth, randomRangeImageWidth: randomRange } = settings.imageSize;
@@ -1140,51 +1133,37 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1140
1133
  const { cursorType, defaultCursorScale, defaultCursor, hoverCursorScale, hoverCursor } = settings.cursor;
1141
1134
  React.useEffect(() => {
1142
1135
  const updateCursor = () => {
1136
+ if (!divRef) return;
1143
1137
  if (cursorType === "system") {
1144
1138
  setCustomCursorImg("none");
1145
- cursorW.set(defaultScale);
1146
- cursorH.set(defaultScale);
1139
+ setCursorSize({ w: defaultScale, h: defaultScale });
1147
1140
  return;
1148
1141
  }
1149
- const elUnderCursor = document.elementFromPoint(cursorX.get() + cursorW.get() / 2, cursorY.get() + cursorH.get() / 2);
1150
- if (elUnderCursor && elUnderCursor.closest("a.link")) {
1142
+ const cx = cursorPos.x + cursorSize.w / 2;
1143
+ const cy = cursorPos.y + cursorSize.h / 2;
1144
+ const rect = divRef.getBoundingClientRect();
1145
+ const el = document.elementFromPoint(
1146
+ rect.left + cx,
1147
+ rect.top + cy
1148
+ );
1149
+ if (el && el.closest("a")) {
1151
1150
  setCustomCursorImg("none");
1152
- cursorW.set(defaultScale);
1153
- cursorH.set(defaultScale);
1151
+ setCursorSize({ w: defaultScale, h: defaultScale });
1154
1152
  return;
1155
1153
  }
1156
- if (target === "area") {
1157
- setCustomCursorImg(hoverCursor || "none");
1158
- cursorW.set(defaultScale * hoverCursorScale || 1);
1159
- cursorH.set(defaultScale * hoverCursorScale || 1);
1160
- } else if (isMouseOverImage(cursorX.get() + cursorW.get() / 2, cursorY.get() + cursorH.get() / 2, placedImages)) {
1161
- setCustomCursorImg(hoverCursor || "none");
1162
- cursorW.set(defaultScale * hoverCursorScale || 1);
1163
- cursorH.set(defaultScale * hoverCursorScale || 1);
1164
- } else {
1165
- setCustomCursorImg(defaultCursor || "none");
1166
- cursorW.set(defaultScale * defaultCursorScale || 1);
1167
- cursorH.set(defaultScale * defaultCursorScale || 1);
1168
- }
1154
+ const next = isMouseOverImage(cx, cy, placedImages) || target === "area" ? { img: hoverCursor ?? "none", w: defaultScale * (hoverCursorScale || 1), h: defaultScale * (hoverCursorScale || 1) } : { img: defaultCursor ?? "none", w: defaultScale * (defaultCursorScale || 1), h: defaultScale * (defaultCursorScale || 1) };
1155
+ setCustomCursorImg(next.img);
1156
+ setCursorSize({ w: next.w, h: next.h });
1169
1157
  };
1170
- const unsubscribeX = cursorX.onChange(updateCursor);
1171
- const unsubscribeY = cursorY.onChange(updateCursor);
1172
1158
  updateCursor();
1173
- return () => {
1174
- unsubscribeX();
1175
- unsubscribeY();
1176
- };
1177
1159
  }, [
1160
+ cursorPos,
1178
1161
  cursorType,
1179
1162
  target,
1180
1163
  hoverCursor,
1181
1164
  defaultCursor,
1182
1165
  hoverCursorScale,
1183
1166
  defaultCursorScale,
1184
- cursorX,
1185
- cursorY,
1186
- cursorW,
1187
- cursorH,
1188
1167
  placedImages
1189
1168
  ]);
1190
1169
  const createNewImage = async (imgData, containerWidth, containerHeight, position = {}) => {
@@ -1215,7 +1194,7 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1215
1194
  };
1216
1195
  };
1217
1196
  const defaultContentUrls = React.useMemo(() => {
1218
- const defaultContentLength = Math.min(content.length, defaultImageCount);
1197
+ const defaultContentLength = Math.min(content.length, 1);
1219
1198
  return content.filter((_, i) => i < defaultContentLength).map((c) => c.image.url).join("-");
1220
1199
  }, [content]);
1221
1200
  React.useEffect(() => {
@@ -1225,13 +1204,13 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1225
1204
  const containerHeight = rect.height;
1226
1205
  const defaultPlaced = [];
1227
1206
  const placeImages = async () => {
1228
- for (let i = 0; i < defaultImageCount && i < content.length; i++) {
1207
+ for (let i = 0; i < 1 && i < content.length; i++) {
1229
1208
  const imgData = content[i];
1230
1209
  const newImg = await createNewImage(imgData, containerWidth, containerHeight);
1231
1210
  defaultPlaced.push(newImg);
1232
1211
  }
1233
1212
  setPlacedImages(defaultPlaced);
1234
- setCounter(defaultImageCount % content.length);
1213
+ setCounter(1 % content.length);
1235
1214
  };
1236
1215
  placeImages();
1237
1216
  }, [defaultContentUrls, sizeType, customWidth, randomRange, revealPosition, divRef]);
@@ -1305,18 +1284,21 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1305
1284
  },
1306
1285
  img2.id
1307
1286
  )),
1308
- /* @__PURE__ */ jsxRuntime.jsx(
1309
- framerMotion.motion.div,
1287
+ isInside && /* @__PURE__ */ jsxRuntime.jsx(
1288
+ "div",
1310
1289
  {
1311
- className: styles.cursor,
1290
+ className: "cursor",
1312
1291
  style: {
1313
- x: cursorX,
1314
- y: cursorY,
1315
- width: cursorW.get(),
1316
- height: cursorH.get(),
1292
+ transform: `translate(${cursorPos.x}px, ${cursorPos.y}px)`,
1293
+ width: cursorSize.w,
1294
+ height: cursorSize.h,
1317
1295
  backgroundImage: `url('${customCursorImg}')`,
1318
1296
  backgroundSize: "cover",
1319
- backgroundPosition: "center"
1297
+ backgroundPosition: "center",
1298
+ position: "absolute",
1299
+ top: 0,
1300
+ left: 0,
1301
+ pointerEvents: "none"
1320
1302
  }
1321
1303
  }
1322
1304
  )
package/dist/index.mjs CHANGED
@@ -2,7 +2,6 @@ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
2
  import React, { useState, useEffect, useRef, useMemo, useCallback } from "react";
3
3
  import { Splide, SplideSlide } from "@splidejs/react-splide";
4
4
  import cn from "classnames";
5
- import { useMotionValue, motion } from "framer-motion";
6
5
  import { createPortal } from "react-dom";
7
6
  const wrapper = "ControlSlider-module__wrapper___sHEkd";
8
7
  const sliderItem = "ControlSlider-module__sliderItem___QQSkR";
@@ -1039,12 +1038,10 @@ const ControlSliderComponent = {
1039
1038
  const imageRevealSlider = "ImageRevealSlider-module__imageRevealSlider___UE5Ob";
1040
1039
  const image = "ImageRevealSlider-module__image___Qjt-e";
1041
1040
  const link = "ImageRevealSlider-module__link___N-iLG";
1042
- const cursor = "ImageRevealSlider-module__cursor___2U03d";
1043
1041
  const styles = {
1044
1042
  imageRevealSlider,
1045
1043
  image,
1046
- link,
1047
- cursor
1044
+ link
1048
1045
  };
1049
1046
  function isMouseOverImage(mouseX, mouseY, placedImages) {
1050
1047
  for (const img2 of placedImages) {
@@ -1092,23 +1089,20 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1092
1089
  const [placedImages, setPlacedImages] = useState([]);
1093
1090
  const [counter, setCounter] = useState(0);
1094
1091
  const imageIdCounter = useRef(0);
1095
- const defaultImageCount = 1;
1096
- const lastMousePos = useRef({ x: 0, y: 0 });
1097
- const [isInside, setIsInside] = useState(false);
1098
- const cursorX = useMotionValue(-100);
1099
- const cursorY = useMotionValue(-100);
1100
1092
  const defaultScale = 32;
1101
- const cursorW = useMotionValue(32);
1102
- const cursorH = useMotionValue(32);
1093
+ const [cursorPos, setCursorPos] = useState({ x: -100, y: -100 });
1094
+ const [cursorSize, setCursorSize] = useState({ w: 32, h: 32 });
1103
1095
  const [customCursorImg, setCustomCursorImg] = useState("none");
1096
+ const lastMousePos = useRef({ x: 0, y: 0 });
1097
+ const [isInside, setIsInside] = useState(false);
1104
1098
  useEffect(() => {
1105
1099
  if (!divRef) return;
1106
1100
  const updateCursorPosition = (clientX, clientY) => {
1107
- const divRect = divRef.getBoundingClientRect();
1108
- const newX = clientX - cursorW.get() / 2 - divRect.left;
1109
- const newY = clientY - cursorH.get() / 2 - divRect.top;
1110
- cursorX.jump(newX);
1111
- cursorY.jump(newY);
1101
+ const rect = divRef.getBoundingClientRect();
1102
+ setCursorPos({
1103
+ x: clientX - cursorSize.w / 2 - rect.left,
1104
+ y: clientY - cursorSize.h / 2 - rect.top
1105
+ });
1112
1106
  };
1113
1107
  const mouseMove = (e) => {
1114
1108
  e.stopPropagation();
@@ -1125,12 +1119,11 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1125
1119
  divRef.removeEventListener("mousemove", mouseMove);
1126
1120
  window.removeEventListener("scroll", handleScroll, true);
1127
1121
  };
1128
- }, [cursorX, cursorY, cursorW, cursorH, divRef, isInside]);
1122
+ }, [divRef, cursorSize, isInside]);
1129
1123
  useEffect(() => {
1130
1124
  if (!isInside) {
1131
1125
  setCustomCursorImg("none");
1132
- cursorW.set(0);
1133
- cursorH.set(0);
1126
+ setCursorSize({ w: 0, h: 0 });
1134
1127
  }
1135
1128
  }, [isInside]);
1136
1129
  const { sizeType, imageWidth: customWidth, randomRangeImageWidth: randomRange } = settings.imageSize;
@@ -1138,51 +1131,37 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1138
1131
  const { cursorType, defaultCursorScale, defaultCursor, hoverCursorScale, hoverCursor } = settings.cursor;
1139
1132
  useEffect(() => {
1140
1133
  const updateCursor = () => {
1134
+ if (!divRef) return;
1141
1135
  if (cursorType === "system") {
1142
1136
  setCustomCursorImg("none");
1143
- cursorW.set(defaultScale);
1144
- cursorH.set(defaultScale);
1137
+ setCursorSize({ w: defaultScale, h: defaultScale });
1145
1138
  return;
1146
1139
  }
1147
- const elUnderCursor = document.elementFromPoint(cursorX.get() + cursorW.get() / 2, cursorY.get() + cursorH.get() / 2);
1148
- if (elUnderCursor && elUnderCursor.closest("a.link")) {
1140
+ const cx = cursorPos.x + cursorSize.w / 2;
1141
+ const cy = cursorPos.y + cursorSize.h / 2;
1142
+ const rect = divRef.getBoundingClientRect();
1143
+ const el = document.elementFromPoint(
1144
+ rect.left + cx,
1145
+ rect.top + cy
1146
+ );
1147
+ if (el && el.closest("a")) {
1149
1148
  setCustomCursorImg("none");
1150
- cursorW.set(defaultScale);
1151
- cursorH.set(defaultScale);
1149
+ setCursorSize({ w: defaultScale, h: defaultScale });
1152
1150
  return;
1153
1151
  }
1154
- if (target === "area") {
1155
- setCustomCursorImg(hoverCursor || "none");
1156
- cursorW.set(defaultScale * hoverCursorScale || 1);
1157
- cursorH.set(defaultScale * hoverCursorScale || 1);
1158
- } else if (isMouseOverImage(cursorX.get() + cursorW.get() / 2, cursorY.get() + cursorH.get() / 2, placedImages)) {
1159
- setCustomCursorImg(hoverCursor || "none");
1160
- cursorW.set(defaultScale * hoverCursorScale || 1);
1161
- cursorH.set(defaultScale * hoverCursorScale || 1);
1162
- } else {
1163
- setCustomCursorImg(defaultCursor || "none");
1164
- cursorW.set(defaultScale * defaultCursorScale || 1);
1165
- cursorH.set(defaultScale * defaultCursorScale || 1);
1166
- }
1152
+ const next = isMouseOverImage(cx, cy, placedImages) || target === "area" ? { img: hoverCursor ?? "none", w: defaultScale * (hoverCursorScale || 1), h: defaultScale * (hoverCursorScale || 1) } : { img: defaultCursor ?? "none", w: defaultScale * (defaultCursorScale || 1), h: defaultScale * (defaultCursorScale || 1) };
1153
+ setCustomCursorImg(next.img);
1154
+ setCursorSize({ w: next.w, h: next.h });
1167
1155
  };
1168
- const unsubscribeX = cursorX.onChange(updateCursor);
1169
- const unsubscribeY = cursorY.onChange(updateCursor);
1170
1156
  updateCursor();
1171
- return () => {
1172
- unsubscribeX();
1173
- unsubscribeY();
1174
- };
1175
1157
  }, [
1158
+ cursorPos,
1176
1159
  cursorType,
1177
1160
  target,
1178
1161
  hoverCursor,
1179
1162
  defaultCursor,
1180
1163
  hoverCursorScale,
1181
1164
  defaultCursorScale,
1182
- cursorX,
1183
- cursorY,
1184
- cursorW,
1185
- cursorH,
1186
1165
  placedImages
1187
1166
  ]);
1188
1167
  const createNewImage = async (imgData, containerWidth, containerHeight, position = {}) => {
@@ -1213,7 +1192,7 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1213
1192
  };
1214
1193
  };
1215
1194
  const defaultContentUrls = useMemo(() => {
1216
- const defaultContentLength = Math.min(content.length, defaultImageCount);
1195
+ const defaultContentLength = Math.min(content.length, 1);
1217
1196
  return content.filter((_, i) => i < defaultContentLength).map((c) => c.image.url).join("-");
1218
1197
  }, [content]);
1219
1198
  useEffect(() => {
@@ -1223,13 +1202,13 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1223
1202
  const containerHeight = rect.height;
1224
1203
  const defaultPlaced = [];
1225
1204
  const placeImages = async () => {
1226
- for (let i = 0; i < defaultImageCount && i < content.length; i++) {
1205
+ for (let i = 0; i < 1 && i < content.length; i++) {
1227
1206
  const imgData = content[i];
1228
1207
  const newImg = await createNewImage(imgData, containerWidth, containerHeight);
1229
1208
  defaultPlaced.push(newImg);
1230
1209
  }
1231
1210
  setPlacedImages(defaultPlaced);
1232
- setCounter(defaultImageCount % content.length);
1211
+ setCounter(1 % content.length);
1233
1212
  };
1234
1213
  placeImages();
1235
1214
  }, [defaultContentUrls, sizeType, customWidth, randomRange, revealPosition, divRef]);
@@ -1303,18 +1282,21 @@ function ImageRevealSlider({ settings, content, isEditor }) {
1303
1282
  },
1304
1283
  img2.id
1305
1284
  )),
1306
- /* @__PURE__ */ jsx(
1307
- motion.div,
1285
+ isInside && /* @__PURE__ */ jsx(
1286
+ "div",
1308
1287
  {
1309
- className: styles.cursor,
1288
+ className: "cursor",
1310
1289
  style: {
1311
- x: cursorX,
1312
- y: cursorY,
1313
- width: cursorW.get(),
1314
- height: cursorH.get(),
1290
+ transform: `translate(${cursorPos.x}px, ${cursorPos.y}px)`,
1291
+ width: cursorSize.w,
1292
+ height: cursorSize.h,
1315
1293
  backgroundImage: `url('${customCursorImg}')`,
1316
1294
  backgroundSize: "cover",
1317
- backgroundPosition: "center"
1295
+ backgroundPosition: "center",
1296
+ position: "absolute",
1297
+ top: 0,
1298
+ left: 0,
1299
+ pointerEvents: "none"
1318
1300
  }
1319
1301
  }
1320
1302
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cntrl-site/components",
3
- "version": "0.1.6-19",
3
+ "version": "0.1.6-20",
4
4
  "description": "Custom components for control editor and public websites.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -47,7 +47,6 @@
47
47
  "@antfu/eslint-config": "^3.16.0",
48
48
  "@splidejs/react-splide": "^0.7.12",
49
49
  "classnames": "^2.5.1",
50
- "framer-motion": "^12.23.27",
51
50
  "ts-node": "^10.9.1"
52
51
  },
53
52
  "devDependencies": {