@vkontakte/vkui 7.3.7 → 7.3.8

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.
@@ -31,7 +31,7 @@ export interface UsersStackProps extends HTMLAttributesWithRootRef<HTMLDivElemen
31
31
  size?: 's' | 'm' | 'l';
32
32
  /**
33
33
  * Количество аватарок, которые будут показаны.
34
- * Если в массиве `photos` больше элементов и используется размер `m`, то будет показано количество остальных элементов.
34
+ * Если в массиве `photos` больше элементов и не используется размер `s`, то будет показано количество остальных элементов.
35
35
  */
36
36
  visibleCount?: number;
37
37
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/UsersStack/UsersStack.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './UsersStack.module.css';\n\nconst stylesSize = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst avatarsPositionStyles = {\n 'inline-start': styles.avatarsPositionInlineStart,\n 'inline-end': styles.avatarsPositionInlineEnd,\n 'block-start': styles.avatarsPositionBlockStart,\n};\n\nexport type UsersStackRenderWrapperProps = {\n /**\n * Контент для обертки.\n */\n children: React.ReactElement;\n /**\n * Путь до фотографии.\n */\n ['data-src']: string;\n};\n\nexport type UsersStackPhoto = {\n /**\n * Путь до фотографии.\n */\n src: string;\n /**\n * Функция для рендера обертки над фотографией.\n */\n renderWrapper?: (props: UsersStackRenderWrapperProps) => React.ReactElement;\n};\n\nexport interface UsersStackProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Массив ссылок на фотографии либо массив структур типа `UsersStackPhoto`.\n */\n photos?: string[] | UsersStackPhoto[];\n /**\n * Размер аватарок.\n */\n size?: 's' | 'm' | 'l';\n /**\n * Количество аватарок, которые будут показаны.\n * Если в массиве `photos` больше элементов и используется размер `m`, то будет показано количество остальных элементов.\n */\n visibleCount?: number;\n /**\n * Число, которое будет указано в счетчике.\n * По умолчанию высчитывается по формуле `photos.length - visibleCount`.\n * Если число больше 99, то счетчик скроется.\n */\n count?: number;\n /**\n * Определяет положение аватаров\n * Режим `block-start` рекомендуется использовать с размером `m`.\n */\n avatarsPosition?: 'inline-start' | 'block-start' | 'inline-end';\n}\n\ninterface PathElementProps extends React.SVGAttributes<SVGElement> {\n /**\n * Размер фотографии.\n */\n photoSize: number;\n /**\n * Тип обрезания фотографии.\n */\n direction: 'circle' | 'right' | 'left';\n}\n\ntype PhotoSizeType = 16 | 24 | 32;\n\nfunction PathElement({ photoSize, direction, ...props }: PathElementProps) {\n switch (direction) {\n case 'circle':\n const radius = photoSize / 2;\n\n return <circle cx={radius} cy={radius} r={radius} {...props} />;\n\n case 'right':\n switch (photoSize) {\n case 16:\n return (\n <path\n d=\"M14,13.285A8 8 0 0 1 8 16A8 8 0 0 1 8 0A8 8 0 0 1 14 2.715A8 8 0 0 0 14,13.285\"\n {...props}\n />\n );\n case 24:\n return (\n <path\n d=\"M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75\"\n {...props}\n />\n );\n }\n\n default:\n switch (photoSize) {\n case 16:\n return (\n <path\n d=\"M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285\"\n {...props}\n />\n );\n case 24:\n return (\n <path\n d=\"M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75\"\n {...props}\n />\n );\n }\n }\n}\n\nconst photoSizes: Record<NonNullable<UsersStackProps['size']>, PhotoSizeType> = {\n s: 16,\n m: 24,\n l: 32,\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/UsersStack\n */\nexport const UsersStack = ({\n photos = [],\n visibleCount = 3,\n count = Math.max(0, photos.length - visibleCount),\n size = 'm',\n children,\n avatarsPosition = 'inline-start',\n ...restProps\n}: UsersStackProps): React.ReactNode => {\n const cmpId = React.useId();\n const direction = useConfigDirection();\n\n const canShowOthers = count > 0 && count < 100 && size !== 's';\n const CounterTypography = size === 'l' ? Footnote : Caption;\n\n const photoSize = photoSizes[size];\n const directionClip =\n direction === 'ltr' ? (canShowOthers ? 'right' : 'left') : canShowOthers ? 'left' : 'right';\n\n const photosElements = photos.slice(0, visibleCount).map((photo, i) => {\n const direction = i === 0 && !canShowOthers ? 'circle' : directionClip;\n\n const id = `UsersStackDefs${cmpId}${i}`;\n const hrefID = `#${id}`;\n const maskID = `UsersStackMask${cmpId}${i}`;\n\n const isPhotoType = typeof photo === 'object';\n const photoSrc = isPhotoType ? photo.src : photo;\n\n let photoElement = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(styles.photo, styles.item)}\n aria-hidden\n display=\"block\"\n >\n <defs>\n <PathElement id={id} direction={direction} photoSize={photoSize} />\n </defs>\n <clipPath id={maskID}>\n <use href={hrefID} />\n </clipPath>\n <g clipPath={`url(#${maskID})`}>\n <use href={hrefID} className={styles.fill} />\n <image href={photoSrc} width={photoSize} height={photoSize} />\n <use href={hrefID} fill=\"none\" stroke=\"rgba(0, 0, 0, 0.08)\" />\n </g>\n </svg>\n );\n if (isPhotoType && photo.renderWrapper) {\n photoElement = photo.renderWrapper({\n 'children': photoElement,\n 'data-src': photoSrc,\n });\n }\n\n return (\n <div className={styles.photoWrapper} key={i}>\n {photoElement}\n </div>\n );\n });\n\n const othersElement = canShowOthers ? (\n <div className={styles.photoWrapper}>\n <CounterTypography caps weight=\"1\" className={classNames(styles.item, styles.counter)}>\n +{count}\n </CounterTypography>\n </div>\n ) : null;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n stylesSize[size],\n avatarsPositionStyles[avatarsPosition],\n )}\n >\n {(photosElements.length > 0 || othersElement) && (\n <div className={styles.photos} aria-hidden>\n {photosElements}\n {othersElement}\n </div>\n )}\n {hasReactNode(children) && <Footnote className={styles.text}>{children}</Footnote>}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","hasReactNode","useConfigDirection","RootComponent","Caption","Footnote","stylesSize","s","m","l","avatarsPositionStyles","PathElement","photoSize","direction","props","radius","circle","cx","cy","r","path","d","photoSizes","UsersStack","photos","visibleCount","count","Math","max","length","size","children","avatarsPosition","restProps","cmpId","useId","canShowOthers","CounterTypography","directionClip","photosElements","slice","map","photo","i","id","hrefID","maskID","isPhotoType","photoSrc","src","photoElement","svg","xmlns","className","aria-hidden","display","defs","clipPath","use","href","g","image","width","height","fill","stroke","renderWrapper","div","othersElement","caps","weight","baseClassName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/UsersStack/UsersStack.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './UsersStack.module.css';\n\nconst stylesSize = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst avatarsPositionStyles = {\n 'inline-start': styles.avatarsPositionInlineStart,\n 'inline-end': styles.avatarsPositionInlineEnd,\n 'block-start': styles.avatarsPositionBlockStart,\n};\n\nexport type UsersStackRenderWrapperProps = {\n /**\n * Контент для обертки.\n */\n children: React.ReactElement;\n /**\n * Путь до фотографии.\n */\n ['data-src']: string;\n};\n\nexport type UsersStackPhoto = {\n /**\n * Путь до фотографии.\n */\n src: string;\n /**\n * Функция для рендера обертки над фотографией.\n */\n renderWrapper?: (props: UsersStackRenderWrapperProps) => React.ReactElement;\n};\n\nexport interface UsersStackProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Массив ссылок на фотографии либо массив структур типа `UsersStackPhoto`.\n */\n photos?: string[] | UsersStackPhoto[];\n /**\n * Размер аватарок.\n */\n size?: 's' | 'm' | 'l';\n /**\n * Количество аватарок, которые будут показаны.\n * Если в массиве `photos` больше элементов и не используется размер `s`, то будет показано количество остальных элементов.\n */\n visibleCount?: number;\n /**\n * Число, которое будет указано в счетчике.\n * По умолчанию высчитывается по формуле `photos.length - visibleCount`.\n * Если число больше 99, то счетчик скроется.\n */\n count?: number;\n /**\n * Определяет положение аватаров\n * Режим `block-start` рекомендуется использовать с размером `m`.\n */\n avatarsPosition?: 'inline-start' | 'block-start' | 'inline-end';\n}\n\ninterface PathElementProps extends React.SVGAttributes<SVGElement> {\n /**\n * Размер фотографии.\n */\n photoSize: number;\n /**\n * Тип обрезания фотографии.\n */\n direction: 'circle' | 'right' | 'left';\n}\n\ntype PhotoSizeType = 16 | 24 | 32;\n\nfunction PathElement({ photoSize, direction, ...props }: PathElementProps) {\n switch (direction) {\n case 'circle':\n const radius = photoSize / 2;\n\n return <circle cx={radius} cy={radius} r={radius} {...props} />;\n\n case 'right':\n switch (photoSize) {\n case 16:\n return (\n <path\n d=\"M14,13.285A8 8 0 0 1 8 16A8 8 0 0 1 8 0A8 8 0 0 1 14 2.715A8 8 0 0 0 14,13.285\"\n {...props}\n />\n );\n case 24:\n return (\n <path\n d=\"M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75\"\n {...props}\n />\n );\n }\n\n default:\n switch (photoSize) {\n case 16:\n return (\n <path\n d=\"M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285\"\n {...props}\n />\n );\n case 24:\n return (\n <path\n d=\"M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75\"\n {...props}\n />\n );\n }\n }\n}\n\nconst photoSizes: Record<NonNullable<UsersStackProps['size']>, PhotoSizeType> = {\n s: 16,\n m: 24,\n l: 32,\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/UsersStack\n */\nexport const UsersStack = ({\n photos = [],\n visibleCount = 3,\n count = Math.max(0, photos.length - visibleCount),\n size = 'm',\n children,\n avatarsPosition = 'inline-start',\n ...restProps\n}: UsersStackProps): React.ReactNode => {\n const cmpId = React.useId();\n const direction = useConfigDirection();\n\n const canShowOthers = count > 0 && count < 100 && size !== 's';\n const CounterTypography = size === 'l' ? Footnote : Caption;\n\n const photoSize = photoSizes[size];\n const directionClip =\n direction === 'ltr' ? (canShowOthers ? 'right' : 'left') : canShowOthers ? 'left' : 'right';\n\n const photosElements = photos.slice(0, visibleCount).map((photo, i) => {\n const direction = i === 0 && !canShowOthers ? 'circle' : directionClip;\n\n const id = `UsersStackDefs${cmpId}${i}`;\n const hrefID = `#${id}`;\n const maskID = `UsersStackMask${cmpId}${i}`;\n\n const isPhotoType = typeof photo === 'object';\n const photoSrc = isPhotoType ? photo.src : photo;\n\n let photoElement = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(styles.photo, styles.item)}\n aria-hidden\n display=\"block\"\n >\n <defs>\n <PathElement id={id} direction={direction} photoSize={photoSize} />\n </defs>\n <clipPath id={maskID}>\n <use href={hrefID} />\n </clipPath>\n <g clipPath={`url(#${maskID})`}>\n <use href={hrefID} className={styles.fill} />\n <image href={photoSrc} width={photoSize} height={photoSize} />\n <use href={hrefID} fill=\"none\" stroke=\"rgba(0, 0, 0, 0.08)\" />\n </g>\n </svg>\n );\n if (isPhotoType && photo.renderWrapper) {\n photoElement = photo.renderWrapper({\n 'children': photoElement,\n 'data-src': photoSrc,\n });\n }\n\n return (\n <div className={styles.photoWrapper} key={i}>\n {photoElement}\n </div>\n );\n });\n\n const othersElement = canShowOthers ? (\n <div className={styles.photoWrapper}>\n <CounterTypography caps weight=\"1\" className={classNames(styles.item, styles.counter)}>\n +{count}\n </CounterTypography>\n </div>\n ) : null;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n stylesSize[size],\n avatarsPositionStyles[avatarsPosition],\n )}\n >\n {(photosElements.length > 0 || othersElement) && (\n <div className={styles.photos} aria-hidden>\n {photosElements}\n {othersElement}\n </div>\n )}\n {hasReactNode(children) && <Footnote className={styles.text}>{children}</Footnote>}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","hasReactNode","useConfigDirection","RootComponent","Caption","Footnote","stylesSize","s","m","l","avatarsPositionStyles","PathElement","photoSize","direction","props","radius","circle","cx","cy","r","path","d","photoSizes","UsersStack","photos","visibleCount","count","Math","max","length","size","children","avatarsPosition","restProps","cmpId","useId","canShowOthers","CounterTypography","directionClip","photosElements","slice","map","photo","i","id","hrefID","maskID","isPhotoType","photoSrc","src","photoElement","svg","xmlns","className","aria-hidden","display","defs","clipPath","use","href","g","image","width","height","fill","stroke","renderWrapper","div","othersElement","caps","weight","baseClassName"],"mappings":"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"}