jvetrau-ds 0.2.4 → 0.2.6

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.
@@ -233,14 +233,15 @@
233
233
  .button--toolbar {
234
234
  /* color */
235
235
  --button-bg: transparent;
236
- --button-color: var(--color-text);
237
- --button-focus-color: var(--color-text);
236
+ --button-color: inherit;
237
+ --button-focus-color: currentColor;
238
238
 
239
239
  background: transparent;
240
240
 
241
241
  /* typography */
242
242
 
243
243
  /* size */
244
+ min-height: 0;
244
245
  padding-inline: 0;
245
246
 
246
247
  /* border */
@@ -4,28 +4,49 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  require('./card.css');
5
5
  var classnames = require('../helpers/classnames');
6
6
 
7
+ function hasContent(value) {
8
+ return value !== null && value !== void 0;
9
+ }
7
10
  const Card = ({
8
- state = "default",
9
11
  heading,
12
+ headingLevel = 2,
10
13
  description,
11
14
  actions,
12
15
  className = "",
13
16
  children,
14
17
  ...props
15
18
  }) => {
16
- const classes = classnames.classnames("card", className, {});
19
+ const classes = classnames.classnames(
20
+ "card",
21
+ className,
22
+ {}
23
+ );
24
+ const HeadingTag = `h${headingLevel}`;
25
+ const hasHeading = hasContent(heading);
26
+ const hasDescription = hasContent(description);
27
+ const hasHeader = hasHeading || hasDescription;
17
28
  return /* @__PURE__ */ jsxRuntime.jsxs(
18
29
  "section",
19
30
  {
20
31
  className: classes,
21
32
  ...props,
22
33
  children: [
23
- (heading || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "card__header", children: [
24
- heading && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "card__heading", children: heading }),
25
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "card__description", children: description })
34
+ hasHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "card__header", children: [
35
+ hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
36
+ HeadingTag,
37
+ {
38
+ className: classnames.classnames(
39
+ "card__heading",
40
+ `card__heading--h${headingLevel}`,
41
+ {}
42
+ ),
43
+ children: heading
44
+ }
45
+ ),
46
+ hasDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "card__description", children: description })
26
47
  ] }),
27
- children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "card__content", children }),
28
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "card__actions", children: actions })
48
+ hasContent(children) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "card__content", children }),
49
+ hasContent(actions) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "card__actions", children: actions })
29
50
  ]
30
51
  }
