@vkontakte/vkui 5.3.0 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/cjs/components/ActionSheet/types.d.ts +1 -1
  2. package/dist/cjs/components/ActionSheet/types.js.map +1 -1
  3. package/dist/cjs/components/Banner/Banner.d.ts +3 -2
  4. package/dist/cjs/components/Banner/Banner.js +5 -3
  5. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  6. package/dist/cjs/components/ChipsInput/ChipsInput.d.ts +1 -1
  7. package/dist/cjs/components/ChipsInput/ChipsInput.js +5 -3
  8. package/dist/cjs/components/ChipsInput/ChipsInput.js.map +1 -1
  9. package/dist/cjs/components/CustomSelect/CustomSelect.js +6 -3
  10. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  11. package/dist/cjs/components/FormStatus/FormStatus.d.ts +2 -1
  12. package/dist/cjs/components/FormStatus/FormStatus.js.map +1 -1
  13. package/dist/cjs/components/PromoBanner/PromoBanner.d.ts +3 -0
  14. package/dist/cjs/components/PromoBanner/PromoBanner.js +5 -0
  15. package/dist/cjs/components/PromoBanner/PromoBanner.js.map +1 -1
  16. package/dist/cjs/components/Select/Select.d.ts +1 -1
  17. package/dist/cjs/components/Select/Select.js +7 -3
  18. package/dist/cjs/components/Select/Select.js.map +1 -1
  19. package/dist/cjs/components/TabbarItem/TabbarItem.js +2 -2
  20. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  21. package/dist/cjs/components/Tappable/Tappable.js +1 -1
  22. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  23. package/dist/cjs/components/Typography/Caption/Caption.d.ts +3 -8
  24. package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
  25. package/dist/cjs/components/Typography/Footnote/Footnote.d.ts +3 -8
  26. package/dist/cjs/components/Typography/Footnote/Footnote.js.map +1 -1
  27. package/dist/cjs/components/Typography/Headline/Headline.d.ts +4 -7
  28. package/dist/cjs/components/Typography/Headline/Headline.js +0 -5
  29. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  30. package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts +4 -7
  31. package/dist/cjs/components/Typography/Paragraph/Paragraph.js +0 -5
  32. package/dist/cjs/components/Typography/Paragraph/Paragraph.js.map +1 -1
  33. package/dist/cjs/components/Typography/Subhead/Subhead.d.ts +3 -8
  34. package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
  35. package/dist/cjs/components/Typography/Text/Text.d.ts +4 -7
  36. package/dist/cjs/components/Typography/Text/Text.js +0 -5
  37. package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
  38. package/dist/cjs/components/Typography/Title/Title.d.ts +3 -7
  39. package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
  40. package/dist/cjs/components/Typography/types.d.ts +11 -0
  41. package/dist/cjs/components/Typography/types.js +8 -0
  42. package/dist/cjs/components/Typography/types.js.map +1 -0
  43. package/dist/cjs/components/UsersStack/UsersStack.js +1 -1
  44. package/dist/cjs/components/UsersStack/UsersStack.js.map +1 -1
  45. package/dist/cjs/lib/warnOnce.js +2 -2
  46. package/dist/cjs/lib/warnOnce.js.map +1 -1
  47. package/dist/components/ActionSheet/types.d.ts +1 -1
  48. package/dist/components/ActionSheet/types.js.map +1 -1
  49. package/dist/components/Banner/Banner.d.ts +3 -2
  50. package/dist/components/Banner/Banner.js +5 -3
  51. package/dist/components/Banner/Banner.js.map +1 -1
  52. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  53. package/dist/components/ChipsInput/ChipsInput.js +5 -3
  54. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  55. package/dist/components/CustomSelect/CustomSelect.js +6 -3
  56. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  57. package/dist/components/FormStatus/FormStatus.d.ts +2 -1
  58. package/dist/components/FormStatus/FormStatus.js.map +1 -1
  59. package/dist/components/PromoBanner/PromoBanner.d.ts +3 -0
  60. package/dist/components/PromoBanner/PromoBanner.js +8 -0
  61. package/dist/components/PromoBanner/PromoBanner.js.map +1 -1
  62. package/dist/components/Select/Select.d.ts +1 -1
  63. package/dist/components/Select/Select.js +7 -3
  64. package/dist/components/Select/Select.js.map +1 -1
  65. package/dist/components/TabbarItem/TabbarItem.js +2 -2
  66. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  67. package/dist/components/Tappable/Tappable.js +1 -1
  68. package/dist/components/Tappable/Tappable.js.map +1 -1
  69. package/dist/components/Typography/Caption/Caption.d.ts +3 -8
  70. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  71. package/dist/components/Typography/Footnote/Footnote.d.ts +3 -8
  72. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  73. package/dist/components/Typography/Headline/Headline.d.ts +4 -7
  74. package/dist/components/Typography/Headline/Headline.js +0 -5
  75. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  76. package/dist/components/Typography/Paragraph/Paragraph.d.ts +4 -7
  77. package/dist/components/Typography/Paragraph/Paragraph.js +0 -5
  78. package/dist/components/Typography/Paragraph/Paragraph.js.map +1 -1
  79. package/dist/components/Typography/Subhead/Subhead.d.ts +3 -8
  80. package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
  81. package/dist/components/Typography/Text/Text.d.ts +4 -7
  82. package/dist/components/Typography/Text/Text.js +0 -5
  83. package/dist/components/Typography/Text/Text.js.map +1 -1
  84. package/dist/components/Typography/Title/Title.d.ts +3 -7
  85. package/dist/components/Typography/Title/Title.js.map +1 -1
  86. package/dist/components/Typography/types.d.ts +11 -0
  87. package/dist/components/Typography/types.js +3 -0
  88. package/dist/components/Typography/types.js.map +1 -0
  89. package/dist/components/UsersStack/UsersStack.js +1 -1
  90. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  91. package/dist/components.css +7 -7
  92. package/dist/components.css.map +1 -1
  93. package/dist/components.js.tmp +426 -424
  94. package/dist/cssm/components/ActionSheet/types.d.ts +1 -1
  95. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  96. package/dist/cssm/components/Banner/Banner.d.ts +3 -2
  97. package/dist/cssm/components/Banner/Banner.js +3 -2
  98. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  99. package/dist/cssm/components/ChipsInput/ChipsInput.d.ts +1 -1
  100. package/dist/cssm/components/ChipsInput/ChipsInput.js +3 -2
  101. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  102. package/dist/cssm/components/Counter/Counter.module.css +2 -2
  103. package/dist/cssm/components/CustomSelect/CustomSelect.js +6 -3
  104. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  105. package/dist/cssm/components/FormStatus/FormStatus.d.ts +2 -1
  106. package/dist/cssm/components/FormStatus/FormStatus.js.map +1 -1
  107. package/dist/cssm/components/ImageBase/ImageBaseBadge/ImageBaseBadge.module.css +1 -1
  108. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +1 -1
  109. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -1
  110. package/dist/cssm/components/PromoBanner/PromoBanner.d.ts +3 -0
  111. package/dist/cssm/components/PromoBanner/PromoBanner.js +8 -0
  112. package/dist/cssm/components/PromoBanner/PromoBanner.js.map +1 -1
  113. package/dist/cssm/components/Search/Search.module.css +1 -1
  114. package/dist/cssm/components/Select/Select.d.ts +1 -1
  115. package/dist/cssm/components/Select/Select.js +3 -1
  116. package/dist/cssm/components/Select/Select.js.map +1 -1
  117. package/dist/cssm/components/TabbarItem/TabbarItem.js +2 -2
  118. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  119. package/dist/cssm/components/Tappable/Tappable.js +1 -1
  120. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  121. package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
  122. package/dist/cssm/components/Typography/Caption/Caption.d.ts +3 -8
  123. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  124. package/dist/cssm/components/Typography/Footnote/Footnote.d.ts +3 -8
  125. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  126. package/dist/cssm/components/Typography/Headline/Headline.d.ts +4 -7
  127. package/dist/cssm/components/Typography/Headline/Headline.js +0 -5
  128. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  129. package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts +4 -7
  130. package/dist/cssm/components/Typography/Paragraph/Paragraph.js +0 -5
  131. package/dist/cssm/components/Typography/Paragraph/Paragraph.js.map +1 -1
  132. package/dist/cssm/components/Typography/Subhead/Subhead.d.ts +3 -8
  133. package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
  134. package/dist/cssm/components/Typography/Text/Text.d.ts +4 -7
  135. package/dist/cssm/components/Typography/Text/Text.js +0 -5
  136. package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
  137. package/dist/cssm/components/Typography/Title/Title.d.ts +3 -7
  138. package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
  139. package/dist/cssm/components/Typography/types.d.ts +11 -0
  140. package/dist/cssm/components/Typography/types.js +3 -0
  141. package/dist/cssm/components/Typography/types.js.map +1 -0
  142. package/dist/cssm/components/UsersStack/UsersStack.js +1 -1
  143. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  144. package/dist/cssm/lib/warnOnce.js +2 -2
  145. package/dist/cssm/lib/warnOnce.js.map +1 -1
  146. package/dist/lib/warnOnce.js +2 -2
  147. package/dist/lib/warnOnce.js.map +1 -1
  148. package/dist/vkui.css +7 -7
  149. package/dist/vkui.css.map +1 -1
  150. package/dist/vkui.js.tmp +426 -424
  151. package/package.json +1 -1
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { FocusTrapProps } from '../FocusTrap/FocusTrap';
3
3
  export type PopupDirection = 'top' | 'bottom' | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');
