@vkontakte/vkui 7.0.0-dev-efd91c.0 → 7.0.0-dev-efd91c.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  2. package/dist/components/CalendarHeader/CalendarHeader.js +2 -2
  3. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  4. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  5. package/dist/components/CalendarTime/CalendarTime.js +2 -2
  6. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  7. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  8. package/dist/components/CustomSelect/CustomSelect.js +7 -1
  9. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  10. package/dist/components/NativeSelect/NativeSelect.d.ts +5 -6
  11. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  12. package/dist/components/NativeSelect/NativeSelect.js +7 -1
  13. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  14. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +2 -2
  15. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  16. package/dist/cssm/components/CalendarTime/CalendarTime.js +2 -2
  17. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  18. package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -1
  19. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  20. package/dist/cssm/components/NativeSelect/NativeSelect.js +7 -1
  21. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/components/CalendarHeader/CalendarHeader.tsx +5 -2
  24. package/src/components/CalendarTime/CalendarTime.tsx +5 -2
  25. package/src/components/CustomSelect/CustomSelect.tsx +7 -1
  26. package/src/components/NativeSelect/NativeSelect.tsx +12 -9
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarHeader.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAU7D,KAAK,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;AAE5F,MAAM,MAAM,wBAAwB,GAAG;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,wBAAwB;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,wZA2BxB,mBAAmB,KAAG,KAAK,CAAC,SAgJ9B,CAAC"}
1
+ {"version":3,"file":"CalendarHeader.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAU7D,KAAK,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;AAE5F,MAAM,MAAM,wBAAwB,GAAG;IACrC,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,wBAAwB;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,wZA2BxB,mBAAmB,KAAG,KAAK,CAAC,SAkJ9B,CAAC"}
@@ -48,11 +48,11 @@ export const CalendarHeader = (_param)=>{
48
48
  "nextMonthButtonTestId"
49
49
  ]);
50
50
  const { locale } = useConfigProvider();
