gdx-ui 1.4.0 → 1.6.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 +4 -6
- package/components/button/IconButton.js +19 -26
- package/components/button/index.js +0 -11
- package/components/expandable/Expandable.js +4 -5
- package/components/forms/Input.js +4 -5
- package/components/images/Picture.js +159 -0
- package/components/images/PictureZoom.js +296 -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 +4 -4
- package/components/information/Information.js +1 -1
- package/components/navbar/NavbarResponsive.js +3 -3
- package/components/navbar/index.js +11 -0
- package/components/scroller/ListScroller.js +113 -0
- package/components/snackbar/Snackbar.js +6 -9
- package/components/tree/Tree.js +4 -6
- package/package.json +1 -1
- package/components/button/CircleButton.js +0 -33
- package/components/cards/Card.js +0 -22
- package/components/cards/CardScroller.js +0 -114
|
@@ -0,0 +1,296 @@
|
|
|
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.PictureZoom = 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 PictureZoom = exports.PictureZoom = function PictureZoom(_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
|
+
var _useState = (0, _react.useState)(),
|
|
34
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
35
|
+
imageData = _useState2[0],
|
|
36
|
+
setImageData = _useState2[1];
|
|
37
|
+
var _useState3 = (0, _react.useState)(1),
|
|
38
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
39
|
+
zoom = _useState4[0],
|
|
40
|
+
setZoom = _useState4[1];
|
|
41
|
+
var _useState5 = (0, _react.useState)(1),
|
|
42
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
43
|
+
minZoom = _useState6[0],
|
|
44
|
+
setMinZoom = _useState6[1];
|
|
45
|
+
var _useState7 = (0, _react.useState)(maxZoom),
|
|
46
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
47
|
+
maxZoomState = _useState8[0],
|
|
48
|
+
setMaxZoomState = _useState8[1];
|
|
49
|
+
var _useState9 = (0, _react.useState)({
|
|
50
|
+
x: 0,
|
|
51
|
+
y: 0
|
|
52
|
+
}),
|
|
53
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
54
|
+
offset = _useState10[0],
|
|
55
|
+
setOffset = _useState10[1];
|
|
56
|
+
var _useState11 = (0, _react.useState)(false),
|
|
57
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
58
|
+
dragging = _useState12[0],
|
|
59
|
+
setDragging = _useState12[1];
|
|
60
|
+
var _useState13 = (0, _react.useState)({
|
|
61
|
+
x: 0,
|
|
62
|
+
y: 0
|
|
63
|
+
}),
|
|
64
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
65
|
+
dragStart = _useState14[0],
|
|
66
|
+
setDragStart = _useState14[1];
|
|
67
|
+
var _useState15 = (0, _react.useState)({
|
|
68
|
+
x: 0,
|
|
69
|
+
y: 0
|
|
70
|
+
}),
|
|
71
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
72
|
+
imgStart = _useState16[0],
|
|
73
|
+
setImgStart = _useState16[1];
|
|
74
|
+
var containerRef = (0, _react.useRef)(null);
|
|
75
|
+
|
|
76
|
+
// Cuando la imagen y el wrapper están listos, calcula el zoom mínimo y máximo
|
|
77
|
+
(0, _react.useEffect)(function () {
|
|
78
|
+
if (!src) return;
|
|
79
|
+
var image = new Image();
|
|
80
|
+
image.src = src;
|
|
81
|
+
image.onload = function () {
|
|
82
|
+
setImageData({
|
|
83
|
+
width: image.width,
|
|
84
|
+
height: image.height
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
}, [src]);
|
|
88
|
+
(0, _react.useEffect)(function () {
|
|
89
|
+
if (!imageData || !containerRef.current) return;
|
|
90
|
+
var wrapper = containerRef.current;
|
|
91
|
+
var dispW = wrapper.clientWidth;
|
|
92
|
+
var dispH = wrapper.clientHeight;
|
|
93
|
+
var zoomW = dispW / imageData.width;
|
|
94
|
+
var zoomH = dispH / imageData.height;
|
|
95
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
96
|
+
setMinZoom(fitZoom);
|
|
97
|
+
setZoom(fitZoom);
|
|
98
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
99
|
+
setOffset({
|
|
100
|
+
x: 0,
|
|
101
|
+
y: 0
|
|
102
|
+
});
|
|
103
|
+
// eslint-disable-next-line
|
|
104
|
+
}, [imageData, maxZoom, width, height]);
|
|
105
|
+
|
|
106
|
+
// Limita el offset para que la imagen no se salga del área visible
|
|
107
|
+
var clampOffset = function clampOffset(ox, oy, zoomVal) {
|
|
108
|
+
if (!imageData || !containerRef.current) return {
|
|
109
|
+
x: 0,
|
|
110
|
+
y: 0
|
|
111
|
+
};
|
|
112
|
+
var dispW = containerRef.current.clientWidth;
|
|
113
|
+
var dispH = containerRef.current.clientHeight;
|
|
114
|
+
var imgW = imageData.width * zoomVal;
|
|
115
|
+
var imgH = imageData.height * zoomVal;
|
|
116
|
+
var minX = Math.min(0, dispW - imgW);
|
|
117
|
+
var minY = Math.min(0, dispH - imgH);
|
|
118
|
+
return {
|
|
119
|
+
x: Math.max(minX, Math.min(ox, 0)),
|
|
120
|
+
y: Math.max(minY, Math.min(oy, 0))
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// Drag handlers (mouse & touch)
|
|
125
|
+
var startDrag = function startDrag(clientX, clientY) {
|
|
126
|
+
setDragging(true);
|
|
127
|
+
setDragStart({
|
|
128
|
+
x: clientX,
|
|
129
|
+
y: clientY
|
|
130
|
+
});
|
|
131
|
+
setImgStart(offset);
|
|
132
|
+
};
|
|
133
|
+
var onMouseDown = function onMouseDown(e) {
|
|
134
|
+
if (zoom === minZoom) return;
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
startDrag(e.clientX, e.clientY);
|
|
137
|
+
};
|
|
138
|
+
var onMouseMove = function onMouseMove(e) {
|
|
139
|
+
if (!dragging) return;
|
|
140
|
+
var dx = e.clientX - dragStart.x;
|
|
141
|
+
var dy = e.clientY - dragStart.y;
|
|
142
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
143
|
+
};
|
|
144
|
+
var onMouseUp = function onMouseUp() {
|
|
145
|
+
return setDragging(false);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// Touch events
|
|
149
|
+
var onTouchStart = function onTouchStart(e) {
|
|
150
|
+
if (zoom === minZoom) return;
|
|
151
|
+
if (e.touches.length === 1) {
|
|
152
|
+
var t = e.touches[0];
|
|
153
|
+
startDrag(t.clientX, t.clientY);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var onTouchMove = function onTouchMove(e) {
|
|
157
|
+
if (!dragging || e.touches.length !== 1) return;
|
|
158
|
+
var t = e.touches[0];
|
|
159
|
+
var dx = t.clientX - dragStart.x;
|
|
160
|
+
var dy = t.clientY - dragStart.y;
|
|
161
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
162
|
+
};
|
|
163
|
+
var onTouchEnd = function onTouchEnd() {
|
|
164
|
+
return setDragging(false);
|
|
165
|
+
};
|
|
166
|
+
var handleDoubleClick = function handleDoubleClick(e) {
|
|
167
|
+
if (!imageData || !containerRef.current) return;
|
|
168
|
+
var wrapper = containerRef.current;
|
|
169
|
+
var rect = wrapper.getBoundingClientRect();
|
|
170
|
+
var clickX = e.clientX - rect.left;
|
|
171
|
+
var clickY = e.clientY - rect.top;
|
|
172
|
+
if (zoom < maxZoomState) {
|
|
173
|
+
// Zoom al máximo desde el punto del click
|
|
174
|
+
var newZoom = maxZoomState;
|
|
175
|
+
var dispW = wrapper.clientWidth;
|
|
176
|
+
var dispH = wrapper.clientHeight;
|
|
177
|
+
|
|
178
|
+
// Calcula el punto relativo en la imagen original
|
|
179
|
+
var relX = (clickX - offset.x) / zoom;
|
|
180
|
+
var relY = (clickY - offset.y) / zoom;
|
|
181
|
+
|
|
182
|
+
// Calcula el nuevo offset para centrar ese punto
|
|
183
|
+
var offsetX = dispW / 2 - relX * newZoom;
|
|
184
|
+
var offsetY = dispH / 2 - relY * newZoom;
|
|
185
|
+
|
|
186
|
+
// Limita el offset para no salirte del área visible
|
|
187
|
+
var imgW = imageData.width * newZoom;
|
|
188
|
+
var imgH = imageData.height * newZoom;
|
|
189
|
+
var minX = Math.min(0, dispW - imgW);
|
|
190
|
+
var minY = Math.min(0, dispH - imgH);
|
|
191
|
+
offsetX = Math.max(minX, Math.min(offsetX, 0));
|
|
192
|
+
offsetY = Math.max(minY, Math.min(offsetY, 0));
|
|
193
|
+
setZoom(newZoom);
|
|
194
|
+
setOffset({
|
|
195
|
+
x: offsetX,
|
|
196
|
+
y: offsetY
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
// Regresa al zoom inicial y centra la imagen
|
|
200
|
+
var _dispW = wrapper.clientWidth;
|
|
201
|
+
var _dispH = wrapper.clientHeight;
|
|
202
|
+
var _imgW = imageData.width * minZoom;
|
|
203
|
+
var _imgH = imageData.height * minZoom;
|
|
204
|
+
var _offsetX = (_dispW - _imgW) / 2;
|
|
205
|
+
var _offsetY = (_dispH - _imgH) / 2;
|
|
206
|
+
setZoom(minZoom);
|
|
207
|
+
setOffset({
|
|
208
|
+
x: _offsetX,
|
|
209
|
+
y: _offsetY
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
(0, _react.useEffect)(function () {
|
|
214
|
+
if (!imageData || !containerRef.current) return;
|
|
215
|
+
var wrapper = containerRef.current;
|
|
216
|
+
var dispW = wrapper.clientWidth;
|
|
217
|
+
var dispH = wrapper.clientHeight;
|
|
218
|
+
var zoomW = dispW / imageData.width;
|
|
219
|
+
var zoomH = dispH / imageData.height;
|
|
220
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
221
|
+
setMinZoom(fitZoom);
|
|
222
|
+
setZoom(fitZoom);
|
|
223
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
224
|
+
|
|
225
|
+
// Centra la imagen al inicio
|
|
226
|
+
var imgW = imageData.width * fitZoom;
|
|
227
|
+
var imgH = imageData.height * fitZoom;
|
|
228
|
+
var offsetX = (dispW - imgW) / 2;
|
|
229
|
+
var offsetY = (dispH - imgH) / 2;
|
|
230
|
+
setOffset({
|
|
231
|
+
x: offsetX,
|
|
232
|
+
y: offsetY
|
|
233
|
+
});
|
|
234
|
+
// eslint-disable-next-line
|
|
235
|
+
}, [imageData, maxZoom, width, height]);
|
|
236
|
+
(0, _react.useEffect)(function () {
|
|
237
|
+
if (zoom === minZoom && imageData && containerRef.current) {
|
|
238
|
+
var dispW = containerRef.current.clientWidth;
|
|
239
|
+
var dispH = containerRef.current.clientHeight;
|
|
240
|
+
var imgW = imageData.width * minZoom;
|
|
241
|
+
var imgH = imageData.height * minZoom;
|
|
242
|
+
var offsetX = (dispW - imgW) / 2;
|
|
243
|
+
var offsetY = (dispH - imgH) / 2;
|
|
244
|
+
setOffset({
|
|
245
|
+
x: offsetX,
|
|
246
|
+
y: offsetY
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}, [zoom, minZoom, imageData]);
|
|
250
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
251
|
+
ref: containerRef,
|
|
252
|
+
style: {
|
|
253
|
+
width: width,
|
|
254
|
+
height: height,
|
|
255
|
+
overflow: 'hidden',
|
|
256
|
+
position: 'relative',
|
|
257
|
+
touchAction: 'none',
|
|
258
|
+
userSelect: dragging ? 'none' : undefined,
|
|
259
|
+
background: '#FFF'
|
|
260
|
+
},
|
|
261
|
+
onDoubleClick: handleDoubleClick,
|
|
262
|
+
onMouseMove: onMouseMove,
|
|
263
|
+
onMouseUp: onMouseUp,
|
|
264
|
+
onMouseLeave: onMouseUp,
|
|
265
|
+
onTouchMove: onTouchMove,
|
|
266
|
+
onTouchEnd: onTouchEnd,
|
|
267
|
+
className: "".concat(bordered ? 'bordered' : '', " margin-bottom")
|
|
268
|
+
}, 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
|
+
position: 'absolute',
|
|
276
|
+
left: offset.x,
|
|
277
|
+
top: offset.y,
|
|
278
|
+
cursor: zoom > minZoom ? dragging ? 'grabbing' : 'grab' : 'default',
|
|
279
|
+
transition: dragging ? 'none' : 'left 0.1s, top 0.1s',
|
|
280
|
+
userSelect: 'none'
|
|
281
|
+
},
|
|
282
|
+
onMouseDown: zoom > minZoom ? onMouseDown : undefined,
|
|
283
|
+
onTouchStart: zoom > minZoom ? onTouchStart : undefined
|
|
284
|
+
}) : /*#__PURE__*/_react["default"].createElement(_util.Skeleton, {
|
|
285
|
+
width: "100%",
|
|
286
|
+
height: height
|
|
287
|
+
}));
|
|
288
|
+
};
|
|
289
|
+
PictureZoom.propTypes = {
|
|
290
|
+
src: _propTypes["default"].string.isRequired,
|
|
291
|
+
alt: _propTypes["default"].string,
|
|
292
|
+
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
293
|
+
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
294
|
+
bordered: _propTypes["default"].bool,
|
|
295
|
+
maxZoom: _propTypes["default"].number
|
|
296
|
+
};
|
|
@@ -0,0 +1,308 @@
|
|
|
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.PictureZoom = 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 PictureZoom = exports.PictureZoom = function PictureZoom(_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
|
+
var _useState = (0, _react.useState)(),
|
|
34
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
35
|
+
imageData = _useState2[0],
|
|
36
|
+
setImageData = _useState2[1];
|
|
37
|
+
var _useState3 = (0, _react.useState)(1),
|
|
38
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
39
|
+
zoom = _useState4[0],
|
|
40
|
+
setZoom = _useState4[1];
|
|
41
|
+
var _useState5 = (0, _react.useState)(1),
|
|
42
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
43
|
+
minZoom = _useState6[0],
|
|
44
|
+
setMinZoom = _useState6[1];
|
|
45
|
+
var _useState7 = (0, _react.useState)(maxZoom),
|
|
46
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
47
|
+
maxZoomState = _useState8[0],
|
|
48
|
+
setMaxZoomState = _useState8[1];
|
|
49
|
+
var _useState9 = (0, _react.useState)({
|
|
50
|
+
x: 0,
|
|
51
|
+
y: 0
|
|
52
|
+
}),
|
|
53
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
54
|
+
offset = _useState10[0],
|
|
55
|
+
setOffset = _useState10[1];
|
|
56
|
+
var _useState11 = (0, _react.useState)(false),
|
|
57
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
58
|
+
dragging = _useState12[0],
|
|
59
|
+
setDragging = _useState12[1];
|
|
60
|
+
var _useState13 = (0, _react.useState)({
|
|
61
|
+
x: 0,
|
|
62
|
+
y: 0
|
|
63
|
+
}),
|
|
64
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
65
|
+
dragStart = _useState14[0],
|
|
66
|
+
setDragStart = _useState14[1];
|
|
67
|
+
var _useState15 = (0, _react.useState)({
|
|
68
|
+
x: 0,
|
|
69
|
+
y: 0
|
|
70
|
+
}),
|
|
71
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
72
|
+
imgStart = _useState16[0],
|
|
73
|
+
setImgStart = _useState16[1];
|
|
74
|
+
var containerRef = (0, _react.useRef)(null);
|
|
75
|
+
|
|
76
|
+
// Cuando la imagen y el wrapper están listos, calcula el zoom mínimo y máximo
|
|
77
|
+
(0, _react.useEffect)(function () {
|
|
78
|
+
if (!src) return;
|
|
79
|
+
var image = new Image();
|
|
80
|
+
image.src = src;
|
|
81
|
+
image.onload = function () {
|
|
82
|
+
setImageData({
|
|
83
|
+
width: image.width,
|
|
84
|
+
height: image.height
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
}, [src]);
|
|
88
|
+
(0, _react.useEffect)(function () {
|
|
89
|
+
if (!imageData || !containerRef.current) return;
|
|
90
|
+
var wrapper = containerRef.current;
|
|
91
|
+
var dispW = wrapper.clientWidth;
|
|
92
|
+
var dispH = wrapper.clientHeight;
|
|
93
|
+
var zoomW = dispW / imageData.width;
|
|
94
|
+
var zoomH = dispH / imageData.height;
|
|
95
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
96
|
+
setMinZoom(fitZoom);
|
|
97
|
+
setZoom(fitZoom);
|
|
98
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
99
|
+
setOffset({
|
|
100
|
+
x: 0,
|
|
101
|
+
y: 0
|
|
102
|
+
});
|
|
103
|
+
// eslint-disable-next-line
|
|
104
|
+
}, [imageData, maxZoom, width, height]);
|
|
105
|
+
|
|
106
|
+
// Limita el offset para que la imagen no se salga del área visible
|
|
107
|
+
var clampOffset = function clampOffset(ox, oy, zoomVal) {
|
|
108
|
+
if (!imageData || !containerRef.current) return {
|
|
109
|
+
x: 0,
|
|
110
|
+
y: 0
|
|
111
|
+
};
|
|
112
|
+
var dispW = containerRef.current.clientWidth;
|
|
113
|
+
var dispH = containerRef.current.clientHeight;
|
|
114
|
+
var imgW = imageData.width * zoomVal;
|
|
115
|
+
var imgH = imageData.height * zoomVal;
|
|
116
|
+
var minX = Math.min(0, dispW - imgW);
|
|
117
|
+
var minY = Math.min(0, dispH - imgH);
|
|
118
|
+
return {
|
|
119
|
+
x: Math.max(minX, Math.min(ox, 0)),
|
|
120
|
+
y: Math.max(minY, Math.min(oy, 0))
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// Zoom handlers
|
|
125
|
+
var handleZoom = function handleZoom(delta) {
|
|
126
|
+
setZoom(function (prev) {
|
|
127
|
+
var next = Math.max(minZoom, Math.min(prev + delta, maxZoomState));
|
|
128
|
+
setOffset(function (current) {
|
|
129
|
+
return clampOffset(current.x, current.y, next);
|
|
130
|
+
});
|
|
131
|
+
return next;
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Wheel zoom (más suave)
|
|
136
|
+
// const handleWheel = (e) => {
|
|
137
|
+
// e.preventDefault();
|
|
138
|
+
// const delta = e.deltaY < 0 ? -0.05 : 0.05;
|
|
139
|
+
// handleZoom(delta);
|
|
140
|
+
// };
|
|
141
|
+
|
|
142
|
+
// Drag handlers (mouse & touch)
|
|
143
|
+
var startDrag = function startDrag(clientX, clientY) {
|
|
144
|
+
setDragging(true);
|
|
145
|
+
setDragStart({
|
|
146
|
+
x: clientX,
|
|
147
|
+
y: clientY
|
|
148
|
+
});
|
|
149
|
+
setImgStart(offset);
|
|
150
|
+
};
|
|
151
|
+
var onMouseDown = function onMouseDown(e) {
|
|
152
|
+
if (zoom === minZoom) return;
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
startDrag(e.clientX, e.clientY);
|
|
155
|
+
};
|
|
156
|
+
var onMouseMove = function onMouseMove(e) {
|
|
157
|
+
if (!dragging) return;
|
|
158
|
+
var dx = e.clientX - dragStart.x;
|
|
159
|
+
var dy = e.clientY - dragStart.y;
|
|
160
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
161
|
+
};
|
|
162
|
+
var onMouseUp = function onMouseUp() {
|
|
163
|
+
return setDragging(false);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Touch events
|
|
167
|
+
var onTouchStart = function onTouchStart(e) {
|
|
168
|
+
if (zoom === minZoom) return;
|
|
169
|
+
if (e.touches.length === 1) {
|
|
170
|
+
var t = e.touches[0];
|
|
171
|
+
startDrag(t.clientX, t.clientY);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
var onTouchMove = function onTouchMove(e) {
|
|
175
|
+
if (!dragging || e.touches.length !== 1) return;
|
|
176
|
+
var t = e.touches[0];
|
|
177
|
+
var dx = t.clientX - dragStart.x;
|
|
178
|
+
var dy = t.clientY - dragStart.y;
|
|
179
|
+
setOffset(clampOffset(imgStart.x + dx, imgStart.y + dy, zoom));
|
|
180
|
+
};
|
|
181
|
+
var onTouchEnd = function onTouchEnd() {
|
|
182
|
+
return setDragging(false);
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// Reset offset if zoom regresa al mínimo
|
|
186
|
+
// useEffect(() => {
|
|
187
|
+
// if (zoom === minZoom) setOffset({ x: 0, y: 0 });
|
|
188
|
+
// }, [zoom, minZoom]);
|
|
189
|
+
|
|
190
|
+
(0, _react.useEffect)(function () {
|
|
191
|
+
if (!imageData || !containerRef.current) return;
|
|
192
|
+
var wrapper = containerRef.current;
|
|
193
|
+
var dispW = wrapper.clientWidth;
|
|
194
|
+
var dispH = wrapper.clientHeight;
|
|
195
|
+
var zoomW = dispW / imageData.width;
|
|
196
|
+
var zoomH = dispH / imageData.height;
|
|
197
|
+
var fitZoom = Math.min(zoomW, zoomH);
|
|
198
|
+
setMinZoom(fitZoom);
|
|
199
|
+
setZoom(fitZoom);
|
|
200
|
+
setMaxZoomState(Math.max(fitZoom, maxZoom));
|
|
201
|
+
|
|
202
|
+
// Centra la imagen al inicio
|
|
203
|
+
var imgW = imageData.width * fitZoom;
|
|
204
|
+
var imgH = imageData.height * fitZoom;
|
|
205
|
+
var offsetX = (dispW - imgW) / 2;
|
|
206
|
+
var offsetY = (dispH - imgH) / 2;
|
|
207
|
+
setOffset({
|
|
208
|
+
x: offsetX,
|
|
209
|
+
y: offsetY
|
|
210
|
+
});
|
|
211
|
+
// eslint-disable-next-line
|
|
212
|
+
}, [imageData, maxZoom, width, height]);
|
|
213
|
+
(0, _react.useEffect)(function () {
|
|
214
|
+
if (zoom === minZoom && imageData && containerRef.current) {
|
|
215
|
+
var dispW = containerRef.current.clientWidth;
|
|
216
|
+
var dispH = containerRef.current.clientHeight;
|
|
217
|
+
var imgW = imageData.width * minZoom;
|
|
218
|
+
var imgH = imageData.height * minZoom;
|
|
219
|
+
var offsetX = (dispW - imgW) / 2;
|
|
220
|
+
var offsetY = (dispH - imgH) / 2;
|
|
221
|
+
setOffset({
|
|
222
|
+
x: offsetX,
|
|
223
|
+
y: offsetY
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}, [zoom, minZoom, imageData]);
|
|
227
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
228
|
+
ref: containerRef,
|
|
229
|
+
style: {
|
|
230
|
+
width: width,
|
|
231
|
+
height: height,
|
|
232
|
+
overflow: 'hidden',
|
|
233
|
+
position: 'relative',
|
|
234
|
+
touchAction: 'none',
|
|
235
|
+
userSelect: dragging ? 'none' : undefined,
|
|
236
|
+
background: '#FFF'
|
|
237
|
+
}
|
|
238
|
+
// onWheel={handleWheel}
|
|
239
|
+
,
|
|
240
|
+
onMouseMove: onMouseMove,
|
|
241
|
+
onMouseUp: onMouseUp,
|
|
242
|
+
onMouseLeave: onMouseUp,
|
|
243
|
+
onTouchMove: onTouchMove,
|
|
244
|
+
onTouchEnd: onTouchEnd,
|
|
245
|
+
className: "".concat(bordered ? 'bordered' : '', " margin-bottom")
|
|
246
|
+
}, imageData ? /*#__PURE__*/_react["default"].createElement("img", {
|
|
247
|
+
src: src,
|
|
248
|
+
alt: alt,
|
|
249
|
+
draggable: false,
|
|
250
|
+
style: {
|
|
251
|
+
width: imageData.width * zoom,
|
|
252
|
+
height: imageData.height * zoom,
|
|
253
|
+
position: 'absolute',
|
|
254
|
+
left: offset.x,
|
|
255
|
+
top: offset.y,
|
|
256
|
+
cursor: zoom > minZoom ? dragging ? 'grabbing' : 'grab' : 'default',
|
|
257
|
+
transition: dragging ? 'none' : 'left 0.1s, top 0.1s',
|
|
258
|
+
userSelect: 'none'
|
|
259
|
+
},
|
|
260
|
+
onMouseDown: zoom > minZoom ? onMouseDown : undefined,
|
|
261
|
+
onTouchStart: zoom > minZoom ? onTouchStart : undefined
|
|
262
|
+
}) : /*#__PURE__*/_react["default"].createElement(_util.Skeleton, {
|
|
263
|
+
width: "100%",
|
|
264
|
+
height: height
|
|
265
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
266
|
+
style: {
|
|
267
|
+
position: 'absolute',
|
|
268
|
+
right: 8,
|
|
269
|
+
bottom: 8,
|
|
270
|
+
display: 'flex',
|
|
271
|
+
flexDirection: 'column',
|
|
272
|
+
gap: 15,
|
|
273
|
+
zIndex: 10
|
|
274
|
+
}
|
|
275
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
276
|
+
icon: _freeSolidSvgIcons.faPlus,
|
|
277
|
+
type: "button",
|
|
278
|
+
bg: "solid",
|
|
279
|
+
style: {
|
|
280
|
+
cursor: zoom < maxZoomState ? 'pointer' : 'not-allowed'
|
|
281
|
+
},
|
|
282
|
+
onClick: function onClick() {
|
|
283
|
+
return handleZoom(0.5);
|
|
284
|
+
},
|
|
285
|
+
disabled: zoom >= maxZoomState,
|
|
286
|
+
"aria-label": "Zoom in"
|
|
287
|
+
}), /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
288
|
+
bg: "solid",
|
|
289
|
+
icon: _freeSolidSvgIcons.faMinus,
|
|
290
|
+
type: "button",
|
|
291
|
+
onClick: function onClick() {
|
|
292
|
+
return handleZoom(-0.5);
|
|
293
|
+
},
|
|
294
|
+
disabled: zoom <= minZoom,
|
|
295
|
+
"aria-label": "Zoom out",
|
|
296
|
+
style: {
|
|
297
|
+
cursor: zoom > minZoom ? 'pointer' : 'not-allowed'
|
|
298
|
+
}
|
|
299
|
+
})));
|
|
300
|
+
};
|
|
301
|
+
PictureZoom.propTypes = {
|
|
302
|
+
src: _propTypes["default"].string.isRequired,
|
|
303
|
+
alt: _propTypes["default"].string,
|
|
304
|
+
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
305
|
+
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
306
|
+
bordered: _propTypes["default"].bool,
|
|
307
|
+
maxZoom: _propTypes["default"].number
|
|
308
|
+
};
|
|
@@ -4,7 +4,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.Picture = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _util = require("../util");
|
|
@@ -17,7 +17,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
17
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
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
19
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
20
|
-
var
|
|
20
|
+
var Picture = exports.Picture = function Picture(_ref) {
|
|
21
21
|
var src = _ref.src,
|
|
22
22
|
alt = _ref.alt,
|
|
23
23
|
width = _ref.width,
|
|
@@ -51,7 +51,7 @@ var Image = exports.Image = function Image(_ref) {
|
|
|
51
51
|
height: height
|
|
52
52
|
});
|
|
53
53
|
};
|
|
54
|
-
|
|
54
|
+
Picture.propTypes = {
|
|
55
55
|
src: _propTypes["default"].string.isRequired,
|
|
56
56
|
alt: _propTypes["default"].string,
|
|
57
57
|
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
@@ -11,6 +11,7 @@ var _util = require("../util");
|
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
12
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
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 _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
14
15
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
15
16
|
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
17
|
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); }
|
|
@@ -23,7 +24,8 @@ var Thumb = exports.Thumb = function Thumb(_ref) {
|
|
|
23
24
|
_ref$bordered = _ref.bordered,
|
|
24
25
|
bordered = _ref$bordered === void 0 ? false : _ref$bordered,
|
|
25
26
|
_ref$size = _ref.size,
|
|
26
|
-
size = _ref$size === void 0 ? 'medium' : _ref$size
|
|
27
|
+
size = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
28
|
+
onClick = _ref.onClick;
|
|
27
29
|
var _useState = (0, _react.useState)(),
|
|
28
30
|
_useState2 = _slicedToArray(_useState, 2),
|
|
29
31
|
imageData = _useState2[0],
|
|
@@ -40,9 +42,18 @@ var Thumb = exports.Thumb = function Thumb(_ref) {
|
|
|
40
42
|
});
|
|
41
43
|
};
|
|
42
44
|
}, [src]);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
var isClickable = typeof onClick === 'function';
|
|
46
|
+
return /*#__PURE__*/_react["default"].createElement("div", _extends({
|
|
47
|
+
className: "thumb thumb-".concat(size, " ").concat(bordered ? 'thumb-bordered' : '', " ").concat(isClickable ? 'clickable bordered-hover' : ''),
|
|
48
|
+
onClick: true
|
|
49
|
+
}, isClickable && {
|
|
50
|
+
onClick: onClick,
|
|
51
|
+
role: 'button',
|
|
52
|
+
tabIndex: 0,
|
|
53
|
+
onKeyDown: function onKeyDown(e) {
|
|
54
|
+
if (e.key === 'Enter' || e.key === ' ') onClick(e);
|
|
55
|
+
}
|
|
56
|
+
}), imageData ? /*#__PURE__*/_react["default"].createElement("img", {
|
|
46
57
|
src: src,
|
|
47
58
|
alt: alt,
|
|
48
59
|
className: "center-by-".concat(imageData.width > imageData.height ? 'width' : 'height')
|
|
@@ -54,5 +65,6 @@ Thumb.propTypes = {
|
|
|
54
65
|
src: _propTypes["default"].string.isRequired,
|
|
55
66
|
alt: _propTypes["default"].string,
|
|
56
67
|
bordered: _propTypes["default"].bool,
|
|
57
|
-
size: _propTypes["default"].oneOf(['smallest', 'small', 'medium', 'large', 'largest'])
|
|
68
|
+
size: _propTypes["default"].oneOf(['smallest', 'small', 'medium', 'large', 'largest']),
|
|
69
|
+
onClick: _propTypes["default"].func
|
|
58
70
|
};
|