@vkontakte/vkui 8.2.0 → 8.2.2

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 (60) hide show
  1. package/dist/components/Banner/Banner.d.ts.map +1 -1
  2. package/dist/components/Banner/Banner.js +7 -1
  3. package/dist/components/Banner/Banner.js.map +1 -1
  4. package/dist/components/DateInput/DateInput.js +1 -1
  5. package/dist/components/DateInput/DateInput.js.map +1 -1
  6. package/dist/components/DateRangeInput/DateRangeInput.js +1 -1
  7. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  8. package/dist/components/Search/Search.js +1 -4
  9. package/dist/components/Search/Search.js.map +1 -1
  10. package/dist/components/Snackbar/subcomponents/Basic/Basic.d.ts +1 -1
  11. package/dist/components/Snackbar/subcomponents/Basic/Basic.d.ts.map +1 -1
  12. package/dist/components/Snackbar/subcomponents/Basic/Basic.js +11 -2
  13. package/dist/components/Snackbar/subcomponents/Basic/Basic.js.map +1 -1
  14. package/dist/components.css +1 -1
  15. package/dist/components.css.map +1 -1
  16. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +5 -3
  17. package/dist/cssm/components/Banner/Banner.js +7 -1
  18. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  19. package/dist/cssm/components/DateInput/DateInput.js +1 -1
  20. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  21. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +1 -1
  22. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  23. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +2 -0
  24. package/dist/cssm/components/Search/Search.js +1 -4
  25. package/dist/cssm/components/Search/Search.js.map +1 -1
  26. package/dist/cssm/components/Search/Search.module.css +8 -11
  27. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.js +11 -2
  28. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.js.map +1 -1
  29. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +0 -8
  30. package/dist/cssm/hooks/useMergeProps.js +1 -1
  31. package/dist/cssm/hooks/useMergeProps.js.map +1 -1
  32. package/dist/cssm/lib/date.js +1 -1
  33. package/dist/cssm/lib/date.js.map +1 -1
  34. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  35. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  36. package/dist/hooks/useMergeProps.js +1 -1
  37. package/dist/hooks/useMergeProps.js.map +1 -1
  38. package/dist/lib/date.js +1 -1
  39. package/dist/lib/date.js.map +1 -1
  40. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  41. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  42. package/dist/vkui.css +1 -1
  43. package/dist/vkui.css.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/ActionSheet/ActionSheet.module.css +5 -3
  46. package/src/components/ActionSheet/ActionSheet.module.css.d.ts.map +1 -1
  47. package/src/components/Banner/Banner.tsx +8 -5
  48. package/src/components/DateInput/DateInput.tsx +1 -1
  49. package/src/components/DateRangeInput/DateRangeInput.tsx +1 -1
  50. package/src/components/PullToRefresh/PullToRefresh.module.css +2 -0
  51. package/src/components/PullToRefresh/PullToRefresh.module.css.d.ts.map +1 -1
  52. package/src/components/Search/Search.module.css +8 -11
  53. package/src/components/Search/Search.module.css.d.ts.map +1 -1
  54. package/src/components/Search/Search.tsx +1 -1
  55. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +0 -8
  56. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css.d.ts.map +1 -1
  57. package/src/components/Snackbar/subcomponents/Basic/Basic.tsx +9 -3
  58. package/src/hooks/useMergeProps.ts +1 -1
  59. package/src/lib/date.ts +1 -1
  60. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
@@ -5,7 +5,8 @@
5
5
  box-sizing: border-box;
6
6
  inline-size: 100%;
7
7
  max-inline-size: var(--vkui--size_popup_small--regular);
8
- padding: 10px;
8
+ padding-block: 10px calc(10px + var(--vkui_internal--safe_area_inset_bottom));
9
+ padding-inline: 10px;
9
10
  }
10
11
 
11
12
  @media screen and (prefers-reduced-motion: reduce) {
@@ -50,7 +51,8 @@
50
51
  */
51
52
 
52
53
  .ios {
53
- padding: 8px;
54
+ padding-block: 8px calc(8px + var(--vkui_internal--safe_area_inset_bottom));
55
+ padding-inline: 8px;
54
56
  background: transparent;
55
57
  }
56
58
 
@@ -60,7 +62,7 @@
60
62
  }
