feat(@ui): migrate input box

This commit is contained in:
Paul Makles 2022-05-30 12:26:16 +01:00
parent 2f9bfbf83f
commit 1d243d4762
13 changed files with 66 additions and 105 deletions

View file

@ -95,7 +95,7 @@ const Blocked = styled.div`
`; `;
const Action = styled.div` const Action = styled.div`
> div { > a {
height: 48px; height: 48px;
width: 48px; width: 48px;
display: flex; display: flex;
@ -118,7 +118,7 @@ const Action = styled.div`
`; `;
const FileAction = styled.div` const FileAction = styled.div`
> div { > a {
height: 48px; height: 48px;
width: 62px; width: 62px;
display: flex; display: flex;

View file

@ -5,15 +5,13 @@ import styled from "styled-components/macro";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
import { Button } from "@revoltchat/ui"; import { Button, InputBox } from "@revoltchat/ui";
import { useClient } from "../../../context/revoltjs/RevoltClient"; import { useClient } from "../../../context/revoltjs/RevoltClient";
import Message from "../../common/messaging/Message"; import Message from "../../common/messaging/Message";
import InputBox from "../../ui/InputBox";
import Overline from "../../ui/Overline"; import Overline from "../../ui/Overline";
import Preloader from "../../ui/Preloader"; import Preloader from "../../ui/Preloader";
import { GenericSidebarBase, GenericSidebarList } from "../SidebarBase"; import { GenericSidebarBase, GenericSidebarList } from "../SidebarBase";
type SearchState = type SearchState =

View file

@ -2,14 +2,14 @@ import { Pencil } from "@styled-icons/boxicons-regular";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
import styled from "styled-components/macro"; import styled from "styled-components/macro";
import { InputBox } from "@revoltchat/ui";
import { useDebounceCallback } from "../../../lib/debounce"; import { useDebounceCallback } from "../../../lib/debounce";
import { useApplicationState } from "../../../mobx/State"; import { useApplicationState } from "../../../mobx/State";
import { Variables } from "../../../context/Theme"; import { Variables } from "../../../context/Theme";
import InputBox from "../../ui/InputBox";
const Container = styled.div` const Container = styled.div`
row-gap: 8px; row-gap: 8px;
display: grid; display: grid;

View file

@ -1,41 +0,0 @@
import styled, { css } from "styled-components/macro";
interface Props {
readonly contrast?: boolean;
}
export default styled.input<Props>`
z-index: 1;
font-size: 1rem;
padding: 8px 16px;
border-radius: var(--border-radius);
font-family: inherit;
color: var(--foreground);
background: var(--primary-background);
transition: 0.2s ease background-color;
border: none;
outline: 2px solid transparent;
transition: outline-color 0.2s ease-in-out;
transition: box-shadow 0.2s ease-in-out;
&:hover {
background: var(--secondary-background);
}
&:focus {
box-shadow: 0 0 0 1.5pt var(--accent);
}
${(props) =>
props.contrast &&
css`
color: var(--secondary-foreground);
background: var(--secondary-background);
&:hover {
background: var(--hover);
}
`}
`;

View file

@ -1,14 +1,13 @@
import { useHistory } from "react-router"; import { useHistory } from "react-router";
import { Server } from "revolt.js"; import { Server } from "revolt.js";
import { ulid } from "ulid";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useContext, useState } from "preact/hooks"; import { useContext, useState } from "preact/hooks";
import InputBox from "../../../components/ui/InputBox"; import { InputBox } from "@revoltchat/ui";
import Modal from "../../../components/ui/Modal"; import Modal from "../../../components/ui/Modal";
import Overline from "../../../components/ui/Overline"; import Overline from "../../../components/ui/Overline";
import { Children } from "../../../types/Preact"; import { Children } from "../../../types/Preact";
import { AppContext } from "../../revoltjs/RevoltClient"; import { AppContext } from "../../revoltjs/RevoltClient";
import { takeError } from "../../revoltjs/util"; import { takeError } from "../../revoltjs/util";

View file

@ -7,15 +7,15 @@ import styles from "./Prompt.module.scss";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useContext, useEffect, useState } from "preact/hooks"; import { useContext, useEffect, useState } from "preact/hooks";
import { InputBox } from "@revoltchat/ui";
import { TextReact } from "../../../lib/i18n"; import { TextReact } from "../../../lib/i18n";
import Message from "../../../components/common/messaging/Message"; import Message from "../../../components/common/messaging/Message";
import UserIcon from "../../../components/common/user/UserIcon"; import UserIcon from "../../../components/common/user/UserIcon";
import InputBox from "../../../components/ui/InputBox";
import Modal, { Action } from "../../../components/ui/Modal"; import Modal, { Action } from "../../../components/ui/Modal";
import Overline from "../../../components/ui/Overline"; import Overline from "../../../components/ui/Overline";
import Radio from "../../../components/ui/Radio"; import Radio from "../../../components/ui/Radio";
import { Children } from "../../../types/Preact"; import { Children } from "../../../types/Preact";
import { AppContext } from "../../revoltjs/RevoltClient"; import { AppContext } from "../../revoltjs/RevoltClient";
import { takeError } from "../../revoltjs/util"; import { takeError } from "../../revoltjs/util";

