Skip to content

Commit 9433e50

Browse files
committed
fix
1 parent 3bb2cf3 commit 9433e50

31 files changed

Lines changed: 697 additions & 675 deletions

.changeset/famous-ghosts-hang.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,5 @@
55

66
##### Checkbox
77

8-
- Добавлен prop `position` для управления положением чекбокса относительно контента ('before' | 'after')
9-
- Добавлен prop `showCheckmark` для управления видимостью визуального чекбокса (по умолчанию `true`)
10-
- При `showCheckmark: false` чекбокс скрывается, но контент (`label`, `hint`, `error`) продолжает отображаться
8+
- Добавлен prop `position` для управления положением чекбокса относительно контента ('before' | 'after'), теперь компонент сам контролирует порядок DOM-узлов (label/checkbox).
119
- Логика позиционирования и видимости чекбокса полностью инкапсулирована внутри компонента

.changeset/neat-owls-judge.md

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
11
---
22
'@alfalab/core-components-select-with-tags': minor
33
'@alfalab/core-components-select': minor
4-
'@alfalab/core-components-checkbox': minor
4+
'@alfalab/core-components-custom-picker-button': minor
55
'@alfalab/core-components': minor
66
---
77

8+
##### Select
9+
10+
- Добавлен проп `checkmarkPosition` для управления позицией чекмарка относительно контента ('before' | 'after')
11+
- Компонент `BaseCheckmark` теперь поддерживает проп `content` для передачи контента опции
12+
- Оптимизирована логика рендеринга чекбоксов и иконок в компонентах `OptionBase` и `BaseOption`
13+
814
##### SelectWithTags
915

1016
- Добавлена поддержка динамического позиционирования чекмарков в зависимости от `view` (desktop/mobile)
11-
- Для desktop по умолчанию используются чекбоксы слева (`checkmarkPosition='before'`)
12-
- Для mobile по умолчанию используются иконки справа (`checkmarkPosition='after'`)
17+
- Для desktop по умолчанию используется `checkmarkPosition='before'`, для mobile - `checkmarkPosition='after'`
1318
- Возможность переопределить позицию через проп `optionProps.checkmarkPosition`
1419

15-
##### Select
16-
17-
- Убран избыточный проп `hasSelectionMarker` из типов и компонентов
18-
- Точка-маркер выбора теперь рендерится автоматически для дефолтного Option при `checkmarkPosition='before'` и single-select
19-
- Оптимизирована логика рендеринга чекбоксов, иконок и точки-маркера в компоненте `OptionBase`
20-
- Добавлен контейнер `.beforeMarker` для правильного позиционирования элементов при `checkmarkPosition='before'`
21-
22-
##### Checkbox
20+
##### CustomPickerButton
2321

24-
- Исправлена логика скрытия визуального чекбокса при `showCheckmark=false`
25-
- Компонент теперь корректно рендерит `null` вместо визуального элемента когда чекмарк скрыт
26-
- Оптимизированы CSS-стили для `.checkmarkAfter` (сокращённая запись margin)
22+
- Добавлен хелпер `disableCheckmarks` для автоматического отключения чекмарков у всех опций

packages/checkbox/src/Component.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,11 @@ export const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(
199199
<CheckIcon className={cn(styles.checkedIcon, colorStyle.checkedIcon)} />
200200
)}
201201
{indeterminate && !checked && (
202-
<span
203-
className={cn(styles.indeterminateLine, colorStyle.indeterminateLine)}
204-
/>
202+
<span className={cn(styles.indeterminateLine, colorStyle.indeterminateLine)} />
205203
)}
206204
</span>
207205
);
208206

