gdx-ui 1.15.3 → 2.0.1

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.
Files changed (56) hide show
  1. package/base.css +1 -1
  2. package/components/autocomplete/Autocomplete.js +64 -53
  3. package/components/badge/Badge.js +2 -2
  4. package/components/box/Box.js +34 -31
  5. package/components/dialog/Dialog.js +15 -26
  6. package/components/editable/Editable.js +105 -95
  7. package/components/editable/EditableArea.js +3 -0
  8. package/components/flex/Flex.js +51 -22
  9. package/components/forms/LabelInput.js +13 -4
  10. package/components/forms/LabelValue.js +13 -4
  11. package/components/images/CarouselImages.js +11 -12
  12. package/components/images/Img.js +14 -26
  13. package/components/images/Thumb.js +16 -40
  14. package/components/images/{ImageZoom.js → ZoomImage.js} +74 -111
  15. package/components/images/{PictureZoomBtns.js → ZoomImageButtons.js} +50 -63
  16. package/components/images/{Picture.js → ZoomImageSquare.js} +3 -3
  17. package/components/images/index.js +33 -11
  18. package/components/images/useImageLoader.js +76 -0
  19. package/components/list/ScrollableList.js +1 -1
  20. package/components/snackbar/Snackbar.js +1 -1
  21. package/components/table/Table.js +14 -1
  22. package/components/util/Note.js +14 -5
  23. package/components/util/Text.js +41 -9
  24. package/components/util/Title.js +35 -8
  25. package/components/util/index.js +0 -11
  26. package/components/widget/Widget.js +16 -5
  27. package/hooks/index.js +11 -0
  28. package/hooks/useAutocomplete.js +103 -0
  29. package/package.json +1 -1
  30. package/stories/box/Box.stories.js +32 -0
  31. package/stories/editable/Editable.stories.js +26 -0
  32. package/stories/editable/Editor.stories.js +33 -0
  33. package/stories/forms/Autocomplete.stories.js +101 -0
  34. package/stories/images/CarouselImages.stories.js +31 -0
  35. package/stories/images/{images.stories.js → Images.stories.js} +1 -1
  36. package/stories/images/ZoomImage.stories.js +24 -0
  37. package/stories/images/ZoomImageButtons.stories.js +23 -0
  38. package/stories/images/ZoomImageSquare.stories.js +23 -0
  39. package/stories/layout/Flex.stories.js +180 -0
  40. package/stories/list/ScrollableList.stories.js +37 -8
  41. package/stories/utils/Badge.stories.js +29 -0
  42. package/stories/utils/Expanded.stories.js +18 -7
  43. package/stories/utils/Loader.stories.js +32 -0
  44. package/stories/utils/Note.stories.js +38 -0
  45. package/stories/utils/Snackbar.stories.js +46 -0
  46. package/stories/utils/Text.stories.js +40 -0
  47. package/stories/utils/Tooltip.stories.js +22 -0
  48. package/stories/widget/Widget.stories.js +59 -0
  49. package/components/images/PictureZoomSquare.js +0 -60
  50. package/components/list/SortableList.js +0 -138
  51. package/components/list/SortableListOLD.js +0 -121
  52. package/components/scroller/ListScroller.js +0 -113
  53. package/components/util/Anchor.js +0 -30
  54. package/stories/flex/Flex.stories.js +0 -35
  55. package/stories/list/SorteableList.stories.js +0 -45
  56. /package/stories/images/{thumb.stories.js → Thumb.stories.js} +0 -0
@@ -1,61 +1,37 @@
1
1
  "use strict";
2
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
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.Thumb = void 0;
8
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = _interopRequireDefault(require("react"));
9
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
9
  var _util = require("../util");
