feat(frontend)!: sveltekit 3 on the v0.7.0 template, typescript 6, adapter-auto dropped; backend base moves to trixie

This commit is contained in:
hh committed 2026-10-10 23:18:57 +00:00
1 parent b1ffebe858
commit 4d16105e92
116 files changed
+756 -711

No files matched your search

+4 -3
View File
@@ -1,7 +1,8 @@
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const RETRY_DELAY = 2500;
export type AvatarKind = "peer" | "chat";
+4 -3
View File
@@ -1,8 +1,9 @@
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
import { goto } from "$app/navigation";
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const MAX_LIMIT = 500;
export class ApiError extends Error {
+4 -3
View File
@@ -1,7 +1,8 @@
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const RETRY_DELAY = 2500;
export interface CustomEmojiAsset {
+4 -3
View File
@@ -1,7 +1,8 @@
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const FILENAME_STAR = /filename\*=UTF-8''([^;]+)/i;
const FILENAME_PLAIN = /filename="?([^";]+)"?/i;
+3 -3
View File
@@ -1,4 +1,4 @@
import { request } from "$lib/api/client";
import { request } from "#lib/api/client.js";
import type {
Account,
Alert,
@@ -35,8 +35,8 @@ import type {
VolumeBucket,
Watch,
WatchedBot,
} from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
} from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
interface Page {
limit?: number;
+4 -4
View File
@@ -1,7 +1,7 @@
import { requestMedia } from "$lib/api/client";
import { getMessageMedia, transcribeMedia } from "$lib/api/endpoints";
import type { MediaRef } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { requestMedia } from "#lib/api/client.js";
import { getMessageMedia, transcribeMedia } from "#lib/api/endpoints.js";
import type { MediaRef } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
const TRANSCRIBE_TRIES = 10;
const TRANSCRIBE_DELAY = 2000;
+3 -3
View File
@@ -1,6 +1,6 @@
import { request } from "$lib/api/client";
import type { FileShare, FileShareHit, ShareSubject } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { request } from "#lib/api/client.js";
import type { FileShare, FileShareHit, ShareSubject } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
export interface ShareSettings {
expiresInSeconds: number | null;
+4 -3
View File
@@ -1,7 +1,8 @@
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const MAX_CACHED = 100;
@@ -1,9 +1,9 @@
<script lang="ts">
import type { MessageView } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import { accountName, peerName } from "$lib/format/peer";
import { accounts } from "$lib/stores/accounts.svelte";
import { peers } from "$lib/stores/peers.svelte";
import type { MessageView } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import { accountName, peerName } from "#lib/format/peer.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
interface Props {
message: MessageView;
+15 -15
View File
@@ -1,23 +1,23 @@
<script lang="ts">
import { goto } from "$app/navigation";
import {
enqueueBackfill,
getCurrentPresence,
getPeer,
} from "$lib/api/endpoints";
import type { PeerView, PresenceSample } from "$lib/api/types";
import Avatar from "$lib/components/ui/Avatar.svelte";
import Button from "$lib/components/ui/Button.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { peerName } from "$lib/format/peer";
import { formatPresence, isOnline } from "$lib/format/presence";
import { accounts } from "$lib/stores/accounts.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { discover } from "$lib/stores/discover.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
} from "#lib/api/endpoints.js";
import type { PeerView, PresenceSample } from "#lib/api/types.js";
import Avatar from "#lib/components/ui/Avatar.svelte";
import Button from "#lib/components/ui/Button.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { peerName } from "#lib/format/peer.js";
import { formatPresence, isOnline } from "#lib/format/presence.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { discover } from "#lib/stores/discover.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
interface Props {
chatId: number;
+7 -7
View File
@@ -1,14 +1,14 @@
<script lang="ts">
import { untrack } from "svelte";
import ChatListItem from "#lib/components/ChatListItem.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Skeleton from "#lib/components/ui/Skeleton.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { folders } from "#lib/stores/folders.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { goto } from "$app/navigation";
import { page } from "$app/state";
import ChatListItem from "$lib/components/ChatListItem.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Skeleton from "$lib/components/ui/Skeleton.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { folders } from "$lib/stores/folders.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
const skeletonRows = Array.from({ length: 9 }, (_, index) => index);
@@ -1,14 +1,14 @@
<script lang="ts">
import { ripple } from "#lib/actions/ripple.js";
import type { Chat } from "#lib/api/types.js";
import Avatar from "#lib/components/ui/Avatar.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import { formatListDate } from "#lib/format/datetime.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
import { type RightPanel, ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { ripple } from "$lib/actions/ripple";
import type { Chat } from "$lib/api/types";
import Avatar from "$lib/components/ui/Avatar.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import { formatListDate } from "$lib/format/datetime";
import { accounts } from "$lib/stores/accounts.svelte";
import { peers } from "$lib/stores/peers.svelte";
import { type RightPanel, ui } from "$lib/stores/ui.svelte";
interface Props {
chat: Chat;
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import type { ContactView } from "$lib/api/types";
import Avatar from "$lib/components/ui/Avatar.svelte";
import type { ContactView } from "#lib/api/types.js";
import Avatar from "#lib/components/ui/Avatar.svelte";
interface Props {
contact: ContactView;
@@ -2,7 +2,7 @@
import {
type CustomEmojiAsset,
loadCustomEmoji,
} from "$lib/api/custom-emoji";
} from "#lib/api/custom-emoji.js";
interface Props {
id: string;
@@ -1,13 +1,13 @@
<script lang="ts">
import { SvelteSet } from "svelte/reactivity";
import type { EntityView } from "$lib/api/types";
import type { EntityView } from "#lib/api/types.js";
import {
buildEntityTree,
type EntityNode,
type EntityTreeNode,
jumboEmojiCount,
linkHref,
} from "$lib/format/entities";
} from "#lib/format/entities.js";
interface Props {
entities: EntityView[];
@@ -1,5 +1,5 @@
<script lang="ts">
import { folders } from "$lib/stores/folders.svelte";
import { folders } from "#lib/stores/folders.svelte.js";
interface Tab {
id: number | null;
@@ -1,7 +1,7 @@
<script lang="ts">
import type { ForwardView } from "$lib/api/types";
import { peerName } from "$lib/format/peer";
import { peers } from "$lib/stores/peers.svelte";
import type { ForwardView } from "#lib/api/types.js";
import { peerName } from "#lib/format/peer.js";
import { peers } from "#lib/stores/peers.svelte.js";
interface Props {
forward: ForwardView;
@@ -1,6 +1,6 @@
<script lang="ts">
import type { InlineButton } from "$lib/api/types";
import { safeHref } from "$lib/format/url";
import type { InlineButton } from "#lib/api/types.js";
import { safeHref } from "#lib/format/url.js";
interface Props {
rows: InlineButton[][];
+1 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import type { LocationView } from "$lib/api/types";
import type { LocationView } from "#lib/api/types.js";
interface Props {
location: LocationView;
@@ -1,10 +1,10 @@
<script lang="ts">
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { goto } from "$app/navigation";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { auth } from "$lib/stores/auth.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
let value = $state("");
let busy = $state(false);
@@ -1,8 +1,8 @@
<script lang="ts">
import { isPreviewable } from "$lib/api/media";
import type { MediaRef } from "$lib/api/types";
import AlbumTile from "$lib/components/media/AlbumTile.svelte";
import FileChip from "$lib/components/media/FileChip.svelte";
import { isPreviewable } from "#lib/api/media.js";
import type { MediaRef } from "#lib/api/types.js";
import AlbumTile from "#lib/components/media/AlbumTile.svelte";
import FileChip from "#lib/components/media/FileChip.svelte";
interface Props {
chatId: number;
@@ -1,10 +1,10 @@
<script lang="ts">
import { type MediaResult, requestMediaVersion } from "$lib/api/client";
import { isActiveContent, visualKind } from "$lib/api/media";
import type { MediaVersion } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { poster } from "$lib/media/poster";
import { type MediaResult, requestMediaVersion } from "#lib/api/client.js";
import { isActiveContent, visualKind } from "#lib/api/media.js";
import type { MediaVersion } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { poster } from "#lib/media/poster.js";
interface Props {
version: MediaVersion;
+13 -13
View File
@@ -1,19 +1,19 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { untrack } from "svelte";
import { type MediaResult, requestMedia } from "$lib/api/client";
import { downloadMedia } from "$lib/api/download";
import { fetchMedia, getMessageMedia } from "$lib/api/endpoints";
import { isPreviewable, type ViewerItem } from "$lib/api/media";
import Button from "$lib/components/ui/Button.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatBytes, mediaKindLabel } from "$lib/format/media";
import { poster } from "$lib/media/poster";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { type MediaResult, requestMedia } from "#lib/api/client.js";
import { downloadMedia } from "#lib/api/download.js";
import { fetchMedia, getMessageMedia } from "#lib/api/endpoints.js";
import { isPreviewable, type ViewerItem } from "#lib/api/media.js";
import Button from "#lib/components/ui/Button.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatBytes, mediaKindLabel } from "#lib/format/media.js";
import { poster } from "#lib/media/poster.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
chatId: number;
@@ -1,28 +1,28 @@
<script lang="ts">
import type { MessageView } from "#lib/api/types.js";
import Contact from "#lib/components/Contact.svelte";
import EntityText from "#lib/components/EntityText.svelte";
import ForwardHeader from "#lib/components/ForwardHeader.svelte";
import InlineButtons from "#lib/components/InlineButtons.svelte";
import Location from "#lib/components/Location.svelte";
import MediaAlbum from "#lib/components/MediaAlbum.svelte";
import MessageMedia from "#lib/components/MessageMedia.svelte";
import MessageMeta from "#lib/components/MessageMeta.svelte";
import Poll from "#lib/components/Poll.svelte";
import Reactions from "#lib/components/Reactions.svelte";
import ReplyHeader from "#lib/components/ReplyHeader.svelte";
import Avatar from "#lib/components/ui/Avatar.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import WebPage from "#lib/components/WebPage.svelte";
import { accountName, peerColorIndex, peerName } from "#lib/format/peer.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { appear } from "#lib/transitions/appear.js";
import { goto } from "$app/navigation";
import type { MessageView } from "$lib/api/types";
import Contact from "$lib/components/Contact.svelte";
import EntityText from "$lib/components/EntityText.svelte";
import ForwardHeader from "$lib/components/ForwardHeader.svelte";
import InlineButtons from "$lib/components/InlineButtons.svelte";
import Location from "$lib/components/Location.svelte";
import MediaAlbum from "$lib/components/MediaAlbum.svelte";
import MessageMedia from "$lib/components/MessageMedia.svelte";
import MessageMeta from "$lib/components/MessageMeta.svelte";
import Poll from "$lib/components/Poll.svelte";
import Reactions from "$lib/components/Reactions.svelte";
import ReplyHeader from "$lib/components/ReplyHeader.svelte";
import Avatar from "$lib/components/ui/Avatar.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import WebPage from "$lib/components/WebPage.svelte";
import { accountName, peerColorIndex, peerName } from "$lib/format/peer";
import { accounts } from "$lib/stores/accounts.svelte";
import { peers } from "$lib/stores/peers.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
import { appear } from "$lib/transitions/appear";
interface Props {
animate: boolean;
+17 -17
View File
@@ -1,22 +1,22 @@
<script lang="ts">
import { tick, untrack } from "svelte";
import { listMessages } from "$lib/api/endpoints";
import { type ViewerItem, viewerItemsFrom } from "$lib/api/media";
import type { LiveEvent, MessageView } from "$lib/api/types";
import ActionMessage from "$lib/components/ActionMessage.svelte";
import MediaViewer from "$lib/components/MediaViewer.svelte";
import MessageBubble from "$lib/components/MessageBubble.svelte";
import MessageVersions from "$lib/components/MessageVersions.svelte";
import PinnedBar from "$lib/components/PinnedBar.svelte";
import TrackChat from "$lib/components/TrackChat.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatDay } from "$lib/format/datetime";
import { accounts } from "$lib/stores/accounts.svelte";
import { events } from "$lib/stores/events.svelte";
import { peers } from "$lib/stores/peers.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
import { listMessages } from "#lib/api/endpoints.js";
import { type ViewerItem, viewerItemsFrom } from "#lib/api/media.js";
import type { LiveEvent, MessageView } from "#lib/api/types.js";
import ActionMessage from "#lib/components/ActionMessage.svelte";
import MediaViewer from "#lib/components/MediaViewer.svelte";
import MessageBubble from "#lib/components/MessageBubble.svelte";
import MessageVersions from "#lib/components/MessageVersions.svelte";
import PinnedBar from "#lib/components/PinnedBar.svelte";
import TrackChat from "#lib/components/TrackChat.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatDay } from "#lib/format/datetime.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { events } from "#lib/stores/events.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
interface Props {
chatId: number;
+19 -19
View File
@@ -1,28 +1,28 @@
<script lang="ts">
import { visible } from "$lib/actions/visible";
import { downloadMedia } from "$lib/api/download";
import { fetchMedia } from "$lib/api/endpoints";
import { visible } from "#lib/actions/visible.js";
import { downloadMedia } from "#lib/api/download.js";
import { fetchMedia } from "#lib/api/endpoints.js";
import {
type InlineMedia,
isPreviewable,
loadInlineMedia,
visualKind,
} from "$lib/api/media";
import type { MessageView } from "$lib/api/types";
import AudioFile from "$lib/components/media/AudioFile.svelte";
import FileChip from "$lib/components/media/FileChip.svelte";
import TgsSticker from "$lib/components/media/TgsSticker.svelte";
import VideoNote from "$lib/components/media/VideoNote.svelte";
import VoiceMessage from "$lib/components/media/VoiceMessage.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatBytes, mediaKindLabel } from "$lib/format/media";
import { poster } from "$lib/media/poster";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
} from "#lib/api/media.js";
import type { MessageView } from "#lib/api/types.js";
import AudioFile from "#lib/components/media/AudioFile.svelte";
import FileChip from "#lib/components/media/FileChip.svelte";
import TgsSticker from "#lib/components/media/TgsSticker.svelte";
import VideoNote from "#lib/components/media/VideoNote.svelte";
import VoiceMessage from "#lib/components/media/VoiceMessage.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatBytes, mediaKindLabel } from "#lib/format/media.js";
import { poster } from "#lib/media/poster.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
interface Props {
message: MessageView;
@@ -1,7 +1,7 @@
<script lang="ts">
import type { MessageView } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import { formatTime } from "$lib/format/datetime";
import type { MessageView } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatTime } from "#lib/format/datetime.js";
interface Props {
message: MessageView;
@@ -1,12 +1,12 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { getMediaVersions, listMessageVersions } from "$lib/api/endpoints";
import type { MediaVersion, MessageVersion } from "$lib/api/types";
import MediaVersionThumb from "$lib/components/MediaVersionThumb.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatFull } from "$lib/format/datetime";
import { toasts } from "$lib/stores/toasts.svelte";
import { getMediaVersions, listMessageVersions } from "#lib/api/endpoints.js";
import type { MediaVersion, MessageVersion } from "#lib/api/types.js";
import MediaVersionThumb from "#lib/components/MediaVersionThumb.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
chatId: number;
+5 -5
View File
@@ -1,9 +1,9 @@
<script lang="ts">
import { getPinned } from "$lib/api/endpoints";
import type { PinnedView } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import { mediaKindLabel } from "$lib/format/media";
import { accounts } from "$lib/stores/accounts.svelte";
import { getPinned } from "#lib/api/endpoints.js";
import type { PinnedView } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import { mediaKindLabel } from "#lib/format/media.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
interface Props {
chatId: number;
+1 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import type { PollView } from "$lib/api/types";
import type { PollView } from "#lib/api/types.js";
interface Props {
poll: PollView;
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import type { ReactionCount } from "$lib/api/types";
import CustomEmoji from "$lib/components/CustomEmoji.svelte";
import type { ReactionCount } from "#lib/api/types.js";
import CustomEmoji from "#lib/components/CustomEmoji.svelte";
interface Props {
onclick?: () => void;
@@ -1,8 +1,8 @@
<script lang="ts">
import type { ReplyView } from "$lib/api/types";
import { mediaKindLabel } from "$lib/format/media";
import { peerColorIndex, peerName } from "$lib/format/peer";
import { peers } from "$lib/stores/peers.svelte";
import type { ReplyView } from "#lib/api/types.js";
import { mediaKindLabel } from "#lib/format/media.js";
import { peerColorIndex, peerName } from "#lib/format/peer.js";
import { peers } from "#lib/stores/peers.svelte.js";
interface Props {
onjump?: (messageId: number) => void;
+18 -18
View File
@@ -1,22 +1,22 @@
<script lang="ts">
import AlertsPanel from "$lib/components/alerts/AlertsPanel.svelte";
import AnnotationsPanel from "$lib/components/annotations/AnnotationsPanel.svelte";
import BotsPanel from "$lib/components/bots/BotsPanel.svelte";
import JobsPanel from "$lib/components/jobs/JobsPanel.svelte";
import PolicyEditor from "$lib/components/policy/PolicyEditor.svelte";
import AnalyticsPanel from "$lib/components/presence/AnalyticsPanel.svelte";
import ProfilePanel from "$lib/components/profile/ProfilePanel.svelte";
import ChatSearchPanel from "$lib/components/search/ChatSearchPanel.svelte";
import SharesPanel from "$lib/components/shares/SharesPanel.svelte";
import CallbacksPanel from "$lib/components/social/CallbacksPanel.svelte";
import LinksPanel from "$lib/components/social/LinksPanel.svelte";
import ReactionsPanel from "$lib/components/social/ReactionsPanel.svelte";
import AllStoriesArchive from "$lib/components/stories/AllStoriesArchive.svelte";
import StoriesArchive from "$lib/components/stories/StoriesArchive.svelte";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import WatchesPanel from "$lib/components/watches/WatchesPanel.svelte";
import { type RightPanel, ui } from "$lib/stores/ui.svelte";
import AlertsPanel from "#lib/components/alerts/AlertsPanel.svelte";
import AnnotationsPanel from "#lib/components/annotations/AnnotationsPanel.svelte";
import BotsPanel from "#lib/components/bots/BotsPanel.svelte";
import JobsPanel from "#lib/components/jobs/JobsPanel.svelte";
import PolicyEditor from "#lib/components/policy/PolicyEditor.svelte";
import AnalyticsPanel from "#lib/components/presence/AnalyticsPanel.svelte";
import ProfilePanel from "#lib/components/profile/ProfilePanel.svelte";
import ChatSearchPanel from "#lib/components/search/ChatSearchPanel.svelte";
import SharesPanel from "#lib/components/shares/SharesPanel.svelte";
import CallbacksPanel from "#lib/components/social/CallbacksPanel.svelte";
import LinksPanel from "#lib/components/social/LinksPanel.svelte";
import ReactionsPanel from "#lib/components/social/ReactionsPanel.svelte";
import AllStoriesArchive from "#lib/components/stories/AllStoriesArchive.svelte";
import StoriesArchive from "#lib/components/stories/StoriesArchive.svelte";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import WatchesPanel from "#lib/components/watches/WatchesPanel.svelte";
import { type RightPanel, ui } from "#lib/stores/ui.svelte.js";
const titles: Record<RightPanel, string> = {
alerts: "Алерты",
+7 -7
View File
@@ -1,11 +1,11 @@
<script lang="ts">
import { enqueueBackfill, trackChat } from "$lib/api/endpoints";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { discover } from "$lib/stores/discover.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { enqueueBackfill, trackChat } from "#lib/api/endpoints.js";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { discover } from "#lib/stores/discover.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
chatId: number;
+3 -3
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import type { MessageView } from "$lib/api/types";
import MessageMedia from "$lib/components/MessageMedia.svelte";
import { safeHref } from "$lib/format/url";
import type { MessageView } from "#lib/api/types.js";
import MessageMedia from "#lib/components/MessageMedia.svelte";
import { safeHref } from "#lib/format/url.js";
interface Props {
message: MessageView;
@@ -1,5 +1,5 @@
<script lang="ts">
import type { Alert } from "$lib/api/types";
import type { Alert } from "#lib/api/types.js";
import Button from "../ui/Button.svelte";
import Icon from "../ui/Icon.svelte";
@@ -1,7 +1,7 @@
<script lang="ts">
import { listAlerts, markAlertSeen } from "$lib/api/endpoints";
import type { Alert } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { listAlerts, markAlertSeen } from "#lib/api/endpoints.js";
import type { Alert } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import Spinner from "../ui/Spinner.svelte";
import AlertList from "./AlertList.svelte";
@@ -1,6 +1,6 @@
<script lang="ts">
import type { Annotation } from "$lib/api/types";
import { formatFull } from "$lib/format/datetime";
import type { Annotation } from "#lib/api/types.js";
import { formatFull } from "#lib/format/datetime.js";
import Icon from "../ui/Icon.svelte";
import AnnotationEditor from "./AnnotationEditor.svelte";
@@ -1,17 +1,17 @@
<script lang="ts">
import { untrack } from "svelte";
import { page } from "$app/state";
import {
createAnnotation,
deleteAnnotation,
listAnnotations,
updateAnnotation,
} from "$lib/api/endpoints";
import type { Annotation } from "$lib/api/types";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
} from "#lib/api/endpoints.js";
import type { Annotation } from "#lib/api/types.js";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
import AnnotationEditor from "./AnnotationEditor.svelte";
import AnnotationList from "./AnnotationList.svelte";
@@ -3,14 +3,14 @@
addWatchedBot,
listWatchedBots,
removeWatchedBot,
} from "$lib/api/endpoints";
import type { WatchedBot } from "$lib/api/types";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
} from "#lib/api/endpoints.js";
import type { WatchedBot } from "#lib/api/types.js";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
let bots = $state<WatchedBot[]>([]);
let loading = $state(true);
@@ -1,10 +1,10 @@
<script lang="ts">
import { cancelJob, listJobs } from "$lib/api/endpoints";
import type { JobStatus, JobView } from "$lib/api/types";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatFull } from "$lib/format/datetime";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { cancelJob, listJobs } from "#lib/api/endpoints.js";
import type { JobStatus, JobView } from "#lib/api/types.js";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
version?: number;
@@ -1,17 +1,17 @@
<script lang="ts">
import { onMount } from "svelte";
import { page } from "$app/state";
import {
enqueueBackfill,
syncContacts,
syncDialogs,
} from "$lib/api/endpoints";
import JobList from "$lib/components/jobs/JobList.svelte";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { createChatPicker } from "$lib/stores/chat-picker.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
} from "#lib/api/endpoints.js";
import JobList from "#lib/components/jobs/JobList.svelte";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { createChatPicker } from "#lib/stores/chat-picker.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { page } from "$app/state";
let version = $state(0);
let selected = $state<number | null>(
@@ -1,12 +1,16 @@
<script lang="ts">
import { visible } from "$lib/actions/visible";
import { fetchMedia } from "$lib/api/endpoints";
import { type InlineMedia, loadMediaItem, visualKind } from "$lib/api/media";
import type { MediaRef } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { poster } from "$lib/media/poster";
import { toasts } from "$lib/stores/toasts.svelte";
import { visible } from "#lib/actions/visible.js";
import { fetchMedia } from "#lib/api/endpoints.js";
import {
type InlineMedia,
loadMediaItem,
visualKind,
} from "#lib/api/media.js";
import type { MediaRef } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { poster } from "#lib/media/poster.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
chatId: number;
@@ -1,7 +1,7 @@
<script lang="ts">
import Icon from "$lib/components/ui/Icon.svelte";
import { formatDuration } from "$lib/format/duration";
import { claimPlayback, releasePlayback } from "$lib/media/playback";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatDuration } from "#lib/format/duration.js";
import { claimPlayback, releasePlayback } from "#lib/media/playback.js";
interface Props {
own: boolean;
@@ -1,10 +1,10 @@
<script lang="ts">
import { downloadMedia } from "$lib/api/download";
import type { MediaRef } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import { formatBytes, mediaKindLabel } from "$lib/format/media";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { downloadMedia } from "#lib/api/download.js";
import type { MediaRef } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatBytes, mediaKindLabel } from "#lib/format/media.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
media: MediaRef;
@@ -1,8 +1,8 @@
<script lang="ts">
import Icon from "$lib/components/ui/Icon.svelte";
import { formatDuration } from "$lib/format/duration";
import { claimPlayback, releasePlayback } from "$lib/media/playback";
import { POSTER_TIME, poster } from "$lib/media/poster";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatDuration } from "#lib/format/duration.js";
import { claimPlayback, releasePlayback } from "#lib/media/playback.js";
import { POSTER_TIME, poster } from "#lib/media/poster.js";
interface Props {
transcript?: string | null;
@@ -1,11 +1,11 @@
<script lang="ts">
import { requestTranscription } from "$lib/api/media";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatDuration } from "$lib/format/duration";
import { claimPlayback, releasePlayback } from "$lib/media/playback";
import { computeWaveform, flatWaveform } from "$lib/media/waveform";
import { toasts } from "$lib/stores/toasts.svelte";
import { requestTranscription } from "#lib/api/media.js";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatDuration } from "#lib/format/duration.js";
import { claimPlayback, releasePlayback } from "#lib/media/playback.js";
import { computeWaveform, flatWaveform } from "#lib/media/waveform.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
chatId: number;
@@ -1,5 +1,5 @@
<script lang="ts">
import type { CaptureToggles } from "$lib/api/types";
import type { CaptureToggles } from "#lib/api/types.js";
interface Props {
disabled?: boolean;
@@ -5,20 +5,20 @@
listFolders,
listPolicies,
updatePolicy,
} from "$lib/api/endpoints";
} from "#lib/api/endpoints.js";
import type {
CaptureToggles,
Folder,
PolicyRecord,
PolicyScopeType,
} from "$lib/api/types";
import CaptureToggleList from "$lib/components/policy/CaptureToggleList.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { createChatPicker } from "$lib/stores/chat-picker.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
} from "#lib/api/types.js";
import CaptureToggleList from "#lib/components/policy/CaptureToggleList.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { createChatPicker } from "#lib/stores/chat-picker.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
let policies = $state<PolicyRecord[]>([]);
let folders = $state<Folder[]>([]);
@@ -1,25 +1,25 @@
<script lang="ts">
import { page } from "$app/state";
import {
getCurrentPresence,
getMessageVolume,
getPresenceHistory,
getPresenceHourly,
getResponseStats,
} from "$lib/api/endpoints";
} from "#lib/api/endpoints.js";
import type {
PresenceHourly,
PresenceSample,
ResponseStats,
VolumeBucket,
} from "$lib/api/types";
import PresenceHeatmap from "$lib/components/presence/PresenceHeatmap.svelte";
import VolumeChart from "$lib/components/presence/VolumeChart.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import { formatFull } from "$lib/format/datetime";
import { formatPresence } from "$lib/format/presence";
import { accounts } from "$lib/stores/accounts.svelte";
import { events } from "$lib/stores/events.svelte";
} from "#lib/api/types.js";
import PresenceHeatmap from "#lib/components/presence/PresenceHeatmap.svelte";
import VolumeChart from "#lib/components/presence/VolumeChart.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { formatPresence } from "#lib/format/presence.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { events } from "#lib/stores/events.svelte.js";
import { page } from "$app/state";
const HISTORY_LIMIT = 200;
const SECONDS_IN_MINUTE = 60;
@@ -1,5 +1,5 @@
<script lang="ts">
import type { PresenceHourly } from "$lib/api/types";
import type { PresenceHourly } from "#lib/api/types.js";
interface Props {
hourly: PresenceHourly[];
@@ -1,5 +1,5 @@
<script lang="ts">
import type { VolumeBucket } from "$lib/api/types";
import type { VolumeBucket } from "#lib/api/types.js";
interface Props {
volume: VolumeBucket[];
@@ -1,10 +1,10 @@
<script lang="ts">
import { untrack } from "svelte";
import { type AvatarKind, loadAvatarVariant } from "$lib/api/avatars";
import { getAvatarHistory } from "$lib/api/endpoints";
import type { AvatarHistoryView } from "$lib/api/types";
import { formatFull } from "$lib/format/datetime";
import { accounts } from "$lib/stores/accounts.svelte";
import { type AvatarKind, loadAvatarVariant } from "#lib/api/avatars.js";
import { getAvatarHistory } from "#lib/api/endpoints.js";
import type { AvatarHistoryView } from "#lib/api/types.js";
import { formatFull } from "#lib/format/datetime.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
interface Props {
id: number;
@@ -1,11 +1,11 @@
<script lang="ts">
import { getChatCalendar, getMessageAt } from "#lib/api/endpoints.js";
import type { DayCount } from "#lib/api/types.js";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { getChatCalendar, getMessageAt } from "$lib/api/endpoints";
import type { DayCount } from "$lib/api/types";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
interface Props {
chatId: number;
@@ -1,12 +1,12 @@
<script lang="ts">
import type { AvatarKind } from "$lib/api/avatars";
import { getPeerHistory, getStories } from "$lib/api/endpoints";
import type { PeerHistoryView, PeerView } from "$lib/api/types";
import AvatarHistory from "$lib/components/profile/AvatarHistory.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { formatFull } from "$lib/format/datetime";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
import type { AvatarKind } from "#lib/api/avatars.js";
import { getPeerHistory, getStories } from "#lib/api/endpoints.js";
import type { PeerHistoryView, PeerView } from "#lib/api/types.js";
import AvatarHistory from "#lib/components/profile/AvatarHistory.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
interface Props {
avatarKind: AvatarKind;
@@ -1,17 +1,17 @@
<script lang="ts">
import { getPeer } from "#lib/api/endpoints.js";
import type { PeerView } from "#lib/api/types.js";
import ChatCalendar from "#lib/components/profile/ChatCalendar.svelte";
import ProfileInfo from "#lib/components/profile/ProfileInfo.svelte";
import SharedLinks from "#lib/components/profile/SharedLinks.svelte";
import SharedMedia from "#lib/components/profile/SharedMedia.svelte";
import StoriesArchive from "#lib/components/stories/StoriesArchive.svelte";
import Avatar from "#lib/components/ui/Avatar.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { peerName } from "#lib/format/peer.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { page } from "$app/state";
import { getPeer } from "$lib/api/endpoints";
import type { PeerView } from "$lib/api/types";
import ChatCalendar from "$lib/components/profile/ChatCalendar.svelte";
import ProfileInfo from "$lib/components/profile/ProfileInfo.svelte";
import SharedLinks from "$lib/components/profile/SharedLinks.svelte";
import SharedMedia from "$lib/components/profile/SharedMedia.svelte";
import StoriesArchive from "$lib/components/stories/StoriesArchive.svelte";
import Avatar from "$lib/components/ui/Avatar.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { peerName } from "$lib/format/peer";
import { chats } from "$lib/stores/chats.svelte";
type Tab = "info" | "media" | "files" | "links" | "stories" | "calendar";
@@ -1,15 +1,15 @@
<script lang="ts">
import { untrack } from "svelte";
import { getChatLinks } from "#lib/api/endpoints.js";
import type { ChatLinkView } from "#lib/api/types.js";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatListDate } from "#lib/format/datetime.js";
import { safeHref } from "#lib/format/url.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { getChatLinks } from "$lib/api/endpoints";
import type { ChatLinkView } from "$lib/api/types";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatListDate } from "$lib/format/datetime";
import { safeHref } from "$lib/format/url";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
const WWW_PREFIX = /^www\./;
@@ -1,29 +1,29 @@
<script lang="ts">
import { untrack } from "svelte";
import { goto } from "$app/navigation";
import { downloadMedia } from "$lib/api/download";
import { getChatMedia } from "$lib/api/endpoints";
import { downloadMedia } from "#lib/api/download.js";
import { getChatMedia } from "#lib/api/endpoints.js";
import {
type InlineMedia,
loadMediaItem,
type ViewerItem,
visualKind,
} from "$lib/api/media";
import type { MediaView } from "$lib/api/types";
import MediaViewer from "$lib/components/MediaViewer.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatListDate } from "$lib/format/datetime";
import { formatBytes, mediaKindLabel } from "$lib/format/media";
import { poster } from "$lib/media/poster";
import { accounts } from "$lib/stores/accounts.svelte";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
import { isMobile } from "$lib/viewport";
} from "#lib/api/media.js";
import type { MediaView } from "#lib/api/types.js";
import MediaViewer from "#lib/components/MediaViewer.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatListDate } from "#lib/format/datetime.js";
import { formatBytes, mediaKindLabel } from "#lib/format/media.js";
import { poster } from "#lib/media/poster.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { isMobile } from "#lib/viewport.js";
import { goto } from "$app/navigation";
interface Props {
chatId: number;
@@ -1,13 +1,13 @@
<script lang="ts">
import { searchMessages } from "#lib/api/endpoints.js";
import type { SearchHit } from "#lib/api/types.js";
import SearchMessageItem from "#lib/components/search/SearchMessageItem.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { page } from "$app/state";
import { searchMessages } from "$lib/api/endpoints";
import type { SearchHit } from "$lib/api/types";
import SearchMessageItem from "$lib/components/search/SearchMessageItem.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { ui } from "$lib/stores/ui.svelte";
const DEBOUNCE_MS = 250;
@@ -1,7 +1,7 @@
<script lang="ts">
import { ripple } from "$lib/actions/ripple";
import type { DiscoverItem } from "$lib/api/types";
import Avatar from "$lib/components/ui/Avatar.svelte";
import { ripple } from "#lib/actions/ripple.js";
import type { DiscoverItem } from "#lib/api/types.js";
import Avatar from "#lib/components/ui/Avatar.svelte";
interface Props {
item: DiscoverItem;
@@ -1,6 +1,6 @@
<script lang="ts">
import Icon from "$lib/components/ui/Icon.svelte";
import { search } from "$lib/stores/search.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { search } from "#lib/stores/search.svelte.js";
let input = $state<HTMLInputElement | null>(null);
@@ -1,12 +1,12 @@
<script lang="ts">
import { ripple } from "$lib/actions/ripple";
import type { SearchHit } from "$lib/api/types";
import Avatar from "$lib/components/ui/Avatar.svelte";
import { formatListDate } from "$lib/format/datetime";
import { peerName } from "$lib/format/peer";
import { accounts } from "$lib/stores/accounts.svelte";
import { chats } from "$lib/stores/chats.svelte";
import { peers } from "$lib/stores/peers.svelte";
import { ripple } from "#lib/actions/ripple.js";
import type { SearchHit } from "#lib/api/types.js";
import Avatar from "#lib/components/ui/Avatar.svelte";
import { formatListDate } from "#lib/format/datetime.js";
import { peerName } from "#lib/format/peer.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { chats } from "#lib/stores/chats.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
interface Props {
hit: SearchHit;
@@ -1,13 +1,13 @@
<script lang="ts">
import ChatListItem from "#lib/components/ChatListItem.svelte";
import DiscoverResultItem from "#lib/components/search/DiscoverResultItem.svelte";
import SearchMessageItem from "#lib/components/search/SearchMessageItem.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { search } from "#lib/stores/search.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { page } from "$app/state";
import ChatListItem from "$lib/components/ChatListItem.svelte";
import DiscoverResultItem from "$lib/components/search/DiscoverResultItem.svelte";
import SearchMessageItem from "$lib/components/search/SearchMessageItem.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { search } from "$lib/stores/search.svelte";
import { ui } from "$lib/stores/ui.svelte";
const activeChatId = $derived(
page.params.chatId ? Number(page.params.chatId) : null
@@ -1,7 +1,7 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { untrack } from "svelte";
import { ApiError } from "$lib/api/client";
import { ApiError } from "#lib/api/client.js";
import {
cancelLogin,
pollQrLogin,
@@ -9,13 +9,13 @@
startQrLogin,
submitLoginCode,
submitLoginPassword,
} from "$lib/api/endpoints";
import type { LoginState } from "$lib/api/types";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import QrCode from "$lib/components/ui/QrCode.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
} from "#lib/api/endpoints.js";
import type { LoginState } from "#lib/api/types.js";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import QrCode from "#lib/components/ui/QrCode.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
type Step = "qr" | "phone" | "code" | "password";
@@ -1,6 +1,6 @@
<script lang="ts">
import { ripple } from "$lib/actions/ripple";
import { theme } from "$lib/stores/theme.svelte";
import { ripple } from "#lib/actions/ripple.js";
import { theme } from "#lib/stores/theme.svelte.js";
const options = [
{ label: "Светлая", value: "light" },
@@ -1,15 +1,15 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { ripple } from "$lib/actions/ripple";
import { ApiError } from "$lib/api/client";
import AddAccountDialog from "$lib/components/settings/AddAccountDialog.svelte";
import SettingsItem from "$lib/components/settings/SettingsItem.svelte";
import Avatar from "$lib/components/ui/Avatar.svelte";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { accountName } from "$lib/format/peer";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ripple } from "#lib/actions/ripple.js";
import { ApiError } from "#lib/api/client.js";
import AddAccountDialog from "#lib/components/settings/AddAccountDialog.svelte";
import SettingsItem from "#lib/components/settings/SettingsItem.svelte";
import Avatar from "#lib/components/ui/Avatar.svelte";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { accountName } from "#lib/format/peer.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
const current = $derived(accounts.selected);
const others = $derived(
@@ -1,11 +1,11 @@
<script lang="ts">
import About from "$lib/components/settings/About.svelte";
import Appearance from "$lib/components/settings/Appearance.svelte";
import MyAccount from "$lib/components/settings/MyAccount.svelte";
import SettingsItem from "$lib/components/settings/SettingsItem.svelte";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { ui } from "$lib/stores/ui.svelte";
import About from "#lib/components/settings/About.svelte";
import Appearance from "#lib/components/settings/Appearance.svelte";
import MyAccount from "#lib/components/settings/MyAccount.svelte";
import SettingsItem from "#lib/components/settings/SettingsItem.svelte";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { ui } from "#lib/stores/ui.svelte.js";
const features = [
{ icon: "search", label: "Поиск" },
@@ -1,6 +1,6 @@
<script lang="ts">
import { ripple } from "$lib/actions/ripple";
import Icon from "$lib/components/ui/Icon.svelte";
import { ripple } from "#lib/actions/ripple.js";
import Icon from "#lib/components/ui/Icon.svelte";
interface Props {
icon: string;
@@ -1,7 +1,7 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { untrack } from "svelte";
import { ApiError } from "$lib/api/client";
import { ApiError } from "#lib/api/client.js";
import {
createShare,
lookupShare,
@@ -9,15 +9,15 @@
type ShareSettings,
shareUrl,
updateShare,
} from "$lib/api/shares";
import type { FileShare, ShareSubject } from "$lib/api/types";
import ShareLinkField from "$lib/components/shares/ShareLinkField.svelte";
import Button from "$lib/components/ui/Button.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import QrCode from "$lib/components/ui/QrCode.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatShareLimits } from "$lib/format/shares";
import { toasts } from "$lib/stores/toasts.svelte";
} from "#lib/api/shares.js";
import type { FileShare, ShareSubject } from "#lib/api/types.js";
import ShareLinkField from "#lib/components/shares/ShareLinkField.svelte";
import Button from "#lib/components/ui/Button.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import QrCode from "#lib/components/ui/QrCode.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatShareLimits } from "#lib/format/shares.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
label?: string;
@@ -1,6 +1,6 @@
<script lang="ts">
import Icon from "$lib/components/ui/Icon.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
url: string;
@@ -1,5 +1,4 @@
<script lang="ts">
import { goto } from "$app/navigation";
import {
deleteShare,
listShares,
@@ -7,21 +6,22 @@
revokeShare,
shareState,
shareUrl,
} from "$lib/api/shares";
import type { FileShare } from "$lib/api/types";
import ShareLinkField from "$lib/components/shares/ShareLinkField.svelte";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatFull } from "$lib/format/datetime";
import { formatBytes } from "$lib/format/media";
import { formatDownloads, formatExpiry, plural } from "$lib/format/shares";
import { accounts } from "$lib/stores/accounts.svelte";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
} from "#lib/api/shares.js";
import type { FileShare } from "#lib/api/types.js";
import ShareLinkField from "#lib/components/shares/ShareLinkField.svelte";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { formatBytes } from "#lib/format/media.js";
import { formatDownloads, formatExpiry, plural } from "#lib/format/shares.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
type Filter = "active" | "all";
@@ -1,13 +1,13 @@
<script lang="ts">
import { untrack } from "svelte";
import { getMessageCallbacks } from "#lib/api/endpoints.js";
import type { CallbackView } from "#lib/api/types.js";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
import { getMessageCallbacks } from "$lib/api/endpoints";
import type { CallbackView } from "$lib/api/types";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
const HEX_PAIR = /.{1,2}/g;
const MIN_PRINTABLE = 32;
@@ -1,14 +1,14 @@
<script lang="ts">
import { untrack } from "svelte";
import { getMessageLinks } from "#lib/api/endpoints.js";
import type { LinkView } from "#lib/api/types.js";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { safeHref } from "#lib/format/url.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
import { getMessageLinks } from "$lib/api/endpoints";
import type { LinkView } from "$lib/api/types";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { safeHref } from "$lib/format/url";
import { accounts } from "$lib/stores/accounts.svelte";
import { ui } from "$lib/stores/ui.svelte";
const WWW_PREFIX = /^www\./;
@@ -1,17 +1,17 @@
<script lang="ts">
import { untrack } from "svelte";
import { getMessageReactions } from "#lib/api/endpoints.js";
import type { ReactionView } from "#lib/api/types.js";
import CustomEmoji from "#lib/components/CustomEmoji.svelte";
import Avatar from "#lib/components/ui/Avatar.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { peerColorIndex, peerName } from "#lib/format/peer.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
import { getMessageReactions } from "$lib/api/endpoints";
import type { ReactionView } from "$lib/api/types";
import CustomEmoji from "$lib/components/CustomEmoji.svelte";
import Avatar from "$lib/components/ui/Avatar.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatFull } from "$lib/format/datetime";
import { peerColorIndex, peerName } from "$lib/format/peer";
import { accounts } from "$lib/stores/accounts.svelte";
import { peers } from "$lib/stores/peers.svelte";
import { ui } from "$lib/stores/ui.svelte";
const CUSTOM_PREFIX = "custom:";
@@ -5,20 +5,20 @@
getChatsBatch,
getPeers,
getStories,
} from "$lib/api/endpoints";
import { loadStoryMedia } from "$lib/api/stories";
import type { StoryView } from "$lib/api/types";
import StoryTile from "$lib/components/stories/StoryTile.svelte";
import StoryViewer from "$lib/components/stories/StoryViewer.svelte";
import Avatar from "$lib/components/ui/Avatar.svelte";
import Button from "$lib/components/ui/Button.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { peerName } from "$lib/format/peer";
import { poster } from "$lib/media/poster";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
} from "#lib/api/endpoints.js";
import { loadStoryMedia } from "#lib/api/stories.js";
import type { StoryView } from "#lib/api/types.js";
import StoryTile from "#lib/components/stories/StoryTile.svelte";
import StoryViewer from "#lib/components/stories/StoryViewer.svelte";
import Avatar from "#lib/components/ui/Avatar.svelte";
import Button from "#lib/components/ui/Button.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { peerName } from "#lib/format/peer.js";
import { poster } from "#lib/media/poster.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Group {
hasAvatar: boolean;
@@ -1,18 +1,18 @@
<script lang="ts">
import { untrack } from "svelte";
import { enqueueStoriesBackfill, getStories } from "#lib/api/endpoints.js";
import { loadStoryMedia } from "#lib/api/stories.js";
import type { StoryView } from "#lib/api/types.js";
import StoryTile from "#lib/components/stories/StoryTile.svelte";
import StoryViewer from "#lib/components/stories/StoryViewer.svelte";
import Button from "#lib/components/ui/Button.svelte";
import EmptyState from "#lib/components/ui/EmptyState.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { poster } from "#lib/media/poster.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { page } from "$app/state";
import { enqueueStoriesBackfill, getStories } from "$lib/api/endpoints";
import { loadStoryMedia } from "$lib/api/stories";
import type { StoryView } from "$lib/api/types";
import StoryTile from "$lib/components/stories/StoryTile.svelte";
import StoryViewer from "$lib/components/stories/StoryViewer.svelte";
import Button from "$lib/components/ui/Button.svelte";
import EmptyState from "$lib/components/ui/EmptyState.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { poster } from "$lib/media/poster";
import { accounts } from "$lib/stores/accounts.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
interface Props {
chatId?: number | null;
@@ -1,15 +1,15 @@
<script lang="ts">
import { downloadStory } from "#lib/api/download.js";
import type { StoryView } from "#lib/api/types.js";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { poster } from "#lib/media/poster.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { goto } from "$app/navigation";
import { downloadStory } from "$lib/api/download";
import type { StoryView } from "$lib/api/types";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import { formatFull } from "$lib/format/datetime";
import { poster } from "$lib/media/poster";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { ui } from "$lib/stores/ui.svelte";
interface Props {
onopen: () => void;
@@ -1,16 +1,16 @@
<script lang="ts">
import { Dialog } from "bits-ui";
import { untrack } from "svelte";
import { downloadStory } from "$lib/api/download";
import { loadStoryMedia } from "$lib/api/stories";
import type { StoryView } from "$lib/api/types";
import ContextMenu from "$lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "$lib/components/ui/ContextMenuItem.svelte";
import Icon from "$lib/components/ui/Icon.svelte";
import Spinner from "$lib/components/ui/Spinner.svelte";
import { formatFull } from "$lib/format/datetime";
import { shareUi } from "$lib/stores/shares.svelte";
import { toasts } from "$lib/stores/toasts.svelte";
import { downloadStory } from "#lib/api/download.js";
import { loadStoryMedia } from "#lib/api/stories.js";
import type { StoryView } from "#lib/api/types.js";
import ContextMenu from "#lib/components/ui/ContextMenu.svelte";
import ContextMenuItem from "#lib/components/ui/ContextMenuItem.svelte";
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { shareUi } from "#lib/stores/shares.svelte.js";
import { toasts } from "#lib/stores/toasts.svelte.js";
interface Props {
index: number;
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import { type AvatarKind, loadAvatar } from "$lib/api/avatars";
import { initials as toInitials } from "$lib/format/peer";
import { type AvatarKind, loadAvatar } from "#lib/api/avatars.js";
import { initials as toInitials } from "#lib/format/peer.js";
interface Props {
avatar?: { kind: AvatarKind; id: number } | null;
+1 -1
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import type { Snippet } from "svelte";
import type { HTMLButtonAttributes } from "svelte/elements";
import { ripple } from "$lib/actions/ripple";
import { ripple } from "#lib/actions/ripple.js";
type Variant =
| "primary"
@@ -1,6 +1,6 @@
<script lang="ts">
import type { Snippet } from "svelte";
import { ripple } from "$lib/actions/ripple";
import { ripple } from "#lib/actions/ripple.js";
interface Props {
children: Snippet;
@@ -1,5 +1,5 @@
<script lang="ts">
import { toasts } from "$lib/stores/toasts.svelte";
import { toasts } from "#lib/stores/toasts.svelte.js";
</script>
<div class="Notification-container">
@@ -1,7 +1,7 @@
<script lang="ts">
import type { Watch } from "$lib/api/types";
import { peerName } from "$lib/format/peer";
import { peers } from "$lib/stores/peers.svelte";
import type { Watch } from "#lib/api/types.js";
import { peerName } from "#lib/format/peer.js";
import { peers } from "#lib/stores/peers.svelte.js";
import Button from "../ui/Button.svelte";
import Icon from "../ui/Icon.svelte";
@@ -4,9 +4,9 @@
deleteWatch,
listWatches,
updateWatch,
} from "$lib/api/endpoints";
import type { Watch } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
} from "#lib/api/endpoints.js";
import type { Watch } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import Spinner from "../ui/Spinner.svelte";
import WatchEditor from "./WatchEditor.svelte";
import WatchList from "./WatchList.svelte";
+2 -2
View File
@@ -1,5 +1,5 @@
import type { EntityView } from "$lib/api/types";
import { safeHref } from "$lib/format/url";
import type { EntityView } from "#lib/api/types.js";
import { safeHref } from "#lib/format/url.js";
export interface TextNode {
kind: "text";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Chat, Folder } from "$lib/api/types";
import type { Chat, Folder } from "#lib/api/types.js";
function categoryMatch(folder: Folder, chat: Chat): boolean {
if (chat.is_broadcast) {
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Account, PeerView } from "$lib/api/types";
import type { Account, PeerView } from "#lib/api/types.js";
const PEER_COLOR_COUNT = 7;
+2 -2
View File
@@ -1,5 +1,5 @@
import type { PresenceSample } from "$lib/api/types";
import { formatListDate } from "$lib/format/datetime";
import type { PresenceSample } from "#lib/api/types.js";
import { formatListDate } from "#lib/format/datetime.js";
export function isOnline(sample: PresenceSample | null): boolean {
if (sample === null || sample.status !== "online") {
+2 -2
View File
@@ -1,5 +1,5 @@
import type { FileShare } from "$lib/api/types";
import { formatFull } from "$lib/format/datetime";
import type { FileShare } from "#lib/api/types.js";
import { formatFull } from "#lib/format/datetime.js";
const TEEN_START = 11;
const TEEN_END = 14;
+1 -1
View File
@@ -1,2 +1,2 @@
// place files you want to import through the `$lib` alias in this folder.
// place files you want to import through the `#lib` alias in this folder.
// biome-ignore-all lint/suspicious/noEmptySource: temporary
+3 -3
View File
@@ -1,10 +1,10 @@
import { browser } from "$app/environment";
import {
listAccounts,
logoutAccount,
renameAccountDevice,
} from "$lib/api/endpoints";
import type { Account } from "$lib/api/types";
} from "#lib/api/endpoints.js";
import type { Account } from "#lib/api/types.js";
import { browser } from "$app/env";
const STORAGE_KEY = "bg.account";
+1 -1
View File
@@ -1,4 +1,4 @@
import { browser } from "$app/environment";
import { browser } from "$app/env";
const STORAGE_KEY = "bg.token";
@@ -1,5 +1,5 @@
import { listChats } from "$lib/api/endpoints";
import type { Chat } from "$lib/api/types";
import { listChats } from "#lib/api/endpoints.js";
import type { Chat } from "#lib/api/types.js";
const DEBOUNCE_MS = 250;
const LIMIT = 40;
+6 -6
View File
@@ -4,12 +4,12 @@ import {
getChatsBatch,
getJob,
listChats,
} from "$lib/api/endpoints";
import type { Chat, LiveEvent } from "$lib/api/types";
import { folderContains } from "$lib/format/folders";
import { accounts } from "$lib/stores/accounts.svelte";
import { events } from "$lib/stores/events.svelte";
import { folders } from "$lib/stores/folders.svelte";
} from "#lib/api/endpoints.js";
import type { Chat, LiveEvent } from "#lib/api/types.js";
import { folderContains } from "#lib/format/folders.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { events } from "#lib/stores/events.svelte.js";
import { folders } from "#lib/stores/folders.svelte.js";
const POLL_INTERVAL = 1500;
const POLL_MAX = 12;
+3 -3
View File
@@ -1,6 +1,6 @@
import { getDiscoverItem } from "$lib/api/endpoints";
import type { DiscoverItem } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { getDiscoverItem } from "#lib/api/endpoints.js";
import type { DiscoverItem } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
function createDiscover() {
let items = $state<Record<number, DiscoverItem>>({});
+5 -4
View File
@@ -1,8 +1,9 @@
import { browser } from "$app/environment";
import type { LiveEvent } from "$lib/api/types";
import { auth } from "$lib/stores/auth.svelte";
import type { LiveEvent } from "#lib/api/types.js";
import { auth } from "#lib/stores/auth.svelte.js";
import { browser } from "$app/env";
import { PUBLIC_API_BASE_URL } from "$app/env/public";
const BASE = import.meta.env.VITE_API_BASE ?? "/api";
const BASE = PUBLIC_API_BASE_URL;
const RECONNECT_DELAY = 2000;
const STALL_TIMEOUT = 45_000;
+3 -3
View File
@@ -1,6 +1,6 @@
import { listFolders } from "$lib/api/endpoints";
import type { Folder } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { listFolders } from "#lib/api/endpoints.js";
import type { Folder } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
function createFolders() {
let list = $state<Folder[]>([]);
+3 -3
View File
@@ -1,6 +1,6 @@
import { getPeers } from "$lib/api/endpoints";
import type { PeerView } from "$lib/api/types";
import { accounts } from "$lib/stores/accounts.svelte";
import { getPeers } from "#lib/api/endpoints.js";
import type { PeerView } from "#lib/api/types.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
const BATCH_DELAY = 40;
+6 -2
View File
@@ -1,5 +1,9 @@
import { discoverPeers, listChats, searchMessages } from "$lib/api/endpoints";
import type { Chat, DiscoverItem, SearchHit } from "$lib/api/types";
import {
discoverPeers,
listChats,
searchMessages,
} from "#lib/api/endpoints.js";
import type { Chat, DiscoverItem, SearchHit } from "#lib/api/types.js";
const DEBOUNCE_MS = 250;
const REMOTE_DEBOUNCE_MS = 700;
+1 -1
View File
@@ -1,4 +1,4 @@
import type { ShareSubject } from "$lib/api/types";
import type { ShareSubject } from "#lib/api/types.js";
function createShareUi() {
let open = $state(false);
Loaded 100 of 116 files, more files were not shown because too many files have changed in this diff. Show more