@snack-uikit/card 0.4.9-preview-85c5f47b.0

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.
Files changed (136) hide show
  1. package/CHANGELOG.md +322 -0
  2. package/LICENSE +201 -0
  3. package/README.md +46 -0
  4. package/dist/components/Card/Card.d.ts +36 -0
  5. package/dist/components/Card/Card.js +36 -0
  6. package/dist/components/Card/constants.d.ts +5 -0
  7. package/dist/components/Card/constants.js +7 -0
  8. package/dist/components/Card/index.d.ts +1 -0
  9. package/dist/components/Card/index.js +1 -0
  10. package/dist/components/Card/styles.module.css +142 -0
  11. package/dist/components/Footer/components/Action/Action.d.ts +11 -0
  12. package/dist/components/Footer/components/Action/Action.js +22 -0
  13. package/dist/components/Footer/components/Action/index.d.ts +1 -0
  14. package/dist/components/Footer/components/Action/index.js +1 -0
  15. package/dist/components/Footer/components/Action/styles.module.css +7 -0
  16. package/dist/components/Footer/components/CallToAction/CallToAction.d.ts +11 -0
  17. package/dist/components/Footer/components/CallToAction/CallToAction.js +20 -0
  18. package/dist/components/Footer/components/CallToAction/index.d.ts +1 -0
  19. package/dist/components/Footer/components/CallToAction/index.js +1 -0
  20. package/dist/components/Footer/components/CallToAction/styles.module.css +22 -0
  21. package/dist/components/Footer/components/Dimension/Dimension.d.ts +12 -0
  22. package/dist/components/Footer/components/Dimension/Dimension.js +10 -0
  23. package/dist/components/Footer/components/Dimension/constants.d.ts +4 -0
  24. package/dist/components/Footer/components/Dimension/constants.js +6 -0
  25. package/dist/components/Footer/components/Dimension/index.d.ts +1 -0
  26. package/dist/components/Footer/components/Dimension/index.js +1 -0
  27. package/dist/components/Footer/components/Dimension/styles.module.css +27 -0
  28. package/dist/components/Footer/components/Promo/Promo.d.ts +18 -0
  29. package/dist/components/Footer/components/Promo/Promo.js +25 -0
  30. package/dist/components/Footer/components/Promo/index.d.ts +1 -0
  31. package/dist/components/Footer/components/Promo/index.js +1 -0
  32. package/dist/components/Footer/components/Promo/styles.module.css +6 -0
  33. package/dist/components/Footer/components/index.d.ts +3 -0
  34. package/dist/components/Footer/components/index.js +3 -0
  35. package/dist/components/Footer/index.d.ts +11 -0
  36. package/dist/components/Footer/index.js +6 -0
  37. package/dist/components/FunctionBadge/FunctionBadge.d.ts +9 -0
  38. package/dist/components/FunctionBadge/FunctionBadge.js +23 -0
  39. package/dist/components/FunctionBadge/constants.d.ts +2 -0
  40. package/dist/components/FunctionBadge/constants.js +5 -0
  41. package/dist/components/FunctionBadge/index.d.ts +1 -0
  42. package/dist/components/FunctionBadge/index.js +1 -0
  43. package/dist/components/FunctionBadge/styles.module.css +39 -0
  44. package/dist/components/Header/Header.d.ts +21 -0
  45. package/dist/components/Header/Header.js +28 -0
  46. package/dist/components/Header/constants.d.ts +8 -0
  47. package/dist/components/Header/constants.js +10 -0
  48. package/dist/components/Header/index.d.ts +1 -0
  49. package/dist/components/Header/index.js +1 -0
  50. package/dist/components/Header/styles.module.css +34 -0
  51. package/dist/components/Image/Image.d.ts +17 -0
  52. package/dist/components/Image/Image.js +7 -0
  53. package/dist/components/Image/constants.d.ts +5 -0
  54. package/dist/components/Image/constants.js +6 -0
  55. package/dist/components/Image/index.d.ts +1 -0
  56. package/dist/components/Image/index.js +1 -0
  57. package/dist/components/Image/styles.module.css +27 -0
  58. package/dist/components/index.d.ts +20 -0
  59. package/dist/components/index.js +10 -0
  60. package/dist/constants.d.ts +16 -0
  61. package/dist/constants.js +17 -0
  62. package/dist/context.d.ts +14 -0
  63. package/dist/context.js +13 -0
  64. package/dist/helperComponents/Check/Check.d.ts +5 -0
  65. package/dist/helperComponents/Check/Check.js +8 -0
  66. package/dist/helperComponents/Check/index.d.ts +1 -0
  67. package/dist/helperComponents/Check/index.js +1 -0
  68. package/dist/helperComponents/Check/styles.module.css +16 -0
  69. package/dist/helperComponents/Emblem/Emblem.d.ts +11 -0
  70. package/dist/helperComponents/Emblem/Emblem.js +17 -0
  71. package/dist/helperComponents/Emblem/index.d.ts +1 -0
  72. package/dist/helperComponents/Emblem/index.js +1 -0
  73. package/dist/helperComponents/Emblem/styled.module.css +21 -0
  74. package/dist/helperComponents/FunctionBadgeWrapper/FunctionBadgeWrapper.d.ts +6 -0
  75. package/dist/helperComponents/FunctionBadgeWrapper/FunctionBadgeWrapper.js +8 -0
  76. package/dist/helperComponents/FunctionBadgeWrapper/index.d.ts +1 -0
  77. package/dist/helperComponents/FunctionBadgeWrapper/index.js +1 -0
  78. package/dist/helperComponents/FunctionBadgeWrapper/styles.module.css +26 -0
  79. package/dist/helperComponents/PromoBadge/PromoBadge.d.ts +4 -0
  80. package/dist/helperComponents/PromoBadge/PromoBadge.js +7 -0
  81. package/dist/helperComponents/PromoBadge/index.d.ts +1 -0
  82. package/dist/helperComponents/PromoBadge/index.js +1 -0
  83. package/dist/helperComponents/PromoBadge/styles.module.css +8 -0
  84. package/dist/helperComponents/index.d.ts +4 -0
  85. package/dist/helperComponents/index.js +4 -0
  86. package/dist/index.d.ts +1 -0
  87. package/dist/index.js +1 -0
  88. package/package.json +46 -0
  89. package/src/components/Card/Card.tsx +121 -0
  90. package/src/components/Card/constants.ts +10 -0
  91. package/src/components/Card/index.ts +1 -0
  92. package/src/components/Card/styles.module.scss +181 -0
  93. package/src/components/Footer/components/Action/Action.tsx +39 -0
  94. package/src/components/Footer/components/Action/index.ts +1 -0
  95. package/src/components/Footer/components/Action/styles.module.scss +10 -0
  96. package/src/components/Footer/components/CallToAction/CallToAction.tsx +25 -0
  97. package/src/components/Footer/components/CallToAction/index.ts +1 -0
  98. package/src/components/Footer/components/CallToAction/styles.module.scss +27 -0
  99. package/src/components/Footer/components/Dimension/Dimension.tsx +50 -0
  100. package/src/components/Footer/components/Dimension/constants.ts +8 -0
  101. package/src/components/Footer/components/Dimension/index.ts +1 -0
  102. package/src/components/Footer/components/Dimension/styles.module.scss +31 -0
  103. package/src/components/Footer/components/Promo/Promo.tsx +40 -0
  104. package/src/components/Footer/components/Promo/index.ts +1 -0
  105. package/src/components/Footer/components/Promo/styles.module.scss +8 -0
  106. package/src/components/Footer/components/index.ts +3 -0
  107. package/src/components/Footer/index.ts +20 -0
  108. package/src/components/FunctionBadge/FunctionBadge.tsx +79 -0
  109. package/src/components/FunctionBadge/constants.ts +6 -0
  110. package/src/components/FunctionBadge/index.ts +1 -0
  111. package/src/components/FunctionBadge/styles.module.scss +48 -0
  112. package/src/components/Header/Header.tsx +79 -0
  113. package/src/components/Header/constants.ts +13 -0
  114. package/src/components/Header/index.ts +1 -0
  115. package/src/components/Header/styles.module.scss +39 -0
  116. package/src/components/Image/Image.tsx +18 -0
  117. package/src/components/Image/constants.ts +5 -0
  118. package/src/components/Image/index.ts +1 -0
  119. package/src/components/Image/styles.module.scss +38 -0
  120. package/src/components/index.ts +28 -0
  121. package/src/constants.ts +17 -0
  122. package/src/context.ts +27 -0
  123. package/src/helperComponents/Check/Check.tsx +20 -0
  124. package/src/helperComponents/Check/index.ts +1 -0
  125. package/src/helperComponents/Check/styles.module.scss +17 -0
  126. package/src/helperComponents/Emblem/Emblem.tsx +44 -0
  127. package/src/helperComponents/Emblem/index.ts +1 -0
  128. package/src/helperComponents/Emblem/styled.module.scss +20 -0
  129. package/src/helperComponents/FunctionBadgeWrapper/FunctionBadgeWrapper.tsx +23 -0
  130. package/src/helperComponents/FunctionBadgeWrapper/index.ts +1 -0
  131. package/src/helperComponents/FunctionBadgeWrapper/styles.module.scss +30 -0
  132. package/src/helperComponents/PromoBadge/PromoBadge.tsx +16 -0
  133. package/src/helperComponents/PromoBadge/index.ts +1 -0
  134. package/src/helperComponents/PromoBadge/styles.module.scss +10 -0
  135. package/src/helperComponents/index.ts +4 -0
  136. package/src/index.ts +1 -0
