jvetrau-ds 0.2.35 → 0.2.37

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.
@@ -2,7 +2,7 @@
2
2
  /* color */
3
3
  --course-outline-color: inherit;
4
4
  --course-outline-meta-color: var(--color-text-note);
5
-
5
+
6
6
  color: var(--course-outline-color);
7
7
 
8
8
  /* typography */
@@ -18,15 +18,15 @@
18
18
  var(--font-h3-letter-spacing);
19
19
 
20
20
  --course-outline-item-title-font-family:
21
- var(--font-h4-family);
21
+ var(--font-lead-family);
22
22
  --course-outline-item-title-font-size:
23
- var(--font-h4);
23
+ var(--font-lead);
24
24
  --course-outline-item-title-font-weight:
25
- var(--font-h4-weight);
25
+ var(--font-lead-weight);
26
26
  --course-outline-item-title-line-height:
27
- var(--font-h4-line);
27
+ var(--font-lead-line);
28
28
  --course-outline-item-title-letter-spacing:
29
- var(--font-h4-letter-spacing);
29
+ var(--font-lead-letter-spacing);
30
30
 
31
31
  --course-outline-body-font-family:
32
32
  var(--font-body-family);
@@ -74,6 +74,30 @@
74
74
  /* motion */
75
75
  }
76
76
 
77
+ .layout-sidebar__side .course-outline {
78
+ /* color */
79
+
80
+ /* typography */
81
+ --course-outline-item-title-font-family:
82
+ var(--font-body-family);
83
+ --course-outline-item-title-font-size:
84
+ var(--font-body);
85
+ --course-outline-item-title-font-weight:
86
+ var(--font-body-weight);
87
+ --course-outline-item-title-line-height:
88
+ var(--font-body-line);
89
+ --course-outline-item-title-letter-spacing:
90
+ var(--font-body-letter-spacing);
91
+
92
+ /* size */
93
+
94
+ /* border */
95
+
96
+ /* depth */
97
+
98
+ /* motion */
99
+ }
100
+
77
101
  .course-outline__groups {
78
102
  /* color */
79
103
 
@@ -158,6 +182,44 @@
158
182
  /* motion */
159
183
  }
160
184
 
