diff --git a/src/bootstrap/Input.js b/src/bootstrap/Input.js
index 4108c2b..32adc66 100644
--- a/src/bootstrap/Input.js
+++ b/src/bootstrap/Input.js
@@ -27,14 +27,14 @@ export const Input = forwardRef(
) => {
const uid = useUID();
- const inputClassName = `form-control ${className || ""} ${
+ const inputClassName = `${className || ""} ${
error ? "is-invalid" : ""
}`.trim();
return (
);
}
diff --git a/src/bootstrap/NumberInput.js b/src/bootstrap/NumberInput.js
index 2b4200d..9ba90da 100644
--- a/src/bootstrap/NumberInput.js
+++ b/src/bootstrap/NumberInput.js
@@ -23,7 +23,7 @@ NumberInput.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
/** Function called when value changes. */
onChange: PropTypes.func.isRequired,
- /** Additional description dispaled to the right of input value. */
+ /** Additional description displayed to the right of input value. */
inlineText: PropTypes.string,
};
@@ -49,27 +49,27 @@ export function NumberInput({ onChange, inlineText, value, ...props }) {
return (
-
- {inlineText &&
{inlineText}
}
-
-
-
+ {inlineText && (
+ {inlineText}
+ )}
+
+
);
}
diff --git a/src/bootstrap/PasswordInput.js b/src/bootstrap/PasswordInput.js
index 17cfbbd..81525f4 100644
--- a/src/bootstrap/PasswordInput.js
+++ b/src/bootstrap/PasswordInput.js
@@ -34,24 +34,20 @@ export function PasswordInput({ withEye, newPass, ...props }) {
autoComplete={newPass ? "new-password" : "current-password"}
{...props}
>
- {withEye ? (
-
-
-
- ) : null}
+ {withEye && (
+
+ )}
);
}
diff --git a/src/bootstrap/RadioSet.js b/src/bootstrap/RadioSet.js
index 2e73b7b..e549ebc 100644
--- a/src/bootstrap/RadioSet.js
+++ b/src/bootstrap/RadioSet.js
@@ -96,24 +96,24 @@ export function Radio({ label, id, helpText, inline, ...props }) {
return (
<>
- {helpText && (
-
- {helpText}
-
- )}
>
);
diff --git a/src/bootstrap/Spinner.js b/src/bootstrap/Spinner.js
index e9993ef..0042154 100644
--- a/src/bootstrap/Spinner.js
+++ b/src/bootstrap/Spinner.js
@@ -16,7 +16,7 @@ Spinner.propTypes = {
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]),
- /** Render component with full-screen mode (using apropriate `.css` styles) */
+ /** Render component with full-screen mode (using appropriate `.css` styles) */
fullScreen: PropTypes.bool.isRequired,
className: PropTypes.string,
};
diff --git a/src/bootstrap/Tooltip.js b/src/bootstrap/Tooltip.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/common/WiFiSettings/WiFiForm.js b/src/common/WiFiSettings/WiFiForm.js
index 6dc5d96..8445c7f 100644
--- a/src/common/WiFiSettings/WiFiForm.js
+++ b/src/common/WiFiSettings/WiFiForm.js
@@ -119,12 +119,10 @@ function DeviceForm({
}))}
{...props}
>
-
-
-
+
-
+
{_("Download PDF")}
diff --git a/src/index.js b/src/index.js
index 33daf12..ab37566 100644
--- a/src/index.js
+++ b/src/index.js
@@ -69,7 +69,7 @@ export {
withErrorMessage,
} from "./utils/conditionalHOCs";
export { ErrorMessage } from "./utils/ErrorMessage";
-export { useClickOutside } from "./utils/hooks";
+export { useClickOutside, useTooltip } from "./utils/hooks";
export { toLocaleDateString } from "./utils/datetime";
export { displayCard } from "./utils/displayCard";
export { isPluginInstalled } from "./utils/isPluginInstalled";
diff --git a/src/utils/hooks.js b/src/utils/hooks.js
index e554a9d..6a37875 100644
--- a/src/utils/hooks.js
+++ b/src/utils/hooks.js
@@ -5,7 +5,8 @@
* See /LICENSE for more information.
*/
-import { useState, useEffect } from "react";
+import { useState, useEffect, useRef } from "react";
+import { Tooltip } from "bootstrap/dist/js/bootstrap.bundle.min.js";
/** Execute callback when condition is set to true. */
export function useConditionalTimeout(
@@ -40,3 +41,21 @@ export function useClickOutside(element, callback) {
};
});
}
+
+export function useTooltip(description, placement = "top", trigger = "hover") {
+ const tooltipRef = useRef();
+
+ useEffect(() => {
+ const tooltip = new Tooltip(tooltipRef.current, {
+ title: description,
+ placement: placement,
+ trigger: trigger,
+ });
+
+ return () => {
+ tooltip.dispose();
+ };
+ });
+
+ return tooltipRef;
+}