gdx-ui 1.5.0 → 1.7.0
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/base.css +1 -1
- package/components/box/Box.js +0 -1
- package/components/button/IconButton.js +19 -26
- package/components/images/CarouselImages.js +164 -0
- package/components/images/ImageZoom.js +294 -0
- package/components/images/Picture.js +159 -0
- package/components/images/PictureZoomBtns.js +308 -0
- package/components/images/{Image.js → PictureZoomSquare.js} +3 -3
- package/components/images/Thumb.js +17 -5
- package/components/images/index.js +15 -4
- package/components/information/Information.js +1 -1
- package/components/{cards/CardScroller.js → scroller/ListScroller.js} +83 -86
- package/components/snackbar/Snackbar.js +2 -3
- package/package.json +1 -1
- package/components/cards/Card.js +0 -22
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ImageZoom = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _util = require("../util");
|
|
11
|
+
var _button = require("../button");
|
|
12
|
+
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
16
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
17
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
19
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
20
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
21
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
22
|
+
var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
|
|
23
|
+
var src = _ref.src,
|
|
24
|
+
alt = _ref.alt,
|
|
25
|
+
_ref$width = _ref.width,
|
|
26
|
+
width = _ref$width === void 0 ? '100%' : _ref$width,
|
|
27
|
+
_ref$height = _ref.height,
|
|
28
|
+
height = _ref$height === void 0 ? 600 : _ref$height,
|
|
29
|
+
_ref$bordered = _ref.bordered,
|
|
30
|
+
bordered = _ref$bordered === void 0 ? false : _ref$bordered,
|
|
31
|
+
_ref$maxZoom = _ref.maxZoom,
|
|
32
|
+
maxZoom = _ref$maxZoom === void 0 ? 1.5 : _ref$maxZoom,
|
|
33
|
+
_ref$showHelp = _ref.showHelp,
|
|
34
|
+
showHelp = _ref$showHelp === void 0 ? true : _ref$showHelp;
|
|
35
|
+
var _useState = (0, _react.useState)(),
|
|
36
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
37
|
+
imageData = _useState2[0],
|
|
38
|
+
setImageData = _useState2[1];
|
|
39
|
+
var _useState3 = (0, _react.useState)(1),
|
|
40
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
41
|
+
zoom = _useState4[0],
|
|
42
|
+
setZoom = _useState4[1];
|
|
43
|
+
var _useState5 = (0, _react.useState)(1),
|
|
44
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
45
|
+
minZoom = _useState6[0],
|
|
46
|
+
setMinZoom = _useState6[1];
|
|
47
|
+
var _useState7 = (0, _react.useState)(maxZoom),
|
|
48
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
49
|
+
maxZoomState = _useState8[0],
|
|
50
|
+
setMaxZoomState = _useState8[1];
|
|
51
|
+
var _useState9 = (0, _react.useState)({
|
|
52
|
+
x: 0,
|
|
53
|
+
y: 0
|
|
54
|
+
}),
|
|
55
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
56
|
+
offset = _useState10[0],
|
|
57
|
+
setOffset = _useState10[1];
|
|
58
|
+
var _useState11 = (0, _react.useState)(false),
|
|
59
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
60
|
+
dragging = _useState12[0],
|
|
61
|
+
setDragging = _useState12[1];
|
|
62
|
+
var _useState13 = (0, _react.useState)({
|
|
63
|
+
x: 0,
|
|
64
|
+
y: 0
|
|
65
|
+
}),
|
|
66
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
67
|
+
dragStart = _useState14[0],
|
|
68
|
+
setDragStart = _useState14[1];
|
|
69
|
+
var _useState15 = (0, _react.useState)({
|
|
70
|
+
x: 0,
|
|
71
|
+
y: 0
|
|
72
|
+
}),
|
|
73
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
74
|
+
imgStart = _useState16[0],
|
|
75
|
+
setImgStart = _useState16[1];
|
|
76
|
+
var containerRef = (0, _react.useRef)(null);
|
|
77
|
+
|
|
78
|
+
// Cuando la imagen y el wrapper están listos, calcula el zoom mínimo y máximo
|
|
79
|
+
(0, _react.useEffect)(function () {
|
|
80
|
+
if (!src) return;
|
|
81
|
+
var image = new Image();
|
|
82
|
+
image.src = src;
|
|
83
|
+
image.onload = function () {
|
|
84
|
+
setImageData({
|
|
85
|
+
width: image.width,
|
|
86
|
+
height: image.height
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
}, [src]);
|
|
90
|
+
(0, _react.useEffect)(function () {
|
|
91
|
+
if (!imageData || !containerRef.current) return;
|
|
92
|
+
var wrapper = containerRef.current;
|
|
93
|
+
var dispW = wrapper.clientWidth;
|
|
94
|
+
var dispH = wrapper.clientHeight;
|
|
95
|
+
var zoomW = dispW / imageData.width;
|
|
96
|
+
var zoomH = dispH / imageData.height;
|
|
97
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
98
|
+
setMinZoom(fitZoom);
|
|
99
|
+
setZoom(fitZoom);
|
|
100
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
101
|
+
setOffset({
|
|
102
|
+
x: 0,
|
|
103
|
+
y: 0
|
|
104
|
+
});
|
|
105
|
+
// eslint-disable-next-line
|
|
106
|
+
}, [imageData, maxZoom, width, height]);
|
|
107
|
+
|
|
108
|
+
// Limita el offset para que la imagen no se salga del área visible
|
|
109
|
+
var clampOffset = function clampOffset(ox, oy, zoomVal) {
|
|
110
|
+
if (!imageData || !containerRef.current) return {
|
|
111
|
+
x: 0,
|
|
112
|
+
y: 0
|
|
113
|
+
};
|
|
114
|
+
var dispW = containerRef.current.clientWidth;
|
|
115
|
+
var dispH = containerRef.current.clientHeight;
|
|
116
|
+
var imgW = imageData.width * zoomVal;
|
|
117
|
+
var imgH = imageData.height * zoomVal;
|
|
118
|
+
var minX = Math.min(0, dispW - imgW);
|
|
119
|
+
var minY = Math.min(0, dispH - imgH);
|
|
120
|
+
return {
|
|
121
|
+
x: Math.max(minX, Math.min(ox, 0)),
|
|
122
|
+
y: Math.max(minY, Math.min(oy, 0))
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Drag handlers (mouse & touch)
|
|
127
|
+
var startDrag = function startDrag(clientX, clientY) {
|
|
128
|
+
setDragging(true);
|
|
129
|
+
setDragStart({
|
|
130
|
+
x: clientX,
|
|
131
|
+
y: clientY
|
|
132
|
+
});
|
|
133
|
+
setImgStart(offset);
|
|
134
|
+
};
|
|
135
|
+
var onMouseDown = function onMouseDown(e) {
|
|
136
|
+
if (zoom === minZoom) return;
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
startDrag(e.clientX, e.clientY);
|
|
139
|
+
};
|
|
140
|
+
var onMouseMove = function onMouseMove(e) {
|
|
141
|
+
if (!dragging) return;
|
|
142
|
+
var dx = e.clientX - dragStart.x;
|
|
143
|
+
var dy = e.clientY - dragStart.y;
|
|
144
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
145
|
+
};
|
|
146
|
+
var onMouseUp = function onMouseUp() {
|
|
147
|
+
return setDragging(false);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Touch events
|
|
151
|
+
var onTouchStart = function onTouchStart(e) {
|
|
152
|
+
if (zoom === minZoom) return;
|
|
153
|
+
if (e.touches.length === 1) {
|
|
154
|
+
var t = e.touches[0];
|
|
155
|
+
startDrag(t.clientX, t.clientY);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
var onTouchMove = function onTouchMove(e) {
|
|
159
|
+
if (!dragging || e.touches.length !== 1) return;
|
|
160
|
+
var t = e.touches[0];
|
|
161
|
+
var dx = t.clientX - dragStart.x;
|
|
162
|
+
var dy = t.clientY - dragStart.y;
|
|
163
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
164
|
+
};
|
|
165
|
+
var onTouchEnd = function onTouchEnd() {
|
|
166
|
+
return setDragging(false);
|
|
167
|
+
};
|
|
168
|
+
var handleDoubleClick = function handleDoubleClick(e) {
|
|
169
|
+
if (!imageData || !containerRef.current) return;
|
|
170
|
+
var wrapper = containerRef.current;
|
|
171
|
+
var rect = wrapper.getBoundingClientRect();
|
|
172
|
+
var clickX = e.clientX - rect.left;
|
|
173
|
+
var clickY = e.clientY - rect.top;
|
|
174
|
+
if (zoom < maxZoomState) {
|
|
175
|
+
// Zoom al máximo desde el punto del click
|
|
176
|
+
var newZoom = maxZoomState;
|
|
177
|
+
var dispW = wrapper.clientWidth;
|
|
178
|
+
var dispH = wrapper.clientHeight;
|
|
179
|
+
|
|
180
|
+
// Calcula el punto relativo en la imagen original
|
|
181
|
+
var relX = (clickX - offset.x) / zoom;
|
|
182
|
+
var relY = (clickY - offset.y) / zoom;
|
|
183
|
+
|
|
184
|
+
// Calcula el nuevo offset para centrar ese punto
|
|
185
|
+
var offsetX = dispW / 2 - relX * newZoom;
|
|
186
|
+
var offsetY = dispH / 2 - relY * newZoom;
|
|
187
|
+
|
|
188
|
+
// Limita el offset para no salirte del área visible
|
|
189
|
+
var imgW = imageData.width * newZoom;
|
|
190
|
+
var imgH = imageData.height * newZoom;
|
|
191
|
+
var minX = Math.min(0, dispW - imgW);
|
|
192
|
+
var minY = Math.min(0, dispH - imgH);
|
|
193
|
+
offsetX = Math.max(minX, Math.min(offsetX, 0));
|
|
194
|
+
offsetY = Math.max(minY, Math.min(offsetY, 0));
|
|
195
|
+
setZoom(newZoom);
|
|
196
|
+
setOffset({
|
|
197
|
+
x: offsetX,
|
|
198
|
+
y: offsetY
|
|
199
|
+
});
|
|
200
|
+
} else {
|
|
201
|
+
// Regresa al zoom inicial y centra la imagen
|
|
202
|
+
var _dispW = wrapper.clientWidth;
|
|
203
|
+
var _dispH = wrapper.clientHeight;
|
|
204
|
+
var _imgW = imageData.width * minZoom;
|
|
205
|
+
var _imgH = imageData.height * minZoom;
|
|
206
|
+
var _offsetX = (_dispW - _imgW) / 2;
|
|
207
|
+
var _offsetY = (_dispH - _imgH) / 2;
|
|
208
|
+
setZoom(minZoom);
|
|
209
|
+
setOffset({
|
|
210
|
+
x: _offsetX,
|
|
211
|
+
y: _offsetY
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
(0, _react.useEffect)(function () {
|
|
216
|
+
if (!imageData || !containerRef.current) return;
|
|
217
|
+
var wrapper = containerRef.current;
|
|
218
|
+
var dispW = wrapper.clientWidth;
|
|
219
|
+
var dispH = wrapper.clientHeight;
|
|
220
|
+
var zoomW = dispW / imageData.width;
|
|
221
|
+
var zoomH = dispH / imageData.height;
|
|
222
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
223
|
+
setMinZoom(fitZoom);
|
|
224
|
+
setZoom(fitZoom);
|
|
225
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
226
|
+
|
|
227
|
+
// Centra la imagen al inicio
|
|
228
|
+
var imgW = imageData.width * fitZoom;
|
|
229
|
+
var imgH = imageData.height * fitZoom;
|
|
230
|
+
var offsetX = (dispW - imgW) / 2;
|
|
231
|
+
var offsetY = (dispH - imgH) / 2;
|
|
232
|
+
setOffset({
|
|
233
|
+
x: offsetX,
|
|
234
|
+
y: offsetY
|
|
235
|
+
});
|
|
236
|
+
// eslint-disable-next-line
|
|
237
|
+
}, [imageData, maxZoom, width, height]);
|
|
238
|
+
(0, _react.useEffect)(function () {
|
|
239
|
+
if (zoom === minZoom && imageData && containerRef.current) {
|
|
240
|
+
var dispW = containerRef.current.clientWidth;
|
|
241
|
+
var dispH = containerRef.current.clientHeight;
|
|
242
|
+
var imgW = imageData.width * minZoom;
|
|
243
|
+
var imgH = imageData.height * minZoom;
|
|
244
|
+
var offsetX = (dispW - imgW) / 2;
|
|
245
|
+
var offsetY = (dispH - imgH) / 2;
|
|
246
|
+
setOffset({
|
|
247
|
+
x: offsetX,
|
|
248
|
+
y: offsetY
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}, [zoom, minZoom, imageData]);
|
|
252
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
253
|
+
ref: containerRef,
|
|
254
|
+
style: {
|
|
255
|
+
width: width,
|
|
256
|
+
height: height,
|
|
257
|
+
userSelect: dragging ? 'none' : undefined
|
|
258
|
+
},
|
|
259
|
+
onDoubleClick: handleDoubleClick,
|
|
260
|
+
onMouseMove: onMouseMove,
|
|
261
|
+
onMouseUp: onMouseUp,
|
|
262
|
+
onMouseLeave: onMouseUp,
|
|
263
|
+
onTouchMove: onTouchMove,
|
|
264
|
+
onTouchEnd: onTouchEnd,
|
|
265
|
+
className: "image-zoom ".concat(bordered ? 'bordered' : '', " margin-bottom")
|
|
266
|
+
}, showHelp && /*#__PURE__*/_react["default"].createElement("div", {
|
|
267
|
+
className: "image-zoom-caption"
|
|
268
|
+
}, "Doble click para ampliar o reducir la imagen"), imageData ? /*#__PURE__*/_react["default"].createElement("img", {
|
|
269
|
+
src: src,
|
|
270
|
+
alt: alt,
|
|
271
|
+
draggable: false,
|
|
272
|
+
style: {
|
|
273
|
+
width: imageData.width * zoom,
|
|
274
|
+
height: imageData.height * zoom,
|
|
275
|
+
left: offset.x,
|
|
276
|
+
top: offset.y,
|
|
277
|
+
cursor: zoom > minZoom ? dragging ? 'grabbing' : 'grab' : 'default',
|
|
278
|
+
transition: dragging ? 'none' : 'left 0.1s, top 0.1s'
|
|
279
|
+
},
|
|
280
|
+
onMouseDown: zoom > minZoom ? onMouseDown : undefined,
|
|
281
|
+
onTouchStart: zoom > minZoom ? onTouchStart : undefined
|
|
282
|
+
}) : /*#__PURE__*/_react["default"].createElement(_util.Skeleton, {
|
|
283
|
+
width: "100%",
|
|
284
|
+
height: height
|
|
285
|
+
}));
|
|
286
|
+
};
|
|
287
|
+
ImageZoom.propTypes = {
|
|
288
|
+
src: _propTypes["default"].string.isRequired,
|
|
289
|
+
alt: _propTypes["default"].string,
|
|
290
|
+
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
291
|
+
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
292
|
+
bordered: _propTypes["default"].bool,
|
|
293
|
+
maxZoom: _propTypes["default"].number
|
|
294
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.Picture = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _util = require("../util");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
12
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
13
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
14
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
15
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
16
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
17
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
18
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
19
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
20
|
+
var Picture = exports.Picture = function Picture(_ref) {
|
|
21
|
+
var src = _ref.src,
|
|
22
|
+
alt = _ref.alt,
|
|
23
|
+
width = _ref.width,
|
|
24
|
+
height = _ref.height,
|
|
25
|
+
_ref$bordered = _ref.bordered,
|
|
26
|
+
bordered = _ref$bordered === void 0 ? false : _ref$bordered,
|
|
27
|
+
_ref$zoom = _ref.zoom,
|
|
28
|
+
zoom = _ref$zoom === void 0 ? 2 : _ref$zoom;
|
|
29
|
+
var _useState = (0, _react.useState)(),
|
|
30
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
31
|
+
imageData = _useState2[0],
|
|
32
|
+
setImageData = _useState2[1];
|
|
33
|
+
var _useState3 = (0, _react.useState)(false),
|
|
34
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
35
|
+
showZoom = _useState4[0],
|
|
36
|
+
setShowZoom = _useState4[1];
|
|
37
|
+
var _useState5 = (0, _react.useState)({
|
|
38
|
+
x: 0,
|
|
39
|
+
y: 0
|
|
40
|
+
}),
|
|
41
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
42
|
+
zoomPos = _useState6[0],
|
|
43
|
+
setZoomPos = _useState6[1];
|
|
44
|
+
var imgRef = (0, _react.useRef)(null);
|
|
45
|
+
|
|
46
|
+
// Detecta si es móvil (simple)
|
|
47
|
+
var isMobile = typeof window !== 'undefined' && /Mobi|Android/i.test(window.navigator.userAgent);
|
|
48
|
+
(0, _react.useEffect)(function () {
|
|
49
|
+
var image = new Image();
|
|
50
|
+
image.src = src;
|
|
51
|
+
image.onload = function () {
|
|
52
|
+
setImageData({
|
|
53
|
+
width: image.width,
|
|
54
|
+
height: image.height
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}, [src]);
|
|
58
|
+
|
|
59
|
+
// Tamaño del cuadro de zoom sobre la imagen
|
|
60
|
+
var ZOOM_BOX = 200;
|
|
61
|
+
|
|
62
|
+
// Calcula la posición del cuadro de zoom, limitado a la imagen
|
|
63
|
+
var rectX = 0,
|
|
64
|
+
rectY = 0;
|
|
65
|
+
if (imgRef.current) {
|
|
66
|
+
var imgRect = imgRef.current.getBoundingClientRect();
|
|
67
|
+
rectX = Math.max(0, Math.min(zoomPos.x - ZOOM_BOX / 2, imgRect.width - ZOOM_BOX));
|
|
68
|
+
rectY = Math.max(0, Math.min(zoomPos.y - ZOOM_BOX / 2, imgRect.height - ZOOM_BOX));
|
|
69
|
+
}
|
|
70
|
+
var handleMouseEnter = function handleMouseEnter() {
|
|
71
|
+
return setShowZoom(true);
|
|
72
|
+
};
|
|
73
|
+
var handleMouseMove = function handleMouseMove(e) {
|
|
74
|
+
if (!imgRef.current) return;
|
|
75
|
+
var rect = imgRef.current.getBoundingClientRect();
|
|
76
|
+
var x = e.clientX - rect.left;
|
|
77
|
+
var y = e.clientY - rect.top;
|
|
78
|
+
setZoomPos({
|
|
79
|
+
x: x,
|
|
80
|
+
y: y
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
84
|
+
return setShowZoom(false);
|
|
85
|
+
};
|
|
86
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
87
|
+
style: {
|
|
88
|
+
display: 'inline-block',
|
|
89
|
+
position: 'relative'
|
|
90
|
+
}
|
|
91
|
+
}, imageData ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("img", {
|
|
92
|
+
ref: imgRef,
|
|
93
|
+
src: src,
|
|
94
|
+
className: bordered ? 'bordered' : '',
|
|
95
|
+
alt: alt,
|
|
96
|
+
width: width,
|
|
97
|
+
height: height,
|
|
98
|
+
style: {
|
|
99
|
+
display: 'block',
|
|
100
|
+
cursor: !isMobile ? 'zoom-in' : undefined
|
|
101
|
+
},
|
|
102
|
+
onMouseEnter: !isMobile ? handleMouseEnter : undefined,
|
|
103
|
+
onMouseMove: !isMobile ? handleMouseMove : undefined,
|
|
104
|
+
onMouseLeave: !isMobile ? handleMouseLeave : undefined,
|
|
105
|
+
draggable: false
|
|
106
|
+
}), !isMobile && showZoom && /*#__PURE__*/_react["default"].createElement("div", {
|
|
107
|
+
style: {
|
|
108
|
+
position: 'absolute',
|
|
109
|
+
left: rectX,
|
|
110
|
+
top: rectY,
|
|
111
|
+
width: ZOOM_BOX,
|
|
112
|
+
height: ZOOM_BOX,
|
|
113
|
+
background: 'rgba(0,0,0,0.18)',
|
|
114
|
+
border: '2px solid #2196f3',
|
|
115
|
+
pointerEvents: 'none',
|
|
116
|
+
zIndex: 10
|
|
117
|
+
}
|
|
118
|
+
}), !isMobile && showZoom && /*#__PURE__*/_react["default"].createElement("div", {
|
|
119
|
+
style: {
|
|
120
|
+
position: 'absolute',
|
|
121
|
+
top: 0,
|
|
122
|
+
// left: zoomPos,
|
|
123
|
+
left: "calc(100% + 15px)",
|
|
124
|
+
// left: `calc(50% + ${zoomPos} + 16px)`,
|
|
125
|
+
width: ZOOM_BOX * zoom,
|
|
126
|
+
height: ZOOM_BOX * zoom,
|
|
127
|
+
border: '1px solid #ccc',
|
|
128
|
+
background: '#fff',
|
|
129
|
+
overflow: 'hidden',
|
|
130
|
+
zIndex: 1000,
|
|
131
|
+
boxShadow: '0 4px 16px rgba(0,0,0,0.12)',
|
|
132
|
+
pointerEvents: 'none'
|
|
133
|
+
}
|
|
134
|
+
}, /*#__PURE__*/_react["default"].createElement("img", {
|
|
135
|
+
src: src,
|
|
136
|
+
alt: alt,
|
|
137
|
+
style: {
|
|
138
|
+
position: 'absolute',
|
|
139
|
+
left: -rectX * zoom,
|
|
140
|
+
top: -rectY * zoom,
|
|
141
|
+
width: imgRef.current ? imgRef.current.width * zoom : undefined,
|
|
142
|
+
height: imgRef.current ? imgRef.current.height * zoom : undefined,
|
|
143
|
+
userSelect: 'none',
|
|
144
|
+
pointerEvents: 'none'
|
|
145
|
+
},
|
|
146
|
+
draggable: false
|
|
147
|
+
}))) : /*#__PURE__*/_react["default"].createElement(_util.Skeleton, {
|
|
148
|
+
width: width,
|
|
149
|
+
height: height
|
|
150
|
+
}));
|
|
151
|
+
};
|
|
152
|
+
Picture.propTypes = {
|
|
153
|
+
src: _propTypes["default"].string.isRequired,
|
|
154
|
+
alt: _propTypes["default"].string,
|
|
155
|
+
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
156
|
+
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
157
|
+
bordered: _propTypes["default"].bool,
|
|
158
|
+
zoom: _propTypes["default"].number
|
|
159
|
+
};
|