Skip to content

SkyFilterDropdown ​

Оболонка фільтра: тригер-чіп + панель. Бере на себе тільки те, що спільне для всіх фільтрів — стан відкриття, позиціювання, закриття і доступність. Вміст панелі повністю за викликачем.

На ній побудовані SkyCheckboxFilter і SkySelectFilter. Бери її напряму, коли потрібен фільтр із власним вмістом — календар, дерево, слайдер діапазону.

Що вона робить ​

  • Панель телепортується у <body>. Інакше будь-який предок із transform / filter / contain ламає position: fixed.
  • Позиція перераховується на скрол і resize. Панель прив'язана до тригера й не «відклеюється». Саме тому тут немає лока скролу сторінки — його не треба.
  • Панель не вилазить за екран: притискається до країв, а якщо знизу тісно — розкривається вгору. Власну висоту обмежує сама, тож скролиться список усередині, а не сторінка.
  • Закриття: клік поза межами, Esc (фокус повертається на тригер), disabled на льоту.
  • Доступність: тригер — справжній <button> з aria-haspopup та aria-expanded, панель — role="dialog" з aria-label.
  • Слухачі живуть лише поки панель відкрита — сторінка з десятком фільтрів не тримає десяток слухачів document.
  • Чіп без рамки — так фільтри виглядають в адмінці. Рамку малює тільки :focus-visible; якщо вона таки потрібна, задай --sky-filter-trigger-border.

Приклад ​

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

<template>
  <SkyFilterDropdown title="Період" summary="Цей тиждень">
    <template #default="{ close }">
      <!-- будь-який вміст -->
      <button @click="close">Готово</button>
    </template>
  </SkyFilterDropdown>
</template>

Props ​

PropТипЗа замовчуваннямОпис
titleString—Лейбл чіпа
summaryString''Заміняє title, коли обрано рівно одне (напр. назва опції)
badgeString | Number''Показується поруч із title (напр. кількість обраного)
align'start' | 'end''start'До якого краю тригера притискається панель, поки вміщається
widthNumber280Ширина панелі в px; більшу за екран не візьме
disabledBooleanfalseВимкнений стан; відкрита панель закривається

Slots ​

SlotPropsОпис
default{ close }Вміст панелі. close() — закрити ззовні (напр. після вибору)

Events ​

EventКоли
openПанель відкрилась
closeПанель закрилась (будь-яким способом)

Expose ​

open(), close(), toggle(), isOpen — коли фільтром треба керувати ззовні.

CSS-змінні ​

ЗміннаЗа замовчуваннямОпис
--sky-filter-trigger-height38pxВисота чіпа
--sky-filter-trigger-padding0 10pxПадінги чіпа
--sky-filter-trigger-bordernoneРамка чіпа. У системному дизайні її немає — задавай лише свідомо
--sky-filter-trigger-radius5pxРадіус чіпа
--sky-filter-trigger-bgtransparentФон чіпа
--sky-filter-trigger-colorinheritКолір тексту чіпа
--sky-filter-trigger-font-size12ptРозмір тексту чіпа
--sky-filter-trigger-font-weight500Насиченість тексту чіпа
--sky-filter-trigger-muted-color#b4b4b4Колір відкритого / вимкненого чіпа
--sky-filter-badge-colorgrayКолір бейджа
--sky-filter-panel-bg#fffФон панелі
--sky-filter-panel-radius5pxРадіус панелі
--sky-filter-panel-padding10px 15pxПадінги панелі
--sky-filter-panel-shadow0 5px 8px rgba(0, 0, 0, 0.3)Тінь панелі
--sky-filter-panel-z-index1000z-index панелі
--sky-filter-accent#106090Акцент: фокус, лінки, обраний рядок

Пов'язане ​

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