@navikt/ds-react 0.17.12 → 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.
- package/cjs/index.js +2 -0
- package/cjs/stepper/Step.js +63 -0
- package/cjs/stepper/Stepper.js +60 -0
- package/cjs/stepper/index.js +23 -0
- package/cjs/stepper/package.json +6 -0
- package/cjs/tabs/Tab.js +61 -0
- package/cjs/tabs/TabList.js +109 -0
- package/cjs/tabs/TabPanel.js +47 -0
- package/cjs/tabs/Tabs.js +58 -0
- package/cjs/tabs/index.js +8 -0
- package/cjs/tabs/package.json +6 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/stepper/Step.d.ts +16 -0
- package/esm/stepper/Step.js +36 -0
- package/esm/stepper/Step.js.map +1 -0
- package/esm/stepper/Stepper.d.ts +31 -0
- package/esm/stepper/Stepper.js +32 -0
- package/esm/stepper/Stepper.js.map +1 -0
- package/esm/stepper/index.d.ts +2 -0
- package/esm/stepper/index.js +3 -0
- package/esm/stepper/index.js.map +1 -0
- package/esm/tabs/Tab.d.ts +24 -0
- package/esm/tabs/Tab.js +34 -0
- package/esm/tabs/Tab.js.map +1 -0
- package/esm/tabs/TabList.d.ts +14 -0
- package/esm/tabs/TabList.js +82 -0
- package/esm/tabs/TabList.js.map +1 -0
- package/esm/tabs/TabPanel.d.ts +14 -0
- package/esm/tabs/TabPanel.js +20 -0
- package/esm/tabs/TabPanel.js.map +1 -0
- package/esm/tabs/Tabs.d.ts +43 -0
- package/esm/tabs/Tabs.js +30 -0
- package/esm/tabs/Tabs.js.map +1 -0
- package/esm/tabs/index.d.ts +2 -0
- package/esm/tabs/index.js +2 -0
- package/esm/tabs/index.js.map +1 -0
- package/package.json +3 -2
- package/src/index.ts +2 -0
- package/src/step-indicator/stories/step-indicator.stories.mdx +1 -1
- package/src/stepper/Step.tsx +59 -0
- package/src/stepper/Stepper.tsx +73 -0
- package/src/stepper/index.ts +2 -0
- package/src/stepper/stories/Example.tsx +28 -0
- package/src/stepper/stories/stepper.stories.mdx +61 -0
- package/src/stepper/stories/stepper.stories.tsx +54 -0
- package/src/tabs/Tab.tsx +79 -0
- package/src/tabs/TabList.tsx +127 -0
- package/src/tabs/TabPanel.tsx +30 -0
- package/src/tabs/Tabs.stories.tsx +188 -0
- package/src/tabs/Tabs.tsx +89 -0
- package/src/tabs/index.ts +2 -0
|
@@ -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;
|
package/esm/tabs/Tab.js
ADDED
|
@@ -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;
|
package/esm/tabs/Tabs.js
ADDED
|
@@ -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 @@
|
|
|
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.
|
|
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": "
|
|
71
|
+
"gitHead": "9e1b0ab1d1cc564e2eebc1c7d8d1143eaea0e71e"
|
|
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 å
|
|
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,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
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Meta, Canvas } from "@storybook/addon-docs";
|
|
2
|
+
import { Stepper } from "..";
|
|
3
|
+
import { Example } from "./Example";
|
|
4
|
+
|
|
5
|
+
<Meta title="ds-react/stepper/intro" />
|
|
6
|
+
|
|
7
|
+
# Hvordan ta i bruk Stepper
|
|
8
|
+
|
|
9
|
+
Stepper er det vertikale søskenet til step-indicator/stegindikator.
|
|
10
|
+
Du må nå selv styre state med `activeStep` og `onStepChange`.
|
|
11
|
+
|
|
12
|
+
## Eksempel
|
|
13
|
+
|
|
14
|
+
```jsx
|
|
15
|
+
<Stepper activeStep={activeStep} onStepChange={(x) => setActiveStep(x)}>
|
|
16
|
+
<Stepper.Step href="" onClick={(e) => e.preventDefault()}>
|
|
17
|
+
Start
|
|
18
|
+
</Stepper.Step>
|
|
19
|
+
<Stepper.Step href="" onClick={(e) => e.preventDefault()}>
|
|
20
|
+
Sunt deserunt qui sit sunt culpa nisi
|
|
21
|
+
</Stepper.Step>
|
|
22
|
+
<Stepper.Step href="" onClick={(e) => e.preventDefault()}>
|
|
23
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
24
|
+
</Stepper.Step>
|
|
25
|
+
<Stepper.Step href="" onClick={(e) => e.preventDefault()}>
|
|
26
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
27
|
+
</Stepper.Step>
|
|
28
|
+
</Stepper>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<Canvas>
|
|
32
|
+
<Example />
|
|
33
|
+
</Canvas>
|
|
34
|
+
|
|
35
|
+
## Override tags
|
|
36
|
+
|
|
37
|
+
`Stepper.Step` er implementert med Overridable-component noe som gjør at du kan endre taggen til
|
|
38
|
+
det du vil med `as`-prop. Merk at Step åakkes inn i en `<li>`-wrapper for tilgjengelighet.
|
|
39
|
+
|
|
40
|
+
```jsx
|
|
41
|
+
<Stepper activeStep={activeStep} onStepChange={(x) => setActiveStep(x)}>
|
|
42
|
+
{/* <button> er default */}
|
|
43
|
+
<Stepper.Step
|
|
44
|
+
href=""
|
|
45
|
+
onClick={(e) => e.preventDefault()}
|
|
46
|
+
>{`Dette er default, et <a>-element`}</Stepper.Step>
|
|
47
|
+
<Stepper.Step as="button">{`Dette er et <button>-element`}</Stepper.Step>
|
|
48
|
+
<Stepper.Step as="span">{`Dette er et <span>-element`}</Stepper.Step>
|
|
49
|
+
</Stepper>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
<Canvas>
|
|
53
|
+
<Stepper activeStep={1} onStepChange={console.log}>
|
|
54
|
+
<Stepper.Step
|
|
55
|
+
href=""
|
|
56
|
+
onClick={(e) => e.preventDefault()}
|
|
57
|
+
>{`Dette er default, et <a>-element`}</Stepper.Step>
|
|
58
|
+
<Stepper.Step as="button">{`Dette er et <button>-element`}</Stepper.Step>
|
|
59
|
+
<Stepper.Step as="span">{`Dette er et <span>-element`}</Stepper.Step>
|
|
60
|
+
</Stepper>
|
|
61
|
+
</Canvas>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Meta } from "@storybook/react/types-6-0";
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import Stepper from "../Stepper";
|
|
4
|
+
import { BodyLong } from "../../typography";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: "ds-react/stepper",
|
|
8
|
+
component: Stepper,
|
|
9
|
+
} as Meta;
|
|
10
|
+
|
|
11
|
+
export const All = () => {
|
|
12
|
+
const storyTexts = [
|
|
13
|
+
"Minimize backwards overflow agile. Horsehead offer commitment to the cause nor copy and paste from stack overflow problem territories, innovation is hot right now for can you slack it to me?. High touch client table the discussion , and get buy-in so manage expectations loop back, please advise soonest. We need a paradigm shift dogpile that, and i need to pee and then go to another meeting for let's prioritize the low-hanging fruit.",
|
|
14
|
+
"Customer centric sorry i didn't get your email proceduralize, and first-order optimal strategies. I dont care if you got some copy, why you dont use officeipsumcom or something like that ? wheelhouse. Viral engagement new economy, this proposal is a win-win situation which will cause a stellar paradigm shift, and produce a multi-fold increase in deliverables Bob called an all-hands this afternoon. Fire up your browser touch base innovation is hot right now so this medium needs to be more dynamic.",
|
|
15
|
+
"Touch base define the underlying principles that drive decisions and strategy for your design language. I have zero cycles for this. Cadence social currency, for low engagement execute . Deliverables rehydrate the team or let's circle back to that those options are already baked in with this model teams were able to drive adoption and awareness we need to start advertising on social media circle back. Through the lens of face time.",
|
|
16
|
+
"Take five, punch the tree, and come back in here with a clear head those options are already baked in with this model ultimate measure of success and we need to crystallize a plan yet open door policy who's responsible for the ask for this request? what do you feel you would bring to the table if you were hired for this position. Wiggle room guerrilla marketing shelfware. Code feature creep can we parallel path lose client to 10:00 meeting hire the best manage expectations root-and-branch review.",
|
|
17
|
+
"Curate downselect tread it daily cc me on that due diligence, or close the loop. All hands on deck my supervisor didn't like the latest revision you gave me can you switch back to the first revision? ping me or game-plan, yet make it a priority, on this journey win-win. Our competitors are jumping the shark we need to build it so that it scales post launch future-proof can we align on lunch orders. Deliverables message the initiative.",
|
|
18
|
+
"Out of scope poop, so pre launch. I just wanted to give you a heads-up wiggle room cc me on that I have been doing some research this morning and we need to better, nor dog and pony show prioritize these line items so UX. Big data upstream selling circle back, in an ideal world. Get all your ducks in a row land it in region so code so one-sheet. Action item we need to think big start small and scale fast to energize our clients. Cta due diligence, for this vendor is incompetent nor forcing function and circle back and low engagement.",
|
|
19
|
+
"Move the needle a loss a day will keep you focus yet can you put it into a banner that is not alarming, but eye catching and not too giant or strategic fit, nor it is all exactly as i said, but i don't like it or streamline. We've bootstrapped the model. This proposal is a win-win situation which will cause a stellar paradigm shift, and produce a multi-fold increase in deliverables the horse is out of the barn usabiltiy, for going forward but going forward.",
|
|
20
|
+
];
|
|
21
|
+
const [activeStep, setActiveStep] = useState(1);
|
|
22
|
+
|
|
23
|
+
const anchorProps = {
|
|
24
|
+
href: "",
|
|
25
|
+
onClick: (e) => e.preventDefault(),
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<div style={{ display: "flex", gap: "10rem" }}>
|
|
30
|
+
<div>
|
|
31
|
+
<h2 id="stepper-heading">Stepper</h2>
|
|
32
|
+
<Stepper
|
|
33
|
+
aria-labelledby="stepper-heading"
|
|
34
|
+
activeStep={activeStep}
|
|
35
|
+
onStepChange={setActiveStep}
|
|
36
|
+
>
|
|
37
|
+
<Stepper.Step {...anchorProps}>Start søknad</Stepper.Step>
|
|
38
|
+
<Stepper.Step {...anchorProps}>Personopplysninger</Stepper.Step>
|
|
39
|
+
<Stepper.Step {...anchorProps}>Saksopplysninger</Stepper.Step>
|
|
40
|
+
<Stepper.Step {...anchorProps}>
|
|
41
|
+
Søknadstekst for en veldig spesifikk prosess i NAV som jeg må skrive
|
|
42
|
+
om her i denne labelen
|
|
43
|
+
</Stepper.Step>
|
|
44
|
+
<Stepper.Step {...anchorProps}>Vedlegg</Stepper.Step>
|
|
45
|
+
<Stepper.Step {...anchorProps}>Oppsummering</Stepper.Step>
|
|
46
|
+
<Stepper.Step {...anchorProps}>Innsending</Stepper.Step>
|
|
47
|
+
</Stepper>
|
|
48
|
+
</div>
|
|
49
|
+
<BodyLong style={{ marginTop: "5rem" }}>
|
|
50
|
+
{storyTexts[activeStep]}
|
|
51
|
+
</BodyLong>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
};
|