61
63
 
62
64
  .closeItemWrapperIos {
63
- margin-block: 8px var(--vkui_internal--safe_area_inset_bottom);
65
+ margin-block-start: 8px;
64
66
  overflow: hidden;
65
67
  background: var(--vkui--color_background_modal);
66
68
  border-radius: 14px;
@@ -72,9 +72,15 @@ import styles from "./Banner.module.css";
72
72
  children: platform === 'ios' ? /*#__PURE__*/ _jsx(IconDismissIOS, {}) : /*#__PURE__*/ _jsx(Icon24Cancel, {})
73
73
  })
74
74
  };
75
+ const getAfterContent = ()=>{
76
+ if (typeof afterProp === 'string') {
77
+ return afterMap[afterProp] || afterProp;
78
+ }
79
+ return afterProp;
80
+ };
75
81
  const after = afterProp && /*#__PURE__*/ _jsx("div", {
76
82
  className: styles.after,
77
- children: typeof afterProp === 'string' ? afterMap[afterProp] : afterProp
83
+ children: getAfterContent()
78
84
  });
79
85
  const isClickable = restProps.onClick || restProps.onClickCapture || restProps.href;
80
86
  return /*#__PURE__*/ _jsxs(Tappable, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel, Icon24Chevron, Icon24Dismiss, Icon24DismissDark } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useColorScheme } from '../../hooks/useColorScheme';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './Banner.module.css';\n\nexport interface BannerProps extends Omit<TappableOmitProps, 'title' | 'size'> {\n /**\n * Тип баннера.\n */\n mode?: 'tint' | 'image' | undefined;\n /**\n * Размер баннера.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Тип действия в правой части баннера.\n *\n * - `dismiss` – отображается иконка крестика, при нажатии на неё сработает свойство `onDismiss`.\n * - `chevron` – отображается иконка шеврона, которая подразумевает, что при нажатии на баннер можно куда-то перейти.\n */\n after?: 'dismiss' | 'chevron' | React.ReactNode | undefined;\n /**\n * Срабатывает при нажатии на иконку крестика при `after=\"dismiss\"`.\n */\n onDismiss?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n /**\n * Текст кнопки закрытия. Делает ее доступной для ассистивных технологий.\n */\n dismissLabel?: string | undefined;\n /**\n * Содержимое, отображаемое в левой части баннера.\n */\n before?: React.ReactNode | undefined;\n /**\n * Заголовок.\n */\n title?: React.ReactNode | undefined;\n /**\n * Подзаголовок.\n */\n subtitle?: React.ReactNode | undefined;\n /**\n * Дополнительный подзаголовок баннера.\n */\n extraSubtitle?: React.ReactNode | undefined;\n /**\n * При использовании `mode=\"image\"`.\n *\n * - `light` – в качестве фона используется светлое изображение, цвет текста в баннере будет тёмным.\n * - `dark` – в качестве фона используется тёмное изображение, цвет текста будет светлым.\n * - `auto` - цвет фона и текста будет зависеть от цветовой схемы приложения.\n */\n imageTheme?: 'light' | 'dark' | 'auto' | undefined;\n /**\n * При использовании `mode=\"image\"`.\n *\n * Элемент, который нужно стилизовать цветом и/или фоном. Этот элемент будет растянут на 100% ширины и высоты баннера.\n */\n background?: React.ReactNode | undefined;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkui.io/components/button).\n *\n * - В режиме `tint` или `image` со светлым фоном используйте только с параметрами:\n * - `mode=\"primary\"`\n * - `mode=\"secondary\"`\n * - В режиме `image` с тёмным фоном используйте с параметрами:\n * - `appearance=\"overlay\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkui.io/components/button-group) с параметрами:\n *\n * - `gap=\"m\" mode=\"horizontal\" stretched`\n * - `gap=\"m\" mode=\"vertical\" stretched`.\n */\n actions?: React.ReactNode | undefined;\n}\n\n/**\n * @see https://vkui.io/components/banner\n */\nexport const Banner = ({\n mode = 'tint',\n imageTheme: imageThemeProp = 'auto',\n size = 's',\n before,\n after: afterProp,\n title,\n subtitle,\n extraSubtitle,\n children,\n background,\n actions,\n onDismiss,\n dismissLabel = 'Скрыть',\n Component,\n ...restProps\n}: BannerProps): React.ReactNode => {\n const platform = usePlatform();\n const colorScheme = useColorScheme();\n\n const imageTheme = imageThemeProp === 'auto' ? colorScheme : imageThemeProp;\n\n const HeaderTypography = size === 'm' ? Title : Headline;\n const SubheadTypography = size === 'm' ? Text : Subhead;\n\n const IconDismissIOS = mode === 'image' ? Icon24DismissDark : Icon24Dismiss;\n\n const content = (\n <>\n {mode === 'image' && background && (\n <div aria-hidden className={styles.bg}>\n {background}\n </div>\n )}\n\n {before && <div className={styles.before}>{before}</div>}\n\n <div className={styles.content}>\n {hasReactNode(title) && (\n <HeaderTypography Component=\"div\" weight=\"2\" level={size === 'm' ? '2' : '1'}>\n {title}\n </HeaderTypography>\n )}\n {hasReactNode(subtitle) && (\n <SubheadTypography Component=\"div\" className={styles.subtitle}>\n {subtitle}\n </SubheadTypography>\n )}\n {hasReactNode(extraSubtitle) && (\n <Text Component=\"div\" className={styles.extraSubtitle}>\n {extraSubtitle}\n </Text>\n )}\n {hasReactNode(actions) && React.Children.count(actions) > 0 && (\n <div className={styles.actions}>{actions}</div>\n )}\n </div>\n </>\n );\n\n const afterMap: Record<string, React.ReactNode> = {\n chevron: <Icon24Chevron className={styles.chevron} />,\n dismiss: (\n <IconButton\n label={dismissLabel}\n className={styles.dismiss}\n onClick={onDismiss}\n hoverMode=\"opacity\"\n hasActive={false}\n >\n {platform === 'ios' ? <IconDismissIOS /> : <Icon24Cancel />}\n </IconButton>\n ),\n };\n\n const after = afterProp && (\n <div className={styles.after}>\n {typeof afterProp === 'string' ? afterMap[afterProp] : afterProp}\n </div>\n );\n\n const isClickable = restProps.onClick || restProps.onClickCapture || restProps.href;\n\n return (\n <Tappable\n Component={Component || (!isClickable ? 'section' : undefined)}\n activeMode={platform === 'ios' ? 'opacity' : 'background'}\n baseClassName={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n mode === 'image' && styles.modeImage,\n size === 'm' && styles.sizeM,\n mode === 'image' && imageTheme === 'dark' && styles.inverted,\n )}\n {...restProps}\n >\n {content}\n {after}\n </Tappable>\n );\n};\n"],"names":["React","Icon24Cancel","Icon24Chevron","Icon24Dismiss","Icon24DismissDark","classNames","hasReactNode","useColorScheme","usePlatform","IconButton","Tappable","Headline","Subhead","Text","Title","styles","Banner","mode","imageTheme","imageThemeProp","size","before","after","afterProp","title","subtitle","extraSubtitle","children","background","actions","onDismiss","dismissLabel","Component","restProps","platform","colorScheme","HeaderTypography","SubheadTypography","IconDismissIOS","content","div","aria-hidden","className","bg","weight","level","Children","count","afterMap","chevron","dismiss","label","onClick","hoverMode","hasActive","isClickable","onClickCapture","href","undefined","activeMode","baseClassName","host","ios","modeImage","sizeM","inverted"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel, Icon24Chevron, Icon24Dismiss, Icon24DismissDark } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useColorScheme } from '../../hooks/useColorScheme';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './Banner.module.css';\n\nexport interface BannerProps extends Omit<TappableOmitProps, 'title' | 'size'> {\n /**\n * Тип баннера.\n */\n mode?: 'tint' | 'image' | undefined;\n /**\n * Размер баннера.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Тип действия в правой части баннера.\n *\n * - `dismiss` – отображается иконка крестика, при нажатии на неё сработает свойство `onDismiss`.\n * - `chevron` – отображается иконка шеврона, которая подразумевает, что при нажатии на баннер можно куда-то перейти.\n */\n after?: 'dismiss' | 'chevron' | React.ReactNode | undefined;\n /**\n * Срабатывает при нажатии на иконку крестика при `after=\"dismiss\"`.\n */\n onDismiss?: React.MouseEventHandler<HTMLButtonElement> | undefined;\n /**\n * Текст кнопки закрытия. Делает ее доступной для ассистивных технологий.\n */\n dismissLabel?: string | undefined;\n /**\n * Содержимое, отображаемое в левой части баннера.\n */\n before?: React.ReactNode | undefined;\n /**\n * Заголовок.\n */\n title?: React.ReactNode | undefined;\n /**\n * Подзаголовок.\n */\n subtitle?: React.ReactNode | undefined;\n /**\n * Дополнительный подзаголовок баннера.\n */\n extraSubtitle?: React.ReactNode | undefined;\n /**\n * При использовании `mode=\"image\"`.\n *\n * - `light` – в качестве фона используется светлое изображение, цвет текста в баннере будет тёмным.\n * - `dark` – в качестве фона используется тёмное изображение, цвет текста будет светлым.\n * - `auto` - цвет фона и текста будет зависеть от цветовой схемы приложения.\n */\n imageTheme?: 'light' | 'dark' | 'auto' | undefined;\n /**\n * При использовании `mode=\"image\"`.\n *\n * Элемент, который нужно стилизовать цветом и/или фоном. Этот элемент будет растянут на 100% ширины и высоты баннера.\n */\n background?: React.ReactNode | undefined;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkui.io/components/button).\n *\n * - В режиме `tint` или `image` со светлым фоном используйте только с параметрами:\n * - `mode=\"primary\"`\n * - `mode=\"secondary\"`\n * - В режиме `image` с тёмным фоном используйте с параметрами:\n * - `appearance=\"overlay\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkui.io/components/button-group) с параметрами:\n *\n * - `gap=\"m\" mode=\"horizontal\" stretched`\n * - `gap=\"m\" mode=\"vertical\" stretched`.\n */\n actions?: React.ReactNode | undefined;\n}\n\n/**\n * @see https://vkui.io/components/banner\n */\nexport const Banner = ({\n mode = 'tint',\n imageTheme: imageThemeProp = 'auto',\n size = 's',\n before,\n after: afterProp,\n title,\n subtitle,\n extraSubtitle,\n children,\n background,\n actions,\n onDismiss,\n dismissLabel = 'Скрыть',\n Component,\n ...restProps\n}: BannerProps): React.ReactNode => {\n const platform = usePlatform();\n const colorScheme = useColorScheme();\n\n const imageTheme = imageThemeProp === 'auto' ? colorScheme : imageThemeProp;\n\n const HeaderTypography = size === 'm' ? Title : Headline;\n const SubheadTypography = size === 'm' ? Text : Subhead;\n\n const IconDismissIOS = mode === 'image' ? Icon24DismissDark : Icon24Dismiss;\n\n const content = (\n <>\n {mode === 'image' && background && (\n <div aria-hidden className={styles.bg}>\n {background}\n </div>\n )}\n\n {before && <div className={styles.before}>{before}</div>}\n\n <div className={styles.content}>\n {hasReactNode(title) && (\n <HeaderTypography Component=\"div\" weight=\"2\" level={size === 'm' ? '2' : '1'}>\n {title}\n </HeaderTypography>\n )}\n {hasReactNode(subtitle) && (\n <SubheadTypography Component=\"div\" className={styles.subtitle}>\n {subtitle}\n </SubheadTypography>\n )}\n {hasReactNode(extraSubtitle) && (\n <Text Component=\"div\" className={styles.extraSubtitle}>\n {extraSubtitle}\n </Text>\n )}\n {hasReactNode(actions) && React.Children.count(actions) > 0 && (\n <div className={styles.actions}>{actions}</div>\n )}\n </div>\n </>\n );\n\n const afterMap: Record<string, React.ReactNode> = {\n chevron: <Icon24Chevron className={styles.chevron} />,\n dismiss: (\n <IconButton\n label={dismissLabel}\n className={styles.dismiss}\n onClick={onDismiss}\n hoverMode=\"opacity\"\n hasActive={false}\n >\n {platform === 'ios' ? <IconDismissIOS /> : <Icon24Cancel />}\n </IconButton>\n ),\n };\n\n const getAfterContent = () => {\n if (typeof afterProp === 'string') {\n return afterMap[afterProp] || afterProp;\n }\n return afterProp;\n };\n\n const after = afterProp && <div className={styles.after}>{getAfterContent()}</div>;\n\n const isClickable = restProps.onClick || restProps.onClickCapture || restProps.href;\n\n return (\n <Tappable\n Component={Component || (!isClickable ? 'section' : undefined)}\n activeMode={platform === 'ios' ? 'opacity' : 'background'}\n baseClassName={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n mode === 'image' && styles.modeImage,\n size === 'm' && styles.sizeM,\n mode === 'image' && imageTheme === 'dark' && styles.inverted,\n )}\n {...restProps}\n >\n {content}\n {after}\n </Tappable>\n );\n};\n"],"names":["React","Icon24Cancel","Icon24Chevron","Icon24Dismiss","Icon24DismissDark","classNames","hasReactNode","useColorScheme","usePlatform","IconButton","Tappable","Headline","Subhead","Text","Title","styles","Banner","mode","imageTheme","imageThemeProp","size","before","after","afterProp","title","subtitle","extraSubtitle","children","background","actions","onDismiss","dismissLabel","Component","restProps","platform","colorScheme","HeaderTypography","SubheadTypography","IconDismissIOS","content","div","aria-hidden","className","bg","weight","level","Children","count","afterMap","chevron","dismiss","label","onClick","hoverMode","hasActive","getAfterContent","isClickable","onClickCapture","href","undefined","activeMode","baseClassName","host","ios","modeImage","sizeM","inverted"],"mappings":"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"}
