* wip: server_tools * feat: Integrate with `/tools` endpoint * feat: Builtin + MCP + JSON Schema Tools WIP * refactor * displayName -> display_name * snake_case everywhere * rm redundant field * feat: Improvements * chore: update webui build output * refactor: Updates after server updates * chore: update webui build output * change arg to --tools all * feat: UI improvements * chore: update webui build output * add readme mention * llama-gen-docs * chore: update webui build output * chore: update webui build output * chore: update webui build output * feat: Reorganize settings sections * feat: Separate dialogs for MCP Servers Settings and Import/Export * feat: WIP * feat: WIP * feat: WIP * feat: WIP * feat: WIP * feat: WIP * WIP on allozaur/20677-webui-server-tools * feat: UI improvements * chore: Update package lock * chore: Run `npm audit fix` * feat: UI WIP * feat: UI * refactor: Desktop Icon Strip DRY * feat: Cleaner rendering and transition for ChatScreen * feat: UI improvements * feat: UI improvement * feat: Remove MCP Server "enable" switch from Tools submenu * chore: Run `npm audit fix` * feat: WIP * feat: Logic improvements * refactor: Cleanup * refactor: DRY * test: Fix Chat Sidebar UI Tests * chore: Update package lock * refactor: Cleanup * feat: Chat Message Action Card with Continue and Permission flow implementations * feat: Add agentic steering messages, draft messages and improve chat UX * fix: Search results UI * test: Fix unit test * feat: UI/UX improvements * refactor: Simplify `useToolsPanel` access in components * feat: Implement Processing Info Context API * feat: Implement 'Go back to chat' functionality for settings * feat: Enhance MCP Server management in Chat Form Attachments * style: Minor UI and branding adjustments * chore: Update webui static build output * chore: Formatting, linting & type checks * feat: Draft messages logic * feat: UI improvements * feat: Steering Messages improvements * refactor: Cleanup * refactor: Cleanup * feat: Improve UI * refactor: Settings navigation hook * refactor: DRY code * refactor: DRY ChatMessageUser UI components * refactor: Desktop Icon Strip DRY * refactor: Tools & permissions * fix: Navigation condition * refactor: Cleanup * refactor: Cleanup * refactor: Cleanup * fix: preserve reasoning_content in agentic flow * refactor: Storybook cleanup * refactor: isInViewport util function * refactor: Rename globally `onClick` to `onclick` * chore: `npm audit fix` * refactor: Action Icon usage * refactor: Naming * refactor: JS in `class` directive * refactor: Chat components cleanup WIP * refactor: Components structure * refactor: Cleanup WIP * feat: New ChatAttachmentsPreview component * feat: UI improvements * feat: UI improvements * refactor: Cleanup * refactor: ChatAttachmentsPreview UI/UX * refactor: Remove dead code * refactor: Cleanup * fix: Model Name aliases displaying * feat: Shortcut improvements * refactor: Chat Message * feat: Move Import/Export to settings * refactor: Cleanup * refactor: Cleanup * refactor: Cleanup * refactor: Cleanup --------- Co-authored-by: Xuan Son Nguyen <son@huggingface.co>
82 lines
1.8 KiB
Svelte
82 lines
1.8 KiB
Svelte
<script lang="ts">
|
|
import * as AlertDialog from '$lib/components/ui/alert-dialog';
|
|
import type { Component, Snippet } from 'svelte';
|
|
import { KeyboardKey } from '$lib/enums';
|
|
|
|
interface Props {
|
|
open: boolean;
|
|
title: string;
|
|
description: string;
|
|
confirmText?: string;
|
|
cancelText?: string;
|
|
variant?: 'default' | 'destructive';
|
|
icon?: Component;
|
|
onConfirm: () => void;
|
|
onCancel: () => void;
|
|
onKeydown?: (event: KeyboardEvent) => void;
|
|
children?: Snippet;
|
|
}
|
|
|
|
let {
|
|
open = $bindable(),
|
|
title,
|
|
description,
|
|
confirmText = 'Confirm',
|
|
cancelText = 'Cancel',
|
|
variant = 'default',
|
|
icon,
|
|
onConfirm,
|
|
onCancel,
|
|
onKeydown,
|
|
children
|
|
}: Props = $props();
|
|
|
|
function handleKeydown(event: KeyboardEvent) {
|
|
if (event.key === KeyboardKey.ENTER) {
|
|
event.preventDefault();
|
|
|
|
onConfirm();
|
|
}
|
|
onKeydown?.(event);
|
|
}
|
|
|
|
function handleOpenChange(newOpen: boolean) {
|
|
if (!newOpen) {
|
|
onCancel();
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<AlertDialog.Root {open} onOpenChange={handleOpenChange}>
|
|
<AlertDialog.Content onkeydown={handleKeydown}>
|
|
<AlertDialog.Header>
|
|
<AlertDialog.Title class="flex items-center gap-2">
|
|
{#if icon}
|
|
{@const IconComponent = icon}
|
|
|
|
<IconComponent class="h-5 w-5 {variant === 'destructive' ? 'text-destructive' : ''}" />
|
|
{/if}
|
|
{title}
|
|
</AlertDialog.Title>
|
|
|
|
<AlertDialog.Description>
|
|
{description}
|
|
</AlertDialog.Description>
|
|
</AlertDialog.Header>
|
|
|
|
{#if children}
|
|
{@render children()}
|
|
{/if}
|
|
|
|
<AlertDialog.Footer>
|
|
<AlertDialog.Cancel onclick={onCancel}>{cancelText}</AlertDialog.Cancel>
|
|
<AlertDialog.Action
|
|
onclick={onConfirm}
|
|
class={variant === 'destructive' ? 'bg-destructive text-white hover:bg-destructive/80' : ''}
|
|
>
|
|
{confirmText}
|
|
</AlertDialog.Action>
|
|
</AlertDialog.Footer>
|
|
</AlertDialog.Content>
|
|
</AlertDialog.Root>
|