@itcase/ui 1.9.48 → 1.9.50

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.
@@ -6,7 +6,7 @@ var clsx = require('clsx');
6
6
  var useAppearanceConfig = require('./cjs/hooks/useAppearanceConfig/useAppearanceConfig.js');
7
7
  var useDevicePropsGenerator = require('./cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js');
8
8
  var Icon = require('./Icon_cjs_CuqEv1jm.js');
9
- var Image = require('./Image_cjs_BxZFowhi.js');
9
+ var Image = require('./Image_cjs_C_FMjUjx.js');
10
10
  var Text = require('./Text_cjs_erTy2pUN.js');
11
11
 
12
12
  const avatarAppearanceDefault = {
@@ -4,7 +4,7 @@ import clsx from 'clsx';
4
4
  import { useAppearanceConfig } from './hooks/useAppearanceConfig/useAppearanceConfig.js';
5
5
  import { useDevicePropsGenerator } from './hooks/useDevicePropsGenerator/useDevicePropsGenerator.js';
6
6
  import { I as Icon, B as Badge } from './Icon_es_DoAtUvPe.js';
7
- import { I as Image } from './Image_es_Bx7l_UwQ.js';
7
+ import { I as Image } from './Image_es_Ca7UQOkj.js';
8
8
  import { T as Text } from './Text_es_B85LGfjW.js';
9
9
 
10
10
  const avatarAppearanceDefault = {
@@ -12,22 +12,26 @@ const Image = urlWithAssetPrefix.urlWithAssetPrefix(React.forwardRef(function Im
12
12
  const propsGenerator = useDevicePropsGenerator.useDevicePropsGenerator(props);
13
13
  const { fillClass, fillHoverClass, borderColorClass, borderColorImageClass, borderTypeClass, borderWidthClass, cursorClass, heightClass, horizontalAlignClass, imageHeightClass, imageWidthClass, resizeModeClass, shapeClass, verticalAlignClass, widthClass, } = propsGenerator;
14
14
  const { image: imageStyles, styles, wrapper: wrapperStyles, } = useStyles.useStyles(props);
15
- const onErrorImage = React.useCallback((event) => {
15
+ const [imageSrc, setImageSrc] = React.useState(null);
16
+ // Handles image load errors: calls onError callback or falls back to placeholderUrl
17
+ const handleImageError = React.useCallback((event) => {
16
18
  const img = event.target;
17
19
  if (onError) {
18
20
  onError(event);
21
+ return;
19
22
  }
20
- else if (placeholderUrl && !img.src.endsWith(placeholderUrl)) {
23
+ if (placeholderUrl && !img.src.endsWith(placeholderUrl)) {
21
24
  img.src = placeholderUrl;
22
25
  }
23
26
  }, [onError, placeholderUrl]);
24
- // If src and placeholderUrl are both not provided, use UNKNOWN_IMAGE_SRC to trigger onError
25
- const imageSrc = src || placeholderUrl || UNKNOWN_IMAGE_SRC;
27
+ // Syncs imageSrc state with src and placeholderUrl props
28
+ React.useEffect(() => {
29
+ // eslint-disable-next-line react-hooks/set-state-in-effect
30
+ setImageSrc(src || placeholderUrl || null);
31
+ }, [src, placeholderUrl]);
26
32
  return (jsxRuntime.jsxs("div", { className: clsx(className, 'image', mode && `image_mode_${mode}`, type && `image_type_${type}`, cursorClass && `cursor_${cursorClass}`, horizontalAlignClass &&
27
33
  `image_horizontal-align_${horizontalAlignClass}`, verticalAlignClass && `image_vertical-align_${verticalAlignClass}`, shapeClass && `image_shape_${shapeClass}`, fillClass && `fill_${fillClass}`, fillHoverClass && `fill_hover_${fillHoverClass}`, resizeModeClass && `image_resize-mode_${resizeModeClass}`, widthClass && `width_${widthClass}`, heightClass && `height_${heightClass}`, isSkeleton && 'image_skeleton'), ref: ref, "data-testid": dataTestId, "data-tour": dataTour, style: styles, onClick: onClick, children: [before, jsxRuntime.jsxs("div", { className: clsx('image__wrapper', imageWrapperClassName), style: wrapperStyles, children: [jsxRuntime.jsx("img", { className: clsx('image__item', imageWidthClass && `width_${imageWidthClass}`, imageHeightClass && `height_${imageHeightClass}`, imageClassName, borderWidthClass && `border-width_${borderWidthClass}`, borderColorClass && `border-color_${borderColorClass}`, borderTypeClass && `border_type_${borderTypeClass}`, borderColorImageClass &&
28
- `border-color-image_${borderColorImageClass}`), src: imageSrc, title: title || alt, alt: alt || title, style: imageStyles, onError: onErrorImage }), overlay, caption, children] }), after] }));
34
+ `border-color-image_${borderColorImageClass}`), src: imageSrc, title: title || alt, alt: alt || title, "data-original-src": src, style: imageStyles, onError: handleImageError }), overlay, caption, children] }), after] }));
29
35
  }));