31
52
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/card/card.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAYA,MAAM,OAA4B,CAAC;AAAA,EACjC,KAAA,GAAQ,SAAA;AAAA,EACR,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,MAAA,EAAQ,SAAA,EAAW,EAAE,CAAA;AAEhD,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEF,QAAA,EAAA;AAAA,QAAA,CAAA,OAAA,IAAW,WAAA,qBACXA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,oBACCC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAA,EACX,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,UAGD,WAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,QAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EACH,CAAA;AAAA,QAGD,OAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"card.cjs","sourcesContent":["import React from 'react';\nimport './card.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLElement> {\n state?: 'default';\n heading?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nconst Card: React.FC<CardProps> = ({\n state = 'default',\n heading,\n description,\n actions,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames('card', className, {});\n\n return (\n <section\n className={classes}\n {...props}\n >\n {(heading || description) && (\n <div className=\"card__header\">\n {heading && (\n <h2 className=\"card__heading\">\n {heading}\n </h2>\n )}\n\n {description && (\n <p className=\"card__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {children && (\n <div className=\"card__content\">\n {children}\n </div>\n )}\n\n {actions && (\n <div className=\"card__actions\">\n {actions}\n </div>\n )}\n </section>\n );\n};\n\nexport default Card;"]}
1
+ {"version":3,"sources":["../../../src/components/card/card.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAaA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,OAA4B,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,YACJ,UAAA,IACA,cAAA;AAEF,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCC,cAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWF,qBAAA;AAAA,gBACT,eAAA;AAAA,gBACA,mBAAmB,YAAY,CAAA,CAAA;AAAA,gBAC/B;AAAC,eACH;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,cAAA,oBACCE,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,WAAW,QAAQ,CAAA,mCACjB,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EACH,CAAA;AAAA,QAGD,WAAW,OAAO,CAAA,mCAChB,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"card.cjs","sourcesContent":["import React from 'react';\n\nimport './card.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLElement> {\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Card: React.FC<CardProps> = ({\n heading,\n headingLevel = 2,\n description,\n actions,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'card',\n className,\n {},\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasHeader =\n hasHeading ||\n hasDescription;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeader && (\n <div className=\"card__header\">\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'card__heading',\n `card__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasDescription && (\n <p className=\"card__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {hasContent(children) && (\n <div className=\"card__content\">\n {children}\n </div>\n )}\n\n {hasContent(actions) && (\n <div className=\"card__actions\">\n {actions}\n </div>\n )}\n </section>\n );\n};\n\nexport default Card;\n"]}
@@ -13,12 +13,11 @@
13
13
  --card-padding: var(--padding-container);
14
14
  --card-gap: var(--margin-container-item);
15
15
  --card-title-gap: var(--font-h2-margin);
16
- --card-content-min-height: 200px;
17
16
 
18
17
  display: flex;
19
18
  flex-direction: column;
20
19
  align-items: stretch;
21
- justify-content: center;
20
+ justify-content: flex-start;
22
21
  gap: var(--card-gap);
23
22
  width: var(--card-width);
24
23
  padding: var(--card-padding);
@@ -51,10 +50,25 @@
51
50
  /* motion */
52
51
  }
53
52
 
54
- .card__title {
53
+ .card__heading {
55
54
  /* color */
56
55
  color: inherit;
57
56
 
57
+ /* typography */
58
+
59
+ /* size */
60
+ margin: 0;
61
+
62
+ /* border */
63
+
64
+ /* depth */
65
+
66
+ /* motion */
67
+ }
68
+
69
+ .card__heading--h2 {
70
+ /* color */
71
+
58
72
  /* typography */
59
73
  font-family: var(--font-h2-family);
60
74
  font-size: var(--font-h2);
@@ -63,7 +77,25 @@
63
77
  letter-spacing: var(--font-h2-letter-spacing);
64
78
 
65
79
  /* size */
66
- margin: 0;
80
+
81
+ /* border */
82
+
83
+ /* depth */
84
+
85
+ /* motion */
86
+ }
87
+
88
+ .card__heading--h3 {
89
+ /* color */
90
+
91
+ /* typography */
92
+ font-family: var(--font-h3-family);
93
+ font-size: var(--font-h3);
94
+ font-weight: var(--font-h3-weight);
95
+ line-height: var(--font-h3-line);
96
+ letter-spacing: var(--font-h3-letter-spacing);
97
+
98
+ /* size */
67
99
 
68
100
  /* border */
69
101
 
@@ -99,7 +131,6 @@
99
131
  /* typography */
100
132
 
101
133
  /* size */
102
- min-height: var(--card-content-min-height);
103
134
  width: 100%;
104
135
 
105
136
  /* border */
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import './card.css';
3
3
  export interface CardProps extends React.HTMLAttributes<HTMLElement> {
4
- state?: 'default';
5
4
  heading?: React.ReactNode;
5
+ headingLevel?: 2 | 3;
6
6
  description?: React.ReactNode;
7
7
  actions?: React.ReactNode;
8
8
  }
@@ -2,28 +2,49 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import './card.css';
3
3
  import { classnames } from '../helpers/classnames';
4
4
 
5
+ function hasContent(value) {
6
+ return value !== null && value !== void 0;
7
+ }
5
8
  const Card = ({
6
- state = "default",
7
9
  heading,
10
+ headingLevel = 2,
8
11
  description,
9
12
  actions,
10
13
  className = "",
11
14
  children,
12
15
  ...props
13
16
  }) => {
14
- const classes = classnames("card", className, {});
17
+ const classes = classnames(
18
+ "card",
19
+ className,
20
+ {}
21
+ );
22
+ const HeadingTag = `h${headingLevel}`;
23
+ const hasHeading = hasContent(heading);
24
+ const hasDescription = hasContent(description);
25
+ const hasHeader = hasHeading || hasDescription;
15
26
  return /* @__PURE__ */ jsxs(
16
27
  "section",
17
28
  {
18
29
  className: classes,
19
30
  ...props,
20
31
  children: [
21
- (heading || description) && /* @__PURE__ */ jsxs("div", { className: "card__header", children: [
22
- heading && /* @__PURE__ */ jsx("h2", { className: "card__heading", children: heading }),
23
- description && /* @__PURE__ */ jsx("p", { className: "card__description", children: description })
32
+ hasHeader && /* @__PURE__ */ jsxs("div", { className: "card__header", children: [
33
+ hasHeading && /* @__PURE__ */ jsx(
34
+ HeadingTag,
35
+ {
36
+ className: classnames(
37
+ "card__heading",
38
+ `card__heading--h${headingLevel}`,
39
+ {}
40
+ ),
41
+ children: heading
42
+ }
43
+ ),
44
+ hasDescription && /* @__PURE__ */ jsx("p", { className: "card__description", children: description })
24
45
  ] }),
25
- children && /* @__PURE__ */ jsx("div", { className: "card__content", children }),
26
- actions && /* @__PURE__ */ jsx("div", { className: "card__actions", children: actions })
46
+ hasContent(children) && /* @__PURE__ */ jsx("div", { className: "card__content", children }),
47
+ hasContent(actions) && /* @__PURE__ */ jsx("div", { className: "card__actions", children: actions })
27
48
  ]
28
49
  }
29
50
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/card/card.tsx"],"names":[],"mappings":";;;;AAYA,MAAM,OAA4B,CAAC;AAAA,EACjC,KAAA,GAAQ,SAAA;AAAA,EACR,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,EAAQ,SAAA,EAAW,EAAE,CAAA;AAEhD,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEF,QAAA,EAAA;AAAA,QAAA,CAAA,OAAA,IAAW,WAAA,qBACX,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,eAAA,EACX,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,UAGD,WAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,QAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EACH,CAAA;AAAA,QAGD,OAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"card.js","sourcesContent":["import React from 'react';\nimport './card.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLElement> {\n state?: 'default';\n heading?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nconst Card: React.FC<CardProps> = ({\n state = 'default',\n heading,\n description,\n actions,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames('card', className, {});\n\n return (\n <section\n className={classes}\n {...props}\n >\n {(heading || description) && (\n <div className=\"card__header\">\n {heading && (\n <h2 className=\"card__heading\">\n {heading}\n </h2>\n )}\n\n {description && (\n <p className=\"card__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {children && (\n <div className=\"card__content\">\n {children}\n </div>\n )}\n\n {actions && (\n <div className=\"card__actions\">\n {actions}\n </div>\n )}\n </section>\n );\n};\n\nexport default Card;"]}
1
+ {"version":3,"sources":["../../../src/components/card/card.tsx"],"names":[],"mappings":";;;;AAaA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,OAA4B,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,YACJ,UAAA,IACA,cAAA;AAEF,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACC,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,UAAA;AAAA,gBACT,eAAA;AAAA,gBACA,mBAAmB,YAAY,CAAA,CAAA;AAAA,gBAC/B;AAAC,eACH;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,cAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,WAAW,QAAQ,CAAA,wBACjB,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EACH,CAAA;AAAA,QAGD,WAAW,OAAO,CAAA,wBAChB,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"card.js","sourcesContent":["import React from 'react';\n\nimport './card.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLElement> {\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Card: React.FC<CardProps> = ({\n heading,\n headingLevel = 2,\n description,\n actions,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'card',\n className,\n {},\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasHeader =\n hasHeading ||\n hasDescription;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeader && (\n <div className=\"card__header\">\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'card__heading',\n `card__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasDescription && (\n <p className=\"card__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {hasContent(children) && (\n <div className=\"card__content\">\n {children}\n </div>\n )}\n\n {hasContent(actions) && (\n <div className=\"card__actions\">\n {actions}\n </div>\n )}\n </section>\n );\n};\n\nexport default Card;\n"]}
@@ -8,6 +8,7 @@
8
8
  --card-group-min-column-width: var(--size-container-width-min);
9
9
 
10
10
  display: grid;
11
+ align-items: stretch;
11
12
  gap: var(--card-group-gap);
12
13
  width: 100%;
13
14
 
@@ -19,6 +20,10 @@
19
20
  }
20
21
 
21
22
  .card-group--auto {
23
+ /* color */
24
+
25
+ /* typography */
26
+
22
27
  /* size */
23
28
  grid-template-columns:
24
29
  repeat(
@@ -28,33 +33,105 @@
28
33
  1fr
29
34
  )
30
35
  );
36
+
37
+ /* border */
38
+
39
+ /* depth */
40
+
41
+ /* motion */
31
42
  }
32
43
 
33
44
  .card-group--columns-1 {
45
+ /* color */
46
+
47
+ /* typography */
48
+
34
49
  /* size */
35
- grid-template-columns: repeat(1, minmax(0, 1fr));
50
+ grid-template-columns:
51
+ repeat(
52
+ 1,
53
+ minmax(0, 1fr)
54
+ );
55
+
56
+ /* border */
57
+
58
+ /* depth */
59
+
60
+ /* motion */
36
61
  }
37
62
 
38
63
  .card-group--columns-2 {
64
+ /* color */
65
+
66
+ /* typography */
67
+
39
68
  /* size */
40
- grid-template-columns: repeat(2, minmax(0, 1fr));
69
+ grid-template-columns:
70
+ repeat(
71
+ 2,
72
+ minmax(0, 1fr)
73
+ );
74
+
75
+ /* border */
76
+
77
+ /* depth */
78
+
79
+ /* motion */
41
80
  }
42
81
 
43
82
  .card-group--columns-3 {
83
+ /* color */
84
+
85
+ /* typography */
86
+
44
87
  /* size */
45
- grid-template-columns: repeat(3, minmax(0, 1fr));
88
+ grid-template-columns:
89
+ repeat(
90
+ 3,
91
+ minmax(0, 1fr)
92
+ );
93
+
94
+ /* border */
95
+
96
+ /* depth */
97
+
98
+ /* motion */
46
99
  }
47
100
 
48
101
  .card-group--columns-4 {
102
+ /* color */
103
+
104
+ /* typography */
105
+
49
106
  /* size */
50
- grid-template-columns: repeat(4, minmax(0, 1fr));
107
+ grid-template-columns:
108
+ repeat(
109
+ 4,
110
+ minmax(0, 1fr)
111
+ );
112
+
113
+ /* border */
114
+
115
+ /* depth */
116
+
117
+ /* motion */
51
118
  }
52
119
 
53
120
  @media (max-width: 720px) {
54
121
  .card-group--columns-2,
55
122
  .card-group--columns-3,
56
123
  .card-group--columns-4 {
124
+ /* color */
125
+
126
+ /* typography */
127
+
57
128
  /* size */
58
129
  grid-template-columns: 1fr;
130
+
131
+ /* border */
132
+
133
+ /* depth */
134
+
135
+ /* motion */
59
136
  }
60
137
  }
@@ -4,28 +4,50 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  require('./panel.css');
5
5
  var classnames = require('../helpers/classnames');
6
6
 
7
+ function hasContent(value) {
8
+ return value !== null && value !== void 0;
9
+ }
7
10
  const Panel = ({
8
11
  layout = "card",
9
12
  heading,
13
+ headingLevel = 2,
10
14
  description,
11
15
  className = "",
12
16
  children,
13
17
  ...props
14
18
  }) => {
15
- const classes = classnames.classnames("panel", className, {
16
- "panel--transparent": layout === "transparent"
17
- });
19
+ const classes = classnames.classnames(
20
+ "panel",
21
+ className,
22
+ {
23
+ "panel--transparent": layout === "transparent"
24
+ }
25
+ );
26
+ const HeadingTag = `h${headingLevel}`;
27
+ const hasHeading = hasContent(heading);
28
+ const hasDescription = hasContent(description);
29
+ const hasHeader = hasHeading || hasDescription;
18
30
  return /* @__PURE__ */ jsxRuntime.jsxs(
19
31
  "section",
20
32
  {
21
33
  className: classes,
22
34
  ...props,
23
35
  children: [
24
- (heading || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "panel__header", children: [
25
- heading && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "panel__heading", children: heading }),
26
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "panel__description", children: description })
36
+ hasHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "panel__header", children: [
37
+ hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
38
+ HeadingTag,
39
+ {
40
+ className: classnames.classnames(
41
+ "panel__heading",
42
+ `panel__heading--h${headingLevel}`,
43
+ {}
44
+ ),
45
+ children: heading
46
+ }
47
+ ),
48
+ hasDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "panel__description", children: description })
27
49
  ] }),
28
- children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "panel__content", children })
50
+ hasContent(children) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "panel__content", children })
29
51
  ]