10
+ var _useImageLoader2 = require("./useImageLoader");
11
11
  var _noImage = _interopRequireDefault(require("../../assets/no-image.jpg"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
13
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
15
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
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."); }
17
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
18
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
- 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; } }
20
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } // import noImage from '../../../assets/logo.svg';
13
+ // import noImage from '../../../assets/logo.svg';
14
+
21
15
  var Thumb = exports.Thumb = function Thumb(_ref) {
22
16
  var src = _ref.src,
23
17
  alt = _ref.alt,
24
18
  _ref$bordered = _ref.bordered,
25
19
  bordered = _ref$bordered === void 0 ? false : _ref$bordered,
26
20
  _ref$size = _ref.size,
27
- size = _ref$size === void 0 ? 'medium' : _ref$size,
28
- onClick = _ref.onClick;
29
- var _useState = (0, _react.useState)(),
30
- _useState2 = _slicedToArray(_useState, 2),
31
- imageData = _useState2[0],
32
- setImageData = _useState2[1];
33
- (0, _react.useEffect)(function () {
34
- var image = new Image();
35
- image.src = src;
36
- image.onload = function () {
37
- var width = image.width,
38
- height = image.height;
39
- setImageData({
40
- width: width,
41
- height: height
42
- });
43
- };
44
- }, [src]);
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
- }, isClickable && {
49
- onClick: onClick,
50
- role: 'button',
51
- tabIndex: 0,
52
- onKeyDown: function onKeyDown(e) {
53
- if (e.key === 'Enter' || e.key === ' ') onClick(e);
54
- }
55
- }), imageData ? /*#__PURE__*/_react["default"].createElement("img", {
21
+ size = _ref$size === void 0 ? 'medium' : _ref$size;
22
+ var _useImageLoader = (0, _useImageLoader2.useImageLoader)(src),
23
+ isLoading = _useImageLoader.isLoading,
24
+ hasError = _useImageLoader.hasError,
25
+ width = _useImageLoader.width,
26
+ height = _useImageLoader.height;
27
+ return /*#__PURE__*/_react["default"].createElement("div", {
28
+ className: "thumb thumb-".concat(size, " ").concat(bordered ? 'thumb-bordered' : '')
29
+ }, isLoading ? /*#__PURE__*/_react["default"].createElement(_util.Loader, {
30
+ inline: true
31
+ }) : !hasError ? /*#__PURE__*/_react["default"].createElement("img", {
56
32
  src: src,
57
33
  alt: alt,
58
- className: "center-by-".concat(imageData.width > imageData.height ? 'width' : 'height')
34
+ className: "center-by-".concat(width > height ? 'width' : 'height')
59
35
  }) : /*#__PURE__*/_react["default"].createElement("img", {
60
36
  src: _noImage["default"],
61
37
  alt: alt,
@@ -4,12 +4,11 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.ImageZoom = void 0;
7
+ exports.ZoomImage = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _util = require("../util");
11
- var _button = require("../button");
12
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
11
+ var _useImageLoader2 = require("./useImageLoader");
13
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
14
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
14
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
@@ -18,7 +17,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
18
17
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
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; } }
20
19
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
21
- var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
20
+ var ZoomImage = exports.ZoomImage = function ZoomImage(_ref) {
22
21
  var src = _ref.src,
23
22
  alt = _ref.alt,
24
23
  _ref$width = _ref.width,
@@ -29,81 +28,59 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
29
28
  bordered = _ref$bordered === void 0 ? false : _ref$bordered,
30
29
  _ref$maxZoom = _ref.maxZoom,
31
30
  maxZoom = _ref$maxZoom === void 0 ? 1.5 : _ref$maxZoom,
32
- _ref$showHelp = _ref.showHelp,
33
- showHelp = _ref$showHelp === void 0 ? true : _ref$showHelp;
34
- var _useState = (0, _react.useState)(),
31
+ _ref$showHelper = _ref.showHelper,
32
+ showHelper = _ref$showHelper === void 0 ? true : _ref$showHelper;
33
+ var normalizedMaxZoom = Math.min(5, Math.max(1, Number(maxZoom) || 1));
34
+ var _useImageLoader = (0, _useImageLoader2.useImageLoader)(src),
35
+ isLoading = _useImageLoader.isLoading,
36
+ hasError = _useImageLoader.hasError,
37
+ imageWidth = _useImageLoader.width,
38
+ imageHeight = _useImageLoader.height;
39
+ var imageData = (0, _react.useMemo)(function () {
40
+ return !isLoading && !hasError && imageWidth > 0 && imageHeight > 0 ? {
41
+ width: imageWidth,
42
+ height: imageHeight
43
+ } : null;
44
+ }, [isLoading, hasError, imageWidth, imageHeight]);
45
+ var _useState = (0, _react.useState)(1),
35
46
  _useState2 = _slicedToArray(_useState, 2),
36
- imageData = _useState2[0],
37
- setImageData = _useState2[1];
47
+ zoom = _useState2[0],
48
+ setZoom = _useState2[1];
38
49
  var _useState3 = (0, _react.useState)(1),
39
50
  _useState4 = _slicedToArray(_useState3, 2),
40
- zoom = _useState4[0],
41
- setZoom = _useState4[1];
42
- var _useState5 = (0, _react.useState)(1),
51
+ minZoom = _useState4[0],
52
+ setMinZoom = _useState4[1];
53
+ var _useState5 = (0, _react.useState)(normalizedMaxZoom),
43
54
  _useState6 = _slicedToArray(_useState5, 2),
44
- minZoom = _useState6[0],
45
- setMinZoom = _useState6[1];
46
- var _useState7 = (0, _react.useState)(maxZoom),
47
- _useState8 = _slicedToArray(_useState7, 2),
48
- maxZoomState = _useState8[0],
49
- setMaxZoomState = _useState8[1];
50
- var _useState9 = (0, _react.useState)({
55
+ maxZoomState = _useState6[0],
56
+ setMaxZoomState = _useState6[1];
57
+ var _useState7 = (0, _react.useState)({
51
58
  x: 0,
52
59
  y: 0
53
60
  }),
61
+ _useState8 = _slicedToArray(_useState7, 2),
62
+ offset = _useState8[0],
63
+ setOffset = _useState8[1];
64
+ var _useState9 = (0, _react.useState)(false),
54
65
  _useState0 = _slicedToArray(_useState9, 2),
55
- offset = _useState0[0],
56
- setOffset = _useState0[1];
57
- var _useState1 = (0, _react.useState)(false),
58
- _useState10 = _slicedToArray(_useState1, 2),
59
- dragging = _useState10[0],
60
- setDragging = _useState10[1];
61
- var _useState11 = (0, _react.useState)({
66
+ dragging = _useState0[0],
67
+ setDragging = _useState0[1];
68
+ var _useState1 = (0, _react.useState)({
62
69
  x: 0,
63
70
  y: 0
64
71
  }),
65
- _useState12 = _slicedToArray(_useState11, 2),
66
- dragStart = _useState12[0],
67
- setDragStart = _useState12[1];
68
- var _useState13 = (0, _react.useState)({
72
+ _useState10 = _slicedToArray(_useState1, 2),
73
+ dragStart = _useState10[0],
74
+ setDragStart = _useState10[1];
75
+ var _useState11 = (0, _react.useState)({
69
76
  x: 0,
70
77
  y: 0
71
78
  }),
72
- _useState14 = _slicedToArray(_useState13, 2),
73
- imgStart = _useState14[0],
74
- setImgStart = _useState14[1];
79
+ _useState12 = _slicedToArray(_useState11, 2),
80
+ imgStart = _useState12[0],
81
+ setImgStart = _useState12[1];
75
82
  var containerRef = (0, _react.useRef)(null);
76
83
 
77
- // Cuando la imagen y el wrapper están listos, calcula el zoom mínimo y máximo
78
- (0, _react.useEffect)(function () {
79
- if (!src) return;
80
- var image = new Image();
81
- image.src = src;
82
- image.onload = function () {
83
- setImageData({
84
- width: image.width,
85
- height: image.height
86
- });
87
- };
88
- }, [src]);
89
- (0, _react.useEffect)(function () {
90
- if (!imageData || !containerRef.current) return;
91
- var wrapper = containerRef.current;
92
- var dispW = wrapper.clientWidth;
93
- var dispH = wrapper.clientHeight;
94
- var zoomW = dispW / imageData.width;
95
- var zoomH = dispH / imageData.height;
96
- var fitZoom = Math.min(zoomW, zoomH);
97
- setMinZoom(fitZoom);
98
- setZoom(fitZoom);
99
- setMaxZoomState(Math.max(fitZoom, maxZoom));
100
- setOffset({
101
- x: 0,
102
- y: 0
103
- });
104
- // eslint-disable-next-line
105
- }, [imageData, maxZoom, width, height]);
106
-
107
84
  // Limita el offset para que la imagen no se salga del área visible
108
85
  var clampOffset = function clampOffset(ox, oy, zoomVal) {
109
86
  if (!imageData || !containerRef.current) return {
@@ -164,51 +141,28 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
164
141
  var onTouchEnd = function onTouchEnd() {
165
142
  return setDragging(false);
166
143
  };
144
+ var applyZoomFromPoint = function applyZoomFromPoint(newZoom, anchorX, anchorY) {
145
+ if (!imageData || !containerRef.current) {
146
+ return;
147
+ }
148
+ setOffset(function (current) {
149
+ var relX = (anchorX - current.x) / zoom;
150
+ var relY = (anchorY - current.y) / zoom;
151
+ var nextX = anchorX - relX * newZoom;
152
+ var nextY = anchorY - relY * newZoom;
153
+ return clampOffset(nextX, nextY, newZoom);
154
+ });
155
+ setZoom(newZoom);
156
+ };
167
157
  var handleDoubleClick = function handleDoubleClick(e) {
168
158
  if (!imageData || !containerRef.current) return;
169
- var wrapper = containerRef.current;
170
- var rect = wrapper.getBoundingClientRect();
171
- var clickX = e.clientX - rect.left;
172
- var clickY = e.clientY - rect.top;
159
+ var rect = containerRef.current.getBoundingClientRect();
160
+ var anchorX = e.clientX - rect.left;
161
+ var anchorY = e.clientY - rect.top;
173
162
  if (zoom < maxZoomState) {
174
- // Zoom al máximo desde el punto del click
175
- var newZoom = maxZoomState;
176
- var dispW = wrapper.clientWidth;
177
- var dispH = wrapper.clientHeight;
178
-
179
- // Calcula el punto relativo en la imagen original
180
- var relX = (clickX - offset.x) / zoom;
181
- var relY = (clickY - offset.y) / zoom;
182
-
183
- // Calcula el nuevo offset para centrar ese punto
184
- var offsetX = dispW / 2 - relX * newZoom;
185
- var offsetY = dispH / 2 - relY * newZoom;
186
-
187
- // Limita el offset para no salirte del área visible
188
- var imgW = imageData.width * newZoom;
189
- var imgH = imageData.height * newZoom;
190
- var minX = Math.min(0, dispW - imgW);
191
- var minY = Math.min(0, dispH - imgH);
192
- offsetX = Math.max(minX, Math.min(offsetX, 0));
193
- offsetY = Math.max(minY, Math.min(offsetY, 0));
194
- setZoom(newZoom);
195
- setOffset({
196
- x: offsetX,
197
- y: offsetY
198
- });
163
+ applyZoomFromPoint(maxZoomState, anchorX, anchorY);
199
164
  } else {
200
- // Regresa al zoom inicial y centra la imagen
201
- var _dispW = wrapper.clientWidth;
202
- var _dispH = wrapper.clientHeight;
203
- var _imgW = imageData.width * minZoom;
204
- var _imgH = imageData.height * minZoom;
205
- var _offsetX = (_dispW - _imgW) / 2;
206
- var _offsetY = (_dispH - _imgH) / 2;
207
- setZoom(minZoom);
208
- setOffset({
209
- x: _offsetX,
210
- y: _offsetY
211
- });
165
+ applyZoomFromPoint(minZoom, anchorX, anchorY);
212
166
  }
213
167
  };
214
168
  (0, _react.useEffect)(function () {
@@ -221,7 +175,7 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
221
175
  var fitZoom = Math.min(zoomW, zoomH);
222
176
  setMinZoom(fitZoom);
223
177
  setZoom(fitZoom);
224
- setMaxZoomState(Math.max(fitZoom, maxZoom));
178
+ setMaxZoomState(Math.max(fitZoom, normalizedMaxZoom));
225
179
 
226
180
  // Centra la imagen al inicio
227
181
  var imgW = imageData.width * fitZoom;
@@ -232,8 +186,7 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
232
186
  x: offsetX,
233
187
  y: offsetY
234
188
  });
235
- // eslint-disable-next-line
236
- }, [imageData, maxZoom, width, height]);
189
+ }, [imageData, normalizedMaxZoom, width, height]);
237
190
  (0, _react.useEffect)(function () {
238
191
  if (zoom === minZoom && imageData && containerRef.current) {
239
192
  var dispW = containerRef.current.clientWidth;
@@ -262,7 +215,7 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
262
215
  onTouchMove: onTouchMove,
263
216
  onTouchEnd: onTouchEnd,
264
217
  className: "image-zoom ".concat(bordered ? 'bordered' : '', " margin-bottom")
265
- }, showHelp && /*#__PURE__*/_react["default"].createElement("div", {
218
+ }, showHelper && /*#__PURE__*/_react["default"].createElement("div", {
266
219
  className: "image-zoom-caption"
267
220
  }, "Doble click para ampliar o reducir la imagen"), imageData ? /*#__PURE__*/_react["default"].createElement("img", {
268
221
  src: src,
@@ -274,7 +227,7 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
274
227
  left: offset.x,
275
228
  top: offset.y,
276
229
  cursor: zoom > minZoom ? dragging ? 'grabbing' : 'grab' : 'default',
277
- transition: dragging ? 'none' : 'left 0.1s, top 0.1s'
230
+ transition: dragging ? 'none' : 'left 0.18s ease-out, top 0.18s ease-out, width 0.18s ease-out, height 0.18s ease-out'
278
231
  },
279
232
  onMouseDown: zoom > minZoom ? onMouseDown : undefined,
280
233
  onTouchStart: zoom > minZoom ? onTouchStart : undefined
@@ -283,11 +236,21 @@ var ImageZoom = exports.ImageZoom = function ImageZoom(_ref) {
283
236
  height: height
284
237
  }));
285
238
  };
286
- ImageZoom.propTypes = {
239
+ ZoomImage.propTypes = {
287
240
  src: _propTypes["default"].string.isRequired,
288
241
  alt: _propTypes["default"].string,
289
242
  width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
290
243
  height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
291
244
  bordered: _propTypes["default"].bool,
292
- maxZoom: _propTypes["default"].number
245
+ maxZoom: function maxZoom(props, propName, componentName) {
246
+ var value = props[propName];
247
+ if (value === undefined || value === null) {
248
+ return null;
249
+ }
250
+ if (typeof value !== 'number' || Number.isNaN(value) || value < 1 || value > 5) {
251
+ return new Error("Invalid prop `".concat(propName, "` supplied to `").concat(componentName, "`. Expected a number between 1 and 5."));
252
+ }
253
+ return null;
254
+ },
255
+ showHelper: _propTypes["default"].bool
293
256
  };
@@ -4,12 +4,13 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.PictureZoom = void 0;
7
+ exports.ZoomImageButtons = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _util = require("../util");
11
11
  var _button = require("../button");
12
12
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
13
+ var _useImageLoader2 = require("./useImageLoader");
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
14
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
16
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
@@ -18,7 +19,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
18
19
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
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; } }
20
21
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
21
- var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
22
+ var ZoomImageButtons = exports.ZoomImageButtons = function ZoomImageButtons(_ref) {
22
23
  var src = _ref.src,
23
24
  alt = _ref.alt,
24
25
  _ref$width = _ref.width,
@@ -29,79 +30,56 @@ var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
29
30
  bordered = _ref$bordered === void 0 ? false : _ref$bordered,
30
31
  _ref$maxZoom = _ref.maxZoom,
31
32
  maxZoom = _ref$maxZoom === void 0 ? 1.5 : _ref$maxZoom;
32
- var _useState = (0, _react.useState)(),
33
+ var _useImageLoader = (0, _useImageLoader2.useImageLoader)(src),
34
+ isLoading = _useImageLoader.isLoading,
35
+ hasError = _useImageLoader.hasError,
36
+ imageWidth = _useImageLoader.width,
37
+ imageHeight = _useImageLoader.height;
38
+ var imageData = (0, _react.useMemo)(function () {
39
+ return !isLoading && !hasError && imageWidth > 0 && imageHeight > 0 ? {
40
+ width: imageWidth,
41
+ height: imageHeight
42
+ } : null;
43
+ }, [isLoading, hasError, imageWidth, imageHeight]);
44
+ var _useState = (0, _react.useState)(1),
33
45
  _useState2 = _slicedToArray(_useState, 2),
34
- imageData = _useState2[0],
35
- setImageData = _useState2[1];
46
+ zoom = _useState2[0],
47
+ setZoom = _useState2[1];
36
48
  var _useState3 = (0, _react.useState)(1),
37
49
  _useState4 = _slicedToArray(_useState3, 2),
38
- zoom = _useState4[0],
39
- setZoom = _useState4[1];
40
- var _useState5 = (0, _react.useState)(1),
50
+ minZoom = _useState4[0],
51
+ setMinZoom = _useState4[1];
52
+ var _useState5 = (0, _react.useState)(maxZoom),
41
53
  _useState6 = _slicedToArray(_useState5, 2),
42
- minZoom = _useState6[0],
43
- setMinZoom = _useState6[1];
44
- var _useState7 = (0, _react.useState)(maxZoom),
45
- _useState8 = _slicedToArray(_useState7, 2),
46
- maxZoomState = _useState8[0],
47
- setMaxZoomState = _useState8[1];
48
- var _useState9 = (0, _react.useState)({
54
+ maxZoomState = _useState6[0],
55
+ setMaxZoomState = _useState6[1];
56
+ var _useState7 = (0, _react.useState)({
49
57
  x: 0,
50
58
  y: 0
51
59
  }),
60
+ _useState8 = _slicedToArray(_useState7, 2),
61
+ offset = _useState8[0],
62
+ setOffset = _useState8[1];
63
+ var _useState9 = (0, _react.useState)(false),
52
64
  _useState0 = _slicedToArray(_useState9, 2),
53
- offset = _useState0[0],
54
- setOffset = _useState0[1];
55
- var _useState1 = (0, _react.useState)(false),
56
- _useState10 = _slicedToArray(_useState1, 2),
57
- dragging = _useState10[0],
58
- setDragging = _useState10[1];
59
- var _useState11 = (0, _react.useState)({
65
+ dragging = _useState0[0],
66
+ setDragging = _useState0[1];
67
+ var _useState1 = (0, _react.useState)({
60
68
  x: 0,
61
69
  y: 0
62
70
  }),
63
- _useState12 = _slicedToArray(_useState11, 2),
64
- dragStart = _useState12[0],
65
- setDragStart = _useState12[1];
66
- var _useState13 = (0, _react.useState)({
71
+ _useState10 = _slicedToArray(_useState1, 2),
72
+ dragStart = _useState10[0],
73
+ setDragStart = _useState10[1];
74
+ var _useState11 = (0, _react.useState)({
67
75
  x: 0,
68
76
  y: 0
69
77
  }),
70
- _useState14 = _slicedToArray(_useState13, 2),
71
- imgStart = _useState14[0],
72
- setImgStart = _useState14[1];
78
+ _useState12 = _slicedToArray(_useState11, 2),
79
+ imgStart = _useState12[0],
80
+ setImgStart = _useState12[1];
73
81
  var containerRef = (0, _react.useRef)(null);
74
82
 
75
- // Cuando la imagen y el wrapper están listos, calcula el zoom mínimo y máximo
76
- (0, _react.useEffect)(function () {
77
- if (!src) return;
78
- var image = new Image();
79
- image.src = src;
80
- image.onload = function () {
81
- setImageData({
82
- width: image.width,
83
- height: image.height
84
- });
85
- };
86
- }, [src]);
87
- (0, _react.useEffect)(function () {
88
- if (!imageData || !containerRef.current) return;
89
- var wrapper = containerRef.current;
90
- var dispW = wrapper.clientWidth;
91
- var dispH = wrapper.clientHeight;
92
- var zoomW = dispW / imageData.width;
93
- var zoomH = dispH / imageData.height;
94
- var fitZoom = Math.min(zoomW, zoomH);
95
- setMinZoom(fitZoom);
96
- setZoom(fitZoom);
97
- setMaxZoomState(Math.max(fitZoom, maxZoom));
98
- setOffset({
99
- x: 0,
100
- y: 0
101
- });
102
- // eslint-disable-next-line
103
- }, [imageData, maxZoom, width, height]);
104
-
105
83
  // Limita el offset para que la imagen no se salga del área visible
106
84
  var clampOffset = function clampOffset(ox, oy, zoomVal) {
107
85
  if (!imageData || !containerRef.current) return {
@@ -124,8 +102,18 @@ var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
124
102
  var handleZoom = function handleZoom(delta) {
125
103
  setZoom(function (prev) {
126
104
  var next = Math.max(minZoom, Math.min(prev + delta, maxZoomState));
105
+ if (!containerRef.current || !imageData) {
106
+ return next;
107
+ }
108
+ var wrapper = containerRef.current;
109
+ var centerX = wrapper.clientWidth / 2;
110
+ var centerY = wrapper.clientHeight / 2;
127
111
  setOffset(function (current) {
128
- return clampOffset(current.x, current.y, next);
112
+ var relX = (centerX - current.x) / prev;
113
+ var relY = (centerY - current.y) / prev;
114
+ var nextX = centerX - relX * next;
115
+ var nextY = centerY - relY * next;
116
+ return clampOffset(nextX, nextY, next);
129
117
  });
130
118
  return next;
131
119
  });
@@ -207,7 +195,6 @@ var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
207
195
  x: offsetX,
208
196
  y: offsetY
209
197
  });
210
- // eslint-disable-next-line
211
198
  }, [imageData, maxZoom, width, height]);
212
199
  (0, _react.useEffect)(function () {
213
200
  if (zoom === minZoom && imageData && containerRef.current) {
@@ -253,7 +240,7 @@ var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
253
240
  left: offset.x,
254
241
  top: offset.y,
255
242
  cursor: zoom > minZoom ? dragging ? 'grabbing' : 'grab' : 'default',
256
- transition: dragging ? 'none' : 'left 0.1s, top 0.1s',
243
+ transition: dragging ? 'none' : 'left 0.18s ease-out, top 0.18s ease-out, width 0.18s ease-out, height 0.18s ease-out',
257
244
  userSelect: 'none'
258
245
  },
259
246
  onMouseDown: zoom > minZoom ? onMouseDown : undefined,
@@ -297,7 +284,7 @@ var PictureZoom = exports.PictureZoom = function PictureZoom(_ref) {
297
284
  }
298
285
  })));
299
286
  };
300
- PictureZoom.propTypes = {
287
+ ZoomImageButtons.propTypes = {
301
288
  src: _propTypes["default"].string.isRequired,
302
289
  alt: _propTypes["default"].string,
303
290
  width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
@@ -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.Picture = void 0;
7
+ exports.ZoomImageSquare = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _util = require("../util");
@@ -16,7 +16,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
16
16
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
17
17
  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; } }
18
18
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
19
- var Picture = exports.Picture = function Picture(_ref) {
19
+ var ZoomImageSquare = exports.ZoomImageSquare = function ZoomImageSquare(_ref) {
20
20
  var src = _ref.src,
21
21
  alt = _ref.alt,
22
22
  width = _ref.width,
@@ -148,7 +148,7 @@ var Picture = exports.Picture = function Picture(_ref) {
148
148
  height: height
149
149
  }));
150
150
  };
151
- Picture.propTypes = {
151
+ ZoomImageSquare.propTypes = {
152
152
  src: _propTypes["default"].string.isRequired,
153
153
  alt: _propTypes["default"].string,
154
154
  width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
@@ -14,17 +14,6 @@ Object.keys(_CarouselImages).forEach(function (key) {
14
14
  }
15
15
  });
16
16
  });
17
- var _ImageZoom = require("./ImageZoom");
18
- Object.keys(_ImageZoom).forEach(function (key) {
19
- if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _ImageZoom[key]) return;
21
- Object.defineProperty(exports, key, {
22
- enumerable: true,
23
- get: function get() {
24
- return _ImageZoom[key];
25
- }
26
- });
27
- });
28
17
  var _Img = require("./Img");
29
18
  Object.keys(_Img).forEach(function (key) {
30
19
  if (key === "default" || key === "__esModule") return;
@@ -46,4 +35,37 @@ Object.keys(_Thumb).forEach(function (key) {
46
35
  return _Thumb[key];
47
36
  }
48
37
  });
38
+ });
39
+ var _ZoomImage = require("./ZoomImage");
40
+ Object.keys(_ZoomImage).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _ZoomImage[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function get() {
46
+ return _ZoomImage[key];
47
+ }
48
+ });
49
+ });
50
+ var _ZoomImageButtons = require("./ZoomImageButtons");
51
+ Object.keys(_ZoomImageButtons).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _ZoomImageButtons[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _ZoomImageButtons[key];
58
+ }
59
+ });
60
+ });
61
+ var _ZoomImageSquare = require("./ZoomImageSquare");
62
+ Object.keys(_ZoomImageSquare).forEach(function (key) {
63
+ if (key === "default" || key === "__esModule") return;
64
+ if (key in exports && exports[key] === _ZoomImageSquare[key]) return;
65
+ Object.defineProperty(exports, key, {
66
+ enumerable: true,
67
+ get: function get() {
68
+ return _ZoomImageSquare[key];
69
+ }
70
+ });
49
71
  });