Files
codex-proxy-rs/frontend/src/components/base/BaseConfirmModal.vue
T
ZyyandCodex 8422240967 feat(theme): add runtime token theme editor
Introduce Seed-to-Component token derivation, isolated live previews, semantic base component theming, and responsive theme controls.

Co-authored-by: Codex <noreply@openai.com>
2026-08-24 04:04:22 +08:00

75 lines
1.5 KiB
Vue

<script setup lang="ts">
import BaseButton from './BaseButton.vue'
import BaseModal from './BaseModal/index.vue'
const props = withDefaults(
defineProps<{
title: string
description?: string
destructive?: boolean
confirmText?: string
cancelText?: string
loading?: boolean
confirmDisabled?: boolean
}>(),
{
destructive: false,
confirmText: '确认',
cancelText: '取消',
loading: false,
confirmDisabled: false,
},
)
const emit = defineEmits<{
confirm: []
cancel: []
}>()
const open = defineModel<boolean>({ default: false })
function handleCancel() {
if (props.loading)
return
open.value = false
emit('cancel')
}
function handleConfirm() {
if (props.loading || props.confirmDisabled)
return
emit('confirm')
}
</script>
<template>
<BaseModal
v-model="open"
:title="title"
:description="description"
size="sm"
:tone="destructive ? 'danger' : 'warning'"
role="alertdialog"
:dismissible="!loading"
>
<div
v-if="$slots.default"
class="text-cp-lg leading-[1.55] font-emphasis text-cp-text-secondary"
>
<slot />
</div>
<template #footer>
<BaseButton variant="secondary" :disabled="loading" @click="handleCancel">
{{ cancelText }}
</BaseButton>
<BaseButton
:variant="destructive ? 'destructive' : 'primary'"
:loading="loading"
:disabled="confirmDisabled"
@click="handleConfirm"
>
{{ confirmText }}
</BaseButton>
</template>
</BaseModal>
</template>