@arbor-education/design-system.components 0.13.1 → 0.14.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.
- package/CHANGELOG.md +8 -0
- package/dist/components/articleCard/ArticleCard.d.ts +30 -0
- package/dist/components/articleCard/ArticleCard.d.ts.map +1 -0
- package/dist/components/articleCard/ArticleCard.js +24 -0
- package/dist/components/articleCard/ArticleCard.js.map +1 -0
- package/dist/components/articleCard/ArticleCard.stories.d.ts +18 -0
- package/dist/components/articleCard/ArticleCard.stories.d.ts.map +1 -0
- package/dist/components/articleCard/ArticleCard.stories.js +112 -0
- package/dist/components/articleCard/ArticleCard.stories.js.map +1 -0
- package/dist/components/articleCard/ArticleCard.test.d.ts +2 -0
- package/dist/components/articleCard/ArticleCard.test.d.ts.map +1 -0
- package/dist/components/articleCard/ArticleCard.test.js +49 -0
- package/dist/components/articleCard/ArticleCard.test.js.map +1 -0
- package/dist/components/card/Card.d.ts +41 -12
- package/dist/components/card/Card.d.ts.map +1 -1
- package/dist/components/card/Card.js +46 -17
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/card/Card.stories.d.ts +9 -84
- package/dist/components/card/Card.stories.d.ts.map +1 -1
- package/dist/components/card/Card.stories.js +15 -73
- package/dist/components/card/Card.stories.js.map +1 -1
- package/dist/components/card/Card.test.js +50 -152
- package/dist/components/card/Card.test.js.map +1 -1
- package/dist/components/formField/inputs/time/TimeInput.d.ts +1 -1
- package/dist/components/formField/inputs/time/TimeInput.stories.d.ts +1 -1
- package/dist/components/icoText/IcoText.d.ts +37 -0
- package/dist/components/icoText/IcoText.d.ts.map +1 -0
- package/dist/components/icoText/IcoText.js +29 -0
- package/dist/components/icoText/IcoText.js.map +1 -0
- package/dist/components/icoText/IcoText.stories.d.ts +34 -0
- package/dist/components/icoText/IcoText.stories.d.ts.map +1 -0
- package/dist/components/icoText/IcoText.stories.js +24 -0
- package/dist/components/icoText/IcoText.stories.js.map +1 -0
- package/dist/components/icoText/IcoText.test.d.ts +2 -0
- package/dist/components/icoText/IcoText.test.d.ts.map +1 -0
- package/dist/components/icoText/IcoText.test.js +27 -0
- package/dist/components/icoText/IcoText.test.js.map +1 -0
- package/dist/components/kpiCard/KPICard.d.ts +13 -0
- package/dist/components/kpiCard/KPICard.d.ts.map +1 -0
- package/dist/components/kpiCard/KPICard.js +8 -0
- package/dist/components/kpiCard/KPICard.js.map +1 -0
- package/dist/components/kpiCard/KPICard.stories.d.ts +9 -0
- package/dist/components/kpiCard/KPICard.stories.d.ts.map +1 -0
- package/dist/components/kpiCard/KPICard.stories.js +18 -0
- package/dist/components/kpiCard/KPICard.stories.js.map +1 -0
- package/dist/components/kpiCard/KPICard.test.d.ts +2 -0
- package/dist/components/kpiCard/KPICard.test.d.ts.map +1 -0
- package/dist/components/kpiCard/KPICard.test.js +37 -0
- package/dist/components/kpiCard/KPICard.test.js.map +1 -0
- package/dist/components/kvpList/KVPList.d.ts +34 -0
- package/dist/components/kvpList/KVPList.d.ts.map +1 -0
- package/dist/components/kvpList/KVPList.js +20 -0
- package/dist/components/kvpList/KVPList.js.map +1 -0
- package/dist/components/kvpList/KVPList.stories.d.ts +27 -0
- package/dist/components/kvpList/KVPList.stories.d.ts.map +1 -0
- package/dist/components/kvpList/KVPList.stories.js +18 -0
- package/dist/components/kvpList/KVPList.stories.js.map +1 -0
- package/dist/components/kvpList/KVPList.test.d.ts +2 -0
- package/dist/components/kvpList/KVPList.test.d.ts.map +1 -0
- package/dist/components/kvpList/KVPList.test.js +29 -0
- package/dist/components/kvpList/KVPList.test.js.map +1 -0
- package/dist/components/singleUser/SingleUser.d.ts +1 -1
- package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
- package/dist/index.css +186 -22
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/articleCard/ArticleCard.stories.tsx +132 -0
- package/src/components/articleCard/ArticleCard.test.tsx +121 -0
- package/src/components/articleCard/ArticleCard.tsx +100 -0
- package/src/components/articleCard/articleCard.scss +39 -0
- package/src/components/card/Card.stories.tsx +35 -79
- package/src/components/card/Card.test.tsx +72 -190
- package/src/components/card/Card.tsx +117 -58
- package/src/components/card/card.scss +18 -31
- package/src/components/icoText/IcoText.stories.tsx +47 -0
- package/src/components/icoText/IcoText.test.tsx +41 -0
- package/src/components/icoText/IcoText.tsx +93 -0
- package/src/components/icoText/icoText.scss +34 -0
- package/src/components/kpiCard/KPICard.stories.tsx +47 -0
- package/src/components/kpiCard/KPICard.test.tsx +60 -0
- package/src/components/kpiCard/KPICard.tsx +45 -0
- package/src/components/kpiCard/kpiCard.scss +35 -0
- package/src/components/kvpList/KVPList.stories.tsx +51 -0
- package/src/components/kvpList/KVPList.test.tsx +66 -0
- package/src/components/kvpList/KVPList.tsx +109 -0
- package/src/components/kvpList/kvpList.scss +64 -0
- package/src/index.scss +4 -0
- package/src/index.ts +13 -4
- package/src/tokens.scss +6 -0
- package/tokens/json/Arbor.json +30 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.14.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#163](https://github.com/arbor-education/design-system.components/pull/163) [`8971a5c`](https://github.com/arbor-education/design-system.components/commit/8971a5c76764ee05871f06856b1a183e1c1b40e9) Thanks [@danielpeplow](https://github.com/danielpeplow)! - Refactor `Card` into a composable shell that only renders `children` inside a clickable surface, with `default` and `dense` spacing options. This removes the legacy `title`, `paragraph`, `icon`, `iconColor`, `iconScreenReaderText`, `tagText`, and `tagColor` props, and changes the rendered root from `article` to `figure`.
|
|
8
|
+
|
|
9
|
+
Add `ArticleCard` and `IcoText` to preserve the previous title/paragraph/icon/tag card composition, plus `KVPList` and `KPICard` for KPI-focused layouts. Consumers using the removed `Card` content props should migrate to `ArticleCard` or compose `Card` content manually via `children`.
|
|
10
|
+
|
|
3
11
|
## 0.13.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IcoTextIconProps } from '../icoText/IcoText';
|
|
2
|
+
import type { TagColor } from '../tag/Tag';
|
|
3
|
+
import type { IconName } from '../icon/allowedIcons';
|
|
4
|
+
import { Card } from '../card/Card';
|
|
5
|
+
type ArticleCardBaseProps = {
|
|
6
|
+
className?: string;
|
|
7
|
+
paragraph?: React.ReactNode;
|
|
8
|
+
icon?: IconName;
|
|
9
|
+
iconColor?: IcoTextIconProps['color'];
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
tagText?: string;
|
|
12
|
+
tagColor?: TagColor;
|
|
13
|
+
iconScreenReaderText?: string;
|
|
14
|
+
};
|
|
15
|
+
type ArticleCardLinkedProps = {
|
|
16
|
+
'href': string;
|
|
17
|
+
'title': React.ReactNode;
|
|
18
|
+
'onClick'?: undefined;
|
|
19
|
+
'onKeyDown'?: undefined;
|
|
20
|
+
'aria-label'?: string;
|
|
21
|
+
'aria-labelledby'?: string;
|
|
22
|
+
};
|
|
23
|
+
type ArticleCardCardShellProps = {
|
|
24
|
+
href?: undefined;
|
|
25
|
+
title?: React.ReactNode;
|
|
26
|
+
} & Card.InteractionProps;
|
|
27
|
+
export type ArticleCardProps = ArticleCardBaseProps & (ArticleCardLinkedProps | ArticleCardCardShellProps);
|
|
28
|
+
export declare const ArticleCard: (props: ArticleCardProps) => React.JSX.Element;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=ArticleCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.d.ts","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,IAAI,EAA2B,MAAM,sBAAsB,CAAC;AAGrE,KAAK,oBAAoB,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAE1B,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,CAAC,sBAAsB,GAAG,yBAAyB,CAAC,CAAC;AAE3G,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,KAAG,KAAK,CAAC,GAAG,CAAC,OAgE/D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { Tag } from '../tag/Tag';
|
|
4
|
+
import { Card, getCardInteractionProps } from '../card/Card';
|
|
5
|
+
import { IcoText } from '../icoText/IcoText';
|
|
6
|
+
export const ArticleCard = (props) => {
|
|
7
|
+
const { className, href, title, paragraph, icon, iconColor, iconScreenReaderText, disabled = false, tagText, tagColor, } = props;
|
|
8
|
+
const hasPrimaryLink = Boolean(href && title && !disabled);
|
|
9
|
+
const cardClassName = classNames({
|
|
10
|
+
'ds-card__container--article-link': hasPrimaryLink,
|
|
11
|
+
}, className);
|
|
12
|
+
const cardInteractionProps = hasPrimaryLink
|
|
13
|
+
? getCardInteractionProps({
|
|
14
|
+
'onKeyDown': undefined,
|
|
15
|
+
'aria-label': props['aria-label'],
|
|
16
|
+
'aria-labelledby': props['aria-labelledby'],
|
|
17
|
+
})
|
|
18
|
+
: getCardInteractionProps(props);
|
|
19
|
+
const content = (_jsx("article", { className: "ds-article-card", children: _jsxs(IcoText, { children: [icon && (_jsx(IcoText.Icon, { color: iconColor, name: icon, screenReaderText: iconScreenReaderText })), title && (_jsx(IcoText.Heading, { children: hasPrimaryLink
|
|
20
|
+
? (_jsx("a", { className: "ds-article-card__primary-link", href: href, children: title }))
|
|
21
|
+
: title })), paragraph && _jsx(IcoText.Paragraph, { children: paragraph }), tagText && _jsx(Tag, { color: tagColor, children: tagText })] }) }));
|
|
22
|
+
return (_jsx(Card, { ...cardInteractionProps, className: cardClassName, disabled: disabled, spacing: "default", children: content }));
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=ArticleCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.js","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AA6BrD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAqB,EAAE;IACxE,MAAM,EACJ,SAAS,EACT,IAAI,EACJ,KAAK,EACL,SAAS,EACT,IAAI,EACJ,SAAS,EACT,oBAAoB,EACpB,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,QAAQ,GACT,GAAG,KAAK,CAAC;IACV,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,UAAU,CAAC;QAC/B,kCAAkC,EAAE,cAAc;KACnD,EAAE,SAAS,CAAC,CAAC;IAEd,MAAM,oBAAoB,GAAG,cAAc;QACzC,CAAC,CAAC,uBAAuB,CAAC;YACtB,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;YACjC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;SAC5C,CAAC;QACJ,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,CACd,kBAAS,SAAS,EAAC,iBAAiB,YAClC,MAAC,OAAO,eACL,IAAI,IAAI,CACP,KAAC,OAAO,CAAC,IAAI,IACX,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,oBAAoB,GACtC,CACH,EACA,KAAK,IAAI,CACR,KAAC,OAAO,CAAC,OAAO,cACb,cAAc;wBACb,CAAC,CAAC,CACE,YAAG,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAE,IAAI,YACpD,KAAK,GACJ,CACL;wBACH,CAAC,CAAC,KAAK,GACO,CACnB,EACA,SAAS,IAAI,KAAC,OAAO,CAAC,SAAS,cAAE,SAAS,GAAqB,EAC/D,OAAO,IAAI,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,YAAG,OAAO,GAAO,IACzC,GACF,CACX,CAAC;IAEF,OAAO,CACL,KAAC,IAAI,OACC,oBAAoB,EACxB,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAC,SAAS,YAEhB,OAAO,GACH,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react-vite';
|
|
2
|
+
declare const meta: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: (props: import("./ArticleCard").ArticleCardProps) => React.JSX.Element;
|
|
5
|
+
};
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const CardWithTitleAndParagraph: Story;
|
|
8
|
+
export declare const CardWithTitleParagraphAndIcon: Story;
|
|
9
|
+
export declare const TheEverythingCard: Story;
|
|
10
|
+
export declare const CardWithTitleParagraphAndTag: Story;
|
|
11
|
+
export declare const CardWithTitleAndIcon: Story;
|
|
12
|
+
export declare const CardWithParagraph: Story;
|
|
13
|
+
export declare const ClickableDisabledCard: Story;
|
|
14
|
+
export declare const UnclickableCard: Story;
|
|
15
|
+
export declare const TextOnly: Story;
|
|
16
|
+
export declare const LinkedArticle: Story;
|
|
17
|
+
export default meta;
|
|
18
|
+
//# sourceMappingURL=ArticleCard.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.stories.d.ts","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5D,QAAA,MAAM,IAAI;;;CAG0B,CAAC;AAErC,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,yBAAyB,EAAE,KASvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,KAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,KAW1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KASlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAQ/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAYnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAgB3B,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { fn } from 'storybook/test';
|
|
3
|
+
import { ArticleCard } from './ArticleCard';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Components/Card/ArticleCard',
|
|
6
|
+
component: ArticleCard,
|
|
7
|
+
};
|
|
8
|
+
export const CardWithTitleAndParagraph = {
|
|
9
|
+
args: {
|
|
10
|
+
'title': 'Title of Card',
|
|
11
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
12
|
+
'disabled': false,
|
|
13
|
+
'onClick': fn(),
|
|
14
|
+
'onKeyDown': fn(),
|
|
15
|
+
'aria-label': 'Clickable article card with title and paragraph',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
export const CardWithTitleParagraphAndIcon = {
|
|
19
|
+
args: {
|
|
20
|
+
'title': 'Title of Card',
|
|
21
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
22
|
+
'icon': 'eye',
|
|
23
|
+
'disabled': false,
|
|
24
|
+
'onClick': fn(),
|
|
25
|
+
'onKeyDown': fn(),
|
|
26
|
+
'aria-label': 'Clickable article card with title paragraph and icon',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
export const TheEverythingCard = {
|
|
30
|
+
args: {
|
|
31
|
+
'title': 'Title of Card',
|
|
32
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
33
|
+
'icon': 'eye',
|
|
34
|
+
'disabled': false,
|
|
35
|
+
'tagText': 'argle bargle',
|
|
36
|
+
'tagColor': 'orange',
|
|
37
|
+
'onClick': fn(),
|
|
38
|
+
'onKeyDown': fn(),
|
|
39
|
+
'aria-label': 'Clickable article card with all content',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
export const CardWithTitleParagraphAndTag = {
|
|
43
|
+
args: {
|
|
44
|
+
'title': 'Title of Card',
|
|
45
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
46
|
+
'disabled': false,
|
|
47
|
+
'tagText': 'argle bargle',
|
|
48
|
+
'tagColor': 'orange',
|
|
49
|
+
'onClick': fn(),
|
|
50
|
+
'onKeyDown': fn(),
|
|
51
|
+
'aria-label': 'Clickable article card with title paragraph and tag',
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
export const CardWithTitleAndIcon = {
|
|
55
|
+
args: {
|
|
56
|
+
'title': 'Title of Card',
|
|
57
|
+
'icon': 'eye',
|
|
58
|
+
'disabled': false,
|
|
59
|
+
'onClick': fn(),
|
|
60
|
+
'onKeyDown': fn(),
|
|
61
|
+
'aria-label': 'Clickable article card with title and icon',
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
export const CardWithParagraph = {
|
|
65
|
+
args: {
|
|
66
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
67
|
+
'disabled': false,
|
|
68
|
+
'onClick': fn(),
|
|
69
|
+
'onKeyDown': fn(),
|
|
70
|
+
'aria-label': 'Clickable article card with paragraph',
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
export const ClickableDisabledCard = {
|
|
74
|
+
args: {
|
|
75
|
+
'title': 'Title of Card',
|
|
76
|
+
'paragraph': 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
77
|
+
'icon': 'eye',
|
|
78
|
+
'tagText': 'argle bargle',
|
|
79
|
+
'tagColor': 'orange',
|
|
80
|
+
'disabled': true,
|
|
81
|
+
'onClick': fn(),
|
|
82
|
+
'onKeyDown': fn(),
|
|
83
|
+
'aria-label': 'Disabled clickable article card',
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export const UnclickableCard = {
|
|
87
|
+
args: {
|
|
88
|
+
title: 'Title of Card',
|
|
89
|
+
paragraph: 'Lorem ipsum dolor sit amet consectetur adipiscing elit.',
|
|
90
|
+
icon: 'eye',
|
|
91
|
+
tagText: 'argle bargle',
|
|
92
|
+
tagColor: 'orange',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
export const TextOnly = {
|
|
96
|
+
args: {
|
|
97
|
+
title: 'Text-only article card',
|
|
98
|
+
paragraph: 'A compact way to present article-style content in the shared shell.',
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
export const LinkedArticle = {
|
|
102
|
+
args: {
|
|
103
|
+
title: 'Primary article link',
|
|
104
|
+
href: '/articles/primary-article-link',
|
|
105
|
+
paragraph: (_jsxs(_Fragment, { children: ["Read the full article or visit the", ' ', _jsx("a", { href: "/authors/design-system", children: "author page" }), "."] })),
|
|
106
|
+
icon: 'eye',
|
|
107
|
+
tagText: 'Featured',
|
|
108
|
+
tagColor: 'green',
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
export default meta;
|
|
112
|
+
//# sourceMappingURL=ArticleCard.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.stories.js","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.test.d.ts","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.test.tsx"],"names":[],"mappings":"AACA,OAAO,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
3
|
+
import '@testing-library/jest-dom/vitest';
|
|
4
|
+
import { describe, expect, test, vi } from 'vitest';
|
|
5
|
+
import { ArticleCard } from './ArticleCard';
|
|
6
|
+
describe('ArticleCard', () => {
|
|
7
|
+
test('renders the legacy card content composition', () => {
|
|
8
|
+
const { container } = render(_jsx(ArticleCard, { icon: "eye", paragraph: "Helpful supporting copy", tagColor: "green", tagText: "Live", title: "Article summary" }));
|
|
9
|
+
expect(screen.getByRole('article')).toBeInTheDocument();
|
|
10
|
+
expect(screen.getByRole('heading', { level: 4 })).toHaveTextContent('Article summary');
|
|
11
|
+
expect(screen.getByText('Helpful supporting copy')).toBeInTheDocument();
|
|
12
|
+
expect(screen.getByText('Live')).toBeInTheDocument();
|
|
13
|
+
expect(container.querySelector('.ds-icon-eye')).toBeInTheDocument();
|
|
14
|
+
});
|
|
15
|
+
test('renders content without an icon', () => {
|
|
16
|
+
const { container } = render(_jsx(ArticleCard, { paragraph: "Helpful supporting copy", title: "Article summary" }));
|
|
17
|
+
expect(screen.getByRole('heading', { level: 4 })).toHaveTextContent('Article summary');
|
|
18
|
+
expect(container.querySelector('.ds-ico-text__icon')).not.toBeInTheDocument();
|
|
19
|
+
});
|
|
20
|
+
test('renders a tag when provided', () => {
|
|
21
|
+
render(_jsx(ArticleCard, { paragraph: "Helpful supporting copy", tagColor: "orange", tagText: "Pinned", title: "Article summary" }));
|
|
22
|
+
expect(screen.getByText('Pinned')).toBeInTheDocument();
|
|
23
|
+
});
|
|
24
|
+
test('renders a primary title link without button semantics when href is provided', () => {
|
|
25
|
+
const { container } = render(_jsx(ArticleCard, { href: "/articles/linked-article", paragraph: (_jsxs(_Fragment, { children: ["By", ' ', _jsx("a", { href: "/authors/design-system", children: "Design System Team" })] })), title: "Linked article" }));
|
|
26
|
+
expect(screen.getByRole('link', { name: 'Linked article' })).toHaveAttribute('href', '/articles/linked-article');
|
|
27
|
+
expect(screen.getByRole('link', { name: 'Design System Team' })).toHaveAttribute('href', '/authors/design-system');
|
|
28
|
+
expect(container.querySelector('figure')).not.toHaveAttribute('role', 'button');
|
|
29
|
+
});
|
|
30
|
+
test('suppresses the primary link when disabled even if href is provided', () => {
|
|
31
|
+
const { container } = render(_jsx(ArticleCard, { disabled: true, href: "/articles/linked-article", paragraph: "Helpful supporting copy", title: "Linked article" }));
|
|
32
|
+
expect(screen.queryByRole('link', { name: 'Linked article' })).not.toBeInTheDocument();
|
|
33
|
+
expect(container.querySelector('figure')).not.toHaveAttribute('role', 'button');
|
|
34
|
+
});
|
|
35
|
+
test('uses the shared card shell for interactivity', () => {
|
|
36
|
+
const handleClick = vi.fn();
|
|
37
|
+
render(_jsx(ArticleCard, { "aria-label": "Clickable article card", onClick: handleClick, paragraph: "Helpful supporting copy", title: "Clickable article" }));
|
|
38
|
+
const card = screen.getByRole('button', { name: 'Clickable article card' });
|
|
39
|
+
fireEvent.click(card);
|
|
40
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
41
|
+
});
|
|
42
|
+
test('renders as a static figure when not clickable', () => {
|
|
43
|
+
const { container } = render(_jsx(ArticleCard, { paragraph: "Helpful supporting copy", title: "Static article" }));
|
|
44
|
+
const card = container.querySelector('figure');
|
|
45
|
+
expect(card).toBeInTheDocument();
|
|
46
|
+
expect(card).not.toHaveAttribute('role', 'button');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=ArticleCard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticleCard.test.js","sourceRoot":"","sources":["../../../src/components/articleCard/ArticleCard.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
title?: string;
|
|
5
|
-
paragraph?: string;
|
|
6
|
-
icon?: keyof typeof allowedIcons;
|
|
7
|
-
iconColor?: string;
|
|
1
|
+
type CardBaseProps = {
|
|
2
|
+
children?: React.ReactNode;
|
|
3
|
+
className?: string;
|
|
8
4
|
disabled?: boolean;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
spacing?: 'default' | 'dense';
|
|
6
|
+
};
|
|
7
|
+
type CardAccessibleNameProps = {
|
|
8
|
+
'aria-label': string;
|
|
9
|
+
'aria-labelledby'?: string;
|
|
10
|
+
} | {
|
|
11
|
+
'aria-label'?: string;
|
|
12
|
+
'aria-labelledby': string;
|
|
13
|
+
};
|
|
14
|
+
type CardInteractiveProps = CardAccessibleNameProps & {
|
|
15
|
+
onClick: (e: React.MouseEvent<HTMLElement>) => void;
|
|
12
16
|
onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
13
|
-
iconScreenReaderText?: string;
|
|
14
17
|
};
|
|
15
|
-
|
|
18
|
+
type CardStaticProps = {
|
|
19
|
+
'onClick'?: undefined;
|
|
20
|
+
'onKeyDown'?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
21
|
+
'aria-label'?: string;
|
|
22
|
+
'aria-labelledby'?: string;
|
|
23
|
+
};
|
|
24
|
+
type CardInteractionProps = CardInteractiveProps | CardStaticProps;
|
|
25
|
+
type CardResolvedInteractionProps = {
|
|
26
|
+
'onClick': (e: React.MouseEvent<HTMLElement>) => void;
|
|
27
|
+
'onKeyDown'?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
28
|
+
'aria-label': string;
|
|
29
|
+
} | {
|
|
30
|
+
'onClick': (e: React.MouseEvent<HTMLElement>) => void;
|
|
31
|
+
'onKeyDown'?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
32
|
+
'aria-labelledby': string;
|
|
33
|
+
} | {
|
|
34
|
+
'onClick'?: undefined;
|
|
35
|
+
'onKeyDown'?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
36
|
+
'aria-label'?: string;
|
|
37
|
+
'aria-labelledby'?: string;
|
|
38
|
+
};
|
|
39
|
+
export type CardProps = CardBaseProps & CardInteractionProps;
|
|
40
|
+
export declare const getCardInteractionProps: (props: CardInteractionProps) => CardResolvedInteractionProps;
|
|
41
|
+
export declare const Card: ({ children, className, onClick, onKeyDown, disabled, spacing, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }: CardProps) => React.JSX.Element;
|
|
16
42
|
export declare namespace Card {
|
|
17
43
|
type Props = CardProps;
|
|
44
|
+
type AccessibleNameProps = CardAccessibleNameProps;
|
|
45
|
+
type InteractiveProps = CardInteractiveProps;
|
|
46
|
+
type InteractionProps = CardInteractionProps;
|
|
18
47
|
}
|
|
19
48
|
export {};
|
|
20
49
|
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/card/Card.tsx"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/card/Card.tsx"],"names":[],"mappings":"AAGA,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B,CAAC;AAEF,KAAK,uBAAuB,GACtB;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GACC;IACA,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEJ,KAAK,oBAAoB,GAAG,uBAAuB,GAAG;IACpD,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,oBAAoB,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAEnE,KAAK,4BAA4B,GAC3B;IACF,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,EAAE,MAAM,CAAC;CACtB,GACC;IACA,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACC;IACA,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEJ,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAE7D,eAAO,MAAM,uBAAuB,GAAI,OAAO,oBAAoB,KAAG,4BAmCrE,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,6HASlB,SAAS,KAAG,KAAK,CAAC,GAAG,CAAC,OAwDxB,CAAC;AAEF,yBAAiB,IAAI,CAAC;IACpB,KAAY,KAAK,GAAG,SAAS,CAAC;IAC9B,KAAY,mBAAmB,GAAG,uBAAuB,CAAC;IAC1D,KAAY,gBAAgB,GAAG,oBAAoB,CAAC;IACpD,KAAY,gBAAgB,GAAG,oBAAoB,CAAC;CACrD"}
|
|
@@ -1,31 +1,60 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { Icon } from '../icon/Icon';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
export const getCardInteractionProps = (props) => {
|
|
5
|
+
if (props.onClick === undefined) {
|
|
6
|
+
return {
|
|
7
|
+
'onKeyDown': props.onKeyDown,
|
|
8
|
+
'aria-label': props['aria-label'],
|
|
9
|
+
'aria-labelledby': props['aria-labelledby'],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (props['aria-label'] !== undefined) {
|
|
13
|
+
return {
|
|
14
|
+
'onClick': props.onClick,
|
|
15
|
+
'onKeyDown': props.onKeyDown,
|
|
16
|
+
'aria-label': props['aria-label'],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (props['aria-labelledby'] === undefined) {
|
|
20
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
21
|
+
throw new Error('Interactive Card requires aria-label or aria-labelledby.');
|
|
10
22
|
}
|
|
23
|
+
console.error('Interactive Card requires aria-label or aria-labelledby.');
|
|
24
|
+
return {
|
|
25
|
+
onClick: props.onClick,
|
|
26
|
+
onKeyDown: props.onKeyDown,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
'onClick': props.onClick,
|
|
31
|
+
'onKeyDown': props.onKeyDown,
|
|
32
|
+
'aria-labelledby': props['aria-labelledby'],
|
|
11
33
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const isCardClickable = onClick && !disabled;
|
|
18
|
-
return (_jsx("article", { className: classNames('ds-card__container', {
|
|
34
|
+
};
|
|
35
|
+
export const Card = ({ children, className, onClick, onKeyDown, disabled = false, spacing = 'default', 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, }) => {
|
|
36
|
+
const isCardInteractive = Boolean(onClick);
|
|
37
|
+
const isCardClickable = isCardInteractive && !disabled;
|
|
38
|
+
return (_jsx("figure", { className: classNames('ds-card__container', className, {
|
|
19
39
|
'ds-card__container--clickable': isCardClickable,
|
|
20
40
|
'ds-card__container--disabled': disabled,
|
|
41
|
+
'ds-card__container--dense': spacing === 'dense',
|
|
21
42
|
}), onClick: (e) => {
|
|
22
43
|
if (isCardClickable) {
|
|
23
|
-
|
|
44
|
+
onClick?.(e);
|
|
24
45
|
}
|
|
25
46
|
}, onKeyDown: (e) => {
|
|
47
|
+
if (!isCardInteractive)
|
|
48
|
+
return;
|
|
49
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
if (isCardClickable) {
|
|
52
|
+
e.currentTarget.click();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
26
55
|
if (isCardClickable) {
|
|
27
|
-
|
|
56
|
+
onKeyDown?.(e);
|
|
28
57
|
}
|
|
29
|
-
}, "aria-
|
|
58
|
+
}, "aria-disabled": isCardInteractive && disabled ? true : undefined, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, role: isCardInteractive ? 'button' : undefined, tabIndex: isCardInteractive ? 0 : undefined, children: _jsxs("div", { className: "ds-card__content", children: [_jsx("div", { className: "ds-card__body", children: children }), isCardClickable && (_jsxs(_Fragment, { children: [_jsx(Icon, { name: "chevron-right", className: "ds-card__icon-click", size: 24 }), _jsx(Icon, { name: "arrow-right", className: "ds-card__icon-click", size: 24 })] }))] }) }));
|
|
30
59
|
};
|
|
31
60
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/card/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/card/Card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
export declare const CardWithTitleParagraphAndIcon: {
|
|
14
|
-
args: {
|
|
15
|
-
title: string;
|
|
16
|
-
paragraph: string;
|
|
17
|
-
icon: string;
|
|
18
|
-
disabled: boolean;
|
|
19
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
20
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export declare const TheEverythingCard: {
|
|
24
|
-
args: {
|
|
25
|
-
title: string;
|
|
26
|
-
paragraph: string;
|
|
27
|
-
icon: string;
|
|
28
|
-
disabled: boolean;
|
|
29
|
-
pillText: string;
|
|
30
|
-
pillColor: string;
|
|
31
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
32
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
export declare const CardWithTitleParagraphAndPill: {
|
|
36
|
-
args: {
|
|
37
|
-
title: string;
|
|
38
|
-
paragraph: string;
|
|
39
|
-
disabled: boolean;
|
|
40
|
-
pillText: string;
|
|
41
|
-
pillColor: string;
|
|
42
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
43
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare const CardWithTitleAndIcon: {
|
|
47
|
-
args: {
|
|
48
|
-
title: string;
|
|
49
|
-
icon: string;
|
|
50
|
-
disabled: boolean;
|
|
51
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
52
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
export declare const CardWithParagraph: {
|
|
56
|
-
args: {
|
|
57
|
-
paragraph: string;
|
|
58
|
-
disabled: boolean;
|
|
59
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
60
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
export declare const ClickableDisabledCard: {
|
|
64
|
-
args: {
|
|
65
|
-
title: string;
|
|
66
|
-
paragraph: string;
|
|
67
|
-
icon: string;
|
|
68
|
-
disabled: boolean;
|
|
69
|
-
pillText: string;
|
|
70
|
-
pillColor: string;
|
|
71
|
-
onClick: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
72
|
-
onKeyDown: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
export declare const UnclickableCard: {
|
|
76
|
-
args: {
|
|
77
|
-
title: string;
|
|
78
|
-
paragraph: string;
|
|
79
|
-
icon: string;
|
|
80
|
-
disabled: boolean;
|
|
81
|
-
pillText: string;
|
|
82
|
-
pillColor: string;
|
|
83
|
-
};
|
|
84
|
-
};
|
|
1
|
+
import type { StoryObj } from '@storybook/react-vite';
|
|
2
|
+
declare const meta: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: ({ children, className, onClick, onKeyDown, disabled, spacing, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }: import("./Card").CardProps) => React.JSX.Element;
|
|
5
|
+
};
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const StaticCard: Story;
|
|
8
|
+
export declare const ClickableCard: Story;
|
|
9
|
+
export declare const DenseCard: Story;
|
|
85
10
|
export default meta;
|
|
86
11
|
//# sourceMappingURL=Card.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.stories.d.ts","sourceRoot":"","sources":["../../../src/components/card/Card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Card.stories.d.ts","sourceRoot":"","sources":["../../../src/components/card/Card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5D,QAAA,MAAM,IAAI;;;CAGmB,CAAC;AAE9B,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AASnC,eAAO,MAAM,UAAU,EAAE,KASxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|