209-
210207
return (
211208
<label
212209
{...labelProps}

packages/custom-picker-button/src/desktop/Component.desktop.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from '@alfalab/core-components-picker-button/desktop';
88

99
import { Field as DefaultField } from '../field';
10+
import { disableCheckmarks } from '../utils/disableCheckMarks';
1011

1112
const DEFAULT_BUTTON_COLOR = '#FF45C3';
1213
const DEFAULT_CONTENT_COLOR = 'white';
@@ -24,12 +25,14 @@ export const CustomPickerButtonDesktop = forwardRef<
2425
contentColor = DEFAULT_CONTENT_COLOR,
2526
stateType = 'darkening',
2627
icon,
28+
options = [],
2729
...restProps
2830
},
2931
ref,
3032
) => (
3133
<PickerButtonDesktop
3234
{...restProps}
35+
options={disableCheckmarks(options)}
3336
fieldProps={{
3437
backgroundColor,
3538
contentColor,

packages/custom-picker-button/src/mobile/Component.mobile.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from '@alfalab/core-components-picker-button/mobile';
88

99
import { Field as DefaultField } from '../field';
10+
import { disableCheckmarks } from '../utils/disableCheckMarks';
1011

1112
const DEFAULT_BUTTON_COLOR = '#FF45C3';
1213
const DEFAULT_CONTENT_COLOR = 'white';
@@ -20,12 +21,14 @@ export const CustomPickerButtonMobile = forwardRef<HTMLInputElement, CustomPicke
2021
backgroundColor = DEFAULT_BUTTON_COLOR,
2122
contentColor = DEFAULT_CONTENT_COLOR,
2223
stateType = 'darkening',
24+
options = [],
2325
...restProps
2426
},
2527
ref,
2628
) => (
2729
<PickerButtonMobile
2830
{...restProps}
31+
options={disableCheckmarks(options)}
2932
fieldProps={{
3033
backgroundColor,
3134
contentColor,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { type GroupShape, type OptionShape } from '@alfalab/core-components-select/shared';
2+
3+
type OptionLike = OptionShape | GroupShape;
4+
5+
/**
6+
* Отключает отображение чекмарков у всех опций, включая опции внутри групп.
7+
*
8+
* @param options - список опций и/или групп для Select.
9+
* @returns новый массив с тем же деревом, но с `showCheckMark: false` у всех опций.
10+
*/
11+
export const disableCheckmarks = (options: OptionLike[]): OptionLike[] =>
12+
options.map((item) =>
13+
'options' in item
14+
? { ...item, options: item.options.map((opt) => ({ ...opt, showCheckMark: false })) }
15+
: { ...item, showCheckMark: false },
16+
);

packages/input-autocomplete/src/__snapshots__/Component.test.tsx.snap

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,25 @@ exports[`InputAutocompleteMobile Snapshots tests should match snapshot in open s
254254
>
255255
Neptunium
256256
</div>
257+
<div
258+
class="checkmark after"
259+
>
260+
<svg
261+
class="displayIcon"
262+
fill="currentColor"
263+
focusable="false"
264+
height="24"
265+
role="img"
266+
viewBox="0 0 24 24"
267+
width="24"
268+
>
269+
<path
270+
clip-rule="evenodd"
271+
d="M20 7.519L9.903 17 5 12.327l1.448-1.503 3.47 3.308L18.569 6 20 7.519z"
272+
fill-rule="evenodd"
273+
/>
274+
</svg>
275+
</div>
257276
</div>
258277
<div
259278
aria-disabled="false"
@@ -267,6 +286,25 @@ exports[`InputAutocompleteMobile Snapshots tests should match snapshot in open s
267286
>
268287
Plutonium
269288
</div>
289+
<div
290+
class="checkmark after"
291+
>
292+
<svg
293+
class="displayIcon"
294+
fill="currentColor"
295+
focusable="false"
296+
height="24"
297+
role="img"
298+
viewBox="0 0 24 24"
299+
width="24"
300+
>
301+
<path
302+
clip-rule="evenodd"
303+
d="M20 7.519L9.903 17 5 12.327l1.448-1.503 3.47 3.308L18.569 6 20 7.519z"
304+
fill-rule="evenodd"
305+
/>
306+
</svg>
307+
</div>
270308
</div>
271309
</div>
272310
</div>

packages/input-autocomplete/src/desktop/Component.desktop.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ export const InputAutocompleteDesktop = forwardRef<HTMLInputElement, InputAutoco
4141
Field={AutocompleteField}
4242
Optgroup={Optgroup}
4343
OptionsList={OptionsList}
44-
showCheckmark={false}
4544
{...restProps}
4645
fieldProps={{
4746
...(restProps.fieldProps as AnyObject),

packages/input-autocomplete/src/mobile/Component.mobile.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ export const InputAutocompleteMobile = React.forwardRef(
136136
<Component
137137
Field={AutocompleteMobileField}
138138
{...restProps}
139-
showCheckmark={false}
140139
{...(isBottomSheet
141140
? {
142141
bottomSheetProps: {

packages/international-phone-input/src/components/country-select/Component.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ export const CountrySelect: React.FC<CountrySelectProps> = ({
112112
Option={BaseOption}
113113
size={size}
114114
{...restProps}
115-
showCheckmark={false}
116115
dataTestId={getDataTestId(dataTestId, 'country-select')}
117116
options={options}
118117
selected={selected?.key || EMPTY_COUNTRY_SELECT_FIELD}

0 commit comments

Comments
 (0)