@navikt/ds-react 0.14.7 → 0.14.10
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/button/Button.js +22 -3
- package/cjs/form/Switch.js +1 -1
- package/cjs/help-text/HelpText.js +2 -2
- package/cjs/popover/Popover.js +2 -1
- package/esm/button/Button.d.ts +5 -0
- package/esm/button/Button.js +24 -5
- package/esm/button/Button.js.map +1 -1
- package/esm/form/Switch.js +1 -1
- package/esm/form/Switch.js.map +1 -1
- package/esm/help-text/HelpText.d.ts +2 -7
- package/esm/help-text/HelpText.js +2 -2
- package/esm/help-text/HelpText.js.map +1 -1
- package/esm/popover/Popover.d.ts +6 -0
- package/esm/popover/Popover.js +2 -1
- package/esm/popover/Popover.js.map +1 -1
- package/package.json +2 -2
- package/src/button/Button.tsx +55 -18
- package/src/button/stories/button.stories.mdx +17 -11
- package/src/button/stories/button.stories.tsx +39 -1
- package/src/form/Switch.tsx +2 -2
- package/src/help-text/HelpText.tsx +12 -9
- package/src/loader/stories/loader.stories.mdx +0 -22
- package/src/popover/Popover.tsx +8 -0
package/cjs/button/Button.js
CHANGED
|
@@ -34,11 +34,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
34
34
|
};
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const react_1 = __importStar(require("react"));
|
|
37
|
+
const react_merge_refs_1 = __importDefault(require("react-merge-refs"));
|
|
37
38
|
const classnames_1 = __importDefault(require("classnames"));
|
|
38
39
|
const __1 = require("../");
|
|
40
|
+
const util_1 = require("../util");
|
|
39
41
|
const Button = (0, react_1.forwardRef)((_a, ref) => {
|
|
40
|
-
var { as: Component = "button", variant = "primary", className, children, size = "medium" } = _a, rest = __rest(_a, ["as", "variant", "className", "children", "size"]);
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
var { as: Component = "button", variant = "primary", className, children, size = "medium", loading = false, disabled } = _a, rest = __rest(_a, ["as", "variant", "className", "children", "size", "loading", "disabled"]);
|
|
43
|
+
const buttonRef = (0, react_1.useRef)(null);
|
|
44
|
+
const mergedRef = (0, react_merge_refs_1.default)([buttonRef, ref]);
|
|
45
|
+
const [widthOverride, setWidthOverride] = (0, react_1.useState)();
|
|
46
|
+
(0, util_1.useClientLayoutEffect)(() => {
|
|
47
|
+
if (loading) {
|
|
48
|
+
const requestID = window.requestAnimationFrame(() => {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
setWidthOverride((_b = (_a = buttonRef === null || buttonRef === void 0 ? void 0 : buttonRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width);
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
setWidthOverride(undefined);
|
|
54
|
+
cancelAnimationFrame(requestID);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}, [loading, children]);
|
|
58
|
+
return (react_1.default.createElement(Component, Object.assign({}, rest, { ref: mergedRef, className: (0, classnames_1.default)(className, "navds-button", `navds-button--${variant}`, `navds-button--${size}`, {
|
|
59
|
+
"navds-button--loading": widthOverride,
|
|
60
|
+
}), style: { width: widthOverride }, disabled: (disabled !== null && disabled !== void 0 ? disabled : widthOverride) ? true : undefined }),
|
|
61
|
+
react_1.default.createElement(__1.BodyShort, { as: "span", className: "navds-button__inner", size: size, "aria-live": "polite" }, widthOverride ? react_1.default.createElement(__1.Loader, { size: size }) : children)));
|
|
43
62
|
});
|
|
44
63
|
exports.default = Button;
|
package/cjs/form/Switch.js
CHANGED
|
@@ -38,7 +38,7 @@ const react_1 = __importStar(require("react"));
|
|
|
38
38
|
const __1 = require("..");
|
|
39
39
|
const useFormField_1 = require("./useFormField");
|
|
40
40
|
const SelectedIcon = () => (react_1.default.createElement("svg", { width: "12px", height: "12px", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", focusable: false, role: "img", "aria-hidden": true, "aria-label": "Deaktiver valg" },
|
|
41
|
-
react_1.default.createElement("path", {
|
|
41
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.01386 8L10.25 2L11 2.75L4.01386 9.5L1 6.5L1.75 5.75L4.01386 8Z", fill: "currentColor", stroke: "currentColor" })));
|
|
42
42
|
const Switch = (0, react_1.forwardRef)((props, ref) => {
|
|
43
43
|
var _a;
|
|
44
44
|
const { inputProps, size } = (0, useFormField_1.useFormField)(props, "switch");
|
|
@@ -39,7 +39,7 @@ const react_1 = __importStar(require("react"));
|
|
|
39
39
|
const react_merge_refs_1 = __importDefault(require("react-merge-refs"));
|
|
40
40
|
const __1 = require("..");
|
|
41
41
|
const HelpText = (0, react_1.forwardRef)((_a, ref) => {
|
|
42
|
-
var { className, children, placement = "top", title = "hjelp" } = _a, rest = __rest(_a, ["className", "children", "placement", "title"]);
|
|
42
|
+
var { className, children, placement = "top", strategy = "absolute", title = "hjelp" } = _a, rest = __rest(_a, ["className", "children", "placement", "strategy", "title"]);
|
|
43
43
|
const buttonRef = (0, react_1.useRef)(null);
|
|
44
44
|
const mergedRef = (0, react_merge_refs_1.default)([buttonRef, ref]);
|
|
45
45
|
const popoverRef = (0, react_1.useRef)(null);
|
|
@@ -57,7 +57,7 @@ const HelpText = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
57
57
|
react_1.default.createElement("button", Object.assign({}, rest, { ref: mergedRef, onClick: (e) => handleClick(e), className: (0, classnames_1.default)(className, "navds-help-text__button"), type: "button", "aria-expanded": open, "aria-haspopup": "dialog", title: title }),
|
|
58
58
|
react_1.default.createElement(ds_icons_1.Helptext, { className: "navds-help-text__icon" }),
|
|
59
59
|
react_1.default.createElement("span", { className: "navds-sr-only" }, title)),
|
|
60
|
-
react_1.default.createElement(__1.Popover, { ref: popoverRef, onClose: () => setOpen(false), className: "navds-help-text__popover", open: open, role: "tooltip", anchorEl: buttonRef.current, placement: placement },
|
|
60
|
+
react_1.default.createElement(__1.Popover, { ref: popoverRef, onClose: () => setOpen(false), className: "navds-help-text__popover", open: open, role: "tooltip", anchorEl: buttonRef.current, placement: placement, strategy: strategy },
|
|
61
61
|
react_1.default.createElement(__1.Popover.Content, null, children))));
|
|
62
62
|
});
|
|
63
63
|
exports.default = HelpText;
|
package/cjs/popover/Popover.js
CHANGED
|
@@ -46,7 +46,7 @@ const useEventLister = (event, callback) => (0, react_1.useEffect)(() => {
|
|
|
46
46
|
};
|
|
47
47
|
}, [event, callback]);
|
|
48
48
|
const Popover = (0, react_1.forwardRef)((_a, ref) => {
|
|
49
|
-
var { className, children, anchorEl, arrow = true, open, onClose, placement = "right", offset } = _a, rest = __rest(_a, ["className", "children", "anchorEl", "arrow", "open", "onClose", "placement", "offset"]);
|
|
49
|
+
var { className, children, anchorEl, arrow = true, open, onClose, placement = "right", offset, strategy = "absolute" } = _a, rest = __rest(_a, ["className", "children", "anchorEl", "arrow", "open", "onClose", "placement", "offset", "strategy"]);
|
|
50
50
|
const popoverRef = (0, react_1.useRef)(null);
|
|
51
51
|
const mergedRef = (0, react_merge_refs_1.default)([popoverRef, ref]);
|
|
52
52
|
const close = (0, react_1.useCallback)(() => open && onClose(), [open, onClose]);
|
|
@@ -77,6 +77,7 @@ const Popover = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
],
|
|
80
|
+
strategy,
|
|
80
81
|
});
|
|
81
82
|
(0, __1.useClientLayoutEffect)(() => {
|
|
82
83
|
open && update && update();
|
package/esm/button/Button.d.ts
CHANGED
|
@@ -21,6 +21,11 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
|
|
|
21
21
|
* @default false
|
|
22
22
|
*/
|
|
23
23
|
disabled?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Replaces button content with a Loader component, keeps width
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
loading?: boolean;
|
|
24
29
|
}
|
|
25
30
|
declare const Button: OverridableComponent<ButtonProps, HTMLButtonElement>;
|
|
26
31
|
export default Button;
|
package/esm/button/Button.js
CHANGED
|
@@ -9,13 +9,32 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import React, { forwardRef } from "react";
|
|
12
|
+
import React, { useRef, useState, forwardRef } from "react";
|
|
13
|
+
import mergeRefs from "react-merge-refs";
|
|
13
14
|
import cl from "classnames";
|
|
14
|
-
import { BodyShort } from "../";
|
|
15
|
+
import { BodyShort, Loader } from "../";
|
|
16
|
+
import { useClientLayoutEffect } from "../util";
|
|
15
17
|
const Button = forwardRef((_a, ref) => {
|
|
16
|
-
var { as: Component = "button", variant = "primary", className, children, size = "medium" } = _a, rest = __rest(_a, ["as", "variant", "className", "children", "size"]);
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
var { as: Component = "button", variant = "primary", className, children, size = "medium", loading = false, disabled } = _a, rest = __rest(_a, ["as", "variant", "className", "children", "size", "loading", "disabled"]);
|
|
19
|
+
const buttonRef = useRef(null);
|
|
20
|
+
const mergedRef = mergeRefs([buttonRef, ref]);
|
|
21
|
+
const [widthOverride, setWidthOverride] = useState();
|
|
22
|
+
useClientLayoutEffect(() => {
|
|
23
|
+
if (loading) {
|
|
24
|
+
const requestID = window.requestAnimationFrame(() => {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
setWidthOverride((_b = (_a = buttonRef === null || buttonRef === void 0 ? void 0 : buttonRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width);
|
|
27
|
+
});
|
|
28
|
+
return () => {
|
|
29
|
+
setWidthOverride(undefined);
|
|
30
|
+
cancelAnimationFrame(requestID);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}, [loading, children]);
|
|
34
|
+
return (React.createElement(Component, Object.assign({}, rest, { ref: mergedRef, className: cl(className, "navds-button", `navds-button--${variant}`, `navds-button--${size}`, {
|
|
35
|
+
"navds-button--loading": widthOverride,
|
|
36
|
+
}), style: { width: widthOverride }, disabled: (disabled !== null && disabled !== void 0 ? disabled : widthOverride) ? true : undefined }),
|
|
37
|
+
React.createElement(BodyShort, { as: "span", className: "navds-button__inner", size: size, "aria-live": "polite" }, widthOverride ? React.createElement(Loader, { size: size }) : children)));
|
|
19
38
|
});
|
|
20
39
|
export default Button;
|
|
21
40
|
//# sourceMappingURL=Button.js.map
|
package/esm/button/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/button/Button.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/button/Button.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAwB,MAAM,EAAE,MAAM,KAAK,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA+BhD,MAAM,MAAM,GAAyD,UAAU,CAC7E,CACE,EASC,EACD,GAAG,EACH,EAAE;QAXF,EACE,EAAE,EAAE,SAAS,GAAG,QAAQ,EACxB,OAAO,GAAG,SAAS,EACnB,SAAS,EACT,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,OAAO,GAAG,KAAK,EACf,QAAQ,OAET,EADI,IAAI,cART,yEASC,CADQ;IAIT,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,EAAU,CAAC;IAE7D,qBAAqB,CAAC,GAAG,EAAE;QACzB,IAAI,OAAO,EAAE;YACX,MAAM,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;;gBAClD,gBAAgB,CAAC,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAE,qBAAqB,EAAE,0CAAE,KAAK,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,EAAE;gBACV,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC,CAAC;SACH;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,EAAE,CACX,SAAS,EACT,cAAc,EACd,iBAAiB,OAAO,EAAE,EAC1B,iBAAiB,IAAI,EAAE,EACvB;YACE,uBAAuB,EAAE,aAAa;SACvC,CACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAC/B,QAAQ,EAAE,CAAA,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,aAAa,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAEtD,oBAAC,SAAS,IACR,EAAE,EAAC,MAAM,EACT,SAAS,EAAC,qBAAqB,EAC/B,IAAI,EAAE,IAAI,eACA,QAAQ,IAEjB,aAAa,CAAC,CAAC,CAAC,oBAAC,MAAM,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,QAAQ,CACxC,CACF,CACb,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/esm/form/Switch.js
CHANGED
|
@@ -14,7 +14,7 @@ import React, { forwardRef, useEffect, useState, } from "react";
|
|
|
14
14
|
import { BodyShort, Detail, Loader, omit } from "..";
|
|
15
15
|
import { useFormField } from "./useFormField";
|
|
16
16
|
const SelectedIcon = () => (React.createElement("svg", { width: "12px", height: "12px", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", focusable: false, role: "img", "aria-hidden": true, "aria-label": "Deaktiver valg" },
|
|
17
|
-
React.createElement("path", {
|
|
17
|
+
React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.01386 8L10.25 2L11 2.75L4.01386 9.5L1 6.5L1.75 5.75L4.01386 8Z", fill: "currentColor", stroke: "currentColor" })));
|
|
18
18
|
const Switch = forwardRef((props, ref) => {
|
|
19
19
|
var _a;
|
|
20
20
|
const { inputProps, size } = useFormField(props, "switch");
|
package/esm/form/Switch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../src/form/Switch.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EACZ,UAAU,EAEV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACrD,OAAO,EAAkB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CACzB,6BACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAClC,SAAS,EAAE,KAAK,EAChB,IAAI,EAAC,KAAK,qCAEC,gBAAgB;IAE3B,
|
|
1
|
+
{"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../src/form/Switch.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EACZ,UAAU,EAEV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACrD,OAAO,EAAkB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CACzB,6BACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAClC,SAAS,EAAE,KAAK,EAChB,IAAI,EAAC,KAAK,qCAEC,gBAAgB;IAE3B,8BACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,mEAAmE,EACrE,IAAI,EAAC,cAAc,EACnB,MAAM,EAAC,cAAc,GACrB,CACE,CACP,CAAC;AAuBF,MAAM,MAAM,GAAG,UAAU,CAAgC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;;IACtE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3D,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,GAAG,KAAK,EACjB,OAAO,EACP,OAAO,EAAE,WAAW,EACpB,cAAc,EACd,QAAQ,GAAG,MAAM,KAEf,KAAK,EADJ,IAAI,UACL,KAAK,EAVH,yGAUL,CAAQ,CAAC;IAEV,MAAM,WAAW,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAE3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,MAAA,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,WAAW,mCAAI,KAAK,CACvC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,YAAY,GAAG,CAAC,CAAsC,EAAE,EAAE;QAC9D,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO,CACL,6BACE,SAAS,EAAE,EAAE,CACX,cAAc,EACd,KAAK,CAAC,SAAS,EACf,iBAAiB,IAAI,EAAE,EACvB,iBAAiB,QAAQ,EAAE,EAC3B;YACE,wBAAwB,EAAE,UAAU,CAAC,QAAQ;SAC9C,CACF;QAED,+CACM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EACpB,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,IAC1D,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAChC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAC/C;QACF,8BAAM,SAAS,EAAC,qBAAqB;YACnC,8BAAM,SAAS,EAAC,qBAAqB,IAClC,OAAO,CAAC,CAAC,CAAC,CACT,oBAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,GAAG,CACzB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,oBAAC,YAAY,OAAG,CACjB,CAAC,CAAC,CAAC,IAAI,CACH,CACF;QACP,+BAAO,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAC,6BAA6B;YACpE,6BACE,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE;oBACrC,SAAS,EAAE,SAAS;oBACpB,gCAAgC,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS;iBAC9D,CAAC;gBAEF,oBAAC,SAAS,IAAC,EAAE,EAAC,KAAK,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,qBAAqB,IAC5D,QAAQ,CACC;gBACX,WAAW,IAAI,CACd,oBAAC,WAAW,IACV,EAAE,EAAC,KAAK,EACR,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,2BAA2B,IAEpC,WAAW,CACA,CACf,CACG,CACA,CACJ,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import { Placement } from "@popperjs/core";
|
|
2
1
|
import React from "react";
|
|
3
|
-
|
|
2
|
+
import { PopoverProps } from "..";
|
|
3
|
+
export interface HelpTextProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, Pick<PopoverProps, "strategy" | "placement"> {
|
|
4
4
|
/**
|
|
5
5
|
* Component content
|
|
6
6
|
*/
|
|
7
7
|
children: React.ReactNode;
|
|
8
|
-
/**
|
|
9
|
-
* Placement of popover
|
|
10
|
-
* @default "top"
|
|
11
|
-
*/
|
|
12
|
-
placement?: Placement;
|
|
13
8
|
}
|
|
14
9
|
declare const HelpText: React.ForwardRefExoticComponent<HelpTextProps & React.RefAttributes<HTMLButtonElement>>;
|
|
15
10
|
export default HelpText;
|
|
@@ -15,7 +15,7 @@ import React, { forwardRef, useEffect, useRef, useState } from "react";
|
|
|
15
15
|
import mergeRefs from "react-merge-refs";
|
|
16
16
|
import { Popover } from "..";
|
|
17
17
|
const HelpText = forwardRef((_a, ref) => {
|
|
18
|
-
var { className, children, placement = "top", title = "hjelp" } = _a, rest = __rest(_a, ["className", "children", "placement", "title"]);
|
|
18
|
+
var { className, children, placement = "top", strategy = "absolute", title = "hjelp" } = _a, rest = __rest(_a, ["className", "children", "placement", "strategy", "title"]);
|
|
19
19
|
const buttonRef = useRef(null);
|
|
20
20
|
const mergedRef = mergeRefs([buttonRef, ref]);
|
|
21
21
|
const popoverRef = useRef(null);
|
|
@@ -33,7 +33,7 @@ const HelpText = forwardRef((_a, ref) => {
|
|
|
33
33
|
React.createElement("button", Object.assign({}, rest, { ref: mergedRef, onClick: (e) => handleClick(e), className: cl(className, "navds-help-text__button"), type: "button", "aria-expanded": open, "aria-haspopup": "dialog", title: title }),
|
|
34
34
|
React.createElement(HelpTextIcon, { className: "navds-help-text__icon" }),
|
|
35
35
|
React.createElement("span", { className: "navds-sr-only" }, title)),
|
|
36
|
-
React.createElement(Popover, { ref: popoverRef, onClose: () => setOpen(false), className: "navds-help-text__popover", open: open, role: "tooltip", anchorEl: buttonRef.current, placement: placement },
|
|
36
|
+
React.createElement(Popover, { ref: popoverRef, onClose: () => setOpen(false), className: "navds-help-text__popover", open: open, role: "tooltip", anchorEl: buttonRef.current, placement: placement, strategy: strategy },
|
|
37
37
|
React.createElement(Popover.Content, null, children))));
|
|
38
38
|
});
|
|
39
39
|
export default HelpText;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelpText.js","sourceRoot":"","sources":["../../src/help-text/HelpText.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"HelpText.js","sourceRoot":"","sources":["../../src/help-text/HelpText.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAgB,MAAM,IAAI,CAAC;AAW3C,MAAM,QAAQ,GAAG,UAAU,CACzB,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,SAAS,EACT,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,UAAU,EACrB,KAAK,GAAG,OAAO,OAEhB,EADI,IAAI,cANT,2DAOC,CADQ;IAIT,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEvD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;;QACb,IAAI,KAAI,MAAA,UAAU,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,CAAC;IACtC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,WAAW,GAAG,CAClB,CAAkD,EAClD,EAAE;QACF,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,iBAAiB,EAAC,GAAG,EAAE,UAAU;QAC9C,gDACM,IAAI,IACR,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAC9B,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,yBAAyB,CAAC,EACnD,IAAI,EAAC,QAAQ,mBACE,IAAI,mBACL,QAAQ,EACtB,KAAK,EAAE,KAAK;YAEZ,oBAAC,YAAY,IAAC,SAAS,EAAC,uBAAuB,GAAG;YAClD,8BAAM,SAAS,EAAC,eAAe,IAAE,KAAK,CAAQ,CACvC;QACT,oBAAC,OAAO,IACN,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAE,IAAI,EACV,IAAI,EAAC,SAAS,EACd,QAAQ,EAAE,SAAS,CAAC,OAAO,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ;YAElB,oBAAC,OAAO,CAAC,OAAO,QAAE,QAAQ,CAAmB,CACrC,CACN,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/esm/popover/Popover.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export interface PopoverProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
33
33
|
* @default 16 w/arrow, 4 w/no-arrow
|
|
34
34
|
*/
|
|
35
35
|
offset?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Changes what CSS position property to use
|
|
38
|
+
* You want to use "fixed" if reference element is inside a fixed container, but popover is not
|
|
39
|
+
* @default "absolute"
|
|
40
|
+
*/
|
|
41
|
+
strategy?: "absolute" | "fixed";
|
|
36
42
|
}
|
|
37
43
|
interface PopoverComponent extends React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>> {
|
|
38
44
|
Content: PopoverContentType;
|
package/esm/popover/Popover.js
CHANGED
|
@@ -22,7 +22,7 @@ const useEventLister = (event, callback) => useEffect(() => {
|
|
|
22
22
|
};
|
|
23
23
|
}, [event, callback]);
|
|
24
24
|
const Popover = forwardRef((_a, ref) => {
|
|
25
|
-
var { className, children, anchorEl, arrow = true, open, onClose, placement = "right", offset } = _a, rest = __rest(_a, ["className", "children", "anchorEl", "arrow", "open", "onClose", "placement", "offset"]);
|
|
25
|
+
var { className, children, anchorEl, arrow = true, open, onClose, placement = "right", offset, strategy = "absolute" } = _a, rest = __rest(_a, ["className", "children", "anchorEl", "arrow", "open", "onClose", "placement", "offset", "strategy"]);
|
|
26
26
|
const popoverRef = useRef(null);
|
|
27
27
|
const mergedRef = mergeRefs([popoverRef, ref]);
|
|
28
28
|
const close = useCallback(() => open && onClose(), [open, onClose]);
|
|
@@ -53,6 +53,7 @@ const Popover = forwardRef((_a, ref) => {
|
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
55
|
],
|
|
56
|
+
strategy,
|
|
56
57
|
});
|
|
57
58
|
useClientLayoutEffect(() => {
|
|
58
59
|
open && update && update();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/popover/Popover.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EACZ,UAAU,EAEV,WAAW,EACX,SAAS,EACT,MAAM,GACP,MAAM,OAAO,CAAC;AACf,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,cAAsC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/popover/Popover.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "NAV designsystem react components",
|
|
6
6
|
"author": "NAV Designsystem team",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"@types/react": "^17.0.30",
|
|
65
65
|
"react": "^17.0.0"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "ebb04c4a564d7524e5815a87be7690a64f7a7c8f"
|
|
68
68
|
}
|
package/src/button/Button.tsx
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import React, { forwardRef } from "react";
|
|
1
|
+
import React, { useRef, useState, forwardRef } from "react";
|
|
2
|
+
import mergeRefs from "react-merge-refs";
|
|
2
3
|
import cl from "classnames";
|
|
3
|
-
import { BodyShort, OverridableComponent } from "../";
|
|
4
|
+
import { BodyShort, OverridableComponent, Loader } from "../";
|
|
5
|
+
import { useClientLayoutEffect } from "../util";
|
|
4
6
|
|
|
5
7
|
export interface ButtonProps
|
|
6
8
|
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -24,6 +26,11 @@ export interface ButtonProps
|
|
|
24
26
|
* @default false
|
|
25
27
|
*/
|
|
26
28
|
disabled?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Replaces button content with a Loader component, keeps width
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
loading?: boolean;
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
const Button: OverridableComponent<ButtonProps, HTMLButtonElement> = forwardRef(
|
|
@@ -34,25 +41,55 @@ const Button: OverridableComponent<ButtonProps, HTMLButtonElement> = forwardRef(
|
|
|
34
41
|
className,
|
|
35
42
|
children,
|
|
36
43
|
size = "medium",
|
|
44
|
+
loading = false,
|
|
45
|
+
disabled,
|
|
37
46
|
...rest
|
|
38
47
|
},
|
|
39
48
|
ref
|
|
40
|
-
) =>
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
) => {
|
|
50
|
+
const buttonRef = useRef<HTMLButtonElement | null>(null);
|
|
51
|
+
const mergedRef = mergeRefs([buttonRef, ref]);
|
|
52
|
+
const [widthOverride, setWidthOverride] = useState<number>();
|
|
53
|
+
|
|
54
|
+
useClientLayoutEffect(() => {
|
|
55
|
+
if (loading) {
|
|
56
|
+
const requestID = window.requestAnimationFrame(() => {
|
|
57
|
+
setWidthOverride(buttonRef?.current?.getBoundingClientRect()?.width);
|
|
58
|
+
});
|
|
59
|
+
return () => {
|
|
60
|
+
setWidthOverride(undefined);
|
|
61
|
+
cancelAnimationFrame(requestID);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}, [loading, children]);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<Component
|
|
68
|
+
{...rest}
|
|
69
|
+
ref={mergedRef}
|
|
70
|
+
className={cl(
|
|
71
|
+
className,
|
|
72
|
+
"navds-button",
|
|
73
|
+
`navds-button--${variant}`,
|
|
74
|
+
`navds-button--${size}`,
|
|
75
|
+
{
|
|
76
|
+
"navds-button--loading": widthOverride,
|
|
77
|
+
}
|
|
78
|
+
)}
|
|
79
|
+
style={{ width: widthOverride }}
|
|
80
|
+
disabled={disabled ?? widthOverride ? true : undefined}
|
|
81
|
+
>
|
|
82
|
+
<BodyShort
|
|
83
|
+
as="span"
|
|
84
|
+
className="navds-button__inner"
|
|
85
|
+
size={size}
|
|
86
|
+
aria-live="polite"
|
|
87
|
+
>
|
|
88
|
+
{widthOverride ? <Loader size={size} /> : children}
|
|
89
|
+
</BodyShort>
|
|
90
|
+
</Component>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
56
93
|
);
|
|
57
94
|
|
|
58
95
|
export default Button;
|
|
@@ -45,26 +45,32 @@ Button har to størrelser: Default 48px min-height og small 32px min-height
|
|
|
45
45
|
</Button>
|
|
46
46
|
</Canvas>
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## Loading
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
bli justert
|
|
50
|
+
Button har en egen `loading`-prop setter knappen til disabled og viser `Loader`.
|
|
51
|
+
Button width bli automatisk justert basert på innholdet sin bredde.
|
|
52
52
|
|
|
53
53
|
<Canvas>
|
|
54
|
-
<Button>
|
|
55
|
-
|
|
54
|
+
<Button loading variant="primary">
|
|
55
|
+
Primary
|
|
56
56
|
</Button>
|
|
57
|
-
<Button
|
|
58
|
-
|
|
59
|
-
Laster...
|
|
60
|
-
<Loader />
|
|
57
|
+
<Button loading variant="secondary">
|
|
58
|
+
Secondary
|
|
61
59
|
</Button>
|
|
60
|
+
</Canvas>
|
|
61
|
+
|
|
62
|
+
## Med ikon
|
|
63
|
+
|
|
64
|
+
Hvis man setter ikoner (svg) rett på button vil størrelsen
|
|
65
|
+
bli justert automatisk og sentrert.
|
|
66
|
+
|
|
67
|
+
<Canvas>
|
|
62
68
|
<Button>
|
|
63
|
-
<Success />
|
|
69
|
+
<Success /> Knapp <Success />
|
|
64
70
|
</Button>
|
|
65
71
|
<Button size="small">
|
|
66
72
|
<Success />
|
|
67
|
-
|
|
73
|
+
Knapp
|
|
68
74
|
<Success />
|
|
69
75
|
</Button>
|
|
70
76
|
</Canvas>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
2
2
|
import { Button } from "../index";
|
|
3
3
|
import { Success } from "@navikt/ds-icons";
|
|
4
4
|
|
|
@@ -37,6 +37,13 @@ const varSwitch = {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
export const All = () => {
|
|
40
|
+
const [loadingState, setLoadingState] = useState(true);
|
|
41
|
+
const [content, setContent] = useState<string>("");
|
|
42
|
+
|
|
43
|
+
const toggleLoading = () => {
|
|
44
|
+
setLoadingState(!loadingState);
|
|
45
|
+
};
|
|
46
|
+
|
|
40
47
|
return (
|
|
41
48
|
<div style={{ paddingLeft: "1rem" }}>
|
|
42
49
|
<h1>Button</h1>
|
|
@@ -103,6 +110,37 @@ export const All = () => {
|
|
|
103
110
|
</Button>
|
|
104
111
|
))}
|
|
105
112
|
</Section>
|
|
113
|
+
<h2>Button w/loader</h2>
|
|
114
|
+
<Button onClick={toggleLoading}>Toggle loaders</Button>
|
|
115
|
+
<Button onClick={() => setContent((content) => `${content} wat`)}>
|
|
116
|
+
Change content
|
|
117
|
+
</Button>
|
|
118
|
+
<Section>
|
|
119
|
+
{variants.map((variant) => (
|
|
120
|
+
<Button
|
|
121
|
+
key={variant}
|
|
122
|
+
variant={variant}
|
|
123
|
+
loading={loadingState}
|
|
124
|
+
onClick={toggleLoading}
|
|
125
|
+
>
|
|
126
|
+
{content || varSwitch[variant]}
|
|
127
|
+
</Button>
|
|
128
|
+
))}
|
|
129
|
+
</Section>
|
|
130
|
+
<h2>Small w/loader</h2>
|
|
131
|
+
<Section>
|
|
132
|
+
{variants.map((variant) => (
|
|
133
|
+
<Button
|
|
134
|
+
key={variant}
|
|
135
|
+
variant={variant}
|
|
136
|
+
size="small"
|
|
137
|
+
loading={loadingState}
|
|
138
|
+
onClick={toggleLoading}
|
|
139
|
+
>
|
|
140
|
+
{varSwitch[variant]}
|
|
141
|
+
</Button>
|
|
142
|
+
))}
|
|
143
|
+
</Section>
|
|
106
144
|
</div>
|
|
107
145
|
);
|
|
108
146
|
};
|
package/src/form/Switch.tsx
CHANGED
|
@@ -21,8 +21,8 @@ const SelectedIcon = () => (
|
|
|
21
21
|
aria-label="Deaktiver valg"
|
|
22
22
|
>
|
|
23
23
|
<path
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
fillRule="evenodd"
|
|
25
|
+
clipRule="evenodd"
|
|
26
26
|
d="M4.01386 8L10.25 2L11 2.75L4.01386 9.5L1 6.5L1.75 5.75L4.01386 8Z"
|
|
27
27
|
fill="currentColor"
|
|
28
28
|
stroke="currentColor"
|
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import { Helptext as HelpTextIcon } from "@navikt/ds-icons";
|
|
2
|
-
import { Placement } from "@popperjs/core";
|
|
3
2
|
import cl from "classnames";
|
|
4
3
|
import React, { forwardRef, useEffect, useRef, useState } from "react";
|
|
5
4
|
import mergeRefs from "react-merge-refs";
|
|
6
|
-
import { Popover } from "..";
|
|
5
|
+
import { Popover, PopoverProps } from "..";
|
|
7
6
|
|
|
8
7
|
export interface HelpTextProps
|
|
9
|
-
extends React.ButtonHTMLAttributes<HTMLButtonElement
|
|
8
|
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
9
|
+
Pick<PopoverProps, "strategy" | "placement"> {
|
|
10
10
|
/**
|
|
11
11
|
* Component content
|
|
12
12
|
*/
|
|
13
13
|
children: React.ReactNode;
|
|
14
|
-
/**
|
|
15
|
-
* Placement of popover
|
|
16
|
-
* @default "top"
|
|
17
|
-
*/
|
|
18
|
-
placement?: Placement;
|
|
19
14
|
}
|
|
20
15
|
|
|
21
16
|
const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
|
|
22
17
|
(
|
|
23
|
-
{
|
|
18
|
+
{
|
|
19
|
+
className,
|
|
20
|
+
children,
|
|
21
|
+
placement = "top",
|
|
22
|
+
strategy = "absolute",
|
|
23
|
+
title = "hjelp",
|
|
24
|
+
...rest
|
|
25
|
+
},
|
|
24
26
|
ref
|
|
25
27
|
) => {
|
|
26
28
|
const buttonRef = useRef<HTMLButtonElement | null>(null);
|
|
@@ -64,6 +66,7 @@ const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
|
|
|
64
66
|
role="tooltip"
|
|
65
67
|
anchorEl={buttonRef.current}
|
|
66
68
|
placement={placement}
|
|
69
|
+
strategy={strategy}
|
|
67
70
|
>
|
|
68
71
|
<Popover.Content>{children}</Popover.Content>
|
|
69
72
|
</Popover>
|
|
@@ -63,25 +63,3 @@ Bakgrunnen kan settes til transparent med `transparent={true}`
|
|
|
63
63
|
<Canvas>
|
|
64
64
|
<Loader size="2xlarge" transparent />
|
|
65
65
|
</Canvas>
|
|
66
|
-
|
|
67
|
-
## Bruk av loader i knapper
|
|
68
|
-
|
|
69
|
-
Husk her å gi brukeren nok informasjon om hvorfor knappen har en Loader. Dette kan gjøres ved å ha god tekst på siden,
|
|
70
|
-
i knappen og i `title`-proppen for `Loader`. Unngå også bruk av `Loader` uten noen tekst som hinter til hva som foregår.
|
|
71
|
-
|
|
72
|
-
Stylingen er overstyrt for knapper, slik at `transparent` ikke fungerer by-default ved bruk i knapper.
|
|
73
|
-
Størrelsen justeres også automatisk, slik at alt man trenger er å sette Loaderen rett inn i knappen.
|
|
74
|
-
|
|
75
|
-
```jsx
|
|
76
|
-
<Button>
|
|
77
|
-
Laster inn nytt innhold...
|
|
78
|
-
<Loader />
|
|
79
|
-
</Button>
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
<Canvas>
|
|
83
|
-
<Button>
|
|
84
|
-
Laster inn nytt innhold...
|
|
85
|
-
<Loader />
|
|
86
|
-
</Button>
|
|
87
|
-
</Canvas>
|
package/src/popover/Popover.tsx
CHANGED
|
@@ -44,6 +44,12 @@ export interface PopoverProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
44
44
|
* @default 16 w/arrow, 4 w/no-arrow
|
|
45
45
|
*/
|
|
46
46
|
offset?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Changes what CSS position property to use
|
|
49
|
+
* You want to use "fixed" if reference element is inside a fixed container, but popover is not
|
|
50
|
+
* @default "absolute"
|
|
51
|
+
*/
|
|
52
|
+
strategy?: "absolute" | "fixed";
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
const useEventLister = (event: string, callback) =>
|
|
@@ -72,6 +78,7 @@ const Popover = forwardRef<HTMLDivElement, PopoverProps>(
|
|
|
72
78
|
onClose,
|
|
73
79
|
placement = "right",
|
|
74
80
|
offset,
|
|
81
|
+
strategy = "absolute",
|
|
75
82
|
...rest
|
|
76
83
|
},
|
|
77
84
|
ref
|
|
@@ -137,6 +144,7 @@ const Popover = forwardRef<HTMLDivElement, PopoverProps>(
|
|
|
137
144
|
},
|
|
138
145
|
},
|
|
139
146
|
],
|
|
147
|
+
strategy,
|
|
140
148
|
}
|
|
141
149
|
);
|
|
142
150
|
|