@vkontakte/vkui 5.4.1 → 5.4.3

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 (179) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  3. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  4. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +7 -3
  5. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  6. package/dist/cjs/components/Banner/Banner.js +3 -3
  7. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  8. package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  9. package/dist/cjs/components/Cell/CellDragger/CellDragger.js +9 -5
  10. package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -1
  11. package/dist/cjs/components/Cell/useDraggable.d.ts +3 -3
  12. package/dist/cjs/components/Cell/useDraggable.js +12 -7
  13. package/dist/cjs/components/Cell/useDraggable.js.map +1 -1
  14. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +3 -20
  15. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  16. package/dist/cjs/components/CustomSelect/CustomSelect.js +16 -2
  17. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  19. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +4 -2
  20. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  21. package/dist/cjs/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  22. package/dist/cjs/components/HorizontalCell/HorizontalCell.js +6 -3
  23. package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
  24. package/dist/cjs/components/ImageBase/ImageBase.js +5 -2
  25. package/dist/cjs/components/ImageBase/ImageBase.js.map +1 -1
  26. package/dist/cjs/components/InfoRow/InfoRow.js +3 -2
  27. package/dist/cjs/components/InfoRow/InfoRow.js.map +1 -1
  28. package/dist/cjs/components/ModalPage/ModalPage.js +6 -1
  29. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  30. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +6 -5
  31. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  32. package/dist/cjs/components/ModalRoot/ModalRoot.js +30 -12
  33. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  34. package/dist/cjs/components/ModalRoot/types.d.ts +0 -1
  35. package/dist/cjs/components/ModalRoot/types.js.map +1 -1
  36. package/dist/cjs/components/ModalRoot/useModalManager.js +0 -1
  37. package/dist/cjs/components/ModalRoot/useModalManager.js.map +1 -1
  38. package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -1
  39. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  40. package/dist/cjs/components/Panel/Panel.js +4 -4
  41. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  42. package/dist/cjs/components/PanelHeader/PanelHeader.d.ts +8 -4
  43. package/dist/cjs/components/PanelHeader/PanelHeader.js +48 -21
  44. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  45. package/dist/cjs/components/TabsItem/TabsItem.js +3 -2
  46. package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
  47. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  48. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  49. package/dist/cjs/components/WriteBar/WriteBar.js +14 -2
  50. package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
  51. package/dist/cjs/hooks/useTodayDate.js +30 -7
  52. package/dist/cjs/hooks/useTodayDate.js.map +1 -1
  53. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  54. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  55. package/dist/components/ActionSheetItem/ActionSheetItem.js +7 -3
  56. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  57. package/dist/components/Banner/Banner.js +3 -3
  58. package/dist/components/Banner/Banner.js.map +1 -1
  59. package/dist/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  60. package/dist/components/Cell/CellDragger/CellDragger.js +9 -5
  61. package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -1
  62. package/dist/components/Cell/useDraggable.d.ts +3 -3
  63. package/dist/components/Cell/useDraggable.js +12 -7
  64. package/dist/components/Cell/useDraggable.js.map +1 -1
  65. package/dist/components/ChipsSelect/ChipsSelect.js +3 -20
  66. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  67. package/dist/components/CustomSelect/CustomSelect.js +16 -2
  68. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  69. package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  70. package/dist/components/CustomSelectOption/CustomSelectOption.js +4 -2
  71. package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  72. package/dist/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  73. package/dist/components/HorizontalCell/HorizontalCell.js +6 -3
  74. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  75. package/dist/components/ImageBase/ImageBase.js +5 -2
  76. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  77. package/dist/components/InfoRow/InfoRow.js +3 -2
  78. package/dist/components/InfoRow/InfoRow.js.map +1 -1
  79. package/dist/components/ModalPage/ModalPage.js +6 -1
  80. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  81. package/dist/components/ModalPageHeader/ModalPageHeader.js +6 -5
  82. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  83. package/dist/components/ModalRoot/ModalRoot.js +30 -12
  84. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  85. package/dist/components/ModalRoot/types.d.ts +0 -1
  86. package/dist/components/ModalRoot/types.js.map +1 -1
  87. package/dist/components/ModalRoot/useModalManager.js +0 -1
  88. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  89. package/dist/components/NativeSelect/NativeSelect.js +2 -1
  90. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  91. package/dist/components/Panel/Panel.js +4 -4
  92. package/dist/components/Panel/Panel.js.map +1 -1
  93. package/dist/components/PanelHeader/PanelHeader.d.ts +8 -4
  94. package/dist/components/PanelHeader/PanelHeader.js +48 -21
  95. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  96. package/dist/components/TabsItem/TabsItem.js +3 -2
  97. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  98. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  99. package/dist/components/VisuallyHidden/VisuallyHidden.js +3 -4
  100. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  101. package/dist/components/WriteBar/WriteBar.js +14 -2
  102. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  103. package/dist/components.css +15 -15
  104. package/dist/components.css.map +1 -1
  105. package/dist/components.js.tmp +275 -140
  106. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +1 -5
  107. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  108. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  109. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +7 -3
  110. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  111. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.module.css +7 -6
  112. package/dist/cssm/components/Banner/Banner.js +3 -3
  113. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  114. package/dist/cssm/components/Banner/Banner.module.css +1 -9
  115. package/dist/cssm/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  116. package/dist/cssm/components/Cell/CellDragger/CellDragger.js +8 -5
  117. package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -1
  118. package/dist/cssm/components/Cell/useDraggable.d.ts +3 -3
  119. package/dist/cssm/components/Cell/useDraggable.js +12 -7
  120. package/dist/cssm/components/Cell/useDraggable.js.map +1 -1
  121. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +3 -17
  122. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  123. package/dist/cssm/components/CustomSelect/CustomSelect.js +15 -2
  124. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  125. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  126. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
  127. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  128. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.module.css +0 -1
  129. package/dist/cssm/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  130. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +4 -2
  131. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  132. package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +23 -11
  133. package/dist/cssm/components/ImageBase/ImageBase.js +5 -2
  134. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  135. package/dist/cssm/components/ImageBase/ImageBase.module.css +13 -2
  136. package/dist/cssm/components/InfoRow/InfoRow.js +3 -2
  137. package/dist/cssm/components/InfoRow/InfoRow.js.map +1 -1
  138. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  139. package/dist/cssm/components/ModalPage/ModalPage.js +6 -1
  140. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  141. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +6 -5
  142. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  143. package/dist/cssm/components/ModalRoot/ModalRoot.js +26 -11
  144. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  145. package/dist/cssm/components/ModalRoot/types.d.ts +0 -1
  146. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  147. package/dist/cssm/components/ModalRoot/useModalManager.js +0 -1
  148. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  149. package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -1
  150. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  151. package/dist/cssm/components/Panel/Panel.js +4 -4
  152. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  153. package/dist/cssm/components/PanelHeader/PanelHeader.d.ts +8 -4
  154. package/dist/cssm/components/PanelHeader/PanelHeader.js +45 -19
  155. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  156. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.module.css +1 -1
  157. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +3 -0
  158. package/dist/cssm/components/TabsItem/TabsItem.js +3 -2
  159. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  160. package/dist/cssm/components/Typography/Typography.module.css +2 -1
  161. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  162. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js +3 -4
  163. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  164. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +9 -5
  165. package/dist/cssm/components/WriteBar/WriteBar.js +15 -2
  166. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  167. package/dist/cssm/components/WriteBar/WriteBar.module.css +13 -7
  168. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.module.css +9 -1
  169. package/dist/cssm/hooks/useTodayDate.js +31 -8
  170. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  171. package/dist/cssm/styles/constants.css +3 -2
  172. package/dist/hooks/useTodayDate.js +31 -8
  173. package/dist/hooks/useTodayDate.js.map +1 -1
  174. package/dist/vkui.css +15 -15
  175. package/dist/vkui.css.map +1 -1
  176. package/dist/vkui.js.tmp +275 -140
  177. package/package.json +3 -5
  178. package/docs/assets/assets/vkui-logo-dark.svg +0 -5
  179. package/docs/assets/assets/vkui-logo-light.svg +0 -5
