# Введиние

<figure><img src="https://pipui.ru/Themes/Default/img/logo.svg" alt="Logo not loaded"><figcaption><p>Логотип PipUI</p></figcaption></figure>

**PipUI** является кроссбраузерным фреймворком веб-интерфейсов для их быстрой и адаптивной верстки. Распространяется свободно под лицензией [MIT](https://en.wikipedia.org/wiki/MIT_License).

На сегодняшний день **PipUI** предлагает широкий набор компонентов:

1. Базовый набор
2. Стили отступов
3. Цветовые наборы
4. Стили Grid сетки
5. Панель навигации
6. Выпадающее меню
7. Постраничная навигация
8. Формы и компоненты форм
9. Кнопки
10. Полосы прогресса
11. Меню навигации
12. Модальные окна
13. Оповещения
14. Подтверждения действий
15. Вкладки
16. Хлебные крошки
17. Спойлеры
18. Таблицы
19. Панели ББ-кодов
20. ББ-коды
21. Валидаторы форм
22. Индексы полей ввода
23. Всплывающие подсказки
24. Подсвечивающиеся блоки
25. Всплывающие блоки
26. Слайдеры
27. Автозаполнения
28. Селекторы тегов
29. Блоки оповещений
30. Селекторы дат и времени
31. Якоря


# Скачать

[Скачать последнюю версию](https://github.com/pipui/pipui/releases/download/v1.6.0a/PipUI.v1.6.0.compressed.zip)&#x20;

[Скачать исходный код](https://github.com/pipui/pipui/archive/refs/tags/v1.6.0a.zip)&#x20;

Все релизы вы можете найти в нашем CDN [https://cdn.pipui.ru](https://cdn.pipui.ru/)


# Начало работы

Фреймворк **PipUI** использует несколько внешних библиотек, которые поддерживают его работу и дополняют функционалом. Среди них: [JQuery](https://jquery.com/), [JQuery Easing](https://github.com/gdsmith/jquery.easing), [Font Awesome](https://fontawesome.com/v6/search)

Их так же необходимо подключить на странице.

Для использования фреймворка, его необходимо подключить в HTML код на странице между тегами \<head>

{% code title="PipUI CDN" %}

```html
<link rel="stylesheet" href="https://cdn.pipui.ru/latest/dist/css/bundles/pipui.min.css" />
<link rel="stylesheet" href="https://cdn.pipui.ru/latest/dist/css/bundles/pipui-responsive.min.css" />
<script src="https://cdn.pipui.ru/latest/dist/js/bundles/pipui.min.js"></script>
```

{% endcode %}


# Базовый набор

Набор скриптов и стилей отвечающих за работу основных функций фреймворка и его компонентов

Одним из важнейших элементов в стилизации выступает класс <mark style="color:orange;">`.container`</mark>, который служит контейнером для адаптивной верстки. Именно с него и стоит начинать свою верстку страницы.

## Брейкпоинты <a href="#breakpoints" id="breakpoints"></a>

Точки изменения адаптивной верстки представлены ниже

{% code title="Responsive breakpoints" lineNumbers="true" %}

```css
@media (min-width: 320px) { ... }
@media (min-width: 480px) { ... }
@media (min-width: 768px) { ... }
@media (min-width: 900px) { ... }
@media (min-width: 1200px) { ... }
@media (min-width: 1400px) { ... }
```

{% endcode %}

## Работа с текстом <a href="#text" id="text"></a>

<mark style="color:orange;">`.text-center`</mark> - Выравнивание текста по центру

<mark style="color:orange;">`.text-left`</mark> - Выравнивание текста по левому краю

<mark style="color:orange;">`.text-right`</mark> - Выравнивание текста по правому краю

<mark style="color:orange;">`.text-justify`</mark> - Выравнивание текста по обеим краям

<mark style="color:orange;">`.text-upper`</mark> - Переведет шрифт в верхний регистр

<mark style="color:orange;">`.text-lower`</mark> - Переведет шрифт в нижний регистр

<mark style="color:orange;">`.text-capitalize`</mark> - Переводит первую букву каждого слова в верхний регистр

<mark style="color:orange;">`.text-bold`</mark> - Жирное начертание шрифта

<mark style="color:orange;">`.text-italic`</mark> - Наклонный текст

<mark style="color:orange;">`.text-overflow`</mark> - Сокращенный текст. Текст будет сокращен до максимальной ширины блока, а вконце предложения будет добавлено троеточие.

<mark style="color:orange;">`.text-strike`</mark> - Зачёркнутый текст

<mark style="color:orange;">`.text-underline`</mark> - Подчеркнутый текст

<mark style="color:orange;">`.text-overline`</mark> - Линия над текстом

{% embed url="<https://codepen.io/pipui/pen/WNyEEqw>" %}
Пример работы с текстом
{% endembed %}

## Управление свойством display <a href="#display" id="display"></a>

Поддерживаемые стили display: <mark style="color:orange;">`.d-none`</mark> <mark style="color:orange;">`.d-block`</mark> <mark style="color:orange;">`.d-inline`</mark> <mark style="color:orange;">`.d-inline-block`</mark> <mark style="color:orange;">`.d-grid`</mark> <mark style="color:orange;">`.d-inline-grid`</mark> <mark style="color:orange;">`.d-flex`</mark> <mark style="color:orange;">`.d-inline-flex`</mark>

## Полоса прокрутки <a href="#overflow" id="overflow"></a>

Управление полосой прокрутки с помощью заготовленных классов

<mark style="color:orange;">`.of-hidden`</mark> - перекрывающее содержимое будет скрыто без видимой полосы прокрутки

<mark style="color:orange;">`.of-visible`</mark> - всегда отображать полосу прокрутки и содержимое за пределами блока

<mark style="color:orange;">`.of-auto`</mark> - полоса прокрутки отображается по необходимости, если содержимое выходит за пределы блока

<mark style="color:orange;">`.of-auto`</mark> - полоса прокрутки отображается всегда

Все заготовленные классы выше, можно использовать с префиксами .of-x- и .of-y- для полос прокрутки по осям X и Y соответственно, например .of-x-auto

## Курсоры <a href="#cursor" id="cursor"></a>

PipUI дает возможность менять курсор элемента используя заготовленные классы.

Ниже представлены примеры работы таких классов и их список

<mark style="color:orange;">`.cursor-none .cursor-auto .cursor-default .cursor-pointer .cursor-progress .cursor-help .cursor-move .cursor-text .cursor-cell .cursor-crosshair .cursor-alias .cursor-vertical-text .cursor-no-drop .cursor-copy .cursor-all-scroll .cursor-col-resize .cursor-row-resize .cursor-nesw-resize .cursor-nwse-resize .cursor-n-resize .cursor-e-resize .cursor-nw-resize .cursor-grab .cursor-grabbing .cursor-zoom-in .cursor-zoom-out`</mark>

{% embed url="<https://codepen.io/pipui/pen/poKraZp>" %}
Пример работы курсоров
{% endembed %}

## Вертикальное выравнивание <a href="#vertical-alignment" id="vertical-alignment"></a>

Вертикальное выравнивание позволяет изменить положение элементов по вертикали

<mark style="color:orange;">`.align-items-start`</mark> - выравнивает элементы в **Grid** блоке по верхнему краю

<mark style="color:orange;">`.align-items-end`</mark> - выравнивает элементы в **Grid** блоке по нижнему краю

<mark style="color:orange;">`.align-items-center`</mark> - выравнивает элементы в **Grid** блоке по центру

<mark style="color:orange;">`.v-align-top`</mark> - выравнивает **inline** элемент в блоке по верхнему краю

<mark style="color:orange;">`.v-align-bottom`</mark> - выравнивает **inline** элемент в блоке по нижнему краю

<mark style="color:orange;">`.v-align-center`</mark> - выравнивает **inline** элемент в блоке по центру

<mark style="color:orange;">`.v-align-baseline`</mark> - выравнивает базовую линию текущего элемента по базовой линии родителя

<mark style="color:orange;">`.v-align-sub`</mark> - выравнивает **inline** элемент в блоке под нижней линией

<mark style="color:orange;">`.v-align-super`</mark> - выравнивает **inline** элемент в блоке над верхней линией

<mark style="color:orange;">`.v-align-text-bottom`</mark> - нижняя граница элемента выравнивается по самому нижнему краю текущей строки

<mark style="color:orange;">`.v-align-text-top`</mark> - верхняя граница элемента выравнивается по самому высокому текстовому элементу текущей строки

## Прозрачность элементов <a href="#opacity" id="opacity"></a>

В PipUI заготовлены классы и для прозрачности элементов от <mark style="color:orange;">`.opacity-0`</mark> до <mark style="color:orange;">`.opacity-10`</mark> с шагом 1. (В стилях это **0.1**, следовательно 10 - это 1 или же 100%)

## Позиционирование <a href="#position" id="position"></a>

Позиционировать элементы можно используя классы:

<mark style="color:orange;">`.fixed`</mark> - фиксированное позиционирование, которое двигает элемент вместе с прокруткой страницы

<mark style="color:orange;">`.absolute`</mark> - абсолютное позиционирование выставляет элемент на странице не учитывая ее прокрутку

<mark style="color:orange;">`.relative`</mark> - относительное позиционирование. Блоки внутри данного, если им указано абсолютное позиционирование, будут выравниваться относительно его позиции

<mark style="color:orange;">`.static`</mark> - статичное позиционирование (по умолчанию)

Управлять позицией относительно верхнего, правого, нижнего, левого краев можно задать, воспользовавшись классами от <mark style="color:orange;">`.top-0`</mark> до <mark style="color:orange;">`.top-64`</mark>, от <mark style="color:orange;">`.right-0`</mark> до <mark style="color:orange;">`.right-64`</mark>, от <mark style="color:orange;">`.bottom-0`</mark> до <mark style="color:orange;">`.bottom-64`</mark>, от <mark style="color:orange;">`.left-0`</mark> до <mark style="color:orange;">`.left-64`</mark> соответственно. Данные классы можно использовать с шагом в 4, например <mark style="color:orange;">`.top-0`</mark> , <mark style="color:orange;">`.top-4`</mark> , <mark style="color:orange;">`.top-8`</mark> и т.д.

Помимо этого, Вы можете контролировать и позиционные индексы, относительно оси Z от <mark style="color:orange;">`.zid-0`</mark> до <mark style="color:orange;">`.zid-10`</mark>


# Отступы

Если Вам необходимо добавить отступ к элементу, то в PipUI есть набор готовых стилей для данных операций

## Внутренние отступы (padding) <a href="#padding" id="padding"></a>

Общие отступы (*padding*): От <mark style="color:orange;">`.p-0`</mark> до <mark style="color:orange;">`.p-100`</mark> с шагом 4

Отступы по верхнему и нижнему краям (*padding-top/padding-bottom*): От <mark style="color:orange;">`.py-0`</mark> до <mark style="color:orange;">`.py-100`</mark> с шагом 4

Отступы по левому и правому краям (*padding-left/padding-right*): От <mark style="color:orange;">`.px-0`</mark> до <mark style="color:orange;">`.px-100`</mark> с шагом 4

Отступы по левому и правому краям (*padding-left/padding-right*): От <mark style="color:orange;">`.px-0`</mark> до <mark style="color:orange;">`.px-100`</mark> с шагом 4

Отступы по левому краю (*padding-left*): От <mark style="color:orange;">`.pl-0`</mark> до <mark style="color:orange;">`.pl-100`</mark> с шагом 4

Отступы по правому краю (*padding-right*): От <mark style="color:orange;">`.pr-0`</mark> до <mark style="color:orange;">`.pr-100`</mark> с шагом 4

Отступы по верхнему краю (*padding-top*): От <mark style="color:orange;">`.pt-0`</mark> до <mark style="color:orange;">`.pt-100`</mark> с шагом 4

Отступы по нижнему краю (*padding-bottom*): От <mark style="color:orange;">`.pb-0`</mark> до <mark style="color:orange;">`.pb-100`</mark> с шагом 4

## Внешние отступы (margin) <a href="#margin" id="margin"></a>

Общие отступы (*margin*): От <mark style="color:orange;">`.m-0`</mark> до <mark style="color:orange;">`.m-100`</mark> с шагом 4

Отступы по верхнему и нижнему краям (*margin-top/margin-bottom*): От <mark style="color:orange;">`.my-0`</mark> до <mark style="color:orange;">`.my-100`</mark> с шагом 4

Отступы по левому и правому краям (*margin-left/margin-right*): От <mark style="color:orange;">`.mx-0`</mark> до <mark style="color:orange;">`.mx-100`</mark> с шагом 4

Отступы по левому и правому краям (*margin-left/margin-right*): От <mark style="color:orange;">`.mx-0`</mark> до <mark style="color:orange;">`.mx-100`</mark> с шагом 4

Отступы по левому краю (*margin-left*): От <mark style="color:orange;">`.ml-0`</mark> до <mark style="color:orange;">`.ml-100`</mark> с шагом 4

Отступы по правому краю (*margin-right*): От <mark style="color:orange;">`.mr-0`</mark> до <mark style="color:orange;">`.mr-100`</mark> с шагом 4

Отступы по верхнему краю (*margin-top*): От <mark style="color:orange;">`.mt-0`</mark> до <mark style="color:orange;">`.mt-100`</mark> с шагом 4

Отступы по нижнему краю (*margin-bottom*): От <mark style="color:orange;">`.mb-0`</mark> до <mark style="color:orange;">`.mb-100`</mark> с шагом 4

Автоматические отступы: <mark style="color:orange;">`.mx-auto`</mark>, <mark style="color:orange;">`.my-auto`</mark>, <mark style="color:orange;">`.m-auto`</mark>


# Палитра цветов

PipUI дает возможность менять цвет текста и фона без необходимости изменять CSS стили. Для этого в нем заготовлены специальные классы, а палитра выбрана на основе Material UI от Google.

Чтобы задать цвет фона элемента, используйте класс <mark style="color:orange;">`.bg-{COLOR}-{INTENSITY}`</mark>, где *{COLOR}* - цвет, а *{INTENCITY}* - интенсивность от 50 до 900 с шагом 100 (после 100).

Чтобы задать цвет текста, используйте класс <mark style="color:orange;">`.text-{COLOR}-{INTENSITY}`</mark>

*<mark style="color:yellow;">Цвета тона 500 можно использовать без суффикса -500</mark>*

{% embed url="<https://codepen.io/pipui/pen/NWzvEXz>" %}
Пример работы цветовых наборов
{% endembed %}

*Вы можете менять цвет текста и фона наведения, используя те же имена классов с суффиксом -h, в случае с префиксом -i, класс будет первостепенно иметь префикс -h, а уже затем -i, например* <mark style="color:orange;">`.bg-blue-gray-h-i`</mark>


# Grid сетка

Данный компонент позволяет быстро произвести разметку блоков внутри контейнера.

Для определения grid контейнера используется класс <mark style="color:orange;">`.d-grid`</mark> или его алиас <mark style="color:orange;">`.grid`</mark>.

Количество колонок и рядов внутри grid контейнера варьируется от 1 до 12, которые используют классы от <mark style="color:orange;">`.columns-1`</mark> до <mark style="color:orange;">`.columns-12`</mark> (для колонок) и <mark style="color:orange;">`.rows-1`</mark> до <mark style="color:orange;">`.rows-12`</mark> (для рядов) соответственно.

Позиции колонок внутри контейнера определяются классами с патерном <mark style="color:orange;">`.column-{1-12}-{1-12}`</mark> при этом второй параметр может отсутствовать, если он равен первому.

{% embed url="<https://codepen.io/pipui/pen/WNyEYLY>" %}
Пример работы колонок в Grid сетке (с учетом responsive)
{% endembed %}

Отступы внутри grid сетки можно выставлять с помощью классов от <mark style="color:orange;">`.gap-0`</mark> до <mark style="color:orange;">`.gap-100`</mark> с шагом 4. Для отступов внутри сетки между рядами используйте классы от <mark style="color:orange;">`.gap-row-0`</mark> до <mark style="color:orange;">`.gap-row-100`</mark>, а для отступов между колонками от <mark style="color:orange;">`.gap-column-0`</mark> до <mark style="color:orange;">`.gap-column-100`</mark> так же с шагом 4.


# Панель навигации

В качестве навигации по сайту, разработчики часто используют навигационную панель, которую, как правило, располагают в верхней части сайта. В фреймворке PipUI собран компонент для быстрого формирования такой панели

{% embed url="<https://codepen.io/pipui/pen/eYKEbQv>" %}
Пример работы панели навигации
{% endembed %}

Цвет панели может быть изменен с помощью классов цвета фона из палитры

Вы можете использовать <mark style="color:orange;">`.container`</mark> внутри блока <mark style="color:orange;">`.navbar`</mark>, если планируется растягивать navbar под ширину адаптивного контейнера

Для изменения тёмной палитры текста, можно добавить класс <mark style="color:orange;">`.navbar-text-ligth`</mark> к блоку <mark style="color:orange;">`.navbar`</mark>


# Выпадающее меню

Компонент выпадающего меню имеет многоуровневую систему вложенности, что позволяет определять множественные разделы и подразделы

{% embed url="<https://codepen.io/pipui/pen/WNyEPbw>" %}
Пример простейшего выпадающего меню
{% endembed %}

```html
<div class="dropdown">
      <button class="btn mt-0 dropdown-trigger">Dropdown Menu <i class="fa-solid fa-caret-down"></i></button>

      <ul class="dropdown-target">
          <li class="dropdown-item">
              <a href="#" rel="nofollow" class="dropdown-link">Link #1</a>
          </li>

          <li class="dropdown-item">
              <a href="#" rel="nofollow" class="dropdown-link">Link #2</a>
          </li>
      </ul>
  </div>
```

Ниже представлен пример многоуровневого выпадающего меню

{% embed url="<https://codepen.io/pipui/pen/vYrJbNM>" %}
Пример многоуровневого выпадающего меню
{% endembed %}

```html
<div class="dropdown">
    <button class="btn mt-0 dropdown-trigger">Dropdown Menu <i class="fa-solid fa-caret-down"></i></button>

    <ul class="dropdown-target">
        <li class="dropdown-item">
            <a href="#" rel="nofollow" class="dropdown-link">Link #1</a>
        </li>

        <li class="dropdown-item">
            <a href="#" rel="nofollow" class="dropdown-link">Link #1</a>
        </li>

        <li class="dropdown-item dropdown dropdown-submenu">
            <a href="#" rel="nofollow" class="dropdown-link dropdown-trigger">Dropdown <i class="fa-solid fa-caret-down"></i></a>

            <ul class="dropdown-target">
                <li class="dropdown-item">
                    <a href="#" rel="nofollow" class="dropdown-link">Link #1</a>
                </li>

                <li class="dropdown-item">
                    <a href="#" rel="nofollow" class="dropdown-link">Link #2</a>
                </li>

                <li class="dropdown-item dropdown dropdown-submenu">
                    <a href="#" rel="nofollow" class="dropdown-link dropdown-trigger">Dropdown <i class="fa-solid fa-caret-down"></i></a>

                    <ul class="dropdown-target">
                        <li class="dropdown-item">
                            <a href="#" rel="nofollow" class="dropdown-link">Link #1</a>
                        </li>

                        <li class="dropdown-item">
                            <a href="#" rel="nofollow" class="dropdown-link">Link #2</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
```


# Постраничная навигация

Блок постраничной навигации состоит из панели пронумерованных страниц

Для работы стилей постраничной навигации, контейнеру списка необходимо

задать класс <mark style="color:orange;">`.pagination`</mark>

{% embed url="<https://codepen.io/pipui/pen/dyKzBvG>" %}
Простейший пример работы постраничной навигации
{% endembed %}

```html
<ul class="pagination">
     <li><a rel="nofollow" href="#">1</a></li>
     <li><a rel="nofollow" href="#">2</a></li>
     <li>...</li>
     <li><a rel="nofollow" href="#">39</a></li>
     <li class="active"><a rel="nofollow" href="#">40</a></li>
     <li><a rel="nofollow" href="#">41</a></li>
     <li>...</li>
     <li><a rel="nofollow" href="#">99</a></li>
     <li><a rel="nofollow" href="#">100</a></li>
</ul>
```

Вы так же можете использовать собственный стиль вывода

{% embed url="<https://codepen.io/pipui/pen/qBKXzjd>" %}
Дополнительный пример работы постраничной навигации
{% endembed %}

```html
<ul class="pagination">
    <li><a href="#">← Назад</a></li>
    <li><a href="#">Вперед →</a></li>
</ul>
```

Помимо прямого вывода блока постраничной навигации, его можно генерировать с помощью атрибутов через JavaScript

<mark style="color:orange;">`[data-pagination-pages="`</mark>*<mark style="color:orange;">`"]`</mark> - общее кол-во страниц*\
*<mark style="color:orange;">`[data-pagination-current="`</mark>*<mark style="color:orange;">`"]`</mark> - Текущая страница\ <mark style="color:orange;">`[data-pagination-url="`</mark>*<mark style="color:orange;">`"]`</mark> - URL на который произойдет переход. В качестве номера страницы, можно использовать тег {NUM}*\
*<mark style="color:orange;">`[data-pagination="`</mark>*<mark style="color:orange;">`"]`</mark> - Тип генератора постраничной навигации (от 0 дл 3)

{% embed url="<https://codepen.io/pipui/pen/YzjpOoO>" %}
Пример работы постраничной навигации через атрибуты
{% endembed %}


# Формы

Формы и компоненты форм

Формы в наше время являются неотъемлемой частью сайта, где есть какие-либо поля ввода. PipUI имеет в себе компонент быстрой стилизации всех существующих элементов форм и даже больше.

{% embed url="<https://codepen.io/pipui/pen/xxJRyVW>" %}
Пример формы авторизации
{% endembed %}

Для работы простейших полей ввода не потребуется вводить дополнительные классы или иные атрибуты. Стилизация сработает автоматически по умолчанию для всех тегов input, textarea, select

{% embed url="<https://codepen.io/pipui/pen/GRBNPNd>" %}
Пример стилизации стандартных полей ввода
{% endembed %}

Вы так же можете использовать и стилизованные элементы checkbox и radio, как это представлено ниже

{% embed url="<https://codepen.io/pipui/pen/MWBbZpW>" %}
Пример стилизованных переключателей
{% endembed %}

Помимо форм, стилизованных по умолчанию, имеются и атрибуты для их стилизации. Для создания такого компонента, необходимо обернуть элемент формы в блок с классом <mark style="color:orange;">`.input-block`</mark> и задать дополнительный набор элементов

Класс <mark style="color:orange;">`.input-helper`</mark> внутри блока <mark style="color:orange;">`.input-block`</mark> создает скрытый блок информации, который появляется при наведении на <mark style="color:orange;">`.input-block`</mark>

{% embed url="<https://codepen.io/pipui/pen/eYjBbEp>" %}
Пример работы класса input-block
{% endembed %}

До и после формы ввода, можно добавить дополнительные компоненты, например, иконку или checkbox. Для этого необходимо обернуть поле ввода в класс <mark style="color:orange;">`.input-append`</mark>, для добавления компонента после формы или <mark style="color:orange;">`.input-prepend`</mark>, для добавления перед формой. Данные классы можно использовать как отдельно, так и вместе. Для определения самого блока компонента, используйте классы <mark style="color:orange;">`.append`</mark> и <mark style="color:orange;">`.prepend`</mark> соответствующе рядом с полем ввода

{% embed url="<https://codepen.io/pipui/pen/PoBbXJy>" %}
Пример работы append и prepend
{% endembed %}

Форма выбора файла так же может быть стилизована стандартными средствами CSS, посредством помещения самого поля выбора файла внутрь блока с классом <mark style="color:orange;">`.input-block-file`</mark>. Всё остальное его содержимое будет отображаться как обычно

{% embed url="<https://codepen.io/pipui/pen/eYjBbyJ>" %}
Пример стилизованной формы выбора файла
{% endembed %}

Помимо всего прочего, Вы можете обернуть форму типа textarea в класс <mark style="color:orange;">`.textarea`</mark> для поддержки пронумерованной формы и некоторых особенностей

{% embed url="<https://codepen.io/pipui/pen/mdjOapK>" %}
Пример пронумерованного поля ввода
{% endembed %}


# Кнопки

PipUI имеет в своем наборе компонентов множество вариаций кнопок, совместно с другими компонентами. Для их стилизации необходимо добавить элементу класс <mark style="color:orange;">`.btn`</mark>

{% embed url="<https://codepen.io/pipui/pen/GRBNPXY>" %}
Примеры кнопок в разных состояниях
{% endembed %}

Кнопки можно комбинировать и с другими компонентами, например с цветовыми наборами, отступами и др.

{% embed url="<https://codepen.io/pipui/pen/JjBbwwr>" %}
Пример кастомизации кнопок
{% endembed %}


# Полосы прогресса

Использование полос прогресса связано с определением статуса загрузки/нагрузки чего-либо. PipUI дает возможность без особых усилий добавить такие полосы в свое приложение.

{% code title="Пример прогресс бара" lineNumbers="true" %}

```html
<div class="progress">
    <div class="bar" style="width: 35%;"></div>
    <div class="text">Some text</div>
</div>
```

{% endcode %}

{% embed url="<https://codepen.io/pipui/pen/OJwbdpJ>" %}
Примеры разных стилей прогресс бара
{% endembed %}

Помимо прогресс-бара в виде полос, вы можете вывести и радиальный вариант.

Не смотря на то, что в коде используется тег , он поддерживает тонкую кастомизацию благодаря атрибутам.

<mark style="color:orange;">`data-border-size`</mark> - ширина линии\ <mark style="color:orange;">`data-background-color`</mark> - цвет фона линии\ <mark style="color:orange;">`data-border-color`</mark> - цвет внутреннего прогресс-бара\ <mark style="color:orange;">`data-border-padding`</mark> - отступ по краям внутреннего прогресс-бара\ <mark style="color:orange;">`data-radius`</mark> - размер прогресс-бара в процентах. Поддерживаются числа с плавающей точкой\ <mark style="color:orange;">`data-timer`</mark> - интервал обновления блока в миллисекундах. По умолчанию без обновления

```html
<div class="progress-radial">
    <canvas class="bar" width="120" height="120" data-radius="25"></canvas>
    <div class="text">25%</div>
    <div class="subtext">Progress</div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/abjBxBZ>" %}
Примеры радиального прогресс бара
{% endembed %}


# Меню навигации

Многоуровневое меню навигации позволяет быстро переходить по разделам и категориям. Данное меню используется и в нашей документации(слева).

```html
<ul class="nav-menu">
    <li class="nav-menu-item active"><a href="#" class="nav-menu-link">Menu #1</a></li>
    <li class="nav-menu-item"><a href="#" class="nav-menu-link">Menu #2</a></li>
    <li class="nav-menu-item"><a href="#" class="nav-menu-link">Menu #3</a></li>
</ul>
```

Для добавления подуровней, необходимо добавить к триггеру <mark style="color:orange;">`.nav-menu-link`</mark> класс <mark style="color:orange;">`.nav-menu-toggle`</mark> и после этого элемента добавьте список меню, так же как и родительский, только вместо класса <mark style="color:orange;">`.nav-menu`</mark> используйте класс <mark style="color:orange;">`.nav-sub-menu`</mark> для всех последующих уровней. Пример можно посмотреть ниже

{% embed url="<https://codepen.io/pipui/pen/ExpNJZy>" %}
Пример меню навигации с выпадающим списком
{% endembed %}

```html
<ul class="nav-menu">
    <li class="nav-menu-item active"><a href="#" class="nav-menu-link">Menu #1</a></li>
    <li class="nav-menu-item"><a href="#" class="nav-menu-link">Menu #2</a></li>
    <li class="nav-menu-item">
        <a href="#" class="nav-menu-link nav-menu-toggle">Menu #3 <i class="fa-solid fa-caret-down"></i></a>
        <ul class="nav-sub-menu">
            <li class="nav-menu-item"><a href="#" class="nav-menu-link">Submenu #1</a></li>
            <li class="nav-menu-item"><a href="#" class="nav-menu-link">Submenu #2</a></li>
            <li class="nav-menu-item"><a href="#" class="nav-menu-link">Submenu #3</a></li>
        </ul>
    </li>
</ul>
```


# Модальные окна

Когда необходимо вывести дополнительный контент, а создавать для этого отдельную страницу нет необходимости, то на помощь нам придут модальные окна.

```html
<button class="btn" data-modal="example-modal-1">Показать модальное окно</button>
<div class="modal" data-id="example-modal-1">
    <div class="wrapper">
        <div class="modal-content">
            <div class="modal-header">Название</div>

            <div class="modal-body">
                <div>Содержимое модального окна</div>

                <div class="pt-20">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores, at, aut blanditiis distinctio esse ipsam nisi odio odit pariatur quasi qui tempora, totam. Modi odio recusandae velit voluptate. Odit, quibusdam!</div>
            </div>

            <div class="modal-footer">
                <button class="btn btn-transparent" data-modal-close>Закрыть</button>
            </div>
        </div>
    </div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/LYBxWjW>" %}
Пример работы модального окна
{% endembed %}

Вы можете регулировать размер модального окна, добавляя к блоку <mark style="color:orange;">`.modal > .wrapper`</mark> классы размеров <mark style="color:orange;">`.w-{NUM}-i`</mark>

Управлять появлением и исчезанием модальных окон можно с помощью JS

```javascript
pipui.modal.open('modal-id');
pipui.modal.close('modal-id');
pipui.modal.toggle('modal-id');
```


# Оповещения

Компонент оповещений позволяет, при срабатывании определенных событий, донести до пользователя важную информацию.

{% embed url="<https://codepen.io/pipui/pen/poZRewX>" %}
Пример обращения к оповещениям через JS
{% endembed %}

В примере выше, показан способ взаимодействия с оповещениями через Javascript. Если есть необходимость создавать их без использования Javascript, то можно использовать код ниже

```html
<div class="alert">
    <div class="alert-id" data-autoclose="true">
        <div class="alert-content">You have a new messages!</div>
        <div class="alert-footer">
            <div class="block-left">Alert</div>
            <div class="block-right"><button class="btn btn-clear close-trigger">ЗАКРЫТЬ</button></div>
        </div>
    </div>
</div>
```

Внутри контейнера <mark style="color:orange;">`.alert`</mark> может содержаться множество оповещений и нет необходимости создавать новый, однако если его положение (placement) отличается от существующих, то стоит добавить новый.

Метод <mark style="color:orange;">`pipui.alert.open`</mark> создает новое оповещение и содержит в себе 4 параметра:\
**text** - Основной текст оповещения. Данный текст выводится в блоке <mark style="color:orange;">`.alert-content`</mark>;\
**title** - Название оповещения. Данный текст выводится в блоке <mark style="color:orange;">`.alert-footer > .block-left`</mark>;\
**placement** - Местоположение оповещения на экране. Данный метод можно использовать добавив параметр <mark style="color:orange;">`data-placement="{Y}-{X}"`</mark> к блоку с классом <mark style="color:orange;">`.alert-id`</mark>;\
**autoclose** - Автозакрытие оповещения. В качестве значения можно передать число миллисекунд или undefined. По умолчанию или если указано undefined, значение выставляется исходя из значения <mark style="color:orange;">`pipui.alert.openTimeout`</mark>;\
**complete** - Анонимная функция, которая выполнится по окончанию вывода оповещения

Свойство <mark style="color:orange;">`pipui.alert.openTimeout`</mark> задает время по умолчанию, через которое оповещение исчезнет

Метод <mark style="color:orange;">`pipui.alert.open(`</mark>`text, title, placement, autoclose, complete`<mark style="color:orange;">`)`</mark> создает новое оповещение и выводит его

Метод <mark style="color:orange;">`pipui.alert.close(`</mark>`e, complete`<mark style="color:orange;">`)`</mark> закрывает оповещение с его последующим удалением

Метод <mark style="color:orange;">`pipui.alert.hide(`</mark>`e, complete`<mark style="color:orange;">`)`</mark> закрывает оповещение без его удаления

Метод <mark style="color:orange;">`pipui.alert.show(`</mark>`e, complete`<mark style="color:orange;">`)`</mark> открывает закрытое оповещение


# Подтверждения действий

Как известно, стандартные методы Javascript не позволяют кастомизировать метод confirm(), по этому мы решили добавить такую возможность в наш фреймворк

```html
<button class="btn" id="confirm-example-1">Создать подтверждение</button>
<script>
    $(function(){
        $('body').on('click', '#confirm-example-1', function(){
            pipui.confirm.open('Вы уверены, что хотите добавить запись в консоль?', 'Добавить запись в консоль?', function(){ console.log('Запись добавлена в консоль'); }, function(){ console.log('Отмена'); });
        });
    });
</script>
```

{% embed url="<https://codepen.io/pipui/pen/jOpymBq>" %}
Пример кода выше
{% endembed %}

Метод confirm() может принимать 8 аргументов. Все эти аргументы можно передать через первый аргумент в виде JSON объекта

<mark style="color:orange;">`params`</mark> - текст подтверждения или набор JSON параметров

<mark style="color:orange;">`title`</mark> - имя окна подтверждения

<mark style="color:orange;">`success`</mark> - функция, которая выполниться при нажатии на кнопку "ОК"

<mark style="color:orange;">`fail`</mark> - функция, которая выполниться при нажатии на кнопку "Отмена"

<mark style="color:orange;">`autoclose`</mark> - кол-во миллисекунд, через которое окно автоматически закроется

<mark style="color:orange;">`complete`</mark> - функция, которая запуская по окончанию появления окна подтверждения

<mark style="color:orange;">`yes`</mark> - имя кнопки "ОК"

<mark style="color:orange;">`no`</mark> - имя кнопки "Отмена"


# Вкладки

Вкладки позволяют разделять контент на разделы и переключаться по ним, как с помощью прямого обращения, так и через javascript. PipUI позволяет с легкостью реализовать данный подход, используя всего несколько строчек кода

```html
<div class="tabs">
    <ul class="tab-links">
        <li><a href="#" data-id="#example-tab-1" class="tab-link active">Tab #1</a></li>
        <li><a href="#" data-id="#example-tab-2" class="tab-link">Tab #2</a></li>
        <li><a href="#" data-id="#example-tab-3" class="tab-link">Tab #3</a></li>
    </ul>

    <div class="tab-list">
        <div class="tab-id active" id="example-tab-1">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam aperiam aut consectetur dicta ea eligendi esse, magnam minima, odio perferendis quia saepe totam vitae. Eius facere magnam omnis provident vero.
        </div>
        
        <div class="tab-id" id="example-tab-2">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit.
        </div>
        
        <div class="tab-id" id="example-tab-3">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi, voluptate?
        </div>
    </div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/ExpZmmo>" %}
Пример работы кода выше
{% endembed %}

Контейнером для вкладок выступает блок <mark style="color:orange;">`.tabs`</mark>, который в себе имеет 2 других контейнера <mark style="color:orange;">`ul.tab-links`</mark> и <mark style="color:orange;">`.tab-list`</mark> для вкладок и их содержимого соответственно.

Элемент с классом <mark style="color:orange;">`.tab-link`</mark> внутри блока <mark style="color:orange;">`ul.tab-links > li`</mark> выступает в качестве триггера, который должен иметь в себе отсылку к содержимому вкладки, через атрибут <mark style="color:orange;">`data-id`</mark>

Совместно с классом <mark style="color:orange;">`.tabs`</mark>, Вы можете использовать класс <mark style="color:orange;">`.tabs-horizontal`</mark>, который сделает вкладки и их содержимое горизонтальными.

Помимо HTML, Вы можете менять активность вкладок через javascript метод <mark style="color:orange;">`pipui.tabs.active`</mark>, принимающий 1 входящий параметр **id**, который является элементом содержимого вкладки. Данный метод возвращает true или false в зависимости от того, была ли переключена вкладка или нет.

```javascript
pipui.tabs.active('#example-tab-2')
```

Кроме всего прочего, Вы можете манипулировать цветами панели вкладок и их содержимым, их отступами и др., используя другие компоненты фреймворка.

```html
<div class="tabs tabs-horizontal">
    <ul class="tab-links bg-light-green-i">
        <li><a href="#" data-id="#example-tab-7" class="tab-link active">Tab #1</a></li>
        <li><a href="#" data-id="#example-tab-8" class="tab-link">Tab #2</a></li>
        <li><a href="#" data-id="#example-tab-9" class="tab-link">Tab #3</a></li>
    </ul>

    <div class="tab-list bg-gray-200">
        <div class="tab-id active" id="example-tab-7">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam aperiam aut consectetur dicta ea eligendi esse, magnam minima, odio perferendis quia saepe totam vitae. Eius facere magnam omnis provident vero.
            <div class="text-center pt-20">
                <button class="btn" onclick="$(this).closest('.tabs').toggleClass('tabs-horizontal')">Переключить расположение</button>
            </div>
        </div>
        <div class="tab-id" id="example-tab-8">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit.
        </div>
        <div class="tab-id" id="example-tab-9">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi, voluptate?
        </div>
    </div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/mdjRmwg>" %}
Пример работы кода выше
{% endembed %}


# Хлебные крошки

Когда необходимо выводить путь до страницы, Вы можете воспользоваться готовым компонентом фреймворка PipUI - хлебные крошки

```html
<div class="breadcrumbs">
    <a class="bc-item" href="http://pipui.loc/">PipUI</a>
    <a class="bc-item" href="http://pipui.loc/docs/">Документация</a>
    <a class="bc-item" href="http://pipui.loc/docs/components/">Компоненты</a>
    <a class="bc-item disabled preventDefault" href="http://pipui.loc/docs/components/breadcrumbs/">Хлебные крошки</a>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/BaPpRrN>" %}
Пример работы кода выше
{% endembed %}


# Спойлеры

```html
<a class="btn" href="#spoiler-example-1" data-spoiler>Показать/Скрыть</a>

<div class="spoiler p-20 mt-20 bg-purple-50 text-purple-200 rad-2" id="spoiler-example-1">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>
```

{% embed url="<https://codepen.io/pipui/pen/mdjRmxZ>" %}
Пример работы кода выше
{% endembed %}

Вы можете управлять скрытием и открытием по отдельности

```html
<a class="btn" href="#spoiler-example-2" data-spoiler-show>Показать</a>
<a class="btn" href="#spoiler-example-2" data-spoiler-hide>Скрыть</a>

<div class="spoiler p-20 mt-20 bg-deep-purple-50 text-deep-purple-200 rad-2" id="spoiler-example-2">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>
```

{% embed url="<https://codepen.io/pipui/pen/eYjgWrG>" %}
Пример работы кода выше
{% endembed %}

Помимо всего прочего, Вы можете управлять содержимым спойлера через javascript и таким образом кастомизировать спойлеры

В состав компонента входит "аккордеон", который работает аналогично спойлеру, только при открытии одного элемента, закрываются все другие

```html
<div class="accordion">
    <div class="accordion-id active">
        <a href="#" class="accordion-trigger">Accordeon #1</a>
        <div class="accordion-target">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, voluptates.
        </div>
    </div>

    <div class="accordion-id">
        <a href="#" class="accordion-trigger">Accordeon #2</a>
        <div class="accordion-target">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, voluptates.
        </div>
    </div>

    <div class="accordion-id">
        <a href="#" class="accordion-trigger">Accordeon #3</a>
        <div class="accordion-target">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, voluptates.
        </div>
    </div>

    <div class="accordion-id">
        <a href="#" class="accordion-trigger">Accordeon #4</a>
        <div class="accordion-target">
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci, voluptates.
        </div>
    </div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/PoBWmao>" %}
Пример работы кода выше
{% endembed %}


# Таблицы

В PipUI есть готовые стили для таблиц, а так же их адаптивная версия под разные разрешения экранов.

```html
<div class="table">
    <div class="table-row">
        <div class="table-cell">1</div>
        <div class="table-cell">PipUI Alpha</div>
        <div class="table-cell">1.0.0</div>
    </div>

    <div class="table-row">
        <div class="table-cell">2</div>
        <div class="table-cell">PipUI Beta</div>
        <div class="table-cell">1.0.0RC-2</div>
    </div>
</div>
```

{% embed url="<https://codepen.io/pipui/pen/KKBamBW>" %}
Пример работы кода выше
{% endembed %}

Для адаптивной таблицы, потребуется дополнительно указать класс <mark style="color:orange;">`.table-responsive`</mark> к классу .table и продублировать элементы названий шапки с классом <mark style="color:orange;">`.table-cell-resp`</mark>

<details>

<summary>Example responsive</summary>

```html
<div class="table table-responsive">
    <div class="table-header">
        <div class="table-row">
            <div class="table-cell-resp">#</div>
            <div class="table-cell">#</div>
            <div class="table-cell-resp">Наименование</div>
            <div class="table-cell">Наименование</div>
            <div class="table-cell-resp">Версия</div>
            <div class="table-cell">Версия</div>
        </div>
    </div>

    <div class="table-body">
        <div class="table-row">
            <div class="table-cell-resp">#</div>
            <div class="table-cell">1</div>
            <div class="table-cell-resp">Наименование</div>
            <div class="table-cell">PipUI Alpha</div>
            <div class="table-cell-resp">Версия</div>
            <div class="table-cell">1.0.0</div>
        </div>

        <div class="table-row">
            <div class="table-cell-resp">#</div>
            <div class="table-cell">2</div>
            <div class="table-cell-resp">Наименование</div>
            <div class="table-cell">PipUI Beta</div>
            <div class="table-cell-resp">Версия</div>
            <div class="table-cell">1.0.0RC-2</div>
        </div>
    </div>
</div>
```

</details>

Если Вам необходимо зафиксировать ширину каждого столбца, используйте класс <mark style="color:orange;">`.table-fixed`</mark> или если потребуется сделать каждый ряд подсвечиваемым при наведении, добавьте класс <mark style="color:orange;">`.table-hover`</mark> к классу .table

<details>

<summary>Example fixed &#x26; hover</summary>

```html
<div class="table table-fixed table-hover">
    <div class="table-header">
        <div class="table-row">
            <div class="table-cell-resp">#</div>
            <div class="table-cell">#</div>
            <div class="table-cell-resp">Наименование</div>
            <div class="table-cell">Наименование</div>
            <div class="table-cell-resp">Версия</div>
            <div class="table-cell">Версия</div>
        </div>
    </div>

    <div class="table-row">
        <div class="table-cell">1</div>
        <div class="table-cell">PipUI Alpha</div>
        <div class="table-cell">1.0.0</div>
    </div>

    <div class="table-row">
        <div class="table-cell">2</div>
        <div class="table-cell">PipUI Beta</div>
        <div class="table-cell">1.0.0RC-2</div>
    </div>

    <div class="table-row">
        <div class="table-cell">3</div>
        <div class="table-cell">PipUI</div>
        <div class="table-cell">1.0.0</div>
    </div>

    <div class="table-row">
        <div class="table-cell">4</div>
        <div class="table-cell">PipUI</div>
        <div class="table-cell">2.0.0</div>
    </div>
</div>
```

</details>


# Панель BB-кодов

Вы можете интегрировать панель BB-кодов прямо в текстовое поле, добавив всего-лишь 1 класс <mark style="color:orange;">`.bbpanel`</mark>

```html
<textarea class="bbpanel"></textarea>
```

{% embed url="<https://codepen.io/pipui/pen/mdjRmGN>" %}
Пример работы кода выше
{% endembed %}

Управлять доступными тегами можно используя javascript. Код ниже добавит тег \[url]\[/url] в панель

```javascript
pipui.bbpanel.codes.url = {'title': 'Гиперссылка', 'text': '<i class="fa-solid fa-link"></i>', 'left': '[url]', 'right': '[/url]'}; 
```


# BB-коды

coВ составе фреймворка PipUI есть компонент с заготовленными стилями для BB-кодов. Всё что необходимо сделать, это выставить необходимую разметку или классы

Жирное начертание шрифта (теги <mark style="color:orange;">`[b][/b]`</mark>)

```html
<span class="bb-bold">Жирное начертание шрифта</span>
```

Наклонный текст (теги <mark style="color:orange;">`[i][/i]`</mark>)

```html
<span class="bb-italic">Наклонный текст</span>
```

Зачеркнутый текст (теги <mark style="color:orange;">`[s][/s]`</mark>)

```html
<span class="bb-strike">Зачеркнутый текст</span>
```

Подчеркнутый текст (теги <mark style="color:orange;">`[u][/u]`</mark>)

```html
<span class="bb-underline">Подчеркнутый текст</span>
```

Выравнивание по левому краю (теги <mark style="color:orange;">`[left][/left]`</mark>)

```html
<div class="bb-text-left">Выравнивание по левому краю</div> 
```

Выравнивание по правому краю (теги <mark style="color:orange;">`[right][/right]`</mark>)

```html
<div class="bb-text-right">Выравнивание по правому краю</div> 
```

Выравнивание по центру (теги <mark style="color:orange;">`[center][/center]`</mark>)

```html
<div class="bb-text-center">Выравнивание по центру</div> 
```

Горизонтальная линия (тег <mark style="color:orange;">`[line]`</mark>)

```html
<div class="bb-line"></div> 
```

Скрытый текст (теги <mark style="color:orange;">`[spoiler="Показать/Скрыть"][/spoiler]`</mark>)

```html
<div class="bb-spoiler-wrapper">
    <div class="bb-spoiler">
        <a href="#" class="bb-spoiler-trigger">Показать/Скрыть</a>
        <div class="bb-spoiler-text">Скрытый текст!</div>
    </div>
</div>
```

Изображение (теги <mark style="color:orange;">`[img]`</mark>`url`<mark style="color:orange;">`[/img]`</mark>)

```html
<img src="/Themes/Default/img/logo.svg" alt="IMG" class="bb-image" /> 
```

Цитата (теги <mark style="color:orange;">`[quote][/quote]`</mark>)

```html
<div class="bb-quote-wrapper">
    <div class="bb-quote">
        <div class="bb-quote-title">PipUI - 01.01.2019</div>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Commodi, in.
    </div>
</div>
```

Вставка кода (теги <mark style="color:orange;">`[code][/code]`</mark>)

```html
<div class="bb-code">
    <div class="bb-code-language">Javascript</div>
    <div class="bb-code-text">alert('PipUI');</div>
</div>
```

Вставка **YouTube** проигрывателя (теги <mark style="color:orange;">`[youtube][/youtube]`</mark>)

```html
<div class="bb-youtube">
    <iframe width="510" height="287" src="https://www.youtube.com/embed/eY52Zsg-KVI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
```


# Валидаторы форм

Очень часто перед отправкой формы, требуется произвести ее проверку на корректность заполнения полей в ней и для этого в фреймворке PipUI есть соответствующий компонент.

```html
<form method="post" class="p-20 rad-2 bg-gray-200" novalidate data-formvalidator>
    <div>
        <input type="text" name="name" class="mb-0" data-formvalidator-text="Поле является обязательным для заполнения" required placeholder="required">
    </div>

    <div class="pt-20">
        <input type="text" name="name" data-formvalidator-type="danger" class="mb-0" data-formvalidator-text="Данное поле является обязательным и принимает только цифры" required pattern="^\d+$" placeholder="Цифры">
    </div>

    <div class="pt-20 text-center">
        <button type="submit" class="btn">Отправить</button>
    </div>
</form>
```

{% embed url="<https://codepen.io/pipui/pen/QWBdgLv>" %}
Пример работы кода выше
{% endembed %}

Вы можете управлять стилем появляющейся подсказки с помощью атрибута\ <mark style="color:orange;">`[data-formvalidator-type]`</mark>, который может принимать значения: *warning*, *danger*, *info*, *success* Атрибут <mark style="color:orange;">`[data-formvalidator-text]`</mark> принимает в качестве значения тект, который будет выводится в оповещении в случает некорректного заполнения поля.


# Индексы полей ввода

Иногда бывает так, что появляется необходимость управлять индексами полей ввода. Казалось бы, что для этого неплохо подойтет атрибут tabindex, однако помимо данного атрибута учитываются и другие встроенные компоненты, например ссылки или адресная строка.

Именно из-за таких ситуаций и был разработан данный компонент, который выступает ограничителем.

Атрибут <mark style="color:orange;">`[data-tabindex]`</mark> служит для определения блока в котором работают атрибуты <mark style="color:orange;">`[tabindex]`</mark>

```html
<form method="post" data-tabindex>
    <input type="text" name="name" tabindex="1" placeholder="tabindex=1">

    <input type="text" name="name" tabindex="2" placeholder="tabindex=2">

    <input type="text" name="name" tabindex="5" placeholder="tabindex=5">

    <input type="text" name="name" tabindex="3" placeholder="tabindex=3">

    <input type="text" name="name" tabindex="4" placeholder="tabindex=4">

    <div class="pt-20 text-center">
        <button type="submit" class="btn">Отправить</button>
    </div>
</form>
```

{% embed url="<https://codepen.io/pipui/pen/QWBdgWg>" %}
Пример работы кода выше
{% endembed %}


# Всплывающие подсказки

Компонент всплывающих подсказок - это отличная альтернатива стандартным атрибутам title. Используйте атрибут <mark style="color:orange;">`data-tooltip`</mark> вместо стандартного *title*, для работы всплывающих подсказок.

Для направления отображения используйте альтернативный синтаксис <mark style="color:orange;">`data-tooltip-left`</mark>, <mark style="color:orange;">`data-tooltip-right`</mark>, <mark style="color:orange;">`data-tooltip-top`</mark>, <mark style="color:orange;">`data-tooltip-bottom`</mark> (слева, справа, сверху, снизу соответственно).

```html
<a href="#" data-tooltip="Стандартная подсказка">По умолчанию</a> |
<a href="#" data-tooltip-left="Подсказка слева!">Слева</a> |
<a href="#" data-tooltip-top="Подсказка сверху!">Сверху</a> |
<a href="#" data-tooltip-bottom="Подсказка снизу!">Снизу</a> |
<a href="#" data-tooltip-right="Подсказка справа!">Справа</a>
```

{% embed url="<https://codepen.io/pipui/pen/GRBrEgp>" %}
&#x20;Пример работы кода выше
{% endembed %}


# Подсвечивающиеся блоки

Иногда есть необходимость выделить конкретные участки сайта, для привлечения к ним пользовательского внимания.

Для этого нам на помощь придут подсвечивающиеся блоки. При активации такой подсветки, область вокруг блоков затемняется и становится недоступной до момента нажатия отмены, а пользователя переместит к выделенной области(скролл)

Для наглядности, мы добавили несколько блоков ниже. По нажатию на кнопки, они будут выделяться

{% embed url="<https://codepen.io/pipui/pen/yLqgXNp>" %}
Пример
{% endembed %}

Для подсвечивания нужного блока, добавьте ему триггер, например, атрибут <mark style="color:orange;">`id`</mark> и выводимый в подсказке текст в атрибут <mark style="color:orange;">`data-poplight-message`</mark>.

В качестве элемента, который будет вызывать подсветку, используйте атрибут\ <mark style="color:orange;">`data-poplight`</mark>, где в качестве значения будет триггер(в примере ранее - это id).

*Если указать в атрибуте data-poplight-message другой элемент (id,класс,атрибут), то будет вызван другой блок, который вы можете добавить самостоятельно с классом*\ <mark style="color:orange;">`.poplight-message`</mark>

Влиять на поведение подсветки можно и с помощью javascript. Для этого в компоненте подготовлен объект <mark style="color:orange;">`pipui.poplight`</mark>


# Всплывающие блоки

Если есть необходимость использовать HTML во всплывающих подсказках([tooltip](/components/tooltip)), то вам могут помочь всплывающие блоки.

```html
<div id="popup-1" class="popup">
    <div class="popup-header">Header</div>
    <div class="popup-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi, sit?</div>
</div>
<button class="btn" data-popup="#popup-1">Пример</button>
```

{% embed url="<https://codepen.io/pipui/pen/RwBKgrP>" %}
Пример работы кода выше
{% endembed %}

Значение атрибута <mark style="color:orange;">`data-popup`</mark> служит определяющим элементом, который вызовет блок <mark style="color:orange;">`.popup`</mark>

Скрытие всплывающего блока можно контролировать, добавив атрибут\ <mark style="color:orange;">`data-popup-closeover`</mark> к блоку с классом <mark style="color:orange;">`.popup`</mark>.

Таким образом, при нажатии на область вне блока <mark style="color:orange;">`.popup`</mark>, все остальные блоки <mark style="color:orange;">`.popup`</mark> с атрибутом <mark style="color:orange;">`data-popup-closeover`</mark> будут автоматически скрыты.

Положение всплывающего блока зависит от атрибута <mark style="color:orange;">`data-popup-placement`</mark>, принимающего значения: **left**, **top**(по умолчанию), **right** и **bottom**.

Так или иначе, в случае недостатка места на экране для отображения в заданном направлении, компонент будет искать новое направление автоматически.

```html
<div id="popup-2" class="popup" data-popup-placement="left">
    <div class="popup-header">Header</div>
    <div class="popup-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div>
</div>
<div id="popup-3" class="popup" data-popup-placement="top">
    <div class="popup-header">Header</div>
    <div class="popup-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div>
</div>
<div id="popup-4" class="popup" data-popup-placement="bottom">
    <div class="popup-header">Header</div>
    <div class="popup-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div>
</div>
<div id="popup-5" class="popup" data-popup-placement="right">
    <div class="popup-header">Header</div>
    <div class="popup-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</div>
</div>
<button class="btn" data-popup="#popup-2">Слева</button>
<button class="btn" data-popup="#popup-3">Сверху</button>
<button class="btn" data-popup="#popup-4">Снизу</button>
<button class="btn" data-popup="#popup-5">Справа</button>
```

{% embed url="<https://codepen.io/pipui/pen/eYjgRJK>" %}
Пример работы кода выше
{% endembed %}


# Слайдер

Слайдер - отличное дополнение для вашего сайта, когда необходимо показать специальные акции или другое интересное содержимое, которое может быть не только изображением, но и любым другим контентом.

```html
<div id="slider-1"></div>
<script>
    $(function(){
        $('#slider-1').slider({
            'slides': [
                '<div class="slider-slide" style="background-image: url(img/pic/1.jpg);"></div>',
                '<div class="slider-slide">Some text</div>',
                '<div class="slider-slide" style="background-image: url(img/pic/3.jpg);"></div>'
            ]
        });
    });
</script>
```

{% embed url="<https://codepen.io/pipui/pen/jOpywra>" %}
Пример работы кода выше
{% endembed %}

Вы можете назначить объект .slider() переменной и управлять им через эту переменную, выставляя настройки во время выполнения скрипта.


# Автозаполнение

Автозаполнение помогает автоматический получать данные и выводить их в списке под полем ввода.

Некоторые из параметров, передаваемых обработчику, можно задать через атрибут\ <mark style="color:orange;">`data-ac-*`</mark>. Так, например, <mark style="color:orange;">`data-ac-url`</mark> - задает URL адрес обработчика,\ <mark style="color:orange;">`data-ac-method`</mark> - метод передачи обработчику, <mark style="color:orange;">`data-ac-type`</mark> - тип получаемых данных, <mark style="color:orange;">`data-ac-data`</mark> - список элементов через запятую, <mark style="color:orange;">`data-ac-min`</mark> - минимальное кол-во вводимых символов, по которым будет обрабатываются результат.

Остальные параметры можно передать через опции объекта <mark style="color:orange;">`pipui.autocomplete`</mark>

```javascript
var ac = new pipui.autocomplete($('#example1'));

    ac
        .setData(tags) // Список элементов в виде строки/массива/объекта
        .setType('json') // Как будут обрабатываться входящие данные
        .setKey('title') // По какому параметру будет производится поиск
        .setMin(5) // Минимальное кол-во символов для активации поиска
        .setParams(formdata) // По умолчанию в запросе передается только параметр value, но вы можете добавить к нему дополнительные параметры через объект formData
        .setURL('') // URL адрес, на который будет отправлен запрос
        .setMethod('POST') // Метод передаваемых данных. По умолчанию используется GET
        .setTimer(300) // Задержка при поиске результатов. По умолчанию 300
        .setResults(10) // Максимальное кол-во выдаваемых результатов. По умолчанию 10
        .setInput(element) // Объект поля ввода
        .setTemplateSelector('<li class="autocomplete-item"><a href="#" class="autocomplete-link" data-index="{KEY}" rel="nofollow">{title}</a></li>') // Изменение шаблона элемента по умолчанию. В качестве зарезервированных шаблонных ключей можно использовать: {KEY} - ключ элемента списка; {VALUE} - значение элемента списка; {ИМЯ_ПАРАМЕТРА} - любой ключ из объекта
        .setTemplateBlock('...html...'); // Изменение шаблона блока списка по умолчанию. В качестве зарезервированных шаблонных ключей можно использовать {ID} - уникальный ID блока автозаполнения; {ITEMS} - список найденных элементов
```


# Селектор тегов

Селектор тегов помогает осуществить выборку ключевых слов или предложений.

В качестве разделителей используются запятая или клавиша ENTER.

Все полученные результаты помещаются в скрытое поле ввода. По умолчанию атрибут name данного поля имеет значение tags, которое можно поменять через атрибут data-ts в поле ввода.

```html
<input type="text" data-ts value="example,overflow,test" placeholder="Введите теги">
```

{% embed url="<https://codepen.io/pipui/pen/ExpZXgG>" %}
Пример работы кода выше
{% endembed %}

Некоторые из параметров, передаваемых обработчику, можно задать через атрибут\ <mark style="color:orange;">`data-ts-*`</mark>. Так, например, <mark style="color:orange;">`data-ts-separator`</mark> - задает разделить предустановленного значания value, <mark style="color:orange;">`data-ts-min`</mark> - минимальную длину тега, <mark style="color:orange;">`data-ts-max`</mark> - максимальную длину тега, <mark style="color:orange;">`data-ts-name`</mark> - имя результирующего поля, <mark style="color:orange;">`data-ts-position`</mark> - позиция куда будут добавляться теги (start - вначале, end - вконце), <mark style="color:orange;">`data-ts-mintags`</mark> - минимальное кол-во тегов, <mark style="color:orange;">`data-ts-maxtags`</mark> - максимальное кол-во тегов.

Остальные параметры можно передать через опции объекта <mark style="color:orange;">`pipui.tagselector`</mark>

```javascript
var ts = new pipui.tagselector($('#example1'));

ts
.setMin(1) // Минимальное кол-во символов для добавления тега. По умолчанию 1
.setMax(32) // Максимальное кол-во символов для добавления тега. По умолчанию 32
.setKeys([',', 'Enter']) // Клавиши, по нажатию которых произойдет инициация добавления тега
.setPosition('end') // Как будут вставляться теги в списке - вначале или вконце(start или end соответственно). По умолчанию вконце - end
.setSeparator(',') // Разщделитель предустановленного значания value
.setMinTags(0) // Минимальное кол-во вставляемых тегов. По умолчанию 0 - без лимита
.setMaxTags(0) // Максимальное кол-во вставляемых тегов. По умолчанию 0 - без лимита
.setName('tags') // Имя результирующего поля
.append(value) // Добавить тег вконец списка
.prepend(value) // Добавить тег вначало списка
//.exists(key) // Проверяет наличие тега по ключу
.remove(key) // Удаляет тег по ключу
.clear() // Удаляет все теги из списка
//.length() // Возвращает кол-во тегов
.onclear(f()) // Действие, которое произойдет при удалении всех тегов(clear)
.onpush(f(value, name, position)) // Действие, которое произойдет при добавлении тега
.setTemplateSelector('...html...') // Изменение шаблона элемента по умолчанию. В качестве зарезервированных шаблонных ключей можно использовать: {KEY} - ключ элемента списка; {VALUE} - значение элемента списка; {NAME} - имя результирующего поля
.setTemplateBlock('...html...'); // Изменение шаблона блока списка по умолчанию. В качестве зарезервированных шаблонных ключей можно использовать {ID} - уникальный ID селектора
```

Вы так же можете использовать селектор тегов и [автозаполнение](/components/autocomplete)

```javascript
$(function(){
        var ts = new p.tagselector($('.ts-1')).setDisableEvents(true);
        var ac = new p.autocomplete($('.ac-1'));

        ac.choice(function(data){ ts.append(data.value, data.key).getInput().val(''); });
});
```


# Блоки оповещений

Блок оповещений - стилизованный блок для привлечения внимания пользователей.

```html
<div class="alertblock">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit.
    A aspernatur dicta dignissimos doloremque, facere illo ipsa molestias provident quasi quis, quos rem.
    Ab, expedita hic magni quidem quisquam reprehenderit suscipit? Lorem ipsum dolor sit amet,
    consectetur adipisicing elit. Aliquid aperiam asperiores deleniti et fuga harum,
    ipsam laboriosam laborum nam nemo nobis numquam ratione,
    repellat repudiandae totam ullam ut velit vitae.
</div>
```

```html
<div class="alertblock bg-orange-50">
    <h5><i class="fa-solid fa-triangle-exclamation"></i> Attention!</h5>
    <div class="pt-12">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit.
        A aspernatur dicta dignissimos doloremque, facere illo ipsa molestias
        provident quasi quis, quos rem. Ab, expedita hic magni quidem quisquam
        reprehenderit suscipit? Lorem ipsum dolor sit amet, consectetur adipisicing
        elit. Aliquid aperiam asperiores deleniti et fuga harum, ipsam laboriosam
        laborum nam nemo nobis numquam ratione, repellat repudiandae totam ullam ut velit vitae.
    </div>
</div>
```

Вы можете использовать класс <mark style="color:orange;">`.alertblock`</mark> совместно с классами <mark style="color:orange;">`.alertblock-before`</mark> и <mark style="color:orange;">`.alertblock-after`</mark> которые зададут необходимые отступы по краям для блоков <mark style="color:orange;">`.before`</mark> и <mark style="color:orange;">`.after`</mark>, куда вы сможете вставить небольшие элементы, типа иконок и/или кнопки закрытия.

```html
<div class="alertblock alertblock-before alertblock-after">
    <div class="before"><i class="fa-solid fa-triangle-exclamation"></i></div>
    <div class="after"><a href="#" class="alertblock-close" rel="nofollow">×</a></div>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit.
    A aspernatur dicta dignissimos doloremque, facere illo ipsa
    molestias provident quasi quis, quos rem. Ab, expedita hic magni
    quidem quisquam reprehenderit suscipit? Lorem ipsum dolor sit amet,
    consectetur adipisicing elit. Aliquid aperiam asperiores deleniti et fuga
    harum, ipsam laboriosam laborum nam nemo nobis numquam ratione,
    repellat repudiandae totam ullam ut velit vitae.
</div>
```

Кнопка закрытия - элемент <mark style="color:orange;">`.alertblock-close`</mark> служит для закрытия родительского блока <mark style="color:orange;">`.alertblock`</mark>

Если вам требуется закрытие других элементов <mark style="color:orange;">`.alertblock`</mark>, используйте javascript код, который представлен ниже

```javascript
pipui.alertblock.hide('#element'); // Скрыть элемент
pipui.alertblock.show('#element'); // Показать элемент
```


# Селекторы даты и времени

```html
<input type="text" data-datepicker>
<input type="text" value="10.11.2014 16:51:20" data-datetimepicker>
```

{% embed url="<https://codepen.io/pipui/pen/mdjRwWP>" %}
Пример работы кода выше
{% endembed %}

Инициализация селекторов происходит в поле ввода одним из двух атрибутов:\ <mark style="color:orange;">`data-datepicker`</mark> или <mark style="color:orange;">`data-datetimepicker`</mark>

Атрибут <mark style="color:orange;">`data-datepicker-autoclose="true"`</mark> используется для автоматического закрытия после выбора даты


# Якоря

Якоря позволяют организовать переход к элементу с анимацией

```html
<ul class="nav-menu">
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-1" class="nav-menu-link" rel="nofollow">Anchor link #1</a></li>
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-2" class="nav-menu-link" rel="nofollow">Anchor link #2</a></li>
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-3" class="nav-menu-link" rel="nofollow">Anchor link #3</a></li>
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-4" data-anchor-duration="1000" class="nav-menu-link" rel="nofollow">Anchor with custom duration</a></li>
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-5" data-anchor-duration="2000" data-anchor-easing="easeOutBounce" class="nav-menu-link" rel="nofollow">Anchor with custom easing</a></li>
    <li class="nav-menu-item"><a href="#" data-anchor="#achor-6" data-anchor-hash="true" class="nav-menu-link" rel="nofollow">Anchor with hash change</a></li>
</ul>
```

{% embed url="<https://codepen.io/pipui/pen/PoBWjmb>" %}
Полный пример кода выше
{% endembed %}


# Контакты

На данной страницы вы найдёте актуальную информацию о средствах связи с нами

#### Предложения и сотрудничество

E-Mail: <admin@qexy.org>

#### Социальные сети

VK: <https://vk.com/pipui>

Telegram: <https://t.me/pip_ui>


