@navikt/ds-react 0.14.2 → 0.14.5
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/form/Select.js +1 -1
- package/cjs/index.js +1 -0
- package/cjs/step-indicator/Step.js +62 -0
- package/cjs/step-indicator/StepIndicator.js +76 -0
- package/cjs/step-indicator/index.js +19 -0
- package/cjs/step-indicator/package.json +6 -0
- package/esm/form/Select.js +1 -1
- package/esm/form/Select.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/step-indicator/Step.d.ts +20 -0
- package/esm/step-indicator/Step.js +39 -0
- package/esm/step-indicator/Step.js.map +1 -0
- package/esm/step-indicator/StepIndicator.d.ts +41 -0
- package/esm/step-indicator/StepIndicator.js +52 -0
- package/esm/step-indicator/StepIndicator.js.map +1 -0
- package/esm/step-indicator/index.d.ts +2 -0
- package/esm/step-indicator/index.js +3 -0
- package/esm/step-indicator/index.js.map +1 -0
- package/package.json +5 -5
- package/src/form/Select.tsx +1 -1
- package/src/index.ts +1 -0
- package/src/step-indicator/Step.tsx +79 -0
- package/src/step-indicator/StepIndicator.tsx +145 -0
- package/src/step-indicator/index.ts +2 -0
- package/src/step-indicator/stories/Example.tsx +23 -0
- package/src/step-indicator/stories/step-indicator.stories.mdx +122 -0
- package/src/step-indicator/stories/step-indicator.stories.tsx +104 -0
package/cjs/form/Select.js
CHANGED
|
@@ -54,7 +54,7 @@ const Select = (0, react_1.forwardRef)((props, ref) => {
|
|
|
54
54
|
}), id: inputDescriptionId, size: size }, description)),
|
|
55
55
|
react_1.default.createElement("div", { className: "navds-select__container" },
|
|
56
56
|
react_1.default.createElement("select", Object.assign({}, (0, __1.omit)(rest, ["error", "errorId", "size"]), inputProps, { ref: ref, className: (0, classnames_1.default)("navds-select__input", "navds-body-short", `navds-body--${size !== null && size !== void 0 ? size : "medium"}`), size: props.htmlSize }), children),
|
|
57
|
-
react_1.default.createElement(ds_icons_1.Expand, { className: "navds-select__chevron" })),
|
|
57
|
+
react_1.default.createElement(ds_icons_1.Expand, { className: "navds-select__chevron", "aria-hidden": true })),
|
|
58
58
|
react_1.default.createElement("div", { id: errorId, "aria-relevant": "additions removals", "aria-live": "polite" }, showErrorMsg && react_1.default.createElement(ErrorMessage_1.default, { size: size }, props.error))));
|
|
59
59
|
});
|
|
60
60
|
exports.default = Select;
|
package/cjs/index.js
CHANGED
|
@@ -25,6 +25,7 @@ __exportStar(require("./modal"), exports);
|
|
|
25
25
|
__exportStar(require("./panel"), exports);
|
|
26
26
|
__exportStar(require("./popover"), exports);
|
|
27
27
|
__exportStar(require("./speech-bubble"), exports);
|
|
28
|
+
__exportStar(require("./step-indicator"), exports);
|
|
28
29
|
__exportStar(require("./tag"), exports);
|
|
29
30
|
__exportStar(require("./table"), exports);
|
|
30
31
|
__exportStar(require("./typography"), exports);
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
|
+
var t = {};
|
|
23
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
24
|
+
t[p] = s[p];
|
|
25
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
26
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
27
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
28
|
+
t[p[i]] = s[p[i]];
|
|
29
|
+
}
|
|
30
|
+
return t;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const react_1 = __importStar(require("react"));
|
|
37
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
38
|
+
const _1 = require(".");
|
|
39
|
+
const __1 = require("..");
|
|
40
|
+
const StepComponent = (0, react_1.forwardRef)((_a, ref) => {
|
|
41
|
+
var { className, children, as: Component = "button", disabled, index } = _a, rest = __rest(_a, ["className", "children", "as", "disabled", "index"]);
|
|
42
|
+
const context = (0, react_1.useContext)(_1.StepContext);
|
|
43
|
+
if (context === null) {
|
|
44
|
+
console.error("<StepIndicator.Step> has to be used within an <StepIndicator>");
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const safeIndex = index !== null && index !== void 0 ? index : 0;
|
|
48
|
+
const Number = context.activeStep === safeIndex ? __1.Label : __1.BodyShort;
|
|
49
|
+
return (react_1.default.createElement(Component, Object.assign({}, rest, { disabled: disabled, ref: ref, className: (0, classnames_1.default)("navds-step-indicator__step", className, {
|
|
50
|
+
"navds-step-indicator__step--disabled": disabled,
|
|
51
|
+
"navds-step-indicator__step--active": context.activeStep === safeIndex,
|
|
52
|
+
"navds-step-indicator__step--finished": context.activeStep > safeIndex,
|
|
53
|
+
}), onClick: (e) => {
|
|
54
|
+
context.onStepChange(safeIndex);
|
|
55
|
+
rest.onClick && rest.onClick(e);
|
|
56
|
+
} }),
|
|
57
|
+
react_1.default.createElement(Number, { className: "navds-step-indicator__step-number" }, safeIndex + 1),
|
|
58
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)("navds-step-indicator__step-label") }, !context.hideLabels && children),
|
|
59
|
+
safeIndex !== 0 && (react_1.default.createElement("span", { "aria-hidden": true, className: "navds-step-indicator__step-line" }))));
|
|
60
|
+
});
|
|
61
|
+
const Step = StepComponent;
|
|
62
|
+
exports.default = Step;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
|
+
var t = {};
|
|
23
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
24
|
+
t[p] = s[p];
|
|
25
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
26
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
27
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
28
|
+
t[p[i]] = s[p[i]];
|
|
29
|
+
}
|
|
30
|
+
return t;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.StepContext = void 0;
|
|
37
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const react_merge_refs_1 = __importDefault(require("react-merge-refs"));
|
|
40
|
+
const Step_1 = __importDefault(require("./Step"));
|
|
41
|
+
exports.StepContext = (0, react_1.createContext)(null);
|
|
42
|
+
const StepIndicator = (0, react_1.forwardRef)((_a, ref) => {
|
|
43
|
+
var { children, className, activeStep, hideLabels, onStepChange = () => { }, responsive } = _a, rest = __rest(_a, ["children", "className", "activeStep", "hideLabels", "onStepChange", "responsive"]);
|
|
44
|
+
const wrapperRef = (0, react_1.useRef)(null);
|
|
45
|
+
const mergedRef = (0, react_merge_refs_1.default)([wrapperRef, ref]);
|
|
46
|
+
const [showLabels, setShowLabels] = (0, react_1.useState)(true);
|
|
47
|
+
const removeLabels = hideLabels !== null && hideLabels !== void 0 ? hideLabels : (!!responsive && !showLabels);
|
|
48
|
+
const stepsWithIndex = react_1.default.Children.map(children, (step, index) => {
|
|
49
|
+
return react_1.default.isValidElement(step) ? (react_1.default.createElement("li", { className: (0, classnames_1.default)("navds-step-indicator__step-wrapper", {
|
|
50
|
+
"navds-step-indicator__step-wrapper--hidelabel": removeLabels,
|
|
51
|
+
}), key: index, "aria-current": index === activeStep && "step" }, react_1.default.cloneElement(step, Object.assign(Object.assign({}, step.props), { index })))) : (step);
|
|
52
|
+
});
|
|
53
|
+
const canShowLabels = (0, react_1.useCallback)(() => {
|
|
54
|
+
var _a;
|
|
55
|
+
const remSize = parseFloat(String(getComputedStyle(document.documentElement).fontSize));
|
|
56
|
+
const childrenLength = react_1.default.Children.toArray(children).filter((child) => react_1.default.isValidElement(child)).length;
|
|
57
|
+
wrapperRef.current &&
|
|
58
|
+
setShowLabels(((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) >=
|
|
59
|
+
remSize * 10 * childrenLength);
|
|
60
|
+
}, [children]);
|
|
61
|
+
(0, react_1.useEffect)(() => {
|
|
62
|
+
window.addEventListener("resize", canShowLabels);
|
|
63
|
+
canShowLabels();
|
|
64
|
+
return () => {
|
|
65
|
+
window.removeEventListener("resize", canShowLabels);
|
|
66
|
+
};
|
|
67
|
+
}, [canShowLabels]);
|
|
68
|
+
return (react_1.default.createElement("ol", Object.assign({ ref: mergedRef, className: (0, classnames_1.default)(`navds-step-indicator`, className) }, rest),
|
|
69
|
+
react_1.default.createElement(exports.StepContext.Provider, { value: {
|
|
70
|
+
activeStep,
|
|
71
|
+
onStepChange,
|
|
72
|
+
hideLabels: removeLabels,
|
|
73
|
+
} }, stepsWithIndex)));
|
|
74
|
+
});
|
|
75
|
+
StepIndicator.Step = Step_1.default;
|
|
76
|
+
exports.default = StepIndicator;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.StepIndicator = void 0;
|
|
17
|
+
var StepIndicator_1 = require("./StepIndicator");
|
|
18
|
+
Object.defineProperty(exports, "StepIndicator", { enumerable: true, get: function () { return __importDefault(StepIndicator_1).default; } });
|
|
19
|
+
__exportStar(require("./StepIndicator"), exports);
|
package/esm/form/Select.js
CHANGED
|
@@ -30,7 +30,7 @@ const Select = forwardRef((props, ref) => {
|
|
|
30
30
|
}), id: inputDescriptionId, size: size }, description)),
|
|
31
31
|
React.createElement("div", { className: "navds-select__container" },
|
|
32
32
|
React.createElement("select", Object.assign({}, omit(rest, ["error", "errorId", "size"]), inputProps, { ref: ref, className: cl("navds-select__input", "navds-body-short", `navds-body--${size !== null && size !== void 0 ? size : "medium"}`), size: props.htmlSize }), children),
|
|
33
|
-
React.createElement(Expand, { className: "navds-select__chevron" })),
|
|
33
|
+
React.createElement(Expand, { className: "navds-select__chevron", "aria-hidden": true })),
|
|
34
34
|
React.createElement("div", { id: errorId, "aria-relevant": "additions removals", "aria-live": "polite" }, showErrorMsg && React.createElement(ErrorMessage, { size: size }, props.error))));
|
|
35
35
|
});
|
|
36
36
|
export default Select;
|
package/esm/form/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/form/Select.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAwB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAkB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAuB9D,MAAM,MAAM,GAAG,UAAU,CAAiC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACvE,MAAM,EACJ,UAAU,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,kBAAkB,GACnB,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAErC,MAAM,EACJ,QAAQ,EACR,KAAK,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,KAAK,KAEf,KAAK,EADJ,IAAI,UACL,KAAK,EARH,0EAQL,CAAQ,CAAC;IAEV,OAAO,CACL,6BACE,SAAS,EAAE,EAAE,CACX,SAAS,EACT,kBAAkB,EAClB,qBAAqB,IAAI,EAAE,EAC3B;YACE,qBAAqB,EAAE,QAAQ;YAC/B,wBAAwB,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ;SAChD,CACF;QAED,oBAAC,KAAK,IACJ,OAAO,EAAE,UAAU,CAAC,EAAE,EACtB,IAAI,EAAE,IAAI,EACV,EAAE,EAAC,OAAO,EACV,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE;gBACnC,SAAS,EAAE,SAAS;aACrB,CAAC,IAED,KAAK,CACA;QACP,CAAC,CAAC,WAAW,IAAI,CAChB,oBAAC,SAAS,IACR,EAAE,EAAC,KAAK,EACR,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE;gBACzC,SAAS,EAAE,SAAS;aACrB,CAAC,EACF,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,IAAI,IAET,WAAW,CACF,CACb;QACD,6BAAK,SAAS,EAAC,yBAAyB;YACtC,gDACM,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EACxC,UAAU,IACd,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,QAAQ,EAAE,CAClC,EACD,IAAI,EAAE,KAAK,CAAC,QAAQ,KAEnB,QAAQ,CACF;YACT,oBAAC,MAAM,IAAC,SAAS,EAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/form/Select.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAwB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAkB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAuB9D,MAAM,MAAM,GAAG,UAAU,CAAiC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACvE,MAAM,EACJ,UAAU,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,kBAAkB,GACnB,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAErC,MAAM,EACJ,QAAQ,EACR,KAAK,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,KAAK,KAEf,KAAK,EADJ,IAAI,UACL,KAAK,EARH,0EAQL,CAAQ,CAAC;IAEV,OAAO,CACL,6BACE,SAAS,EAAE,EAAE,CACX,SAAS,EACT,kBAAkB,EAClB,qBAAqB,IAAI,EAAE,EAC3B;YACE,qBAAqB,EAAE,QAAQ;YAC/B,wBAAwB,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ;SAChD,CACF;QAED,oBAAC,KAAK,IACJ,OAAO,EAAE,UAAU,CAAC,EAAE,EACtB,IAAI,EAAE,IAAI,EACV,EAAE,EAAC,OAAO,EACV,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE;gBACnC,SAAS,EAAE,SAAS;aACrB,CAAC,IAED,KAAK,CACA;QACP,CAAC,CAAC,WAAW,IAAI,CAChB,oBAAC,SAAS,IACR,EAAE,EAAC,KAAK,EACR,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE;gBACzC,SAAS,EAAE,SAAS;aACrB,CAAC,EACF,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,IAAI,IAET,WAAW,CACF,CACb;QACD,6BAAK,SAAS,EAAC,yBAAyB;YACtC,gDACM,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EACxC,UAAU,IACd,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,QAAQ,EAAE,CAClC,EACD,IAAI,EAAE,KAAK,CAAC,QAAQ,KAEnB,QAAQ,CACF;YACT,oBAAC,MAAM,IAAC,SAAS,EAAC,uBAAuB,wBAAe,CACpD;QACN,6BAAK,EAAE,EAAE,OAAO,mBAAgB,oBAAoB,eAAW,QAAQ,IACpE,YAAY,IAAI,oBAAC,YAAY,IAAC,IAAI,EAAE,IAAI,IAAG,KAAK,CAAC,KAAK,CAAgB,CACnE,CACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
package/esm/index.d.ts
CHANGED
package/esm/index.js
CHANGED
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AAEvB,6BAA6B;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AAEvB,6BAA6B;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { OverridableComponent } from "..";
|
|
3
|
+
export interface StepIndicatorStepProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
4
|
+
/**
|
|
5
|
+
* Text content under indicator
|
|
6
|
+
*/
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Disables interaction with element
|
|
10
|
+
*/
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Handled by StepIndicator
|
|
14
|
+
*/
|
|
15
|
+
index?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface StepIndicatorStepType extends OverridableComponent<StepIndicatorStepProps, HTMLButtonElement> {
|
|
18
|
+
}
|
|
19
|
+
declare const Step: StepIndicatorStepType;
|
|
20
|
+
export default Step;
|
|
@@ -0,0 +1,39 @@
|
|
|
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, useContext } from "react";
|
|
13
|
+
import cl from "classnames";
|
|
14
|
+
import { StepContext } from ".";
|
|
15
|
+
import { BodyShort, Label } from "..";
|
|
16
|
+
const StepComponent = forwardRef((_a, ref) => {
|
|
17
|
+
var { className, children, as: Component = "button", disabled, index } = _a, rest = __rest(_a, ["className", "children", "as", "disabled", "index"]);
|
|
18
|
+
const context = useContext(StepContext);
|
|
19
|
+
if (context === null) {
|
|
20
|
+
console.error("<StepIndicator.Step> has to be used within an <StepIndicator>");
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const safeIndex = index !== null && index !== void 0 ? index : 0;
|
|
24
|
+
const Number = context.activeStep === safeIndex ? Label : BodyShort;
|
|
25
|
+
return (React.createElement(Component, Object.assign({}, rest, { disabled: disabled, ref: ref, className: cl("navds-step-indicator__step", className, {
|
|
26
|
+
"navds-step-indicator__step--disabled": disabled,
|
|
27
|
+
"navds-step-indicator__step--active": context.activeStep === safeIndex,
|
|
28
|
+
"navds-step-indicator__step--finished": context.activeStep > safeIndex,
|
|
29
|
+
}), onClick: (e) => {
|
|
30
|
+
context.onStepChange(safeIndex);
|
|
31
|
+
rest.onClick && rest.onClick(e);
|
|
32
|
+
} }),
|
|
33
|
+
React.createElement(Number, { className: "navds-step-indicator__step-number" }, safeIndex + 1),
|
|
34
|
+
React.createElement("div", { className: cl("navds-step-indicator__step-label") }, !context.hideLabels && children),
|
|
35
|
+
safeIndex !== 0 && (React.createElement("span", { "aria-hidden": true, className: "navds-step-indicator__step-line" }))));
|
|
36
|
+
});
|
|
37
|
+
const Step = StepComponent;
|
|
38
|
+
export default Step;
|
|
39
|
+
//# sourceMappingURL=Step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Step.js","sourceRoot":"","sources":["../../src/step-indicator/Step.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAwB,MAAM,IAAI,CAAC;AAqB5D,MAAM,aAAa,GAGf,UAAU,CACZ,CACE,EAA2E,EAC3E,GAAG,EACH,EAAE;QAFF,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,OAAW,EAAN,IAAI,cAAzE,oDAA2E,CAAF;IAGzE,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,IAAI,EAAE;QACpB,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,MAAM,SAAS,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,EAAE;YACrD,sCAAsC,EAAE,QAAQ;YAChD,oCAAoC,EAClC,OAAO,CAAC,UAAU,KAAK,SAAS;YAClC,sCAAsC,EACpC,OAAO,CAAC,UAAU,GAAG,SAAS;SACjC,CAAC,EACF,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,oBAAC,MAAM,IAAC,SAAS,EAAC,mCAAmC,IAClD,SAAS,GAAG,CAAC,CACP;QACT,6BAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,CAAC,IACnD,CAAC,OAAO,CAAC,UAAU,IAAI,QAAQ,CAC5B;QACL,SAAS,KAAK,CAAC,IAAI,CAClB,mDAAkB,SAAS,EAAC,iCAAiC,GAAG,CACjE,CACS,CACb,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,IAAI,GAAG,aAAsC,CAAC;AAEpD,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { StepIndicatorStepType } from "./Step";
|
|
3
|
+
export interface StepIndicatorProps extends React.HTMLAttributes<HTMLOListElement> {
|
|
4
|
+
/**
|
|
5
|
+
* <StepIndicator.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
|
+
* Hides labels for each step if true
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
hideLabels?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* enables `hideLabels` internally when steps start to overflow.
|
|
27
|
+
* @note declaring `hideLabels` overwrites this functionality
|
|
28
|
+
*/
|
|
29
|
+
responsive?: boolean;
|
|
30
|
+
}
|
|
31
|
+
interface StepIndicatorComponent extends React.ForwardRefExoticComponent<StepIndicatorProps & React.RefAttributes<HTMLOListElement>> {
|
|
32
|
+
Step: StepIndicatorStepType;
|
|
33
|
+
}
|
|
34
|
+
interface StepContextProps {
|
|
35
|
+
activeStep: number;
|
|
36
|
+
onStepChange: (step: number) => void;
|
|
37
|
+
hideLabels: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare const StepContext: React.Context<StepContextProps | null>;
|
|
40
|
+
declare const StepIndicator: StepIndicatorComponent;
|
|
41
|
+
export default StepIndicator;
|
|
@@ -0,0 +1,52 @@
|
|
|
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, useCallback, useEffect, useRef, useState, } from "react";
|
|
14
|
+
import mergeRefs from "react-merge-refs";
|
|
15
|
+
import Step from "./Step";
|
|
16
|
+
export const StepContext = createContext(null);
|
|
17
|
+
const StepIndicator = forwardRef((_a, ref) => {
|
|
18
|
+
var { children, className, activeStep, hideLabels, onStepChange = () => { }, responsive } = _a, rest = __rest(_a, ["children", "className", "activeStep", "hideLabels", "onStepChange", "responsive"]);
|
|
19
|
+
const wrapperRef = useRef(null);
|
|
20
|
+
const mergedRef = mergeRefs([wrapperRef, ref]);
|
|
21
|
+
const [showLabels, setShowLabels] = useState(true);
|
|
22
|
+
const removeLabels = hideLabels !== null && hideLabels !== void 0 ? hideLabels : (!!responsive && !showLabels);
|
|
23
|
+
const stepsWithIndex = React.Children.map(children, (step, index) => {
|
|
24
|
+
return React.isValidElement(step) ? (React.createElement("li", { className: cl("navds-step-indicator__step-wrapper", {
|
|
25
|
+
"navds-step-indicator__step-wrapper--hidelabel": removeLabels,
|
|
26
|
+
}), key: index, "aria-current": index === activeStep && "step" }, React.cloneElement(step, Object.assign(Object.assign({}, step.props), { index })))) : (step);
|
|
27
|
+
});
|
|
28
|
+
const canShowLabels = useCallback(() => {
|
|
29
|
+
var _a;
|
|
30
|
+
const remSize = parseFloat(String(getComputedStyle(document.documentElement).fontSize));
|
|
31
|
+
const childrenLength = React.Children.toArray(children).filter((child) => React.isValidElement(child)).length;
|
|
32
|
+
wrapperRef.current &&
|
|
33
|
+
setShowLabels(((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width) >=
|
|
34
|
+
remSize * 10 * childrenLength);
|
|
35
|
+
}, [children]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
window.addEventListener("resize", canShowLabels);
|
|
38
|
+
canShowLabels();
|
|
39
|
+
return () => {
|
|
40
|
+
window.removeEventListener("resize", canShowLabels);
|
|
41
|
+
};
|
|
42
|
+
}, [canShowLabels]);
|
|
43
|
+
return (React.createElement("ol", Object.assign({ ref: mergedRef, className: cl(`navds-step-indicator`, className) }, rest),
|
|
44
|
+
React.createElement(StepContext.Provider, { value: {
|
|
45
|
+
activeStep,
|
|
46
|
+
onStepChange,
|
|
47
|
+
hideLabels: removeLabels,
|
|
48
|
+
} }, stepsWithIndex)));
|
|
49
|
+
});
|
|
50
|
+
StepIndicator.Step = Step;
|
|
51
|
+
export default StepIndicator;
|
|
52
|
+
//# sourceMappingURL=StepIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepIndicator.js","sourceRoot":"","sources":["../../src/step-indicator/StepIndicator.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAuD,MAAM,QAAQ,CAAC;AA6C7E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAExE,MAAM,aAAa,GAA2B,UAAU,CAItD,CACE,EAQC,EACD,GAAG,EACH,EAAE;QAVF,EACE,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,EACvB,UAAU,OAEX,EADI,IAAI,cAPT,mFAQC,CADQ;IAIT,MAAM,UAAU,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,YAAY,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAClE,OAAO,KAAK,CAAC,cAAc,CAAyB,IAAI,CAAC,CAAC,CAAC,CAAC,CAC1D,4BACE,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE;gBAClD,+CAA+C,EAAE,YAAY;aAC9D,CAAC,EACF,GAAG,EAAE,KAAK,kBACI,KAAK,KAAK,UAAU,IAAI,MAAM,IAE3C,KAAK,CAAC,YAAY,CAAC,IAAI,kCACnB,IAAI,CAAC,KAAK,KACb,KAAK,IACL,CACC,CACN,CAAC,CAAC,CAAC,CACF,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;;QACrC,MAAM,OAAO,GAAG,UAAU,CACxB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAC5D,CAAC;QACF,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACvE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAC5B,CAAC,MAAM,CAAC;QAET,UAAU,CAAC,OAAO;YAChB,aAAa,CACX,CAAA,MAAA,UAAU,CAAC,OAAO,0CAAE,qBAAqB,GAAG,KAAK;gBAC/C,OAAO,GAAG,EAAE,GAAG,cAAc,CAChC,CAAC;IACN,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACjD,aAAa,EAAE,CAAC;QAChB,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,0CACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,IAC5C,IAAI;QAER,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;gBACL,UAAU;gBACV,YAAY;gBACZ,UAAU,EAAE,YAAY;aACzB,IAEA,cAAc,CACM,CACpB,CACN,CAAC;AACJ,CAAC,CACwB,CAAC;AAE5B,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;AAE1B,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/step-indicator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "NAV designsystem react components",
|
|
6
6
|
"author": "NAV Designsystem team",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@material-ui/core": "^4.12.3",
|
|
38
|
-
"@navikt/ds-icons": "^0.7.
|
|
38
|
+
"@navikt/ds-icons": "^0.7.2",
|
|
39
39
|
"@popperjs/core": "^2.10.1",
|
|
40
40
|
"classnames": "^2.2.6",
|
|
41
41
|
"react-collapse": "^5.1.0",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"@testing-library/user-event": "^13.2.1",
|
|
51
51
|
"@types/faker": "^5.5.8",
|
|
52
52
|
"@types/jest": "^27.0.1",
|
|
53
|
-
"@types/react-
|
|
53
|
+
"@types/react-modal": "^3.13.1",
|
|
54
54
|
"@types/styled-components": "^5.1.14",
|
|
55
55
|
"copyfiles": "^2.4.1",
|
|
56
56
|
"faker": "^5.5.3",
|
|
57
57
|
"jest": "^27.2.0",
|
|
58
|
-
"react-router-dom": "^
|
|
58
|
+
"react-router-dom": "^6.1.0",
|
|
59
59
|
"rimraf": "3.0.2",
|
|
60
60
|
"styled-components": "^5.3.1",
|
|
61
61
|
"ts-jest": "^27.0.5"
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"@types/react": "^17.0.30",
|
|
65
65
|
"react": "^17.0.0"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "3db81c9b79f8be93cb23f996002d0cbb38ca2348"
|
|
68
68
|
}
|
package/src/form/Select.tsx
CHANGED
|
@@ -94,7 +94,7 @@ const Select = forwardRef<HTMLSelectElement, SelectProps>((props, ref) => {
|
|
|
94
94
|
>
|
|
95
95
|
{children}
|
|
96
96
|
</select>
|
|
97
|
-
<Expand className="navds-select__chevron" />
|
|
97
|
+
<Expand className="navds-select__chevron" aria-hidden />
|
|
98
98
|
</div>
|
|
99
99
|
<div id={errorId} aria-relevant="additions removals" aria-live="polite">
|
|
100
100
|
{showErrorMsg && <ErrorMessage size={size}>{props.error}</ErrorMessage>}
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React, { forwardRef, useContext } from "react";
|
|
2
|
+
import cl from "classnames";
|
|
3
|
+
import { StepContext } from ".";
|
|
4
|
+
import { BodyShort, Label, OverridableComponent } from "..";
|
|
5
|
+
|
|
6
|
+
export interface StepIndicatorStepProps
|
|
7
|
+
extends React.HTMLAttributes<HTMLButtonElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Text content under indicator
|
|
10
|
+
*/
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Disables interaction with element
|
|
14
|
+
*/
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Handled by StepIndicator
|
|
18
|
+
*/
|
|
19
|
+
index?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface StepIndicatorStepType
|
|
23
|
+
extends OverridableComponent<StepIndicatorStepProps, HTMLButtonElement> {}
|
|
24
|
+
|
|
25
|
+
const StepComponent: OverridableComponent<
|
|
26
|
+
StepIndicatorStepProps,
|
|
27
|
+
HTMLButtonElement
|
|
28
|
+
> = forwardRef(
|
|
29
|
+
(
|
|
30
|
+
{ className, children, as: Component = "button", disabled, index, ...rest },
|
|
31
|
+
ref
|
|
32
|
+
) => {
|
|
33
|
+
const context = useContext(StepContext);
|
|
34
|
+
|
|
35
|
+
if (context === null) {
|
|
36
|
+
console.error(
|
|
37
|
+
"<StepIndicator.Step> has to be used within an <StepIndicator>"
|
|
38
|
+
);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const safeIndex = index ?? 0;
|
|
43
|
+
|
|
44
|
+
const Number = context.activeStep === safeIndex ? Label : BodyShort;
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<Component
|
|
48
|
+
{...rest}
|
|
49
|
+
disabled={disabled}
|
|
50
|
+
ref={ref}
|
|
51
|
+
className={cl("navds-step-indicator__step", className, {
|
|
52
|
+
"navds-step-indicator__step--disabled": disabled,
|
|
53
|
+
"navds-step-indicator__step--active":
|
|
54
|
+
context.activeStep === safeIndex,
|
|
55
|
+
"navds-step-indicator__step--finished":
|
|
56
|
+
context.activeStep > safeIndex,
|
|
57
|
+
})}
|
|
58
|
+
onClick={(e) => {
|
|
59
|
+
context.onStepChange(safeIndex);
|
|
60
|
+
rest.onClick && rest.onClick(e);
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
<Number className="navds-step-indicator__step-number">
|
|
64
|
+
{safeIndex + 1}
|
|
65
|
+
</Number>
|
|
66
|
+
<div className={cl("navds-step-indicator__step-label")}>
|
|
67
|
+
{!context.hideLabels && children}
|
|
68
|
+
</div>
|
|
69
|
+
{safeIndex !== 0 && (
|
|
70
|
+
<span aria-hidden className="navds-step-indicator__step-line" />
|
|
71
|
+
)}
|
|
72
|
+
</Component>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const Step = StepComponent as StepIndicatorStepType;
|
|
78
|
+
|
|
79
|
+
export default Step;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import cl from "classnames";
|
|
2
|
+
import React, {
|
|
3
|
+
createContext,
|
|
4
|
+
forwardRef,
|
|
5
|
+
useCallback,
|
|
6
|
+
useEffect,
|
|
7
|
+
useRef,
|
|
8
|
+
useState,
|
|
9
|
+
} from "react";
|
|
10
|
+
import mergeRefs from "react-merge-refs";
|
|
11
|
+
import Step, { StepIndicatorStepProps, StepIndicatorStepType } from "./Step";
|
|
12
|
+
|
|
13
|
+
export interface StepIndicatorProps
|
|
14
|
+
extends React.HTMLAttributes<HTMLOListElement> {
|
|
15
|
+
/**
|
|
16
|
+
* <StepIndicator.Step /> elements
|
|
17
|
+
*/
|
|
18
|
+
children: React.ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* Adds classname to wrapper
|
|
21
|
+
*/
|
|
22
|
+
className?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Current active step index
|
|
25
|
+
*/
|
|
26
|
+
activeStep: number;
|
|
27
|
+
/**
|
|
28
|
+
* Callback for clicked step index
|
|
29
|
+
*/
|
|
30
|
+
onStepChange?: (step: number) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Hides labels for each step if true
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
hideLabels?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* enables `hideLabels` internally when steps start to overflow.
|
|
38
|
+
* @note declaring `hideLabels` overwrites this functionality
|
|
39
|
+
*/
|
|
40
|
+
responsive?: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface StepIndicatorComponent
|
|
44
|
+
extends React.ForwardRefExoticComponent<
|
|
45
|
+
StepIndicatorProps & React.RefAttributes<HTMLOListElement>
|
|
46
|
+
> {
|
|
47
|
+
Step: StepIndicatorStepType;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface StepContextProps {
|
|
51
|
+
activeStep: number;
|
|
52
|
+
onStepChange: (step: number) => void;
|
|
53
|
+
hideLabels: boolean;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const StepContext = createContext<StepContextProps | null>(null);
|
|
57
|
+
|
|
58
|
+
const StepIndicator: StepIndicatorComponent = forwardRef<
|
|
59
|
+
HTMLOListElement,
|
|
60
|
+
StepIndicatorProps
|
|
61
|
+
>(
|
|
62
|
+
(
|
|
63
|
+
{
|
|
64
|
+
children,
|
|
65
|
+
className,
|
|
66
|
+
activeStep,
|
|
67
|
+
hideLabels,
|
|
68
|
+
onStepChange = () => {},
|
|
69
|
+
responsive,
|
|
70
|
+
...rest
|
|
71
|
+
},
|
|
72
|
+
ref
|
|
73
|
+
) => {
|
|
74
|
+
const wrapperRef = useRef<HTMLOListElement | null>(null);
|
|
75
|
+
const mergedRef = mergeRefs([wrapperRef, ref]);
|
|
76
|
+
|
|
77
|
+
const [showLabels, setShowLabels] = useState(true);
|
|
78
|
+
|
|
79
|
+
const removeLabels = hideLabels ?? (!!responsive && !showLabels);
|
|
80
|
+
|
|
81
|
+
const stepsWithIndex = React.Children.map(children, (step, index) => {
|
|
82
|
+
return React.isValidElement<StepIndicatorStepProps>(step) ? (
|
|
83
|
+
<li
|
|
84
|
+
className={cl("navds-step-indicator__step-wrapper", {
|
|
85
|
+
"navds-step-indicator__step-wrapper--hidelabel": removeLabels,
|
|
86
|
+
})}
|
|
87
|
+
key={index}
|
|
88
|
+
aria-current={index === activeStep && "step"}
|
|
89
|
+
>
|
|
90
|
+
{React.cloneElement(step, {
|
|
91
|
+
...step.props,
|
|
92
|
+
index,
|
|
93
|
+
})}
|
|
94
|
+
</li>
|
|
95
|
+
) : (
|
|
96
|
+
step
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const canShowLabels = useCallback(() => {
|
|
101
|
+
const remSize = parseFloat(
|
|
102
|
+
String(getComputedStyle(document.documentElement).fontSize)
|
|
103
|
+
);
|
|
104
|
+
const childrenLength = React.Children.toArray(children).filter((child) =>
|
|
105
|
+
React.isValidElement(child)
|
|
106
|
+
).length;
|
|
107
|
+
|
|
108
|
+
wrapperRef.current &&
|
|
109
|
+
setShowLabels(
|
|
110
|
+
wrapperRef.current?.getBoundingClientRect().width >=
|
|
111
|
+
remSize * 10 * childrenLength
|
|
112
|
+
);
|
|
113
|
+
}, [children]);
|
|
114
|
+
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
window.addEventListener("resize", canShowLabels);
|
|
117
|
+
canShowLabels();
|
|
118
|
+
return () => {
|
|
119
|
+
window.removeEventListener("resize", canShowLabels);
|
|
120
|
+
};
|
|
121
|
+
}, [canShowLabels]);
|
|
122
|
+
|
|
123
|
+
return (
|
|
124
|
+
<ol
|
|
125
|
+
ref={mergedRef}
|
|
126
|
+
className={cl(`navds-step-indicator`, className)}
|
|
127
|
+
{...rest}
|
|
128
|
+
>
|
|
129
|
+
<StepContext.Provider
|
|
130
|
+
value={{
|
|
131
|
+
activeStep,
|
|
132
|
+
onStepChange,
|
|
133
|
+
hideLabels: removeLabels,
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
{stepsWithIndex}
|
|
137
|
+
</StepContext.Provider>
|
|
138
|
+
</ol>
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
) as StepIndicatorComponent;
|
|
142
|
+
|
|
143
|
+
StepIndicator.Step = Step;
|
|
144
|
+
|
|
145
|
+
export default StepIndicator;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { StepIndicator } from "..";
|
|
3
|
+
|
|
4
|
+
export const Example = ({ ...props }) => {
|
|
5
|
+
const [active, setactive] = useState(1);
|
|
6
|
+
|
|
7
|
+
const { disabled, ...rest } = props;
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<StepIndicator {...rest} activeStep={active} onStepChange={setactive}>
|
|
11
|
+
<StepIndicator.Step>Start</StepIndicator.Step>
|
|
12
|
+
<StepIndicator.Step>
|
|
13
|
+
Sunt deserunt qui sit sunt culpa nisi
|
|
14
|
+
</StepIndicator.Step>
|
|
15
|
+
<StepIndicator.Step disabled={disabled}>
|
|
16
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
17
|
+
</StepIndicator.Step>
|
|
18
|
+
<StepIndicator.Step>
|
|
19
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
20
|
+
</StepIndicator.Step>
|
|
21
|
+
</StepIndicator>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Meta, Canvas } from "@storybook/addon-docs";
|
|
2
|
+
import { StepIndicator } from "..";
|
|
3
|
+
import { Example } from "./Example";
|
|
4
|
+
|
|
5
|
+
<Meta title="ds-react/step-indicator/intro" />
|
|
6
|
+
|
|
7
|
+
# Hvordan ta i bruk StepIndicator
|
|
8
|
+
|
|
9
|
+
Vi flytter over Stegindikator til `ds-react` uten noen veldig store endringer i design.
|
|
10
|
+
Du må nå selv styre state med `activeStep` og `onStepChange`.
|
|
11
|
+
|
|
12
|
+
```jsx
|
|
13
|
+
<StepIndicator activeStep={activeStep} onStepChange={(x) => setActiveStep(x)}>
|
|
14
|
+
<StepIndicator.Step>Start</StepIndicator.Step>
|
|
15
|
+
<StepIndicator.Step>Sunt deserunt qui sit sunt culpa nisi</StepIndicator.Step>
|
|
16
|
+
<StepIndicator.Step>
|
|
17
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
18
|
+
</StepIndicator.Step>
|
|
19
|
+
<StepIndicator.Step>
|
|
20
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
21
|
+
</StepIndicator.Step>
|
|
22
|
+
</StepIndicator>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
<Canvas>
|
|
26
|
+
<Example />
|
|
27
|
+
</Canvas>
|
|
28
|
+
|
|
29
|
+
## responsive
|
|
30
|
+
|
|
31
|
+
Bruk `responsive`-prop for å skjule labels med en gang StepIndicator begynner å overlfowe.
|
|
32
|
+
|
|
33
|
+
```jsx
|
|
34
|
+
<StepIndicator
|
|
35
|
+
responsive
|
|
36
|
+
activeStep={activeStep}
|
|
37
|
+
onStepChange={(x) => setActiveStep(x)}
|
|
38
|
+
>
|
|
39
|
+
<StepIndicator.Step>Start</StepIndicator.Step>
|
|
40
|
+
<StepIndicator.Step>Sunt deserunt qui sit sunt culpa nisi</StepIndicator.Step>
|
|
41
|
+
<StepIndicator.Step>
|
|
42
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
43
|
+
</StepIndicator.Step>
|
|
44
|
+
<StepIndicator.Step>
|
|
45
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
46
|
+
</StepIndicator.Step>
|
|
47
|
+
</StepIndicator>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
<Canvas>
|
|
51
|
+
<Example responsive />
|
|
52
|
+
</Canvas>
|
|
53
|
+
|
|
54
|
+
## hideLabels
|
|
55
|
+
|
|
56
|
+
Du kan gjemme labels fra hvert steg med `hideLabels`-prop
|
|
57
|
+
|
|
58
|
+
```jsx
|
|
59
|
+
<StepIndicator
|
|
60
|
+
hideLabels
|
|
61
|
+
activeStep={activeStep}
|
|
62
|
+
onStepChange={(x) => setActiveStep(x)}
|
|
63
|
+
>
|
|
64
|
+
<StepIndicator.Step>Start</StepIndicator.Step>
|
|
65
|
+
<StepIndicator.Step>Sunt deserunt qui sit sunt culpa nisi</StepIndicator.Step>
|
|
66
|
+
<StepIndicator.Step>
|
|
67
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
68
|
+
</StepIndicator.Step>
|
|
69
|
+
<StepIndicator.Step>
|
|
70
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
71
|
+
</StepIndicator.Step>
|
|
72
|
+
</StepIndicator>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<Canvas>
|
|
76
|
+
<Example hideLabels />
|
|
77
|
+
</Canvas>
|
|
78
|
+
|
|
79
|
+
## disabled
|
|
80
|
+
|
|
81
|
+
```jsx
|
|
82
|
+
<StepIndicator activeStep={activeStep} onStepChange={(x) => setActiveStep(x)}>
|
|
83
|
+
<StepIndicator.Step>Start</StepIndicator.Step>
|
|
84
|
+
<StepIndicator.Step disabled>
|
|
85
|
+
Sunt deserunt qui sit sunt culpa nisi
|
|
86
|
+
</StepIndicator.Step>
|
|
87
|
+
<StepIndicator.Step disabled>
|
|
88
|
+
Nulla nisi pariatur nulla cupidatat elit.
|
|
89
|
+
</StepIndicator.Step>
|
|
90
|
+
<StepIndicator.Step>
|
|
91
|
+
Nulla laborum proident consequat laborum elit et dolore ut sunt.
|
|
92
|
+
</StepIndicator.Step>
|
|
93
|
+
</StepIndicator>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
<Canvas>
|
|
97
|
+
<Example disabled />
|
|
98
|
+
</Canvas>
|
|
99
|
+
|
|
100
|
+
## Override tags
|
|
101
|
+
|
|
102
|
+
`StepIndicator.Step` er implementert med Overridable-component noe som gjør at du kan endre taggen til
|
|
103
|
+
det du selv ønsker ved å bruke `as`-prop
|
|
104
|
+
|
|
105
|
+
```jsx
|
|
106
|
+
<StepIndicator activeStep={activeStep} onStepChange={(x) => setActiveStep(x)}>
|
|
107
|
+
{/* Dette er default */}
|
|
108
|
+
<StepIndicator.Step as="button">Start</StepIndicator.Step>
|
|
109
|
+
<StepIndicator.Step as="a" href="#">
|
|
110
|
+
Sunt deserunt qui sit sunt culpa nisi
|
|
111
|
+
</StepIndicator.Step>
|
|
112
|
+
</StepIndicator>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
<Canvas>
|
|
116
|
+
<StepIndicator activeStep={1} onStepChange={console.log}>
|
|
117
|
+
<StepIndicator.Step as="button">{`<button>`}</StepIndicator.Step>
|
|
118
|
+
<StepIndicator.Step as="a" href="#">
|
|
119
|
+
{`<a>`}
|
|
120
|
+
</StepIndicator.Step>
|
|
121
|
+
</StepIndicator>
|
|
122
|
+
</Canvas>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import StepIndicator from "../StepIndicator";
|
|
3
|
+
import { Meta } from "@storybook/react/types-6-0";
|
|
4
|
+
import { Link, HashRouter as Router, useLocation } from "react-router-dom";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: "ds-react/step-indicator",
|
|
8
|
+
component: StepIndicator,
|
|
9
|
+
} as Meta;
|
|
10
|
+
|
|
11
|
+
export const All = () => {
|
|
12
|
+
const [activeStep, setActiveStep] = useState(1);
|
|
13
|
+
return (
|
|
14
|
+
<div>
|
|
15
|
+
<StepIndicator activeStep={1} onStepChange={console.log}>
|
|
16
|
+
<StepIndicator.Step>Steg nr 1</StepIndicator.Step>
|
|
17
|
+
<StepIndicator.Step>Laborum velit eu magna esse</StepIndicator.Step>
|
|
18
|
+
<StepIndicator.Step>test</StepIndicator.Step>
|
|
19
|
+
</StepIndicator>
|
|
20
|
+
<br />
|
|
21
|
+
|
|
22
|
+
<StepIndicator activeStep={1} onStepChange={console.log}>
|
|
23
|
+
<StepIndicator.Step href="#" as="a">
|
|
24
|
+
1
|
|
25
|
+
</StepIndicator.Step>
|
|
26
|
+
<StepIndicator.Step href="#" as="a">
|
|
27
|
+
2
|
|
28
|
+
</StepIndicator.Step>
|
|
29
|
+
<StepIndicator.Step href="#" as="a">
|
|
30
|
+
3
|
|
31
|
+
</StepIndicator.Step>
|
|
32
|
+
</StepIndicator>
|
|
33
|
+
<br />
|
|
34
|
+
<StepIndicator activeStep={activeStep} onStepChange={setActiveStep}>
|
|
35
|
+
<StepIndicator.Step disabled>
|
|
36
|
+
Pariatur pariatur adipisicing reprehenderit ad occaecat reprehenderit
|
|
37
|
+
ut dolore.
|
|
38
|
+
</StepIndicator.Step>
|
|
39
|
+
<StepIndicator.Step>Laborum velit eu magna esse</StepIndicator.Step>
|
|
40
|
+
<StepIndicator.Step disabled>
|
|
41
|
+
Cupidatat Lorem do nostrud ut eu.
|
|
42
|
+
</StepIndicator.Step>
|
|
43
|
+
<StepIndicator.Step>test</StepIndicator.Step>
|
|
44
|
+
<StepIndicator.Step>
|
|
45
|
+
Voluptate pariatur ut est voluptate elit officia excepteur laborum.
|
|
46
|
+
</StepIndicator.Step>
|
|
47
|
+
</StepIndicator>
|
|
48
|
+
<br />
|
|
49
|
+
<StepIndicator
|
|
50
|
+
activeStep={activeStep}
|
|
51
|
+
onStepChange={setActiveStep}
|
|
52
|
+
hideLabels
|
|
53
|
+
>
|
|
54
|
+
<StepIndicator.Step>
|
|
55
|
+
Pariatur pariatur adipisicing reprehenderit ad occaecat reprehenderit
|
|
56
|
+
ut dolore.
|
|
57
|
+
</StepIndicator.Step>
|
|
58
|
+
<StepIndicator.Step>Laborum velit eu magna esse</StepIndicator.Step>
|
|
59
|
+
<StepIndicator.Step disabled>
|
|
60
|
+
Cupidatat Lorem do nostrud ut eu.
|
|
61
|
+
</StepIndicator.Step>
|
|
62
|
+
<StepIndicator.Step>test</StepIndicator.Step>
|
|
63
|
+
<StepIndicator.Step>
|
|
64
|
+
Voluptate pariatur ut est voluptate elit officia excepteur laborum.
|
|
65
|
+
</StepIndicator.Step>
|
|
66
|
+
</StepIndicator>
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const ReactRouter = () => {
|
|
72
|
+
const { pathname } = useLocation();
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<StepIndicator
|
|
76
|
+
activeStep={
|
|
77
|
+
{
|
|
78
|
+
"/": 0,
|
|
79
|
+
"/first": 0,
|
|
80
|
+
"/second": 1,
|
|
81
|
+
"/third": 2,
|
|
82
|
+
}[pathname]
|
|
83
|
+
}
|
|
84
|
+
>
|
|
85
|
+
<StepIndicator.Step as={Link} to="/first">
|
|
86
|
+
Steg nr 1
|
|
87
|
+
</StepIndicator.Step>
|
|
88
|
+
<StepIndicator.Step as={Link} to="/second">
|
|
89
|
+
Laborum velit eu magna esse
|
|
90
|
+
</StepIndicator.Step>
|
|
91
|
+
<StepIndicator.Step as={Link} to="/third">
|
|
92
|
+
test
|
|
93
|
+
</StepIndicator.Step>
|
|
94
|
+
</StepIndicator>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
ReactRouter.decorators = [
|
|
99
|
+
(Story) => (
|
|
100
|
+
<Router>
|
|
101
|
+
<Story />
|
|
102
|
+
</Router>
|
|
103
|
+
),
|
|
104
|
+
];
|