185
+ h2.course-outline__group-title {
186
+ /* color */
187
+
188
+ /* typography */
189
+ font-family: var(--font-h2-family);
190
+ font-size: var(--font-h2);
191
+ font-weight: var(--font-h2-weight);
192
+ line-height: var(--font-h2-line);
193
+ letter-spacing: var(--font-h2-letter-spacing);
194
+
195
+ /* size */
196
+
197
+ /* border */
198
+
199
+ /* depth */
200
+
201
+ /* motion */
202
+ }
203
+
204
+ h4.course-outline__group-title {
205
+ /* color */
206
+
207
+ /* typography */
208
+ font-family: var(--font-h4-family);
209
+ font-size: var(--font-h4);
210
+ font-weight: var(--font-h4-weight);
211
+ line-height: var(--font-h4-line);
212
+ letter-spacing: var(--font-h4-letter-spacing);
213
+
214
+ /* size */
215
+
216
+ /* border */
217
+
218
+ /* depth */
219
+
220
+ /* motion */
221
+ }
222
+
161
223
  .course-outline__group-title a {
162
224
  /* color */
163
225
  color: inherit;
@@ -61,4 +61,4 @@ export type { FlipListItem, FlipListProps, } from './flip-list/flip-list';
61
61
  export { default as AvatarUpload } from './avatar-upload/avatar-upload';
62
62
  export type { AvatarUploadProps, } from './avatar-upload/avatar-upload';
63
63
  export { default as Table } from './table';
64
- export type { TableBodyProps, TableCellProps, TableColumn, TableColumnWidth, TableProps, TableRowProps } from './table';
64
+ export type { TableBodyProps, TableCellProps, TableCellStatus, TableColumn, TableColumnWidth, TableProps, TableRowProps, } from './table';
@@ -1,3 +1,3 @@
1
1
  export { default } from './table';
2
2
  export { default as Table } from './table';
3
- export type { TableBodyProps, TableCellProps, TableColumn, TableColumnWidth, TableProps, TableRowProps } from './table';
3
+ export type { TableBodyProps, TableCellProps, TableCellStatus, TableColumn, TableColumnWidth, TableProps, TableRowProps, } from './table';
@@ -69,13 +69,20 @@ const TableRow = ({
69
69
  );
70
70
  };
71
71
  const TableCell = ({
72
+ status,
72
73
  className = "",
73
74
  ...props
74
75
  }) => {
75
76
  const classes = classnames.classnames(
76
77
  "table__cell",
77
78
  className,
78
- {}
79
+ {
80
+ "table__cell--good": status === "good",
81
+ "table__cell--semi-good": status === "semi-good",
82
+ "table__cell--med": status === "med",
83
+ "table__cell--semi-bad": status === "semi-bad",
84
+ "table__cell--bad": status === "bad"
85
+ }
79
86
  );
80
87
  return /* @__PURE__ */ jsxRuntime.jsx(
81
88
  "td",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/table/table.tsx"],"names":["classnames","jsx","jsxs"],"mappings":";;;;;;AA4CA,MAAM,mBAAmB,CACvB,OAAA,KAEA,QAAQ,MAAA,CAAO,CAAC,OAAO,MAAA,KAAW;AAChC,EAAA,IACE,OAAO,KAAA,EAAO,IAAA,KAAS,cACvB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EACtB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,KAAA;AAC9B,CAAA,EAAG,CAAC,CAAA;AAEN,MAAM,qBAAA,GAAwB,CAC5B,KAAA,EACA,KAAA,KAEA,MAAA;AAAA,EAAA,CACI,KAAA,GAAQ,KAAA,GAAS,GAAA,EAAK,OAAA,CAAQ,CAAC;AACnC,CAAA;AAEF,MAAM,cAAA,GAAiB,CACrB,KAAA,EACA,aAAA,KACiC;AACjC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AACnC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAEA,EAAA,IACE,KAAA,CAAM,KAAA,IAAS,CAAA,IACf,aAAA,IAAiB,CAAA,EACjB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAA,EAAG,qBAAA;AAAA,IACR,KAAA,CAAM,KAAA;AAAA,IACN;AAAA,GACD,CAAA,CAAA,CAAA;AACH,CAAA;AAEA,MAAM,YAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,MAAM,WAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUD,qBAAA;AAAA,IACd,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,MAAM,YAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUD,qBAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AASA,MAAM,QAAwB,CAAC;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUD,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GACJ,iBAAiB,OAAO,CAAA;AAE1B,EAAA,uBACEE,eAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,UAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,cAAA;AAAA,gBACL,MAAA,CAAO,KAAA;AAAA,gBACP;AAAA;AACF;AACF,WAAA;AAAA,UANK,MAAA,CAAO;AAAA,SAQf,CAAA,EACH,CAAA;AAAA,wBAEAA,cAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,kBAAAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,cAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,eAAA;AAAA,YACV,KAAA,EAAM,KAAA;AAAA,YAEL,QAAA,EAAA,MAAA,CAAO;AAAA,WAAA;AAAA,UAJH,MAAA,CAAO;AAAA,SAMf,GACH,CAAA,EACF,CAAA;AAAA,QAEC;AAAA;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,KAAA,CAAM,IAAA,GAAO,SAAA;AACb,KAAA,CAAM,GAAA,GAAM,QAAA;AACZ,KAAA,CAAM,IAAA,GAAO,SAAA;AAEb,IAAO,aAAA,GAAQ","file":"table.cjs","sourcesContent":["import React from 'react';\n\nimport './table.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type TableColumnWidth =\n | {\n type: 'auto';\n }\n | {\n type: 'max';\n }\n | {\n type: 'fraction';\n value: number;\n }\n | {\n type: 'min';\n }\n | {\n type: 'fixed';\n value: string;\n };\n\nexport interface TableColumn {\n id: React.Key;\n header: React.ReactNode;\n width?: TableColumnWidth;\n}\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement> {\n columns: TableColumn[];\n}\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nconst getFractionTotal = (\n columns: TableColumn[],\n) =>\n columns.reduce((total, column) => {\n if (\n column.width?.type !== 'fraction' ||\n column.width.value <= 0\n ) {\n return total;\n }\n\n return total + column.width.value;\n }, 0);\n\nconst getFractionPercentage = (\n value: number,\n total: number,\n) =>\n Number(\n ((value / total) * 100).toFixed(6),\n );\n\nconst getColumnWidth = (\n width: TableColumnWidth | undefined,\n fractionTotal: number,\n): React.CSSProperties['width'] => {\n if (!width || width.type === 'auto') {\n return undefined;\n }\n\n if (width.type === 'min') {\n return '1%';\n }\n\n if (width.type === 'max') {\n return '100%';\n }\n\n if (width.type === 'fixed') {\n return width.value;\n }\n\n if (\n width.value <= 0 ||\n fractionTotal <= 0\n ) {\n return undefined;\n }\n\n return `${getFractionPercentage(\n width.value,\n fractionTotal,\n )}%`;\n};\n\nconst TableBody: React.FC<\n TableBodyProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__body',\n className,\n {},\n );\n\n return (\n <tbody\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableRow: React.FC<\n TableRowProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__row',\n className,\n {},\n );\n\n return (\n <tr\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableCell: React.FC<\n TableCellProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__cell',\n className,\n {},\n );\n\n return (\n <td\n className={classes}\n {...props}\n />\n );\n};\n\ninterface TableComponent\n extends React.FC<TableProps> {\n Body: typeof TableBody;\n Row: typeof TableRow;\n Cell: typeof TableCell;\n}\n\nconst Table: TableComponent = ({\n columns,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'table',\n className,\n {},\n );\n\n const fractionTotal =\n getFractionTotal(columns);\n\n return (\n <table\n className={classes}\n {...props}\n >\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n style={{\n width: getColumnWidth(\n column.width,\n fractionTotal,\n ),\n }}\n />\n ))}\n </colgroup>\n\n <thead className=\"table__head\">\n <tr className=\"table__row\">\n {columns.map((column) => (\n <th\n key={column.id}\n className=\"table__header\"\n scope=\"col\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n\n {children}\n </table>\n );\n};\n\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n\nexport default Table;\n"]}
