Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,34 @@ title: Autocomplete

Чтобы показать раскрывающийся список необходимо установить `showDropdown = true` и передать данные для раскрывающегося списка в `listContent`.

Чтобы показать пустое состояние, необходимо передать контент пустого состояния в `emptyContent` и установить `showEmptyState`.
Чтобы показать пустое состояние, необходимо передать контент пустого состояния в `emptyState` и установить `showEmptyState`.
В скоупе dropdown существует преднастроенный компонент `EmptyState()`.
Рекомендуется использовать его в качестве контента для `emptyState`.

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

## StatefulValue и Motion

`AutocompleteStyle` содержит вложенные `textFieldStyle` и `dropdownStyle`. StatefulValue задаются внутри этих стилей:
например, фон TextField может зависеть от фокуса. Собственных цветов, размеров или формы у стиля Autocomplete нет.

Для передачи контекста меню используйте перегрузку с обязательным `dropdownMotion: Motion<DropdownMenuMotionStyle>`.
Существующие вызовы остаются совместимыми и создают Motion меню через `rememberDropdownMenuMotion()` с
`LocalDropdownMenuMotionStyle`. Motion поля передаётся непосредственно в TextField внутри слота `field`.
Поле, меню и строки используют независимые контексты по умолчанию; при необходимости источники можно связать явно.

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/autocomplete/Autocomplete_Motion.kt
```

В примере stateful-фон поля меняется при фокусе через существующий `TextFieldMotionStyle`.
Фильтрацией подсказок, выбором и флагом `showDropdown` управляет вызывающий код.
`onDismissRequest` сообщает о запросе закрытия; обновление флага остаётся у потребителя.

В текущем API контекст меню уже используется для stateful-обводки (`strokeColor`). Доступные переходы свойств
определяются реализацией DropdownMenu; передача Motion сама по себе не добавляет анимации его фона, размеров или формы.
`noMotion` отключает настроенные переходы свойств и сохраняет существующие `fadeIn`/`fadeOut` меню и `TextFieldAnimation`.

## Стиль Autocomplete

В большинстве случаев можно использовать готовые сгенерированные стили, а при необходимости создать собственный стиль через соответствующий builder. Подробнее о том, как работают `Style`, `StyleBuilder` и stateful-параметры стиля, см. в разделе [Стилизация компонентов](../theme/Styles.md).
Expand All @@ -31,4 +53,4 @@ title: Autocomplete

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/autocomplete/Autocomplete_Style.kt
```
```
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,32 @@ val filteredList = if (state.isOpened && value.isEmpty()) {

## Стиль ComboBox

### Motion поля и меню

Обе формы `ComboBoxTextField` (`String` и `TextFieldValue`) принимают обязательный параметр
`motion: Motion<TextFieldMotionStyle>` в новых перегрузках. Поле и логика открытия используют
`motion.context.interactionSource`; отдельный `interactionSource` в этих перегрузках не передаётся.
Старые вызовы, включая Android drawable-адаптеры, сохраняются и создают Motion из прежнего
источника и `LocalTextFieldMotionStyle`. Замена источника или экземпляра `SelectState`
переподключает подписки и снимает прежнюю активацию. `TextFieldValue` сохраняет выделение и composition.

У `ComboBox` есть перегрузка с `dropdownMotion: Motion<DropdownMenuMotionStyle>`.
Она передаёт объект существующему меню. Поле, меню и строки имеют независимые контексты
по умолчанию; общий контекст задаётся явно. `ComboBoxStyle` по-прежнему содержит обычные
`textFieldStyle`, `dropdownStyle` и `selectItemStyle`.

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/combobox/ComboBox_Motion.kt
```

Незаданные Motion-переходы используют `noMotion()`. Это не отключает прежние
`TextFieldAnimation` и fade-переходы появления/исчезновения меню. Доступны только свойства,
которые поддерживают текущие `TextFieldMotionStyle` и `DropdownMenuMotionStyle`.
Переработка анимаций DropdownMenu/Popover в `feature/plasma-8013` выполняется отдельно;
данная миграция не расширяет их набор свойств.

