@navikt/ds-react 0.17.10 → 0.17.13

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 (62) hide show
  1. package/cjs/help-text/HelpText.js +2 -2
  2. package/cjs/index.js +2 -0
  3. package/cjs/stepper/Step.js +63 -0
  4. package/cjs/stepper/Stepper.js +60 -0
  5. package/cjs/stepper/index.js +23 -0
  6. package/cjs/stepper/package.json +6 -0
  7. package/cjs/tabs/Tab.js +61 -0
  8. package/cjs/tabs/TabList.js +109 -0
  9. package/cjs/tabs/TabPanel.js +47 -0
  10. package/cjs/tabs/Tabs.js +58 -0
  11. package/cjs/tabs/index.js +8 -0
  12. package/cjs/tabs/package.json +6 -0
  13. package/esm/form/ConfirmationPanel.d.ts +1 -1
  14. package/esm/form/Select.d.ts +1 -1
  15. package/esm/help-text/HelpText.js +2 -2
  16. package/esm/help-text/HelpText.js.map +1 -1
  17. package/esm/index.d.ts +2 -0
  18. package/esm/index.js +2 -0
  19. package/esm/index.js.map +1 -1
  20. package/esm/stepper/Step.d.ts +16 -0
  21. package/esm/stepper/Step.js +36 -0
  22. package/esm/stepper/Step.js.map +1 -0
  23. package/esm/stepper/Stepper.d.ts +31 -0
  24. package/esm/stepper/Stepper.js +32 -0
  25. package/esm/stepper/Stepper.js.map +1 -0
  26. package/esm/stepper/index.d.ts +2 -0
  27. package/esm/stepper/index.js +3 -0
  28. package/esm/stepper/index.js.map +1 -0
  29. package/esm/tabs/Tab.d.ts +24 -0
  30. package/esm/tabs/Tab.js +34 -0
  31. package/esm/tabs/Tab.js.map +1 -0
  32. package/esm/tabs/TabList.d.ts +14 -0
  33. package/esm/tabs/TabList.js +82 -0
  34. package/esm/tabs/TabList.js.map +1 -0
  35. package/esm/tabs/TabPanel.d.ts +14 -0
  36. package/esm/tabs/TabPanel.js +20 -0
  37. package/esm/tabs/TabPanel.js.map +1 -0
  38. package/esm/tabs/Tabs.d.ts +43 -0
  39. package/esm/tabs/Tabs.js +30 -0
  40. package/esm/tabs/Tabs.js.map +1 -0
  41. package/esm/tabs/index.d.ts +2 -0
  42. package/esm/tabs/index.js +2 -0
  43. package/esm/tabs/index.js.map +1 -0
  44. package/package.json +3 -2
  45. package/src/form/ConfirmationPanel.tsx +1 -1
  46. package/src/form/Select.tsx +1 -1
  47. package/src/grid/stories/styles.css +2 -2
  48. package/src/help-text/HelpText.tsx +1 -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/tabs/Tab.tsx +79 -0
  58. package/src/tabs/TabList.tsx +127 -0
  59. package/src/tabs/TabPanel.tsx +30 -0
  60. package/src/tabs/Tabs.stories.tsx +188 -0
  61. package/src/tabs/Tabs.tsx +89 -0
  62. package/src/tabs/index.ts +2 -0
@@ -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,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,82 @@
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
+ var _a;
71
+ if (!listRef.current)
72
+ return;
73
+ (_a = listRef.current).scrollLeft && (_a.scrollLeft = listRef.current.scrollLeft + dir * 100);
74
+ } }, dir === -1 ? (React.createElement(Back, { title: "scroll tilbake" })) : (React.createElement(Next, { title: "scroll neste" }))));
75
+ const showSteppers = displayScroll.end || displayScroll.start;
76
+ return (React.createElement("div", { className: "navds-tabs__tablist-wrapper" },
77
+ showSteppers && (React.createElement(ScrollButton, { dir: -1, hidden: !displayScroll.start })),
78
+ React.createElement(TabsList, Object.assign({}, rest, { ref: mergedRef, onScroll: updateScrollButtonState, className: cl("navds-tabs__tablist", className) })),
79
+ showSteppers && React.createElement(ScrollButton, { dir: 1, hidden: !displayScroll.end })));
80
+ });
81
+ export default List;
82
+ //# 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.10",
3
+ "version": "0.17.13",
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": "85dd252e433d55be01ed0ad58396a8442af7387d"
71
+ "gitHead": "9e1b0ab1d1cc564e2eebc1c7d8d1143eaea0e71e"
71
72
  }
