@evergis/uilib-gl 1.0.98 → 1.0.100
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.
|
@@ -29,4 +29,9 @@ declare type SlideShowImageProps = ImageProps & {
|
|
|
29
29
|
};
|
|
30
30
|
export declare const SlideShowImageContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
31
31
|
export declare const ChoosableImage: import("styled-components").StyledComponent<import("react").FC<ImageProps>, import("styled-components").DefaultTheme, SlideShowImageProps, never>;
|
|
32
|
+
export declare const PreviewImageError: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
33
|
+
export declare const PreviewImageErrorText: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
34
|
+
export declare const SlideShowImageStatus: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
35
|
+
chosen?: boolean | undefined;
|
|
36
|
+
}, never>;
|
|
32
37
|
export {};
|
|
@@ -2,6 +2,8 @@ import { RefObject } from "react";
|
|
|
2
2
|
export declare type IPreviewImage = {
|
|
3
3
|
src: string;
|
|
4
4
|
fileName: string;
|
|
5
|
+
hasError?: boolean;
|
|
6
|
+
isLoading?: boolean;
|
|
5
7
|
};
|
|
6
8
|
export declare type ControlText = {
|
|
7
9
|
downloadTitleText?: string;
|
|
@@ -9,6 +11,7 @@ export declare type ControlText = {
|
|
|
9
11
|
closeTitleText?: string;
|
|
10
12
|
prevImgTitleText?: string;
|
|
11
13
|
nextImgTitleText?: string;
|
|
14
|
+
errorTitleText?: string;
|
|
12
15
|
};
|
|
13
16
|
export declare type IPreviewProps = ControlText & {
|
|
14
17
|
images?: IPreviewImage[];
|
|
@@ -40,10 +43,10 @@ export declare type IPreviewControlsProps = ControlText & {
|
|
|
40
43
|
export interface IPreviewSlideShowProps {
|
|
41
44
|
chosenImageIndex?: number;
|
|
42
45
|
setPreview?: (idx: number) => void;
|
|
43
|
-
images?:
|
|
46
|
+
images?: IPreviewImage[];
|
|
44
47
|
}
|
|
45
48
|
export interface IGalleryImageProps {
|
|
46
|
-
image:
|
|
49
|
+
image: IPreviewImage;
|
|
47
50
|
isChosen: boolean;
|
|
48
51
|
slideShowRef: RefObject<HTMLDivElement>;
|
|
49
52
|
adjustSlider: (px: number) => void;
|
package/dist/uilib-gl.esm.js
CHANGED
|
@@ -19849,25 +19849,27 @@ const DropdownField = /*#__PURE__*/styled.div.attrs(props => ({
|
|
|
19849
19849
|
border-color: ${_ref4 => {
|
|
19850
19850
|
let {
|
|
19851
19851
|
theme: {
|
|
19852
|
-
input
|
|
19852
|
+
input,
|
|
19853
|
+
palette
|
|
19853
19854
|
},
|
|
19854
19855
|
error,
|
|
19855
19856
|
active,
|
|
19856
19857
|
focused
|
|
19857
19858
|
} = _ref4;
|
|
19858
|
-
return error ? input.error : active ?
|
|
19859
|
+
return error ? input.error : active ? palette.primary : focused ? input.hoverBorderColor : "";
|
|
19859
19860
|
}};
|
|
19860
19861
|
|
|
19861
19862
|
:hover {
|
|
19862
19863
|
border-color: ${_ref5 => {
|
|
19863
19864
|
let {
|
|
19864
19865
|
theme: {
|
|
19865
|
-
input
|
|
19866
|
+
input,
|
|
19867
|
+
palette
|
|
19866
19868
|
},
|
|
19867
19869
|
error,
|
|
19868
19870
|
active
|
|
19869
19871
|
} = _ref5;
|
|
19870
|
-
return error ? input.error : active ?
|
|
19872
|
+
return error ? input.error : active ? palette.primary : input.hoverBorderColor;
|
|
19871
19873
|
}};
|
|
19872
19874
|
}
|
|
19873
19875
|
`;
|
|
@@ -27019,6 +27021,70 @@ const ChoosableImage = /*#__PURE__*/styled(Image).attrs(() => ({
|
|
|
27019
27021
|
border-radius: 2px;
|
|
27020
27022
|
box-sizing: border-box;
|
|
27021
27023
|
`;
|
|
27024
|
+
const PreviewImageError = styled.div`
|
|
27025
|
+
display: flex;
|
|
27026
|
+
flex-direction: column;
|
|
27027
|
+
align-items: center;
|
|
27028
|
+
justify-content: center;
|
|
27029
|
+
gap: 0.5rem;
|
|
27030
|
+
width: 100%;
|
|
27031
|
+
height: 100%;
|
|
27032
|
+
color: rgba(255, 255, 255, 0.54);
|
|
27033
|
+
background: rgba(0, 0, 0, 0.24);
|
|
27034
|
+
border-radius: 0.25rem;
|
|
27035
|
+
|
|
27036
|
+
${Icon} {
|
|
27037
|
+
width: 3rem;
|
|
27038
|
+
height: 3rem;
|
|
27039
|
+
}
|
|
27040
|
+
|
|
27041
|
+
${Icon}:after {
|
|
27042
|
+
font-size: 3rem;
|
|
27043
|
+
color: rgba(255, 255, 255, 0.54);
|
|
27044
|
+
}
|
|
27045
|
+
`;
|
|
27046
|
+
const PreviewImageErrorText = styled.div`
|
|
27047
|
+
font-size: 0.875rem;
|
|
27048
|
+
color: rgba(255, 255, 255, 0.7);
|
|
27049
|
+
`;
|
|
27050
|
+
const SlideShowImageStatus = styled.div`
|
|
27051
|
+
display: flex;
|
|
27052
|
+
align-items: center;
|
|
27053
|
+
justify-content: center;
|
|
27054
|
+
width: 4.5rem;
|
|
27055
|
+
height: 4.5rem;
|
|
27056
|
+
margin: 0 0.25rem;
|
|
27057
|
+
border: ${_ref11 => {
|
|
27058
|
+
let {
|
|
27059
|
+
chosen
|
|
27060
|
+
} = _ref11;
|
|
27061
|
+
return chosen ? 2 : 1;
|
|
27062
|
+
}}px solid #fff;
|
|
27063
|
+
opacity: ${_ref12 => {
|
|
27064
|
+
let {
|
|
27065
|
+
chosen
|
|
27066
|
+
} = _ref12;
|
|
27067
|
+
return chosen ? 1 : 0.54;
|
|
27068
|
+
}};
|
|
27069
|
+
border-radius: 2px;
|
|
27070
|
+
box-sizing: border-box;
|
|
27071
|
+
background: rgba(0, 0, 0, 0.24);
|
|
27072
|
+
|
|
27073
|
+
${Icon} {
|
|
27074
|
+
width: 1.5rem;
|
|
27075
|
+
height: 1.5rem;
|
|
27076
|
+
}
|
|
27077
|
+
|
|
27078
|
+
${Icon}:after {
|
|
27079
|
+
font-size: 1.5rem;
|
|
27080
|
+
color: rgba(255, 255, 255, 0.7);
|
|
27081
|
+
}
|
|
27082
|
+
|
|
27083
|
+
${LinearProgress} {
|
|
27084
|
+
width: 60%;
|
|
27085
|
+
border-radius: 0.25rem;
|
|
27086
|
+
}
|
|
27087
|
+
`;
|
|
27022
27088
|
|
|
27023
27089
|
const PreviewControlsComponent = _ref => {
|
|
27024
27090
|
let {
|
|
@@ -27177,12 +27243,22 @@ const SlideShowImage = /*#__PURE__*/memo(_ref => {
|
|
|
27177
27243
|
onClick
|
|
27178
27244
|
} = _ref;
|
|
27179
27245
|
const ref = useAdjustSlideShowImage(isChosen, slideShowRef, adjustSlider);
|
|
27246
|
+
const [hasLoadError, setHasLoadError] = useState(false);
|
|
27247
|
+
const showError = image.hasError || hasLoadError;
|
|
27248
|
+
const showLoader = !showError && (image.isLoading || !image.src);
|
|
27180
27249
|
return React.createElement(SlideShowImageContainer, {
|
|
27181
27250
|
ref: ref,
|
|
27182
27251
|
onClick: onClick
|
|
27183
|
-
}, React.createElement(
|
|
27184
|
-
|
|
27252
|
+
}, showError ? React.createElement(SlideShowImageStatus, {
|
|
27253
|
+
chosen: isChosen
|
|
27254
|
+
}, React.createElement(Icon, {
|
|
27255
|
+
kind: "alert"
|
|
27256
|
+
})) : showLoader ? React.createElement(SlideShowImageStatus, {
|
|
27185
27257
|
chosen: isChosen
|
|
27258
|
+
}, React.createElement(LinearProgress, null)) : React.createElement(ChoosableImage, {
|
|
27259
|
+
src: image.src,
|
|
27260
|
+
chosen: isChosen,
|
|
27261
|
+
onError: () => setHasLoadError(true)
|
|
27186
27262
|
}));
|
|
27187
27263
|
});
|
|
27188
27264
|
|
|
@@ -27201,7 +27277,7 @@ const PreviewSlideShow = /*#__PURE__*/memo(_ref => {
|
|
|
27201
27277
|
ref: slideShowRef,
|
|
27202
27278
|
left: left
|
|
27203
27279
|
}, images && images.map((image, index) => React.createElement(SlideShowImage, {
|
|
27204
|
-
key: `${index}_${image}`,
|
|
27280
|
+
key: `${index}_${image.src}`,
|
|
27205
27281
|
isChosen: index === chosenImageIndex,
|
|
27206
27282
|
image: image,
|
|
27207
27283
|
slideShowRef: slideShowRef,
|
|
@@ -27247,7 +27323,13 @@ const PreviewComponent = _ref => {
|
|
|
27247
27323
|
images = [],
|
|
27248
27324
|
isOpen,
|
|
27249
27325
|
root,
|
|
27250
|
-
onClose
|
|
27326
|
+
onClose,
|
|
27327
|
+
downloadTitleText,
|
|
27328
|
+
fullScreenTitleText,
|
|
27329
|
+
closeTitleText,
|
|
27330
|
+
prevImgTitleText,
|
|
27331
|
+
nextImgTitleText,
|
|
27332
|
+
errorTitleText
|
|
27251
27333
|
} = _ref;
|
|
27252
27334
|
const [{
|
|
27253
27335
|
chosenImageIndex,
|
|
@@ -27259,33 +27341,46 @@ const PreviewComponent = _ref => {
|
|
|
27259
27341
|
next,
|
|
27260
27342
|
toggleFullscreen
|
|
27261
27343
|
}] = useImageSlideShow(images);
|
|
27344
|
+
const [failedSrcs, setFailedSrcs] = useState({});
|
|
27345
|
+
const handleImageError = useCallback(src => {
|
|
27346
|
+
if (!src) return;
|
|
27347
|
+
setFailedSrcs(prev => prev[src] ? prev : { ...prev,
|
|
27348
|
+
[src]: true
|
|
27349
|
+
});
|
|
27350
|
+
}, []);
|
|
27351
|
+
const decoratedImages = useMemo(() => images.map(image => failedSrcs[image.src] ? { ...image,
|
|
27352
|
+
hasError: true
|
|
27353
|
+
} : image), [images, failedSrcs]);
|
|
27354
|
+
const decoratedChosenImage = useMemo(() => chosenImage ? decoratedImages[chosenImageIndex] ?? chosenImage : undefined, [chosenImage, chosenImageIndex, decoratedImages]);
|
|
27262
27355
|
const shouldOpenPreview = useMemo(() => images.length > 0 && isOpen, [images, isOpen]);
|
|
27263
|
-
const imageSources = useMemo(() => images.map(_ref2 => {
|
|
27264
|
-
let {
|
|
27265
|
-
src
|
|
27266
|
-
} = _ref2;
|
|
27267
|
-
return src;
|
|
27268
|
-
}), [images]);
|
|
27269
27356
|
return !shouldOpenPreview ? null : React.createElement(Portal, {
|
|
27270
27357
|
root: root
|
|
27271
27358
|
}, React.createElement(ThemeProvider, {
|
|
27272
27359
|
theme: theme$1
|
|
27273
27360
|
}, React.createElement(PreviewOverlay, null, React.createElement(PreviewControls, {
|
|
27274
|
-
chosenImage:
|
|
27361
|
+
chosenImage: decoratedChosenImage,
|
|
27275
27362
|
fullscreen: fullscreen,
|
|
27276
27363
|
toggleFullscreen: toggleFullscreen,
|
|
27277
27364
|
prev: prev,
|
|
27278
27365
|
next: next,
|
|
27279
|
-
close: onClose
|
|
27366
|
+
close: onClose,
|
|
27367
|
+
downloadTitleText: downloadTitleText,
|
|
27368
|
+
fullScreenTitleText: fullScreenTitleText,
|
|
27369
|
+
closeTitleText: closeTitleText,
|
|
27370
|
+
prevImgTitleText: prevImgTitleText,
|
|
27371
|
+
nextImgTitleText: nextImgTitleText
|
|
27280
27372
|
}), React.createElement(PreviewSlideShow, {
|
|
27281
|
-
images:
|
|
27373
|
+
images: decoratedImages,
|
|
27282
27374
|
chosenImageIndex: chosenImageIndex,
|
|
27283
27375
|
setPreview: setChosenImageIndex
|
|
27284
|
-
}),
|
|
27285
|
-
fullscreen: fullscreen
|
|
27286
|
-
}, React.createElement(PreviewImage, {
|
|
27287
|
-
src: chosenImage.src,
|
|
27376
|
+
}), decoratedChosenImage && React.createElement(PreviewImageContainer, {
|
|
27288
27377
|
fullscreen: fullscreen
|
|
27378
|
+
}, decoratedChosenImage.hasError ? React.createElement(PreviewImageError, null, React.createElement(Icon, {
|
|
27379
|
+
kind: "alert"
|
|
27380
|
+
}), React.createElement(PreviewImageErrorText, null, errorTitleText || "Ресурс недоступен")) : React.createElement(PreviewImage, {
|
|
27381
|
+
src: decoratedChosenImage.src,
|
|
27382
|
+
fullscreen: fullscreen,
|
|
27383
|
+
onError: () => handleImageError(decoratedChosenImage.src)
|
|
27289
27384
|
})))));
|
|
27290
27385
|
};
|
|
27291
27386
|
|