@navikt/ds-react 0.17.12 → 0.17.15

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.
Files changed (66) hide show
  1. package/cjs/index.js +2 -0
  2. package/cjs/stepper/Step.js +63 -0
  3. package/cjs/stepper/Stepper.js +60 -0
  4. package/cjs/stepper/index.js +23 -0
  5. package/cjs/stepper/package.json +6 -0
  6. package/cjs/table/ExpandableRow.js +76 -0
  7. package/cjs/table/Table.js +2 -0
  8. package/cjs/tabs/Tab.js +61 -0
  9. package/cjs/tabs/TabList.js +108 -0
  10. package/cjs/tabs/TabPanel.js +47 -0
  11. package/cjs/tabs/Tabs.js +58 -0
  12. package/cjs/tabs/index.js +8 -0
  13. package/cjs/tabs/package.json +6 -0
  14. package/esm/index.d.ts +2 -0
  15. package/esm/index.js +2 -0
  16. package/esm/index.js.map +1 -1
  17. package/esm/stepper/Step.d.ts +16 -0
  18. package/esm/stepper/Step.js +36 -0
  19. package/esm/stepper/Step.js.map +1 -0
  20. package/esm/stepper/Stepper.d.ts +31 -0
  21. package/esm/stepper/Stepper.js +32 -0
  22. package/esm/stepper/Stepper.js.map +1 -0
  23. package/esm/stepper/index.d.ts +2 -0
  24. package/esm/stepper/index.js +3 -0
  25. package/esm/stepper/index.js.map +1 -0
  26. package/esm/table/ExpandableRow.d.ts +31 -0
  27. package/esm/table/ExpandableRow.js +49 -0
  28. package/esm/table/ExpandableRow.js.map +1 -0
  29. package/esm/table/Row.d.ts +1 -1
  30. package/esm/table/Table.d.ts +2 -0
  31. package/esm/table/Table.js +2 -0
  32. package/esm/table/Table.js.map +1 -1
  33. package/esm/tabs/Tab.d.ts +24 -0
  34. package/esm/tabs/Tab.js +34 -0
  35. package/esm/tabs/Tab.js.map +1 -0
  36. package/esm/tabs/TabList.d.ts +14 -0
  37. package/esm/tabs/TabList.js +81 -0
  38. package/esm/tabs/TabList.js.map +1 -0
  39. package/esm/tabs/TabPanel.d.ts +14 -0
  40. package/esm/tabs/TabPanel.js +20 -0
  41. package/esm/tabs/TabPanel.js.map +1 -0
  42. package/esm/tabs/Tabs.d.ts +43 -0
  43. package/esm/tabs/Tabs.js +30 -0
  44. package/esm/tabs/Tabs.js.map +1 -0
  45. package/esm/tabs/index.d.ts +2 -0
  46. package/esm/tabs/index.js +2 -0
  47. package/esm/tabs/index.js.map +1 -0
  48. package/package.json +3 -2
  49. package/src/index.ts +2 -0
  50. package/src/step-indicator/stories/step-indicator.stories.mdx +1 -1
  51. package/src/stepper/Step.tsx +59 -0
  52. package/src/stepper/Stepper.tsx +73 -0
  53. package/src/stepper/index.ts +2 -0
  54. package/src/stepper/stories/Example.tsx +28 -0
  55. package/src/stepper/stories/stepper.stories.mdx +61 -0
  56. package/src/stepper/stories/stepper.stories.tsx +54 -0
  57. package/src/table/ExpandableRow.tsx +115 -0
  58. package/src/table/Row.tsx +1 -1
  59. package/src/table/Table.tsx +3 -0
  60. package/src/table/stories/table-expandable.stories.tsx +201 -0
  61. package/src/tabs/Tab.tsx +79 -0
  62. package/src/tabs/TabList.tsx +127 -0
  63. package/src/tabs/TabPanel.tsx +30 -0
  64. package/src/tabs/Tabs.stories.tsx +188 -0
  65. package/src/tabs/Tabs.tsx +89 -0
  66. package/src/tabs/index.ts +2 -0
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ import { StepperStepType } from "./Step";
3
+ export interface StepperProps extends React.HTMLAttributes<HTMLOListElement> {
4
+ /**
5
+ * <Stepper.Step /> elements
6
+ */
7
+ children: React.ReactNode;
8
+ /**
9
+ * Adds classname to wrapper
10
+ */
11
+ className?: string;
12
+ /**
13
+ * Current active step index
14
+ */
15
+ activeStep: number;
16
+ /**
17
+ * Callback for clicked step index
18
+ */
19
+ onStepChange?: (step: number) => void;
20
+ }
21
+ interface StepperComponent extends React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLOListElement>> {
22
+ Step: StepperStepType;
23
+ }
24
+ interface StepperContextProps {
25
+ activeStep: number;
26
+ onStepChange: (step: number) => void;
27
+ lastIndex: number;
28
+ }
29
+ export declare const StepperContext: React.Context<StepperContextProps | null>;
30
+ declare const Stepper: StepperComponent;
31
+ export default Stepper;
@@ -0,0 +1,32 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { createContext, forwardRef } from "react";
13
+ import cl from "classnames";
14
+ import Step from "./Step";
15
+ export const StepperContext = createContext(null);
16
+ const Stepper = forwardRef((_a, ref) => {
17
+ var { children, className, activeStep, onStepChange = () => { } } = _a, rest = __rest(_a, ["children", "className", "activeStep", "onStepChange"]);
18
+ return (React.createElement("ol", Object.assign({}, rest, { ref: ref, className: cl("navds-stepper", className) }),
19
+ React.createElement(StepperContext.Provider, { value: {
20
+ activeStep,
21
+ onStepChange,
22
+ lastIndex: React.Children.count(children),
23
+ } }, React.Children.map(children, (step, index) => {
24
+ var _a, _b;
25
+ return (React.createElement("li", { className: cl("navds-stepper__step-wrapper"), key: index + ((_b = (_a = children === null || children === void 0 ? void 0 : children.toString) === null || _a === void 0 ? void 0 : _a.call(children)) !== null && _b !== void 0 ? _b : "") }, React.isValidElement(step)
26
+ ? React.cloneElement(step, Object.assign(Object.assign({}, step.props), { index }))
27
+ : step));
28
+ }))));
29
+ });
30
+ Stepper.Step = Step;
31
+ export default Stepper;
32
+ //# sourceMappingURL=Stepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.js","sourceRoot":"","sources":["../../src/stepper/Stepper.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAA2C,MAAM,QAAQ,CAAC;AAkCjE,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAE9E,MAAM,OAAO,GAAqB,UAAU,CAC1C,CACE,EAAqE,EACrE,GAAG,EACH,EAAE;QAFF,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,OAAW,EAAN,IAAI,cAAnE,uDAAqE,CAAF;IAGnE,OAAO,CACL,4CAAQ,IAAI,IAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC;QAC/D,oBAAC,cAAc,CAAC,QAAQ,IACtB,KAAK,EAAE;gBACL,UAAU;gBACV,YAAY;gBACZ,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC1C,IAEA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;YAC5C,OAAO,CACL,4BACE,SAAS,EAAE,EAAE,CAAC,6BAA6B,CAAC,EAC5C,GAAG,EAAE,KAAK,GAAG,CAAC,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,wDAAI,mCAAI,EAAE,CAAC,IAE1C,KAAK,CAAC,cAAc,CAAmB,IAAI,CAAC;gBAC3C,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,kCAAO,IAAI,CAAC,KAAK,KAAE,KAAK,IAAG;gBACpD,CAAC,CAAC,IAAI,CACL,CACN,CAAC;QACJ,CAAC,CAAC,CACsB,CACvB,CACN,CAAC;AACJ,CAAC,CACkB,CAAC;AAEtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAEpB,eAAe,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as Stepper } from "./Stepper";
2
+ export * from "./Stepper";
@@ -0,0 +1,3 @@
1
+ export { default as Stepper } from "./Stepper";
2
+ export * from "./Stepper";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,cAAc,WAAW,CAAC"}
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ import { RowProps } from "./Row";
3
+ interface ExpandableRowProps extends RowProps {
4
+ /**
5
+ * Content of the expanded row
6
+ */
7
+ content: React.ReactNode;
8
+ /**
9
+ * Placement of toggle button
10
+ * @default "left"
11
+ */
12
+ togglePlacement?: "left" | "right";
13
+ /**
14
+ * Opens component if 'true', closes if 'false'
15
+ * Using this props removes automatic control of open-state
16
+ */
17
+ open?: boolean;
18
+ /**
19
+ * Opened state default
20
+ * @default false
21
+ */
22
+ defaultOpen?: boolean;
23
+ /**
24
+ * Change handler for open
25
+ */
26
+ onOpenChange?: (open: boolean) => void;
27
+ }
28
+ export interface ExpandableRowType extends React.ForwardRefExoticComponent<ExpandableRowProps & React.RefAttributes<HTMLTableRowElement>> {
29
+ }
30
+ declare const ExpandableRow: ExpandableRowType;
31
+ export default ExpandableRow;
@@ -0,0 +1,49 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef, useState } from "react";
13
+ import cl from "classnames";
14
+ import Row from "./Row";
15
+ import DataCell from "./DataCell";
16
+ import { UnmountClosed } from "react-collapse";
17
+ import { Expand, ExpandFilled } from "@navikt/ds-icons";
18
+ import { useId } from "..";
19
+ const ExpandableRow = forwardRef((_a, ref) => {
20
+ var { className, children, content, togglePlacement = "left", defaultOpen = false, open, onOpenChange } = _a, rest = __rest(_a, ["className", "children", "content", "togglePlacement", "defaultOpen", "open", "onOpenChange"]);
21
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
22
+ const id = `expandable-${useId()}`;
23
+ const isOpen = open !== null && open !== void 0 ? open : internalOpen;
24
+ return (React.createElement(React.Fragment, null,
25
+ React.createElement(Row, Object.assign({}, rest, { ref: ref, className: cl("navds-table__expandable-row", className, {
26
+ "navds-table__expandable-row--open": isOpen,
27
+ }) }),
28
+ togglePlacement === "right" && children,
29
+ React.createElement(DataCell, { className: cl("navds-table__toggle-expand-cell", {
30
+ "navds-table__toggle-expand-cell--open": isOpen,
31
+ }) },
32
+ React.createElement("button", { className: "navds-table__toggle-expand-button", "aria-controls": id, "aria-expanded": isOpen, onClick: () => {
33
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(!isOpen);
34
+ if (open === undefined) {
35
+ setInternalOpen((open) => !open);
36
+ }
37
+ } },
38
+ React.createElement(Expand, { className: "navds-table__expandable-icon", title: "Vis mer" }),
39
+ React.createElement(ExpandFilled, { className: "navds-table__expandable-icon navds-table__expandable-icon--filled", title: "Vis mindre" }))),
40
+ togglePlacement === "left" && children),
41
+ React.createElement("tr", { className: "navds-table__expanded-row", "aria-hidden": !isOpen, id: id },
42
+ React.createElement("td", { colSpan: 999, className: "navds-table__expanded-row-cell" },
43
+ React.createElement(UnmountClosed, { isOpened: isOpen, theme: {
44
+ collapse: "navds-table__expanded-row-collapse",
45
+ content: "navds-table__expanded-row-content",
46
+ } }, content)))));
47
+ });
48
+ export default ExpandableRow;
49
+ //# sourceMappingURL=ExpandableRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableRow.js","sourceRoot":"","sources":["../../src/table/ExpandableRow.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,GAAiB,MAAM,OAAO,CAAC;AACtC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAiC3B,MAAM,aAAa,GAAsB,UAAU,CACjD,CACE,EASC,EACD,GAAG,EACH,EAAE;QAXF,EACE,SAAS,EACT,QAAQ,EACR,OAAO,EACP,eAAe,GAAG,MAAM,EACxB,WAAW,GAAG,KAAK,EACnB,IAAI,EACJ,YAAY,OAEb,EADI,IAAI,cART,8FASC,CADQ;IAIT,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAU,WAAW,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,cAAc,KAAK,EAAE,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY,CAAC;IAEpC,OAAO,CACL;QACE,oBAAC,GAAG,oBACE,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,SAAS,EAAE;gBACtD,mCAAmC,EAAE,MAAM;aAC5C,CAAC;YAED,eAAe,KAAK,OAAO,IAAI,QAAQ;YACxC,oBAAC,QAAQ,IACP,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE;oBAC/C,uCAAuC,EAAE,MAAM;iBAChD,CAAC;gBAEF,gCACE,SAAS,EAAC,mCAAmC,mBAC9B,EAAE,mBACF,MAAM,EACrB,OAAO,EAAE,GAAG,EAAE;wBACZ,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,MAAM,CAAC,CAAC;wBACxB,IAAI,IAAI,KAAK,SAAS,EAAE;4BACtB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;yBAClC;oBACH,CAAC;oBAED,oBAAC,MAAM,IACL,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAC,SAAS,GACf;oBACF,oBAAC,YAAY,IACX,SAAS,EAAC,mEAAmE,EAC7E,KAAK,EAAC,YAAY,GAClB,CACK,CACA;YACV,eAAe,KAAK,MAAM,IAAI,QAAQ,CACnC;QACN,4BAAI,SAAS,EAAC,2BAA2B,iBAAc,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACpE,4BAAI,OAAO,EAAE,GAAG,EAAE,SAAS,EAAC,gCAAgC;gBAC1D,oBAAC,aAAa,IACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;wBACL,QAAQ,EAAE,oCAAoC;wBAC9C,OAAO,EAAE,mCAAmC;qBAC7C,IAEA,OAAO,CACM,CACb,CACF,CACJ,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
2
+ export interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
3
3
  /**
4
4
  * Row is selected
5
5
  * @default false
@@ -5,6 +5,7 @@ import { RowType } from "./Row";
5
5
  import { ColumnHeaderType } from "./ColumnHeader";
6
6
  import { HeaderCellType } from "./HeaderCell";
7
7
  import { DataCellType } from "./DataCell";
8
+ import { ExpandableRowType } from "./ExpandableRow";
8
9
  export interface SortState {
9
10
  orderBy: string;
10
11
  direction: "ascending" | "descending";
@@ -36,6 +37,7 @@ export interface TableType extends React.ForwardRefExoticComponent<TableProps &
36
37
  DataCell: DataCellType;
37
38
  HeaderCell: HeaderCellType;
38
39
  ColumnHeader: ColumnHeaderType;
40
+ ExpandableRow: ExpandableRowType;
39
41
  }
40
42
  export interface TableContextProps {
41
43
  size: "medium" | "small";
@@ -17,6 +17,7 @@ import Row from "./Row";
17
17
  import ColumnHeader from "./ColumnHeader";
18
18
  import HeaderCell from "./HeaderCell";
19
19
  import DataCell from "./DataCell";
20
+ import ExpandableRow from "./ExpandableRow";
20
21
  export const TableContext = createContext(null);
21
22
  const Table = forwardRef((_a, ref) => {
22
23
  var { className, zebraStripes = false, size = "medium", onSortChange, sort } = _a, rest = __rest(_a, ["className", "zebraStripes", "size", "onSortChange", "sort"]);
@@ -31,5 +32,6 @@ Table.Row = Row;
31
32
  Table.ColumnHeader = ColumnHeader;
32
33
  Table.HeaderCell = HeaderCell;
33
34
  Table.DataCell = DataCell;
35
+ Table.ExpandableRow = ExpandableRow;
34
36
  export default Table;
35
37
  //# sourceMappingURL=Table.js.map
@@ -1 +1 @@
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,YAAkC,MAAM,gBAAgB,CAAC;AAChE,OAAO,UAA8B,MAAM,cAAc,CAAC;AAC1D,OAAO,QAA0B,MAAM,YAAY,CAAC;AA+CpD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E,MAAM,KAAK,GAAG,UAAU,CACtB,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,SAAS,EACT,YAAY,GAAG,KAAK,EACpB,IAAI,GAAG,QAAQ,EACf,YAAY,EACZ,IAAI,OAEL,EADI,IAAI,cANT,6DAOC,CADQ;IAGN,OAAA,CACH,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QACxD,+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,YAAY,GAAG,YAAY,CAAC;AAClC,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,YAAkC,MAAM,gBAAgB,CAAC;AAChE,OAAO,UAA8B,MAAM,cAAc,CAAC;AAC1D,OAAO,QAA0B,MAAM,YAAY,CAAC;AACpD,OAAO,aAAoC,MAAM,iBAAiB,CAAC;AAgDnE,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E,MAAM,KAAK,GAAG,UAAU,CACtB,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,SAAS,EACT,YAAY,GAAG,KAAK,EACpB,IAAI,GAAG,QAAQ,EACf,YAAY,EACZ,IAAI,OAEL,EADI,IAAI,cANT,6DAOC,CADQ;IAGN,OAAA,CACH,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QACxD,+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,YAAY,GAAG,YAAY,CAAC;AAClC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC1B,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;AAEpC,eAAe,KAAK,CAAC"}
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import { OverridableComponent } from "..";
3
+ export interface TabProps extends Omit<React.HTMLAttributes<HTMLButtonElement>, "children"> {
4
+ /**
5
+ * Content
6
+ */
7
+ label?: React.ReactNode;
8
+ /**
9
+ * Icon
10
+ */
11
+ icon?: React.ReactNode;
12
+ /**
13
+ * Value for state-handling
14
+ */
15
+ value: string;
16
+ /**
17
+ * Icon position
18
+ * @default "left"
19
+ */
20
+ iconPosition?: "left" | "top";
21
+ }
22
+ export declare type TabType = OverridableComponent<TabProps, HTMLButtonElement>;
23
+ declare const Tab: TabType;
24
+ export default Tab;
@@ -0,0 +1,34 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import * as RadixTabs from "@radix-ui/react-tabs";
13
+ import cl from "classnames";
14
+ import React, { forwardRef, useContext } from "react";
15
+ import { Label } from "..";
16
+ import { TabsContext } from "./Tabs";
17
+ const Tab = forwardRef((_a, ref) => {
18
+ var _b;
19
+ var { className, as: Component = "button", label, icon, iconPosition, value } = _a, rest = __rest(_a, ["className", "as", "label", "icon", "iconPosition", "value"]);
20
+ const context = useContext(TabsContext);
21
+ if (!label && !icon) {
22
+ console.error("<Tabs.Tab/> needs label/icon");
23
+ return null;
24
+ }
25
+ return (React.createElement(RadixTabs.Trigger, { value: value, asChild: true },
26
+ React.createElement(Component, Object.assign({ ref: ref, className: cl("navds-tabs__tab", `navds-tabs__tab--${(_b = context === null || context === void 0 ? void 0 : context.size) !== null && _b !== void 0 ? _b : "medium"}`, `navds-tabs__tab-icon--${iconPosition}`, className, {
27
+ "navds-tabs__tab--icon-only": icon && !label,
28
+ }) }, rest),
29
+ React.createElement(Label, { as: "span", className: "navds-tabs__tab-inner", size: context === null || context === void 0 ? void 0 : context.size },
30
+ icon,
31
+ label))));
32
+ });
33
+ export default Tab;
34
+ //# sourceMappingURL=Tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../src/tabs/Tab.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,KAAK,EAAwB,MAAM,IAAI,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAyBrC,MAAM,GAAG,GAAY,UAAU,CAC7B,CACE,EAQC,EACD,GAAG,EACH,EAAE;;QAVF,EACE,SAAS,EACT,EAAE,EAAE,SAAS,GAAG,QAAQ,EACxB,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,KAAK,OAEN,EADI,IAAI,cAPT,6DAQC,CADQ;IAIT,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,oBAAC,SAAS,CAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO;QACtC,oBAAC,SAAS,kBACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,iBAAiB,EACjB,oBAAoB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,mCAAI,QAAQ,EAAE,EAC/C,yBAAyB,YAAY,EAAE,EACvC,SAAS,EACT;gBACE,4BAA4B,EAAE,IAAI,IAAI,CAAC,KAAK;aAC7C,CACF,IACG,IAAI;YAER,oBAAC,KAAK,IACJ,EAAE,EAAC,MAAM,EACT,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI;gBAElB,IAAI;gBACJ,KAAK,CACA,CACE,CACM,CACrB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ export interface ListProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * Tab elements
5
+ */
6
+ children: React.ReactNode;
7
+ /**
8
+ * Loops back to start when navigating past last item
9
+ */
10
+ loop?: boolean;
11
+ }
12
+ export declare type ListType = React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLDivElement>>;
13
+ declare const List: ListType;
14
+ export default List;
@@ -0,0 +1,81 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { debounce } from "@material-ui/core";
13
+ import { Back, Next } from "@navikt/ds-icons";
14
+ import { TabsList } from "@radix-ui/react-tabs";
15
+ import cl from "classnames";
16
+ import React, { forwardRef, useEffect, useMemo, useRef, useState } from "react";
17
+ import mergeRefs from "react-merge-refs";
18
+ const List = forwardRef((_a, ref) => {
19
+ var { className } = _a, rest = __rest(_a, ["className"]);
20
+ const listRef = useRef(null);
21
+ const mergedRef = mergeRefs([listRef, ref]);
22
+ const [displayScroll, setDisplayScroll] = useState({
23
+ start: false,
24
+ end: false,
25
+ });
26
+ const updateScrollButtonState = useMemo(() => debounce(() => {
27
+ var _a;
28
+ if (!(listRef === null || listRef === void 0 ? void 0 : listRef.current))
29
+ return;
30
+ const { scrollWidth, clientWidth } = listRef === null || listRef === void 0 ? void 0 : listRef.current;
31
+ let showStartScroll;
32
+ let showEndScroll;
33
+ const scrollLeft = (_a = listRef === null || listRef === void 0 ? void 0 : listRef.current) === null || _a === void 0 ? void 0 : _a.scrollLeft;
34
+ // use 1 for the potential rounding error with browser zooms.
35
+ showStartScroll = scrollLeft > 1;
36
+ showEndScroll = scrollLeft < scrollWidth - clientWidth - 1;
37
+ setDisplayScroll((displayScroll) => showStartScroll === displayScroll.start &&
38
+ showEndScroll === displayScroll.end
39
+ ? displayScroll
40
+ : { start: showStartScroll, end: showEndScroll });
41
+ }), []);
42
+ useEffect(() => {
43
+ var _a, _b, _c;
44
+ const handleResize = () => updateScrollButtonState();
45
+ const win = (_c = (_b = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument) !== null && _b !== void 0 ? _b : document) !== null && _c !== void 0 ? _c : window;
46
+ win.addEventListener("resize", handleResize);
47
+ let resizeObserver;
48
+ if (typeof ResizeObserver !== "undefined") {
49
+ resizeObserver = new ResizeObserver(handleResize);
50
+ resizeObserver.observe(listRef.current);
51
+ }
52
+ return () => {
53
+ win.removeEventListener("resize", handleResize);
54
+ if (resizeObserver) {
55
+ resizeObserver.disconnect();
56
+ }
57
+ };
58
+ }, [updateScrollButtonState]);
59
+ useEffect(() => {
60
+ updateScrollButtonState();
61
+ });
62
+ useEffect(() => {
63
+ return () => {
64
+ updateScrollButtonState.clear();
65
+ };
66
+ }, [updateScrollButtonState]);
67
+ const ScrollButton = ({ dir, hidden, }) => (React.createElement("div", { className: cl("navds-tabs__scroll-button", {
68
+ "navds-tabs__scroll-button--hidden": hidden,
69
+ }), onClick: () => {
70
+ if (!listRef.current)
71
+ return;
72
+ listRef.current.scrollLeft += dir * 100;
73
+ } }, dir === -1 ? (React.createElement(Back, { title: "scroll tilbake" })) : (React.createElement(Next, { title: "scroll neste" }))));
74
+ const showSteppers = displayScroll.end || displayScroll.start;
75
+ return (React.createElement("div", { className: "navds-tabs__tablist-wrapper" },
76
+ showSteppers && (React.createElement(ScrollButton, { dir: -1, hidden: !displayScroll.start })),
77
+ React.createElement(TabsList, Object.assign({}, rest, { ref: mergedRef, onScroll: updateScrollButtonState, className: cl("navds-tabs__tablist", className) })),
78
+ showSteppers && React.createElement(ScrollButton, { dir: 1, hidden: !displayScroll.end })));
79
+ });
80
+ export default List;
81
+ //# sourceMappingURL=TabList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabList.js","sourceRoot":"","sources":["../../src/tabs/TabList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ export interface PanelProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * Tab panel
5
+ */
6
+ children: React.ReactNode;
7
+ /**
8
+ * Value for state-handling
9
+ */
10
+ value: string;
11
+ }
12
+ export declare type PanelType = React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<HTMLDivElement>>;
13
+ declare const Panel: PanelType;
14
+ export default Panel;
@@ -0,0 +1,20 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { TabsContent } from "@radix-ui/react-tabs";
13
+ import cl from "classnames";
14
+ import React, { forwardRef } from "react";
15
+ const Panel = forwardRef((_a, ref) => {
16
+ var { className } = _a, rest = __rest(_a, ["className"]);
17
+ return (React.createElement(TabsContent, Object.assign({}, rest, { ref: ref, className: cl("navds-tabs__tabpanel", className) })));
18
+ });
19
+ export default Panel;
20
+ //# sourceMappingURL=TabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabPanel.js","sourceRoot":"","sources":["../../src/tabs/TabPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAiB1C,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAAsB,EAAE,GAAG,EAAE,EAAE;QAA/B,EAAE,SAAS,OAAW,EAAN,IAAI,cAApB,aAAsB,CAAF;IAAY,OAAA,CAC/B,oBAAC,WAAW,oBACN,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,IAChD,CACH,CAAA;CAAA,CACW,CAAC;AAEf,eAAe,KAAK,CAAC"}
@@ -0,0 +1,43 @@
1
+ import React, { HTMLAttributes } from "react";
2
+ import { TabType } from "./Tab";
3
+ import { ListType } from "./TabList";
4
+ import { PanelType } from "./TabPanel";
5
+ export interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "dir"> {
6
+ /**
7
+ * Tabs elements
8
+ */
9
+ children: React.ReactNode;
10
+ /**
11
+ * Changes padding and font-size
12
+ * @default "medium"
13
+ */
14
+ size?: "medium" | "small";
15
+ /**
16
+ * onChange
17
+ */
18
+ onChange?: (value: string) => void;
19
+ /**
20
+ * Controlled selected value
21
+ */
22
+ value?: string;
23
+ /**
24
+ * If not controlled, a default-value needs to be set
25
+ */
26
+ defaultValue?: string;
27
+ /**
28
+ * Automatically activates tab on focus/navigation
29
+ * @default false
30
+ */
31
+ selectionFollowsFocus?: boolean;
32
+ }
33
+ interface TabsComponent extends React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>> {
34
+ Tab: TabType;
35
+ List: ListType;
36
+ Panel: PanelType;
37
+ }
38
+ interface TabsContextProps {
39
+ size: "medium" | "small";
40
+ }
41
+ export declare const TabsContext: React.Context<TabsContextProps | null>;
42
+ declare const Tabs: TabsComponent;
43
+ export default Tabs;
@@ -0,0 +1,30 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import cl from "classnames";
13
+ import React, { createContext, forwardRef } from "react";
14
+ import * as RadixTabs from "@radix-ui/react-tabs";
15
+ import Tab from "./Tab";
16
+ import List from "./TabList";
17
+ import Panel from "./TabPanel";
18
+ export const TabsContext = createContext(null);
19
+ const Tabs = forwardRef((_a, ref) => {
20
+ var { className, children, onChange, size = "medium", selectionFollowsFocus = false } = _a, rest = __rest(_a, ["className", "children", "onChange", "size", "selectionFollowsFocus"]);
21
+ return (React.createElement(RadixTabs.Root, Object.assign({}, rest, { ref: ref, className: cl("navds-tabs", className, `navds-tabs--${size}`), activationMode: selectionFollowsFocus ? "automatic" : "manual", onValueChange: onChange }),
22
+ React.createElement(TabsContext.Provider, { value: {
23
+ size,
24
+ } }, children)));
25
+ });
26
+ Tabs.Tab = Tab;
27
+ Tabs.List = List;
28
+ Tabs.Panel = Panel;
29
+ export default Tabs;
30
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../src/tabs/Tabs.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,GAAgB,MAAM,OAAO,CAAC;AACrC,OAAO,IAAkB,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAoB,MAAM,YAAY,CAAC;AA6C9C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAExE,MAAM,IAAI,GAAG,UAAU,CACrB,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,qBAAqB,GAAG,KAAK,OAE9B,EADI,IAAI,cANT,sEAOC,CADQ;IAIT,OAAO,CACL,oBAAC,SAAS,CAAC,IAAI,oBACT,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,eAAe,IAAI,EAAE,CAAC,EAC7D,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAC9D,aAAa,EAAE,QAAQ;QAEvB,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;gBACL,IAAI;aACL,IAEA,QAAQ,CACY,CACR,CAClB,CAAC;AACJ,CAAC,CACe,CAAC;AAEnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAEnB,eAAe,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as Tabs, TabsProps } from "./Tabs";
2
+ export { TabProps } from "./Tab";
@@ -0,0 +1,2 @@
1
+ export { default as Tabs } from "./Tabs";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAa,MAAM,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "0.17.12",
3
+ "version": "0.17.15",
4
4
  "private": false,