@@ -10,7 +10,7 @@ export interface ConfirmationPanelProps extends Partial<CheckboxProps> {
10
10
  /**
11
11
  * Checkbox label
12
12
  */
13
- label: string;
13
+ label: React.ReactNode;
14
14
  /**
15
15
  * Checked state for checkbox
16
16
  */
@@ -19,7 +19,7 @@ export interface SelectProps
19
19
  /**
20
20
  * Label for select
21
21
  */
22
- label: string;
22
+ label: React.ReactNode;
23
23
  /**
24
24
  * If enabled shows the label and description for screenreaders only
25
25
  */
@@ -1,12 +1,12 @@
1
1
  .navds-story-cell {
2
- border-radius: 0.25rem;
2
+ border-radius: var(--navds-border-radius-medium);
3
3
  background: white;
4
4
  padding: 1rem;
5
5
  }
6
6
 
7
7
  .navds-story-content-container {
8
8
  display: flex;
9
- border-radius: 0.25rem;
9
+ border-radius: var(--navds-border-radius-medium);
10
10
  justify-content: center;
11
11
  align-items: center;
12
12
  margin-bottom: 1.5rem;
@@ -42,9 +42,8 @@ const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
42
42
  className={cl(className, "navds-help-text__button")}
43
43
  type="button"
44
44
  aria-expanded={open}
45
- title={title}
46
45
  >
47
- <HelpTextIcon className="navds-help-text__icon" aria-hidden/>
46
+ <HelpTextIcon className="navds-help-text__icon" title={title} />
48
47
  </button>
49
48
  <Popover
50
49
  onClose={() => setOpen(false)}
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;
@@ -0,0 +1,73 @@
1
+ import React, { createContext, forwardRef } from "react";
2
+ import cl from "classnames";
3
+ import Step, { StepperStepProps, StepperStepType } from "./Step";
4
+
5
+ export interface StepperProps extends React.HTMLAttributes<HTMLOListElement> {
6
+ /**
7
+ * <Stepper.Step /> elements
8
+ */
9
+ children: React.ReactNode;
10
+ /**
11
+ * Adds classname to wrapper
12
+ */
13
+ className?: string;
14
+ /**
15
+ * Current active step index
16
+ */
17
+ activeStep: number;
18
+ /**
19
+ * Callback for clicked step index
20
+ */
21
+ onStepChange?: (step: number) => void;
22
+ }
23
+
24
+ interface StepperComponent
25
+ extends React.ForwardRefExoticComponent<
26
+ StepperProps & React.RefAttributes<HTMLOListElement>
27
+ > {
28
+ Step: StepperStepType;
29
+ }
30
+
31
+ interface StepperContextProps {
32
+ activeStep: number;
33
+ onStepChange: (step: number) => void;
34
+ lastIndex: number;
35
+ }
36
+
37
+ export const StepperContext = createContext<StepperContextProps | null>(null);
38
+
39
+ const Stepper: StepperComponent = forwardRef<HTMLOListElement, StepperProps>(
40
+ (
41
+ { children, className, activeStep, onStepChange = () => {}, ...rest },
42
+ ref
43
+ ) => {
44
+ return (
45
+ <ol {...rest} ref={ref} className={cl("navds-stepper", className)}>
46
+ <StepperContext.Provider
47
+ value={{
48
+ activeStep,
49
+ onStepChange,
50
+ lastIndex: React.Children.count(children),
51
+ }}
52
+ >
53
+ {React.Children.map(children, (step, index) => {
54
+ return (
55
+ <li
56
+ className={cl("navds-stepper__step-wrapper")}
57
+ key={index + (children?.toString?.() ?? "")}
58
+ >
59
+ {React.isValidElement<StepperStepProps>(step)
60
+ ? React.cloneElement(step, { ...step.props, index })
61
+ : step}
62
+ </li>
63
+ );
64
+ })}
65
+ </StepperContext.Provider>
66
+ </ol>
67
+ );
68
+ }
69
+ ) as StepperComponent;
70
+
71
+ Stepper.Step = Step;
72
+
73
+ export default Stepper;
@@ -0,0 +1,2 @@
1
+ export { default as Stepper } from "./Stepper";
2
+ export * from "./Stepper";
@@ -0,0 +1,28 @@
1
+ import React, { useState } from "react";
2
+ import { Stepper } from "..";
3
+
4
+ export const Example = (props) => {
5
+ const [activeStep, setActiveStep] = useState(
6
+ props.initialStep ? props.initialStep : 1
7
+ );
8
+
9
+ const anchorProps = {
10
+ href: "",
11
+ onClick: (e) => e.preventDefault(),
12
+ };
13
+
14
+ return (
15
+ <Stepper {...props} activeStep={activeStep} onStepChange={setActiveStep}>
16
+ <Stepper.Step {...anchorProps}>Start</Stepper.Step>
17
+ <Stepper.Step {...anchorProps}>
18
+ Sunt deserunt qui sit sunt culpa nisi
19
+ </Stepper.Step>
20
+ <Stepper.Step {...anchorProps}>
21
+ Nulla nisi pariatur nulla cupidatat elit.
22
+ </Stepper.Step>
23
+ <Stepper.Step {...anchorProps}>
24
+ Nulla laborum proident consequat laborum elit et dolore ut sunt.
25
+ </Stepper.Step>
26
+ </Stepper>
27
+ );
28
+ };