@@ -0,0 +1,17 @@
1
+ import { Mode } from './constants';
2
+ export type ImageProps = {
3
+ /** Путь до картинки */
4
+ src: string;
5
+ /** Описание картинки */
6
+ alt: string;
7
+ } /** Image mode */ & ({
8
+ mode?: Mode.Little | Mode.Middle;
9
+ hideFading?: never;
10
+ } | {
11
+ mode: Mode.Background;
12
+ hideFading?: boolean;
13
+ });
14
+ export declare function Image({ src, alt, mode, hideFading }: ImageProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare namespace Image {
16
+ var modes: typeof Mode;
17
+ }
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Mode } from './constants';
3
+ import styles from './styles.module.css';
4
+ export function Image({ src, alt, mode = Mode.Little, hideFading }) {
5
+ return _jsx("img", { src: src, alt: alt, "data-mode": mode, className: styles.image, "data-fading": !hideFading || undefined });
6
+ }
7
+ Image.modes = Mode;
@@ -0,0 +1,5 @@
1
+ export declare enum Mode {
2
+ Little = "little",
3
+ Middle = "middle",
4
+ Background = "background"
5
+ }
@@ -0,0 +1,6 @@
1
+ export var Mode;
2
+ (function (Mode) {
3
+ Mode["Little"] = "little";
4
+ Mode["Middle"] = "middle";
5
+ Mode["Background"] = "background";
6
+ })(Mode || (Mode = {}));
@@ -0,0 +1 @@
1
+ export * from './Image';
@@ -0,0 +1 @@
1
+ export * from './Image';
@@ -0,0 +1,27 @@
1
+ .image{
2
+ display:block;
3
+ box-sizing:border-box;
4
+ width:100%;
5
+ height:auto;
6
+ -o-object-fit:cover;
7
+ object-fit:cover;
8
+ }
9
+ .image[data-mode=little]{
10
+ height:var(--size-card-image-litte, 144px);
11
+ }
12
+ .image[data-mode=middle]{
13
+ height:var(--size-card-image-middle, 240px);
14
+ }
15
+ .image[data-mode=background]{
16
+ position:absolute;
17
+ top:0;
18
+ left:0;
19
+ width:100%;
20
+ height:100%;
21
+ -o-object-fit:cover;
22
+ object-fit:cover;
23
+ }
24
+ .image[data-mode=background][data-fading]{
25
+ -webkit-mask-image:var(--gradient-linear-mask-90deg, linear-gradient(90deg, rgba(253, 253, 253, 0) 0%, rgba(253, 253, 253, 0.0784313725) 33%, #fdfdfd 100%));
26
+ mask-image:var(--gradient-linear-mask-90deg, linear-gradient(90deg, rgba(253, 253, 253, 0) 0%, rgba(253, 253, 253, 0.0784313725) 33%, #fdfdfd 100%));
27
+ }
@@ -0,0 +1,20 @@
1
+ import { Card as CardComponent, CardProps } from './Card';
2
+ import { Footer } from './Footer';
3
+ import { FunctionBadge, FunctionBadgeProps as FunctionBadgeComponentProps } from './FunctionBadge';
4
+ import { Header, HeaderProps as HeaderComponentProps } from './Header';
5
+ import { Image, ImageProps as ImageComponentProps } from './Image';
6
+ export declare const Card: typeof CardComponent & {
7
+ Header: typeof Header;
8
+ Image: typeof Image;
9
+ Footer: typeof Footer;
10
+ FunctionBadge: typeof FunctionBadge;
11
+ };
12
+ export { type CardProps };
13
+ export declare namespace Card {
14
+ type HeaderProps = HeaderComponentProps;
15
+ type ImageProps = ImageComponentProps;
16
+ type FooterActionProps = Footer.ActionProps;
17
+ type FooterPromoProps = Footer.PromoProps;
18
+ type FooterCallToActionProps = Footer.CallToActionProps;
19
+ type FunctionBadgeProps = FunctionBadgeComponentProps;
20
+ }
@@ -0,0 +1,10 @@
1
+ import { Card as CardComponent } from './Card';
2
+ import { Footer } from './Footer';
3
+ import { FunctionBadge } from './FunctionBadge';
4
+ import { Header } from './Header';
5
+ import { Image } from './Image';
6
+ export const Card = CardComponent;
7
+ Card.Header = Header;
8
+ Card.Footer = Footer;
9
+ Card.Image = Image;
10
+ Card.FunctionBadge = FunctionBadge;
@@ -0,0 +1,16 @@
1
+ export declare enum Size {
2
+ M = "m",
3
+ L = "l"
4
+ }
5
+ export declare const TEST_IDS: {
6
+ promoBadge: string;
7
+ functionBadge: string;
8
+ droplist: string;
9
+ option: string;
10
+ check: string;
11
+ emblemPicture: string;
12
+ emblemIcon: string;
13
+ title: string;
14
+ description: string;
15
+ metadata: string;
16
+ };
@@ -0,0 +1,17 @@
1
+ export var Size;
2
+ (function (Size) {
3
+ Size["M"] = "m";
4
+ Size["L"] = "l";
5
+ })(Size || (Size = {}));
6
+ export const TEST_IDS = {
7
+ promoBadge: 'card__promo-badge',
8
+ functionBadge: 'card__function-badge',
9
+ droplist: 'card__function-badge__droplist',
10
+ option: 'card__function-badge__option',
11
+ check: 'card__check',
12
+ emblemPicture: 'card__header__emblem-picture',
13
+ emblemIcon: 'card__header__emblem-icon',
14
+ title: 'card__header__title',
15
+ description: 'card__header__description',
16
+ metadata: 'card__header__metadata',
17
+ };
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { Size } from './constants';
3
+ type CardContextValue = {
4
+ size: Size;
5
+ disabled: boolean;
6
+ };
7
+ export declare const CardContext: import("react").Context<CardContextValue>;
8
+ export declare function useCardContext(): CardContextValue;
9
+ type FunctionBadgeContextValue = {
10
+ visible?: boolean;
11
+ setVisible?(v: boolean): void;
12
+ };
13
+ export declare const FunctionBadgeContext: import("react").Context<FunctionBadgeContextValue>;
14
+ export {};
@@ -0,0 +1,13 @@
1
+ import { createContext, useContext } from 'react';
2
+ import { Size } from './constants';
3
+ export const CardContext = createContext({
4
+ size: Size.M,
5
+ disabled: false,
6
+ });
7
+ export function useCardContext() {
8
+ return useContext(CardContext);
9
+ }
10
+ export const FunctionBadgeContext = createContext({
11
+ visible: false,
12
+ setVisible: () => { },
13
+ });
@@ -0,0 +1,5 @@
1
+ type CheckProps = {
2
+ className?: string;
3
+ };
4
+ export declare function Check({ className }: CheckProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import cn from 'classnames';
3
+ import { CheckSVG } from '@snack-uikit/icons';
4
+ import { TEST_IDS } from '../../constants';
5
+ import styles from './styles.module.css';
6
+ export function Check({ className }) {
7
+ return (_jsx("div", Object.assign({ className: styles.checkWrapper }, { children: _jsx("div", Object.assign({ className: cn(styles.checkContainer, className), "data-test-id": TEST_IDS.check }, { children: _jsx(CheckSVG, { size: 16 }) })) })));
8
+ }
@@ -0,0 +1 @@
1
+ export * from './Check';
@@ -0,0 +1 @@
1
+ export * from './Check';
@@ -0,0 +1,16 @@
1
+ .checkWrapper{
2
+ padding-top:var(--space-card-padding-check-badge, 6px);
3
+ padding-left:var(--space-card-padding-check-badge, 6px);
4
+ position:absolute;
5
+ top:0;
6
+ left:0;
7
+ }
8
+
9
+ .checkContainer{
10
+ width:var(--size-card-check, 16px);
11
+ height:var(--size-card-check, 16px);
12
+ border-radius:var(--radius-card-check, 12px);
13
+ display:flex;
14
+ align-items:center;
15
+ justify-content:center;
16
+ }
@@ -0,0 +1,11 @@
1
+ import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
2
+ type PictureProps = {
3
+ src: string;
4
+ alt: string;
5
+ };
6
+ export type EmblemProps = PictureProps | Pick<IconPredefinedProps, 'icon' | 'decor' | 'appearance'>;
7
+ export declare function Emblem(props: EmblemProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare namespace Emblem {
9
+ var appearances: typeof import("@snack-uikit/icon-predefined/dist/constants").Appearance;
10
+ }
11
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { IconPredefined } from '@snack-uikit/icon-predefined';
3
+ import { TEST_IDS } from '../../constants';
4
+ import { useCardContext } from '../../context';
5
+ import styles from './styled.module.css';
6
+ function isPictureProps(props) {
7
+ return 'src' in props && 'alt' in props;
8
+ }
9
+ export function Emblem(props) {
10
+ var _a, _b;
11
+ const { size } = useCardContext();
12
+ if (isPictureProps(props)) {
13
+ return (_jsx("img", { src: props.src, alt: props.alt, "data-size": size || undefined, className: styles.img, "data-test-id": TEST_IDS.emblemPicture }));
14
+ }
15
+ return (_jsx(IconPredefined, { icon: props.icon, appearance: (_a = props.appearance) !== null && _a !== void 0 ? _a : IconPredefined.appearances.Primary, decor: (_b = props.decor) !== null && _b !== void 0 ? _b : true, size: size, "data-test-id": TEST_IDS.emblemIcon }));
16
+ }
17
+ Emblem.appearances = IconPredefined.appearances;
@@ -0,0 +1 @@
1
+ export * from './Emblem';
@@ -0,0 +1 @@
1
+ export * from './Emblem';
@@ -0,0 +1,21 @@
1
+ .img{
2
+ overflow:hidden;
3
+ flex-shrink:0;
4
+ box-sizing:border-box;
5
+ -o-object-fit:cover;
6
+ object-fit:cover;
7
+ border-color:var(--sys-neutral-decor-disabled, #e7e7e7);
8
+ border-style:solid;
9
+ }
10
+ .img[data-size=m]{
11
+ width:var(--size-card-picture-m, 40px);
12
+ height:var(--size-card-picture-m, 40px);
13
+ border-width:var(--border-width-card-picture, 1px);
14
+ border-radius:var(--radius-card-picture, 8px);
15
+ }
16
+ .img[data-size=l]{
17
+ width:var(--size-card-picture-l, 80px);
18
+ height:var(--size-card-picture-l, 80px);
19
+ border-width:var(--border-width-card-picture, 1px);
20
+ border-radius:var(--radius-card-picture, 8px);
21
+ }
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export type FunctionBadgeWrapperProps = {
3
+ children: ReactNode;
4
+ className?: string;
5
+ };
6
+ export declare function FunctionBadgeWrapper({ children, className }: FunctionBadgeWrapperProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { FunctionBadgeContext } from '../../context';
4
+ import styles from './styles.module.css';
5
+ export function FunctionBadgeWrapper({ children, className }) {
6
+ const [visible, setVisible] = useState(false);
7
+ return (_jsx(FunctionBadgeContext.Provider, Object.assign({ value: { visible, setVisible } }, { children: _jsx("div", Object.assign({ className: className, "data-visible": visible || undefined, tabIndex: -1 }, { children: _jsx("div", Object.assign({ className: styles.functionBadge }, { children: _jsx("div", Object.assign({ className: styles.functionRow }, { children: children })) })) })) })));
8
+ }
@@ -0,0 +1 @@
1
+ export * from './FunctionBadgeWrapper';
@@ -0,0 +1 @@
1
+ export * from './FunctionBadgeWrapper';
@@ -0,0 +1,26 @@
1
+ .functionBadge{
2
+ padding-top:var(--space-card-gap-m, 8px);
3
+ padding-right:var(--space-card-gap-m, 8px);
4
+ position:absolute;
5
+ top:0;
6
+ right:0;
7
+ box-sizing:border-box;
8
+ }
9
+
10
+ .functionRow{
11
+ position:relative;
12
+ }
13
+ .functionRow::before{
14
+ width:var(--size-card-function-badge-function-row, 32px);
15
+ height:var(--size-card-function-badge-function-row, 32px);
16
+ border-radius:var(--radius-card-button, 12px);
17
+ opacity:var(--opacity-card-transparent-background, 0.8);
18
+ content:"";
19
+ position:absolute;
20
+ top:0;
21
+ left:0;
22
+ width:100%;
23
+ height:100%;
24
+ background-color:var(--sys-neutral-background1-level, #f9f9f9);
25
+ box-shadow:var(--box-shadow-elevation-level2, 0px 0px 4px 0px rgba(0, 0, 0, 0.0392156863), 0px 4px 8px 0px rgba(0, 0, 0, 0.0392156863));
26
+ }
@@ -0,0 +1,4 @@
1
+ export type PromoBadgeProps = {
2
+ text: string;
3
+ };
4
+ export declare function PromoBadge({ text }: PromoBadgeProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { PromoTag } from '@snack-uikit/promo-tag';
3
+ import { TEST_IDS } from '../../constants';
4
+ import styles from './styles.module.css';
5
+ export function PromoBadge({ text }) {
6
+ return (_jsx("div", Object.assign({ className: styles.promoBadge }, { children: _jsx(PromoTag, { appearance: PromoTag.appearances.Primary, text: text, "data-test-id": TEST_IDS.promoBadge }) })));
7
+ }
@@ -0,0 +1 @@
1
+ export * from './PromoBadge';
@@ -0,0 +1 @@
1
+ export * from './PromoBadge';
@@ -0,0 +1,8 @@
1
+ .promoBadge{
2
+ padding-top:var(--space-card-gap-m, 8px);
3
+ padding-right:var(--space-card-gap-m, 8px);
4
+ position:absolute;
5
+ top:0;
6
+ right:0;
7
+ box-sizing:border-box;
8
+ }
@@ -0,0 +1,4 @@
1
+ export * from './Emblem';
2
+ export * from './PromoBadge';
3
+ export * from './Check';
4
+ export * from './FunctionBadgeWrapper';
@@ -0,0 +1,4 @@
1
+ export * from './Emblem';
2
+ export * from './PromoBadge';
3
+ export * from './Check';
4
+ export * from './FunctionBadgeWrapper';
@@ -0,0 +1 @@
1
+ export * from './components';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './components';
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@snack-uikit/card",
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "title": "Card",
7
+ "version": "0.4.9-preview-85c5f47b.0",
8
+ "sideEffects": [
9
+ "*.css",
10
+ "*.woff",
11
+ "*.woff2"
12
+ ],
13
+ "description": "Card",
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "homepage": "https://github.com/cloud-ru-tech/snack-uikit/tree/master/packages/card",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/cloud-ru-tech/snack-uikit.git",
20
+ "directory": "packages/card"
21
+ },
22
+ "author": "Nikita Ershov <niershov@cloud.ru>",
23
+ "contributors": [
24
+ "Nikita Ershov <niershov@cloud.ru>"
25
+ ],
26
+ "files": [
27
+ "dist",
28
+ "src",
29
+ "./CHANGELOG.md",
30
+ "./LICENSE"
31
+ ],
32
+ "license": "Apache-2.0",
33
+ "scripts": {},
34
+ "dependencies": {
35
+ "@snack-uikit/button": "0.13.7-preview-85c5f47b.0",
36
+ "@snack-uikit/droplist": "0.10.13-preview-85c5f47b.0",
37
+ "@snack-uikit/icon-predefined": "0.2.6-preview-85c5f47b.0",
38
+ "@snack-uikit/icons": "0.18.2-preview-85c5f47b.0",
39
+ "@snack-uikit/promo-tag": "0.2.6-preview-85c5f47b.0",
40
+ "@snack-uikit/truncate-string": "0.2.17-preview-85c5f47b.0",
41
+ "@snack-uikit/typography": "0.4.5-preview-85c5f47b.0",
42
+ "@snack-uikit/utils": "2.0.2-preview-85c5f47b.0",
43
+ "classnames": "2.3.2"
44
+ },
45
+ "gitHead": "6a7eef41d780d945f64f791448eaa72b9e0ae72d"
46
+ }
@@ -0,0 +1,121 @@
1
+ import cn from 'classnames';
2
+ import { KeyboardEvent, ReactElement, ReactNode, useCallback, useRef } from 'react';
3
+
4
+ import { Typography } from '@snack-uikit/typography';
5
+ import { extractSupportProps, WithSupportProps } from '@snack-uikit/utils';
6
+
7
+ import { Size } from '../../constants';
8
+ import { CardContext } from '../../context';
9
+ import { Check, FunctionBadgeWrapper, PromoBadge } from '../../helperComponents';
10
+ import { HeaderProps } from '../Header';
11
+ import { BODY_TEXT_SIZE_MAP, TRIGGER_CLICK_KEY_CODES } from './constants';
12
+ import styles from './styles.module.scss';
13
+
14
+ export type CardProps = WithSupportProps<{
15
+ /** Управление состоянием интерактивности */
16
+ disabled?: boolean;
17
+ /** Управление состоянием выбран/не выбран */
18
+ checked?: boolean;
19
+ /** Управление состоянием наличия обводки */
20
+ outline?: boolean;
21
+ /** Отображение галочки для режима массового выделения карточек */
22
+ multipleSelection?: boolean;
23
+ /** Колбек на клик по карточке */
24
+ onClick?(): void;
25
+ /** Размер */
26
+ size?: Size;
27
+ /** Текст для PromoBadge */
28
+ promoBadge?: string;
29
+ /** Вложенный контент */
30
+ children?: ReactNode;
31
+ /** Вложенный Header */
32
+ header?: ReactElement<HeaderProps>;
33
+ /** Вложенный Footer */
34
+ footer?: ReactNode;
35
+ /** Вложенный Image */
36
+ image?: ReactNode;
37
+ /** Вложенный FunctionBadge */
38
+ functionBadge?: ReactNode;
39
+ /** CSS-класс для элемента с контентом */
40
+ className?: string;
41
+ }>;
42
+
43
+ export function Card({
44
+ onClick,
45
+ disabled = false,
46
+ checked,
47
+ outline,
48
+ multipleSelection = false,
49
+ size = Size.M,
50
+ children,
51
+ header,
52
+ footer,
53
+ functionBadge,
54
+ promoBadge,
55
+ image,
56
+ className,
57
+ ...rest
58
+ }: CardProps) {
59
+ const localRef = useRef<HTMLDivElement>(null);
60
+
61
+ const onKeyDown = useCallback(
62
+ (e: KeyboardEvent<HTMLDivElement>) => {
63
+ if (e.target === localRef.current) {
64
+ if (TRIGGER_CLICK_KEY_CODES.includes(e.code)) {
65
+ onClick?.();
66
+ }
67
+ }
68
+ },
69
+ [onClick],
70
+ );
71
+
72
+ return (
73
+ <CardContext.Provider value={{ size, disabled }}>
74
+ {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}
75
+ <div
76
+ ref={localRef}
77
+ className={cn(styles.card, className)}
78
+ {...extractSupportProps(rest)}
79
+ onClick={onClick}
80
+ data-disabled={disabled || undefined}
81
+ data-checked={checked || undefined}
82
+ data-outline={outline || undefined}
83
+ data-pointer={onClick ? true : undefined}
84
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
85
+ tabIndex={0}
86
+ onKeyDown={onKeyDown}
87
+ >
88
+ {image}
89
+
90
+ {promoBadge && <PromoBadge text={promoBadge} />}
91
+
92
+ <div className={styles.composition} tabIndex={-1}>
93
+ {!disabled && functionBadge && (
94
+ <FunctionBadgeWrapper className={styles.functionBadgeWrapper}>{functionBadge}</FunctionBadgeWrapper>
95
+ )}
96
+
97
+ <div className={styles.contentWrapper}>
98
+ <div className={styles.content} data-size={size}>
99
+ {header || null}
100
+
101
+ <Typography
102
+ family={Typography.families.Sans}
103
+ size={BODY_TEXT_SIZE_MAP[size]}
104
+ role={Typography.roles.Body}
105
+ className={styles.body}
106
+ >
107
+ {children}
108
+ </Typography>
109
+ </div>
110
+
111
+ {footer && <div className={styles.footer}>{footer}</div>}
112
+ </div>
113
+ </div>
114
+
115
+ {!disabled && checked && multipleSelection && <Check className={styles.check} />}
116
+ </div>
117
+ </CardContext.Provider>
118
+ );
119
+ }
120
+
121
+ Card.sizes = Size;
@@ -0,0 +1,10 @@
1
+ import { Typography } from '@snack-uikit/typography';
2
+
3
+ import { Size } from '../../constants';
4
+
5
+ export const BODY_TEXT_SIZE_MAP = {
6
+ [Size.M]: Typography.sizes.M,
7
+ [Size.L]: Typography.sizes.L,
8
+ };
9
+
10
+ export const TRIGGER_CLICK_KEY_CODES = ['Enter', 'Space'];
@@ -0,0 +1 @@
1
+ export * from './Card';