Диалог

Фокусталған шешімдер мен формаларға арналған teleported modal surface.

Орнату

npx alixan-ui-nuxt add dialog

Қолдану

Host

app.vue
<template>
  <NuxtPage />
  <DialogHost /> <!-- Add DialogHost once near the root. It renders only on the client. -->
</template>

Диалог ашу

Example.vue

Жоба атауы: Alixan UI

<script setup lang="ts">
import ProjectDialog from '~/components/ProjectDialog.vue'

const dialog = useDialog()
const projectName = ref('Alixan UI')

const openDialog = () => {
  dialog.open(ProjectDialog, {
    width: '420px', // maxWidth
    height: '400px', // maxHeight
    title: 'dialogPreview.title',
    data: {
      projectName: projectName.value,
      onSave: (value: string) => {
        projectName.value = value
      },
    },
  })
}
</script>

<template>
  <div class="flex flex-wrap items-center gap-3">
    <Button @click="openDialog">
      {{ $t('dialogPreview.openDialog') }}
    </Button>
    <p class="text-sm text-muted-foreground">
      {{ $t('dialogPreview.projectName') }}:
      <span class="font-medium text-foreground">{{ projectName }}</span>
    </p>
  </div>
</template>

Диалог контенті

ProjectDialog.vue
<script setup lang="ts">
interface ProjectDialogData {
  projectName: string
  onSave: (value: string) => void
}

const props = defineProps<{
  data: ProjectDialogData
  close: () => void
}>()

const projectName = useXControl('')

onMounted(() => {
	projectName.setValue(props.data.projectName)
})

const save = () => {
  props.data.onSave(projectName.value)
  props.close()
}
</script>

<template>
  <div class="size-full flex flex-col divide-y">
    <div class="flex-1 px-4 py-6">
      <Input :control="projectName" label="dialogPreview.projectName" />
    </div>

    <div class="grid grid-cols-2 gap-2 p-4">
      <Button color="secondary" label="dialogPreview.cancel" @click="close" />
      <Button label="dialogPreview.save" @click="save" />
    </div>
  </div>
</template>

API анықтамасы

ҚасиетТүріӘдепкіСипаттама
componentComponent-DialogHost ішінде көрсетілетін Vue компоненті.
titlestring-DialogHeader ішіне беріледі.
widthstring'500px'Dialog ішіне max-width ретінде беріледі.
heightstring'auto'Dialog ішіне max-height ретінде беріледі.
dataRecord<string, unknown>{}Динамикалық компонентке берілетін деректер.