@@ -215,7 +215,7 @@ const getInternalValue = (value)=>{
215
215
  openCalendar,
216
216
  accessible
217
217
  ]);
218
- const showCalendarButton = !disableCalendar && (accessible || !accessible && !value);
218
+ const showCalendarButton = !disableCalendar && (accessible || !value);
219
219
  const showClearButton = value && !readOnly;
220
220
  useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {
221
221
  capture: false
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport {\n convertDateToTimeZone,\n createDateInTimeZone,\n dateFormatter,\n dateTimeFormatter,\n isMatch,\n parse,\n startOfDay,\n startOfMinute,\n} from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string | undefined;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: ((value?: Date) => void) | undefined;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: ((date: Date | undefined) => React.ReactNode) | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-input\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible = true,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n before,\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n const referenceDate = value ?? (enableTime ? startOfMinute(now) : startOfDay(now));\n const parsed = parse(formattedValue, mask, referenceDate);\n const toUpdate = createDateInTimeZone(parsed, timezone);\n updateValue(toUpdate);\n }\n },\n [enableTime, maxElement, timezone, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue, setInternalValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value: Date) => {\n if (enableTime) {\n const valueForDisplay = convertDateToTimeZone(value, timezone) as Date;\n setInternalValue(valueForDisplay);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, timezone, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && styles.hasBefore,\n (showCalendarButton || showClearButton) && styles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <React.Fragment>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={\n value\n ? enableTime\n ? dateTimeFormatter.format(value)\n : dateFormatter.format(value)\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden normalize={false}>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n >\n <div ref={focusTrapRootRef}>\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n timezone={timezone}\n {...(calendarTestsProps ?? {})}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","useGlobalEscKeyDown","useLocale","convertDateToTimeZone","createDateInTimeZone","dateFormatter","dateTimeFormatter","isMatch","parse","startOfDay","startOfMinute","cacheDateTimeFormat","useIsomorphicLayoutEffect","Calendar","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","styles","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","densityNone","compact","densityCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","before","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","focusTrapRootRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","referenceDate","parsed","toUpdate","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","density","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","valueForDisplay","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","format","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","hasBefore","hasAfter","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","hidden","normalize","minValue","maxValue","onKeyDown","onElementSelect","inputTimeDivider","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","Boolean","ref","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport {\n convertDateToTimeZone,\n createDateInTimeZone,\n dateFormatter,\n dateTimeFormatter,\n isMatch,\n parse,\n startOfDay,\n startOfMinute,\n} from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string | undefined;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: ((value?: Date) => void) | undefined;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: ((date: Date | undefined) => React.ReactNode) | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-input\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible = true,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n before,\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n const referenceDate = value ?? (enableTime ? startOfMinute(now) : startOfDay(now));\n const parsed = parse(formattedValue, mask, referenceDate);\n const toUpdate = createDateInTimeZone(parsed, timezone);\n updateValue(toUpdate);\n }\n },\n [enableTime, maxElement, timezone, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue, setInternalValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value: Date) => {\n if (enableTime) {\n const valueForDisplay = convertDateToTimeZone(value, timezone) as Date;\n setInternalValue(valueForDisplay);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, timezone, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || !value);\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && styles.hasBefore,\n (showCalendarButton || showClearButton) && styles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <React.Fragment>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={\n value\n ? enableTime\n ? dateTimeFormatter.format(value)\n : dateFormatter.format(value)\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden normalize={false}>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n >\n <div ref={focusTrapRootRef}>\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n timezone={timezone}\n {...(calendarTestsProps ?? {})}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","useGlobalEscKeyDown","useLocale","convertDateToTimeZone","createDateInTimeZone","dateFormatter","dateTimeFormatter","isMatch","parse","startOfDay","startOfMinute","cacheDateTimeFormat","useIsomorphicLayoutEffect","Calendar","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","styles","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","densityNone","compact","densityCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","before","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","focusTrapRootRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","referenceDate","parsed","toUpdate","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","density","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","valueForDisplay","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","format","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","hasBefore","hasAfter","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","hidden","normalize","minValue","maxValue","onKeyDown","onElementSelect","inputTimeDivider","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","Boolean","ref","aria-label"],"mappings":"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"}
@@ -212,7 +212,7 @@ const getInternalValue = (value)=>{
212
212
  openCalendar,
213
213
  accessible
214
214
  ]);
215
- const showCalendarButton = !disableCalendar && (accessible || !accessible && !value);
215
+ const showCalendarButton = !disableCalendar && (accessible || !value);
216
216
  const showClearButton = value && !readOnly;
217
217
  useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {
218
218
  capture: false
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport { dateFormatter, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: dateInputStyles.densityNone,\n compact: dateInputStyles.densityCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string | undefined;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * Label для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string | undefined;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string | undefined;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string | undefined;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string | undefined;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string | undefined;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v9] удалить свойство */ | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n case 3:\n max = 31;\n break;\n case 1:\n case 4:\n max = 12;\n break;\n case 2:\n case 5:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarRangeProps['value']) => {\n const newValue = ['', '', '', '', '', ''];\n if (value?.[0]) {\n newValue[0] = String(value[0].getDate()).padStart(2, '0');\n newValue[1] = String(value[0].getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value[0].getFullYear()).padStart(4, '0');\n }\n if (value?.[1]) {\n newValue[3] = String(value[1].getDate()).padStart(2, '0');\n newValue[4] = String(value[1].getMonth() + 1).padStart(2, '0');\n newValue[5] = String(value[1].getFullYear()).padStart(4, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible = true,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n before,\n ...props\n}: DateRangeInputProps): React.ReactNode => {\n const daysStartRef = React.useRef<HTMLSpanElement>(null);\n const monthsStartRef = React.useRef<HTMLSpanElement>(null);\n const yearsStartRef = React.useRef<HTMLSpanElement>(null);\n const daysEndRef = React.useRef<HTMLSpanElement>(null);\n const monthsEndRef = React.useRef<HTMLSpanElement>(null);\n const yearsEndRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && end > start) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(null), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(startDate),\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && dateInputStyles.hasBefore,\n (showCalendarButton || showClearButton) && dateInputStyles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${\n value[1] ? dateFormatter.format(value[1]) : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={dateInputStyles.input}\n onClick={showCalendarOnInputAreaClick}\n normalize={false}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n >\n <div ref={focusTrapRootRef}>\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","useGlobalEscKeyDown","useLocale","dateFormatter","isMatch","parse","cacheDateTimeFormat","CalendarRange","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","dateInputStyles","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","densityNone","compact","densityCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","before","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","focusTrapRootRef","disableCalendar","updateValue","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","density","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","format","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","hasBefore","hasAfter","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","normalize","minValue","maxValue","onKeyDown","undefined","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","Boolean","ref","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport { dateFormatter, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: dateInputStyles.densityNone,\n compact: dateInputStyles.densityCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string | undefined;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * Label для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string | undefined;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string | undefined;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string | undefined;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string | undefined;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string | undefined;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v9] удалить свойство */ | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n case 3:\n max = 31;\n break;\n case 1:\n case 4:\n max = 12;\n break;\n case 2:\n case 5:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarRangeProps['value']) => {\n const newValue = ['', '', '', '', '', ''];\n if (value?.[0]) {\n newValue[0] = String(value[0].getDate()).padStart(2, '0');\n newValue[1] = String(value[0].getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value[0].getFullYear()).padStart(4, '0');\n }\n if (value?.[1]) {\n newValue[3] = String(value[1].getDate()).padStart(2, '0');\n newValue[4] = String(value[1].getMonth() + 1).padStart(2, '0');\n newValue[5] = String(value[1].getFullYear()).padStart(4, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible = true,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n before,\n ...props\n}: DateRangeInputProps): React.ReactNode => {\n const daysStartRef = React.useRef<HTMLSpanElement>(null);\n const monthsStartRef = React.useRef<HTMLSpanElement>(null);\n const yearsStartRef = React.useRef<HTMLSpanElement>(null);\n const daysEndRef = React.useRef<HTMLSpanElement>(null);\n const monthsEndRef = React.useRef<HTMLSpanElement>(null);\n const yearsEndRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && end > start) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(null), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(startDate),\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || !value);\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && dateInputStyles.hasBefore,\n (showCalendarButton || showClearButton) && dateInputStyles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${\n value[1] ? dateFormatter.format(value[1]) : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={dateInputStyles.input}\n onClick={showCalendarOnInputAreaClick}\n normalize={false}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n >\n <div ref={focusTrapRootRef}>\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","useGlobalEscKeyDown","useLocale","dateFormatter","isMatch","parse","cacheDateTimeFormat","CalendarRange","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","dateInputStyles","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","densityNone","compact","densityCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","before","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","focusTrapRootRef","disableCalendar","updateValue","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","density","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","format","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","hasBefore","hasAfter","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","normalize","minValue","maxValue","onKeyDown","undefined","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","Boolean","ref","aria-label"],"mappings":"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"}
@@ -75,6 +75,8 @@
75
75
  flex-grow: 1;
76
76
  flex-direction: column;
77
77
  overflow: hidden;
78
+ /* TODO [>=9]: использовать clip чтобы не создовать контекст контейнера прокрутки и не мешать sticky элементам */
79
+ overflow: clip;
78
80
  transition: transform 400ms var(--vkui--animation_easing_platform);
79
81
  }
80
82
 
@@ -221,10 +221,7 @@ autoComplete = 'off', autoCapitalize, autoCorrect, disabled, list, maxLength, mi
221
221
  onClick: onCancel,
222
222
  onFocus: setFocusedTrue,
223
223
  onBlur: setFocusedFalse,
224
- children: /*#__PURE__*/ _jsx("span", {
225
- className: styles.afterTextClip,
226
- children: after
227
- })
224
+ children: after
228
225
  })
229
226
  })
230
227
  ]