@navikt/ds-react 0.14.0 → 0.14.1

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.
@@ -35,8 +35,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const react_1 = __importStar(require("react"));
37
37
  const classnames_1 = __importDefault(require("classnames"));
38
+ const __1 = require("..");
39
+ const _1 = require(".");
38
40
  const DataCell = (0, react_1.forwardRef)((_a, ref) => {
39
- var { className } = _a, rest = __rest(_a, ["className"]);
40
- return (react_1.default.createElement("td", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table__cell", className) })));
41
+ var { className, children = "" } = _a, rest = __rest(_a, ["className", "children"]);
42
+ const context = (0, react_1.useContext)(_1.TableContext);
43
+ return (react_1.default.createElement(__1.BodyShort, Object.assign({ as: "td", ref: ref, className: (0, classnames_1.default)("navds-table__data-cell", className), size: context === null || context === void 0 ? void 0 : context.size }, rest), children));
41
44
  });
42
45
  exports.default = DataCell;
@@ -35,8 +35,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const react_1 = __importStar(require("react"));
37
37
  const classnames_1 = __importDefault(require("classnames"));
38
+ const __1 = require("..");
38
39
  const HeaderCell = (0, react_1.forwardRef)((_a, ref) => {
39
- var { className } = _a, rest = __rest(_a, ["className"]);
40
- return (react_1.default.createElement("th", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table__cell", className) })));
40
+ var { className, children } = _a, rest = __rest(_a, ["className", "children"]);
41
+ const context = (0, react_1.useContext)(__1.TableContext);
42
+ return (react_1.default.createElement(__1.Label, Object.assign({ as: "th", ref: ref, className: (0, classnames_1.default)("navds-table__header-cell", className), size: context === null || context === void 0 ? void 0 : context.size }, rest), children));
41
43
  });
42
44
  exports.default = HeaderCell;
package/cjs/table/Row.js CHANGED
@@ -36,7 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const react_1 = __importStar(require("react"));
37
37
  const classnames_1 = __importDefault(require("classnames"));
38
38
  const Row = (0, react_1.forwardRef)((_a, ref) => {
39
- var { className } = _a, rest = __rest(_a, ["className"]);
40
- return (react_1.default.createElement("tr", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table__row", className) })));
39
+ var { className, selected = false } = _a, rest = __rest(_a, ["className", "selected"]);
40
+ return (react_1.default.createElement("tr", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table__row", className, {
41
+ "navds-table__row--selected": selected,
42
+ }) })));
41
43
  });
42
44
  exports.default = Row;
@@ -33,6 +33,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TableContext = void 0;
36
37
  const react_1 = __importStar(require("react"));
37
38
  const classnames_1 = __importDefault(require("classnames"));
38
39
  const Header_1 = __importDefault(require("./Header"));
@@ -40,9 +41,13 @@ const Body_1 = __importDefault(require("./Body"));
40
41
  const Row_1 = __importDefault(require("./Row"));
41
42
  const HeaderCell_1 = __importDefault(require("./HeaderCell"));
42
43
  const DataCell_1 = __importDefault(require("./DataCell"));
44
+ exports.TableContext = (0, react_1.createContext)(null);
43
45
  const Table = (0, react_1.forwardRef)((_a, ref) => {
44
- var { className, size = "medium" } = _a, rest = __rest(_a, ["className", "size"]);
45
- return (react_1.default.createElement("table", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table", `navds-table--${size}`, className) })));
46
+ var { className, zebraStripes = false, size = "medium" } = _a, rest = __rest(_a, ["className", "zebraStripes", "size"]);
47
+ return (react_1.default.createElement(exports.TableContext.Provider, { value: { size } },
48
+ react_1.default.createElement("table", Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)("navds-table", `navds-table--${size}`, className, {
49
+ "navds-table--zebra-stripes": zebraStripes,
50
+ }) }))));
46
51
  });
47
52
  Table.Header = Header_1.default;
48
53
  Table.Body = Body_1.default;
@@ -9,11 +9,14 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import React, { forwardRef } from "react";
12
+ import React, { forwardRef, useContext } from "react";
13
13
  import cl from "classnames";
14
+ import { BodyShort } from "..";
15
+ import { TableContext } from ".";
14
16
  const DataCell = forwardRef((_a, ref) => {
15
- var { className } = _a, rest = __rest(_a, ["className"]);
16
- return (React.createElement("td", Object.assign({}, rest, { ref: ref, className: cl("navds-table__cell", className) })));
17
+ var { className, children = "" } = _a, rest = __rest(_a, ["className", "children"]);
18
+ const context = useContext(TableContext);
19
+ return (React.createElement(BodyShort, Object.assign({ as: "td", ref: ref, className: cl("navds-table__data-cell", className), size: context === null || context === void 0 ? void 0 : context.size }, rest), children));
17
20
  });
18
21
  export default DataCell;
19
22
  //# sourceMappingURL=DataCell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataCell.js","sourceRoot":"","sources":["../../src/table/DataCell.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAS5B,MAAM,QAAQ,GAAiB,UAAU,CAAC,CAAC,EAAsB,EAAE,GAAG,EAAE,EAAE;QAA/B,EAAE,SAAS,OAAW,EAAN,IAAI,cAApB,aAAsB,CAAF;IAAY,OAAA,CACzE,4CAAQ,IAAI,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAC1E,CAAA;CAAA,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"DataCell.js","sourceRoot":"","sources":["../../src/table/DataCell.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AASjC,MAAM,QAAQ,GAAiB,UAAU,CACvC,CAAC,EAAqC,EAAE,GAAG,EAAE,EAAE;QAA9C,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,OAAW,EAAN,IAAI,cAAnC,yBAAqC,CAAF;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAEzC,OAAO,CACL,oBAAC,SAAS,kBACR,EAAE,EAAC,IAAI,EACP,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAClD,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,IACf,IAAI,GAEP,QAAQ,CACC,CACb,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  interface HeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {
3
+ scope?: string;
3
4
  }
