From 2dbf92f7f1b34b2a09f8c67580f0fb47f3c36ade Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:55:28 +0200 Subject: [PATCH] perf: reduce bundle size by 21% with direct icon imports (#3844) --- web/src/components/AppearanceSelect.tsx | 8 ++--- .../components/ChangeMemberPasswordDialog.tsx | 4 +-- web/src/components/ChangePasswordDialog.tsx | 4 +-- .../components/CreateAccessTokenDialog.tsx | 4 +-- .../CreateIdentityProviderDialog.tsx | 4 +-- web/src/components/CreateWebhookDialog.tsx | 4 +-- web/src/components/Empty.tsx | 4 +-- .../ExploreSidebar/ExploreSidebarDrawer.tsx | 4 +-- .../HomeSidebar/HomeSidebarDrawer.tsx | 4 +-- .../components/HomeSidebar/TagsSection.tsx | 14 ++++---- web/src/components/Icon.tsx | 3 -- .../components/Inbox/MemoCommentMessage.tsx | 9 ++---- .../components/Inbox/VersionUpdateMessage.tsx | 9 ++---- web/src/components/LearnMore.tsx | 4 +-- web/src/components/LocaleSelect.tsx | 4 +-- web/src/components/MemoActionMenu.tsx | 23 +++++++++---- web/src/components/MemoContent/CodeBlock.tsx | 4 +-- .../EmbeddedContent/EmbeddedMemo.tsx | 4 +-- .../MemoDetailSidebar/MemoDetailSidebar.tsx | 10 +++--- .../MemoDetailSidebarDrawer.tsx | 4 +-- web/src/components/MemoDisplaySettingMenu.tsx | 4 +-- .../ActionButton/AddMemoRelationPopover.tsx | 4 +-- .../MemoEditor/ActionButton/MarkdownMenu.tsx | 8 ++--- .../MemoEditor/ActionButton/TagSelector.tsx | 4 +-- .../ActionButton/UploadResourceButton.tsx | 4 +-- .../MemoEditor/RelationListView.tsx | 6 ++-- .../MemoEditor/ResourceListView.tsx | 4 +-- web/src/components/MemoEditor/index.tsx | 4 +-- web/src/components/MemoFilters.tsx | 20 ++++++------ web/src/components/MemoRelationListView.tsx | 10 +++--- web/src/components/MemoView.tsx | 6 ++-- web/src/components/Navigation.tsx | 20 ++++++------ web/src/components/NavigationDrawer.tsx | 4 +-- web/src/components/PreviewImageDialog.tsx | 4 +-- web/src/components/ReactionSelector.tsx | 4 +-- web/src/components/RenameTagDialog.tsx | 4 +-- web/src/components/ResourceIcon.tsx | 32 ++++++++++++------- web/src/components/SearchBar.tsx | 4 +-- .../Settings/AccessTokenSection.tsx | 6 ++-- web/src/components/Settings/MemberSection.tsx | 4 +-- .../components/Settings/MyAccountSection.tsx | 6 ++-- web/src/components/Settings/SSOSection.tsx | 4 +-- .../components/Settings/StorageSection.tsx | 4 +-- .../components/Settings/WebhookSection.tsx | 6 ++-- .../components/Settings/WorkspaceSection.tsx | 4 +-- web/src/components/TagTree.tsx | 6 ++-- web/src/components/UpdateAccountDialog.tsx | 6 ++-- .../UpdateCustomizedProfileDialog.tsx | 4 +-- web/src/components/UserBanner.tsx | 6 ++-- web/src/components/UserStatisticsView.tsx | 18 ++++------- web/src/components/VisibilityIcon.tsx | 8 ++--- web/src/layouts/RootLayout.tsx | 6 ++-- web/src/pages/About.tsx | 8 ++--- web/src/pages/Archived.tsx | 10 +++--- web/src/pages/AuthCallback.tsx | 4 +-- web/src/pages/Explore.tsx | 4 +-- web/src/pages/Home.tsx | 4 +-- web/src/pages/Inboxes.tsx | 4 +-- web/src/pages/Loading.tsx | 4 +-- web/src/pages/MemoDetail.tsx | 8 ++--- web/src/pages/Resources.tsx | 8 ++--- web/src/pages/Setting.tsx | 17 +++++----- web/src/pages/UserProfile.tsx | 6 ++-- 63 files changed, 222 insertions(+), 217 deletions(-) delete mode 100644 web/src/components/Icon.tsx diff --git a/web/src/components/AppearanceSelect.tsx b/web/src/components/AppearanceSelect.tsx index 521b40841..6fc0296e5 100644 --- a/web/src/components/AppearanceSelect.tsx +++ b/web/src/components/AppearanceSelect.tsx @@ -1,7 +1,7 @@ import { Option, Select } from "@mui/joy"; +import { SunIcon, MoonIcon, SmileIcon } from "lucide-react"; import { FC } from "react"; import { useTranslate } from "@/utils/i18n"; -import Icon from "./Icon"; interface Props { value: Appearance; @@ -18,11 +18,11 @@ const AppearanceSelect: FC = (props: Props) => { const getPrefixIcon = (appearance: Appearance) => { const className = "w-4 h-auto"; if (appearance === "light") { - return ; + return ; } else if (appearance === "dark") { - return ; + return ; } else { - return ; + return ; } }; diff --git a/web/src/components/ChangeMemberPasswordDialog.tsx b/web/src/components/ChangeMemberPasswordDialog.tsx index 585d4b1ba..c90418a6e 100644 --- a/web/src/components/ChangeMemberPasswordDialog.tsx +++ b/web/src/components/ChangeMemberPasswordDialog.tsx @@ -1,11 +1,11 @@ import { Button, IconButton, Input } from "@mui/joy"; +import { XIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { useUserStore } from "@/store/v1"; import { User } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; interface Props extends DialogProps { user: User; @@ -71,7 +71,7 @@ const ChangeMemberPasswordDialog: React.FC = (props: Props) => { {t("setting.account-section.change-password")} ({user.nickname})

- +
diff --git a/web/src/components/ChangePasswordDialog.tsx b/web/src/components/ChangePasswordDialog.tsx index 41372c179..1ad65d078 100644 --- a/web/src/components/ChangePasswordDialog.tsx +++ b/web/src/components/ChangePasswordDialog.tsx @@ -1,4 +1,5 @@ import { Button, IconButton, Input } from "@mui/joy"; +import { XIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import useCurrentUser from "@/hooks/useCurrentUser"; @@ -6,7 +7,6 @@ import { useCommonContext } from "@/layouts/CommonContextProvider"; import { useUserStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; type Props = DialogProps; @@ -70,7 +70,7 @@ const ChangePasswordDialog: React.FC = ({ destroy }: Props) => {

{t("setting.account-section.change-password")}

- +
diff --git a/web/src/components/CreateAccessTokenDialog.tsx b/web/src/components/CreateAccessTokenDialog.tsx index 5be23f7e5..e66b4a305 100644 --- a/web/src/components/CreateAccessTokenDialog.tsx +++ b/web/src/components/CreateAccessTokenDialog.tsx @@ -1,4 +1,5 @@ import { Button, IconButton, Input, Radio, RadioGroup } from "@mui/joy"; +import { XIcon } from "lucide-react"; import React, { useState } from "react"; import { toast } from "react-hot-toast"; import { userServiceClient } from "@/grpcweb"; @@ -6,7 +7,6 @@ import useCurrentUser from "@/hooks/useCurrentUser"; import useLoading from "@/hooks/useLoading"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; interface Props extends DialogProps { onConfirm: () => void; @@ -87,7 +87,7 @@ const CreateAccessTokenDialog: React.FC = (props: Props) => {

Create access token

destroy()}> - +
diff --git a/web/src/components/CreateIdentityProviderDialog.tsx b/web/src/components/CreateIdentityProviderDialog.tsx index f119820af..439d59b6c 100644 --- a/web/src/components/CreateIdentityProviderDialog.tsx +++ b/web/src/components/CreateIdentityProviderDialog.tsx @@ -1,4 +1,5 @@ import { Button, Divider, IconButton, Input, Option, Select, Typography } from "@mui/joy"; +import { XIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { identityProviderServiceClient } from "@/grpcweb"; @@ -6,7 +7,6 @@ import { absolutifyLink } from "@/helpers/utils"; import { FieldMapping, IdentityProvider, IdentityProvider_Type, OAuth2Config } from "@/types/proto/api/v1/idp_service"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; const templateList: IdentityProvider[] = [ { @@ -245,7 +245,7 @@ const CreateIdentityProviderDialog: React.FC = (props: Props) => {

{t(isCreating ? "setting.sso-section.create-sso" : "setting.sso-section.update-sso")}

- +
diff --git a/web/src/components/CreateWebhookDialog.tsx b/web/src/components/CreateWebhookDialog.tsx index 8394aaf8a..57d6591ca 100644 --- a/web/src/components/CreateWebhookDialog.tsx +++ b/web/src/components/CreateWebhookDialog.tsx @@ -1,11 +1,11 @@ import { Button, IconButton, Input } from "@mui/joy"; +import { XIcon } from "lucide-react"; import React, { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { webhookServiceClient } from "@/grpcweb"; import useLoading from "@/hooks/useLoading"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; interface Props extends DialogProps { webhookId?: number; @@ -97,7 +97,7 @@ const CreateWebhookDialog: React.FC = (props: Props) => {

{isCreating ? "Create webhook" : "Edit webhook"}

destroy()}> - +
diff --git a/web/src/components/Empty.tsx b/web/src/components/Empty.tsx index 7170433fd..a4ba6bd31 100644 --- a/web/src/components/Empty.tsx +++ b/web/src/components/Empty.tsx @@ -1,9 +1,9 @@ -import Icon from "./Icon"; +import { BirdIcon } from "lucide-react"; const Empty = () => { return (
- +
); }; diff --git a/web/src/components/ExploreSidebar/ExploreSidebarDrawer.tsx b/web/src/components/ExploreSidebar/ExploreSidebarDrawer.tsx index 67cc7fce8..b80ac6c10 100644 --- a/web/src/components/ExploreSidebar/ExploreSidebarDrawer.tsx +++ b/web/src/components/ExploreSidebar/ExploreSidebarDrawer.tsx @@ -1,7 +1,7 @@ import { Drawer, IconButton } from "@mui/joy"; +import { SearchIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useLocation } from "react-router-dom"; -import Icon from "../Icon"; import ExploreSidebar from "./ExploreSidebar"; const ExploreSidebarDrawer = () => { @@ -23,7 +23,7 @@ const ExploreSidebarDrawer = () => { return ( <> - +
diff --git a/web/src/components/HomeSidebar/HomeSidebarDrawer.tsx b/web/src/components/HomeSidebar/HomeSidebarDrawer.tsx index aa21d986f..21bf1ed4f 100644 --- a/web/src/components/HomeSidebar/HomeSidebarDrawer.tsx +++ b/web/src/components/HomeSidebar/HomeSidebarDrawer.tsx @@ -1,7 +1,7 @@ import { Drawer, IconButton } from "@mui/joy"; +import { SearchIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useLocation } from "react-router-dom"; -import Icon from "../Icon"; import HomeSidebar from "./HomeSidebar"; const HomeSidebarDrawer = () => { @@ -23,7 +23,7 @@ const HomeSidebarDrawer = () => { return ( <> - +
diff --git a/web/src/components/HomeSidebar/TagsSection.tsx b/web/src/components/HomeSidebar/TagsSection.tsx index 8411de151..66b278e61 100644 --- a/web/src/components/HomeSidebar/TagsSection.tsx +++ b/web/src/components/HomeSidebar/TagsSection.tsx @@ -1,5 +1,6 @@ import { Dropdown, Menu, MenuButton, MenuItem, Switch } from "@mui/joy"; import clsx from "clsx"; +import { Edit3Icon, HashIcon, MoreVerticalIcon, TagsIcon, TrashIcon } from "lucide-react"; import toast from "react-hot-toast"; import { useLocation } from "react-router-dom"; import useDebounce from "react-use/lib/useDebounce"; @@ -8,7 +9,6 @@ import { memoServiceClient } from "@/grpcweb"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useMemoFilterStore, useMemoList, useTagStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; -import Icon from "../Icon"; import showRenameTagDialog from "../RenameTagDialog"; import TagTree from "../TagTree"; import { Popover, PopoverContent, PopoverTrigger } from "../ui/Popover"; @@ -66,7 +66,7 @@ const TagsSection = (props: Props) => { {tagAmounts.length > 0 && ( - +
@@ -90,17 +90,17 @@ const TagsSection = (props: Props) => {
- - + +
showRenameTagDialog({ tag: tag })}> - + {t("common.rename")} handleDeleteTag(tag)}> - + {t("common.delete")} @@ -119,7 +119,7 @@ const TagsSection = (props: Props) => { ) : ( !props.readonly && (
- +

{t("tag.create-tags-guide")}

) diff --git a/web/src/components/Icon.tsx b/web/src/components/Icon.tsx deleted file mode 100644 index 56882fef4..000000000 --- a/web/src/components/Icon.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import * as Icon from "lucide-react"; - -export default Icon; diff --git a/web/src/components/Inbox/MemoCommentMessage.tsx b/web/src/components/Inbox/MemoCommentMessage.tsx index f2946e35f..0f16cb10f 100644 --- a/web/src/components/Inbox/MemoCommentMessage.tsx +++ b/web/src/components/Inbox/MemoCommentMessage.tsx @@ -1,5 +1,6 @@ import { Tooltip } from "@mui/joy"; import clsx from "clsx"; +import { InboxIcon, MessageCircleIcon } from "lucide-react"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { activityServiceClient } from "@/grpcweb"; @@ -9,7 +10,6 @@ import { Inbox, Inbox_Status } from "@/types/proto/api/v1/inbox_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { User } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; -import Icon from "../Icon"; interface Props { inbox: Inbox; @@ -81,7 +81,7 @@ const MemoCommentMessage = ({ inbox }: Props) => { )} > - +
{
{inbox.status === Inbox_Status.UNREAD && ( - handleArchiveMessage()} - /> + handleArchiveMessage()} /> )}
diff --git a/web/src/components/Inbox/VersionUpdateMessage.tsx b/web/src/components/Inbox/VersionUpdateMessage.tsx index c3fcbbd2a..62b8781c0 100644 --- a/web/src/components/Inbox/VersionUpdateMessage.tsx +++ b/web/src/components/Inbox/VersionUpdateMessage.tsx @@ -1,5 +1,6 @@ import { Tooltip } from "@mui/joy"; import clsx from "clsx"; +import { ArrowUpIcon, InboxIcon } from "lucide-react"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { activityServiceClient } from "@/grpcweb"; @@ -7,7 +8,6 @@ import { activityNamePrefix, useInboxStore } from "@/store/v1"; import { Activity } from "@/types/proto/api/v1/activity_service"; import { Inbox, Inbox_Status } from "@/types/proto/api/v1/inbox_service"; import { useTranslate } from "@/utils/i18n"; -import Icon from "../Icon"; interface Props { inbox: Inbox; @@ -66,7 +66,7 @@ const VersionUpdateMessage = ({ inbox }: Props) => { )} > - +
{
{inbox.status === Inbox_Status.UNREAD && ( - handleArchiveMessage()} - /> + handleArchiveMessage()} /> )}
diff --git a/web/src/components/LearnMore.tsx b/web/src/components/LearnMore.tsx index f067cd877..3259b1a0f 100644 --- a/web/src/components/LearnMore.tsx +++ b/web/src/components/LearnMore.tsx @@ -1,6 +1,6 @@ import { Tooltip } from "@mui/joy"; +import { ExternalLinkIcon } from "lucide-react"; import { useTranslate } from "@/utils/i18n"; -import Icon from "./Icon"; interface Props { className?: string; @@ -15,7 +15,7 @@ const LearnMore: React.FC = (props: Props) => { return ( - + ); diff --git a/web/src/components/LocaleSelect.tsx b/web/src/components/LocaleSelect.tsx index bf760a669..5662c043a 100644 --- a/web/src/components/LocaleSelect.tsx +++ b/web/src/components/LocaleSelect.tsx @@ -1,7 +1,7 @@ import { Option, Select } from "@mui/joy"; +import { GlobeIcon } from "lucide-react"; import { FC } from "react"; import { locales } from "@/i18n"; -import Icon from "./Icon"; interface Props { value: Locale; @@ -19,7 +19,7 @@ const LocaleSelect: FC = (props: Props) => { return ( { className="w-auto max-w-xs overflow-hidden flex flex-row justify-start items-center bg-zinc-100 dark:bg-zinc-900 hover:opacity-80 rounded-md text-sm p-1 px-2 text-gray-500 dark:text-gray-400 cursor-pointer hover:line-through" onClick={() => handleDeleteRelation(memo)} > - + {memo.snippet} - +
); })} diff --git a/web/src/components/MemoEditor/ResourceListView.tsx b/web/src/components/MemoEditor/ResourceListView.tsx index 12701eba0..b8661abcb 100644 --- a/web/src/components/MemoEditor/ResourceListView.tsx +++ b/web/src/components/MemoEditor/ResourceListView.tsx @@ -1,7 +1,7 @@ import { DndContext, closestCenter, MouseSensor, TouchSensor, useSensor, useSensors, DragEndEvent } from "@dnd-kit/core"; import { arrayMove, SortableContext, verticalListSortingStrategy } from "@dnd-kit/sortable"; +import { XIcon } from "lucide-react"; import { Resource } from "@/types/proto/api/v1/resource_service"; -import Icon from "../Icon"; import ResourceIcon from "../ResourceIcon"; import SortableItem from "./SortableItem"; @@ -45,7 +45,7 @@ const ResourceListView = (props: Props) => { {resource.filename}
); diff --git a/web/src/components/MemoEditor/index.tsx b/web/src/components/MemoEditor/index.tsx index a3f3086de..22007a33b 100644 --- a/web/src/components/MemoEditor/index.tsx +++ b/web/src/components/MemoEditor/index.tsx @@ -1,5 +1,6 @@ import { Select, Option, Button, Divider } from "@mui/joy"; import { isEqual } from "lodash-es"; +import { SendIcon } from "lucide-react"; import React, { useEffect, useMemo, useRef, useState } from "react"; import { toast } from "react-hot-toast"; import { useTranslation } from "react-i18next"; @@ -18,7 +19,6 @@ import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_sett import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; import { convertVisibilityFromString, convertVisibilityToString } from "@/utils/memo"; -import Icon from "../Icon"; import VisibilityIcon from "../VisibilityIcon"; import AddMemoRelationPopover from "./ActionButton/AddMemoRelationPopover"; import MarkdownMenu from "./ActionButton/MarkdownMenu"; @@ -473,7 +473,7 @@ const MemoEditor = (props: Props) => { className="!font-normal" disabled={!allowSave} loading={state.isRequesting} - endDecorator={} + endDecorator={} onClick={handleSaveBtnClick} > {t("editor.save")} diff --git a/web/src/components/MemoFilters.tsx b/web/src/components/MemoFilters.tsx index 70fd6f391..9fc7ed251 100644 --- a/web/src/components/MemoFilters.tsx +++ b/web/src/components/MemoFilters.tsx @@ -1,6 +1,6 @@ import { isEqual } from "lodash-es"; +import { CalendarIcon, CheckCircleIcon, CodeIcon, EyeIcon, FilterIcon, LinkIcon, SearchIcon, TagIcon, XIcon } from "lucide-react"; import { FilterFactor, getMemoFilterKey, MemoFilter, useMemoFilterStore } from "@/store/v1"; -import Icon from "./Icon"; const MemoFilters = () => { const memoFilterStore = useMemoFilterStore(); @@ -23,7 +23,7 @@ const MemoFilters = () => { return (
- + Filters
@@ -36,7 +36,7 @@ const MemoFilters = () => { {getFilterDisplayText(filter)}
))} @@ -47,13 +47,13 @@ const MemoFilters = () => { const FactorIcon = ({ factor, className }: { factor: FilterFactor; className?: string }) => { const iconMap = { - tagSearch: , - visibility: , - contentSearch: , - displayTime: , - "property.hasLink": , - "property.hasTaskList": , - "property.hasCode": , + tagSearch: , + visibility: , + contentSearch: , + displayTime: , + "property.hasLink": , + "property.hasTaskList": , + "property.hasCode": , }; return iconMap[factor as keyof typeof iconMap] || <>; }; diff --git a/web/src/components/MemoRelationListView.tsx b/web/src/components/MemoRelationListView.tsx index 587d02802..c59e2ea39 100644 --- a/web/src/components/MemoRelationListView.tsx +++ b/web/src/components/MemoRelationListView.tsx @@ -1,11 +1,11 @@ import clsx from "clsx"; +import { DotIcon, LinkIcon, MilestoneIcon } from "lucide-react"; import { memo, useState } from "react"; import { Link } from "react-router-dom"; import useAsyncEffect from "@/hooks/useAsyncEffect"; import { useMemoStore } from "@/store/v1"; import { MemoRelation } from "@/types/proto/api/v1/memo_relation_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; -import Icon from "./Icon"; interface Props { memo: Memo; @@ -54,7 +54,7 @@ const MemoRelationListView = (props: Props) => { )} onClick={() => setSelectedTab("referencing")} > - + Referencing ({referencingMemoList.length}) @@ -67,7 +67,7 @@ const MemoRelationListView = (props: Props) => { )} onClick={() => setSelectedTab("referenced")} > - + Referenced by ({referencedMemoList.length}) @@ -83,7 +83,7 @@ const MemoRelationListView = (props: Props) => { to={`/m/${memo.uid}`} unstable_viewTransition > - + {memo.snippet} ); @@ -100,7 +100,7 @@ const MemoRelationListView = (props: Props) => { to={`/m/${memo.uid}`} unstable_viewTransition > - + {memo.snippet} ); diff --git a/web/src/components/MemoView.tsx b/web/src/components/MemoView.tsx index 68f4ea3e2..a81576fa5 100644 --- a/web/src/components/MemoView.tsx +++ b/web/src/components/MemoView.tsx @@ -1,5 +1,6 @@ import { Tooltip } from "@mui/joy"; import clsx from "clsx"; +import { BookmarkIcon, MessageCircleMoreIcon } from "lucide-react"; import { memo, useCallback, useEffect, useRef, useState } from "react"; import { Link, useLocation } from "react-router-dom"; import useCurrentUser from "@/hooks/useCurrentUser"; @@ -11,7 +12,6 @@ import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_sett import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; import { convertVisibilityToString } from "@/utils/memo"; -import Icon from "./Icon"; import MemoActionMenu from "./MemoActionMenu"; import MemoContent from "./MemoContent"; import MemoEditor from "./MemoEditor"; @@ -169,13 +169,13 @@ const MemoView: React.FC = (props: Props) => { to={`/m/${memo.uid}#comments`} unstable_viewTransition > - + {commentAmount > 0 && {commentAmount}} )} {props.showPinned && memo.pinned && ( - + )} {!readonly && ( diff --git a/web/src/components/Navigation.tsx b/web/src/components/Navigation.tsx index de6809b8d..f1f1e573e 100644 --- a/web/src/components/Navigation.tsx +++ b/web/src/components/Navigation.tsx @@ -1,5 +1,6 @@ import { Tooltip } from "@mui/joy"; import clsx from "clsx"; +import { ArchiveIcon, BellIcon, Globe2Icon, HomeIcon, LogInIcon, PaperclipIcon, SettingsIcon, SmileIcon, User2Icon } from "lucide-react"; import { useEffect } from "react"; import { NavLink } from "react-router-dom"; import useCurrentUser from "@/hooks/useCurrentUser"; @@ -7,7 +8,6 @@ import { Routes } from "@/router"; import { useInboxStore } from "@/store/v1"; import { Inbox_Status } from "@/types/proto/api/v1/inbox_service"; import { useTranslate } from "@/utils/i18n"; -import Icon from "./Icon"; import UserBanner from "./UserBanner"; interface NavLinkItem { @@ -52,25 +52,25 @@ const Navigation = (props: Props) => { id: "header-home", path: Routes.ROOT, title: t("common.home"), - icon: , + icon: , }; const resourcesNavLink: NavLinkItem = { id: "header-resources", path: Routes.RESOURCES, title: t("common.resources"), - icon: , + icon: , }; const exploreNavLink: NavLinkItem = { id: "header-explore", path: Routes.EXPLORE, title: t("common.explore"), - icon: , + icon: , }; const profileNavLink: NavLinkItem = { id: "header-profile", path: user ? `/u/${encodeURIComponent(user.username)}` : "", title: t("common.profile"), - icon: , + icon: , }; const inboxNavLink: NavLinkItem = { id: "header-inbox", @@ -79,7 +79,7 @@ const Navigation = (props: Props) => { icon: ( <>
- + {hasUnreadInbox &&
}
@@ -89,25 +89,25 @@ const Navigation = (props: Props) => { id: "header-archived", path: Routes.ARCHIVED, title: t("common.archived"), - icon: , + icon: , }; const settingNavLink: NavLinkItem = { id: "header-setting", path: Routes.SETTING, title: t("common.settings"), - icon: , + icon: , }; const signInNavLink: NavLinkItem = { id: "header-auth", path: Routes.AUTH, title: t("common.sign-in"), - icon: , + icon: , }; const aboutNavLink: NavLinkItem = { id: "header-about", path: Routes.ABOUT, title: t("common.about"), - icon: , + icon: , }; const navLinks: NavLinkItem[] = user diff --git a/web/src/components/NavigationDrawer.tsx b/web/src/components/NavigationDrawer.tsx index 2bc3f9e1c..efc28c8d6 100644 --- a/web/src/components/NavigationDrawer.tsx +++ b/web/src/components/NavigationDrawer.tsx @@ -1,7 +1,7 @@ import { Drawer, IconButton } from "@mui/joy"; +import { MenuIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useLocation } from "react-router-dom"; -import Icon from "./Icon"; import Navigation from "./Navigation"; const NavigationDrawer = () => { @@ -23,7 +23,7 @@ const NavigationDrawer = () => { return ( <> - +
diff --git a/web/src/components/PreviewImageDialog.tsx b/web/src/components/PreviewImageDialog.tsx index 6f3f91df4..705bfc4f2 100644 --- a/web/src/components/PreviewImageDialog.tsx +++ b/web/src/components/PreviewImageDialog.tsx @@ -1,6 +1,6 @@ +import { XIcon } from "lucide-react"; import React, { useState } from "react"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; import "@/less/preview-image-dialog.less"; const MIN_SCALE = 0.5; @@ -116,7 +116,7 @@ const PreviewImageDialog: React.FC = ({ destroy, imgUrls, initialIndex }: <>
diff --git a/web/src/components/ReactionSelector.tsx b/web/src/components/ReactionSelector.tsx index 6d441c0df..8973509f1 100644 --- a/web/src/components/ReactionSelector.tsx +++ b/web/src/components/ReactionSelector.tsx @@ -1,8 +1,8 @@ import { Dropdown, Menu, MenuButton } from "@mui/joy"; import clsx from "clsx"; +import { SmilePlusIcon } from "lucide-react"; import { useRef, useState } from "react"; import useClickAway from "react-use/lib/useClickAway"; -import Icon from "@/components/Icon"; import { memoServiceClient } from "@/grpcweb"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useMemoStore } from "@/store/v1"; @@ -76,7 +76,7 @@ const ReactionSelector = (props: Props) => { - + diff --git a/web/src/components/RenameTagDialog.tsx b/web/src/components/RenameTagDialog.tsx index ce41443fb..3d24ef266 100644 --- a/web/src/components/RenameTagDialog.tsx +++ b/web/src/components/RenameTagDialog.tsx @@ -1,4 +1,5 @@ import { Button, IconButton, Input, List, ListItem } from "@mui/joy"; +import { XIcon } from "lucide-react"; import React, { useState } from "react"; import { toast } from "react-hot-toast"; import { memoServiceClient } from "@/grpcweb"; @@ -7,7 +8,6 @@ import useLoading from "@/hooks/useLoading"; import { useTagStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; interface Props extends DialogProps { tag: string; @@ -55,7 +55,7 @@ const RenameTagDialog: React.FC = (props: Props) => {

{"Rename tag"}

destroy()}> - +
diff --git a/web/src/components/ResourceIcon.tsx b/web/src/components/ResourceIcon.tsx index 4ac9e537b..d7b5e8a59 100644 --- a/web/src/components/ResourceIcon.tsx +++ b/web/src/components/ResourceIcon.tsx @@ -1,8 +1,18 @@ import clsx from "clsx"; +import { + BinaryIcon, + BookIcon, + FileArchiveIcon, + FileAudioIcon, + FileEditIcon, + FileIcon, + FileTextIcon, + FileVideo2Icon, + SheetIcon, +} from "lucide-react"; import React from "react"; import { Resource } from "@/types/proto/api/v1/resource_service"; import { getResourceType, getResourceUrl } from "@/utils/resource"; -import Icon from "./Icon"; import showPreviewImageDialog from "./PreviewImageDialog"; import SquareDiv from "./kit/SquareDiv"; @@ -40,25 +50,25 @@ const ResourceIcon = (props: Props) => { const getResourceIcon = () => { switch (resourceType) { case "video/*": - return ; + return ; case "audio/*": - return ; + return ; case "text/*": - return ; + return ; case "application/epub+zip": - return ; + return ; case "application/pdf": - return ; + return ; case "application/msword": - return ; + return ; case "application/msexcel": - return ; + return ; case "application/zip": - return ; + return ; case "application/x-java-archive": - return ; + return ; default: - return ; + return ; } }; diff --git a/web/src/components/SearchBar.tsx b/web/src/components/SearchBar.tsx index 27450fdd0..39eb0bc55 100644 --- a/web/src/components/SearchBar.tsx +++ b/web/src/components/SearchBar.tsx @@ -1,7 +1,7 @@ +import { SearchIcon } from "lucide-react"; import { useState } from "react"; import { useMemoFilterStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; -import Icon from "./Icon"; import MemoDisplaySettingMenu from "./MemoDisplaySettingMenu"; const SearchBar = () => { @@ -29,7 +29,7 @@ const SearchBar = () => { return (
- + { @@ -102,7 +102,7 @@ const AccessTokenSection = () => { {getFormatedAccessToken(userAccessToken.accessToken)} copyAccessToken(userAccessToken.accessToken)}> - + @@ -123,7 +123,7 @@ const AccessTokenSection = () => { handleDeleteAccessToken(userAccessToken.accessToken); }} > - + diff --git a/web/src/components/Settings/MemberSection.tsx b/web/src/components/Settings/MemberSection.tsx index 226b0285e..11de27d44 100644 --- a/web/src/components/Settings/MemberSection.tsx +++ b/web/src/components/Settings/MemberSection.tsx @@ -1,5 +1,6 @@ import { Button, Dropdown, Input, Menu, MenuButton, MenuItem, Radio, RadioGroup } from "@mui/joy"; import { sortBy } from "lodash-es"; +import { MoreVerticalIcon } from "lucide-react"; import React, { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { userServiceClient } from "@/grpcweb"; @@ -9,7 +10,6 @@ import { RowStatus } from "@/types/proto/api/v1/common"; import { User, User_Role } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; import showChangeMemberPasswordDialog from "../ChangeMemberPasswordDialog"; -import Icon from "../Icon"; interface State { creatingUser: User; @@ -204,7 +204,7 @@ const MemberSection = () => { ) : ( - + handleChangePasswordClick(user)}> diff --git a/web/src/components/Settings/MyAccountSection.tsx b/web/src/components/Settings/MyAccountSection.tsx index 21532c5f1..9257f2ee2 100644 --- a/web/src/components/Settings/MyAccountSection.tsx +++ b/web/src/components/Settings/MyAccountSection.tsx @@ -1,10 +1,10 @@ import { Button, Dropdown, Menu, MenuButton, MenuItem } from "@mui/joy"; +import { MoreVerticalIcon, PenLineIcon } from "lucide-react"; import { memoServiceClient } from "@/grpcweb"; import { downloadFileFromUrl } from "@/helpers/utils"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useTranslate } from "@/utils/i18n"; import showChangePasswordDialog from "../ChangePasswordDialog"; -import Icon from "../Icon"; import showUpdateAccountDialog from "../UpdateAccountDialog"; import UserAvatar from "../UserAvatar"; import AccessTokenSection from "./AccessTokenSection"; @@ -35,13 +35,13 @@ const MyAccountSection = () => {
diff --git a/web/src/components/Settings/SSOSection.tsx b/web/src/components/Settings/SSOSection.tsx index 9cf50807a..95c169310 100644 --- a/web/src/components/Settings/SSOSection.tsx +++ b/web/src/components/Settings/SSOSection.tsx @@ -1,4 +1,5 @@ import { Button, Divider, Dropdown, List, ListItem, Menu, MenuButton, MenuItem } from "@mui/joy"; +import { MoreVerticalIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; @@ -6,7 +7,6 @@ import { identityProviderServiceClient } from "@/grpcweb"; import { IdentityProvider } from "@/types/proto/api/v1/idp_service"; import { useTranslate } from "@/utils/i18n"; import showCreateIdentityProviderDialog from "../CreateIdentityProviderDialog"; -import Icon from "../Icon"; import LearnMore from "../LearnMore"; const SSOSection = () => { @@ -59,7 +59,7 @@ const SSOSection = () => {
- + showCreateIdentityProviderDialog(identityProvider, fetchIdentityProviderList)}> diff --git a/web/src/components/Settings/StorageSection.tsx b/web/src/components/Settings/StorageSection.tsx index 5b419693e..c01d7b571 100644 --- a/web/src/components/Settings/StorageSection.tsx +++ b/web/src/components/Settings/StorageSection.tsx @@ -1,5 +1,6 @@ import { Button, Divider, Input, List, ListItem, Radio, RadioGroup, Tooltip } from "@mui/joy"; import { isEqual } from "lodash-es"; +import { HelpCircleIcon } from "lucide-react"; import { useMemo, useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; @@ -11,7 +12,6 @@ import { } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; -import Icon from "../Icon"; const StorageSection = () => { const t = useTranslate(); @@ -132,7 +132,7 @@ const StorageSection = () => {
{t("setting.system-section.max-upload-size")} - +
{ const { webhooks } = await webhookServiceClient.listWebhooks({ @@ -88,7 +88,7 @@ const WebhookSection = () => { handleDeleteWebhook(webhook); }} > - + @@ -113,7 +113,7 @@ const WebhookSection = () => { target="_blank" > {t("common.learn-more")} - +
diff --git a/web/src/components/Settings/WorkspaceSection.tsx b/web/src/components/Settings/WorkspaceSection.tsx index 45d782096..0315ac262 100644 --- a/web/src/components/Settings/WorkspaceSection.tsx +++ b/web/src/components/Settings/WorkspaceSection.tsx @@ -1,4 +1,5 @@ import { Button, Select, Textarea, Option, Divider } from "@mui/joy"; +import { ExternalLinkIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; @@ -7,7 +8,6 @@ import { workspaceSettingNamePrefix, useWorkspaceSettingStore } from "@/store/v1 import { WorkspaceGeneralSetting } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; -import Icon from "../Icon"; import showUpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"; const WorkspaceSection = () => { @@ -101,7 +101,7 @@ const WorkspaceSection = () => { target="_blank" > {t("common.learn-more")} - +
diff --git a/web/src/components/TagTree.tsx b/web/src/components/TagTree.tsx index d9ae97e63..1544fc8df 100644 --- a/web/src/components/TagTree.tsx +++ b/web/src/components/TagTree.tsx @@ -1,7 +1,7 @@ +import { ChevronRightIcon, HashIcon } from "lucide-react"; import { useEffect, useState } from "react"; import useToggle from "react-use/lib/useToggle"; import { useMemoFilterStore } from "@/store/v1"; -import Icon from "./Icon"; interface Tag { key: string; @@ -108,7 +108,7 @@ const TagItemContainer: React.FC = (props: TagItemContain }`} >
- +
{tag.key} @@ -120,7 +120,7 @@ const TagItemContainer: React.FC = (props: TagItemContain className={`flex flex-row justify-center items-center w-6 h-6 shrink-0 transition-all rotate-0 ${showSubTags && "rotate-90"}`} onClick={handleToggleBtnClick} > - + ) : null}
diff --git a/web/src/components/UpdateAccountDialog.tsx b/web/src/components/UpdateAccountDialog.tsx index dcdaea6f2..21321d6d1 100644 --- a/web/src/components/UpdateAccountDialog.tsx +++ b/web/src/components/UpdateAccountDialog.tsx @@ -1,5 +1,6 @@ import { Button, IconButton, Input, Textarea } from "@mui/joy"; import { isEqual } from "lodash-es"; +import { XIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { convertFileToBase64 } from "@/helpers/utils"; @@ -8,7 +9,6 @@ import { userNamePrefix, useUserStore } from "@/store/v1"; import { User as UserPb } from "@/types/proto/api/v1/user_service"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; import UserAvatar from "./UserAvatar"; type Props = DialogProps; @@ -143,7 +143,7 @@ const UpdateAccountDialog: React.FC = ({ destroy }: Props) => {

{t("setting.account-section.update-information")}

- +
@@ -154,7 +154,7 @@ const UpdateAccountDialog: React.FC = ({ destroy }: Props) => { {state.avatarUrl && ( - setPartialState({ diff --git a/web/src/components/UpdateCustomizedProfileDialog.tsx b/web/src/components/UpdateCustomizedProfileDialog.tsx index e15967cf1..a6ecd12c6 100644 --- a/web/src/components/UpdateCustomizedProfileDialog.tsx +++ b/web/src/components/UpdateCustomizedProfileDialog.tsx @@ -1,5 +1,6 @@ import { Button, IconButton, Input } from "@mui/joy"; import Textarea from "@mui/joy/Textarea/Textarea"; +import { XIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { workspaceSettingNamePrefix, useWorkspaceSettingStore } from "@/store/v1"; @@ -8,7 +9,6 @@ import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { useTranslate } from "@/utils/i18n"; import AppearanceSelect from "./AppearanceSelect"; import { generateDialog } from "./Dialog"; -import Icon from "./Icon"; import LocaleSelect from "./LocaleSelect"; type Props = DialogProps; @@ -103,7 +103,7 @@ const UpdateCustomizedProfileDialog: React.FC = ({ destroy }: Props) => {

{t("setting.system-section.customize-server.title")}

- +
diff --git a/web/src/components/UserBanner.tsx b/web/src/components/UserBanner.tsx index 18c7e6ec8..0962a0863 100644 --- a/web/src/components/UserBanner.tsx +++ b/web/src/components/UserBanner.tsx @@ -1,11 +1,11 @@ import { Dropdown, Menu, MenuButton, MenuItem } from "@mui/joy"; import clsx from "clsx"; +import { LogOutIcon, SmileIcon } from "lucide-react"; import { authServiceClient } from "@/grpcweb"; import useCurrentUser from "@/hooks/useCurrentUser"; import useNavigateTo from "@/hooks/useNavigateTo"; import { Routes } from "@/router"; import { useTranslate } from "@/utils/i18n"; -import Icon from "./Icon"; import UserAvatar from "./UserAvatar"; interface Props { @@ -41,11 +41,11 @@ const UserBanner = (props: Props) => { - + {t("common.sign-out")} navigateTo(Routes.ABOUT)}> - + {t("common.about")} diff --git a/web/src/components/UserStatisticsView.tsx b/web/src/components/UserStatisticsView.tsx index 0421217d2..54376df63 100644 --- a/web/src/components/UserStatisticsView.tsx +++ b/web/src/components/UserStatisticsView.tsx @@ -2,6 +2,7 @@ import { Divider, Tooltip } from "@mui/joy"; import clsx from "clsx"; import dayjs from "dayjs"; import { countBy } from "lodash-es"; +import { CalendarDaysIcon, CheckCircleIcon, Code2Icon, LinkIcon, ListTodoIcon, MoreVerticalIcon, RefreshCcwIcon } from "lucide-react"; import { useState } from "react"; import toast from "react-hot-toast"; import { memoServiceClient } from "@/grpcweb"; @@ -11,7 +12,6 @@ import i18n from "@/i18n"; import { useMemoFilterStore, useMemoStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; import ActivityCalendar from "./ActivityCalendar"; -import Icon from "./Icon"; import { Popover, PopoverContent, PopoverTrigger } from "./ui/Popover"; interface UserMemoStats { @@ -75,7 +75,7 @@ const UserStatisticsView = () => {
- + {dayjs(monthString).toDate().toLocaleString(i18n.language, { year: "numeric", month: "long" })} {
- + @@ -114,7 +114,7 @@ const UserStatisticsView = () => { onClick={() => memoFilterStore.addFilter({ factor: "property.hasLink", value: "" })} >
- + {t("memo.links")}
{memoStats.link} @@ -124,11 +124,7 @@ const UserStatisticsView = () => { onClick={() => memoFilterStore.addFilter({ factor: "property.hasTaskList", value: "" })} >
- {memoStats.incompleteTasks > 0 ? ( - - ) : ( - - )} + {memoStats.incompleteTasks > 0 ? : } {t("memo.to-do")}
{memoStats.incompleteTasks > 0 ? ( @@ -148,7 +144,7 @@ const UserStatisticsView = () => { onClick={() => memoFilterStore.addFilter({ factor: "property.hasCode", value: "" })} >
- + {t("memo.code")}
{memoStats.code} diff --git a/web/src/components/VisibilityIcon.tsx b/web/src/components/VisibilityIcon.tsx index a1274dda3..a9fb43385 100644 --- a/web/src/components/VisibilityIcon.tsx +++ b/web/src/components/VisibilityIcon.tsx @@ -1,6 +1,6 @@ import clsx from "clsx"; +import { Globe2Icon, LockIcon, UsersIcon } from "lucide-react"; import { Visibility } from "@/types/proto/api/v1/memo_service"; -import Icon from "./Icon"; interface Props { visibility: Visibility; @@ -11,11 +11,11 @@ const VisibilityIcon = (props: Props) => { let VIcon = null; if (visibility === Visibility.PRIVATE) { - VIcon = Icon.Lock; + VIcon = LockIcon; } else if (visibility === Visibility.PROTECTED) { - VIcon = Icon.Users; + VIcon = UsersIcon; } else if (visibility === Visibility.PUBLIC) { - VIcon = Icon.Globe2; + VIcon = Globe2Icon; } if (!VIcon) { return null; diff --git a/web/src/layouts/RootLayout.tsx b/web/src/layouts/RootLayout.tsx index f37e9c338..d1394fd47 100644 --- a/web/src/layouts/RootLayout.tsx +++ b/web/src/layouts/RootLayout.tsx @@ -1,9 +1,9 @@ import { Button, IconButton, Tooltip } from "@mui/joy"; import clsx from "clsx"; +import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"; import { Suspense, useEffect, useState } from "react"; import { Outlet, useLocation } from "react-router-dom"; import useLocalStorage from "react-use/lib/useLocalStorage"; -import Icon from "@/components/Icon"; import Navigation from "@/components/Navigation"; import useCurrentUser from "@/hooks/useCurrentUser"; import useResponsiveWidth from "@/hooks/useResponsiveWidth"; @@ -55,13 +55,13 @@ const RootLayout = () => { onClick={() => setCollapsed(!collapsed)} > {!collapsed ? ( - ) : ( - + )} diff --git a/web/src/pages/About.tsx b/web/src/pages/About.tsx index b7c0aab86..4361b5408 100644 --- a/web/src/pages/About.tsx +++ b/web/src/pages/About.tsx @@ -1,5 +1,5 @@ import { Link } from "@mui/joy"; -import Icon from "@/components/Icon"; +import { DotIcon } from "lucide-react"; import MobileHeader from "@/components/MobileHeader"; const About = () => { @@ -16,15 +16,15 @@ const About = () => { GitHub Repo - + Official Website - + Blogs - + Documents diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx index 02d630815..e0032309e 100644 --- a/web/src/pages/Archived.tsx +++ b/web/src/pages/Archived.tsx @@ -1,10 +1,10 @@ import { Button, Tooltip } from "@mui/joy"; import dayjs from "dayjs"; +import { ArchiveIcon, ArchiveRestoreIcon, ArrowDownIcon, TrashIcon } from "lucide-react"; import { ClientError } from "nice-grpc-web"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import Empty from "@/components/Empty"; -import Icon from "@/components/Icon"; import MemoContent from "@/components/MemoContent"; import MemoFilters from "@/components/MemoFilters"; import MobileHeader from "@/components/MobileHeader"; @@ -97,7 +97,7 @@ const Archived = () => {
- + {t("common.archived")}
@@ -119,12 +119,12 @@ const Archived = () => {
@@ -138,7 +138,7 @@ const Archived = () => { variant="plain" color="neutral" loading={isRequesting} - endDecorator={} + endDecorator={} onClick={() => fetchMemos(nextPageToken)} > {t("memo.load-more")} diff --git a/web/src/pages/AuthCallback.tsx b/web/src/pages/AuthCallback.tsx index 6a02b2d7b..a333f70dd 100644 --- a/web/src/pages/AuthCallback.tsx +++ b/web/src/pages/AuthCallback.tsx @@ -1,8 +1,8 @@ import { last } from "lodash-es"; +import { LoaderIcon } from "lucide-react"; import { ClientError } from "nice-grpc-web"; import { useEffect, useState } from "react"; import { useSearchParams } from "react-router-dom"; -import Icon from "@/components/Icon"; import { authServiceClient } from "@/grpcweb"; import { absolutifyLink } from "@/helpers/utils"; import useNavigateTo from "@/hooks/useNavigateTo"; @@ -70,7 +70,7 @@ const AuthCallback = () => { return (
{state.loading ? ( - + ) : (
{state.errorMessage}
)} diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index d19a1f88f..c7312a586 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -1,10 +1,10 @@ import { Button } from "@mui/joy"; import clsx from "clsx"; import dayjs from "dayjs"; +import { ArrowDownIcon } from "lucide-react"; import { useEffect, useState } from "react"; import Empty from "@/components/Empty"; import { ExploreSidebar, ExploreSidebarDrawer } from "@/components/ExploreSidebar"; -import Icon from "@/components/Icon"; import MemoFilters from "@/components/MemoFilters"; import MemoView from "@/components/MemoView"; import MobileHeader from "@/components/MobileHeader"; @@ -84,7 +84,7 @@ const Explore = () => { variant="plain" color="neutral" loading={isRequesting} - endDecorator={} + endDecorator={} onClick={() => fetchMemos(nextPageToken)} > {t("memo.load-more")} diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 811ac3dfc..4cf762e45 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -1,10 +1,10 @@ import { Button } from "@mui/joy"; import clsx from "clsx"; import dayjs from "dayjs"; +import { ArrowDownIcon } from "lucide-react"; import { useEffect, useState } from "react"; import Empty from "@/components/Empty"; import { HomeSidebar, HomeSidebarDrawer } from "@/components/HomeSidebar"; -import Icon from "@/components/Icon"; import MemoEditor from "@/components/MemoEditor"; import MemoFilters from "@/components/MemoFilters"; import MemoView from "@/components/MemoView"; @@ -100,7 +100,7 @@ const Home = () => { variant="plain" color="neutral" loading={isRequesting} - endDecorator={} + endDecorator={} onClick={() => fetchMemos(nextPageToken)} > {t("memo.load-more")} diff --git a/web/src/pages/Inboxes.tsx b/web/src/pages/Inboxes.tsx index becf14893..f9b84b0ec 100644 --- a/web/src/pages/Inboxes.tsx +++ b/web/src/pages/Inboxes.tsx @@ -1,6 +1,6 @@ +import { BellIcon } from "lucide-react"; import { useEffect } from "react"; import Empty from "@/components/Empty"; -import Icon from "@/components/Icon"; import MemoCommentMessage from "@/components/Inbox/MemoCommentMessage"; import VersionUpdateMessage from "@/components/Inbox/VersionUpdateMessage"; import MobileHeader from "@/components/MobileHeader"; @@ -29,7 +29,7 @@ const Inboxes = () => {

- + {t("common.inbox")}

diff --git a/web/src/pages/Loading.tsx b/web/src/pages/Loading.tsx index cf73dabda..e0fce3574 100644 --- a/web/src/pages/Loading.tsx +++ b/web/src/pages/Loading.tsx @@ -1,10 +1,10 @@ -import Icon from "@/components/Icon"; +import { LoaderIcon } from "lucide-react"; function Loading() { return (
- +
); diff --git a/web/src/pages/MemoDetail.tsx b/web/src/pages/MemoDetail.tsx index 2617accf1..88a16676a 100644 --- a/web/src/pages/MemoDetail.tsx +++ b/web/src/pages/MemoDetail.tsx @@ -1,10 +1,10 @@ import { Button } from "@mui/joy"; import clsx from "clsx"; +import { ArrowUpLeftFromCircleIcon, MessageCircleIcon } from "lucide-react"; import { ClientError } from "nice-grpc-web"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Link, useParams } from "react-router-dom"; -import Icon from "@/components/Icon"; import { MemoDetailSidebar, MemoDetailSidebarDrawer } from "@/components/MemoDetailSidebar"; import MemoEditor from "@/components/MemoEditor"; import MemoView from "@/components/MemoView"; @@ -98,7 +98,7 @@ const MemoDetail = () => { to={`/m/${parentMemo.uid}`} unstable_viewTransition > - + {parentMemo.content}
@@ -123,7 +123,7 @@ const MemoDetail = () => {