import { initLocale } from "./utils/locale"; import { createZToolkit } from "./utils/ztoolkit"; import { registerLecturePane } from "./modules/lecture/ui/registerLecturePane"; import { registerSelectionExplainPopup } from "./modules/lecture/ui/registerSelectionExplainPopup"; import { registerChatPane, registerPrefs, ensureChatPapersStyles } from "./modules/ui/readerPane"; import { registerPrefsScripts } from "./modules/ui/prefs"; import { registerItemMenus } from "./modules/ui/itemMenu"; import { registerReaderSelectionHook } from "./modules/pdf/selection"; async function onStartup() { await Promise.all([ Zotero.initializationPromise, Zotero.unlockPromise, Zotero.uiReadyPromise, ]); initLocale(); registerPrefs(); registerChatPane(); registerLecturePane(); registerReaderSelectionHook(); registerSelectionExplainPopup(); await Promise.all( Zotero.getMainWindows().map((win) => onMainWindowLoad(win)), ); addon.data.initialized = true; } async function onMainWindowLoad(win: _ZoteroTypes.MainWindow): Promise { addon.data.ztoolkit = createZToolkit(); ensureChatPapersStyles(win.document); win.MozXULElement.insertFTLIfNeeded( `${addon.data.config.addonRef}-mainWindow.ftl`, ); registerItemMenus(); } async function onMainWindowUnload(_win: Window): Promise { ztoolkit.unregisterAll(); } function onShutdown(): void { ztoolkit.unregisterAll(); addon.data.alive = false; // @ts-expect-error - Plugin instance is not typed delete Zotero[addon.data.config.addonInstance]; } async function onPrefsEvent(type: string, data: { [key: string]: any }) { switch (type) { case "load": registerPrefsScripts(data.window); break; default: return; } } export default { onStartup, onShutdown, onMainWindowLoad, onMainWindowUnload, onPrefsEvent, };