4
5
  export interface HeaderCellType extends React.ForwardRefExoticComponent<HeaderCellProps & React.RefAttributes<HTMLTableCellElement>> {
5
6
  }
@@ -9,11 +9,13 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import React, { forwardRef } from "react";
12
+ import React, { forwardRef, useContext } from "react";
13
13
  import cl from "classnames";
14
+ import { Label, TableContext } from "..";
14
15
  const HeaderCell = forwardRef((_a, ref) => {
15
- var { className } = _a, rest = __rest(_a, ["className"]);
16
- return (React.createElement("th", Object.assign({}, rest, { ref: ref, className: cl("navds-table__cell", className) })));
16
+ var { className, children } = _a, rest = __rest(_a, ["className", "children"]);
17
+ const context = useContext(TableContext);
18
+ return (React.createElement(Label, Object.assign({ as: "th", ref: ref, className: cl("navds-table__header-cell", className), size: context === null || context === void 0 ? void 0 : context.size }, rest), children));
17
19
  });
18
20
  export default HeaderCell;
19
21
  //# sourceMappingURL=HeaderCell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sourceRoot":"","sources":["../../src/table/HeaderCell.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAS5B,MAAM,UAAU,GAAmB,UAAU,CAAC,CAAC,EAAsB,EAAE,GAAG,EAAE,EAAE;QAA/B,EAAE,SAAS,OAAW,EAAN,IAAI,cAApB,aAAsB,CAAF;IAAY,OAAA,CAC7E,4CAAQ,IAAI,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAC1E,CAAA;CAAA,CAAC,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"HeaderCell.js","sourceRoot":"","sources":["../../src/table/HeaderCell.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAWzC,MAAM,UAAU,GAAmB,UAAU,CAC3C,CAAC,EAAgC,EAAE,GAAG,EAAE,EAAE;QAAzC,EAAE,SAAS,EAAE,QAAQ,OAAW,EAAN,IAAI,cAA9B,yBAAgC,CAAF;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAEzC,OAAO,CACL,oBAAC,KAAK,kBACJ,EAAE,EAAC,IAAI,EACP,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACpD,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,IACf,IAAI,GAEP,QAAQ,CACH,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import React from "react";