5
5
  "description": "NAV designsystem react components",
6
6
  "author": "NAV Designsystem team",
@@ -37,6 +37,7 @@
37
37
  "@material-ui/core": "^4.12.3",
38
38
  "@navikt/ds-icons": "^0.8.6",
39
39
  "@popperjs/core": "^2.10.1",
40
+ "@radix-ui/react-tabs": "0.1.5",
40
41
  "@radix-ui/react-toggle-group": "0.1.5",
41
42
  "classnames": "^2.2.6",
42
43
  "react-collapse": "^5.1.0",
@@ -67,5 +68,5 @@
67
68
  "@types/react": "^17.0.30",
68
69
  "react": "^17.0.0"
69
70
  },
70
- "gitHead": "08be6c0e8b0f5fe8177db9cb2222aebe2ec317d8"
71
+ "gitHead": "c80cb199a138566285d516e8c2f5aa3993afb20f"
71
72
  }
package/src/index.ts CHANGED
@@ -16,9 +16,11 @@ export * from "./popover";
16
16
  export * from "./read-more";
17
17
  export * from "./speech-bubble";
18
18
  export * from "./step-indicator";
19
+ export * from "./stepper";
19
20
  export * from "./tag";
20
21
  export * from "./toggle-group";
21
22
  export * from "./table";
