Re-organise assets to be closer to their respective uses.
|
@ -2,7 +2,8 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />
|
<link rel="icon" type="image/png" href="/src/assets/logo_round.png" />
|
||||||
|
<!--<link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />-->
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>REVOLT</title>
|
<title>REVOLT</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "rimraf build && tsc && vite build",
|
"build": "rimraf build && tsc --noEmit && vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
||||||
"fmt": "prettier --write 'src/**/*.{js,jsx,ts,tsx}'",
|
"fmt": "prettier --write 'src/**/*.{js,jsx,ts,tsx}'",
|
||||||
|
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 16 KiB |
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="193.733" height="37.438" viewBox="0 0 193.733 37.438"><path d="M23.393,1.382c0,2.787-1.52,4.46-4.764,4.46H13.258V-2.977H18.63C21.873-2.977,23.393-1.254,23.393,1.382Zm-24-11.555,5.2,7.213V25.4h8.666V11.973h2.078l7.4,13.43h9.781l-8.21-14.089A10.355,10.355,0,0,0,32.212,1.027c0-6.183-4.358-11.2-13.075-11.2Zm60.035,0H37.634V25.4H59.426V18.46H46.3v-7.8H57.906V3.966H46.3V-2.969H59.426Zm20.981,26.86-8.818-26.86H62.365L74.984,25.4H85.83L98.449-10.173H89.276Zm56.659-9.173c0-10.693-8.058-18.194-18.194-18.194-10.085,0-18.3,7.5-18.3,18.194a17.9,17.9,0,0,0,18.3,18.244A17.815,17.815,0,0,0,137.066,7.514Zm-27.62,0c0-6.335,3.649-10.338,9.426-10.338,5.676,0,9.376,4,9.376,10.338,0,6.233-3.7,10.338-9.376,10.338C113.095,17.852,109.446,13.747,109.446,7.514ZM141.88-10.173V25.4H161.9v-6.95H150.545V-10.173Zm22.248,7.2h9.426V25.4h8.666V-2.975h9.426v-7.2H164.128Z" transform="translate(1.586 11.18)" fill="#fff" stroke="#fff" stroke-width="1"/></svg>
|
|
Before Width: | Height: | Size: 981 B |
3
src/assets/logo.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M290.947 209.226C290.947 227.612 280.944 238.648 259.595 238.648H224.247V180.471H259.601C280.944 180.471 290.947 191.837 290.947 209.226ZM133 133L167.222 180.583V367.669H224.254V279.094H237.93L286.63 367.689H351L296.969 274.746C312.054 271.066 325.434 262.333 334.893 249.993C344.353 237.652 349.325 222.444 348.986 206.885C348.986 166.096 320.306 133 262.938 133H167.222H133Z" fill="#FF4654" stroke="#FF4654" stroke-width="1.04306"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 551 B |
BIN
src/assets/logo_round.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 1,008 B After Width: | Height: | Size: 1,008 B |
|
@ -8,7 +8,8 @@ interface Props extends IconBaseProps<Channels.GroupChannel | Channels.TextChann
|
||||||
isServerChannel?: boolean;
|
isServerChannel?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fallback = '/assets/group.png';
|
import fallback from './assets/group.png';
|
||||||
|
|
||||||
export default function ChannelIcon(props: Props & Omit<JSX.HTMLAttributes<HTMLImageElement>, keyof Props>) {
|
export default function ChannelIcon(props: Props & Omit<JSX.HTMLAttributes<HTMLImageElement>, keyof Props>) {
|
||||||
const client = useContext(AppContext);
|
const client = useContext(AppContext);
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,8 @@ const VoiceIndicator = styled.div<{ status: VoiceStatus }>`
|
||||||
` }
|
` }
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const fallback = '/assets/user.png';
|
import fallback from './assets/user.png';
|
||||||
|
|
||||||
export default function UserIcon(props: Props & Omit<JSX.SVGAttributes<SVGSVGElement>, keyof Props>) {
|
export default function UserIcon(props: Props & Omit<JSX.SVGAttributes<SVGSVGElement>, keyof Props>) {
|
||||||
const client = useContext(AppContext);
|
const client = useContext(AppContext);
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 515 B |
|
@ -1,15 +1,17 @@
|
||||||
|
import LineDivider from "../../ui/LineDivider";
|
||||||
|
import { mapChannelWithUnread } from "./common";
|
||||||
|
import styled, { css } from "styled-components";
|
||||||
|
import ServerIcon from "../../common/ServerIcon";
|
||||||
|
import { Children } from "../../../types/Preact";
|
||||||
|
import PaintCounter from "../../../lib/PaintCounter";
|
||||||
|
import { attachContextMenu } from 'preact-context-menu';
|
||||||
|
import { connectState } from "../../../redux/connector";
|
||||||
|
import { Unreads } from "../../../redux/reducers/unreads";
|
||||||
import { Channel, Servers } from "revolt.js/dist/api/objects";
|
import { Channel, Servers } from "revolt.js/dist/api/objects";
|
||||||
import { Link, useLocation, useParams } from "react-router-dom";
|
import { Link, useLocation, useParams } from "react-router-dom";
|
||||||
import { useChannels, useForceUpdate, useServers } from "../../../context/revoltjs/hooks";
|
import { useChannels, useForceUpdate, useServers } from "../../../context/revoltjs/hooks";
|
||||||
import { mapChannelWithUnread } from "./common";
|
|
||||||
import { Unreads } from "../../../redux/reducers/unreads";
|
import logoSVG from '../../../assets/logo.svg';
|
||||||
import { connectState } from "../../../redux/connector";
|
|
||||||
import styled, { css } from "styled-components";
|
|
||||||
import { Children } from "../../../types/Preact";
|
|
||||||
import LineDivider from "../../ui/LineDivider";
|
|
||||||
import ServerIcon from "../../common/ServerIcon";
|
|
||||||
import PaintCounter from "../../../lib/PaintCounter";
|
|
||||||
import { attachContextMenu } from 'preact-context-menu';
|
|
||||||
|
|
||||||
function Icon({ children, unread, size }: { children: Children, unread?: 'mention' | 'unread', size: number }) {
|
function Icon({ children, unread, size }: { children: Children, unread?: 'mention' | 'unread', size: number }) {
|
||||||
return (
|
return (
|
||||||
|
@ -146,7 +148,7 @@ export function ServerListSidebar({ unreads }: Props) {
|
||||||
<ServerEntry invert
|
<ServerEntry invert
|
||||||
active={typeof server === 'undefined' && !path.startsWith('/invite')}>
|
active={typeof server === 'undefined' && !path.startsWith('/invite')}>
|
||||||
<Icon size={36} unread={homeUnread}>
|
<Icon size={36} unread={homeUnread}>
|
||||||
<img src="/assets/app_icon.png" />
|
<img src={logoSVG} />
|
||||||
</Icon>
|
</Icon>
|
||||||
</ServerEntry>
|
</ServerEntry>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
|
@ -7,6 +7,8 @@ import Button from "../../../components/ui/Button";
|
||||||
import FormField from "../../../pages/login/FormField";
|
import FormField from "../../../pages/login/FormField";
|
||||||
import Preloader from "../../../components/ui/Preloader";
|
import Preloader from "../../../components/ui/Preloader";
|
||||||
|
|
||||||
|
import wideSVG from '../../../assets/wide.svg';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
callback: (username: string, loginAfterSuccess?: true) => Promise<void>;
|
callback: (username: string, loginAfterSuccess?: true) => Promise<void>;
|
||||||
|
@ -32,7 +34,7 @@ export function OnboardingModal({ onClose, callback }: Props) {
|
||||||
<div className={styles.header}>
|
<div className={styles.header}>
|
||||||
<h1>
|
<h1>
|
||||||
<Text id="app.special.modals.onboarding.welcome" />
|
<Text id="app.special.modals.onboarding.welcome" />
|
||||||
<img src="/assets/wide.svg" />
|
<img src={wideSVG} />
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.form}>
|
<div className={styles.form}>
|
||||||
|
|
|
@ -4,12 +4,14 @@ import { Link } from "react-router-dom";
|
||||||
import { Text } from "preact-i18n";
|
import { Text } from "preact-i18n";
|
||||||
import Header from "../../components/ui/Header";
|
import Header from "../../components/ui/Header";
|
||||||
|
|
||||||
|
import wideSVG from '../../assets/wide.svg';
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
return (
|
return (
|
||||||
<div className={styles.home}>
|
<div className={styles.home}>
|
||||||
<Header placement="primary"><Text id="app.navigation.tabs.home" /></Header>
|
<Header placement="primary"><Text id="app.navigation.tabs.home" /></Header>
|
||||||
<h3>
|
<h3>
|
||||||
<Text id="app.special.modals.onboarding.welcome" /> <img src="/assets/wide.svg" />
|
<Text id="app.special.modals.onboarding.welcome" /> <img src={wideSVG} />
|
||||||
</h3>
|
</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
|
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
@ -15,6 +15,14 @@ import { useIntermediate } from "../../../context/intermediate/Intermediate";
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import pSBC from 'shade-blend-color';
|
import pSBC from 'shade-blend-color';
|
||||||
|
|
||||||
|
import lightSVG from '../assets/light.svg';
|
||||||
|
import darkSVG from '../assets/dark.svg';
|
||||||
|
|
||||||
|
import mutantSVG from '../assets/mutant_emoji.svg';
|
||||||
|
import notoSVG from '../assets/noto_emoji.svg';
|
||||||
|
import openmojiSVG from '../assets/openmoji_emoji.svg';
|
||||||
|
import twemojiSVG from '../assets/twemoji_emoji.svg';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
settings: Settings;
|
settings: Settings;
|
||||||
}
|
}
|
||||||
|
@ -72,7 +80,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
<div className={styles.themes}>
|
<div className={styles.themes}>
|
||||||
<div className={styles.theme}>
|
<div className={styles.theme}>
|
||||||
<img
|
<img
|
||||||
src="/assets/images/light.svg"
|
src={lightSVG}
|
||||||
data-active={selected === "light"}
|
data-active={selected === "light"}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
selected !== "light" &&
|
selected !== "light" &&
|
||||||
|
@ -84,7 +92,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.theme}>
|
<div className={styles.theme}>
|
||||||
<img
|
<img
|
||||||
src="/assets/images/dark.svg"
|
src={darkSVG}
|
||||||
data-active={selected === "dark"}
|
data-active={selected === "dark"}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
selected !== "dark" && setTheme({ preset: "dark" })
|
selected !== "dark" && setTheme({ preset: "dark" })
|
||||||
|
@ -131,7 +139,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
<div className={styles.button}
|
<div className={styles.button}
|
||||||
onClick={() => setEmojiPack('mutant')}
|
onClick={() => setEmojiPack('mutant')}
|
||||||
data-active={emojiPack === 'mutant'}>
|
data-active={emojiPack === 'mutant'}>
|
||||||
<img src="/assets/images/mutant_emoji.svg" draggable={false} />
|
<img src={mutantSVG} draggable={false} />
|
||||||
</div>
|
</div>
|
||||||
<h4>Mutant Remix <a href="https://mutant.revolt.chat" target="_blank">(by Revolt)</a></h4>
|
<h4>Mutant Remix <a href="https://mutant.revolt.chat" target="_blank">(by Revolt)</a></h4>
|
||||||
</div>
|
</div>
|
||||||
|
@ -139,7 +147,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
<div className={styles.button}
|
<div className={styles.button}
|
||||||
onClick={() => setEmojiPack('twemoji')}
|
onClick={() => setEmojiPack('twemoji')}
|
||||||
data-active={emojiPack === 'twemoji'}>
|
data-active={emojiPack === 'twemoji'}>
|
||||||
<img src="/assets/images/twemoji_emoji.svg" draggable={false} />
|
<img src={twemojiSVG} draggable={false} />
|
||||||
</div>
|
</div>
|
||||||
<h4>Twemoji</h4>
|
<h4>Twemoji</h4>
|
||||||
</div>
|
</div>
|
||||||
|
@ -149,7 +157,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
<div className={styles.button}
|
<div className={styles.button}
|
||||||
onClick={() => setEmojiPack('openmoji')}
|
onClick={() => setEmojiPack('openmoji')}
|
||||||
data-active={emojiPack === 'openmoji'}>
|
data-active={emojiPack === 'openmoji'}>
|
||||||
<img src="/assets/images/openmoji_emoji.svg" draggable={false} />
|
<img src={openmojiSVG} draggable={false} />
|
||||||
</div>
|
</div>
|
||||||
<h4>Openmoji</h4>
|
<h4>Openmoji</h4>
|
||||||
</div>
|
</div>
|
||||||
|
@ -157,7 +165,7 @@ export function Component(props: Props & WithDispatcher) {
|
||||||
<div className={styles.button}
|
<div className={styles.button}
|
||||||
onClick={() => setEmojiPack('noto')}
|
onClick={() => setEmojiPack('noto')}
|
||||||
data-active={emojiPack === 'noto'}>
|
data-active={emojiPack === 'noto'}>
|
||||||
<img src="/assets/images/noto_emoji.svg" draggable={false} />
|
<img src={notoSVG} draggable={false} />
|
||||||
</div>
|
</div>
|
||||||
<h4>Noto Emoji</h4>
|
<h4>Noto Emoji</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|