2
2
  interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
3
+ /**
4
+ * Row is selected
5
+ * @default false
6
+ */
7
+ selected?: boolean;
3
8
  }
4
9
  export interface RowType extends React.ForwardRefExoticComponent<RowProps & React.RefAttributes<HTMLTableRowElement>> {
5
10
  }
package/esm/table/Row.js CHANGED
@@ -12,8 +12,10 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  import React, { forwardRef } from "react";
13
13
  import cl from "classnames";
14
14
  const Row = forwardRef((_a, ref) => {
15
- var { className } = _a, rest = __rest(_a, ["className"]);
16
- return (React.createElement("tr", Object.assign({}, rest, { ref: ref, className: cl("navds-table__row", className) })));
15
+ var { className, selected = false } = _a, rest = __rest(_a, ["className", "selected"]);
16
+ return (React.createElement("tr", Object.assign({}, rest, { ref: ref, className: cl("navds-table__row", className, {
17
+ "navds-table__row--selected": selected,
18
+ }) })));
17
19
  });
18
20
  export default Row;
19
21
  //# sourceMappingURL=Row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Row.js","sourceRoot":"","sources":["../../src/table/Row.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAS5B,MAAM,GAAG,GAAY,UAAU,CAAC,CAAC,EAAsB,EAAE,GAAG,EAAE,EAAE;QAA/B,EAAE,SAAS,OAAW,EAAN,IAAI,cAApB,aAAsB,CAAF;IAAY,OAAA,CAC/D,4CAAQ,IAAI,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,IAAI,CACzE,CAAA;CAAA,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"Row.js","sourceRoot":"","sources":["../../src/table/Row.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAe5B,MAAM,GAAG,GAAY,UAAU,CAC7B,CAAC,EAAwC,EAAE,GAAG,EAAE,EAAE;QAAjD,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,OAAW,EAAN,IAAI,cAAtC,yBAAwC,CAAF;IAAY,OAAA,CACjD,4CACM,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE;YAC3C,4BAA4B,EAAE,QAAQ;SACvC,CAAC,IACF,CACH,CAAA;CAAA,CACF,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -10,6 +10,11 @@ export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
10
10
  * @default "medium"
11
11
  */
12
12
  size?: "medium" | "small";
13
+ /**
14
+ * Zebra striped table
15
+ * @default false
16
+ */
17
+ zebraStripes?: boolean;
13
18
  }
14
19
  export interface TableType extends React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>> {
15
20
  Header: HeaderType;
@@ -18,5 +23,9 @@ export interface TableType extends React.ForwardRefExoticComponent<TableProps &
18
23
  DataCell: DataCellType;
19
24
  HeaderCell: HeaderCellType;
20
25
  }
26
+ export interface TableContextProps {
27
+ size: "medium" | "small";
28
+ }
29
+ export declare const TableContext: React.Context<TableContextProps | null>;
21
30
  declare const Table: TableType;
22
31
  export default Table;
@@ -9,16 +9,20 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import React, { forwardRef } from "react";
12
+ import React, { createContext, forwardRef } from "react";
13
13
  import cl from "classnames";
14
14
  import Header from "./Header";
15
15
  import Body from "./Body";
16
16
  import Row from "./Row";
17
17
  import HeaderCell from "./HeaderCell";
18
18
  import DataCell from "./DataCell";
19
+ export const TableContext = createContext(null);
19
20
  const Table = forwardRef((_a, ref) => {
20
- var { className, size = "medium" } = _a, rest = __rest(_a, ["className", "size"]);
21
- return (React.createElement("table", Object.assign({}, rest, { ref: ref, className: cl("navds-table", `navds-table--${size}`, className) })));
21
+ var { className, zebraStripes = false, size = "medium" } = _a, rest = __rest(_a, ["className", "zebraStripes", "size"]);
22
+ return (React.createElement(TableContext.Provider, { value: { size } },
23
+ React.createElement("table", Object.assign({}, rest, { ref: ref, className: cl("navds-table", `navds-table--${size}`, className, {
24
+ "navds-table--zebra-stripes": zebraStripes,
25
+ }) }))));
22
26
  });