@@ -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 { 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":["React","Icon24Cancel","Icon24Chevron","Icon24DismissDark","Icon24DismissSubstract","classNames","hasReactNode","usePlatform","Platform","IconButton","Tappable","Headline","Subhead","Text","Title","Banner","mode","imageTheme","size","before","asideMode","header","subheader","text","children","background","actions","onDismiss","dismissLabel","className","getRootRef","restProps","platform","HeaderTypography","SubheaderTypography","IconDismissIOS","content","Fragment","div","aria-hidden","Component","weight","level","Children","count","section","IOS","s","m","ref","activeMode","role","aria-label","onClick","hoverMode","hasActive"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,YAAY,EACZC,aAAa,EACbC,iBAAiB,EACjBC,sBAAsB,QACjB,mBAAmB;AAC1B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,QAAQ,QAAQ,kCAAkC;AAC3D,SAASC,OAAO,QAAQ,gCAAgC;AACxD,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,KAAK,QAAQ,4BAA4B;AAyElD;;CAEC,GACD,OAAO,IAAMC,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,WAAWzB;IAEjB,IAAM0B,mBAAmBf,SAAS,MAAMJ,QAAQH,QAAQ;IACxD,IAAMuB,sBAAsBhB,SAAS,MAAML,OAAOD,OAAO;IAEzD,IAAMuB,iBAAiBnB,SAAS,UAAUb,oBAAoBC,sBAAsB;IAEpF,IAAMgC,wBACJ,oBAACpC,MAAMqC,QAAQ,QACZrB,SAAS,WAAWS,4BACnB,oBAACa;QAAIC,eAAAA,IAAW;QAACV,SAAS;OACvBJ,aAIJN,wBAAU,oBAACmB;QAAIT,SAAS;OAA6BV,uBAEtD,oBAACmB;QAAIT,SAAS;OACXvB,aAAae,yBACZ,oBAACY;QACCO,WAAU;QACVX,SAAS;QACTY,QAAO;QACPC,OAAOxB,SAAS,MAAM,MAAM,GAAG;OAE9BG,SAGJf,aAAagB,4BACZ,oBAACY;QAAoBM,WAAU;QAAOX,SAAS;OAC5CP,YAGJhB,aAAaiB,uBAAS,oBAACV;QAAKgB,SAAS;OAA2BN,OAChEjB,aAAaoB,YAAY1B,MAAM2C,QAAQ,CAACC,KAAK,CAAClB,WAAW,mBACxD,oBAACY;QAAIT,SAAS;OAA8BH;IAMpD,qBACE,oBAACmB,mDACKd;QACJF,WAAWxB,yBAET2B,aAAaxB,SAASsC,GAAG,uBACzB9B,SAAS,qCACT;YACE+B,CAAC;YACDC,CAAC;QACH,CAAC,CAAC9B,KAAK,EACPF,SAAS,WAAWC,eAAe,kCACnCY;QAEFoB,KAAKnB;QAEJV,cAAc,yBACb,oBAACV;QACCmB,SAAS;QACTqB,YAAYlB,aAAaxB,SAASsC,GAAG,GAAG,YAAY,YAAY;QAChEK,MAAK;OAEJf,uBAED,oBAACE;QAAIT,SAAS;qBACZ,oBAAC3B,uCAIL,oBAACoC;QAAIT,SAAS;OACXO,SAEAhB,cAAc,2BACb,oBAACkB;QAAIT,SAAS;qBACZ,oBAACpB;QACC2C,cAAYxB;QACZC,SAAS;QACTwB,SAAS1B;QACT2B,WAAU;QACVC,WAAW,KAAK;OAEfvB,aAAaxB,SAASsC,GAAG,iBAAG,oBAACX,sCAAoB,oBAAClC,mBAAe,GAK3E;AAGP,EAAE"}
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 <>\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 Component=\"p\" weight=\"2\" level={size === 'm' ? '2' : '1'}>\n {header}\n </HeaderTypography>\n )}\n {hasReactNode(subheader) && (\n <SubheaderTypography Component=\"p\" className={styles['Banner__subheader']}>\n {subheader}\n </SubheaderTypography>\n )}\n {hasReactNode(text) && (\n <Text Component=\"p\" className={styles['Banner__text']}>\n {text}\n </Text>\n )}\n {hasReactNode(actions) && React.Children.count(actions) > 0 && (\n <div className={styles['Banner__actions']}>{actions}</div>\n )}\n </div>\n </>\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":["React","Icon24Cancel","Icon24Chevron","Icon24DismissDark","Icon24DismissSubstract","classNames","hasReactNode","usePlatform","Platform","IconButton","Tappable","Headline","Subhead","Text","Title","Banner","mode","imageTheme","size","before","asideMode","header","subheader","text","children","background","actions","onDismiss","dismissLabel","className","getRootRef","restProps","platform","HeaderTypography","SubheaderTypography","IconDismissIOS","content","div","aria-hidden","Component","weight","level","Children","count","section","IOS","s","m","ref","activeMode","role","aria-label","onClick","hoverMode","hasActive"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,YAAY,EACZC,aAAa,EACbC,iBAAiB,EACjBC,sBAAsB,QACjB,mBAAmB;AAC1B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,QAAQ,QAAQ,kCAAkC;AAC3D,SAASC,OAAO,QAAQ,gCAAgC;AACxD,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,KAAK,QAAQ,4BAA4B;AAyElD;;CAEC,GACD,OAAO,IAAMC,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,WAAWzB;IAEjB,IAAM0B,mBAAmBf,SAAS,MAAMJ,QAAQH,QAAQ;IACxD,IAAMuB,sBAAsBhB,SAAS,MAAML,OAAOD,OAAO;IAEzD,IAAMuB,iBAAiBnB,SAAS,UAAUb,oBAAoBC,sBAAsB;IAEpF,IAAMgC,wBACJ,0CACGpB,SAAS,WAAWS,4BACnB,oBAACY;QAAIC,eAAAA,IAAW;QAACT,SAAS;OACvBJ,aAIJN,wBAAU,oBAACkB;QAAIR,SAAS;OAA6BV,uBAEtD,oBAACkB;QAAIR,SAAS;OACXvB,aAAae,yBACZ,oBAACY;QAAiBM,WAAU;QAAIC,QAAO;QAAIC,OAAOvB,SAAS,MAAM,MAAM,GAAG;OACvEG,SAGJf,aAAagB,4BACZ,oBAACY;QAAoBK,WAAU;QAAIV,SAAS;OACzCP,YAGJhB,aAAaiB,uBACZ,oBAACV;QAAK0B,WAAU;QAAIV,SAAS;OAC1BN,OAGJjB,aAAaoB,YAAY1B,MAAM0C,QAAQ,CAACC,KAAK,CAACjB,WAAW,mBACxD,oBAACW;QAAIR,SAAS;OAA8BH;IAMpD,qBACE,oBAACkB,mDACKb;QACJF,WAAWxB,yBAET2B,aAAaxB,SAASqC,GAAG,uBACzB7B,SAAS,qCACT;YACE8B,CAAC;YACDC,CAAC;QACH,CAAC,CAAC7B,KAAK,EACPF,SAAS,WAAWC,eAAe,kCACnCY;QAEFmB,KAAKlB;QAEJV,cAAc,yBACb,oBAACV;QACCmB,SAAS;QACToB,YAAYjB,aAAaxB,SAASqC,GAAG,GAAG,YAAY,YAAY;QAChEK,MAAK;OAEJd,uBAED,oBAACC;QAAIR,SAAS;qBACZ,oBAAC3B,uCAIL,oBAACmC;QAAIR,SAAS;OACXO,SAEAhB,cAAc,2BACb,oBAACiB;QAAIR,SAAS;qBACZ,oBAACpB;QACC0C,cAAYvB;QACZC,SAAS;QACTuB,SAASzB;QACT0B,WAAU;QACVC,WAAW,KAAK;OAEftB,aAAaxB,SAASqC,GAAG,iBAAG,oBAACV,sCAAoB,oBAAClC,mBAAe,GAK3E;AAGP,EAAE"}
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { DraggableProps } from '../useDraggable';
3
- type CellDraggerProps = DraggableProps & React.HTMLAttributes<HTMLElement>;
4
- export declare const CellDragger: ({ onDragStart, onDragMove, onDragEnd, className, ...restProps }: CellDraggerProps) => JSX.Element;
3
+ type CellDraggerProps = DraggableProps & Omit<React.HTMLAttributes<HTMLElement>, keyof DraggableProps>;
4
+ export declare const CellDragger: ({ onDragStart, onDragMove, onDragEnd, onClick, className, ...restProps }: CellDraggerProps) => JSX.Element;
5
5
  export {};
@@ -7,22 +7,26 @@ import { usePlatform } from "../../../hooks/usePlatform";
7
7
  import { Platform } from "../../../lib/platform";
8
8
  import { Touch } from "../../Touch/Touch";
9
9
  export var CellDragger = function(_param) {
10
- var onDragStart = _param.onDragStart, onDragMove = _param.onDragMove, onDragEnd = _param.onDragEnd, className = _param.className, restProps = _object_without_properties(_param, [
10
+ var onDragStart = _param.onDragStart, onDragMove = _param.onDragMove, onDragEnd = _param.onDragEnd, onClick = _param.onClick, className = _param.className, restProps = _object_without_properties(_param, [
11
11
  "onDragStart",
12
12
  "onDragMove",
13
13
  "onDragEnd",
14
+ "onClick",
14
15
  "className"
15
16
  ]);
16
17
  var platform = usePlatform();
17
- var onClick = React.useCallback(function(e) {
18
- e.preventDefault();
19
- }, []);
18
+ var handleClick = function(event) {
19
+ event.preventDefault();
20
+ if (onClick) {
21
+ onClick(event);
22
+ }
23
+ };
20
24
  return /*#__PURE__*/ React.createElement(Touch, _object_spread({
21
25
  className: classNames("vkuiCellDragger", className),
22
26
  onStart: onDragStart,
23
27
  onMoveY: onDragMove,
24
28
  onEnd: onDragEnd,
25
- onClick: onClick
29
+ onClick: handleClick
26
30
  }, restProps), platform === Platform.IOS ? /*#__PURE__*/ React.createElement(Icon24ReorderIos, null) : /*#__PURE__*/ React.createElement(Icon24Reorder, null));
27
31
  };
28
32
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Cell/CellDragger/CellDragger.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon24Reorder, Icon24ReorderIos } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../../hooks/usePlatform';\nimport { Platform } from '../../../lib/platform';\nimport { Touch } from '../../Touch/Touch';\nimport { DraggableProps } from '../useDraggable';\nimport styles from './CellDragger.module.css';\n\ntype CellDraggerProps = DraggableProps & React.HTMLAttributes<HTMLElement>;\n\nexport const CellDragger = ({\n onDragStart,\n onDragMove,\n onDragEnd,\n className,\n ...restProps\n}: CellDraggerProps) => {\n const platform = usePlatform();\n\n const onClick = React.useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n }, []);\n\n return (\n <Touch\n className={classNames(styles['CellDragger'], className)}\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={onClick}\n {...restProps}\n >\n {platform === Platform.IOS ? <Icon24ReorderIos /> : <Icon24Reorder />}\n </Touch>\n );\n};\n"],"names":["React","Icon24Reorder","Icon24ReorderIos","classNames","usePlatform","Platform","Touch","CellDragger","onDragStart","onDragMove","onDragEnd","className","restProps","platform","onClick","useCallback","e","preventDefault","onStart","onMoveY","onEnd","IOS"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,EAAEC,gBAAgB,QAAQ,mBAAmB;AACnE,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,KAAK,QAAQ,oBAAoB;AAM1C,OAAO,IAAMC,cAAc,iBAMH;QALtBC,qBAAAA,aACAC,oBAAAA,YACAC,mBAAAA,WACAC,mBAAAA,WACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWT;IAEjB,IAAMU,UAAUd,MAAMe,WAAW,CAAC,SAACC,GAAwB;QACzDA,EAAEC,cAAc;IAClB,GAAG,EAAE;IAEL,qBACE,oBAACX;QACCK,WAAWR,8BAAkCQ;QAC7CO,SAASV;QACTW,SAASV;QACTW,OAAOV;QACPI,SAASA;OACLF,YAEHC,aAAaR,SAASgB,GAAG,iBAAG,oBAACnB,wCAAsB,oBAACD,oBAAgB;AAG3E,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/Cell/CellDragger/CellDragger.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon24Reorder, Icon24ReorderIos } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../../hooks/usePlatform';\nimport { Platform } from '../../../lib/platform';\nimport { Touch } from '../../Touch/Touch';\nimport { DraggableProps } from '../useDraggable';\nimport styles from './CellDragger.module.css';\n\ntype CellDraggerProps = DraggableProps &\n Omit<React.HTMLAttributes<HTMLElement>, keyof DraggableProps>;\n\nexport const CellDragger = ({\n onDragStart,\n onDragMove,\n onDragEnd,\n onClick,\n className,\n ...restProps\n}: CellDraggerProps) => {\n const platform = usePlatform();\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n if (onClick) {\n onClick(event);\n }\n };\n\n return (\n <Touch\n className={classNames(styles['CellDragger'], className)}\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={handleClick}\n {...restProps}\n >\n {platform === Platform.IOS ? <Icon24ReorderIos /> : <Icon24Reorder />}\n </Touch>\n );\n};\n"],"names":["React","Icon24Reorder","Icon24ReorderIos","classNames","usePlatform","Platform","Touch","CellDragger","onDragStart","onDragMove","onDragEnd","onClick","className","restProps","platform","handleClick","event","preventDefault","onStart","onMoveY","onEnd","IOS"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,EAAEC,gBAAgB,QAAQ,mBAAmB;AACnE,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,KAAK,QAAQ,oBAAoB;AAO1C,OAAO,IAAMC,cAAc,iBAOH;QANtBC,qBAAAA,aACAC,oBAAAA,YACAC,mBAAAA,WACAC,iBAAAA,SACAC,mBAAAA,WACGC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWV;IAEjB,IAAMW,cAAc,SAACC,OAAyC;QAC5DA,MAAMC,cAAc;QACpB,IAAIN,SAAS;YACXA,QAAQK;QACV,CAAC;IACH;IAEA,qBACE,oBAACV;QACCM,WAAWT,8BAAkCS;QAC7CM,SAASV;QACTW,SAASV;QACTW,OAAOV;QACPC,SAASI;OACLF,YAEHC,aAAaT,SAASgB,GAAG,iBAAG,oBAACnB,wCAAsB,oBAACD,oBAAgB;AAG3E,EAAE"}
@@ -2,9 +2,9 @@ import * as React from 'react';
2
2
  import { TouchEvent } from '../Touch/Touch';
