Контроллеры

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

B

C

D

E

G

F

I

L

M

P

R

S

T

U

V

<ya-kit-blog-detail-controller />

Вспомогательный компонент для загрузки статьи и размещения ее в контексте шаблона.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

BlogModel, null

Загруженная модель с данными или null.

Нет

Связанные модели: BlogModel.

<ya-kit-blog-listing-controller />

Вспомогательный компонент для загрузки списка статей.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

per-page

number

Количество карточек на странице.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

BlogListingModelr

Загруженная модель с данными.

Нет

quantity

number

Текущее количество товара в корзине пользователя.

Да

onPageChange

(page: number) => void

Функция обновления активной страницы.

Да

Связанные модели: BlogListingModel.

<ya-kit-breadcrumbs-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

BreadcrumbModel[]

Массив загруженных моделей с данными.

Нет

Связанные модели: BreadcrumbModel.

<ya-kit-boundary-controller />

Вспомогательный компонент для автоматического отслеживания положения элемента относительно страницы и области просмотра.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

rect

Nullable<DOMBoundaryRect>

Информация о границах отслеживаемого элемента.

Нет

center.relative

Optional<Point>

Относительные координаты центра в долях от размеров viewport.

Нет

center.absolute

Optional<Point>

Абсолютные координаты центра элемента относительно документа.

Нет

viewport.width

Optional<number>

Ширина области просмотра браузера.

Нет

viewport.height

Optional<number>

Высота области просмотра браузера.

Нет

elementRef

RefObject<HTMLElement>

React ref‑ссылка на DOM‑элемент для отслеживания положения.

Да

Пример использования

