@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.
- package/cjs/help-text/HelpText.js +2 -2
- 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/form/ConfirmationPanel.d.ts +1 -1
- package/esm/form/Select.d.ts +1 -1
- package/esm/help-text/HelpText.js +2 -2
- package/esm/help-text/HelpText.js.map +1 -1
- 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/form/ConfirmationPanel.tsx +1 -1
- package/src/form/Select.tsx +1 -1
- package/src/grid/stories/styles.css +2 -2
- package/src/help-text/HelpText.tsx +1 -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,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 @@
|
|
|
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;
|
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/form/Select.tsx
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
.navds-story-cell {
|
|
2
|
-
border-radius:
|
|
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:
|
|
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"
|
|
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 å
|
|
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
|
+
};
|