@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.
@@ -1 +1,3 @@
1
- export { default as LanguageField } from './LanguageField';
1
+ import ResponsiveImage from '../../components/ResponsiveImage';
2
+ import LanguageField from './LanguageField';
3
+ export { LanguageField, ResponsiveImage };
@@ -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
+ }
@@ -1,3 +1,4 @@
1
1
  import '../utils/inject-global-components';
2
2
  export { default as CustomComponentRenderer } from './CustomComponentRenderer';
3
3
  export * from './CustomComponentRenderer';
4
+ export { default as ResponsiveImage } from './ResponsiveImage';