51
- const onMonthsChange = React.useCallback((newValue)=>onChange(setMonth(viewDate, Number(newValue))), [
51
+ const onMonthsChange = React.useCallback((_, newValue)=>onChange(setMonth(viewDate, Number(newValue))), [
52
52
  onChange,
53
53
  viewDate
54
54
  ]);
55
- const onYearChange = React.useCallback((newValue)=>onChange(setYear(viewDate, Number(newValue))), [
55
+ const onYearChange = React.useCallback((_, newValue)=>onChange(setYear(viewDate, Number(newValue))), [
56
56
  onChange,
57
57
  viewDate
58
58
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n Icon12Dropdown,\n Icon20ChevronLeftOutline,\n Icon20ChevronRightOutline,\n} from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { addMonths, setMonth, setYear, subMonths } from 'date-fns';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, getMonths, getYears } from '../../lib/calendar';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarHeader.module.css';\n\ntype ArrowMonthProps = Omit<React.AllHTMLAttributes<HTMLElement>, 'onClick' | 'aria-label'>;\n\nexport type CalendarHeaderTestsProps = {\n monthDropdownTestId?: string | ((monthIndex: number) => string);\n yearDropdownTestId?: string | ((year: number) => string);\n nextMonthButtonTestId?: string;\n prevMonthButtonTestId?: string;\n};\n\nexport interface CalendarHeaderProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n CalendarHeaderTestsProps {\n viewDate: Date;\n /**\n * Скрывает иконку для переключения на предыдущий месяц\n */\n prevMonthHidden?: boolean;\n /**\n * Скрывает иконку для переключения на следующий месяц\n */\n nextMonthHidden?: boolean;\n disablePickers?: boolean;\n prevMonthLabel?: string;\n nextMonthLabel?: string;\n changeMonthLabel?: string;\n changeYearLabel?: string;\n prevMonthIcon?: React.ReactNode;\n nextMonthIcon?: React.ReactNode;\n prevMonthProps?: ArrowMonthProps;\n nextMonthProps?: ArrowMonthProps;\n isMonthDisabled?: (monthNumber: number, year?: number) => boolean;\n isYearDisabled?: (yearNumber: number) => boolean;\n onChange: (viewDate: Date) => void;\n /**\n * Нажатие на кнопку переключения на следующий месяц.\n */\n onNextMonth?: () => void;\n /**\n * Нажатие на кнопку переключения на предыдущий месяц.\n */\n onPrevMonth?: () => void;\n}\n\nexport const CalendarHeader = ({\n viewDate,\n onChange,\n prevMonthHidden: prevMonthHiddenProp = false,\n nextMonthHidden: nextMonthHiddenProp = false,\n disablePickers = false,\n onNextMonth,\n onPrevMonth,\n prevMonthProps = {},\n nextMonthProps = {},\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n prevMonthIcon = (\n <Icon20ChevronLeftOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n nextMonthIcon = (\n <Icon20ChevronRightOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n isMonthDisabled,\n isYearDisabled,\n monthDropdownTestId,\n yearDropdownTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n ...restProps\n}: CalendarHeaderProps): React.ReactNode => {\n const { locale } = useConfigProvider();\n const onMonthsChange = React.useCallback(\n (newValue: SelectProps['value']) => onChange(setMonth(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n const onYearChange = React.useCallback(\n (newValue: SelectProps['value']) => onChange(setYear(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n\n const currentYear = viewDate.getFullYear();\n const currentMonth = viewDate.getMonth();\n\n const months = React.useMemo(\n () =>\n getMonths(locale).map(({ value, label }) => ({\n value,\n label: <span className={styles.month}>{label}</span>,\n disabled: isMonthDisabled && isMonthDisabled(value),\n })),\n [locale, isMonthDisabled],\n );\n\n const years = React.useMemo(\n () =>\n getYears(currentYear, 100).map((year) => ({\n ...year,\n disabled: isYearDisabled && isYearDisabled(year.value),\n })),\n [currentYear, isYearDisabled],\n );\n\n const formatter = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n });\n\n const { className: prevMonthClassName, ...restPrevMonthProps } = prevMonthProps;\n const { className: nextMonthClassName, ...restNextMonthProps } = nextMonthProps;\n\n let nextMonthHidden =\n nextMonthHiddenProp || (currentMonth === 11 && currentYear === DEFAULT_MAX_YEAR);\n if (isMonthDisabled && !nextMonthHidden) {\n nextMonthHidden = isMonthDisabled(\n currentMonth === 11 ? 0 : currentMonth + 1,\n currentMonth === 11 ? Math.min(currentYear + 1, DEFAULT_MAX_YEAR) : currentYear,\n );\n }\n\n let prevMonthHidden =\n prevMonthHiddenProp || (currentMonth === 0 && currentYear === DEFAULT_MIN_YEAR);\n if (isMonthDisabled && !prevMonthHidden) {\n prevMonthHidden = isMonthDisabled(\n currentMonth === 0 ? 11 : currentMonth - 1,\n currentMonth === 0 ? Math.max(currentYear - 1, DEFAULT_MIN_YEAR) : currentYear,\n );\n }\n\n return (\n <RootComponent baseClassName={styles.host} {...restProps}>\n {!prevMonthHidden && (\n <AdaptivityProvider sizeX=\"regular\">\n <Tappable\n className={classNames(styles.navIcon, styles.navIconPrev, prevMonthClassName)}\n onClick={onPrevMonth}\n data-testid={prevMonthButtonTestId}\n {...restPrevMonthProps}\n >\n <VisuallyHidden>\n {prevMonthLabel}, {formatter.format(subMonths(viewDate, 1))}\n </VisuallyHidden>\n {prevMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n {disablePickers ? (\n <Paragraph\n className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}\n weight=\"2\"\n >\n <span className={styles.month}>\n {new Intl.DateTimeFormat(locale, {\n month: 'long',\n }).format(viewDate)}\n </span>\n &nbsp;\n {new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n }).format(viewDate)}\n </Paragraph>\n ) : (\n <AdaptivityProvider sizeY=\"compact\">\n <div className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}>\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentMonth}\n options={months}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onMonthsChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n aria-label={changeMonthLabel}\n data-testid={\n typeof monthDropdownTestId === 'string'\n ? monthDropdownTestId\n : monthDropdownTestId?.(currentMonth)\n }\n />\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentYear}\n options={years}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onYearChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n aria-label={changeYearLabel}\n data-testid={yearDropdownTestId}\n />\n </div>\n </AdaptivityProvider>\n )}\n {!nextMonthHidden && (\n <AdaptivityProvider sizeX=\"regular\">\n <Tappable\n className={classNames(styles.navIcon, styles.navIconNext, nextMonthClassName)}\n onClick={onNextMonth}\n data-testid={nextMonthButtonTestId}\n {...restNextMonthProps}\n >\n <VisuallyHidden>\n {nextMonthLabel}, {formatter.format(addMonths(viewDate, 1))}\n </VisuallyHidden>\n {nextMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon12Dropdown","Icon20ChevronLeftOutline","Icon20ChevronRightOutline","classNames","addMonths","setMonth","setYear","subMonths","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","getMonths","getYears","AdaptivityProvider","useConfigProvider","CustomSelect","RootComponent","Tappable","Paragraph","VisuallyHidden","CalendarHeader","viewDate","onChange","prevMonthHidden","prevMonthHiddenProp","nextMonthHidden","nextMonthHiddenProp","disablePickers","onNextMonth","onPrevMonth","prevMonthProps","nextMonthProps","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","prevMonthIcon","className","width","height","nextMonthIcon","isMonthDisabled","isYearDisabled","monthDropdownTestId","yearDropdownTestId","prevMonthButtonTestId","nextMonthButtonTestId","restProps","locale","onMonthsChange","useCallback","newValue","Number","onYearChange","currentYear","getFullYear","currentMonth","getMonth","months","useMemo","map","value","label","span","disabled","years","year","formatter","Intl","DateTimeFormat","month","prevMonthClassName","restPrevMonthProps","nextMonthClassName","restNextMonthProps","Math","min","max","baseClassName","sizeX","onClick","data-testid","format","weight","sizeY","div","options","dropdownOffsetDistance","dropdownAutoWidth","icon","forceDropdownPortal","selectType","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent } from 'react';\nimport * as React from 'react';\nimport {\n Icon12Dropdown,\n Icon20ChevronLeftOutline,\n Icon20ChevronRightOutline,\n} from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { addMonths, setMonth, setYear, subMonths } from 'date-fns';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, getMonths, getYears } from '../../lib/calendar';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarHeader.module.css';\n\ntype ArrowMonthProps = Omit<React.AllHTMLAttributes<HTMLElement>, 'onClick' | 'aria-label'>;\n\nexport type CalendarHeaderTestsProps = {\n monthDropdownTestId?: string | ((monthIndex: number) => string);\n yearDropdownTestId?: string | ((year: number) => string);\n nextMonthButtonTestId?: string;\n prevMonthButtonTestId?: string;\n};\n\nexport interface CalendarHeaderProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n CalendarHeaderTestsProps {\n viewDate: Date;\n /**\n * Скрывает иконку для переключения на предыдущий месяц\n */\n prevMonthHidden?: boolean;\n /**\n * Скрывает иконку для переключения на следующий месяц\n */\n nextMonthHidden?: boolean;\n disablePickers?: boolean;\n prevMonthLabel?: string;\n nextMonthLabel?: string;\n changeMonthLabel?: string;\n changeYearLabel?: string;\n prevMonthIcon?: React.ReactNode;\n nextMonthIcon?: React.ReactNode;\n prevMonthProps?: ArrowMonthProps;\n nextMonthProps?: ArrowMonthProps;\n isMonthDisabled?: (monthNumber: number, year?: number) => boolean;\n isYearDisabled?: (yearNumber: number) => boolean;\n onChange: (viewDate: Date) => void;\n /**\n * Нажатие на кнопку переключения на следующий месяц.\n */\n onNextMonth?: () => void;\n /**\n * Нажатие на кнопку переключения на предыдущий месяц.\n */\n onPrevMonth?: () => void;\n}\n\nexport const CalendarHeader = ({\n viewDate,\n onChange,\n prevMonthHidden: prevMonthHiddenProp = false,\n nextMonthHidden: nextMonthHiddenProp = false,\n disablePickers = false,\n onNextMonth,\n onPrevMonth,\n prevMonthProps = {},\n nextMonthProps = {},\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n prevMonthIcon = (\n <Icon20ChevronLeftOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n nextMonthIcon = (\n <Icon20ChevronRightOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n isMonthDisabled,\n isYearDisabled,\n monthDropdownTestId,\n yearDropdownTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n ...restProps\n}: CalendarHeaderProps): React.ReactNode => {\n const { locale } = useConfigProvider();\n const onMonthsChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setMonth(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n const onYearChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setYear(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n\n const currentYear = viewDate.getFullYear();\n const currentMonth = viewDate.getMonth();\n\n const months = React.useMemo(\n () =>\n getMonths(locale).map(({ value, label }) => ({\n value,\n label: <span className={styles.month}>{label}</span>,\n disabled: isMonthDisabled && isMonthDisabled(value),\n })),\n [locale, isMonthDisabled],\n );\n\n const years = React.useMemo(\n () =>\n getYears(currentYear, 100).map((year) => ({\n ...year,\n disabled: isYearDisabled && isYearDisabled(year.value),\n })),\n [currentYear, isYearDisabled],\n );\n\n const formatter = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n });\n\n const { className: prevMonthClassName, ...restPrevMonthProps } = prevMonthProps;\n const { className: nextMonthClassName, ...restNextMonthProps } = nextMonthProps;\n\n let nextMonthHidden =\n nextMonthHiddenProp || (currentMonth === 11 && currentYear === DEFAULT_MAX_YEAR);\n if (isMonthDisabled && !nextMonthHidden) {\n nextMonthHidden = isMonthDisabled(\n currentMonth === 11 ? 0 : currentMonth + 1,\n currentMonth === 11 ? Math.min(currentYear + 1, DEFAULT_MAX_YEAR) : currentYear,\n );\n }\n\n let prevMonthHidden =\n prevMonthHiddenProp || (currentMonth === 0 && currentYear === DEFAULT_MIN_YEAR);\n if (isMonthDisabled && !prevMonthHidden) {\n prevMonthHidden = isMonthDisabled(\n currentMonth === 0 ? 11 : currentMonth - 1,\n currentMonth === 0 ? Math.max(currentYear - 1, DEFAULT_MIN_YEAR) : currentYear,\n );\n }\n\n return (\n <RootComponent baseClassName={styles.host} {...restProps}>\n {!prevMonthHidden && (\n <AdaptivityProvider sizeX=\"regular\">\n <Tappable\n className={classNames(styles.navIcon, styles.navIconPrev, prevMonthClassName)}\n onClick={onPrevMonth}\n data-testid={prevMonthButtonTestId}\n {...restPrevMonthProps}\n >\n <VisuallyHidden>\n {prevMonthLabel}, {formatter.format(subMonths(viewDate, 1))}\n </VisuallyHidden>\n {prevMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n {disablePickers ? (\n <Paragraph\n className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}\n weight=\"2\"\n >\n <span className={styles.month}>\n {new Intl.DateTimeFormat(locale, {\n month: 'long',\n }).format(viewDate)}\n </span>\n &nbsp;\n {new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n }).format(viewDate)}\n </Paragraph>\n ) : (\n <AdaptivityProvider sizeY=\"compact\">\n <div className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}>\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentMonth}\n options={months}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onMonthsChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n aria-label={changeMonthLabel}\n data-testid={\n typeof monthDropdownTestId === 'string'\n ? monthDropdownTestId\n : monthDropdownTestId?.(currentMonth)\n }\n />\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentYear}\n options={years}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onYearChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n aria-label={changeYearLabel}\n data-testid={yearDropdownTestId}\n />\n </div>\n </AdaptivityProvider>\n )}\n {!nextMonthHidden && (\n <AdaptivityProvider sizeX=\"regular\">\n <Tappable\n className={classNames(styles.navIcon, styles.navIconNext, nextMonthClassName)}\n onClick={onNextMonth}\n data-testid={nextMonthButtonTestId}\n {...restNextMonthProps}\n >\n <VisuallyHidden>\n {nextMonthLabel}, {formatter.format(addMonths(viewDate, 1))}\n </VisuallyHidden>\n {nextMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon12Dropdown","Icon20ChevronLeftOutline","Icon20ChevronRightOutline","classNames","addMonths","setMonth","setYear","subMonths","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","getMonths","getYears","AdaptivityProvider","useConfigProvider","CustomSelect","RootComponent","Tappable","Paragraph","VisuallyHidden","CalendarHeader","viewDate","onChange","prevMonthHidden","prevMonthHiddenProp","nextMonthHidden","nextMonthHiddenProp","disablePickers","onNextMonth","onPrevMonth","prevMonthProps","nextMonthProps","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","prevMonthIcon","className","width","height","nextMonthIcon","isMonthDisabled","isYearDisabled","monthDropdownTestId","yearDropdownTestId","prevMonthButtonTestId","nextMonthButtonTestId","restProps","locale","onMonthsChange","useCallback","_","newValue","Number","onYearChange","currentYear","getFullYear","currentMonth","getMonth","months","useMemo","map","value","label","span","disabled","years","year","formatter","Intl","DateTimeFormat","month","prevMonthClassName","restPrevMonthProps","nextMonthClassName","restNextMonthProps","Math","min","max","baseClassName","sizeX","onClick","data-testid","format","weight","sizeY","div","options","dropdownOffsetDistance","dropdownAutoWidth","icon","forceDropdownPortal","selectType","aria-label"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarTime.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,KAAK,EAAE,IAAI,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5D;AAkBD,eAAO,MAAM,YAAY,mMAatB,iBAAiB,KAAG,KAAK,CAAC,SAkE5B,CAAC"}
1
+ {"version":3,"file":"CalendarTime.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,KAAK,EAAE,IAAI,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5D;AAkBD,eAAO,MAAM,YAAY,mMAatB,iBAAiB,KAAG,KAAK,CAAC,SAoE5B,CAAC"}
@@ -33,11 +33,11 @@ export const CalendarTime = ({ value, onChange, onDoneButtonClick, changeHoursLa
33
33
  disabled: isDayDisabled(setMinutes(value, minute.value), true)
34
34
  });
35
35
  }) : minutes;
36
- const onHoursChange = React.useCallback((newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(setHours(value, Number(newValue))), [
36
+ const onHoursChange = React.useCallback((_, newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(setHours(value, Number(newValue))), [
37
37
  onChange,
38
38
  value
39
39
  ]);
40
- const onMinutesChange = React.useCallback((newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(setMinutes(value, Number(newValue))), [
40
+ const onMinutesChange = React.useCallback((_, newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(setMinutes(value, Number(newValue))), [
41
41
  onChange,
42
42
  value
43
43
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { setHours, setMinutes } from 'date-fns';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button } from '../Button/Button';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport styles from './CalendarTime.module.css';\n\nexport type CalendarTimeTestsProps = {\n hoursTestId?: string;\n minutesTestId?: string;\n doneButtonTestId?: string;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps {\n value: Date;\n doneButtonText?: string;\n doneButtonShow?: boolean;\n doneButtonDisabled?: boolean;\n changeHoursLabel?: string;\n changeMinutesLabel?: string;\n onChange?: (value: Date) => void;\n onDoneButtonClick?: () => void;\n isDayDisabled?: (day: Date, withTime?: boolean) => boolean;\n}\n\nconst hours: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 24; i += 1) {\n hours.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nconst minutes: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 60; i += 1) {\n minutes.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n isDayDisabled,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n}: CalendarTimeProps): React.ReactNode => {\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHours(value, hour.value), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return { ...minute, disabled: isDayDisabled(setMinutes(value, minute.value), true) };\n })\n : minutes;\n\n const onHoursChange = React.useCallback(\n (newValue: SelectProps['value']) => onChange?.(setHours(value, Number(newValue))),\n [onChange, value],\n );\n const onMinutesChange = React.useCallback(\n (newValue: SelectProps['value']) => onChange?.(setMinutes(value, Number(newValue))),\n [onChange, value],\n );\n\n return (\n <div className={classNames(styles.host, !doneButtonShow && styles.host__withoutDone)}>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getHours()}\n options={localHours}\n onChange={onHoursChange}\n forceDropdownPortal={false}\n aria-label={changeHoursLabel}\n data-testid={hoursTestId}\n />\n </AdaptivityProvider>\n </div>\n <div className={styles.divider}>:</div>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getMinutes()}\n options={localMinutes}\n onChange={onMinutesChange}\n forceDropdownPortal={false}\n aria-label={changeMinutesLabel}\n data-testid={minutesTestId}\n />\n </AdaptivityProvider>\n </div>\n {doneButtonShow && (\n <div className={styles.button}>\n <AdaptivityProvider sizeY=\"compact\">\n <Button\n mode=\"secondary\"\n onClick={onDoneButtonClick}\n size=\"l\"\n disabled={doneButtonDisabled}\n data-testid={doneButtonTestId}\n >\n {doneButtonText}\n </Button>\n </AdaptivityProvider>\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","classNames","setHours","setMinutes","AdaptivityProvider","Button","CustomSelect","hours","i","push","value","label","String","padStart","minutes","CalendarTime","onChange","onDoneButtonClick","changeHoursLabel","changeMinutesLabel","isDayDisabled","doneButtonText","doneButtonDisabled","doneButtonShow","minutesTestId","hoursTestId","doneButtonTestId","localHours","map","hour","disabled","localMinutes","minute","onHoursChange","useCallback","newValue","Number","onMinutesChange","div","className","sizeY","getHours","options","forceDropdownPortal","aria-label","data-testid","getMinutes","mode","onClick","size"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,QAAQ,EAAEC,UAAU,QAAQ,WAAW;AAChD,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,YAAY,QAA0B,kCAA+B;AAqB9E,MAAMC,QAGD,EAAE;AACP,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BD,MAAME,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC3D;AAEA,MAAMC,UAGD,EAAE;AACP,IAAK,IAAIN,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BM,QAAQL,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC7D;AAEA,OAAO,MAAME,eAAe,CAAC,EAC3BL,KAAK,EACLM,QAAQ,EACRC,iBAAiB,EACjBC,gBAAgB,EAChBC,kBAAkB,EAClBC,aAAa,EACbC,iBAAiB,QAAQ,EACzBC,qBAAqB,KAAK,EAC1BC,iBAAiB,IAAI,EACrBC,aAAa,EACbC,WAAW,EACXC,gBAAgB,EACE;IAClB,MAAMC,aAAaP,gBACfb,MAAMqB,GAAG,CAAC,CAACC;QACT,OAAO,wCAAKA;YAAMC,UAAUV,cAAclB,SAASQ,OAAOmB,KAAKnB,KAAK,GAAG;;IACzE,KACAH;IAEJ,MAAMwB,eAAeX,gBACjBN,QAAQc,GAAG,CAAC,CAACI;QACX,OAAO,wCAAKA;YAAQF,UAAUV,cAAcjB,WAAWO,OAAOsB,OAAOtB,KAAK,GAAG;;IAC/E,KACAI;IAEJ,MAAMmB,gBAAgBjC,MAAMkC,WAAW,CACrC,CAACC,WAAmCnB,qBAAAA,+BAAAA,SAAWd,SAASQ,OAAO0B,OAAOD,aACtE;QAACnB;QAAUN;KAAM;IAEnB,MAAM2B,kBAAkBrC,MAAMkC,WAAW,CACvC,CAACC,WAAmCnB,qBAAAA,+BAAAA,SAAWb,WAAWO,OAAO0B,OAAOD,aACxE;QAACnB;QAAUN;KAAM;IAGnB,qBACE,MAAC4B;QAAIC,WAAWtC,qCAAwB,CAACsB;;0BACvC,KAACe;gBAAIC,SAAS;0BACZ,cAAA,KAACnC;oBAAmBoC,OAAM;8BACxB,cAAA,KAAClC;wBACCI,OAAOA,MAAM+B,QAAQ;wBACrBC,SAASf;wBACTX,UAAUiB;wBACVU,qBAAqB;wBACrBC,cAAY1B;wBACZ2B,eAAapB;;;;0BAInB,KAACa;gBAAIC,SAAS;0BAAkB;;0BAChC,KAACD;gBAAIC,SAAS;0BACZ,cAAA,KAACnC;oBAAmBoC,OAAM;8BACxB,cAAA,KAAClC;wBACCI,OAAOA,MAAMoC,UAAU;wBACvBJ,SAASX;wBACTf,UAAUqB;wBACVM,qBAAqB;wBACrBC,cAAYzB;wBACZ0B,eAAarB;;;;YAIlBD,gCACC,KAACe;gBAAIC,SAAS;0BACZ,cAAA,KAACnC;oBAAmBoC,OAAM;8BACxB,cAAA,KAACnC;wBACC0C,MAAK;wBACLC,SAAS/B;wBACTgC,MAAK;wBACLnB,UAAUR;wBACVuB,eAAanB;kCAEZL;;;;;;AAOf,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { setHours, setMinutes } from 'date-fns';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button } from '../Button/Button';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport styles from './CalendarTime.module.css';\n\nexport type CalendarTimeTestsProps = {\n hoursTestId?: string;\n minutesTestId?: string;\n doneButtonTestId?: string;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps {\n value: Date;\n doneButtonText?: string;\n doneButtonShow?: boolean;\n doneButtonDisabled?: boolean;\n changeHoursLabel?: string;\n changeMinutesLabel?: string;\n onChange?: (value: Date) => void;\n onDoneButtonClick?: () => void;\n isDayDisabled?: (day: Date, withTime?: boolean) => boolean;\n}\n\nconst hours: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 24; i += 1) {\n hours.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nconst minutes: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 60; i += 1) {\n minutes.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n isDayDisabled,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n}: CalendarTimeProps): React.ReactNode => {\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHours(value, hour.value), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return { ...minute, disabled: isDayDisabled(setMinutes(value, minute.value), true) };\n })\n : minutes;\n\n const onHoursChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange?.(setHours(value, Number(newValue))),\n [onChange, value],\n );\n const onMinutesChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange?.(setMinutes(value, Number(newValue))),\n [onChange, value],\n );\n\n return (\n <div className={classNames(styles.host, !doneButtonShow && styles.host__withoutDone)}>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getHours()}\n options={localHours}\n onChange={onHoursChange}\n forceDropdownPortal={false}\n aria-label={changeHoursLabel}\n data-testid={hoursTestId}\n />\n </AdaptivityProvider>\n </div>\n <div className={styles.divider}>:</div>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getMinutes()}\n options={localMinutes}\n onChange={onMinutesChange}\n forceDropdownPortal={false}\n aria-label={changeMinutesLabel}\n data-testid={minutesTestId}\n />\n </AdaptivityProvider>\n </div>\n {doneButtonShow && (\n <div className={styles.button}>\n <AdaptivityProvider sizeY=\"compact\">\n <Button\n mode=\"secondary\"\n onClick={onDoneButtonClick}\n size=\"l\"\n disabled={doneButtonDisabled}\n data-testid={doneButtonTestId}\n >\n {doneButtonText}\n </Button>\n </AdaptivityProvider>\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","classNames","setHours","setMinutes","AdaptivityProvider","Button","CustomSelect","hours","i","push","value","label","String","padStart","minutes","CalendarTime","onChange","onDoneButtonClick","changeHoursLabel","changeMinutesLabel","isDayDisabled","doneButtonText","doneButtonDisabled","doneButtonShow","minutesTestId","hoursTestId","doneButtonTestId","localHours","map","hour","disabled","localMinutes","minute","onHoursChange","useCallback","_","newValue","Number","onMinutesChange","div","className","sizeY","getHours","options","forceDropdownPortal","aria-label","data-testid","getMinutes","mode","onClick","size"],"mappings":"AAAA;;;;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,QAAQ,EAAEC,UAAU,QAAQ,WAAW;AAChD,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,YAAY,QAA0B,kCAA+B;AAqB9E,MAAMC,QAGD,EAAE;AACP,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BD,MAAME,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC3D;AAEA,MAAMC,UAGD,EAAE;AACP,IAAK,IAAIN,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BM,QAAQL,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC7D;AAEA,OAAO,MAAME,eAAe,CAAC,EAC3BL,KAAK,EACLM,QAAQ,EACRC,iBAAiB,EACjBC,gBAAgB,EAChBC,kBAAkB,EAClBC,aAAa,EACbC,iBAAiB,QAAQ,EACzBC,qBAAqB,KAAK,EAC1BC,iBAAiB,IAAI,EACrBC,aAAa,EACbC,WAAW,EACXC,gBAAgB,EACE;IAClB,MAAMC,aAAaP,gBACfb,MAAMqB,GAAG,CAAC,CAACC;QACT,OAAO,wCAAKA;YAAMC,UAAUV,cAAclB,SAASQ,OAAOmB,KAAKnB,KAAK,GAAG;;IACzE,KACAH;IAEJ,MAAMwB,eAAeX,gBACjBN,QAAQc,GAAG,CAAC,CAACI;QACX,OAAO,wCAAKA;YAAQF,UAAUV,cAAcjB,WAAWO,OAAOsB,OAAOtB,KAAK,GAAG;;IAC/E,KACAI;IAEJ,MAAMmB,gBAAgBjC,MAAMkC,WAAW,CACrC,CAACC,GAAmCC,WAClCpB,qBAAAA,+BAAAA,SAAWd,SAASQ,OAAO2B,OAAOD,aACpC;QAACpB;QAAUN;KAAM;IAEnB,MAAM4B,kBAAkBtC,MAAMkC,WAAW,CACvC,CAACC,GAAmCC,WAClCpB,qBAAAA,+BAAAA,SAAWb,WAAWO,OAAO2B,OAAOD,aACtC;QAACpB;QAAUN;KAAM;IAGnB,qBACE,MAAC6B;QAAIC,WAAWvC,qCAAwB,CAACsB;;0BACvC,KAACgB;gBAAIC,SAAS;0BACZ,cAAA,KAACpC;oBAAmBqC,OAAM;8BACxB,cAAA,KAACnC;wBACCI,OAAOA,MAAMgC,QAAQ;wBACrBC,SAAShB;wBACTX,UAAUiB;wBACVW,qBAAqB;wBACrBC,cAAY3B;wBACZ4B,eAAarB;;;;0BAInB,KAACc;gBAAIC,SAAS;0BAAkB;;0BAChC,KAACD;gBAAIC,SAAS;0BACZ,cAAA,KAACpC;oBAAmBqC,OAAM;8BACxB,cAAA,KAACnC;wBACCI,OAAOA,MAAMqC,UAAU;wBACvBJ,SAASZ;wBACTf,UAAUsB;wBACVM,qBAAqB;wBACrBC,cAAY1B;wBACZ2B,eAAatB;;;;YAIlBD,gCACC,KAACgB;gBAAIC,SAAS;0BACZ,cAAA,KAACpC;oBAAmBqC,OAAM;8BACxB,cAAA,KAACpC;wBACC2C,MAAK;wBACLC,SAAShC;wBACTiC,MAAK;wBACLpB,UAAUR;wBACVwB,eAAapB;kCAEZL;;;;;;AAOf,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
@@ -384,7 +384,13 @@ const filter = (options, inputValue, filterFn)=>{
384
384
  if (!isControlledOutside) {
385
385
  setSelectedOptionIndex(newSelectedOptionIndex);
386
386
  }
387
- onChange === null || onChange === void 0 ? void 0 : onChange(remappedNativeValue);
387
+ if (e.target.value === NOT_SELECTED.NATIVE) {
388
+ e.target.value = '';
389
+ }
390
+ if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
391
+ e.currentTarget.value = '';
392
+ }
393
+ onChange === null || onChange === void 0 ? void 0 : onChange(e, remappedNativeValue);
388
394
  }
389
395
  };
390
396
  const onInputChange = React.useCallback((e)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n remapFromSelectValueToNativeValue,\n} from '../NativeSelect/NativeSelect';\nimport type {\n NativeSelectProps,\n NativeSelectValue,\n SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport interface CustomSelectOptionInterface {\n value: Exclude<SelectValue, null>;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState<NativeSelectValue>(() => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n if (defaultValue !== undefined) {\n return remapFromSelectValueToNativeValue(defaultValue);\n }\n return NOT_SELECTED.NATIVE;\n });\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue ?? null),\n );\n\n React.useEffect(() => {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = props.value !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n setNativeSelectValue((nativeSelectValue) => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n return nativeSelectValue;\n });\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n setNativeSelectValue(item?.value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value =\n props.value !== undefined\n ? props.value\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n },\n [filterFn, inputValue, nativeSelectValue, optionsProp, defaultValue, props.value, searchable],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);\n const newSelectedOptionIndex = findSelectedIndex(options, remappedNativeValue);\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(remappedNativeValue);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const controlledValueSet = isControlledOutside && props.value !== NOT_SELECTED.CUSTOM;\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles.clearIcon : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n setInputValue('');\n selectInputRef.current && selectInputRef.current.focus();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n selectInputRef,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles.dropdownIcon : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","NOT_SELECTED","remapFromNativeValueToSelectValue","remapFromSelectValueToNativeValue","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","sizeYClassNames","none","compact","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","CUSTOM","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","searchable","renderOptionProp","optionsProp","emptyText","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","NATIVE","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","remappedNativeValue","currentTarget","newSelectedOptionIndex","onInputChange","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","renderOption","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","focus","data-testid","icon","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n remapFromSelectValueToNativeValue,\n} from '../NativeSelect/NativeSelect';\nimport type {\n NativeSelectProps,\n NativeSelectValue,\n SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport interface CustomSelectOptionInterface {\n value: Exclude<SelectValue, null>;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState<NativeSelectValue>(() => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n if (defaultValue !== undefined) {\n return remapFromSelectValueToNativeValue(defaultValue);\n }\n return NOT_SELECTED.NATIVE;\n });\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue ?? null),\n );\n\n React.useEffect(() => {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = props.value !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n setNativeSelectValue((nativeSelectValue) => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n return nativeSelectValue;\n });\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n setNativeSelectValue(item?.value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value =\n props.value !== undefined\n ? props.value\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n },\n [filterFn, inputValue, nativeSelectValue, optionsProp, defaultValue, props.value, searchable],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);\n const newSelectedOptionIndex = findSelectedIndex(options, remappedNativeValue);\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n onChange?.(e, remappedNativeValue);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const controlledValueSet = isControlledOutside && props.value !== NOT_SELECTED.CUSTOM;\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles.clearIcon : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n setInputValue('');\n selectInputRef.current && selectInputRef.current.focus();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n selectInputRef,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles.dropdownIcon : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","NOT_SELECTED","remapFromNativeValueToSelectValue","remapFromSelectValueToNativeValue","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","sizeYClassNames","none","compact","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","CUSTOM","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","searchable","renderOptionProp","optionsProp","emptyText","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","NATIVE","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","remappedNativeValue","currentTarget","newSelectedOptionIndex","target","onInputChange","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","renderOption","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","focus","data-testid","icon","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ChangeEvent } from 'react';
1
2
  import * as React from 'react';
2
3
  import type { HasAlign, HasRef, HasRootRef } from '../../types';
3
4
  import { type FormFieldProps } from '../FormField/FormField';
@@ -25,8 +26,11 @@ export interface NativeSelectProps extends Omit<React.SelectHTMLAttributes<HTMLS
25
26
  defaultValue?: SelectValue;
26
27
  /**
27
28
  * Коллбэк срабатывающий при изменении выбранного значения.
29
+ * Вторым параметром прокидывается новое значение
30
+ *
31
+ * > ⚠️ Лучше использовать второй параметр при работе с компонентом
28
32
  */
29
- onChange?: (newValue: SelectValue) => void;
33
+ onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;
30
34
  placeholder?: string;
31
35
  multiline?: boolean;
32
36
  selectType?: SelectType;
@@ -35,11 +39,6 @@ export interface NativeSelectProps extends Omit<React.SelectHTMLAttributes<HTMLS
35
39
  */
36
40
  icon?: React.ReactNode;
37
41
  }
38
- export interface SelectState {
39
- value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];
40
- title?: string;
41
- notSelected?: boolean;
42
- }
43
42
  /**
44
43
  * @see https://vkcom.github.io/VKUI/#/NativeSelect
45
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"NativeSelect.d.ts","sourceRoot":"","sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EACtD,SAAS,CACV,GAAG,IAAI,CAAC;AAET,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF,eAAO,MAAM,iCAAiC,UAAW,WAAW,KAAG,iBACV,CAAC;AAE9D,eAAO,MAAM,iCAAiC,UAAW,iBAAiB,KAAG,WAChB,CAAC;AAE9D,MAAM,WAAW,iBACf,SAAQ,IAAI,CACR,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CACnD,EACD,MAAM,CAAC,iBAAiB,CAAC,EACzB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,QAAA,MAAM,YAAY,+KAkBf,iBAAiB,KAAG,KAAK,CAAC,SAiE5B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"NativeSelect.d.ts","sourceRoot":"","sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EACtD,SAAS,CACV,GAAG,IAAI,CAAC;AAET,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF,eAAO,MAAM,iCAAiC,UAAW,WAAW,KAAG,iBACV,CAAC;AAE9D,eAAO,MAAM,iCAAiC,UAAW,iBAAiB,KAAG,WAChB,CAAC;AAE9D,MAAM,WAAW,iBACf,SAAQ,IAAI,CACR,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CACnD,EACD,MAAM,CAAC,iBAAiB,CAAC,EACzB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,QAAA,MAAM,YAAY,+KAkBf,iBAAiB,KAAG,KAAK,CAAC,SAuE5B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -58,7 +58,13 @@ export const remapFromNativeValueToSelectValue = (value)=>value === NOT_SELECTED
58
58
  };
59
59
  const _onChange = (e)=>{
60
60
  const newValue = remapFromNativeValueToSelectValue(e.target.value);
61
- onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
61
+ if (e.target.value === NOT_SELECTED.NATIVE) {
62
+ e.target.value = '';
63
+ }
64
+ if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
65
+ e.currentTarget.value = '';
66
+ }
67
+ onChange === null || onChange === void 0 ? void 0 : onChange(e, newValue);
62
68
  };
63
69
  useIsomorphicLayoutEffect(checkSelectedOption, [
64
70
  children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type SelectValue = Exclude<\n React.SelectHTMLAttributes<HTMLSelectElement>['value'],\n undefined\n> | null;\n\nexport type NativeSelectValue = Exclude<SelectValue, null>;\n\nexport const NOT_SELECTED = {\n NATIVE: '__vkui_internal_Select_not_selected__',\n CUSTOM: null,\n};\n\nexport const remapFromSelectValueToNativeValue = (value: SelectValue): NativeSelectValue =>\n value === NOT_SELECTED.CUSTOM ? NOT_SELECTED.NATIVE : value;\n\nexport const remapFromNativeValueToSelectValue = (value: NativeSelectValue): SelectValue =>\n value === NOT_SELECTED.NATIVE ? NOT_SELECTED.CUSTOM : value;\n\nexport interface NativeSelectProps\n extends Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n /**\n * Выбранное значение.\n *\n * > ⚠️ Важно: При прокидывании `undefined` компонент будет считаться `Uncontrolled`.\n * >\n * > Не используйте `undefined`, чтобы показать невыбранное состояние. Вместо этого используйте `null`\n */\n value?: SelectValue;\n /**\n * см. `value`\n */\n defaultValue?: SelectValue;\n /**\n * Коллбэк срабатывающий при изменении выбранного значения.\n */\n onChange?: (newValue: SelectValue) => void;\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange,\n value,\n defaultValue,\n ...restProps\n}: NativeSelectProps): React.ReactNode => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const checkSelectedOption = () => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === NOT_SELECTED.NATIVE && placeholder != null);\n }\n };\n\n const _onChange: ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newValue = remapFromNativeValueToSelectValue(e.target.value);\n onChange?.(newValue);\n };\n useIsomorphicLayoutEffect(checkSelectedOption, [children]);\n\n return (\n <FormField\n Component=\"div\"\n className={classNames(\n styles.host,\n 'vkuiInternalNativeSelect',\n before && styles.hasBefore,\n empty && styles.empty,\n multiline && styles.multiline,\n align === 'center' && styles.alignCenter,\n align === 'right' && styles.alignRight,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n mode={getFormFieldModeFromSelectType(selectType)}\n >\n <select\n {...restProps}\n value={value !== undefined ? remapFromSelectValueToNativeValue(value) : value}\n defaultValue={\n defaultValue !== undefined\n ? remapFromSelectValueToNativeValue(defaultValue)\n : defaultValue\n }\n disabled={disabled}\n className={styles.el}\n onChange={callMultiple(_onChange, checkSelectedOption)}\n ref={selectRef}\n >\n {placeholder && <option value={NOT_SELECTED.NATIVE}>{placeholder}</option>}\n {children}\n </select>\n <div className={styles.container} aria-hidden>\n <SelectTypography className={styles.title} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"names":["React","classNames","useAdaptivity","useExternRef","callMultiple","getFormFieldModeFromSelectType","useIsomorphicLayoutEffect","DropdownIcon","FormField","SelectTypography","sizeYClassNames","none","compact","NOT_SELECTED","NATIVE","CUSTOM","remapFromSelectValueToNativeValue","value","remapFromNativeValueToSelectValue","NativeSelect","style","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","before","onChange","defaultValue","restProps","title","setTitle","useState","empty","setEmpty","selectRef","sizeY","checkSelectedOption","selectedOption","current","options","selectedIndex","text","_onChange","e","newValue","target","Component","after","mode","select","undefined","ref","option","div","aria-hidden"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent, type ChangeEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type SelectValue = Exclude<\n React.SelectHTMLAttributes<HTMLSelectElement>['value'],\n undefined\n> | null;\n\nexport type NativeSelectValue = Exclude<SelectValue, null>;\n\nexport const NOT_SELECTED = {\n NATIVE: '__vkui_internal_Select_not_selected__',\n CUSTOM: null,\n};\n\nexport const remapFromSelectValueToNativeValue = (value: SelectValue): NativeSelectValue =>\n value === NOT_SELECTED.CUSTOM ? NOT_SELECTED.NATIVE : value;\n\nexport const remapFromNativeValueToSelectValue = (value: NativeSelectValue): SelectValue =>\n value === NOT_SELECTED.NATIVE ? NOT_SELECTED.CUSTOM : value;\n\nexport interface NativeSelectProps\n extends Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n /**\n * Выбранное значение.\n *\n * > ⚠️ Важно: При прокидывании `undefined` компонент будет считаться `Uncontrolled`.\n * >\n * > Не используйте `undefined`, чтобы показать невыбранное состояние. Вместо этого используйте `null`\n */\n value?: SelectValue;\n /**\n * см. `value`\n */\n defaultValue?: SelectValue;\n /**\n * Коллбэк срабатывающий при изменении выбранного значения.\n * Вторым параметром прокидывается новое значение\n *\n * > ⚠️ Лучше использовать второй параметр при работе с компонентом\n */\n onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange,\n value,\n defaultValue,\n ...restProps\n}: NativeSelectProps): React.ReactNode => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const checkSelectedOption = () => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === NOT_SELECTED.NATIVE && placeholder != null);\n }\n };\n\n const _onChange: ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newValue = remapFromNativeValueToSelectValue(e.target.value);\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n onChange?.(e, newValue);\n };\n useIsomorphicLayoutEffect(checkSelectedOption, [children]);\n\n return (\n <FormField\n Component=\"div\"\n className={classNames(\n styles.host,\n 'vkuiInternalNativeSelect',\n before && styles.hasBefore,\n empty && styles.empty,\n multiline && styles.multiline,\n align === 'center' && styles.alignCenter,\n align === 'right' && styles.alignRight,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n mode={getFormFieldModeFromSelectType(selectType)}\n >\n <select\n {...restProps}\n value={value !== undefined ? remapFromSelectValueToNativeValue(value) : value}\n defaultValue={\n defaultValue !== undefined\n ? remapFromSelectValueToNativeValue(defaultValue)\n : defaultValue\n }\n disabled={disabled}\n className={styles.el}\n onChange={callMultiple(_onChange, checkSelectedOption)}\n ref={selectRef}\n >\n {placeholder && <option value={NOT_SELECTED.NATIVE}>{placeholder}</option>}\n {children}\n </select>\n <div className={styles.container} aria-hidden>\n <SelectTypography className={styles.title} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"names":["React","classNames","useAdaptivity","useExternRef","callMultiple","getFormFieldModeFromSelectType","useIsomorphicLayoutEffect","DropdownIcon","FormField","SelectTypography","sizeYClassNames","none","compact","NOT_SELECTED","NATIVE","CUSTOM","remapFromSelectValueToNativeValue","value","remapFromNativeValueToSelectValue","NativeSelect","style","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","before","onChange","defaultValue","restProps","title","setTitle","useState","empty","setEmpty","selectRef","sizeY","checkSelectedOption","selectedOption","current","options","selectedIndex","text","_onChange","e","newValue","target","currentTarget","Component","after","mode","select","undefined","ref","option","div","aria-hidden"],"mappings":"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"}
@@ -23,11 +23,11 @@ export const CalendarHeader = ({ viewDate, onChange, prevMonthHidden: prevMonthH
23
23
  height: 30
24
24
  }), isMonthDisabled, isYearDisabled, monthDropdownTestId, yearDropdownTestId, prevMonthButtonTestId, nextMonthButtonTestId, ...restProps })=>{
25
25
  const { locale } = useConfigProvider();
26
- const onMonthsChange = React.useCallback((newValue)=>onChange(setMonth(viewDate, Number(newValue))), [
26
+ const onMonthsChange = React.useCallback((_, newValue)=>onChange(setMonth(viewDate, Number(newValue))), [
27
27
  onChange,
28
28
  viewDate
29
29
  ]);
30
- const onYearChange = React.useCallback((newValue)=>onChange(setYear(viewDate, Number(newValue))), [
30
+ const onYearChange = React.useCallback((_, newValue)=>onChange(setYear(viewDate, Number(newValue))), [
31
31
  onChange,
32
32
  viewDate
33
33
  ]);