23
+ export * from "./tabs";
22
24
  export * from "./typography";
23
25
  export * from "./util";
24
26
 
@@ -28,7 +28,7 @@ Du må nå selv styre state med `activeStep` og `onStepChange`.
28
28
 
29
29
  ## responsive
30
30
 
31
- Bruk `responsive`-prop for å skjule labels med en gang StepIndicator begynner å overlfowe.
31
+ Bruk `responsive`-prop for å skjule labels med en gang StepIndicator begynner å overflowe.
32
32
 
33
33
  ```jsx
34
34
  <StepIndicator
@@ -0,0 +1,59 @@
1
+ import cl from "classnames";
2
+ import React, { forwardRef, useContext } from "react";
3
+ import { StepperContext } from ".";
4
+ import { Label, OverridableComponent } from "..";
5
+
6
+ export interface StepperStepProps
7
+ extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
8
+ /**
9
+ * Text content under indicator
10
+ */
11
+ children: string;
12
+ /**
13
+ * Handled by Stepper
14
+ */
15
+ index?: number;
16
+ }
17
+
18
+ export interface StepperStepType
19
+ extends OverridableComponent<StepperStepProps, HTMLAnchorElement> {}
20
+
21
+ const StepComponent: OverridableComponent<
22
+ StepperStepProps,
23
+ HTMLAnchorElement
24
+ > = forwardRef(
25
+ ({ className, children, as: Component = "a", index = 0, ...rest }, ref) => {
26
+ const context = useContext(StepperContext);
27
+ if (context === null) {
28
+ console.error(
29
+ "<StepIndicator.Step> has to be used within an <StepIndicator>"
30
+ );
31
+ return null;
32
+ }
33
+ const activeStep = context.activeStep === index;
34
+
35
+ return (
36
+ <Component
37
+ {...rest}
38
+ aria-current={Boolean(activeStep)}
39
+ ref={ref}
40
+ className={cl("navds-stepper__step", className, {
41
+ "navds-stepper__step--active": activeStep,
42
+ })}
43
+ onClick={(e) => {
44
+ context.onStepChange(index);
45
+ rest?.onClick?.(e);
46
+ }}
47
+ >
48
+ <Label className="navds-stepper__step-number" as="span">
49
+ {activeStep ? `${index + 1}` : index + 1}
50
+ </Label>
51
+ <Label className="navds-stepper__step-label">{children}</Label>
52
+ </Component>
53
+ );
54
+ }
55
+ );
56
+
57
+ const Step = StepComponent as StepperStepType;
58
+
59
+ export default Step;