diff --git a/public/auth-page.jpg b/public/auth-page.jpg deleted file mode 100644 index ab788a9f..00000000 Binary files a/public/auth-page.jpg and /dev/null differ diff --git a/public/bonfire.png b/public/bonfire.png deleted file mode 100644 index 11ee31fa..00000000 Binary files a/public/bonfire.png and /dev/null differ diff --git a/public/discours-banner.jpg b/public/discours-banner.jpg deleted file mode 100644 index 77299720..00000000 Binary files a/public/discours-banner.jpg and /dev/null differ diff --git a/public/fonts/JetBrainsMono-Regular.woff2 b/public/fonts/JetBrainsMono-Regular.woff2 deleted file mode 100644 index fdf95dde..00000000 Binary files a/public/fonts/JetBrainsMono-Regular.woff2 and /dev/null differ diff --git a/public/fonts/Muller-ExtraBold.eot b/public/fonts/Muller-ExtraBold.eot deleted file mode 100644 index fe188a9c..00000000 Binary files a/public/fonts/Muller-ExtraBold.eot and /dev/null differ diff --git a/public/fonts/Muller-MediumItalic.eot b/public/fonts/Muller-MediumItalic.eot deleted file mode 100644 index 986fecb2..00000000 Binary files a/public/fonts/Muller-MediumItalic.eot and /dev/null differ diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 3e28032d..00000000 --- a/public/manifest.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "theme_color": "#111111", - "background_color": "#ffffff", - "display": "standalone", - "scope": "/", - "start_url": "/", - "name": "discours.io", - "short_name": "discours.io", - "description": "Дискурс - коллаборативная журналистика", - "icons": [ - { - "src": "/favicon.png", - "sizes": "200x200", - "type": "image/png", - "purpose": "any maskable" - } - ] -} diff --git a/src/components/Article/AudioHeader/AudioHeader.tsx b/src/components/Article/AudioHeader/AudioHeader.tsx index af1541a0..5b2ffb77 100644 --- a/src/components/Article/AudioHeader/AudioHeader.tsx +++ b/src/components/Article/AudioHeader/AudioHeader.tsx @@ -21,7 +21,7 @@ export const AudioHeader = (props: Props) => { return (
diff --git a/src/components/Views/Inbox.tsx b/src/components/Views/Inbox.tsx index 9ea435e0..755c39a4 100644 --- a/src/components/Views/Inbox.tsx +++ b/src/components/Views/Inbox.tsx @@ -1,7 +1,7 @@ import type { Author, Chat, Message as MessageType } from '../../graphql/types.gen' import { clsx } from 'clsx' -import { For, createSignal, Show, onMount, createEffect, createMemo } from 'solid-js' +import { For, createSignal, Show, onMount, createEffect, createMemo, lazy } from 'solid-js' import { useInbox } from '../../context/inbox' import { useLocalize } from '../../context/localize' @@ -10,7 +10,6 @@ import { loadRecipients } from '../../stores/inbox' import { useRouter } from '../../stores/router' import { showModal } from '../../stores/ui' import { Icon } from '../_shared/Icon' -import SimplifiedEditor from '../Editor/SimplifiedEditor' import CreateModalContent from '../Inbox/CreateModalContent' import DialogCard from '../Inbox/DialogCard' import DialogHeader from '../Inbox/DialogHeader' @@ -22,6 +21,8 @@ import { Modal } from '../Nav/Modal' import styles from '../../styles/Inbox.module.scss' +const SimplifiedEditor = lazy(() => import('../Editor/SimplifiedEditor')) + type InboxSearchParams = { initChat: string chat: string diff --git a/src/components/Views/PublishSettings/PublishSettings.tsx b/src/components/Views/PublishSettings/PublishSettings.tsx index 44ed23c1..2818ccbd 100644 --- a/src/components/Views/PublishSettings/PublishSettings.tsx +++ b/src/components/Views/PublishSettings/PublishSettings.tsx @@ -1,6 +1,6 @@ import { redirectPage } from '@nanostores/router' import { clsx } from 'clsx' -import { createSignal, onMount, Show } from 'solid-js' +import { createSignal, lazy, onMount, Show } from 'solid-js' import { createStore } from 'solid-js/store' import { ShoutForm, useEditorContext } from '../../../context/editor' @@ -12,17 +12,19 @@ import { router } from '../../../stores/router' import { hideModal, showModal } from '../../../stores/ui' import { apiClient } from '../../../utils/apiClient' import { Button } from '../../_shared/Button' -import { GrowingTextarea } from '../../_shared/GrowingTextarea' import { Icon } from '../../_shared/Icon' import { Image } from '../../_shared/Image' import { TopicSelect, UploadModalContent } from '../../Editor' -import SimplifiedEditor, { MAX_DESCRIPTION_LIMIT } from '../../Editor/SimplifiedEditor' import { Modal } from '../../Nav/Modal' import { EMPTY_TOPIC } from '../Edit' import styles from './PublishSettings.module.scss' import stylesBeside from '../../Feed/Beside.module.scss' +const SimplifiedEditor = lazy(() => import('../../Editor/SimplifiedEditor')) +const GrowingTextarea = lazy(() => import('../../_shared/GrowingTextarea/GrowingTextarea')) +const DESCRIPTION_MAX_LENGTH = 400 + type Props = { shoutId: number form: ShoutForm @@ -42,7 +44,7 @@ export const PublishSettings = (props: Props) => { if (!props.form.description) { const cleanFootnotes = props.form.body.replaceAll(/.*?<\/footnote>/g, '') const leadText = cleanFootnotes.replaceAll(/<\/?[^>]+(>|$)/gi, ' ') - return shorten(leadText, MAX_DESCRIPTION_LIMIT).trim() + return shorten(leadText, DESCRIPTION_MAX_LENGTH).trim() } return props.form.description } @@ -143,7 +145,7 @@ export const PublishSettings = (props: Props) => { > - + @@ -191,7 +193,7 @@ export const PublishSettings = (props: Props) => { label={t('Description')} initialContent={composeDescription()} onChange={(value) => setForm('description', value)} - maxLength={MAX_DESCRIPTION_LIMIT} + maxLength={DESCRIPTION_MAX_LENGTH} /> diff --git a/src/components/Views/Search.tsx b/src/components/Views/Search.tsx index 7422ab35..f87909a1 100644 --- a/src/components/Views/Search.tsx +++ b/src/components/Views/Search.tsx @@ -92,7 +92,7 @@ export const SearchView = (props: Props) => { {(article) => ( - + )} diff --git a/src/components/_shared/GrowingTextarea/GrowingTextarea.tsx b/src/components/_shared/GrowingTextarea/GrowingTextarea.tsx index cc119c4c..2c725f06 100644 --- a/src/components/_shared/GrowingTextarea/GrowingTextarea.tsx +++ b/src/components/_shared/GrowingTextarea/GrowingTextarea.tsx @@ -1,6 +1,8 @@ import { clsx } from 'clsx' import { createEffect, createSignal, Show } from 'solid-js' +import { ShowOnlyOnClient } from '../ShowOnlyOnClient' + import styles from './GrowingTextarea.module.scss' type Props = { @@ -15,7 +17,7 @@ type Props = { textAreaRef?: (el: HTMLTextAreaElement) => void } -export const GrowingTextarea = (props: Props) => { +const GrowingTextarea = (props: Props) => { const [value, setValue] = createSignal('') const [isFocused, setIsFocused] = createSignal(false) @@ -41,47 +43,51 @@ export const GrowingTextarea = (props: Props) => { } return ( - 0, - })} - > - 0}> - {props.fieldName} - - - handleChangeValue(event)} - onChange={(event) => props.value(event.target.value)} - placeholder={props.placeholder} - onFocus={() => setIsFocused(true)} - onBlur={() => setIsFocused(false)} - /> - - - - - {`${props.maxLength - value().length}`} - + + 0, + })} + > + 0}> + {props.fieldName} + + + handleChangeValue(event)} + onChange={(event) => props.value(event.target.value)} + placeholder={props.placeholder} + onFocus={() => setIsFocused(true)} + onBlur={() => setIsFocused(false)} + /> - - + + + + {`${props.maxLength - value().length}`} + + + + + ) } + +export default GrowingTextarea // for async load diff --git a/src/components/_shared/GrowingTextarea/index.ts b/src/components/_shared/GrowingTextarea/index.ts deleted file mode 100644 index f335f9d7..00000000 --- a/src/components/_shared/GrowingTextarea/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { GrowingTextarea } from './GrowingTextarea' diff --git a/src/components/_shared/Image/Image.tsx b/src/components/_shared/Image/Image.tsx index 1b7fdba4..197a5367 100644 --- a/src/components/_shared/Image/Image.tsx +++ b/src/components/_shared/Image/Image.tsx @@ -1,5 +1,6 @@ import type { JSX } from 'solid-js' +import { Link } from '@solidjs/meta' import { splitProps } from 'solid-js' import { getImageUrl } from '../../../utils/getImageUrl' @@ -11,6 +12,20 @@ type Props = JSX.ImgHTMLAttributes & { export const Image = (props: Props) => { const [local, others] = splitProps(props, ['src', 'alt']) - const src = getImageUrl(local.src, { width: others.width }) - return + + const imageUrl = getImageUrl(local.src, { width: others.width }) + + const imageSrcSet = [1, 2, 3] + .map( + (pixelDensity) => + `${getImageUrl(local.src, { width: others.width * pixelDensity })} ${pixelDensity}x`, + ) + .join(', ') + + return ( + <> + + + > + ) } diff --git a/src/components/_shared/SolidSwiper/ArticleCardSwiper.tsx b/src/components/_shared/SolidSwiper/ArticleCardSwiper.tsx index adb15939..ef63085e 100644 --- a/src/components/_shared/SolidSwiper/ArticleCardSwiper.tsx +++ b/src/components/_shared/SolidSwiper/ArticleCardSwiper.tsx @@ -17,11 +17,13 @@ type Props = { export const ArticleCardSwiper = (props: Props) => { const mainSwipeRef: { current: SwiperRef } = { current: null } + onMount(async () => { const { register } = await import('swiper/element/bundle') register() SwiperCore.use([Pagination, Navigation, Manipulation]) }) + return ( @@ -63,6 +65,7 @@ export const ArticleCardSwiper = (props: Props) => { isWithCover: true, nodate: true, }} + desktopCoverSize="L" /> )} diff --git a/src/components/_shared/SolidSwiper/ImageSwiper.tsx b/src/components/_shared/SolidSwiper/ImageSwiper.tsx index f840c487..695b0d6d 100644 --- a/src/components/_shared/SolidSwiper/ImageSwiper.tsx +++ b/src/components/_shared/SolidSwiper/ImageSwiper.tsx @@ -1,6 +1,6 @@ import { createFileUploader } from '@solid-primitives/upload' import { clsx } from 'clsx' -import { createEffect, createSignal, For, Show, on, onMount } from 'solid-js' +import { createEffect, createSignal, For, Show, on, onMount, lazy } from 'solid-js' import SwiperCore, { Manipulation, Navigation, Pagination } from 'swiper' import { useLocalize } from '../../../context/localize' @@ -10,7 +10,6 @@ import { composeMediaItems } from '../../../utils/composeMediaItems' import { getImageUrl } from '../../../utils/getImageUrl' import { handleImageUpload } from '../../../utils/handleImageUpload' import { validateFiles } from '../../../utils/validateFile' -import SimplifiedEditor from '../../Editor/SimplifiedEditor' import { DropArea } from '../DropArea' import { Icon } from '../Icon' import { Image } from '../Image' @@ -21,6 +20,8 @@ import { SwiperRef } from './swiper' import styles from './Swiper.module.scss' +const SimplifiedEditor = lazy(() => import('../../Editor/SimplifiedEditor')) + type Props = { images: MediaItem[] editorMode?: boolean @@ -178,7 +179,7 @@ export const ImageSwiper = (props: Props) => { // @ts-ignore - + {(triggerRef: (el) => void) => ( diff --git a/src/pages/article.page.tsx b/src/pages/article.page.tsx index 8c49cffc..a65e6d63 100644 --- a/src/pages/article.page.tsx +++ b/src/pages/article.page.tsx @@ -48,7 +48,7 @@ export const ArticlePage = (props: PageProps) => { return ( { const usePrerenderedData = props.author?.slug === slug() return ( - + }> import('../../components/Editor/SimplifiedEditor')) +const GrowingTextarea = lazy(() => import('../../components/_shared/GrowingTextarea/GrowingTextarea')) + export const ProfileSettingsPage = () => { const { t } = useLocalize() const [addLinkForm, setAddLinkForm] = createSignal(false) diff --git a/src/pages/topic.page.tsx b/src/pages/topic.page.tsx index 6f7cdf74..aeaf268e 100644 --- a/src/pages/topic.page.tsx +++ b/src/pages/topic.page.tsx @@ -53,7 +53,7 @@ export const TopicPage = (props: PageProps) => { const usePrerenderedData = props.topic?.slug === slug() return ( - + }> { ${dangerouslySkipEscape(getAssets())} - ${dangerouslySkipEscape(generateHydrationScript())} ${dangerouslySkipEscape(rootContent)} + ${dangerouslySkipEscape(generateHydrationScript())} ` } diff --git a/src/styles/_imports.scss b/src/styles/_imports.scss index 04111a8e..1b0148f2 100644 --- a/src/styles/_imports.scss +++ b/src/styles/_imports.scss @@ -1,4 +1,3 @@ -@import 'fonts'; @import 'globals'; @import 'bootstrap/scss/functions'; @import 'bootstrap/scss/variables'; diff --git a/src/styles/app.scss b/src/styles/app.scss index 3fcbe46a..9e37ed3c 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -1,3 +1,4 @@ +@import 'fonts'; @import 'bootstrap/scss/mixins/lists'; @import 'bootstrap/scss/mixins/container'; @import 'bootstrap/scss/mixins/utilities';