Skip to content

SkySelect ​

Нативний <select> у фірмовому стилі Skyservice, зі станами default | success | error та підказкою під полем.

Демо ​

Приклад ​

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

const payment = ref('')

const payments = [
  { value: 'cash', text: 'Готівка' },
  { value: 'card', text: 'Картка' },
]
</script>

<template>
  <SkySelect
    v-model="payment"
    :options="payments"
    placeholder="Оберіть спосіб оплати"
  />

  <SkySelect v-model="payment" :options="payments" state="error" hint="Оберіть спосіб" />
  <SkySelect v-model="payment" :options="payments" disabled />
</template>

Props ​

PropТипЗа замовчуваннямОпис
modelValuestring | number—Поточне значення (v-model)
optionsArray<{ value: string | number; text: string }>—Список опцій (обов'язковий)
idString—HTML id
disabledBooleanfalseВимкнений стан
state'default' | 'success' | 'error''default'Візуальний стан рамки
placeholderString''Текст-заглушка (рендериться як disabled hidden опція)
hintString''Підказка під полем, фарбується в колір state

Events ​

EventPayloadОпис
update:modelValuestring | numberEmit при виборі опції

Формат опцій ​

Тільки об'єкти { value, text } — так само, як у SkySelectSearch:

ts
:options="[
  { value: 'cash', text: 'Готівка' },
  { value: 'card', text: 'Картка' },
]"
// v-model отримає value ('cash')

Масив рядків не працює

:options="['Кг', 'Шт', 'Л']" і формат { label, value } дають порожні пункти: компонент читає option.value та option.text, а їх у таких елементах немає. Якщо дані приходять масивом рядків — змапте їх:

ts
const options = units.map((u) => ({ value: u, text: u }))

Ширина ​

Компонент розтягується на всю ширину контейнера (width: 100%). Щоб зробити його вужчим, обмежуйте батьківський блок:

vue
<div style="max-width: 240px">
  <SkySelect v-model="unit" :options="units" />
</div>

Клавіатура і дропдаун ​

Список малює браузер/ОС, тож клавіатурна навігація, пошук по першій літері та поведінка на мобільних — рідні для платформи. З цього ж випливає, що дропдаун не обрізається контейнерами з overflow: hidden і не потребує teleport усередині Modal.

SkySelect vs SkySelectSearch ​

SkySelectSkySelectSearch
Реалізаціянативний <select>кастомний дропдаун
Пошук у спискунітак
Формат опцій{ value, text }{ value, text }
Обрізання в overflow: hiddenнеможливеможливе (position: absolute)
КолиКороткі спискиДовгі списки (міста, товари)

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