30
52
  }
31
53
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAWA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,OAAA,EAAS,SAAA,EAAW;AAAA,IAC7C,sBAAsB,MAAA,KAAW;AAAA,GAClC,CAAA;AAED,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEF,QAAA,EAAA;AAAA,QAAA,CAAA,OAAA,IAAW,WAAA,qBACXA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,oBACCC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EACX,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,UAGD,WAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,QAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.cjs","sourcesContent":["import React from 'react';\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n heading?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n heading,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames('panel', className, {\n 'panel--transparent': layout === 'transparent',\n });\n\n return (\n <section\n className={classes}\n {...props}\n >\n {(heading || description) && (\n <div className=\"panel__header\">\n {heading && (\n <h2 className=\"panel__heading\">\n {heading}\n </h2>\n )}\n\n {description && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {children && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;"]}
1
+ {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAaA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,sBACE,MAAA,KAAW;AAAA;AACf,GACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,YACJ,UAAA,IACA,cAAA;AAEF,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCC,cAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWF,qBAAA;AAAA,gBACT,gBAAA;AAAA,gBACA,oBAAoB,YAAY,CAAA,CAAA;AAAA,gBAChC;AAAC,eACH;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,cAAA,oBACCE,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,WAAW,QAAQ,CAAA,mCACjB,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.cjs","sourcesContent":["import React from 'react';\n\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n heading,\n headingLevel = 2,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'panel',\n className,\n {\n 'panel--transparent':\n layout === 'transparent',\n },\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasHeader =\n hasHeading ||\n hasDescription;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeader && (\n <div className=\"panel__header\">\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'panel__heading',\n `panel__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasDescription && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {hasContent(children) && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;\n"]}
@@ -13,12 +13,11 @@
13
13
  --panel-padding: var(--padding-container);
14
14
  --panel-gap: var(--margin-container-item);
15
15
  --panel-title-gap: var(--font-h2-margin);
16
- --panel-content-min-height: 200px;
17
16
 
18
17
  display: flex;
19
18
  flex-direction: column;
20
19
  align-items: stretch;
21
- justify-content: center;
20
+ justify-content: flex-start;
22
21
  gap: var(--panel-gap);
23
22
  width: var(--panel-width);
24
23
  padding: var(--panel-padding);
@@ -38,26 +37,56 @@
38
37
  --panel-bg: transparent;
39
38
  --panel-color: var(--color-text);
40
39
 
40
+ /* typography */
41
+
41
42
  /* size */
42
- justify-content: flex-start;
43
- padding: auto 0;
43
+ padding: 0;
44
44
 
45
45
  /* border */
46
46
  border-radius: 0;
47
+
48
+ /* depth */
49
+
50
+ /* motion */
47
51
  }