4
4
  export type ToggleRef = Element | null | undefined | React.RefObject<Element>;
5
- export interface SharedDropdownProps extends React.AllHTMLAttributes<HTMLElement>, FocusTrapProps {
5
+ export interface SharedDropdownProps extends FocusTrapProps {
6
6
  closing: boolean;
7
7
  /**
8
8
  * Элемент, рядом с которым вылезает попап на десктопе.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import * as React from 'react';\nimport { FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type PopupDirection =\n | 'top'\n | 'bottom'\n | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element>;\n\nexport interface SharedDropdownProps extends React.AllHTMLAttributes<HTMLElement>, FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n * В v5 будет обязательным.\n */\n toggleRef?: ToggleRef;\n /**\n * Направление на десктопе\n */\n popupDirection?: PopupDirection;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":[],"mappings":";;;;;2DAAuB"}
1
+ {"version":3,"sources":["../../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import * as React from 'react';\nimport { FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type PopupDirection =\n | 'top'\n | 'bottom'\n | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element>;\n\nexport interface SharedDropdownProps extends FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n * В v5 будет обязательным.\n */\n toggleRef?: ToggleRef;\n /**\n * Направление на десктопе\n */\n popupDirection?: PopupDirection;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":[],"mappings":";;;;;2DAAuB"}
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- export interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ import { HasRootRef } from '../../types';
3
+ export interface BannerProps extends React.HTMLAttributes<HTMLDivElement>, HasRootRef<HTMLElement> {
3
4
  /**
4
5
  * Тип баннера.
5
6
  */
@@ -71,4 +72,4 @@ export interface BannerProps extends React.HTMLAttributes<HTMLDivElement> {
71
72
  /**
72
73
  * @see https://vkcom.github.io/VKUI/#/Banner
73
74
  */
74
- export declare const Banner: ({ mode, imageTheme, size, before, asideMode, header, subheader, text, children, background, actions, onDismiss, dismissLabel, className, ...restProps }: BannerProps) => JSX.Element;
75
+ export declare const Banner: ({ mode, imageTheme, size, before, asideMode, header, subheader, text, children, background, actions, onDismiss, dismissLabel, className, getRootRef, ...restProps }: BannerProps) => JSX.Element;
@@ -24,7 +24,7 @@ var _subhead = require("../Typography/Subhead/Subhead");
24
24
  var _text = require("../Typography/Text/Text");
25
25
  var _title = require("../Typography/Title/Title");
26
26
  var Banner = function(_param) {
27
- var _param_mode = _param.mode, mode = _param_mode === void 0 ? "tint" : _param_mode, _param_imageTheme = _param.imageTheme, imageTheme = _param_imageTheme === void 0 ? "dark" : _param_imageTheme, _param_size = _param.size, size = _param_size === void 0 ? "s" : _param_size, before = _param.before, asideMode = _param.asideMode, header = _param.header, subheader = _param.subheader, text = _param.text, children = _param.children, background = _param.background, actions = _param.actions, onDismiss = _param.onDismiss, _param_dismissLabel = _param.dismissLabel, dismissLabel = _param_dismissLabel === void 0 ? "Скрыть" : _param_dismissLabel, className = _param.className, restProps = _objectWithoutProperties(_param, [
27
+ var _param_mode = _param.mode, mode = _param_mode === void 0 ? "tint" : _param_mode, _param_imageTheme = _param.imageTheme, imageTheme = _param_imageTheme === void 0 ? "dark" : _param_imageTheme, _param_size = _param.size, size = _param_size === void 0 ? "s" : _param_size, before = _param.before, asideMode = _param.asideMode, header = _param.header, subheader = _param.subheader, text = _param.text, children = _param.children, background = _param.background, actions = _param.actions, onDismiss = _param.onDismiss, _param_dismissLabel = _param.dismissLabel, dismissLabel = _param_dismissLabel === void 0 ? "Скрыть" : _param_dismissLabel, className = _param.className, getRootRef = _param.getRootRef, restProps = _objectWithoutProperties(_param, [
28
28
  "mode",
29
29
  "imageTheme",
30
30
  "size",
@@ -38,7 +38,8 @@ var Banner = function(_param) {
38
38
  "actions",
39
39
  "onDismiss",
40
40
  "dismissLabel",
41
- "className"
41
+ "className",
42
+ "getRootRef"
42
43
  ]);
43
44
  var platform = (0, _usePlatform.usePlatform)();
44
45
  var HeaderTypography = size === "m" ? _title.Title : _headline.Headline;
@@ -68,7 +69,8 @@ var Banner = function(_param) {
68
69
  className: (0, _vkjs.classNames)("vkuiBanner", platform === _platform.Platform.IOS && "vkuiBanner--ios", mode === "image" && "vkuiBanner--mode-image", {
69
70
  s: "vkuiBanner--size-s",
70
71
  m: "vkuiBanner--size-m"
71
- }[size], mode === "image" && imageTheme === "dark" && "vkuiBanner--inverted", className)
72
+ }[size], mode === "image" && imageTheme === "dark" && "vkuiBanner--inverted", className),
73
+ ref: getRootRef
72
74
  }), asideMode === "expand" ? /*#__PURE__*/ _react.createElement(_tappable.Tappable, {
73
75
  className: "vkuiBanner__in",
74
76
  activeMode: platform === _platform.Platform.IOS ? "opacity" : "background",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Icon24Cancel,\n Icon24Chevron,\n Icon24DismissDark,\n Icon24DismissSubstract,\n} from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tappable } 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 React.HTMLAttributes<HTMLDivElement> {\n /**\n * Тип баннера.\n */\n mode?: 'tint' | 'image';\n size?: 's' | 'm';\n /**\n * Тип действия в правой части баннера.\n *\n * - `dismiss` – отображается иконка крестика, при клике на неё сработает свойство `onDismiss`.\n * - `expand` – отображается иконка шеврона, которая подразумевает, что при клике на баннер можно куда-то перейти.\n */\n asideMode?: 'dismiss' | 'expand';\n /**\n * Срабатывает при клике на иконку крестика при `asideMode=\"dismiss\"`.\n */\n onDismiss?: React.MouseEventHandler<HTMLButtonElement>;\n /**\n * `aria-label` для кнопки при `asideMode=\"dismiss\". Необходим, чтобы кнопка была доступной.\n */\n dismissLabel?: string;\n /**\n * Содержимое, отображаемое в левой части баннера.\n */\n before?: React.ReactNode;\n /**\n * Заголовок. <br />\n * При использовании этого свойства рекомендуется не указывать `text`.\n */\n header?: React.ReactNode;\n /**\n * Подзаголовок. <br />\n * При использовании этого свойства рекомендуется не указывать `text`.\n */\n subheader?: React.ReactNode;\n /**\n * Текст баннера. <br />\n * Это свойство следует использовать без указания `header` и `subheader`.\n */\n text?: React.ReactNode;\n /**\n * При использовании `mode=\"image\"`.\n *\n * - `light` – в качестве фона используется светлое изображение, цвет текста в баннере будет тёмным.\n * - `dark` – в качестве фона используется тёмное изображение, цвет текста будет светлым.\n */\n imageTheme?: 'light' | 'dark';\n /**\n * При использовании `mode=\"image\"`.\n *\n * Элемент, который нужно стилизовать цветом и/или фоном. Этот элемент будет растянут на 100% ширины и высоты баннера.\n */\n background?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button).\n *\n * - В режиме `tint` или `image` со светлым фоном используйте только с параметрами:\n * - `mode=\"primary\"`\n * - `mode=\"secondary\"`\n * - В режиме `image` с тёмным фоном используйте с параметрами:\n * - `appearance=\"overlay\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `gap=\"m\" mode=\"horizontal\" stretched`\n * - `gap=\"m\" mode=\"vertical\" stretched`\n */\n actions?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Banner\n */\nexport const Banner = ({\n mode = 'tint',\n imageTheme = 'dark',\n size = 's',\n before,\n asideMode,\n header,\n subheader,\n text,\n children,\n background,\n actions,\n onDismiss,\n dismissLabel = 'Скрыть',\n className,\n ...restProps\n}: BannerProps) => {\n const platform = usePlatform();\n\n const HeaderTypography = size === 'm' ? Title : Headline;\n const SubheaderTypography = size === 'm' ? Text : Subhead;\n\n const IconDismissIOS = mode === 'image' ? Icon24DismissDark : Icon24DismissSubstract;\n\n const content = (\n <React.Fragment>\n {mode === 'image' && background && (\n <div aria-hidden className={styles['Banner__bg']}>\n {background}\n </div>\n )}\n\n {before && <div className={styles['Banner__before']}>{before}</div>}\n\n <div className={styles['Banner__content']}>\n {hasReactNode(header) && (\n <HeaderTypography\n Component=\"span\"\n className={styles['Banner__header']}\n weight=\"2\"\n level={size === 'm' ? '2' : '1'}\n >\n {header}\n </HeaderTypography>\n )}\n {hasReactNode(subheader) && (\n <SubheaderTypography Component=\"span\" className={styles['Banner__subheader']}>\n {subheader}\n </SubheaderTypography>\n )}\n {hasReactNode(text) && <Text className={styles['Banner__text']}>{text}</Text>}\n {hasReactNode(actions) && React.Children.count(actions) > 0 && (\n <div className={styles['Banner__actions']}>{actions}</div>\n )}\n </div>\n </React.Fragment>\n );\n\n return (\n <section\n {...restProps}\n className={classNames(\n styles['Banner'],\n platform === Platform.IOS && styles['Banner--ios'],\n mode === 'image' && styles['Banner--mode-image'],\n {\n s: styles['Banner--size-s'],\n m: styles['Banner--size-m'],\n }[size],\n mode === 'image' && imageTheme === 'dark' && styles['Banner--inverted'],\n className,\n )}\n >\n {asideMode === 'expand' ? (\n <Tappable\n className={styles['Banner__in']}\n activeMode={platform === Platform.IOS ? 'opacity' : 'background'}\n role=\"button\"\n >\n {content}\n\n <div className={styles['Banner__aside']}>\n <Icon24Chevron />\n </div>\n </Tappable>\n ) : (\n <div className={styles['Banner__in']}>\n {content}\n\n {asideMode === 'dismiss' && (\n <div className={styles['Banner__aside']}>\n <IconButton\n aria-label={dismissLabel}\n className={styles['Banner__dismiss']}\n onClick={onDismiss}\n hoverMode=\"opacity\"\n hasActive={false}\n >\n {platform === Platform.IOS ? <IconDismissIOS /> : <Icon24Cancel />}\n </IconButton>\n </div>\n )}\n </div>\n )}\n </section>\n );\n};\n"],"names":["Banner","mode","imageTheme","size","before","asideMode","header","subheader","text","children","background","actions","onDismiss","dismissLabel","className","restProps","platform","usePlatform","HeaderTypography","Title","Headline","SubheaderTypography","Text","Subhead","IconDismissIOS","Icon24DismissDark","Icon24DismissSubstract","content","React","Fragment","div","aria-hidden","hasReactNode","Component","weight","level","Children","count","section","classNames","Platform","IOS","s","m","Tappable","activeMode","role","Icon24Chevron","IconButton","aria-label","onClick","hoverMode","hasActive","Icon24Cancel"],"mappings":";;;;+BA2FaA;;;eAAAA;;;;;;;2DA3FU;qBAMhB;oBACkC;2BACb;wBACH;0BACE;wBACF;wBACA;uBACD;oBACH;qBACC;AA4Ef,IAAMA,SAAS,iBAgBH;6BAfjBC,MAAAA,gCAAO,iDACPC,YAAAA,4CAAa,iDACbC,MAAAA,gCAAO,mBACPC,gBAAAA,QACAC,mBAAAA,WACAC,gBAAAA,QACAC,mBAAAA,WACAC,cAAAA,MACAC,kBAAAA,UACAC,oBAAAA,YACAC,iBAAAA,SACAC,mBAAAA,wCACAC,cAAAA,gDAAe,gCACfC,mBAAAA,WACGC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAE5B,IAAMC,mBAAmBf,SAAS,MAAMgB,YAAK,GAAGC,kBAAQ;IACxD,IAAMC,sBAAsBlB,SAAS,MAAMmB,UAAI,GAAGC,gBAAO;IAEzD,IAAMC,iBAAiBvB,SAAS,UAAUwB,wBAAiB,GAAGC,6BAAsB;IAEpF,IAAMC,wBACJ,qBAACC,OAAMC,QAAQ,QACZ5B,SAAS,WAAWS,4BACnB,qBAACoB;QAAIC,eAAAA,IAAW;QAACjB,SAAS;OACvBJ,aAIJN,wBAAU,qBAAC0B;QAAIhB,SAAS;OAA6BV,uBAEtD,qBAAC0B;QAAIhB,SAAS;OACXkB,IAAAA,kBAAY,EAAC1B,yBACZ,qBAACY;QACCe,WAAU;QACVnB,SAAS;QACToB,QAAO;QACPC,OAAOhC,SAAS,MAAM,MAAM,GAAG;OAE9BG,SAGJ0B,IAAAA,kBAAY,EAACzB,4BACZ,qBAACc;QAAoBY,WAAU;QAAOnB,SAAS;OAC5CP,YAGJyB,IAAAA,kBAAY,EAACxB,uBAAS,qBAACc,UAAI;QAACR,SAAS;OAA2BN,OAChEwB,IAAAA,kBAAY,EAACrB,YAAYiB,OAAMQ,QAAQ,CAACC,KAAK,CAAC1B,WAAW,mBACxD,qBAACmB;QAAIhB,SAAS;OAA8BH;IAMpD,qBACE,qBAAC2B,gDACKvB;QACJD,WAAWyB,IAAAA,gBAAU,gBAEnBvB,aAAawB,kBAAQ,CAACC,GAAG,uBACzBxC,SAAS,qCACT;YACEyC,CAAC;YACDC,CAAC;QACH,CAAC,CAACxC,KAAK,EACPF,SAAS,WAAWC,eAAe,kCACnCY;QAGDT,cAAc,yBACb,qBAACuC,kBAAQ;QACP9B,SAAS;QACT+B,YAAY7B,aAAawB,kBAAQ,CAACC,GAAG,GAAG,YAAY,YAAY;QAChEK,MAAK;OAEJnB,uBAED,qBAACG;QAAIhB,SAAS;qBACZ,qBAACiC,oBAAa,0BAIlB,qBAACjB;QAAIhB,SAAS;OACXa,SAEAtB,cAAc,2BACb,qBAACyB;QAAIhB,SAAS;qBACZ,qBAACkC,sBAAU;QACTC,cAAYpC;QACZC,SAAS;QACToC,SAAStC;QACTuC,WAAU;QACVC,WAAW,KAAK;OAEfpC,aAAawB,kBAAQ,CAACC,GAAG,iBAAG,qBAACjB,sCAAoB,qBAAC6B,mBAAY,OAAG,GAK3E;AAGP"}
1
+ {"version":3,"sources":["../../../../src/components/Banner/Banner.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Icon24Cancel,\n Icon24Chevron,\n Icon24DismissDark,\n Icon24DismissSubstract,\n} from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRootRef } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tappable } 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 React.HTMLAttributes<HTMLDivElement>, HasRootRef<HTMLElement> {\n /**\n * Тип баннера.\n */\n mode?: 'tint' | 'image';\n size?: 's' | 'm';\n /**\n * Тип действия в правой части баннера.\n *\n * - `dismiss` – отображается иконка крестика, при клике на неё сработает свойство `onDismiss`.\n * - `expand` – отображается иконка шеврона, которая подразумевает, что при клике на баннер можно куда-то перейти.\n */\n asideMode?: 'dismiss' | 'expand';\n /**\n * Срабатывает при клике на иконку крестика при `asideMode=\"dismiss\"`.\n */\n onDismiss?: React.MouseEventHandler<HTMLButtonElement>;\n /**\n * `aria-label` для кнопки при `asideMode=\"dismiss\". Необходим, чтобы кнопка была доступной.\n */\n dismissLabel?: string;\n /**\n * Содержимое, отображаемое в левой части баннера.\n */\n before?: React.ReactNode;\n /**\n * Заголовок. <br />\n * При использовании этого свойства рекомендуется не указывать `text`.\n */\n header?: React.ReactNode;\n /**\n * Подзаголовок. <br />\n * При использовании этого свойства рекомендуется не указывать `text`.\n */\n subheader?: React.ReactNode;\n /**\n * Текст баннера. <br />\n * Это свойство следует использовать без указания `header` и `subheader`.\n */\n text?: React.ReactNode;\n /**\n * При использовании `mode=\"image\"`.\n *\n * - `light` – в качестве фона используется светлое изображение, цвет текста в баннере будет тёмным.\n * - `dark` – в качестве фона используется тёмное изображение, цвет текста будет светлым.\n */\n imageTheme?: 'light' | 'dark';\n /**\n * При использовании `mode=\"image\"`.\n *\n * Элемент, который нужно стилизовать цветом и/или фоном. Этот элемент будет растянут на 100% ширины и высоты баннера.\n */\n background?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button).\n *\n * - В режиме `tint` или `image` со светлым фоном используйте только с параметрами:\n * - `mode=\"primary\"`\n * - `mode=\"secondary\"`\n * - В режиме `image` с тёмным фоном используйте с параметрами:\n * - `appearance=\"overlay\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `gap=\"m\" mode=\"horizontal\" stretched`\n * - `gap=\"m\" mode=\"vertical\" stretched`\n */\n actions?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Banner\n */\nexport const Banner = ({\n mode = 'tint',\n imageTheme = 'dark',\n size = 's',\n before,\n asideMode,\n header,\n subheader,\n text,\n children,\n background,\n actions,\n onDismiss,\n dismissLabel = 'Скрыть',\n className,\n getRootRef,\n ...restProps\n}: BannerProps) => {\n const platform = usePlatform();\n\n const HeaderTypography = size === 'm' ? Title : Headline;\n const SubheaderTypography = size === 'm' ? Text : Subhead;\n\n const IconDismissIOS = mode === 'image' ? Icon24DismissDark : Icon24DismissSubstract;\n\n const content = (\n <React.Fragment>\n {mode === 'image' && background && (\n <div aria-hidden className={styles['Banner__bg']}>\n {background}\n </div>\n )}\n\n {before && <div className={styles['Banner__before']}>{before}</div>}\n\n <div className={styles['Banner__content']}>\n {hasReactNode(header) && (\n <HeaderTypography\n Component=\"span\"\n className={styles['Banner__header']}\n weight=\"2\"\n level={size === 'm' ? '2' : '1'}\n >\n {header}\n </HeaderTypography>\n )}\n {hasReactNode(subheader) && (\n <SubheaderTypography Component=\"span\" className={styles['Banner__subheader']}>\n {subheader}\n </SubheaderTypography>\n )}\n {hasReactNode(text) && <Text className={styles['Banner__text']}>{text}</Text>}\n {hasReactNode(actions) && React.Children.count(actions) > 0 && (\n <div className={styles['Banner__actions']}>{actions}</div>\n )}\n </div>\n </React.Fragment>\n );\n\n return (\n <section\n {...restProps}\n className={classNames(\n styles['Banner'],\n platform === Platform.IOS && styles['Banner--ios'],\n mode === 'image' && styles['Banner--mode-image'],\n {\n s: styles['Banner--size-s'],\n m: styles['Banner--size-m'],\n }[size],\n mode === 'image' && imageTheme === 'dark' && styles['Banner--inverted'],\n className,\n )}\n ref={getRootRef}\n >\n {asideMode === 'expand' ? (\n <Tappable\n className={styles['Banner__in']}\n activeMode={platform === Platform.IOS ? 'opacity' : 'background'}\n role=\"button\"\n >\n {content}\n\n <div className={styles['Banner__aside']}>\n <Icon24Chevron />\n </div>\n </Tappable>\n ) : (\n <div className={styles['Banner__in']}>\n {content}\n\n {asideMode === 'dismiss' && (\n <div className={styles['Banner__aside']}>\n <IconButton\n aria-label={dismissLabel}\n className={styles['Banner__dismiss']}\n onClick={onDismiss}\n hoverMode=\"opacity\"\n hasActive={false}\n >\n {platform === Platform.IOS ? <IconDismissIOS /> : <Icon24Cancel />}\n </IconButton>\n </div>\n )}\n </div>\n )}\n </section>\n );\n};\n"],"names":["Banner","mode","imageTheme","size","before","asideMode","header","subheader","text","children","background","actions","onDismiss","dismissLabel","className","getRootRef","restProps","platform","usePlatform","HeaderTypography","Title","Headline","SubheaderTypography","Text","Subhead","IconDismissIOS","Icon24DismissDark","Icon24DismissSubstract","content","React","Fragment","div","aria-hidden","hasReactNode","Component","weight","level","Children","count","section","classNames","Platform","IOS","s","m","ref","Tappable","activeMode","role","Icon24Chevron","IconButton","aria-label","onClick","hoverMode","hasActive","Icon24Cancel"],"mappings":";;;;+BA4FaA;;;eAAAA;;;;;;;2DA5FU;qBAMhB;oBACkC;2BACb;wBACH;0BAEE;wBACF;wBACA;uBACD;oBACH;qBACC;AA4Ef,IAAMA,SAAS,iBAiBH;6BAhBjBC,MAAAA,gCAAO,iDACPC,YAAAA,4CAAa,iDACbC,MAAAA,gCAAO,mBACPC,gBAAAA,QACAC,mBAAAA,WACAC,gBAAAA,QACAC,mBAAAA,WACAC,cAAAA,MACAC,kBAAAA,UACAC,oBAAAA,YACAC,iBAAAA,SACAC,mBAAAA,wCACAC,cAAAA,gDAAe,gCACfC,mBAAAA,WACAC,oBAAAA,YACGC;QAfHf;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAE5B,IAAMC,mBAAmBhB,SAAS,MAAMiB,YAAK,GAAGC,kBAAQ;IACxD,IAAMC,sBAAsBnB,SAAS,MAAMoB,UAAI,GAAGC,gBAAO;IAEzD,IAAMC,iBAAiBxB,SAAS,UAAUyB,wBAAiB,GAAGC,6BAAsB;IAEpF,IAAMC,wBACJ,qBAACC,OAAMC,QAAQ,QACZ7B,SAAS,WAAWS,4BACnB,qBAACqB;QAAIC,eAAAA,IAAW;QAAClB,SAAS;OACvBJ,aAIJN,wBAAU,qBAAC2B;QAAIjB,SAAS;OAA6BV,uBAEtD,qBAAC2B;QAAIjB,SAAS;OACXmB,IAAAA,kBAAY,EAAC3B,yBACZ,qBAACa;QACCe,WAAU;QACVpB,SAAS;QACTqB,QAAO;QACPC,OAAOjC,SAAS,MAAM,MAAM,GAAG;OAE9BG,SAGJ2B,IAAAA,kBAAY,EAAC1B,4BACZ,qBAACe;QAAoBY,WAAU;QAAOpB,SAAS;OAC5CP,YAGJ0B,IAAAA,kBAAY,EAACzB,uBAAS,qBAACe,UAAI;QAACT,SAAS;OAA2BN,OAChEyB,IAAAA,kBAAY,EAACtB,YAAYkB,OAAMQ,QAAQ,CAACC,KAAK,CAAC3B,WAAW,mBACxD,qBAACoB;QAAIjB,SAAS;OAA8BH;IAMpD,qBACE,qBAAC4B,gDACKvB;QACJF,WAAW0B,IAAAA,gBAAU,gBAEnBvB,aAAawB,kBAAQ,CAACC,GAAG,uBACzBzC,SAAS,qCACT;YACE0C,CAAC;YACDC,CAAC;QACH,CAAC,CAACzC,KAAK,EACPF,SAAS,WAAWC,eAAe,kCACnCY;QAEF+B,KAAK9B;QAEJV,cAAc,yBACb,qBAACyC,kBAAQ;QACPhC,SAAS;QACTiC,YAAY9B,aAAawB,kBAAQ,CAACC,GAAG,GAAG,YAAY,YAAY;QAChEM,MAAK;OAEJpB,uBAED,qBAACG;QAAIjB,SAAS;qBACZ,qBAACmC,oBAAa,0BAIlB,qBAAClB;QAAIjB,SAAS;OACXc,SAEAvB,cAAc,2BACb,qBAAC0B;QAAIjB,SAAS;qBACZ,qBAACoC,sBAAU;QACTC,cAAYtC;QACZC,SAAS;QACTsC,SAASxC;QACTyC,WAAU;QACVC,WAAW,KAAK;OAEfrC,aAAawB,kBAAQ,CAACC,GAAG,iBAAG,qBAACjB,sCAAoB,qBAAC8B,mBAAY,OAAG,GAK3E;AAGP"}
@@ -7,4 +7,4 @@ export interface ChipsInputProps<Option extends ChipOption> extends ChipsInputBa
7
7
  /**
8
8
  * @see https://vkcom.github.io/VKUI/#/ChipsInput
9
9
  */
10
- export declare const ChipsInput: <Option extends ChipOption>({ style, className, getRootRef, before, after, status, ...restProps }: ChipsInputProps<Option>) => JSX.Element;
10
+ export declare const ChipsInput: <Option extends ChipOption>({ style, className, getRootRef, before, after, status, mode, ...restProps }: ChipsInputProps<Option>) => JSX.Element;
@@ -15,13 +15,14 @@ var _vkjs = require("@vkontakte/vkjs");
15
15
  var _chipsInputBase = require("../ChipsInputBase/ChipsInputBase");
16
16
  var _formField = require("../FormField/FormField");
17
17
  var ChipsInput = function(_param) {
18
- var style = _param.style, className = _param.className, getRootRef = _param.getRootRef, before = _param.before, after = _param.after, status = _param.status, restProps = _objectWithoutProperties(_param, [
18
+ var style = _param.style, className = _param.className, getRootRef = _param.getRootRef, before = _param.before, after = _param.after, status = _param.status, mode = _param.mode, restProps = _objectWithoutProperties(_param, [
19
19
  "style",
20
20
  "className",
21
21
  "getRootRef",
22
22
  "before",
23
23
  "after",
24
- "status"
24
+ "status",
25
+ "mode"
25
26
  ]);
26
27
  return /*#__PURE__*/ _react.createElement(_formField.FormField, {
27
28
  getRootRef: getRootRef,
@@ -33,7 +34,8 @@ var ChipsInput = function(_param) {
33
34
  role: "application",
34
35
  "aria-disabled": restProps.disabled,
35
36
  "aria-readonly": restProps.readOnly,
36
- status: status
37
+ status: status,
38
+ mode: mode
37
39
  }, /*#__PURE__*/ _react.createElement(_chipsInputBase.ChipsInputBase, restProps));
38
40
  };
39
41
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChipsInput/ChipsInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { ChipOption } from '../Chip/Chip';\nimport { ChipsInputBase, ChipsInputBaseProps } from '../ChipsInputBase/ChipsInputBase';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport styles from './ChipsInput.module.css';\n\nexport interface ChipsInputProps<Option extends ChipOption>\n extends ChipsInputBaseProps<Option>,\n FormFieldProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsInput\n */\nexport const ChipsInput = <Option extends ChipOption>({\n style,\n className,\n getRootRef,\n before,\n after,\n status,\n ...restProps\n}: ChipsInputProps<Option>) => {\n return (\n <FormField\n getRootRef={getRootRef}\n className={classNames(styles['ChipsInput'], 'vkuiInternalChipsInput', className)}\n style={style}\n disabled={restProps.disabled}\n before={before}\n after={after}\n role=\"application\"\n aria-disabled={restProps.disabled}\n aria-readonly={restProps.readOnly}\n status={status}\n >\n <ChipsInputBase {...restProps} />\n </FormField>\n );\n};\n"],"names":["ChipsInput","style","className","getRootRef","before","after","status","restProps","FormField","classNames","disabled","role","aria-disabled","aria-readonly","readOnly","ChipsInputBase"],"mappings":";;;;+BAcaA;;;eAAAA;;;;;2DAdU;oBACI;8BAEyB;yBACV;AAUnC,IAAMA,aAAa,iBAQK;QAP7BC,eAAAA,OACAC,mBAAAA,WACAC,oBAAAA,YACAC,gBAAAA,QACAC,eAAAA,OACAC,gBAAAA,QACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,qBACE,qBAACE,oBAAS;QACRL,YAAYA;QACZD,WAAWO,IAAAA,gBAAU,oBAAuB,0BAA0BP;QACtED,OAAOA;QACPS,UAAUH,UAAUG,QAAQ;QAC5BN,QAAQA;QACRC,OAAOA;QACPM,MAAK;QACLC,iBAAeL,UAAUG,QAAQ;QACjCG,iBAAeN,UAAUO,QAAQ;QACjCR,QAAQA;qBAER,qBAACS,8BAAc,EAAKR;AAG1B"}
1
+ {"version":3,"sources":["../../../../src/components/ChipsInput/ChipsInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { ChipOption } from '../Chip/Chip';\nimport { ChipsInputBase, ChipsInputBaseProps } from '../ChipsInputBase/ChipsInputBase';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport styles from './ChipsInput.module.css';\n\nexport interface ChipsInputProps<Option extends ChipOption>\n extends ChipsInputBaseProps<Option>,\n FormFieldProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsInput\n */\nexport const ChipsInput = <Option extends ChipOption>({\n style,\n className,\n getRootRef,\n before,\n after,\n status,\n mode,\n ...restProps\n}: ChipsInputProps<Option>) => {\n return (\n <FormField\n getRootRef={getRootRef}\n className={classNames(styles['ChipsInput'], 'vkuiInternalChipsInput', className)}\n style={style}\n disabled={restProps.disabled}\n before={before}\n after={after}\n role=\"application\"\n aria-disabled={restProps.disabled}\n aria-readonly={restProps.readOnly}\n status={status}\n mode={mode}\n >\n <ChipsInputBase {...restProps} />\n </FormField>\n );\n};\n"],"names":["ChipsInput","style","className","getRootRef","before","after","status","mode","restProps","FormField","classNames","disabled","role","aria-disabled","aria-readonly","readOnly","ChipsInputBase"],"mappings":";;;;+BAcaA;;;eAAAA;;;;;2DAdU;oBACI;8BAEyB;yBACV;AAUnC,IAAMA,aAAa,iBASK;QAR7BC,eAAAA,OACAC,mBAAAA,WACAC,oBAAAA,YACAC,gBAAAA,QACAC,eAAAA,OACAC,gBAAAA,QACAC,cAAAA,MACGC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,qBACE,qBAACE,oBAAS;QACRN,YAAYA;QACZD,WAAWQ,IAAAA,gBAAU,oBAAuB,0BAA0BR;QACtED,OAAOA;QACPU,UAAUH,UAAUG,QAAQ;QAC5BP,QAAQA;QACRC,OAAOA;QACPO,MAAK;QACLC,iBAAeL,UAAUG,QAAQ;QACjCG,iBAAeN,UAAUO,QAAQ;QACjCT,QAAQA;QACRC,MAAMA;qBAEN,qBAACS,8BAAc,EAAKR;AAG1B"}
@@ -130,7 +130,7 @@ function CustomSelect(props) {
130
130
  var containerRef = _react.useRef(null);
131
131
  var handleRootRef = (0, _useExternRef.useExternRef)(containerRef, getRootRef);
132
132
  var scrollBoxRef = _react.useRef(null);
133
- var selectElRef = _react.useRef(null);
133
+ var selectElRef = (0, _useExternRef.useExternRef)(getRef);
134
134
  var _React_useState1 = _slicedToArray(_react.useState(-1), 2), focusedOptionIndex = _React_useState1[0], setFocusedOptionIndex = _React_useState1[1];
135
135
  var _React_useState2 = _slicedToArray(_react.useState(props.value !== undefined), 2), isControlledOutside = _React_useState2[0], setIsControlledOutside = _React_useState2[1];
136
136
  var _React_useState3 = _slicedToArray(_react.useState(""), 2), inputValue = _React_useState3[0], setInputValue = _React_useState3[1];
@@ -301,7 +301,8 @@ function CustomSelect(props) {
301
301
  var event = new Event("blur");
302
302
  (_selectElRef_current = selectElRef.current) === null || _selectElRef_current === void 0 ? void 0 : _selectElRef_current.dispatchEvent(event);
303
303
  }, [
304
- close
304
+ close,
305
+ selectElRef
305
306
  ]);
306
307
  var resetFocusedOption = _react.useCallback(function() {
307
308
  setFocusedOptionIndex(-1);
@@ -310,7 +311,9 @@ function CustomSelect(props) {
310
311
  var _selectElRef_current;
311
312
  var event = new Event("focus");
312
313
  (_selectElRef_current = selectElRef.current) === null || _selectElRef_current === void 0 ? void 0 : _selectElRef_current.dispatchEvent(event);
313
- }, []);
314
+ }, [
315
+ selectElRef
316
+ ]);
314
317
  var onClick = _react.useCallback(function() {
315
318
  if (opened) {
316
319
  close();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В v6 из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down']),\n ),\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focus');\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = React.useCallback(\n (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n areOptionsShown() && focusOption('prev');\n break;\n case 'ArrowDown':\n areOptionsShown() && focusOption('next');\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused],\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n // TODO v6 удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const clearButtonShown = allowClearButton && !opened && nativeSelectValue !== '';\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","clearButtonShown","clearButton","DropdownIcon","afterIcons","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В v6 из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down']),\n ),\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focus');\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = React.useCallback(\n (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n areOptionsShown() && focusOption('prev');\n break;\n case 'ArrowDown':\n areOptionsShown() && focusOption('next');\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused],\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n // TODO v6 удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const clearButtonShown = allowClearButton && !opened && nativeSelectValue !== '';\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","classNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","clearButtonShown","clearButton","DropdownIcon","afterIcons","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- export interface FormStatusProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ import { HasRootRef } from '../../types';
3
+ export interface FormStatusProps extends React.HTMLAttributes<HTMLDivElement>, HasRootRef<HTMLElement> {
3
4
  mode?: 'default' | 'error';
4
5
  header?: React.ReactNode;
5
6
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FormStatus/FormStatus.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { Banner } from '../Banner/Banner';\nimport styles from './FormStatus.module.css';\n\nexport interface FormStatusProps extends React.HTMLAttributes<HTMLDivElement> {\n mode?: 'default' | 'error';\n header?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormStatus\n */\nexport const FormStatus = ({ mode, children, className, ...restProps }: FormStatusProps) => {\n return (\n <Banner\n {...restProps}\n subheader={children}\n className={classNames(\n 'vkuiInternalFormStatus',\n mode === 'error' &&\n classNames(styles['FormStatus--mode-error'], 'vkuiInternalFormStatus--mode-error'),\n className,\n )}\n />\n );\n};\n"],"names":["FormStatus","mode","children","className","restProps","Banner","subheader","classNames"],"mappings":";;;;+BAaaA;;;eAAAA;;;;;;;2DAbU;oBACI;sBACJ;AAWhB,IAAMA,aAAa,iBAAkE;QAA/DC,cAAAA,MAAMC,kBAAAA,UAAUC,mBAAAA,WAAcC;QAA9BH;QAAMC;QAAUC;;IAC3C,qBACE,qBAACE,cAAM,uCACDD;QACJE,WAAWJ;QACXC,WAAWI,IAAAA,gBAAU,EACnB,0BACAN,SAAS,WACPM,IAAAA,gBAAU,gCAAmC,uCAC/CJ;;AAIR"}
1
+ {"version":3,"sources":["../../../../src/components/FormStatus/FormStatus.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { HasRootRef } from '../../types';\nimport { Banner } from '../Banner/Banner';\nimport styles from './FormStatus.module.css';\n\nexport interface FormStatusProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLElement> {\n mode?: 'default' | 'error';\n header?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormStatus\n */\nexport const FormStatus = ({ mode, children, className, ...restProps }: FormStatusProps) => {\n return (\n <Banner\n {...restProps}\n subheader={children}\n className={classNames(\n 'vkuiInternalFormStatus',\n mode === 'error' &&\n classNames(styles['FormStatus--mode-error'], 'vkuiInternalFormStatus--mode-error'),\n className,\n )}\n />\n );\n};\n"],"names":["FormStatus","mode","children","className","restProps","Banner","subheader","classNames"],"mappings":";;;;+BAgBaA;;;eAAAA;;;;;;;2DAhBU;oBACI;sBAEJ;AAahB,IAAMA,aAAa,iBAAkE;QAA/DC,cAAAA,MAAMC,kBAAAA,UAAUC,mBAAAA,WAAcC;QAA9BH;QAAMC;QAAUC;;IAC3C,qBACE,qBAACE,cAAM,uCACDD;QACJE,WAAWJ;QACXC,WAAWI,IAAAA,gBAAU,EACnB,0BACAN,SAAS,WACPM,IAAAA,gBAAU,gCAAmC,uCAC/CJ;;AAIR"}
@@ -35,6 +35,9 @@ export interface PromoBannerProps extends React.HTMLAttributes<HTMLDivElement> {
35
35
  }
36
36
  /**
37
37
  * @see https://vkcom.github.io/VKUI/#/PromoBanner
38
+ * @deprecated v5.3.1
39
+ *
40
+ * Используйте событие [VKWebAppShowBannerAd](https://dev.vk.com/mini-apps/monetization/ad/banners)
38
41
  */
39
42
  export declare const PromoBanner: ({ bannerData, onClose, isCloseButtonHidden, className, ...restProps }: PromoBannerProps) => JSX.Element;
40
43
  export {};
@@ -17,10 +17,12 @@ var _slicedToArray = require("@swc/helpers/lib/_sliced_to_array.js").default;
17
17
  var _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
18
18
  var _icons = require("@vkontakte/icons");
19
19
  var _vkjs = require("@vkontakte/vkjs");
20
+ var _warnOnce = require("../../lib/warnOnce");
20
21
  var _button = require("../Button/Button");
21
22
  var _image = require("../Image/Image");
22
23
  var _simpleCell = require("../SimpleCell/SimpleCell");
23
24
  var _footnote = require("../Typography/Footnote/Footnote");
25
+ var warn = (0, _warnOnce.warnOnce)("PromoBanner");
24
26
  var PromoBanner = function(_param) {
25
27
  var _param_bannerData = _param.bannerData, bannerData = _param_bannerData === void 0 ? {} : _param_bannerData, onClose = _param.onClose, isCloseButtonHidden = _param.isCloseButtonHidden, className = _param.className, restProps = _objectWithoutProperties(_param, [
26
28
  "bannerData",
@@ -28,6 +30,9 @@ var PromoBanner = function(_param) {
28
30
  "isCloseButtonHidden",
29
31
  "className"
30
32
  ]);
33
+ if (process.env.NODE_ENV === "development") {
34
+ warn("Компонент устарел и будет удален в v6. Используйте событие VKWebAppShowBannerAd https://dev.vk.com/mini-apps/monetization/ad/banners");
35
+ }
31
36
  var _React_useState = _slicedToArray(_react.useState(""), 2), currentPixel = _React_useState[0], setCurrentPixel = _React_useState[1];
32
37
  var statsPixels = _react.useMemo(function() {
33
38
  return bannerData.statistics ? bannerData.statistics.reduce(function(acc, item) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/PromoBanner/PromoBanner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon24Dismiss } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { Button } from '../Button/Button';\nimport { Image } from '../Image/Image';\nimport { SimpleCell } from '../SimpleCell/SimpleCell';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './PromoBanner.module.css';\n\ntype StatsType =\n | 'playbackStarted' // Начало показа\n | 'click'; // Клик по баннеру\n\ntype BannerData = {\n title?: string;\n url_types?: string;\n bannerID?: string;\n imageWidth?: number;\n imageHeight?: number;\n imageLink?: string;\n trackingLink?: string;\n type?: string;\n iconWidth?: number;\n domain?: string;\n ctaText?: string;\n advertisingLabel?: string;\n iconLink?: string;\n statistics?: Array<{ type: StatsType; url: string }>;\n openInBrowser?: boolean;\n iconHeight?: number;\n directLink?: boolean;\n navigationType?: string;\n description?: string;\n ageRestrictions?: string;\n};\n\nexport interface PromoBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Данные рекламного баннера, полученные из VKWebAppGetAds */\n bannerData: BannerData;\n /** Флаг скрытия кнопки закрытия рекламы */\n isCloseButtonHidden?: boolean;\n /** Хандлер закрытия рекламы */\n onClose: () => void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PromoBanner\n */\nexport const PromoBanner = ({\n bannerData = {},\n onClose,\n isCloseButtonHidden,\n className,\n ...restProps\n}: PromoBannerProps) => {\n const [currentPixel, setCurrentPixel] = React.useState('');\n\n const statsPixels = React.useMemo(\n () =>\n (bannerData.statistics\n ? bannerData.statistics.reduce((acc, item) => ({ ...acc, [item.type]: item.url }), {})\n : {}) as Record<StatsType, string | void>,\n [bannerData.statistics],\n );\n\n const onClick = React.useCallback(\n () => setCurrentPixel(statsPixels.click || ''),\n [statsPixels.click],\n );\n\n React.useEffect(() => {\n if (statsPixels.playbackStarted) {\n setCurrentPixel(statsPixels.playbackStarted);\n }\n }, [statsPixels.playbackStarted]);\n\n return (\n <div className={classNames(styles['PromoBanner'], className)} {...restProps}>\n <div className={styles['PromoBanner__head']}>\n <Footnote>{bannerData.advertisingLabel || 'Advertisement'}</Footnote>\n {bannerData.ageRestrictions && (\n <Footnote className={styles['PromoBanner__age']}>{bannerData.ageRestrictions}</Footnote>\n )}\n\n {!isCloseButtonHidden && (\n <div className={styles['PromoBanner__close']} onClick={onClose}>\n <Icon24Dismiss />\n </div>\n )}\n </div>\n <SimpleCell\n href={bannerData.trackingLink}\n onClick={onClick}\n rel=\"nofollow noopener noreferrer\"\n target=\"_blank\"\n before={\n bannerData.iconLink && (\n <Image\n size={48}\n src={bannerData.iconLink}\n alt={bannerData.title}\n data-testid={process.env.NODE_ENV === 'test' ? 'avatar' : undefined}\n />\n )\n }\n after={\n bannerData.ctaText && (\n <Button\n mode=\"outline\"\n data-testid={process.env.NODE_ENV === 'test' ? 'button-ctaText' : undefined}\n >\n {bannerData.ctaText}\n </Button>\n )\n }\n subtitle={bannerData.domain}\n >\n {bannerData.title}\n </SimpleCell>\n\n {currentPixel.length > 0 && (\n <div className={styles['PromoBanner__pixels']}>\n <img src={currentPixel} alt=\"\" />\n </div>\n )}\n </div>\n );\n};\n"],"names":["PromoBanner","bannerData","onClose","isCloseButtonHidden","className","restProps","React","useState","currentPixel","setCurrentPixel","statsPixels","useMemo","statistics","reduce","acc","item","type","url","onClick","useCallback","click","useEffect","playbackStarted","div","classNames","Footnote","advertisingLabel","ageRestrictions","Icon24Dismiss","SimpleCell","href","trackingLink","rel","target","before","iconLink","Image","size","src","alt","title","data-testid","process","env","NODE_ENV","undefined","after","ctaText","Button","mode","subtitle","domain","length","img"],"mappings":";;;;+BAgDaA;;;eAAAA;;;;;;;;;2DAhDU;qBACO;oBACH;sBACJ;qBACD;0BACK;wBACF;AA0ClB,IAAMA,cAAc,iBAMH;mCALtBC,YAAAA,4CAAa,CAAC,uBACdC,iBAAAA,SACAC,6BAAAA,qBACAC,mBAAAA,WACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAwCE,iCAAAA,OAAMC,QAAQ,CAAC,SAAhDC,eAAiCF,oBAAnBG,kBAAmBH;IAExC,IAAMI,cAAcJ,OAAMK,OAAO,CAC/B;eACGV,WAAWW,UAAU,GAClBX,WAAWW,UAAU,CAACC,MAAM,CAAC,SAACC,KAAKC;mBAAU,qCAAKD,MAAK,oBAACC,KAAKC,IAAI,EAAGD,KAAKE,GAAG;WAAK,CAAC,KAClF,CAAC,CAAC;OACR;QAAChB,WAAWW,UAAU;KAAC;IAGzB,IAAMM,UAAUZ,OAAMa,WAAW,CAC/B;eAAMV,gBAAgBC,YAAYU,KAAK,IAAI;OAC3C;QAACV,YAAYU,KAAK;KAAC;IAGrBd,OAAMe,SAAS,CAAC,WAAM;QACpB,IAAIX,YAAYY,eAAe,EAAE;YAC/Bb,gBAAgBC,YAAYY,eAAe;QAC7C,CAAC;IACH,GAAG;QAACZ,YAAYY,eAAe;KAAC;IAEhC,qBACE,qBAACC;QAAInB,WAAWoB,IAAAA,gBAAU,qBAAwBpB;OAAgBC,0BAChE,qBAACkB;QAAInB,SAAS;qBACZ,qBAACqB,kBAAQ,QAAExB,WAAWyB,gBAAgB,IAAI,kBACzCzB,WAAW0B,eAAe,kBACzB,qBAACF,kBAAQ;QAACrB,SAAS;OAA+BH,WAAW0B,eAAe,GAG7E,CAACxB,qCACA,qBAACoB;QAAInB,SAAS;QAAgCc,SAAShB;qBACrD,qBAAC0B,oBAAa,yBAIpB,qBAACC,sBAAU;QACTC,MAAM7B,WAAW8B,YAAY;QAC7Bb,SAASA;QACTc,KAAI;QACJC,QAAO;QACPC,QACEjC,WAAWkC,QAAQ,kBACjB,qBAACC,YAAK;YACJC,MAAM;YACNC,KAAKrC,WAAWkC,QAAQ;YACxBI,KAAKtC,WAAWuC,KAAK;YACrBC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWC,SAAS;;QAIzEC,OACE7C,WAAW8C,OAAO,kBAChB,qBAACC,cAAM;YACLC,MAAK;YACLR,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,mBAAmBC,SAAS;WAE1E5C,WAAW8C,OAAO;QAIzBG,UAAUjD,WAAWkD,MAAM;OAE1BlD,WAAWuC,KAAK,GAGlBhC,aAAa4C,MAAM,GAAG,mBACrB,qBAAC7B;QAAInB,SAAS;qBACZ,qBAACiD;QAAIf,KAAK9B;QAAc+B,KAAI;;AAKtC"}
1
+ {"version":3,"sources":["../../../../src/components/PromoBanner/PromoBanner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon24Dismiss } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { Button } from '../Button/Button';\nimport { Image } from '../Image/Image';\nimport { SimpleCell } from '../SimpleCell/SimpleCell';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './PromoBanner.module.css';\n\nconst warn = warnOnce('PromoBanner');\n\ntype StatsType =\n | 'playbackStarted' // Начало показа\n | 'click'; // Клик по баннеру\n\ntype BannerData = {\n title?: string;\n url_types?: string;\n bannerID?: string;\n imageWidth?: number;\n imageHeight?: number;\n imageLink?: string;\n trackingLink?: string;\n type?: string;\n iconWidth?: number;\n domain?: string;\n ctaText?: string;\n advertisingLabel?: string;\n iconLink?: string;\n statistics?: Array<{ type: StatsType; url: string }>;\n openInBrowser?: boolean;\n iconHeight?: number;\n directLink?: boolean;\n navigationType?: string;\n description?: string;\n ageRestrictions?: string;\n};\n\nexport interface PromoBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Данные рекламного баннера, полученные из VKWebAppGetAds */\n bannerData: BannerData;\n /** Флаг скрытия кнопки закрытия рекламы */\n isCloseButtonHidden?: boolean;\n /** Хандлер закрытия рекламы */\n onClose: () => void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PromoBanner\n * @deprecated v5.3.1\n *\n * Используйте событие [VKWebAppShowBannerAd](https://dev.vk.com/mini-apps/monetization/ad/banners)\n */\nexport const PromoBanner = ({\n bannerData = {},\n onClose,\n isCloseButtonHidden,\n className,\n ...restProps\n}: PromoBannerProps) => {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Компонент устарел и будет удален в v6. Используйте событие VKWebAppShowBannerAd https://dev.vk.com/mini-apps/monetization/ad/banners',\n );\n }\n\n const [currentPixel, setCurrentPixel] = React.useState('');\n\n const statsPixels = React.useMemo(\n () =>\n (bannerData.statistics\n ? bannerData.statistics.reduce((acc, item) => ({ ...acc, [item.type]: item.url }), {})\n : {}) as Record<StatsType, string | void>,\n [bannerData.statistics],\n );\n\n const onClick = React.useCallback(\n () => setCurrentPixel(statsPixels.click || ''),\n [statsPixels.click],\n );\n\n React.useEffect(() => {\n if (statsPixels.playbackStarted) {\n setCurrentPixel(statsPixels.playbackStarted);\n }\n }, [statsPixels.playbackStarted]);\n\n return (\n <div className={classNames(styles['PromoBanner'], className)} {...restProps}>\n <div className={styles['PromoBanner__head']}>\n <Footnote>{bannerData.advertisingLabel || 'Advertisement'}</Footnote>\n {bannerData.ageRestrictions && (\n <Footnote className={styles['PromoBanner__age']}>{bannerData.ageRestrictions}</Footnote>\n )}\n\n {!isCloseButtonHidden && (\n <div className={styles['PromoBanner__close']} onClick={onClose}>\n <Icon24Dismiss />\n </div>\n )}\n </div>\n <SimpleCell\n href={bannerData.trackingLink}\n onClick={onClick}\n rel=\"nofollow noopener noreferrer\"\n target=\"_blank\"\n before={\n bannerData.iconLink && (\n <Image\n size={48}\n src={bannerData.iconLink}\n alt={bannerData.title}\n data-testid={process.env.NODE_ENV === 'test' ? 'avatar' : undefined}\n />\n )\n }\n after={\n bannerData.ctaText && (\n <Button\n mode=\"outline\"\n data-testid={process.env.NODE_ENV === 'test' ? 'button-ctaText' : undefined}\n >\n {bannerData.ctaText}\n </Button>\n )\n }\n subtitle={bannerData.domain}\n >\n {bannerData.title}\n </SimpleCell>\n\n {currentPixel.length > 0 && (\n <div className={styles['PromoBanner__pixels']}>\n <img src={currentPixel} alt=\"\" />\n </div>\n )}\n </div>\n );\n};\n"],"names":["PromoBanner","warn","warnOnce","bannerData","onClose","isCloseButtonHidden","className","restProps","process","env","NODE_ENV","React","useState","currentPixel","setCurrentPixel","statsPixels","useMemo","statistics","reduce","acc","item","type","url","onClick","useCallback","click","useEffect","playbackStarted","div","classNames","Footnote","advertisingLabel","ageRestrictions","Icon24Dismiss","SimpleCell","href","trackingLink","rel","target","before","iconLink","Image","size","src","alt","title","data-testid","undefined","after","ctaText","Button","mode","subtitle","domain","length","img"],"mappings":";;;;+BAsDaA;;;eAAAA;;;;;;;;;2DAtDU;qBACO;oBACH;wBACF;sBACF;qBACD;0BACK;wBACF;AAGzB,IAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AA4Cf,IAAMF,cAAc,iBAMH;mCALtBG,YAAAA,4CAAa,CAAC,uBACdC,iBAAAA,SACAC,6BAAAA,qBACAC,mBAAAA,WACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CT,KACE;IAEJ,CAAC;IAED,IAAwCU,iCAAAA,OAAMC,QAAQ,CAAC,SAAhDC,eAAiCF,oBAAnBG,kBAAmBH;IAExC,IAAMI,cAAcJ,OAAMK,OAAO,CAC/B;eACGb,WAAWc,UAAU,GAClBd,WAAWc,UAAU,CAACC,MAAM,CAAC,SAACC,KAAKC;mBAAU,qCAAKD,MAAK,oBAACC,KAAKC,IAAI,EAAGD,KAAKE,GAAG;WAAK,CAAC,KAClF,CAAC,CAAC;OACR;QAACnB,WAAWc,UAAU;KAAC;IAGzB,IAAMM,UAAUZ,OAAMa,WAAW,CAC/B;eAAMV,gBAAgBC,YAAYU,KAAK,IAAI;OAC3C;QAACV,YAAYU,KAAK;KAAC;IAGrBd,OAAMe,SAAS,CAAC,WAAM;QACpB,IAAIX,YAAYY,eAAe,EAAE;YAC/Bb,gBAAgBC,YAAYY,eAAe;QAC7C,CAAC;IACH,GAAG;QAACZ,YAAYY,eAAe;KAAC;IAEhC,qBACE,qBAACC;QAAItB,WAAWuB,IAAAA,gBAAU,qBAAwBvB;OAAgBC,0BAChE,qBAACqB;QAAItB,SAAS;qBACZ,qBAACwB,kBAAQ,QAAE3B,WAAW4B,gBAAgB,IAAI,kBACzC5B,WAAW6B,eAAe,kBACzB,qBAACF,kBAAQ;QAACxB,SAAS;OAA+BH,WAAW6B,eAAe,GAG7E,CAAC3B,qCACA,qBAACuB;QAAItB,SAAS;QAAgCiB,SAASnB;qBACrD,qBAAC6B,oBAAa,yBAIpB,qBAACC,sBAAU;QACTC,MAAMhC,WAAWiC,YAAY;QAC7Bb,SAASA;QACTc,KAAI;QACJC,QAAO;QACPC,QACEpC,WAAWqC,QAAQ,kBACjB,qBAACC,YAAK;YACJC,MAAM;YACNC,KAAKxC,WAAWqC,QAAQ;YACxBI,KAAKzC,WAAW0C,KAAK;YACrBC,eAAatC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWqC,SAAS;;QAIzEC,OACE7C,WAAW8C,OAAO,kBAChB,qBAACC,cAAM;YACLC,MAAK;YACLL,eAAatC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,mBAAmBqC,SAAS;WAE1E5C,WAAW8C,OAAO;QAIzBG,UAAUjD,WAAWkD,MAAM;OAE1BlD,WAAW0C,KAAK,GAGlBhC,aAAayC,MAAM,GAAG,mBACrB,qBAAC1B;QAAItB,SAAS;qBACZ,qBAACiD;QAAIZ,KAAK9B;QAAc+B,KAAI;;AAKtC"}
@@ -4,4 +4,4 @@ export type SelectType = 'default' | 'plain' | 'accent';
4
4
  /**
5
5
  * @see https://vkcom.github.io/VKUI/#/Select
6
6
  */
7
- export declare const Select: ({ children, options, popupDirection, renderOption, ...props }: SelectProps) => JSX.Element;
7
+ export declare const Select: ({ children, options, popupDirection, renderOption, allowClearButton, ClearButton, ...props }: SelectProps) => JSX.Element;
@@ -16,17 +16,21 @@ var _useAdaptivityHasPointer = require("../../hooks/useAdaptivityHasPointer");
16
16
  var _customSelect = require("../CustomSelect/CustomSelect");
17
17
  var _nativeSelect = require("../NativeSelect/NativeSelect");
18
18
  var Select = function(_param) {
19
- var children = _param.children, _param_options = _param.options, options = _param_options === void 0 ? [] : _param_options, popupDirection = _param.popupDirection, renderOption = _param.renderOption, props = _objectWithoutProperties(_param, [
19
+ var children = _param.children, _param_options = _param.options, options = _param_options === void 0 ? [] : _param_options, popupDirection = _param.popupDirection, renderOption = _param.renderOption, allowClearButton = _param.allowClearButton, ClearButton = _param.ClearButton, props = _objectWithoutProperties(_param, [
20
20
  "children",
21
21
  "options",
22
22
  "popupDirection",
23
- "renderOption"
23
+ "renderOption",
24
+ "allowClearButton",
25
+ "ClearButton"
24
26
  ]);
25
27
  var hasPointer = (0, _useAdaptivityHasPointer.useAdaptivityHasPointer)();
26
28
  return /*#__PURE__*/ _react.createElement(_react.Fragment, null, (hasPointer === undefined || hasPointer) && /*#__PURE__*/ _react.createElement(_customSelect.CustomSelect, _objectSpread({
27
29
  options: options,
28
30
  popupDirection: popupDirection,
29
- renderOption: renderOption
31
+ renderOption: renderOption,
32
+ allowClearButton: allowClearButton,
33
+ ClearButton: ClearButton
30
34
  }, props)), (hasPointer === undefined || !hasPointer) && /*#__PURE__*/ _react.createElement(_nativeSelect.NativeSelect, props, options.map(function(param) {
31
35
  var label = param.label, value = param.value;
32
36
  return /*#__PURE__*/ _react.createElement("option", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { CustomSelect, SelectProps } from '../CustomSelect/CustomSelect';\nimport { NativeSelect } from '../NativeSelect/NativeSelect';\n\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Select\n */\nexport const Select = ({\n children,\n options = [],\n popupDirection,\n renderOption,\n ...props\n}: SelectProps) => {\n const hasPointer = useAdaptivityHasPointer();\n\n return (\n <React.Fragment>\n {(hasPointer === undefined || hasPointer) && (\n <CustomSelect\n options={options}\n popupDirection={popupDirection}\n renderOption={renderOption}\n {...props}\n />\n )}\n {(hasPointer === undefined || !hasPointer) && (\n <NativeSelect {...props}>\n {options.map(({ label, value }) => (\n <option value={value} key={`${value}`}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["Select","children","options","popupDirection","renderOption","props","hasPointer","useAdaptivityHasPointer","React","Fragment","undefined","CustomSelect","NativeSelect","map","label","value","option","key"],"mappings":";;;;+BAUaA;;;eAAAA;;;;;;2DAVU;uCACiB;4BACE;4BACb;AAOtB,IAAMA,SAAS,iBAMH;QALjBC,kBAAAA,kCACAC,SAAAA,sCAAU,EAAE,mBACZC,wBAAAA,gBACAC,sBAAAA,cACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAME,aAAaC,IAAAA,gDAAuB;IAE1C,qBACE,qBAACC,OAAMC,QAAQ,QACZ,AAACH,CAAAA,eAAeI,aAAaJ,UAAS,mBACrC,qBAACK,0BAAY;QACXT,SAASA;QACTC,gBAAgBA;QAChBC,cAAcA;OACVC,SAGP,AAACC,CAAAA,eAAeI,aAAa,CAACJ,UAAS,mBACtC,qBAACM,0BAAY,EAAKP,OACfH,QAAQW,GAAG,CAAC;YAAGC,cAAAA,OAAOC,cAAAA;6BACrB,qBAACC;YAAOD,OAAOA;YAAOE,KAAK,AAAC,GAAQ,OAANF;WAC3BD;;AAOf"}
1
+ {"version":3,"sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { CustomSelect, SelectProps } from '../CustomSelect/CustomSelect';\nimport { NativeSelect } from '../NativeSelect/NativeSelect';\n\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Select\n */\nexport const Select = ({\n children,\n options = [],\n popupDirection,\n renderOption,\n allowClearButton,\n ClearButton,\n ...props\n}: SelectProps) => {\n const hasPointer = useAdaptivityHasPointer();\n\n return (\n <React.Fragment>\n {(hasPointer === undefined || hasPointer) && (\n <CustomSelect\n options={options}\n popupDirection={popupDirection}\n renderOption={renderOption}\n allowClearButton={allowClearButton}\n ClearButton={ClearButton}\n {...props}\n />\n )}\n {(hasPointer === undefined || !hasPointer) && (\n <NativeSelect {...props}>\n {options.map(({ label, value }) => (\n <option value={value} key={`${value}`}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["Select","children","options","popupDirection","renderOption","allowClearButton","ClearButton","props","hasPointer","useAdaptivityHasPointer","React","Fragment","undefined","CustomSelect","NativeSelect","map","label","value","option","key"],"mappings":";;;;+BAUaA;;;eAAAA;;;;;;2DAVU;uCACiB;4BACE;4BACb;AAOtB,IAAMA,SAAS,iBAQH;QAPjBC,kBAAAA,kCACAC,SAAAA,sCAAU,EAAE,mBACZC,wBAAAA,gBACAC,sBAAAA,cACAC,0BAAAA,kBACAC,qBAAAA,aACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,aAAaC,IAAAA,gDAAuB;IAE1C,qBACE,qBAACC,OAAMC,QAAQ,QACZ,AAACH,CAAAA,eAAeI,aAAaJ,UAAS,mBACrC,qBAACK,0BAAY;QACXX,SAASA;QACTC,gBAAgBA;QAChBC,cAAcA;QACdC,kBAAkBA;QAClBC,aAAaA;OACTC,SAGP,AAACC,CAAAA,eAAeI,aAAa,CAACJ,UAAS,mBACtC,qBAACM,0BAAY,EAAKP,OACfL,QAAQa,GAAG,CAAC;YAAGC,cAAAA,OAAOC,cAAAA;6BACrB,qBAACC;YAAOD,OAAOA;YAAOE,KAAK,AAAC,GAAQ,OAANF;WAC3BD;;AAOf"}
@@ -33,8 +33,8 @@ var TabbarItem = function(_param) {
33
33
  ]);
34
34
  var platform = (0, _usePlatform.usePlatform)();
35
35
  if (process.env.NODE_ENV === "development") {
36
- var isAccessible = !text && (!restProps["aria-label"] || !restProps["aria-labelledby"]);
37
- if (!isAccessible) {
36
+ var hasAccessibleName = text || restProps["aria-label"] || restProps["aria-labelledby"];
37
+ if (!hasAccessibleName) {
38
38
  warn(_warnOnce.COMMON_WARNINGS.a11y[Component === "a" ? "link-name" : "button-name"], "error");
39
39
  }
40
40
  }