SYMBOL INDEX (3942 symbols across 1441 files) FILE: .github/scripts/extract-release-info.mjs constant RELEASE_PATTERNS (line 12) | const RELEASE_PATTERNS = { constant EXIT_CODES (line 17) | const EXIT_CODES = { function setGitHubEnv (line 29) | function setGitHubEnv(key, value) { function setGitHubOutput (line 46) | function setGitHubOutput(key, value) { function getLatestCommitMessage (line 62) | function getLatestCommitMessage() { function extractReleaseInfo (line 76) | function extractReleaseInfo(commitMessage) { function main (line 97) | function main() { FILE: api/vercel_webhook.ts function handler (line 6) | async function handler(request: VercelRequest, response: VercelResponse) { function sha1 (line 45) | function sha1(data: Buffer, secret: string): string { function purgeCloudflareCache (line 55) | async function purgeCloudflareCache() { FILE: apps/cli/src/browser-login.ts constant LOCAL_CALLBACK_HOST (line 8) | const LOCAL_CALLBACK_HOST = "127.0.0.1" constant LOCAL_CALLBACK_PATH (line 9) | const LOCAL_CALLBACK_PATH = "/callback" constant DEFAULT_TIMEOUT_MS (line 10) | const DEFAULT_TIMEOUT_MS = 3 * 60 * 1000 type BrowserLoginOptions (line 100) | interface BrowserLoginOptions { type BrowserLoginResult (line 106) | interface BrowserLoginResult { FILE: apps/cli/src/cli.e2e.test.ts type CLIExecution (line 15) | type CLIExecution = { FILE: apps/cli/src/client.ts type GlobalOptions (line 27) | interface GlobalOptions { type ResolvedGlobalOptions (line 34) | interface ResolvedGlobalOptions extends GlobalOptions { type CommandContext (line 38) | interface CommandContext { FILE: apps/cli/src/command.ts type RunCommandOptions (line 7) | interface RunCommandOptions { FILE: apps/cli/src/commands/auth.ts type AuthLoginOptions (line 10) | interface AuthLoginOptions { FILE: apps/cli/src/commands/collection.ts type CollectionListOptions (line 7) | interface CollectionListOptions { type CollectionAddOptions (line 12) | interface CollectionAddOptions { FILE: apps/cli/src/commands/entry.ts type MarkAllReadOptions (line 8) | interface MarkAllReadOptions { FILE: apps/cli/src/commands/list.ts type ListCreateOptions (line 7) | interface ListCreateOptions { type ListUpdateOptions (line 15) | interface ListUpdateOptions { type ListFeedOptions (line 23) | interface ListFeedOptions { FILE: apps/cli/src/commands/opml.ts type OpmlExportOptions (line 8) | interface OpmlExportOptions { type OpmlImportOptions (line 12) | interface OpmlImportOptions { FILE: apps/cli/src/commands/search.ts type DiscoverTarget (line 6) | type DiscoverTarget = "feeds" | "lists" type TrendingRange (line 7) | type TrendingRange = "1d" | "3d" | "7d" | "30d" type TrendingLanguage (line 8) | type TrendingLanguage = "eng" | "cmn" type SearchDiscoverOptions (line 31) | interface SearchDiscoverOptions { type SearchRsshubOptions (line 35) | interface SearchRsshubOptions { type SearchTrendingOptions (line 39) | interface SearchTrendingOptions { FILE: apps/cli/src/commands/subscription.ts type SubscriptionTarget (line 12) | type SubscriptionTarget = "feed" | "list" | "url" type UpdateTarget (line 13) | type UpdateTarget = "feed" | "list" type SubscriptionListOptions (line 29) | interface SubscriptionListOptions { type SubscriptionAddOptions (line 34) | interface SubscriptionAddOptions { type SubscriptionRemoveOptions (line 43) | interface SubscriptionRemoveOptions { type SubscriptionUpdateOptions (line 47) | interface SubscriptionUpdateOptions { FILE: apps/cli/src/commands/timeline.ts type TimelineQuery (line 8) | type TimelineQuery = EntryListRequest & { type TimelineOptions (line 12) | interface TimelineOptions { FILE: apps/cli/src/commands/unread.ts type UnreadListOptions (line 11) | interface UnreadListOptions { FILE: apps/cli/src/config.ts type FoloCLIConfig (line 6) | interface FoloCLIConfig { FILE: apps/cli/src/output.ts type OutputFormat (line 5) | type OutputFormat = "json" | "table" | "plain" type OutputError (line 7) | interface OutputError { class CLIError (line 12) | class CLIError extends Error { method constructor (line 15) | constructor(code: string, message: string) { FILE: apps/desktop/configs/vite.electron-render.config.ts constant VITE_ROOT (line 13) | const VITE_ROOT = resolve(root, "layer/renderer") FILE: apps/desktop/configs/vite.render.config.ts method transform (line 53) | transform(code, id) { FILE: apps/desktop/e2e/scripts/capture-ui-audit.ts constant SETTING_TABS (line 17) | const SETTING_TABS = [ constant SUBVIEW_ROUTES (line 33) | const SUBVIEW_ROUTES = ["discover", "power", "action", "rsshub", "ai"] a... function main (line 60) | async function main() { FILE: apps/desktop/e2e/support/account.ts type TestAccount (line 5) | interface TestAccount { FILE: apps/desktop/e2e/support/app.ts constant ONBOARDING_FEED_URL (line 8) | const ONBOARDING_FEED_URL = "folo://onboarding" method get (line 58) | get(currentTarget, property, receiver) { method set (line 65) | set(currentTarget, property, value, receiver) { method ownKeys (line 72) | ownKeys(currentTarget) { method getOwnPropertyDescriptor (line 75) | getOwnPropertyDescriptor(currentTarget, property) { method get (line 92) | get() { method set (line 95) | set() {} FILE: apps/desktop/e2e/support/auth-bootstrap.ts type AuthBootstrapResponse (line 9) | type AuthBootstrapResponse = { type ParsedCookie (line 16) | type ParsedCookie = { FILE: apps/desktop/e2e/support/env.ts type DesktopE2EProfile (line 5) | type DesktopE2EProfile = "local" | "prod" constant DESKTOP_E2E_PROFILES (line 7) | const DESKTOP_E2E_PROFILES = { type DesktopE2EEnv (line 22) | interface DesktopE2EEnv { FILE: apps/desktop/layer/main/preload/index.d.ts type Window (line 4) | interface Window { FILE: apps/desktop/layer/main/src/@types/constants.ts type MainSupportedLanguages (line 3) | type MainSupportedLanguages = (typeof langs)[number] FILE: apps/desktop/layer/main/src/@types/i18next.d.ts type CustomTypeOptions (line 5) | interface CustomTypeOptions { FILE: apps/desktop/layer/main/src/constants/app.ts constant UNREAD_BACKGROUND_POLLING_INTERVAL (line 4) | const UNREAD_BACKGROUND_POLLING_INTERVAL = 1000 * 60 * 5 constant HOTUPDATE_RENDER_ENTRY_DIR (line 6) | const HOTUPDATE_RENDER_ENTRY_DIR = path.resolve(app.getPath("userData"),... constant GITHUB_OWNER (line 8) | const GITHUB_OWNER = process.env.GITHUB_OWNER || "RSSNext" constant GITHUB_REPO (line 9) | const GITHUB_REPO = process.env.GITHUB_REPO || "follow" constant START_IN_TRAY_ARGS (line 12) | const START_IN_TRAY_ARGS = "--start-in-tray" constant BETTER_AUTH_COOKIE_NAME_SESSION_TOKEN (line 14) | const BETTER_AUTH_COOKIE_NAME_SESSION_TOKEN = "better-auth.session_token" FILE: apps/desktop/layer/main/src/constants/system.ts constant DEVICE_ID (line 3) | const DEVICE_ID = machineIdSync() FILE: apps/desktop/layer/main/src/ipc/index.ts type IpcServices (line 27) | type IpcServices = MergeIpcService function initializeIpcServices (line 30) | function initializeIpcServices() { FILE: apps/desktop/layer/main/src/ipc/services/app.ts type WindowActionInput (line 24) | interface WindowActionInput { type SearchInput (line 28) | interface SearchInput { type Sender (line 33) | interface Sender extends Electron.WebContents { class AppService (line 37) | class AppService extends IpcService { method getAppVersion (line 41) | getAppVersion(): string { method checkForUpdates (line 46) | async checkForUpdates(): Promise<{ hasUpdate: boolean; error?: string ... method switchAppLocale (line 51) | switchAppLocale(context: IpcContext, input: string): void { method rendererUpdateReload (line 60) | rendererUpdateReload(): void { method openExternal (line 85) | async openExternal(_context: IpcContext, url: string): Promise { method windowAction (line 92) | windowAction(context: IpcContext, input: WindowActionInput): void { method quitAndInstall (line 119) | quitAndInstall(_context: IpcContext): void { method readClipboard (line 124) | readClipboard(_context: IpcContext): string { method search (line 129) | async search(context: IpcContext, input: SearchInput): Promise { method getAppPath (line 175) | getAppPath(_context: IpcContext): string { method resolveAppAsarPath (line 180) | resolveAppAsarPath(context: IpcContext, input: string): string { method readyToShowMainWindow (line 193) | readyToShowMainWindow(_context: IpcContext) { method openCacheFolder (line 203) | openCacheFolder(_context: IpcContext): void { method getCacheLimit (line 209) | getCacheLimit(_context: IpcContext): number { method clearCache (line 214) | async clearCache(_context: IpcContext): Promise { method limitCacheSize (line 237) | limitCacheSize(_context: IpcContext, input: number): void { method revealLogFile (line 246) | revealLogFile(_context: IpcContext) { method getCacheSize (line 251) | getCacheSize(_context: IpcContext) { FILE: apps/desktop/layer/main/src/ipc/services/auth.ts class AuthService (line 14) | class AuthService extends IpcService { method applySessionToken (line 17) | private async applySessionToken(token: string): Promise { method clearSessionToken (line 50) | private async clearSessionToken(): Promise { method requestCredentialAuth (line 65) | private async requestCredentialAuth( method sessionChanged (line 109) | async sessionChanged(_context: IpcContext): Promise { method signOut (line 120) | async signOut(_context: IpcContext): Promise { method signOutRemote (line 130) | async signOutRemote(_context: IpcContext, token?: string): Promise { method installCli (line 48) | async installCli(_context: IpcContext): Promise<{ success: boolean; er... method uninstallCli (line 70) | async uninstallCli(_context: IpcContext): Promise<{ success: boolean; ... FILE: apps/desktop/layer/main/src/ipc/services/debug.ts type InspectElementInput (line 4) | interface InspectElementInput { class DebugService (line 9) | class DebugService extends IpcService { method inspectElement (line 13) | inspectElement(context: IpcContext, input: InspectElementInput): void { FILE: apps/desktop/layer/main/src/ipc/services/dock.ts class PollingManager (line 8) | class PollingManager { method startPolling (line 12) | async startPolling(pollingFn: () => Promise, interval: number): ... method stopPolling (line 37) | stopPolling(): void { method active (line 43) | get active(): boolean { method sleepWithAbortSignal (line 47) | private async sleepWithAbortSignal(ms: number, signal: AbortSignal): P... class DockService (line 59) | class DockService extends IpcService { method pollingUpdateUnreadCount (line 65) | async pollingUpdateUnreadCount(): Promise { method cancelPollingUpdateUnreadCount (line 73) | async cancelPollingUpdateUnreadCount(): Promise { method updateUnreadCount (line 78) | async updateUnreadCount(): Promise { method setDockBadge (line 85) | setDockBadge(_context: IpcContext, count: number): void { FILE: apps/desktop/layer/main/src/ipc/services/integration.ts constant INVALID_CHAR_REGEX (line 15) | const INVALID_CHAR_REGEX = /[\u0000-\u001F"#$%&*+,:;<=>?[\]^`{|}\u007F]/g constant DRIVE_LETTER_REGEX (line 16) | const DRIVE_LETTER_REGEX = /^[a-z]:/i function sanitizeFileName (line 18) | function sanitizeFileName(name: string): string { type SaveToEagleInput (line 28) | interface SaveToEagleInput { type LoginToQBittorrentInput (line 33) | interface LoginToQBittorrentInput { type CheckQBittorrentAuthInput (line 39) | interface CheckQBittorrentAuthInput { type AddMagnetInput (line 43) | interface AddMagnetInput { type CustomFetchInput (line 48) | interface CustomFetchInput { class IntegrationService (line 56) | class IntegrationService extends IpcService { method saveToObsidian (line 60) | async saveToObsidian( method saveToEagle (line 104) | async saveToEagle(context: IpcContext, input: SaveToEagleInput): Promi... method loginToQBittorrent (line 128) | async loginToQBittorrent(context: IpcContext, input: LoginToQBittorren... method checkQBittorrentAuth (line 161) | async checkQBittorrentAuth(context: IpcContext, input: CheckQBittorren... method addMagnet (line 181) | async addMagnet(context: IpcContext, input: AddMagnetInput) { method customFetch (line 207) | async customFetch(context: IpcContext, input: CustomFetchInput) { method openURLScheme (line 350) | async openURLScheme(context: IpcContext, scheme: string) { FILE: apps/desktop/layer/main/src/ipc/services/menu.ts type SerializableMenuItem (line 6) | type SerializableMenuItem = Omit { FILE: apps/desktop/layer/main/src/ipc/services/reader.ts type ReadabilityInput (line 16) | interface ReadabilityInput { type TtsInput (line 21) | interface TtsInput { type DetectCodeStringLanguageInput (line 27) | interface DetectCodeStringLanguageInput { class ReaderService (line 31) | class ReaderService extends IpcService { method readability (line 35) | async readability(_context: IpcContext, input: ReadabilityInput) { method tts (line 47) | async tts(context: IpcContext, input: TtsInput): Promise { method getVoices (line 87) | async getVoices(context: IpcContext) { method detectCodeStringLanguage (line 104) | async detectCodeStringLanguage( FILE: apps/desktop/layer/main/src/ipc/services/setting.ts type SetLoginItemSettingsInput (line 15) | interface SetLoginItemSettingsInput { class SettingService (line 22) | class SettingService extends IpcService { method getLoginItemSettings (line 26) | getLoginItemSettings(_context: IpcContext): Electron.LoginItemSettings { method setLoginItemSettings (line 31) | setLoginItemSettings(_context: IpcContext, input: SetLoginItemSettings... method openSettingWindow (line 36) | openSettingWindow(_context: IpcContext): void { method getSystemFonts (line 41) | async getSystemFonts(_context: IpcContext): Promise { method getAppearance (line 47) | getAppearance(_context: IpcContext): "light" | "dark" | "system" { method setAppearance (line 52) | setAppearance(_context: IpcContext, appearance: "light" | "dark" | "sy... method getMinimizeToTray (line 58) | getMinimizeToTray(_context: IpcContext): boolean { method setMinimizeToTray (line 63) | setMinimizeToTray(_context: IpcContext, minimize: boolean): void { method getProxyConfig (line 68) | getProxyConfig(_context: IpcContext) { method setProxyConfig (line 74) | setProxyConfig(_context: IpcContext, config: string) { method getMessagingToken (line 81) | getMessagingToken(_context: IpcContext): string | null { FILE: apps/desktop/layer/main/src/lib/auth-cookie-migration.ts constant LEGACY_PROD_API_URL (line 7) | const LEGACY_PROD_API_URL = "https://api.follow.is" constant BETTER_AUTH_SESSION_DATA_COOKIE_NAME (line 8) | const BETTER_AUTH_SESSION_DATA_COOKIE_NAME = "better-auth.session_data" FILE: apps/desktop/layer/main/src/lib/cli-session-sync.ts constant CLI_NPM_PACKAGE_NAME (line 15) | const CLI_NPM_PACKAGE_NAME = "folocli" constant CLI_NPX_PACKAGE_SPEC (line 16) | const CLI_NPX_PACKAGE_SPEC = `${CLI_NPM_PACKAGE_NAME}@latest` constant CLI_CONFIG_DIR (line 17) | const CLI_CONFIG_DIR = join(homedir(), ".folo") constant CLI_CONFIG_PATH (line 18) | const CLI_CONFIG_PATH = join(CLI_CONFIG_DIR, "config.json") type CliConfig (line 21) | interface CliConfig { FILE: apps/desktop/layer/main/src/lib/download.ts type DownloadOptions (line 12) | interface DownloadOptions { function downloadFile (line 20) | async function downloadFile(url: string, dest: string) { function downloadFileWithProgress (line 33) | async function downloadFileWithProgress(options: DownloadOptions): Promi... FILE: apps/desktop/layer/main/src/lib/proxy.ts constant URL_SCHEME (line 37) | const URL_SCHEME = new Set(["http:", "https:", "ftp:", "socks:", "socks4... constant BYPASS_RULES (line 59) | const BYPASS_RULES = [""].join(";") FILE: apps/desktop/layer/main/src/lib/store.ts type StoreData (line 5) | type StoreData = { type StoreKey (line 23) | enum StoreKey { FILE: apps/desktop/layer/main/src/lib/tray.ts constant DEFAULT_MINIMIZE_TO_TRAY (line 116) | const DEFAULT_MINIMIZE_TO_TRAY = false FILE: apps/desktop/layer/main/src/lib/utils.ts function refreshBound (line 6) | function refreshBound(window: BrowserWindow, timeout = 0) { FILE: apps/desktop/layer/main/src/logger.ts function getLogFilePath (line 7) | function getLogFilePath() { function revealLogFile (line 11) | async function revealLogFile() { FILE: apps/desktop/layer/main/src/manager/app.ts class AppManagerStatic (line 25) | class AppManagerStatic { method getInstance (line 28) | public static getInstance(): AppManagerStatic { method init (line 35) | public init() { method onReady (line 40) | private onReady() { method registerProtocols (line 65) | private registerProtocols() { method setupAppVisuals (line 81) | private setupAppVisuals() { method setupSystemConfigs (line 87) | private setupSystemConfigs() { method runCronJobs (line 94) | private runCronJobs() { method registerPushNotifications (line 99) | private async registerPushNotifications() { method registerMenuAndContextMenu (line 177) | public registerMenuAndContextMenu() { FILE: apps/desktop/layer/main/src/manager/bootstrap.ts class BootstrapManager (line 31) | class BootstrapManager { method start (line 32) | public static start() { method registerAppEvents (line 44) | private static registerAppEvents() { method installDevTools (line 166) | private static installDevTools() { method handleOpen (line 188) | private static async handleOpen(url: string) { FILE: apps/desktop/layer/main/src/manager/lifecycle.ts class LifecycleManagerStatic (line 5) | class LifecycleManagerStatic { method constructor (line 8) | private constructor() { method getInstance (line 12) | public static getInstance(): LifecycleManagerStatic { method registerListeners (line 19) | private registerListeners() { method onWindowAllClosed (line 24) | private onWindowAllClosed() { method onActivate (line 30) | private onActivate() { method onReady (line 36) | public onReady(callback: () => void) { FILE: apps/desktop/layer/main/src/manager/window.ts class WindowManagerStatic (line 23) | class WindowManagerStatic { method mainWindowDefaultSize (line 24) | static get mainWindowDefaultSize() { method bindEvents (line 77) | private bindEvents(window: BrowserWindow) { method setupDevToolsFont (line 181) | private setupDevToolsFont(window: BrowserWindow) { method bindWindowStateEvents (line 218) | private bindWindowStateEvents(window: BrowserWindow) { method bindMainWindowCloseHandlers (line 241) | private bindMainWindowCloseHandlers(window: BrowserWindow) { method getPlatformSpecificWindowConfig (line 288) | private getPlatformSpecificWindowConfig(): Partial { method setContext (line 31) | static setContext(context: FollowProviderContext) { method clearContext (line 35) | static clearContext() { method getContext (line 39) | static getContext() { method constructor (line 43) | constructor( method getLatestVersion (line 51) | async getLatestVersion(): Promise { method resolveFiles (line 56) | resolveFiles(updateInfo: UpdateInfo): Array { method buildUpdateInfo (line 63) | private buildUpdateInfo(context: FollowProviderContext): UpdateInfo { method mapFiles (line 104) | private mapFiles(files: PlatformUpdate["files"]): UpdateFileInfo[] { method mapFile (line 112) | private mapFile(file: PlatformUpdateFile): UpdateFileInfo | null { method safeParseUrl (line 130) | private safeParseUrl(value: string): URL | null { method ensureContext (line 139) | private async ensureContext(): Promise { method fetchContext (line 148) | private async fetchContext(): Promise { method pickPlatform (line 170) | private pickPlatform(appDecision: AppUpdate): PlatformUpdate | null { method resolvePlatformCandidates (line 185) | private resolvePlatformCandidates(): string[] { FILE: apps/desktop/layer/main/src/updater/hot-updater.ts type RendererManifest (line 21) | type RendererManifest = RendererUpdate & { type RendererEligibilityStatus (line 26) | enum RendererEligibilityStatus { type RendererEligibilityResult (line 33) | interface RendererEligibilityResult { class RendererHotUpdater (line 39) | class RendererHotUpdater { method extractManifest (line 44) | extractManifest(payload: LatestReleasePayload | null): RendererManifes... method extractManifestFromRendererUpdate (line 55) | extractManifestFromRendererUpdate(renderer: RendererUpdate | null): Re... method evaluateManifest (line 59) | evaluateManifest(manifest: RendererManifest | null): RendererEligibili... method toManifest (line 113) | private toManifest(renderer: RendererUpdate | null): RendererManifest ... method applyManifest (line 140) | async applyManifest(manifest: RendererManifest): Promise { method getCurrentManifest (line 183) | getCurrentManifest(): RendererManifest | null { method cleanup (line 201) | async cleanup(): Promise { method loadDynamicEntry (line 229) | loadDynamicEntry() { method downloadArchive (line 243) | private async downloadArchive(manifest: RendererManifest) { method writeManifest (line 264) | private async writeManifest(manifest: RendererManifest) { FILE: apps/desktop/layer/main/src/updater/index.ts type UpdateCheckOptions (line 29) | type UpdateCheckOptions = { type UpdateCheckResult (line 33) | type UpdateCheckResult = { class FollowUpdater (line 38) | class FollowUpdater { method constructor (line 45) | constructor( method register (line 52) | register() { method checkForUpdates (line 100) | async checkForUpdates(options: UpdateCheckOptions = {}): Promise { method quitAndInstall (line 168) | quitAndInstall() { method resolvePlatformCandidates (line 179) | private resolvePlatformCandidates() { method pickPlatformUpdate (line 198) | private pickPlatformUpdate( method handleAppDecision (line 219) | private async handleAppDecision(payload: LatestReleasePayload): Promis... method handleDistributionAppDecision (line 265) | private async handleDistributionAppDecision(): Promise, e: MouseEvent |... type MenuItemType (line 133) | enum MenuItemType { class MenuItemSeparator (line 180) | class MenuItemSeparator { method constructor (line 182) | constructor(public hide = false) {} type BaseMenuItemTextConfig (line 187) | type BaseMenuItemTextConfig = { class BaseMenuItemText (line 199) | class BaseMenuItemText { method constructor (line 204) | constructor(private configs: BaseMenuItemTextConfig) { method label (line 210) | public get label() { method click (line 214) | public get click() { method onClick (line 218) | public get onClick() { method icon (line 221) | public get icon() { method shortcut (line 225) | public get shortcut() { method disabled (line 229) | public get disabled() { method checked (line 233) | public get checked() { method supportMultipleSelection (line 237) | public get supportMultipleSelection() { method requiresLogin (line 241) | public get requiresLogin() { type MenuItemTextConfig (line 246) | type MenuItemTextConfig = Prettify< class MenuItemText (line 253) | class MenuItemText extends BaseMenuItemText { method constructor (line 255) | constructor(protected config: MenuItemTextConfig) { method submenu (line 261) | public get submenu() { method hide (line 265) | public get hide() { method extend (line 269) | extend(config: Partial) { constant MENU_ITEM_SEPARATOR (line 276) | const MENU_ITEM_SEPARATOR = MenuItemSeparator.default FILE: apps/desktop/layer/renderer/src/atoms/corner-player.ts type CornerPlayerAtomValue (line 6) | type CornerPlayerAtomValue = { FILE: apps/desktop/layer/renderer/src/atoms/network.ts type NetworkStatus (line 5) | enum NetworkStatus { FILE: apps/desktop/layer/renderer/src/atoms/player.ts type PlayerAtomValue (line 10) | type PlayerAtomValue = { method get (line 72) | get() { method mount (line 75) | mount(v: Omit { type PopoverState (line 16) | type PopoverState = FILE: apps/desktop/layer/renderer/src/atoms/readability.ts type ReadabilityStatus (line 10) | enum ReadabilityStatus { FILE: apps/desktop/layer/renderer/src/atoms/server-configs.ts type ServerConfigs (line 19) | type ServerConfigs = ExtractResponseData type PaymentPlan (line 20) | type PaymentPlan = ServerConfigs["PAYMENT_PLAN_LIST"][number] type PaymentFeature (line 21) | type PaymentFeature = PaymentPlan["limit"] FILE: apps/desktop/layer/renderer/src/atoms/settings/ai.ts type WebAISettings (line 17) | interface WebAISettings extends AISettings { type ServerShortcutConfig (line 22) | type ServerShortcutConfig = ExtractResponseData(DEFAULT_SHORTCU... type AIChatPanelStyle (line 141) | enum AIChatPanelStyle { type FloatingPanelState (line 153) | interface FloatingPanelState { constant DEFAULT_FLOATING_PANEL_WIDTH (line 160) | const DEFAULT_FLOATING_PANEL_WIDTH = 500 constant DEFAULT_FLOATING_PANEL_HEIGHT (line 161) | const DEFAULT_FLOATING_PANEL_HEIGHT = clamp(window.innerHeight * 0.9, 60... constant DEFAULT_FLOATING_PANEL_X (line 162) | const DEFAULT_FLOATING_PANEL_X = window.innerWidth - DEFAULT_FLOATING_PA... constant DEFAULT_FLOATING_PANEL_Y (line 163) | const DEFAULT_FLOATING_PANEL_Y = window.innerHeight - DEFAULT_FLOATING_P... FILE: apps/desktop/layer/renderer/src/atoms/settings/general.ts constant DEFAULT_ACTION_LANGUAGE (line 10) | const DEFAULT_ACTION_LANGUAGE = "default" function useActionLanguage (line 61) | function useActionLanguage() { function getActionLanguage (line 69) | function getActionLanguage() { function useHideAllReadSubscriptions (line 76) | function useHideAllReadSubscriptions() { FILE: apps/desktop/layer/renderer/src/atoms/updater.ts type UpdaterStatus (line 6) | type UpdaterStatus = "ready" type UpdaterStatusKind (line 7) | type UpdaterStatusKind = "app" | "renderer" | "pwa" | "distribution" type BaseUpdaterStatus (line 9) | type BaseUpdaterStatus = { type AppUpdaterStatus (line 15) | type AppUpdaterStatus = BaseUpdaterStatus<"app"> type RendererUpdaterStatus (line 17) | type RendererUpdaterStatus = BaseUpdaterStatus<"renderer"> type PwaUpdaterStatus (line 19) | type PwaUpdaterStatus = BaseUpdaterStatus<"pwa"> type DistributionUpdaterStatus (line 21) | type DistributionUpdaterStatus = BaseUpdaterStatus<"distribution"> & { type UpdaterStatusAtom (line 28) | type UpdaterStatusAtom = FILE: apps/desktop/layer/renderer/src/components/common/AppErrorBoundary.tsx type AppErrorBoundaryProps (line 10) | interface AppErrorBoundaryProps extends PropsWithChildren { type ErrorFallbackProps (line 38) | type ErrorFallbackProps = Parameters["0"] type AppErrorFallbackProps (line 39) | type AppErrorFallbackProps = ErrorFallbackProps & {} FILE: apps/desktop/layer/renderer/src/components/common/ErrorBoundary.tsx type ErrorFallbackProps (line 6) | type ErrorFallbackProps = Omit & type FallbackRender (line 10) | type FallbackRender = (props: ErrorFallbackProps) => ReactNode type ErrorBoundaryProps (line 12) | interface ErrorBoundaryProps extends PropsWithChildren { FILE: apps/desktop/layer/renderer/src/components/common/ErrorElement.tsx function ErrorElement (line 14) | function ErrorElement() { FILE: apps/desktop/layer/renderer/src/components/common/ErrorTooltip.tsx function ErrorTooltip (line 10) | function ErrorTooltip({ FILE: apps/desktop/layer/renderer/src/components/common/ExPromise.tsx constant NOT_RESOLVED (line 4) | const NOT_RESOLVED = Symbol("NOT_RESOLVED") FILE: apps/desktop/layer/renderer/src/components/common/Focusable.tsx type BizFocusableProps (line 6) | interface BizFocusableProps extends Omit { FILE: apps/desktop/layer/renderer/src/components/common/ImpressionTracker.tsx type ImpressionProps (line 6) | type ImpressionProps = { function ImpressionView (line 14) | function ImpressionView( function ImpressionViewImpl (line 24) | function ImpressionViewImpl(props: Impre... FILE: apps/desktop/layer/renderer/src/components/common/LoadMoreIndicator.tsx method onChange (line 9) | onChange(inView) { FILE: apps/desktop/layer/renderer/src/components/common/Motion.tsx type WithLCPOptimization (line 9) | type WithLCPOptimization

= P & { lcpOptimization?: boolean } type MotionProxy (line 11) | type MotionProxy = { method get (line 19) | get(target, p: string) { FILE: apps/desktop/layer/renderer/src/components/common/NotFound.tsx class AccessNotFoundError (line 13) | class AccessNotFoundError extends Error { method constructor (line 14) | constructor( method toString (line 23) | override toString() { FILE: apps/desktop/layer/renderer/src/components/common/ReloadPrompt.tsx function ReloadPrompt (line 9) | function ReloadPrompt() { function registerPeriodicSync (line 45) | function registerPeriodicSync(period: number, swUrl: string, r: ServiceW... FILE: apps/desktop/layer/renderer/src/components/common/ShadowDOM.tsx function getLinkedStaticStyleSheets (line 146) | function getLinkedStaticStyleSheets() { FILE: apps/desktop/layer/renderer/src/components/common/SharePanel.tsx type SharePanelProps (line 11) | interface SharePanelProps { type ShareOption (line 15) | interface ShareOption { type SocialShareOption (line 24) | interface SocialShareOption { FILE: apps/desktop/layer/renderer/src/components/common/withAppErrorBoundary.tsx type WithErrorBoundaryOptions (line 7) | interface WithErrorBoundaryOptions { function withAppErrorBoundary (line 18) | function withAppErrorBoundary

( FILE: apps/desktop/layer/renderer/src/components/errors/EntryNotFound.tsx class EntryNotFound (line 47) | class EntryNotFound extends CustomSafeError { method constructor (line 48) | constructor() { FILE: apps/desktop/layer/renderer/src/components/errors/FeedNotFound.tsx class FeedNotFound (line 46) | class FeedNotFound extends CustomSafeError { method constructor (line 47) | constructor() { FILE: apps/desktop/layer/renderer/src/components/errors/enum.ts type ErrorComponentType (line 1) | enum ErrorComponentType { FILE: apps/desktop/layer/renderer/src/components/ui/ai-summary-card/AISummaryCardBase.tsx type AISummaryCardBaseProps (line 14) | interface AISummaryCardBaseProps { FILE: apps/desktop/layer/renderer/src/components/ui/auto-completion/AutoCompletion.tsx type Suggestion (line 11) | type Suggestion = { type AutocompleteProps (line 15) | interface AutocompleteProps extends React.InputHTMLAttributes = { FILE: apps/desktop/layer/renderer/src/components/ui/button/AnimatedCommandButton.tsx type AnimatedCommandButtonProps (line 31) | interface AnimatedCommandButtonProps extends VariantProps) { constant MODIFIER_KEYS_MAP (line 101) | const MODIFIER_KEYS_MAP = { constant MODIFIER_KEYS_SET (line 108) | const MODIFIER_KEYS_SET = new Set(Object.values(MODIFIER_KEYS_MAP)) constant F_KEY_REGEX (line 110) | const F_KEY_REGEX = /^F(?:[1-9]|1[0-2])$/ FILE: apps/desktop/layer/renderer/src/components/ui/markdown/HTML.tsx type HTMLProps (line 23) | type HTMLProps = { constant HTML (line 98) | const HTML = memo(HTMLImpl) FILE: apps/desktop/layer/renderer/src/components/ui/markdown/components/Toc.tsx type ITocItem (line 21) | interface ITocItem { type TocProps (line 29) | interface TocProps { type TocRef (line 36) | interface TocRef { type TocContainerProps (line 248) | interface TocContainerProps { type TocHoverCardProps (line 256) | interface TocHoverCardProps extends TocContainerProps {} FILE: apps/desktop/layer/renderer/src/components/ui/markdown/components/TocItem.tsx type ITocItem (line 6) | interface ITocItem { type TocItemProps (line 15) | interface TocItemProps { FILE: apps/desktop/layer/renderer/src/components/ui/markdown/components/hooks.tsx type DebouncedFuncLeading (line 64) | type DebouncedFuncLeading any> = T & { FILE: apps/desktop/layer/renderer/src/components/ui/markdown/types.ts type MarkdownImage (line 1) | type MarkdownImage = { type MarkdownRenderActions (line 9) | interface MarkdownRenderActions { FILE: apps/desktop/layer/renderer/src/components/ui/media/Media.tsx type BaseProps (line 19) | type BaseProps = { type MediaProps (line 31) | type MediaProps = BaseProps & FILE: apps/desktop/layer/renderer/src/components/ui/media/MediaInfoRecord.tsx type MediaInfoRecord (line 1) | type MediaInfoRecord = Record FILE: apps/desktop/layer/renderer/src/components/ui/media/PreviewMediaContent.tsx constant GLASS_BUTTON_CLASS (line 207) | const GLASS_BUTTON_CLASS = tw`group-hover/left:opacity-100 opacity-0` type PreviewMediaProps (line 259) | interface PreviewMediaProps extends EntryMedia { FILE: apps/desktop/layer/renderer/src/components/ui/media/SwipeMedia.tsx function SwipeMedia (line 16) | function SwipeMedia({ FILE: apps/desktop/layer/renderer/src/components/ui/media/VideoPlayer.tsx type VideoPlayerProps (line 31) | type VideoPlayerProps = { type VideoPlayerRef (line 37) | type VideoPlayerRef = { type VideoPlayerContextValue (line 53) | interface VideoPlayerContextValue { method onClick (line 102) | onClick(e) { method onDoubleClick (line 107) | onDoubleClick(e) { FILE: apps/desktop/layer/renderer/src/components/ui/modal/helper/useAsyncModal.tsx type AsyncModalOptions (line 13) | type AsyncModalOptions = { FILE: apps/desktop/layer/renderer/src/components/ui/modal/inspire/PeekModal.tsx type PeekModalProps (line 14) | interface PeekModalProps { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/AsyncModalContent.tsx type UseAsyncFetcher (line 12) | interface UseAsyncFetcher { type AsyncModalContentProps (line 18) | interface AsyncModalContentProps { function useCountdown (line 24) | function useCountdown(durationInSeconds: number): boolean { function AsyncModalContent (line 38) | function AsyncModalContent({ FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/bus.ts type ModalDisposeEvent (line 8) | type ModalDisposeEvent = { type ModalRePresentEvent (line 12) | type ModalRePresentEvent = { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/constants.ts constant MODAL_STACK_Z_INDEX (line 27) | const MODAL_STACK_Z_INDEX = 1001 FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/context.tsx type CurrentModalContentProps (line 7) | type CurrentModalContentProps = ModalActionsInternal & { type ModalContentComponent (line 36) | type ModalContentComponent = FC type ModalActionsInternal (line 37) | type ModalActionsInternal = { type Disposer (line 43) | type Disposer = () => void type PresentModalContextInternalFn (line 44) | type PresentModalContextInternalFn = (props: ModalProps & { id?: string ... FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/custom-modal.tsx type ModalTemplateType (line 29) | type ModalTemplateType = { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/declarative-modal.tsx type DeclarativeModalProps (line 12) | interface DeclarativeModalProps extends Omit { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/helper.tsx function resizableOnly (line 10) | function resizableOnly(...positions: (keyof Enable)[]) { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/hooks.tsx method getTopModalStack (line 32) | getTopModalStack() { method getModalStackById (line 35) | getModalStackById(id: string) { method dismiss (line 38) | dismiss(id: string) { method dismissTop (line 43) | dismissTop() { method dismissAll (line 49) | dismissAll() { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/internal/use-animate.ts type ModalAnimateControls (line 10) | interface ModalAnimateControls { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/provider.tsx type Window (line 17) | interface Window { FILE: apps/desktop/layer/renderer/src/components/ui/modal/stacked/types.tsx type ModalOverlayOptions (line 5) | interface ModalOverlayOptions { type ModalProps (line 9) | interface ModalProps { type DialogInstance (line 37) | interface DialogInstance { FILE: apps/desktop/layer/renderer/src/components/ux/pull-to-refresh/index.tsx type PullToRefreshProps (line 7) | interface PullToRefreshProps { constant THRESHOLD (line 13) | const THRESHOLD = 80 constant MAX_PULL_DISTANCE (line 14) | const MAX_PULL_DISTANCE = 120 function PullToRefresh (line 16) | function PullToRefresh({ FILE: apps/desktop/layer/renderer/src/components/ux/transition/icon.tsx type TransitionType (line 8) | type TransitionType = { type IconTransitionProps (line 14) | type IconTransitionProps = { FILE: apps/desktop/layer/renderer/src/constants/app.tsx constant FEED_COLLECTION_LIST (line 4) | const FEED_COLLECTION_LIST = "collections" constant QUERY_PERSIST_KEY (line 6) | const QUERY_PERSIST_KEY = getStorageNS("REACT_QUERY_OFFLINE_CACHE") constant I18N_LOCALE_KEY (line 7) | const I18N_LOCALE_KEY = getStorageNS("I18N_LOCALE") constant ROUTE_VIEW_ALL (line 10) | const ROUTE_VIEW_ALL = "all" constant ROUTE_FEED_PENDING (line 11) | const ROUTE_FEED_PENDING = "all" constant ROUTE_ENTRY_PENDING (line 12) | const ROUTE_ENTRY_PENDING = "pending" constant ROUTE_FEED_IN_FOLDER (line 13) | const ROUTE_FEED_IN_FOLDER = "folder-" constant ROUTE_FEED_IN_LIST (line 14) | const ROUTE_FEED_IN_LIST = "list-" constant ROUTE_FEED_IN_INBOX (line 15) | const ROUTE_FEED_IN_INBOX = "inbox-" constant ROUTE_TIMELINE_OF_VIEW (line 16) | const ROUTE_TIMELINE_OF_VIEW = "view-" FILE: apps/desktop/layer/renderer/src/constants/copy.ts constant COPY_MAP (line 8) | const COPY_MAP = { FILE: apps/desktop/layer/renderer/src/constants/dom.ts constant ENTRY_CONTENT_RENDER_CONTAINER_ID (line 1) | const ENTRY_CONTENT_RENDER_CONTAINER_ID = "follow-entry-render" constant LOGO_MOBILE_ID (line 3) | const LOGO_MOBILE_ID = "follow-logo-mobile" constant ENTRY_COLUMN_LIST_SCROLLER_ID (line 5) | const ENTRY_COLUMN_LIST_SCROLLER_ID = "entry-column-scroller" constant APP_GRID_CONTAINER_ID (line 7) | const APP_GRID_CONTAINER_ID = "follow-app-grid-container" constant ROOT_CONTAINER_ID (line 9) | const ROOT_CONTAINER_ID = "follow-root-container" FILE: apps/desktop/layer/renderer/src/constants/env.ts constant WEB_URL (line 3) | const WEB_URL = env.VITE_WEB_URL FILE: apps/desktop/layer/renderer/src/constants/hotkeys.ts type HotkeyScope (line 1) | enum HotkeyScope { FILE: apps/desktop/layer/renderer/src/errors/CustomSafeError.ts class CustomSafeError (line 5) | class CustomSafeError extends Error { method constructor (line 6) | constructor(message: string, toast?: boolean) { FILE: apps/desktop/layer/renderer/src/global.d.ts type Id (line 12) | type Id = string type FeedId (line 13) | type FeedId = Id type EntryId (line 14) | type EntryId = Id type Window (line 21) | interface Window { type I18nKeys (line 33) | type I18nKeys = OmitStringType[0]> type I18nKeysForSettings (line 34) | type I18nKeysForSettings = OmitStringType[0]> type I18nKeysForShortcuts (line 35) | type I18nKeysForShortcuts = OmitStringType... type I18nKeysForAi (line 36) | type I18nKeysForAi = OmitStringType[0]> FILE: apps/desktop/layer/renderer/src/hooks/biz/useAsRead.ts function useEntryIsRead (line 8) | function useEntryIsRead(entryId?: string) { FILE: apps/desktop/layer/renderer/src/hooks/biz/useDiscoverRSSHubRoute.tsx type ResponseType (line 15) | type ResponseType = Awaited... FILE: apps/desktop/layer/renderer/src/hooks/biz/useEntryActions.tsx type EntryActionMenuItemConfig (line 71) | interface EntryActionMenuItemConfig { class EntryActionMenuItem (line 83) | class EntryActionMenuItem extends MenuItemText { method constructor (line 86) | constructor(config: EntryActionMenuItemConfig) { method id (line 103) | public get id() { method active (line 107) | public get active() { method notice (line 111) | public get notice() { method entryId (line 115) | public get entryId() { method extend (line 119) | public override extend(config: Partial) { class EntryActionDropdownItem (line 127) | class EntryActionDropdownItem extends MenuItemText { method constructor (line 131) | constructor(config: EntryActionMenuItemConfig & { children?: EntryActi... method id (line 149) | public get id() { method active (line 153) | public get active() { method notice (line 157) | public get notice() { method entryId (line 161) | public get entryId() { method hasChildren (line 165) | public get hasChildren() { method enabledChildren (line 169) | public get enabledChildren() { method addChild (line 173) | public addChild(child: EntryActionMenuItem) { method removeChild (line 177) | public removeChild(childId: string) { method extend (line 181) | public override extend( type EntryActionItem (line 191) | type EntryActionItem = EntryActionMenuItem | EntryActionDropdownItem | M... constant HIDE_ACTIONS_IN_ENTRY_CONTEXT_MENU (line 220) | const HIDE_ACTIONS_IN_ENTRY_CONTEXT_MENU: FollowCommandId[] = [ constant HIDE_ACTIONS_IN_ENTRY_TOOLBAR_ACTIONS (line 234) | const HIDE_ACTIONS_IN_ENTRY_TOOLBAR_ACTIONS: FollowCommandId[] = [ FILE: apps/desktop/layer/renderer/src/hooks/biz/useEntryContextMenu.ts function useEntryContextMenu (line 16) | function useEntryContextMenu({ FILE: apps/desktop/layer/renderer/src/hooks/biz/useFeature.ts type DebugFeatureValue (line 6) | interface DebugFeatureValue { type FeatureKey (line 12) | type FeatureKey = keyof typeof featureConfigMap FILE: apps/desktop/layer/renderer/src/hooks/biz/useFeedActions.tsx method click (line 148) | click() { method click (line 176) | click() { method click (line 199) | click() { method click (line 213) | click() { method onError (line 452) | async onError() { method onError (line 472) | async onError() { FILE: apps/desktop/layer/renderer/src/hooks/biz/useFollow.tsx type FollowOptions (line 15) | interface FollowOptions { FILE: apps/desktop/layer/renderer/src/hooks/biz/useNavigateEntry.ts type NavigateEntryOptions (line 25) | type NavigateEntryOptions = Partial<{ type ParsedNavigateEntryOptions (line 52) | type ParsedNavigateEntryOptions = { function getNavigateEntryPath (line 97) | function getNavigateEntryPath(options: NavigateEntryOptions | ParsedNavi... FILE: apps/desktop/layer/renderer/src/hooks/biz/useRenderStyle.tsx function useRenderStyle (line 5) | function useRenderStyle({ FILE: apps/desktop/layer/renderer/src/hooks/biz/useRouteParams.ts type BizRouteParams (line 33) | interface BizRouteParams { constant VIEW_SLUG_BY_VIEW (line 46) | const VIEW_SLUG_BY_VIEW: Record = { constant VIEW_PARAM_ALIAS_MAP (line 56) | const VIEW_PARAM_ALIAS_MAP: Record = Object.entrie... constant FEED_VIEW_VALUES (line 67) | const FEED_VIEW_VALUES = new Set( function parseView (line 77) | function parseView(input: string | undefined): FeedViewType | undefined { FILE: apps/desktop/layer/renderer/src/hooks/biz/useSubscriptionActions.tsx method onMutate (line 74) | onMutate(variables) { FILE: apps/desktop/layer/renderer/src/hooks/biz/useTimelineList.ts constant ALL_TIMELINE_IDS (line 11) | const ALL_TIMELINE_IDS = getViewList({ includeAll: true }).map((view) => FILE: apps/desktop/layer/renderer/src/hooks/common/useBizQuery.ts type SafeReturnType (line 9) | type SafeReturnType = T extends (...args: any[]) => infer R ? R : never type CombinedObject (line 11) | type CombinedObject = T & U function useAuthQuery (line 12) | function useAuthQuery< FILE: apps/desktop/layer/renderer/src/hooks/common/useContextMenu.tsx type UseContextMenuOptions (line 3) | interface UseContextMenuOptions { FILE: apps/desktop/layer/renderer/src/hooks/common/useI18n.ts function useI18n (line 9) | function useI18n() { FILE: apps/desktop/layer/renderer/src/hooks/common/usePreventOverscrollBounce.ts constant PREVENT_SPRING_CLASS (line 3) | const PREVENT_SPRING_CLASS = "prevent-spring" FILE: apps/desktop/layer/renderer/src/hooks/common/useRecaptchaToken.ts type FoloE2EWindow (line 4) | type FoloE2EWindow = Window & FILE: apps/desktop/layer/renderer/src/i18n.ts class LocaleCache (line 20) | class LocaleCache { method getKey (line 22) | private getKey(lang: string) { method get (line 25) | get(lang: string) { method set (line 31) | set(lang: string) { type CustomEvent (line 97) | interface CustomEvent { FILE: apps/desktop/layer/renderer/src/initialize/global-shortcuts.ts type ShortcutDefinition (line 4) | interface ShortcutDefinition { FILE: apps/desktop/layer/renderer/src/initialize/history.ts type History (line 10) | interface History { method get (line 23) | get() { method set (line 26) | set(value) { method get (line 55) | get() { method get (line 83) | get() { FILE: apps/desktop/layer/renderer/src/initialize/index.ts type Window (line 24) | interface Window { method onWindowClose (line 69) | onWindowClose() { method onWindowShow (line 72) | onWindowShow() { FILE: apps/desktop/layer/renderer/src/initialize/migrates/helper.ts type DefineMigrationOptions (line 1) | interface DefineMigrationOptions { FILE: apps/desktop/layer/renderer/src/initialize/migrates/index.ts type Window (line 12) | interface Window { FILE: apps/desktop/layer/renderer/src/initialize/migrates/v/v1.ts function hasSettingsChanged (line 12) | function hasSettingsChanged( FILE: apps/desktop/layer/renderer/src/lib/avatar-upload.ts function uploadAvatarBlob (line 12) | async function uploadAvatarBlob(blob: Blob): Promise { FILE: apps/desktop/layer/renderer/src/lib/client-session.ts constant CLIENT_ID_KEY (line 4) | const CLIENT_ID_KEY = getStorageNS("client_id") constant SESSION_ID_KEY (line 5) | const SESSION_ID_KEY = getStorageNS("session_id") constant AUTH_SESSION_TOKEN_KEY (line 6) | const AUTH_SESSION_TOKEN_KEY = getStorageNS("auth_session_token") FILE: apps/desktop/layer/renderer/src/lib/defineQuery.ts type ValidRecipeReturnDraftType (line 7) | type ValidRecipeReturnDraftType = ReturnType> type DefinedQuery (line 9) | type DefinedQuery = Readonly<{ type DefinedQueryOptions (line 49) | type DefinedQueryOptions = { function defineQuery (line 72) | function defineQuery< FILE: apps/desktop/layer/renderer/src/lib/ga4.ts class Analytics4 (line 7) | class Analytics4 { method constructor (line 13) | constructor(clientID: string = getClientId(), sessionID = getSessionId... method setUserId (line 18) | async setUserId(id: string) { method setUserProperties (line 22) | async setUserProperties(upValue?: Record) { method logEvent (line 32) | async logEvent(eventName: string, params?: Record): P... FILE: apps/desktop/layer/renderer/src/lib/issues.ts type IssueOptions (line 4) | interface IssueOptions { FILE: apps/desktop/layer/renderer/src/lib/native-menu.ts type ElectronMenuItem (line 5) | type ElectronMenuItem = Omit): Array type MainFeedBlock (line 80) | type MainFeedBlock = AbstractValueContextBlock<"mainFeed"> type UnreadOnlyBlock (line 81) | type UnreadOnlyBlock = AbstractValueContextBlock<"unreadOnly"> FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/context-bar/menus/ShortcutsMenuContent.tsx type ShortcutsMenuContentProps (line 13) | interface ShortcutsMenuContentProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/AIChainOfThought.tsx type ChainReasoningPart (line 15) | type ChainReasoningPart = ReasoningUIPart | ToolUIPart type AIChainOfThoughtProps (line 16) | interface AIChainOfThoughtProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/AIReasoningPart.tsx type AIReasoningPartProps (line 8) | interface AIReasoningPartProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/share.tsx type PartWithState (line 7) | interface PartWithState { function withDisplayStateHandler (line 20) | function withDisplayStateHandler(config: { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/AnalyticsMetrics.tsx type AnalyticsMetric (line 3) | interface AnalyticsMetric { type AnalyticsMetricsProps (line 8) | interface AnalyticsMetricsProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/CategoryTag.tsx type CategoryTagProps (line 3) | interface CategoryTagProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/DisplayHeader.tsx type DisplayHeaderProps (line 4) | interface DisplayHeaderProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/EmptyState.tsx type EmptyStateProps (line 3) | interface EmptyStateProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/FeedItemCard.tsx type FeedItemCardProps (line 11) | interface FeedItemCardProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/GroupedContent.tsx type GroupedContentProps (line 3) | interface GroupedContentProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/displays/shared/StatCard.tsx type StatCardProps (line 9) | interface StatCardProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/file/GlobalFileDropZone.tsx type GlobalFileDropZoneProps (line 9) | interface GlobalFileDropZoneProps extends PropsWithChildren { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/AIChatContextBar.tsx constant MAX_VISIBLE_BLOCKS (line 18) | const MAX_VISIBLE_BLOCKS = 4 FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/AIChatRoot.tsx type AIChatRootProps (line 21) | interface AIChatRootProps extends PropsWithChildren { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/AIChatSendButton.tsx type AIChatSendButtonProps (line 5) | interface AIChatSendButtonProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/AIModelIndicator.tsx type AIModelIndicatorProps (line 19) | interface AIModelIndicatorProps { type ProviderType (line 24) | type ProviderType = "openai" | "google" | "auto" | "deepseek" | "anthrop... constant MODEL_PAID_LEVELS (line 35) | const MODEL_PAID_LEVELS = ["basic", "plus", "pro"] as const type ModelPaidLevel (line 36) | type ModelPaidLevel = (typeof MODEL_PAID_LEVELS)[number] FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatBottomPanel.tsx type ChatBottomPanelProps (line 14) | interface ChatBottomPanelProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatHistoryDropdown.tsx type ChatHistoryDropdownProps (line 30) | interface ChatHistoryDropdownProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatInput.tsx type ChatInputProps (line 44) | interface ChatInputProps extends VariantProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatInterface.tsx type ChatInterfaceProps (line 305) | interface ChatInterfaceProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatMessageContainer.tsx constant SCROLL_BOTTOM_THRESHOLD (line 13) | const SCROLL_BOTTOM_THRESHOLD = 100 type ChatMessageContainerProps (line 15) | interface ChatMessageContainerProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatShortcutsRow.tsx type ChatShortcutsRowProps (line 24) | interface ChatShortcutsRowProps { type ShortcutMenuButtonProps (line 123) | interface ShortcutMenuButtonProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/components/layouts/ChatTitle.tsx type AIHeaderTitleProps (line 4) | interface AIHeaderTitleProps extends Omit { method getType (line 39) | static override getType(): string { method clone (line 43) | static override clone(node: FileAttachmentNode): FileAttachmentNode { method importJSON (line 47) | static override importJSON(serializedNode: SerializedFileAttachmentNod... method importDOM (line 53) | static override importDOM(): DOMConversionMap | null { method constructor (line 62) | constructor(attachmentId: string, key?: NodeKey) { method exportJSON (line 67) | override exportJSON(): SerializedFileAttachmentNode { method exportDOM (line 75) | override exportDOM(): DOMExportOutput { method createDOM (line 82) | override createDOM(): HTMLElement { method updateDOM (line 89) | override updateDOM(): false { method getAttachmentId (line 93) | getAttachmentId(): string { method setAttachmentId (line 97) | setAttachmentId(attachmentId: string): void { method decorate (line 102) | override decorate(): React.ReactElement { method isInline (line 106) | override isInline(): boolean { type FileAttachmentComponentProps (line 111) | interface FileAttachmentComponentProps { function FileAttachmentPill (line 115) | function FileAttachmentPill({ attachment }: { attachment: FileAttachment... function MissingFilePill (line 141) | function MissingFilePill() { function BlockBasedAttachment (line 150) | function BlockBasedAttachment({ attachmentId }: { attachmentId: string }) { function MessageBasedAttachment (line 164) | function MessageBasedAttachment({ function FileAttachmentComponent (line 184) | function FileAttachmentComponent({ node }: FileAttachmentComponentProps) { function $createFileAttachmentNode (line 195) | function $createFileAttachmentNode(attachmentId: string): FileAttachment... function $isFileAttachmentNode (line 199) | function $isFileAttachmentNode( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/file-upload/components/FileDropZone.tsx type FileDropZoneProps (line 6) | interface FileDropZoneProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/file-upload/hooks/useFileAttachmentBlockSync.ts type FileAttachmentBlockReference (line 11) | interface FileAttachmentBlockReference { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/file-upload/hooks/useFileUploadIntegration.ts function useFileUploadIntegration (line 14) | function useFileUploadIntegration( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/file-upload/types.ts type FileUploadPluginConfig (line 1) | interface FileUploadPluginConfig { type FileDropZoneState (line 12) | interface FileDropZoneState { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/file-upload/utils/file-handling.ts function dragEventHasFiles (line 4) | function dragEventHasFiles(event: DragEvent): boolean { function clipboardEventHasFiles (line 11) | function clipboardEventHasFiles(event: ClipboardEvent): boolean { function preventDefaultDrag (line 18) | function preventDefaultDrag(event: DragEvent): void { function getFilesFromDrop (line 26) | function getFilesFromDrop(event: DragEvent): FileList | null { function getFilesFromPaste (line 33) | function getFilesFromPaste(event: ClipboardEvent): FileList | null { function createDragCounter (line 40) | function createDragCounter() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/MentionNode.tsx type SerializedMentionNode (line 19) | type SerializedMentionNode = Spread< class MentionNode (line 26) | class MentionNode extends DecoratorNode { method getType (line 29) | static override getType(): string { method clone (line 33) | static override clone(node: MentionNode): MentionNode { method constructor (line 37) | constructor(mentionData: MentionData, key?: NodeKey) { method getMentionData (line 42) | getMentionData(): MentionData { method setMentionData (line 46) | setMentionData(mentionData: MentionData): void { method createDOM (line 51) | override createDOM(config: EditorConfig): HTMLElement { method updateDOM (line 60) | override updateDOM(): false { method importDOM (line 64) | static override importDOM(): DOMConversionMap | null { method importJSON (line 72) | static override importJSON(serializedNode: SerializedMentionNode): Men... method exportDOM (line 78) | override exportDOM(): DOMExportOutput { method exportJSON (line 88) | override exportJSON(): SerializedMentionNode { method getTextContent (line 99) | override getTextContent(): string { method decorate (line 103) | override decorate(editor: LexicalEditor): React.JSX.Element { method isInline (line 122) | override isInline(): boolean { method isKeyboardSelectable (line 126) | override isKeyboardSelectable(): boolean { method canInsertTextBefore (line 130) | canInsertTextBefore(): boolean { method canInsertTextAfter (line 134) | canInsertTextAfter(): boolean { method canBeEmpty (line 138) | canBeEmpty(): boolean { method isSegmented (line 142) | isSegmented(): boolean { method extractWithChild (line 146) | extractWithChild(): boolean { function $createMentionNode (line 151) | function $createMentionNode(mentionData: MentionData): MentionNode { function $isMentionNode (line 156) | function $isMentionNode(node: LexicalNode | null | undefined): node is M... FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/MentionPlugin.tsx function MentionPlugin (line 13) | function MentionPlugin() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/components/MentionComponent.tsx type MentionComponentProps (line 28) | interface MentionComponentProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/components/MentionDropdown.tsx type MentionDropdownProps (line 13) | interface MentionDropdownProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/components/shared/MentionTypeIcon.tsx type MentionTypeIconProps (line 6) | interface MentionTypeIconProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/constants.ts constant MENTION_COMMAND (line 6) | const MENTION_COMMAND = createCommand("MENTION_COMMAND") constant MENTION_TYPEAHEAD_COMMAND (line 7) | const MENTION_TYPEAHEAD_COMMAND = createCommand("MENTION_TYPEAHE... constant DEFAULT_MAX_SUGGESTIONS (line 11) | const DEFAULT_MAX_SUGGESTIONS = 10 constant MENTION_TRIGGER_PATTERN (line 15) | const MENTION_TRIGGER_PATTERN = FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/dateMentionConfig.ts constant MAX_INLINE_DATE_SUGGESTIONS (line 6) | const MAX_INLINE_DATE_SUGGESTIONS = 2 type DateRangeFactory (line 8) | type DateRangeFactory = (today: Dayjs) => DateRange type RelativeDateDefinition (line 10) | interface RelativeDateDefinition { constant RELATIVE_DATE_DEFINITIONS (line 17) | const RELATIVE_DATE_DEFINITIONS: readonly RelativeDateDefinition[] = [ type WeekdayPrefix (line 184) | type WeekdayPrefix = "auto" | "this" | "last" type WeekdayTranslationDescriptor (line 186) | interface WeekdayTranslationDescriptor { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/dateMentionParsers.ts type AiTFunction (line 17) | type AiTFunction = TFunction<"ai"> type DateMentionBuilderContext (line 19) | interface DateMentionBuilderContext { type RelativeDateCandidate (line 24) | interface RelativeDateCandidate { constant FUSE_OPTIONS (line 30) | const FUSE_OPTIONS: IFuseOptions = { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/dateMentionUtils.ts type DateRange (line 11) | interface DateRange { type LabelTranslator (line 42) | type LabelTranslator = TFunction<"ai", undefined> FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/useMentionKeyboard.ts type UseMentionKeyboardOptions (line 6) | interface UseMentionKeyboardOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/useMentionSearch.ts type UseMentionSearchOptions (line 6) | interface UseMentionSearchOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/useMentionSelection.ts type UseMentionSelectionOptions (line 6) | interface UseMentionSelectionOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/hooks/useMentionTrigger.ts type UseMentionTriggerOptions (line 7) | interface UseMentionTriggerOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/types.ts type MentionLabelValue (line 3) | type MentionLabelValue = string | number | boolean | MentionLabelDescriptor type MentionLabelDescriptor (line 5) | interface MentionLabelDescriptor { type MentionBaseData (line 10) | interface MentionBaseData { type EntryMentionData (line 17) | interface EntryMentionData extends MentionBaseData { type FeedMentionData (line 22) | interface FeedMentionData extends MentionBaseData { type DateMentionData (line 27) | interface DateMentionData extends MentionBaseData { type CategoryMentionData (line 35) | interface CategoryMentionData extends MentionBaseData { type ViewMentionData (line 40) | interface ViewMentionData extends MentionBaseData { type MentionData (line 45) | type MentionData = type MentionType (line 52) | type MentionType = MentionData["type"] type MentionMatch (line 54) | interface MentionMatch { type MentionDropdownPosition (line 60) | interface MentionDropdownPosition { type MentionSearchState (line 65) | interface MentionSearchState { type MentionTriggerState (line 71) | interface MentionTriggerState { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/mention/utils/mentionTextValue.ts function getMentionTextValue (line 13) | function getMentionTextValue(mentionData: { function getMentionDisplayTextValue (line 32) | function getMentionDisplayTextValue( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/selection/SelectedTextNode.tsx type SelectedTextNodePayload (line 15) | type SelectedTextNodePayload = { type SerializedSelectedTextNode (line 21) | type SerializedSelectedTextNode = Spread { method getType (line 28) | static override getType(): string { method clone (line 32) | static override clone(node: SelectedTextNode): SelectedTextNode { method constructor (line 36) | constructor(text: string, sourceEntryId?: string, timestamp?: number, ... method getText (line 43) | getText(): string { method setText (line 47) | setText(text: string): void { method getSourceEntryId (line 52) | getSourceEntryId(): string | undefined { method getTimestamp (line 56) | getTimestamp(): number | undefined { method createDOM (line 60) | override createDOM(): HTMLElement { method updateDOM (line 66) | override updateDOM(): false { method importDOM (line 70) | static override importDOM(): DOMConversionMap | null { method importJSON (line 74) | static override importJSON(serializedNode: SerializedSelectedTextNode)... method exportJSON (line 79) | override exportJSON(): SerializedSelectedTextNode { method exportDOM (line 89) | override exportDOM(): DOMExportOutput { method decorate (line 96) | override decorate(_editor: LexicalEditor): React.JSX.Element { method isInline (line 106) | override isInline(): boolean { method isKeyboardSelectable (line 110) | override isKeyboardSelectable(): boolean { method getTextContent (line 114) | override getTextContent(): string { function $createSelectedTextNode (line 119) | function $createSelectedTextNode(payload: SelectedTextNodePayload): Sele... function $isSelectedTextNode (line 123) | function $isSelectedTextNode( function escapeXML (line 128) | function escapeXML(text: string): string { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/selection/SelectedTextNodeComponent.tsx type SelectedTextNodeComponentProps (line 3) | interface SelectedTextNodeComponentProps { function SelectedTextNodeComponent (line 9) | function SelectedTextNodeComponent({ text }: SelectedTextNodeComponentPr... FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/selection/SelectedTextPlugin.tsx function SelectedTextPlugin (line 8) | function SelectedTextPlugin() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/selection/insertSelectedTextNode.ts function insertSelectedTextNode (line 13) | function insertSelectedTextNode(editor: LexicalEditor, payload: Selected... FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/selection/selectedTextBridge.ts type Listener (line 3) | type Listener = (payload: SelectedTextNodePayload) => void function queueSelectedTextInsertion (line 8) | function queueSelectedTextInsertion(payload: SelectedTextNodePayload) { function subscribeSelectedTextInsertion (line 18) | function subscribeSelectedTextInsertion(listener: Listener) { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shared/components/MentionLikePill.tsx type MentionLikePillProps (line 4) | interface MentionLikePillProps extends React.HTMLAttributes { type TypeaheadDropdownProps (line 24) | interface TypeaheadDropdownProps { function useOptionalLexicalEditor (line 51) | function useOptionalLexicalEditor() { function TypeaheadDropdown (line 60) | function TypeaheadDropdown({ FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shared/hooks/useListKeyboardNavigation.ts type UseListKeyboardNavigationOptions (line 13) | interface UseListKeyboardNavigationOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shared/hooks/useTextTrigger.ts type TriggerMatch (line 6) | interface TriggerMatch { type UseTextTriggerOptions (line 12) | interface UseTextTriggerOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shared/hooks/useTypeaheadSelection.ts type ReplaceHandlerResult (line 6) | interface ReplaceHandlerResult { type UseTypeaheadSelectionOptions (line 11) | interface UseTypeaheadSelectionOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/ShortcutNode.tsx type SerializedShortcutNode (line 18) | type SerializedShortcutNode = Spread< class ShortcutNode (line 25) | class ShortcutNode extends DecoratorNode { method getType (line 28) | static override getType(): string { method clone (line 32) | static override clone(node: ShortcutNode): ShortcutNode { method constructor (line 36) | constructor(shortcutData: ShortcutData, key?: NodeKey) { method getShortcutData (line 41) | getShortcutData(): ShortcutData { method setShortcutData (line 45) | setShortcutData(shortcutData: ShortcutData): void { method createDOM (line 50) | override createDOM(config: EditorConfig): HTMLElement { method updateDOM (line 58) | override updateDOM(): false { method importDOM (line 62) | static override importDOM(): DOMConversionMap | null { method importJSON (line 70) | static override importJSON(serializedNode: SerializedShortcutNode): Sh... method exportDOM (line 75) | override exportDOM(): DOMExportOutput { method exportJSON (line 84) | override exportJSON(): SerializedShortcutNode { method getTextContent (line 92) | override getTextContent(): string { method decorate (line 96) | override decorate(_editor: LexicalEditor): React.JSX.Element { method isInline (line 110) | override isInline(): boolean { method isKeyboardSelectable (line 114) | override isKeyboardSelectable(): boolean { method canInsertTextBefore (line 118) | canInsertTextBefore(): boolean { method canInsertTextAfter (line 122) | canInsertTextAfter(): boolean { method canBeEmpty (line 126) | canBeEmpty(): boolean { method isSegmented (line 130) | isSegmented(): boolean { method extractWithChild (line 134) | extractWithChild(): boolean { function $createShortcutNode (line 139) | function $createShortcutNode(shortcutData: ShortcutData): ShortcutNode { function $isShortcutNode (line 144) | function $isShortcutNode(node: LexicalNode | null | undefined): node is ... FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/ShortcutPlugin.tsx function ShortcutPlugin (line 13) | function ShortcutPlugin() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/components/ShortcutComponent.tsx type ShortcutComponentProps (line 9) | interface ShortcutComponentProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/components/ShortcutDropdown.tsx type ShortcutDropdownProps (line 10) | interface ShortcutDropdownProps { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/constants.ts constant SHORTCUT_COMMAND (line 5) | const SHORTCUT_COMMAND = createCommand("SHORTCUT_COMMAND") constant DEFAULT_MAX_SHORTCUT_SUGGESTIONS (line 7) | const DEFAULT_MAX_SHORTCUT_SUGGESTIONS = 10 constant SHORTCUT_TRIGGER_PATTERN (line 9) | const SHORTCUT_TRIGGER_PATTERN = FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/hooks/useShortcutKeyboard.ts type UseShortcutKeyboardOptions (line 6) | interface UseShortcutKeyboardOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/hooks/useShortcutSearch.ts type UseShortcutSearchOptions (line 7) | interface UseShortcutSearchOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/hooks/useShortcutSelection.ts type UseShortcutSelectionOptions (line 6) | interface UseShortcutSelectionOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/hooks/useShortcutTrigger.ts type UseShortcutTriggerOptions (line 7) | interface UseShortcutTriggerOptions { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/types.ts type ShortcutData (line 3) | interface ShortcutData { type ShortcutMetadata (line 12) | interface ShortcutMetadata { type ShortcutMatch (line 17) | interface ShortcutMatch { type ShortcutSearchState (line 23) | interface ShortcutSearchState { type ShortcutTriggerState (line 29) | interface ShortcutTriggerState { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/editor/plugins/shortcut/utils/shortcutTextValue.ts function getShortcutTextValue (line 5) | function getShortcutTextValue(shortcutData: ShortcutData): string { function getShortcutDisplayTextValue (line 14) | function getShortcutDisplayTextValue(shortcutData: ShortcutData): string { function getShortcutMarkdownValue (line 20) | function getShortcutMarkdownValue(shortcutId: string): string { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/hooks/useAutoScroll.tsx constant BOTTOM_THRESHOLD (line 5) | const BOTTOM_THRESHOLD = 50 FILE: apps/desktop/layer/renderer/src/modules/ai-chat/hooks/useAutoTimelineSummaryShortcut.ts constant ONE_HOUR (line 24) | const ONE_HOUR = 60 * 60 * 1000 FILE: apps/desktop/layer/renderer/src/modules/ai-chat/hooks/useDisplayBlocks.ts type ValueBlockOf (line 5) | type ValueBlockOf = Omit FILE: apps/desktop/layer/renderer/src/modules/ai-chat/services/index.ts class AIPersistServiceStatic (line 13) | class AIPersistServiceStatic { method markSessionExists (line 18) | private markSessionExists(chatId: string, exists: boolean) { method getSessionExistsFromCache (line 22) | private getSessionExistsFromCache(chatId: string): boolean | undefined { method clearSessionCache (line 26) | private clearSessionCache(chatId?: string) { method loadMessages (line 34) | async loadMessages(chatId: string): Promise { method hasPersistedMessages (line 41) | async hasPersistedMessages(chatId: string): Promise { method hasAssistantMessagesMissingMetadata (line 52) | async hasAssistantMessagesMissingMetadata(chatId: string): Promise { method loadSessionWithMessages (line 98) | async loadSessionWithMessages(chatId: string): Promise<{ method replaceAllMessages (line 142) | async replaceAllMessages(chatId: string, messages: BizUIMessage[]) { method upsertMessages (line 151) | async upsertMessages(chatId: string, messages: BizUIMessage[]) { method deleteMessages (line 235) | async deleteMessages(chatId: string, messageIds: string[]) { method resolveSessionTitle (line 245) | private resolveSessionTitle( method getDefaultSessionTitle (line 258) | private getDefaultSessionTitle( method formatDateTime (line 293) | private formatDateTime(date: Date, locale?: string): string { method ensureSession (line 320) | async ensureSession( method createSession (line 369) | async createSession( method findTimelineSummarySession (line 385) | async findTimelineSummarySession(criteria: { method getChatSession (line 408) | async getChatSession(chatId: string) { method getChatSessions (line 422) | async getChatSessions(limit = 20) { method deleteSession (line 472) | async deleteSession(chatId: string) { method updateSessionTitle (line 482) | async updateSessionTitle(chatId: string, title: string) { method updateSessionTime (line 492) | async updateSessionTime(chatId: string, date: Date = new Date()) { method markSessionSynced (line 501) | async markSessionSynced(chatId: string) { method cleanupEmptySessions (line 505) | async cleanupEmptySessions() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/AIChatContext.ts type AIPanelRefs (line 9) | type AIPanelRefs = { type AIRootStateContext (line 27) | type AIRootStateContext = { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/chat-core/chat-actions.ts class ChatSliceActions (line 15) | class ChatSliceActions { method getActiveInstance (line 25) | static getActiveInstance(): ChatSliceActions | null { method setActiveInstance (line 33) | static setActiveInstance(instance: ChatSliceActions | null) { method constructor (line 38) | constructor( method set (line 53) | get set() { method get (line 57) | get get() { method computeSyncStatus (line 61) | private computeSyncStatus(isLocal: boolean): "local" | "synced" { method setSyncState (line 65) | private setSyncState(isLocal: boolean) { method markSessionSynced (line 78) | async markSessionSynced() { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/chat-core/chat-instance.ts class ZustandChat (line 9) | class ZustandChat extends AbstractChat { method constructor (line 13) | constructor( method chatState (line 34) | get chatState() { method destroy (line 39) | async destroy(): Promise { method setStatus (line 48) | protected override setStatus({ status, error }: { status: ChatStatus; ... FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/chat-core/chat-state.ts class ZustandChatState (line 13) | class ZustandChatState implements ChatState { method constructor (line 20) | constructor( method #setupEventHandlers (line 32) | #setupEventHandlers(): void { method status (line 103) | get status(): ChatStatus { method status (line 107) | set status(newStatus: ChatStatus) { method error (line 114) | get error(): Error | undefined { method error (line 118) | set error(newError: Error | undefined) { method messages (line 125) | get messages(): BizUIMessage[] { method messages (line 129) | set messages(newMessages: BizUIMessage[]) { method #fillMessageCreatedAt (line 181) | #fillMessageCreatedAt(message: SendingUIMessage | BizUIMessage): BizUI... method destroy (line 201) | destroy(): void { method setResumingStream (line 205) | setResumingStream(isResuming: boolean) { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/chat-core/types.ts type ChatSlice (line 8) | interface ChatSlice { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/event-system/event-emitter.ts class ChatStateEventEmitter (line 5) | class ChatStateEventEmitter { method on (line 8) | on( method emit (line 23) | emit(event: T, payload: ChatStateEvents<... method clear (line 33) | clear(): void { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/event-system/types.ts type ChatStateEvents (line 6) | interface ChatStateEvents { type ChatStateEventType (line 12) | type ChatStateEventType = keyof ChatStateEvents FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/slices/block.slice.ts type BlockSlice (line 9) | interface BlockSlice { class BlockSliceAction (line 27) | class BlockSliceAction { method constructor (line 28) | constructor(private params: Parameters) { method addOrUpdateBlock (line 110) | addOrUpdateBlock(block: AIChatContextBlock) { method clearBlocks (line 119) | clearBlocks({ keepSpecialTypes = false }: { keepSpecialTypes?: boolean... method resetContext (line 137) | resetContext() { method getBlocks (line 151) | getBlocks() { method addFileAttachment (line 156) | addFileAttachment(fileAttachment: FileAttachment) { method updateFileAttachment (line 165) | updateFileAttachment(attachmentId: string, updatedAttachment: FileAtta... method updateFileAttachmentStatus (line 178) | updateFileAttachmentStatus( method removeFileAttachment (line 196) | removeFileAttachment(fileId: string) { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/store.ts type AiChatStore (line 9) | type AiChatStore = BlockSlice & FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/transport.ts type TitleHandlerPersistOption (line 9) | type TitleHandlerPersistOption = boolean | ((title: string) => void | Pr... type TitleHandlerOptions (line 11) | interface TitleHandlerOptions { type CreateChatTransportOptions (line 18) | interface CreateChatTransportOptions { type CreateChatTitleHandlerOptions (line 23) | interface CreateChatTitleHandlerOptions { function createChatTitleHandler (line 30) | function createChatTitleHandler( function createChatTransport (line 47) | function createChatTransport({ onValue, titleHandler }: CreateChatTransp... type UIMessageChunkParseResult (line 64) | type UIMessageChunkParseResult = class ExtendChatTransport (line 91) | class ExtendChatTransport extends HttpChatTransport { method constructor (line 92) | constructor( method processResponseStream (line 101) | protected processResponseStream( method handleGeneratedTitle (line 125) | private async handleGeneratedTitle(chunk: UIMessageChunk) { method reconnectToStream (line 163) | override reconnectToStream( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/store/types.ts type FileAttachment (line 4) | interface FileAttachment { type BaseContextBlock (line 18) | interface BaseContextBlock { type ValueContextBlockType (line 23) | type ValueContextBlockType = "mainView" | "mainEntry" | "mainFeed" | "un... type AbstractValueContextBlock (line 24) | interface AbstractValueContextBlock extends BaseContex... type ValueContextBlock (line 29) | type ValueContextBlock = AbstractValueContextBlock type FileAttachmentContextBlock (line 31) | interface FileAttachmentContextBlock extends BaseContextBlock { type AIChatContextBlock (line 36) | type AIChatContextBlock = ValueContextBlock | FileAttachmentContextBlock type AIChatContextBlockInput (line 39) | type AIChatContextBlockInput = type AIChatContextBlockType (line 43) | type AIChatContextBlockType = AIChatContextBlock["type"] type AIChatStoreInitial (line 45) | interface AIChatStoreInitial { type AIChatContextBlocks (line 53) | interface AIChatContextBlocks { type AIDisplayFlowTool (line 57) | type AIDisplayFlowTool = ToolWithState type BizUIDataTypes (line 60) | type BizUIDataTypes = { type BizUIMessage (line 67) | type BizUIMessage = UIMessage... type BizUIMessagePart (line 71) | type BizUIMessagePart = UIMessagePart type SendingUIMessage (line 73) | type SendingUIMessage = Omit FILE: apps/desktop/layer/renderer/src/modules/ai-chat/types/ChatSession.ts type ChatSession (line 3) | interface ChatSession { type RichTextPart (line 12) | type RichTextPart = { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/error.ts type ParsedErrorData (line 5) | interface ParsedErrorData { type ParsedError (line 12) | interface ParsedError { function parseAIError (line 25) | function parseAIError(error: Error | string | undefined): ParsedError { function isRateLimitError (line 70) | function isRateLimitError(error: Error | string | undefined): boolean { function getErrorMessage (line 79) | function getErrorMessage(error: ParsedError): string { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/extractor.ts type AIMessageDataBlockPart (line 3) | type AIMessageDataBlockPart = { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/file-processing.ts type ProcessFileOptions (line 7) | interface ProcessFileOptions { type ProcessFileResult (line 15) | interface ProcessFileResult { function processFile (line 21) | async function processFile( type ProcessImageResult (line 78) | interface ProcessImageResult { function processImage (line 83) | async function processImage( function fileToDataUrl (line 144) | function fileToDataUrl(file: File): Promise { function cleanupFileAttachment (line 161) | function cleanupFileAttachment(fileAttachment: FileAttachment) { function uploadFileAttachment (line 167) | async function uploadFileAttachment( function processAndUploadFile (line 244) | async function processAndUploadFile( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/file-validation.ts constant MAX_IMAGE_ALLOWED_SIZE (line 1) | const MAX_IMAGE_ALLOWED_SIZE = 3 * 1024 * 1024 constant MAX_DOCUMENT_ALLOWED_SIZE (line 2) | const MAX_DOCUMENT_ALLOWED_SIZE = 1 * 1024 * 1024 constant SUPPORTED_MIME_ACCEPT (line 3) | const SUPPORTED_MIME_ACCEPT = "image/*,.pdf,.txt,.md" constant SUPPORTED_FILE_TYPES (line 4) | const SUPPORTED_FILE_TYPES = { type SupportedFileType (line 18) | type SupportedFileType = keyof typeof SUPPORTED_FILE_TYPES type FileCategory (line 19) | type FileCategory = (typeof SUPPORTED_FILE_TYPES)[SupportedFileType]["ca... type FileValidationError (line 21) | interface FileValidationError { type FileValidationResult (line 26) | interface FileValidationResult { function validateFile (line 37) | function validateFile(file: File): FileValidationResult { function formatFileSize (line 84) | function formatFileSize(bytes: number): string { function getFileCategoryFromMimeType (line 94) | function getFileCategoryFromMimeType(mimeType: string): FileCategory { function getFileIconName (line 114) | function getFileIconName(category: FileCategory): string { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/mentionDate.ts constant MENTION_DATE_VALUE_FORMAT (line 3) | const MENTION_DATE_VALUE_FORMAT = "YYYY-MM-DDTHH:mm:ssZ" constant LEGACY_MENTION_DATE_VALUE_FORMAT (line 5) | const LEGACY_MENTION_DATE_VALUE_FORMAT = "YYYY-MM-DD" type MentionDateDisplay (line 7) | interface MentionDateDisplay { FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/rate-limit.ts type AIConfigLike (line 7) | interface AIConfigLike { type RateLimitMessageOptions (line 12) | interface RateLimitMessageOptions { function computeIsRateLimited (line 41) | function computeIsRateLimited( function computeRateLimitMessage (line 60) | function computeRateLimitMessage( FILE: apps/desktop/layer/renderer/src/modules/ai-chat/utils/shortcut.ts type SerializedNodeWithChildren (line 6) | type SerializedNodeWithChildren = SerializedLexicalNode & { FILE: apps/desktop/layer/renderer/src/modules/ai-onboarding/ai-chat-pane.tsx constant SUGGESTION_KEYS (line 50) | const SUGGESTION_KEYS = [ constant SUGGESTION_SAMPLE_SIZE (line 67) | const SUGGESTION_SAMPLE_SIZE = 5 type SuggestionKey (line 69) | type SuggestionKey = (typeof SUGGESTION_KEYS)[number] function pickSuggestionKeys (line 71) | function pickSuggestionKeys(previous?: readonly SuggestionKey[]): Sugges... function AIChatPane (line 104) | function AIChatPane() { function AIChatPaneImpl (line 112) | function AIChatPaneImpl() { type WelcomeProps (line 173) | interface WelcomeProps { function Welcome (line 177) | function Welcome({ onSuggestionClick }: WelcomeProps) { function FinishListener (line 246) | function FinishListener() { constant SCROLL_BOTTOM_THRESHOLD (line 261) | const SCROLL_BOTTOM_THRESHOLD = 100 type AIChatInterfaceProps (line 263) | interface AIChatInterfaceProps { function AIChatInterface (line 267) | function AIChatInterface({ inputRef }: AIChatInterfaceProps) { constant GRADIENT_COLORS (line 552) | const GRADIENT_COLORS = [ function gradientByIndex (line 575) | function gradientByIndex(index: number, isDark: boolean) { FILE: apps/desktop/layer/renderer/src/modules/ai-onboarding/ai-onboarding-modal-content.tsx function AiOnboardingModalContent (line 12) | function AiOnboardingModalContent({ onClose }: { onClose: () => void }) { FILE: apps/desktop/layer/renderer/src/modules/ai-onboarding/feeds-selection-list.tsx type FeedToSelect (line 25) | type FeedToSelect = Omit function FeedsSelectionList (line 27) | function FeedsSelectionList() { function FeedSelectionOperationScreen (line 50) | function FeedSelectionOperationScreen() { function FeedSelectionItem (line 140) | function FeedSelectionItem({ feedAtom }: { feedAtom: PrimitiveAtom FILE: apps/desktop/layer/renderer/src/modules/ai-task/types.ts constant MAX_PROMPT_LENGTH (line 4) | const MAX_PROMPT_LENGTH = 2000 type ScheduleType (line 28) | type ScheduleType = z.infer type AITaskOptions (line 38) | type AITaskOptions = z.infer type TaskFormData (line 66) | type TaskFormData = z.infer FILE: apps/desktop/layer/renderer/src/modules/app-layout/MainDestopLayout.tsx function MainDestopLayout (line 139) | function MainDestopLayout() { FILE: apps/desktop/layer/renderer/src/modules/app-layout/ai-enhanced-timeline/AIEnhancedTimelineLayout.tsx constant MIN_ENTRY_WIDTH (line 31) | const MIN_ENTRY_WIDTH = isSafari() ? 356 : 300 method onResizeStart (line 82) | onResizeStart({ position }) { method onResizeEnd (line 85) | onResizeEnd({ position }) { method onResizeStart (line 122) | onResizeStart({ position }) { method onResizeEnd (line 125) | onResizeEnd({ position }) { FILE: apps/desktop/layer/renderer/src/modules/app-layout/ai-enhanced-timeline/MobileTimelineLayout.tsx type MobileView (line 14) | type MobileView = "list" | "entry" type MobileTimelineLayoutProps (line 16) | interface MobileTimelineLayoutProps { FILE: apps/desktop/layer/renderer/src/modules/app-layout/ai/AIChatFixedPanel.tsx type AIChatFixedPanelProps (line 9) | interface AIChatFixedPanelProps extends React.DetailedHTMLProps< FILE: apps/desktop/layer/renderer/src/modules/app-layout/ai/AIChatFloatingPanel.tsx type AIChatFloatingPanelProps (line 20) | interface AIChatFloatingPanelProps extends React.DetailedHTMLProps< FILE: apps/desktop/layer/renderer/src/modules/app-layout/subscription-column/SubscriptionColumn.tsx method onResizeEnd (line 99) | onResizeEnd({ position }) { FILE: apps/desktop/layer/renderer/src/modules/app-layout/subview/SubviewLayout.tsx function SubviewLayout (line 53) | function SubviewLayout() { function SubviewLayoutInner (line 74) | function SubviewLayoutInner() { FILE: apps/desktop/layer/renderer/src/modules/app-layout/subview/hooks.ts function useSubViewTitle (line 15) | function useSubViewTitle(title: I18nKeys | ReactNode, fallbackTitleStrin... FILE: apps/desktop/layer/renderer/src/modules/app-tip/AICopilotMedia.tsx type PreviewMessage (line 14) | type PreviewMessage = { FILE: apps/desktop/layer/renderer/src/modules/app-tip/AppTipDialog.tsx type AppTipDialogProps (line 12) | type AppTipDialogProps = { function AppTipDialog (line 22) | function AppTipDialog({ FILE: apps/desktop/layer/renderer/src/modules/app-tip/AppTipMediaPreview.tsx type AppTipMediaPreviewProps (line 8) | type AppTipMediaPreviewProps = { function AppTipMediaPreview (line 12) | function AppTipMediaPreview({ media }: AppTipMediaPreviewProps) { FILE: apps/desktop/layer/renderer/src/modules/app-tip/AppTipModalContent.tsx type AppTipModalContentProps (line 21) | type AppTipModalContentProps = { function AppTipModalContent (line 25) | function AppTipModalContent({ initialStep = 0 }: AppTipModalContentProps) { FILE: apps/desktop/layer/renderer/src/modules/app-tip/constants.ts constant APP_TIP_STORAGE_PREFIX (line 1) | const APP_TIP_STORAGE_PREFIX = "follow:ai-onboarding:dismissed" constant APP_TIP_DEBUG_EVENT (line 3) | const APP_TIP_DEBUG_EVENT = "follow:ai-onboarding:debug-open" constant APP_TIP_DISMISS_EVENT (line 5) | const APP_TIP_DISMISS_EVENT = "follow:ai-onboarding:dismiss-change" FILE: apps/desktop/layer/renderer/src/modules/app-tip/types.ts type AppTipDebugOpenEventDetail (line 1) | type AppTipDebugOpenEventDetail = { type AppTipStepMedia (line 6) | type AppTipStepMedia = { type AppTipStep (line 15) | type AppTipStep = { FILE: apps/desktop/layer/renderer/src/modules/app-tip/useNewUserGuideState.ts type AppTipDismissChangeDetail (line 9) | type AppTipDismissChangeDetail = { function readDismissed (line 76) | function readDismissed(key: string | null) { FILE: apps/desktop/layer/renderer/src/modules/auth/Form.tsx type ElectronAuthResult (line 64) | type ElectronAuthResult = { function LoginWithPassword (line 116) | function LoginWithPassword({ function RegisterForm (line 321) | function RegisterForm({ FILE: apps/desktop/layer/renderer/src/modules/auth/LoginModalContent.tsx type LoginModalContentProps (line 23) | interface LoginModalContentProps { FILE: apps/desktop/layer/renderer/src/modules/auth/TokenModal.tsx function onSubmit (line 31) | async function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/command/command-button.tsx type CommandButtonProps (line 7) | interface CommandButtonProps extends ActionButt... type CommandIdButtonProps (line 13) | interface CommandIdButtonProps< FILE: apps/desktop/layer/renderer/src/modules/command/commands/entry-render.tsx type EventBusMap (line 9) | interface EventBusMap { type EntryScrollDownCommand (line 70) | type EntryScrollDownCommand = Command<{ type EntryScrollUpCommand (line 75) | type EntryScrollUpCommand = Command<{ type EntryNextEntryCommand (line 80) | type EntryNextEntryCommand = Command<{ type EntryPreviousEntryCommand (line 85) | type EntryPreviousEntryCommand = Command<{ type EntryRenderCommand (line 90) | type EntryRenderCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/entry.tsx type StarCommand (line 370) | type StarCommand = Command<{ type DeleteCommand (line 375) | type DeleteCommand = Command<{ type CopyLinkCommand (line 380) | type CopyLinkCommand = Command<{ type ExportAsPDFCommand (line 385) | type ExportAsPDFCommand = Command<{ type CopyTitleCommand (line 390) | type CopyTitleCommand = Command<{ type OpenInBrowserCommand (line 395) | type OpenInBrowserCommand = Command<{ type ViewSourceContentCommand (line 400) | type ViewSourceContentCommand = Command<{ type ShareCommand (line 405) | type ShareCommand = Command<{ type ReadCommand (line 410) | type ReadCommand = Command<{ type ReadAboveCommand (line 415) | type ReadAboveCommand = Command<{ type ReadBelowCommand (line 420) | type ReadBelowCommand = Command<{ type ToggleAITranslationCommand (line 425) | type ToggleAITranslationCommand = Command<{ type ImageGalleryCommand (line 430) | type ImageGalleryCommand = Command<{ type TTSCommand (line 435) | type TTSCommand = Command<{ type ReadabilityCommand (line 440) | type ReadabilityCommand = Command<{ type EntryCommand (line 445) | type EntryCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/global.tsx type EventBusMap (line 13) | interface EventBusMap { type ShowShortcutsCommand (line 88) | type ShowShortcutsCommand = Command<{ type ToggleCornerPlayCommand (line 93) | type ToggleCornerPlayCommand = Command<{ type QuickAddCommand (line 98) | type QuickAddCommand = Command<{ type ToggleAIChatCommand (line 103) | type ToggleAIChatCommand = Command<{ type QuickSearchCommand (line 108) | type QuickSearchCommand = Command<{ type GlobalCommand (line 113) | type GlobalCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/id.ts constant COMMAND_ID (line 1) | const COMMAND_ID = { FILE: apps/desktop/layer/renderer/src/modules/command/commands/integration.tsx function extractQBittorrentUrls (line 707) | function extractQBittorrentUrls(entry: EntryModel) { type SaveToEagleCommand (line 845) | type SaveToEagleCommand = Command<{ type SaveToReadwiseCommand (line 850) | type SaveToReadwiseCommand = Command<{ type SaveToInstapaperCommand (line 855) | type SaveToInstapaperCommand = Command<{ type SaveToObsidianCommand (line 860) | type SaveToObsidianCommand = Command<{ type SaveToOutlineCommand (line 865) | type SaveToOutlineCommand = Command<{ type SaveToReadeckCommand (line 870) | type SaveToReadeckCommand = Command<{ type SaveToCuboxCommand (line 875) | type SaveToCuboxCommand = Command<{ type SaveToZoteroCommand (line 880) | type SaveToZoteroCommand = Command<{ type SaveToQBittorrentCommand (line 885) | type SaveToQBittorrentCommand = Command<{ type CustomIntegrationCommand (line 890) | type CustomIntegrationCommand = Command<{ type IntegrationCommand (line 895) | type IntegrationCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/layout.tsx type FocusEvent (line 10) | interface FocusEvent { type EventBusMap (line 14) | interface EventBusMap { type FocusToSubscriptionCommand (line 63) | type FocusToSubscriptionCommand = Command<{ type ToggleTimelineColumnCommand (line 68) | type ToggleTimelineColumnCommand = Command<{ type FocusToTimelineCommand (line 73) | type FocusToTimelineCommand = Command<{ type FocusToEntryRenderCommand (line 77) | type FocusToEntryRenderCommand = Command<{ type LayoutCommand (line 82) | type LayoutCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/settings.tsx method run (line 26) | run() { method run (line 45) | run() { method run (line 55) | run() { method run (line 65) | run() { type CustomizeToolbarCommand (line 72) | type CustomizeToolbarCommand = Command<{ type SettingsCommand (line 77) | type SettingsCommand = CustomizeToolbarCommand FILE: apps/desktop/layer/renderer/src/modules/command/commands/subscription.tsx type EventBusMap (line 12) | interface EventBusMap { type SwitchTabToNextCommand (line 190) | type SwitchTabToNextCommand = Command<{ type SwitchTabToPreviousCommand (line 195) | type SwitchTabToPreviousCommand = Command<{ type SwitchTabToArticleCommand (line 200) | type SwitchTabToArticleCommand = Command<{ type SwitchTabToSocialCommand (line 205) | type SwitchTabToSocialCommand = Command<{ type SwitchTabToPictureCommand (line 210) | type SwitchTabToPictureCommand = Command<{ type SwitchTabToVideoCommand (line 215) | type SwitchTabToVideoCommand = Command<{ type SwitchTabToAudioCommand (line 220) | type SwitchTabToAudioCommand = Command<{ type SwitchTabToNotificationCommand (line 225) | type SwitchTabToNotificationCommand = Command<{ type NextSubscriptionCommand (line 230) | type NextSubscriptionCommand = Command<{ type PreviousSubscriptionCommand (line 235) | type PreviousSubscriptionCommand = Command<{ type ToggleFolderCollapseCommand (line 240) | type ToggleFolderCollapseCommand = Command<{ type MarkAllAsReadCommand (line 245) | type MarkAllAsReadCommand = Command<{ type OpenInBrowserCommand (line 250) | type OpenInBrowserCommand = Command<{ type OpenSiteInBrowserCommand (line 255) | type OpenSiteInBrowserCommand = Command<{ type SubscriptionCommand (line 260) | type SubscriptionCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/timeline.tsx type EventBusMap (line 11) | interface EventBusMap { type SwitchToNextTimelineCommand (line 71) | type SwitchToNextTimelineCommand = Command<{ type SwitchToPreviousTimelineCommand (line 76) | type SwitchToPreviousTimelineCommand = Command<{ type RefetchTimelineCommand (line 81) | type RefetchTimelineCommand = Command<{ type UnreadOnlyTimelineCommand (line 86) | type UnreadOnlyTimelineCommand = Command<{ type TimelineCommand (line 91) | type TimelineCommand = FILE: apps/desktop/layer/renderer/src/modules/command/commands/types.ts type BasicCommand (line 12) | type BasicCommand = FILE: apps/desktop/layer/renderer/src/modules/command/hooks/use-command-binding.ts type ExtractSetType (line 105) | type ExtractSetType> = T extends Set ? U... type AllowCustomizeCommandId (line 106) | type AllowCustomizeCommandId = ExtractSetType(id: T): FollowCommandMap[... function useRunCommandFn (line 38) | function useRunCommandFn() { FILE: apps/desktop/layer/renderer/src/modules/command/hooks/use-register-command.ts type RegisterOptions (line 7) | type RegisterOptions = { function useRegisterFollowCommand (line 62) | function useRegisterFollowCommand( FILE: apps/desktop/layer/renderer/src/modules/command/hooks/use-register-hotkey.ts type HotkeyOptions (line 9) | interface HotkeyOptions { type RegisterHotkeyOptions (line 12) | interface RegisterHotkeyOptions { constant SPECIAL_KEYS_MAPPINGS (line 21) | const SPECIAL_KEYS_MAPPINGS = { FILE: apps/desktop/layer/renderer/src/modules/command/mutation-command-ids.ts constant MUTATION_COMMAND_IDS (line 4) | const MUTATION_COMMAND_IDS = new Set([ constant MUTATION_PREFIXES (line 24) | const MUTATION_PREFIXES = ["integration:custom:"] FILE: apps/desktop/layer/renderer/src/modules/command/registry/command.ts function createCommand (line 11) | function createCommand< function createFollowCommand (line 36) | function createFollowCommand( function defineFollowCommand (line 42) | function defineFollowCommand( FILE: apps/desktop/layer/renderer/src/modules/command/registry/registry.ts method commands (line 12) | get commands() { method register (line 28) | register(options: CommandOptions) { method has (line 41) | has(id: string): boolean { method get (line 45) | get(id: string): Command | undefined { method getAll (line 53) | getAll(): Command[] { method run (line 57) | run(id: string, ...args: unknown[]) { function registerCommand (line 65) | function registerCommand(options: CommandOptions) { FILE: apps/desktop/layer/renderer/src/modules/command/types.ts type ExtractCategory (line 5) | type ExtractCategory = T extends `category.${string}` ... type CommandCategory (line 6) | type CommandCategory = ExtractCategory[0]> type KeybindingOptions (line 8) | interface KeybindingOptions { type Command (line 16) | interface Command< type SimpleCommand (line 32) | type SimpleCommand = Command<{ id: T; fn: () => void }> type CommandOptions (line 34) | interface CommandOptions< type FollowCommandMap (line 55) | type FollowCommandMap = { type UnknownCommand (line 63) | type UnknownCommand = Command<{ type FollowCommandId (line 68) | type FollowCommandId = FollowCommand["id"] type FollowCommand (line 69) | type FollowCommand = BasicCommand | UnknownCommand FILE: apps/desktop/layer/renderer/src/modules/customize-toolbar/constant.ts type ToolbarActionOrder (line 5) | interface ToolbarActionOrder { constant ENTRY_ITEM_HIDE_IN_HEADER (line 10) | const ENTRY_ITEM_HIDE_IN_HEADER = new Set([ constant MAIN_ACTIONS (line 16) | const MAIN_ACTIONS = [ constant MAIN_ACTIONS_SET (line 25) | const MAIN_ACTIONS_SET = new Set(MAIN_ACTIONS) constant DEFAULT_ACTION_ORDER (line 27) | const DEFAULT_ACTION_ORDER: ToolbarActionOrder = { FILE: apps/desktop/layer/renderer/src/modules/customize-toolbar/dnd.tsx function DroppableContainer (line 96) | function DroppableContainer({ children }: { children: ReactNode }) { FILE: apps/desktop/layer/renderer/src/modules/debug/registry.ts class Registry (line 1) | class Registry { method add (line 4) | add(key: string, action: () => void) { method remove (line 12) | remove(key: string) { method getAll (line 16) | getAll() { method get (line 20) | get(key: string) { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverFeedCard.tsx function FeedCardActions (line 20) | function FeedCardActions({ type DiscoverFeedCardProps (line 84) | interface DiscoverFeedCardProps { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverFeedForm.tsx type RouteParams (line 79) | type RouteParams = Record< FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverForm.tsx constant FEED_DISCOVERY_INFO (line 36) | const FEED_DISCOVERY_INFO = { function DiscoverForm (line 100) | function DiscoverForm({ type = "search" }: { type?: string }) { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverImport.tsx function DiscoverImport (line 36) | function DiscoverImport() { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverInboxList.tsx function DiscoverInboxList (line 10) | function DiscoverInboxList() { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverTransform.tsx function DiscoverTransform (line 48) | function DiscoverTransform() { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoverUser.tsx function DiscoverUser (line 8) | function DiscoverUser() { FILE: apps/desktop/layer/renderer/src/modules/discover/DiscoveryContent.tsx type Language (line 31) | type Language = "all" | "eng" | "cmn" | "fra" type DiscoveryView (line 32) | type DiscoveryView = "trending" | "categories" function DiscoveryContent (line 34) | function DiscoveryContent() { FILE: apps/desktop/layer/renderer/src/modules/discover/FeedForm.tsx type FeedFormDataValuesType (line 59) | type FeedFormDataValuesType = z.infer method onError (line 310) | onError(err) { function onSubmit (line 315) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/discover/FeedSummary.tsx type FeedSummaryProps (line 13) | interface FeedSummaryProps { FILE: apps/desktop/layer/renderer/src/modules/discover/InboxForm.tsx function onSubmit (line 110) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/discover/ListForm.tsx type ListFormDataValuesType (line 50) | type ListFormDataValuesType = z.infer method onError (line 241) | async onError(err) { function onSubmit (line 247) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/discover/OpmlAbstractGraphic.tsx constant RSS_READERS (line 8) | const RSS_READERS = [ function OpmlAbstractGraphic (line 21) | function OpmlAbstractGraphic({ className }: { className?: string }) { FILE: apps/desktop/layer/renderer/src/modules/discover/OpmlSelectionModal.tsx method onError (line 84) | async onError(err) { FILE: apps/desktop/layer/renderer/src/modules/discover/UnifiedDiscoverForm.tsx function detectInputType (line 49) | function detectInputType(value: string): "rss" | "rsshub" | "search" { type SearchFormData (line 75) | type SearchFormData = z.infer type ToolLinkProps (line 78) | interface ToolLinkProps { function ToolLink (line 84) | function ToolLink({ icon, label, onClick }: ToolLinkProps) { function UnifiedDiscoverForm (line 101) | function UnifiedDiscoverForm() { FILE: apps/desktop/layer/renderer/src/modules/discover/recommendations.tsx function Recommendations (line 6) | function Recommendations() { FILE: apps/desktop/layer/renderer/src/modules/discover/types.ts type ParsedFeedItem (line 1) | type ParsedFeedItem = { FILE: apps/desktop/layer/renderer/src/modules/download/index.tsx function DownloadPage (line 8) | function DownloadPage() { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/all-item.tsx function AllItem (line 70) | function AllItem({ entryId, translation, currentFeedTitle }: UniversalIt... function AllItemStateLess (line 210) | function AllItemStateLess({ entry, feed }: EntryItemStatelessProps) { function AudioIcon (line 247) | function AudioIcon({ entryId, src }: { entryId: string; src: string }) { function VideoIcon (line 289) | function VideoIcon({ src }: { src: string }) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/article-item.tsx function ArticleItem (line 13) | function ArticleItem({ entryId, translation }: UniversalItemProps) { function ArticleItemStateLess (line 19) | function ArticleItemStateLess({ entry, feed }: EntryItemStatelessProps) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/audio-item.tsx function AudioItem (line 8) | function AudioItem({ entryId, translation }: UniversalItemProps) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/notification-item.tsx function NotificationItem (line 11) | function NotificationItem({ entryId, translation }: UniversalItemProps) { function NotificationItemStateLess (line 17) | function NotificationItemStateLess({ entry, feed }: EntryItemStatelessPr... FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/picture-item-stateless.tsx function PictureItemStateLess (line 14) | function PictureItemStateLess({ entry }: EntryItemStatelessProps) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/picture-item.tsx function PictureItem (line 23) | function PictureItem({ entryId, translation }: UniversalItemProps) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/picture-masonry.tsx function scrollOutViewMarkRead (line 156) | function scrollOutViewMarkRead(entries: IntersectionObserverEntry[]) { function renderInViewMarkRead (line 187) | function renderInViewMarkRead(entries: IntersectionObserverEntry[]) { type MasonryProps (line 305) | interface MasonryProps { FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/social-media-item.tsx function SocialMediaItemStateLess (line 159) | function SocialMediaItemStateLess({ entry, feed }: EntryItemStatelessPro... FILE: apps/desktop/layer/renderer/src/modules/entry-column/Items/video-item.tsx function VideoItem (line 21) | function VideoItem({ entryId, translation }: UniversalItemProps) { function VideoItemStateLess (line 134) | function VideoItemStateLess({ entry, feed }: EntryItemStatelessProps) { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/DateItem.tsx type DateItemInnerProps (line 15) | interface DateItemInnerProps { type DateItemProps (line 22) | type DateItemProps = Pick & { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/FooterMarkItem.tsx type FooterMarkItemProps (line 28) | interface FooterMarkItemProps { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/VirtualRowItem.tsx type VirtualRowItemProps (line 12) | interface VirtualRowItemProps { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/ai-timeline-loading/AITimelineLoadingOverlay.tsx type Props (line 7) | type Props = { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/entry-column-wrapper/types.tsx type EntryColumnWrapperProps (line 1) | interface EntryColumnWrapperProps extends ComponentType { FILE: apps/desktop/layer/renderer/src/modules/entry-column/components/mark-all-button.tsx type MarkAllButtonProps (line 24) | interface MarkAllButtonProps { method onAutoClose (line 68) | onAutoClose() { FILE: apps/desktop/layer/renderer/src/modules/entry-column/context/EntriesContext.tsx type EntriesStateContextValue (line 8) | type EntriesStateContextValue = { type EntriesActionsContextValue (line 21) | type EntriesActionsContextValue = { FILE: apps/desktop/layer/renderer/src/modules/entry-column/hooks/useAttachScrollBeyond.tsx constant DEFAULT_THRESHOLD (line 6) | const DEFAULT_THRESHOLD = 30 FILE: apps/desktop/layer/renderer/src/modules/entry-column/hooks/useEntriesByView.ts function getEntryIdsFromMultiplePlace (line 112) | function getEntryIdsFromMultiplePlace(...entryIds: Array = FC

FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/AudioPlayer.tsx type AudioPlayerProps (line 11) | interface AudioPlayerProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/AuthorHeader.tsx type AuthorHeaderProps (line 11) | interface AuthorHeaderProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/ContentBody.tsx type ContentBodyProps (line 8) | interface ContentBodyProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/MediaTranscript.tsx constant MAX_PARAGRAPH_LENGTH (line 7) | const MAX_PARAGRAPH_LENGTH = 300 type SubtitleItem (line 9) | interface SubtitleItem { type MediaTranscriptProps (line 18) | interface MediaTranscriptProps { function srtTimeToSeconds (line 32) | function srtTimeToSeconds(timeString: string): number { function formatTimeString (line 53) | function formatTimeString(seconds: number): string { function processEnglishContent (line 64) | function processEnglishContent(allText: string): string[] { function calculateEnglishTiming (line 119) | function calculateEnglishTiming( function parseSrt (line 243) | function parseSrt(srtText: string): SubtitleItem[] { function formatTime (line 326) | function formatTime(timeString: string): string { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/TranscriptToggle.tsx type TranscriptToggleProps (line 3) | interface TranscriptToggleProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/shared/VideoPlayer.tsx type VideoPlayerProps (line 24) | interface VideoPlayerProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/layouts/types.ts type EntryLayoutProps (line 4) | interface EntryLayoutProps { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/selection/GlassButton.tsx type GlassButtonProps (line 5) | interface GlassButtonProps extends HTMLMotionProps<"button"> { FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/selection/SharePosterModal.tsx type SharePosterModalProps (line 16) | type SharePosterModalProps = { type Mode (line 21) | type Mode = "light" | "dark" function SharePosterModal (line 23) | function SharePosterModal({ selectedText, entryId }: SharePosterModalPro... function loadImage (line 475) | function loadImage(url: string): Promise { function wrapText (line 485) | function wrapText(ctx: CanvasRenderingContext2D, text: string, maxWidth:... FILE: apps/desktop/layer/renderer/src/modules/entry-content/components/selection/TextSelectionToolbar.tsx type TextSelectionToolbarProps (line 29) | type TextSelectionToolbarProps = { constant DEFAULT_DIMENSIONS (line 36) | const DEFAULT_DIMENSIONS = { constant VIEWPORT_PADDING (line 41) | const VIEWPORT_PADDING = 12 function TextSelectionToolbar (line 43) | function TextSelectionToolbar({ type ToolbarButtonProps (line 181) | type ToolbarButtonProps = { function ToolbarButton (line 188) | function ToolbarButton({ iconClassName, label, onClick, active }: Toolba... function getViewport (line 209) | function getViewport() { FILE: apps/desktop/layer/renderer/src/modules/entry-content/constants/navigation-hints.ts constant NAVIGATION_HINTS_CONSTANTS (line 4) | const NAVIGATION_HINTS_CONSTANTS = { constant NAVIGATION_HINTS_TEXT (line 27) | const NAVIGATION_HINTS_TEXT = { constant NAVIGATION_HINTS_ICONS (line 35) | const NAVIGATION_HINTS_ICONS = { FILE: apps/desktop/layer/renderer/src/modules/entry-content/hooks/useEntryNavigationHints.ts type UseEntryNavigationHintsOptions (line 8) | interface UseEntryNavigationHintsOptions { type UseEntryNavigationHintsReturn (line 17) | interface UseEntryNavigationHintsReturn { FILE: apps/desktop/layer/renderer/src/modules/feed/feed-icon.tsx type GetIconPropsProps (line 24) | type GetIconPropsProps = { function getIconProps (line 34) | function getIconProps(props: GetIconPropsProps) { type IconTarget (line 171) | type IconTarget = { type FeedIconEntry (line 184) | type FeedIconEntry = { authorAvatar?: string | null; firstPhotoUrl?: str... function FeedIcon (line 191) | function FeedIcon({ FILE: apps/desktop/layer/renderer/src/modules/feed/feed-summary.tsx function FollowSummary (line 19) | function FollowSummary({ FILE: apps/desktop/layer/renderer/src/modules/integration/CustomIntegrationPreview.tsx type CustomIntegrationPreviewProps (line 9) | interface CustomIntegrationPreviewProps { FILE: apps/desktop/layer/renderer/src/modules/integration/CustomIntegrationValidator.tsx type CustomIntegrationValidatorProps (line 7) | interface CustomIntegrationValidatorProps { FILE: apps/desktop/layer/renderer/src/modules/integration/PlaceholderHelp.tsx type PlaceholderHelpProps (line 8) | interface PlaceholderHelpProps { FILE: apps/desktop/layer/renderer/src/modules/integration/URLSchemePreview.tsx type URLSchemePreviewProps (line 9) | interface URLSchemePreviewProps { FILE: apps/desktop/layer/renderer/src/modules/integration/custom-integration-manager.ts type PlaceholderContext (line 21) | interface PlaceholderContext { class CustomIntegrationManager (line 36) | class CustomIntegrationManager { method getEntryContentAsMarkdown (line 40) | private static async getEntryContentAsMarkdown(entry: EntryModel): Pro... method getDescription (line 61) | private static getDescription(entry: EntryModel): string { method buildPlaceholderContext (line 75) | static async buildPlaceholderContext(entry: EntryModel): Promise { method canExecuteURLScheme (line 86) | canExecuteURLScheme(): boolean { method getExamples (line 95) | static getExamples(): { name: string; scheme: string; description: str... FILE: apps/desktop/layer/renderer/src/modules/new-user-guide/ai-chat-pane.tsx constant SUGGESTION_KEYS (line 45) | const SUGGESTION_KEYS = [ constant SUGGESTION_SAMPLE_SIZE (line 62) | const SUGGESTION_SAMPLE_SIZE = 5 type SuggestionKey (line 64) | type SuggestionKey = (typeof SUGGESTION_KEYS)[number] function pickSuggestionKeys (line 66) | function pickSuggestionKeys(previous?: readonly SuggestionKey[]): Sugges... function AIChatPane (line 99) | function AIChatPane() { function AIChatPaneImpl (line 107) | function AIChatPaneImpl() { type WelcomeProps (line 165) | interface WelcomeProps { function Welcome (line 169) | function Welcome({ onSuggestionClick }: WelcomeProps) { function FinishListener (line 232) | function FinishListener() { constant SCROLL_BOTTOM_THRESHOLD (line 247) | const SCROLL_BOTTOM_THRESHOLD = 100 type AIChatInterfaceProps (line 249) | interface AIChatInterfaceProps { function AIChatInterface (line 253) | function AIChatInterface({ inputRef }: AIChatInterfaceProps) { constant GRADIENT_COLORS (line 535) | const GRADIENT_COLORS = [ function gradientByIndex (line 558) | function gradientByIndex(index: number, isDark: boolean) { FILE: apps/desktop/layer/renderer/src/modules/new-user-guide/discover-import-step.tsx function DiscoverImportStep (line 9) | function DiscoverImportStep() { FILE: apps/desktop/layer/renderer/src/modules/new-user-guide/feeds-selection-list.tsx type FeedToSelect (line 25) | type FeedToSelect = Omit function FeedsSelectionList (line 43) | function FeedsSelectionList() { function FeedSelectionOperationScreen (line 59) | function FeedSelectionOperationScreen() { function FeedSelectionItem (line 133) | function FeedSelectionItem({ feedAtom }: { feedAtom: PrimitiveAtom["data"] function useTOTPModalWrapper (line 105) | function useTOTPModalWrapper( FILE: apps/desktop/layer/renderer/src/modules/profile/profile-setting-form.tsx type ExtendedUser (line 58) | type ExtendedUser = ReturnType & { function onSubmit (line 126) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/profile/two-factor.tsx type PasswordFormValues (line 37) | type PasswordFormValues = z.infer type TOTPFormValues (line 42) | type TOTPFormValues = z.infer type PasswordFormProps (line 44) | type PasswordFormProps = { function TOTPForm (line 65) | function TOTPForm({ function PasswordForm (line 143) | function PasswordForm({ function TwoFactor (line 250) | function TwoFactor() { FILE: apps/desktop/layer/renderer/src/modules/profile/update-password-form.tsx function onSubmit (line 72) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/profile/user-profile-modal/UserProfileModalContent.tsx type ItemVariant (line 32) | type ItemVariant = "loose" | "compact" type PickedUser (line 219) | type PickedUser = ReturnType FILE: apps/desktop/layer/renderer/src/modules/profile/user-profile-modal/shared.tsx type ItemVariant (line 28) | type ItemVariant = "loose" | "compact" type SubscriptionModalContentProps (line 30) | interface SubscriptionModalContentProps { FILE: apps/desktop/layer/renderer/src/modules/renderer/components/TimeStamp.tsx type CircleProgressProps (line 57) | interface CircleProgressProps { FILE: apps/desktop/layer/renderer/src/modules/renderer/context.tsx type EntryContentContext (line 5) | interface EntryContentContext { type EntryInfoContext (line 25) | interface EntryInfoContext { FILE: apps/desktop/layer/renderer/src/modules/renderer/html.tsx function EntryContentHTMLRenderer (line 19) | function EntryContentHTMLRenderer, "children"> function EntryContentMarkdownRenderer (line 20) | function EntryContentMarkdownRenderer({ function isValidTimeString (line 104) | function isValidTimeString(time: string): boolean { FILE: apps/desktop/layer/renderer/src/modules/renderer/types.ts type EntryContentRendererProps (line 3) | type EntryContentRendererProps = { FILE: apps/desktop/layer/renderer/src/modules/review-prompt/utils.ts constant REVIEW_PROMPT_QUIET_WINDOW_MS (line 12) | const REVIEW_PROMPT_QUIET_WINDOW_MS = 5000 type DesktopReviewDistribution (line 14) | type DesktopReviewDistribution = "mas" | "microsoft_store" | "unsupported" type DesktopReviewRateTarget (line 15) | type DesktopReviewRateTarget = "mas" | "microsoft_store" | null constant APPLE_REVIEW_URL (line 17) | const APPLE_REVIEW_URL = constant MICROSOFT_PRODUCT_ID (line 19) | const MICROSOFT_PRODUCT_ID = "9NVFZPV0V0HT" constant MICROSOFT_REVIEW_URI (line 20) | const MICROSOFT_REVIEW_URI = `ms-windows-store://review/?ProductId=${MIC... constant MICROSOFT_REVIEW_URL (line 21) | const MICROSOFT_REVIEW_URL = "https://apps.microsoft.com/detail/9nvfzpv0... constant SUPPORT_EMAIL (line 22) | const SUPPORT_EMAIL = "support@folo.is" constant REVIEW_PROMPT_STORAGE_PREFIX (line 23) | const REVIEW_PROMPT_STORAGE_PREFIX = getStorageNS("review-prompt") FILE: apps/desktop/layer/renderer/src/modules/rsshub/add-modal-content.tsx function AddModalContent (line 26) | function AddModalContent({ FILE: apps/desktop/layer/renderer/src/modules/rsshub/set-modal-content.tsx function SetModalContent (line 27) | function SetModalContent({ FILE: apps/desktop/layer/renderer/src/modules/settings/constants.ts constant SETTING_MODAL_ID (line 1) | const SETTING_MODAL_ID = "setting-modal" constant GUEST_ALLOWED_SETTING_TABS (line 3) | const GUEST_ALLOWED_SETTING_TABS = ["general", "appearance", "about", "s... constant GUEST_ALLOWED_SETTING_TABS_SET (line 5) | const GUEST_ALLOWED_SETTING_TABS_SET = new Set(GUEST_ALLOWED_SET... FILE: apps/desktop/layer/renderer/src/modules/settings/helper/setting-builder.tsx type SharedSettingItem (line 14) | type SharedSettingItem = { type SettingItem (line 18) | type SettingItem = { type SectionSettingItem (line 36) | type SectionSettingItem = { type ActionSettingItem (line 42) | type ActionSettingItem = { type CustomSettingItem (line 48) | type CustomSettingItem = ReactNode | FC FILE: apps/desktop/layer/renderer/src/modules/settings/helper/sync-queue.ts type SettingMapping (line 22) | type SettingMapping = { type SettingSyncTab (line 84) | type SettingSyncTab = keyof SettingMapping type SettingSyncQueueItem (line 85) | interface SettingSyncQueueItem { type PersistedSettingSyncQueue (line 91) | interface PersistedSettingSyncQueue { class SettingSyncQueue (line 96) | class SettingSyncQueue { method getCurrentUserId (line 100) | private getCurrentUserId() { method bindQueueOwner (line 104) | private bindQueueOwner(currentUserId: string) { method reportSyncError (line 116) | private reportSyncError(stage: "flush" | "syncLocal", error: unknown) { method init (line 124) | async init() { method teardown (line 155) | teardown() { method persist (line 164) | private persist() { method load (line 177) | private load() { method enqueue (line 222) | async enqueue(tab: T, payload: Partial = T & { FILE: apps/desktop/layer/renderer/src/modules/settings/hooks/useWrapEnhancedSettingItem.ts type WrapEnhancedSettingTab (line 7) | enum WrapEnhancedSettingTab { FILE: apps/desktop/layer/renderer/src/modules/settings/modal/hooks.ts type Ctx (line 5) | interface Ctx { FILE: apps/desktop/layer/renderer/src/modules/settings/modal/layout.tsx function SettingModalLayout (line 34) | function SettingModalLayout(props: PropsWithChildren) { FILE: apps/desktop/layer/renderer/src/modules/settings/modal/useSettingModal.ts type SettingModalOptions (line 8) | type SettingModalOptions = FILE: apps/desktop/layer/renderer/src/modules/settings/sections/fonts.tsx constant FALLBACK_FONT (line 20) | const FALLBACK_FONT = "Default (UI Font)" constant DEFAULT_FONT (line 21) | const DEFAULT_FONT = "system-ui" constant CUSTOM_FONT (line 22) | const CUSTOM_FONT = "Custom" FILE: apps/desktop/layer/renderer/src/modules/settings/settings-glob.ts function getSettings (line 6) | function getSettings() { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai.tsx constant AI_SETTING_SECTION_IDS (line 19) | const AI_SETTING_SECTION_IDS = { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/byok/ByokProviderItem.tsx type ByokProviderItemProps (line 6) | interface ByokProviderItemProps { constant PROVIDER_LABELS (line 12) | const PROVIDER_LABELS: Record = { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/byok/ByokProviderModalContent.tsx type ByokProviderModalContentProps (line 17) | interface ByokProviderModalContentProps { constant EMPTY_CONFIGURED_PROVIDERS (line 24) | const EMPTY_CONFIGURED_PROVIDERS: ByokProviderName[] = [] FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/byok/constants.ts constant PROVIDER_OPTIONS (line 3) | const PROVIDER_OPTIONS: { value: ByokProviderName; label: string }[] = [ FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/MCPPresetCard.tsx type MCPPresetCardProps (line 5) | interface MCPPresetCardProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/MCPPresetSelectionModal.tsx type MCPPresetSelectionModalProps (line 7) | interface MCPPresetSelectionModalProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/MCPServiceItem.tsx type MCPServiceItemProps (line 7) | interface MCPServiceItemProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/MCPServiceModalContent.tsx type MCPServiceModalContentProps (line 17) | interface MCPServiceModalContentProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/MCPServicesSection.tsx type OptimisticMCPService (line 29) | type OptimisticMCPService = WithOptimistic FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/mcp/types.ts type MCPPreset (line 1) | interface MCPPreset { constant MCP_PRESETS (line 18) | const MCP_PRESETS: MCPPreset[] = [ FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/shortcuts/ShortcutItem.tsx type ShortcutItemProps (line 9) | interface ShortcutItemProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/shortcuts/ShortcutModalContent.tsx type ShortcutModalContentProps (line 20) | interface ShortcutModalContentProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/DetailedUsageModal.tsx function Metric (line 154) | function Metric({ label, value, unit }: { label: string; value: string; ... FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/EfficiencyTab.tsx type EfficiencyTabProps (line 8) | interface EfficiencyTabProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/HistoryTab.tsx type HistoryTabProps (line 7) | interface HistoryTabProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/OverviewTab.tsx type OverviewTabProps (line 8) | interface OverviewTabProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/PatternsTab.tsx type PatternsTabProps (line 8) | interface PatternsTabProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/UsageProgressRing.tsx type UsageProgressRingProps (line 3) | interface UsageProgressRingProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/UsageWarningBanner.tsx type WarningLevel (line 4) | type WarningLevel = "safe" | "moderate" | "high" | "critical" | (string ... type UsageWarningBannerProps (line 6) | interface UsageWarningBannerProps { function formatEta (line 78) | function formatEta(ts: number) { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/charts/BarList.tsx type BarListProps (line 3) | interface BarListProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/charts/Sparkline.tsx type SparklineProps (line 1) | interface SparklineProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/charts/TinyBars.tsx type TinyBarsProps (line 5) | interface TinyBarsProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/types.ts type ChartDataPoint (line 2) | interface ChartDataPoint { type BarListItem (line 7) | interface BarListItem { type TokenCount (line 14) | interface TokenCount { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/appearance.tsx constant ACCENT_COLORS (line 571) | const ACCENT_COLORS: AccentColor[] = [ FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/cli.tsx type CliInstallStatus (line 12) | interface CliInstallStatus { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/data-control.tsx function onSubmit (line 131) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/feeds.tsx type SortField (line 58) | type SortField = "name" | "view" | "date" | "subscriptionCount" | "updat... type SortDirection (line 59) | type SortDirection = "asc" | "desc" type FeedFilter (line 60) | type FeedFilter = "all" | "rsshub" constant GRID_COLS_CLASSNAME (line 72) | const GRID_COLS_CLASSNAME = "grid-cols-[30px_auto_100px_150px_60px_60px]" FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/general.tsx method onChange (line 87) | onChange(value) { method onChangeGuard (line 175) | onChangeGuard(value) { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/integration/CustomIntegrationModal.tsx type FormData (line 77) | type FormData = z.infer> type CustomIntegrationModalProps (line 79) | interface CustomIntegrationModalProps { constant HTTP_METHODS (line 85) | const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"] as const constant INTEGRATION_TYPES (line 86) | const INTEGRATION_TYPES = [ constant ICON_OPTIONS (line 91) | const ICON_OPTIONS = [ FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/integration/CustomIntegrationSection.tsx type CustomIntegrationSectionProps (line 21) | interface CustomIntegrationSectionProps { type CustomIntegrationsSectionProps (line 179) | interface CustomIntegrationsSectionProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/lists/index.tsx method onError (line 43) | onError() { method onMutate (line 46) | onMutate() { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/lists/modals.tsx function onSubmit (line 98) | function onSubmit(values: z.infer) { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/plan.tsx constant APPLE_SUBSCRIPTION_MANAGEMENT_URL (line 19) | const APPLE_SUBSCRIPTION_MANAGEMENT_URL = "https://apps.apple.com/accoun... type ActiveSubscription (line 21) | type ActiveSubscription = { constant AI_MODEL_SELECTION_VALUE_LABELS (line 31) | const AI_MODEL_SELECTION_VALUE_LABELS = { function SettingPlan (line 141) | function SettingPlan() { type PlanCardProps (line 213) | interface PlanCardProps { FILE: apps/desktop/layer/renderer/src/modules/settings/tabs/shortcut.tsx type ShortcutInputWrapperProps (line 128) | interface ShortcutInputWrapperProps { FILE: apps/desktop/layer/renderer/src/modules/settings/utils.ts type SettingPageContext (line 4) | interface SettingPageContext { type DisableWhy (line 9) | enum DisableWhy { type SettingPageConfig (line 14) | interface SettingPageConfig { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/CategoryRemoveDialogContent.tsx function CategoryRemoveDialogContent (line 12) | function CategoryRemoveDialogContent({ FILE: apps/desktop/layer/renderer/src/modules/subscription-column/CategoryUnsubscribeDialogContent.tsx function CategoryUnsubscribeDialogContent (line 14) | function CategoryUnsubscribeDialogContent({ FILE: apps/desktop/layer/renderer/src/modules/subscription-column/FeedCategory.tsx type FeedId (line 44) | type FeedId = string type FeedCategoryProps (line 45) | interface FeedCategoryProps { function FeedCategoryImpl (line 51) | function FeedCategoryImpl({ function FilterReadFeedCategory (line 394) | function FilterReadFeedCategory(props: FeedCategoryProps) { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/FeedItem.tsx type FeedItemProps (line 46) | interface FeedItemProps { method click (line 182) | click() { type ListItemProps (line 307) | interface ListItemProps { type InboxItemProps (line 431) | interface InboxItemProps { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/RenameCategoryForm.tsx method onMutate (line 36) | onMutate({ lastCategory, newCategory }) { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/SimpleDiscoverModal.tsx function SimpleDiscoverModal (line 55) | function SimpleDiscoverModal({ dismiss }: { dismiss: () => void }) { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/SortedFeedItems.tsx type SortListProps (line 13) | type SortListProps = { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/SubscriptionTabButton.tsx function SubscriptionTabButton (line 24) | function SubscriptionTabButton({ FILE: apps/desktop/layer/renderer/src/modules/subscription-column/TimelineTabsSettingsModal.tsx function ContainerDroppable (line 31) | function ContainerDroppable({ function getViewMeta (line 63) | function getViewMeta(timelineId: string) { function TabItem (line 70) | function TabItem({ id }: { id: UniqueIdentifier }) { function SortableTabItem (line 83) | function SortableTabItem({ id }: { id: UniqueIdentifier }) { function useResolvedTimelineTabs (line 113) | function useResolvedTimelineTabs() { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/atom.ts type FeedListSortBy (line 7) | type FeedListSortBy = "count" | "alphabetical" type FeedListSortOrder (line 8) | type FeedListSortOrder = "asc" | "desc" constant SELECT_NOTHING (line 38) | const SELECT_NOTHING = [] FILE: apps/desktop/layer/renderer/src/modules/subscription-column/hook.ts function useShouldFreeUpSpace (line 5) | function useShouldFreeUpSpace() { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/index.tsx function SubscriptionColumn (line 44) | function SubscriptionColumn({ FILE: apps/desktop/layer/renderer/src/modules/subscription-column/sort-by/types.tsx type FeedListProps (line 3) | type FeedListProps = { type SortBy (line 8) | type SortBy = "count" | "alphabetical" type ListListProps (line 10) | type ListListProps = { FILE: apps/desktop/layer/renderer/src/modules/subscription-column/subscription-list/SortButton.tsx constant SORT_LIST (line 14) | const SORT_LIST = [ FILE: apps/desktop/layer/renderer/src/modules/subscription-column/subscription-list/SubscriptionListGuard.tsx type SubscriptionProps (line 22) | type SubscriptionProps = ComponentType< FILE: apps/desktop/layer/renderer/src/modules/trending/index.tsx type Language (line 34) | type Language = "all" | "eng" | "cmn" | "fra" type View (line 36) | type View = "all" | string function Trending (line 56) | function Trending({ FILE: apps/desktop/layer/renderer/src/modules/user/LoginButton.tsx type LoginProps (line 8) | interface LoginProps { FILE: apps/desktop/layer/renderer/src/modules/user/ProfileButton.tsx type ProfileButtonProps (line 35) | type ProfileButtonProps = LoginProps & { FILE: apps/desktop/layer/renderer/src/modules/user/UserGallery.tsx type UserGalleryProps (line 5) | interface UserGalleryProps { FILE: apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/action/index.tsx function Component (line 7) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/discover/index.tsx type SectionProps (line 16) | interface SectionProps { function Section (line 21) | function Section({ children, className }: SectionProps) { function Component (line 29) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/power/index.tsx function Component (line 9) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/(main)/(layer)/(subview)/rsshub/index.tsx function Component (line 23) | function Component() { type InstanceItem (line 83) | type InstanceItem = RSSHubListItem | { id: string; isOfficial: true } function List (line 248) | function List({ data }: { data?: RSSHubListItem[] }) { function SelectInstanceButton (line 301) | function SelectInstanceButton({ instance }: { instance: RSSHubListItem }) { FILE: apps/desktop/layer/renderer/src/pages/(main)/index.sync.tsx function Component (line 9) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/ai.tsx function Component (line 17) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/appearance.tsx function Component (line 14) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/cli.tsx function Component (line 17) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/data-control.tsx function Component (line 15) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/feeds.tsx function Component (line 14) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/general.tsx function Component (line 14) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/integration.tsx function Component (line 14) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/list.tsx function Component (line 15) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/notifications.tsx function Component (line 14) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/plan.tsx function Component (line 16) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/profile.tsx function Component (line 24) | function Component() { FILE: apps/desktop/layer/renderer/src/pages/settings/(settings)/shortcuts.tsx function Component (line 16) | function Component() { FILE: apps/desktop/layer/renderer/src/providers/extension-expose-provider.tsx type CustomRoute (line 28) | interface CustomRoute { method updateDownloaded (line 39) | updateDownloaded() { method distributionUpdateAvailable (line 45) | distributionUpdateAvailable(payload: DistributionUpdateNotice) { method getApiUrl (line 81) | getApiUrl() { method getWebUrl (line 84) | getWebUrl() { method clearIfLoginOtherAccount (line 88) | clearIfLoginOtherAccount(newUserId: string) { method applyOneTimeToken (line 91) | async applyOneTimeToken(token: string) { method readyToUpdate (line 96) | readyToUpdate() { method invalidateQuery (line 102) | invalidateQuery(queryKey: string | string[]) { method profile (line 124) | profile(id, variant) { method rsshubRoute (line 127) | rsshubRoute(route) { FILE: apps/desktop/layer/renderer/src/providers/invalidate-query-provider.tsx class ElectronCloseEvent (line 10) | class ElectronCloseEvent extends Event { method constructor (line 12) | constructor() { class ElectronShowEvent (line 16) | class ElectronShowEvent extends Event { method constructor (line 18) | constructor() { method predicate (line 55) | predicate(query) { FILE: apps/desktop/layer/renderer/src/providers/lazy/index.ts method onClose (line 35) | onClose() { FILE: apps/desktop/layer/renderer/src/providers/wrapped-element-provider.tsx type WrappedElementProviderProps (line 46) | interface WrappedElementProviderProps { FILE: apps/desktop/layer/renderer/src/push-notification.ts function registerWebPushNotifications (line 12) | async function registerWebPushNotifications() { type NavigateEntryMessage (line 69) | interface NavigateEntryMessage { type ServiceWorkerMessage (line 80) | type ServiceWorkerMessage = NavigateEntryMessage FILE: apps/desktop/layer/renderer/src/queries/auth.ts method retry (line 44) | retry(failureCount, error) { FILE: apps/desktop/layer/renderer/src/queries/feed.ts type FeedQueryParams (line 15) | type FeedQueryParams = { id?: string; url?: string } method onError (line 63) | async onError(err) { method onSuccess (line 66) | onSuccess() { method onError (line 77) | async onError(err) { FILE: apps/desktop/layer/renderer/src/queries/types.d.ts type MutationBaseProps (line 1) | interface MutationBaseProps { FILE: apps/desktop/layer/renderer/src/queries/users.ts type AuthProvider (line 6) | interface AuthProvider { FILE: apps/desktop/layer/renderer/src/queries/wallet.tsx method onError (line 52) | async onError(err) { method onSuccess (line 55) | onSuccess() { FILE: apps/desktop/layer/renderer/src/store/feed/hooks.ts type PreferredTitleTarget (line 18) | type PreferredTitleTarget = { FILE: apps/desktop/layer/renderer/src/store/image/db.ts function createStore (line 6) | function createStore(dbName: string, storeName: string): UseStore { FILE: apps/desktop/layer/renderer/src/store/image/index.ts type StoreImageType (line 6) | interface StoreImageType { type State (line 13) | interface State { class ImageActions (line 23) | class ImageActions { method getImage (line 24) | getImage(src: string) { method saveImages (line 28) | saveImages(images: StoreImageType[]) { method fetchDimensionsFromDb (line 38) | async fetchDimensionsFromDb(images: string[]) { method getImagesFromEntry (line 45) | getImagesFromEntry(entry: EntryModel) { FILE: apps/desktop/layer/renderer/src/store/search/constants.ts type SearchType (line 12) | type SearchType = (typeof SearchType)[keyof typeof SearchType] FILE: apps/desktop/layer/renderer/src/store/search/index.ts class SearchActions (line 35) | class SearchActions { method reset (line 36) | reset() { method createFuse (line 40) | private createFuse(data: T[], keys: (keyof T)[]) { method createLocalDbSearch (line 48) | async createLocalDbSearch() { method setSearchType (line 108) | setSearchType(type: SearchType) { method getCurrentKeyword (line 112) | getCurrentKeyword() { FILE: apps/desktop/layer/renderer/src/store/search/types.ts type SearchResult (line 6) | interface SearchResult exte... type SearchState (line 10) | interface SearchState { type SearchInstance (line 17) | interface SearchInstance { FILE: apps/desktop/layer/renderer/src/store/utils/helper.ts method get (line 59) | get(_, prop) { type FunctionKeys (line 81) | type FunctionKeys = { type FunctionProps (line 85) | type FunctionProps = Pick> function createImmerSetter (line 100) | function createImmerSetter(useStore: UseBoundStore>) { type MayBeDraft (line 109) | type MayBeDraft = T type SyncOrAsync (line 113) | type SyncOrAsync = T | Promise type ExecutorFn (line 114) | type ExecutorFn = (snapshot: S, ctx: Ctx) => SyncOrAsync class Transaction (line 116) | class Transaction { method constructor (line 124) | constructor(snapshot?: S, ctx?: Ctx) { method rollback (line 129) | rollback(fn: ExecutorFn): this { method execute (line 134) | execute(executor: ExecutorFn): this { method optimistic (line 139) | optimistic(executor: ExecutorFn): this { method persist (line 144) | persist(fn: ExecutorFn): this { method run (line 149) | async run(): Promise { FILE: apps/desktop/layer/renderer/src/workers/sw/pusher.ts type NewEntryMessage (line 2) | interface NewEntryMessage { type Message (line 11) | type Message = NewEntryMessage FILE: apps/desktop/plugins/vite/ast.ts method transform (line 10) | transform(node) { FILE: apps/desktop/plugins/vite/cleanup.ts function cleanupUnnecessaryFilesPlugin (line 6) | function cleanupUnnecessaryFilesPlugin(files: string[]): Plugin { FILE: apps/desktop/plugins/vite/compress.ts function compressDirectory (line 12) | async function compressDirectory(sourceDir: string, outputFile: string) { function compressAndFingerprintPlugin (line 23) | function compressAndFingerprintPlugin(outDir: string): Plugin { FILE: apps/desktop/plugins/vite/deps.ts function createDependencyChunksPlugin (line 3) | function createDependencyChunksPlugin(dependencies: string[][]): Plugin { FILE: apps/desktop/plugins/vite/generate-main-hash.ts function calculateMainHash (line 8) | async function calculateMainHash( function main (line 36) | async function main() { FILE: apps/desktop/plugins/vite/hmr.ts function isNodeWithinCircularImports (line 5) | function isNodeWithinCircularImports( method configureServer (line 45) | configureServer(server) { method handleHotUpdate (line 50) | handleHotUpdate({ file, server }: HmrContext) { FILE: apps/desktop/plugins/vite/html-inject.ts function htmlInjectPlugin (line 4) | function htmlInjectPlugin(env: typeof EnvType): PluginOption { FILE: apps/desktop/plugins/vite/i18n-hmr.ts function customI18nHmrPlugin (line 5) | function customI18nHmrPlugin(): Plugin { FILE: apps/desktop/plugins/vite/locales-json.ts function localesJsonPlugin (line 10) | function localesJsonPlugin(): Plugin { FILE: apps/desktop/plugins/vite/locales.ts function localesPlugin (line 8) | function localesPlugin(): Plugin { FILE: apps/desktop/plugins/vite/manifest.ts function manifestPlugin (line 6) | function manifestPlugin(): Plugin { FILE: apps/desktop/plugins/vite/specific-import.ts type Platform (line 3) | type Platform = "electron" | "web" function createPlatformSpecificImportPlugin (line 4) | function createPlatformSpecificImportPlugin(platform: Platform): Plugin { FILE: apps/desktop/plugins/vite/utils/i18n-completeness.ts type LanguageCompletion (line 6) | type LanguageCompletion = Record function getLanguageFiles (line 8) | function getLanguageFiles(dir: string): string[] { function getNamespaces (line 12) | function getNamespaces(localesDir: string): string[] { function countKeys (line 18) | function countKeys(obj: any): number { function calculateCompleteness (line 30) | function calculateCompleteness(localesDir: string): LanguageCompletion { FILE: apps/desktop/scripts/generate-appx-manifest.ts type AppXManifestConfig (line 7) | interface AppXManifestConfig { function generateAppXManifest (line 20) | function generateAppXManifest(config: AppXManifestConfig, templatePath: ... function main (line 50) | async function main() { FILE: apps/desktop/scripts/merge-yml.ts function findYmlFiles (line 8) | function findYmlFiles(dir: string): string[] { FILE: apps/desktop/vite.config.ts constant ROOT (line 26) | const ROOT = resolve(__dirname, "./layer/renderer") method configureServer (line 30) | configureServer(server: ViteDevServer) { function checkBrowserSupport (line 309) | function checkBrowserSupport() { method configResolved (line 323) | configResolved(resolvedConfig) { method closeBundle (line 327) | closeBundle() { method transformIndexHtml (line 346) | transformIndexHtml(html) { FILE: apps/landing/global.d.ts type NextErrorProps (line 6) | type NextErrorProps = { type NextPageParams (line 10) | type NextPageParams

= PropsWithChildren< type Component (line 16) | type Component

= FC type ComponentType (line 18) | type ComponentType

= { type Document (line 24) | interface Document { type ViewTransition (line 28) | interface ViewTransition { type AriaAttributes (line 37) | interface AriaAttributes { FILE: apps/landing/next.config.mjs method rewrites (line 34) | async rewrites() { FILE: apps/landing/plugins/eslint-recursive-sort.mjs method create (line 27) | create(context) { FILE: apps/landing/src/app/[locale]/download/page.tsx type LocaleParams (line 10) | type LocaleParams = { locale?: string } function generateMetadata (line 14) | async function generateMetadata({ function DownloadPage (line 33) | async function DownloadPage() { FILE: apps/landing/src/app/[locale]/layout.tsx type LocaleParams (line 21) | type LocaleParams = { locale?: string } type MaybeAsyncLocaleParams (line 23) | type MaybeAsyncLocaleParams = LocaleParams | Promise | und... function generateStaticParams (line 37) | function generateStaticParams() { function generateMetadata (line 41) | async function generateMetadata(props: { function generateViewport (line 106) | function generateViewport(): Viewport { function LocaleLayout (line 121) | async function LocaleLayout({ FILE: apps/landing/src/app/[locale]/page.tsx type LocaleParams (line 14) | type LocaleParams = { locale?: string } function Home (line 16) | async function Home({ FILE: apps/landing/src/app/[locale]/pricing/page.tsx type LocaleParams (line 8) | type LocaleParams = { locale?: string } function generateMetadata (line 12) | async function generateMetadata({ function PricingPage (line 31) | async function PricingPage() { FILE: apps/landing/src/app/[locale]/privacy-policy/page.tsx function PrivacyPolicyPage (line 32) | async function PrivacyPolicyPage() { FILE: apps/landing/src/app/[locale]/terms-of-service/page.tsx function TermsOfServicePage (line 30) | async function TermsOfServicePage() { FILE: apps/landing/src/app/apple-app-site-association/route.ts function GET (line 3) | function GET() { FILE: apps/landing/src/app/discover-sources/route.ts constant CACHE_TTL_MS (line 8) | const CACHE_TTL_MS = 12 * 60 * 60 * 1000 function GET (line 17) | async function GET() { FILE: apps/landing/src/app/layout.tsx function RootLayout (line 3) | function RootLayout({ FILE: apps/landing/src/app/robots.ts function robots (line 3) | function robots(): MetadataRoute.Robots { FILE: apps/landing/src/components/common/GithubTrending.tsx function GithubTrending (line 1) | function GithubTrending() { FILE: apps/landing/src/components/common/Lazyload.tsx type LazyLoadProps (line 9) | type LazyLoadProps = { FILE: apps/landing/src/components/common/LightRays.tsx type RaysOrigin (line 10) | type RaysOrigin = type LightRaysProps (line 20) | interface LightRaysProps { constant DEFAULT_COLOR (line 41) | const DEFAULT_COLOR = '#ffffff' FILE: apps/landing/src/components/common/QueryHydrate.tsx function QueryHydrate (line 6) | function QueryHydrate(props: HydrationBoundaryProps) { FILE: apps/landing/src/components/layout/footer/Footer.tsx type LinkItem (line 8) | type LinkItem = { label: string; href: string; external?: boolean } function LinkColumn (line 49) | function LinkColumn({ title, links }: { title: string; links: LinkItem[]... type FooterProps (line 75) | interface FooterProps { FILE: apps/landing/src/components/ui/accordion/Accordion.tsx type CollapseContextValue (line 14) | interface CollapseContextValue { type CollapseGroupProps (line 29) | interface CollapseGroupProps { type CollapseProps (line 66) | interface CollapseProps { type CollapseContentProps (line 139) | interface CollapseContentProps { FILE: apps/landing/src/components/ui/border-beam.tsx type BorderBeamProps (line 6) | interface BorderBeamProps { FILE: apps/landing/src/components/ui/button/Button.tsx type ButtonProps (line 104) | interface ButtonProps FILE: apps/landing/src/components/ui/checkbox/Checkbox.tsx type CheckboxProps (line 42) | type CheckboxProps = React.ComponentProps & function Checkbox (line 48) | function Checkbox({ FILE: apps/landing/src/components/ui/collapse/CollapseCss.tsx type CollapseContextValue (line 12) | interface CollapseContextValue { type CollapseGroupProps (line 27) | interface CollapseGroupProps { type CollapseProps (line 64) | interface CollapseProps { type CollapseCssRef (line 78) | interface CollapseCssRef { type CollapseContentProps (line 147) | interface CollapseContentProps { FILE: apps/landing/src/components/ui/collapse/hooks.tsx type CollapseContextValue (line 4) | interface CollapseContextValue { FILE: apps/landing/src/components/ui/dialog/Dialog.tsx type DialogContextType (line 11) | type DialogContextType = { type DialogProps (line 27) | type DialogProps = React.ComponentProps function Dialog (line 29) | function Dialog({ children, ...props }: DialogProps) { type DialogTriggerProps (line 59) | type DialogTriggerProps = React.ComponentProps function DialogClose (line 73) | function DialogClose(props: DialogCloseProps) { type DialogOverlayProps (line 83) | type DialogOverlayProps = React.ComponentProps function DialogHeader (line 189) | function DialogHeader({ className, ...props }: DialogHeaderProps) { type DialogFooterProps (line 202) | type DialogFooterProps = React.ComponentProps<'div'> function DialogFooter (line 204) | function DialogFooter({ className, ...props }: DialogFooterProps) { type DialogTitleProps (line 217) | type DialogTitleProps = React.ComponentProps function DialogTitle (line 219) | function DialogTitle({ className, ...props }: DialogTitleProps) { type DialogDescriptionProps (line 232) | type DialogDescriptionProps = React.ComponentProps< function DialogDescription (line 236) | function DialogDescription({ className, ...props }: DialogDescriptionPro... FILE: apps/landing/src/components/ui/effects/GridGuides.tsx type GridGuidesProps (line 3) | type GridGuidesProps = React.PropsWithChildren<{ function GridGuides (line 16) | function GridGuides({ FILE: apps/landing/src/components/ui/effects/ParticlesAura.tsx type ParticlesAuraProps (line 6) | type ParticlesAuraProps = { function ParticlesAura (line 16) | function ParticlesAura({ FILE: apps/landing/src/components/ui/effects/TiltCard.tsx type TiltCardProps (line 6) | type TiltCardProps = React.PropsWithChildren<{ function TiltCard (line 16) | function TiltCard({ FILE: apps/landing/src/components/ui/glass/index.tsx type GlassSurfaceProps (line 8) | interface GlassSurfaceProps { FILE: apps/landing/src/components/ui/highlighter.tsx type AnnotationAction (line 7) | type AnnotationAction = type HighlighterProps (line 16) | interface HighlighterProps { function Highlighter (line 28) | function Highlighter({ FILE: apps/landing/src/components/ui/hover-card/HoverCard.tsx type HoverCardProps (line 10) | type HoverCardProps = React.ComponentProps type HoverCardTriggerProps (line 12) | type HoverCardTriggerProps = React.ComponentProps< type HoverCardContentProps (line 16) | type HoverCardContentProps = React.ComponentProps< FILE: apps/landing/src/components/ui/input/Input.tsx type InputProps (line 67) | interface InputProps FILE: apps/landing/src/components/ui/input/TextArea.tsx type TextareaProps (line 9) | interface TextareaProps extends React.TextareaHTMLAttributes { type LightRay (line 17) | type LightRay = { function LightRays (line 87) | function LightRays({ FILE: apps/landing/src/components/ui/loading/index.tsx type LoadingProps (line 5) | type LoadingProps = { FILE: apps/landing/src/components/ui/magic-card.tsx type MagicCardProps (line 8) | interface MagicCardProps { function MagicCard (line 18) | function MagicCard({ FILE: apps/landing/src/components/ui/markdown/index.tsx type MarkdownContentProps (line 9) | interface MarkdownContentProps { function MarkdownContent (line 13) | function MarkdownContent({ content }: MarkdownContentProps) { function getMarkdownContent (line 30) | async function getMarkdownContent(filePath: string) { FILE: apps/landing/src/components/ui/modal/ModalManager.ts method present (line 14) | present

( method dismiss (line 49) | dismiss(id: string): void { method __registerCloser (line 64) | __registerCloser(id: string, fn: () => void) { method __unregisterCloser (line 67) | __unregisterCloser(id: string) { FILE: apps/landing/src/components/ui/modal/types.ts type ModalComponentProps (line 5) | type ModalComponentProps = { type ModalComponent (line 10) | type ModalComponent

= FC & { type ModalContentConfig (line 19) | type ModalContentConfig = Partial type ModalItem (line 21) | type ModalItem = { FILE: apps/landing/src/components/ui/prompts/BasePrompt.tsx type PromptVariant (line 19) | type PromptVariant = 'danger' | 'info' type PromptOptions (line 21) | type PromptOptions = { FILE: apps/landing/src/components/ui/prompts/InputPrompt.tsx type InputPromptVariant (line 20) | type InputPromptVariant = 'danger' | 'info' type InputPromptOptions (line 22) | type InputPromptOptions = { FILE: apps/landing/src/components/ui/prompts/Prompt.ts method prompt (line 8) | prompt(options: PromptOptions) { method input (line 11) | input(options: InputPromptOptions): Promise { FILE: apps/landing/src/components/ui/segment-tab/SegmentTab.tsx type SegmentTabItem (line 10) | interface SegmentTabItem { type SegmentTabProps (line 16) | interface SegmentTabProps { function SegmentTab (line 63) | function SegmentTab({ FILE: apps/landing/src/components/ui/select/ComboboxSelect.tsx type ComboboxSelectProps (line 15) | interface ComboboxSelectProps { constant DEFAULT_OPTIONS (line 30) | const DEFAULT_OPTIONS: string[] = [] FILE: apps/landing/src/components/ui/select/MultiSelect.tsx type MultiSelectProps (line 13) | interface MultiSelectProps { constant DEFAULT_VALUE (line 26) | const DEFAULT_VALUE: string[] = [] constant DEFAULT_OPTIONS (line 27) | const DEFAULT_OPTIONS: string[] = [] FILE: apps/landing/src/components/ui/sheet/Sheet.tsx type PresentSheetProps (line 7) | interface PresentSheetProps { FILE: apps/landing/src/components/ui/switch/index.tsx type SwitchProps (line 10) | type SwitchProps = React.ComponentProps & function Switch (line 17) | function Switch({ FILE: apps/landing/src/components/ui/transition/IconTransiton.tsx type IconTransitionProps (line 10) | interface IconTransitionProps { FILE: apps/landing/src/components/ui/transition/factor.tsx type TransitionViewParams (line 18) | interface TransitionViewParams { FILE: apps/landing/src/components/ui/transition/typings.ts type BaseTransitionProps (line 3) | interface BaseTransitionProps extends HTMLMotionProps<'div'> { FILE: apps/landing/src/components/widgets/download/PlatformDownloads.tsx type PlatformDownloadsProps (line 18) | type PlatformDownloadsProps = { FILE: apps/landing/src/components/widgets/landing/Features.tsx type FeaturesProps (line 13) | type FeaturesProps = { type FGProps (line 69) | type FGProps = { function FeatureGridItem (line 77) | function FeatureGridItem({ function DiscoverWindow (line 98) | function DiscoverWindow({ sources }: { sources: DiscoverSource[] }) { FILE: apps/landing/src/components/widgets/landing/Hero.tsx type LandingHeroProps (line 26) | type LandingHeroProps = { type AudienceKey (line 30) | type AudienceKey = 'human' | 'agent' FILE: apps/landing/src/components/widgets/landing/RepoStats.tsx function RepoStats (line 9) | function RepoStats() { function StatBox (line 63) | function StatBox({ FILE: apps/landing/src/components/widgets/landing/TrustedBy.tsx type TrustedByProps (line 7) | type TrustedByProps = { FILE: apps/landing/src/components/widgets/landing/ViewsShowcase.tsx type ViewKey (line 7) | type ViewKey = 'list' | 'social' | 'masonry' | 'grid' FILE: apps/landing/src/components/widgets/landing/WindowChrome.tsx function WindowChrome (line 7) | function WindowChrome({ FILE: apps/landing/src/components/widgets/pricing/PricingPlans.tsx type BillingPeriod (line 12) | type BillingPeriod = 'monthly' | 'yearly' constant AI_MODEL_SELECTION_LABELS (line 14) | const AI_MODEL_SELECTION_LABELS = { FILE: apps/landing/src/components/widgets/simulators/EntryChatPanel.tsx type EntryChatPanelProps (line 7) | interface EntryChatPanelProps { FILE: apps/landing/src/components/widgets/simulators/ListDemo.tsx constant DEFAULT_ITEMS (line 53) | const DEFAULT_ITEMS: HeroTimelineItem[] = [ FILE: apps/landing/src/components/widgets/simulators/TimelineChatDemo.tsx constant INITIAL_HEADER_TITLE (line 5) | const INITIAL_HEADER_TITLE = 'Folo AI - Timeline Summary' FILE: apps/landing/src/components/widgets/simulators/components/ai/AIChainOfThought.tsx type ChainReasoningPart (line 16) | type ChainReasoningPart = ReasoningUIPart | ToolUIPart type AIChainOfThoughtProps (line 17) | interface AIChainOfThoughtProps { FILE: apps/landing/src/components/widgets/simulators/components/ai/AIReasoningPart.tsx type AIReasoningPartProps (line 4) | interface AIReasoningPartProps { FILE: apps/landing/src/components/widgets/simulators/components/ai/ToolInvocationComponent.tsx type ToolInvocationComponentProps (line 7) | interface ToolInvocationComponentProps { FILE: apps/landing/src/components/widgets/simulators/components/ai/animated/AnimatedMarkdown.tsx type MarkdownAnimateTextProps (line 13) | interface MarkdownAnimateTextProps { FILE: apps/landing/src/components/widgets/simulators/components/ai/animated/TokenizedText.tsx type TokenWithSource (line 10) | interface TokenWithSource { type TokenType (line 23) | type TokenType = string | TokenWithSource | ReactElement FILE: apps/landing/src/components/widgets/simulators/components/ai/animated/constants.ts constant DEFAULT_ANIMATION (line 1) | const DEFAULT_ANIMATION = 'mask-left-to-right 0.5s ease-in-out' constant ANIMATION_STYLE (line 2) | const ANIMATION_STYLE = { FILE: apps/landing/src/components/widgets/simulators/components/ai/mocks.ts constant REASONING_GROUPS (line 3) | const REASONING_GROUPS = ReasoningGroups.groups as any FILE: apps/landing/src/components/widgets/simulators/components/ai/shiny-text/ShinyText.tsx type AnimatedShinyTextProps (line 7) | interface AnimatedShinyTextProps extends ComponentPropsWithoutRef<'span'> { FILE: apps/landing/src/components/widgets/simulators/components/chat/AiMockMessage.tsx type AiMockMessageProps (line 11) | interface AiMockMessageProps { FILE: apps/landing/src/components/widgets/simulators/components/chat/ListChatPlayer.tsx type ListChatPlayerProps (line 52) | interface ListChatPlayerProps { FILE: apps/landing/src/components/widgets/simulators/components/chat/stream.ts type StreamOptions (line 1) | interface StreamOptions { type StreamHandle (line 9) | interface StreamHandle { function streamText (line 18) | function streamText(text: string, options: StreamOptions): StreamHandle { FILE: apps/landing/src/components/widgets/simulators/mocks.tsx type EntryDetail (line 7) | type EntryDetail = { constant ENTRY_DETAIL (line 22) | const ENTRY_DETAIL: EntryDetail = { type ToolInvocation (line 37) | type ToolInvocation = { constant AI_TOOL_INVOCATION (line 43) | const AI_TOOL_INVOCATION: ToolInvocation = { type UserContext (line 61) | type UserContext = { type UserPlainTextStep (line 67) | type UserPlainTextStep = { type UserComponentStep (line 72) | type UserComponentStep = { type UserStep (line 81) | type UserStep = UserPlainTextStep | UserComponentStep type AIReasoningPart (line 82) | type AIReasoningPart = { type ToolUIPart (line 86) | type ToolUIPart = { type MarkdownUIPart (line 90) | type MarkdownUIPart = { type AssistantStep (line 94) | type AssistantStep = (AIReasoningPart | ToolUIPart | MarkdownUIPart) & { type ActionStep (line 97) | type ActionStep = { type AI_CHAT_STEP (line 102) | type AI_CHAT_STEP = UserStep | AssistantStep | ActionStep constant AI_SUMMARY_STEPS (line 104) | const AI_SUMMARY_STEPS: AI_CHAT_STEP[] = [ constant TIMELINE_SUMMARY_STEPS (line 165) | const TIMELINE_SUMMARY_STEPS: AI_CHAT_STEP[] = [ FILE: apps/landing/src/constants/download.ts type OS (line 3) | type OS = 'iOS' | 'Android' | 'macOS' | 'Windows' | 'Linux' type PlatformDownloadChannel (line 5) | type PlatformDownloadChannel = { type PlatformDownloadGroup (line 12) | type PlatformDownloadGroup = { FILE: apps/landing/src/constants/env.ts constant API_URL (line 3) | const API_URL: string = (() => { constant GATEWAY_URL (line 12) | const GATEWAY_URL = process.env.NEXT_PUBLIC_GATEWAY_URL || '' FILE: apps/landing/src/constants/site.ts constant APP_NAME (line 1) | const APP_NAME = 'Folo' FILE: apps/landing/src/hooks/biz/use-github-star.ts type GithubRepoStatsResponse (line 4) | type GithubRepoStatsResponse = { FILE: apps/landing/src/hooks/common/use-click-away.ts function on (line 6) | function on( function off (line 17) | function off( FILE: apps/landing/src/hooks/common/use-debounce-value.ts function useDebounceValue (line 3) | function useDebounceValue(value: T, delay: number): T { FILE: apps/landing/src/hooks/common/use-input-composition.ts type InputElementAttributes (line 4) | type InputElementAttributes = React.DetailedHTMLProps< type TextareaElementAttributes (line 8) | type TextareaElementAttributes = React.DetailedHTMLProps< FILE: apps/landing/src/hooks/common/use-sync-effect.ts type CleanupFn (line 3) | type CleanupFn = () => void | undefined FILE: apps/landing/src/hooks/common/useMeasure.ts type ResizeObserverCallback (line 7) | type ResizeObserverCallback = ( class ResizeObserver (line 11) | class ResizeObserver { type RectReadOnly (line 19) | interface RectReadOnly { type HTMLOrSVGElement (line 31) | type HTMLOrSVGElement = HTMLElement | SVGElement type Result (line 33) | type Result = [ type State (line 39) | type State = { type Options (line 46) | type Options = { function useMeasure (line 57) | function useMeasure({ function useOnWindowResize (line 190) | function useOnWindowResize(onWindowResize: (event: Event) => void) { function useOnWindowScroll (line 197) | function useOnWindowScroll(onScroll: () => void, enabled: boolean) { function findScrollContainers (line 208) | function findScrollContainers( FILE: apps/landing/src/i18n/request.ts type RequestConfigParams (line 3) | type RequestConfigParams = { constant SUPPORTED_LOCALES (line 8) | const SUPPORTED_LOCALES = ['en', 'zh', 'jp'] as const constant DEFAULT_LOCALE (line 9) | const DEFAULT_LOCALE = 'en' FILE: apps/landing/src/lib/apple-app-site-association.ts constant APPLE_APP_SITE_ASSOCIATION (line 1) | const APPLE_APP_SITE_ASSOCIATION = { FILE: apps/landing/src/lib/cn.ts function cx (line 11) | function cx(...args: ClassValue[]) { FILE: apps/landing/src/lib/color.ts function stringToHue (line 24) | function stringToHue(str: string) { function addAlphaToHex (line 54) | function addAlphaToHex(hex: string, alpha: number): string { function addAlphaToHSL (line 79) | function addAlphaToHSL(hsl: string, alpha: number): string { function hexToHsl (line 88) | function hexToHsl(hex: string) { function generateTransitionColors (line 139) | function generateTransitionColors( FILE: apps/landing/src/lib/cookie.ts function getToken (line 5) | function getToken(): string | null { function setToken (line 11) | function setToken(token: string) { function removeToken (line 20) | function removeToken() { FILE: apps/landing/src/lib/datetime.ts type DateFormat (line 11) | enum DateFormat { function daysOfYear (line 69) | function daysOfYear(year?: number) { function isLeapYear (line 73) | function isLeapYear(year: number) { FILE: apps/landing/src/lib/landing-data.ts constant PRODUCTION_API_URL (line 1) | const PRODUCTION_API_URL = 'https://api.follow.is' constant PRODUCTION_RSSHUB_ROUTES_URL (line 2) | const PRODUCTION_RSSHUB_ROUTES_URL = constant HERO_ITEM_LIMIT (line 6) | const HERO_ITEM_LIMIT = 12 constant HERO_HOST_LIMITS (line 8) | const HERO_HOST_LIMITS: Record = { type HeroTimelineItem (line 13) | type HeroTimelineItem = { type DiscoverSource (line 21) | type DiscoverSource = { type TrustedCompany (line 29) | type TrustedCompany = { type LandingMetrics (line 35) | type LandingMetrics = { type TrendingFeedsResponse (line 40) | type TrendingFeedsResponse = { type RSSHubRoutesIndex (line 55) | type RSSHubRoutesIndex = Record< type LandingMetricsResponse (line 65) | type LandingMetricsResponse = { constant HERO_FALLBACK (line 70) | const HERO_FALLBACK: HeroTimelineItem[] = [ constant DISCOVER_FALLBACK (line 162) | const DISCOVER_FALLBACK: DiscoverSource[] = [ constant TRUSTED_COMPANIES (line 333) | const TRUSTED_COMPANIES: TrustedCompany[] = [ constant LANDING_METRICS_FALLBACK (line 346) | const LANDING_METRICS_FALLBACK: LandingMetrics = { FILE: apps/landing/src/lib/platform.ts function detectPlatform (line 3) | function detectPlatform(userAgent: string): OS | null { FILE: apps/landing/src/lib/pricing-data.ts constant PRICING_API_URL (line 1) | const PRICING_API_URL = 'https://api.follow.is/status/configs' type PricingPlanLimit (line 4) | type PricingPlanLimit = { type PricingPlan (line 24) | type PricingPlan = { type StatusConfigsResponse (line 40) | type StatusConfigsResponse = { constant PRICING_FALLBACK (line 47) | const PRICING_FALLBACK: PricingPlan[] = [ constant FEATURE_ORDER (line 161) | const FEATURE_ORDER: Array = [ FILE: apps/landing/src/lib/scroller.ts method onPlay (line 20) | onPlay() { method onUpdate (line 25) | onUpdate(latest) { FILE: apps/landing/src/lib/spring.ts class SpringPresets (line 29) | class SpringPresets { class SpringStatic (line 34) | class SpringStatic { method smooth (line 43) | smooth(duration = 0.4, extraBounce = 0): Transition { method snappy (line 54) | snappy(duration = 0.4, extraBounce = 0): Transition { method bouncy (line 65) | bouncy(duration = 0.4, extraBounce = 0): Transition { FILE: apps/landing/src/providers/root/index.tsx function Providers (line 26) | function Providers({ children }: PropsWithChildren) { FILE: apps/landing/src/providers/root/sonner.tsx type ToasterProps (line 5) | type ToasterProps = React.ComponentProps FILE: apps/landing/src/proxy.ts function proxy (line 23) | function proxy(request: Request) { FILE: apps/landing/worker/index.js method fetch (line 5) | async fetch(request, env) { FILE: apps/mobile/global.d.ts type WebComponent (line 6) | type WebComponent

= FC

constant DEFAULT_BUNDLE_ID (line 28) | const DEFAULT_BUNDLE_ID = "is.follow" constant DEFAULT_PASSWORD (line 29) | const DEFAULT_PASSWORD = "Password123!" constant COOKIE_STORAGE_KEY (line 30) | const COOKIE_STORAGE_KEY = "follow_secure_store_fallback:follow_auth_coo... constant SESSION_TOKEN_STORAGE_KEY (line 31) | const SESSION_TOKEN_STORAGE_KEY = "follow_secure_store_fallback:__Secure... constant SESSION_COOKIE_KEYS (line 32) | const SESSION_COOKIE_KEYS = [ FILE: apps/mobile/scripts/expo-update.ts function spawnAsync (line 11) | async function spawnAsync(command: string, args: string[]) { function main (line 24) | async function main() { FILE: apps/mobile/shim-env.d.ts type ProcessEnv (line 4) | type ProcessEnv = Record FILE: apps/mobile/src/@types/constants.ts type MobileSupportedLanguages (line 3) | type MobileSupportedLanguages = (typeof langs)[number] FILE: apps/mobile/src/@types/i18next.d.ts type CustomTypeOptions (line 5) | interface CustomTypeOptions { FILE: apps/mobile/src/App.tsx function App (line 18) | function App({ children }: { children: React.ReactNode }) { FILE: apps/mobile/src/atoms/settings/general.ts function useActionLanguage (line 39) | function useActionLanguage() { function getActionLanguage (line 45) | function getActionLanguage() { function useHideAllReadSubscriptions (line 50) | function useHideAllReadSubscriptions() { function getHideAllReadSubscriptions (line 56) | function getHideAllReadSubscriptions() { function useFetchEntriesSettings (line 61) | function useFetchEntriesSettings(): FetchEntriesPropsSettings { FILE: apps/mobile/src/atoms/settings/internal/helper.ts type Nullable (line 13) | type Nullable = T | null | undefined function useSettingKeys (line 62) | function useSettingKeys< FILE: apps/mobile/src/atoms/settings/ui.ts type UISettings (line 8) | interface UISettings extends BaseUISettings { FILE: apps/mobile/src/components/common/Balance.tsx function format (line 22) | function format( FILE: apps/mobile/src/components/common/CopyButton.tsx type Size (line 17) | type Size = "sm" | "md" | "tiny" type CopyButtonProps (line 18) | interface CopyButtonProps { FILE: apps/mobile/src/components/common/NoLoginInfo.tsx function NoLoginInfo (line 10) | function NoLoginInfo({ target }: { target: "timeline" | "subscriptions" ... FILE: apps/mobile/src/components/common/RefreshControl.tsx type CustomRefreshControlProps (line 13) | interface CustomRefreshControlProps { constant SIZE (line 18) | const SIZE = 24 constant STROKE_WIDTH (line 19) | const STROKE_WIDTH = 2 constant RADIUS (line 20) | const RADIUS = (SIZE - STROKE_WIDTH) / 2 constant CIRCUMFERENCE (line 21) | const CIRCUMFERENCE = 2 * Math.PI * RADIUS function CustomRefreshControl (line 23) | function CustomRefreshControl({ refreshing, pullProgress }: CustomRefres... FILE: apps/mobile/src/components/common/RotateableLoading.tsx type RotateableLoadingProps (line 15) | interface RotateableLoadingProps { FILE: apps/mobile/src/components/common/SubmitButton.tsx function SubmitButton (line 18) | function SubmitButton({ FILE: apps/mobile/src/components/common/SwipeableItem.tsx type Action (line 19) | interface Action { type SwipeableItemProps (line 26) | interface SwipeableItemProps { FILE: apps/mobile/src/components/errors/GlobalErrorScreen.tsx type GlobalErrorScreenProps (line 8) | interface GlobalErrorScreenProps { FILE: apps/mobile/src/components/errors/ScreenErrorScreen.tsx type ScreenErrorScreenProps (line 8) | interface ScreenErrorScreenProps { FILE: apps/mobile/src/components/icons/OouiUserAnonymous.tsx function OouiUserAnonymous (line 5) | function OouiUserAnonymous(props: SvgProps & { size?: number; color?: st... FILE: apps/mobile/src/components/icons/PhUsersBold.tsx function PhUsersBold (line 5) | function PhUsersBold(props: SvgProps & { size?: number; color?: string }) { FILE: apps/mobile/src/components/layouts/contexts/ModalScrollViewContext.ts type ModalScrollViewContextType (line 5) | interface ModalScrollViewContextType { FILE: apps/mobile/src/components/layouts/header/FakeNativeHeaderTitle.tsx type Props (line 4) | type Props = Omit & { function FakeNativeHeaderTitle (line 10) | function FakeNativeHeaderTitle({ style, ...rest }: Props) { FILE: apps/mobile/src/components/layouts/header/HeaderElements.tsx type ModalHeaderSubmitButtonProps (line 14) | interface ModalHeaderSubmitButtonProps { FILE: apps/mobile/src/components/layouts/header/NavigationHeader.tsx type NavigationHeaderButtonProps (line 46) | interface NavigationHeaderButtonProps { type NavigationHeaderRawProps (line 52) | interface NavigationHeaderRawProps { type InternalNavigationHeaderProps (line 142) | interface InternalNavigationHeaderProps FILE: apps/mobile/src/components/layouts/tabbar/Tabbar.tsx constant ICON_SIZE_WIDE (line 233) | const ICON_SIZE_WIDE = 31 constant ICON_SIZE_TALL (line 234) | const ICON_SIZE_TALL = 28 constant ICON_SIZE_ROUND (line 235) | const ICON_SIZE_ROUND = 25 FILE: apps/mobile/src/components/layouts/tabbar/contexts/BottomTabBarBackgroundContext.tsx type TabBarBackgroundContextType (line 4) | interface TabBarBackgroundContextType { FILE: apps/mobile/src/components/layouts/utils/index.tsx function getDefaultHeaderHeight (line 10) | function getDefaultHeaderHeight({ function getNavigationHeaderLayout (line 45) | function getNavigationHeaderLayout({ FILE: apps/mobile/src/components/layouts/views/SafeNavigationScrollView.tsx type SafeNavigationScrollViewProps (line 29) | type SafeNavigationScrollViewProps = Omit & { type ForwardedSafeNavigationScrollView (line 47) | interface ForwardedSafeNavigationScrollView extends ScrollView { function checkScrollToBottom (line 92) | function checkScrollToBottom() { FILE: apps/mobile/src/components/native/PagerView/index.tsx type PagerViewProps (line 14) | interface PagerViewProps { FILE: apps/mobile/src/components/native/PagerView/specs.ts type PagerProps (line 12) | interface PagerProps { type PagerRef (line 29) | interface PagerRef { FILE: apps/mobile/src/components/native/webview/DebugPanel.tsx type DebugPanelProps (line 13) | interface DebugPanelProps { function DebugPanel (line 24) | function DebugPanel({ mode, onModeToggle }: DebugPanelProps) { FILE: apps/mobile/src/components/native/webview/EntryContentWebView.tsx type EntryContentWebViewProps (line 22) | type EntryContentWebViewProps = { function EntryContentWebView (line 31) | function EntryContentWebView(props: EntryContentWebViewProps) { FILE: apps/mobile/src/components/native/webview/constants.ts constant HTML_RENDERER_ASSET (line 4) | const HTML_RENDERER_ASSET = "rn-web/html-renderer" constant ANDROID_ASSET_BASE (line 5) | const ANDROID_ASSET_BASE = "file:///android_asset/html-renderer/index.html" FILE: apps/mobile/src/components/native/webview/hooks.ts type UseWebViewEntryOptions (line 12) | interface UseWebViewEntryOptions { function useWebViewEntry (line 44) | function useWebViewEntry({ function useWebViewMode (line 133) | function useWebViewMode() { FILE: apps/mobile/src/components/native/webview/index.ts type ImagePreviewEvent (line 7) | interface ImagePreviewEvent { type AudioSeekEvent (line 12) | interface AudioSeekEvent { type CustomEvent (line 17) | interface CustomEvent { class ISharedWebViewModule (line 23) | class ISharedWebViewModule extends NativeModule<{ type WebViewDebugState (line 46) | type WebViewDebugState = { FILE: apps/mobile/src/components/native/webview/webview-manager.ts method setCodeTheme (line 13) | setCodeTheme(light: string, dark: string): void { method setEntry (line 20) | setEntry(entry?: EntryModel | null): void { method setRootFontSize (line 29) | setRootFontSize(size = 16): void { method setNoMedia (line 36) | setNoMedia(value: boolean): void { method setReaderRenderInlineStyle (line 43) | setReaderRenderInlineStyle(value: boolean): void { method executeScript (line 50) | executeScript(script: string): void { method loadUrl (line 57) | loadUrl(url: string): void { FILE: apps/mobile/src/components/ui/accordion/AccordionItem.tsx function AccordionItem (line 11) | function AccordionItem({ FILE: apps/mobile/src/components/ui/action-bar/ActionBarItem.tsx type ActiionBarItemProps (line 6) | interface ActiionBarItemProps { FILE: apps/mobile/src/components/ui/avatar/UserAvatar.tsx type UserAvatarProps (line 15) | interface UserAvatarProps { FILE: apps/mobile/src/components/ui/button/UIBarButton.tsx type UIBarButtonProps (line 6) | interface UIBarButtonProps extends PressableProps { FILE: apps/mobile/src/components/ui/datetime/RelativeDateTime.tsx type RelativeDateTimeProps (line 44) | interface RelativeDateTimeProps extends TextProps { FILE: apps/mobile/src/components/ui/form/FormProvider.tsx function FormProvider (line 6) | function FormProvider(props: { function useFormContext (line 13) | function useFormContext() { FILE: apps/mobile/src/components/ui/form/PickerIos.tsx type PickerIosProps (line 17) | interface PickerIosProps { function PickerIos (line 27) | function PickerIos({ FILE: apps/mobile/src/components/ui/form/Select.android.tsx type SelectProps (line 16) | interface SelectProps { function Select (line 30) | function Select({ FILE: apps/mobile/src/components/ui/form/Select.tsx type SelectProps (line 13) | interface SelectProps { function Select (line 27) | function Select({ FILE: apps/mobile/src/components/ui/form/Slider.tsx type Props (line 10) | interface Props { FILE: apps/mobile/src/components/ui/form/Switch.tsx type Props (line 10) | interface Props { FILE: apps/mobile/src/components/ui/form/TextField.tsx type BaseFieldProps (line 15) | interface BaseFieldProps { type NumberFieldProps (line 70) | interface NumberFieldProps extends BaseFieldProps { FILE: apps/mobile/src/components/ui/grid/index.tsx type GridProps (line 8) | interface GridProps { type GridCell (line 15) | type GridCell = { type GridRow (line 20) | type GridRow = { FILE: apps/mobile/src/components/ui/grouped/GroupedInsetListCardItemStyle.tsx type GroupedInsetListCardItemStyle (line 1) | enum GroupedInsetListCardItemStyle { FILE: apps/mobile/src/components/ui/grouped/GroupedList.tsx constant GROUPED_TABLET_MAX_WIDTH (line 28) | const GROUPED_TABLET_MAX_WIDTH = 760 type GroupedInsetListCardProps (line 30) | interface GroupedInsetListCardProps { type BaseCellClassNames (line 35) | interface BaseCellClassNames { FILE: apps/mobile/src/components/ui/grouped/constants.ts constant GROUPED_ICON_TEXT_GAP (line 4) | const GROUPED_ICON_TEXT_GAP = 36 / pixelRatio constant GROUPED_LIST_MARGIN (line 6) | const GROUPED_LIST_MARGIN = 48 / pixelRatio constant GROUPED_LIST_ITEM_PADDING (line 8) | const GROUPED_LIST_ITEM_PADDING = 52 / pixelRatio constant GROUPED_SECTION_TOP_MARGIN (line 10) | const GROUPED_SECTION_TOP_MARGIN = 87 / pixelRatio constant GROUPED_SECTION_BOTTOM_MARGIN (line 11) | const GROUPED_SECTION_BOTTOM_MARGIN = 36 / pixelRatio FILE: apps/mobile/src/components/ui/icon/feed-icon.tsx type FeedIconRequiredFeed (line 13) | type FeedIconRequiredFeed = Pick< type FeedIconFeed (line 20) | type FeedIconFeed = FeedIconRequiredFeed | FeedSchema type FeedIconProps (line 22) | interface FeedIconProps { function FeedIcon (line 34) | function FeedIcon({ FILE: apps/mobile/src/components/ui/image/Image.tsx type ImageProps (line 12) | type ImageProps = Omit & { FILE: apps/mobile/src/components/ui/image/ImageContextMenu.tsx type ImageContextMenuProps (line 20) | type ImageContextMenuProps = PropsWithChildren<{ type IOSNativeImageActions (line 26) | interface IOSNativeImageActions { FILE: apps/mobile/src/components/ui/image/utils.ts function isImageSourceWithUri (line 22) | function isImageSourceWithUri( function extractFilenameFromUrl (line 120) | function extractFilenameFromUrl(uri: string): string { function shareImage (line 127) | async function shareImage({ uri }: { uri: string }) { function useSaveImageToMediaLibrary (line 162) | function useSaveImageToMediaLibrary() { FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/@types/index.ts type Dimensions (line 13) | type Dimensions = { type Position (line 18) | type Position = { type LightboxImageSource (line 23) | type LightboxImageSource = { type Transform (line 33) | type Transform = Exclude FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/components/ImageDefaultHeader.tsx type Props (line 16) | type Props = { FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx constant MIN_SCREEN_ZOOM (line 29) | const MIN_SCREEN_ZOOM = 2 constant MAX_ORIGINAL_IMAGE_ZOOM (line 30) | const MAX_ORIGINAL_IMAGE_ZOOM = 2 type Props (line 34) | type Props = { function handleZoom (line 104) | function handleZoom(nextIsScaled: boolean) { function getExtraTranslationToStayInBounds (line 111) | function getExtraTranslationToStayInBounds( function getScaledDimensions (line 393) | function getScaledDimensions( function clampTranslation (line 414) | function clampTranslation(value: number, scaledSize: number, screenSize:... function withClampedSpring (line 422) | function withClampedSpring(value: any) { FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx constant MAX_ORIGINAL_IMAGE_ZOOM (line 30) | const MAX_ORIGINAL_IMAGE_ZOOM = 2 constant MIN_SCREEN_ZOOM (line 31) | const MIN_SCREEN_ZOOM = 2 type Props (line 33) | type Props = { method onScroll (line 85) | onScroll(e) { method onBeginDrag (line 92) | onBeginDrag() { method onEndDrag (line 96) | onEndDrag() { function handleZoom (line 102) | function handleZoom(nextIsScaled: boolean) { function zoomTo (line 107) | function zoomTo(nextZoomRect: { x: number; y: number; width: number; hei... FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx type Props (line 15) | type Props = { FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/index.tsx type Rect (line 43) | type Rect = { constant PIXEL_RATIO (line 51) | const PIXEL_RATIO = PixelRatio.get() constant SLOW_SPRING (line 52) | const SLOW_SPRING: WithSpringConfig = { constant FAST_SPRING (line 57) | const FAST_SPRING: WithSpringConfig = { function canAnimate (line 62) | function canAnimate(lightbox: Lightbox): boolean { function ImageViewRoot (line 68) | function ImageViewRoot({ function ImageView (line 171) | function ImageView({ function LightboxImage (line 363) | function LightboxImage({ function LightboxFooter (line 515) | function LightboxFooter({ function interpolatePx (line 642) | function interpolatePx(px: number, inputRange: readonly number[], output... function interpolateTransform (line 648) | function interpolateTransform( function withClampedSpring (line 743) | function withClampedSpring(value: any, config: WithSpringConfig) { function rAF_FIXED (line 756) | function rAF_FIXED(callback: () => void) { FILE: apps/mobile/src/components/ui/lightbox/ImageViewing/transforms.ts type TransformMatrix (line 3) | type TransformMatrix = [ function createTransform (line 18) | function createTransform(): TransformMatrix { function applyRounding (line 23) | function applyRounding(t: TransformMatrix) { function readTransform (line 37) | function readTransform(t: TransformMatrix): [number, number, number] { function prependTranslate (line 45) | function prependTranslate(t: TransformMatrix, x: number, y: number) { function prependScale (line 51) | function prependScale(t: TransformMatrix, value: number) { function prependTransform (line 59) | function prependTransform(ta: TransformMatrix, tb: TransformMatrix) { function prependPan (line 82) | function prependPan(t: TransformMatrix, translation: Position) { function prependPinch (line 87) | function prependPinch( FILE: apps/mobile/src/components/ui/lightbox/Lightbox.tsx function Lightbox (line 7) | function Lightbox() { FILE: apps/mobile/src/components/ui/lightbox/lightboxState.tsx type Lightbox (line 7) | type Lightbox = { function LightboxStateProvider (line 32) | function LightboxStateProvider({ children }: PropsWithChildren) { function useLightbox (line 75) | function useLightbox() { function useLightboxControls (line 79) | function useLightboxControls() { FILE: apps/mobile/src/components/ui/modal/BottomModal.tsx type BottomModalProps (line 13) | interface BottomModalProps { function BottomModal (line 64) | function BottomModal({ FILE: apps/mobile/src/components/ui/modal/imperative-modal/modal.tsx type Modal (line 15) | type Modal = { type ModalInput (line 19) | type ModalInput = Omit & { FILE: apps/mobile/src/components/ui/modal/imperative-modal/templates.tsx function Header (line 13) | function Header({ function HeaderText (line 43) | function HeaderText({ function Input (line 56) | function Input({ FILE: apps/mobile/src/components/ui/pressable/ItemPressable.ios.tsx type ItemPressableProps (line 9) | interface ItemPressableProps extends ViewProps { FILE: apps/mobile/src/components/ui/pressable/ItemPressable.tsx type ItemPressableProps (line 22) | interface ItemPressableProps extends PressableProps { FILE: apps/mobile/src/components/ui/pressable/NativePressable.types.tsx type NativePressableProps (line 3) | interface NativePressableProps extends ViewProps { FILE: apps/mobile/src/components/ui/pressable/enum.ts type ItemPressableStyle (line 1) | enum ItemPressableStyle { FILE: apps/mobile/src/components/ui/qrcode/QRCode.tsx function transformEyeOptionsToCommonPattern (line 21) | function transformEyeOptionsToCommonPattern( function getPieceSquarePathData (line 36) | function getPieceSquarePathData(x: number, y: number, size: number): str... type SVGQRCodeStyledProps (line 49) | interface SVGQRCodeStyledProps function QRCode (line 63) | function QRCode( FILE: apps/mobile/src/components/ui/qrcode/SVGPieces.tsx constant DEFAULT_PIECE_SIZE (line 29) | const DEFAULT_PIECE_SIZE = 5 type SVGPiecesProps (line 31) | interface SVGPiecesProps extends PieceOptions { function SVGPiecesImpl (line 42) | function SVGPiecesImpl({ FILE: apps/mobile/src/components/ui/qrcode/SVGRadialGradient.tsx constant DEFAULT_ORIGIN (line 6) | const DEFAULT_ORIGIN: GradientOrigin = [0, 0] constant DEFAULT_CENTER (line 7) | const DEFAULT_CENTER: GradientOrigin = [0.5, 0.5] constant DEFAULT_RADIUS (line 8) | const DEFAULT_RADIUS: GradientOrigin = [1, 1] constant DEFAULT_COLORS (line 9) | const DEFAULT_COLORS: string[] = ["black", "white"] constant DEFAULT_LOCATIONS (line 10) | const DEFAULT_LOCATIONS: number[] = [0, 1] type SVGRadialGradientProps (line 12) | interface SVGRadialGradientProps extends RadialGradientProps { function SVGRadialGradient (line 18) | function SVGRadialGradient({ FILE: apps/mobile/src/components/ui/qrcode/adapter.ts type QRCodeMessage (line 7) | type QRCodeMessage = string | QRC.QRCodeSegment[] function createQRCode (line 9) | function createQRCode( function transformBitArrayToMatrix (line 24) | function transformBitArrayToMatrix(bitArray: BitArray, qrCodeSize: numbe... FILE: apps/mobile/src/components/ui/qrcode/constants.ts constant OUTER_EYE_SIZE_IN_BITS (line 1) | const OUTER_EYE_SIZE_IN_BITS = 7 constant INNER_EYE_SIZE_IN_BITS (line 2) | const INNER_EYE_SIZE_IN_BITS = 3 constant EYES_POSITIONS (line 4) | const EYES_POSITIONS = ["topLeft", "topRight", "bottomLeft"] constant QR_ECL_PERS (line 7) | const QR_ECL_PERS = { FILE: apps/mobile/src/components/ui/qrcode/helper.ts function transformBorderRadiusToArray (line 4) | function transformBorderRadiusToArray(borderRadius?: BorderRadius): numb... function getPieceSquarePathData (line 17) | function getPieceSquarePathData(x: number, y: number, size: number): str... function getPieceRoundedSquarePathData (line 31) | function getPieceRoundedSquarePathData({ function getPieceLiquidPathData (line 107) | function getPieceLiquidPathData( function getOuterEyePathData (line 123) | function getOuterEyePathData( function getRoundedOuterEyePathData (line 172) | function getRoundedOuterEyePathData( function getInnerEyePathData (line 277) | function getInnerEyePathData( function getRoundedInnerEyePathData (line 316) | function getRoundedInnerEyePathData( function isLiquidPieceInEyes (line 375) | function isLiquidPieceInEyes(x: number, y: number, qrSize: number): bool... function isCoordsOfTopLeftOuterEye (line 386) | function isCoordsOfTopLeftOuterEye(x: number, y: number): boolean { function isCoordsOfTopRightOuterEye (line 395) | function isCoordsOfTopRightOuterEye(x: number, y: number, qrSize: number... function isCoordsOfBottomLeftOuterEye (line 404) | function isCoordsOfBottomLeftOuterEye(x: number, y: number, qrSize: numb... function isCoordsOfOuterEyes (line 414) | function isCoordsOfOuterEyes(x: number, y: number, qrSize: number): bool... function isCoordsOfTopLeftInnerEye (line 425) | function isCoordsOfTopLeftInnerEye(x: number, y: number): boolean { function isCoordsOfTopRightInnerEye (line 429) | function isCoordsOfTopRightInnerEye(x: number, y: number, qrSize: number... function isCoordsOfBottomLeftInnerEye (line 438) | function isCoordsOfBottomLeftInnerEye(x: number, y: number, qrSize: numb... function isCoordsOfInnerEyes (line 448) | function isCoordsOfInnerEyes(x: number, y: number, qrSize: number): bool... function consoleWarn (line 459) | function consoleWarn(message: string | unknown) { function consoleError (line 463) | function consoleError(message: string | unknown) { FILE: apps/mobile/src/components/ui/qrcode/types.ts type GradientOrigin (line 5) | type GradientOrigin = [number, number] type GradientType (line 7) | type GradientType = "linear" | "radial" // default 'linear' type LinearGradientProps (line 9) | type LinearGradientProps = { type RadialGradientProps (line 16) | type RadialGradientProps = { type GradientProps (line 23) | type GradientProps = { type CornerType (line 28) | type CornerType = "rounded" | "cut" // default 'rounded' type BorderRadius (line 30) | type BorderRadius = number | number[] type Bit (line 32) | type Bit = 0 | 1 type BitArray (line 34) | type BitArray = Bit[] type BitMatrix (line 36) | type BitMatrix = BitArray[] type PieceOptions (line 38) | type PieceOptions = { type EyePosition (line 50) | type EyePosition = "topLeft" | "topRight" | "bottomLeft" type EyeOptions (line 52) | type EyeOptions = { type AllEyesOptions (line 62) | type AllEyesOptions = Partial> type RenderCustomPieceItem (line 64) | type RenderCustomPieceItem = ({ type LogoArea (line 78) | type LogoArea = { type LogoOptions (line 85) | type LogoOptions = { FILE: apps/mobile/src/components/ui/qrcode/useQRCodeData.ts function useQRCodeData (line 7) | function useQRCodeData( FILE: apps/mobile/src/components/ui/slider/Slider.tsx type SliderProps (line 15) | interface SliderProps { type SliderRef (line 72) | type SliderRef = { constant THUMB_SIZE (line 76) | const THUMB_SIZE = 28 constant TRACK_HEIGHT (line 77) | const TRACK_HEIGHT = 4 FILE: apps/mobile/src/components/ui/switch/Switch.tsx type SwitchProps (line 7) | interface SwitchProps { type SwitchRef (line 28) | type SwitchRef = { FILE: apps/mobile/src/components/ui/tabview/TabBar.tsx type TabBarProps (line 20) | interface TabBarProps { FILE: apps/mobile/src/components/ui/tabview/TabView.tsx type Tab (line 17) | type Tab = { type TabComponent (line 24) | type TabComponent = FC< type TabViewProps (line 27) | interface TabViewProps { FILE: apps/mobile/src/components/ui/tabview/types.ts type Tab (line 1) | type Tab = { FILE: apps/mobile/src/components/ui/toast/ctx.tsx type Disposer (line 8) | type Disposer = () => void type ToastActionContext (line 9) | interface ToastActionContext { FILE: apps/mobile/src/components/ui/toast/manager.tsx class ToastManager (line 10) | class ToastManager { method register (line 30) | private register(currentIndex: number, ref: ToastRef) { method mount (line 40) | mount() { method push (line 54) | private push(props: ToastProps) { method remove (line 59) | private remove(index: number) { method scheduleDismiss (line 67) | private scheduleDismiss(index: number) { method show (line 83) | show(props: Omit, "currentIndex">) { FILE: apps/mobile/src/components/ui/toast/types.ts type ToastProps (line 1) | interface ToastProps { type CenterToastProps (line 20) | type CenterToastProps = Partial< type BottomToastProps (line 26) | type BottomToastProps = Partial & { type ToastRef (line 31) | interface ToastRef { FILE: apps/mobile/src/components/ui/typography/HtmlWeb.tsx function useSize (line 9) | function useSize(callback: (size: [number, number]) => void) { function HtmlWeb (line 39) | function HtmlWeb({ FILE: apps/mobile/src/components/ui/video/PlayerAction.tsx type PlayerActionProps (line 13) | interface PlayerActionProps { function PlayerAction (line 26) | function PlayerAction({ FILE: apps/mobile/src/components/ui/video/VideoPlayer.tsx function VideoPlayer (line 13) | function VideoPlayer({ FILE: apps/mobile/src/constants/native-images.ts type IconNativeName (line 32) | type IconNativeName = keyof typeof IconNativeNameMap type IconNativeValues (line 34) | type IconNativeValues = (typeof IconNativeNameMap)[keyof typeof IconNati... FILE: apps/mobile/src/constants/ui.ts constant TIMELINE_VIEW_SELECTOR_HEIGHT (line 1) | const TIMELINE_VIEW_SELECTOR_HEIGHT = 58 FILE: apps/mobile/src/constants/views.tsx type ViewDefinitionExtended (line 12) | interface ViewDefinitionExtended { type ViewDefinition (line 40) | interface ViewDefinition extends Omit, ViewD... FILE: apps/mobile/src/hooks/useIntentHandler.ts type DeepLinkParams (line 13) | type DeepLinkParams = function useIntentHandler (line 47) | function useIntentHandler() { FILE: apps/mobile/src/hooks/useMessaging.ts constant FIREBASE_MESSAGING_TOKEN_STORAGE_KEY (line 17) | const FIREBASE_MESSAGING_TOKEN_STORAGE_KEY = "firebase_messaging_token" function saveMessagingToken (line 19) | async function saveMessagingToken() { function useUpdateMessagingToken (line 26) | function useUpdateMessagingToken() { function useMessaging (line 41) | function useMessaging() { FILE: apps/mobile/src/hooks/useOnboarding.ts function useOnboarding (line 8) | function useOnboarding() { FILE: apps/mobile/src/hooks/useUnreadCountBadge.ts function useUnreadCountBadge (line 7) | function useUnreadCountBadge() { FILE: apps/mobile/src/hooks/useWebViewNavigation.tsx function useWebViewNavigation (line 10) | function useWebViewNavigation({ webViewRef }: { webViewRef: RefObject void, options?: { timeout?: ... FILE: apps/mobile/src/initialize/player.ts function waitForForeground (line 6) | function waitForForeground(): Promise { function initializePlayer (line 18) | async function initializePlayer() { FILE: apps/mobile/src/interfaces/settings/data.ts type DataSettings (line 1) | interface DataSettings { FILE: apps/mobile/src/lib/auth-cookie-migration.ts constant LEGACY_PROD_API_URL (line 11) | const LEGACY_PROD_API_URL = "https://api.follow.is" constant NEW_PROD_API_URL (line 12) | const NEW_PROD_API_URL = "https://api.folo.is" FILE: apps/mobile/src/lib/auth.ts method setItem (line 59) | setItem(key: string, value: string) { method getItem (line 84) | getItem(key: string) { method removeItem (line 92) | removeItem(key: string) { type AuthProvider (line 174) | interface AuthProvider { function isAuthCodeValid (line 196) | function isAuthCodeValid(authCode: string) { FILE: apps/mobile/src/lib/client-session.ts constant CLIENT_ID_KEY (line 5) | const CLIENT_ID_KEY = getStorageNS("client_id") constant SESSION_ID_KEY (line 6) | const SESSION_ID_KEY = getStorageNS("session_id") FILE: apps/mobile/src/lib/dialog.tsx type DialogProps (line 31) | interface DialogProps { type ShowDialogOptions (line 46) | interface ShowDialogOptions { type DialogContextType (line 56) | type DialogContextType = { type DialogComponent (line 76) | type DialogComponent = FC<{ class DialogStatic (line 80) | class DialogStatic { method show (line 123) | show( method destroy (line 228) | destroy(id: string, siblings: RootSiblings) { FILE: apps/mobile/src/lib/e2e-config.ts type AppExtra (line 3) | interface AppExtra { FILE: apps/mobile/src/lib/ga4.ts class Analytics4 (line 4) | class Analytics4 { method constructor (line 10) | constructor(clientID: string = getClientId(), sessionID = getSessionId... method setUserId (line 15) | async setUserId(id: string) { method setUserProperties (line 19) | async setUserProperties(upValue?: Record) { method logEvent (line 32) | async logEvent(eventName: string, params?: Record): P... FILE: apps/mobile/src/lib/i18n.ts function initializeI18n (line 36) | async function initializeI18n() { function getDeviceLanguage (line 60) | function getDeviceLanguage() { FILE: apps/mobile/src/lib/jotai.ts method subscribe (line 20) | subscribe() { FILE: apps/mobile/src/lib/kv.ts class KV (line 3) | class KV { method setSync (line 4) | setSync(key: string, value: string) { method getSync (line 8) | getSync(key: string) { method set (line 12) | set(key: string, value: string) { method get (line 16) | get(key: string) { method delete (line 20) | delete(key: string) { method clear (line 24) | clear() { method keys (line 28) | keys() { method [Symbol.iterator] (line 32) | [Symbol.iterator]() { FILE: apps/mobile/src/lib/loading.tsx class LoadingStatic (line 12) | class LoadingStatic { method start (line 15) | start(promise?: Promise) { FILE: apps/mobile/src/lib/markdown.tsx method get (line 314) | get(target, prop) { FILE: apps/mobile/src/lib/native/index.ios.ts type NativeModule (line 6) | interface NativeModule { FILE: apps/mobile/src/lib/native/picker.ts function compressImage (line 42) | async function compressImage( FILE: apps/mobile/src/lib/navigation/ChainNavigationContext.tsx type Route (line 10) | interface Route { type ChainNavigationContextType (line 20) | type ChainNavigationContextType = { FILE: apps/mobile/src/lib/navigation/Navigation.ts class Navigation (line 12) | class Navigation { method constructor (line 14) | constructor(ctxValue: ChainNavigationContextType) { method __dangerous_getCtxValue (line 24) | __dangerous_getCtxValue() { method __push (line 34) | private __push(route: Route) { method resolveScreenOptions (line 47) | private resolveScreenOptions( method pushControllerView (line 70) | pushControllerView(view: NavigationControllerView, props?: T) { method replaceControllerView (line 81) | replaceControllerView( method presentControllerView (line 99) | presentControllerView( method __pop (line 114) | private __pop() { method __replace (line 124) | private __replace(route: Route) { method dismiss (line 137) | dismiss() { method back (line 146) | back() { method __internal_dismiss (line 150) | __internal_dismiss(routeId: string) { method on (line 171) | on(event: string, callback: (payload: any) => void): Disposer { method emit (line 183) | emit(event: string, payload: LifecycleEventPayload): void { method canGoBack (line 187) | canGoBack() { method popToRoot (line 192) | popToRoot() { type Disposer (line 197) | type Disposer = () => void type LifecycleEventPayload (line 199) | type LifecycleEventPayload = { type ScreenChangeEventPayload (line 203) | type ScreenChangeEventPayload = { FILE: apps/mobile/src/lib/navigation/NavigationLink.tsx type NavigationLinkProps (line 9) | interface NavigationLinkProps extends TextProps { function NavigationLink (line 15) | function NavigationLink({ FILE: apps/mobile/src/lib/navigation/ScreenItemContext.ts type ScreenItemContextType (line 7) | interface ScreenItemContextType { FILE: apps/mobile/src/lib/navigation/ScreenOptionsContext.ts type ScreenOptionsContextType (line 5) | interface ScreenOptionsContextType { FILE: apps/mobile/src/lib/navigation/StackNavigation.tsx type RootStackNavigationProps (line 34) | interface RootStackNavigationProps { FILE: apps/mobile/src/lib/navigation/WrappedScreenItem.tsx type ExtractFC (line 170) | type ExtractFC = T extends FC ? P : never FILE: apps/mobile/src/lib/navigation/__internal/hooks.ts type LifecycleEvent (line 6) | type LifecycleEvent = NativeSyntheticEvent<{ FILE: apps/mobile/src/lib/navigation/biz/Destination.ts class Destination (line 9) | class Destination { method isIpad (line 12) | get isIpad() { method presentControllerView (line 16) | get presentControllerView() { method pushControllerView (line 20) | get pushControllerView() { method Login (line 24) | Login() { FILE: apps/mobile/src/lib/navigation/bottom-tab/BottomTabContext.tsx type BottomTabContextType (line 6) | interface BottomTabContextType { FILE: apps/mobile/src/lib/navigation/bottom-tab/TabScreenContext.tsx type TabScreenContextType (line 4) | interface TabScreenContextType { FILE: apps/mobile/src/lib/navigation/bottom-tab/native.ios.tsx type TabScreenNativeProps (line 9) | type TabScreenNativeProps = ViewProps & { title?: string } FILE: apps/mobile/src/lib/navigation/bottom-tab/native.tsx type TabScreenNativeProps (line 10) | type TabScreenNativeProps = React.ComponentProps & { FILE: apps/mobile/src/lib/navigation/bottom-tab/types.ts type TabbarIconProps (line 6) | type TabbarIconProps = { type TabScreenComponent (line 13) | type TabScreenComponent = FC & { type TabScreenProps (line 16) | interface TabScreenProps { type ResolvedTabScreenProps (line 27) | interface ResolvedTabScreenProps extends Omit `test-s... FILE: apps/mobile/src/lib/navigation/sitemap/registry.ts type RegisterOptions (line 3) | type RegisterOptions = { type Registry (line 6) | type Registry = RegisterOptions & { class NavigationSitemapRegistryStatic (line 11) | class NavigationSitemapRegistryStatic { method registerByComponent (line 13) | registerByComponent( method entries (line 36) | entries() { method [Symbol.iterator] (line 33) | [Symbol.iterator]() { FILE: apps/mobile/src/lib/navigation/types.ts type NavigationPushOptions (line 4) | interface NavigationPushOptions { type NavigationControllerViewExtraProps (line 9) | interface NavigationControllerViewExtraProps extends Pick< type NavigationControllerView (line 39) | type NavigationControllerView

= FC

& NavigationControllerView... type NavigationControllerViewType (line 40) | type NavigationControllerViewType = StackPresentationTypes FILE: apps/mobile/src/lib/payment.ts constant GOOGLE_PLAY_INSTALLER_PACKAGE_NAME (line 5) | const GOOGLE_PLAY_INSTALLER_PACKAGE_NAME = "com.android.vending" FILE: apps/mobile/src/lib/permission.ts function requestNotificationPermission (line 7) | async function requestNotificationPermission() { function setBadgeCountAsyncWithPermission (line 30) | async function setBadgeCountAsyncWithPermission( FILE: apps/mobile/src/lib/player.ts type SimpleMediaState (line 8) | type SimpleMediaState = "playing" | "paused" | "loading" function useAudioPlayState (line 13) | function useAudioPlayState(audioUrl?: string): SimpleMediaState { class Player (line 30) | class Player { method play (line 31) | async play(newTrack?: { method pause (line 57) | async pause() { method reset (line 61) | async reset() { method seekBy (line 65) | async seekBy(offset: number) { method seekTo (line 69) | async seekTo(position: number) { type Rate (line 79) | type Rate = (typeof allowedRate)[number] function useRate (line 83) | function useRate() { FILE: apps/mobile/src/lib/proxy-env.ts method get (line 45) | get(target, prop) { FILE: apps/mobile/src/lib/query-client.ts constant DO_NOT_RETRY_CODES (line 9) | const DO_NOT_RETRY_CODES = new Set([400, 401, 403, 404, 422, 402]) method retry (line 17) | retry(failureCount, error) { FILE: apps/mobile/src/lib/secure-store.ts method getItem (line 41) | getItem(key: string) { method setItem (line 63) | setItem(key: string, value: string) { method removeItem (line 84) | removeItem(key: string) { FILE: apps/mobile/src/lib/toast.tsx type CommandToastOptions (line 9) | type CommandToastOptions = Partial< type Toast (line 12) | type Toast = { type NativeToasterOptions (line 20) | interface NativeToasterOptions { FILE: apps/mobile/src/lib/token.ts function getTokenHeaders (line 4) | async function getTokenHeaders() { FILE: apps/mobile/src/lib/volume.ts function getVolume (line 16) | async function getVolume() { FILE: apps/mobile/src/main.tsx function RootComponent (line 49) | function RootComponent() { FILE: apps/mobile/src/modules/ai/summary.tsx function SelectableText (line 365) | function SelectableText({ className, children }: { className?: string; c... FILE: apps/mobile/src/modules/context-menu/inbox.tsx type InboxContextMenuProps (line 9) | type InboxContextMenuProps = PropsWithChildren<{ FILE: apps/mobile/src/modules/context-menu/video.tsx type VideoContextMenuProps (line 14) | type VideoContextMenuProps = PropsWithChildren<{ FILE: apps/mobile/src/modules/dialogs/UpgradeRequiredDialog.tsx type UpgradeDialogPayload (line 13) | type UpgradeDialogPayload = { FILE: apps/mobile/src/modules/discover/Content.tsx function Content (line 8) | function Content() { FILE: apps/mobile/src/modules/discover/DiscoverContent.tsx function DiscoverContent (line 6) | function DiscoverContent() { FILE: apps/mobile/src/modules/discover/FeedSummary.tsx type FeedSummaryFeed (line 14) | type FeedSummaryFeed = { FILE: apps/mobile/src/modules/discover/constants.ts type SearchType (line 3) | enum SearchType { type Language (line 15) | type Language = "all" | "eng" | "cmn" | "fra" type DiscoverCategories (line 16) | type DiscoverCategories = (typeof RSSHubCategories)[number] | string FILE: apps/mobile/src/modules/discover/ctx.tsx type SearchPageContextType (line 10) | interface SearchPageContextType { FILE: apps/mobile/src/modules/discover/search-tabs/SearchFeedCard.tsx type SearchFeedCardItem (line 19) | type SearchFeedCardItem = { FILE: apps/mobile/src/modules/discover/search-tabs/SearchList.tsx type SearchResultItem (line 26) | type SearchResultItem = Awaited< FILE: apps/mobile/src/modules/entry-content/EntryAISummary.tsx constant ATTRIBUTION_PREFIX_PATTERNS (line 16) | const ATTRIBUTION_PREFIX_PATTERNS = [ FILE: apps/mobile/src/modules/entry-content/EntryContentHeaderRightActions.tsx type ActionItem (line 33) | type ActionItem = { function EntryContentHeaderRightActions (line 45) | function EntryContentHeaderRightActions(props: HeaderRightActionsProps) { type HeaderRightActionsProps (line 49) | interface HeaderRightActionsProps { FILE: apps/mobile/src/modules/entry-content/EntryNavigationHeader.tsx type EntryLeftGroupProps (line 98) | interface EntryLeftGroupProps { FILE: apps/mobile/src/modules/entry-content/ctx.ts type EntryContentContextType (line 4) | interface EntryContentContextType { FILE: apps/mobile/src/modules/entry-content/pull-up-navigation/types.ts type EntryPullUpToNextProps (line 7) | interface EntryPullUpToNextProps { type UsePullUpToNextProps (line 13) | interface UsePullUpToNextProps { type GestureWrapperProps (line 19) | interface GestureWrapperProps { type UsePullUpToNextReturn (line 24) | interface UsePullUpToNextReturn { FILE: apps/mobile/src/modules/entry-content/pull-up-navigation/use-pull-up-navigation.android.tsx constant THRESHOLD (line 13) | const THRESHOLD = 70 // The threshold in pixels to trigger the next entry constant FEEDBACK_THRESHOLD (line 14) | const FEEDBACK_THRESHOLD = 0.5 // When to give haptic feedback (50% of t... FILE: apps/mobile/src/modules/entry-list/EntryListContentArticle.tsx constant ARTICLE_SKELETON_KEYS (line 22) | const ARTICLE_SKELETON_KEYS = [ function EntryItemSkeleton (line 123) | function EntryItemSkeleton() { FILE: apps/mobile/src/modules/entry-list/EntryListContentPicture.tsx constant PICTURE_SKELETON_COLUMN_KEYS (line 24) | const PICTURE_SKELETON_COLUMN_KEYS = [ function EntryPictureItemSkeleton (line 125) | function EntryPictureItemSkeleton({ variantIndex }: { variantIndex: numb... constant PICTURE_SKELETON_HEIGHT_STYLES (line 204) | const PICTURE_SKELETON_HEIGHT_STYLES = [ FILE: apps/mobile/src/modules/entry-list/EntryListContentSocial.tsx function EntryItemSkeleton (line 100) | function EntryItemSkeleton() { FILE: apps/mobile/src/modules/entry-list/EntryListContentVideo.tsx constant VIDEO_SKELETON_KEYS (line 22) | const VIDEO_SKELETON_KEYS = ["video-skeleton-1", "video-skeleton-2", "vi... function EntryVideoItemSkeleton (line 133) | function EntryVideoItemSkeleton() { function EntryItemSkeleton (line 159) | function EntryItemSkeleton() { FILE: apps/mobile/src/modules/entry-list/EntryListSelector.tsx type EntryListSelectorProps (line 32) | type EntryListSelectorProps = { function EntryListSelectorImpl (line 38) | function EntryListSelectorImpl({ entryIds, viewId, active = true }: Entr... FILE: apps/mobile/src/modules/entry-list/hooks.ts function useOnViewableItemsChanged (line 11) | function useOnViewableItemsChanged({ function useNonReactiveCallback (line 109) | function useNonReactiveCallback any>(fn: T... FILE: apps/mobile/src/modules/entry-list/index.tsx function EntryList (line 13) | function EntryList() { FILE: apps/mobile/src/modules/entry-list/templates/EntryPictureItem.tsx function EntryPictureItem (line 20) | function EntryPictureItem({ id }: { id: string }) { FILE: apps/mobile/src/modules/entry-list/templates/EntrySocialItem.tsx type EntryMediaItemProps (line 184) | interface EntryMediaItemProps { FILE: apps/mobile/src/modules/entry-list/types.ts type EntryExtraData (line 1) | type EntryExtraData = { FILE: apps/mobile/src/modules/feed/FollowFeed.tsx function FollowFeed (line 46) | function FollowFeed(props: { id: string }) { function FollowUrl (line 59) | function FollowUrl(props: { url: string }) { function FollowImpl (line 79) | function FollowImpl(props: { feedId: string; defaultView?: FeedViewType ... FILE: apps/mobile/src/modules/feed/view-selector.tsx type Props (line 10) | interface Props { FILE: apps/mobile/src/modules/login/email.tsx type FormValue (line 31) | type FormValue = z.infer function onSubmit (line 33) | async function onSubmit(values: FormValue) { function signInWithEmail (line 37) | async function signInWithEmail( function EmailLogin (line 86) | function EmailLogin() { type SignupFormValue (line 175) | type SignupFormValue = z.infer function SignupInput (line 176) | function SignupInput({ function EmailSignUp (line 197) | function EmailSignUp() { FILE: apps/mobile/src/modules/login/index.tsx function Login (line 16) | function Login() { FILE: apps/mobile/src/modules/login/social.tsx function SocialLogin (line 13) | function SocialLogin({ onPressEmail }: { isRegister: boolean; onPressEma... FILE: apps/mobile/src/modules/onboarding/hooks/use-reading-behavior.ts type ReadingBehavior (line 3) | type ReadingBehavior = "radical" | "balanced" | "conservative" FILE: apps/mobile/src/modules/onboarding/preset.ts type PresetFeedConfig (line 6) | type PresetFeedConfig = { FILE: apps/mobile/src/modules/onboarding/step-preferences.tsx type PreferenceCardProps (line 129) | type PreferenceCardProps = PropsWithChildren<{ FILE: apps/mobile/src/modules/player/GlassPlayerTabBar.tsx function GlassPlayerTabBar (line 18) | function GlassPlayerTabBar({ className }: { className?: string }) { FILE: apps/mobile/src/modules/player/PlayerTabBar.tsx function PlayerTabBar (line 23) | function PlayerTabBar({ className }: { className?: string }) { FILE: apps/mobile/src/modules/player/context.ts type PlayerScreenContextValue (line 12) | interface PlayerScreenContextValue { FILE: apps/mobile/src/modules/player/control.tsx type ControlButtonProps (line 25) | type ControlButtonProps = { function PlayPauseButton (line 30) | function PlayPauseButton({ size = 24, className, color }: ControlButtonP... function SeekButton (line 52) | function SeekButton({ function RateSelector (line 81) | function RateSelector() { function StopButton (line 112) | function StopButton({ size = 24, className, color }: ControlButtonProps) { function ControlGroup (line 127) | function ControlGroup() { function ProgressBar (line 149) | function ProgressBar() { function VolumeBar (line 209) | function VolumeBar() { FILE: apps/mobile/src/modules/player/hooks.ts function useCoverGradient (line 7) | function useCoverGradient(url?: string) { FILE: apps/mobile/src/modules/review-prompt/utils.ts constant REVIEW_PROMPT_QUIET_WINDOW_MS (line 12) | const REVIEW_PROMPT_QUIET_WINDOW_MS = 5000 type MobileReviewDistribution (line 14) | type MobileReviewDistribution = "ios_app_store" | "google_play" | "unsup... type MobileReviewRateTarget (line 15) | type MobileReviewRateTarget = "ios_app_store" | "google_play" | null constant APPLE_REVIEW_URL (line 17) | const APPLE_REVIEW_URL = constant GOOGLE_PLAY_REVIEW_URI (line 19) | const GOOGLE_PLAY_REVIEW_URI = "market://details?id=is.follow&showAllRev... constant GOOGLE_PLAY_REVIEW_URL (line 20) | const GOOGLE_PLAY_REVIEW_URL = "https://play.google.com/store/apps/detai... constant SUPPORT_EMAIL (line 21) | const SUPPORT_EMAIL = "support@folo.is" constant REVIEW_PROMPT_STORAGE_PREFIX (line 22) | const REVIEW_PROMPT_STORAGE_PREFIX = "follow-rn-review-prompt" FILE: apps/mobile/src/modules/screen/PagerList.ios.tsx function PagerList (line 17) | function PagerList({ FILE: apps/mobile/src/modules/screen/PagerList.tsx function PagerList (line 25) | function PagerList({ function usePagerHandlers (line 115) | function usePagerHandlers( FILE: apps/mobile/src/modules/screen/TimelineSelectorList.tsx type Props (line 20) | type Props = { FILE: apps/mobile/src/modules/screen/TimelineSelectorProvider.tsx function TimelineHeader (line 29) | function TimelineHeader({ feedId }: { feedId?: string }) { FILE: apps/mobile/src/modules/screen/TimelineViewSelector.tsx constant ACTIVE_WIDTH (line 26) | const ACTIVE_WIDTH = 180 constant INACTIVE_WIDTH (line 27) | const INACTIVE_WIDTH = 48 constant ACTIVE_TEXT_WIDTH (line 28) | const ACTIVE_TEXT_WIDTH = 100 constant MAX_TABLET_ACTIVE_WIDTH (line 29) | const MAX_TABLET_ACTIVE_WIDTH = 280 function TimelineViewSelector (line 35) | function TimelineViewSelector() { function ItemWrapper (line 84) | function ItemWrapper({ function ViewItem (line 141) | function ViewItem({ FILE: apps/mobile/src/modules/screen/action.tsx function HomeLeftAction (line 31) | function HomeLeftAction() { type HeaderActionButtonProps (line 58) | interface HeaderActionButtonProps { FILE: apps/mobile/src/modules/screen/atoms.ts type SelectedTimeline (line 38) | type SelectedTimeline = { type SelectedFeed (line 43) | type SelectedFeed = function useSelectedView (line 76) | function useSelectedView() { function useSelectedFeed (line 88) | function useSelectedFeed( function useRemoteEntries (line 155) | function useRemoteEntries(props?: UseEntriesProps): UseEntriesReturn { function useLocalEntries (line 202) | function useLocalEntries(props?: UseEntriesProps): UseEntriesReturn { function getEntryIdsFromMultiplePlace (line 313) | function getEntryIdsFromMultiplePlace(...entryIds: Array = { method onError (line 35) | onError(error) { method onSuccess (line 38) | onSuccess(data) { method onSettled (line 41) | onSettled() { FILE: apps/mobile/src/modules/settings/hooks/useShareSubscription.tsx type ExtractQueryData (line 8) | type ExtractQueryData = T extends UseQueryResult ? T : never type QueryData (line 26) | type QueryData = ExtractQueryData FILE: apps/mobile/src/modules/settings/routes/2FASetting.tsx method onError (line 44) | onError(error) { method onSuccess (line 47) | onSuccess() { FILE: apps/mobile/src/modules/settings/routes/Account.tsx type Account (line 46) | type Account = { method onConfirm (line 262) | async onConfirm(ctx) { method onConfirm (line 315) | async onConfirm(ctx) { FILE: apps/mobile/src/modules/settings/routes/Actions.tsx method onSuccess (line 129) | onSuccess() { method onError (line 133) | onError(error) { FILE: apps/mobile/src/modules/settings/routes/EditCondition.tsx function ConditionForm (line 40) | function ConditionForm({ index }: { index: ActionConditionIndex }) { function ValueField (line 124) | function ValueField({ FILE: apps/mobile/src/modules/settings/routes/General.tsx function LanguageSelect (line 26) | function LanguageSelect({ settingKey }: { settingKey: "language" | "acti... function LanguageSetting (line 71) | function LanguageSetting({ settingKey }: { settingKey: "language" | "act... function TranslationModeSetting (line 91) | function TranslationModeSetting() { FILE: apps/mobile/src/modules/settings/routes/Plan.tsx type PaymentPlan (line 39) | type PaymentPlan = NonNullable[number] type PaymentFeature (line 40) | type PaymentFeature = PaymentPlan["limit"] type BillingPeriod (line 41) | type BillingPeriod = "monthly" | "yearly" constant AI_MODEL_SELECTION_VALUE_LABELS (line 43) | const AI_MODEL_SELECTION_VALUE_LABELS = { constant PLAN_FEATURE_ORDER (line 58) | const PLAN_FEATURE_ORDER: Array = [ constant BILLING_SEGMENTS (line 78) | const BILLING_SEGMENTS: BillingPeriod[] = ["monthly", "yearly"] type SegmentLayout (line 80) | type SegmentLayout = { type UpgradeVariables (line 98) | type UpgradeVariables = { type ActiveSubscription (line 103) | type ActiveSubscription = { constant BILLING_PERIOD_RANK (line 195) | const BILLING_PERIOD_RANK: Record = { type PlanActionType (line 200) | type PlanActionType = "current" | "upgrade" | "new" | "coming-soon" | null FILE: apps/mobile/src/modules/settings/sync-queue.ts type SettingMapping (line 19) | type SettingMapping = { type SettingSyncTab (line 75) | type SettingSyncTab = keyof SettingMapping type SettingSyncQueueItem (line 76) | interface SettingSyncQueueItem { type PersistedSettingSyncQueue (line 82) | interface PersistedSettingSyncQueue { type CustomEvent (line 88) | interface CustomEvent { class SettingSyncQueue (line 96) | class SettingSyncQueue { method getCurrentUserId (line 100) | private getCurrentUserId() { method bindQueueOwner (line 104) | private bindQueueOwner(currentUserId: string) { method reportSyncError (line 116) | private reportSyncError(stage: "flush" | "syncLocal", error: unknown) { method clearQueueAndPersist (line 123) | private async clearQueueAndPersist(ownerUserId: string | null) { method init (line 130) | async init() { method teardown (line 156) | teardown() { method persist (line 165) | private async persist() { method load (line 178) | private async load() { method enqueue (line 231) | async enqueue(tab: T, payload: Partial(Component: React.ComponentType

, ... FILE: apps/mobile/src/store/image/store.ts class ImageSyncService (line 5) | class ImageSyncService { method getColors (line 6) | async getColors(url?: string | null) { FILE: apps/mobile/web-app/html-renderer/global.d.ts type Bridge (line 5) | interface Bridge { FILE: apps/mobile/web-app/html-renderer/src/HTML.tsx type HTMLProps (line 11) | type HTMLProps = { FILE: apps/mobile/web-app/html-renderer/src/common/WrappedElementProvider.tsx type WrappedElementProviderProps (line 30) | interface WrappedElementProviderProps { FILE: apps/mobile/web-app/html-renderer/src/components/link.tsx type LinkProps (line 10) | interface LinkProps { FILE: apps/mobile/web-app/html-renderer/src/components/shiki/Shiki.tsx type ShikiProps (line 19) | interface ShikiProps { function loadShikiLanguage (line 57) | async function loadShikiLanguage(language: string, languageModule: any) { function loadShikiTheme (line 63) | async function loadShikiTheme(theme: string, themeModule: any) { function register (line 70) | async function register() { FILE: apps/mobile/web-app/html-renderer/src/managers/webview-bridge.ts type Store (line 10) | type Store = ReturnType class WebViewBridgeManager (line 16) | class WebViewBridgeManager { method constructor (line 19) | constructor(store: Store) { method exposeToWindow (line 72) | exposeToWindow() { type Window (line 135) | interface Window { FILE: apps/mobile/web-app/html-renderer/src/parser.tsx function extractCodeFromHtml (line 176) | function extractCodeFromHtml(htmlString: string) { FILE: apps/mobile/web-app/html-renderer/types/index.ts type MediaModel (line 1) | interface MediaModel { type EntryModel (line 10) | interface EntryModel { FILE: apps/ssr/api/index.ts function handler (line 5) | async function handler(req: any, res: any) { FILE: apps/ssr/client/@types/constants.ts type SSRSupportedLanguages (line 4) | type SSRSupportedLanguages = (typeof langs)[number] FILE: apps/ssr/client/@types/i18next.d.ts type CustomTypeOptions (line 5) | interface CustomTypeOptions { FILE: apps/ssr/client/App.tsx function App (line 6) | function App() { FILE: apps/ssr/client/components/items/normal.tsx function NormalListItemImpl (line 11) | function NormalListItemImpl({ FILE: apps/ssr/client/components/layout/header/index.tsx function Container (line 15) | function Container({ className, ...props }: React.ComponentPropsWithoutR... FILE: apps/ssr/client/components/ui/feed-icon.tsx type FeedIconEntry (line 72) | type FeedIconEntry = { type FeedIconTarget (line 82) | type FeedIconTarget = { function FeedIcon (line 95) | function FeedIcon({ FILE: apps/ssr/client/components/ui/image.tsx type LazyImageProps (line 9) | type LazyImageProps = PropsWithChildren<{ FILE: apps/ssr/client/global.d.ts type Window (line 5) | interface Window { FILE: apps/ssr/client/i18n.ts class LocaleCache (line 17) | class LocaleCache { method getKey (line 19) | private getKey(lang: string) { method get (line 22) | get(lang: string) { method set (line 28) | set(lang: string) { type CustomEvent (line 94) | interface CustomEvent { FILE: apps/ssr/client/initialize/sentry.ts constant ERROR_PATTERNS (line 25) | const ERROR_PATTERNS = [ method beforeSend (line 47) | beforeSend(event, hint) { FILE: apps/ssr/client/lib/helper.ts type Target (line 6) | type Target = { type ExtractHydrateData (line 35) | type ExtractHydrateData = T extends readonly (infer Item)[] type UnwrapMetadataFn (line 41) | type UnwrapMetadataFn = type GetHydrateData (line 51) | type GetHydrateData = T extends (...args: any[]) => Promise FILE: apps/ssr/client/lib/query-client.ts constant DO_NOT_RETRY_CODES (line 4) | const DO_NOT_RETRY_CODES = new Set([400, 401, 403, 404, 422]) method retry (line 10) | retry(failureCount, error) { FILE: apps/ssr/client/modules/login/index.tsx function Login (line 71) | function Login() { function LoginWithPassword (line 353) | function LoginWithPassword() { FILE: apps/ssr/client/pages/(login)/forget-password.tsx function Component (line 37) | function Component() { FILE: apps/ssr/client/pages/(login)/layout.tsx function Component (line 9) | function Component() { FILE: apps/ssr/client/pages/(login)/login/index.tsx function Component (line 4) | function Component() { FILE: apps/ssr/client/pages/(login)/login/metadata.ts type LoginHydrateData (line 31) | type LoginHydrateData = GetHydrateData FILE: apps/ssr/client/pages/(login)/register.tsx function Component (line 28) | function Component() { function RegisterForm (line 48) | function RegisterForm() { FILE: apps/ssr/client/pages/(login)/reset-password.tsx function Component (line 39) | function Component() { FILE: apps/ssr/client/pages/(main)/share/feeds/[id]/index.tsx function Component (line 19) | function Component() { FILE: apps/ssr/client/pages/(main)/share/feeds/[id]/metadata.ts type FeedHydrateData (line 39) | type FeedHydrateData = GetHydrateData FILE: apps/ssr/client/pages/(main)/share/lists/[id]/index.tsx constant SIZE (line 52) | const SIZE = 5 function Component (line 55) | function Component() { FILE: apps/ssr/client/pages/(main)/share/users/[id]/index.tsx type FeedCardProps (line 17) | interface FeedCardProps { FILE: apps/ssr/client/query/auth.ts method retry (line 9) | retry(failureCount, error) { FILE: apps/ssr/client/query/entries.ts type EntriesPreview (line 23) | type EntriesPreview = (Awaited> & { FILE: apps/ssr/client/query/feed.ts function fetchFeedById (line 6) | async function fetchFeedById(id: string) { type Feed (line 22) | type Feed = Awaited> FILE: apps/ssr/client/query/users.ts type GetUserSubscriptionsResponse (line 13) | type GetUserSubscriptionsResponse = ( constant UN_CATEGORIZED (line 19) | const UN_CATEGORIZED = "Uncategorized" type User (line 84) | type User = Awaited> type AuthProvider (line 93) | interface AuthProvider { FILE: apps/ssr/client/router.tsx type Window (line 10) | interface Window { FILE: apps/ssr/helper/meta-map.ts function generateMetaMap (line 11) | async function generateMetaMap() { function watch (line 54) | async function watch() { FILE: apps/ssr/index.ts type RequestContextData (line 20) | interface RequestContextData { function getIPAddress (line 84) | function getIPAddress() { FILE: apps/ssr/scripts/prepare-vercel-build.ts function generateIndexHtmlData (line 11) | async function generateIndexHtmlData() { function main (line 19) | async function main() { FILE: apps/ssr/scripts/upload-fonts-to-r2.ts constant BUCKET (line 9) | const BUCKET = "follow" constant PREFIX (line 10) | const PREFIX = "ssr-fonts" constant ACCOUNT_ID (line 11) | const ACCOUNT_ID = "1f1d1678a2413a54c944b3081bab5c84" FILE: apps/ssr/src/lib/api-client.ts method onRequest (line 28) | onRequest(context) { method onRequestError (line 41) | onRequestError(context) { FILE: apps/ssr/src/lib/not-found.ts class NotFoundError (line 3) | class NotFoundError extends Error { method constructor (line 4) | constructor(reason: string) { FILE: apps/ssr/src/lib/og/fonts.worker.ts function setFontsBucket (line 8) | function setFontsBucket(bucket: R2Bucket) { function decodeSNProFonts (line 12) | function decodeSNProFonts(): any[] { function loadKoseFont (line 29) | async function loadKoseFont(): Promise { function getFonts (line 55) | async function getFonts(): Promise { FILE: apps/ssr/src/lib/og/render-to-image.ts function renderToImage (line 8) | async function renderToImage( FILE: apps/ssr/src/lib/og/render-to-image.worker.ts function renderToImage (line 8) | async function renderToImage( FILE: apps/ssr/src/lib/og/resvg-wasm-shim.ts function setWasmModule (line 7) | function setWasmModule(mod: WebAssembly.Module) { function ensureInitialized (line 11) | async function ensureInitialized() { FILE: apps/ssr/src/lib/seo.ts function buildSeoMetaTags (line 3) | function buildSeoMetaTags( FILE: apps/ssr/src/lib/worker-request-context.ts method get (line 9) | get(key: string) { method set (line 13) | set(key: string, value: any) { function runWithRequestContext (line 19) | function runWithRequestContext(fn: () => T | Promise): T | Promise... function createRequestProxy (line 25) | function createRequestProxy( FILE: apps/ssr/src/meta-handler.ts type MetaTagdata (line 9) | interface MetaTagdata { type MetaOpenGraph (line 15) | interface MetaOpenGraph { type MetaTitle (line 22) | interface MetaTitle { type MetaDescription (line 27) | interface MetaDescription { type MetaHydrateData (line 32) | interface MetaHydrateData { type MetaTag (line 38) | type MetaTag = MetaTagdata | MetaOpenGraph | MetaTitle | MetaHydrateData... function injectMetaHandler (line 40) | async function injectMetaHandler( function defineMetadata (line 77) | function defineMetadata, T extends... class MetaError (line 92) | class MetaError extends Error { method constructor (line 95) | constructor(status: number, message: object) { FILE: apps/ssr/src/router/global.ts function safeInjectMetaToTemplate (line 74) | async function safeInjectMetaToTemplate( function injectMetaToTemplate (line 101) | async function injectMetaToTemplate(document: Document, req: FastifyRequ... FILE: apps/ssr/src/router/og/__base.tsx function RSSIcon (line 99) | function RSSIcon({ color }: { color: string }) { function FollowIcon (line 110) | function FollowIcon() { function LogoText (line 125) | function LogoText() { function getImageBase64 (line 136) | async function getImageBase64(image: string | null | undefined) { FILE: apps/ssr/src/router/og/index.ts method read (line 48) | read() { FILE: apps/ssr/tsdown.config.ts method hooks (line 21) | hooks(hooks) { FILE: apps/ssr/worker-app.ts type RequestContextData (line 12) | interface RequestContextData { FILE: apps/ssr/worker-entry.ts type Env (line 36) | interface Env { function injectEnvToDocument (line 221) | function injectEnvToDocument(document: any) { function injectMetaToTemplate (line 236) | async function injectMetaToTemplate(document: Document, c: any) { FILE: packages/configs/tailwindcss/ratio-mixing-plugin.js function generateDynamicRatioUtilities (line 49) | function generateDynamicRatioUtilities(addUtilities, config) { function generatePercentageBasedUtilities (line 128) | function generatePercentageBasedUtilities(utilities, config) { function getPropertyName (line 150) | function getPropertyName(variant) { FILE: packages/configs/tailwindcss/web.ts function getCollections (line 133) | function getCollections(dir: string) { FILE: packages/internal/atoms/src/helper/setting.ts type CustomEvent (line 14) | interface CustomEvent { function useSettingKeys (line 115) | function useSettingKeys< FILE: packages/internal/components/src/atoms/route.ts type RouteAtom (line 8) | interface RouteAtom { method fn (line 40) | fn() {} FILE: packages/internal/components/src/common/Focusable/Focusable.tsx type FocusableProps (line 22) | interface FocusableProps { FILE: packages/internal/components/src/common/Focusable/utils.ts type HighlightKeyframe (line 3) | interface HighlightKeyframe { function cubicBezier (line 11) | function cubicBezier(t: number, p1x: number, p1y: number, p2x: number, p... function highlightElement (line 43) | function highlightElement(element: HTMLElement | null, colorString = "25... FILE: packages/internal/components/src/common/ReparentPortal.tsx type Target (line 6) | type Target = HTMLElement | null | string | (() => HTMLElement | null | ... type ReparentPortalProps (line 8) | interface ReparentPortalProps { function resolveTarget (line 23) | function resolveTarget(target: Target): HTMLElement | null { function ReparentPortal (line 30) | function ReparentPortal({ FILE: packages/internal/components/src/constants/spring.ts class SpringStatic (line 29) | class SpringStatic { method smooth (line 42) | smooth(duration = 0.4, extraBounce = 0): Transition { method snappy (line 53) | snappy(duration = 0.4, extraBounce = 0): Transition { method bouncy (line 64) | bouncy(duration = 0.4, extraBounce = 0): Transition { FILE: packages/internal/components/src/hooks/useViewport.ts type JotaiStore (line 18) | type JotaiStore = ReturnType FILE: packages/internal/components/src/icons/Database.tsx function MaterialSymbolsDatabaseOutline (line 3) | function MaterialSymbolsDatabaseOutline(props: SVGProps) { FILE: packages/internal/components/src/icons/Meditation.tsx function MdiMeditation (line 3) | function MdiMeditation(props: SVGProps) { FILE: packages/internal/components/src/icons/MynauiInboxArchive.tsx function MynauiInboxArchiveSolid (line 3) | function MynauiInboxArchiveSolid(props: SVGProps) { FILE: packages/internal/components/src/icons/OouiUserAnonymous.tsx function OouiUserAnonymous (line 3) | function OouiUserAnonymous(props: SVGProps) { FILE: packages/internal/components/src/icons/PhCloudCheck.tsx function PhCloudCheck (line 3) | function PhCloudCheck(props: SVGProps) { FILE: packages/internal/components/src/icons/PhCloudWarning.tsx function PhCloudWarning (line 3) | function PhCloudWarning(props: SVGProps) { FILE: packages/internal/components/src/icons/PhCloudX.tsx function PhCloudX (line 3) | function PhCloudX(props: SVGProps) { FILE: packages/internal/components/src/icons/Progress.tsx function MaterialSymbolsProgressActivity (line 3) | function MaterialSymbolsProgressActivity(props: SVGProps) { type CircleProgressProps (line 14) | interface CircleProgressProps { FILE: packages/internal/components/src/icons/infinify.tsx function CarbonInfinitySymbol (line 3) | function CarbonInfinitySymbol(props: SVGProps) { FILE: packages/internal/components/src/icons/nft.tsx function RiNftFill (line 4) | function RiNftFill(props: SVGProps) { FILE: packages/internal/components/src/icons/resize.tsx function LetsIconsResizeDownRightLight (line 3) | function LetsIconsResizeDownRightLight(props: SVGProps) { FILE: packages/internal/components/src/icons/user.tsx function LucideLogIn (line 3) | function LucideLogIn(props: SVGProps) { FILE: packages/internal/components/src/icons/users.tsx function PhUsersBold (line 4) | function PhUsersBold(props: SVGProps) { FILE: packages/internal/components/src/providers/stable-router-provider.tsx type CustomRoute (line 7) | interface CustomRoute {} type GlobalRoute (line 8) | interface GlobalRoute extends CustomRoute { type Window (line 12) | interface Window { method navigate (line 17) | navigate() {} FILE: packages/internal/components/src/ui/auto-resize-height/index.tsx type AnimateChangeInHeightProps (line 7) | interface AnimateChangeInHeightProps { FILE: packages/internal/components/src/ui/avatar-group/index.tsx type AvatarProps (line 9) | type AvatarProps = { type AvatarGroupProps (line 41) | type AvatarGroupProps = Omit, "translate"> & { function AvatarGroup (line 47) | function AvatarGroup({ FILE: packages/internal/components/src/ui/button/action-button.tsx type ActionButtonProps (line 16) | interface ActionButtonProps { FILE: packages/internal/components/src/ui/button/index.tsx type BaseButtonProps (line 11) | interface BaseButtonProps { FILE: packages/internal/components/src/ui/button/interface.ts type BaseButtonProps (line 3) | interface BaseButtonProps { type ActionButtonProps (line 9) | interface ActionButtonProps { FILE: packages/internal/components/src/ui/checkbox/index.tsx type CheckboxProps (line 9) | type CheckboxProps = React.ComponentProps & function Checkbox (line 15) | function Checkbox({ FILE: packages/internal/components/src/ui/collapse/Collapse.tsx type CollapseProps (line 12) | interface CollapseProps { FILE: packages/internal/components/src/ui/collapse/CollapseCss.tsx type CollapseContextValue (line 10) | interface CollapseContextValue { type CollapseGroupProps (line 25) | interface CollapseGroupProps { type CollapseProps (line 62) | interface CollapseProps { type CollapseCssRef (line 76) | interface CollapseCssRef { type CollapseContentProps (line 142) | interface CollapseContentProps { FILE: packages/internal/components/src/ui/collapse/hooks.tsx type CollapseContextValue (line 4) | interface CollapseContextValue { FILE: packages/internal/components/src/ui/drop-zone/index.tsx type DropZoneProps (line 52) | interface DropZoneProps { FILE: packages/internal/components/src/ui/effect/MagneticHoverEffect.tsx type MagneticHoverEffectProps (line 5) | type MagneticHoverEffectProps = { FILE: packages/internal/components/src/ui/form/index.tsx type FormFieldContextValue (line 12) | type FormFieldContextValue< type FormItemContextValue (line 55) | type FormItemContextValue = { FILE: packages/internal/components/src/ui/icon/SiteIcon.tsx type SiteIconProps (line 8) | interface SiteIconProps { FILE: packages/internal/components/src/ui/input/DateTimePicker.tsx type DateTimePickerProps (line 11) | interface DateTimePickerProps { FILE: packages/internal/components/src/ui/input/TextAreaWrapper.tsx type RoundedSize (line 7) | type RoundedSize = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "default" type TextAreaWrapperProps (line 19) | interface TextAreaWrapperProps extends PropsWithChildren { FILE: packages/internal/components/src/ui/input/TimeSelect.tsx type TimeSelectProps (line 7) | interface TimeSelectProps { constant FALLBACK_TIME (line 20) | const FALLBACK_TIME = "12:00" FILE: packages/internal/components/src/ui/json-highlighter/index.tsx type JsonHighlighterProps (line 4) | interface JsonHighlighterProps { type Token (line 86) | interface Token { function highlightJson (line 96) | function highlightJson(jsonString: string): string { function tokenizeJson (line 110) | function tokenizeJson(json: string): Token[] { function isFollowedByColon (line 334) | function isFollowedByColon(json: string, startIndex: number): boolean { function renderTokens (line 348) | function renderTokens(tokens: Token[], originalJson: string): string { FILE: packages/internal/components/src/ui/katex/index.tsx type KateXProps (line 5) | type KateXProps = { FILE: packages/internal/components/src/ui/kbd/Kbd.tsx function simulateKeyPress (line 90) | function simulateKeyPress(key: string) { function MaterialSymbolsKeyboardCommandKey (line 409) | function MaterialSymbolsKeyboardCommandKey(props: React.SVGProps) { function MaterialSymbolsWindowOutlineSharp (line 480) | function MaterialSymbolsWindowOutlineSharp(props: React.SVGProps = React.FC & { FILE: packages/internal/components/src/ui/lexical-rich-editor/utils.ts function convertLexicalToMarkdown (line 7) | function convertLexicalToMarkdown(editor: LexicalEditor): string { function getEditorStateJSONString (line 17) | function getEditorStateJSONString(plainText: string): string { FILE: packages/internal/components/src/ui/link/LinkWithTooltip.tsx type LinkProps (line 3) | interface LinkProps { FILE: packages/internal/components/src/ui/loading/index.tsx type LoadingCircleProps (line 6) | interface LoadingCircleProps { FILE: packages/internal/components/src/ui/markdown/html.tsx type ParseHtmlOptions (line 5) | type ParseHtmlOptions = { type HtmlProps (line 12) | type HtmlProps = { content: string } & ParseHtmlOptions function Html (line 14) | function Html({ content, scrollEnabled = true, ...options }: HtmlProps) { FILE: packages/internal/components/src/ui/masonry/index.tsx function MasonryScroller (line 116) | function MasonryScroller( function useContainerPosition (line 154) | function useContainerPosition( function useResizeObserver (line 212) | function useResizeObserver(positioner: Positioner) { FILE: packages/internal/components/src/ui/platform-icon/collections/cubox.tsx function SimpleIconsCubox (line 3) | function SimpleIconsCubox({ className, ...props }: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/instapaper.tsx function SimpleIconsInstapaper (line 3) | function SimpleIconsInstapaper(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/obsidian.tsx function SimpleIconsObsidian (line 3) | function SimpleIconsObsidian(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/outline.tsx function SimpleIconsOutline (line 3) | function SimpleIconsOutline(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/readeck.tsx function SimpleIconsReadeck (line 3) | function SimpleIconsReadeck(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/readwise.tsx function SimpleIconsReadwise (line 3) | function SimpleIconsReadwise(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/rss3.tsx function TokenBrandedRss3 (line 3) | function TokenBrandedRss3(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/rsshub.tsx function RSSHubLogo (line 3) | function RSSHubLogo(props: SVGProps) { FILE: packages/internal/components/src/ui/platform-icon/collections/zotero.tsx function SimpleIconsZotero (line 3) | function SimpleIconsZotero(props: SVGProps) { FILE: packages/internal/components/src/ui/progressive-blur/index.tsx type LinearBlurProps (line 3) | interface LinearBlurProps extends React.HTMLAttributes { function LinearBlur (line 18) | function LinearBlur({ FILE: packages/internal/components/src/ui/radio-group/RadioGroup.tsx method onChange (line 18) | onChange(value) { FILE: packages/internal/components/src/ui/radio-group/context.ts type RadioContext (line 3) | interface RadioContext { type RadioGroupValue (line 11) | type RadioGroupValue = string | undefined FILE: packages/internal/components/src/ui/radio-group/motion.tsx type RadioGroupProps (line 11) | type RadioGroupProps = React.ComponentProps { FILE: packages/internal/components/src/ui/shrinking-focus-border/index.tsx type ShrinkingFocusBorderProps (line 6) | interface ShrinkingFocusBorderProps { FILE: packages/internal/components/src/ui/skeleton/index.tsx function Skeleton (line 3) | function Skeleton({ className, ...props }: React.HTMLAttributes = constant THUMB_PADDING (line 24) | const THUMB_PADDING = 3 constant THUMB_SIZE (line 25) | const THUMB_SIZE = 18 constant SWITCH_WIDTH (line 26) | const SWITCH_WIDTH = 40 constant THUMB_PADDING_SM (line 27) | const THUMB_PADDING_SM = 2 constant THUMB_SIZE_SM (line 28) | const THUMB_SIZE_SM = 14 constant SWITCH_WIDTH_SM (line 29) | const SWITCH_WIDTH_SM = 32 function Switch (line 30) | function Switch({ FILE: packages/internal/components/src/ui/table/index.tsx type TableHeadProps (line 69) | interface TableHeadProps type TableCellProps (line 89) | interface TableCellProps FILE: packages/internal/components/src/ui/tabs/index.tsx type TabsListProps (line 56) | interface TabsListProps extends React.ComponentPropsWithoutRef constant TOAST_Z_INDEX (line 9) | const TOAST_Z_INDEX = 999999999 FILE: packages/internal/components/src/ui/typography/EllipsisWithTooltip.tsx type EllipsisProps (line 15) | type EllipsisProps = PropsWithChildren<{ FILE: packages/internal/components/src/utils/parse-markdown.tsx type RemarkOptions (line 20) | interface RemarkOptions { FILE: packages/internal/components/src/utils/selector.tsx function withResponsiveComponent (line 17) | function withResponsiveComponent

( function withResponsiveSyncComponent (line 44) | function withResponsiveSyncComponent

( FILE: packages/internal/constants/src/app.ts constant APPLE_APP_STORE_ID (line 1) | const APPLE_APP_STORE_ID = "6739802604" constant GOOGLE_PLAY_PACKAGE_ID (line 2) | const GOOGLE_PLAY_PACKAGE_ID = "is.follow" constant APP_STORE_URLS (line 4) | const APP_STORE_URLS = { FILE: packages/internal/constants/src/enums.ts type Routes (line 2) | enum Routes { type UserRole (line 7) | enum UserRole { FILE: packages/internal/constants/src/rsshub.ts type RSSHubCategory (line 27) | type RSSHubCategory = (typeof RSSHubCategories)[number] FILE: packages/internal/constants/src/tabs.tsx type ViewDefinition (line 5) | interface ViewDefinition { function getView (line 139) | function getView(id: FeedViewType | number): ViewDefinition | undefined { function getViewList (line 143) | function getViewList(options: { includeAll?: boolean } = {}): ViewDefini... FILE: packages/internal/database/src/DatabaseSource.js class DatabaseSource (line 6) | class DatabaseSource { method constructor (line 19) | constructor(vfs, path) { method start (line 32) | async start(controller) { method pull (line 51) | async pull(controller) { method cancel (line 80) | cancel(reason) { function check (line 85) | async function check(code) { FILE: packages/internal/database/src/ResourceLock.ts class ResourceLock (line 1) | class ResourceLock { method acquire (line 5) | acquire(): Promise<() => void> { method release (line 19) | private release() { FILE: packages/internal/database/src/constant.ts constant SQLITE_DB_NAME (line 1) | const SQLITE_DB_NAME = "follow.db" FILE: packages/internal/database/src/db.desktop.ts constant IDB_NAME (line 19) | const IDB_NAME = "WA_SQLITE" function initializeDB (line 21) | async function initializeDB() { function migrateDB (line 75) | async function migrateDB() { function getDBFile (line 85) | async function getDBFile() { function exportDB (line 102) | async function exportDB() { function deleteDB (line 115) | async function deleteDB() { FILE: packages/internal/database/src/db.rn.ts function initializeDB (line 16) | function initializeDB() { function migrateDB (line 24) | async function migrateDB(): Promise { function getDBFile (line 36) | async function getDBFile() {} function exportDB (line 37) | async function exportDB() {} function deleteDB (line 38) | async function deleteDB() { FILE: packages/internal/database/src/db.ts type AsyncDb (line 17) | type AsyncDb = BaseSQLiteDatabase<"async", any, typeof schema> FILE: packages/internal/database/src/drizzle/0000_harsh_shiva.sql type `feeds` (line 1) | CREATE TABLE `feeds` ( type `inboxes` (line 13) | CREATE TABLE `inboxes` ( type `lists` (line 19) | CREATE TABLE `lists` ( type `subscriptions` (line 31) | CREATE TABLE `subscriptions` ( FILE: packages/internal/database/src/drizzle/0002_smart_power_man.sql type `unread` (line 1) | CREATE TABLE `unread` ( FILE: packages/internal/database/src/drizzle/0003_known_roland_deschain.sql type `__new_unread` (line 2) | CREATE TABLE `__new_unread` ( FILE: packages/internal/database/src/drizzle/0004_majestic_thunderbolt_ross.sql type `users` (line 1) | CREATE TABLE `users` ( FILE: packages/internal/database/src/drizzle/0005_tense_sleepwalker.sql type `entries` (line 1) | CREATE TABLE `entries` ( FILE: packages/internal/database/src/drizzle/0008_last_the_santerians.sql type `collections` (line 1) | CREATE TABLE `collections` ( FILE: packages/internal/database/src/drizzle/0009_lucky_power_man.sql type `summaries` (line 1) | CREATE TABLE `summaries` ( FILE: packages/internal/database/src/drizzle/0010_legal_ben_grimm.sql type `__new_summaries` (line 2) | CREATE TABLE `__new_summaries` ( type `unq` (line 13) | CREATE UNIQUE INDEX `unq` ON `summaries` (`entry_id`,`language`) FILE: packages/internal/database/src/drizzle/0011_mysterious_stark_industries.sql type `images` (line 1) | CREATE TABLE `images` ( FILE: packages/internal/database/src/drizzle/0013_chunky_stephen_strange.sql type `__new_users` (line 2) | CREATE TABLE `__new_users` ( FILE: packages/internal/database/src/drizzle/0017_talented_captain_cross.sql type `__new_summaries` (line 2) | CREATE TABLE `__new_summaries` ( type `unq` (line 13) | CREATE UNIQUE INDEX `unq` ON `summaries` (`entry_id`,`language`) FILE: packages/internal/database/src/drizzle/0018_dashing_the_fury.sql type `translations` (line 1) | CREATE TABLE `translations` ( type `translation-unique-index` (line 10) | CREATE UNIQUE INDEX `translation-unique-index` ON `translations` (`entry... FILE: packages/internal/database/src/drizzle/0021_wakeful_onslaught.sql type `__new_translations` (line 2) | CREATE TABLE `__new_translations` ( type `translation-unique-index` (line 16) | CREATE UNIQUE INDEX `translation-unique-index` ON `translations` (`entry... FILE: packages/internal/database/src/drizzle/0024_spooky_alex_power.sql type `__new_lists` (line 2) | CREATE TABLE `__new_lists` ( type `__new_users` (line 20) | CREATE TABLE `__new_users` ( FILE: packages/internal/database/src/drizzle/0025_colorful_valkyrie.sql type `__new_inboxes` (line 2) | CREATE TABLE `__new_inboxes` ( FILE: packages/internal/database/src/drizzle/0027_nostalgic_human_torch.sql type `__new_images` (line 2) | CREATE TABLE `__new_images` ( FILE: packages/internal/database/src/drizzle/0028_chief_cyclops.sql type `__new_summaries` (line 2) | CREATE TABLE `__new_summaries` ( type `unq` (line 14) | CREATE UNIQUE INDEX `unq` ON `summaries` (`entry_id`,`language`) type `__new_translations` (line 15) | CREATE TABLE `__new_translations` ( type `translation-unique-index` (line 28) | CREATE UNIQUE INDEX `translation-unique-index` ON `translations` (`entry... FILE: packages/internal/database/src/drizzle/0029_flaky_gorgon.sql type `ai_chat_messages` (line 1) | CREATE TABLE `ai_chat_messages` ( type `ai_chat_messages_unq` (line 9) | CREATE UNIQUE INDEX `ai_chat_messages_unq` ON `ai_chat_messages` (`room_... type `ai_chat` (line 10) | CREATE TABLE `ai_chat` ( FILE: packages/internal/database/src/drizzle/0030_common_gabe_jones.sql type `__new_ai_chat_messages` (line 2) | CREATE TABLE `__new_ai_chat_messages` ( type `ai_chat_messages_unq` (line 14) | CREATE UNIQUE INDEX `ai_chat_messages_unq` ON `ai_chat_messages` (`room_... FILE: packages/internal/database/src/drizzle/0033_shiny_sebastian_shaw.sql type `idx_ai_chat_sessions_updated_at` (line 4) | CREATE INDEX `idx_ai_chat_sessions_updated_at` ON `ai_chat_sessions` (`u... type `__new_ai_chat_messages` (line 6) | CREATE TABLE `__new_ai_chat_messages` ( type `idx_ai_chat_messages_chat_id_created_at` (line 23) | CREATE INDEX `idx_ai_chat_messages_chat_id_created_at` ON `ai_chat_messa... type `idx_ai_chat_messages_status` (line 24) | CREATE INDEX `idx_ai_chat_messages_status` ON `ai_chat_messages` (`status`) type `idx_ai_chat_messages_chat_id_role` (line 25) | CREATE INDEX `idx_ai_chat_messages_chat_id_role` ON `ai_chat_messages` (... FILE: packages/internal/database/src/drizzle/0035_last_valeria_richards.sql type `__new_ai_chat_messages` (line 2) | CREATE TABLE `__new_ai_chat_messages` ( type `idx_ai_chat_messages_chat_id_created_at` (line 18) | CREATE INDEX `idx_ai_chat_messages_chat_id_created_at` ON `ai_chat_messa... type `idx_ai_chat_messages_status` (line 19) | CREATE INDEX `idx_ai_chat_messages_status` ON `ai_chat_messages` (`status`) type `idx_ai_chat_messages_chat_id_role` (line 20) | CREATE INDEX `idx_ai_chat_messages_chat_id_role` ON `ai_chat_messages` (... FILE: packages/internal/database/src/migrator.ts type MigrationConfig (line 5) | interface MigrationConfig { type MigrationJournal (line 11) | interface MigrationJournal { type MigrationMeta (line 23) | interface MigrationMeta { type MaybePromise (line 30) | type MaybePromise = T | Promise type SQLiteMigrationDatabase (line 31) | type SQLiteMigrationDatabase = Pick>( function getTableColumns (line 120) | function getTableColumns(db: SQLiteMigrationDatabase, tableName: string)... function shouldSkipMigrationQuery (line 126) | function shouldSkipMigrationQuery(db: SQLiteMigrationDatabase, query: st... function migrateExpoSQLite (line 152) | async function migrateExpoSQLite(db: SQLiteMigrationDatabase, config: Mi... FILE: packages/internal/database/src/schemas/index.ts type AiChatMessagesModel (line 211) | type AiChatMessagesModel = typeof aiChatMessagesTable.$inferSelect FILE: packages/internal/database/src/schemas/types.ts type SubscriptionSchema (line 15) | type SubscriptionSchema = typeof subscriptionsTable.$inferInsert type FeedSchema (line 17) | type FeedSchema = typeof feedsTable.$inferInsert type InboxSchema (line 19) | type InboxSchema = typeof inboxesTable.$inferInsert type ListSchema (line 21) | type ListSchema = typeof listsTable.$inferInsert type UnreadSchema (line 23) | type UnreadSchema = typeof unreadTable.$inferInsert type UserSchema (line 25) | type UserSchema = typeof usersTable.$inferInsert type EntrySchema (line 27) | type EntrySchema = typeof entriesTable.$inferInsert type CollectionSchema (line 29) | type CollectionSchema = typeof collectionsTable.$inferInsert type SummarySchema (line 31) | type SummarySchema = typeof summariesTable.$inferInsert type TranslationSchema (line 33) | type TranslationSchema = typeof translationsTable.$inferInsert type ImageSchema (line 35) | type ImageSchema = typeof imagesTable.$inferInsert type MediaModel (line 37) | type MediaModel = { type AttachmentsModel (line 46) | type AttachmentsModel = { type ExtraModel (line 54) | type ExtraModel = { type AndroidImageColors (line 65) | interface AndroidImageColors { type WebImageColors (line 77) | interface WebImageColors { type IOSImageColors (line 88) | interface IOSImageColors { type ImageColorsResult (line 96) | type ImageColorsResult = AndroidImageColors | IOSImageColors | WebImageC... FILE: packages/internal/database/src/services/collection.ts class CollectionServiceStatic (line 9) | class CollectionServiceStatic implements Resetable { method reset (line 10) | async reset() { method upsertMany (line 14) | async upsertMany(collections: CollectionSchema[], options?: { reset?: ... method delete (line 30) | async delete(entryId: string) { method deleteMany (line 34) | async deleteMany(entryId: string[]) { method getCollectionMany (line 39) | getCollectionMany(entryId: string[]) { method getCollectionAll (line 43) | getCollectionAll() { FILE: packages/internal/database/src/services/entry.ts type PublishAtTimeRangeFilter (line 9) | interface PublishAtTimeRangeFilter { type InsertedBeforeTimeRangeFilter (line 14) | interface InsertedBeforeTimeRangeFilter { class EntryServiceStatic (line 18) | class EntryServiceStatic implements Resetable { method reset (line 19) | async reset() { method upsertMany (line 23) | async upsertMany(entries: EntrySchema[]) { method patch (line 34) | async patch(entry: Partial & { id: string }) { method patchMany (line 38) | async patchMany({ method getEntryMany (line 66) | getEntryMany(entryId: string[]) { method getEntryAll (line 70) | getEntryAll() { method getEntriesToHydrate (line 74) | async getEntriesToHydrate() { method deleteMany (line 119) | async deleteMany(entryIds: string[]) { FILE: packages/internal/database/src/services/feed.ts constant FEED_EXTRA_DATA_KEYS (line 9) | const FEED_EXTRA_DATA_KEYS = [ class FeedServiceStatic (line 15) | class FeedServiceStatic implements Resetable { method reset (line 16) | async reset() { method upsertMany (line 19) | async upsertMany(feed: FeedSchema[]) { method getFeedAll (line 30) | getFeedAll() { method patch (line 34) | async patch(feedId: string, patch: Partial) { FILE: packages/internal/database/src/services/image.ts class ImageServiceStatic (line 7) | class ImageServiceStatic implements Resetable { method reset (line 8) | async reset() { method upsertMany (line 12) | async upsertMany(imageColors: ImageSchema[]) { method getImageAll (line 23) | async getImageAll() { FILE: packages/internal/database/src/services/inbox.ts class InboxServiceStatic (line 9) | class InboxServiceStatic implements Resetable { method reset (line 10) | async reset() { method deleteById (line 14) | async deleteById(id: string) { method getInboxAll (line 18) | getInboxAll() { method upsertMany (line 22) | async upsertMany(inboxes: InboxSchema[]) { FILE: packages/internal/database/src/services/internal/base.ts type Resetable (line 1) | interface Resetable { FILE: packages/internal/database/src/services/internal/utils.ts function conflictUpdateAllExcept (line 6) | function conflictUpdateAllExcept< FILE: packages/internal/database/src/services/list.ts class ListServiceStatic (line 9) | class ListServiceStatic implements Resetable { method reset (line 10) | async reset() { method upsertMany (line 14) | async upsertMany(lists: ListSchema[]) { method deleteList (line 25) | async deleteList(listId: string) { method getListAll (line 29) | getListAll() { FILE: packages/internal/database/src/services/subscription.ts class SubscriptionServiceStatic (line 9) | class SubscriptionServiceStatic implements Resetable { method getSubscriptionAll (line 10) | getSubscriptionAll() { method reset (line 14) | async reset() { method upsertMany (line 17) | async upsertMany(subscriptions: SubscriptionSchema[]) { method patch (line 36) | async patch(subscription: Partial & { id: string }) { method patchMany (line 43) | async patchMany({ feedIds, data }: { feedIds: string[]; data: Partial<... method deleteNotExists (line 47) | async deleteNotExists(existsIds: string[], view?: FeedViewType) { method delete (line 62) | async delete(id: string | string[]) { FILE: packages/internal/database/src/services/summary.ts class SummaryServiceStatic (line 8) | class SummaryServiceStatic implements Resetable { method reset (line 9) | async reset() { method insertSummary (line 13) | async insertSummary(data: Omit) { method getSummary (line 33) | async getSummary(entryId: string) { method getAllSummaries (line 41) | async getAllSummaries() { method deleteSummary (line 46) | async deleteSummary(entryId: string) { FILE: packages/internal/database/src/services/translation.ts class TranslationServiceStatic (line 8) | class TranslationServiceStatic implements Resetable { method getTranslationAll (line 9) | getTranslationAll() { method getTranslationToHydrate (line 13) | async getTranslationToHydrate() { method reset (line 29) | async reset() { method insertTranslation (line 33) | async insertTranslation(data: Omit) { method deleteTranslation (line 55) | async deleteTranslation(entryId: string) { FILE: packages/internal/database/src/services/unread.ts type UnreadUpdateOptions (line 7) | interface UnreadUpdateOptions { class UnreadServiceStatic (line 11) | class UnreadServiceStatic implements Resetable { method reset (line 12) | async reset() { method getUnreadAll (line 16) | async getUnreadAll() { method upsertMany (line 20) | async upsertMany(unreads: UnreadSchema[], options?: UnreadUpdateOption... FILE: packages/internal/database/src/services/user.ts class UserServiceStatic (line 9) | class UserServiceStatic implements Resetable { method getUserAll (line 10) | getUserAll() { method upsertMany (line 14) | async upsertMany(users: UserSchema[]) { method removeCurrentUser (line 25) | async removeCurrentUser() { method reset (line 29) | async reset() { FILE: packages/internal/database/src/types.ts type DB (line 5) | type DB = FILE: packages/internal/hooks/src/factory/createHTMLMediaHook.ts function parseTimeRanges (line 11) | function parseTimeRanges(ranges: TimeRanges) { type HTMLMediaProps (line 23) | interface HTMLMediaProps type HTMLMediaState (line 28) | interface HTMLMediaState { type HTMLMediaControls (line 40) | interface HTMLMediaControls { type MediaPropsWithRef (line 49) | type MediaPropsWithRef = HTMLMediaProps & { function createHTMLMediaHook (line 53) | function createHTMLMediaHook = T & { type OptimisticMutationConfig (line 24) | interface OptimisticMutationConfig< type OptimisticContext (line 65) | interface OptimisticContext { type StrategyConfig (line 73) | interface StrategyConfig { FILE: packages/internal/hooks/src/optimistic/useOptimisticMutation.ts function useOptimisticMutation (line 10) | function useOptimisticMutation< FILE: packages/internal/hooks/src/useCountDown.ts type CountdownOptions (line 6) | type CountdownOptions = { type CountdownControllers (line 16) | type CountdownControllers = { function useCountdown (line 22) | function useCountdown({ FILE: packages/internal/hooks/src/useDark.ts function useDarkWebApp (line 5) | function useDarkWebApp() { FILE: packages/internal/hooks/src/useElementWidth.ts function useElementWidth (line 9) | function useElementWidth(ref: RefObject... FILE: packages/internal/hooks/src/useInputComposition.ts type InputElementAttributes (line 4) | type InputElementAttributes = React.DetailedHTMLProps< type TextareaElementAttributes (line 8) | type TextareaElementAttributes = React.DetailedHTMLProps< FILE: packages/internal/hooks/src/useInterval.ts function useAccurateInterval (line 4) | function useAccurateInterval( FILE: packages/internal/hooks/src/useLongPress.ts type UseLongPressOptions (line 4) | interface UseLongPressOptions { function useLongPress (line 16) | function useLongPress({ FILE: packages/internal/hooks/src/useMeasure.ts type ResizeObserverCallback (line 7) | type ResizeObserverCallback = (entries: any[], observer: ResizeObserver)... class ResizeObserver (line 8) | class ResizeObserver { type RectReadOnly (line 16) | interface RectReadOnly { type HTMLOrSVGElement (line 28) | type HTMLOrSVGElement = HTMLElement | SVGElement type Result (line 30) | type Result = [(element: HTMLOrSVGElement | null) => void, RectReadOnly,... type State (line 32) | type State = { type Options (line 39) | type Options = { function useMeasure (line 50) | function useMeasure({ debounce, scroll, offsetSize }: Options = defaultO... function useOnWindowResize (line 179) | function useOnWindowResize(onWindowResize: (event: Event) => void) { function useOnWindowScroll (line 186) | function useOnWindowScroll(onScroll: () => void, enabled: boolean) { function findScrollContainers (line 197) | function findScrollContainers(element: HTMLOrSVGElement | null): HTMLOrS... FILE: packages/internal/hooks/src/usePageVisibility.ts function usePageVisibility (line 3) | function usePageVisibility() { FILE: packages/internal/hooks/src/useSyncTheme.ts function disableTransition (line 24) | function disableTransition(disableTransitionExclude: string[] = []) { FILE: packages/internal/hooks/src/useTriangleMenu.ts function useTriangleMenu (line 3) | function useTriangleMenu( function isPointInTriangle (line 108) | function isPointInTriangle( function isPointInRect (line 128) | function isPointInRect( FILE: packages/internal/models/src/rsshub.ts type RSSHubRouteType (line 4) | type RSSHubRouteType = Record type RSSHubRouteDeclaration (line 5) | interface RSSHubRouteDeclaration { type Routes (line 10) | type Routes = Record type RSSHubParameterObject (line 11) | type RSSHubParameterObject = { type RSSHubParameter (line 20) | type RSSHubParameter = string | RSSHubParameterObject type RSSHubRoute (line 21) | type RSSHubRoute = { FILE: packages/internal/shared/src/auth.ts type AuthPlugin (line 13) | type AuthPlugin = AuthPlugins[number] type AuthClient (line 59) | type AuthClient = Re... type LoginRuntime (line 65) | type LoginRuntime = "browser" | "app" class Auth (line 67) | class Auth { method constructor (line 70) | constructor( FILE: packages/internal/shared/src/bridge.ts constant PREFIX (line 8) | const PREFIX = "__follow" type WindowState (line 22) | enum WindowState { type DistributionUpdateNotice (line 27) | interface DistributionUpdateNotice { type RenderGlobalContext (line 34) | interface RenderGlobalContext { function createProxy (line 107) | function createProxy( type AddPromise (line 135) | type AddPromise = T extends (...args: infer A) => Promise type Fn (line 141) | type Fn = { function callWindowExpose (line 145) | function callWindowExpose(window: Browser... function callWebviewExpose (line 149) | function callWebviewExpose( function callWindowExposeRenderer (line 155) | function callWindowExposeRenderer() { FILE: packages/internal/shared/src/constants.ts type ModeEnum (line 11) | enum ModeEnum { constant MODE (line 17) | const MODE = import.meta.env?.MODE as ModeEnum constant DEV (line 21) | const DEV = constant LEGACY_APP_PROTOCOL (line 24) | const LEGACY_APP_PROTOCOL = DEV ? "follow-dev" : "follow" constant APP_PROTOCOL (line 25) | const APP_PROTOCOL = DEV ? "folo-dev" : "folo" constant DEEPLINK_SCHEME (line 26) | const DEEPLINK_SCHEME = `${APP_PROTOCOL}://` as const constant SYSTEM_CAN_UNDER_BLUR_WINDOW (line 28) | const SYSTEM_CAN_UNDER_BLUR_WINDOW = globalThis?.window?.electron constant ELECTRON_BUILD (line 36) | const ELECTRON_BUILD = !!ELECTRON constant WEB_BUILD (line 37) | const WEB_BUILD = !ELECTRON constant IN_ELECTRON (line 39) | const IN_ELECTRON = !!globalThis["electron"] || ELECTRON_BUILD constant MICROSOFT_STORE_BUILD (line 41) | const MICROSOFT_STORE_BUILD = FILE: packages/internal/shared/src/electron.ts constant ELECTRON_QUERY_KEY (line 3) | const ELECTRON_QUERY_KEY = "__electron" type OpenElectronWindowOptions (line 4) | interface OpenElectronWindowOptions { FILE: packages/internal/shared/src/env.common.ts constant FIREBASE_CONFIG_DEFAULT (line 1) | const FIREBASE_CONFIG_DEFAULT = JSON.stringify({ constant DEFAULT_VALUES (line 11) | const DEFAULT_VALUES = { FILE: packages/internal/shared/src/env.desktop.ts function metaEnvIsEmpty (line 30) | function metaEnvIsEmpty() { function getRuntimeEnv (line 38) | function getRuntimeEnv() { function injectExternalEnv (line 50) | function injectExternalEnv(originEnv: T): T { FILE: packages/internal/shared/src/env.ssr.ts function metaEnvIsEmpty (line 30) | function metaEnvIsEmpty() { function getRuntimeEnv (line 38) | function getRuntimeEnv() { function injectExternalEnv (line 50) | function injectExternalEnv(originEnv: T): T { FILE: packages/internal/shared/src/global.d.ts type Window (line 4) | interface Window { FILE: packages/internal/shared/src/language.ts type SupportedActionLanguage (line 1) | type SupportedActionLanguage = "en" | "ja" | "zh-CN" | "zh-TW" | "fr-FR" constant ACTION_LANGUAGE_MAP (line 2) | const ACTION_LANGUAGE_MAP: Record< constant ACTION_LANGUAGE_KEYS (line 36) | const ACTION_LANGUAGE_KEYS = Object.keys(ACTION_LANGUAGE_MAP) as Support... type ApiSupportedActionLanguage (line 38) | type ApiSupportedActionLanguage = Exclude FILE: packages/internal/shared/src/queue.ts class AsyncQueue (line 1) | class AsyncQueue { method constructor (line 6) | constructor(maxConcurrent: number) { method runNext (line 12) | private async runNext() { method add (line 30) | add(request: () => Promise) { method addMultiple (line 35) | addMultiple(requests: (() => Promise)[]) { FILE: packages/internal/shared/src/review-prompt.ts constant DAY_IN_MS (line 1) | const DAY_IN_MS = 24 * 60 * 60 * 1000 type ReviewPromptOutcome (line 3) | type ReviewPromptOutcome = type ReviewPromptState (line 9) | interface ReviewPromptState { type ReviewPromptEligibilityInput (line 23) | interface ReviewPromptEligibilityInput { type ReviewPromptEligibilityResult (line 33) | interface ReviewPromptEligibilityResult { FILE: packages/internal/shared/src/settings/constants.ts type SettingPaidLevels (line 9) | enum SettingPaidLevels { type PartialRecord (line 15) | type PartialRecord = Partial> constant PAID_SETTINGS (line 17) | const PAID_SETTINGS = { type SettingNamespace (line 48) | type SettingNamespace = keyof typeof PAID_SETTINGS constant ACCENT_COLOR_MAP (line 56) | const ACCENT_COLOR_MAP = { FILE: packages/internal/shared/src/settings/defaults.ts constant DEFAULT_SUMMARIZE_TIMELINE_SHORTCUT_ID (line 3) | const DEFAULT_SUMMARIZE_TIMELINE_SHORTCUT_ID = "default-summarize-timeline" constant DEFAULT_RECOMMEND_FEEDS_SHORTCUT_ID (line 4) | const DEFAULT_RECOMMEND_FEEDS_SHORTCUT_ID = "default-recommend-feeds" FILE: packages/internal/shared/src/settings/hook.ts function hookEnhancedSettings (line 4) | function hookEnhancedSettings< FILE: packages/internal/shared/src/settings/interface.ts type GeneralSettings (line 1) | interface GeneralSettings { type AccentColor (line 40) | type AccentColor = type UISettings (line 50) | interface UISettings { type IntegrationSettings (line 108) | interface IntegrationSettings { type FetchTemplate (line 162) | interface FetchTemplate { type URLSchemeTemplate (line 169) | interface URLSchemeTemplate { type CustomIntegration (line 174) | interface CustomIntegration { type AIShortcutTarget (line 184) | type AIShortcutTarget = "list" | "entry" constant DEFAULT_SHORTCUT_TARGETS (line 186) | const DEFAULT_SHORTCUT_TARGETS: readonly AIShortcutTarget[] = ["list", "... type AIShortcut (line 188) | interface AIShortcut { type MCPTransportType (line 199) | type MCPTransportType = "streamable-http" | "sse" type MCPService (line 201) | interface MCPService { type AISettings (line 217) | interface AISettings { type ByokProviderName (line 232) | type ByokProviderName = "openai" | "google" | "vercel-ai-gateway" | "ope... type UserByokProviderConfig (line 234) | type UserByokProviderConfig = { type UserByokSettings (line 241) | type UserByokSettings = { FILE: packages/internal/store/src/@types/i18next.d.ts type CustomTypeOptions (line 4) | interface CustomTypeOptions { FILE: packages/internal/store/src/constants/app.ts constant FEED_COLLECTION_LIST (line 4) | const FEED_COLLECTION_LIST = "collections" constant QUERY_PERSIST_KEY (line 6) | const QUERY_PERSIST_KEY = getStorageNS("REACT_QUERY_OFFLINE_CACHE") constant I18N_LOCALE_KEY (line 7) | const I18N_LOCALE_KEY = getStorageNS("I18N_LOCALE") constant ROUTE_FEED_PENDING (line 10) | const ROUTE_FEED_PENDING = "all" constant ROUTE_ENTRY_PENDING (line 11) | const ROUTE_ENTRY_PENDING = "pending" constant ROUTE_FEED_IN_FOLDER (line 12) | const ROUTE_FEED_IN_FOLDER = "folder-" constant ROUTE_FEED_IN_LIST (line 13) | const ROUTE_FEED_IN_LIST = "list-" constant ROUTE_FEED_IN_INBOX (line 14) | const ROUTE_FEED_IN_INBOX = "inbox-" constant ROUTE_TIMELINE_OF_VIEW (line 15) | const ROUTE_TIMELINE_OF_VIEW = "view-" FILE: packages/internal/store/src/constants/onboarding.ts constant ONBOARDING_ENTRY_URL_PREFIX (line 3) | const ONBOARDING_ENTRY_URL_PREFIX = "folo://onboarding" FILE: packages/internal/store/src/context.ts constant NO_VALUE_DEFAULT (line 6) | const NO_VALUE_DEFAULT = Symbol("NO_VALUE_DEFAULT") type ContextValue (line 7) | type ContextValue = T | typeof NO_VALUE_DEFAULT function createJSContext (line 9) | function createJSContext() { FILE: packages/internal/store/src/lib/base.ts type Hydratable (line 1) | interface Hydratable { type Resetable (line 5) | interface Resetable { FILE: packages/internal/store/src/lib/helper.ts method get (line 26) | get(_, prop) { type FunctionKeys (line 48) | type FunctionKeys = { type FunctionProps (line 52) | type FunctionProps = Pick> function createImmerSetter (line 67) | function createImmerSetter(useStore: UseBoundStore>) { type MayBeDraft (line 81) | type MayBeDraft = T type SyncOrAsync (line 85) | type SyncOrAsync = T | Promise type ExecutorFn (line 86) | type ExecutorFn = (snapshot: S, ctx: Ctx) => Sync... type PersisterFn (line 87) | type PersisterFn = ( class Transaction (line 93) | class Transaction { method constructor (line 102) | constructor(snapshot?: S, ctx?: Ctx) { method rollback (line 107) | rollback(fn: ExecutorFn): this { method request (line 112) | request(executor: ExecutorFn): this { method store (line 117) | store(executor: ExecutorFn): this { method persist (line 122) | persist(fn: PersisterFn): this { method run (line 127) | async run(): Promise { FILE: packages/internal/store/src/lib/stream.ts type LineHandler (line 1) | type LineHandler = (data: T) => void | Promise function readNdjsonStream (line 23) | async function readNdjsonStream(response: Response, onLine:... FILE: packages/internal/store/src/modules/action/constant.ts type ActionAction (line 121) | type ActionAction = { FILE: packages/internal/store/src/modules/action/hooks.ts function useActionRules (line 25) | function useActionRules(selector?: (rules: ActionItem[]) => T) { function useActionRule (line 34) | function useActionRule(index: number, selector?: (rule: ActionItem) =... function useActionRuleCondition (line 42) | function useActionRuleCondition({ FILE: packages/internal/store/src/modules/action/store.ts type ActionItem (line 12) | type ActionItem = Omit & { type ActionStore (line 17) | type ActionStore = { type ActionRules (line 22) | type ActionRules = ActionItem[] type ActionModel (line 23) | type ActionModel = ActionItem class ActionSyncService (line 32) | class ActionSyncService { method fetchRules (line 33) | async fetchRules() { method saveRules (line 56) | async saveRules() { class ActionActions (line 68) | class ActionActions { method updateRules (line 69) | updateRules(rules: ActionRules) { method patchRule (line 76) | patchRule(index: number, rule: Partial) { method addRule (line 85) | addRule(getName: (index: number) => string) { method pathCondition (line 97) | pathCondition(index: ActionConditionIndex, condition: Partial) { method deleteConditionItem (line 118) | deleteConditionItem(index: ActionConditionIndex) { method addConditionGroup (line 132) | addConditionGroup(index: Omit FILE: packages/internal/store/src/modules/entry/hooks.ts function useEntry (line 158) | function useEntry( function useEntryList (line 174) | function useEntryList( FILE: packages/internal/store/src/modules/entry/store.ts type EntryId (line 29) | type EntryId = string type FeedId (line 30) | type FeedId = string type InboxId (line 31) | type InboxId = string type Category (line 32) | type Category = string type ListId (line 33) | type ListId = string type EntryState (line 35) | interface EntryState { class EntryActions (line 68) | class EntryActions implements Hydratable, Resetable { method hydrate (line 69) | async hydrate() { method getFlattenMapEntries (line 74) | getFlattenMapEntries() { method addEntryIdToView (line 79) | private addEntryIdToView({ method addEntryIdToCategory (line 122) | private addEntryIdToCategory({ method addEntryIdToFeed (line 143) | private addEntryIdToFeed({ method addEntryIdToInbox (line 161) | private addEntryIdToInbox({ method addEntryIdToList (line 179) | private addEntryIdToList({ method upsertManyInSession (line 197) | upsertManyInSession(entries: EntryModel[], options?: FetchEntriesProps... method upsertMany (line 250) | async upsertMany(entries: EntryModel[]) { method updateEntryContentInSession (line 263) | updateEntryContentInSession({ method updateEntryContent (line 287) | async updateEntryContent({ method markEntryReadStatusInSession (line 321) | markEntryReadStatusInSession({ method resetByView (line 403) | resetByView({ view, entries }: { view?: FeedViewType; entries: EntryMo... method resetByCategory (line 410) | resetByCategory({ category, entries }: { category?: Category; entries:... method resetByFeed (line 417) | resetByFeed({ feedId, entries }: { feedId?: FeedId; entries: EntryMode... method resetByInbox (line 424) | resetByInbox({ inboxId, entries }: { inboxId?: InboxId; entries: Entry... method resetByList (line 431) | resetByList({ listId, entries }: { listId?: ListId; entries: EntryMode... method deleteInboxEntryById (line 438) | deleteInboxEntryById(entryId: EntryId) { method reset (line 450) | async reset() { class EntrySyncServices (line 464) | class EntrySyncServices { method fetchEntries (line 465) | async fetchEntries(props: FetchEntriesProps) { method fetchEntryDetail (line 557) | async fetchEntryDetail(entryId: EntryId | undefined, isInbox?: boolean) { method fetchEntryReadabilityContent (line 585) | async fetchEntryReadabilityContent( method fetchEntryContentByStream (line 622) | async fetchEntryContentByStream(remoteEntryIds?: string[]) { method fetchEntryReadHistory (line 659) | async fetchEntryReadHistory(entryId: EntryId, size: number) { method deleteInboxEntry (line 670) | async deleteInboxEntry(entryId: string) { FILE: packages/internal/store/src/modules/entry/types.ts type EntryModel (line 4) | type EntryModel = EntrySchema type FetchEntriesProps (line 5) | type FetchEntriesProps = { type FetchEntriesPropsSettings (line 19) | type FetchEntriesPropsSettings = { type UseEntriesProps (line 24) | type UseEntriesProps = { type UseEntriesReturn (line 29) | type UseEntriesReturn = { type UseEntriesControl (line 45) | type UseEntriesControl = Pick< FILE: packages/internal/store/src/modules/entry/utils.ts function getEntriesParams (line 6) | function getEntriesParams({ function getInboxFrom (line 53) | function getInboxFrom(entry?: { inboxHandle?: string | null; authorUrl?:... function isInboxEntry (line 59) | function isInboxEntry(entry?: { inboxHandle?: string | null }) { FILE: packages/internal/store/src/modules/feed/hooks.ts function useFeedById (line 19) | function useFeedById( function useFeedsByIds (line 42) | function useFeedsByIds( function useFeedByUrl (line 65) | function useFeedByUrl(url: string | undefined | null): FeedModel | undef... function useFeedByIdOrUrl (line 79) | function useFeedByIdOrUrl(params: { id?: string; url?: string }): FeedMo... FILE: packages/internal/store/src/modules/feed/store.ts type FeedState (line 11) | interface FeedState { class FeedActions (line 26) | class FeedActions implements Hydratable, Resetable { method hydrate (line 27) | async hydrate() { method upsertManyInSession (line 32) | upsertManyInSession(feeds: FeedSchema[]) { method upsertMany (line 51) | async upsertMany(feeds: FeedSchema[]) { method patchInSession (line 66) | patchInSession(feedId: string, patch: Partial) { method patch (line 74) | async patch(feedId: string, patch: Partial) { method reset (line 85) | async reset() { type FeedQueryParams (line 99) | type FeedQueryParams = { class FeedSyncServices (line 104) | class FeedSyncServices { method fetchFeedById (line 105) | async fetchFeedById({ id, url }: FeedQueryParams) { method fetchFeedByUrl (line 136) | async fetchFeedByUrl({ url }: FeedQueryParams) { method claimFeed (line 161) | async claimFeed(feedId: string) { method fetchAnalytics (line 193) | async fetchAnalytics(feedId: string | string[]) { FILE: packages/internal/store/src/modules/feed/types.ts type FeedModel (line 3) | type FeedModel = FeedSchema & { FILE: packages/internal/store/src/modules/image/store.ts type ImageModel (line 7) | type ImageModel = ImageSchema type ImageStore (line 8) | type ImageStore = { class ImageActions (line 21) | class ImageActions implements Hydratable, Resetable { method hydrate (line 22) | async hydrate() { method reset (line 27) | async reset() { method upsertManyInSession (line 36) | upsertManyInSession(images: ImageModel[]) { method upsertMany (line 44) | async upsertMany(images: ImageModel[]) { FILE: packages/internal/store/src/modules/inbox/getters.ts function getInboxList (line 3) | function getInboxList() { FILE: packages/internal/store/src/modules/inbox/hooks.ts function useInboxList (line 20) | function useInboxList(selector?: (inboxes: InboxModel[]) => T) { FILE: packages/internal/store/src/modules/inbox/store.ts type InboxState (line 9) | interface InboxState { class InboxActions (line 23) | class InboxActions implements Hydratable, Resetable { method hydrate (line 24) | async hydrate() { method upsertManyInSession (line 28) | async upsertManyInSession(inboxes: InboxSchema[]) { method upsertMany (line 44) | async upsertMany(inboxes: InboxSchema[]) { method deleteById (line 55) | deleteById(id: string) { method reset (line 61) | async reset() { class InboxSyncService (line 75) | class InboxSyncService { method createInbox (line 76) | async createInbox({ handle, title }: { handle: string; title: string }) { method updateInbox (line 98) | async updateInbox({ handle, title }: { handle: string; title: string }) { method deleteInbox (line 122) | async deleteInbox(inboxId: string) { FILE: packages/internal/store/src/modules/inbox/types.ts type InboxModel (line 3) | type InboxModel = InboxSchema & { FILE: packages/internal/store/src/modules/list/hooks.ts function useListById (line 16) | function useListById( FILE: packages/internal/store/src/modules/list/store.ts type ListId (line 13) | type ListId = string type ListState (line 14) | interface ListState { class ListActions (line 29) | class ListActions implements Hydratable, Resetable { method hydrate (line 30) | async hydrate() { method upsertManyInSession (line 41) | upsertManyInSession(lists: ListModel[]) { method upsertMany (line 51) | async upsertMany(lists: ListModel[]) { method reset (line 63) | async reset() { class ListSyncServices (line 79) | class ListSyncServices { method fetchListById (line 80) | async fetchListById(params: { id: string | undefined }) { method fetchOwnedLists (line 89) | async fetchOwnedLists() { method createList (line 96) | async createList(params: { list: CreateListModel }) { method updateList (line 119) | async updateList(params: { listId: string; list: CreateListModel }) { method deleteList (line 160) | async deleteList(listId: string) { method addFeedsToFeedList (line 192) | async addFeedsToFeedList( method removeFeedFromFeedList (line 207) | async removeFeedFromFeedList(params: { listId: string; feedId: string ... FILE: packages/internal/store/src/modules/list/types.ts type CreateListModel (line 3) | type CreateListModel = Pick... type ListModel (line 7) | type ListModel = Omit & { FILE: packages/internal/store/src/modules/subscription/getter.ts type StateType (line 87) | type StateType = ReturnType FILE: packages/internal/store/src/modules/subscription/store.ts type FeedId (line 24) | type FeedId = string type ListId (line 25) | type ListId = string type SubscriptionState (line 27) | interface SubscriptionState { class SubscriptionActions (line 101) | class SubscriptionActions implements Hydratable, Resetable { method hydrate (line 102) | async hydrate() { method upsertManyInSession (line 108) | async upsertManyInSession(subscriptions: SubscriptionModel[]) { method upsertMany (line 131) | async upsertMany( method resetByView (line 156) | resetByView(view: FeedViewType) { method toggleCategoryOpenState (line 165) | toggleCategoryOpenState(view: FeedViewType, category: string) { method changeCategoryOpenState (line 171) | changeCategoryOpenState(view: FeedViewType, category: string, status: ... method expandCategoryOpenStateByView (line 177) | expandCategoryOpenStateByView(view: FeedViewType, isOpen: boolean) { method reset (line 185) | async reset() { class SubscriptionSyncService (line 202) | class SubscriptionSyncService { method fetch (line 203) | async fetch(view?: FeedViewType) { method edit (line 224) | async edit(subscription: SubscriptionModel) { method subscribe (line 282) | async subscribe(subscription: SubscriptionForm) { method unsubscribe (line 326) | async unsubscribe(id: string | undefined | null | (string | undefined ... method batchUpdateSubscription (line 411) | async batchUpdateSubscription({ method changeListView (line 491) | async changeListView({ listId, view }: { listId: string; view: FeedVie... method deleteCategory (line 544) | async deleteCategory({ category, view }: { category: string; view: Fee... method changeCategoryView (line 590) | async changeCategoryView({ method renameCategory (line 609) | async renameCategory({ FILE: packages/internal/store/src/modules/subscription/types.ts type Nullable (line 4) | type Nullable = T | null | undefined type SubscriptionForm (line 6) | interface SubscriptionForm { type SubscriptionModel (line 17) | type SubscriptionModel = Omit FILE: packages/internal/store/src/modules/summary/enum.ts type SummaryGeneratingStatus (line 1) | enum SummaryGeneratingStatus { FILE: packages/internal/store/src/modules/summary/hooks.ts function usePrefetchSummary (line 28) | function usePrefetchSummary({ FILE: packages/internal/store/src/modules/summary/store.ts type SummaryModel (line 15) | type SummaryModel = Omit type SummaryData (line 17) | interface SummaryData { type SummaryState (line 23) | interface SummaryState { class SummaryActions (line 42) | class SummaryActions implements Resetable, Hydratable { method hydrate (line 43) | async hydrate() { method upsertManyInSession (line 48) | upsertManyInSession(summaries: SummaryModel[]) { method upsertMany (line 79) | async upsertMany(summaries: SummaryModel[]) { method getSummary (line 87) | getSummary(entryId: string, language: SupportedActionLanguage) { method batchClean (line 102) | private batchClean() { method reset (line 123) | async reset() { class SummarySyncService (line 141) | class SummarySyncService { method generateSummary (line 144) | async generateSummary({ FILE: packages/internal/store/src/modules/summary/utils.ts function getGenerateSummaryStatusId (line 3) | function getGenerateSummaryStatusId( type StatusID (line 11) | type StatusID = `${string}-${string}-${string}` FILE: packages/internal/store/src/modules/translation/store.ts type TranslationModel (line 18) | type TranslationModel = Omit type TranslationBatchRequest (line 19) | type TranslationBatchRequest = Parameters["ai"]["... type TranslationState (line 21) | interface TranslationState { class TranslationActions (line 36) | class TranslationActions implements Hydratable, Resetable { method hydrate (line 37) | async hydrate() { method reset (line 42) | async reset() { method upsertManyInSession (line 52) | upsertManyInSession(translations: TranslationModel[]) { method upsertMany (line 77) | async upsertMany(translations: TranslationModel[]) { method getTranslation (line 85) | getTranslation(entryId: string, language: SupportedActionLanguage) { class TranslationSyncService (line 92) | class TranslationSyncService { method ensureMode (line 95) | private async ensureMode(mode: TranslationMode) { type KeyParts (line 110) | type KeyParts = { method generateTranslation (line 220) | async generateTranslation({ FILE: packages/internal/store/src/modules/translation/types.ts type TranslationField (line 4) | type TranslationField = (typeof translationFields)[number] type TranslationFieldArray (line 5) | type TranslationFieldArray = Array type EntryTranslation (line 6) | type EntryTranslation = Record type TranslationMode (line 7) | type TranslationMode = GeneralSettings["translationMode"] FILE: packages/internal/store/src/modules/unread/store.ts class UnreadSyncService (line 33) | class UnreadSyncService { method resetFromRemote (line 34) | async resetFromRemote() { method updateUnreadStatus (line 45) | private async updateUnreadStatus({ method markBatchAsRead (line 111) | async markBatchAsRead({ method markViewAsRead (line 164) | async markViewAsRead(view: FeedViewType, excludePrivate: boolean) { method markFeedAsRead (line 171) | async markFeedAsRead(feedId: string | string[], time?: PublishAtTimeRa... method markListAsRead (line 184) | async markListAsRead(listId: string, time?: PublishAtTimeRangeFilter) { method markEntryReadStatus (line 195) | private async markEntryReadStatus({ entryId, read }: { entryId: string... method markEntryAsRead (line 242) | async markEntryAsRead(entryId: string) { method markEntryAsUnread (line 246) | async markEntryAsUnread(entryId: string) { class UnreadActions (line 251) | class UnreadActions implements Hydratable, Resetable { method hydrate (line 252) | async hydrate() { method upsertManyInSession (line 257) | upsertManyInSession(unreads: UnreadSchema[], options?: UnreadUpdateOpt... method upsertMany (line 268) | async upsertMany(unreads: UnreadSchema[] | UnreadStoreModel, options?:... method changeBatch (line 279) | async changeBatch(updates: UnreadStoreModel, type: "decrement" | "incr... method addUnread (line 291) | addUnread(id: FeedIdOrInboxHandle, count = 1) { method removeUnread (line 299) | removeUnread(id: FeedIdOrInboxHandle, count = 1) { method incrementById (line 307) | incrementById(id: FeedIdOrInboxHandle, count: number) { method updateById (line 311) | async updateById(id: FeedIdOrInboxHandle | undefined | null, count: nu... method subscribeUnreadCount (line 319) | subscribeUnreadCount(fn: (count: number) => void, immediately?: boolea... method reset (line 334) | async reset() { FILE: packages/internal/store/src/modules/unread/types.ts type PublishAtTimeRangeFilter (line 1) | interface PublishAtTimeRangeFilter { type InsertedBeforeTimeRangeFilter (line 6) | interface InsertedBeforeTimeRangeFilter { type UnreadUpdateOptions (line 10) | interface UnreadUpdateOptions { type FeedIdOrInboxHandle (line 14) | type FeedIdOrInboxHandle = string type UnreadStoreModel (line 15) | type UnreadStoreModel = Record type UnreadState (line 16) | interface UnreadState { FILE: packages/internal/store/src/modules/unread/utils.ts constant INBOX_PREFIX_ID (line 2) | const INBOX_PREFIX_ID = "inbox-" FILE: packages/internal/store/src/modules/user/hooks.ts function useIsNewUser (line 82) | function useIsNewUser(options?: GeneralQueryOptions) { FILE: packages/internal/store/src/modules/user/store.ts type UserModel (line 13) | type UserModel = UserSchema type MeModel (line 15) | type MeModel = AuthUser & { type UserStore (line 19) | type UserStore = { class UserSyncService (line 41) | class UserSyncService { method whoami (line 68) | async whoami() { method updateProfile (line 105) | async updateProfile(data: Partial) { method sendVerificationEmail (line 141) | async sendVerificationEmail() { method updateTwoFactor (line 147) | async updateTwoFactor(enabled: boolean, password: string) { method updateEmail (line 168) | async updateEmail(email: string) { method applyInvitationCode (line 197) | async applyInvitationCode(code: string) { method fetchUser (line 208) | async fetchUser(userId: string | undefined) { method fetchUsers (line 216) | async fetchUsers(userIds: string[]) { class UserActions (line 225) | class UserActions implements Hydratable, Resetable { method hydrate (line 226) | async hydrate() { method reset (line 231) | async reset() { method upsertManyInSession (line 240) | upsertManyInSession(users: UserModel[]) { method updateWhoami (line 251) | updateWhoami(data: Partial) { method upsertMany (line 258) | async upsertMany(users: UserModel[]) { method removeCurrentUser (line 268) | async removeCurrentUser() { FILE: packages/internal/store/src/modules/user/types.ts type UserProfileEditable (line 3) | interface UserProfileEditable { FILE: packages/internal/store/src/morph/api.ts class APIMorph (line 27) | class APIMorph { method toList (line 28) | toList(data: ListSchema): ListModel { method toEntry (line 49) | toEntry(data?: InboxEntryGetResponse["data"] | EntryGetByIdResponse["d... method toSubscription (line 82) | toSubscription( method toCollections (line 164) | toCollections( method toEntryList (line 195) | toEntryList(data?: InboxListEntry[] | EntryWithFeed[]): EntryModel[] { method toFeed (line 231) | toFeed(data: EntryWithFeed["feeds"]): FeedModel { method toFeedFromAddFeeds (line 246) | toFeedFromAddFeeds(data: AddFeedsResponse["data"][number]): FeedModel { method toWhoami (line 261) | toWhoami(data: AuthUser): MeModel { FILE: packages/internal/store/src/morph/db-store.ts class DbStoreMorph (line 6) | class DbStoreMorph { method toSubscriptionModel (line 7) | toSubscriptionModel(subscription: SubscriptionSchema): SubscriptionMod... method toEntryModel (line 11) | toEntryModel(entry: EntrySchema): EntryModel { FILE: packages/internal/store/src/morph/store-db.ts class StoreDbMorph (line 7) | class StoreDbMorph { method toListSchema (line 8) | toListSchema(list: ListModel): ListSchema { method toSubscriptionSchema (line 14) | toSubscriptionSchema(subscription: SubscriptionModel): SubscriptionSch... method toEntrySchema (line 20) | toEntrySchema(entry: EntryModel): EntrySchema { FILE: packages/internal/store/src/types.ts type GeneralMutationOptions (line 3) | type GeneralMutationOptions = { type GeneralQueryOptions (line 8) | type GeneralQueryOptions = { type FollowAPI (line 12) | type FollowAPI = ModuleAPIs FILE: packages/internal/tracker/src/adapters/base.ts type IdentifyPayload (line 1) | type IdentifyPayload = { type TrackPayload (line 9) | type TrackPayload = { type CaptureExceptionPayload (line 14) | type CaptureExceptionPayload = { type TrackerAdapter (line 19) | interface TrackerAdapter { FILE: packages/internal/tracker/src/adapters/firebase.ts type FirebaseAdapterConfig (line 6) | interface FirebaseAdapterConfig { class FirebaseAdapter (line 11) | class FirebaseAdapter implements TrackerAdapter { method constructor (line 18) | constructor(config: FirebaseAdapterConfig) { method initialize (line 23) | initialize(): void { method track (line 27) | async track({ eventName, properties }: TrackPayload): Promise { method handleSpecialEvents (line 44) | private async handleSpecialEvents( method identify (line 108) | async identify(payload: IdentifyPayload): Promise { method setUserProperties (line 124) | async setUserProperties(properties: Record): Promise<... method clear (line 139) | async clear(): Promise { method getName (line 150) | getName(): string { method isEnabled (line 154) | isEnabled(): boolean { method setEnabled (line 158) | setEnabled(enabled: boolean): void { FILE: packages/internal/tracker/src/adapters/posthog.ts type PostHogAdapterConfig (line 6) | interface PostHogAdapterConfig { class PostHogAdapter (line 11) | class PostHogAdapter implements TrackerAdapter { method constructor (line 15) | constructor(config: PostHogAdapterConfig) { method initialize (line 20) | initialize(): void { method track (line 24) | async track({ eventName, properties }: TrackPayload): Promise { method captureException (line 34) | async captureException({ error, properties }: CaptureExceptionPayload)... method identify (line 47) | async identify(payload: IdentifyPayload): Promise { method setUserProperties (line 62) | async setUserProperties(properties: Record): Promise<... method clear (line 76) | async clear(): Promise { method getName (line 86) | getName(): string { method isEnabled (line 90) | isEnabled(): boolean { method setEnabled (line 94) | setEnabled(enabled: boolean): void { FILE: packages/internal/tracker/src/adapters/proxy.ts class ProxyAdapter (line 3) | class ProxyAdapter implements TrackerAdapter { method constructor (line 5) | constructor( method initialize (line 16) | initialize(): void {} method clear (line 17) | clear(): void { method identify (line 20) | identify(): void {} method setUserProperties (line 21) | setUserProperties(properties: Record): void { method track (line 28) | async track(payload: TrackPayload): Promise { method isEnabled (line 36) | isEnabled(): boolean { method setEnabled (line 40) | setEnabled(enabled: boolean): void { method getName (line 43) | getName(): string { FILE: packages/internal/tracker/src/enums.ts type TrackerMapper (line 1) | enum TrackerMapper { FILE: packages/internal/tracker/src/manager.ts type TrackerManagerConfig (line 5) | interface TrackerManagerConfig { class TrackerManager (line 13) | class TrackerManager { method constructor (line 19) | constructor(config: TrackerManagerConfig = {}) { method addAdapter (line 33) | addAdapter(adapter: TrackerAdapter): void { method removeAdapter (line 51) | removeAdapter(name: string): boolean { method getAdapter (line 58) | getAdapter(name: string): TrackerAdapter | undefined { method getEnabledAdapters (line 65) | getEnabledAdapters(): TrackerAdapter[] { method track (line 72) | async track(code: TrackerMapper, properties?: Record)... method captureException (line 99) | async captureException(error: unknown, properties?: Record { method getUserProperties (line 164) | private getUserProperties(): Record { method setUserProperties (line 170) | async setUserProperties(properties: Record): Promise<... method appendUserProperties (line 201) | async appendUserProperties(properties: Record): Promi... method clear (line 212) | async clear(): Promise { method flush (line 232) | async flush(): Promise { method getStats (line 246) | getStats(): { method addToBatch (line 260) | private addToBatch(adapters: TrackerAdapter[], payload: TrackPayload):... method processBatch (line 274) | private async processBatch(): Promise { method executeTrackingForAdapters (line 291) | private async executeTrackingForAdapters( method executeTrackingForAdapter (line 299) | private async executeTrackingForAdapter( method retryOperation (line 317) | private async retryOperation(operation: () => Promise, adapterNa... FILE: packages/internal/tracker/src/track-manager.ts class TrackManager (line 11) | class TrackManager extends TrackerManager { method constructor (line 14) | constructor() { method setTrackFn (line 22) | setTrackFn(fn: Tracker) { method getTrackFn (line 30) | getTrackFn(): Tracker { method setFirebaseTracker (line 41) | setFirebaseTracker( method setPostHogTracker (line 48) | setPostHogTracker(posthog: PostHog | PostHogReactNative) { method setProxyTracker (line 53) | setProxyTracker(config: { FILE: packages/internal/tracker/src/tracker-points.ts class TrackerPoints (line 6) | class TrackerPoints { method identify (line 8) | identify(props: AuthUser) { method appInit (line 19) | appInit(props: { method userLogin (line 30) | userLogin(props: { type: "email" | "social" }) { method uiRenderInit (line 37) | uiRenderInit(spentTime: number) { method navigateEntry (line 41) | navigateEntry(props: { feedId?: string; entryId?: string; timelineId?:... method integration (line 45) | integration(props: { type: string; event: string }) { method switchToMasonry (line 49) | switchToMasonry() { method wideMode (line 53) | wideMode(props: { mode: "wide" | "normal" }) { method entryContentHeaderImageGalleryClick (line 57) | entryContentHeaderImageGalleryClick(props: { feedId?: string }) { method searchOpen (line 60) | searchOpen() { method quickAddFeed (line 64) | quickAddFeed(props: { type: "url" | "search"; defaultView: number }) { method playerOpenDuration (line 67) | playerOpenDuration(props: { method updateRestart (line 75) | updateRestart(props: { type: "app" | "renderer" | "pwa" | "distributio... method subscribeModalOpened (line 79) | subscribeModalOpened(props: { method feedClaimed (line 88) | feedClaimed(props: { feedId: string }) { method dailyRewardClaimed (line 92) | dailyRewardClaimed() { method register (line 96) | register(props: { type: "email" | "social" }) { method onBoarding (line 100) | onBoarding(props: { step: number; done: boolean } | { stepV2: string; ... method subscribe (line 104) | subscribe(props: { feedId?: string; listId?: string; view?: number }) { method reviewPromptEligible (line 108) | reviewPromptEligible(props: { method reviewPromptShown (line 117) | reviewPromptShown(props: { method reviewPromptDismissed (line 126) | reviewPromptDismissed(props: { method reviewPromptPositive (line 134) | reviewPromptPositive(props: { method reviewPromptNegative (line 142) | reviewPromptNegative(props: { method reviewPromptFeedbackOpened (line 150) | reviewPromptFeedbackOpened(props: { method reviewPromptStoreOpened (line 158) | reviewPromptStoreOpened(props: { method reviewPromptNativeRequested (line 166) | reviewPromptNativeRequested(props: { method aiChatMessageSent (line 175) | aiChatMessageSent() { method track (line 179) | private track(code: TrackerMapper, properties?: Record = Pick, K> & Omit type IdentifyPayload (line 3) | type IdentifyPayload = { type Tracker (line 11) | type Tracker = (code: number, properties?: Record) => P... FILE: packages/internal/types/global.d.ts type Nullable (line 2) | type Nullable = T | null | undefined type IsLiteralString (line 3) | type IsLiteralString = T extends string ? (string extends T ? never :... type OmitStringType (line 5) | type OmitStringType = T extends any[] ? OmitStringType : I... type NonUndefined (line 6) | type NonUndefined = T extends undefined type NilValue (line 12) | type NilValue = null | undefined | false | "" type Prettify (line 13) | type Prettify = { FILE: packages/internal/types/react-global.d.ts type Component (line 4) | type Component

= FC> type ComponentWithRef (line 6) | type ComponentWithRef

= FC = Prettify< type ComponentType (line 13) | type ComponentType

= { type AriaAttributes (line 25) | interface AriaAttributes { FILE: packages/internal/types/vite-env.d.ts type ImportMetaEnv (line 3) | interface ImportMetaEnv { type ImportMeta (line 10) | interface ImportMeta { FILE: packages/internal/utils/src/attribution.ts constant ATTRIBUTION_STORAGE_KEY (line 3) | const ATTRIBUTION_STORAGE_KEY = getStorageNS("attribution") type AttributionData (line 5) | interface AttributionData { function extractUTMParams (line 19) | function extractUTMParams(searchParams: URLSearchParams): Partial): Attributio... function captureAttributionFromURL (line 84) | function captureAttributionFromURL(): AttributionData | null { function captureAttributionFromURLString (line 103) | function captureAttributionFromURLString(urlString: string): Attribution... function getAttributionForAnalytics (line 124) | function getAttributionForAnalytics(): Record { FILE: packages/internal/utils/src/bind-this.ts function autoBindThis (line 26) | function autoBindThis>( function AutoBindThis (line 67) | function AutoBindThis(excludeMethods: string[] = ["constructor"]) { FILE: packages/internal/utils/src/chain.ts class Chain (line 3) | class Chain { method next (line 7) | next(fn: () => any | Promise) { method wait (line 17) | wait(ms: number): this { method abort (line 22) | abort() { FILE: packages/internal/utils/src/color.ts function stringToHue (line 17) | function stringToHue(str: string) { function getDominantColor (line 127) | function getDominantColor(imageObject: HTMLImageElement) { function hexToHslString (line 261) | function hexToHslString(hex: string): string { FILE: packages/internal/utils/src/data-structure/set.ts class EnhanceSet (line 1) | class EnhanceSet extends Set { method only (line 2) | only(value: T) { method clone (line 6) | clone() { method of (line 10) | static of(...values: T[]) { method has (line 14) | override has(...value: T[]): boolean { method or (line 18) | or(...value: T[]): boolean { FILE: packages/internal/utils/src/dom.ts function composeEventHandlers (line 60) | function composeEventHandlers( function getNodeXInScroller (line 74) | function getNodeXInScroller(node: Element, scroller: Element) { function isNodeVisibleInScroller (line 82) | function isNodeVisibleInScroller(node: Element, scroller: Element) { FILE: packages/internal/utils/src/duration.ts function formatDuration (line 6) | function formatDuration(totalSeconds?: number) { FILE: packages/internal/utils/src/event-bus.rn.ts type CustomEvent (line 4) | interface CustomEvent {} type EventBusMap (line 5) | interface EventBusMap extends CustomEvent {} type AnyObject (line 7) | type AnyObject = Record class EventBusStatic (line 8) | class EventBusStatic { method dispatch (line 11) | dispatch(event: T, data?: E[T]) { method subscribe (line 15) | subscribe(event: T, callback: (data: E[T]) => void) { method unsubscribe (line 21) | unsubscribe(_event: string, _callback: (data: any) => void) { FILE: packages/internal/utils/src/event-bus.ts type CustomEvent (line 2) | interface CustomEvent {} type EventBusMap (line 3) | interface EventBusMap extends CustomEvent {} class EventBusEvent (line 5) | class EventBusEvent extends Event { method constructor (line 7) | constructor( type IDispatcher (line 15) | type IDispatcher = ( type AnyObject (line 18) | type AnyObject = Record class EventBusStatic (line 19) | class EventBusStatic { method constructor (line 20) | constructor() { method subscribe (line 29) | subscribe(event: T, callback: (data: E[T]) => void) { method unsubscribe (line 40) | unsubscribe(_event: string, handler: (e: any) => void) { FILE: packages/internal/utils/src/headers.ts type DesktopPlatform (line 57) | enum DesktopPlatform { type SSRPlatform (line 107) | enum SSRPlatform { type MobilePlatform (line 123) | enum MobilePlatform { FILE: packages/internal/utils/src/html.ts type ParseHtmlOptions (line 16) | type ParseHtmlOptions = { function rehypeTrimEndBrElement (line 26) | function rehypeTrimEndBrElement() { function rehypeUrlToAnchor (line 173) | function rehypeUrlToAnchor(tree: Node) { FILE: packages/internal/utils/src/img-proxy.ts constant IMAGE_PROXY_URL (line 1) | const IMAGE_PROXY_URL = "https://img.folo.is" FILE: packages/internal/utils/src/jotai.ts type Result (line 31) | type Result = [...typeof result, ReturnType>] method get (line 34) | get() { FILE: packages/internal/utils/src/json-codec.ts class JsonObfuscatedCodec (line 1) | class JsonObfuscatedCodec { method toBytes (line 10) | private static toBytes(str: string): Uint8Array { method fromBytes (line 16) | private static fromBytes(bytes: Uint8Array): string { method xorBytes (line 22) | private static xorBytes(input: Uint8Array, key: string): Uint8Array { method bytesToCharset (line 35) | private static bytesToCharset(bytes: Uint8Array): string { method charsetToBytes (line 51) | private static charsetToBytes(str: string): Uint8Array { method encode (line 70) | static encode(obj: any, key: string = this.key): string { method decode (line 87) | static decode(encodedStr: string, key: string = this.key): any { FILE: packages/internal/utils/src/link-parser.ts constant GITHUB_HOST (line 3) | const GITHUB_HOST = "github.com" type LinkParserOptions (line 5) | type LinkParserOptions = { FILE: packages/internal/utils/src/lru-cache.ts class LinkNode (line 1) | class LinkNode { method constructor (line 7) | constructor(key: K, value: V) { class LRUCache (line 15) | class LRUCache { method constructor (line 21) | constructor(capacity: number) { method get (line 39) | get(key: K): V | undefined { method put (line 54) | put(key: K, value: V): void { method clear (line 74) | clear(): void { method size (line 84) | size(): number { method moveToFront (line 92) | private moveToFront(node: LinkNode): void { method addToFront (line 101) | private addToFront(node: LinkNode): void { method removeNode (line 112) | private removeNode(node: LinkNode): void { FILE: packages/internal/utils/src/path-parser.ts constant CATCH_ALL_GROUP_KEY (line 5) | const CATCH_ALL_GROUP_KEY = "__catchAll__" function transformUriPath (line 6) | function transformUriPath(uri: string): string { class MissingOptionalParamError (line 29) | class MissingOptionalParamError extends Error { method constructor (line 30) | constructor(public param: string) { class MissingRequiredParamError (line 37) | class MissingRequiredParamError extends Error { method constructor (line 38) | constructor(param: string) { type PathParams (line 99) | type PathParams = { type ParseRegexpPathParamsOptions (line 105) | type ParseRegexpPathParamsOptions = { FILE: packages/internal/utils/src/react.ts type FallbackOptions (line 4) | type FallbackOptions = ReactElement | ComponentType type WithSuspenseOptions (line 6) | interface WithSuspenseOptions { function withSuspense (line 16) | function withSuspense

( FILE: packages/internal/utils/src/resize.ts type ViewportSize (line 1) | interface ViewportSize { type RectLike (line 6) | interface RectLike { function computeAdjustedTopLeftPosition (line 17) | function computeAdjustedTopLeftPosition( FILE: packages/internal/utils/src/scroller.ts method onPlay (line 29) | onPlay() { method onUpdate (line 34) | onUpdate(latest) { FILE: packages/internal/utils/src/url-builder.ts class UrlBuilder (line 1) | class UrlBuilder { method constructor (line 2) | constructor(private readonly webUrl: string) {} method join (line 3) | protected join(path: string, query?: Record) { method shareFeed (line 13) | shareFeed(id: string, view?: number) { method shareList (line 16) | shareList(id: string, view?: number) { method profile (line 20) | profile(id: string) { FILE: packages/internal/utils/src/utils.ts type Nullable (line 10) | type Nullable = T | null | undefined function cn (line 30) | function cn(...inputs: ClassValue[]) { type OS (line 34) | type OS = "macOS" | "iOS" | "Windows" | "Android" | "Linux" | "" function detectBrowser (line 93) | function detectBrowser() { constant EPOCH (line 121) | const EPOCH = 1712546615000n // follow repo created constant MAX_TIMESTAMP_BITS (line 122) | const MAX_TIMESTAMP_BITS = 41n // Maximum number of bits typically used ... function isBizId (line 127) | function isBizId(id: string | undefined): id is string { function formatXml (line 148) | function formatXml(xml: string, indent = 4) { function shallowCopy (line 279) | function shallowCopy(input: T): T { function isKeyForMultiSelectPressed (line 288) | function isKeyForMultiSelectPressed(e: MouseEvent) { function transformShortcut (line 379) | function transformShortcut(shortcut: string, platform: OS = getOS()): st... constant F_KEY_REGEX (line 386) | const F_KEY_REGEX = /^F(?:[1-9]|1[0-2])$/ function getKeySortValue (line 388) | function getKeySortValue(key: string): number { function sortShortcutKeys (line 399) | function sortShortcutKeys(keys: string[]): string[] { function timeStringToSeconds (line 435) | function timeStringToSeconds(time: string): number | null { function duplicateIfLengthLessThan (line 483) | function duplicateIfLengthLessThan(text: string, length: number) { function combineCleanupFunctions (line 489) | function combineCleanupFunctions(...fns: Array void) | v... function doesTextContainHTML (line 499) | function doesTextContainHTML(text?: string | null): boolean { function formatNumber (line 509) | function formatNumber(num: number): string { type MobilePlatform (line 531) | type MobilePlatform = "iOS" | "Android" | null function getDateISOString (line 543) | function getDateISOString(dateOrDateString: Date | string | null): strin... FILE: packages/readability/src/index.ts function sanitizeHTMLString (line 15) | function sanitizeHTMLString(dirtyDocumentString: string) { function decodeResponseBodyChars (line 28) | async function decodeResponseBodyChars(res: Response) { function readability (line 45) | async function readability(baseUrl: string) { FILE: plugins/eslint/eslint-check-i18n-json.js method create (line 21) | create(context) { method create (line 80) | create(context) { FILE: plugins/eslint/eslint-no-debug.js method create (line 16) | create(context) { FILE: plugins/eslint/eslint-package-json.js method create (line 25) | create(context) { method create (line 100) | create(context) { FILE: plugins/eslint/eslint-recursive-sort.js method create (line 13) | create(context) { FILE: scripts/mitproxy.py function request (line 3) | def request(flow: http.HTTPFlow) -> None: FILE: scripts/svg-to-rn.ts constant DIST_DIR (line 6) | const DIST_DIR = "apps/mobile/src/icons" constant DEFAULT_COLOR (line 8) | const DEFAULT_COLOR = "#10161F" type SvgNode (line 9) | interface SvgNode { FILE: scripts/update-icon.ts constant PATH_TO_NEW_ICONS_FOLDER (line 5) | const PATH_TO_NEW_ICONS_FOLDER = "../SVG 1.36" constant PATH_TO_PROJECT_ICONS_FOLDER (line 6) | const PATH_TO_PROJECT_ICONS_FOLDER = "./icons/mgc" function readFiles (line 13) | function readFiles(dirPath: string) {