48
52
 
49
53
  .panel__header {
54
+ /* color */
55
+
56
+ /* typography */
57
+
50
58
  /* size */
51
59
  display: flex;
52
60
  flex-direction: column;
53
61
  gap: var(--panel-title-gap);
54
62
  width: 100%;
63
+
64
+ /* border */
65
+
66
+ /* depth */
67
+
68
+ /* motion */
55
69
  }
56
70
 
57
71
  .panel__heading {
58
72
  /* color */
59
73
  color: inherit;
60
74
 
75
+ /* typography */
76
+
77
+ /* size */
78
+ margin: 0;
79
+
80
+ /* border */
81
+
82
+ /* depth */
83
+
84
+ /* motion */
85
+ }
86
+
87
+ .panel__heading--h2 {
88
+ /* color */
89
+
61
90
  /* typography */
62
91
  font-family: var(--font-h2-family);
63
92
  font-size: var(--font-h2);
@@ -66,7 +95,31 @@
66
95
  letter-spacing: var(--font-h2-letter-spacing);
67
96
 
68
97
  /* size */
69
- margin: 0;
98
+
99
+ /* border */
100
+
101
+ /* depth */
102
+
103
+ /* motion */
104
+ }
105
+
106
+ .panel__heading--h3 {
107
+ /* color */
108
+
109
+ /* typography */
110
+ font-family: var(--font-h3-family);
111
+ font-size: var(--font-h3);
112
+ font-weight: var(--font-h3-weight);
113
+ line-height: var(--font-h3-line);
114
+ letter-spacing: var(--font-h3-letter-spacing);
115
+
116
+ /* size */
117
+
118
+ /* border */
119
+
120
+ /* depth */
121
+
122
+ /* motion */
70
123
  }
