mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2026-07-23 11:10:55 -05:00
* feat: WIP * feat: Replace conversation rename flow with unified AlertDialog component * feat: Add radio group component and consolidate title generation settings * refactor: Remove JS Sandbox global toggle and migrate legacy user state * chore: Formatting * refactor: Cleanup Co-authored-by: Aleksander Grygier <aleksander.grygier@gmail.com> * refactor: Cleanup * refactor: Marquee selection hook * feat: UI improvements * refactor: Bulk db operations * fix: optimize bulk conversation deletion to handle ancestor chains * refactor: remove pairedKey mechanism from settings system * fix: remove redundant onclick handler from dialog cancel button * chore: pin @lucide/svelte to exact version * feat: Run JavaScript tool disabled by default * fix: correct active conversation deletion tracking in bulk delete * feat: improve shift-key multi-selection support in sidebar via keyboard * refactor: Retrieve JS Tool enabling via Developer Settings * nits: sync, dialog wording, cycle guard, and lockfile follow-ups - Restore titleGenerationUseLLM registry entry so it syncs across devices again - Mention fork cascade in the bulk delete confirmation dialog - Clear newParent on cycle guard break so children never point at a deleted conversation - Align @lucide/svelte in package-lock.json with the exact pin in package.json --------- Co-authored-by: Pascal <admin@serveurperso.com>
71 lines
1.7 KiB
Svelte
71 lines
1.7 KiB
Svelte
<script lang="ts">
|
|
import * as Dialog from '$lib/components/ui/dialog';
|
|
import { ConversationSelection } from '$lib/components/app';
|
|
|
|
interface Props {
|
|
conversations: DatabaseConversation[];
|
|
messageCountMap?: Map<string, number>;
|
|
mode: 'export' | 'import';
|
|
onCancel: () => void;
|
|
onConfirm: (selectedConversations: DatabaseConversation[]) => void;
|
|
open?: boolean;
|
|
}
|
|
|
|
let {
|
|
conversations,
|
|
messageCountMap = new Map(),
|
|
mode,
|
|
onCancel,
|
|
onConfirm,
|
|
open = $bindable(false)
|
|
}: Props = $props();
|
|
|
|
let conversationSelectionRef: ConversationSelection | undefined = $state();
|
|
|
|
let previousOpen = $state(false);
|
|
|
|
$effect(() => {
|
|
if (open && !previousOpen && conversationSelectionRef) {
|
|
conversationSelectionRef.reset();
|
|
} else if (!open && previousOpen) {
|
|
onCancel();
|
|
}
|
|
|
|
previousOpen = open;
|
|
});
|
|
</script>
|
|
|
|
<Dialog.Root bind:open>
|
|
<Dialog.Portal>
|
|
<Dialog.Overlay class="z-1000000" />
|
|
|
|
<Dialog.Content class="z-1000001 max-w-2xl">
|
|
<Dialog.Header>
|
|
<Dialog.Title>
|
|
Select Conversations to {mode === 'export' ? 'Export' : 'Import'}
|
|
</Dialog.Title>
|
|
|
|
<Dialog.Description>
|
|
{#if mode === 'export'}
|
|
Choose which conversations you want to export. Selected conversations will be downloaded
|
|
as a JSON file.
|
|
{:else}
|
|
Choose which conversations you want to import. Selected conversations will be merged
|
|
with your existing conversations.
|
|
{/if}
|
|
</Dialog.Description>
|
|
</Dialog.Header>
|
|
|
|
<ConversationSelection
|
|
bind:this={conversationSelectionRef}
|
|
isOpen={open}
|
|
{conversations}
|
|
{messageCountMap}
|
|
{mode}
|
|
{onCancel}
|
|
{onConfirm}
|
|
/>
|
|
</Dialog.Content>
|
|
</Dialog.Portal>
|
|
</Dialog.Root>
|