diff --git a/vnext/src/ui/Feeds.js b/vnext/src/ui/Feeds.js
index 27a8376f..9bbecf89 100644
--- a/vnext/src/ui/Feeds.js
+++ b/vnext/src/ui/Feeds.js
@@ -104,9 +104,9 @@ export function Home({ visitor }) {
/**
* @typedef {Object} FeedState
- * @property authRequired?: boolean
- * @property visitor: import('../api').SecureUser
- * @property msgs: import('../api').Message[]
+ * @property { boolean } authRequired
+ * @property { import('../api').SecureUser } visitor
+ * @property { import('../api').Message[]= } msgs
* @property { Query} query
*/
diff --git a/vnext/src/ui/Login.js b/vnext/src/ui/Login.js
index 0c6f5d0c..641ceb67 100644
--- a/vnext/src/ui/Login.js
+++ b/vnext/src/ui/Login.js
@@ -13,7 +13,7 @@ import './Login.css';
/**
* @typedef {Object} LoginProps
* @property {import('../api').SecureUser} visitor
- * @property {any} onAuth
+ * @property {function} onAuth
*/
/**
diff --git a/vnext/src/ui/Message.js b/vnext/src/ui/Message.js
index 51ff12ec..83c6fcab 100644
--- a/vnext/src/ui/Message.js
+++ b/vnext/src/ui/Message.js
@@ -13,7 +13,7 @@ import './Message.css';
/**
* Message component
- * @param {{data: import('../api').Message, visitor: import('../api').User, children: Element}} props
+ * @param {{data: import('../api').Message, visitor: import('../api').User, children: React.ReactElement}} props
*/
export default function Message({ data, visitor, children }) {
const isCode = (data.tags || []).indexOf('code') >= 0;
@@ -123,6 +123,7 @@ function Tags({ data, user }) {
{
data.map(tag => {
return ({tag});
+ // @ts-ignore
}).reduce((prev, curr) => [prev, ', ', curr])
}
diff --git a/vnext/src/ui/MessageInput.js b/vnext/src/ui/MessageInput.js
index e19136d4..e20d5100 100644
--- a/vnext/src/ui/MessageInput.js
+++ b/vnext/src/ui/MessageInput.js
@@ -13,8 +13,10 @@ import UploadButton from './UploadButton';
function moveCaretToEnd(el) {
if (typeof el.selectionStart == 'number') {
el.selectionStart = el.selectionEnd = el.value.length;
+ // @ts-ignore
} else if (typeof el.createTextRange != 'undefined') {
el.focus();
+ // @ts-ignore
var range = el.createTextRange();
range.collapse(false);
range.select();
@@ -24,9 +26,9 @@ function moveCaretToEnd(el) {
/**
* @typedef {Object} MessageInputProps
* @property {string} text
- * @property {import('../api').Message} data
+ * @property {import('../api').Message=} data
* @property {function} onSend
- * @property {number} rows
+ * @property {number=} rows
* @property {string} children
*/
diff --git a/vnext/src/ui/Post.js b/vnext/src/ui/Post.js
index 407f3b62..7c5c07cd 100644
--- a/vnext/src/ui/Post.js
+++ b/vnext/src/ui/Post.js
@@ -35,7 +35,7 @@ export default function Post({ visitor }) {
};
return (
-
+
*weather It is very cold today!
{
diff --git a/vnext/src/ui/Settings.js b/vnext/src/ui/Settings.js
index ba0286ca..4b9dc2e9 100644
--- a/vnext/src/ui/Settings.js
+++ b/vnext/src/ui/Settings.js
@@ -8,7 +8,7 @@ import UploadButton from './UploadButton';
import Avatar from './Avatar';
/**
- * @param {{ visitor: import('../api').SecureUser, onChange: React.ChangeEvent }} props
+ * @param {{ visitor: import('../api').SecureUser, onChange: function }} props
*/
function ChangeAvatarForm({ visitor, onChange }) {
const [avatar, setAvatar] = useState('');
@@ -53,7 +53,7 @@ function ChangeAvatarForm({ visitor, onChange }) {
}
/**
- * @param {{ visitor: import('../api').SecureUser, onChange: React.ChangeEvent }} props
+ * @param {{ visitor: import('../api').SecureUser, onChange: function }} props
*/
export default function Settings({ visitor, onChange }) {
diff --git a/vnext/src/ui/UserInfo.js b/vnext/src/ui/UserInfo.js
index 00465252..0be93bb8 100644
--- a/vnext/src/ui/UserInfo.js
+++ b/vnext/src/ui/UserInfo.js
@@ -13,7 +13,7 @@ let isMounted;
/**
* User info component
- * @param {{uname: string, onUpdate?: function, children?: React.ReactHTMLElement}} props
+ * @param {{uname: string, onUpdate?: function, children?: React.ReactElement}} props
*/
export default function UserInfo({ uname, onUpdate, children }) {
const [user, setUser] = useState({
--
cgit v1.2.3