71
124
 
72
125
  .panel__description {
@@ -82,10 +135,25 @@
82
135
 
83
136
  /* size */
84
137
  margin: 0;
138
+
139
+ /* border */
140
+
141
+ /* depth */
142
+
143
+ /* motion */
85
144
  }
86
145
 
87
146
  .panel__content {
147
+ /* color */
148
+
149
+ /* typography */
150
+
88
151
  /* size */
89
152
  width: 100%;
90
- min-height: var(--panel-content-min-height);
153
+
154
+ /* border */
155
+
156
+ /* depth */
157
+
158
+ /* motion */
91
159
  }
@@ -3,6 +3,7 @@ import './panel.css';
3
3
  export interface PanelProps extends React.HTMLAttributes<HTMLElement> {
4
4
  layout?: 'card' | 'transparent';
5
5
  heading?: React.ReactNode;
6
+ headingLevel?: 2 | 3;
6
7
  description?: React.ReactNode;
7
8
  }
8
9
  declare const Panel: React.FC<PanelProps>;
@@ -2,28 +2,50 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import './panel.css';
3
3
  import { classnames } from '../helpers/classnames';
4
4
 
5
+ function hasContent(value) {
6
+ return value !== null && value !== void 0;
7
+ }
5
8
  const Panel = ({
6
9
  layout = "card",
7
10
  heading,
11
+ headingLevel = 2,
8
12
  description,
9
13
  className = "",
10
14
  children,
11
15
  ...props
12
16
  }) => {
13
- const classes = classnames("panel", className, {
14
- "panel--transparent": layout === "transparent"
15
- });
17
+ const classes = classnames(
18
+ "panel",
19
+ className,
20
+ {
21
+ "panel--transparent": layout === "transparent"
22
+ }
23
+ );
24
+ const HeadingTag = `h${headingLevel}`;
25
+ const hasHeading = hasContent(heading);
26
+ const hasDescription = hasContent(description);
27
+ const hasHeader = hasHeading || hasDescription;
16
28
  return /* @__PURE__ */ jsxs(
17
29
  "section",
18
30
  {
19
31
  className: classes,
20
32
  ...props,
21
33
  children: [
22
- (heading || description) && /* @__PURE__ */ jsxs("div", { className: "panel__header", children: [
23
- heading && /* @__PURE__ */ jsx("h2", { className: "panel__heading", children: heading }),
24
- description && /* @__PURE__ */ jsx("p", { className: "panel__description", children: description })
34
+ hasHeader && /* @__PURE__ */ jsxs("div", { className: "panel__header", children: [
35
+ hasHeading && /* @__PURE__ */ jsx(
36
+ HeadingTag,
37
+ {
38
+ className: classnames(
39
+ "panel__heading",
40
+ `panel__heading--h${headingLevel}`,
41
+ {}
42
+ ),
43
+ children: heading
44
+ }
45
+ ),
46
+ hasDescription && /* @__PURE__ */ jsx("p", { className: "panel__description", children: description })
25
47
  ] }),
26
- children && /* @__PURE__ */ jsx("div", { className: "panel__content", children })
48
+ hasContent(children) && /* @__PURE__ */ jsx("div", { className: "panel__content", children })
27
49
  ]
28
50
  }
29
51
  );