30
- // Make it random to not accidentally match a real image URL
31
- const UNKNOWN_IMAGE_SRC = `unknown-image-${Math.random()}`;
32
36
 
33
37
  exports.Image = Image;
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useCallback } from 'react';
2
+ import { forwardRef, useState, useCallback, useEffect } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { urlWithAssetPrefix } from './hoc/urlWithAssetPrefix.js';
5
5
  import { useDevicePropsGenerator } from './hooks/useDevicePropsGenerator/useDevicePropsGenerator.js';
@@ -10,22 +10,26 @@ const Image = urlWithAssetPrefix(forwardRef(function Image(props, ref) {
10
10
  const propsGenerator = useDevicePropsGenerator(props);
11
11
  const { fillClass, fillHoverClass, borderColorClass, borderColorImageClass, borderTypeClass, borderWidthClass, cursorClass, heightClass, horizontalAlignClass, imageHeightClass, imageWidthClass, resizeModeClass, shapeClass, verticalAlignClass, widthClass, } = propsGenerator;
12
12
  const { image: imageStyles, styles, wrapper: wrapperStyles, } = useStyles(props);
13
- const onErrorImage = useCallback((event) => {
13
+ const [imageSrc, setImageSrc] = useState(null);
14
+ // Handles image load errors: calls onError callback or falls back to placeholderUrl
15
+ const handleImageError = useCallback((event) => {
14
16
  const img = event.target;
15
17
  if (onError) {
16
18
  onError(event);
19
+ return;
17
20
  }
18
- else if (placeholderUrl && !img.src.endsWith(placeholderUrl)) {
21
+ if (placeholderUrl && !img.src.endsWith(placeholderUrl)) {
19
22
  img.src = placeholderUrl;
20
23
  }
21
24
  }, [onError, placeholderUrl]);
22
- // If src and placeholderUrl are both not provided, use UNKNOWN_IMAGE_SRC to trigger onError
23
- const imageSrc = src || placeholderUrl || UNKNOWN_IMAGE_SRC;
25
+ // Syncs imageSrc state with src and placeholderUrl props
26
+ useEffect(() => {
27
+ // eslint-disable-next-line react-hooks/set-state-in-effect
28
+ setImageSrc(src || placeholderUrl || null);
29
+ }, [src, placeholderUrl]);
24
30
  return (jsxs("div", { className: clsx(className, 'image', mode && `image_mode_${mode}`, type && `image_type_${type}`, cursorClass && `cursor_${cursorClass}`, horizontalAlignClass &&
25
31
  `image_horizontal-align_${horizontalAlignClass}`, verticalAlignClass && `image_vertical-align_${verticalAlignClass}`, shapeClass && `image_shape_${shapeClass}`, fillClass && `fill_${fillClass}`, fillHoverClass && `fill_hover_${fillHoverClass}`, resizeModeClass && `image_resize-mode_${resizeModeClass}`, widthClass && `width_${widthClass}`, heightClass && `height_${heightClass}`, isSkeleton && 'image_skeleton'), ref: ref, "data-testid": dataTestId, "data-tour": dataTour, style: styles, onClick: onClick, children: [before, jsxs("div", { className: clsx('image__wrapper', imageWrapperClassName), style: wrapperStyles, children: [jsx("img", { className: clsx('image__item', imageWidthClass && `width_${imageWidthClass}`, imageHeightClass && `height_${imageHeightClass}`, imageClassName, borderWidthClass && `border-width_${borderWidthClass}`, borderColorClass && `border-color_${borderColorClass}`, borderTypeClass && `border_type_${borderTypeClass}`, borderColorImageClass &&
26
- `border-color-image_${borderColorImageClass}`), src: imageSrc, title: title || alt, alt: alt || title, style: imageStyles, onError: onErrorImage }), overlay, caption, children] }), after] }));
32
+ `border-color-image_${borderColorImageClass}`), src: imageSrc, title: title || alt, alt: alt || title, "data-original-src": src, style: imageStyles, onError: handleImageError }), overlay, caption, children] }), after] }));
27
33
  }));
28
- // Make it random to not accidentally match a real image URL
29
- const UNKNOWN_IMAGE_SRC = `unknown-image-${Math.random()}`;
30
34
 