Stateful-стиль и переходы строк описаны в разделе [SelectItem](SelectUsage#selectitem).

В большинстве случаев можно использовать готовые сгенерированные стили, а при необходимости создать собственный стиль через соответствующий builder. Подробнее о том, как работают `Style`, `StyleBuilder` и stateful-параметры стиля, см. в разделе [Стилизация компонентов](../theme/Styles.md).

<!-- @style-api -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,34 @@ title: SegmentItem
```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/segment/SegmentItem_Style.kt
```

## Состояния и Motion API

У всех трёх форм `SegmentItem` есть перегрузка с `motion: Motion<SegmentItemMotionStyle>`.
`rememberSegmentItemMotion()` использует переданный стиль переходов или `LocalSegmentItemMotionStyle`.
Через `SegmentItemMotionStyle` настраиваются переходы фона, текста, иконок, типографики и всех размеров/отступов.
По умолчанию используется `noMotion()`, поэтому добавление Motion само по себе не запускает анимации.

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/segment/SegmentItem_Motion.kt
```

`isSelected` обновляет семантическое состояние элемента. Для pressed, hovered и focused передавайте
`motion.context.interactionSource` в модификатор взаимодействия, например `clickable`.
Встроенный Counter использует тот же контекст состояний и собственные CounterStyle/CounterMotionStyle.
У произвольного содержимого слотов общий контекст задаётся явно.
При наличии `endIcon` счётчик не отображается; null или пустой counter не создаёт слот счётчика.

### Переход со старых свойств

Старые перегрузки компонента и builder-вызовы с Color, InteractiveColor, Dp, TextStyle и формой продолжают работать.
Новые свойства для чтения: `shapes`, `labelStyles`, `valueStyles`, цвета с суффиксом `Brush`
и размеры с суффиксом `Values`, например `dimensions.endContentSizeValues`.
Размер конечной иконки определяется `endContentSize`, независимо от размера начальной иконки;
отступ `valueMargin` учитывает также selected из семантического источника.

Старые deprecated-свойства формы, размеров и типографики возвращают default-значения.
Legacy InteractiveColor сохраняет однотонные состояния; для градиентов его fallback — Color.Transparent.
Отрисовка через новые Brush-свойства поддерживает градиенты.
Форма переключается без плавной интерполяции, `disabledAlpha` остаётся обычным Float.
Собственные реализации style/builder-интерфейсов необходимо дополнить новыми контрактами.
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,31 @@ SegmentHorizontal(
```

<!-- @screenshot: com.sdds.compose.uikit.fixtures.samples.segment.Segment_Dividers -->

## Состояния и Motion API

В перегрузки `SegmentHorizontal` и `SegmentVertical` можно передать `motion: Motion<SegmentMotionStyle>`.
`rememberSegmentMotion()` использует `LocalSegmentMotionStyle`, если стиль переходов не указан явно.
`StatefulValue` задаёт значения для состояний, а `SegmentMotionStyle` — переходы фона, отступов, gap и отступов разделителей.
По умолчанию все переходы используют `noMotion()`: значения меняются без анимации.

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/segment/Segment_Motion.kt
```

Для передачи взаимодействий используйте `motion.context.interactionSource` также в `clickable`.
Семантические состояния задаются через `motion.context.semanticStateSource`.
Контейнер не объединяет автоматически состояния своих `SegmentItem`: у каждого элемента остаётся собственный контекст.
`hasBackground = false` отключает фон, сохраняя изменение размеров по состояниям.
Неопределённый gap отображается как нулевой; размеры с неопределёнными значениями переключаются без интерполяции.

### Переход со старых свойств

Существующие вызовы компонентов и builder-ов со статическими значениями сохраняются.
Для чтения текущих значений используйте stateful-свойства `shapes`, `colors.backgroundBrush`
и размерные свойства с суффиксом `Values`, например `dimensions.gapValues`.
Старые свойства помечены deprecated: размеры и форма возвращают default-значение,
а цветовое представление сохраняет однотонные состояния. Для градиентов старый Color API возвращает прозрачный цвет;
для отображения градиентов используйте `backgroundBrush`.
Форма переключается по состоянию без плавной анимации. Собственные реализации style/builder-интерфейсов
необходимо дополнить новыми контрактами.
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,47 @@ SelectItem(

## Работа с компонентом

### Stateful-стиль и Motion SelectItem

`checked` публикуется как `InteractiveState.Selected` в семантическом источнике строки.
Стиль может сочетать Selected с Pressed, Hovered и Focused. Строки независимы по умолчанию.
Новые перегрузки обеих форм `SelectItem` принимают `motion: Motion<SelectItemMotionStyle>`;
старые вызовы сохраняются и используют прежний `interactionSource` и `LocalSelectItemMotionStyle`.

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/select/SelectItem_Motion.kt
```

Встроенные Cell (форма с `titleContent`) и CheckBox разделяют контекст строки, сохраняя
собственные MotionStyle, checked/enabled и собственные состояния. Выбор изменяется одним
`onClick` строки. Для Cell внутри произвольного `content` контекст передаётся явно:

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/select/SelectItem_CustomCellMotion.kt
```

| Владелец | Новое значение | Старый getter |
| --- | --- | --- |
| SelectItemStyle | `shapes: StatefulValue<Shape>` | `shape` |
| SelectItemColors | `backgroundBrush`, `iconBrush`: `StatefulValue<Brush>` | `backgroundColor`, `iconColor` |
| SelectItemDimensions | `controlSizeValues`, `controlMarginValues`, `paddingStartValues`, `paddingEndValues`, `paddingTopValues`, `paddingBottomValues`, `heightValues`: `StatefulValue<Dp>` | те же имена без `Values` |

Builder-методы сохраняют прежние имена и принимают как статические значения, так и
`StatefulValue`. Цвета дополнительно принимают `Brush`. Старые getters помечены Deprecated:
форма и размеры возвращают default; цветовые getters возвращают
`Color.Transparent.asInteractive()`, как в Cell/Chip. Default, selected и комбинированные
состояния старых цветовых builder-вызовов сохраняются в новом Brush API, включая градиенты.

Произвольная `Shape` поддерживается; форма и все размеры переключаются без интерполяции через
`getValueAsState(motion.context)`, как размеры BaseTextField. Фон и indication
используют одну разрешённую форму. MotionStyle содержит два перехода Brush,
по умолчанию `noMotion()`. Неконечные Dp переключаются без анимации и без замены на ноль.
`height` сохраняет смысл минимальной высоты, а место контрольной иконки резервируется
даже при её отсутствии. `disableAlpha`, вложенные стили и ImageSource-контракт не меняются.

Обычные вызовы и сгенерированные стили совместимы. Собственные реализации интерфейсов
SelectItemStyle/Colors/Dimensions и их builder-ов нужно дополнить новыми членами.

### SelectState

Для работы с компонентом необходимо создать экземпляр `SelectState` и передать его в `Select`.
Expand Down Expand Up @@ -113,4 +154,4 @@ state.toggle // переключить текущее состояние

```kotlin
// @sample: com/sdds/compose/uikit/fixtures/samples/select/Select_Style.kt
```
```
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ package com.sdds.compose.sandbox.styles.segment

import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.unit.dp
import com.sdds.compose.sandbox.styles.segmentitem.Accent
import com.sdds.compose.sandbox.styles.segmentitem.L
Expand All @@ -24,7 +25,7 @@ import com.sdds.compose.sandbox.theme.SddsSandboxTheme
import com.sdds.compose.uikit.SegmentStyle
import com.sdds.compose.uikit.SegmentStyleBuilder
import com.sdds.compose.uikit.adjustBy
import com.sdds.compose.uikit.interactions.asInteractive
import com.sdds.compose.uikit.interactions.asStatefulValue
import com.sdds.compose.uikit.style.BuilderWrapper
import com.sdds.compose.uikit.style.style
import com.sdds.compose.uikit.style.wrap
Expand Down Expand Up @@ -209,7 +210,7 @@ private val SegmentStyleBuilder.invariantProps: SegmentStyleBuilder
@Composable
get() = this
.colors {
backgroundColor(SddsSandboxTheme.colors.surfaceDefaultTransparentSecondary.asInteractive())
backgroundColor(SolidColor(SddsSandboxTheme.colors.surfaceDefaultTransparentSecondary).asStatefulValue())
}

public val WrapperSegmentXlView.Primary: WrapperSegmentTerminate
Expand Down
Loading
Loading