Skip to content

Selector ​

Універсальний випадний список з одиночним і множинним вибором та власним рендером опцій.

Живе демо ​

Одиночний вибір (рядки) ​

Вибрано: Нічого

Множинний вибір ​

Вибрано: Нічого

Масив об'єктів із власними полями ​

Вибраний користувач: Нічого

Використання ​

Простий масив рядків ​

vue
<template>
  <orio-selector
    v-model="selected"
    :options="['Option 1', 'Option 2', 'Option 3']"
    placeholder="Select an option"
  />
</template>

<script setup>
const selected = ref(null)
</script>

Масив об'єктів ​

vue
<template>
  <orio-selector
    v-model="selectedUser"
    :options="users"
    field="id"
    option-name="name"
  />
</template>

<script setup>
const selectedUser = ref(null)
const users = [
  { id: 1, name: 'John' },
  { id: 2, name: 'Jane' }
]
</script>

Множинний вибір ​

vue
<orio-selector
  v-model="selected"
  :options="options"
  :multiple="true"
/>

Власний рендер опцій ​

vue
<orio-selector v-model="selected" :options="users">
  <template #option="{ option }">
    <div style="display: flex; justify-content: space-between;">
      <strong>{{ option.name }}</strong>
      <span style="color: gray;">{{ option.role }}</span>
    </div>
  </template>
</orio-selector>

Пропси ​

ПропТипЗа замовчуваннямОпис
optionsArray<string | object>-Масив опцій для вибору
multiplebooleanfalseУвімкнути множинний вибір
fieldstring'id'Ключове поле для опцій-об'єктів (унікальний ідентифікатор)
optionNamestringundefinedПоле для показу в опціях-об'єктах
placeholderstring'Select an option'Текст-заповнювач

Події ​

ПодіяДаніОпис
update:modelValueany | any[]Генерується під час зміни вибору

Слоти ​

СлотПропсиОпис
trigger{ toggle, control, isOpen, triggerKeydown, selectHighlighted, getOptionKey, getOptionLabel, attrs }Власний елемент-тригер
trigger-content{ toggle, getOptionKey, getOptionLabel, attrs }Власний вміст тригера
trigger-label{ toggle, getOptionKey, getOptionLabel, attrs }Власний текст підпису тригера
option{ option, toggle, selected, getOptionKey, getOptionLabel }Власний рендер опції
no-options-Власний порожній стан, коли опцій немає
options-addon-Додатковий вміст унизу випадного списку

Атрибути ​

Атрибути, що не є пропсами (data-*, title, aria-describedby, …), передаються на кнопку-тригер <button>; class і style також застосовуються до обгортки .control.

vue
<orio-selector
  v-model="country"
  :options="countries"
  data-testid="country-selector"
  title="Pick a country"
/>

Власний #trigger замінює цю кнопку, тож прив'яжіть атрибути самостійно:

vue
<orio-selector v-model="country" :options="countries" data-testid="country">
  <template #trigger="{ toggle, control, attrs, triggerKeydown }">
    <button v-bind="{ ...attrs, ...control }" @click="toggle()" @keydown="triggerKeydown">
      {{ country ?? "Pick a country" }}
    </button>
  </template>
</orio-selector>

TypeScript ​

Компонент Selector підтримує дженерики TypeScript:

typescript
interface User {
  id: number
  name: string
  role: string
}

const selectedUser = ref<User | null>(null)

Стилізація ​

css
--color-bg           /* Dropdown background */
--color-border       /* Border color */
--color-text         /* Text color */
--color-accent       /* Selected item background */
--color-surface      /* Hover background */