1
+ {"version":3,"sources":["../../../src/components/table/table.tsx"],"names":["classnames","jsx","jsxs"],"mappings":"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","file":"table.cjs","sourcesContent":["import React from 'react';\n\nimport './table.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type TableColumnWidth =\n | {\n type: 'auto';\n }\n | {\n type: 'max';\n }\n | {\n type: 'fraction';\n value: number;\n }\n | {\n type: 'min';\n }\n | {\n type: 'fixed';\n value: string;\n };\n\nexport type TableCellStatus =\n | 'good'\n | 'semi-good'\n | 'med'\n | 'semi-bad'\n | 'bad';\n\nexport interface TableColumn {\n id: React.Key;\n header: React.ReactNode;\n width?: TableColumnWidth;\n}\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement> {\n columns: TableColumn[];\n}\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {\n status?: TableCellStatus;\n}\n\nconst getFractionTotal = (\n columns: TableColumn[],\n) =>\n columns.reduce((total, column) => {\n if (\n column.width?.type !== 'fraction' ||\n column.width.value <= 0\n ) {\n return total;\n }\n\n return total + column.width.value;\n }, 0);\n\nconst getFractionPercentage = (\n value: number,\n total: number,\n) =>\n Number(\n ((value / total) * 100).toFixed(6),\n );\n\nconst getColumnWidth = (\n width: TableColumnWidth | undefined,\n fractionTotal: number,\n): React.CSSProperties['width'] => {\n if (!width || width.type === 'auto') {\n return undefined;\n }\n\n if (width.type === 'min') {\n return '1%';\n }\n\n if (width.type === 'max') {\n return '100%';\n }\n\n if (width.type === 'fixed') {\n return width.value;\n }\n\n if (\n width.value <= 0 ||\n fractionTotal <= 0\n ) {\n return undefined;\n }\n\n return `${getFractionPercentage(\n width.value,\n fractionTotal,\n )}%`;\n};\n\nconst TableBody: React.FC<\n TableBodyProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__body',\n className,\n {},\n );\n\n return (\n <tbody\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableRow: React.FC<\n TableRowProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__row',\n className,\n {},\n );\n\n return (\n <tr\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableCell: React.FC<\n TableCellProps\n> = ({\n status,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__cell',\n className,\n {\n 'table__cell--good':\n status === 'good',\n 'table__cell--semi-good':\n status === 'semi-good',\n 'table__cell--med':\n status === 'med',\n 'table__cell--semi-bad':\n status === 'semi-bad',\n 'table__cell--bad':\n status === 'bad',\n },\n );\n\n return (\n <td\n className={classes}\n {...props}\n />\n );\n};\n\ninterface TableComponent\n extends React.FC<TableProps> {\n Body: typeof TableBody;\n Row: typeof TableRow;\n Cell: typeof TableCell;\n}\n\nconst Table: TableComponent = ({\n columns,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'table',\n className,\n {},\n );\n\n const fractionTotal =\n getFractionTotal(columns);\n\n return (\n <table\n className={classes}\n {...props}\n >\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n style={{\n width: getColumnWidth(\n column.width,\n fractionTotal,\n ),\n }}\n />\n ))}\n </colgroup>\n\n <thead className=\"table__head\">\n <tr className=\"table__row\">\n {columns.map((column) => (\n <th\n key={column.id}\n className=\"table__header\"\n scope=\"col\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n\n {children}\n </table>\n );\n};\n\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n\nexport default Table;\n"]}
@@ -149,6 +149,83 @@
149
149
  /* motion */
150
150
  }
151
151
 
152
+ .table__cell--good {
153
+ /* color */
154
+ background-color: var(--color-good);
155
+ color: var(--color-text-primary-1);
156
+
157
+ /* typography */
158
+
159
+ /* size */
160
+
161
+ /* border */
162
+
163
+ /* depth */
164
+
165
+ /* motion */
166
+ }
167
+
168
+ .table__cell--semi-good {
169
+ /* color */
170
+ background-color: var(--color-semi-good);
171
+ color: var(--color-text-primary-1);
172
+
173
+ /* typography */
174
+
175
+ /* size */
176
+
177
+ /* border */
178
+
179
+ /* depth */
180
+
181
+ /* motion */
182
+ }
183
+
184
+ .table__cell--med {
185
+ /* color */
186
+ background-color: var(--color-med);
187
+
188
+ /* typography */
189
+
190
+ /* size */
191
+
192
+ /* border */
193
+
194
+ /* depth */
195
+
196
+ /* motion */
197
+ }
198
+
199
+ .table__cell--semi-bad {
200
+ /* color */
201
+ background-color: var(--color-semi-bad);
202
+
203
+ /* typography */
204
+
205
+ /* size */
206
+
207
+ /* border */
208
+
209
+ /* depth */
210
+
211
+ /* motion */
212
+ }
213
+
214
+ .table__cell--bad {
215
+ /* color */
216
+ background-color: var(--color-bad);
217
+
218
+ /* typography */
219
+
220
+ /* size */
221
+
222
+ /* border */
223
+
224
+ /* depth */
225
+
226
+ /* motion */
227
+ }
228
+
152
229
  .table__body
