@transferwise/components 46.52.2 → 46.52.3
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/build/card/Card.js +20 -13
- package/build/card/Card.js.map +1 -1
- package/build/card/Card.mjs +21 -14
- package/build/card/Card.mjs.map +1 -1
- package/build/common/Option/Option.js.map +1 -1
- package/build/common/Option/Option.mjs.map +1 -1
- package/build/types/card/Card.d.ts.map +1 -1
- package/build/types/common/Option/Option.d.ts +2 -0
- package/build/types/common/Option/Option.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/card/Card.spec.tsx +35 -3
- package/src/card/Card.story.tsx +56 -40
- package/src/card/Card.tsx +32 -14
- package/src/common/Option/Option.tsx +2 -0
package/build/card/Card.js
CHANGED
|
@@ -22,36 +22,43 @@ const Card = /*#__PURE__*/React.forwardRef(function Card({
|
|
|
22
22
|
className,
|
|
23
23
|
'data-testid': dataTestId
|
|
24
24
|
}, reference) {
|
|
25
|
-
const
|
|
25
|
+
const labelId = React.useId();
|
|
26
|
+
const contentId = React.useId();
|
|
27
|
+
const isExpandable = Boolean(children);
|
|
26
28
|
return /*#__PURE__*/jsxRuntime.jsxs(Element, {
|
|
27
29
|
ref: reference,
|
|
28
30
|
className: clsx.clsx('np-card', className, {
|
|
29
|
-
'np-card--expanded':
|
|
31
|
+
'np-card--expanded': isExpandable && isExpanded,
|
|
30
32
|
'np-card--inactive': !children,
|
|
31
33
|
'np-card--has-icon': !!icon
|
|
32
34
|
}),
|
|
33
35
|
id: id,
|
|
34
36
|
"data-testid": dataTestId,
|
|
35
37
|
children: [/*#__PURE__*/jsxRuntime.jsx(Option, {
|
|
38
|
+
"aria-expanded": isExpandable ? isExpanded : undefined,
|
|
39
|
+
"aria-controls": isExpanded ? contentId : undefined,
|
|
40
|
+
id: labelId,
|
|
36
41
|
"aria-label": ariaLabel,
|
|
37
|
-
as:
|
|
38
|
-
className:
|
|
42
|
+
as: isExpandable ? 'button' : 'div',
|
|
43
|
+
className: "np-card__button",
|
|
39
44
|
media: icon,
|
|
40
45
|
title: title,
|
|
41
46
|
content: details,
|
|
42
47
|
showMediaAtAllSizes: true,
|
|
43
|
-
button:
|
|
44
|
-
orientation:
|
|
45
|
-
}),
|
|
46
|
-
onClick:
|
|
47
|
-
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
48
|
+
button: isExpandable ? /*#__PURE__*/jsxRuntime.jsx(Chevron, {
|
|
49
|
+
orientation: isExpanded ? position.Position.TOP : position.Position.BOTTOM
|
|
50
|
+
}) : null,
|
|
51
|
+
onClick: isExpandable ? () => onClick?.(!isExpanded) : undefined
|
|
52
|
+
}), isExpandable && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
48
53
|
className: clsx.clsx('np-card__divider', {
|
|
49
|
-
'np-card__divider--expanded':
|
|
54
|
+
'np-card__divider--expanded': isExpanded
|
|
50
55
|
})
|
|
51
|
-
}),
|
|
52
|
-
as: "
|
|
56
|
+
}), isExpandable && isExpanded && /*#__PURE__*/jsxRuntime.jsx(Body, {
|
|
57
|
+
as: "div",
|
|
53
58
|
type: typography.Typography.BODY_LARGE,
|
|
54
|
-
className:
|
|
59
|
+
className: clsx.clsx('np-card__content', isExpanded ? 'd-block' : 'hide'),
|
|
60
|
+
id: contentId,
|
|
61
|
+
"aria-labelledby": labelId,
|
|
55
62
|
children: children
|
|
56
63
|
})]
|
|
57
64
|
});
|
package/build/card/Card.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sources":["../../src/card/Card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport Body from '../body';\nimport Chevron from '../chevron';\nimport { Position, Typography } from '../common';\nimport Option from '../common/Option';\n\nexport interface CardProps {\n 'aria-label'?: string;\n as?: React.ElementType;\n isExpanded?: boolean;\n title: React.ReactNode;\n details: React.ReactNode;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n id?: string;\n className?: string;\n 'data-testid'?: string;\n onClick?: (nextIsExpanded: boolean) => void;\n}\n\n/**\n * @deprecated use Navigation pattern (via `NavigationOption` component)\n * @see https://transferwise.atlassian.net/wiki/spaces/DS/pages/2387314550/Instructions+for+killing+expanding+cards+on+web+design+pattern\n */\nconst Card = forwardRef(function Card(\n {\n 'aria-label': ariaLabel,\n as: Element = 'div',\n isExpanded,\n title,\n details,\n children,\n onClick,\n icon,\n id,\n className,\n 'data-testid': dataTestId,\n }: CardProps,\n reference,\n) {\n const
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../src/card/Card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useId } from 'react';\n\nimport Body from '../body';\nimport Chevron from '../chevron';\nimport { Position, Typography } from '../common';\nimport Option from '../common/Option';\n\nexport interface CardProps {\n 'aria-label'?: string;\n as?: React.ElementType;\n isExpanded?: boolean;\n title: React.ReactNode;\n details: React.ReactNode;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n id?: string;\n className?: string;\n 'data-testid'?: string;\n onClick?: (nextIsExpanded: boolean) => void;\n}\n\n/**\n * @deprecated use Navigation pattern (via `NavigationOption` component)\n * @see https://transferwise.atlassian.net/wiki/spaces/DS/pages/2387314550/Instructions+for+killing+expanding+cards+on+web+design+pattern\n */\nconst Card = forwardRef(function Card(\n {\n 'aria-label': ariaLabel,\n as: Element = 'div',\n isExpanded,\n title,\n details,\n children,\n onClick,\n icon,\n id,\n className,\n 'data-testid': dataTestId,\n }: CardProps,\n reference,\n) {\n const labelId = useId();\n const contentId = useId();\n const isExpandable = Boolean(children);\n\n\n return (\n <Element\n ref={reference}\n className={clsx('np-card', className, {\n 'np-card--expanded': isExpandable && isExpanded,\n 'np-card--inactive': !children,\n 'np-card--has-icon': !!icon,\n })}\n id={id}\n data-testid={dataTestId}\n >\n <Option\n aria-expanded={isExpandable ? isExpanded : undefined}\n aria-controls={isExpanded ? contentId : undefined}\n id={labelId}\n aria-label={ariaLabel}\n as={isExpandable ? 'button' : 'div'}\n className=\"np-card__button\"\n media={icon}\n title={title}\n content={details}\n showMediaAtAllSizes\n button={\n isExpandable ? <Chevron orientation={isExpanded ? Position.TOP : Position.BOTTOM} /> : null\n }\n onClick={isExpandable ? () => onClick?.(!isExpanded) : undefined}\n />\n\n {isExpandable && (\n <div\n className={clsx('np-card__divider', {\n 'np-card__divider--expanded': isExpanded,\n })}\n />\n )}\n\n {isExpandable && isExpanded && (\n <Body\n as=\"div\"\n type={Typography.BODY_LARGE}\n className={clsx('np-card__content', isExpanded ? 'd-block' : 'hide')}\n id={contentId}\n aria-labelledby={labelId}\n >\n {children}\n </Body>\n )}\n </Element>\n );\n});\n\nexport default Card;\n"],"names":["Card","forwardRef","ariaLabel","as","Element","isExpanded","title","details","children","onClick","icon","id","className","dataTestId","reference","labelId","useId","contentId","isExpandable","Boolean","_jsxs","ref","clsx","_jsx","Option","undefined","media","content","showMediaAtAllSizes","button","Chevron","orientation","Position","TOP","BOTTOM","Body","type","Typography","BODY_LARGE"],"mappings":";;;;;;;;;;;AA0BA,MAAMA,IAAI,gBAAGC,gBAAU,CAAC,SAASD,IAAIA,CACnC;AACE,EAAA,YAAY,EAAEE,SAAS;EACvBC,EAAE,EAAEC,OAAO,GAAG,KAAK;EACnBC,UAAU;EACVC,KAAK;EACLC,OAAO;EACPC,QAAQ;EACRC,OAAO;EACPC,IAAI;EACJC,EAAE;EACFC,SAAS;AACT,EAAA,aAAa,EAAEC,UAAAA;AAAU,CACf,EACZC,SAAS,EAAA;AAET,EAAA,MAAMC,OAAO,GAAGC,WAAK,EAAE,CAAA;AACvB,EAAA,MAAMC,SAAS,GAAGD,WAAK,EAAE,CAAA;AACzB,EAAA,MAAME,YAAY,GAAGC,OAAO,CAACX,QAAQ,CAAC,CAAA;EAGtC,oBACEY,eAAA,CAAChB,OAAO,EAAA;AACNiB,IAAAA,GAAG,EAAEP,SAAU;AACfF,IAAAA,SAAS,EAAEU,SAAI,CAAC,SAAS,EAAEV,SAAS,EAAE;MACpC,mBAAmB,EAAEM,YAAY,IAAIb,UAAU;MAC/C,mBAAmB,EAAE,CAACG,QAAQ;MAC9B,mBAAmB,EAAE,CAAC,CAACE,IAAAA;AACxB,KAAA,CAAE;AACHC,IAAAA,EAAE,EAAEA,EAAG;AACP,IAAA,aAAA,EAAaE,UAAW;IAAAL,QAAA,EAAA,cAExBe,cAAA,CAACC,MAAM,EAAA;AACL,MAAA,eAAA,EAAeN,YAAY,GAAGb,UAAU,GAAGoB,SAAU;AACrD,MAAA,eAAA,EAAepB,UAAU,GAAGY,SAAS,GAAGQ,SAAU;AAClDd,MAAAA,EAAE,EAAEI,OAAQ;AACZ,MAAA,YAAA,EAAYb,SAAU;AACtBC,MAAAA,EAAE,EAAEe,YAAY,GAAG,QAAQ,GAAG,KAAM;AACpCN,MAAAA,SAAS,EAAC,iBAAiB;AAC3Bc,MAAAA,KAAK,EAAEhB,IAAK;AACZJ,MAAAA,KAAK,EAAEA,KAAM;AACbqB,MAAAA,OAAO,EAAEpB,OAAQ;MACjBqB,mBAAmB,EAAA,IAAA;AACnBC,MAAAA,MAAM,EACJX,YAAY,gBAAGK,cAAA,CAACO,OAAO,EAAA;QAACC,WAAW,EAAE1B,UAAU,GAAG2B,iBAAQ,CAACC,GAAG,GAAGD,iBAAQ,CAACE,MAAAA;OAAO,CAAG,GAAG,IACxF;MACDzB,OAAO,EAAES,YAAY,GAAG,MAAMT,OAAO,GAAG,CAACJ,UAAU,CAAC,GAAGoB,SAAAA;AAAU,KAGnE,CAAA,EAACP,YAAY,iBACXK,cAAA,CAAA,KAAA,EAAA;AACEX,MAAAA,SAAS,EAAEU,SAAI,CAAC,kBAAkB,EAAE;AAClC,QAAA,4BAA4B,EAAEjB,UAAAA;OAC/B,CAAA;KACD,CACH,EAEAa,YAAY,IAAIb,UAAU,iBACzBkB,cAAA,CAACY,IAAI,EAAA;AACHhC,MAAAA,EAAE,EAAC,KAAK;MACRiC,IAAI,EAAEC,qBAAU,CAACC,UAAW;MAC5B1B,SAAS,EAAEU,SAAI,CAAC,kBAAkB,EAAEjB,UAAU,GAAG,SAAS,GAAG,MAAM,CAAE;AACrEM,MAAAA,EAAE,EAAEM,SAAU;AACd,MAAA,iBAAA,EAAiBF,OAAQ;AAAAP,MAAAA,QAAA,EAExBA,QAAAA;AAAQ,KACL,CACP,CAAA;AAAA,GACM,CAAC,CAAA;AAEd,CAAC;;;;"}
|
package/build/card/Card.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clsx } from 'clsx';
|
|
2
|
-
import { forwardRef } from 'react';
|
|
2
|
+
import { forwardRef, useId } from 'react';
|
|
3
3
|
import Body from '../body/Body.mjs';
|
|
4
4
|
import Chevron from '../chevron/Chevron.mjs';
|
|
5
5
|
import Option from '../common/Option/Option.mjs';
|
|
@@ -20,36 +20,43 @@ const Card = /*#__PURE__*/forwardRef(function Card({
|
|
|
20
20
|
className,
|
|
21
21
|
'data-testid': dataTestId
|
|
22
22
|
}, reference) {
|
|
23
|
-
const
|
|
23
|
+
const labelId = useId();
|
|
24
|
+
const contentId = useId();
|
|
25
|
+
const isExpandable = Boolean(children);
|
|
24
26
|
return /*#__PURE__*/jsxs(Element, {
|
|
25
27
|
ref: reference,
|
|
26
28
|
className: clsx('np-card', className, {
|
|
27
|
-
'np-card--expanded':
|
|
29
|
+
'np-card--expanded': isExpandable && isExpanded,
|
|
28
30
|
'np-card--inactive': !children,
|
|
29
31
|
'np-card--has-icon': !!icon
|
|
30
32
|
}),
|
|
31
33
|
id: id,
|
|
32
34
|
"data-testid": dataTestId,
|
|
33
35
|
children: [/*#__PURE__*/jsx(Option, {
|
|
36
|
+
"aria-expanded": isExpandable ? isExpanded : undefined,
|
|
37
|
+
"aria-controls": isExpanded ? contentId : undefined,
|
|
38
|
+
id: labelId,
|
|
34
39
|
"aria-label": ariaLabel,
|
|
35
|
-
as:
|
|
36
|
-
className:
|
|
40
|
+
as: isExpandable ? 'button' : 'div',
|
|
41
|
+
className: "np-card__button",
|
|
37
42
|
media: icon,
|
|
38
43
|
title: title,
|
|
39
44
|
content: details,
|
|
40
45
|
showMediaAtAllSizes: true,
|
|
41
|
-
button:
|
|
42
|
-
orientation:
|
|
43
|
-
}),
|
|
44
|
-
onClick:
|
|
45
|
-
}), /*#__PURE__*/jsx("div", {
|
|
46
|
+
button: isExpandable ? /*#__PURE__*/jsx(Chevron, {
|
|
47
|
+
orientation: isExpanded ? Position.TOP : Position.BOTTOM
|
|
48
|
+
}) : null,
|
|
49
|
+
onClick: isExpandable ? () => onClick?.(!isExpanded) : undefined
|
|
50
|
+
}), isExpandable && /*#__PURE__*/jsx("div", {
|
|
46
51
|
className: clsx('np-card__divider', {
|
|
47
|
-
'np-card__divider--expanded':
|
|
52
|
+
'np-card__divider--expanded': isExpanded
|
|
48
53
|
})
|
|
49
|
-
}),
|
|
50
|
-
as: "
|
|
54
|
+
}), isExpandable && isExpanded && /*#__PURE__*/jsx(Body, {
|
|
55
|
+
as: "div",
|
|
51
56
|
type: Typography.BODY_LARGE,
|
|
52
|
-
className:
|
|
57
|
+
className: clsx('np-card__content', isExpanded ? 'd-block' : 'hide'),
|
|
58
|
+
id: contentId,
|
|
59
|
+
"aria-labelledby": labelId,
|
|
53
60
|
children: children
|
|
54
61
|
})]
|
|
55
62
|
});
|
package/build/card/Card.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.mjs","sources":["../../src/card/Card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport Body from '../body';\nimport Chevron from '../chevron';\nimport { Position, Typography } from '../common';\nimport Option from '../common/Option';\n\nexport interface CardProps {\n 'aria-label'?: string;\n as?: React.ElementType;\n isExpanded?: boolean;\n title: React.ReactNode;\n details: React.ReactNode;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n id?: string;\n className?: string;\n 'data-testid'?: string;\n onClick?: (nextIsExpanded: boolean) => void;\n}\n\n/**\n * @deprecated use Navigation pattern (via `NavigationOption` component)\n * @see https://transferwise.atlassian.net/wiki/spaces/DS/pages/2387314550/Instructions+for+killing+expanding+cards+on+web+design+pattern\n */\nconst Card = forwardRef(function Card(\n {\n 'aria-label': ariaLabel,\n as: Element = 'div',\n isExpanded,\n title,\n details,\n children,\n onClick,\n icon,\n id,\n className,\n 'data-testid': dataTestId,\n }: CardProps,\n reference,\n) {\n const
|
|
1
|
+
{"version":3,"file":"Card.mjs","sources":["../../src/card/Card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useId } from 'react';\n\nimport Body from '../body';\nimport Chevron from '../chevron';\nimport { Position, Typography } from '../common';\nimport Option from '../common/Option';\n\nexport interface CardProps {\n 'aria-label'?: string;\n as?: React.ElementType;\n isExpanded?: boolean;\n title: React.ReactNode;\n details: React.ReactNode;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n id?: string;\n className?: string;\n 'data-testid'?: string;\n onClick?: (nextIsExpanded: boolean) => void;\n}\n\n/**\n * @deprecated use Navigation pattern (via `NavigationOption` component)\n * @see https://transferwise.atlassian.net/wiki/spaces/DS/pages/2387314550/Instructions+for+killing+expanding+cards+on+web+design+pattern\n */\nconst Card = forwardRef(function Card(\n {\n 'aria-label': ariaLabel,\n as: Element = 'div',\n isExpanded,\n title,\n details,\n children,\n onClick,\n icon,\n id,\n className,\n 'data-testid': dataTestId,\n }: CardProps,\n reference,\n) {\n const labelId = useId();\n const contentId = useId();\n const isExpandable = Boolean(children);\n\n\n return (\n <Element\n ref={reference}\n className={clsx('np-card', className, {\n 'np-card--expanded': isExpandable && isExpanded,\n 'np-card--inactive': !children,\n 'np-card--has-icon': !!icon,\n })}\n id={id}\n data-testid={dataTestId}\n >\n <Option\n aria-expanded={isExpandable ? isExpanded : undefined}\n aria-controls={isExpanded ? contentId : undefined}\n id={labelId}\n aria-label={ariaLabel}\n as={isExpandable ? 'button' : 'div'}\n className=\"np-card__button\"\n media={icon}\n title={title}\n content={details}\n showMediaAtAllSizes\n button={\n isExpandable ? <Chevron orientation={isExpanded ? Position.TOP : Position.BOTTOM} /> : null\n }\n onClick={isExpandable ? () => onClick?.(!isExpanded) : undefined}\n />\n\n {isExpandable && (\n <div\n className={clsx('np-card__divider', {\n 'np-card__divider--expanded': isExpanded,\n })}\n />\n )}\n\n {isExpandable && isExpanded && (\n <Body\n as=\"div\"\n type={Typography.BODY_LARGE}\n className={clsx('np-card__content', isExpanded ? 'd-block' : 'hide')}\n id={contentId}\n aria-labelledby={labelId}\n >\n {children}\n </Body>\n )}\n </Element>\n );\n});\n\nexport default Card;\n"],"names":["Card","forwardRef","ariaLabel","as","Element","isExpanded","title","details","children","onClick","icon","id","className","dataTestId","reference","labelId","useId","contentId","isExpandable","Boolean","_jsxs","ref","clsx","_jsx","Option","undefined","media","content","showMediaAtAllSizes","button","Chevron","orientation","Position","TOP","BOTTOM","Body","type","Typography","BODY_LARGE"],"mappings":";;;;;;;;;AA0BA,MAAMA,IAAI,gBAAGC,UAAU,CAAC,SAASD,IAAIA,CACnC;AACE,EAAA,YAAY,EAAEE,SAAS;EACvBC,EAAE,EAAEC,OAAO,GAAG,KAAK;EACnBC,UAAU;EACVC,KAAK;EACLC,OAAO;EACPC,QAAQ;EACRC,OAAO;EACPC,IAAI;EACJC,EAAE;EACFC,SAAS;AACT,EAAA,aAAa,EAAEC,UAAAA;AAAU,CACf,EACZC,SAAS,EAAA;AAET,EAAA,MAAMC,OAAO,GAAGC,KAAK,EAAE,CAAA;AACvB,EAAA,MAAMC,SAAS,GAAGD,KAAK,EAAE,CAAA;AACzB,EAAA,MAAME,YAAY,GAAGC,OAAO,CAACX,QAAQ,CAAC,CAAA;EAGtC,oBACEY,IAAA,CAAChB,OAAO,EAAA;AACNiB,IAAAA,GAAG,EAAEP,SAAU;AACfF,IAAAA,SAAS,EAAEU,IAAI,CAAC,SAAS,EAAEV,SAAS,EAAE;MACpC,mBAAmB,EAAEM,YAAY,IAAIb,UAAU;MAC/C,mBAAmB,EAAE,CAACG,QAAQ;MAC9B,mBAAmB,EAAE,CAAC,CAACE,IAAAA;AACxB,KAAA,CAAE;AACHC,IAAAA,EAAE,EAAEA,EAAG;AACP,IAAA,aAAA,EAAaE,UAAW;IAAAL,QAAA,EAAA,cAExBe,GAAA,CAACC,MAAM,EAAA;AACL,MAAA,eAAA,EAAeN,YAAY,GAAGb,UAAU,GAAGoB,SAAU;AACrD,MAAA,eAAA,EAAepB,UAAU,GAAGY,SAAS,GAAGQ,SAAU;AAClDd,MAAAA,EAAE,EAAEI,OAAQ;AACZ,MAAA,YAAA,EAAYb,SAAU;AACtBC,MAAAA,EAAE,EAAEe,YAAY,GAAG,QAAQ,GAAG,KAAM;AACpCN,MAAAA,SAAS,EAAC,iBAAiB;AAC3Bc,MAAAA,KAAK,EAAEhB,IAAK;AACZJ,MAAAA,KAAK,EAAEA,KAAM;AACbqB,MAAAA,OAAO,EAAEpB,OAAQ;MACjBqB,mBAAmB,EAAA,IAAA;AACnBC,MAAAA,MAAM,EACJX,YAAY,gBAAGK,GAAA,CAACO,OAAO,EAAA;QAACC,WAAW,EAAE1B,UAAU,GAAG2B,QAAQ,CAACC,GAAG,GAAGD,QAAQ,CAACE,MAAAA;OAAO,CAAG,GAAG,IACxF;MACDzB,OAAO,EAAES,YAAY,GAAG,MAAMT,OAAO,GAAG,CAACJ,UAAU,CAAC,GAAGoB,SAAAA;AAAU,KAGnE,CAAA,EAACP,YAAY,iBACXK,GAAA,CAAA,KAAA,EAAA;AACEX,MAAAA,SAAS,EAAEU,IAAI,CAAC,kBAAkB,EAAE;AAClC,QAAA,4BAA4B,EAAEjB,UAAAA;OAC/B,CAAA;KACD,CACH,EAEAa,YAAY,IAAIb,UAAU,iBACzBkB,GAAA,CAACY,IAAI,EAAA;AACHhC,MAAAA,EAAE,EAAC,KAAK;MACRiC,IAAI,EAAEC,UAAU,CAACC,UAAW;MAC5B1B,SAAS,EAAEU,IAAI,CAAC,kBAAkB,EAAEjB,UAAU,GAAG,SAAS,GAAG,MAAM,CAAE;AACrEM,MAAAA,EAAE,EAAEM,SAAU;AACd,MAAA,iBAAA,EAAiBF,OAAQ;AAAAP,MAAAA,QAAA,EAExBA,QAAAA;AAAQ,KACL,CACP,CAAA;AAAA,GACM,CAAC,CAAA;AAEd,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.js","sources":["../../../src/common/Option/Option.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { MouseEvent, forwardRef, HTMLAttributes, ReactNode, ElementType } from 'react';\n\nimport Body from '../../body';\nimport { LinkProps } from '../commonProps';\n\nexport interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {\n 'aria-label'?: string;\n media?: ReactNode;\n name?: string;\n htmlFor?: string;\n title: ReactNode;\n content?: ReactNode;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n as?: ElementType;\n disabled?: boolean;\n button?: ReactNode;\n decision?: boolean;\n complex?: boolean;\n inverseMediaCircle?: boolean;\n className?: string;\n showMediaAtAllSizes?: boolean;\n showMediaCircle?: boolean;\n isContainerAligned?: boolean;\n}\n\ninterface AnchorOptionProps extends BaseOptionProps, LinkProps {\n as: 'a';\n}\n\nexport type OptionProps = BaseOptionProps | AnchorOptionProps;\n\nexport type ReferenceType = HTMLElement | HTMLAnchorElement;\n\nconst Option = forwardRef<ReferenceType, OptionProps>(\n (\n {\n media = '',\n title,\n content,\n as: component,\n button,\n decision = true,\n disabled = false,\n complex,\n inverseMediaCircle = true,\n className,\n showMediaAtAllSizes,\n showMediaCircle = true,\n isContainerAligned = false,\n ...rest\n },\n reference,\n ) => {\n const Element = component ?? 'label';\n\n return (\n <Element\n {...rest}\n ref={reference}\n className={clsx('np-option', className, {\n 'decision-complex': complex,\n decision,\n disabled,\n 'np-option__sm-media': showMediaAtAllSizes,\n 'np-option__container-aligned': isContainerAligned,\n })}\n disabled={disabled && Element === 'button'}\n >\n <div className=\"media\">\n {media && (\n <div className=\"media-left\">\n {showMediaCircle ? (\n <div\n className={clsx('circle circle-sm text-primary', {\n 'circle-inverse': inverseMediaCircle,\n })}\n >\n {media}\n </div>\n ) : (\n <div className=\"np-option__no-media-circle\">{media}</div>\n )}\n </div>\n )}\n <div className=\"media-body\">\n <h4 className=\"np-text-body-large-bold text-primary np-option__title\">{title}</h4>\n {content && <Body className=\"d-block np-option__body\">{content}</Body>}\n </div>\n <div className=\"media-right\">{button}</div>\n </div>\n </Element>\n );\n },\n);\n\nexport default Option;\n"],"names":["Option","forwardRef","media","title","content","as","component","button","decision","disabled","complex","inverseMediaCircle","className","showMediaAtAllSizes","showMediaCircle","isContainerAligned","rest","reference","Element","_jsx","ref","clsx","children","_jsxs","Body"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"Option.js","sources":["../../../src/common/Option/Option.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { MouseEvent, forwardRef, HTMLAttributes, ReactNode, ElementType } from 'react';\n\nimport Body from '../../body';\nimport { LinkProps } from '../commonProps';\n\nexport interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n media?: ReactNode;\n name?: string;\n htmlFor?: string;\n title: ReactNode;\n content?: ReactNode;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n as?: ElementType;\n disabled?: boolean;\n button?: ReactNode;\n decision?: boolean;\n complex?: boolean;\n inverseMediaCircle?: boolean;\n className?: string;\n showMediaAtAllSizes?: boolean;\n showMediaCircle?: boolean;\n isContainerAligned?: boolean;\n}\n\ninterface AnchorOptionProps extends BaseOptionProps, LinkProps {\n as: 'a';\n}\n\nexport type OptionProps = BaseOptionProps | AnchorOptionProps;\n\nexport type ReferenceType = HTMLElement | HTMLAnchorElement;\n\nconst Option = forwardRef<ReferenceType, OptionProps>(\n (\n {\n media = '',\n title,\n content,\n as: component,\n button,\n decision = true,\n disabled = false,\n complex,\n inverseMediaCircle = true,\n className,\n showMediaAtAllSizes,\n showMediaCircle = true,\n isContainerAligned = false,\n ...rest\n },\n reference,\n ) => {\n const Element = component ?? 'label';\n\n return (\n <Element\n {...rest}\n ref={reference}\n className={clsx('np-option', className, {\n 'decision-complex': complex,\n decision,\n disabled,\n 'np-option__sm-media': showMediaAtAllSizes,\n 'np-option__container-aligned': isContainerAligned,\n })}\n disabled={disabled && Element === 'button'}\n >\n <div className=\"media\">\n {media && (\n <div className=\"media-left\">\n {showMediaCircle ? (\n <div\n className={clsx('circle circle-sm text-primary', {\n 'circle-inverse': inverseMediaCircle,\n })}\n >\n {media}\n </div>\n ) : (\n <div className=\"np-option__no-media-circle\">{media}</div>\n )}\n </div>\n )}\n <div className=\"media-body\">\n <h4 className=\"np-text-body-large-bold text-primary np-option__title\">{title}</h4>\n {content && <Body className=\"d-block np-option__body\">{content}</Body>}\n </div>\n <div className=\"media-right\">{button}</div>\n </div>\n </Element>\n );\n },\n);\n\nexport default Option;\n"],"names":["Option","forwardRef","media","title","content","as","component","button","decision","disabled","complex","inverseMediaCircle","className","showMediaAtAllSizes","showMediaCircle","isContainerAligned","rest","reference","Element","_jsx","ref","clsx","children","_jsxs","Body"],"mappings":";;;;;;;AAoCA,MAAMA,MAAM,gBAAGC,gBAAU,CACvB,CACE;AACEC,EAAAA,KAAK,GAAG,EAAE;EACVC,KAAK;EACLC,OAAO;AACPC,EAAAA,EAAE,EAAEC,SAAS;EACbC,MAAM;AACNC,EAAAA,QAAQ,GAAG,IAAI;AACfC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,OAAO;AACPC,EAAAA,kBAAkB,GAAG,IAAI;EACzBC,SAAS;EACTC,mBAAmB;AACnBC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,kBAAkB,GAAG,KAAK;EAC1B,GAAGC,IAAAA;AACJ,CAAA,EACDC,SAAS,KACP;AACF,EAAA,MAAMC,OAAO,GAAGZ,SAAS,IAAI,OAAO,CAAA;EAEpC,oBACEa,cAAA,CAACD,OAAO,EAAA;AAAA,IAAA,GACFF,IAAI;AACRI,IAAAA,GAAG,EAAEH,SAAU;AACfL,IAAAA,SAAS,EAAES,SAAI,CAAC,WAAW,EAAET,SAAS,EAAE;AACtC,MAAA,kBAAkB,EAAEF,OAAO;MAC3BF,QAAQ;MACRC,QAAQ;AACR,MAAA,qBAAqB,EAAEI,mBAAmB;AAC1C,MAAA,8BAA8B,EAAEE,kBAAAA;KACjC,CAAE;AACHN,IAAAA,QAAQ,EAAEA,QAAQ,IAAIS,OAAO,KAAK,QAAS;AAAAI,IAAAA,QAAA,eAE3CC,eAAA,CAAA,KAAA,EAAA;AAAKX,MAAAA,SAAS,EAAC,OAAO;MAAAU,QAAA,EAAA,CACnBpB,KAAK,iBACJiB,cAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,YAAY;QAAAU,QAAA,EACxBR,eAAe,gBACdK,cAAA,CAAA,KAAA,EAAA;AACEP,UAAAA,SAAS,EAAES,SAAI,CAAC,+BAA+B,EAAE;AAC/C,YAAA,gBAAgB,EAAEV,kBAAAA;AACnB,WAAA,CAAE;AAAAW,UAAAA,QAAA,EAEFpB,KAAAA;SACE,CAAC,gBAENiB,cAAA,CAAA,KAAA,EAAA;AAAKP,UAAAA,SAAS,EAAC,4BAA4B;AAAAU,UAAAA,QAAA,EAAEpB,KAAAA;SAAW,CAAA;OAEvD,CACN,eACDqB,eAAA,CAAA,KAAA,EAAA;AAAKX,QAAAA,SAAS,EAAC,YAAY;AAAAU,QAAAA,QAAA,gBACzBH,cAAA,CAAA,IAAA,EAAA;AAAIP,UAAAA,SAAS,EAAC,uDAAuD;AAAAU,UAAAA,QAAA,EAAEnB,KAAAA;AAAK,SAAK,CACjF,EAACC,OAAO,iBAAIe,cAAA,CAACK,IAAI,EAAA;AAACZ,UAAAA,SAAS,EAAC,yBAAyB;AAAAU,UAAAA,QAAA,EAAElB,OAAAA;AAAO,SAAO,CAAC,CAAA;OACnE,CACL,eAAAe,cAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,aAAa;AAAAU,QAAAA,QAAA,EAAEf,MAAAA;AAAM,OAAM,CAC5C,CAAA;KAAK,CAAA;AACP,GAAS,CAAC,CAAA;AAEd,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.mjs","sources":["../../../src/common/Option/Option.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { MouseEvent, forwardRef, HTMLAttributes, ReactNode, ElementType } from 'react';\n\nimport Body from '../../body';\nimport { LinkProps } from '../commonProps';\n\nexport interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {\n 'aria-label'?: string;\n media?: ReactNode;\n name?: string;\n htmlFor?: string;\n title: ReactNode;\n content?: ReactNode;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n as?: ElementType;\n disabled?: boolean;\n button?: ReactNode;\n decision?: boolean;\n complex?: boolean;\n inverseMediaCircle?: boolean;\n className?: string;\n showMediaAtAllSizes?: boolean;\n showMediaCircle?: boolean;\n isContainerAligned?: boolean;\n}\n\ninterface AnchorOptionProps extends BaseOptionProps, LinkProps {\n as: 'a';\n}\n\nexport type OptionProps = BaseOptionProps | AnchorOptionProps;\n\nexport type ReferenceType = HTMLElement | HTMLAnchorElement;\n\nconst Option = forwardRef<ReferenceType, OptionProps>(\n (\n {\n media = '',\n title,\n content,\n as: component,\n button,\n decision = true,\n disabled = false,\n complex,\n inverseMediaCircle = true,\n className,\n showMediaAtAllSizes,\n showMediaCircle = true,\n isContainerAligned = false,\n ...rest\n },\n reference,\n ) => {\n const Element = component ?? 'label';\n\n return (\n <Element\n {...rest}\n ref={reference}\n className={clsx('np-option', className, {\n 'decision-complex': complex,\n decision,\n disabled,\n 'np-option__sm-media': showMediaAtAllSizes,\n 'np-option__container-aligned': isContainerAligned,\n })}\n disabled={disabled && Element === 'button'}\n >\n <div className=\"media\">\n {media && (\n <div className=\"media-left\">\n {showMediaCircle ? (\n <div\n className={clsx('circle circle-sm text-primary', {\n 'circle-inverse': inverseMediaCircle,\n })}\n >\n {media}\n </div>\n ) : (\n <div className=\"np-option__no-media-circle\">{media}</div>\n )}\n </div>\n )}\n <div className=\"media-body\">\n <h4 className=\"np-text-body-large-bold text-primary np-option__title\">{title}</h4>\n {content && <Body className=\"d-block np-option__body\">{content}</Body>}\n </div>\n <div className=\"media-right\">{button}</div>\n </div>\n </Element>\n );\n },\n);\n\nexport default Option;\n"],"names":["Option","forwardRef","media","title","content","as","component","button","decision","disabled","complex","inverseMediaCircle","className","showMediaAtAllSizes","showMediaCircle","isContainerAligned","rest","reference","Element","_jsx","ref","clsx","children","_jsxs","Body"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Option.mjs","sources":["../../../src/common/Option/Option.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { MouseEvent, forwardRef, HTMLAttributes, ReactNode, ElementType } from 'react';\n\nimport Body from '../../body';\nimport { LinkProps } from '../commonProps';\n\nexport interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n media?: ReactNode;\n name?: string;\n htmlFor?: string;\n title: ReactNode;\n content?: ReactNode;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n as?: ElementType;\n disabled?: boolean;\n button?: ReactNode;\n decision?: boolean;\n complex?: boolean;\n inverseMediaCircle?: boolean;\n className?: string;\n showMediaAtAllSizes?: boolean;\n showMediaCircle?: boolean;\n isContainerAligned?: boolean;\n}\n\ninterface AnchorOptionProps extends BaseOptionProps, LinkProps {\n as: 'a';\n}\n\nexport type OptionProps = BaseOptionProps | AnchorOptionProps;\n\nexport type ReferenceType = HTMLElement | HTMLAnchorElement;\n\nconst Option = forwardRef<ReferenceType, OptionProps>(\n (\n {\n media = '',\n title,\n content,\n as: component,\n button,\n decision = true,\n disabled = false,\n complex,\n inverseMediaCircle = true,\n className,\n showMediaAtAllSizes,\n showMediaCircle = true,\n isContainerAligned = false,\n ...rest\n },\n reference,\n ) => {\n const Element = component ?? 'label';\n\n return (\n <Element\n {...rest}\n ref={reference}\n className={clsx('np-option', className, {\n 'decision-complex': complex,\n decision,\n disabled,\n 'np-option__sm-media': showMediaAtAllSizes,\n 'np-option__container-aligned': isContainerAligned,\n })}\n disabled={disabled && Element === 'button'}\n >\n <div className=\"media\">\n {media && (\n <div className=\"media-left\">\n {showMediaCircle ? (\n <div\n className={clsx('circle circle-sm text-primary', {\n 'circle-inverse': inverseMediaCircle,\n })}\n >\n {media}\n </div>\n ) : (\n <div className=\"np-option__no-media-circle\">{media}</div>\n )}\n </div>\n )}\n <div className=\"media-body\">\n <h4 className=\"np-text-body-large-bold text-primary np-option__title\">{title}</h4>\n {content && <Body className=\"d-block np-option__body\">{content}</Body>}\n </div>\n <div className=\"media-right\">{button}</div>\n </div>\n </Element>\n );\n },\n);\n\nexport default Option;\n"],"names":["Option","forwardRef","media","title","content","as","component","button","decision","disabled","complex","inverseMediaCircle","className","showMediaAtAllSizes","showMediaCircle","isContainerAligned","rest","reference","Element","_jsx","ref","clsx","children","_jsxs","Body"],"mappings":";;;;;AAoCA,MAAMA,MAAM,gBAAGC,UAAU,CACvB,CACE;AACEC,EAAAA,KAAK,GAAG,EAAE;EACVC,KAAK;EACLC,OAAO;AACPC,EAAAA,EAAE,EAAEC,SAAS;EACbC,MAAM;AACNC,EAAAA,QAAQ,GAAG,IAAI;AACfC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,OAAO;AACPC,EAAAA,kBAAkB,GAAG,IAAI;EACzBC,SAAS;EACTC,mBAAmB;AACnBC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,kBAAkB,GAAG,KAAK;EAC1B,GAAGC,IAAAA;AACJ,CAAA,EACDC,SAAS,KACP;AACF,EAAA,MAAMC,OAAO,GAAGZ,SAAS,IAAI,OAAO,CAAA;EAEpC,oBACEa,GAAA,CAACD,OAAO,EAAA;AAAA,IAAA,GACFF,IAAI;AACRI,IAAAA,GAAG,EAAEH,SAAU;AACfL,IAAAA,SAAS,EAAES,IAAI,CAAC,WAAW,EAAET,SAAS,EAAE;AACtC,MAAA,kBAAkB,EAAEF,OAAO;MAC3BF,QAAQ;MACRC,QAAQ;AACR,MAAA,qBAAqB,EAAEI,mBAAmB;AAC1C,MAAA,8BAA8B,EAAEE,kBAAAA;KACjC,CAAE;AACHN,IAAAA,QAAQ,EAAEA,QAAQ,IAAIS,OAAO,KAAK,QAAS;AAAAI,IAAAA,QAAA,eAE3CC,IAAA,CAAA,KAAA,EAAA;AAAKX,MAAAA,SAAS,EAAC,OAAO;MAAAU,QAAA,EAAA,CACnBpB,KAAK,iBACJiB,GAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,YAAY;QAAAU,QAAA,EACxBR,eAAe,gBACdK,GAAA,CAAA,KAAA,EAAA;AACEP,UAAAA,SAAS,EAAES,IAAI,CAAC,+BAA+B,EAAE;AAC/C,YAAA,gBAAgB,EAAEV,kBAAAA;AACnB,WAAA,CAAE;AAAAW,UAAAA,QAAA,EAEFpB,KAAAA;SACE,CAAC,gBAENiB,GAAA,CAAA,KAAA,EAAA;AAAKP,UAAAA,SAAS,EAAC,4BAA4B;AAAAU,UAAAA,QAAA,EAAEpB,KAAAA;SAAW,CAAA;OAEvD,CACN,eACDqB,IAAA,CAAA,KAAA,EAAA;AAAKX,QAAAA,SAAS,EAAC,YAAY;AAAAU,QAAAA,QAAA,gBACzBH,GAAA,CAAA,IAAA,EAAA;AAAIP,UAAAA,SAAS,EAAC,uDAAuD;AAAAU,UAAAA,QAAA,EAAEnB,KAAAA;AAAK,SAAK,CACjF,EAACC,OAAO,iBAAIe,GAAA,CAACK,IAAI,EAAA;AAACZ,UAAAA,SAAS,EAAC,yBAAyB;AAAAU,UAAAA,QAAA,EAAElB,OAAAA;AAAO,SAAO,CAAC,CAAA;OACnE,CACL,eAAAe,GAAA,CAAA,KAAA,EAAA;AAAKP,QAAAA,SAAS,EAAC,aAAa;AAAAU,QAAAA,QAAA,EAAEf,MAAAA;AAAM,OAAM,CAC5C,CAAA;KAAK,CAAA;AACP,GAAS,CAAC,CAAA;AAEd,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/card/Card.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED;;;GAGG;AACH,QAAA,MAAM,IAAI,+
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/card/Card.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED;;;GAGG;AACH,QAAA,MAAM,IAAI,+FAsER,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { MouseEvent, HTMLAttributes, ReactNode, ElementType } from 'react';
|
|
|
2
2
|
import { LinkProps } from '../commonProps';
|
|
3
3
|
export interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {
|
|
4
4
|
'aria-label'?: string;
|
|
5
|
+
'aria-expanded'?: boolean;
|
|
6
|
+
'aria-controls'?: string;
|
|
5
7
|
media?: ReactNode;
|
|
6
8
|
name?: string;
|
|
7
9
|
htmlFor?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../../src/common/Option/Option.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAc,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACnD,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,iBAAkB,SAAQ,eAAe,EAAE,SAAS;IAC5D,EAAE,EAAE,GAAG,CAAC;CACT;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE5D,QAAA,MAAM,MAAM,uGA4DX,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../../src/common/Option/Option.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAc,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACnD,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,iBAAkB,SAAQ,eAAe,EAAE,SAAS;IAC5D,EAAE,EAAE,GAAG,CAAC;CACT;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE5D,QAAA,MAAM,MAAM,uGA4DX,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transferwise/components",
|
|
3
|
-
"version": "46.52.
|
|
3
|
+
"version": "46.52.3",
|
|
4
4
|
"description": "Neptune React components",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -92,9 +92,9 @@
|
|
|
92
92
|
"rollup": "^4.18.1",
|
|
93
93
|
"rollup-preserve-directives": "^1.1.1",
|
|
94
94
|
"storybook": "^8.2.2",
|
|
95
|
+
"@transferwise/neptune-css": "14.12.1",
|
|
95
96
|
"@transferwise/less-config": "3.1.0",
|
|
96
|
-
"@wise/components-theming": "1.5.0"
|
|
97
|
-
"@transferwise/neptune-css": "14.12.1"
|
|
97
|
+
"@wise/components-theming": "1.5.0"
|
|
98
98
|
},
|
|
99
99
|
"peerDependencies": {
|
|
100
100
|
"@transferwise/icons": "^3.7.0",
|
package/src/card/Card.spec.tsx
CHANGED
|
@@ -104,17 +104,49 @@ describe('Card', () => {
|
|
|
104
104
|
expect(screen.getByTestId('chevron-up-icon')).toHaveClass(Position.BOTTOM);
|
|
105
105
|
});
|
|
106
106
|
|
|
107
|
+
|
|
108
|
+
describe('when collapsed', () => {
|
|
109
|
+
const CONTENT = 'mock children';
|
|
110
|
+
|
|
111
|
+
it('should not render children', async () => {
|
|
112
|
+
renderCard({ children: CONTENT });
|
|
113
|
+
expect(screen.queryByText(CONTENT)).not.toBeInTheDocument();
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('should render appropriate aria attributes', async () => {
|
|
117
|
+
renderCard({ children: CONTENT });
|
|
118
|
+
const button = screen.getByRole('button');
|
|
119
|
+
expect(button).toHaveAttribute('aria-expanded', 'false')
|
|
120
|
+
expect(button).not.toHaveAttribute('aria-controls')
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
107
124
|
describe('when expanded', () => {
|
|
125
|
+
const defaultProps = {
|
|
126
|
+
children: 'mock children',
|
|
127
|
+
isExpanded: true,
|
|
128
|
+
};
|
|
129
|
+
|
|
108
130
|
it('flips chevron', () => {
|
|
109
|
-
renderCard(
|
|
131
|
+
renderCard(defaultProps);
|
|
110
132
|
|
|
111
133
|
expect(screen.getByTestId('chevron-up-icon')).toHaveClass(Position.TOP);
|
|
112
134
|
});
|
|
113
135
|
|
|
114
136
|
it('renders children', () => {
|
|
115
|
-
renderCard(
|
|
137
|
+
renderCard(defaultProps);
|
|
138
|
+
|
|
139
|
+
expect(screen.getByText(defaultProps.children)).toBeInTheDocument();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('should render appropriate aria attributes', async () => {
|
|
143
|
+
const {container} = renderCard(defaultProps);
|
|
144
|
+
const button = screen.getByRole('button');
|
|
145
|
+
const controlledId = button.getAttribute('aria-controls');
|
|
146
|
+
expect(button).toHaveAttribute('aria-expanded', 'true')
|
|
116
147
|
|
|
117
|
-
|
|
148
|
+
const contentId = screen.getByText(defaultProps.children).getAttribute('id');
|
|
149
|
+
expect(contentId).toBe(controlledId);
|
|
118
150
|
});
|
|
119
151
|
});
|
|
120
152
|
});
|
package/src/card/Card.story.tsx
CHANGED
|
@@ -1,54 +1,70 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { FastFlag as FastFlagIcon } from '@transferwise/icons';
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
+
import { fn } from '@storybook/test';
|
|
4
5
|
|
|
5
6
|
import Card from '.';
|
|
6
|
-
|
|
7
|
+
|
|
8
|
+
type Story = StoryObj<typeof Card>;
|
|
7
9
|
|
|
8
10
|
export default {
|
|
9
11
|
component: Card,
|
|
10
12
|
title: 'Layouts/Card',
|
|
11
|
-
|
|
13
|
+
args: {
|
|
14
|
+
title: 'A card',
|
|
15
|
+
details: 'Some details about this card',
|
|
16
|
+
children: 'Lorem ipsum dolor sit amet.',
|
|
17
|
+
onClick: fn(),
|
|
18
|
+
as: 'div',
|
|
19
|
+
},
|
|
20
|
+
tags: ['autodocs'],
|
|
21
|
+
} satisfies Meta<typeof Card>;
|
|
12
22
|
|
|
13
|
-
const Template = (props: Pick<CardProps, 'isExpanded' | 'icon' | 'onClick'>) => {
|
|
14
|
-
const elementType = select('elementType', ['div', 'li'], 'div');
|
|
15
|
-
const title = text('title', 'A card');
|
|
16
|
-
const details = text('details', 'Some details about this card');
|
|
17
|
-
const content = text('content', 'Lorem ipsum dolor sit amet.');
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<Card as={elementType} title={title} details={details} {...props}>
|
|
21
|
-
{content}
|
|
22
|
-
</Card>
|
|
23
|
-
);
|
|
24
|
-
};
|
|
25
23
|
|
|
26
|
-
export const Basic =
|
|
27
|
-
|
|
24
|
+
export const Basic: Story = {
|
|
25
|
+
render: function Render(args) {
|
|
26
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
27
|
+
|
|
28
|
+
const handleClick = (isCurrentExpanded: boolean) => {
|
|
29
|
+
setIsExpanded(isCurrentExpanded)
|
|
30
|
+
args?.onClick?.(!isExpanded);
|
|
31
|
+
}
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
return <Card {...args} isExpanded={isExpanded} onClick={handleClick} />;
|
|
34
|
+
}
|
|
30
35
|
};
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
37
|
+
|
|
38
|
+
export const Multiple: Story = {
|
|
39
|
+
render: function Render(args) {
|
|
40
|
+
const [expandedCardIndex, setExpandedCardIndex] = useState<number | null>(0);
|
|
41
|
+
|
|
42
|
+
const handleOnCardClick = (index: number) => {
|
|
43
|
+
args?.onClick?.(index !== expandedCardIndex);
|
|
44
|
+
setExpandedCardIndex(index !== expandedCardIndex ? index : null);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<>
|
|
49
|
+
<Card
|
|
50
|
+
{...args}
|
|
51
|
+
icon={<FastFlagIcon />}
|
|
52
|
+
isExpanded={expandedCardIndex === 0}
|
|
53
|
+
onClick={() => handleOnCardClick(0)}
|
|
54
|
+
/>
|
|
55
|
+
<Card
|
|
56
|
+
{...args}
|
|
57
|
+
icon={<FastFlagIcon />}
|
|
58
|
+
isExpanded={expandedCardIndex === 1}
|
|
59
|
+
onClick={() => handleOnCardClick(1)}
|
|
60
|
+
/>
|
|
61
|
+
<Card
|
|
62
|
+
{...args}
|
|
63
|
+
icon={<FastFlagIcon />}
|
|
64
|
+
isExpanded={expandedCardIndex === 2}
|
|
65
|
+
onClick={() => handleOnCardClick(2)}
|
|
66
|
+
/>
|
|
67
|
+
</>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
54
70
|
};
|
package/src/card/Card.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clsx } from 'clsx';
|
|
2
|
-
import { forwardRef } from 'react';
|
|
2
|
+
import { forwardRef, useId } from 'react';
|
|
3
3
|
|
|
4
4
|
import Body from '../body';
|
|
5
5
|
import Chevron from '../chevron';
|
|
@@ -40,13 +40,16 @@ const Card = forwardRef(function Card(
|
|
|
40
40
|
}: CardProps,
|
|
41
41
|
reference,
|
|
42
42
|
) {
|
|
43
|
-
const
|
|
43
|
+
const labelId = useId();
|
|
44
|
+
const contentId = useId();
|
|
45
|
+
const isExpandable = Boolean(children);
|
|
46
|
+
|
|
44
47
|
|
|
45
48
|
return (
|
|
46
49
|
<Element
|
|
47
50
|
ref={reference}
|
|
48
51
|
className={clsx('np-card', className, {
|
|
49
|
-
'np-card--expanded':
|
|
52
|
+
'np-card--expanded': isExpandable && isExpanded,
|
|
50
53
|
'np-card--inactive': !children,
|
|
51
54
|
'np-card--has-icon': !!icon,
|
|
52
55
|
})}
|
|
@@ -54,23 +57,38 @@ const Card = forwardRef(function Card(
|
|
|
54
57
|
data-testid={dataTestId}
|
|
55
58
|
>
|
|
56
59
|
<Option
|
|
60
|
+
aria-expanded={isExpandable ? isExpanded : undefined}
|
|
61
|
+
aria-controls={isExpanded ? contentId : undefined}
|
|
62
|
+
id={labelId}
|
|
57
63
|
aria-label={ariaLabel}
|
|
58
|
-
as={
|
|
59
|
-
className=
|
|
64
|
+
as={isExpandable ? 'button' : 'div'}
|
|
65
|
+
className="np-card__button"
|
|
60
66
|
media={icon}
|
|
61
67
|
title={title}
|
|
62
68
|
content={details}
|
|
63
69
|
showMediaAtAllSizes
|
|
64
|
-
button={
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
className={clsx('np-card__divider', {
|
|
69
|
-
'np-card__divider--expanded': isOpen,
|
|
70
|
-
})}
|
|
70
|
+
button={
|
|
71
|
+
isExpandable ? <Chevron orientation={isExpanded ? Position.TOP : Position.BOTTOM} /> : null
|
|
72
|
+
}
|
|
73
|
+
onClick={isExpandable ? () => onClick?.(!isExpanded) : undefined}
|
|
71
74
|
/>
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
|
|
76
|
+
{isExpandable && (
|
|
77
|
+
<div
|
|
78
|
+
className={clsx('np-card__divider', {
|
|
79
|
+
'np-card__divider--expanded': isExpanded,
|
|
80
|
+
})}
|
|
81
|
+
/>
|
|
82
|
+
)}
|
|
83
|
+
|
|
84
|
+
{isExpandable && isExpanded && (
|
|
85
|
+
<Body
|
|
86
|
+
as="div"
|
|
87
|
+
type={Typography.BODY_LARGE}
|
|
88
|
+
className={clsx('np-card__content', isExpanded ? 'd-block' : 'hide')}
|
|
89
|
+
id={contentId}
|
|
90
|
+
aria-labelledby={labelId}
|
|
91
|
+
>
|
|
74
92
|
{children}
|
|
75
93
|
</Body>
|
|
76
94
|
)}
|
|
@@ -6,6 +6,8 @@ import { LinkProps } from '../commonProps';
|
|
|
6
6
|
|
|
7
7
|
export interface BaseOptionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'content'> {
|
|
8
8
|
'aria-label'?: string;
|
|
9
|
+
'aria-expanded'?: boolean;
|
|
10
|
+
'aria-controls'?: string;
|
|
9
11
|
media?: ReactNode;
|
|
10
12
|
name?: string;
|
|
11
13
|
htmlFor?: string;
|