3
3
  import { CellProps } from './Cell';
4
4
  export interface DraggableProps {
5
- onDragStart: () => void;
6
- onDragEnd: () => void;
7
- onDragMove: (e: TouchEvent) => void;
5
+ onDragStart(event: TouchEvent): void;
6
+ onDragEnd(event: TouchEvent): void;
7
+ onDragMove(event: TouchEvent): void;
8
8
  }
9
9
  interface UseDraggableProps extends DraggableProps {
10
10
  dragging: boolean;
@@ -8,12 +8,14 @@ export var useDraggable = function(param) {
8
8
  var _React_useState3 = _sliced_to_array(React.useState(0), 2), dragEndIndex = _React_useState3[0], setDragEndIndex = _React_useState3[1];
9
9
  var _React_useState4 = _sliced_to_array(React.useState(0), 2), dragShift = _React_useState4[0], setDragShift = _React_useState4[1];
10
10
  var _React_useState5 = _sliced_to_array(React.useState(undefined), 2), dragDirection = _React_useState5[0], setDragDirection = _React_useState5[1];
11
- var onDragStart = function() {
11
+ var onDragStart = function(event) {
12
12
  var _rootEl_parentElement;
13
13
  var rootEl = rootElRef.current;
14
14
  if (!rootEl) {
15
15
  return;
16
16
  }
17
+ event.originalEvent.stopPropagation();
18
+ event.originalEvent.preventDefault();
17
19
  setDragging(true);
18
20
  var _siblings = [];
19
21
  if ((_rootEl_parentElement = rootEl.parentElement) === null || _rootEl_parentElement === void 0 ? void 0 : _rootEl_parentElement.childNodes) {
@@ -25,14 +27,15 @@ export var useDraggable = function(param) {
25
27
  setSiblings(_siblings);
26
28
  setDragShift(0);
27
29
  };
28
- var onDragMove = function(e) {
29
- e.originalEvent.preventDefault();
30
+ var onDragMove = function(event) {
31
+ event.originalEvent.stopPropagation();
32
+ event.originalEvent.preventDefault();
30
33
  var rootEl = rootElRef.current;
31
34
  if (rootEl) {
32
- rootEl.style.transform = "translateY(".concat(e.shiftY, "px)");
35
+ rootEl.style.transform = "translateY(".concat(event.shiftY, "px)");
33
36
  var rootGesture = rootEl.getBoundingClientRect();
34
- setDragDirection(dragShift - e.shiftY < 0 ? "down" : "up");
35
- setDragShift(e.shiftY);
37
+ setDragDirection(dragShift - event.shiftY < 0 ? "down" : "up");
38
+ setDragShift(event.shiftY);
36
39
  setDragEndIndex(dragStartIndex);
37
40
  siblings.forEach(function(sibling, siblingIndex) {
38
41
  var siblingGesture = sibling.getBoundingClientRect();
@@ -67,7 +70,9 @@ export var useDraggable = function(param) {
67
70
  });
68
71
  }
69
72
  };
70
- var onDragEnd = function() {
73
+ var onDragEnd = function(event) {
74
+ event.originalEvent.stopPropagation();
75
+ event.originalEvent.preventDefault();
71
76
  var _ref = [
72
77
  dragStartIndex,
73
78
  dragEndIndex
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Cell/useDraggable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { TouchEvent } from '../Touch/Touch';\nimport { CellProps } from './Cell';\n\nexport interface DraggableProps {\n onDragStart: () => void;\n onDragEnd: () => void;\n onDragMove: (e: TouchEvent) => void;\n}\n\ninterface UseDraggableProps extends DraggableProps {\n dragging: boolean;\n}\n\nexport const useDraggable = <T extends HTMLElement>({\n rootElRef,\n onDragFinish,\n}: Pick<CellProps, 'onDragFinish'> & {\n rootElRef: React.MutableRefObject<T | null>;\n}) => {\n const [dragging, setDragging] = React.useState<boolean>(false);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>([]);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(0);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(0);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up' | undefined>(undefined);\n\n const onDragStart = () => {\n const rootEl = rootElRef.current;\n if (!rootEl) {\n return;\n }\n\n setDragging(true);\n\n let _siblings: HTMLElement[] = [];\n if (rootEl.parentElement?.childNodes) {\n _siblings = Array.from(rootEl.parentElement.children) as HTMLElement[];\n }\n const idx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(idx);\n setDragEndIndex(idx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n\n const rootEl = rootElRef.current;\n\n if (rootEl) {\n rootEl.style.transform = `translateY(${e.shiftY}px)`;\n const rootGesture = rootEl.getBoundingClientRect();\n\n setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');\n setDragShift(e.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const siblingGesture = sibling.getBoundingClientRect();\n const siblingHalfHeight = siblingGesture.height / 2;\n\n const rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;\n const rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;\n\n if (dragStartIndex < siblingIndex) {\n if (rootOverSibling) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootUnderSibling && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootUnderSibling) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootOverSibling && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n }\n };\n\n const onDragEnd = () => {\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = '';\n });\n\n setSiblings([]);\n setDragEndIndex(0);\n setDragStartIndex(0);\n setDragDirection(undefined);\n setDragShift(0);\n\n setDragging(false);\n\n onDragFinish && onDragFinish({ from, to });\n };\n\n const useDraggableProps: UseDraggableProps = {\n onDragStart,\n onDragMove,\n onDragEnd,\n dragging,\n };\n\n return useDraggableProps;\n};\n"],"names":["React","useDraggable","rootElRef","onDragFinish","useState","dragging","setDragging","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","undefined","dragDirection","setDragDirection","onDragStart","rootEl","current","_siblings","parentElement","childNodes","Array","from","children","idx","indexOf","onDragMove","e","originalEvent","preventDefault","style","transform","shiftY","rootGesture","getBoundingClientRect","forEach","sibling","siblingIndex","siblingGesture","siblingHalfHeight","height","rootOverSibling","bottom","top","rootUnderSibling","onDragEnd","to","useDraggableProps"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Cell/useDraggable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { TouchEvent } from '../Touch/Touch';\nimport { CellProps } from './Cell';\n\nexport interface DraggableProps {\n onDragStart(event: TouchEvent): void;\n onDragEnd(event: TouchEvent): void;\n onDragMove(event: TouchEvent): void;\n}\n\ninterface UseDraggableProps extends DraggableProps {\n dragging: boolean;\n}\n\nexport const useDraggable = <T extends HTMLElement>({\n rootElRef,\n onDragFinish,\n}: Pick<CellProps, 'onDragFinish'> & {\n rootElRef: React.MutableRefObject<T | null>;\n}) => {\n const [dragging, setDragging] = React.useState<boolean>(false);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>([]);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(0);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(0);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up' | undefined>(undefined);\n\n const onDragStart = (event: TouchEvent) => {\n const rootEl = rootElRef.current;\n if (!rootEl) {\n return;\n }\n event.originalEvent.stopPropagation();\n event.originalEvent.preventDefault();\n\n setDragging(true);\n\n let _siblings: HTMLElement[] = [];\n if (rootEl.parentElement?.childNodes) {\n _siblings = Array.from(rootEl.parentElement.children) as HTMLElement[];\n }\n const idx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(idx);\n setDragEndIndex(idx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (event: TouchEvent) => {\n event.originalEvent.stopPropagation();\n event.originalEvent.preventDefault();\n\n const rootEl = rootElRef.current;\n\n if (rootEl) {\n rootEl.style.transform = `translateY(${event.shiftY}px)`;\n const rootGesture = rootEl.getBoundingClientRect();\n\n setDragDirection(dragShift - event.shiftY < 0 ? 'down' : 'up');\n setDragShift(event.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const siblingGesture = sibling.getBoundingClientRect();\n const siblingHalfHeight = siblingGesture.height / 2;\n\n const rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;\n const rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;\n\n if (dragStartIndex < siblingIndex) {\n if (rootOverSibling) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootUnderSibling && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootUnderSibling) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootOverSibling && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n }\n };\n\n const onDragEnd = (event: TouchEvent) => {\n event.originalEvent.stopPropagation();\n event.originalEvent.preventDefault();\n\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = '';\n });\n\n setSiblings([]);\n setDragEndIndex(0);\n setDragStartIndex(0);\n setDragDirection(undefined);\n setDragShift(0);\n\n setDragging(false);\n\n onDragFinish && onDragFinish({ from, to });\n };\n\n const useDraggableProps: UseDraggableProps = {\n onDragStart,\n onDragMove,\n onDragEnd,\n dragging,\n };\n\n return useDraggableProps;\n};\n"],"names":["React","useDraggable","rootElRef","onDragFinish","useState","dragging","setDragging","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","undefined","dragDirection","setDragDirection","onDragStart","event","rootEl","current","originalEvent","stopPropagation","preventDefault","_siblings","parentElement","childNodes","Array","from","children","idx","indexOf","onDragMove","style","transform","shiftY","rootGesture","getBoundingClientRect","forEach","sibling","siblingIndex","siblingGesture","siblingHalfHeight","height","rootOverSibling","bottom","top","rootUnderSibling","onDragEnd","to","useDraggableProps"],"mappings":"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"}
@@ -76,7 +76,7 @@ var chipsSelectDefaultProps = _object_spread_props(_object_spread({}, chipsInput
76
76
  var showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);
77
77
  var handleFocus = function(e) {
78
78
  setOpened(true);
79
- setFocusedOptionIndex(0);
79
+ setFocusedOptionIndex(null);
80
80
  onFocus(e);
81
81
  };
82
82
  var handleClickOutside = function(e) {
@@ -119,15 +119,13 @@ var chipsSelectDefaultProps = _object_spread_props(_object_spread({}, chipsInput
119
119
  setFocusedOptionIndex(index);
120
120
  };
121
121
  var focusOption = function(nextIndex, type) {
122
- var index = typeof nextIndex !== "number" ? -1 : nextIndex;
122
+ var index = nextIndex === null ? -1 : nextIndex;
123
123
  if (type === FOCUS_ACTION_NEXT) {
124
124
  index = index + 1;
125
125
  } else if (type === FOCUS_ACTION_PREV) {
126
126
  index = index - 1;
127
127
  }
128
- if (focusedOptionIndex != null) {
129
- focusOptionByIndex(index, focusedOptionIndex);
130
- }
128
+ focusOptionByIndex(index, focusedOptionIndex);
131
129
  };
132
130
  var handleKeyDown = function(e) {
133
131
  onKeyDown(e);
@@ -182,21 +180,6 @@ var chipsSelectDefaultProps = _object_spread_props(_object_spread({}, chipsInput
182
180
  filteredOptions,
183
181
  setFocusedOption
184
182
  ]);
185
- React.useEffect(function() {
186
- var index = focusedOption ? filteredOptions.findIndex(function(param) {
187
- var value = param.value;
188
- return value === focusedOption.value;
189
- }) : -1;
190
- if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {
191
- setFocusedOption(filteredOptions[0]);
192
- }
193
- }, [
194
- filteredOptions,
195
- focusedOption,
196
- showCreatable,
197
- closeAfterSelect,
198
- setFocusedOption
199
- ]);
200
183
  useGlobalEventListener(document, "click", handleClickOutside);
201
184
  var renderChipWrapper = function(renderChipProps) {
202
185
  if (renderChipProps === undefined) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useChipsSelect } from '../../hooks/useChipsSelect';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipOption, ChipValue, RenderChip } from '../Chip/Chip';\nimport { ChipsInputProps } from '../ChipsInput/ChipsInput';\nimport { ChipsInputBase, chipsInputDefaultProps } from '../ChipsInputBase/ChipsInputBase';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './ChipsSelect.module.css';\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, 'after'> {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<ChipsInputProps<Option>, 'getOptionLabel'>['getOptionLabel'],\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\ntype FocusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: FocusActionType = 'next';\nconst FOCUS_ACTION_PREV: FocusActionType = 'prev';\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(props: ChipsSelectProps<Option>) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n icon,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement | undefined>(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue,\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (e.target !== rootRef.current && !rootRef.current?.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened && focusedOptionIndex != null) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect, setFocusedOption]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option> | undefined) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (e: React.MouseEvent | undefined, value: ChipValue | undefined) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes('top');\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement],\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNames(\n styles['ChipsSelect'],\n opened &&\n (isPopperDirectionTop\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down']),\n className,\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles['ChipsSelect__dropdown']}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? 'Скрыть' : 'Развернуть'}\n onClick={toggleOpened}\n >\n {icon ?? <DropdownIcon className={styles['ChipsSelect__icon']} opened={opened} />}\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles['ChipsSelect__empty']}>{emptyText}</Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption && getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue!(selectedOption) === getOptionValue!(option);\n });\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","noop","useChipsSelect","useExternRef","useGlobalEventListener","useDOM","defaultFilterFn","ChipsInputBase","chipsInputDefaultProps","CustomSelectDropdown","CustomSelectOption","DropdownIcon","FormField","IconButton","Footnote","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","icon","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","toggleOpened","prevOpened","role","aria-disabled","aria-readonly","readOnly","after","activeMode","hoverMode","aria-label","onClick","onInputChange","targetRef","onMouseLeave","sameWidth","forcePortal","hovered","onMouseDown","onMouseEnter","map","label","selected","find","selectedOption","Fragment","children"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useChipsSelect } from '../../hooks/useChipsSelect';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipOption, ChipValue, RenderChip } from '../Chip/Chip';\nimport { ChipsInputProps } from '../ChipsInput/ChipsInput';\nimport { ChipsInputBase, chipsInputDefaultProps } from '../ChipsInputBase/ChipsInputBase';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './ChipsSelect.module.css';\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, 'after'> {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<ChipsInputProps<Option>, 'getOptionLabel'>['getOptionLabel'],\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\ntype FocusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: FocusActionType = 'next';\nconst FOCUS_ACTION_PREV: FocusActionType = 'prev';\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(props: ChipsSelectProps<Option>) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n icon,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement | undefined>(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue,\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(null);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (e.target !== rootRef.current && !rootRef.current?.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number | null) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened && focusedOptionIndex != null) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option> | undefined) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (e: React.MouseEvent | undefined, value: ChipValue | undefined) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes('top');\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement],\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNames(\n styles['ChipsSelect'],\n opened &&\n (isPopperDirectionTop\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down']),\n className,\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles['ChipsSelect__dropdown']}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? 'Скрыть' : 'Развернуть'}\n onClick={toggleOpened}\n >\n {icon ?? <DropdownIcon className={styles['ChipsSelect__icon']} opened={opened} />}\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles['ChipsSelect__empty']}>{emptyText}</Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption && getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue!(selectedOption) === getOptionValue!(option);\n });\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","noop","useChipsSelect","useExternRef","useGlobalEventListener","useDOM","defaultFilterFn","ChipsInputBase","chipsInputDefaultProps","CustomSelectDropdown","CustomSelectOption","DropdownIcon","FormField","IconButton","Footnote","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","icon","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","renderChipWrapper","renderChipProps","onRemoveWrapper","value","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","toggleOpened","prevOpened","role","aria-disabled","aria-readonly","readOnly","after","activeMode","hoverMode","aria-label","onClick","onInputChange","targetRef","onMouseLeave","sameWidth","forcePortal","hovered","onMouseDown","onMouseEnter","map","label","selected","find","selectedOption","Fragment","children"],"mappings":";;;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,cAAc,QAAQ,6BAA6B;AAC5D,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,sBAAsB,QAAQ,qCAAqC;AAC5E,SAASC,MAAM,QAAQ,gBAAgB;AAEvC,SAASC,eAAe,QAAQ,mBAAmB;AAGnD,SAASC,cAAc,EAAEC,sBAAsB,QAAQ,mCAAmC;AAC1F,SAASC,oBAAoB,QAAQ,+CAA+C;AACpF,SACEC,kBAAkB,QAEb,2CAA2C;AAClD,SAASC,YAAY,QAAQ,+BAA+B;AAC5D,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,QAAQ,QAAQ,kCAAkC;AAqD3D,IAAMC,oBAAqC;AAC3C,IAAMC,oBAAqC;AAE3C,IAAMC,0BAAiD,wCAClDT;IACHU,WAAW;IACXC,eAAe;IACfC,eAAenB;IACfoB,WAAW,KAAK;IAChBC,UAAU,KAAK;IACfC,cAAc,IAAI;IAClBC,kBAAkB,IAAI;IACtBC,SAAS,EAAE;IACXC,UAAUpB;IACVqB,cAAAA,SAAAA,aAAaC,KAAK,EAAE;QAClB,qBAAO,oBAAClB,oBAAuBkB;IACjC;;AAGF;;CAEC,GACD,OAAO,IAAMC,cAAc,SAA4BD,OAAoC;IACzF,IAAME,mBAAmB,mBAAKb,yBAA4BW;IAC1D,IACEG,QA8BED,iBA9BFC,OACAC,UA6BEF,iBA7BFE,SACAC,YA4BEH,iBA5BFG,WACAC,YA2BEJ,iBA3BFI,WACAZ,WA0BEQ,iBA1BFR,UACAK,eAyBEG,iBAzBFH,cACAT,YAwBEY,iBAxBFZ,WACAiB,SAuBEL,iBAvBFK,QACAC,aAsBEN,iBAtBFM,YACAC,WAqBEP,iBArBFO,UACAC,cAoBER,iBApBFQ,aACAC,WAmBET,iBAnBFS,UACAC,iBAkBEV,iBAlBFU,gBACAC,iBAiBEX,iBAjBFW,gBACAlB,eAgBEO,iBAhBFP,cACAmB,mBAeEZ,iBAfFY,kBACAC,aAcEb,iBAdFa,YACAC,iBAaEd,iBAbFc,gBACAvB,YAYES,iBAZFT,WACAK,WAWEI,iBAXFJ,UACAmB,aAUEf,iBAVFe,YACA1B,gBASEW,iBATFX,eACAK,mBAQEM,iBARFN,kBACAJ,gBAOEU,iBAPFV,eACA0B,SAMEhB,iBANFgB,QACAC,OAKEjB,iBALFiB,MACAtB,UAIEK,iBAJFL,SACAuB,mBAGElB,iBAHFkB,kBACAC,sBAEEnB,iBAFFmB,qBACGC,uCACDpB;QA9BFC;QACAC;QACAC;QACAC;QACAZ;QACAK;QACAT;QACAiB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAlB;QACAmB;QACAC;QACAC;QACAvB;QACAK;QACAmB;QACA1B;QACAK;QACAJ;QACA0B;QACAC;QACAtB;QACAuB;QACAC;;IAIF,IAAM,AAAEE,WAAa9C,SAAb8C;IAER,IAA8CpD,mCAAAA,MAAMqD,QAAQ,CAAwBC,gBAA7EC,kBAAuCvD,oBAAtBwD,qBAAsBxD;IAE9C,IAAMyD,eAAezD,MAAM0D,MAAM,CAAiB,IAAI;IACtD,IAAMC,UAAUvD,aAAagC;IAC7B,IAcIjC,kBAAAA,eAAe4B,mBAbjB6B,aAaEzD,gBAbFyD,8CAaEzD,gBAZF0D,iBAAAA,+DAAkB,EAAE,oCACpBC,SAWE3D,gBAXF2D,QACAC,YAUE5D,gBAVF4D,WACAC,qBASE7D,gBATF6D,oBACAC,kBAQE9D,gBARF8D,iBACAC,YAOE/D,gBAPF+D,WACAC,oBAMEhE,gBANFgE,mBACAC,aAKEjE,gBALFiE,YACAC,gBAIElE,gBAJFkE,eACAC,mBAGEnE,gBAHFmE,kBACAC,qBAEEpE,gBAFFoE,oBACAC,wBACErE,gBADFqE;IAGF,IAAMC,gBAAgBC,QACpBpD,aAAaF,iBAAiB,CAAC6C,gBAAgBU,MAAM,IAAIf;IAG3D,IAAMgB,cAAc,SAACC,GAA0C;QAC7Dd,UAAU,IAAI;QACdS,sBAAsB,IAAI;QAC1BvC,QAAS4C;IACX;IAEA,IAAMC,qBAAqB,SAACD,GAAkB;YACPlB;QAArC,IAAIkB,EAAEE,MAAM,KAAKpB,QAAQqB,OAAO,IAAI,EAACrB,CAAAA,mBAAAA,QAAQqB,OAAO,cAAfrB,8BAAAA,KAAAA,IAAAA,iBAAiBsB,SAASJ,EAAEE,MAAM,IAAW;YAChFhB,UAAU,KAAK;QACjB,CAAC;IACH;IAEA,IAAMmB,qBAAqBlF,MAAM0D,MAAM,CAAgB,EAAE,EAAEsB,OAAO;IAElE,IAAMG,kBAAkB,SAACC,OAAkC;YAAnBC,0EAAS,KAAK;QACpD,IAAMC,WAAW7B,aAAauB,OAAO;QACrC,IAAMO,OAAOL,kBAAkB,CAACE,MAAM;QAEtC,IAAI,CAACG,QAAQ,CAACD,UAAU;YACtB;QACF,CAAC;QAED,IAAME,iBAAiBF,SAASG,YAAY;QAC5C,IAAMC,YAAYJ,SAASI,SAAS;QACpC,IAAMC,UAAUJ,KAAKK,SAAS;QAC9B,IAAMC,aAAaN,KAAKE,YAAY;QAEpC,IAAIJ,QAAQ;YACVC,SAASI,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DJ,SAASI,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BJ,SAASI,SAAS,GAAGC;QACvB,CAAC;IACH;IAEA,IAAMG,qBAAqB,SAACV,OAAeW,UAA4B;QACrE,IAAM,AAAEpB,SAAWV,gBAAXU;QAER,IAAIS,QAAQ,GAAG;YACbA,QAAQT,SAAS;QACnB,OAAO,IAAIS,SAAST,QAAQ;YAC1BS,QAAQ;QACV,CAAC;QAED,IAAIA,UAAUW,UAAU;YACtB;QACF,CAAC;QAEDZ,gBAAgBC;QAChBZ,sBAAsBY;IACxB;IAEA,IAAMY,cAAc,SAACC,WAA0BC,MAA0B;QACvE,IAAId,QAAQa,cAAc,IAAI,GAAG,CAAC,IAAIA,SAAS;QAE/C,IAAIC,SAASlF,mBAAmB;YAC9BoE,QAAQA,QAAQ;QAClB,OAAO,IAAIc,SAASjF,mBAAmB;YACrCmE,QAAQA,QAAQ;QAClB,CAAC;QAEDU,mBAAmBV,OAAOb;IAC5B;IAEA,IAAM4B,gBAAgB,SAACtB,GAA6C;QAClE3C,UAAW2C;QAEX,IAAIA,EAAEuB,GAAG,KAAK,aAAa,CAACvB,EAAEwB,gBAAgB,EAAE;YAC9CxB,EAAEyB,cAAc;YAEhB,IAAI,CAACxC,QAAQ;gBACXC,UAAU,IAAI;gBACdS,sBAAsB;YACxB,OAAO;gBACLwB,YAAYzB,oBAAoBtD;YAClC,CAAC;QACH,CAAC;QAED,IAAI4D,EAAEuB,GAAG,KAAK,eAAe,CAACvB,EAAEwB,gBAAgB,EAAE;YAChDxB,EAAEyB,cAAc;YAEhB,IAAI,CAACxC,QAAQ;gBACXC,UAAU,IAAI;gBACdS,sBAAsB;YACxB,OAAO;gBACLwB,YAAYzB,oBAAoBvD;YAClC,CAAC;QACH,CAAC;QAED,IAAI6D,EAAEuB,GAAG,KAAK,WAAW,CAACvB,EAAEwB,gBAAgB,IAAIvC,UAAUS,sBAAsB,IAAI,EAAE;YACpF,IAAMgC,SAAStC,eAAe,CAACM,mBAAmB;YAElD,IAAIgC,QAAQ;gBACVlF,cAAewD,GAAG0B;gBAElB,IAAI,CAAC1B,EAAEwB,gBAAgB,EAAE;oBACvBnC,UAAUqC;oBACV/B,sBAAsB,IAAI;oBAC1BJ;oBACA3C,oBAAoBsC,UAAU,KAAK;oBACnCc,EAAEyB,cAAc;gBAClB,CAAC;YACH,OAAO,IAAI,CAAChF,WAAW;gBACrBuD,EAAEyB,cAAc;YAClB,CAAC;QACH,CAAC;QAED,IAAI;YAAC;YAAU;SAAM,CAACE,QAAQ,CAAC3B,EAAEuB,GAAG,KAAK,CAACvB,EAAEwB,gBAAgB,IAAIvC,QAAQ;YACtEC,UAAU,KAAK;QACjB,CAAC;IACH;IAEA/D,MAAMyG,SAAS,CAAC,WAAM;QACpB,IAAIlC,sBAAsB,IAAI,IAAIN,eAAe,CAACM,mBAAmB,EAAE;YACrED,iBAAiBL,eAAe,CAACM,mBAAmB;QACtD,OAAO,IAAIA,uBAAuB,IAAI,IAAIA,uBAAuB,GAAG;YAClED,iBAAiB,IAAI;QACvB,CAAC;IACH,GAAG;QAACC;QAAoBN;QAAiBK;KAAiB;IAE1DjE,uBAAuB+C,UAAU,SAAS0B;IAE1C,IAAM4B,oBAAoB,SAACC,iBAAoD;QAC7E,IAAIA,oBAAoBrD,WAAW;YACjC,OAAO,IAAI;QACb,CAAC;QACD,IAAMsD,kBAAkB,SAAC/B,GAAiCgC,OAAiC;gBAIzFF;YAHA9B,cAAAA,eAAAA,KAAAA,IAAAA,EAAGyB,cAAc;YACjBzB,cAAAA,eAAAA,KAAAA,IAAAA,EAAGiC,eAAe;YAElBH,CAAAA,4BAAAA,gBAAgBI,QAAQ,cAAxBJ,uCAAAA,KAAAA,IAAAA,0BAAAA,KAAAA,iBAA2B9B,GAAGgC;QAChC;QAEA,OAAOjE,WAAY,wCACd+D;YACHI,UAAUH;;IAEd;IAEA,IAAMI,uBAAuBzD,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAiBiD,QAAQ,CAAC;IAEvD,IAAMS,oBAAoBjH,MAAMkH,WAAW,CACzC,SAACC,WAA0B;QACzB3D,mBAAmB2D;IACrB,GACA;QAAC3D;KAAmB;IAGtB,IAAM4D,uBAAuBpH,MAAMkH,WAAW,CAAC,WAAM;QACnD1C,sBAAsB,IAAI;IAC5B,GAAG;QAACA;KAAsB;IAE1B,IAAM6C,eAAe,WAAM;QACzBtD,UAAU,SAACuD;mBAAe,CAACA;;IAC7B;IAEA,qBACE,wDACE,oBAACzG;QACCwB,YAAYsB;QACZ3B,OAAOA;QACPG,WAAWlC,8BAET6D,UACGkD,CAAAA,8EAEkC,AAAD,GACpC7E;QAEFG,UAAUA;QACViF,MAAK;QACLC,iBAAelF;QACfmF,iBAAetE,UAAUuE,QAAQ;QACjCC,qBACE,oBAAC7G;YACCqB,SAAS;YACTyF,YAAW;YACXC,WAAU;YACV,gCAAgC;YAChCC,cAAYhE,SAAS,WAAW,YAAY;YAC5CiE,SAASV;WAERrE,iBAAAA,kBAAAA,qBAAQ,oBAACpC;YAAauB,SAAS;YAA+B2B,QAAQA;UAAU;QAGrFf,QAAQA;qBAER,oBAACvC,wDACK2C;QACJX,UAAUA;QACVqE,OAAOhD;QACPf,YAAYc;QACZjB,kBAAkBA;QAClBD,gBAAgBA;QAChBD,gBAAgBA;QAChBG,YAAY8D;QACZzE,SAAS2C;QACT1C,WAAWiE;QACX5D,aAAaA;QACbH,QAAQA;QACRE,UAAUA;QACV0F,eAAe7D;UAGlBL,wBACC,oBAACpD;QACCuH,WAAWtE;QACXwD,WAAWtE;QACXY,cAAcA;QACdwD,mBAAmBA;QACnBiB,cAAcd;QACd7F,UAAUA;QACV4G,WAAWlF;QACXmF,aAAalF;OAEZuB,+BACC,oBAAC9D;QACC0H,SAAS9D,uBAAuB;QAChC+D,aAAatE;QACbuE,cAAc;mBAAM/D,sBAAsB;;OAEzCpD,gBAGJ,CAAC6C,CAAAA,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAiBU,MAAM,AAAD,KAAK,CAACF,iBAAiBtD,0BAC7C,oBAACJ;QAASoB,SAAS;OAAiChB,aAEpD8C,gBAAgBuE,GAAG,CAAC,SAACjC,QAAgBnB,OAAkB;QACrD,IAAMqD,QAAQ/F,eAAgB6D;QAC9B,IAAM8B,UACJhE,iBAAiB5B,eAAgB8D,YAAY9D,eAAgB4B;QAC/D,IAAMqE,WAAW7E,gBAAgB8E,IAAI,CAAC,SAACC,gBAA2B;YAChE,OAAOnG,eAAgBmG,oBAAoBnG,eAAgB8D;QAC7D;QACA,IAAMM,QAAQpE,eAAgB8D;QAE9B,qBACE,oBAACvG,MAAM6I,QAAQ;YAACzC,KAAK,AAAC,GAAkBS,OAAhB,OAAOA,sCAAP,SAAOA,MAAK,EAAC,KAAS,OAANA;WACrCjF,aAAc;YACb2E,QAAAA;YACA8B,SAAS3D,QAAQ2D;YACjBS,UAAUL;YACVC,UAAU,CAAC,CAACA;YACZrG,YAAY,SAACwC,GAAM;gBACjB,IAAIA,GAAG;oBACL,OAAQK,kBAAkB,CAACE,MAAM,GAAGP;gBACtC,CAAC;gBACD,OAAOvB;YACT;YACAgF,aAAa,SAACzD,GAAwC;gBACpDxD,0BAAAA,2BAAAA,KAAAA,IAAAA,cAAgBwD,GAAG0B;gBAEnB,IAAI,CAAC1B,EAAEwB,gBAAgB,EAAE;oBACvB5E,oBAAoBsC,UAAU,KAAK;oBACnCG,UAAUqC;oBACVnC;gBACF,CAAC;YACH;YACAmE,cAAc;uBAAM/D,sBAAsBY;;QAC5C;IAGN,EACD;AAKX,EAAE"}
@@ -269,12 +269,24 @@ var defaultOptions = [];
269
269
  var item = options[focusedOptionIndex];
270
270
  setNativeSelectValue(item === null || item === void 0 ? void 0 : item.value);
271
271
  close();
272
+ var shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && props.value !== nativeSelectValue && nativeSelectValue === (item === null || item === void 0 ? void 0 : item.value);
273
+ if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {
274
+ var _selectElRef_current;
275
+ var event = new Event("change", {
276
+ bubbles: true
277
+ });
278
+ (_selectElRef_current = selectElRef.current) === null || _selectElRef_current === void 0 ? void 0 : _selectElRef_current.dispatchEvent(event);
279
+ }
272
280
  }
273
281
  }, [
274
282
  close,
275
283
  focusedOptionIndex,
276
284
  isValidIndex,
277
- options
285
+ options,
286
+ selectElRef,
287
+ isControlledOutside,
288
+ props.value,
289
+ nativeSelectValue
278
290
  ]);
279
291
  var open = React.useCallback(function() {
280
292
  setOpened(true);
@@ -533,7 +545,9 @@ var defaultOptions = [];
533
545
  renderDropdown,
534
546
  renderOption
535
547
  ]);
536
- var clearButtonShown = allowClearButton && !opened && nativeSelectValue !== "";
548
+ var controlledValueSet = isControlledOutside && props.value !== "";
549
+ var uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== "";
550
+ var clearButtonShown = allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);
537
551
  var clearButton = React.useMemo(function() {
538
552
  if (!clearButtonShown) {
539
553
  return null;