@navikt/ds-react 0.14.10-next.0 → 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.
Files changed (42) hide show
  1. package/cjs/button/Button.js +22 -3
  2. package/cjs/form/search-field/SearchField.js +23 -44
  3. package/cjs/form/search-field/SearchFieldButton.js +50 -0
  4. package/cjs/form/search-field/SearchFieldClearButton.js +50 -0
  5. package/cjs/form/search-field/SearchFieldInput.js +49 -0
  6. package/cjs/util/index.js +1 -15
  7. package/esm/button/Button.d.ts +5 -0
  8. package/esm/button/Button.js +24 -5
  9. package/esm/button/Button.js.map +1 -1
  10. package/esm/form/search-field/SearchField.d.ts +25 -25
  11. package/esm/form/search-field/SearchField.js +24 -46
  12. package/esm/form/search-field/SearchField.js.map +1 -1
  13. package/esm/form/search-field/SearchFieldButton.d.ts +17 -0
  14. package/esm/form/search-field/SearchFieldButton.js +27 -0
  15. package/esm/form/search-field/SearchFieldButton.js.map +1 -0
  16. package/esm/form/search-field/SearchFieldClearButton.d.ts +17 -0
  17. package/esm/form/search-field/SearchFieldClearButton.js +27 -0
  18. package/esm/form/search-field/SearchFieldClearButton.js.map +1 -0
  19. package/esm/form/search-field/SearchFieldInput.d.ts +6 -0
  20. package/esm/form/search-field/SearchFieldInput.js +26 -0
  21. package/esm/form/search-field/SearchFieldInput.js.map +1 -0
  22. package/esm/util/index.d.ts +0 -5
  23. package/esm/util/index.js +0 -13
  24. package/esm/util/index.js.map +1 -1
  25. package/package.json +2 -2
  26. package/src/button/Button.tsx +55 -18
  27. package/src/button/stories/button.stories.mdx +17 -11
  28. package/src/button/stories/button.stories.tsx +39 -1
  29. package/src/form/search-field/SearchField.tsx +71 -126
  30. package/src/form/search-field/SearchFieldButton.tsx +47 -0
  31. package/src/form/search-field/SearchFieldClearButton.tsx +49 -0
  32. package/src/form/search-field/SearchFieldInput.tsx +42 -0
  33. package/src/form/search-field/stories/search-field-example.tsx +25 -0
  34. package/src/form/search-field/stories/search-field.stories.mdx +89 -158
  35. package/src/form/search-field/stories/search-field.stories.tsx +154 -62
  36. package/src/loader/stories/loader.stories.mdx +0 -22
  37. package/src/util/index.ts +0 -33
  38. package/cjs/form/search-field/useSearchField.js +0 -31
  39. package/esm/form/search-field/useSearchField.d.ts +0 -10
  40. package/esm/form/search-field/useSearchField.js +0 -25
  41. package/esm/form/search-field/useSearchField.js.map +0 -1
  42. package/src/form/search-field/useSearchField.ts +0 -31
@@ -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
- return (react_1.default.createElement(Component, Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)(className, "navds-button", `navds-button--${variant}`, `navds-button--${size}`) }),
42
- react_1.default.createElement(__1.BodyShort, { as: "span", className: "navds-button__inner", size: size }, children)));
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;
@@ -33,58 +33,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- const ds_icons_1 = require("@navikt/ds-icons");
36
+ exports.SearchFieldContext = void 0;
37
37
  const classnames_1 = __importDefault(require("classnames"));
38
38
  const react_1 = __importStar(require("react"));
39
- const react_merge_refs_1 = __importDefault(require("react-merge-refs"));
40
39
  const __1 = require("../..");
