diff --git a/apps/web/src/app/decks/_components/_index.scss b/apps/web/src/app/decks/_components/_index.scss index 673a653080..272168c26e 100644 --- a/apps/web/src/app/decks/_components/_index.scss +++ b/apps/web/src/app/decks/_components/_index.scss @@ -1,6 +1,12 @@ @import "src/styles/vars_mixins"; -html, body { +// Scoped to pages that actually render the decks UI. Unscoped, this hides the +// window scrollbar on EVERY route, which cancels the `scrollbar-gutter: stable` +// that styles/_base.scss reserves to stop modal-open CLS, and shifts every +// centered element by 7px. That only stayed invisible while this file compiled +// into a decks-only chunk; once CSS chunks are consolidated the rule is merged +// into the shared sheet and leaks site-wide. See issue #1632. +html:has(.decks), body:has(.decks) { &::-webkit-scrollbar { display: none; } diff --git a/apps/web/src/features/announcement/index.tsx b/apps/web/src/features/announcement/index.tsx index 1cd898e29c..18df47ee5d 100644 --- a/apps/web/src/features/announcement/index.tsx +++ b/apps/web/src/features/announcement/index.tsx @@ -2,7 +2,6 @@ import React, { useEffect, useMemo, useState } from "react"; import dayjs from "@/utils/dayjs"; import * as ls from "@/utils/local-storage"; import { Announcement, LaterAnnouncement } from "./types"; -import "./index.scss"; import { Button } from "@ui/button"; import { usePathname } from "next/navigation"; import { closeSvg } from "@ui/svg"; diff --git a/apps/web/src/features/post-renderer/components/extensions/hive-operation-extension.tsx b/apps/web/src/features/post-renderer/components/extensions/hive-operation-extension.tsx index 41028e61c0..12b58d6741 100644 --- a/apps/web/src/features/post-renderer/components/extensions/hive-operation-extension.tsx +++ b/apps/web/src/features/post-renderer/components/extensions/hive-operation-extension.tsx @@ -2,7 +2,6 @@ import React, { RefObject, useEffect, useMemo, useRef } from "react"; import { createRoot } from "react-dom/client"; -import "./hive-operation-extension.scss"; import type { Operation } from "@ecency/sdk"; import defaults from "@/defaults"; diff --git a/apps/web/src/features/post-renderer/components/extensions/hive-post-link-extension.tsx b/apps/web/src/features/post-renderer/components/extensions/hive-post-link-extension.tsx index a2856137e6..c423ffb15b 100644 --- a/apps/web/src/features/post-renderer/components/extensions/hive-post-link-extension.tsx +++ b/apps/web/src/features/post-renderer/components/extensions/hive-post-link-extension.tsx @@ -9,7 +9,6 @@ import React, { useState, } from "react"; import { createRoot } from "react-dom/client"; -import "./hive-post-link-extension.scss"; import { findPostLinkElements, isInvalidPermlinkLink, diff --git a/apps/web/src/features/post-renderer/components/extensions/wave-like-post-extension.tsx b/apps/web/src/features/post-renderer/components/extensions/wave-like-post-extension.tsx index 02c664f27a..f931371fcf 100644 --- a/apps/web/src/features/post-renderer/components/extensions/wave-like-post-extension.tsx +++ b/apps/web/src/features/post-renderer/components/extensions/wave-like-post-extension.tsx @@ -7,7 +7,6 @@ import { getPostQueryOptions, QueryKeys } from "@ecency/sdk"; import { getQueryClient } from "@/core/react-query"; import { makeEntryPath } from "@/utils"; import { findPostLinkElements, isWaveLikePost } from "../functions"; -import "./wave-like-post-extension.scss"; import { EcencyRenderer } from "../ecency-renderer"; import { Logo } from "../icons"; import defaults from "@/defaults"; diff --git a/apps/web/src/features/shared/available-credits/index.tsx b/apps/web/src/features/shared/available-credits/index.tsx index 3aed76503e..433c8a8247 100644 --- a/apps/web/src/features/shared/available-credits/index.tsx +++ b/apps/web/src/features/shared/available-credits/index.tsx @@ -21,8 +21,6 @@ import dayjs, { Dayjs } from "@/utils/dayjs"; import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; import { PurchaseQrDialog } from "../purchase-qr"; -import "./index.scss"; - interface Props { username: string; operation: RcOperation; diff --git a/apps/web/src/features/shared/bookmark-btn/index.tsx b/apps/web/src/features/shared/bookmark-btn/index.tsx index ba2e2d49b8..ba0e8147d8 100644 --- a/apps/web/src/features/shared/bookmark-btn/index.tsx +++ b/apps/web/src/features/shared/bookmark-btn/index.tsx @@ -14,7 +14,6 @@ import { Button } from "@ui/button"; import { Tooltip } from "@ui/tooltip"; import i18next from "i18next"; import { useMemo, useState } from "react"; -import "./_index.scss"; import { error, success } from "../feedback"; import { getAccessToken } from "@/utils"; import { useGlobalStore } from "@/core/global-store"; diff --git a/apps/web/src/features/shared/bookmarks/index.tsx b/apps/web/src/features/shared/bookmarks/index.tsx index 898361cd4d..57b4acdff7 100644 --- a/apps/web/src/features/shared/bookmarks/index.tsx +++ b/apps/web/src/features/shared/bookmarks/index.tsx @@ -4,8 +4,6 @@ import { TabItem } from "@/features/ui"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import i18next from "i18next"; import { useState } from "react"; -import "./_index.scss"; - interface Props { show: boolean; setShow: (v: boolean) => void; diff --git a/apps/web/src/features/shared/boost/index.tsx b/apps/web/src/features/shared/boost/index.tsx index fa30ce3689..d2b32057f6 100644 --- a/apps/web/src/features/shared/boost/index.tsx +++ b/apps/web/src/features/shared/boost/index.tsx @@ -3,7 +3,6 @@ import { useActiveAccount } from "@/core/hooks/use-active-account"; import React, { ChangeEvent, useCallback, useEffect, useMemo, useRef, useState } from "react"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import { FormControl } from "@ui/input"; import { Button } from "@ui/button"; diff --git a/apps/web/src/features/shared/buy-sell-hive/index.tsx b/apps/web/src/features/shared/buy-sell-hive/index.tsx index a99a8bd2e7..07d9f03891 100644 --- a/apps/web/src/features/shared/buy-sell-hive/index.tsx +++ b/apps/web/src/features/shared/buy-sell-hive/index.tsx @@ -3,7 +3,6 @@ import React, { useCallback, useRef, useState } from "react"; import { error } from "../feedback"; import { formatError } from "@/api/format-error"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import { Button } from "@ui/button"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/comment/index.tsx b/apps/web/src/features/shared/comment/index.tsx index 9e9f6816ee..87f5f084ab 100644 --- a/apps/web/src/features/shared/comment/index.tsx +++ b/apps/web/src/features/shared/comment/index.tsx @@ -25,7 +25,6 @@ import React, { import { useDebounce, useMount } from "react-use"; import useLocalStorage from "react-use/lib/useLocalStorage"; import useUnmount from "react-use/lib/useUnmount"; -import "./_index.scss"; import { useActiveAccount } from "@/core/hooks/use-active-account"; import { useIsMobile } from "@/features/ui/util/use-is-mobile"; import { useQuery } from "@tanstack/react-query"; diff --git a/apps/web/src/features/shared/discussion/index.tsx b/apps/web/src/features/shared/discussion/index.tsx index 478d33b850..9802dbaa52 100644 --- a/apps/web/src/features/shared/discussion/index.tsx +++ b/apps/web/src/features/shared/discussion/index.tsx @@ -22,8 +22,6 @@ import { EcencyEntriesCacheManagement } from "@/core/caches"; import { UilComment } from "@tooni/iconscout-unicons-react"; import defaults from "@/defaults"; import { setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; - setProxyBase(defaults.imageServer); interface Props { diff --git a/apps/web/src/features/shared/edit-history/index.tsx b/apps/web/src/features/shared/edit-history/index.tsx index a630075f98..7bc3e3d17e 100644 --- a/apps/web/src/features/shared/edit-history/index.tsx +++ b/apps/web/src/features/shared/edit-history/index.tsx @@ -3,7 +3,6 @@ import React, { useMemo, useState } from "react"; import defaults from "@/defaults"; import { renderPostBody, setProxyBase } from "@ecency/render-helper"; -import "./index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import { FormControl } from "@ui/input"; import { Entry } from "@/entities"; diff --git a/apps/web/src/features/shared/editor-toolbar/add-image-mobile/index.tsx b/apps/web/src/features/shared/editor-toolbar/add-image-mobile/index.tsx index a349075b21..6d81dbddbf 100644 --- a/apps/web/src/features/shared/editor-toolbar/add-image-mobile/index.tsx +++ b/apps/web/src/features/shared/editor-toolbar/add-image-mobile/index.tsx @@ -1,6 +1,5 @@ import React from "react"; import { proxifyImageSrc, setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import { Button } from "@ui/button"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/editor-toolbar/index.tsx b/apps/web/src/features/shared/editor-toolbar/index.tsx index 2224099acc..b219853f3c 100644 --- a/apps/web/src/features/shared/editor-toolbar/index.tsx +++ b/apps/web/src/features/shared/editor-toolbar/index.tsx @@ -4,7 +4,6 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react" import { useMountedState } from "react-use"; import { v4 } from "uuid"; import { codeTagsSvg, emoticonHappyOutlineSvg, formatBoldSvg, formatItalicSvg, formatListBulletedSvg, formatListNumberedSvg, formatQuoteCloseSvg, formatTitleSvg, gifIcon, gridSvg, imageSvg, textShortSvg, videoSvg } from "@/assets/img/svg"; -import "./_index.scss"; import { UilPanelAdd } from "@tooni/iconscout-unicons-react"; import { PollsCreation, PollSnapshot } from "@/features/polls"; import { useIsMobile } from "@/features/ui/util/use-is-mobile"; diff --git a/apps/web/src/features/shared/entry-info/index.tsx b/apps/web/src/features/shared/entry-info/index.tsx index 1f917b4675..eaa1d2dda4 100644 --- a/apps/web/src/features/shared/entry-info/index.tsx +++ b/apps/web/src/features/shared/entry-info/index.tsx @@ -1,4 +1,3 @@ -import "./_index.scss"; import { accountReputation, parseDate } from "@/utils"; import { Entry } from "@/entities"; import { diff --git a/apps/web/src/features/shared/entry-list-content/index.tsx b/apps/web/src/features/shared/entry-list-content/index.tsx index cd30e74a67..5acdeea85d 100644 --- a/apps/web/src/features/shared/entry-list-content/index.tsx +++ b/apps/web/src/features/shared/entry-list-content/index.tsx @@ -1,7 +1,6 @@ "use client"; import React from "react"; -import "./_index.scss"; import { Account, Community, Entry } from "@/entities"; import { EntryListItem } from "@/features/shared"; import { useVisibleEntries } from "@/features/shared/entry-list-item/use-muted-authors"; diff --git a/apps/web/src/features/shared/entry-list-item/index.tsx b/apps/web/src/features/shared/entry-list-item/index.tsx index 75488af4db..3441a9d623 100644 --- a/apps/web/src/features/shared/entry-list-item/index.tsx +++ b/apps/web/src/features/shared/entry-list-item/index.tsx @@ -2,7 +2,6 @@ import React from "react"; import { setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; import defaults from "@/defaults"; import { Account, Community, Entry, FullAccount } from "@/entities"; import { makeEntryPath } from "@/utils"; diff --git a/apps/web/src/features/shared/entry-list-loading-item/index.tsx b/apps/web/src/features/shared/entry-list-loading-item/index.tsx index 05cba16464..9414e1b911 100644 --- a/apps/web/src/features/shared/entry-list-loading-item/index.tsx +++ b/apps/web/src/features/shared/entry-list-loading-item/index.tsx @@ -1,6 +1,4 @@ import React from "react"; -import "./_index.scss"; - export function EntryListLoadingItem() { return ( <> diff --git a/apps/web/src/features/shared/entry-menu/index.tsx b/apps/web/src/features/shared/entry-menu/index.tsx index 074d71fe75..657cfd0cfa 100644 --- a/apps/web/src/features/shared/entry-menu/index.tsx +++ b/apps/web/src/features/shared/entry-menu/index.tsx @@ -2,7 +2,6 @@ import React, { useEffect, useRef, useState } from "react"; import { success } from "../feedback"; -import "./_index.scss"; import { useMenuItemsGenerator } from "./menu-items-generator"; import { Entry } from "@/entities"; import { getCommunityCache, useCommunityPin } from "@/core/caches"; diff --git a/apps/web/src/features/shared/entry-payout/index.tsx b/apps/web/src/features/shared/entry-payout/index.tsx index 6cfb9e5f21..9580667ea8 100644 --- a/apps/web/src/features/shared/entry-payout/index.tsx +++ b/apps/web/src/features/shared/entry-payout/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useRef, useState } from "react"; -import "./_index.scss"; import { Popover, PopoverContent } from "@ui/popover"; import { EntryPayoutDetail } from "@/features/shared/entry-payout/entry-payout-detail"; import { parseAsset } from "@/utils"; diff --git a/apps/web/src/features/shared/entry-reblog-btn/index.tsx b/apps/web/src/features/shared/entry-reblog-btn/index.tsx index 832a4747a9..a149e8f870 100644 --- a/apps/web/src/features/shared/entry-reblog-btn/index.tsx +++ b/apps/web/src/features/shared/entry-reblog-btn/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useMemo, useRef, useState } from "react"; -import "./_index.scss"; import { Entry } from "@/entities"; import { PopoverConfirm } from "@/features/ui"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/entry-share/index.tsx b/apps/web/src/features/shared/entry-share/index.tsx index 67c95b5455..81f77fcda2 100644 --- a/apps/web/src/features/shared/entry-share/index.tsx +++ b/apps/web/src/features/shared/entry-share/index.tsx @@ -1,5 +1,4 @@ import React from "react"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import { Entry } from "@/entities"; import { diff --git a/apps/web/src/features/shared/entry-tip-btn/index.tsx b/apps/web/src/features/shared/entry-tip-btn/index.tsx index 08f608b2b6..e8eb81a0e3 100644 --- a/apps/web/src/features/shared/entry-tip-btn/index.tsx +++ b/apps/web/src/features/shared/entry-tip-btn/index.tsx @@ -3,7 +3,6 @@ import { useActiveAccount } from "@/core/hooks/use-active-account"; import React, { useMemo, useState } from "react"; -import "./_index.scss"; import dynamic from "next/dynamic"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import { Account, Entry } from "@/entities"; diff --git a/apps/web/src/features/shared/entry-vote-btn/index.tsx b/apps/web/src/features/shared/entry-vote-btn/index.tsx index c34ba61989..b65525e8b4 100644 --- a/apps/web/src/features/shared/entry-vote-btn/index.tsx +++ b/apps/web/src/features/shared/entry-vote-btn/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import "./_index.scss"; import * as ss from "@/utils/session-storage"; import { LoginRequired } from "@/features/shared"; import useClickAway from "react-use/lib/useClickAway"; diff --git a/apps/web/src/features/shared/entry-votes/index.tsx b/apps/web/src/features/shared/entry-votes/index.tsx index 9230081444..7d246a556e 100644 --- a/apps/web/src/features/shared/entry-votes/index.tsx +++ b/apps/web/src/features/shared/entry-votes/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { ReactNode, useMemo, useRef, useState } from "react"; -import "./_index.scss"; import { Entry } from "@/entities"; import { Tooltip } from "@ui/tooltip"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/feedback/feedback-modal/index.tsx b/apps/web/src/features/shared/feedback/feedback-modal/index.tsx index 3777b63715..fb929bbdec 100644 --- a/apps/web/src/features/shared/feedback/feedback-modal/index.tsx +++ b/apps/web/src/features/shared/feedback/feedback-modal/index.tsx @@ -1,7 +1,6 @@ import React from "react"; import { InsufficientResourceCreditsDetails } from "./insufficient-resource-credits-details"; import { CommonDetails } from "./common-details"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import { ErrorFeedbackObject } from "../feedback-events"; import { ErrorTypes } from "@/enums"; diff --git a/apps/web/src/features/shared/feedback/feedback.tsx b/apps/web/src/features/shared/feedback/feedback.tsx index 9ed97ce9b5..da5a95804a 100644 --- a/apps/web/src/features/shared/feedback/feedback.tsx +++ b/apps/web/src/features/shared/feedback/feedback.tsx @@ -6,8 +6,6 @@ import { useMountTransition } from "@/core/hooks"; import clsx from "clsx"; import { useCallback, useEffect, useMemo, useRef } from "react"; import { useMount, useSet, useUnmount } from "react-use"; -import "./_index.scss"; - interface FeedbackItemProps { feedback: FeedbackObject; live: boolean; diff --git a/apps/web/src/features/shared/gallery/index.tsx b/apps/web/src/features/shared/gallery/index.tsx index 5db228ac64..db1ada620a 100644 --- a/apps/web/src/features/shared/gallery/index.tsx +++ b/apps/web/src/features/shared/gallery/index.tsx @@ -1,7 +1,6 @@ import React from "react"; import { setProxyBase } from "@ecency/render-helper"; import defaults from "@/defaults"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import i18next from "i18next"; import { GalleryList } from "@/features/shared/gallery/gallery-list"; diff --git a/apps/web/src/features/shared/key-or-hot/index.tsx b/apps/web/src/features/shared/key-or-hot/index.tsx index a6964c5b2b..c2fd79835c 100644 --- a/apps/web/src/features/shared/key-or-hot/index.tsx +++ b/apps/web/src/features/shared/key-or-hot/index.tsx @@ -12,7 +12,6 @@ import { useCallback, useState } from "react"; import { OrDivider } from "../or-divider"; import { MetaMaskSignButton } from "../metamask-sign-button"; import { ExtensionChooser } from "../extension-chooser"; -import "./index.scss"; import { shouldUseKeychainMobile } from "@/utils/client"; import { isInAppBrowser } from "@/utils/keychain"; import { getLoginType } from "@/utils/user-token"; diff --git a/apps/web/src/features/shared/linear-progress/index.tsx b/apps/web/src/features/shared/linear-progress/index.tsx index 440792c4e4..f6617b0068 100644 --- a/apps/web/src/features/shared/linear-progress/index.tsx +++ b/apps/web/src/features/shared/linear-progress/index.tsx @@ -1,8 +1,6 @@ "use client"; import React from "react"; -import "./_index.scss"; - export function LinearProgress() { return (
diff --git a/apps/web/src/features/shared/list-style-toggle/index.tsx b/apps/web/src/features/shared/list-style-toggle/index.tsx index 18d15e0042..32d3b107fa 100644 --- a/apps/web/src/features/shared/list-style-toggle/index.tsx +++ b/apps/web/src/features/shared/list-style-toggle/index.tsx @@ -1,7 +1,6 @@ "use client"; import React from "react"; -import "./_index.scss"; import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from "@ui/dropdown"; import { gridView, listView, menuDownSvg } from "@ui/svg"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/login/index.tsx b/apps/web/src/features/shared/login/index.tsx index 9cceda096f..740771c958 100644 --- a/apps/web/src/features/shared/login/index.tsx +++ b/apps/web/src/features/shared/login/index.tsx @@ -2,7 +2,6 @@ import { useGlobalStore } from "@/core/global-store"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; -import "./_index.scss"; import i18next from "i18next"; import Login from "./login"; diff --git a/apps/web/src/features/shared/message-no-data/index.tsx b/apps/web/src/features/shared/message-no-data/index.tsx index 50b5bba40a..dc082a9e33 100644 --- a/apps/web/src/features/shared/message-no-data/index.tsx +++ b/apps/web/src/features/shared/message-no-data/index.tsx @@ -1,5 +1,4 @@ import React, { ReactNode } from "react"; -import "./_index.scss"; import { Button } from "@ui/button"; import Image from "next/image"; import Link from "next/link"; diff --git a/apps/web/src/features/shared/mute-btn/index.tsx b/apps/web/src/features/shared/mute-btn/index.tsx index 0f3e909711..39de75bcab 100644 --- a/apps/web/src/features/shared/mute-btn/index.tsx +++ b/apps/web/src/features/shared/mute-btn/index.tsx @@ -1,5 +1,4 @@ import React, { useCallback, useMemo, useState } from "react"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import { FormControl, InputGroup } from "@ui/input"; import { Button } from "@ui/button"; diff --git a/apps/web/src/features/shared/navbar/index.tsx b/apps/web/src/features/shared/navbar/index.tsx index cd3c973578..10d7233395 100644 --- a/apps/web/src/features/shared/navbar/index.tsx +++ b/apps/web/src/features/shared/navbar/index.tsx @@ -4,7 +4,6 @@ import React, { lazy, Suspense, useEffect, useState } from "react"; import usePrevious from "react-use/lib/usePrevious"; import * as ls from "@/utils/local-storage"; import useMount from "react-use/lib/useMount"; -import "./_index.scss"; import { NavbarMobile } from "./navbar-mobile"; import { NavbarDesktop } from "./navbar-desktop"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; diff --git a/apps/web/src/features/shared/navbar/navbar-notifications-button.tsx b/apps/web/src/features/shared/navbar/navbar-notifications-button.tsx index fe11de0e02..0067603e86 100644 --- a/apps/web/src/features/shared/navbar/navbar-notifications-button.tsx +++ b/apps/web/src/features/shared/navbar/navbar-notifications-button.tsx @@ -1,6 +1,5 @@ "use client"; -import "./_navbar-notifications-button.scss"; import { Button } from "@ui/button"; import { Tooltip } from "@ui/tooltip"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/navbar/sidebar/navbar-side-theme-switcher.tsx b/apps/web/src/features/shared/navbar/sidebar/navbar-side-theme-switcher.tsx index 86f4de5d29..a0ffc208f3 100644 --- a/apps/web/src/features/shared/navbar/sidebar/navbar-side-theme-switcher.tsx +++ b/apps/web/src/features/shared/navbar/sidebar/navbar-side-theme-switcher.tsx @@ -1,6 +1,5 @@ "use client"; -import "./_navbar-side-theme-switcher.scss"; import { classNameObject } from "@ui/util"; import { Theme } from "@/enums"; import { brightnessSvg } from "@ui/svg"; diff --git a/apps/web/src/features/shared/notifications/index.tsx b/apps/web/src/features/shared/notifications/index.tsx index b8b96347f6..9be9d21aa5 100644 --- a/apps/web/src/features/shared/notifications/index.tsx +++ b/apps/web/src/features/shared/notifications/index.tsx @@ -1,7 +1,6 @@ "use client"; import { NotificationsContent } from "@/features/shared/notifications/notifications-content"; -import "./_index.scss"; import { useActiveAccount } from "@/core/hooks/use-active-account"; import { useGlobalStore } from "@/core/global-store"; import { ModalSidebar } from "@ui/modal/modal-sidebar"; diff --git a/apps/web/src/features/shared/or-divider/index.tsx b/apps/web/src/features/shared/or-divider/index.tsx index cdb757a6a6..a01a11f5b9 100644 --- a/apps/web/src/features/shared/or-divider/index.tsx +++ b/apps/web/src/features/shared/or-divider/index.tsx @@ -1,7 +1,6 @@ "use client"; import React from "react"; -import "./_index.scss"; import i18next from "i18next"; export function OrDivider() { diff --git a/apps/web/src/features/shared/profile-popover/index.tsx b/apps/web/src/features/shared/profile-popover/index.tsx index 412f78e81b..c8a597cec1 100644 --- a/apps/web/src/features/shared/profile-popover/index.tsx +++ b/apps/web/src/features/shared/profile-popover/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useCallback, useState } from "react"; -import "./index.scss"; import { Entry } from "@/entities"; import ProfilePopoverCard from "@/features/shared/profile-popover/profile-popover-card"; import { ProfilePopoverAuthor } from "@/features/shared/profile-popover/profile-popover-author"; diff --git a/apps/web/src/features/shared/promote/index.tsx b/apps/web/src/features/shared/promote/index.tsx index a92ddca962..cda7a8528b 100644 --- a/apps/web/src/features/shared/promote/index.tsx +++ b/apps/web/src/features/shared/promote/index.tsx @@ -3,7 +3,6 @@ import { useActiveAccount } from "@/core/hooks/use-active-account"; import React, { useCallback, useEffect, useMemo, useState } from "react"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import { FormControl } from "@ui/input"; import { Button } from "@ui/button"; diff --git a/apps/web/src/features/shared/schedules/index.tsx b/apps/web/src/features/shared/schedules/index.tsx index b3a24049eb..26320e7d7e 100644 --- a/apps/web/src/features/shared/schedules/index.tsx +++ b/apps/web/src/features/shared/schedules/index.tsx @@ -1,7 +1,6 @@ import React from "react"; import defaults from "@/defaults"; import { setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader, ModalTitle } from "@ui/modal"; import i18next from "i18next"; import { SchedulesList } from "@/features/shared/schedules/schedules-list"; diff --git a/apps/web/src/features/shared/scroll-to-top/index.tsx b/apps/web/src/features/shared/scroll-to-top/index.tsx index 65ef1cbb9c..c38ee04589 100644 --- a/apps/web/src/features/shared/scroll-to-top/index.tsx +++ b/apps/web/src/features/shared/scroll-to-top/index.tsx @@ -1,7 +1,6 @@ "use client"; import { useEffect, useState } from "react"; -import "./_index.scss"; import { chevronUpSvg } from "@/features/ui/svg"; import i18next from "i18next"; import { Tooltip } from "@ui/tooltip"; diff --git a/apps/web/src/features/shared/search-box/index.tsx b/apps/web/src/features/shared/search-box/index.tsx index 5f1cc782f4..f83a810f70 100644 --- a/apps/web/src/features/shared/search-box/index.tsx +++ b/apps/web/src/features/shared/search-box/index.tsx @@ -1,5 +1,4 @@ import React from "react"; -import "./_index.scss"; import { FormControl, InputGroup } from "@ui/input"; import { Button } from "@ui/button"; import { copyContent } from "@/features/ui/svg"; diff --git a/apps/web/src/features/shared/search-list-item/index.tsx b/apps/web/src/features/shared/search-list-item/index.tsx index 08e617c7e1..04a85c1a54 100644 --- a/apps/web/src/features/shared/search-list-item/index.tsx +++ b/apps/web/src/features/shared/search-list-item/index.tsx @@ -1,6 +1,5 @@ import React, { useMemo } from "react"; import { catchPostImage, postBodySummary, setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; import defaults from "@/defaults"; import { SearchResult } from "@/entities"; import { diff --git a/apps/web/src/features/shared/skeleton/index.tsx b/apps/web/src/features/shared/skeleton/index.tsx index c227f77b1f..9e94f3711b 100644 --- a/apps/web/src/features/shared/skeleton/index.tsx +++ b/apps/web/src/features/shared/skeleton/index.tsx @@ -1,6 +1,4 @@ import React from "react"; -import "./index.scss"; - interface Props { className?: string; style?: object; diff --git a/apps/web/src/features/shared/suggestion-list/index.tsx b/apps/web/src/features/shared/suggestion-list/index.tsx index 4717297de9..d9aed356f2 100644 --- a/apps/web/src/features/shared/suggestion-list/index.tsx +++ b/apps/web/src/features/shared/suggestion-list/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { CSSProperties, JSX, useEffect, useRef, useState } from "react"; -import "./_index.scss"; import { classNameObject } from "@ui/util"; import useClickAway from "react-use/lib/useClickAway"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/switch-lang/index.tsx b/apps/web/src/features/shared/switch-lang/index.tsx index 6baa650226..d872eca3d0 100644 --- a/apps/web/src/features/shared/switch-lang/index.tsx +++ b/apps/web/src/features/shared/switch-lang/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useState } from "react"; -import "./_index.scss"; import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from "@ui/dropdown"; import Link from "next/link"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/textarea-autocomplete/index.tsx b/apps/web/src/features/shared/textarea-autocomplete/index.tsx index a173d6edda..97e35f1eac 100644 --- a/apps/web/src/features/shared/textarea-autocomplete/index.tsx +++ b/apps/web/src/features/shared/textarea-autocomplete/index.tsx @@ -6,7 +6,6 @@ import React, { } from "react"; import { useActiveAccount } from "@/core/hooks/use-active-account"; import ReactTextareaAutocomplete from "@webscopeio/react-textarea-autocomplete"; -import "./_index.scss"; import { lookupAccountsQueryOptions, searchPath } from "@ecency/sdk"; import { UserAvatar } from "@/features/shared"; import i18next from "i18next"; diff --git a/apps/web/src/features/shared/transactions/index.tsx b/apps/web/src/features/shared/transactions/index.tsx index c32aaaa26e..33a8f0b768 100644 --- a/apps/web/src/features/shared/transactions/index.tsx +++ b/apps/web/src/features/shared/transactions/index.tsx @@ -1,3 +1 @@ -import "./_index.scss"; - export * from "./transaction-row"; diff --git a/apps/web/src/features/shared/transfer/index.tsx b/apps/web/src/features/shared/transfer/index.tsx index 2e2172bb18..2760f87349 100644 --- a/apps/web/src/features/shared/transfer/index.tsx +++ b/apps/web/src/features/shared/transfer/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useCallback, useEffect, useMemo, useState } from "react"; -import "./_index.scss"; import { Modal, ModalBody, ModalHeader } from "@ui/modal"; import i18next from "i18next"; import { TransferStep1 } from "@/features/shared/transfer/transfer-step-1"; diff --git a/apps/web/src/features/shared/two-user-avatar/index.tsx b/apps/web/src/features/shared/two-user-avatar/index.tsx index fdc8e0b6f8..ceeebce4d9 100644 --- a/apps/web/src/features/shared/two-user-avatar/index.tsx +++ b/apps/web/src/features/shared/two-user-avatar/index.tsx @@ -1,6 +1,4 @@ import defaults from "@/defaults"; -import "./_index.scss"; - interface Props { from: string; to: string; diff --git a/apps/web/src/features/shared/user-avatar/index.tsx b/apps/web/src/features/shared/user-avatar/index.tsx index a5f798601e..9fab42f712 100644 --- a/apps/web/src/features/shared/user-avatar/index.tsx +++ b/apps/web/src/features/shared/user-avatar/index.tsx @@ -2,7 +2,6 @@ import React, { useMemo } from "react"; import { proxifyImageSrc, setProxyBase } from "@ecency/render-helper"; -import "./_index.scss"; import defaults from "@/defaults"; setProxyBase(defaults.imageServer); diff --git a/apps/web/src/features/shared/video-upload-threespeak/index.tsx b/apps/web/src/features/shared/video-upload-threespeak/index.tsx index 51c04c7d55..38457b8e01 100644 --- a/apps/web/src/features/shared/video-upload-threespeak/index.tsx +++ b/apps/web/src/features/shared/video-upload-threespeak/index.tsx @@ -9,7 +9,6 @@ import { recordVideoSvg } from "@ui/svg"; import i18next from "i18next"; import React, { ChangeEvent, ReactNode, useCallback, useEffect, useRef, useState } from "react"; import useMountedState from "react-use/lib/useMountedState"; -import "./index.scss"; import { VideoUploadItem } from "./video-upload-item"; import { VideoUploadRecorder } from "./video-upload-recorder"; import { useActiveAccount } from "@/core/hooks/use-active-account"; diff --git a/apps/web/src/features/ui/button-group/index.tsx b/apps/web/src/features/ui/button-group/index.tsx index e7b43d267a..43e7b51fc2 100644 --- a/apps/web/src/features/ui/button-group/index.tsx +++ b/apps/web/src/features/ui/button-group/index.tsx @@ -1,5 +1,4 @@ import React from "react"; -import "./_index.scss"; import { classNameObject } from "@/features/ui/util"; interface Props { diff --git a/apps/web/src/features/ui/emoji-picker/index.tsx b/apps/web/src/features/ui/emoji-picker/index.tsx index b30ee7a20a..6996544740 100644 --- a/apps/web/src/features/ui/emoji-picker/index.tsx +++ b/apps/web/src/features/ui/emoji-picker/index.tsx @@ -10,7 +10,6 @@ import { } from "react"; import { createPortal } from "react-dom"; import { flip, offset, shift, size, useFloating } from "@floating-ui/react-dom"; -import "./_index.scss"; import Picker from "@emoji-mart/react"; import emojiData from "@emoji-mart/data"; import { useGlobalStore } from "@/core/global-store"; diff --git a/apps/web/src/features/ui/gif-picker/index.tsx b/apps/web/src/features/ui/gif-picker/index.tsx index 63bd73d28b..0923e81e6c 100644 --- a/apps/web/src/features/ui/gif-picker/index.tsx +++ b/apps/web/src/features/ui/gif-picker/index.tsx @@ -6,7 +6,6 @@ import React, { useRef, useState } from "react"; -import "./_index.scss"; import { SearchBox } from "@/features/shared"; import Image from "next/image"; import { insertOrReplace } from "@/utils/input-util"; diff --git a/apps/web/src/features/ui/input/input-vote.tsx b/apps/web/src/features/ui/input/input-vote.tsx index 1a7f519931..0a206c4e7c 100644 --- a/apps/web/src/features/ui/input/input-vote.tsx +++ b/apps/web/src/features/ui/input/input-vote.tsx @@ -10,7 +10,6 @@ import React, { useState } from "react"; import { UilArrowDown, UilArrowUp } from "@tooni/iconscout-unicons-react"; -import "./_input-vote.scss"; import { InputGroup } from "@ui/input/input-group"; import useInterval from "react-use/lib/useInterval"; import { classNameObject } from "@ui/util"; diff --git a/apps/web/src/features/waves/components/wave-actions.tsx b/apps/web/src/features/waves/components/wave-actions.tsx index 2b2789453d..2cd7894174 100644 --- a/apps/web/src/features/waves/components/wave-actions.tsx +++ b/apps/web/src/features/waves/components/wave-actions.tsx @@ -13,7 +13,6 @@ import { Button } from "@ui/button"; import i18next from "i18next"; import React, { ReactNode } from "react"; import { WaveEntry } from "@/entities"; -import "./wave-actions.scss"; import { useActiveAccount } from "@/core/hooks/use-active-account"; import { PostTipsResponse } from "@ecency/sdk"; import { commentSvg } from "@ui/svg"; diff --git a/apps/web/src/features/waves/components/wave-form/index.tsx b/apps/web/src/features/waves/components/wave-form/index.tsx index 5907701bda..e4d0c1fe81 100644 --- a/apps/web/src/features/waves/components/wave-form/index.tsx +++ b/apps/web/src/features/waves/components/wave-form/index.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; -import "./_index.scss"; import { BeneficiaryRoute, Entry, WaveEntry } from "@/entities"; import { PollsContext, PollsManager, useEntryPollExtractor } from "@/features/polls"; import { useLocalStorage } from "react-use"; diff --git a/apps/web/src/styles/_shared-components.scss b/apps/web/src/styles/_shared-components.scss new file mode 100644 index 0000000000..98998aa309 --- /dev/null +++ b/apps/web/src/styles/_shared-components.scss @@ -0,0 +1,75 @@ +// Aggregate of the SHARED (features/**) component stylesheets, imported once from +// style.scss. These used to be imported one-per-component from TS/TSX, which made +// the build emit one render-blocking per component: 52 of them on a post +// page. Importing them from a single entry collapses that to one stylesheet, keeps +// the immutable long-cache, and adds nothing to the HTML response. See issue #1632. + +// ORDER IS CASCADE-SIGNIFICANT. The list is generated in source-path order (which +// sorts "_index.scss" partials by their underscore-prefixed filename, so the +// rendered paths below are not lexicographic). The equivalence of the compiled +// output was verified against this exact order; do not hand-reorder it. + +// Route-scoped app/** stylesheets are deliberately NOT aggregated here: a route +// sheet carrying a global element selector (html/body/*) would leak site-wide once +// merged into the shared chunk. + +@import "../features/announcement/index"; +@import "../features/post-renderer/components/extensions/hive-operation-extension"; +@import "../features/post-renderer/components/extensions/hive-post-link-extension"; +@import "../features/post-renderer/components/extensions/wave-like-post-extension"; +@import "../features/shared/available-credits/index"; +@import "../features/shared/bookmark-btn/index"; +@import "../features/shared/bookmarks/index"; +@import "../features/shared/boost/index"; +@import "../features/shared/buy-sell-hive/index"; +@import "../features/shared/comment/index"; +@import "../features/shared/discussion/index"; +@import "../features/shared/edit-history/index"; +@import "../features/shared/editor-toolbar/index"; +@import "../features/shared/editor-toolbar/add-image-mobile/index"; +@import "../features/shared/entry-info/index"; +@import "../features/shared/entry-list-content/index"; +@import "../features/shared/entry-list-item/index"; +@import "../features/shared/entry-list-loading-item/index"; +@import "../features/shared/entry-menu/index"; +@import "../features/shared/entry-payout/index"; +@import "../features/shared/entry-reblog-btn/index"; +@import "../features/shared/entry-share/index"; +@import "../features/shared/entry-tip-btn/index"; +@import "../features/shared/entry-vote-btn/index"; +@import "../features/shared/entry-votes/index"; +@import "../features/shared/feedback/index"; +@import "../features/shared/feedback/feedback-modal/index"; +@import "../features/shared/gallery/index"; +@import "../features/shared/key-or-hot/index"; +@import "../features/shared/linear-progress/index"; +@import "../features/shared/list-style-toggle/index"; +@import "../features/shared/login/index"; +@import "../features/shared/message-no-data/index"; +@import "../features/shared/mute-btn/index"; +@import "../features/shared/navbar/index"; +@import "../features/shared/navbar/navbar-notifications-button"; +@import "../features/shared/navbar/sidebar/navbar-side-theme-switcher"; +@import "../features/shared/notifications/index"; +@import "../features/shared/or-divider/index"; +@import "../features/shared/profile-popover/index"; +@import "../features/shared/promote/index"; +@import "../features/shared/schedules/index"; +@import "../features/shared/scroll-to-top/index"; +@import "../features/shared/search-box/index"; +@import "../features/shared/search-list-item/index"; +@import "../features/shared/skeleton/index"; +@import "../features/shared/suggestion-list/index"; +@import "../features/shared/switch-lang/index"; +@import "../features/shared/textarea-autocomplete/index"; +@import "../features/shared/transactions/index"; +@import "../features/shared/transfer/index"; +@import "../features/shared/two-user-avatar/index"; +@import "../features/shared/user-avatar/index"; +@import "../features/shared/video-upload-threespeak/index"; +@import "../features/ui/button-group/index"; +@import "../features/ui/emoji-picker/index"; +@import "../features/ui/gif-picker/index"; +@import "../features/ui/input/input-vote"; +@import "../features/waves/components/wave-actions"; +@import "../features/waves/components/wave-form/index"; diff --git a/apps/web/src/styles/style.scss b/apps/web/src/styles/style.scss index c174d2105e..e2901cedeb 100644 --- a/apps/web/src/styles/style.scss +++ b/apps/web/src/styles/style.scss @@ -17,6 +17,9 @@ @tailwind utilities; +// Component stylesheets, collapsed into this entry (issue #1632). +@import "./shared-components"; + @layer utilities { .no-scrollbar::-webkit-scrollbar { display: none;