Skip to content

ControlElement ​

По суті, це обгортка, що прибирає рамку, тінь і відступи з внутрішнього елемента й додає йому підпис.

Вона дає внутрішньому елементу свободу бути чим завгодно.

Живе демо ​

Розміри ​

Проп size керує розміром шрифту, внутрішніми відступами, заокругленням і розмірами елементів у всіх обгорнутих компонентах. Доступні розміри: sm, md (за замовчуванням), lg, xl.

Input ​

Input з іконками ​

Textarea ​

Button ​

Button з іконками ​

SwitchButton ​

Selector ​

CheckBox ​

Внутрішнє розміщення ​

Input і Textarea підтримують layout="inner", що розміщує підпис усередині меж елемента. Спершу підпис виглядає як заповнювач, а коли поле у фокусі чи заповнене — анімовано зміщується вгору.

Input ​

Textarea ​

Внутрішнє розміщення з розмірами ​

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

vue
<template>
  <orio-control-element label="You can add label here">
    <input
      type="text"
      placeholder="Notice standard styling is not a case here"
      style="width: stretch"
    />
  </orio-control-element>
</template>

Задання розміру ​

vue
<!-- Size applies to any component wrapped with ControlElement -->
<orio-input v-model="name" label="Name" size="sm" />
<orio-input v-model="name" label="Name" size="md" />
<orio-input v-model="name" label="Name" size="lg" />
<orio-input v-model="name" label="Name" size="xl" />

<orio-button size="lg">Large Button</orio-button>
<orio-selector v-model="value" :options="options" size="sm" />

Пропси ​

ПропТипЗа замовчуваннямОпис
appearance'normal' | 'minimal''normal'Minimal прибирає відступи, рамку й тінь зі слоту
size'sm' | 'md' | 'lg' | 'xl''md'Керує розміром шрифту, відступами й заокругленням внутрішніх елементів
layout'vertical' | 'horizontal''vertical'Позиція підпису відносно елемента
labelstring-Текст підпису над елементом

Слоти ​

СлотОпис
defaultЕлемент форми

Слот за замовчуванням надає проп control — набір атрибутів, який ваш внутрішній елемент має розгорнути. Кожен ключ уже записано як DOM-атрибут, яким він стане, тож достатньо v-bind:

vue
<orio-control-element v-slot="{ control }" label="Email" :error="emailError">
  <input v-bind="control" type="email" />
</orio-control-element>

Доступність ​

Ключ наборуДжерело
idпроп id або useId() — ціль <label for>
tabindexпроп tabindex
disabledпроп disabled
requiredпроп required
nameпроп name
focus-keyпроп focusKey — атрибут, який шукає useRovingGrid
aria-labelпроп ariaLabel — для елементів без видимого label
aria-describedbyid елемента .control-error, коли задано error
aria-invalid"true", коли задано error
aria-requiredпроп required

Ключі пропускаються, коли сказати нічого, тож порожній aria-label="" не потрапляє в розмітку.

CSS-змінні ​

ControlElement встановлює такі CSS custom properties залежно від size, а дочірні компоненти їх використовують:

Зміннаsmmd (за замовч.)lgxl
--control-font-size0.75rem0.875rem1.25rem1.75rem
--control-label-font-size0.65rem0.75rem0.875rem1.25rem
--control-py0.25rem0.5rem0.625rem0.75rem
--control-px0.5rem0.75rem1rem1.25rem
--control-gap0.25rem0.5rem0.5rem0.75rem
--control-radius4px8px8px12px
--control-icon-size0.75rem1rem1.25rem1.5rem

Примітки ​

  • Використовується всередині Input, Textarea, DatePicker тощо
  • Забезпечує узгоджені відступи та розміщення
  • Можна використовувати для обгортання власних елементів форм
  • label передається через атрибути й рендериться автоматично
  • Розмір каскадується через CSS-змінні — дочірні компоненти зчитують їх автоматично