aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ErrorMessage.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ErrorMessage.tsx')
-rw-r--r--src/components/ErrorMessage.tsx18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/components/ErrorMessage.tsx b/src/components/ErrorMessage.tsx
index 650100d..6151603 100644
--- a/src/components/ErrorMessage.tsx
+++ b/src/components/ErrorMessage.tsx
@@ -1,10 +1,11 @@
/** @jsx jsx */
-import { jsx, css } from "@emotion/react";
+import {jsx, css} from "@emotion/react";
import colors from "../colors";
+import {selectable} from "../commonStyles";
interface ErrorMessageProps {
show: boolean,
- message: string
+ content: string | JSX.Element,
}
export default function ErrorMessage(props: ErrorMessageProps): JSX.Element | null {
@@ -13,12 +14,23 @@ export default function ErrorMessage(props: ErrorMessageProps): JSX.Element | nu
font-size: 1.15rem;
line-height: 1.1rem;
margin: 1rem 0 0;
+
visibility: ${props.show ? "visible" : "hidden"};
+ opacity: ${props.show ? 1 : 0};
+ transition: opacity 200ms, visibility 200ms;
+ `;
+
+ // These styles are not applied when content is an element;
+ const floatingStyles = css`
position: absolute;
z-index: -1;
`;
+ const isString = typeof props.content === "string";
+
return (
- <p css={styles}>{props.message}</p>
+ <div tabIndex={-1} css={[styles, selectable, isString ? floatingStyles : null]}>
+ {props.content}
+ </div>
);
}