gitextract_g57kkec9/ ├── .claude/ │ ├── rules/ │ │ ├── content-scripts.md │ │ ├── high-complexity.md │ │ ├── i18n.md │ │ └── typescript.md │ ├── settings.json │ └── skills/ │ └── safari-release/ │ └── SKILL.md ├── .editorconfig ├── .entire/ │ ├── .gitignore │ └── settings.json ├── .gitattributes ├── .github/ │ ├── CONTRIBUTING.md │ ├── CONTRIBUTING_ES.md │ ├── CONTRIBUTING_FR.md │ ├── CONTRIBUTING_JA.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── README_AR.md │ ├── README_ES.md │ ├── README_FR.md │ ├── README_JA.md │ ├── README_KO.md │ ├── README_PT.md │ ├── README_RU.md │ ├── README_ZH.md │ ├── README_ZH_TW.md │ ├── RELEASE_TEMPLATE.md │ ├── docs/ │ │ ├── CHANGELOG.md │ │ ├── IMPORT_EXPORT_GUIDE.md │ │ ├── IMPORT_EXPORT_GUIDE_ZH.md │ │ └── safari/ │ │ ├── INSTALLATION.md │ │ └── INSTALLATION_ZH.md │ ├── pull_request_template.md │ └── workflows/ │ ├── ci.yml │ ├── deploy-docs.yml │ ├── issue-claim.yml │ ├── issue-validator.yml │ ├── release.yml │ ├── sponsors.yml │ └── stale.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CLAUDE.md ├── CNAME ├── LICENSE ├── README.md ├── commitlint.config.cjs ├── custom-vite-plugins.ts ├── docs/ │ ├── .vitepress/ │ │ ├── config.mts │ │ └── theme/ │ │ ├── components/ │ │ │ ├── HomeAskAI.vue │ │ │ ├── HomeReviews.vue │ │ │ ├── HomeTeaser.vue │ │ │ ├── README.md │ │ │ └── SafariDownloadLink.vue │ │ ├── index.ts │ │ └── style.css │ ├── ar/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── en/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── es/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── fr/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── guide/ │ │ ├── batch-delete.md │ │ ├── cloud-sync.md │ │ ├── community.md │ │ ├── context-sync.md │ │ ├── deep-research.md │ │ ├── default-model.md │ │ ├── export.md │ │ ├── folders.md │ │ ├── fork.md │ │ ├── formula-copy.md │ │ ├── getting-started.md │ │ ├── input-collapse.md │ │ ├── installation.md │ │ ├── markdown-fix.md │ │ ├── mermaid.md │ │ ├── nanobanana.md │ │ ├── prevent-auto-scroll.md │ │ ├── prompts.md │ │ ├── quote-reply.md │ │ ├── recents-hider.md │ │ ├── settings.md │ │ ├── sidebar-auto-hide.md │ │ ├── sidebar.md │ │ ├── sponsor.md │ │ ├── tab-title.md │ │ └── timeline.md │ ├── index.md │ ├── ja/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── ko/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── privacy.md │ ├── pt/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ ├── public/ │ │ └── google79cf501ea29c5eb1.html │ ├── ru/ │ │ ├── guide/ │ │ │ ├── batch-delete.md │ │ │ ├── cloud-sync.md │ │ │ ├── community.md │ │ │ ├── context-sync.md │ │ │ ├── deep-research.md │ │ │ ├── default-model.md │ │ │ ├── export.md │ │ │ ├── folders.md │ │ │ ├── fork.md │ │ │ ├── formula-copy.md │ │ │ ├── getting-started.md │ │ │ ├── input-collapse.md │ │ │ ├── installation.md │ │ │ ├── markdown-fix.md │ │ │ ├── mermaid.md │ │ │ ├── nanobanana.md │ │ │ ├── prevent-auto-scroll.md │ │ │ ├── prompts.md │ │ │ ├── quote-reply.md │ │ │ ├── recents-hider.md │ │ │ ├── settings.md │ │ │ ├── sidebar-auto-hide.md │ │ │ ├── sidebar.md │ │ │ ├── sponsor.md │ │ │ ├── tab-title.md │ │ │ └── timeline.md │ │ ├── index.md │ │ └── privacy.md │ └── zh_TW/ │ ├── guide/ │ │ ├── batch-delete.md │ │ ├── cloud-sync.md │ │ ├── community.md │ │ ├── context-sync.md │ │ ├── deep-research.md │ │ ├── default-model.md │ │ ├── export.md │ │ ├── folders.md │ │ ├── fork.md │ │ ├── formula-copy.md │ │ ├── getting-started.md │ │ ├── input-collapse.md │ │ ├── installation.md │ │ ├── markdown-fix.md │ │ ├── mermaid.md │ │ ├── nanobanana.md │ │ ├── prevent-auto-scroll.md │ │ ├── prompts.md │ │ ├── quote-reply.md │ │ ├── recents-hider.md │ │ ├── settings.md │ │ ├── sidebar-auto-hide.md │ │ ├── sidebar.md │ │ ├── sponsor.md │ │ ├── tab-title.md │ │ └── timeline.md │ ├── index.md │ └── privacy.md ├── eslint.config.js ├── manifest.dev.json ├── manifest.json ├── nodemon.chrome.json ├── nodemon.firefox.json ├── nodemon.safari.json ├── package.json ├── public/ │ ├── contentStyle.css │ ├── fetchInterceptor.js │ ├── katex-config.js │ └── prevent-auto-scroll.js ├── safari/ │ ├── App/ │ │ └── SafariWebExtensionHandler.swift │ ├── Models/ │ │ ├── SafariMessage.swift │ │ └── voyager-v1.3.6.dmg │ ├── README.md │ ├── README_ZH.md │ └── Resources/ │ └── example-native-messaging.js ├── scripts/ │ ├── build-edge.js │ ├── build-safari.sh │ ├── bump-version.js │ ├── generate-sponsors.cjs │ └── launch-chrome.cjs ├── sponsorkit/ │ └── sponsors.json ├── src/ │ ├── assets/ │ │ └── styles/ │ │ └── tailwind.css │ ├── components/ │ │ ├── DarkModeToggle.tsx │ │ ├── LanguageSwitcher.tsx │ │ └── ui/ │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── label.tsx │ │ ├── select.tsx │ │ ├── slider.tsx │ │ └── switch.tsx │ ├── contexts/ │ │ └── LanguageContext.tsx │ ├── core/ │ │ ├── errors/ │ │ │ └── AppError.ts │ │ ├── index.ts │ │ ├── services/ │ │ │ ├── AccountIsolationService.ts │ │ │ ├── DOMService.ts │ │ │ ├── DataBackupService.ts │ │ │ ├── GoogleDriveSyncService.ts │ │ │ ├── KeyboardShortcutService.ts │ │ │ ├── LoggerService.ts │ │ │ ├── StorageMonitor.ts │ │ │ ├── StorageService.ts │ │ │ └── __tests__/ │ │ │ ├── AccountIsolationService.test.ts │ │ │ ├── GoogleDriveSyncService.test.ts │ │ │ └── StorageService.test.ts │ │ ├── types/ │ │ │ ├── common.ts │ │ │ ├── folder.ts │ │ │ ├── keyboardShortcut.ts │ │ │ ├── sync.ts │ │ │ └── timeline.ts │ │ └── utils/ │ │ ├── __tests__/ │ │ │ ├── browser.test.ts │ │ │ ├── concurrency.test.ts │ │ │ ├── extensionContext.test.ts │ │ │ ├── gemini.test.ts │ │ │ ├── rtl.test.ts │ │ │ ├── updateReminder.test.ts │ │ │ └── version.test.ts │ │ ├── array.ts │ │ ├── async.ts │ │ ├── browser.ts │ │ ├── concurrency.ts │ │ ├── extensionContext.ts │ │ ├── gemini.ts │ │ ├── hash.ts │ │ ├── rtl.ts │ │ ├── safariStorage.ts │ │ ├── selectors.ts │ │ ├── storageMigration.ts │ │ ├── text.ts │ │ ├── updateReminder.ts │ │ └── version.ts │ ├── features/ │ │ ├── backup/ │ │ │ ├── index.ts │ │ │ ├── services/ │ │ │ │ ├── BackupService.ts │ │ │ │ └── PromptImportExportService.ts │ │ │ └── types/ │ │ │ └── backup.ts │ │ ├── contextSync/ │ │ │ ├── adapters/ │ │ │ │ └── index.ts │ │ │ ├── services/ │ │ │ │ └── SyncService.ts │ │ │ └── types.ts │ │ ├── export/ │ │ │ ├── services/ │ │ │ │ ├── ConversationExportService.ts │ │ │ │ ├── DOMContentExtractor.ts │ │ │ │ ├── DeepResearchPDFPrintService.ts │ │ │ │ ├── ImageExportService.ts │ │ │ │ ├── ImageRenderService.ts │ │ │ │ ├── MarkdownFormatter.ts │ │ │ │ ├── PDFPrintService.ts │ │ │ │ └── __tests__/ │ │ │ │ ├── ConversationExportService.test.ts │ │ │ │ ├── DOMContentExtractor.test.ts │ │ │ │ ├── DeepResearchPDFPrintService.test.ts │ │ │ │ ├── ImageExportService.test.ts │ │ │ │ ├── ImageRenderService.test.ts │ │ │ │ ├── MarkdownFormatter.test.ts │ │ │ │ ├── PDFPrintService.safari.test.ts │ │ │ │ └── PDFPrintService.test.ts │ │ │ ├── types/ │ │ │ │ ├── errors.ts │ │ │ │ └── export.ts │ │ │ └── ui/ │ │ │ ├── ExportDialog.ts │ │ │ ├── ExportErrorMessage.ts │ │ │ ├── ExportToast.ts │ │ │ └── __tests__/ │ │ │ ├── ExportDialog.safariHint.test.ts │ │ │ ├── ExportDialog.test.ts │ │ │ ├── ExportErrorMessage.test.ts │ │ │ └── ExportToast.test.ts │ │ ├── folder/ │ │ │ ├── services/ │ │ │ │ └── FolderImportExportService.ts │ │ │ └── types/ │ │ │ └── import-export.ts │ │ └── formulaCopy/ │ │ ├── FormulaCopyService.test.ts │ │ ├── FormulaCopyService.ts │ │ └── index.ts │ ├── global.d.ts │ ├── hooks/ │ │ ├── useDarkMode.ts │ │ └── useWidthAdjuster.ts │ ├── lib/ │ │ └── utils.ts │ ├── locales/ │ │ ├── ar/ │ │ │ └── messages.json │ │ ├── en/ │ │ │ └── messages.json │ │ ├── es/ │ │ │ └── messages.json │ │ ├── fr/ │ │ │ └── messages.json │ │ ├── ja/ │ │ │ └── messages.json │ │ ├── ko/ │ │ │ └── messages.json │ │ ├── pt/ │ │ │ └── messages.json │ │ ├── ru/ │ │ │ └── messages.json │ │ ├── zh/ │ │ │ └── messages.json │ │ └── zh_TW/ │ │ └── messages.json │ ├── pages/ │ │ ├── background/ │ │ │ └── index.ts │ │ ├── content/ │ │ │ ├── changelog/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── changelog.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── notes/ │ │ │ │ ├── 1.2.9.md │ │ │ │ ├── 1.3.0.md │ │ │ │ ├── 1.3.1.md │ │ │ │ ├── 1.3.2.md │ │ │ │ ├── 1.3.3.md │ │ │ │ ├── 1.3.4.md │ │ │ │ ├── 1.3.5.md │ │ │ │ └── 1.3.6.md │ │ │ ├── chatWidth/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── chatWidth.test.ts │ │ │ │ └── index.ts │ │ │ ├── contextSync/ │ │ │ │ ├── capture.ts │ │ │ │ └── index.ts │ │ │ ├── deepResearch/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── menuButton.test.ts │ │ │ │ │ └── reportExtractor.test.ts │ │ │ │ ├── download.ts │ │ │ │ ├── extractor.ts │ │ │ │ ├── formatter.ts │ │ │ │ ├── index.ts │ │ │ │ ├── menuButton.ts │ │ │ │ ├── reportExtractor.ts │ │ │ │ └── types.ts │ │ │ ├── defaultModel/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── modelLocker.test.ts │ │ │ │ ├── modelLocker.ts │ │ │ │ └── styles.css │ │ │ ├── editInputWidth/ │ │ │ │ └── index.ts │ │ │ ├── export/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── conversationDom.test.ts │ │ │ │ │ ├── conversationMenuI18n.test.ts │ │ │ │ │ ├── conversationMenuInjection.test.ts │ │ │ │ │ ├── responseActionImageButton.test.ts │ │ │ │ │ ├── responseImageCopy.test.ts │ │ │ │ │ ├── selectionModeInteraction.test.ts │ │ │ │ │ ├── selectionUtils.test.ts │ │ │ │ │ ├── sidebarConversationTarget.test.ts │ │ │ │ │ ├── sidebarExportResume.test.ts │ │ │ │ │ └── topNodePreload.test.ts │ │ │ │ ├── conversationDom.ts │ │ │ │ ├── conversationMenuInjection.ts │ │ │ │ ├── index.ts │ │ │ │ ├── responseActionImageButton.ts │ │ │ │ ├── responseImageCopy.ts │ │ │ │ ├── selectionUtils.ts │ │ │ │ ├── sidebarConversationTarget.ts │ │ │ │ ├── sidebarExportResume.ts │ │ │ │ └── topNodePreload.ts │ │ │ ├── folder/ │ │ │ │ ├── README.md │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── aistudio.test.ts │ │ │ │ │ ├── conversationSort.test.ts │ │ │ │ │ ├── folderNameInteraction.test.ts │ │ │ │ │ ├── moveToFolderMenuItem.test.ts │ │ │ │ │ └── treeIndent.test.ts │ │ │ │ ├── aistudio.ts │ │ │ │ ├── conversationSort.ts │ │ │ │ ├── folderColors.ts │ │ │ │ ├── gemConfig.ts │ │ │ │ ├── index.ts │ │ │ │ ├── manager.ts │ │ │ │ ├── moveToFolderMenuItem.ts │ │ │ │ ├── storage/ │ │ │ │ │ └── FolderStorageAdapter.ts │ │ │ │ └── types.ts │ │ │ ├── folderSpacing/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── folderSpacing.test.ts │ │ │ │ └── index.ts │ │ │ ├── fork/ │ │ │ │ ├── ForkNodesService.ts │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── ForkNodesService.test.ts │ │ │ │ │ ├── branching.test.ts │ │ │ │ │ ├── chatPairs.test.ts │ │ │ │ │ ├── featureFlag.test.ts │ │ │ │ │ ├── forkContext.test.ts │ │ │ │ │ ├── index.test.ts │ │ │ │ │ ├── markdown.test.ts │ │ │ │ │ └── turnId.test.ts │ │ │ │ ├── branching.ts │ │ │ │ ├── chatPairs.ts │ │ │ │ ├── featureFlag.ts │ │ │ │ ├── forkContext.ts │ │ │ │ ├── forkTypes.ts │ │ │ │ ├── index.ts │ │ │ │ ├── markdown.ts │ │ │ │ └── turnId.ts │ │ │ ├── gemsHider/ │ │ │ │ └── index.ts │ │ │ ├── index.tsx │ │ │ ├── inputCollapse/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── inputCollapse.test.ts │ │ │ │ └── index.ts │ │ │ ├── katexConfig/ │ │ │ │ └── index.ts │ │ │ ├── markdownPatcher/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── fixBrokenBoldTags.test.ts │ │ │ │ └── index.ts │ │ │ ├── mermaid/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── mermaid.test.ts │ │ │ │ └── index.ts │ │ │ ├── preventAutoScroll/ │ │ │ │ └── index.ts │ │ │ ├── prompt/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── scrollHint.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── scrollHint.ts │ │ │ ├── quoteReply/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── quoteReply.test.ts │ │ │ │ └── index.ts │ │ │ ├── recentsHider/ │ │ │ │ └── index.ts │ │ │ ├── sendBehavior/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── sendBehavior.test.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── shared/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── nativeMenuItemTemplate.test.ts │ │ │ │ └── nativeMenuItemTemplate.ts │ │ │ ├── sidebarAutoHide/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── SidebarAutoHide.test.ts │ │ │ │ └── index.ts │ │ │ ├── sidebarWidth/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── sidebarWidthCentering.test.ts │ │ │ │ └── index.ts │ │ │ ├── timeline/ │ │ │ │ ├── EventBus.ts │ │ │ │ ├── StarredMessagesService.ts │ │ │ │ ├── TimelinePreviewPanel.ts │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── TimelineBootstrap.test.ts │ │ │ │ │ ├── TimelineManagerActiveIndex.test.ts │ │ │ │ │ ├── TimelineManagerFlowClickActiveReset.test.ts │ │ │ │ │ ├── TimelineManagerNavigationRefresh.test.ts │ │ │ │ │ ├── TimelineManagerPreviewPanelReposition.test.ts │ │ │ │ │ ├── TimelineManagerSelectorPriority.test.ts │ │ │ │ │ ├── TimelineManagerSummaryExtraction.test.ts │ │ │ │ │ ├── TimelineManagerTooltipDirection.test.ts │ │ │ │ │ └── TimelinePreviewPanel.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── manager.ts │ │ │ │ ├── starredTypes.ts │ │ │ │ └── types.ts │ │ │ ├── timestamp/ │ │ │ │ ├── TimestampService.ts │ │ │ │ └── __tests__/ │ │ │ │ └── TimestampService.test.ts │ │ │ ├── titleUpdater/ │ │ │ │ └── index.ts │ │ │ ├── visualEffects/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── rain.test.ts │ │ │ │ │ ├── sakura.test.ts │ │ │ │ │ └── snow.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── rain.ts │ │ │ │ ├── sakura.ts │ │ │ │ └── snow.ts │ │ │ └── watermarkRemover/ │ │ │ ├── __tests__/ │ │ │ │ ├── downloadButton.test.ts │ │ │ │ ├── downloadToasts.test.ts │ │ │ │ ├── fetchInterceptor.test.ts │ │ │ │ └── statusToast.test.ts │ │ │ ├── alphaMap.ts │ │ │ ├── blendModes.ts │ │ │ ├── credits.ts │ │ │ ├── downloadButton.ts │ │ │ ├── index.ts │ │ │ ├── statusToast.ts │ │ │ └── watermarkEngine.ts │ │ ├── devtools/ │ │ │ ├── index.html │ │ │ └── index.ts │ │ ├── options/ │ │ │ ├── Options.css │ │ │ ├── Options.tsx │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ └── index.tsx │ │ ├── panel/ │ │ │ ├── Panel.css │ │ │ ├── Panel.tsx │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ └── index.tsx │ │ └── popup/ │ │ ├── Popup.tsx │ │ ├── __tests__/ │ │ │ └── latestVersion.test.ts │ │ ├── components/ │ │ │ ├── CloudSyncSettings.tsx │ │ │ ├── ContextSyncSettings.tsx │ │ │ ├── KeyboardShortcutSettings.tsx │ │ │ ├── StarredHistory.tsx │ │ │ ├── WebsiteLogos.tsx │ │ │ ├── WidthSlider.tsx │ │ │ └── __tests__/ │ │ │ └── CloudSyncSettings.test.tsx │ │ ├── index.css │ │ ├── index.html │ │ ├── index.tsx │ │ └── utils/ │ │ └── latestVersion.ts │ ├── tests/ │ │ └── setup.ts │ ├── utils/ │ │ ├── __tests__/ │ │ │ ├── i18n.test.ts │ │ │ ├── language.test.ts │ │ │ ├── mergeForkNodes.test.ts │ │ │ ├── mergeStarredMessages.test.ts │ │ │ └── translations.test.ts │ │ ├── i18n.ts │ │ ├── language.ts │ │ ├── localeMessages.ts │ │ ├── merge.test.ts │ │ ├── merge.ts │ │ └── translations.ts │ └── vite-env.d.ts ├── tsconfig.json ├── vite.config.base.ts ├── vite.config.chrome.ts ├── vite.config.firefox.ts ├── vite.config.safari.ts └── vitest.config.ts