Skip to content

Modal ​

Модальне вікно з оверлеєм, шапкою, скролом у тілі та опціональним футером. Монтується в <body> (через teleport), тож не залежить від overflow батьків.

Демо ​

Приклад ​

vue
<script setup>
import { ref } from 'vue'
import { Modal } from '@skyservice-developers/vue-dev-kit'

const show = ref(false)
</script>

<template>
  <button @click="show = true">Відкрити</button>

  <Modal v-model="show" title="Заголовок" subtitle="Підзаголовок">
    <p>Контент модального вікна</p>
    <template #footer>
      <button @click="show = false">Закрити</button>
    </template>
  </Modal>
</template>

Props ​

PropТипЗа замовчуваннямОпис
modelValueBooleanfalseСтан відкриття (v-model)
titleString''Заголовок
subtitleString''Підзаголовок
closeTitleString'Закрити'Tooltip кнопки закриття
closeOnOverlayBooleantrueЗакривати при кліку на оверлей
closeOnEscBooleantrueЗакривати при натисканні Esc
widthString'100%'Ширина модалки
heightString'100%'Висота модалки
borderRadiusString'12px'Радіус заокруглення модалки (ігнорується в повноекранному режимі)

Slots ​

SlotОпис
defaultОсновний контент (скролиться)
titleКастомний заголовок (замість пропа title)
subtitleКастомний підзаголовок (замість пропа subtitle)
header-actionsЕлементи справа в шапці — кнопки, бейджі
footerФутер із кнопками

Футер рендериться лише зі слотом

Блок футера з'являється, тільки якщо передано слот #footer. Без нього тіло займає весь простір, і знизу додається запасний відступ 15px (змінна --sky-modal-body-padding-bottom-no-footer), щоб останні елементи не впирались у край модалки.

Слоти шапки ​

Шапку можна зібрати зі слотів — так само, як у Header. #title і #subtitle перекривають однойменні props, #header-actions додає елементи справа. Кнопка «Назад» лишається на місці.

vue
<Modal v-model="show">
  <template #title>
    <h4 style="margin: 0">
      Замовлення №1042 <SkyBadge tone="success" label="Оплачено" />
    </h4>
  </template>
  <template #subtitle>Оновлено щойно</template>
  <template #header-actions>
    <SkyButton variant="outline">Друк</SkyButton>
    <SkyButton variant="primary">Зберегти</SkyButton>
  </template>

  <p>Контент</p>
</Modal>

Відступ між елементами в #header-actions — змінна --sky-modal-header-actions-gap (за замовчуванням 8px).

Events ​

EventОпис
update:modelValueЗміна стану
closeЗакриття модалки

Розміри ​

За замовчуванням модалка повноекранна (100% × 100%). Для компактного центрованого вікна задайте width / height:

vue
<Modal v-model="show" title="Швидкий перегляд" width="500px" height="300px">
  <div style="padding: 16px">Компактна модалка з фіксованими розмірами.</div>
  <template #footer>
    <button @click="show = false">Готово</button>
  </template>
</Modal>

Способи закриття ​

ДіяКерується пропом
Кнопка × у шапцізавжди
Клік на оверлейcloseOnOverlay (за замовчуванням true)
Клавіша EsccloseOnEsc (за замовчуванням true)
vue
<!-- Модалка, яку не закрити «випадково» -->
<Modal v-model="show" title="Підтвердіть" :close-on-overlay="false" :close-on-esc="false">
  ...
</Modal>
ModalDialog
ВиглядВікно з оверлеємПовний екран
РозмірНалаштовується (width/height)Завжди повноекранний
Кнопка закриття× у шапціnext (назад) / classic (×)
КолиФорми, перегляди, підтвердженняКроки-майстри, повноекранні редактори

Опубліковано під ліцензією MIT.