diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/EntryPlaceholderDaily.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/EntryPlaceholderDaily.tsx
deleted file mode 100644
index 15dca8a56..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/EntryPlaceholderDaily.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { cn } from "@follow/utils/utils"
-import { useSetAtom } from "jotai"
-import type { FC } from "react"
-import { use } from "react"
-
-import { EntryContentPlaceholderContext } from "~/modules/app-layout/entry-content/EntryContentPlaceholderContext"
-
-import { DayOf } from "./constants"
-import { DailyReportTitle } from "./daily"
-import type { DailyItemProps, DailyView } from "./types"
-import { useParseDailyDate } from "./useParseDailyDate"
-
-export const EntryPlaceholderDaily = ({
- view,
- className,
-}: {
- view: DailyView
- className?: string
-}) => (
-
-
-
-
-)
-
-const NormalDailyReportTitle: FC = ({ day }) => {
- const { title, startDate, endDate } = useParseDailyDate(day)
-
- const setOpenedSummary = useSetAtom(use(EntryContentPlaceholderContext).openedSummary)
-
- return (
-
- )
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/FeedDailyModalContent.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/FeedDailyModalContent.tsx
deleted file mode 100644
index db75f1fb1..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/FeedDailyModalContent.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "@follow/components/ui/tabs/index.jsx"
-import { FeedViewType } from "@follow/constants"
-
-import { DayOf } from "./constants"
-import { DailyReportModalContent, DailyReportTitle } from "./daily"
-import { useParseDailyDate } from "./useParseDailyDate"
-
-const tabs = [DayOf.Today, DayOf.Yesterday]
-
-export const FeedDailyModalContent = () => {
- const today = useParseDailyDate(DayOf.Today)
- const yesterday = useParseDailyDate(DayOf.Yesterday)
-
- return (
-
-
- {tabs.map((tab: any) => (
-
-
-
- ))}
-
-
-
- {tabs.map((tab: any) => (
-
-
-
- ))}
-
-
- )
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/constants.ts b/apps/desktop/layer/renderer/src/modules/ai-daily/constants.ts
deleted file mode 100644
index 1a2df261a..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/constants.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export enum DayOf {
- Today = 1,
- Yesterday,
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/daily.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/daily.tsx
deleted file mode 100644
index 66cabc2ed..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/daily.tsx
+++ /dev/null
@@ -1,294 +0,0 @@
-import { Spring } from "@follow/components/constants/spring.js"
-import { EmptyIcon } from "@follow/components/icons/empty.jsx"
-import { CollapseControlled } from "@follow/components/ui/collapse/Collapse.js"
-import type { LinkProps } from "@follow/components/ui/link/LinkWithTooltip.js"
-import { LoadingCircle } from "@follow/components/ui/loading/index.jsx"
-import { ScrollArea } from "@follow/components/ui/scroll-area/index.js"
-import {
- Tooltip,
- TooltipContent,
- TooltipPortal,
- TooltipTrigger,
-} from "@follow/components/ui/tooltip/index.jsx"
-import { cn, isBizId } from "@follow/utils/utils"
-import { noop } from "foxact/noop"
-import type { Components } from "hast-util-to-jsx-runtime"
-import { m } from "motion/react"
-import { useMemo, useState } from "react"
-import { Trans, useTranslation } from "react-i18next"
-
-import { useGeneralSettingSelector } from "~/atoms/settings/general"
-import { Markdown } from "~/components/ui/markdown/Markdown"
-import { MarkdownLink } from "~/components/ui/markdown/renderers"
-import { usePeekModal } from "~/hooks/biz/usePeekModal"
-import { useAuthQuery } from "~/hooks/common"
-import { apiClient } from "~/lib/api-fetch"
-import { defineQuery } from "~/lib/defineQuery"
-
-import { remarkSnowflakeId } from "./plugins/parse-snowflake"
-import type { DailyItemProps, DailyView } from "./types"
-import { useParseDailyDate } from "./useParseDailyDate"
-
-export const DailyItem = ({
- view,
- day,
- className,
- onClick,
- isOpened,
-}: DailyItemProps & {
- isOpened: boolean
- onClick: () => void
-}) => {
- const { title, startDate, endDate } = useParseDailyDate(day)
-
- return (
-
-
-
- }
- className={cn(className, "mx-auto w-full max-w-lg border-b last:border-b-0")}
- >
-
-
- )
-}
-
-export const DailyReportTitle = ({
- endDate,
- startDate,
- title,
- containerClassName,
-}: {
- title: string
- startDate: number
- endDate: number
- containerClassName?: string
-}) => {
- const { t } = useTranslation()
- const language = useGeneralSettingSelector((s) => s.language)
- const locale = useMemo(() => {
- try {
- return new Intl.Locale(language)
- } catch {
- return new Intl.Locale("en-US")
- }
- }, [language])
-
- return (
-
-
- {t("ai_daily.title", { title })}
-
-
-
-
-
-
-
- -
-
- {new Date(startDate).toLocaleTimeString(locale, {
- weekday: "short",
- hour: "numeric",
- minute: "numeric",
- })}
-
- ),
- To: (
-
- {new Date(endDate + 1).toLocaleTimeString(locale, {
- weekday: "short",
- hour: "numeric",
- minute: "numeric",
- })}
-
- ),
- }}
- />
-
- - {t("ai_daily.tooltip.update_schedule")}
-
-
-
-
-
- )
-}
-
-const useQueryData = ({
- endDate,
- startDate,
- view,
-}: Pick) =>
- useAuthQuery(
- defineQuery(["daily", view, startDate, endDate], async () => {
- const res = await apiClient.ai.daily.$get({
- query: {
- startDate: `${+startDate}`,
- view: `${view}`,
- },
- })
- return res.data
- }),
- {
- meta: {
- persist: true,
- },
- },
- )
-
-interface DailyReportContentProps {
- view: DailyView
- startDate: number
- endDate: number
-}
-
-const DailyReportContent: Component = ({
- endDate,
- startDate,
-
- view,
-}) => {
- const content = useQueryData({ endDate, startDate, view })
-
- const RelatedEntryLink = useState(() => createRelatedEntryLink("modal"))[0]
-
- return (
-
-
-
- {content.isLoading ? (
-
- ) : (
- !!content.data && (
-
- {
- pipeline.use(remarkSnowflakeId)
-
- return pipeline
- }}
- components={
- {
- "snowflake-id": SnowflakeId,
- a: RelatedEntryLink as Components["a"],
- } as any as Components
- }
- className="prose-sm prose-p:my-1 prose-ul:my-1 prose-ul:list-outside prose-ul:list-disc prose-li:marker:text-accent mt-4 px-6"
- >
- {content.data}
-
-
- )
- )}
-
-
-
- )
-}
-
-export const DailyReportModalContent: Component = ({
- endDate,
- startDate,
- view,
-}) => {
- const content = useQueryData({ endDate, startDate, view })
- const { t } = useTranslation()
- const RelatedEntryLink = useState(() => createRelatedEntryLink("toast"))[0]
-
- if (!content.data && !content.isLoading)
- return (
-
-
-
{t("ai_daily.no_found")}
-
- )
-
- return (
-
-
- {content.isLoading ? (
-
- ) : content.data ? (
-
- {content.data}
-
- ) : null}
-
-
- )
-}
-
-const createRelatedEntryLink = (variant: "toast" | "modal") => (props: LinkProps) => {
- const { href, children } = props
- const entryId = isBizId(href) ? href : null
-
- const peekModal = usePeekModal()
- if (!entryId) {
- return
- }
- return (
-
- )
-}
-
-interface SnowflakeIdProps {
- id: string
- children?: React.ReactNode
- index: number
-}
-
-const SnowflakeId: React.FC = ({ id: entryId, index }) => {
- const peekModal = usePeekModal()
-
- return (
-
- )
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/plugins/parse-snowflake.ts b/apps/desktop/layer/renderer/src/modules/ai-daily/plugins/parse-snowflake.ts
deleted file mode 100644
index d7c97f64e..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/plugins/parse-snowflake.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import type { Parent } from "mdast"
-import type { Node } from "unist"
-import { visit } from "unist-util-visit"
-
-interface SnowflakeOptions {
- component?: string
-}
-
-const SNOWFLAKE_PATTERN = /\[(\d{15,20})\]/g
-
-function isTextNode(node: Node): node is { type: "text"; value: string } {
- return node.type === "text"
-}
-
-export function remarkSnowflakeId(options: SnowflakeOptions = {}) {
- const { component = "snowflake-id" } = options
-
- return (tree: Node) => {
- let idIndex = 1
- visit(tree, "text", (node, index, parent: Parent) => {
- if (!isTextNode(node) || !parent) return
-
- const { value } = node as { value: string }
- const matches = Array.from(value.matchAll(SNOWFLAKE_PATTERN))
-
- if (matches.length === 0) return
-
- const result: (Node | string)[] = []
- let lastIndex = 0
-
- for (const match of matches) {
- if (!Array.isArray(match)) continue
-
- const [fullMatch, snowflakeId] = match
- const matchIndex = match.index!
-
- // Add text before the match
- if (matchIndex > lastIndex) {
- result.push({
- type: "text",
- // @ts-expect-error
- value: value.slice(lastIndex, matchIndex),
- })
- }
-
- // Add snowflake node
- result.push({
- type: "snowflakeId",
- data: {
- hName: component,
- hProperties: {
- id: snowflakeId,
- index: idIndex++,
- },
- },
- // @ts-expect-error
- children: [
- {
- type: "text",
- value: fullMatch,
- },
- ],
- })
-
- lastIndex = matchIndex + fullMatch.length
- }
-
- // Add any remaining text after the last match
- if (lastIndex < value.length) {
- result.push({
- type: "text",
- // @ts-expect-error
- value: value.slice(lastIndex),
- })
- }
-
- // Replace the current node with the new nodes
- // @ts-expect-error
- parent.children.splice(index, 1, ...result)
- })
- }
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/types.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/types.tsx
deleted file mode 100644
index e61039f15..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/types.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { FeedViewType } from "@follow/constants"
-
-import type { DayOf } from "./constants"
-
-export type DailyView = Extract
-export interface DailyItemProps {
- view: DailyView
- day: DayOf
-
- className?: string
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/useAIDailyReportModal.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/useAIDailyReportModal.tsx
deleted file mode 100644
index a2140f9cb..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/useAIDailyReportModal.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { useCallback } from "react"
-import { useTranslation } from "react-i18next"
-
-import { useModalStack } from "~/components/ui/modal/stacked/hooks"
-
-import { FeedDailyModalContent } from "./FeedDailyModalContent"
-
-export const useAIDailyReportModal = () => {
- const { present } = useModalStack()
- const { t } = useTranslation()
-
- return useCallback(() => {
- present({
- content: () => ,
- title: t("ai_daily.header"),
- resizeable: true,
- clickOutsideToDismiss: true,
-
- resizeDefaultSize: { width: 660, height: 450 },
- })
- }, [present, t])
-}
diff --git a/apps/desktop/layer/renderer/src/modules/ai-daily/useParseDailyDate.tsx b/apps/desktop/layer/renderer/src/modules/ai-daily/useParseDailyDate.tsx
deleted file mode 100644
index bcd743e31..000000000
--- a/apps/desktop/layer/renderer/src/modules/ai-daily/useParseDailyDate.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useMemo } from "react"
-import { useTranslation } from "react-i18next"
-
-import { DayOf } from "./constants"
-
-export const useParseDailyDate = (day: DayOf) => {
- const { t } = useTranslation("common")
-
- return useMemo(() => {
- const dateObj = new Date()
-
- const nowHour = dateObj.getHours()
- let startDate: number
- let endDate: number
- let title: string
-
- const today8AM = dateObj.setHours(8, 0, 0, 0)
- const today8PM = dateObj.setHours(20, 0, 0, 0)
- dateObj.setDate(dateObj.getDate() - 1)
- const yesterday8AM = dateObj.setHours(8, 0, 0, 0)
- const yesterday8PM = dateObj.setHours(20, 0, 0, 0)
- dateObj.setDate(dateObj.getDate() - 1)
- const dayBeforeYesterday8PM = dateObj.setHours(20, 0, 0, 0)
-
- const isToday = day === DayOf.Today
- // For index 0, get the last past 8 AM or 8 PM; for index 1, get the second last past 8 AM or 8 PM.
- if (nowHour >= 20) {
- if (isToday) {
- endDate = today8PM - 1
- startDate = today8AM
- title = t("time.today")
- } else {
- endDate = today8AM - 1
- startDate = yesterday8PM
- title = t("time.last_night")
- }
- } else if (nowHour >= 8) {
- if (isToday) {
- endDate = today8AM - 1
- startDate = yesterday8PM
- title = t("time.last_night")
- } else {
- endDate = yesterday8PM - 1
- startDate = yesterday8AM
- title = t("time.yesterday")
- }
- } else {
- if (isToday) {
- endDate = yesterday8PM - 1
- startDate = yesterday8AM
- title = t("time.yesterday")
- } else {
- endDate = yesterday8AM - 1
- startDate = dayBeforeYesterday8PM
- title = t("time.the_night_before_last")
- }
- }
-
- return { title, startDate, endDate }
- }, [day, t])
-}
diff --git a/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholder.tsx b/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholder.tsx
index 02987c65b..22a521915 100644
--- a/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholder.tsx
+++ b/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholder.tsx
@@ -1,106 +1,19 @@
-import { CollapseGroup } from "@follow/components/ui/collapse/Collapse.js"
-import { FeedViewType } from "@follow/constants"
-import { cn } from "@follow/utils/utils"
-import { atom, useAtomValue, useSetAtom } from "jotai"
import { AnimatePresence, LayoutGroup, m } from "motion/react"
-import * as React from "react"
-import { GlassButton } from "~/components/ui/button/GlassButton"
-import { ROUTE_FEED_PENDING } from "~/constants"
-import { useRouteParams } from "~/hooks/biz/useRouteParams"
-import { DayOf } from "~/modules/ai-daily/constants"
-import { DailyItem } from "~/modules/ai-daily/daily"
-import { EntryPlaceholderDaily } from "~/modules/ai-daily/EntryPlaceholderDaily"
-import type { DailyView } from "~/modules/ai-daily/types"
import { EntryPlaceholderLogo } from "~/modules/entry-content/components/EntryPlaceholderLogo"
-import type { EntryContentPlaceholderContextValue } from "./EntryContentPlaceholderContext"
-import { EntryContentPlaceholderContext } from "./EntryContentPlaceholderContext"
-
export const EntryContentPlaceholder = () => {
- const { feedId, view } = useRouteParams()
-
- const ctxValue = React.useMemo(
- () => ({
- openedSummary: atom(null),
- }),
- [],
- )
-
- const openedSummary = useAtomValue(ctxValue.openedSummary)
return (
-
-
- {openedSummary === null ? (
-
-
- {feedId === ROUTE_FEED_PENDING && view === FeedViewType.Articles && (
-
- )}
-
- ) : (
-
- )}
-
-
+
+
+
+
+
)
}
-
-const SummaryDetailContent = () => {
- const { view } = useRouteParams()
- const ctxValue = React.use(EntryContentPlaceholderContext)
- const openedSummary = useAtomValue(ctxValue.openedSummary)
- const setOpenedSummary = useSetAtom(ctxValue.openedSummary)
-
- return (
- <>
-
- setOpenedSummary(null)}
- size="sm"
- className="opacity-100"
- variant="flat"
- >
-
-
-
-
-
- {
- if (openedSummary === DayOf.Today) {
- setOpenedSummary(null)
- } else {
- setOpenedSummary(DayOf.Today)
- }
- }}
- day={DayOf.Today}
- view={view as DailyView}
- className={cn(openedSummary === DayOf.Today && "grow", "pt-6")}
- />
-
- {
- if (openedSummary === DayOf.Yesterday) {
- setOpenedSummary(null)
- } else {
- setOpenedSummary(DayOf.Yesterday)
- }
- }}
- day={DayOf.Yesterday}
- view={view as DailyView}
- className={cn(openedSummary === DayOf.Yesterday && "grow", "pt-6")}
- />
-
- >
- )
-}
diff --git a/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholderContext.tsx b/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholderContext.tsx
deleted file mode 100644
index 7934d7561..000000000
--- a/apps/desktop/layer/renderer/src/modules/app-layout/entry-content/EntryContentPlaceholderContext.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import type { PrimitiveAtom } from "jotai"
-import { createContext } from "react"
-
-import type { DayOf } from "~/modules/ai-daily/constants"
-
-export const EntryContentPlaceholderContext = createContext(
- null!,
-)
-
-export type EntryContentPlaceholderContextValue = {
- openedSummary: PrimitiveAtom
-}
diff --git a/apps/desktop/layer/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx b/apps/desktop/layer/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx
index 85151f15f..b5927018c 100644
--- a/apps/desktop/layer/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx
+++ b/apps/desktop/layer/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx
@@ -30,7 +30,6 @@ import { useFeedHeaderTitle } from "~/store/feed/hooks"
import { MarkAllReadButton } from "../components/mark-all-button"
import { useIsPreviewFeed } from "../hooks/useIsPreviewFeed"
import { AppendTaildingDivider } from "./AppendTaildingDivider"
-import { DailyReportButton } from "./buttons/DailyReportButton"
import { SwitchToMasonryButton } from "./buttons/SwitchToMasonryButton"
import { WideModeButton } from "./buttons/WideModeButton"
@@ -99,7 +98,6 @@ export const EntryListHeader: FC<{
{!views[view]!.wideMode && !aiEnabled && }
- {view === FeedViewType.SocialMedia && }
{view === FeedViewType.Pictures && }
diff --git a/apps/desktop/layer/renderer/src/modules/entry-column/layouts/buttons/DailyReportButton.tsx b/apps/desktop/layer/renderer/src/modules/entry-column/layouts/buttons/DailyReportButton.tsx
deleted file mode 100644
index 2187f5a5f..000000000
--- a/apps/desktop/layer/renderer/src/modules/entry-column/layouts/buttons/DailyReportButton.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ActionButton } from "@follow/components/ui/button/action-button.js"
-import { tracker } from "@follow/tracker"
-import type { FC } from "react"
-import { useTranslation } from "react-i18next"
-
-import { useAIDailyReportModal } from "~/modules/ai-daily/useAIDailyReportModal"
-
-export const DailyReportButton: FC = () => {
- const present = useAIDailyReportModal()
- const { t } = useTranslation()
-
- return (
- {
- present()
- tracker.dailyReportModal()
- }}
- tooltip={t("entry_list_header.daily_report")}
- >
-
-
- )
-}
diff --git a/locales/app/en.json b/locales/app/en.json
index 5845fa3a5..4463e8539 100644
--- a/locales/app/en.json
+++ b/locales/app/en.json
@@ -26,11 +26,6 @@
"activation.plan.title": "Upgrade Plan",
"activation.plan.upgrade": "Upgrade",
"activation.title": "Invitation Code",
- "ai_daily.header": "AI Daily Report",
- "ai_daily.no_found": "No AI news found for this period.",
- "ai_daily.title": "Top News - {{title}}",
- "ai_daily.tooltip.content": "Here is news selected by AI from your timeline ( - ) that may be important to you.",
- "ai_daily.tooltip.update_schedule": "Update daily at 8 AM and 8 PM.",
"app.copy_logo_svg": "Copy Logo SVG",
"app.copy_logo_text_svg": "Copy Logo Text SVG",
"app.toggle_sidebar": "Toggle Sidebar",
@@ -188,7 +183,6 @@
"entry_content.support_creator": "Support Creator",
"entry_content.web_app_notice": "Maybe web app doesn't support this content type. But you can download the desktop app.",
"entry_list.zero_unread": "Zero Unread",
- "entry_list_header.daily_report": "Daily Report",
"entry_list_header.grid": "Grid",
"entry_list_header.items": "items",
"entry_list_header.masonry": "Masonry",
diff --git a/locales/app/ja.json b/locales/app/ja.json
index 5ec776b8d..c974cee2c 100644
--- a/locales/app/ja.json
+++ b/locales/app/ja.json
@@ -26,11 +26,6 @@
"activation.plan.title": "プランのアップグレード",
"activation.plan.upgrade": "アップグレード",
"activation.title": "招待コード",
- "ai_daily.header": "AI デイリーリポート",
- "ai_daily.no_found": "この期間の AI ニュースはありません。",
- "ai_daily.title": "トップニュース - {{title}}",
- "ai_daily.tooltip.content": "こちらは、AI があなたのタイムラインから選んだニュースです( - )。あなたにとって重要なニュースかもしれません。",
- "ai_daily.tooltip.update_schedule": "毎日午前 8 時と午後 8 時に更新されます。",
"app.copy_logo_svg": "ロゴ SVG をコピー",
"app.copy_logo_text_svg": "ロゴテキスト SVG をコピー",
"app.toggle_sidebar": "サイドバーを切り替え",
@@ -188,7 +183,6 @@
"entry_content.support_creator": "作成者をサポート",
"entry_content.web_app_notice": "このコンテンツタイプはウェブアプリではサポートされていないかもしれません。デスクトップアプリをダウンロードしてください。",
"entry_list.zero_unread": "未読ゼロ",
- "entry_list_header.daily_report": "日報",
"entry_list_header.grid": "グリッド",
"entry_list_header.items": "項目",
"entry_list_header.masonry": "メイソンリー",
diff --git a/locales/app/zh-CN.json b/locales/app/zh-CN.json
index dd762701b..9734ac9c5 100644
--- a/locales/app/zh-CN.json
+++ b/locales/app/zh-CN.json
@@ -26,11 +26,6 @@
"activation.plan.title": "升级计划",
"activation.plan.upgrade": "升级",
"activation.title": "邀请码",
- "ai_daily.header": "AI 日报",
- "ai_daily.no_found": "在此期间未找到 AI 新闻。",
- "ai_daily.title": "热点 - {{title}}",
- "ai_daily.tooltip.content": "AI 根据时间线( - )提取的重点信息。",
- "ai_daily.tooltip.update_schedule": "每天 8:00 和 20:00 定时更新。",
"app.copy_logo_svg": "复制 Logo SVG",
"app.copy_logo_text_svg": "复制徽标 SVG 文本",
"app.toggle_sidebar": "切换侧边栏",
@@ -188,7 +183,6 @@
"entry_content.support_creator": "支持作者",
"entry_content.web_app_notice": "网页版不支持展示此类型,请下载客户端查看。",
"entry_list.zero_unread": "全部已读",
- "entry_list_header.daily_report": "每日总结",
"entry_list_header.grid": "网格布局",
"entry_list_header.items": "内容",
"entry_list_header.masonry": "瀑布流布局",
diff --git a/locales/app/zh-TW.json b/locales/app/zh-TW.json
index 68f1ccdc3..8ecd1db45 100644
--- a/locales/app/zh-TW.json
+++ b/locales/app/zh-TW.json
@@ -23,11 +23,6 @@
"activation.activate": "啟用",
"activation.description": "在公開測試階段,您需要邀請碼才能使用此功能。",
"activation.title": "邀請碼",
- "ai_daily.header": "AI 日報",
- "ai_daily.no_found": "該期間未找到 AI 新聞",
- "ai_daily.title": "頭條新聞 - {{title}}",
- "ai_daily.tooltip.content": "以下是 AI 從您的時間軸中選擇的新聞( - ),可能對您很重要。",
- "ai_daily.tooltip.update_schedule": "每天早上 8 點和晚上 8 點更新。",
"app.copy_logo_svg": "複製 Logo SVG",
"app.copy_logo_text_svg": "複製圖標 SVG 文字",
"app.toggle_sidebar": "切換側邊欄",
@@ -173,7 +168,6 @@
"entry_content.support_creator": "贊助作者",
"entry_content.web_app_notice": "Web 應用程式不支援此類型內容。您可以下載桌面應用程式。",
"entry_list.zero_unread": "全部已讀",
- "entry_list_header.daily_report": "每日報告",
"entry_list_header.grid": "格線佈局",
"entry_list_header.items": "內容",
"entry_list_header.masonry": "瀑布式佈局",
diff --git a/packages/internal/tracker/src/tracker-points.ts b/packages/internal/tracker/src/tracker-points.ts
index 1c76c36ae..fa95e3f9f 100644
--- a/packages/internal/tracker/src/tracker-points.ts
+++ b/packages/internal/tracker/src/tracker-points.ts
@@ -43,10 +43,6 @@ export class TrackerPoints {
this.track(TrackerMapper.Integration, props)
}
- dailyReportModal() {
- this.track(TrackerMapper.DailyReportModal)
- }
-
switchToMasonry() {
this.track(TrackerMapper.SwitchToMasonry)
}