23
27
  Table.Header = Header;
24
28
  Table.Body = Body;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/table/Table.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,MAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,IAAkB,MAAM,QAAQ,CAAC;AACxC,OAAO,GAAgB,MAAM,OAAO,CAAC;AACrC,OAAO,UAA8B,MAAM,cAAc,CAAC;AAC1D,OAAO,QAA0B,MAAM,YAAY,CAAC;AAqBpD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,EAAuC,EAAE,GAAG,EAAE,EAAE;QAAhD,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,OAAW,EAAN,IAAI,cAArC,qBAAuC,CAAF;IAAY,OAAA,CACzE,+CACM,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,gBAAgB,IAAI,EAAE,EAAE,SAAS,CAAC,IAC/D,CACH,CAAA;CAAA,CAAc,CAAC;AAEhB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAClB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAE1B,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/table/Table.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,MAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,IAAkB,MAAM,QAAQ,CAAC;AACxC,OAAO,GAAgB,MAAM,OAAO,CAAC;AACrC,OAAO,UAA8B,MAAM,cAAc,CAAC;AAC1D,OAAO,QAA0B,MAAM,YAAY,CAAC;AA8BpD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAA6D,EAAE,GAAG,EAAE,EAAE;QAAtE,EAAE,SAAS,EAAE,YAAY,GAAG,KAAK,EAAE,IAAI,GAAG,QAAQ,OAAW,EAAN,IAAI,cAA3D,qCAA6D,CAAF;IAAY,OAAA,CACtE,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE;QACpC,+CACM,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,gBAAgB,IAAI,EAAE,EAAE,SAAS,EAAE;gBAC9D,4BAA4B,EAAE,YAAY;aAC3C,CAAC,IACF,CACoB,CACzB,CAAA;CAAA,CACW,CAAC;AAEf,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAClB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAE1B,eAAe,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "private": false,
5
5
  "description": "NAV designsystem react components",
6
6
  "author": "NAV Designsystem team",
@@ -64,5 +64,5 @@
64
64
  "@types/react": "^17.0.30",
65
65
  "react": "^17.0.0"
66
66
  },
67
- "gitHead": "36d98e1d190652c21d78a259cf3d8942d271c167"
67
+ "gitHead": "99ed25a0b4d8ed777223aa55890dc995f220a36f"
68
68
  }
@@ -1,5 +1,7 @@
1
- import React, { forwardRef } from "react";
1
+ import React, { forwardRef, useContext } from "react";
2
2
  import cl from "classnames";
3
+ import { BodyShort } from "..";
4
+ import { TableContext } from ".";
3
5
 
4
6
  interface DataCellProps extends React.HTMLAttributes<HTMLTableCellElement> {}
5
7
 
@@ -8,8 +10,22 @@ export interface DataCellType
8
10
  DataCellProps & React.RefAttributes<HTMLTableCellElement>
9
11
  > {}
10
12
 
11
- const DataCell: DataCellType = forwardRef(({ className, ...rest }, ref) => (
12
- <td {...rest} ref={ref} className={cl("navds-table__cell", className)} />
13
- ));
13
+ const DataCell: DataCellType = forwardRef(
14
+ ({ className, children = "", ...rest }, ref) => {
15
+ const context = useContext(TableContext);
16
+
17
+ return (
18
+ <BodyShort
19
+ as="td"
20
+ ref={ref}
21
+ className={cl("navds-table__data-cell", className)}
22
+ size={context?.size}
23
+ {...rest}
24
+ >
25
+ {children}
26
+ </BodyShort>
27
+ );
28
+ }
29
+ );
14
30
 
15
31
  export default DataCell;
@@ -1,15 +1,32 @@
1
- import React, { forwardRef } from "react";
1
+ import React, { forwardRef, useContext } from "react";
2
2
  import cl from "classnames";
3
+ import { Label, TableContext } from "..";
3
4
 
4
- interface HeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {}
5
+ interface HeaderCellProps extends React.HTMLAttributes<HTMLTableCellElement> {
6
+ scope?: string;
7
+ }
5
8
 
