- Add matrix-js-sdk, marked, highlight.js, twemoji, @tanstack/svelte-virtual deps - Copy Matrix core layer: /matrix/, /stores/matrix.ts, /cache/, /services/ - Copy Matrix components: matrix/, message/, chat-layout/, chat-settings/ - Copy UI components: EmojiPicker, Twemoji, ImagePreviewModal, VirtualList - Copy utils: emojiData, twemoji, twemojiGlobal - Replace lucide-svelte with Material Symbols in SyncRecoveryBanner - Extend Avatar with xs size and status indicator prop - Fix ui.ts store conflict: re-export toasts from toast.svelte.ts - Add migration 020_matrix_credentials for storing Matrix tokens per user/org - Add /api/matrix-credentials endpoint (GET/POST/DELETE) - Create [orgSlug]/chat page with Matrix login form + full chat UI - Add Chat to sidebar navigation
33 lines
802 B
Svelte
33 lines
802 B
Svelte
<script lang="ts">
|
|
import { onMount, onDestroy } from "svelte";
|
|
import type { Snippet } from "svelte";
|
|
import type { MatrixClient } from "matrix-js-sdk";
|
|
import { setMatrixContext } from "$lib/matrix/context";
|
|
import { setupSyncHandlers, removeSyncHandlers } from "$lib/matrix/sync";
|
|
|
|
interface Props {
|
|
client: MatrixClient;
|
|
children: Snippet;
|
|
}
|
|
|
|
let { client, children }: Props = $props();
|
|
|
|
// Store client reference for cleanup
|
|
let clientRef = client;
|
|
|
|
// Set the context during component initialization
|
|
setMatrixContext(clientRef);
|
|
|
|
// Setup sync handlers when provider mounts
|
|
onMount(() => {
|
|
setupSyncHandlers(clientRef);
|
|
});
|
|
|
|
// Cleanup when provider unmounts
|
|
onDestroy(() => {
|
|
removeSyncHandlers(clientRef);
|
|
});
|
|
</script>
|
|
|
|
{@render children()}
|