<ya-kit-boundary-controller as="controller">
    <div ref="{{controller.elementRef}}">
        {{#with controller.center.relative}}
            <div class="img_wrapper {{if (lte y 0.85) 'active'}}">
                <ya-kit-image src="{{settings.images.left}}" class="img img--left" />
                <ya-kit-image src="{{settings.images.right}}" class="img img--right" />
            </div>
        {{/with}}
    </div>
</ya-kit-boundary-controller>

Связанные модели: DOMBoundaryRectModel, PointModel.

<ya-kit-categories-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

include‑images

boolean

Включить/исключить из ответа изображения.

Примечание

Включение в ответ изображений увеличит время загрузки данных.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

CategoryModel[]

Список загруженных категорий вместе с дочерними.

Нет

Связанные модели: CategoryModel.

<ya-kit-collections-listing-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

source

all, collections, categories

Источник данных:

  • all — категории и коллекции.
  • collections — только коллекции.
  • categories — только категории.

По умолчанию all.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

CollectionModel[]

Список загруженных коллекций.

Нет

Связанные модели: CollectionModel.

<ya-kit-company-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

CompanyModel, null

Загруженная модель с данными или null.

Нет

Связанные модели: CompanyModel.

Вспомогательный компонент для кастомизации логики работы <ya-kit-carousel />.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

controls.isPrevEnabled

boolean

Признак доступности кнопки перехода к предыдущему слайду.

Да

controls.isNextEnabled

boolean

Признак доступности кнопки перехода к следующему слайду.

Да

onTrackScroll

() => void

Функция, которая вызывается при прокрутке карусели.

Да

onPrevSlide

() => void

Функция перехода на предыдущий слайд.

Да

onNextSlide

() => void

Функция перехода на следующий слайд.

Да

Пример использования

<ya-kit-carousel-controller as="controller">
	<ya-kit-button is-disabled={{not controller.controls.isPrevEnabled}} on-press={{controller.onPrevSlide}}>Назад</ya-kit-button>
	<ya-kit-button is-disabled={{not controller.controls.isNextEnabled}} on-press={{controller.onNextSlide}}>Вперед</ya-kit-button>
    <ya-kit-carousel controller={{controller}}>
    	 <!-- … -->
	</ya-kit-carousel>
</ya-kit-carousel-controller>

Связанные компоненты: ya-kit-carousel.

<ya-kit-countdown-controller />

Вспомогательный компонент для обратного отсчета до указанной даты.

Название

Тип

Описание

as

string

Имя ключа в контексте для доступа к загруженным данным.

date

string

Целевая дата окончания отсчета (в формате ISO 8601).

on-complete

() => void

Функция вызываемая по окончании времени.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isComplete

boolean

Признак завершения отсчета:
true — оставшееся время достигает нуля.

Да

timeLeft

Nullable<TimeLeftModel>

Оставшееся время до целевой даты, разбитое на составляющие.

Нет

Пример использования

<ya-kit-countdown-controller date="2026-08-08T12:00:00.000Z" as="controller">
    <ya-kit-h-stack gap="500">
        <ya-kit-v-stack gap="25" align-items="center">
            <ya-kit-text size="5xl" weight="bold">{{padStart controller.timeLeft.days 2 0}}</ya-kit-text>
            <ya-kit-text color="secondary">Дней</ya-kit-text>
        </ya-kit-v-stack>
        <ya-kit-v-stack gap="25" align-items="center">
            <ya-kit-text size="5xl" weight="bold">{{padStart controller.timeLeft.hours 2 0}}</ya-kit-text>
            <ya-kit-text color="secondary">Часов</ya-kit-text>
        </ya-kit-v-stack>
        <ya-kit-v-stack gap="25" align-items="center">
            <ya-kit-text size="5xl" weight="bold">{{padStart controller.timeLeft.minutes 2 0}}</ya-kit-text>
            <ya-kit-text color="secondary">Минут</ya-kit-text>
        </ya-kit-v-stack>
        <ya-kit-v-stack gap="25" align-items="center">
            <ya-kit-text size="5xl" weight="bold">{{padStart controller.timeLeft.seconds 2 0}}</ya-kit-text>
            <ya-kit-text color="secondary">Секунд</ya-kit-text>
        </ya-kit-v-stack>
    </ya-kit-h-stack>
</ya-kit-countdown-controller>

Связанные модели: TimeLeftModel.

<ya-kit-delivery-options-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

location

RegionModel

Текущая локация пользователя

product

ProductVariantModel

Выбранный вариант продукта

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

DeliveryOptionModel[]

Загруженная модель с данными.

Нет

Связанные модели: RegionModel, ProductVariantModel, DeliveryOptionModel.

<ya-kit-discount-ladder-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны данные контроллера. По умолчанию — controller.

per-page

number

Количество вариантов товаров на странице. Положительное целое число.
По умолчанию — 16 (значение также используется, если передано некорректное число).

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки списка товаров или корзины. false после завершения.

Да

model

DiscountLadderModel

Модель с данными лестницы скидок, списком товаров, количеством товаров акции в корзине, пагинацией и сортировкой. Всегда содержит объект. При отсутствии данных акции model.discountLadder равен undefined.

Да

onPageChange

(page: number) => void

Функция обновления активной страницы. Изменяет параметр page в URL, сохраняя остальные параметры. Для первой страницы параметр page удаляется.

Да

onSortingChange

(sorting: string) => void

Функция обновления сортировки. Принимает value одной из опций model.sorting.options. Изменяет параметр sorting в URL и переключает список на первую страницу.

Да

getPageUrl

(page: number) => string

Возвращает ссылку на указанную страницу списка с сохранением остальных параметров URL. Самостоятельно переход не выполняет. Используется в атрибуте get-page-url компонента пагинации.

Да

Примечание

Контроллер самостоятельно загружает данные корзины — оборачивать его в ya-kit-shopping-cart-controller не требуется. Перед отображением информации об акции проверяйте наличие model.discountLadder. Этот контроллер не предназначен для добавления товаров в корзину.

Пример использования
<ya-kit-discount-ladder-controller as="ladder" per-page="24">
    {{#if ladder.isLoading}}
        <ya-kit-text>Загрузка...</ya-kit-text>
    {{else}}
        {{#if ladder.model.discountLadder}}
            <ya-kit-v-stack gap="300">
                <ya-kit-text size="xl" weight="bold">
                    {{ladder.model.discountLadder.title}}
                </ya-kit-text>
                <ya-kit-text>
                    Товаров по акции в корзине: {{ladder.model.productsQuantity}}
                </ya-kit-text>

                <ya-kit-products-sorting
                    value="{{ladder.model.sorting.value}}"
                    options="{{ladder.model.sorting.options}}"
                    on-change="{{ladder.onSortingChange}}"
                />

                <ya-kit-v-stack gap="200">
                    {{#each ladder.model.items as |product|}}
                        <a href="{{product.url}}">{{product.name}}</a>
                    {{else}}
                        <ya-kit-text>Товары не найдены</ya-kit-text>
                    {{/each}}
                </ya-kit-v-stack>

                <ya-kit-pagination
                    current="{{ladder.model.pagination.current}}"
                    total="{{ladder.model.pagination.total}}"
                    on-page-change="{{ladder.onPageChange}}"
                    get-page-url="{{ladder.getPageUrl}}"
                />
            </ya-kit-v-stack>
        {{/if}}
    {{/if}}
</ya-kit-discount-ladder-controller>

Связанные модели: DiscountLadderModel.

Связанные компоненты: ya-kit-products-sorting, ya-kit-pagination.

<ya-kit-drag-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

is‑disabled

boolean

Отключает возможность перетаскивания.

axis

x, y, both

Ограничение движения по осям:

  • x — только горизонтальное перемещение.
  • y — только вертикальное перемещение.
  • both — свободное перемещение в обоих направлениях.

По умолчанию both.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

position

Nullable<Position>

Текущая позиция перетаскиваемого элемента относительно контейнера. До первого перемещения — null.

Нет

progressHorizontal

Nullable<number>

Прогресс горизонтального перемещения от 0 до 1. До первого перемещения — null.

Нет

progressVertical

Nullable<number>

Прогресс вертикального перемещения от 0 до 1. До первого перемещения — null.

Нет

isDragging

boolean

Индикатор, указывающий, активно ли перетаскивание в данный момент.

Да

elementRef

RefObject<HTMLElement>

React ref‑ссылка на перетаскиваемый DOM‑элемент для отслеживания позиций.

Да

containerRef

RefObject<HTMLElement>

React ref‑ссылка на контейнер, определяющий границы перемещения.

Да

Связанные примеры: До/После.

<ya-kit-email-subscription-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

enable-agreement

boolean

Включает/отключает обязательное согласие пользователя.

promocode

PromocodeModel, null

Промокод, который будет отправлен при подписке.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки/отправки данных, false после завершения.

Да

model

EmailSubscriptionModel / null

Загруженная модель с данными или null.

Да

onEmailChange

(email: string) => void

Обработчик изменения адреса электронной почты.

Да

onAgreementChange

(isAgreed: boolean) => void

Обработчик изменения значения признака согласия.

Да

onSubmit

() => void

Валидирует и отправляет форму подписки на сервер.

Да

Связанные модели: PromocodeModel, EmailSubscriptionModel.

<ya-kit-gifts-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные. По умолчанию — controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки вариантов подарка, false после завершения.

Да

items

GiftVariantOption[], null

Список вариантов подарка для выбора или null, если варианты еще не загружены.

Нет

onLoadGifts

() => void

Загружает варианты активного подарка.

Да

Связанные модели: GiftVariantOption.

<ya-kit-gift-slot-controller />

Вспомогательный компонент для отображения слота подарка в шаблоне. Добавляет к слоту обработчик выбора и использует данные о слотах из giftSlots контроллера корзины.

Название

Тип

Описание

slot

GiftSlot

Слот подарка (один элемент массива giftSlots контроллера корзины) — обязательный параметр.

as

string

Имя ключа в контексте, под которым будут доступны данные слота. По умолчанию — controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

model

GiftSlot

Модель слота подарка, включающая следующие поля:

  • giftId
  • isAvailable
  • threshold
  • progress
  • remainingCartPrice
  • current
  • total

Да

onSelect

() => void

Активирует подарок текущего слота (используя giftId) и загружает его варианты.

Да

Связанные модели: GiftSlot.

<ya-kit-gift-snippet-controller />

Вспомогательный компонент для одного варианта подарка (сниппета). Размещает вариант в контексте шаблона вместе с обработчиками выбора, удаления и смены подарка.

Название

Тип

Описание

gift

GiftVariantOption

Вариант подарка. Обязательный параметр.

as

string

Имя ключа в контексте, под которым будут доступны данные варианта. По умолчанию — controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

model

GiftVariantOption

Модель варианта подарка, включающая следующие поля:

  • id
  • variant

Да

onSelect

() => void

Выбирает данный вариант подарка (используя id).

Да

onDelete

() => void

Удаляет выбранный подарок из корзины (используя giftId варианта).

Да

updateGift

() => void

Активирует подарок этого варианта и подгружает его варианты.

Да

Связанные модели: GiftVariantOption.

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

tags

string[]

Массив тегов для фильтрации статей. Если не указано, загружаются статьи без фильтрации.

count

number

Количество статей для загрузки.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

BlogModel[], null

Загруженная модель с данными или null.

Нет

Связанные модели: BlogModel.

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

data-source

ProductsSource

Объект с информацией об источнике данных товаров

count

number

Количество товаров для загрузки.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

ProductSnippetModel[], null

Загруженная модель с данными или null.

Нет

Связанные модели: ProductSnippetModel.

<ya-kit-favourite-products-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

FavouriteProductsListingModel

Загруженная модель с данными.

Нет

Связанные модели: FavouriteProductsListingModel.

<ya-kit-field-controller />

Вспомогательный компонент для управления состоянием и логикой работы полей.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

value

TValue

Значение поля. Если указано, поле становится контролируемым (controlled).

isDisabled

boolean

Признак, который делает поле неактивным и недоступным для взаимодействия с пользователем.

onChange

(value: TValue) => void

Обработчик изменения значения поля.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

value

TValue

Текущее значение поля. Тип зависит от параметра поля.

Да

isDisabled

boolean

Признак недоступности поля.

Да

isHovered

boolean

Признак наведения курсора мыши на поле.

Да

isFocused

boolean

Признак фокуса на поле (пользователь активировал поле через клик или Tab).

Да

isFocusVisible

boolean

Признак видимости фокуса (активируется при навигации с клавиатуры).

Да

setValue

(value: TValue) => void

Метод установки нового значения поля.

Да

onMouseEnter

(event: Event) => void

Обработчик события наведения курсора.

Да

onMouseLeave

(event: Event) => void

Обработчик события ухода курсора с поля.

Да

onFocus

(event: Event) => void

Обработчик получения фокуса полем.

Да

onBlur

(event: Event) => void

Обработчик потери фокуса полем.

Да

onFocusCapture

(event: Event) => void

Обработчик получения фокуса в фазе захвата.

Да

onBlurCapture

(event: Event) => void

Обработчик потери фокуса в фазе захвата.

Да

onChange

(event: Event) => void

Обработчик изменения значения поля.

Да

Условия работы интерактивных свойств полей

Интерактивные свойства полей (такие как состояния isHovered, isFocused, isFocusVisible) требуют подключения соответствующих обработчиков событий:

  • onMouseEnter / onMouseLeave — для отслеживания наведения курсора;

  • onFocus / onBlur — для управления фокусом;

  • onFocusCapture / onBlurCapture — для управления захватом фокуса.

Без реализации этих обработчиков указанные признаки интерактивности не обновятся.

Пример использования

<ya-kit-value-controller initial-value="text" as="controller">
    <ya-kit-field-controller value="{{controller.value}}" on-change="{{controller.onChange}}" as="field">
        <input
			type="text"
			class="input {{if field.isFocused 'focused'}}"
			value="{{controller.value}}"
			on-change="{{field.onChange}}"
			on-focus="{{field.onFocus}}"
			on-blur="{{field.onBlur}}"
		/>
    </ya-kit-field-controller>
</ya-kit-value-controller>


<ya-kit-value-controller initial-value="{{true}}" as="controller">
    <ya-kit-field-controller value="{{controller.value}}" on-change="{{controller.onChange}}" as="field">
        <label class="custom-checkbox">
            <input type="checkbox" checked="{{field.value}}" on-change="{{field.onChange}}">
            <span class="checkmark"></span>
            Subscribe to newsletter
        </label>
    </ya-kit-field-controller>
</ya-kit-value-controller>

<ya-kit-infinite-scroll-controller />

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

Название

Тип

Описание

as

string

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

on-load-more

() => void

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

is-enabled

boolean

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

data-length

number

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

root-margin

string

Необязательное. Расстояние предварительной догрузки: одно значение в пикселях, например 300px. Верхний отступ всегда нулевой.

Справа, снизу и слева используется указанное расстояние. По умолчанию 200px для окна браузера и 0px для собственного контейнера.

Сокращенная запись из нескольких CSS-значений не поддерживается.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

elementRef

(node: HTMLDivElement, null) => void

Callback ref для элемента-маркера. Передайте в атрибут ref у div в конце загруженного списка. Задайте размер маркера, например 1 px в высоту.

Да

containerRef

Dispatch<SetStateAction<HTMLElement, null>>

Функция, которую нужно передать в ref прокручиваемого HTML-контейнера. Поле всегда присутствует в контексте, но подключать его необязательно: без него областью отслеживания служит окно браузера.

Да

Поведение догрузки

После вызова on-load-more повторные вызовы блокируются до изменения data-length. Переключение is-enabled не снимает блокировку. Если после добавления данных маркер остается в области отслеживания и догрузка разрешена, контроллер может повторно вызвать on-load-more без дополнительной прокрутки.

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

Пример использования

В примере предполагается, что контекст уже содержит list: loadNextPage — обработчик загрузки, items — накопленный массив, canLoadMore — признак наличия следующей страницы при отсутствии загрузки и ошибки. Это условные имена данных примера, а не поля, которые создает контроллер.

<ya-kit-infinite-scroll-controller
    as="loader"
    on-load-more="{{list.loadNextPage}}"
    is-enabled="{{list.canLoadMore}}"
    data-length="{{list.items.length}}"
>
    <ya-kit-each of="{{list.items}}" as="item">
        <div>{{item.title}}</div>
    </ya-kit-each>
    <div ref="{{loader.elementRef}}" style="height: 1px;"></div>
</ya-kit-infinite-scroll-controller>

Для прокрутки внутри собственного контейнера оберните список и маркер в элемент с ограниченной высотой и передайте ему containerRef:

<ya-kit-infinite-scroll-controller
    as="loader"
    on-load-more="{{list.loadNextPage}}"
    is-enabled="{{list.canLoadMore}}"
    data-length="{{list.items.length}}"
    root-margin="300px"
>
    <div ref="{{loader.containerRef}}" style="max-height: 400px; overflow: auto;">
        <ya-kit-each of="{{list.items}}" as="item">
            <div>{{item.title}}</div>
        </ya-kit-each>
        <div ref="{{loader.elementRef}}" style="height: 1px;"></div>
    </div>
</ya-kit-infinite-scroll-controller>

<ya-kit-intersection-controller />

Вспомогательный компонент для отслеживания пересечения элемента с viewport или родительским контейнером с использованием Intersection Observer API. Предоставляет детальную информацию о видимости элемента и его позиции в области просмотра.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

threshold

number

Пороговое значение площади элемента — минимальный размер, при котором элемент считается видимым.
По умолчанию — 0.05.

threshold-step

number

Интервал между значениями в массиве threshold — определяет частоту срабатывания callback IntersectionObserver при изменении видимости элемента.
По умолчанию — 0.2.

root-margin

string

CSS‑подобное свойство — задает расширение или сужение области отслеживания на указанное расстояние.
По умолчанию — 0.

trigger-once

boolean

Признак видимости элемента — указывает, находится ли элемент в области видимости в данный момент.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isIntersecting

boolean

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

Да

intersectionRatio

number

Доля видимой части элемента — от 0 до 1. Точность зависит от настройки threshold-step.

Да

status

string

Текущий статус пересечения элемента:

entering — элемент начинает появляться;
entered — элемент полностью появился;
exited — элемент полностью скрыт.

Да

elementRef

RefObject<HTMLElement>

React ref‑ссылка на отслеживаемый элемент.

Да

containerRef

RefObject<HTMLElement>

React ref‑ссылка на контейнер для отслеживания. Если не установлен, используется viewport браузера.

Да

<ya-kit-location-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

RegionModel, null

Загруженная модель с данными или null.

Нет

onLocationSelect

() => void

Функция для выбора новой локации пользователя.

Да

Связанные модели: RegionModel.

<ya-kit-menu-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

menu

MenuId, MenuId[]

Идентификатор меню или массив идентификаторов для загрузки.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

MenuModel, MenuModel[], null

Загруженная модель с данными или null:

  • Для одного MenuId — один объект MenuModel.
  • Для массива MenuId[] — массив объектов MenuModel[] в порядке переданных идентификаторов.

Нет

Пример использования
<ya-kit-menu-controller menu="{{settings.menu}}" as="controller">
    {{#if controller.model}}
        <ya-kit-text size="xl">{{controller.model.title}}</ya-kit-text>
        <div class="menu__items">
            {{#each controller.model.items as |item|}}
                <ya-kit-link to="{{item.url}}">{{item.title}}</ya-kit-link>
            {{/each}}
        </div>
    {{/if}}
</ya-kit-menu-controller>

Данный пример загрузит и выведет первый уровень меню.

Связанные модели: MenuModel, MenuItemModel.

<ya-kit-metrika-controller />

Вспомогательный компонент для отправки событий с параметрами в Метрику методом reachGoal.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

goal

string

Название события.

strategy

viewport, mount, manual

Стратегия отправки события:

  • viewport — при появлении в зоне видимости.
  • mount — при монтировании компонента на клиенте (в useIdleEffect).
  • manual — вручную, вызывая метод onReachGoal из контекста.

По умолчанию viewport.

…params

Record<string, unknown>

Параметры события — любые кастомные поля, которые могут быть полезны для детализации события.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

onReachGoal

(overrideParams?: Record<string, unknown>) => void

Функция для отправки события с параметрами, переданными компоненту.
Опциональный параметр overrideParams позволяет при вызове дополнить или перезаписать отправляемые параметры.

Да

<ya-kit-product-detail-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

ProductDetailModel, null

Загруженная модель с данными или null.

Нет

onVariantSelect

(id: string, value: string) => void

Функция выбора нового варианта товара.

Да

onAddVariantToCart

() => void

Функция добавления текущего варианта товара в корзину.

Да

onUpdateVariantQuantity

(quantity: number) => void

Функция изменения количества текущего варианта товара в корзине.

Да

onRemoveVariantFromCart

() => void

Функция удаления текущего варианта товара из корзины.

Да

Связанные модели: ProductDetailModel.

<ya-kit-products-listing-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

per-page

number

Количество карточек на странице.

on-filters-did-changed

() => void

Функция вызываемая при обновлении фильтров.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

ProductsListingModel

Загруженная модель с данными.

Нет

quantity

number

Текущее количество товара в корзине пользователя.

Да

onPageChange

(page: number) => void

Функция обновления активной страницы.

Да

onFiltersChange

() => void

Функция обновления выставленных фильтров.

Да

Связанные модели: ProductsListingModel.

<ya-kit-product-feedback-listing-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны данные контроллера. По умолчанию: controller.

per-page

number, string

Необязательное.

Размер порции отзывов: положительное целое число или его строковая запись, например, 10 или "10".

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

Структура добавленного объекта

Название

Тип

Описание

Обязательное

items

FeedbackModel[]

Загруженные отзывы. До завершения первой загрузки содержит пустой массив.

Да

totalCount

number

Общее количество отзывов в текущей выборке.

Да

currentIndex

number

Индекс активной карточки в списке отзывов.

Да

meta

FeedbackShortMetaModel, null

Сводная информация об отзывах. Равна null, если данные недоступны.

Да

filters

FeedbackFilterModel[]

Доступные фильтры отзывов.

Да

sorting

'NEWEST', 'BEST', 'WORST'

Текущая сортировка из параметра sort URL. По умолчанию NEWEST.

Да

filter

string | null

Slug активного фильтра из URL. Равен null, если фильтр не выбран.

Да

isLoading

boolean

Признак первой загрузки, смены условий или загрузки следующей страницы.

Да

hasMore

boolean

Показывает, есть ли еще незагруженные отзывы.

Да

hasError

boolean

Показывает, завершился ли последний запрос ошибкой. Уже загруженные отзывы сохраняются.

Да

loadNextPage

() => void

Функция загрузки следующей страницы или повторного выполнения запроса после ошибки.

Да

onIndexChange

(index: number) => void

Функция изменения активной карточки. Заранее загружает следующую страницу при приближении к концу списка.

Да

onSortingChange

(value: 'NEWEST', 'BEST', 'WORST') => void

Функция изменения сортировки и синхронизации параметра sort URL.

Да

onFilterChange

(value: string, null) => void

Функция изменения фильтра и синхронизации параметра filter URL.

Да

onOpenFeedback

(feedback: FeedbackModel) => void

Функция открытия переданного отзыва в просмотрщике.

Да

onOpenMedia

(item: FeedbackMediaItemModel, null) => void

Функция открытия выбранного медиа или общей медиаленты, если передан null.

Да

Пример использования
<ya-kit-product-feedback-listing-controller as="feedbacks" per-page="10">
    {{#if feedbacks.isLoading}}
        <ya-kit-skeleton height="240" />
    {{else}}
        {{#each feedbacks.items as |feedback|}}
            <ya-kit-product-feedback-card feedback={{feedback}} />
        {{/each}}
    {{/if}}
</ya-kit-product-feedback-listing-controller>

Связанные модели

Связанные компоненты

<ya-kit-product-feedback-media-list-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны данные контроллера. По умолчанию controller.

Важно

Контроллер должен находиться внутри ya-kit-product-feedback-listing-controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

items

FeedbackMediaItemModel[]

Загруженные медиа из отзывов. До завершения первой загрузки содержит пустой массив.

Да

totalCount

number

Общее количество медиа в отзывах.

Да

isLoading

boolean

Признак первой загрузки или загрузки следующей страницы.

Да

hasMore

boolean

Показывает, есть ли еще незагруженные медиа.

Да

hasError

boolean

Последний запрос завершился ошибкой.

Да

loadNextPage

() => void

Загружает следующую страницу или повторяет запрос после ошибки.

Да

Пример использования
<ya-kit-product-feedback-listing-controller>
    <ya-kit-product-feedback-media-list-controller as="mediaList">
        {{#each mediaList.items as |item|}}
            <ya-kit-product-feedback-media-tile media={{item.media}} />
        {{/each}}
    </ya-kit-product-feedback-media-list-controller>
</ya-kit-product-feedback-listing-controller>

Связанные модели:

Связанные контроллеры:

Связанные компоненты:

<ya-kit-product-feedback-viewer-controller />

Контроллер просмотрщика отзывов и медиа. Предоставляет состояние открытого drawer, выбранный отзыв, медиаленту и обработчиков навигации.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны данные контроллера. По умолчанию controller.

Важно

Контроллер должен находиться внутри ya-kit-product-feedback-listing-controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isOpen

boolean

Открыт ли просмотрщик отзывов.

Да

model

FeedbackModel | null

Отзыв, связанный с текущим экраном. Равен null, если просмотрщик закрыт или отзыв для выбранного медиа не найден.

Да

items

FeedbackMediaItemModel[]

Медиа текущего отзыва или общей медиаленты. При закрытом просмотрщике содержит пустой массив.

Да

currentIndex

number

Индекс выбранного медиа.

Да

isLoading

boolean

Загружается ли общая медиалента.

Да

hasError

boolean

Завершилась ли загрузка общей медиаленты ошибкой.

Да

onIndexChange

(index: number) => void

Выбирает медиа по индексу.

Да

onRetry

() => void

Повторяет загрузку медиаленты после ошибки.

Да

onClose

() => void

Закрывает просмотрщик и синхронизирует историю браузера.

Да

Пример использования
<ya-kit-product-feedback-listing-controller>
    <ya-kit-product-feedback-viewer-controller as='viewer'>
        {{#if viewer.isOpen}}
            <ya-kit-text>Медиа {{add viewer.currentIndex 1}} из {{length viewer.items}}</ya-kit-text>
        {{/if}}
    </ya-kit-product-feedback-viewer-controller>
</ya-kit-product-feedback-listing-controller>

Связанные модели:

Связанные контроллеры:

<ya-kit-product-snippet-controller />

Вспомогательный компонент для работы с отдельными сниппетами товаров.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

product

ProductVariantModel

Массив тегов для фильтрации статей. Если не указано, загружаются статьи без фильтрации.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

ProductVariantModel

Загруженная модель с данными.

Нет

quantity

number

Текущее количество товара в корзине пользователя.

Да

onUpdateQuantity

(quantity: number) => void

Функция обновления количества товара в корзине.

Да

onRemoveFromCart

() => void

Функция удаления товара из корзины.

Да

onAddToCart

() => void

Функция добавления товара в корзину.

Да

onToggleFavourite

() => void

Функция добавления/удаления товара в избранном.

Да

Связанные модели: ProductVariantModel.

<ya-kit-promocode-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

promocode‑id

string

Идентификатор промокода для загрузки.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

PromocodeModel / null

Загруженная модель с данными или null.

Нет

Связанные модели: PromocodeModel.

<ya-kit-products-filters-controller />

Вспомогательный компонент для управления состоянием и логикой работы формы фильтров продуктов.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

schema

ProductFiltersModel

Модель фильтров, определяющая структуру.

initial-value

Dictionary<unknown>

Объект с текущими примененными фильтрами.

on-submit

(values: Dictionary<unknown>) => void

Обработчик отправки формы.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

fields

ProductFilterModel[]

Массив дескрипторов полей, описывающих структуру и состояние каждого поля фильтра.

Да

isDirty

boolean

Признак изменения значений формы относительно начальных.

Да

isSubmitting

boolean

Признак состояния отправки формы.

Да

onFormReset

() => void

Обработчик сброса формы к начальным значениям.

Да

onFormSubmit

(values: Dictionary<unknown>) => void

Обработчик отправки формы, принимает текущие значения формы.

Да

Пример использования

<ya-kit-products-filters-controller
    as="controller"
    schema="{{listing.model.filters.schema}}"
    initial-value="{{listing.model.filters.values}}"
    on-submit="{{listing.onFiltersChange}}"
>
    <ya-kit-v-stack gap="200" align-items="stretch">
        {{#each controller.fields as |field|}}
            {{#if (eql field.type "RANGE")}}
                <ya-kit-form-control key="{{field.name}}" label="{{field.title}}">
                    <ya-kit-h-stack gap="100">
                        <ya-kit-input placeholder="от" value="{{field.value.min}}" aria-label="{{field.title}}, от" on-change="{{field.onMinChange}}" />
                        <ya-kit-input placeholder="до" value="{{field.value.max}}" aria-label="{{field.title}}, до" on-change="{{field.onMaxChange}}" />
                    </ya-kit-h-stack>
                </ya-kit-form-control>
            {{elseif (eql field.type "MULTIPLE")}}
                <ya-kit-form-control key="{{field.name}}" label="{{field.title}}">
                    <ya-kit-checkbox-group value="{{field.value}}" aria-label="{{field.title}}" on-change="{{field.onChange}}">
                        <ya-kit-v-stack gap="100">
                            {{#each field.options as |option|}}
                                <ya-kit-form-control-label label="{{option.label}}" aria-label="{{option.title}}">
                                    <ya-kit-checkbox value="{{option.value}}" aria-label="{{option.label}}" />
                                </ya-kit-form-control-label>
                            {{/each}}
                        </ya-kit-v-stack>
                    </ya-kit-checkbox-group>
                </ya-kit-form-control>
            {{elseif (eql field.type "SINGLE")}}
                <ya-kit-form-control key="{{field.name}}" label="{{field.title}}">
                    <ya-kit-radio-group value="{{field.value}}" on-change="{{field.onChange}}">
                        <ya-kit-v-stack gap="100">
                            {{#each field.options as |option|}}
                                <ya-kit-form-control-label label="{{option.label}}">
                                    <ya-kit-radio value="{{option.value}}" aria-label="{{option.label}}" />
                                </ya-kit-form-control-label>
                            {{/each}}
                        </ya-kit-v-stack>
                    </ya-kit-radio-group>
                </ya-kit-form-control>
            {{elseif (eql field.type "BOOLEAN")}}
                <ya-kit-form-control-label label="{{field.title}}">
                    <ya-kit-checkbox is-selected="{{field.value}}" aria-label="{{field.title}}" on-change="{{field.onChange}}" />
                </ya-kit-form-control-label>
            {{/if}}
        {{/each}}
        <ya-kit-h-stack gap="200">
            <ya-kit-button color="primary" on-press="{{controller.onFormSubmit}}">Применить</ya-kit-button>
            <ya-kit-button color="neutral" on-press="{{controller.onFormReset}}">Сбросить</ya-kit-button>
        </ya-kit-h-stack>
    </ya-kit-v-stack>
</ya-kit-products-filters-controller>

Связанные модели: ProductFilterModel.

<ya-kit-resize-controller />

Вспомогательный компонент для автоматического отслеживания размеров элемента с использованием ResizeObserver API. Предоставляет информацию о ширине и высоте элемента в реальном времени при изменении его размеров.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

size.width

number, null

Ширина отслеживаемого элемента или null до первого измерения.

Нет.

size.height

number, null

Высота отслеживаемого элемента или null до первого измерения.

Нет.

<ya-kit-self-pickup-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

location

RegionModel

Текущая локация пользователя.

product

ProductVariantModel

Выбранный вариант продукта.

quantity

number

Необходимо количество.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

SelfPickupModel[]

Загруженная модель с данными.

Нет

Связанные модели: RegionModel, ProductVariantModel, SelfPickupModel.

<ya-kit-shopping-cart-controller />

Примечание

Кастомные секции пока не поддерживают наборы товаров. Для отображения корзины используется стандартная секция.

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

ShoppingCartModel, null

Загруженная модель с данными корзины или null.

Нет

Связанные модели: ShoppingCartModel.

<ya-kit-shopping-cart-bundle-controller />

Вспомогательный компонент для одного бандла (набора товаров). Размещает бандл в контексте шаблона вместе с обработчиками изменения количества и удаления из корзины.

Название

Тип

Описание

bundle

ShoppingCartBundleModel

Модель бандла — обязательный параметр.

as

string

Имя ключа в контексте, под которым будут доступны данные бандла. По умолчанию — controller.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

model

CartBundleModel

Модель бандла, включающая следующие поля:

  • bundleId
  • bundleLink
  • totalPrice
  • finalTotalPrice
  • quantity
  • maxQuantity
  • items

Да

items

ShoppingCartBundleItem[]

Список товаров бандла, включающий следующие поля для каждого товара:

  • variant
  • quantity
  • price
  • finalPrice
  • addons
  • availableAddons

Да

quantity

number

Текущее количество бандлов в корзине.

Да

maxQuantity

number

Максимально доступное количество бандлов.

Да

onUpdateQuantity

(quantity: number) => void

Обновляет количество бандлов в корзине. Принимает параметр quantity — новое количество бандлов.

Да

onRemove

() => void

Удаляет бандл из корзины (устанавливает количество в 0).

Да

Связанные модели: ShoppingCartBundleModel, ShoppingCartBundleItem.

<ya-kit-toggle-controller />

Вспомогательный компонент управления скрытием/раскрытием.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

initial-value

boolean

Первоначальное состояние при монтировании компонента.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isOpen

boolean

Текущее состояние компонента.

Да

onToggle

() => void

Переключает состояние на противоположное.

Да

onSetTruthy

() => void

Устанавливает состояние в true.

Да

onSetFalsy

() => void

Устанавливает состояние в false.

Да

<ya-kit-user-controller />

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

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

isLoading

boolean

true во время загрузки данных, false после завершения.

Да

model

UserModel, null

Загруженная модель с данными или null.

Нет

onLogin

() => void

Функция для аутентификации пользователя в системе.

Да

onLogout

() => void

Функция для выхода пользователя из системы.

Да

onOpenLoginModal

() => void

Функция для показа модального окна для аутентификации пользователя в системе.

Нет

Связанные модели: UserModel, RegionModel.

<ya-kit-value-controller />

Вспомогательный компонент для хранения значений переменных.

Название

Тип

Описание

as

string

Имя ключа в контексте, под которым будут доступны загруженные данные.

initial-value

unknown

Первоначальное значение переменной.

Структура добавленного объекта

Название

Тип

Описание

Обязательное

value

unknown

Текущее значение переменной.

Да

onChange

(value: unknown) => void

Выставляет новое значение переменной.

Да

makeChangeHandler

(value: unknown) => VoidFunction

Создает обработчик, который будет устанавливать указанное значение.

Да

Обратиться в службу поддержки

Написать в чат

Написать письмо

Яндекс KITᵝ в Telegram

Яндекс KITᵝ в МАКС

Предыдущая
Следующая