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';