6
9
  export interface HeaderCellType
7
10
  extends React.ForwardRefExoticComponent<
8
11
  HeaderCellProps & React.RefAttributes<HTMLTableCellElement>
9
12
  > {}
10
13
 
11
- const HeaderCell: HeaderCellType = forwardRef(({ className, ...rest }, ref) => (
12
- <th {...rest} ref={ref} className={cl("navds-table__cell", className)} />
13
- ));
14
+ const HeaderCell: HeaderCellType = forwardRef(
15
+ ({ className, children, ...rest }, ref) => {
16
+ const context = useContext(TableContext);
17
+
18
+ return (
19
+ <Label
20
+ as="th"
21
+ ref={ref}
22
+ className={cl("navds-table__header-cell", className)}
23
+ size={context?.size}
24
+ {...rest}
25
+ >
26
+ {children}
27
+ </Label>
28
+ );
29
+ }
30
+ );
14
31
 
15
32
  export default HeaderCell;
package/src/table/Row.tsx CHANGED
@@ -1,15 +1,29 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import cl from "classnames";
3
3
 
4
- interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {}
4
+ interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
5
+ /**
6
+ * Row is selected
7
+ * @default false
8
+ */
9
+ selected?: boolean;
10
+ }
5
11
 
6
12
  export interface RowType
7
13
  extends React.ForwardRefExoticComponent<
8
14
  RowProps & React.RefAttributes<HTMLTableRowElement>
9
15
  > {}
10
16
 
11
- const Row: RowType = forwardRef(({ className, ...rest }, ref) => (
12
- <tr {...rest} ref={ref} className={cl("navds-table__row", className)} />
13
- ));
17
+ const Row: RowType = forwardRef(
18
+ ({ className, selected = false, ...rest }, ref) => (
19
+ <tr
20
+ {...rest}
21
+ ref={ref}
22
+ className={cl("navds-table__row", className, {
23
+ "navds-table__row--selected": selected,
24
+ })}
25
+ />
26
+ )
27
+ );
14
28
 
15
29
  export default Row;
@@ -1,4 +1,4 @@
1
- import React, { forwardRef } from "react";
1
+ import React, { createContext, forwardRef } from "react";
2
2
  import cl from "classnames";
3
3
  import Header, { HeaderType } from "./Header";
4
4
  import Body, { BodyType } from "./Body";
@@ -12,6 +12,11 @@ export interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
12
12
  * @default "medium"
13
13
  */
14
14
  size?: "medium" | "small";
15
+ /**
16
+ * Zebra striped table
17
+ * @default false
18
+ */
19
+ zebraStripes?: boolean;
15
20
  }
16
21
 
17
22
  export interface TableType
@@ -25,13 +30,25 @@ export interface TableType
25
30
  HeaderCell: HeaderCellType;
26
31
  }
27
32
 
28
- const Table = forwardRef(({ className, size = "medium", ...rest }, ref) => (
29
- <table
30
- {...rest}
31
- ref={ref}
32
- className={cl("navds-table", `navds-table--${size}`, className)}
33
- />
34
- )) as TableType;
33
+ export interface TableContextProps {
34
+ size: "medium" | "small";
35
+ }
36
+
37
+ export const TableContext = createContext<TableContextProps | null>(null);
38
+
39
+ const Table = forwardRef(
40
+ ({ className, zebraStripes = false, size = "medium", ...rest }, ref) => (
41
+ <TableContext.Provider value={{ size }}>
42
+ <table
43
+ {...rest}
44
+ ref={ref}
45
+ className={cl("navds-table", `navds-table--${size}`, className, {
46
+ "navds-table--zebra-stripes": zebraStripes,
47
+ })}
48
+ />
49
+ </TableContext.Provider>
50
+ )
51
+ ) as TableType;
35
52
 
36
53
  Table.Header = Header;
37
54
  Table.Body = Body;
@@ -1,6 +1,6 @@
1
- import React from "react";
1
+ import React, { useState } from "react";
2
2
  import { Table } from "../index";