View file

@ -5,14 +5,12 @@ import styles from "./ServerIdentityModal.module.scss";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
import { Button } from "@revoltchat/ui"; import { Button, InputBox } from "@revoltchat/ui";
import { noop } from "../../../lib/js"; import { noop } from "../../../lib/js";
import InputBox from "../../../components/ui/InputBox";
import Modal from "../../../components/ui/Modal"; import Modal from "../../../components/ui/Modal";
import Overline from "../../../components/ui/Overline"; import Overline from "../../../components/ui/Overline";
import { FileUploader } from "../../revoltjs/FileUploads"; import { FileUploader } from "../../revoltjs/FileUploads";
import { useClient } from "../../revoltjs/RevoltClient"; import { useClient } from "../../revoltjs/RevoltClient";

View file

@ -2,10 +2,16 @@ import { UseFormMethods } from "react-hook-form";
import { Text, Localizer } from "preact-i18n"; import { Text, Localizer } from "preact-i18n";
import InputBox from "../../components/ui/InputBox"; import { InputBox } from "@revoltchat/ui";
import Overline from "../../components/ui/Overline"; import Overline from "../../components/ui/Overline";
type FieldType = "email" | "username" | "password" | "invite" | "current_password"; type FieldType =
| "email"
| "username"
| "password"
| "invite"
| "current_password";
type Props = Omit<JSX.HTMLAttributes<HTMLInputElement>, "children" | "as"> & { type Props = Omit<JSX.HTMLAttributes<HTMLInputElement>, "children" | "as"> & {
type: FieldType; type: FieldType;
@ -13,7 +19,7 @@ type Props = Omit<JSX.HTMLAttributes<HTMLInputElement>, "children" | "as"> & {
register: UseFormMethods["register"]; register: UseFormMethods["register"];
error?: string; error?: string;
name?: string; name?: string;
} };
export default function FormField({ export default function FormField({
type, type,
@ -44,43 +50,43 @@ export default function FormField({
type === "invite" || type === "username" type === "invite" || type === "username"
? "text" ? "text"
: type === "current_password" : type === "current_password"
? "password" ? "password"
: type : type
} }
// See https://github.com/mozilla/contain-facebook/issues/783 // See https://github.com/mozilla/contain-facebook/issues/783
className="fbc-has-badge" className="fbc-has-badge"
ref={register( ref={register(
type === "password" || type === "current_password" type === "password" || type === "current_password"
? { ? {
validate: (value: string) => validate: (value: string) =>
value.length === 0 value.length === 0
? "RequiredField" ? "RequiredField"
: value.length < 8 : value.length < 8
? "TooShort" ? "TooShort"
: value.length > 1024 : value.length > 1024
? "TooLong" ? "TooLong"
: undefined, : undefined,
} }
: type === "email" : type === "email"
? { ? {
required: "RequiredField", required: "RequiredField",
pattern: { pattern: {
value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
message: "InvalidEmail", message: "InvalidEmail",
}, },
} }
: type === "username" : type === "username"
? { ? {
validate: (value: string) => validate: (value: string) =>
value.length === 0 value.length === 0
? "RequiredField" ? "RequiredField"
: value.length < 2 : value.length < 2
? "TooShort" ? "TooShort"
: value.length > 32 : value.length > 32
? "TooLong" ? "TooLong"
: undefined, : undefined,
} }
: { required: "RequiredField" }, : { required: "RequiredField" },
)} )}
{...props} {...props}
/> />

View file

@ -5,14 +5,12 @@ import styled from "styled-components/macro";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
import { Button, Checkbox } from "@revoltchat/ui"; import { Button, Checkbox, InputBox } from "@revoltchat/ui";
import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize";
import { FileUploader } from "../../../context/revoltjs/FileUploads"; import { FileUploader } from "../../../context/revoltjs/FileUploads";
import InputBox from "../../../components/ui/InputBox";
interface Props { interface Props {
channel: Channel; channel: Channel;
} }
@ -85,7 +83,7 @@ export default observer(({ channel }: Props) => {
)} )}
</h3> </h3>
<InputBox <InputBox
contrast palette="secondary"
value={name} value={name}
maxLength={32} maxLength={32}
onChange={(e) => { onChange={(e) => {

View file

@ -11,7 +11,7 @@ import styles from "./Panes.module.scss";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useCallback, useEffect, useState } from "preact/hooks"; import { useCallback, useEffect, useState } from "preact/hooks";
import { Button, Checkbox } from "@revoltchat/ui"; import { Button, Checkbox, InputBox } from "@revoltchat/ui";
import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize";
import { internalEmit } from "../../../lib/eventEmitter"; import { internalEmit } from "../../../lib/eventEmitter";
@ -28,7 +28,6 @@ import AutoComplete, {
import CollapsibleSection from "../../../components/common/CollapsibleSection"; import CollapsibleSection from "../../../components/common/CollapsibleSection";
import Tooltip from "../../../components/common/Tooltip"; import Tooltip from "../../../components/common/Tooltip";
import UserIcon from "../../../components/common/user/UserIcon"; import UserIcon from "../../../components/common/user/UserIcon";
import InputBox from "../../../components/ui/InputBox";
import Tip from "../../../components/ui/Tip"; import Tip from "../../../components/ui/Tip";
import CategoryButton from "../../../components/ui/fluent/CategoryButton"; import CategoryButton from "../../../components/ui/fluent/CategoryButton";
@ -450,6 +449,7 @@ function BotCard({ bot, onDelete, onUpdate }: Props) {
<Text id="app.settings.pages.bots.reserved" /> <Text id="app.settings.pages.bots.reserved" />
</h5> </h5>
<InputBox <InputBox
palette="secondary"
ref={setInteractionsRef} ref={setInteractionsRef}
value={data.interactions_url} value={data.interactions_url}
disabled={saving} disabled={saving}

View file

@ -9,11 +9,16 @@ import styles from "./Panes.module.scss";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useEffect, useMemo, useState } from "preact/hooks"; import { useEffect, useMemo, useState } from "preact/hooks";
import { Button, Checkbox, IconButton, Preloader } from "@revoltchat/ui"; import {
Button,
Checkbox,
IconButton,
InputBox,
Preloader,
} from "@revoltchat/ui";
import UserIcon from "../../../components/common/user/UserIcon"; import UserIcon from "../../../components/common/user/UserIcon";
import { Username } from "../../../components/common/user/UserShort"; import { Username } from "../../../components/common/user/UserShort";
import InputBox from "../../../components/ui/InputBox";
import Overline from "../../../components/ui/Overline"; import Overline from "../../../components/ui/Overline";
interface InnerProps { interface InnerProps {
@ -122,7 +127,7 @@ export const Members = ({ server }: Props) => {
placeholder="Search for a specific user..." placeholder="Search for a specific user..."
value={query} value={query}
onChange={(e) => setQuery(e.currentTarget.value)} onChange={(e) => setQuery(e.currentTarget.value)}
contrast palette="secondary"
/> />
<div className={styles.subtitle}>{data?.length ?? 0} Members</div> <div className={styles.subtitle}>{data?.length ?? 0} Members</div>
{members ? ( {members ? (

View file

@ -7,7 +7,7 @@ import styles from "./Panes.module.scss";
import { Text } from "preact-i18n"; import { Text } from "preact-i18n";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
import { Button, ComboBox } from "@revoltchat/ui"; import { Button, ComboBox, InputBox } from "@revoltchat/ui";
import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize";
import { noop } from "../../../lib/js"; import { noop } from "../../../lib/js";
@ -15,8 +15,6 @@ import { noop } from "../../../lib/js";
import { FileUploader } from "../../../context/revoltjs/FileUploads"; import { FileUploader } from "../../../context/revoltjs/FileUploads";
import { getChannelName } from "../../../context/revoltjs/util"; import { getChannelName } from "../../../context/revoltjs/util";
import InputBox from "../../../components/ui/InputBox";
interface Props { interface Props {
server: Server; server: Server;
} }
@ -70,9 +68,9 @@ export const Overview = observer(({ server }: Props) => {
<Text id="app.main.servers.name" /> <Text id="app.main.servers.name" />
</h3> </h3>
<InputBox <InputBox
contrast
value={name} value={name}
maxLength={32} maxLength={32}
palette="secondary"
onChange={(e) => { onChange={(e) => {
setName(e.currentTarget.value); setName(e.currentTarget.value);
if (!changed) setChanged(true); if (!changed) setChanged(true);

View file

@ -12,13 +12,13 @@ import {
H1, H1,
Checkbox, Checkbox,
ColourSwatches, ColourSwatches,
InputBox,
} from "@revoltchat/ui"; } from "@revoltchat/ui";
import { useIntermediate } from "../../../context/intermediate/Intermediate"; import { useIntermediate } from "../../../context/intermediate/Intermediate";
import { PermissionList } from "../../../components/settings/roles/PermissionList"; import { PermissionList } from "../../../components/settings/roles/PermissionList";
import { RoleOrDefault } from "../../../components/settings/roles/RoleSelection"; import { RoleOrDefault } from "../../../components/settings/roles/RoleSelection";
import InputBox from "../../../components/ui/InputBox";
import Overline from "../../../components/ui/Overline"; import Overline from "../../../components/ui/Overline";
interface Props { interface Props {
@ -148,7 +148,7 @@ export const Roles = observer(({ server }: Props) => {
name: e.currentTarget.value, name: e.currentTarget.value,
}) })
} }
contrast palette="secondary"
/> />
</p> </p>
</section> </section>
@ -205,7 +205,7 @@ export const Roles = observer(({ server }: Props) => {
), ),
}) })
} }
contrast palette="secondary"
/> />
</p> </p>
</section> </section>