diff --git a/package.json b/package.json index 32cc4b8..4d6fb5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui", - "version": "6.4.84", + "version": "6.4.85", "license": "BUSL-1.1", "private": true, "packageManager": "pnpm@9.15.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a0cf83..cfc569e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 5.2.6 '@prgm/sveltekit-progress-bar': specifier: 2.0.0 - version: 2.0.0(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19) + version: 2.0.0(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19) '@thaunknown/web-irc': specifier: ^1.0.3 version: 1.0.3 @@ -143,13 +143,13 @@ importers: version: 1.0.1(svelte@4.2.19)(typescript@5.8.3) '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0))) + version: 3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1))) '@sveltejs/kit': specifier: ^2.21.0 - version: 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + version: 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + version: 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -176,7 +176,7 @@ importers: version: 1.8.10(@gql.tada/svelte-support@1.0.1(svelte@4.2.19)(typescript@5.8.3))(graphql@16.10.0)(typescript@5.8.3) hayase-extensions: specifier: github:hayase-app/extensions - version: https://codeload.github.com/hayase-app/extensions/tar.gz/a9415c297a899459be34a135a9adbcd72115e019 + version: https://codeload.github.com/hayase-app/extensions/tar.gz/675c4a7cfa1e2b4e88c2d11c4c195c33c68116e0 jassub: specifier: ^1.8.6 version: 1.8.6 @@ -212,10 +212,10 @@ importers: version: 0.3.2(svelte@4.2.19) vite: specifier: ^5.4.11 - version: 5.4.19(terser@5.39.0) + version: 5.4.19(terser@5.43.1) vite-plugin-static-copy: specifier: ^3.0.2 - version: 3.0.2(vite@5.4.19(terser@5.39.0)) + version: 3.0.2(vite@5.4.19(terser@5.43.1)) packages: @@ -488,6 +488,9 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -509,6 +512,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@melt-ui/svelte@0.76.2': resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==} peerDependencies: @@ -1574,8 +1580,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hayase-extensions@https://codeload.github.com/hayase-app/extensions/tar.gz/a9415c297a899459be34a135a9adbcd72115e019: - resolution: {tarball: https://codeload.github.com/hayase-app/extensions/tar.gz/a9415c297a899459be34a135a9adbcd72115e019} + hayase-extensions@https://codeload.github.com/hayase-app/extensions/tar.gz/675c4a7cfa1e2b4e88c2d11c4c195c33c68116e0: + resolution: {tarball: https://codeload.github.com/hayase-app/extensions/tar.gz/675c4a7cfa1e2b4e88c2d11c4c195c33c68116e0} version: 1.0.6 idb-keyval@6.2.2: @@ -2482,8 +2488,8 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - terser@5.39.0: - resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -2957,6 +2963,12 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.29 + optional: true + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -2969,8 +2981,8 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 optional: true '@jridgewell/sourcemap-codec@1.5.0': {} @@ -2980,6 +2992,12 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + optional: true + '@melt-ui/svelte@0.76.2(svelte@4.2.19)': dependencies: '@floating-ui/core': 1.7.0 @@ -3007,9 +3025,9 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@prgm/sveltekit-progress-bar@2.0.0(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)': + '@prgm/sveltekit-progress-bar@2.0.0(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) svelte: 4.2.19 '@rollup/rollup-android-arm-eabi@4.40.2': @@ -3090,14 +3108,14 @@ snapshots: dependencies: acorn: 8.14.1 - '@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))': + '@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) - '@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0))': + '@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1))': dependencies: '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) '@types/cookie': 0.6.0 acorn: 8.14.1 cookie: 0.6.0 @@ -3110,28 +3128,28 @@ snapshots: set-cookie-parser: 2.7.1 sirv: 3.0.1 svelte: 4.2.19 - vite: 5.4.19(terser@5.39.0) + vite: 5.4.19(terser@5.43.1) - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) debug: 4.4.1 svelte: 4.2.19 - vite: 5.4.19(terser@5.39.0) + vite: 5.4.19(terser@5.43.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)))(svelte@4.2.19)(vite@5.4.19(terser@5.39.0)) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)))(svelte@4.2.19)(vite@5.4.19(terser@5.43.1)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.19(terser@5.39.0) - vitefu: 0.2.5(vite@5.4.19(terser@5.39.0)) + vite: 5.4.19(terser@5.43.1) + vitefu: 0.2.5(vite@5.4.19(terser@5.43.1)) transitivePeerDependencies: - supports-color @@ -4255,7 +4273,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hayase-extensions@https://codeload.github.com/hayase-app/extensions/tar.gz/a9415c297a899459be34a135a9adbcd72115e019: {} + hayase-extensions@https://codeload.github.com/hayase-app/extensions/tar.gz/675c4a7cfa1e2b4e88c2d11c4c195c33c68116e0: {} idb-keyval@6.2.2: {} @@ -5211,7 +5229,7 @@ snapshots: tapable@2.2.1: {} - terser@5.39.0: + terser@5.43.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.1 @@ -5360,27 +5378,27 @@ snapshots: rvfc-polyfill: 1.0.7 twgl.js: 5.5.4 - vite-plugin-static-copy@3.0.2(vite@5.4.19(terser@5.39.0)): + vite-plugin-static-copy@3.0.2(vite@5.4.19(terser@5.43.1)): dependencies: chokidar: 3.6.0 fs-extra: 11.3.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.14 - vite: 5.4.19(terser@5.39.0) + vite: 5.4.19(terser@5.43.1) - vite@5.4.19(terser@5.39.0): + vite@5.4.19(terser@5.43.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 rollup: 4.40.2 optionalDependencies: fsevents: 2.3.3 - terser: 5.39.0 + terser: 5.43.1 - vitefu@0.2.5(vite@5.4.19(terser@5.39.0)): + vitefu@0.2.5(vite@5.4.19(terser@5.43.1)): optionalDependencies: - vite: 5.4.19(terser@5.39.0) + vite: 5.4.19(terser@5.43.1) vscode-languageserver-textdocument@1.0.12: {} diff --git a/src/app.css b/src/app.css index ca51393..887f9b6 100644 --- a/src/app.css +++ b/src/app.css @@ -34,6 +34,20 @@ animation-duration: 0s !important; } + @supports not (overflow: clip) { + .overflow-clip { + overflow: hidden; + } + + .overflow-x-clip { + overflow-x: hidden; + } + + .overflow-y-clip { + overflow-y: hidden; + } + } + :root { --background: 0 0% 100%; --foreground: 240 10% 3.9%; diff --git a/src/lib/components/ui/button/index.ts b/src/lib/components/ui/button/index.ts index 2786b20..720e81e 100644 --- a/src/lib/components/ui/button/index.ts +++ b/src/lib/components/ui/button/index.ts @@ -5,7 +5,7 @@ import Root from './button.svelte' import type { Button as ButtonPrimitive } from 'bits-ui' const buttonVariants = tv({ - base: 'focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50', + base: 'bg-transparent focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50', variants: { variant: { default: 'bg-primary text-primary-foreground select:bg-neutral-500 shadow', diff --git a/src/lib/components/ui/player/player.svelte b/src/lib/components/ui/player/player.svelte index 4b93c97..4f86d25 100644 --- a/src/lib/components/ui/player/player.svelte +++ b/src/lib/components/ui/player/player.svelte @@ -904,7 +904,7 @@
{mediaInfo.session.title} - {mediaInfo.session.description} + {mediaInfo.session.description} {#if mediaInfo.media} {#await Promise.all([episodes(mediaInfo.media.id), client.single(mediaInfo.media.id)]) then [eps, media]} diff --git a/src/lib/modules/anilist/client.ts b/src/lib/modules/anilist/client.ts index eb24547..35a11c1 100644 --- a/src/lib/modules/anilist/client.ts +++ b/src/lib/modules/anilist/client.ts @@ -518,10 +518,6 @@ class AnilistClient { // sveltekit/vite does the funny and evaluates at compile, this is a hack to fix development mode const client = (typeof indexedDB !== 'undefined' && new AnilistClient()) as AnilistClient -// hydrating the cache re-starts all queries, it's better to wait for cache to hydrate, than waste rate limit on requests which are dumped anyways -// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -await client.storagePromise?.promise - export default client export function asyncStore (query: TypedDocumentNode, variables: AnyVariables, context?: Partial): Promise> { diff --git a/src/lib/modules/idle.ts b/src/lib/modules/idle.ts index 3d5970f..fcfd91f 100644 --- a/src/lib/modules/idle.ts +++ b/src/lib/modules/idle.ts @@ -18,10 +18,11 @@ export const activityState = readable<'active' | 'inactive'>(document.hasFocus() }) // @ts-expect-error non-standard API -const idleDetector = new IdleDetector() -idleDetector.start({ threshold: 60_000 }) +const idleDetector = typeof IdleDetector !== 'undefined' && new IdleDetector() +if (idleDetector) idleDetector.start({ threshold: 60_000 }) export const idleState = readable<'active' | 'idle'>(idleDetector.userState, set => { + if (!idleDetector) return set('active') set(idleDetector.userState) const ctrl = new AbortController() @@ -32,6 +33,7 @@ export const idleState = readable<'active' | 'idle'>(idleDetector.userState, set }) export const lockedState = readable<'locked' | 'unlocked'>(idleDetector.screenState, set => { + if (!idleDetector) return set('unlocked') set(idleDetector.screenState) const ctrl = new AbortController() diff --git a/src/lib/modules/navigate.ts b/src/lib/modules/navigate.ts index e74038e..168229c 100644 --- a/src/lib/modules/navigate.ts +++ b/src/lib/modules/navigate.ts @@ -195,7 +195,12 @@ function getElementPosition (element: HTMLElement): ElementPosition { */ function getFocusableElementPositions (): ElementPosition[] { const elements = [] - for (const element of getKeyboardFocusableElements(document.querySelector('[role="dialog"]') ?? document.querySelector('[role="application"]') ?? document.querySelector(':has(> [role="listbox"])') ?? document.body)) { + let listbox: Element | null = null + try { + // support for :has() pseudo-class, which is not widely supported yet + listbox = document.querySelector(':has(> [role="listbox"])') + } catch {} + for (const element of getKeyboardFocusableElements(document.querySelector('[role="dialog"]') ?? document.querySelector('[role="application"]') ?? listbox ?? document.body)) { const position = getElementPosition(element) elements.push(position) } diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index f385b2d..7dd6037 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -26,3 +26,24 @@ if (typeof Object.groupBy === 'undefined') { }, {}) } } + +if (!Array.prototype.at) { + // eslint-disable-next-line no-extend-native + Array.prototype.at = function (this: T[], index: number): T | undefined { + const len = this.length + const relativeIndex = Math.trunc(index) || 0 + const k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex + if (k < 0 || k >= len) return undefined + return this[k] + } +} +// randomUUID +if (typeof crypto.randomUUID === 'undefined') { + crypto.randomUUID = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + const r = Math.random() * 16 | 0 + const v = c === 'x' ? r : (r & 0x3 | 0x8) + return v.toString(16) + }) as `${string}-${string}-${string}-${string}-${string}` + } +} diff --git a/src/routes/app/+layout.ts b/src/routes/app/+layout.ts index 55b67f4..3d038cb 100644 --- a/src/routes/app/+layout.ts +++ b/src/routes/app/+layout.ts @@ -2,6 +2,7 @@ import { error, redirect } from '@sveltejs/kit' import { dev } from '$app/environment' import { SETUP_VERSION } from '$lib' +import { client } from '$lib/modules/anilist' import native from '$lib/modules/native' import { outdatedComponent } from '$lib/modules/update' @@ -10,4 +11,9 @@ export async function load () { if (Number(localStorage.getItem('setup-finished')) < SETUP_VERSION) redirect(307, '/setup') if (await outdatedComponent) redirect(307, '/update/') + + // hydrating the cache re-starts all queries, it's better to wait for cache to hydrate, than waste rate limit on requests which are dumped anyways + // this was previously in anilist/client but it was a top level await, which isn't a great solution, this *should* be better? + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + await client.storagePromise?.promise } diff --git a/vite.config.ts b/vite.config.ts index 4a3ccee..ac0b416 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -38,7 +38,7 @@ export default defineConfig({ }, server: { port: 7344 }, build: { - target: 'esnext', + target: 'es2020', sourcemap: true }, ssr: {