@blocklet/pages-kit 0.2.451 → 0.2.453
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/lib/cjs/builtin/components/index.js +5 -3
- package/lib/cjs/components/ResponsiveImage/index.js +68 -0
- package/lib/cjs/components/index.js +3 -1
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/builtin/components/index.js +3 -1
- package/lib/esm/components/ResponsiveImage/index.js +65 -0
- package/lib/esm/components/index.js +1 -0
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/types/builtin/components/index.d.ts +3 -1
- package/lib/types/components/ResponsiveImage/index.d.ts +16 -0
- package/lib/types/components/index.d.ts +1 -0
- package/lib/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { useTheme } from '@arcblock/ux/lib/Theme';
|
|
14
|
+
import { Box } from '@mui/material';
|
|
15
|
+
export default function ResponsiveImage(_a) {
|
|
16
|
+
var { src, sizesAttr, quality = 90, sx, alt } = _a, props = __rest(_a, ["src", "sizesAttr", "quality", "sx", "alt"]);
|
|
17
|
+
const theme = useTheme();
|
|
18
|
+
const breakpoints = theme.breakpoints.values;
|
|
19
|
+
// Generate srcset based on each breakpoint width
|
|
20
|
+
const generateSrcSet = (baseUrl, breakpointWidths) => {
|
|
21
|
+
var _a;
|
|
22
|
+
// Check if URL already has query parameters
|
|
23
|
+
if (baseUrl.includes('?')) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
// Check file extension
|
|
27
|
+
const fileExtension = (_a = baseUrl.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
28
|
+
const supportedExtensions = ['png', 'jpg', 'jpeg', 'webp', 'gif'];
|
|
29
|
+
if (!fileExtension || !supportedExtensions.includes(fileExtension)) {
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
// Get unique widths and their 2x versions
|
|
33
|
+
const widths = new Set(Object.values(breakpointWidths)
|
|
34
|
+
.flatMap((width) => [width, width * 2])
|
|
35
|
+
.sort((a, b) => a - b));
|
|
36
|
+
return Array.from(widths)
|
|
37
|
+
.map((width) => {
|
|
38
|
+
const resizeParams = `?imageFilter=resize&w=${Math.round(width)}&q=${quality}&f=webp`;
|
|
39
|
+
return `${baseUrl}${resizeParams} ${width}w`;
|
|
40
|
+
})
|
|
41
|
+
.join(', ');
|
|
42
|
+
};
|
|
43
|
+
// Generate sizes attribute based on breakpoint widths
|
|
44
|
+
const generateSizes = (breakpointWidths) => {
|
|
45
|
+
if (!breakpointWidths) {
|
|
46
|
+
return '';
|
|
47
|
+
}
|
|
48
|
+
const entries = Object.entries(breakpointWidths);
|
|
49
|
+
return entries
|
|
50
|
+
.sort(([a], [b]) => breakpoints[a] - breakpoints[b])
|
|
51
|
+
.map(([breakpoint, width], index) => {
|
|
52
|
+
// Check if breakpoint exists in theme breakpoints
|
|
53
|
+
if (!(breakpoint in breakpoints)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
if (index === entries.length - 1) {
|
|
57
|
+
return `${width}px`;
|
|
58
|
+
}
|
|
59
|
+
return `(max-width: ${breakpoints[breakpoint]}px) ${width}px`;
|
|
60
|
+
})
|
|
61
|
+
.filter((size) => size !== null)
|
|
62
|
+
.join(', ');
|
|
63
|
+
};
|
|
64
|
+
return (_jsx(Box, Object.assign({ component: "img", src: src, srcSet: generateSrcSet(src, sizesAttr), sizes: generateSizes(sizesAttr), alt: alt !== null && alt !== void 0 ? alt : '', loading: "lazy", sx: sx }, props)));
|
|
65
|
+
}
|