153
230
  .table__row:last-child
154
231
  .table__cell {
@@ -157,7 +234,6 @@
157
234
  /* typography */
158
235
 
159
236
  /* size */
160
- padding-bottom: var(--padding-table-vert);
161
237
 
162
238
  /* border */
163
239
  border-bottom: 0;
@@ -13,6 +13,7 @@ export type TableColumnWidth = {
13
13
  type: 'fixed';
14
14
  value: string;
15
15
  };
16
+ export type TableCellStatus = 'good' | 'semi-good' | 'med' | 'semi-bad' | 'bad';
16
17
  export interface TableColumn {
17
18
  id: React.Key;
18
19
  header: React.ReactNode;
@@ -26,6 +27,7 @@ export interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionEle
26
27
  export interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
27
28
  }
28
29
  export interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
30
+ status?: TableCellStatus;
29
31
  }
30
32
  declare const TableBody: React.FC<TableBodyProps>;
31
33
  declare const TableRow: React.FC<TableRowProps>;
@@ -67,13 +67,20 @@ const TableRow = ({
67
67
  );
68
68
  };
69
69
  const TableCell = ({
70
+ status,
70
71
  className = "",
71
72
  ...props
72
73
  }) => {
73
74
  const classes = classnames(
74
75
  "table__cell",
75
76
  className,
76
- {}
77
+ {
78
+ "table__cell--good": status === "good",
79
+ "table__cell--semi-good": status === "semi-good",
80
+ "table__cell--med": status === "med",
81
+ "table__cell--semi-bad": status === "semi-bad",
82
+ "table__cell--bad": status === "bad"
83
+ }
77
84
  );
78
85
  return /* @__PURE__ */ jsx(
79
86
  "td",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":";;;;AA4CA,MAAM,mBAAmB,CACvB,OAAA,KAEA,QAAQ,MAAA,CAAO,CAAC,OAAO,MAAA,KAAW;AAChC,EAAA,IACE,OAAO,KAAA,EAAO,IAAA,KAAS,cACvB,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EACtB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,KAAA;AAC9B,CAAA,EAAG,CAAC,CAAA;AAEN,MAAM,qBAAA,GAAwB,CAC5B,KAAA,EACA,KAAA,KAEA,MAAA;AAAA,EAAA,CACI,KAAA,GAAQ,KAAA,GAAS,GAAA,EAAK,OAAA,CAAQ,CAAC;AACnC,CAAA;AAEF,MAAM,cAAA,GAAiB,CACrB,KAAA,EACA,aAAA,KACiC;AACjC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AACnC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAEA,EAAA,IACE,KAAA,CAAM,KAAA,IAAS,CAAA,IACf,aAAA,IAAiB,CAAA,EACjB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAA,EAAG,qBAAA;AAAA,IACR,KAAA,CAAM,KAAA;AAAA,IACN;AAAA,GACD,CAAA,CAAA,CAAA;AACH,CAAA;AAEA,MAAM,YAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,MAAM,WAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,MAAM,YAEF,CAAC;AAAA,EACH,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AASA,MAAM,QAAwB,CAAC;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GACJ,iBAAiB,OAAO,CAAA;AAE1B,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZ,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,cAAA;AAAA,gBACL,MAAA,CAAO,KAAA;AAAA,gBACP;AAAA;AACF;AACF,WAAA;AAAA,UANK,MAAA,CAAO;AAAA,SAQf,CAAA,EACH,CAAA;AAAA,wBAEA,GAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EACf,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZ,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,eAAA;AAAA,YACV,KAAA,EAAM,KAAA;AAAA,YAEL,QAAA,EAAA,MAAA,CAAO;AAAA,WAAA;AAAA,UAJH,MAAA,CAAO;AAAA,SAMf,GACH,CAAA,EACF,CAAA;AAAA,QAEC;AAAA;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,KAAA,CAAM,IAAA,GAAO,SAAA;AACb,KAAA,CAAM,GAAA,GAAM,QAAA;AACZ,KAAA,CAAM,IAAA,GAAO,SAAA;AAEb,IAAO,aAAA,GAAQ","file":"table.js","sourcesContent":["import React from 'react';\n\nimport './table.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type TableColumnWidth =\n | {\n type: 'auto';\n }\n | {\n type: 'max';\n }\n | {\n type: 'fraction';\n value: number;\n }\n | {\n type: 'min';\n }\n | {\n type: 'fixed';\n value: string;\n };\n\nexport interface TableColumn {\n id: React.Key;\n header: React.ReactNode;\n width?: TableColumnWidth;\n}\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement> {\n columns: TableColumn[];\n}\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nconst getFractionTotal = (\n columns: TableColumn[],\n) =>\n columns.reduce((total, column) => {\n if (\n column.width?.type !== 'fraction' ||\n column.width.value <= 0\n ) {\n return total;\n }\n\n return total + column.width.value;\n }, 0);\n\nconst getFractionPercentage = (\n value: number,\n total: number,\n) =>\n Number(\n ((value / total) * 100).toFixed(6),\n );\n\nconst getColumnWidth = (\n width: TableColumnWidth | undefined,\n fractionTotal: number,\n): React.CSSProperties['width'] => {\n if (!width || width.type === 'auto') {\n return undefined;\n }\n\n if (width.type === 'min') {\n return '1%';\n }\n\n if (width.type === 'max') {\n return '100%';\n }\n\n if (width.type === 'fixed') {\n return width.value;\n }\n\n if (\n width.value <= 0 ||\n fractionTotal <= 0\n ) {\n return undefined;\n }\n\n return `${getFractionPercentage(\n width.value,\n fractionTotal,\n )}%`;\n};\n\nconst TableBody: React.FC<\n TableBodyProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__body',\n className,\n {},\n );\n\n return (\n <tbody\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableRow: React.FC<\n TableRowProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__row',\n className,\n {},\n );\n\n return (\n <tr\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableCell: React.FC<\n TableCellProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__cell',\n className,\n {},\n );\n\n return (\n <td\n className={classes}\n {...props}\n />\n );\n};\n\ninterface TableComponent\n extends React.FC<TableProps> {\n Body: typeof TableBody;\n Row: typeof TableRow;\n Cell: typeof TableCell;\n}\n\nconst Table: TableComponent = ({\n columns,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'table',\n className,\n {},\n );\n\n const fractionTotal =\n getFractionTotal(columns);\n\n return (\n <table\n className={classes}\n {...props}\n >\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n style={{\n width: getColumnWidth(\n column.width,\n fractionTotal,\n ),\n }}\n />\n ))}\n </colgroup>\n\n <thead className=\"table__head\">\n <tr className=\"table__row\">\n {columns.map((column) => (\n <th\n key={column.id}\n className=\"table__header\"\n scope=\"col\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n\n {children}\n </table>\n );\n};\n\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n\nexport default Table;\n"]}
