diff --git a/.eslintrc.json b/.eslintrc.json index a9ba90d..dda1fa0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,5 +22,13 @@ "caughtErrorsIgnorePattern": "^_" } ] - } + }, + "overrides": [ + { + "files": ["types/**/*.d.ts"], + "rules": { + "@typescript-eslint/triple-slash-reference": "off" + } + } + ] } diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist diff --git a/package.json b/package.json index c8c96dc..bb9c230 100644 --- a/package.json +++ b/package.json @@ -75,9 +75,9 @@ "eslint-config-prettier": "^9.1.0", "preact": "^10.28.2", "prettier": "^3.6.2", - "vitest": "^2.1.9", "tsup": "^8.5.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^2.1.9" }, "engines": { "node": ">=22", diff --git a/src/components/scripts.d.ts b/src/components/scripts.d.ts deleted file mode 100644 index 89df165..0000000 --- a/src/components/scripts.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*.inline.ts" { - const content: string; - export default content; -} diff --git a/src/components/styles.d.ts b/src/components/styles.d.ts deleted file mode 100644 index 0a31e5e..0000000 --- a/src/components/styles.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*.scss" { - const content: string; - export default content; -} diff --git a/tsconfig.json b/tsconfig.json index 99ca5e7..e2479a9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,6 @@ "jsx": "react-jsx", "jsxImportSource": "preact" }, - "include": ["src", "test", "tsup.config.ts", "vitest.config.ts"], + "include": ["src", "test", "tsup.config.ts", "vitest.config.ts", "types"], "exclude": ["dist", "node_modules"] } diff --git a/types/globals.d.ts b/types/globals.d.ts new file mode 100644 index 0000000..a9e71ae --- /dev/null +++ b/types/globals.d.ts @@ -0,0 +1,36 @@ +declare module "*.scss" { + const content: string; + export default content; +} + +declare module "*.inline.ts" { + const content: string; + export default content; +} + +interface CustomEventMap { + nav: CustomEvent<{ url: string }>; + prenav: CustomEvent; + themechange: CustomEvent<{ theme: "light" | "dark" }>; + readermodechange: CustomEvent<{ mode: "on" | "off" }>; + render: CustomEvent; +} + +interface Document { + addEventListener( + type: K, + listener: (this: Document, ev: CustomEventMap[K]) => void, + ): void; + removeEventListener( + type: K, + listener: (this: Document, ev: CustomEventMap[K]) => void, + ): void; + dispatchEvent(ev: CustomEventMap[K] | UIEvent): void; +} + +interface Window { + addCleanup(fn: (...args: unknown[]) => void): void; + spaNavigate?(url: URL, isBack: boolean): Promise; +} + +declare const fetchData: Promise>;