diff --git a/.gitignore b/.gitignore index f3c3095..60612be 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ node_modules pnpm-lock.yaml yarn.lock +# TSC +tsconfig.tsbuildinfo + # Scaffold .env .scaffold diff --git a/package-lock.json b/package-lock.json index 4b51b69..31f75e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "3.0.4", "license": "AGPL-3.0-or-later", "dependencies": { - "zotero-plugin-toolkit": "^4.1.2" + "zotero-plugin-toolkit": "^5.0.0-0" }, "devDependencies": { "@eslint/js": "^9.23.0", @@ -19,7 +19,7 @@ "typescript": "^5.8.2", "typescript-eslint": "^8.28.0", "zotero-plugin-scaffold": "^0.4.1", - "zotero-types": "^3.1.9" + "zotero-types": "^4.0.0-beta.3" } }, "node_modules/@esbuild/aix-ppc64": { @@ -652,9 +652,9 @@ } }, "node_modules/@napi-rs/canvas": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.65.tgz", - "integrity": "sha512-YcFhXQcp+b2d38zFOJNbpyPHnIL7KAEkhJQ+UeeKI5IpE9B8Cpf/M6RiHPQXSsSqnYbrfFylnW49dyh2oeSblQ==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.68.tgz", + "integrity": "sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==", "license": "MIT", "optional": true, "peer": true, @@ -662,22 +662,22 @@ "node": ">= 10" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.65", - "@napi-rs/canvas-darwin-arm64": "0.1.65", - "@napi-rs/canvas-darwin-x64": "0.1.65", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.65", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.65", - "@napi-rs/canvas-linux-arm64-musl": "0.1.65", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.65", - "@napi-rs/canvas-linux-x64-gnu": "0.1.65", - "@napi-rs/canvas-linux-x64-musl": "0.1.65", - "@napi-rs/canvas-win32-x64-msvc": "0.1.65" + "@napi-rs/canvas-android-arm64": "0.1.68", + "@napi-rs/canvas-darwin-arm64": "0.1.68", + "@napi-rs/canvas-darwin-x64": "0.1.68", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.68", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.68", + "@napi-rs/canvas-linux-arm64-musl": "0.1.68", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.68", + "@napi-rs/canvas-linux-x64-gnu": "0.1.68", + "@napi-rs/canvas-linux-x64-musl": "0.1.68", + "@napi-rs/canvas-win32-x64-msvc": "0.1.68" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.65.tgz", - "integrity": "sha512-ZYwqFYEKcT5Zr8lbiaJNJj/poLaeK2TncolY914r+gD2TJNeP7ZqvE7A2SX/1C9MB4E3DQEwm3YhL3WEf0x3MQ==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.68.tgz", + "integrity": "sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==", "cpu": [ "arm64" ], @@ -692,9 +692,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.65.tgz", - "integrity": "sha512-Pg1pfiJEyDIsX+V0QaJPRWvXbw5zmWAk3bivFCvt/5pwZb37/sT6E/RqPHT9NnqpDyKW6SriwY9ypjljysUA1Q==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.68.tgz", + "integrity": "sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==", "cpu": [ "arm64" ], @@ -709,9 +709,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.65.tgz", - "integrity": "sha512-3Tr+/HjdJN7Z/VKIcsxV2DvDIibZCExgfYTgljCkUSFuoI7iNkOE6Dc1Q6j212EB9PeO8KmfrViBqHYT6IwWkA==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.68.tgz", + "integrity": "sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==", "cpu": [ "x64" ], @@ -726,9 +726,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.65.tgz", - "integrity": "sha512-3KP+dYObH7CVkZMZWwk1WX9jRjL+EKdQtD43H8MOI+illf+dwqLlecdQ4d9bQRIxELKJ8dyPWY4fOp/Ngufrdg==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.68.tgz", + "integrity": "sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==", "cpu": [ "arm" ], @@ -743,9 +743,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.65.tgz", - "integrity": "sha512-Ka3StKz7Dq7kjTF3nNJCq43UN/VlANS7qGE3dWkn1d+tQNsCRy/wRmyt1TUFzIjRqcTFMQNRbgYq84+53UBA0A==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.68.tgz", + "integrity": "sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==", "cpu": [ "arm64" ], @@ -760,9 +760,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.65.tgz", - "integrity": "sha512-O4xMASm2JrmqYoiDyxVWi+z5C14H+oVEag2rZ5iIA67dhWqYZB+iO7wCFpBYRj31JPBR29FOsu6X9zL+DwBFdw==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.68.tgz", + "integrity": "sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==", "cpu": [ "arm64" ], @@ -777,9 +777,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.65.tgz", - "integrity": "sha512-dblWDaA59ZU8bPbkfM+riSke7sFbNZ70LEevUdI5rgiFEUzYUQlU34gSBzemTACj5rCWt1BYeu0GfkLSjNMBSw==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.68.tgz", + "integrity": "sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==", "cpu": [ "riscv64" ], @@ -794,9 +794,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.65.tgz", - "integrity": "sha512-wsp+atutw13OJXGU3DDkdngtBDoEg01IuK5xMe0L6VFPV8maGkh17CXze078OD5QJOc6kFyw3DDscMLOPF8+oA==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.68.tgz", + "integrity": "sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==", "cpu": [ "x64" ], @@ -811,9 +811,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.65.tgz", - "integrity": "sha512-odX+nN+IozWzhdj31INcHz3Iy9+EckNw+VqsZcaUxZOTu7/3FmktRNI6aC1qe5minZNv1m05YOS1FVf7fvmjlA==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.68.tgz", + "integrity": "sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==", "cpu": [ "x64" ], @@ -828,9 +828,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.65.tgz", - "integrity": "sha512-RZQX3luWnlNWgdMnLMQ1hyfQraeAn9lnxWWVCHuUM4tAWEV8UDdeb7cMwmJW7eyt8kAosmjeHt3cylQMHOxGFg==", + "version": "0.1.68", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.68.tgz", + "integrity": "sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==", "cpu": [ "x64" ], @@ -1524,9 +1524,9 @@ } }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "19.0.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", + "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", "license": "MIT", "peer": true, "dependencies": { @@ -2058,9 +2058,9 @@ } }, "node_modules/core-js": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", - "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", "hasInstallScript": true, "license": "MIT", "peer": true, @@ -3223,16 +3223,16 @@ "license": "MIT" }, "node_modules/pdfjs-dist": { - "version": "4.10.38", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz", - "integrity": "sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==", + "version": "5.0.375", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.0.375.tgz", + "integrity": "sha512-QDRlEVldf/cX88CElGAyRhjqNOO69kmB3HZlalDAfqJ/IvmqJNkipomhBZy4cWATfLVlkQTXE3H4yFvMF2uPsg==", "license": "Apache-2.0", "peer": true, "engines": { "node": ">=20" }, "optionalDependencies": { - "@napi-rs/canvas": "^0.1.65" + "@napi-rs/canvas": "^0.1.67" } }, "node_modules/perfect-debounce": { @@ -3828,21 +3828,21 @@ } }, "node_modules/zotero-plugin-toolkit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/zotero-plugin-toolkit/-/zotero-plugin-toolkit-4.1.2.tgz", - "integrity": "sha512-zM2NR6BLQKIAPa6Q0u6xdyIqjfwe9fz5lbJvg+fXN7B3m20ymC7wFyn1CJVzMCNCJitzr3K+obkyCvMYhiVDFQ==", + "version": "5.0.0-0", + "resolved": "https://registry.npmjs.org/zotero-plugin-toolkit/-/zotero-plugin-toolkit-5.0.0-0.tgz", + "integrity": "sha512-CS6Myhxf3h0sHe8bfjxijeCTNn5xRIzcFWd36sm+xgehFmaKPp66BsbbqFvQ4Lggif9aifW5+UM8z1mtnqKGjw==", "license": "MIT", "engines": { "node": ">=18" }, "peerDependencies": { - "zotero-types": "^3.1.0" + "zotero-types": "^4.0.0-beta.2" } }, "node_modules/zotero-types": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/zotero-types/-/zotero-types-3.1.9.tgz", - "integrity": "sha512-Sdzv72yOYqOndf1TfFxw8h63Q4xFOycHm3PGBawvOzisZt23REg+kOgMVpHLST0d8nqhcObstC2dpxfGW81k4g==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/zotero-types/-/zotero-types-4.0.0-beta.3.tgz", + "integrity": "sha512-ux0ZPRvflf1NdP+ilWzmQVoh7+9RujY9hZ4z4xDzRaP4j48ewcy16Z9QFhbgvt1TgWQpwMjKZYBbSZMDFjERow==", "license": "MIT", "peerDependencies": { "@types/bluebird": "*", diff --git a/package.json b/package.json index 18a097e..5f61c3c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "update-deps": "npm update --save" }, "dependencies": { - "zotero-plugin-toolkit": "^4.1.2" + "zotero-plugin-toolkit": "^5.0.0-0" }, "devDependencies": { "@eslint/js": "^9.23.0", @@ -40,7 +40,7 @@ "typescript": "^5.8.2", "typescript-eslint": "^8.28.0", "zotero-plugin-scaffold": "^0.4.1", - "zotero-types": "^3.1.9" + "zotero-types": "^4.0.0-beta.3" }, "prettier": { "printWidth": 80, diff --git a/src/hooks.ts b/src/hooks.ts index e6d44ae..4616da1 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -39,7 +39,7 @@ async function onStartup() { ); } -async function onMainWindowLoad(win: Window): Promise { +async function onMainWindowLoad(win: _ZoteroTypes.MainWindow): Promise { // Create ztoolkit for every window addon.data.ztoolkit = createZToolkit(); diff --git a/src/modules/examples.ts b/src/modules/examples.ts index d393da7..8965afe 100644 --- a/src/modules/examples.ts +++ b/src/modules/examples.ts @@ -123,7 +123,7 @@ export class KeyExampleFactory { export class UIExampleFactory { @example - static registerStyleSheet(win: Window) { + static registerStyleSheet(win: _ZoteroTypes.MainWindow) { const doc = win.document; const styles = ztoolkit.UI.createElement(doc, "link", { properties: { @@ -132,7 +132,7 @@ export class UIExampleFactory { href: `chrome://${addon.data.config.addonRef}/content/zoteroPane.css`, }, }); - doc.documentElement.appendChild(styles); + doc.documentElement?.appendChild(styles); doc.getElementById("zotero-item-pane-content")?.classList.add("makeItRed"); } @@ -165,7 +165,7 @@ export class UIExampleFactory { ], }, "before", - win.document.querySelector( + win.document?.querySelector( "#zotero-itemmenu-addontemplate-test", ) as XUL.MenuItem, ); @@ -208,12 +208,9 @@ export class UIExampleFactory { dataProvider: (item: Zotero.Item, dataKey: string) => { return field + String(item.id); }, - renderCell(index, data, column) { + renderCell(index, data, column, isFirstColumn, doc) { ztoolkit.log("Custom column cell is rendered!"); - const span = Zotero.getMainWindow().document.createElementNS( - "http://www.w3.org/1999/xhtml", - "span", - ); + const span = doc.createElement("span"); span.className = `cell ${column.className}`; span.style.background = "#0dd068"; span.innerText = "⭐" + data; @@ -502,7 +499,7 @@ export class PromptExampleFactory { ids.forEach((id: number) => { const item = Zotero.Items.get(id); const title = item.getField("title"); - const ele = ztoolkit.UI.createElement(window.document, "div", { + const ele = ztoolkit.UI.createElement(window.document!, "div", { namespace: "html", classList: ["command"], listeners: [ diff --git a/src/modules/preferenceScript.ts b/src/modules/preferenceScript.ts index a4dcb7c..099dbff 100644 --- a/src/modules/preferenceScript.ts +++ b/src/modules/preferenceScript.ts @@ -108,10 +108,10 @@ async function updatePrefsUI() { function bindPrefEvents() { addon.data - .prefs!.window.document.querySelector( + .prefs!.window.document?.querySelector( `#zotero-prefpane-${config.addonRef}-enable`, ) - ?.addEventListener("command", (e) => { + ?.addEventListener("command", (e: Event) => { ztoolkit.log(e); addon.data.prefs!.window.alert( `Successfully changed to ${(e.target as XUL.Checkbox).checked}!`, @@ -119,10 +119,10 @@ function bindPrefEvents() { }); addon.data - .prefs!.window.document.querySelector( + .prefs!.window.document?.querySelector( `#zotero-prefpane-${config.addonRef}-input`, ) - ?.addEventListener("change", (e) => { + ?.addEventListener("change", (e: Event) => { ztoolkit.log(e); addon.data.prefs!.window.alert( `Successfully changed to ${(e.target as HTMLInputElement).value}!`, diff --git a/tsconfig.json b/tsconfig.json index 191b0f3..cc33c1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,5 @@ { - "compilerOptions": { - "target": "ES2016", - "lib": ["ESNext"], - "experimentalDecorators": true, - "module": "ESNext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "types": ["zotero-types"], - "strict": true, - "outDir": "build/dist/", - "skipLibCheck": true - }, + "extends": "zotero-types/entries/sandbox/", "include": ["src", "typings"], "exclude": ["build", "addon"] }