From 7c4ec71089c416efc5b9b03f05923ec75b3e85db Mon Sep 17 00:00:00 2001 From: reya Date: Mon, 11 Dec 2023 08:56:00 +0700 Subject: [PATCH] feat: add window titlebar --- package.json | 1 - pnpm-lock.yaml | 26 +--- src/shared/layouts/app.tsx | 4 +- src/shared/layouts/auth.tsx | 5 +- src/shared/layouts/new.tsx | 4 +- src/shared/layouts/note.tsx | 5 +- src/shared/layouts/settings.tsx | 4 +- src/shared/titlebar/components/button.tsx | 20 +++ src/shared/titlebar/components/icons.tsx | 140 ++++++++++++++++++ src/shared/titlebar/context.tsx | 113 ++++++++++++++ src/shared/titlebar/controls/gnome.tsx | 39 +++++ src/shared/titlebar/controls/macos.tsx | 74 +++++++++ src/shared/titlebar/controls/windows.tsx | 40 +++++ src/shared/titlebar/index.ts | 7 + src/shared/titlebar/titleBar.tsx | 29 ++++ src/shared/widgets/article.tsx | 3 +- src/shared/widgets/file.tsx | 3 +- src/shared/widgets/group.tsx | 3 +- src/shared/widgets/hashtag.tsx | 3 +- src/shared/widgets/index.ts | 2 + src/shared/widgets/newsfeed.tsx | 3 +- .../widgets/nostrBand/trendingAccounts.tsx | 6 +- .../widgets/nostrBand/trendingNotes.tsx | 3 +- src/shared/widgets/notification.tsx | 3 +- src/shared/widgets/other/widgetList.tsx | 3 +- src/shared/widgets/thread.tsx | 3 +- src/shared/{ => widgets}/titleBar.tsx | 0 src/shared/widgets/topic.tsx | 3 +- src/shared/widgets/user.tsx | 3 +- 29 files changed, 492 insertions(+), 60 deletions(-) create mode 100644 src/shared/titlebar/components/button.tsx create mode 100644 src/shared/titlebar/components/icons.tsx create mode 100644 src/shared/titlebar/context.tsx create mode 100644 src/shared/titlebar/controls/gnome.tsx create mode 100644 src/shared/titlebar/controls/macos.tsx create mode 100644 src/shared/titlebar/controls/windows.tsx create mode 100644 src/shared/titlebar/index.ts create mode 100644 src/shared/titlebar/titleBar.tsx rename src/shared/{ => widgets}/titleBar.tsx (100%) diff --git a/package.json b/package.json index 0f972e3f..bda59738 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,6 @@ "react-router-dom": "^6.20.1", "react-string-replace": "^1.1.1", "sonner": "^1.2.4", - "tauri-controls": "github:reyamir/tauri-controls", "tippy.js": "^6.3.7", "tiptap-markdown": "^0.8.8", "virtua": "^0.17.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd7f0b71..5c14908d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -194,9 +194,6 @@ dependencies: sonner: specifier: ^1.2.4 version: 1.2.4(react-dom@18.2.0)(react@18.2.0) - tauri-controls: - specifier: github:reyamir/tauri-controls - version: github.com/reyamir/tauri-controls/079b1262f9b75c84b97613174836101b01d61c37(@tauri-apps/api@2.0.0-alpha.11)(@tauri-apps/plugin-os@2.0.0-alpha.4)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0) tippy.js: specifier: ^6.3.7 version: 6.3.7 @@ -3135,6 +3132,7 @@ packages: /clsx@2.0.0: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} engines: {node: '>=6'} + dev: true /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -5689,6 +5687,7 @@ packages: /tailwind-merge@1.14.0: resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + dev: true /tailwind-scrollbar@3.0.5(tailwindcss@3.3.6): resolution: {integrity: sha512-0ZwxTivevqq9BY9fRP9zDjHl7Tu+J5giBGbln+0O1R/7nHtBUKnjQcA1aTIhK7Oyjp6Uc/Dj6/dn8Dq58k5Uww==} @@ -6214,24 +6213,3 @@ packages: react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false - - github.com/reyamir/tauri-controls/079b1262f9b75c84b97613174836101b01d61c37(@tauri-apps/api@2.0.0-alpha.11)(@tauri-apps/plugin-os@2.0.0-alpha.4)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0): - resolution: {tarball: https://codeload.github.com/reyamir/tauri-controls/tar.gz/079b1262f9b75c84b97613174836101b01d61c37} - id: github.com/reyamir/tauri-controls/079b1262f9b75c84b97613174836101b01d61c37 - name: tauri-controls - version: 0.3.0 - peerDependencies: - '@tauri-apps/api': ^2.0.0-alpha.11 - '@tauri-apps/plugin-os': ^2.0.0-alpha.3 - clsx: ^2.0.0 - react: ^18.2.0 - react-dom: ^18.2.0 - tailwind-merge: ^1.14.0 - dependencies: - '@tauri-apps/api': 2.0.0-alpha.11 - '@tauri-apps/plugin-os': 2.0.0-alpha.4 - clsx: 2.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tailwind-merge: 1.14.0 - dev: false diff --git a/src/shared/layouts/app.tsx b/src/shared/layouts/app.tsx index b98d09a4..62de62ae 100644 --- a/src/shared/layouts/app.tsx +++ b/src/shared/layouts/app.tsx @@ -1,10 +1,10 @@ import { Outlet, ScrollRestoration } from 'react-router-dom'; import { twMerge } from 'tailwind-merge'; -import { WindowTitlebar } from 'tauri-controls'; import { useArk } from '@libs/ark'; import { Navigation } from '@shared/navigation'; +import { WindowTitleBar } from '@shared/titlebar'; export function AppLayout() { const { ark } = useArk(); @@ -17,7 +17,7 @@ export function AppLayout() { )} > {ark.platform !== 'macos' ? ( - + ) : (
)} diff --git a/src/shared/layouts/auth.tsx b/src/shared/layouts/auth.tsx index 52629947..0724e345 100644 --- a/src/shared/layouts/auth.tsx +++ b/src/shared/layouts/auth.tsx @@ -1,15 +1,16 @@ import { Outlet, ScrollRestoration } from 'react-router-dom'; -import { WindowTitlebar } from 'tauri-controls'; import { useArk } from '@libs/ark'; +import { WindowTitleBar } from '@shared/titlebar'; + export function AuthLayout() { const { ark } = useArk(); return (
{ark.platform !== 'macos' ? ( - + ) : (
)} diff --git a/src/shared/layouts/new.tsx b/src/shared/layouts/new.tsx index d2b310b9..4a13a790 100644 --- a/src/shared/layouts/new.tsx +++ b/src/shared/layouts/new.tsx @@ -1,10 +1,10 @@ import { Link, NavLink, Outlet, useLocation } from 'react-router-dom'; import { twMerge } from 'tailwind-merge'; -import { WindowTitlebar } from 'tauri-controls'; import { useArk } from '@libs/ark'; import { ArrowLeftIcon } from '@shared/icons'; +import { WindowTitleBar } from '@shared/titlebar'; export function NewLayout() { const { ark } = useArk(); @@ -13,7 +13,7 @@ export function NewLayout() { return (
{ark.platform !== 'macos' ? ( - + ) : (
)} diff --git a/src/shared/layouts/note.tsx b/src/shared/layouts/note.tsx index c9eaea3e..5eb96e67 100644 --- a/src/shared/layouts/note.tsx +++ b/src/shared/layouts/note.tsx @@ -1,15 +1,16 @@ import { Outlet, ScrollRestoration } from 'react-router-dom'; -import { WindowTitlebar } from 'tauri-controls'; import { useArk } from '@libs/ark'; +import { WindowTitleBar } from '@shared/titlebar'; + export function NoteLayout() { const { ark } = useArk(); return (
{ark.platform !== 'macos' ? ( - + ) : (
)} diff --git a/src/shared/layouts/settings.tsx b/src/shared/layouts/settings.tsx index cbcbbdea..d9f88be5 100644 --- a/src/shared/layouts/settings.tsx +++ b/src/shared/layouts/settings.tsx @@ -1,6 +1,5 @@ import { NavLink, Outlet, ScrollRestoration, useNavigate } from 'react-router-dom'; import { twMerge } from 'tailwind-merge'; -import { WindowTitlebar } from 'tauri-controls'; import { useArk } from '@libs/ark'; @@ -12,6 +11,7 @@ import { SettingsIcon, UserIcon, } from '@shared/icons'; +import { WindowTitleBar } from '@shared/titlebar'; export function SettingsLayout() { const { ark } = useArk(); @@ -20,7 +20,7 @@ export function SettingsLayout() { return (
{ark.platform !== 'macos' ? ( - + ) : (
)} diff --git a/src/shared/titlebar/components/button.tsx b/src/shared/titlebar/components/button.tsx new file mode 100644 index 00000000..8157fc69 --- /dev/null +++ b/src/shared/titlebar/components/button.tsx @@ -0,0 +1,20 @@ +import type { ButtonHTMLAttributes } from 'react'; +import { twMerge } from 'tailwind-merge'; + +export function WindowButton({ + className, + children, + ...props +}: ButtonHTMLAttributes) { + return ( + + ); +} diff --git a/src/shared/titlebar/components/icons.tsx b/src/shared/titlebar/components/icons.tsx new file mode 100644 index 00000000..74425946 --- /dev/null +++ b/src/shared/titlebar/components/icons.tsx @@ -0,0 +1,140 @@ +import type { SVGProps } from 'react'; + +export const WindowIcons = { + minimizeWin: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + ), + maximizeWin: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + ), + maximizeRestoreWin: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + ), + closeWin: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + ), + closeMac: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + ), + minMac: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + + + ), + fullMac: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + + + ), + plusMac: (props: JSX.IntrinsicAttributes & SVGProps) => ( + + + + + + ), +}; diff --git a/src/shared/titlebar/context.tsx b/src/shared/titlebar/context.tsx new file mode 100644 index 00000000..522d1122 --- /dev/null +++ b/src/shared/titlebar/context.tsx @@ -0,0 +1,113 @@ +import { type Window, getCurrent } from '@tauri-apps/api/window'; +import { type } from '@tauri-apps/plugin-os'; +import React, { createContext, useCallback, useEffect, useState } from 'react'; + +interface AppWindowContextType { + appWindow: Window | null; + isWindowMaximized: boolean; + minimizeWindow: () => Promise; + maximizeWindow: () => Promise; + fullscreenWindow: () => Promise; + closeWindow: () => Promise; +} + +export const AppWindowContext = createContext({ + appWindow: null, + isWindowMaximized: false, + minimizeWindow: () => Promise.resolve(), + maximizeWindow: () => Promise.resolve(), + fullscreenWindow: () => Promise.resolve(), + closeWindow: () => Promise.resolve(), +}); + +interface AppWindowProviderProps { + children: React.ReactNode; +} + +export const AppWindowProvider: React.FC = ({ children }) => { + const [appWindow, setAppWindow] = useState(null); + const [isWindowMaximized, setIsWindowMaximized] = useState(false); + + useEffect(() => { + const window = getCurrent(); + setAppWindow(window); + }, []); + + const updateIsWindowMaximized = useCallback(async () => { + if (appWindow) { + const _isWindowMaximized = await appWindow.isMaximized(); + setIsWindowMaximized(_isWindowMaximized); + } + }, [appWindow]); + + useEffect(() => { + let unlisten: () => void = () => {}; + + async function getOsType() { + const osname = await type(); + + if (osname !== 'macos') { + updateIsWindowMaximized(); + + const listen = async () => { + if (appWindow) { + unlisten = await appWindow.onResized(() => { + updateIsWindowMaximized(); + }); + } + }; + + listen(); + } + } + + getOsType(); + + // Cleanup the listener when the component unmounts + return () => unlisten && unlisten(); + }, [appWindow, updateIsWindowMaximized]); + + const minimizeWindow = async () => { + if (appWindow) { + await appWindow.minimize(); + } + }; + + const maximizeWindow = async () => { + if (appWindow) { + await appWindow.toggleMaximize(); + } + }; + + const fullscreenWindow = async () => { + if (appWindow) { + const fullscreen = await appWindow.isFullscreen(); + if (fullscreen) { + await appWindow.setFullscreen(false); + } else { + await appWindow.setFullscreen(true); + } + } + }; + + const closeWindow = async () => { + if (appWindow) { + await appWindow.close(); + } + }; + + return ( + + {children} + + ); +}; diff --git a/src/shared/titlebar/controls/gnome.tsx b/src/shared/titlebar/controls/gnome.tsx new file mode 100644 index 00000000..b991514a --- /dev/null +++ b/src/shared/titlebar/controls/gnome.tsx @@ -0,0 +1,39 @@ +import { HTMLProps, useContext } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import { AppWindowContext, WindowButton, WindowIcons } from '@shared/titlebar'; + +export function Gnome({ className, ...props }: HTMLProps) { + const { isWindowMaximized, minimizeWindow, maximizeWindow, closeWindow } = + useContext(AppWindowContext); + + return ( +
+ + + + + {!isWindowMaximized ? ( + + ) : ( + + )} + + + + +
+ ); +} diff --git a/src/shared/titlebar/controls/macos.tsx b/src/shared/titlebar/controls/macos.tsx new file mode 100644 index 00000000..933f45af --- /dev/null +++ b/src/shared/titlebar/controls/macos.tsx @@ -0,0 +1,74 @@ +import { HTMLProps, useContext, useEffect, useState } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import { AppWindowContext, WindowButton, WindowIcons } from '@shared/titlebar'; + +export function MacOS({ className, ...props }: HTMLProps) { + const { minimizeWindow, maximizeWindow, fullscreenWindow, closeWindow } = + useContext(AppWindowContext); + + const [isAltKeyPressed, setIsAltKeyPressed] = useState(false); + const [isHovering, setIsHovering] = useState(false); + + const last = isAltKeyPressed ? : ; + const key = 'Alt'; + + const handleMouseEnter = () => { + setIsHovering(true); + }; + + const handleMouseLeave = () => { + setIsHovering(false); + }; + + const handleAltKeyDown = (e: KeyboardEvent) => { + if (e.key === key) { + setIsAltKeyPressed(true); + } + }; + + const handleAltKeyUp = (e: KeyboardEvent) => { + if (e.key === key) { + setIsAltKeyPressed(false); + } + }; + + useEffect(() => { + // Attach event listeners when the component mounts + window.addEventListener('keydown', handleAltKeyDown); + window.addEventListener('keyup', handleAltKeyUp); + }, []); + + return ( +
+ + {isHovering && } + + + {isHovering && } + + + {isHovering && last} + +
+ ); +} diff --git a/src/shared/titlebar/controls/windows.tsx b/src/shared/titlebar/controls/windows.tsx new file mode 100644 index 00000000..5d004f0d --- /dev/null +++ b/src/shared/titlebar/controls/windows.tsx @@ -0,0 +1,40 @@ +import { HTMLProps, useContext } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import { AppWindowContext, WindowButton, WindowIcons } from '@shared/titlebar'; + +export function Windows({ className, ...props }: HTMLProps) { + const { isWindowMaximized, minimizeWindow, maximizeWindow, closeWindow } = + useContext(AppWindowContext); + + return ( +
+ + + + + {!isWindowMaximized ? ( + + ) : ( + + )} + + + + +
+ ); +} diff --git a/src/shared/titlebar/index.ts b/src/shared/titlebar/index.ts new file mode 100644 index 00000000..eaa6880b --- /dev/null +++ b/src/shared/titlebar/index.ts @@ -0,0 +1,7 @@ +export * from './context'; +export * from './components/button'; +export * from './components/icons'; +export * from './controls/gnome'; +export * from './controls/windows'; +export * from './controls/macos'; +export * from './titleBar'; diff --git a/src/shared/titlebar/titleBar.tsx b/src/shared/titlebar/titleBar.tsx new file mode 100644 index 00000000..6af6be53 --- /dev/null +++ b/src/shared/titlebar/titleBar.tsx @@ -0,0 +1,29 @@ +import { Platform } from '@tauri-apps/plugin-os'; + +import { AppWindowProvider, Gnome, MacOS, Windows } from '@shared/titlebar'; + +export function WindowTitleBar({ platform }: { platform: Platform }) { + const ControlsComponent = () => { + switch (platform) { + case 'windows': + return ; + case 'macos': + return ; + case 'linux': + return ; + default: + return ; + } + }; + + return ( + +
+ +
+
+ ); +} diff --git a/src/shared/widgets/article.tsx b/src/shared/widgets/article.tsx index 7c90092b..6132291c 100644 --- a/src/shared/widgets/article.tsx +++ b/src/shared/widgets/article.tsx @@ -8,8 +8,7 @@ import { useArk } from '@libs/ark'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; import { MemoizedArticleNote } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/file.tsx b/src/shared/widgets/file.tsx index d1f95604..aa5d48d9 100644 --- a/src/shared/widgets/file.tsx +++ b/src/shared/widgets/file.tsx @@ -7,8 +7,7 @@ import { useArk } from '@libs/ark'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; import { MemoizedFileNote } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/group.tsx b/src/shared/widgets/group.tsx index dd9aeaec..e2975643 100644 --- a/src/shared/widgets/group.tsx +++ b/src/shared/widgets/group.tsx @@ -12,8 +12,7 @@ import { NoteSkeleton, UnknownNote, } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/hashtag.tsx b/src/shared/widgets/hashtag.tsx index 567f39f5..f4245595 100644 --- a/src/shared/widgets/hashtag.tsx +++ b/src/shared/widgets/hashtag.tsx @@ -7,8 +7,7 @@ import { useArk } from '@libs/ark'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; import { MemoizedRepost, MemoizedTextNote, UnknownNote } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/index.ts b/src/shared/widgets/index.ts index 721da81a..a8d76f09 100644 --- a/src/shared/widgets/index.ts +++ b/src/shared/widgets/index.ts @@ -16,3 +16,5 @@ export * from './other/widgetList'; export * from './other/addGroupFeeds'; export * from './other/addHashtagFeeds'; export * from './other/userProfile'; +export * from './titleBar'; +export * from './other/nostrBandUserProfile'; diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx index d87f83c3..53e67d9c 100644 --- a/src/shared/widgets/newsfeed.tsx +++ b/src/shared/widgets/newsfeed.tsx @@ -12,8 +12,7 @@ import { NoteSkeleton, UnknownNote, } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { LiveUpdater, WidgetWrapper } from '@shared/widgets'; +import { LiveUpdater, TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; diff --git a/src/shared/widgets/nostrBand/trendingAccounts.tsx b/src/shared/widgets/nostrBand/trendingAccounts.tsx index 87cc8379..93e39278 100644 --- a/src/shared/widgets/nostrBand/trendingAccounts.tsx +++ b/src/shared/widgets/nostrBand/trendingAccounts.tsx @@ -2,12 +2,12 @@ import { useQuery } from '@tanstack/react-query'; import { VList } from 'virtua'; import { LoaderIcon } from '@shared/icons'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; import { NostrBandUserProfile, type Profile, -} from '@shared/widgets/other/nostrBandUserProfile'; + TitleBar, + WidgetWrapper, +} from '@shared/widgets'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/nostrBand/trendingNotes.tsx b/src/shared/widgets/nostrBand/trendingNotes.tsx index 302d4220..8d171aba 100644 --- a/src/shared/widgets/nostrBand/trendingNotes.tsx +++ b/src/shared/widgets/nostrBand/trendingNotes.tsx @@ -4,8 +4,7 @@ import { VList } from 'virtua'; import { LoaderIcon } from '@shared/icons'; import { MemoizedTextNote } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/notification.tsx b/src/shared/widgets/notification.tsx index d5fcbf46..60957b0a 100644 --- a/src/shared/widgets/notification.tsx +++ b/src/shared/widgets/notification.tsx @@ -7,8 +7,7 @@ import { useArk } from '@libs/ark'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; import { MemoizedNotifyNote, NoteSkeleton } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { sendNativeNotification } from '@utils/notification'; diff --git a/src/shared/widgets/other/widgetList.tsx b/src/shared/widgets/other/widgetList.tsx index 04b25b3b..1cce9aa4 100644 --- a/src/shared/widgets/other/widgetList.tsx +++ b/src/shared/widgets/other/widgetList.tsx @@ -1,6 +1,5 @@ import { ArticleIcon, MediaIcon, PlusIcon } from '@shared/icons'; -import { TitleBar } from '@shared/titleBar'; -import { AddGroupFeeds, AddHashtagFeeds, WidgetWrapper } from '@shared/widgets'; +import { AddGroupFeeds, AddHashtagFeeds, TitleBar, WidgetWrapper } from '@shared/widgets'; import { TOPICS, WIDGET_KIND } from '@utils/constants'; import { useWidget } from '@utils/hooks/useWidget'; diff --git a/src/shared/widgets/thread.tsx b/src/shared/widgets/thread.tsx index 3f846655..855f3c40 100644 --- a/src/shared/widgets/thread.tsx +++ b/src/shared/widgets/thread.tsx @@ -14,9 +14,8 @@ import { NoteReplyForm, } from '@shared/notes'; import { ReplyList } from '@shared/notes/replies/list'; -import { TitleBar } from '@shared/titleBar'; import { User } from '@shared/user'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { useEvent } from '@utils/hooks/useEvent'; import { Widget } from '@utils/types'; diff --git a/src/shared/titleBar.tsx b/src/shared/widgets/titleBar.tsx similarity index 100% rename from src/shared/titleBar.tsx rename to src/shared/widgets/titleBar.tsx diff --git a/src/shared/widgets/topic.tsx b/src/shared/widgets/topic.tsx index a48b7aac..589d8cc9 100644 --- a/src/shared/widgets/topic.tsx +++ b/src/shared/widgets/topic.tsx @@ -12,8 +12,7 @@ import { NoteSkeleton, UnknownNote, } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { WidgetWrapper } from '@shared/widgets'; +import { TitleBar, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types'; diff --git a/src/shared/widgets/user.tsx b/src/shared/widgets/user.tsx index a5d836b4..2cf2a99b 100644 --- a/src/shared/widgets/user.tsx +++ b/src/shared/widgets/user.tsx @@ -12,8 +12,7 @@ import { NoteSkeleton, UnknownNote, } from '@shared/notes'; -import { TitleBar } from '@shared/titleBar'; -import { UserProfile, WidgetWrapper } from '@shared/widgets'; +import { TitleBar, UserProfile, WidgetWrapper } from '@shared/widgets'; import { FETCH_LIMIT } from '@utils/constants'; import { Widget } from '@utils/types';