diff --git a/package.json b/package.json index 90c074a1..aae342fe 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "gql.tada": "^1.9.0", "graphql-web-lite": "16.6.0-4", "mode-watcher": "^1.1.0", + "paneforge": "^1.0.2", "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.17", "tauri-plugin-cache-api": "^0.1.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee3495d9..0960c1cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,6 +71,9 @@ importers: mode-watcher: specifier: ^1.1.0 version: 1.1.0(svelte@5.45.2) + paneforge: + specifier: ^1.0.2 + version: 1.0.2(svelte@5.45.2) tailwind-merge: specifier: ^3.4.0 version: 3.4.0 @@ -2185,6 +2188,11 @@ packages: package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + paneforge@1.0.2: + resolution: {integrity: sha512-KzmIXQH1wCfwZ4RsMohD/IUtEjVhteR+c+ulb/CHYJHX8SuDXoJmChtsc/Xs5Wl8NHS4L5Q7cxL8MG40gSU1bA==} + peerDependencies: + svelte: ^5.29.0 + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2443,6 +2451,11 @@ packages: peerDependencies: svelte: ^5.7.0 + runed@0.29.2: + resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==} + peerDependencies: + svelte: ^5.7.0 + runed@0.35.1: resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} peerDependencies: @@ -2552,6 +2565,12 @@ packages: peerDependencies: svelte: ^5.0.0 + svelte-toolbelt@0.9.3: + resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + svelte2tsx@0.7.45: resolution: {integrity: sha512-cSci+mYGygYBHIZLHlm/jYlEc1acjAHqaQaDFHdEBpUueM9kSTnPpvPtSl5VkJOU1qSJ7h1K+6F/LIUYiqC8VA==} peerDependencies: @@ -5032,6 +5051,12 @@ snapshots: package-manager-detector@1.6.0: {} + paneforge@1.0.2(svelte@5.45.2): + dependencies: + runed: 0.23.4(svelte@5.45.2) + svelte: 5.45.2 + svelte-toolbelt: 0.9.3(svelte@5.45.2) + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -5226,6 +5251,11 @@ snapshots: esm-env: 1.2.2 svelte: 5.45.2 + runed@0.29.2(svelte@5.45.2): + dependencies: + esm-env: 1.2.2 + svelte: 5.45.2 + runed@0.35.1(@sveltejs/kit@2.49.0(@sveltejs/vite-plugin-svelte@6.2.1(rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.2))(svelte@5.45.2))(rolldown-vite@7.2.8(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(yaml@2.8.2))(svelte@5.45.2))(svelte@5.45.2): dependencies: dequal: 2.0.3 @@ -5336,6 +5366,13 @@ snapshots: style-to-object: 1.0.14 svelte: 5.45.2 + svelte-toolbelt@0.9.3(svelte@5.45.2): + dependencies: + clsx: 2.1.1 + runed: 0.29.2(svelte@5.45.2) + style-to-object: 1.0.14 + svelte: 5.45.2 + svelte2tsx@0.7.45(svelte@5.45.2)(typescript@5.9.3): dependencies: dedent-js: 1.0.1 diff --git a/src/app.css b/src/app.css index cf2d66a9..d11bb7db 100644 --- a/src/app.css +++ b/src/app.css @@ -160,4 +160,12 @@ color: var(--color-blue-400); text-decoration: underline; } + + code { + padding: 0.2rem 0.3rem; + font-size: 85%; + font-family: var(--font-mono); + border-radius: var(--radius-md); + background-color: var(--color-muted); + } } diff --git a/src/hooks.client.ts b/src/hooks.client.ts index e4671fe5..25f4122b 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -1,14 +1,10 @@ import { stats } from "tauri-plugin-cache-api"; import { log } from "$lib/log"; -import { settings } from "$lib/settings"; import { loadThemes } from "$lib/themes"; export async function init() { const { totalSize } = await stats(); log.info(`Cache has ${totalSize} items`); - await settings.start(); - log.info("Settings synced"); - await loadThemes(); } diff --git a/src/lib/app.svelte.ts b/src/lib/app.svelte.ts index d1d858d8..b3f34fb1 100644 --- a/src/lib/app.svelte.ts +++ b/src/lib/app.svelte.ts @@ -5,6 +5,7 @@ import { History } from "./history.svelte"; import { log } from "./log"; import { ChannelManager } from "./managers/channel-manager"; import { EmoteManager } from "./managers/emote-manager"; +import { SplitLayout } from "./split-layout"; import { TwitchClient } from "./twitch/client"; import type { EmoteSet } from "./emotes"; import type { Badge } from "./graphql/twitch"; @@ -40,6 +41,11 @@ class App { */ public readonly channels = new ChannelManager(this.twitch); + /** + * The current split layout. + */ + public readonly splits = new SplitLayout(); + /** * Route history. */ diff --git a/src/lib/components/Channel.svelte b/src/lib/components/Channel.svelte new file mode 100644 index 00000000..60a55f4f --- /dev/null +++ b/src/lib/components/Channel.svelte @@ -0,0 +1,43 @@ + + +