41
- const useSearchField_1 = require("./useSearchField");
40
+ const ErrorMessage_1 = __importDefault(require("../ErrorMessage"));
41
+ const useFormField_1 = require("../useFormField");
42
+ const SearchFieldButton_1 = __importDefault(require("./SearchFieldButton"));
43
+ const SearchFieldClearButton_1 = __importDefault(require("./SearchFieldClearButton"));
44
+ const SearchFieldInput_1 = __importDefault(require("./SearchFieldInput"));
45
+ exports.SearchFieldContext = react_1.default.createContext(null);
42
46
  const SearchField = (0, react_1.forwardRef)((props, ref) => {
43
- const { inputProps, size, inputDescriptionId } = (0, useSearchField_1.useSearchField)(props, "searchfield");
44
- const { className, hideLabel, label, description, value, clearButtonLabel, onClear, inverted = false, clearButton = true } = props, rest = __rest(props, ["className", "hideLabel", "label", "description", "value", "clearButtonLabel", "onClear", "inverted", "clearButton"]);
45
- const [controlledValue, setControlledValue] = (0, react_1.useState)(value !== null && value !== void 0 ? value : "");
46
- const searchRef = (0, react_1.useRef)(null);
47
- const mergedRef = (0, react_merge_refs_1.default)([searchRef, ref]);
48
- const [wrapperRef, setWrapperRef] = (0, react_1.useState)(null);
49
- const handleChange = (0, react_1.useCallback)((v) => {
50
- var _a;
51
- if (searchRef.current && value === undefined) {
52
- searchRef.current.value = v;
53
- setControlledValue(v);
54
- }
55
- (_a = props === null || props === void 0 ? void 0 : props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, v);
56
- }, [props, value]);
57
- const handleClear = (0, react_1.useCallback)(() => {
58
- var _a, _b;
59
- onClear === null || onClear === void 0 ? void 0 : onClear();
60
- handleChange("");
61
- searchRef.current && ((_b = (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a));
62
- }, [handleChange, onClear]);
63
- (0, __1.useEventListener)("keydown", (0, react_1.useCallback)((e) => {
64
- if (e.key === "Escape") {
65
- e.preventDefault();
66
- handleClear();
67
- }
68
- }, [handleClear]), wrapperRef);
69
- (0, react_1.useEffect)(() => {
70
- value !== undefined && setControlledValue(value);
71
- }, [value]);
72
- return (react_1.default.createElement("div", { ref: setWrapperRef, className: (0, classnames_1.default)(className, "navds-form-field", `navds-form-field--${size !== null && size !== void 0 ? size : "medium"}`, "navds-search-field", {
47
+ const { inputProps, errorId, showErrorMsg, hasError, size, inputDescriptionId, } = (0, useFormField_1.useFormField)(props, "searchfield");
48
+ const { className, hideLabel, children, label, description, error } = props, rest = __rest(props, ["className", "hideLabel", "children", "label", "description", "error"]);
49
+ return (react_1.default.createElement("div", Object.assign({ ref: ref }, (0, __1.omit)(rest, ["id", "error", "errorId", "size", "disabled"]), { className: (0, classnames_1.default)(className, "navds-form-field", `navds-form-field--${size !== null && size !== void 0 ? size : "medium"}`, "navds-search-field", {
50
+ "navds-search-field--error": hasError,
73
51
  "navds-search-field--disabled": !!inputProps.disabled,
74
- "navds-search-field--inverted": inverted,
75
- }) },
52
+ }) }),
76
53
  react_1.default.createElement(__1.Label, { htmlFor: inputProps.id, size: size, as: "label", className: (0, classnames_1.default)("navds-text-field__label", {
77
- "navds-sr-only": hideLabel,
54
+ "sr-only": hideLabel,
78
55
  }) }, label),
79
56
  !!description && (react_1.default.createElement(__1.BodyShort, { as: "div", className: (0, classnames_1.default)("navds-text-field__description", {
80
- "navds-sr-only": hideLabel,
57
+ "sr-only": hideLabel,
81
58
  }), id: inputDescriptionId, size: size }, description)),
82
- react_1.default.createElement("div", { "data-value": !!controlledValue, className: "navds-search-field__input-wrapper" },
83
- react_1.default.createElement("span", { className: "navds-search-field__input-icon" },
84
- react_1.default.createElement(ds_icons_1.Search, { "aria-hidden": true })),
85
- react_1.default.createElement("input", Object.assign({ ref: mergedRef }, (0, __1.omit)(rest, ["size"]), inputProps, (props.value !== undefined && { value: props.value }), { onChange: (e) => handleChange(e.target.value), type: "search", role: "searchbox", className: (0, classnames_1.default)(className, "navds-search-field__input", "navds-text-field__input", "navds-body-short", `navds-body-${size !== null && size !== void 0 ? size : "medium"}`) })),
86
- controlledValue && clearButton && (react_1.default.createElement("button", { onClick: () => handleClear(), className: "navds-search-field__clear-button" },
87
- react_1.default.createElement("span", { className: "navds-sr-only" }, clearButtonLabel ? clearButtonLabel : "Slett tekst i felt"),
88
- react_1.default.createElement(ds_icons_1.Close, { "aria-hidden": true }))))));
59
+ react_1.default.createElement("div", { className: "navds-search-field__input-wrapper" },
60
+ react_1.default.createElement(exports.SearchFieldContext.Provider, { value: {
61
+ inputProps,
62
+ size,
63
+ } }, children)),
64
+ react_1.default.createElement("div", { id: errorId, "aria-relevant": "additions removals", "aria-live": "polite" }, showErrorMsg && react_1.default.createElement(ErrorMessage_1.default, { size: size }, error))));
89
65
  });
66
+ SearchField.Button = SearchFieldButton_1.default;
67
+ SearchField.Clear = SearchFieldClearButton_1.default;
68
+ SearchField.Input = SearchFieldInput_1.default;
90
69
  exports.default = SearchField;
@@ -0,0 +1,50 @@
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 SearchField_1 = require("./SearchField");
39
+ const __1 = require("../..");
40
+ const SearchFieldButton = (0, react_1.forwardRef)((_a, ref) => {
41
+ var { className, variant = "primary", disabled } = _a, rest = __rest(_a, ["className", "variant", "disabled"]);
42
+ const searchField = (0, react_1.useContext)(SearchField_1.SearchFieldContext);
43
+ if (searchField === null) {
44
+ console.warn("SearchFieldButton has to be wrapped in <SearchField />");
45
+ return null;
46
+ }
47
+ const { size, inputProps } = searchField;
48
+ return (react_1.default.createElement(__1.Button, Object.assign({ ref: ref, className: (0, classnames_1.default)(className, "navds-search-field__button") }, rest, { size: size, variant: variant, disabled: disabled !== null && disabled !== void 0 ? disabled : inputProps === null || inputProps === void 0 ? void 0 : inputProps.disabled })));
49
+ });
50
+ exports.default = SearchFieldButton;
@@ -0,0 +1,50 @@
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 SearchField_1 = require("./SearchField");
39
+ const __1 = require("../..");
40
+ const SearchFieldClearButton = (0, react_1.forwardRef)((_a, ref) => {
41
+ var { className, variant = "secondary", disabled } = _a, rest = __rest(_a, ["className", "variant", "disabled"]);
42
+ const searchField = (0, react_1.useContext)(SearchField_1.SearchFieldContext);
43
+ if (searchField === null) {
44
+ console.warn("SearchFieldClearButton has to be wrapped in <SearchField />");
45
+ return null;
46
+ }
47
+ const { size, inputProps } = searchField;
48
+ return (react_1.default.createElement(__1.Button, Object.assign({}, rest, { ref: ref, className: (0, classnames_1.default)(className, "navds-search-field__clear-button"), size: size, variant: variant, disabled: disabled !== null && disabled !== void 0 ? disabled : inputProps === null || inputProps === void 0 ? void 0 : inputProps.disabled })));
49
+ });
50
+ exports.default = SearchFieldClearButton;
@@ -0,0 +1,49 @@
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 SearchField_1 = require("./SearchField");
39
+ const SearchFieldInput = (0, react_1.forwardRef)((_a, ref) => {
40
+ var { className } = _a, rest = __rest(_a, ["className"]);
41
+ const searchField = (0, react_1.useContext)(SearchField_1.SearchFieldContext);
42
+ if (searchField === null) {
43
+ console.warn("SearchFieldInput has to be wrapped in <SearchField />");
44
+ return null;
45
+ }
46
+ const { size, inputProps } = searchField;
47
+ return (react_1.default.createElement("input", Object.assign({}, rest, inputProps, { type: "search", role: "searchbox", ref: ref, className: (0, classnames_1.default)(className, "navds-search-field__input", "navds-text-field__input", "navds-body-short", `navds-body-${size !== null && size !== void 0 ? size : "medium"}`) })));
48
+ });
49
+ exports.default = SearchFieldInput;
package/cjs/util/index.js CHANGED
@@ -10,24 +10,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.useEventListener = exports.omit = void 0;
14
- const react_1 = require("react");
13
+ exports.omit = void 0;
15
14
  __exportStar(require("./OverridableComponent"), exports);
16
15
  __exportStar(require("./useId"), exports);
17
16
  const omit = (obj, props) => Object.entries(obj)
18
17
  .filter(([key]) => !props.includes(key))
19
18
  .reduce((obj, [key, value]) => (Object.assign(Object.assign({}, obj), { [key]: value })), {});
20
19
  exports.omit = omit;
21
- /* https://github.com/streamich/react-use/blob/master/src/useEvent.ts */
22
- const useEventListener = (name, handler, target = window) => {
23
- (0, react_1.useEffect)(() => {
24
- if (!target) {
25
- return;
26
- }
27
- target === null || target === void 0 ? void 0 : target.addEventListener(name, handler);
28
- return () => {
29
- target === null || target === void 0 ? void 0 : target.addEventListener(name, handler);
30
- };
31
- }, [name, handler, target]);
32
- };
33
- exports.useEventListener = useEventListener;
@@ -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;
@@ -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
- return (React.createElement(Component, Object.assign({}, rest, { ref: ref, className: cl(className, "navds-button", `navds-button--${variant}`, `navds-button--${size}`) }),
18
- React.createElement(BodyShort, { as: "span", className: "navds-button__inner", size: size }, children)));
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
@@ -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;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAwB,MAAM,KAAK,CAAC;AA0BtD,MAAM,MAAM,GAAyD,UAAU,CAC7E,CACE,EAOC,EACD,GAAG,EACH,EAAE;QATF,EACE,EAAE,EAAE,SAAS,GAAG,QAAQ,EACxB,OAAO,GAAG,SAAS,EACnB,SAAS,EACT,QAAQ,EACR,IAAI,GAAG,QAAQ,OAEhB,EADI,IAAI,cANT,kDAOC,CADQ;IAGN,OAAA,CACH,oBAAC,SAAS,oBACJ,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,SAAS,EACT,cAAc,EACd,iBAAiB,OAAO,EAAE,EAC1B,iBAAiB,IAAI,EAAE,CACxB;QAED,oBAAC,SAAS,IAAC,EAAE,EAAC,MAAM,EAAC,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAE,IAAI,IAC5D,QAAQ,CACC,CACF,CACb,CAAA;CAAA,CACF,CAAC;AAEF,eAAe,MAAM,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"}
@@ -1,6 +1,23 @@
1
- import React, { InputHTMLAttributes } from "react";
1
+ import React from "react";
2
2
  import { FormFieldProps } from "../useFormField";
3
- export interface SearchFieldProps extends Omit<FormFieldProps, "error" | "errorId">, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "onChange"> {
3
+ import { SearchFieldButtonType } from "./SearchFieldButton";
4
+ import { SearchFieldClearButtonType } from "./SearchFieldClearButton";
5
+ import { SearchFieldInputType } from "./SearchFieldInput";
6
+ export interface SearchFieldContextProps {
7
+ inputProps: {
8
+ id: string;
9
+ "aria-invalid": boolean;
10
+ "aria-describedby"?: string;
11
+ disabled?: boolean;
12
+ };
13
+ size?: "medium" | "small";
14
+ }
15
+ export declare const SearchFieldContext: React.Context<SearchFieldContextProps | null>;
16
+ export interface SearchFieldProps extends FormFieldProps, React.HTMLAttributes<HTMLDivElement> {
17
+ /**
18
+ * SearchFieldInput & SearchFieldButton
19
+ */
20
+ children: React.ReactNode;
4
21
  /**
5
22
  * If enabled shows the label and description for screenreaders only
6
23
  */
@@ -9,28 +26,11 @@ export interface SearchFieldProps extends Omit<FormFieldProps, "error" | "errorI
9
26
  * SearchField label
10
27
  */
11
28
  label: React.ReactNode;
12
- /**
13
- * Inverts color theme
14
- * @default false
15
- */
16
- inverted?: boolean;
17
- /**
18
- * Customize aria-label on clear button
19
- * @default "Slett tekst i felt"
20
- */
21
- clearButtonLabel?: string;
22
- /**
23
- * Callback for when user manually clears input with button or Escape
24
- */
25
- onClear?: () => void;
26
- /**
27
- * Callback for value in input after change
28
- */
29
- onChange?: (value: string) => void;
30
- /**
31
- * Toggles display of "clear"-button when there is text in field
32
- */
33
- clearButton?: boolean;
34
29
  }
35
- declare const SearchField: React.ForwardRefExoticComponent<SearchFieldProps & React.RefAttributes<HTMLInputElement>>;
30
+ interface SearchFieldComponent extends React.ForwardRefExoticComponent<SearchFieldProps & React.RefAttributes<HTMLDivElement>> {
31
+ Button: SearchFieldButtonType;
32
+ Clear: SearchFieldClearButtonType;
33
+ Input: SearchFieldInputType;
34
+ }
35
+ declare const SearchField: SearchFieldComponent;
36
36
  export default SearchField;
@@ -9,59 +9,37 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import { Close, Search } from "@navikt/ds-icons";
13
12
  import cl from "classnames";
14
- import React, { forwardRef, useCallback, useEffect, useRef, useState, } from "react";
15
- import mergeRefs from "react-merge-refs";
16
- import { BodyShort, Label, omit, useEventListener } from "../..";
17
- import { useSearchField } from "./useSearchField";
13
+ import React, { forwardRef } from "react";
14
+ import { BodyShort, Label, omit } from "../..";
15
+ import ErrorMessage from "../ErrorMessage";
16
+ import { useFormField } from "../useFormField";
17
+ import SearchFieldButton from "./SearchFieldButton";
18
+ import SearchFieldClearButton from "./SearchFieldClearButton";
19
+ import SearchFieldInput from "./SearchFieldInput";
20
+ export const SearchFieldContext = React.createContext(null);
18
21
  const SearchField = forwardRef((props, ref) => {
19
- const { inputProps, size, inputDescriptionId } = useSearchField(props, "searchfield");
20
- const { className, hideLabel, label, description, value, clearButtonLabel, onClear, inverted = false, clearButton = true } = props, rest = __rest(props, ["className", "hideLabel", "label", "description", "value", "clearButtonLabel", "onClear", "inverted", "clearButton"]);
21
- const [controlledValue, setControlledValue] = useState(value !== null && value !== void 0 ? value : "");
22
- const searchRef = useRef(null);
23
- const mergedRef = mergeRefs([searchRef, ref]);
24
- const [wrapperRef, setWrapperRef] = useState(null);
25
- const handleChange = useCallback((v) => {
26
- var _a;
27
- if (searchRef.current && value === undefined) {
28
- searchRef.current.value = v;
29
- setControlledValue(v);
30
- }
31
- (_a = props === null || props === void 0 ? void 0 : props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, v);
32
- }, [props, value]);
33
- const handleClear = useCallback(() => {
34
- var _a, _b;
35
- onClear === null || onClear === void 0 ? void 0 : onClear();
36
- handleChange("");
37
- searchRef.current && ((_b = (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a));
38
- }, [handleChange, onClear]);
39
- useEventListener("keydown", useCallback((e) => {
40
- if (e.key === "Escape") {
41
- e.preventDefault();
42
- handleClear();
43
- }
44
- }, [handleClear]), wrapperRef);
45
- useEffect(() => {
46
- value !== undefined && setControlledValue(value);
47
- }, [value]);
48
- return (React.createElement("div", { ref: setWrapperRef, className: cl(className, "navds-form-field", `navds-form-field--${size !== null && size !== void 0 ? size : "medium"}`, "navds-search-field", {
22
+ const { inputProps, errorId, showErrorMsg, hasError, size, inputDescriptionId, } = useFormField(props, "searchfield");
23
+ const { className, hideLabel, children, label, description, error } = props, rest = __rest(props, ["className", "hideLabel", "children", "label", "description", "error"]);
24
+ return (React.createElement("div", Object.assign({ ref: ref }, omit(rest, ["id", "error", "errorId", "size", "disabled"]), { className: cl(className, "navds-form-field", `navds-form-field--${size !== null && size !== void 0 ? size : "medium"}`, "navds-search-field", {
25
+ "navds-search-field--error": hasError,
49
26
  "navds-search-field--disabled": !!inputProps.disabled,
50
- "navds-search-field--inverted": inverted,
51
- }) },
27
+ }) }),
52
28
  React.createElement(Label, { htmlFor: inputProps.id, size: size, as: "label", className: cl("navds-text-field__label", {
53
- "navds-sr-only": hideLabel,
29
+ "sr-only": hideLabel,
54
30
  }) }, label),
55
31
  !!description && (React.createElement(BodyShort, { as: "div", className: cl("navds-text-field__description", {
56
- "navds-sr-only": hideLabel,
32
+ "sr-only": hideLabel,
57
33
  }), id: inputDescriptionId, size: size }, description)),
58
- React.createElement("div", { "data-value": !!controlledValue, className: "navds-search-field__input-wrapper" },
59
- React.createElement("span", { className: "navds-search-field__input-icon" },
60
- React.createElement(Search, { "aria-hidden": true })),
61
- React.createElement("input", Object.assign({ ref: mergedRef }, omit(rest, ["size"]), inputProps, (props.value !== undefined && { value: props.value }), { onChange: (e) => handleChange(e.target.value), type: "search", role: "searchbox", className: cl(className, "navds-search-field__input", "navds-text-field__input", "navds-body-short", `navds-body-${size !== null && size !== void 0 ? size : "medium"}`) })),
62
- controlledValue && clearButton && (React.createElement("button", { onClick: () => handleClear(), className: "navds-search-field__clear-button" },
63
- React.createElement("span", { className: "navds-sr-only" }, clearButtonLabel ? clearButtonLabel : "Slett tekst i felt"),
64
- React.createElement(Close, { "aria-hidden": true }))))));
34
+ React.createElement("div", { className: "navds-search-field__input-wrapper" },
35
+ React.createElement(SearchFieldContext.Provider, { value: {
36
+ inputProps,
37
+ size,
38
+ } }, children)),
39
+ React.createElement("div", { id: errorId, "aria-relevant": "additions removals", "aria-live": "polite" }, showErrorMsg && React.createElement(ErrorMessage, { size: size }, error))));
65
40
  });
41
+ SearchField.Button = SearchFieldButton;
42
+ SearchField.Clear = SearchFieldClearButton;
43
+ SearchField.Input = SearchFieldInput;
66
44
  export default SearchField;
67
45
  //# sourceMappingURL=SearchField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchField.js","sourceRoot":"","sources":["../../../src/form/search-field/SearchField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchField.js","sourceRoot":"","sources":["../../../src/form/search-field/SearchField.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAkB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,iBAA4C,MAAM,qBAAqB,CAAC;AAC/E,OAAO,sBAEN,MAAM,0BAA0B,CAAC;AAClC,OAAO,gBAA0C,MAAM,oBAAoB,CAAC;AAY5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CACnD,IAAI,CACL,CAAC;AA4BF,MAAM,WAAW,GAAG,UAAU,CAC5B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACb,MAAM,EACJ,UAAU,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,kBAAkB,GACnB,GAAG,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEvC,MAAM,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,KAAK,KAEH,KAAK,EADJ,IAAI,UACL,KAAK,EARH,uEAQL,CAAQ,CAAC;IAEV,OAAO,CACL,2CACE,GAAG,EAAE,GAAG,IACJ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAC9D,SAAS,EAAE,EAAE,CACX,SAAS,EACT,kBAAkB,EAClB,qBAAqB,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,QAAQ,EAAE,EACvC,oBAAoB,EACpB;YACE,2BAA2B,EAAE,QAAQ;YACrC,8BAA8B,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ;SACtD,CACF;QAED,oBAAC,KAAK,IACJ,OAAO,EAAE,UAAU,CAAC,EAAE,EACtB,IAAI,EAAE,IAAI,EACV,EAAE,EAAC,OAAO,EACV,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE;gBACvC,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,+BAA+B,EAAE;gBAC7C,SAAS,EAAE,SAAS;aACrB,CAAC,EACF,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,IAAI,IAET,WAAW,CACF,CACb;QACD,6BAAK,SAAS,EAAC,mCAAmC;YAChD,oBAAC,kBAAkB,CAAC,QAAQ,IAC1B,KAAK,EAAE;oBACL,UAAU;oBACV,IAAI;iBACL,IAEA,QAAQ,CACmB,CAC1B;QACN,6BAAK,EAAE,EAAE,OAAO,mBAAgB,oBAAoB,eAAW,QAAQ,IACpE,YAAY,IAAI,oBAAC,YAAY,IAAC,IAAI,EAAE,IAAI,IAAG,KAAK,CAAgB,CAC7D,CACF,CACP,CAAC;AACJ,CAAC,CACsB,CAAC;AAE1B,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC;AACvC,WAAW,CAAC,KAAK,GAAG,sBAAsB,CAAC;AAC3C,WAAW,CAAC,KAAK,GAAG,gBAAgB,CAAC;AAErC,eAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { ButtonProps } from "../..";
3
+ export interface SearchFieldButtonProps extends Omit<ButtonProps, "size"> {
4
+ /**
5
+ * Button text
6
+ * @example <Search /> <span>Søk</span>
7
+ */
8
+ children: React.ReactNode;
9
+ /**
10
+ * Changes design and interactions
11
+ * @default "primary"
12
+ */
13
+ variant?: "primary" | "secondary";
14
+ }
15
+ export declare type SearchFieldButtonType = React.ForwardRefExoticComponent<SearchFieldButtonProps & React.RefAttributes<HTMLButtonElement>>;
16
+ declare const SearchFieldButton: SearchFieldButtonType;
17
+ export default SearchFieldButton;
@@ -0,0 +1,27 @@
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 { SearchFieldContext } from "./SearchField";
15
+ import { Button } from "../..";
16
+ const SearchFieldButton = forwardRef((_a, ref) => {
17
+ var { className, variant = "primary", disabled } = _a, rest = __rest(_a, ["className", "variant", "disabled"]);
18
+ const searchField = useContext(SearchFieldContext);
19
+ if (searchField === null) {
20
+ console.warn("SearchFieldButton has to be wrapped in <SearchField />");
21
+ return null;
22
+ }
23
+ const { size, inputProps } = searchField;
24
+ return (React.createElement(Button, Object.assign({ ref: ref, className: cl(className, "navds-search-field__button") }, rest, { size: size, variant: variant, disabled: disabled !== null && disabled !== void 0 ? disabled : inputProps === null || inputProps === void 0 ? void 0 : inputProps.disabled })));
25
+ });
26
+ export default SearchFieldButton;
27
+ //# sourceMappingURL=SearchFieldButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchFieldButton.js","sourceRoot":"","sources":["../../../src/form/search-field/SearchFieldButton.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAe,MAAM,OAAO,CAAC;AAmB5C,MAAM,iBAAiB,GAA0B,UAAU,CACzD,CAAC,EAAqD,EAAE,GAAG,EAAE,EAAE;QAA9D,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,QAAQ,OAAW,EAAN,IAAI,cAAnD,oCAAqD,CAAF;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAEnD,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;IAEzC,OAAO,CACL,oBAAC,MAAM,kBACL,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,4BAA4B,CAAC,IAClD,IAAI,IACR,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,IAC1C,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { ButtonProps } from "../..";
3
+ export interface SearchFieldClearButtonProps extends Omit<ButtonProps, "size"> {
4
+ /**
5
+ * Button text
6
+ * @example <Close /> <span>Søk</span>
7
+ */
8
+ children: React.ReactNode;
9
+ /**
10
+ * Changes design and interactions
11
+ * @default "secondary"
12
+ */
13
+ variant?: "primary" | "secondary";
14
+ }
15
+ export declare type SearchFieldClearButtonType = React.ForwardRefExoticComponent<SearchFieldClearButtonProps & React.RefAttributes<HTMLButtonElement>>;
16
+ declare const SearchFieldClearButton: SearchFieldClearButtonType;
17
+ export default SearchFieldClearButton;