1
+ {"version":3,"sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"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","file":"table.js","sourcesContent":["import React from 'react';\n\nimport './table.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type TableColumnWidth =\n | {\n type: 'auto';\n }\n | {\n type: 'max';\n }\n | {\n type: 'fraction';\n value: number;\n }\n | {\n type: 'min';\n }\n | {\n type: 'fixed';\n value: string;\n };\n\nexport type TableCellStatus =\n | 'good'\n | 'semi-good'\n | 'med'\n | 'semi-bad'\n | 'bad';\n\nexport interface TableColumn {\n id: React.Key;\n header: React.ReactNode;\n width?: TableColumnWidth;\n}\n\nexport interface TableProps\n extends React.TableHTMLAttributes<HTMLTableElement> {\n columns: TableColumn[];\n}\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {\n status?: TableCellStatus;\n}\n\nconst getFractionTotal = (\n columns: TableColumn[],\n) =>\n columns.reduce((total, column) => {\n if (\n column.width?.type !== 'fraction' ||\n column.width.value <= 0\n ) {\n return total;\n }\n\n return total + column.width.value;\n }, 0);\n\nconst getFractionPercentage = (\n value: number,\n total: number,\n) =>\n Number(\n ((value / total) * 100).toFixed(6),\n );\n\nconst getColumnWidth = (\n width: TableColumnWidth | undefined,\n fractionTotal: number,\n): React.CSSProperties['width'] => {\n if (!width || width.type === 'auto') {\n return undefined;\n }\n\n if (width.type === 'min') {\n return '1%';\n }\n\n if (width.type === 'max') {\n return '100%';\n }\n\n if (width.type === 'fixed') {\n return width.value;\n }\n\n if (\n width.value <= 0 ||\n fractionTotal <= 0\n ) {\n return undefined;\n }\n\n return `${getFractionPercentage(\n width.value,\n fractionTotal,\n )}%`;\n};\n\nconst TableBody: React.FC<\n TableBodyProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__body',\n className,\n {},\n );\n\n return (\n <tbody\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableRow: React.FC<\n TableRowProps\n> = ({\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__row',\n className,\n {},\n );\n\n return (\n <tr\n className={classes}\n {...props}\n />\n );\n};\n\nconst TableCell: React.FC<\n TableCellProps\n> = ({\n status,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'table__cell',\n className,\n {\n 'table__cell--good':\n status === 'good',\n 'table__cell--semi-good':\n status === 'semi-good',\n 'table__cell--med':\n status === 'med',\n 'table__cell--semi-bad':\n status === 'semi-bad',\n 'table__cell--bad':\n status === 'bad',\n },\n );\n\n return (\n <td\n className={classes}\n {...props}\n />\n );\n};\n\ninterface TableComponent\n extends React.FC<TableProps> {\n Body: typeof TableBody;\n Row: typeof TableRow;\n Cell: typeof TableCell;\n}\n\nconst Table: TableComponent = ({\n columns,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'table',\n className,\n {},\n );\n\n const fractionTotal =\n getFractionTotal(columns);\n\n return (\n <table\n className={classes}\n {...props}\n >\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n style={{\n width: getColumnWidth(\n column.width,\n fractionTotal,\n ),\n }}\n />\n ))}\n </colgroup>\n\n <thead className=\"table__head\">\n <tr className=\"table__row\">\n {columns.map((column) => (\n <th\n key={column.id}\n className=\"table__header\"\n scope=\"col\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n\n {children}\n </table>\n );\n};\n\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\n\nexport default Table;\n"]}
package/index.d.ts CHANGED
@@ -69,7 +69,7 @@ export type { FlipListItem, FlipListProps, } from './components/flip-list';
69
69
  export { default as AvatarUpload } from './components/avatar-upload';
70
70
  export type { AvatarUploadProps, } from './components/avatar-upload';
71
71
  export { default as Table } from './components/table';
72
- export type { TableBodyProps, TableCellProps, TableColumn, TableColumnWidth, TableProps, TableRowProps } from './components/table';
72
+ export type { TableBodyProps, TableCellProps, TableCellStatus, TableColumn, TableColumnWidth, TableProps, TableRowProps, } from './components/table';
73
73
  export { default as Header } from './patterns/header';
74
74
  export type { HeaderProps } from './patterns/header';
75
75
  export { default as Footer } from './patterns/footer';
@@ -3,6 +3,7 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var LayoutBase = require('../base');
5
5
  require('./auth.css');
6
+ var classnames = require('../../components/helpers/classnames');
6
7
 
7
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
9
 
@@ -12,8 +13,14 @@ const LayoutAuth = ({
12
13
  brand,
13
14
  footer,
14
15
  children,
16
+ className = "",
15
17
  ...props
16
18
  }) => {
19
+ const classes = classnames.classnames(
20
+ "layout-auth",
21
+ className,
22
+ {}
23
+ );
17
24
  return /* @__PURE__ */ jsxRuntime.jsx(
18
25
  LayoutBase__default.default,
19
26
  {
@@ -22,6 +29,7 @@ const LayoutAuth = ({
22
29
  mainAlign: "center",
23
30
  header: brand,
24
31
  footer,
32
+ className: classes,
25
33
  ...props,
26
34
  children
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layouts/auth/auth.tsx"],"names":["jsx","LayoutBase"],"mappings":";;;;;;;;;;AAWA,MAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,uBACEA,cAAA;AAAA,IAACC,2BAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"auth.cjs","sourcesContent":["import React from 'react';\nimport LayoutBase from '../base';\nimport './auth.css';\nimport { classnames } from '../../components/helpers/classnames';\n\nexport interface LayoutAuthProps\n extends React.HTMLAttributes<HTMLDivElement> {\n brand?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst LayoutAuth: React.FC<LayoutAuthProps> = ({\n brand,\n footer,\n children,\n ...props\n}) => {\n return (\n <LayoutBase\n width=\"narrow\"\n headerAlign=\"end\"\n mainAlign=\"center\"\n header={brand}\n footer={footer}\n {...props}\n >\n {children}\n </LayoutBase>\n );\n};\n\nexport default LayoutAuth;"]}
1
+ {"version":3,"sources":["../../../src/layouts/auth/auth.tsx"],"names":["classnames","jsx","LayoutBase"],"mappings":";;;;;;;;;;;AAWA,MAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,2BAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA;AAAA,MACA,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"auth.cjs","sourcesContent":["import React from 'react';\nimport LayoutBase from '../base';\nimport './auth.css';\nimport { classnames } from '../../components/helpers/classnames';\n\nexport interface LayoutAuthProps\n extends React.HTMLAttributes<HTMLDivElement> {\n brand?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst LayoutAuth: React.FC<LayoutAuthProps> = ({\n brand,\n footer,\n children,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'layout-auth',\n className,\n {},\n );\n\n return (\n <LayoutBase\n width=\"narrow\"\n headerAlign=\"end\"\n mainAlign=\"center\"\n header={brand}\n footer={footer}\n className={classes}\n {...props}\n >\n {children}\n </LayoutBase>\n );\n};\n\nexport default LayoutAuth;\n"]}
@@ -0,0 +1,19 @@
1
+ .layout-auth .panel h1 {
2
+ /* color */
3
+
4
+ /* typography */
5
+ font-family: var(--font-h2-family);
6
+ font-size: var(--font-h2);
7
+ font-weight: var(--font-h2-weight);
8
+ line-height: var(--font-h2-line);
9
+ letter-spacing: var(--font-h2-letter-spacing);
10
+
11
+ /* size */
12
+ margin: 0 0 var(--font-h2-margin) 0;
13
+
14
+ /* border */
15
+
16
+ /* depth */
17
+
18
+ /* motion */
19
+ }
@@ -1,13 +1,20 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import LayoutBase from '../base';
3
3
  import './auth.css';
4
+ import { classnames } from '../../components/helpers/classnames';
4
5
 
5
6
  const LayoutAuth = ({
6
7
  brand,
7
8
  footer,
8
9
  children,
10
+ className = "",
9
11
  ...props
10
12
  }) => {
13
+ const classes = classnames(
14
+ "layout-auth",
15
+ className,
16
+ {}
17
+ );
11
18
  return /* @__PURE__ */ jsx(
12
19
  LayoutBase,
13
20
  {
@@ -16,6 +23,7 @@ const LayoutAuth = ({
16
23
  mainAlign: "center",
17
24
  header: brand,
18
25
  footer,
26
+ className: classes,
19
27
  ...props,
20
28
  children
21
29
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layouts/auth/auth.tsx"],"names":[],"mappings":";;;;AAWA,MAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"auth.js","sourcesContent":["import React from 'react';\nimport LayoutBase from '../base';\nimport './auth.css';\nimport { classnames } from '../../components/helpers/classnames';\n\nexport interface LayoutAuthProps\n extends React.HTMLAttributes<HTMLDivElement> {\n brand?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst LayoutAuth: React.FC<LayoutAuthProps> = ({\n brand,\n footer,\n children,\n ...props\n}) => {\n return (\n <LayoutBase\n width=\"narrow\"\n headerAlign=\"end\"\n mainAlign=\"center\"\n header={brand}\n footer={footer}\n {...props}\n >\n {children}\n </LayoutBase>\n );\n};\n\nexport default LayoutAuth;"]}
1
+ {"version":3,"sources":["../../../src/layouts/auth/auth.tsx"],"names":[],"mappings":";;;;;AAWA,MAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,aAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA;AAAA,MACA,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"auth.js","sourcesContent":["import React from 'react';\nimport LayoutBase from '../base';\nimport './auth.css';\nimport { classnames } from '../../components/helpers/classnames';\n\nexport interface LayoutAuthProps\n extends React.HTMLAttributes<HTMLDivElement> {\n brand?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst LayoutAuth: React.FC<LayoutAuthProps> = ({\n brand,\n footer,\n children,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'layout-auth',\n className,\n {},\n );\n\n return (\n <LayoutBase\n width=\"narrow\"\n headerAlign=\"end\"\n mainAlign=\"center\"\n header={brand}\n footer={footer}\n className={classes}\n {...props}\n >\n {children}\n </LayoutBase>\n );\n};\n\nexport default LayoutAuth;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jvetrau-ds",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
4
4
  "description": "Multi-brand React design system with semantic tokens",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
package/styles.css CHANGED
@@ -1630,7 +1630,7 @@
1630
1630
  /* color */
1631
1631
  --course-outline-color: inherit;
1632
1632
  --course-outline-meta-color: var(--color-text-note);
1633
-
1633
+
1634
1634
  color: var(--course-outline-color);
1635
1635
 
1636
1636
  /* typography */
@@ -1646,15 +1646,15 @@
1646
1646
  var(--font-h3-letter-spacing);
1647
1647
 
1648
1648
  --course-outline-item-title-font-family:
1649
- var(--font-h4-family);
1649
+ var(--font-lead-family);
1650
1650
  --course-outline-item-title-font-size:
1651
- var(--font-h4);
1651
+ var(--font-lead);
1652
1652
  --course-outline-item-title-font-weight:
1653
- var(--font-h4-weight);
1653
+ var(--font-lead-weight);
1654
1654
  --course-outline-item-title-line-height:
1655
- var(--font-h4-line);
1655
+ var(--font-lead-line);
1656
1656
  --course-outline-item-title-letter-spacing:
1657
- var(--font-h4-letter-spacing);
1657
+ var(--font-lead-letter-spacing);
1658
1658
 
1659
1659
  --course-outline-body-font-family:
1660
1660
  var(--font-body-family);
@@ -1702,6 +1702,30 @@
1702
1702
  /* motion */
1703
1703
  }
1704
1704
 
1705
+ .layout-sidebar__side .course-outline {
1706
+ /* color */
1707
+
1708
+ /* typography */
1709
+ --course-outline-item-title-font-family:
1710
+ var(--font-body-family);
1711
+ --course-outline-item-title-font-size:
1712
+ var(--font-body);
1713
+ --course-outline-item-title-font-weight:
1714
+ var(--font-body-weight);
1715
+ --course-outline-item-title-line-height:
1716
+ var(--font-body-line);
1717
+ --course-outline-item-title-letter-spacing:
1718
+ var(--font-body-letter-spacing);
1719
+
1720
+ /* size */
1721
+
1722
+ /* border */
1723
+
1724
+ /* depth */
1725
+
1726
+ /* motion */
1727
+ }
1728
+
1705
1729
  .course-outline__groups {
1706
1730
  /* color */
1707
1731
 
@@ -1786,6 +1810,44 @@
1786
1810
  /* motion */
1787
1811
  }
1788
1812
 
1813
+ h2.course-outline__group-title {
1814
+ /* color */
1815
+
1816
+ /* typography */
1817
+ font-family: var(--font-h2-family);
1818
+ font-size: var(--font-h2);
1819
+ font-weight: var(--font-h2-weight);
1820
+ line-height: var(--font-h2-line);
1821
+ letter-spacing: var(--font-h2-letter-spacing);
1822
+
1823
+ /* size */
1824
+
1825
+ /* border */
1826
+
1827
+ /* depth */
1828
+
1829
+ /* motion */
1830
+ }
1831
+
1832
+ h4.course-outline__group-title {
1833
+ /* color */
1834
+
1835
+ /* typography */
1836
+ font-family: var(--font-h4-family);
1837
+ font-size: var(--font-h4);
1838
+ font-weight: var(--font-h4-weight);
1839
+ line-height: var(--font-h4-line);
1840
+ letter-spacing: var(--font-h4-letter-spacing);
1841
+
1842
+ /* size */
1843
+
1844
+ /* border */
1845
+
1846
+ /* depth */
1847
+
1848
+ /* motion */
1849
+ }
1850
+
1789
1851
  .course-outline__group-title a {
1790
1852
  /* color */
1791
1853
  color: inherit;
@@ -5132,6 +5194,83 @@
5132
5194
  /* motion */
5133
5195
  }
5134
5196
 
5197
+ .table__cell--good {
5198
+ /* color */
5199
+ background-color: var(--color-good);
5200
+ color: var(--color-text-primary-1);
5201
+
5202
+ /* typography */
5203
+
5204
+ /* size */
5205
+
5206
+ /* border */
5207
+
5208
+ /* depth */
5209
+
5210
+ /* motion */
5211
+ }
5212
+
5213
+ .table__cell--semi-good {
5214
+ /* color */
5215
+ background-color: var(--color-semi-good);
5216
+ color: var(--color-text-primary-1);
5217
+
5218
+ /* typography */
5219
+
5220
+ /* size */
5221
+
5222
+ /* border */
5223
+
5224
+ /* depth */
5225
+
5226
+ /* motion */
5227
+ }
5228
+
5229
+ .table__cell--med {
5230
+ /* color */
5231
+ background-color: var(--color-med);
5232
+
5233
+ /* typography */
5234
+
5235
+ /* size */
5236
+
5237
+ /* border */
5238
+
5239
+ /* depth */
5240
+
5241
+ /* motion */
5242
+ }
5243
+
5244
+ .table__cell--semi-bad {
5245
+ /* color */
5246
+ background-color: var(--color-semi-bad);
5247
+
5248
+ /* typography */
5249
+
5250
+ /* size */
5251
+
5252
+ /* border */
5253
+
5254
+ /* depth */
5255
+
5256
+ /* motion */
5257
+ }
5258
+
5259
+ .table__cell--bad {
5260
+ /* color */
5261
+ background-color: var(--color-bad);
5262
+
5263
+ /* typography */
5264
+
5265
+ /* size */
5266
+
5267
+ /* border */
5268
+
5269
+ /* depth */
5270
+
5271
+ /* motion */
5272
+ }
5273
+
5135
5274
  .table__body
5136
5275
  .table__row:last-child
5137
5276
  .table__cell {
@@ -5140,7 +5279,6 @@
5140
5279
  /* typography */
5141
5280
 
5142
5281
  /* size */
5143
- padding-bottom: var(--padding-table-vert);
5144
5282
 
5145
5283
  /* border */
5146
5284
  border-bottom: 0;
@@ -6563,7 +6701,25 @@
6563
6701
  }
6564
6702
 
6565
6703
  /* src/layouts/auth/auth.css */
6704
+ .layout-auth .panel h1 {
6705
+ /* color */
6706
+
6707
+ /* typography */
6708
+ font-family: var(--font-h2-family);
6709
+ font-size: var(--font-h2);
6710
+ font-weight: var(--font-h2-weight);
6711
+ line-height: var(--font-h2-line);
6712
+ letter-spacing: var(--font-h2-letter-spacing);
6566
6713
 
6714
+ /* size */
6715
+ margin: 0 0 var(--font-h2-margin) 0;
6716
+
6717
+ /* border */
6718
+
6719
+ /* depth */
6720
+
6721
+ /* motion */
6722
+ }
6567
6723
 
6568
6724
  /* src/layouts/base/base.css */
6569
6725
  .layout-base .layout-foundation__grid {