3
- import { Alert, Link } from "@navikt/ds-react";
3
+ import { Alert, Checkbox, Link } from "@navikt/ds-react";
4
4
 
5
5
  export default {
6
6
  title: "ds-react/table",
@@ -8,70 +8,46 @@ export default {
8
8
  };
9
9
 
10
10
  export const All = () => {
11
+ const TableComponent = (props) => (
12
+ <Table {...props}>
13
+ <Table.Header>
14
+ <Table.Row>
15
+ <Table.HeaderCell>ID</Table.HeaderCell>
16
+ <Table.HeaderCell>Fornavn</Table.HeaderCell>
17
+ <Table.HeaderCell>Etternavn</Table.HeaderCell>
18
+ <Table.HeaderCell>Rolle</Table.HeaderCell>
19
+ </Table.Row>
20
+ </Table.Header>
21
+ <Table.Body>
22
+ <Table.Row>
23
+ <Table.HeaderCell>1</Table.HeaderCell>
24
+ <Table.DataCell>Jean-Luc</Table.DataCell>
25
+ <Table.DataCell>Picard</Table.DataCell>
26
+ <Table.DataCell>Kaptein</Table.DataCell>
27
+ </Table.Row>
28
+ <Table.Row>
29
+ <Table.HeaderCell>2</Table.HeaderCell>
30
+ <Table.DataCell>William</Table.DataCell>
31
+ <Table.DataCell>Riker</Table.DataCell>
32
+ <Table.DataCell>Kommandør</Table.DataCell>
33
+ </Table.Row>
34
+ <Table.Row>
35
+ <Table.HeaderCell>3</Table.HeaderCell>
36
+ <Table.DataCell>Geordi</Table.DataCell>
37
+ <Table.DataCell>La Forge</Table.DataCell>
38
+ <Table.DataCell>Sjefsingeniør</Table.DataCell>
39
+ </Table.Row>
40
+ </Table.Body>
41
+ </Table>
42
+ );
11
43
  return (
12
44
  <>
13
45
  <h1>Table</h1>
14
- <Table>
15
- <Table.Header>
16
- <Table.Row>
17
- <Table.HeaderCell>ID</Table.HeaderCell>
18
- <Table.HeaderCell>Fornavn</Table.HeaderCell>
19
- <Table.HeaderCell>Etternavn</Table.HeaderCell>
20
- <Table.HeaderCell>Rolle</Table.HeaderCell>
21
- </Table.Row>
22
- </Table.Header>
23
- <Table.Body>
24
- <Table.Row>
25
- <Table.HeaderCell>1</Table.HeaderCell>
26
- <Table.DataCell>Jean-Luc</Table.DataCell>
27
- <Table.DataCell>Picard</Table.DataCell>
28
- <Table.DataCell>Kaptein</Table.DataCell>
29
- </Table.Row>
30
- <Table.Row>
31
- <Table.HeaderCell>2</Table.HeaderCell>
32
- <Table.DataCell>William</Table.DataCell>
33
- <Table.DataCell>Riker</Table.DataCell>
34
- <Table.DataCell>Kommandør</Table.DataCell>
35
- </Table.Row>
36
- <Table.Row>
37
- <Table.HeaderCell>3</Table.HeaderCell>
38
- <Table.DataCell>Geordi</Table.DataCell>
39
- <Table.DataCell>La Forge</Table.DataCell>
40
- <Table.DataCell>Sjefsingeniør</Table.DataCell>
41
- </Table.Row>
42
- </Table.Body>
43
- </Table>
46
+ <TableComponent />
47
+ <h2>Zebra</h2>
48
+ <TableComponent zebraStripes />
44
49
  <h2>Small Table</h2>
45
- <Table size="small">
46
- <Table.Header>
47
- <Table.Row>
48
- <Table.HeaderCell>ID</Table.HeaderCell>
49
- <Table.HeaderCell>Fornavn</Table.HeaderCell>
50
- <Table.HeaderCell>Etternavn</Table.HeaderCell>
51
- <Table.HeaderCell>Rolle</Table.HeaderCell>
52
- </Table.Row>
53
- </Table.Header>
54
- <Table.Body>
55
- <Table.Row>
56
- <Table.HeaderCell>1</Table.HeaderCell>
57
- <Table.DataCell>Jean-Luc</Table.DataCell>
58
- <Table.DataCell>Picard</Table.DataCell>
59
- <Table.DataCell>Kaptein</Table.DataCell>
60
- </Table.Row>
61
- <Table.Row>
62
- <Table.HeaderCell>2</Table.HeaderCell>
63
- <Table.DataCell>William</Table.DataCell>
64
- <Table.DataCell>Riker</Table.DataCell>
65
- <Table.DataCell>Kommandør</Table.DataCell>
66
- </Table.Row>
67
- <Table.Row>
68
- <Table.HeaderCell>3</Table.HeaderCell>
69
- <Table.DataCell>Geordi</Table.DataCell>
70
- <Table.DataCell>La Forge</Table.DataCell>
71
- <Table.DataCell>Sjefsingeniør</Table.DataCell>
72
- </Table.Row>
73
- </Table.Body>
74
- </Table>
50
+ <TableComponent size="small" />
75
51
  <h2>Table with divs</h2>
76
52
  <Alert variant="warning">
77
53
  Obs! Hvis man skal bygge tabeller uten å bruke vanlig {"<tabell> "}
@@ -87,48 +63,48 @@ export const All = () => {
87
63
  <div className="navds-table" role="table">
88
64
  <div className="navds-table__header" role="rowgroup">
89
65
  <div className="navds-table__row" role="row">
90
- <div className="navds-table__cell" role="columnheader">
66
+ <div className="navds-table__header-cell" role="columnheader">
91
67
  Fornavn
92
68
  </div>
93
- <div className="navds-table__cell" role="columnheader">
69
+ <div className="navds-table__header-cell" role="columnheader">
94
70
  Etternavn
95
71
  </div>
96
- <div className="navds-table__cell" role="columnheader">
72
+ <div className="navds-table__header-cell" role="columnheader">
97
73
  Rolle
98
74
  </div>
99
75
  </div>
100
76
  </div>
101
77
  <div className="navds-table__body" role="rowgroup">
102
78
  <div className="navds-table__row" role="row">
103
- <div className="navds-table__cell" role="cell">
79
+ <div className="navds-table__data-cell" role="cell">
104
80
  Jean-Luc
105
81
  </div>
106
- <div className="navds-table__cell" role="cell">
82
+ <div className="navds-table__data-cell" role="cell">
107
83
  Picard
108
84
  </div>
109
- <div className="navds-table__cell" role="cell">
85
+ <div className="navds-table__data-cell" role="cell">
110
86
  Kaptein
111
87
  </div>
112
88
  </div>
113
89
  <div className="navds-table__row" role="row">
114
- <div className="navds-table__cell" role="cell">
90
+ <div className="navds-table__data-cell" role="cell">
115
91
  William
116
92
  </div>
117
- <div className="navds-table__cell" role="cell">
93
+ <div className="navds-table__data-cell" role="cell">
118
94
  Riker
119
95
  </div>
120
- <div className="navds-table__cell" role="cell">
96
+ <div className="navds-table__data-cell" role="cell">
121
97
  Kommandør
122
98
  </div>
123
99
  </div>
124
100
  <div className="navds-table__row" role="row">
125
- <div className="navds-table__cell" role="cell">
101
+ <div className="navds-table__data-cell" role="cell">
126
102
  Geordi
127
103
  </div>
128
- <div className="navds-table__cell" role="cell">
104
+ <div className="navds-table__data-cell" role="cell">
129
105
  La Forge
130
106
  </div>
131
- <div className="navds-table__cell" role="cell">
107
+ <div className="navds-table__data-cell" role="cell">
132
108
  Sjefsingeniør
133
109
  </div>
134
110
  </div>
@@ -137,3 +113,110 @@ export const All = () => {
137
113
  </>
138
114
  );
139
115
  };
116
+
117
+ export const Selection = () => (
118
+ <>
119
+ <h1>Selection</h1>
120
+ <h2>Medium</h2>
121
+ <SelectionTable />
122
+ <h2>Small</h2>
123
+ <SelectionTable size="small" />
124
+ </>
125
+ );
126
+
127
+ const SelectionTable = ({ size = "medium" }: { size?: "small" | "medium" }) => {
128
+ const useToggleList = (initialState) => {
129
+ const [list, setList] = useState(initialState);
130
+
131
+ return [
132
+ list,
133
+ (value) =>
134
+ setList((list) =>
135
+ list.includes(value)
136
+ ? list.filter((id) => id !== value)
137
+ : [...list, value]
138
+ ),
139
+ ];
140
+ };
141
+
142
+ const [selectedRows, toggleSelectedRow] = useToggleList([]);
143
+
144
+ return (
145
+ <Table size={size}>
146
+ <Table.Body>
147
+ <Table.Row>
148
+ <Table.DataCell>
149
+ <Checkbox
150
+ size={size}
151
+ checked={selectedRows.includes("all")}
152
+ onChange={() => toggleSelectedRow("all")}
153
+ >
154
+ Select all
155
+ </Checkbox>
156
+ </Table.DataCell>
157
+ <Table.HeaderCell scope="col">Name</Table.HeaderCell>
158
+ <Table.HeaderCell scope="col">Age</Table.HeaderCell>
159
+ <Table.HeaderCell scope="col">Country</Table.HeaderCell>
160
+ <Table.HeaderCell scope="col">Points</Table.HeaderCell>
161
+ </Table.Row>
162
+ <Table.Row selected={selectedRows.includes("1")}>
163
+ <Table.DataCell>
164
+ <Checkbox
165
+ size={size}
166
+ hideLabel
167
+ checked={selectedRows.includes("1")}
168
+ onChange={() => toggleSelectedRow("1")}
169
+ aria-labelledby={`x_r1-${size}`}
170
+ >
171
+ {" "}
172
+ </Checkbox>
173
+ </Table.DataCell>
174
+ <Table.HeaderCell scope="row">
175
+ <span id={`x_r1-${size}`}>Donald Smith</span>
176
+ </Table.HeaderCell>
177
+ <Table.DataCell>32</Table.DataCell>
178
+ <Table.DataCell>USA</Table.DataCell>
179
+ <Table.DataCell>38</Table.DataCell>
180
+ </Table.Row>
181
+ <Table.Row selected={selectedRows.includes("2")}>
182
+ <Table.DataCell>
183
+ <Checkbox
184
+ size={size}
185
+ hideLabel
186
+ checked={selectedRows.includes("2")}
187
+ onChange={() => toggleSelectedRow("2")}
188
+ aria-labelledby={`x_r2-${size}`}
189
+ >
190
+ {" "}
191
+ </Checkbox>
192
+ </Table.DataCell>
193
+ <Table.HeaderCell scope="row">
194
+ <span id={`x_r2-${size}`}>Preben Aalborg</span>
195
+ </Table.HeaderCell>
196
+ <Table.DataCell>44</Table.DataCell>
197
+ <Table.DataCell>Denmark</Table.DataCell>
198
+ <Table.DataCell>11</Table.DataCell>
199
+ </Table.Row>
200
+ <Table.Row selected={selectedRows.includes("3")}>
201
+ <Table.DataCell>
202
+ <Checkbox
203
+ size={size}
204
+ hideLabel
205
+ checked={selectedRows.includes("3")}
206
+ onChange={() => toggleSelectedRow("3")}
207
+ aria-labelledby={`x_r3-${size}`}
208
+ >
209
+ {" "}
210
+ </Checkbox>
211
+ </Table.DataCell>
212
+ <Table.HeaderCell scope="row">
213
+ <span id={`x_r3-${size}`}>Rudolph Bachenmeier</span>
214
+ </Table.HeaderCell>
215
+ <Table.DataCell>32</Table.DataCell>
216
+ <Table.DataCell>Germany</Table.DataCell>
217
+ <Table.DataCell>70</Table.DataCell>
218
+ </Table.Row>
219
+ </Table.Body>
220
+ </Table>
221
+ );
222
+ };