31
35
  export { Image as I };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Avatar = require('../../Avatar_cjs_B_hjRkuy.js');
3
+ var Avatar = require('../../Avatar_cjs_CZ0XJ6d2.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('clsx');
@@ -26,7 +26,7 @@ require('../hooks/useStyles/useStyles.js');
26
26
  require('lodash/maxBy');
27
27
  require('../../Link_cjs_Dn7UhCYe.js');
28
28
  require('../../Text_cjs_erTy2pUN.js');
29
- require('../../Image_cjs_BxZFowhi.js');
29
+ require('../../Image_cjs_C_FMjUjx.js');
30
30
 
31
31
 
32
32
 
@@ -6,7 +6,7 @@ var mergeAppearanceKeys = require('../utils/mergeAppearanceKeys.js');
6
6
  var useAppearanceConfig = require('../hooks/useAppearanceConfig/useAppearanceConfig.js');
7
7
  var useDevicePropsGenerator = require('../hooks/useDevicePropsGenerator/useDevicePropsGenerator.js');
8
8
  var useStyles = require('../hooks/useStyles/useStyles.js');
9
- var Avatar = require('../../Avatar_cjs_B_hjRkuy.js');
9
+ var Avatar = require('../../Avatar_cjs_CZ0XJ6d2.js');
10
10
  var Group = require('../../Group_cjs_xCUYKUcc.js');
11
11
  var Text = require('../../Text_cjs_erTy2pUN.js');
12
12
  require('react');
@@ -28,7 +28,7 @@ require('react-inlinesvg');
28
28
  require('../hoc/urlWithAssetPrefix.js');
29
29
  require('../context/UrlAssetPrefix.js');
30
30
  require('../../Link_cjs_Dn7UhCYe.js');
31
- require('../../Image_cjs_BxZFowhi.js');
31
+ require('../../Image_cjs_C_FMjUjx.js');
32
32
 
33
33
  const avatarStackAppearanceSize = {
34
34
  size16: {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Image = require('../../Image_cjs_BxZFowhi.js');
3
+ var Image = require('../../Image_cjs_C_FMjUjx.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('clsx');
@@ -1,4 +1,4 @@
1
- export { A as Avatar, b as avatarAppearance, a as avatarConfig } from '../Avatar_es_BgYYfuzU.js';
1
+ export { A as Avatar, b as avatarAppearance, a as avatarConfig } from '../Avatar_es_CVr38U27.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import 'clsx';
@@ -24,4 +24,4 @@ import '../hooks/useStyles/useStyles.js';
24
24
  import 'lodash/maxBy';
25
25
  import '../Link_es_DPZHTF38.js';
26
26
  import '../Text_es_B85LGfjW.js';
27
- import '../Image_es_Bx7l_UwQ.js';
27
+ import '../Image_es_Ca7UQOkj.js';
@@ -4,7 +4,7 @@ import { mergeAppearanceKeys } from '../utils/mergeAppearanceKeys.js';
4
4
  import { useAppearanceConfig } from '../hooks/useAppearanceConfig/useAppearanceConfig.js';
5
5
  import { useDevicePropsGenerator } from '../hooks/useDevicePropsGenerator/useDevicePropsGenerator.js';
6
6
  import { useStyles } from '../hooks/useStyles/useStyles.js';
7
- import { A as Avatar } from '../Avatar_es_BgYYfuzU.js';
7
+ import { A as Avatar } from '../Avatar_es_CVr38U27.js';
8
8
  import { G as Group } from '../Group_es_BVpRj4LR.js';
9
9
  import { T as Text } from '../Text_es_B85LGfjW.js';
10
10
  import 'react';
@@ -26,7 +26,7 @@ import 'react-inlinesvg';
26
26
  import '../hoc/urlWithAssetPrefix.js';
27
27
  import '../context/UrlAssetPrefix.js';
28
28
  import '../Link_es_DPZHTF38.js';
29
- import '../Image_es_Bx7l_UwQ.js';
29
+ import '../Image_es_Ca7UQOkj.js';
30
30
 
31
31
  const avatarStackAppearanceSize = {
32
32
  size16: {
@@ -1,4 +1,4 @@
1
- export { I as Image } from '../Image_es_Bx7l_UwQ.js';
1
+ export { I as Image } from '../Image_es_Ca7UQOkj.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import 'clsx';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itcase/ui",
3
- "version": "1.9.48",
3
+ "version": "1.9.50",
4
4
  "description": "UI components (Modal, Loader, Popup, etc)",
5
5
  "keywords": [
6
6
  "Modal",