@tenancy.nz/gallery 1.10.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.
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.cjs +131 -0
- package/dist/cjs/components/Gallery.cjs +71 -0
- package/dist/cjs/components/Gallery.styled.cjs +15 -0
- package/dist/cjs/components/GalleryImage.cjs +43 -0
- package/dist/cjs/components/GalleryImage.styled.cjs +35 -0
- package/dist/cjs/components/GalleryImageSkeleton.cjs +23 -0
- package/dist/cjs/components/GalleryViewer.cjs +77 -0
- package/dist/cjs/components/GalleryViewer.styled.cjs +24 -0
- package/dist/cjs/index.cjs +13 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +117 -0
- package/dist/esm/components/Gallery.js +67 -0
- package/dist/esm/components/Gallery.styled.js +11 -0
- package/dist/esm/components/GalleryImage.js +39 -0
- package/dist/esm/components/GalleryImage.styled.js +28 -0
- package/dist/esm/components/GalleryImageSkeleton.js +19 -0
- package/dist/esm/components/GalleryViewer.js +73 -0
- package/dist/esm/components/GalleryViewer.styled.js +16 -0
- package/dist/esm/index.js +4 -0
- package/package.json +35 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function _arrayLikeToArray(r, a) {
|
|
4
|
+
(null == a || a > r.length) && (a = r.length);
|
|
5
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
6
|
+
return n;
|
|
7
|
+
}
|
|
8
|
+
function _arrayWithHoles(r) {
|
|
9
|
+
if (Array.isArray(r)) return r;
|
|
10
|
+
}
|
|
11
|
+
function _defineProperty(e, r, t) {
|
|
12
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
13
|
+
value: t,
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true
|
|
17
|
+
}) : e[r] = t, e;
|
|
18
|
+
}
|
|
19
|
+
function _iterableToArrayLimit(r, l) {
|
|
20
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
21
|
+
if (null != t) {
|
|
22
|
+
var e,
|
|
23
|
+
n,
|
|
24
|
+
i,
|
|
25
|
+
u,
|
|
26
|
+
a = [],
|
|
27
|
+
f = true,
|
|
28
|
+
o = false;
|
|
29
|
+
try {
|
|
30
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
31
|
+
} catch (r) {
|
|
32
|
+
o = true, n = r;
|
|
33
|
+
} finally {
|
|
34
|
+
try {
|
|
35
|
+
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
36
|
+
} finally {
|
|
37
|
+
if (o) throw n;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return a;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function _nonIterableRest() {
|
|
44
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
45
|
+
}
|
|
46
|
+
function ownKeys(e, r) {
|
|
47
|
+
var t = Object.keys(e);
|
|
48
|
+
if (Object.getOwnPropertySymbols) {
|
|
49
|
+
var o = Object.getOwnPropertySymbols(e);
|
|
50
|
+
r && (o = o.filter(function (r) {
|
|
51
|
+
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
52
|
+
})), t.push.apply(t, o);
|
|
53
|
+
}
|
|
54
|
+
return t;
|
|
55
|
+
}
|
|
56
|
+
function _objectSpread2(e) {
|
|
57
|
+
for (var r = 1; r < arguments.length; r++) {
|
|
58
|
+
var t = null != arguments[r] ? arguments[r] : {};
|
|
59
|
+
r % 2 ? ownKeys(Object(t), true).forEach(function (r) {
|
|
60
|
+
_defineProperty(e, r, t[r]);
|
|
61
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
|
|
62
|
+
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return e;
|
|
66
|
+
}
|
|
67
|
+
function _objectWithoutProperties(e, t) {
|
|
68
|
+
if (null == e) return {};
|
|
69
|
+
var o,
|
|
70
|
+
r,
|
|
71
|
+
i = _objectWithoutPropertiesLoose(e, t);
|
|
72
|
+
if (Object.getOwnPropertySymbols) {
|
|
73
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
74
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
75
|
+
}
|
|
76
|
+
return i;
|
|
77
|
+
}
|
|
78
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
79
|
+
if (null == r) return {};
|
|
80
|
+
var t = {};
|
|
81
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
82
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
83
|
+
t[n] = r[n];
|
|
84
|
+
}
|
|
85
|
+
return t;
|
|
86
|
+
}
|
|
87
|
+
function _slicedToArray(r, e) {
|
|
88
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
89
|
+
}
|
|
90
|
+
function _taggedTemplateLiteral(e, t) {
|
|
91
|
+
return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
|
|
92
|
+
raw: {
|
|
93
|
+
value: Object.freeze(t)
|
|
94
|
+
}
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
function _toPrimitive(t, r) {
|
|
98
|
+
if ("object" != typeof t || !t) return t;
|
|
99
|
+
var e = t[Symbol.toPrimitive];
|
|
100
|
+
if (void 0 !== e) {
|
|
101
|
+
var i = e.call(t, r);
|
|
102
|
+
if ("object" != typeof i) return i;
|
|
103
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
104
|
+
}
|
|
105
|
+
return ("string" === r ? String : Number)(t);
|
|
106
|
+
}
|
|
107
|
+
function _toPropertyKey(t) {
|
|
108
|
+
var i = _toPrimitive(t, "string");
|
|
109
|
+
return "symbol" == typeof i ? i : i + "";
|
|
110
|
+
}
|
|
111
|
+
function _unsupportedIterableToArray(r, a) {
|
|
112
|
+
if (r) {
|
|
113
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
114
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
115
|
+
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;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
exports.arrayLikeToArray = _arrayLikeToArray;
|
|
120
|
+
exports.arrayWithHoles = _arrayWithHoles;
|
|
121
|
+
exports.defineProperty = _defineProperty;
|
|
122
|
+
exports.iterableToArrayLimit = _iterableToArrayLimit;
|
|
123
|
+
exports.nonIterableRest = _nonIterableRest;
|
|
124
|
+
exports.objectSpread2 = _objectSpread2;
|
|
125
|
+
exports.objectWithoutProperties = _objectWithoutProperties;
|
|
126
|
+
exports.objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose;
|
|
127
|
+
exports.slicedToArray = _slicedToArray;
|
|
128
|
+
exports.taggedTemplateLiteral = _taggedTemplateLiteral;
|
|
129
|
+
exports.toPrimitive = _toPrimitive;
|
|
130
|
+
exports.toPropertyKey = _toPropertyKey;
|
|
131
|
+
exports.unsupportedIterableToArray = _unsupportedIterableToArray;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var ui = require('@tenancy.nz/ui');
|
|
8
|
+
var GalleryImage = require('./GalleryImage.cjs');
|
|
9
|
+
var GalleryImageSkeleton = require('./GalleryImageSkeleton.cjs');
|
|
10
|
+
var GalleryViewer = require('./GalleryViewer.cjs');
|
|
11
|
+
var Gallery_styled = require('./Gallery.styled.cjs');
|
|
12
|
+
|
|
13
|
+
function Gallery(_ref) {
|
|
14
|
+
var _ref$images = _ref.images,
|
|
15
|
+
images = _ref$images === void 0 ? [] : _ref$images,
|
|
16
|
+
_ref$loading = _ref.loading,
|
|
17
|
+
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
18
|
+
_ref$infoText = _ref.infoText,
|
|
19
|
+
infoText = _ref$infoText === void 0 ? void 0 : _ref$infoText,
|
|
20
|
+
_ref$renderItem = _ref.renderItem,
|
|
21
|
+
renderItem = _ref$renderItem === void 0 ? void 0 : _ref$renderItem;
|
|
22
|
+
var _useState = React.useState(false),
|
|
23
|
+
_useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
|
|
24
|
+
viewing = _useState2[0],
|
|
25
|
+
setViewing = _useState2[1];
|
|
26
|
+
var _useState3 = React.useState(0),
|
|
27
|
+
_useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
|
|
28
|
+
viewingIndex = _useState4[0],
|
|
29
|
+
setViewingIndex = _useState4[1];
|
|
30
|
+
var handleImagePreview = function handleImagePreview(index) {
|
|
31
|
+
setViewingIndex(index);
|
|
32
|
+
setViewing(true);
|
|
33
|
+
};
|
|
34
|
+
var handleImagePreviewClose = function handleImagePreviewClose() {
|
|
35
|
+
setViewingIndex(0);
|
|
36
|
+
setViewing(false);
|
|
37
|
+
};
|
|
38
|
+
var handleImagePreviewChange = function handleImagePreviewChange(index) {
|
|
39
|
+
setViewingIndex(index);
|
|
40
|
+
};
|
|
41
|
+
return /* @__PURE__ */React.createElement(ui.Box, null, /* @__PURE__ */React.createElement(Gallery_styled.default, null, renderItem && images.map(function (image, i) {
|
|
42
|
+
return renderItem(_rollupPluginBabelHelpers.objectSpread2({
|
|
43
|
+
onClick: function onClick() {
|
|
44
|
+
return handleImagePreview(i);
|
|
45
|
+
}
|
|
46
|
+
}, image), i);
|
|
47
|
+
}), !renderItem && images.map(function (image, i) {
|
|
48
|
+
return /* @__PURE__ */React.createElement(GalleryImage.default, {
|
|
49
|
+
key: "".concat(image.path, "-").concat(i),
|
|
50
|
+
src: image.thumb,
|
|
51
|
+
onClick: function onClick() {
|
|
52
|
+
return handleImagePreview(i);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
})), loading && /* @__PURE__ */React.createElement(Gallery_styled.default, null, /* @__PURE__ */React.createElement(GalleryImageSkeleton.default, {
|
|
56
|
+
amount: 7
|
|
57
|
+
})), infoText && /* @__PURE__ */React.createElement(ui.Alert, {
|
|
58
|
+
color: "warning",
|
|
59
|
+
sx: {
|
|
60
|
+
mt: 6
|
|
61
|
+
}
|
|
62
|
+
}, infoText), /* @__PURE__ */React.createElement(GalleryViewer.default, {
|
|
63
|
+
images: images,
|
|
64
|
+
open: viewing,
|
|
65
|
+
currentIndex: viewingIndex,
|
|
66
|
+
onClose: handleImagePreviewClose,
|
|
67
|
+
onChange: handleImagePreviewChange
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
exports.default = Gallery;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
6
|
+
var react = require('@emotion/react');
|
|
7
|
+
var styles = require('@mui/material/styles');
|
|
8
|
+
|
|
9
|
+
var _templateObject, _templateObject2;
|
|
10
|
+
var StyledGalleryGrid = styles.styled("div")(_templateObject || (_templateObject = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", "\n"])), function (_ref) {
|
|
11
|
+
var theme = _ref.theme;
|
|
12
|
+
return react.css(_templateObject2 || (_templateObject2 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 16px;\n\n ", " {\n grid-template-columns: repeat(3, 1fr);\n }\n\n ", " {\n grid-template-columns: repeat(6, 1fr);\n }\n "])), theme.breakpoints.up("sm"), theme.breakpoints.up("md"));
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
exports.default = StyledGalleryGrid;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var ZoomInIcon = require('@tenancy.nz/icons/ZoomInOutlined');
|
|
8
|
+
var ui = require('@tenancy.nz/ui');
|
|
9
|
+
var GalleryImage_styled = require('./GalleryImage.styled.cjs');
|
|
10
|
+
|
|
11
|
+
var _excluded = ["actions", "caption", "dragging", "onClick", "src", "uploading"];
|
|
12
|
+
var GalleryImage = /*#__PURE__*/React.forwardRef(function GalleryImage2(_ref, ref) {
|
|
13
|
+
var _ref$actions = _ref.actions,
|
|
14
|
+
actions = _ref$actions === void 0 ? void 0 : _ref$actions,
|
|
15
|
+
_ref$caption = _ref.caption,
|
|
16
|
+
caption = _ref$caption === void 0 ? void 0 : _ref$caption,
|
|
17
|
+
_ref$dragging = _ref.dragging,
|
|
18
|
+
dragging = _ref$dragging === void 0 ? void 0 : _ref$dragging,
|
|
19
|
+
_ref$onClick = _ref.onClick,
|
|
20
|
+
onClick = _ref$onClick === void 0 ? void 0 : _ref$onClick,
|
|
21
|
+
src = _ref.src,
|
|
22
|
+
_ref$uploading = _ref.uploading,
|
|
23
|
+
uploading = _ref$uploading === void 0 ? false : _ref$uploading,
|
|
24
|
+
rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
|
|
25
|
+
return /* @__PURE__ */React.createElement(GalleryImage_styled.default, _rollupPluginBabelHelpers.objectSpread2({
|
|
26
|
+
ref: ref,
|
|
27
|
+
dragging: dragging
|
|
28
|
+
}, rest), /* @__PURE__ */React.createElement(ui.Media, {
|
|
29
|
+
src: src
|
|
30
|
+
}), uploading && /* @__PURE__ */React.createElement(GalleryImage_styled.StyledGalleryImageOverlay, {
|
|
31
|
+
visible: true
|
|
32
|
+
}, /* @__PURE__ */React.createElement(ui.CircularProgress, {
|
|
33
|
+
color: "inherit",
|
|
34
|
+
size: 40
|
|
35
|
+
})), !uploading && (onClick || actions) && /* @__PURE__ */React.createElement(GalleryImage_styled.StyledGalleryImageOverlay, {
|
|
36
|
+
className: GalleryImage_styled.galleryImageOverlayClassName,
|
|
37
|
+
onClick: onClick
|
|
38
|
+
}, actions, onClick && /* @__PURE__ */React.createElement(ZoomInIcon, {
|
|
39
|
+
size: "inherit"
|
|
40
|
+
})), !uploading && caption && /* @__PURE__ */React.createElement(GalleryImage_styled.StyledGalleryImageText, null, caption));
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
exports.default = GalleryImage;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
6
|
+
var react = require('@emotion/react');
|
|
7
|
+
var styles = require('@mui/material/styles');
|
|
8
|
+
|
|
9
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
|
|
10
|
+
var galleryImageOverlayClassName = "tps-gallery-image-overlay";
|
|
11
|
+
var IMAGE_NO_FORWARD_PROPS = ["dragging"];
|
|
12
|
+
var OVERLAY_NO_FORWARD_PROPS = ["visible"];
|
|
13
|
+
var StyledGalleryImage = styles.styled("div", {
|
|
14
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
15
|
+
return !IMAGE_NO_FORWARD_PROPS.includes(prop);
|
|
16
|
+
}
|
|
17
|
+
})(_templateObject || (_templateObject = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", "\n"])), function (_ref) {
|
|
18
|
+
var dragging = _ref.dragging,
|
|
19
|
+
theme = _ref.theme;
|
|
20
|
+
return react.css(_templateObject2 || (_templateObject2 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n position: relative;\n overflow: hidden;\n height: 162px;\n transform-origin: 50% 50%;\n border-radius: 8px;\n cursor: zoom-in;\n\n &:first-child {\n height: 156px;\n grid-row-start: span 2;\n grid-column-start: span 2;\n }\n\n ", " {\n &:first-child {\n height: 340px;\n }\n }\n\n ", " {\n &:nth-child(4n + 10) {\n grid-column-start: 3;\n }\n }\n\n ", "\n\n &:hover .", " {\n opacity: 1;\n visibility: visible;\n backface-visibility: visible;\n }\n "])), theme.breakpoints.up("sm"), theme.breakpoints.up("md"), dragging && react.css(_templateObject3 || (_templateObject3 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n opacity: 0.5;\n transform-origin: 0 0;\n "]))), galleryImageOverlayClassName);
|
|
21
|
+
});
|
|
22
|
+
var StyledGalleryImageOverlay = styles.styled("div", {
|
|
23
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
24
|
+
return !OVERLAY_NO_FORWARD_PROPS.includes(prop);
|
|
25
|
+
}
|
|
26
|
+
})(_templateObject4 || (_templateObject4 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", "\n"])), function (_ref2) {
|
|
27
|
+
var visible = _ref2.visible;
|
|
28
|
+
return react.css(_templateObject5 || (_templateObject5 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 3;\n background: rgba(0, 0, 0, 0.5);\n color: #fff;\n font-size: 50px;\n transition: all 275ms ease-in-out;\n ", "\n "])), !visible && react.css(_templateObject6 || (_templateObject6 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n opacity: 0;\n visibility: hidden;\n backface-visibility: hidden;\n cursor: pointer;\n background: rgba(0, 0, 0, 0.38);\n "]))));
|
|
29
|
+
});
|
|
30
|
+
var StyledGalleryImageText = styles.styled("span")(_templateObject7 || (_templateObject7 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n display: inline-flex;\n position: absolute;\n right: 8px;\n bottom: 8px;\n padding: 2px 8px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n font-weight: 500;\n z-index: 2;\n font-size: 12px;\n"])));
|
|
31
|
+
|
|
32
|
+
exports.StyledGalleryImageOverlay = StyledGalleryImageOverlay;
|
|
33
|
+
exports.StyledGalleryImageText = StyledGalleryImageText;
|
|
34
|
+
exports.default = StyledGalleryImage;
|
|
35
|
+
exports.galleryImageOverlayClassName = galleryImageOverlayClassName;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var ui = require('@tenancy.nz/ui');
|
|
7
|
+
var GalleryImage_styled = require('./GalleryImage.styled.cjs');
|
|
8
|
+
|
|
9
|
+
function GalleryImageSkeleton(_ref) {
|
|
10
|
+
var _ref$amount = _ref.amount,
|
|
11
|
+
amount = _ref$amount === void 0 ? 1 : _ref$amount;
|
|
12
|
+
return /* @__PURE__ */React.createElement(React.Fragment, null, Array(amount).fill(1).map(function (_, i) {
|
|
13
|
+
return /* @__PURE__ */React.createElement(GalleryImage_styled.default, {
|
|
14
|
+
key: "gallery-loading-image-".concat(i)
|
|
15
|
+
}, /* @__PURE__ */React.createElement(ui.Skeleton, {
|
|
16
|
+
width: "100%",
|
|
17
|
+
height: "100%",
|
|
18
|
+
variant: "rectangular"
|
|
19
|
+
}));
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
exports.default = GalleryImageSkeleton;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var Modal = require('@mui/material/Modal');
|
|
8
|
+
var ChevronLeftIcon = require('@tenancy.nz/icons/ChevronLeftOutlined');
|
|
9
|
+
var ChevronRightIcon = require('@tenancy.nz/icons/ChevronRightOutlined');
|
|
10
|
+
var CloseIcon = require('@tenancy.nz/icons/CloseOutlined');
|
|
11
|
+
var GalleryViewer_styled = require('./GalleryViewer.styled.cjs');
|
|
12
|
+
|
|
13
|
+
var _excluded = ["currentIndex", "images", "open", "onChange", "onClose"];
|
|
14
|
+
function GalleryViewer(_ref) {
|
|
15
|
+
var _ref$currentIndex = _ref.currentIndex,
|
|
16
|
+
currentIndex = _ref$currentIndex === void 0 ? 0 : _ref$currentIndex,
|
|
17
|
+
images = _ref.images,
|
|
18
|
+
_ref$open = _ref.open,
|
|
19
|
+
open = _ref$open === void 0 ? false : _ref$open,
|
|
20
|
+
onChange = _ref.onChange,
|
|
21
|
+
onClose = _ref.onClose,
|
|
22
|
+
rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
|
|
23
|
+
var count = images.length;
|
|
24
|
+
var image = images[currentIndex];
|
|
25
|
+
var hasPrev = currentIndex > 0;
|
|
26
|
+
var hasNext = currentIndex < count - 1;
|
|
27
|
+
var handleNext = function handleNext() {
|
|
28
|
+
onChange(currentIndex + 1);
|
|
29
|
+
};
|
|
30
|
+
var handlePrev = function handlePrev() {
|
|
31
|
+
onChange(currentIndex - 1);
|
|
32
|
+
};
|
|
33
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
34
|
+
if (event.key === "ArrowRight" && hasNext) {
|
|
35
|
+
handleNext();
|
|
36
|
+
}
|
|
37
|
+
if (event.key === "ArrowLeft" && hasPrev) {
|
|
38
|
+
handlePrev();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
var handleBackdropClick = function handleBackdropClick(event) {
|
|
42
|
+
if (event.target === event.currentTarget) {
|
|
43
|
+
onClose();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */React.createElement(Modal, _rollupPluginBabelHelpers.objectSpread2({
|
|
47
|
+
open: open,
|
|
48
|
+
onClose: onClose,
|
|
49
|
+
onKeyDown: handleKeyDown,
|
|
50
|
+
hideBackdrop: true
|
|
51
|
+
}, rest), /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewer, {
|
|
52
|
+
onClick: handleBackdropClick
|
|
53
|
+
}, /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerClose, {
|
|
54
|
+
type: "button",
|
|
55
|
+
"aria-label": "Close",
|
|
56
|
+
onClick: onClose
|
|
57
|
+
}, /* @__PURE__ */React.createElement(CloseIcon, {
|
|
58
|
+
size: "inherit"
|
|
59
|
+
})), hasPrev && /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerPrev, {
|
|
60
|
+
type: "button",
|
|
61
|
+
"aria-label": "Previous image",
|
|
62
|
+
onClick: handlePrev
|
|
63
|
+
}, /* @__PURE__ */React.createElement(ChevronLeftIcon, {
|
|
64
|
+
size: "inherit"
|
|
65
|
+
})), image && /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerFigure, null, /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerImage, {
|
|
66
|
+
src: image.path,
|
|
67
|
+
alt: image.caption || image.name || ""
|
|
68
|
+
}), /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerCaption, null, count > 1 && /* @__PURE__ */React.createElement(React.Fragment, null, /* @__PURE__ */React.createElement("div", null, currentIndex + 1), /* @__PURE__ */React.createElement("span", null, "/"), /* @__PURE__ */React.createElement("div", null, count)))), hasNext && /* @__PURE__ */React.createElement(GalleryViewer_styled.StyledGalleryViewerNext, {
|
|
69
|
+
type: "button",
|
|
70
|
+
"aria-label": "Next image",
|
|
71
|
+
onClick: handleNext
|
|
72
|
+
}, /* @__PURE__ */React.createElement(ChevronRightIcon, {
|
|
73
|
+
size: "inherit"
|
|
74
|
+
}))));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
exports.default = GalleryViewer;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
|
|
4
|
+
var react = require('@emotion/react');
|
|
5
|
+
var styles = require('@mui/material/styles');
|
|
6
|
+
var ui = require('@tenancy.nz/ui');
|
|
7
|
+
|
|
8
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
|
|
9
|
+
var StyledGalleryViewer = styles.styled("div")(_templateObject || (_templateObject = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 56px;\n background: rgba(24, 27, 37, 0.85);\n outline: none;\n"])));
|
|
10
|
+
var StyledGalleryViewerFigure = styles.styled("figure")(_templateObject2 || (_templateObject2 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: 100%;\n max-height: 100%;\n margin: 0;\n"])));
|
|
11
|
+
var StyledGalleryViewerImage = styles.styled("img")(_templateObject3 || (_templateObject3 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n max-width: 100%;\n max-height: calc(100vh - 160px);\n object-fit: contain;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5);\n"])));
|
|
12
|
+
var StyledGalleryViewerCaption = styles.styled("figcaption")(_templateObject4 || (_templateObject4 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n display: flex;\n width: 100%;\n justify-content: center;\n align-items: center;\n gap: 10px;\n margin-top: 16px;\n color: #fff;\n font-size: 16px;\n font-weight: 660;\n\n > div {\n width: 36px;\n height: 36px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n"])));
|
|
13
|
+
var viewerButtonStyles = react.css(_templateObject5 || (_templateObject5 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n && {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n padding: 0;\n border: 1px solid ", ";\n border-radius: 4px;\n background: ", ";\n color: ", ";\n font-size: 24px;\n cursor: pointer;\n transition: background 175ms ease-in-out;\n\n &:hover {\n background: ", ";\n }\n }\n"])), ui.token("palette.component.button.secondary.borderColor"), ui.token("palette.component.button.secondary.backgroundDefault"), ui.token("palette.semantic.icons.primaryColor"), ui.token("palette.component.button.secondary.backgroundDefault"));
|
|
14
|
+
var StyledGalleryViewerClose = styles.styled("button")(_templateObject6 || (_templateObject6 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", ";\n top: 16px;\n right: 16px;\n"])), viewerButtonStyles);
|
|
15
|
+
var StyledGalleryViewerPrev = styles.styled("button")(_templateObject7 || (_templateObject7 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", ";\n left: 16px;\n top: 50%;\n transform: translateY(-50%);\n"])), viewerButtonStyles);
|
|
16
|
+
var StyledGalleryViewerNext = styles.styled("button")(_templateObject8 || (_templateObject8 = _rollupPluginBabelHelpers.taggedTemplateLiteral(["\n ", ";\n right: 16px;\n top: 50%;\n transform: translateY(-50%);\n"])), viewerButtonStyles);
|
|
17
|
+
|
|
18
|
+
exports.StyledGalleryViewer = StyledGalleryViewer;
|
|
19
|
+
exports.StyledGalleryViewerCaption = StyledGalleryViewerCaption;
|
|
20
|
+
exports.StyledGalleryViewerClose = StyledGalleryViewerClose;
|
|
21
|
+
exports.StyledGalleryViewerFigure = StyledGalleryViewerFigure;
|
|
22
|
+
exports.StyledGalleryViewerImage = StyledGalleryViewerImage;
|
|
23
|
+
exports.StyledGalleryViewerNext = StyledGalleryViewerNext;
|
|
24
|
+
exports.StyledGalleryViewerPrev = StyledGalleryViewerPrev;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Gallery = require('./components/Gallery.cjs');
|
|
4
|
+
var GalleryImage = require('./components/GalleryImage.cjs');
|
|
5
|
+
var GalleryImageSkeleton = require('./components/GalleryImageSkeleton.cjs');
|
|
6
|
+
var GalleryViewer = require('./components/GalleryViewer.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.Gallery = Gallery.default;
|
|
11
|
+
exports.GalleryImage = GalleryImage.default;
|
|
12
|
+
exports.GalleryImageSkeleton = GalleryImageSkeleton.default;
|
|
13
|
+
exports.GalleryViewer = GalleryViewer.default;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
function _arrayLikeToArray(r, a) {
|
|
2
|
+
(null == a || a > r.length) && (a = r.length);
|
|
3
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
4
|
+
return n;
|
|
5
|
+
}
|
|
6
|
+
function _arrayWithHoles(r) {
|
|
7
|
+
if (Array.isArray(r)) return r;
|
|
8
|
+
}
|
|
9
|
+
function _defineProperty(e, r, t) {
|
|
10
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
11
|
+
value: t,
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true
|
|
15
|
+
}) : e[r] = t, e;
|
|
16
|
+
}
|
|
17
|
+
function _iterableToArrayLimit(r, l) {
|
|
18
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
19
|
+
if (null != t) {
|
|
20
|
+
var e,
|
|
21
|
+
n,
|
|
22
|
+
i,
|
|
23
|
+
u,
|
|
24
|
+
a = [],
|
|
25
|
+
f = true,
|
|
26
|
+
o = false;
|
|
27
|
+
try {
|
|
28
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
29
|
+
} catch (r) {
|
|
30
|
+
o = true, n = r;
|
|
31
|
+
} finally {
|
|
32
|
+
try {
|
|
33
|
+
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
34
|
+
} finally {
|
|
35
|
+
if (o) throw n;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return a;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function _nonIterableRest() {
|
|
42
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
43
|
+
}
|
|
44
|
+
function ownKeys(e, r) {
|
|
45
|
+
var t = Object.keys(e);
|
|
46
|
+
if (Object.getOwnPropertySymbols) {
|
|
47
|
+
var o = Object.getOwnPropertySymbols(e);
|
|
48
|
+
r && (o = o.filter(function (r) {
|
|
49
|
+
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
50
|
+
})), t.push.apply(t, o);
|
|
51
|
+
}
|
|
52
|
+
return t;
|
|
53
|
+
}
|
|
54
|
+
function _objectSpread2(e) {
|
|
55
|
+
for (var r = 1; r < arguments.length; r++) {
|
|
56
|
+
var t = null != arguments[r] ? arguments[r] : {};
|
|
57
|
+
r % 2 ? ownKeys(Object(t), true).forEach(function (r) {
|
|
58
|
+
_defineProperty(e, r, t[r]);
|
|
59
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
|
|
60
|
+
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return e;
|
|
64
|
+
}
|
|
65
|
+
function _objectWithoutProperties(e, t) {
|
|
66
|
+
if (null == e) return {};
|
|
67
|
+
var o,
|
|
68
|
+
r,
|
|
69
|
+
i = _objectWithoutPropertiesLoose(e, t);
|
|
70
|
+
if (Object.getOwnPropertySymbols) {
|
|
71
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
72
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
73
|
+
}
|
|
74
|
+
return i;
|
|
75
|
+
}
|
|
76
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
77
|
+
if (null == r) return {};
|
|
78
|
+
var t = {};
|
|
79
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
80
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
81
|
+
t[n] = r[n];
|
|
82
|
+
}
|
|
83
|
+
return t;
|
|
84
|
+
}
|
|
85
|
+
function _slicedToArray(r, e) {
|
|
86
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
87
|
+
}
|
|
88
|
+
function _taggedTemplateLiteral(e, t) {
|
|
89
|
+
return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
|
|
90
|
+
raw: {
|
|
91
|
+
value: Object.freeze(t)
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
function _toPrimitive(t, r) {
|
|
96
|
+
if ("object" != typeof t || !t) return t;
|
|
97
|
+
var e = t[Symbol.toPrimitive];
|
|
98
|
+
if (void 0 !== e) {
|
|
99
|
+
var i = e.call(t, r);
|
|
100
|
+
if ("object" != typeof i) return i;
|
|
101
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
102
|
+
}
|
|
103
|
+
return ("string" === r ? String : Number)(t);
|
|
104
|
+
}
|
|
105
|
+
function _toPropertyKey(t) {
|
|
106
|
+
var i = _toPrimitive(t, "string");
|
|
107
|
+
return "symbol" == typeof i ? i : i + "";
|
|
108
|
+
}
|
|
109
|
+
function _unsupportedIterableToArray(r, a) {
|
|
110
|
+
if (r) {
|
|
111
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
112
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
113
|
+
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;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export { _arrayLikeToArray as arrayLikeToArray, _arrayWithHoles as arrayWithHoles, _defineProperty as defineProperty, _iterableToArrayLimit as iterableToArrayLimit, _nonIterableRest as nonIterableRest, _objectSpread2 as objectSpread2, _objectWithoutProperties as objectWithoutProperties, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _slicedToArray as slicedToArray, _taggedTemplateLiteral as taggedTemplateLiteral, _toPrimitive as toPrimitive, _toPropertyKey as toPropertyKey, _unsupportedIterableToArray as unsupportedIterableToArray };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { Box, Alert } from '@tenancy.nz/ui';
|
|
4
|
+
import GalleryImage from './GalleryImage.js';
|
|
5
|
+
import GalleryImageSkeleton from './GalleryImageSkeleton.js';
|
|
6
|
+
import GalleryViewer from './GalleryViewer.js';
|
|
7
|
+
import StyledGalleryGrid from './Gallery.styled.js';
|
|
8
|
+
|
|
9
|
+
function Gallery(_ref) {
|
|
10
|
+
var _ref$images = _ref.images,
|
|
11
|
+
images = _ref$images === void 0 ? [] : _ref$images,
|
|
12
|
+
_ref$loading = _ref.loading,
|
|
13
|
+
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
14
|
+
_ref$infoText = _ref.infoText,
|
|
15
|
+
infoText = _ref$infoText === void 0 ? void 0 : _ref$infoText,
|
|
16
|
+
_ref$renderItem = _ref.renderItem,
|
|
17
|
+
renderItem = _ref$renderItem === void 0 ? void 0 : _ref$renderItem;
|
|
18
|
+
var _useState = useState(false),
|
|
19
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
20
|
+
viewing = _useState2[0],
|
|
21
|
+
setViewing = _useState2[1];
|
|
22
|
+
var _useState3 = useState(0),
|
|
23
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
24
|
+
viewingIndex = _useState4[0],
|
|
25
|
+
setViewingIndex = _useState4[1];
|
|
26
|
+
var handleImagePreview = function handleImagePreview(index) {
|
|
27
|
+
setViewingIndex(index);
|
|
28
|
+
setViewing(true);
|
|
29
|
+
};
|
|
30
|
+
var handleImagePreviewClose = function handleImagePreviewClose() {
|
|
31
|
+
setViewingIndex(0);
|
|
32
|
+
setViewing(false);
|
|
33
|
+
};
|
|
34
|
+
var handleImagePreviewChange = function handleImagePreviewChange(index) {
|
|
35
|
+
setViewingIndex(index);
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */React.createElement(Box, null, /* @__PURE__ */React.createElement(StyledGalleryGrid, null, renderItem && images.map(function (image, i) {
|
|
38
|
+
return renderItem(_objectSpread2({
|
|
39
|
+
onClick: function onClick() {
|
|
40
|
+
return handleImagePreview(i);
|
|
41
|
+
}
|
|
42
|
+
}, image), i);
|
|
43
|
+
}), !renderItem && images.map(function (image, i) {
|
|
44
|
+
return /* @__PURE__ */React.createElement(GalleryImage, {
|
|
45
|
+
key: "".concat(image.path, "-").concat(i),
|
|
46
|
+
src: image.thumb,
|
|
47
|
+
onClick: function onClick() {
|
|
48
|
+
return handleImagePreview(i);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
})), loading && /* @__PURE__ */React.createElement(StyledGalleryGrid, null, /* @__PURE__ */React.createElement(GalleryImageSkeleton, {
|
|
52
|
+
amount: 7
|
|
53
|
+
})), infoText && /* @__PURE__ */React.createElement(Alert, {
|
|
54
|
+
color: "warning",
|
|
55
|
+
sx: {
|
|
56
|
+
mt: 6
|
|
57
|
+
}
|
|
58
|
+
}, infoText), /* @__PURE__ */React.createElement(GalleryViewer, {
|
|
59
|
+
images: images,
|
|
60
|
+
open: viewing,
|
|
61
|
+
currentIndex: viewingIndex,
|
|
62
|
+
onClose: handleImagePreviewClose,
|
|
63
|
+
onChange: handleImagePreviewChange
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { Gallery as default };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { taggedTemplateLiteral as _taggedTemplateLiteral } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { css } from '@emotion/react';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
|
|
5
|
+
var _templateObject, _templateObject2;
|
|
6
|
+
var StyledGalleryGrid = styled("div")(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n"])), function (_ref) {
|
|
7
|
+
var theme = _ref.theme;
|
|
8
|
+
return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 16px;\n\n ", " {\n grid-template-columns: repeat(3, 1fr);\n }\n\n ", " {\n grid-template-columns: repeat(6, 1fr);\n }\n "])), theme.breakpoints.up("sm"), theme.breakpoints.up("md"));
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export { StyledGalleryGrid as default };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import ZoomInIcon from '@tenancy.nz/icons/ZoomInOutlined';
|
|
4
|
+
import { Media, CircularProgress } from '@tenancy.nz/ui';
|
|
5
|
+
import StyledGalleryImage, { StyledGalleryImageOverlay, galleryImageOverlayClassName, StyledGalleryImageText } from './GalleryImage.styled.js';
|
|
6
|
+
|
|
7
|
+
var _excluded = ["actions", "caption", "dragging", "onClick", "src", "uploading"];
|
|
8
|
+
var GalleryImage = /*#__PURE__*/forwardRef(function GalleryImage2(_ref, ref) {
|
|
9
|
+
var _ref$actions = _ref.actions,
|
|
10
|
+
actions = _ref$actions === void 0 ? void 0 : _ref$actions,
|
|
11
|
+
_ref$caption = _ref.caption,
|
|
12
|
+
caption = _ref$caption === void 0 ? void 0 : _ref$caption,
|
|
13
|
+
_ref$dragging = _ref.dragging,
|
|
14
|
+
dragging = _ref$dragging === void 0 ? void 0 : _ref$dragging,
|
|
15
|
+
_ref$onClick = _ref.onClick,
|
|
16
|
+
onClick = _ref$onClick === void 0 ? void 0 : _ref$onClick,
|
|
17
|
+
src = _ref.src,
|
|
18
|
+
_ref$uploading = _ref.uploading,
|
|
19
|
+
uploading = _ref$uploading === void 0 ? false : _ref$uploading,
|
|
20
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
21
|
+
return /* @__PURE__ */React.createElement(StyledGalleryImage, _objectSpread2({
|
|
22
|
+
ref: ref,
|
|
23
|
+
dragging: dragging
|
|
24
|
+
}, rest), /* @__PURE__ */React.createElement(Media, {
|
|
25
|
+
src: src
|
|
26
|
+
}), uploading && /* @__PURE__ */React.createElement(StyledGalleryImageOverlay, {
|
|
27
|
+
visible: true
|
|
28
|
+
}, /* @__PURE__ */React.createElement(CircularProgress, {
|
|
29
|
+
color: "inherit",
|
|
30
|
+
size: 40
|
|
31
|
+
})), !uploading && (onClick || actions) && /* @__PURE__ */React.createElement(StyledGalleryImageOverlay, {
|
|
32
|
+
className: galleryImageOverlayClassName,
|
|
33
|
+
onClick: onClick
|
|
34
|
+
}, actions, onClick && /* @__PURE__ */React.createElement(ZoomInIcon, {
|
|
35
|
+
size: "inherit"
|
|
36
|
+
})), !uploading && caption && /* @__PURE__ */React.createElement(StyledGalleryImageText, null, caption));
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export { GalleryImage as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { taggedTemplateLiteral as _taggedTemplateLiteral } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { css } from '@emotion/react';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
|
|
5
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
|
|
6
|
+
var galleryImageOverlayClassName = "tps-gallery-image-overlay";
|
|
7
|
+
var IMAGE_NO_FORWARD_PROPS = ["dragging"];
|
|
8
|
+
var OVERLAY_NO_FORWARD_PROPS = ["visible"];
|
|
9
|
+
var StyledGalleryImage = styled("div", {
|
|
10
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
11
|
+
return !IMAGE_NO_FORWARD_PROPS.includes(prop);
|
|
12
|
+
}
|
|
13
|
+
})(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n"])), function (_ref) {
|
|
14
|
+
var dragging = _ref.dragging,
|
|
15
|
+
theme = _ref.theme;
|
|
16
|
+
return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n overflow: hidden;\n height: 162px;\n transform-origin: 50% 50%;\n border-radius: 8px;\n cursor: zoom-in;\n\n &:first-child {\n height: 156px;\n grid-row-start: span 2;\n grid-column-start: span 2;\n }\n\n ", " {\n &:first-child {\n height: 340px;\n }\n }\n\n ", " {\n &:nth-child(4n + 10) {\n grid-column-start: 3;\n }\n }\n\n ", "\n\n &:hover .", " {\n opacity: 1;\n visibility: visible;\n backface-visibility: visible;\n }\n "])), theme.breakpoints.up("sm"), theme.breakpoints.up("md"), dragging && css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n opacity: 0.5;\n transform-origin: 0 0;\n "]))), galleryImageOverlayClassName);
|
|
17
|
+
});
|
|
18
|
+
var StyledGalleryImageOverlay = styled("div", {
|
|
19
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
20
|
+
return !OVERLAY_NO_FORWARD_PROPS.includes(prop);
|
|
21
|
+
}
|
|
22
|
+
})(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n ", "\n"])), function (_ref2) {
|
|
23
|
+
var visible = _ref2.visible;
|
|
24
|
+
return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 3;\n background: rgba(0, 0, 0, 0.5);\n color: #fff;\n font-size: 50px;\n transition: all 275ms ease-in-out;\n ", "\n "])), !visible && css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n opacity: 0;\n visibility: hidden;\n backface-visibility: hidden;\n cursor: pointer;\n background: rgba(0, 0, 0, 0.38);\n "]))));
|
|
25
|
+
});
|
|
26
|
+
var StyledGalleryImageText = styled("span")(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: inline-flex;\n position: absolute;\n right: 8px;\n bottom: 8px;\n padding: 2px 8px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n font-weight: 500;\n z-index: 2;\n font-size: 12px;\n"])));
|
|
27
|
+
|
|
28
|
+
export { StyledGalleryImageOverlay, StyledGalleryImageText, StyledGalleryImage as default, galleryImageOverlayClassName };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Skeleton } from '@tenancy.nz/ui';
|
|
3
|
+
import StyledGalleryImage from './GalleryImage.styled.js';
|
|
4
|
+
|
|
5
|
+
function GalleryImageSkeleton(_ref) {
|
|
6
|
+
var _ref$amount = _ref.amount,
|
|
7
|
+
amount = _ref$amount === void 0 ? 1 : _ref$amount;
|
|
8
|
+
return /* @__PURE__ */React.createElement(React.Fragment, null, Array(amount).fill(1).map(function (_, i) {
|
|
9
|
+
return /* @__PURE__ */React.createElement(StyledGalleryImage, {
|
|
10
|
+
key: "gallery-loading-image-".concat(i)
|
|
11
|
+
}, /* @__PURE__ */React.createElement(Skeleton, {
|
|
12
|
+
width: "100%",
|
|
13
|
+
height: "100%",
|
|
14
|
+
variant: "rectangular"
|
|
15
|
+
}));
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { GalleryImageSkeleton as default };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Modal from '@mui/material/Modal';
|
|
4
|
+
import ChevronLeftIcon from '@tenancy.nz/icons/ChevronLeftOutlined';
|
|
5
|
+
import ChevronRightIcon from '@tenancy.nz/icons/ChevronRightOutlined';
|
|
6
|
+
import CloseIcon from '@tenancy.nz/icons/CloseOutlined';
|
|
7
|
+
import { StyledGalleryViewer, StyledGalleryViewerClose, StyledGalleryViewerPrev, StyledGalleryViewerFigure, StyledGalleryViewerImage, StyledGalleryViewerCaption, StyledGalleryViewerNext } from './GalleryViewer.styled.js';
|
|
8
|
+
|
|
9
|
+
var _excluded = ["currentIndex", "images", "open", "onChange", "onClose"];
|
|
10
|
+
function GalleryViewer(_ref) {
|
|
11
|
+
var _ref$currentIndex = _ref.currentIndex,
|
|
12
|
+
currentIndex = _ref$currentIndex === void 0 ? 0 : _ref$currentIndex,
|
|
13
|
+
images = _ref.images,
|
|
14
|
+
_ref$open = _ref.open,
|
|
15
|
+
open = _ref$open === void 0 ? false : _ref$open,
|
|
16
|
+
onChange = _ref.onChange,
|
|
17
|
+
onClose = _ref.onClose,
|
|
18
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
19
|
+
var count = images.length;
|
|
20
|
+
var image = images[currentIndex];
|
|
21
|
+
var hasPrev = currentIndex > 0;
|
|
22
|
+
var hasNext = currentIndex < count - 1;
|
|
23
|
+
var handleNext = function handleNext() {
|
|
24
|
+
onChange(currentIndex + 1);
|
|
25
|
+
};
|
|
26
|
+
var handlePrev = function handlePrev() {
|
|
27
|
+
onChange(currentIndex - 1);
|
|
28
|
+
};
|
|
29
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
30
|
+
if (event.key === "ArrowRight" && hasNext) {
|
|
31
|
+
handleNext();
|
|
32
|
+
}
|
|
33
|
+
if (event.key === "ArrowLeft" && hasPrev) {
|
|
34
|
+
handlePrev();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var handleBackdropClick = function handleBackdropClick(event) {
|
|
38
|
+
if (event.target === event.currentTarget) {
|
|
39
|
+
onClose();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return /* @__PURE__ */React.createElement(Modal, _objectSpread2({
|
|
43
|
+
open: open,
|
|
44
|
+
onClose: onClose,
|
|
45
|
+
onKeyDown: handleKeyDown,
|
|
46
|
+
hideBackdrop: true
|
|
47
|
+
}, rest), /* @__PURE__ */React.createElement(StyledGalleryViewer, {
|
|
48
|
+
onClick: handleBackdropClick
|
|
49
|
+
}, /* @__PURE__ */React.createElement(StyledGalleryViewerClose, {
|
|
50
|
+
type: "button",
|
|
51
|
+
"aria-label": "Close",
|
|
52
|
+
onClick: onClose
|
|
53
|
+
}, /* @__PURE__ */React.createElement(CloseIcon, {
|
|
54
|
+
size: "inherit"
|
|
55
|
+
})), hasPrev && /* @__PURE__ */React.createElement(StyledGalleryViewerPrev, {
|
|
56
|
+
type: "button",
|
|
57
|
+
"aria-label": "Previous image",
|
|
58
|
+
onClick: handlePrev
|
|
59
|
+
}, /* @__PURE__ */React.createElement(ChevronLeftIcon, {
|
|
60
|
+
size: "inherit"
|
|
61
|
+
})), image && /* @__PURE__ */React.createElement(StyledGalleryViewerFigure, null, /* @__PURE__ */React.createElement(StyledGalleryViewerImage, {
|
|
62
|
+
src: image.path,
|
|
63
|
+
alt: image.caption || image.name || ""
|
|
64
|
+
}), /* @__PURE__ */React.createElement(StyledGalleryViewerCaption, null, count > 1 && /* @__PURE__ */React.createElement(React.Fragment, null, /* @__PURE__ */React.createElement("div", null, currentIndex + 1), /* @__PURE__ */React.createElement("span", null, "/"), /* @__PURE__ */React.createElement("div", null, count)))), hasNext && /* @__PURE__ */React.createElement(StyledGalleryViewerNext, {
|
|
65
|
+
type: "button",
|
|
66
|
+
"aria-label": "Next image",
|
|
67
|
+
onClick: handleNext
|
|
68
|
+
}, /* @__PURE__ */React.createElement(ChevronRightIcon, {
|
|
69
|
+
size: "inherit"
|
|
70
|
+
}))));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { GalleryViewer as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { taggedTemplateLiteral as _taggedTemplateLiteral } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { css } from '@emotion/react';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import { token } from '@tenancy.nz/ui';
|
|
5
|
+
|
|
6
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
|
|
7
|
+
var StyledGalleryViewer = styled("div")(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 56px;\n background: rgba(24, 27, 37, 0.85);\n outline: none;\n"])));
|
|
8
|
+
var StyledGalleryViewerFigure = styled("figure")(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n max-width: 100%;\n max-height: 100%;\n margin: 0;\n"])));
|
|
9
|
+
var StyledGalleryViewerImage = styled("img")(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n max-width: 100%;\n max-height: calc(100vh - 160px);\n object-fit: contain;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5);\n"])));
|
|
10
|
+
var StyledGalleryViewerCaption = styled("figcaption")(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: flex;\n width: 100%;\n justify-content: center;\n align-items: center;\n gap: 10px;\n margin-top: 16px;\n color: #fff;\n font-size: 16px;\n font-weight: 660;\n\n > div {\n width: 36px;\n height: 36px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n"])));
|
|
11
|
+
var viewerButtonStyles = css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n && {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n padding: 0;\n border: 1px solid ", ";\n border-radius: 4px;\n background: ", ";\n color: ", ";\n font-size: 24px;\n cursor: pointer;\n transition: background 175ms ease-in-out;\n\n &:hover {\n background: ", ";\n }\n }\n"])), token("palette.component.button.secondary.borderColor"), token("palette.component.button.secondary.backgroundDefault"), token("palette.semantic.icons.primaryColor"), token("palette.component.button.secondary.backgroundDefault"));
|
|
12
|
+
var StyledGalleryViewerClose = styled("button")(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n ", ";\n top: 16px;\n right: 16px;\n"])), viewerButtonStyles);
|
|
13
|
+
var StyledGalleryViewerPrev = styled("button")(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n ", ";\n left: 16px;\n top: 50%;\n transform: translateY(-50%);\n"])), viewerButtonStyles);
|
|
14
|
+
var StyledGalleryViewerNext = styled("button")(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n ", ";\n right: 16px;\n top: 50%;\n transform: translateY(-50%);\n"])), viewerButtonStyles);
|
|
15
|
+
|
|
16
|
+
export { StyledGalleryViewer, StyledGalleryViewerCaption, StyledGalleryViewerClose, StyledGalleryViewerFigure, StyledGalleryViewerImage, StyledGalleryViewerNext, StyledGalleryViewerPrev };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as Gallery } from './components/Gallery.js';
|
|
2
|
+
export { default as GalleryImage } from './components/GalleryImage.js';
|
|
3
|
+
export { default as GalleryImageSkeleton } from './components/GalleryImageSkeleton.js';
|
|
4
|
+
export { default as GalleryViewer } from './components/GalleryViewer.js';
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tenancy.nz/gallery",
|
|
3
|
+
"description": "React UI gallery components.",
|
|
4
|
+
"version": "1.10.1",
|
|
5
|
+
"author": "TPS <https://www.tenancy.co.nz>",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/cjs/index.cjs",
|
|
8
|
+
"module": "dist/esm/index.js",
|
|
9
|
+
"types": "dist/types/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@emotion/react": "^11.14.0",
|
|
18
|
+
"@emotion/styled": "^11.14.1",
|
|
19
|
+
"@mui/material": "^7.3.1",
|
|
20
|
+
"react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
21
|
+
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
22
|
+
"@tenancy.nz/icons": "1.10.1",
|
|
23
|
+
"@tenancy.nz/ui": "1.10.1"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@emotion/react": "^11.14.0",
|
|
27
|
+
"@emotion/styled": "^11.14.1",
|
|
28
|
+
"@mui/material": "^7.3.1",
|
|
29
|
+
"@tenancy.nz/icons": "1.10.1",
|
|
30
|
+
"@tenancy.nz/ui": "1.10.1"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsx ../../scripts/build.js"
|
|
34
|
+
}
|
|
35
|
+
}
|