@vkontakte/vkui 5.6.2 → 5.7.0

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 (165) hide show
  1. package/dist/cjs/components/ActionSheet/ActionSheet.d.ts +4 -4
  2. package/dist/cjs/components/ActionSheet/ActionSheet.js +14 -4
  3. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  5. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  6. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  7. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  8. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  9. package/dist/cjs/components/ActionSheet/types.d.ts +9 -0
  10. package/dist/cjs/components/ActionSheet/types.js.map +1 -1
  11. package/dist/cjs/components/Alert/Alert.d.ts +8 -3
  12. package/dist/cjs/components/Alert/Alert.js +16 -96
  13. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  14. package/dist/cjs/components/Alert/AlertAction.d.ts +8 -0
  15. package/dist/cjs/components/Alert/AlertAction.js +52 -0
  16. package/dist/cjs/components/Alert/AlertAction.js.map +1 -0
  17. package/dist/cjs/components/Alert/AlertActions.d.ts +8 -0
  18. package/dist/cjs/components/Alert/AlertActions.js +54 -0
  19. package/dist/cjs/components/Alert/AlertActions.js.map +1 -0
  20. package/dist/cjs/components/Alert/AlertTypography.d.ts +8 -0
  21. package/dist/cjs/components/Alert/AlertTypography.js +65 -0
  22. package/dist/cjs/components/Alert/AlertTypography.js.map +1 -0
  23. package/dist/cjs/components/NativeSelect/NativeSelect.js +3 -1
  24. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  25. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js +1 -1
  26. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  27. package/dist/cjs/components/Popover/Popover.js +1 -1
  28. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  29. package/dist/cjs/components/PopperArrow/PopperArrow.d.ts +1 -2
  30. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -1
  31. package/dist/cjs/components/Progress/Progress.d.ts +5 -1
  32. package/dist/cjs/components/Progress/Progress.js +18 -3
  33. package/dist/cjs/components/Progress/Progress.js.map +1 -1
  34. package/dist/cjs/components/Root/Root.js +4 -4
  35. package/dist/cjs/components/Search/Search.d.ts +5 -1
  36. package/dist/cjs/components/Search/Search.js +10 -4
  37. package/dist/cjs/components/Search/Search.js.map +1 -1
  38. package/dist/cjs/components/Snackbar/Snackbar.d.ts +5 -1
  39. package/dist/cjs/components/Snackbar/Snackbar.js +8 -3
  40. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  41. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  42. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +17 -10
  43. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  44. package/dist/cjs/components/Tooltip/Tooltip.d.ts +3 -37
  45. package/dist/cjs/components/Tooltip/Tooltip.js +14 -39
  46. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  47. package/dist/cjs/components/TooltipBase/TooltipBase.d.ts +49 -0
  48. package/dist/cjs/components/TooltipBase/TooltipBase.js +58 -0
  49. package/dist/cjs/components/TooltipBase/TooltipBase.js.map +1 -0
  50. package/dist/cjs/components/View/View.js +4 -4
  51. package/dist/cjs/components/View/ViewInfinite.js +4 -4
  52. package/dist/components/ActionSheet/ActionSheet.d.ts +4 -4
  53. package/dist/components/ActionSheet/ActionSheet.js +14 -4
  54. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  55. package/dist/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  56. package/dist/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  57. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  58. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  59. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  60. package/dist/components/ActionSheet/types.d.ts +9 -0
  61. package/dist/components/ActionSheet/types.js.map +1 -1
  62. package/dist/components/Alert/Alert.d.ts +8 -3
  63. package/dist/components/Alert/Alert.js +14 -94
  64. package/dist/components/Alert/Alert.js.map +1 -1
  65. package/dist/components/Alert/AlertAction.d.ts +8 -0
  66. package/dist/components/Alert/AlertAction.js +41 -0
  67. package/dist/components/Alert/AlertAction.js.map +1 -0
  68. package/dist/components/Alert/AlertActions.d.ts +8 -0
  69. package/dist/components/Alert/AlertActions.js +43 -0
  70. package/dist/components/Alert/AlertActions.js.map +1 -0
  71. package/dist/components/Alert/AlertTypography.d.ts +8 -0
  72. package/dist/components/Alert/AlertTypography.js +46 -0
  73. package/dist/components/Alert/AlertTypography.js.map +1 -0
  74. package/dist/components/NativeSelect/NativeSelect.js +3 -1
  75. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  76. package/dist/components/PopoutWrapper/PopoutWrapper.js +1 -1
  77. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  78. package/dist/components/Popover/Popover.js +1 -1
  79. package/dist/components/Popover/Popover.js.map +1 -1
  80. package/dist/components/PopperArrow/PopperArrow.d.ts +1 -2
  81. package/dist/components/PopperArrow/PopperArrow.js.map +1 -1
  82. package/dist/components/Progress/Progress.d.ts +5 -1
  83. package/dist/components/Progress/Progress.js +18 -3
  84. package/dist/components/Progress/Progress.js.map +1 -1
  85. package/dist/components/Root/Root.js +4 -4
  86. package/dist/components/Search/Search.d.ts +5 -1
  87. package/dist/components/Search/Search.js +10 -4
  88. package/dist/components/Search/Search.js.map +1 -1
  89. package/dist/components/Snackbar/Snackbar.d.ts +5 -1
  90. package/dist/components/Snackbar/Snackbar.js +8 -3
  91. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  92. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  93. package/dist/components/SubnavigationButton/SubnavigationButton.js +17 -10
  94. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  95. package/dist/components/Tooltip/Tooltip.d.ts +3 -37
  96. package/dist/components/Tooltip/Tooltip.js +15 -40
  97. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  98. package/dist/components/TooltipBase/TooltipBase.d.ts +49 -0
  99. package/dist/components/TooltipBase/TooltipBase.js +51 -0
  100. package/dist/components/TooltipBase/TooltipBase.js.map +1 -0
  101. package/dist/components/View/View.js +4 -4
  102. package/dist/components/View/ViewInfinite.js +4 -4
  103. package/dist/components.css +10 -9
  104. package/dist/components.css.map +1 -1
  105. package/dist/components.js.tmp +1490 -1085
  106. package/dist/cssm/components/ActionSheet/ActionSheet.d.ts +4 -4
  107. package/dist/cssm/components/ActionSheet/ActionSheet.js +12 -3
  108. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  109. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +0 -1
  110. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  111. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  112. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  113. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js +3 -2
  114. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  115. package/dist/cssm/components/ActionSheet/types.d.ts +9 -0
  116. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  117. package/dist/cssm/components/Alert/Alert.d.ts +8 -3
  118. package/dist/cssm/components/Alert/Alert.js +11 -87
  119. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  120. package/dist/cssm/components/Alert/Alert.module.css +36 -30
  121. package/dist/cssm/components/Alert/AlertAction.d.ts +8 -0
  122. package/dist/cssm/components/Alert/AlertAction.js +36 -0
  123. package/dist/cssm/components/Alert/AlertAction.js.map +1 -0
  124. package/dist/cssm/components/Alert/AlertActions.d.ts +8 -0
  125. package/dist/cssm/components/Alert/AlertActions.js +34 -0
  126. package/dist/cssm/components/Alert/AlertActions.js.map +1 -0
  127. package/dist/cssm/components/Alert/AlertTypography.d.ts +8 -0
  128. package/dist/cssm/components/Alert/AlertTypography.js +51 -0
  129. package/dist/cssm/components/Alert/AlertTypography.js.map +1 -0
  130. package/dist/cssm/components/Button/Button.module.css +1 -1
  131. package/dist/cssm/components/Link/Link.module.css +1 -0
  132. package/dist/cssm/components/NativeSelect/NativeSelect.js +3 -1
  133. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  134. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +1 -0
  135. package/dist/cssm/components/Popover/Popover.js +1 -1
  136. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  137. package/dist/cssm/components/Popover/Popover.module.css +4 -0
  138. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +1 -2
  139. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -1
  140. package/dist/cssm/components/Progress/Progress.d.ts +5 -1
  141. package/dist/cssm/components/Progress/Progress.js +17 -1
  142. package/dist/cssm/components/Progress/Progress.js.map +1 -1
  143. package/dist/cssm/components/Search/Search.d.ts +5 -1
  144. package/dist/cssm/components/Search/Search.js +8 -3
  145. package/dist/cssm/components/Search/Search.js.map +1 -1
  146. package/dist/cssm/components/Search/Search.module.css +4 -1
  147. package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
  148. package/dist/cssm/components/Snackbar/Snackbar.js +6 -2
  149. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  150. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  151. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +16 -10
  152. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  153. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +25 -4
  154. package/dist/cssm/components/Tooltip/Tooltip.d.ts +3 -37
  155. package/dist/cssm/components/Tooltip/Tooltip.js +13 -33
  156. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  157. package/dist/cssm/components/Tooltip/Tooltip.module.css +3 -53
  158. package/dist/cssm/components/TooltipBase/TooltipBase.d.ts +49 -0
  159. package/dist/cssm/components/TooltipBase/TooltipBase.js +37 -0
  160. package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -0
  161. package/dist/cssm/components/TooltipBase/TooltipBase.module.css +57 -0
  162. package/dist/vkui.css +10 -9
  163. package/dist/vkui.css.map +1 -1
  164. package/dist/vkui.js.tmp +1490 -1085
  165. package/package.json +1 -1
@@ -12,8 +12,12 @@ export interface SearchProps extends React.InputHTMLAttributes<HTMLInputElement>
12
12
  defaultValue?: string;
13
13
  iconAriaLabel?: string;
14
14
  clearAriaLabel?: string;
15
+ /**
16
+ * Удаляет отступы у компонента
17
+ */
18
+ noPadding?: boolean;
15
19
  }
16
20
  /**
17
21
  * @see https://vkcom.github.io/VKUI/#/Search
18
22
  */
19
- export declare const Search: ({ before, className, defaultValue, placeholder, after, getRef, icon, onIconClick, style, autoComplete, onChange: onChangeProp, value: valueProp, iconAriaLabel, clearAriaLabel, ...inputProps }: SearchProps) => React.JSX.Element;
23
+ export declare const Search: ({ before, className, defaultValue, placeholder, after, getRef, icon, onIconClick, style, autoComplete, onChange: onChangeProp, value: valueProp, iconAriaLabel, clearAriaLabel, noPadding, ...inputProps }: SearchProps) => React.JSX.Element;
@@ -8,13 +8,14 @@ import { useExternRef } from '../../hooks/useExternRef';
8
8
  import { usePlatform } from '../../hooks/usePlatform';
9
9
  import { SizeType } from '../../lib/adaptivity';
10
10
  import { Platform } from '../../lib/platform';
11
+ import { touchEnabled } from '../../lib/touch';
11
12
  import { Button } from '../Button/Button';
12
13
  import { IconButton } from '../IconButton/IconButton';
13
14
  import { Headline } from '../Typography/Headline/Headline';
14
15
  import styles from './Search.module.css';
15
16
  /**
16
17
  * @see https://vkcom.github.io/VKUI/#/Search
17
- */ export const Search = ({ before = /*#__PURE__*/ React.createElement(Icon16SearchOutline, null), className, defaultValue = '', placeholder = 'Поиск', after = 'Отмена', getRef, icon, onIconClick = noop, style, autoComplete = 'off', onChange: onChangeProp, value: valueProp, iconAriaLabel, clearAriaLabel = 'Очистить', ...inputProps })=>{
18
+ */ export const Search = ({ before = /*#__PURE__*/ React.createElement(Icon16SearchOutline, null), className, defaultValue = '', placeholder = 'Поиск', after = 'Отмена', getRef, icon, onIconClick = noop, style, autoComplete = 'off', onChange: onChangeProp, value: valueProp, iconAriaLabel, clearAriaLabel = 'Очистить', noPadding, ...inputProps })=>{
18
19
  const inputRef = useExternRef(getRef);
19
20
  const { value: isFocused, setTrue: setFocusedTrue, setFalse: setFocusedFalse } = useBooleanState(false);
20
21
  const [value, onChange] = useEnsuredControl({
@@ -49,11 +50,15 @@ import styles from './Search.module.css';
49
50
  const onIconCancelClickStart = React.useCallback((e)=>{
50
51
  e.originalEvent.preventDefault();
51
52
  inputRef.current?.focus();
53
+ if (touchEnabled()) {
54
+ onCancel();
55
+ }
52
56
  }, [
53
- inputRef
57
+ inputRef,
58
+ onCancel
54
59
  ]);
55
60
  return /*#__PURE__*/ React.createElement("div", {
56
- className: classNames('vkuiInternalSearch', styles['Search'], sizeY === 'none' && styles['Search--sizeY-none'], sizeY === SizeType.COMPACT && styles['Search--sizeY-compact'], isFocused && styles['Search--focused'], value && styles['Search--has-value'], after && styles['Search--has-after'], icon && styles['Search--has-icon'], inputProps.disabled && styles['Search--disabled'], className),
61
+ className: classNames('vkuiInternalSearch', styles['Search'], sizeY === 'none' && styles['Search--sizeY-none'], sizeY === SizeType.COMPACT && styles['Search--sizeY-compact'], isFocused && styles['Search--focused'], value && styles['Search--has-value'], after && styles['Search--has-after'], icon && styles['Search--has-icon'], inputProps.disabled && styles['Search--disabled'], !noPadding && styles['Search--withPadding'], className),
57
62
  style: style
58
63
  }, /*#__PURE__*/ React.createElement("div", {
59
64
  className: styles['Search__field']
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Search/Search.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Clear, Icon16SearchOutline, Icon24Cancel } from '@vkontakte/icons';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { VKUITouchEvent } from '../../lib/touch';\nimport { HasRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { IconButton } from '../IconButton/IconButton';\nimport { TouchEvent } from '../Touch/Touch';\nimport { Headline } from '../Typography/Headline/Headline';\nimport styles from './Search.module.css';\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement> {\n /**\n * iOS only. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n before?: React.ReactNode;\n icon?: React.ReactNode;\n onIconClick?: (e: VKUITouchEvent) => void;\n defaultValue?: string;\n iconAriaLabel?: string;\n clearAriaLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Search\n */\nexport const Search = ({\n before = <Icon16SearchOutline />,\n className,\n defaultValue = '',\n placeholder = 'Поиск',\n after = 'Отмена',\n getRef,\n icon,\n onIconClick = noop,\n style,\n autoComplete = 'off',\n onChange: onChangeProp,\n value: valueProp,\n iconAriaLabel,\n clearAriaLabel = 'Очистить',\n ...inputProps\n}: SearchProps) => {\n const inputRef = useExternRef(getRef);\n const {\n value: isFocused,\n setTrue: setFocusedTrue,\n setFalse: setFocusedFalse,\n } = useBooleanState(false);\n\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n onChange: onChangeProp,\n value: valueProp,\n });\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedTrue();\n inputProps.onFocus && inputProps.onFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedFalse();\n inputProps.onBlur && inputProps.onBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value',\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, '');\n\n const ev2 = new Event('input', { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart = React.useCallback(\n (e: TouchEvent) => onIconClick(e.originalEvent),\n [onIconClick],\n );\n\n const onIconCancelClickStart = React.useCallback(\n (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n inputRef.current?.focus();\n },\n [inputRef],\n );\n\n return (\n <div\n className={classNames(\n 'vkuiInternalSearch',\n styles['Search'],\n sizeY === 'none' && styles['Search--sizeY-none'],\n sizeY === SizeType.COMPACT && styles['Search--sizeY-compact'],\n isFocused && styles['Search--focused'],\n value && styles['Search--has-value'],\n after && styles['Search--has-after'],\n icon && styles['Search--has-icon'],\n inputProps.disabled && styles['Search--disabled'],\n className,\n )}\n style={style}\n >\n <div className={styles['Search__field']}>\n <label className={styles['Search__control']}>\n {before}\n <Headline\n Component=\"input\"\n type=\"search\"\n level=\"1\"\n weight=\"3\"\n {...inputProps}\n placeholder={placeholder}\n autoComplete={autoComplete}\n getRootRef={inputRef}\n className={styles['Search__input']}\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n value={value}\n />\n </label>\n <div className={styles['Search__icons']}>\n {icon && (\n <IconButton\n hoverMode=\"opacity\"\n onStart={onIconClickStart}\n className={styles['Search__icon']}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n aria-label={iconAriaLabel}\n >\n {icon}\n </IconButton>\n )}\n {!!value && (\n <IconButton\n hoverMode=\"opacity\"\n onStart={onIconCancelClickStart}\n onClick={onCancel}\n className={styles['Search__icon']}\n aria-label={clearAriaLabel}\n >\n {platform === Platform.IOS ? <Icon16Clear /> : <Icon24Cancel />}\n </IconButton>\n )}\n </div>\n </div>\n {platform === Platform.IOS && after && (\n <Button\n mode=\"tertiary\"\n size=\"m\"\n className={styles['Search__after']}\n focusVisibleMode=\"inside\"\n onClick={onCancel}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n >\n <span className={styles['Search__afterText']}>{after}</span>\n </Button>\n )}\n </div>\n );\n};\n"],"names":["React","Icon16Clear","Icon16SearchOutline","Icon24Cancel","classNames","noop","useAdaptivity","useBooleanState","useEnsuredControl","useExternRef","usePlatform","SizeType","Platform","Button","IconButton","Headline","styles","Search","before","className","defaultValue","placeholder","after","getRef","icon","onIconClick","style","autoComplete","onChange","onChangeProp","value","valueProp","iconAriaLabel","clearAriaLabel","inputProps","inputRef","isFocused","setTrue","setFocusedTrue","setFalse","setFocusedFalse","sizeY","platform","onFocus","e","onBlur","onCancel","useCallback","nativeInputValueSetter","Object","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","originalEvent","onIconCancelClickStart","preventDefault","focus","div","COMPACT","disabled","label","Component","type","level","weight","getRootRef","hoverMode","onStart","aria-label","onClick","IOS","mode","size","focusVisibleMode","span"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Search/Search.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Clear, Icon16SearchOutline, Icon24Cancel } from '@vkontakte/icons';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { touchEnabled, VKUITouchEvent } from '../../lib/touch';\nimport { HasRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { IconButton } from '../IconButton/IconButton';\nimport { TouchEvent } from '../Touch/Touch';\nimport { Headline } from '../Typography/Headline/Headline';\nimport styles from './Search.module.css';\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement> {\n /**\n * iOS only. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n before?: React.ReactNode;\n icon?: React.ReactNode;\n onIconClick?: (e: VKUITouchEvent) => void;\n defaultValue?: string;\n iconAriaLabel?: string;\n clearAriaLabel?: string;\n /**\n * Удаляет отступы у компонента\n */\n noPadding?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Search\n */\nexport const Search = ({\n before = <Icon16SearchOutline />,\n className,\n defaultValue = '',\n placeholder = 'Поиск',\n after = 'Отмена',\n getRef,\n icon,\n onIconClick = noop,\n style,\n autoComplete = 'off',\n onChange: onChangeProp,\n value: valueProp,\n iconAriaLabel,\n clearAriaLabel = 'Очистить',\n noPadding,\n ...inputProps\n}: SearchProps) => {\n const inputRef = useExternRef(getRef);\n const {\n value: isFocused,\n setTrue: setFocusedTrue,\n setFalse: setFocusedFalse,\n } = useBooleanState(false);\n\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n onChange: onChangeProp,\n value: valueProp,\n });\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedTrue();\n inputProps.onFocus && inputProps.onFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedFalse();\n inputProps.onBlur && inputProps.onBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value',\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, '');\n\n const ev2 = new Event('input', { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart = React.useCallback(\n (e: TouchEvent) => onIconClick(e.originalEvent),\n [onIconClick],\n );\n\n const onIconCancelClickStart = React.useCallback(\n (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n inputRef.current?.focus();\n if (touchEnabled()) {\n onCancel();\n }\n },\n [inputRef, onCancel],\n );\n\n return (\n <div\n className={classNames(\n 'vkuiInternalSearch',\n styles['Search'],\n sizeY === 'none' && styles['Search--sizeY-none'],\n sizeY === SizeType.COMPACT && styles['Search--sizeY-compact'],\n isFocused && styles['Search--focused'],\n value && styles['Search--has-value'],\n after && styles['Search--has-after'],\n icon && styles['Search--has-icon'],\n inputProps.disabled && styles['Search--disabled'],\n !noPadding && styles['Search--withPadding'],\n className,\n )}\n style={style}\n >\n <div className={styles['Search__field']}>\n <label className={styles['Search__control']}>\n {before}\n <Headline\n Component=\"input\"\n type=\"search\"\n level=\"1\"\n weight=\"3\"\n {...inputProps}\n placeholder={placeholder}\n autoComplete={autoComplete}\n getRootRef={inputRef}\n className={styles['Search__input']}\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n value={value}\n />\n </label>\n <div className={styles['Search__icons']}>\n {icon && (\n <IconButton\n hoverMode=\"opacity\"\n onStart={onIconClickStart}\n className={styles['Search__icon']}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n aria-label={iconAriaLabel}\n >\n {icon}\n </IconButton>\n )}\n {!!value && (\n <IconButton\n hoverMode=\"opacity\"\n onStart={onIconCancelClickStart}\n onClick={onCancel}\n className={styles['Search__icon']}\n aria-label={clearAriaLabel}\n >\n {platform === Platform.IOS ? <Icon16Clear /> : <Icon24Cancel />}\n </IconButton>\n )}\n </div>\n </div>\n {platform === Platform.IOS && after && (\n <Button\n mode=\"tertiary\"\n size=\"m\"\n className={styles['Search__after']}\n focusVisibleMode=\"inside\"\n onClick={onCancel}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n >\n <span className={styles['Search__afterText']}>{after}</span>\n </Button>\n )}\n </div>\n );\n};\n"],"names":["React","Icon16Clear","Icon16SearchOutline","Icon24Cancel","classNames","noop","useAdaptivity","useBooleanState","useEnsuredControl","useExternRef","usePlatform","SizeType","Platform","touchEnabled","Button","IconButton","Headline","styles","Search","before","className","defaultValue","placeholder","after","getRef","icon","onIconClick","style","autoComplete","onChange","onChangeProp","value","valueProp","iconAriaLabel","clearAriaLabel","noPadding","inputProps","inputRef","isFocused","setTrue","setFocusedTrue","setFalse","setFocusedFalse","sizeY","platform","onFocus","e","onBlur","onCancel","useCallback","nativeInputValueSetter","Object","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","originalEvent","onIconCancelClickStart","preventDefault","focus","div","COMPACT","disabled","label","Component","type","level","weight","getRootRef","hoverMode","onStart","aria-label","onClick","IOS","mode","size","focusVisibleMode","span"],"mappings":"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"}
@@ -1,12 +1,15 @@
1
1
  .Search {
2
2
  display: flex;
3
3
  overflow: hidden;
4
- padding: 8px var(--vkui--size_base_padding_horizontal--regular);
5
4
  -webkit-tap-highlight-color: transparent;
6
5
 
7
6
  --vkui_internal--search_height: var(--vkui--size_search_height--regular);
8
7
  }
9
8
 
9
+ .Search--withPadding {
10
+ padding: 8px var(--vkui--size_base_padding_horizontal--regular);
11
+ }
12
+
10
13
  /*
11
14
  sizeY-compact
12
15
  */
@@ -42,8 +42,12 @@ export interface SnackbarProps extends React.HTMLAttributes<HTMLElement> {
42
42
  * Не может использоваться одновременно с `action`
43
43
  */
44
44
  subtitle?: React.ReactNode;
45
+ /**
46
+ * Величина отступа снизу. Используется для позиционирования элемента в случае, когда нежелательно, чтобы Snackbar при появлении перекрывал важные элементы интерфейса.
47
+ */
48
+ offsetY?: React.CSSProperties['bottom'];
45
49
  }
46
50
  /**
47
51
  * @see https://vkcom.github.io/VKUI/#/Snackbar
48
52
  */
49
- export declare const Snackbar: ({ children, layout: layoutProps, action, before, after, duration, onActionClick, onClose, mode, className, subtitle, ...restProps }: SnackbarProps) => React.JSX.Element;
53
+ export declare const Snackbar: ({ children, layout: layoutProps, action, before, after, duration, onActionClick, onClose, mode, className, subtitle, offsetY, style, ...restProps }: SnackbarProps) => React.JSX.Element;
@@ -15,7 +15,7 @@ import { Subhead } from '../Typography/Subhead/Subhead';
15
15
  import styles from './Snackbar.module.css';
16
16
  /**
17
17
  * @see https://vkcom.github.io/VKUI/#/Snackbar
18
- */ export const Snackbar = ({ children, layout: layoutProps = 'horizontal', action, before, after, duration = 4000, onActionClick, onClose, mode = 'default', className, subtitle, ...restProps })=>{
18
+ */ export const Snackbar = ({ children, layout: layoutProps = 'horizontal', action, before, after, duration = 4000, onActionClick, onClose, mode = 'default', className, subtitle, offsetY, style, ...restProps })=>{
19
19
  const platform = usePlatform();
20
20
  const { viewWidth } = useAdaptivityWithJSMediaQueries();
21
21
  const isDesktop = viewWidth >= ViewWidth.SMALL_TABLET;
@@ -101,7 +101,11 @@ import styles from './Snackbar.module.css';
101
101
  className: classNames(styles['Snackbar'], platform === Platform.IOS && styles['Snackbar--ios'], {
102
102
  vertical: styles['Snackbar--layout-vertical'],
103
103
  horizontal: styles['Snackbar--layout-horizontal']
104
- }[layout], mode === 'dark' && styles['Snackbar--mode-dark'], closing && styles['Snackbar--closing'], touched && styles['Snackbar--touched'], isDesktop && styles['Snackbar--desktop'], className)
104
+ }[layout], mode === 'dark' && styles['Snackbar--mode-dark'], closing && styles['Snackbar--closing'], touched && styles['Snackbar--touched'], isDesktop && styles['Snackbar--desktop'], className),
105
+ style: offsetY ? {
106
+ ...style,
107
+ bottom: offsetY
108
+ } : style
105
109
  }, /*#__PURE__*/ React.createElement(Touch, {
106
110
  className: styles['Snackbar__in'],
107
111
  getRootRef: innerElRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { ViewWidth } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { rubber } from '../../lib/touch';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { Button } from '../Button/Button';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './Snackbar.module.css';\n\nexport interface SnackbarProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Название кнопки действия в уведомлении\n * Не может использоваться одновременно с `subtitle`\n */\n action?: React.ReactNode;\n\n /**\n * Будет вызвано при клике на кнопку действия\n */\n onActionClick?: (e: React.MouseEvent) => void;\n\n /**\n * Может быть следующими компонентами:\n * - цветная иконка 24x24 или 28x28 пикселя\n * - `<Avatar size={32} />`\n * - `<Image size={40} />`\n */\n before?: React.ReactNode;\n /**\n * Контент в правой части, может быть иконкой 24x24\n */\n after?: React.ReactNode;\n /**\n * Варианты расположения кнопки действия\n * Игнорируется на десктопах и при наличии элементов `after` или `subtitle`\n */\n layout?: 'vertical' | 'horizontal';\n /**\n * Время в миллисекундах, через которое плашка скроется\n */\n duration?: number;\n /**\n * Обработчик закрытия уведомления\n */\n onClose: () => void;\n /**\n * Задает стиль снекбара\n */\n mode?: 'default' | 'dark';\n /**\n * Дополнительная строка текста под `children`.\n * Не может использоваться одновременно с `action`\n */\n subtitle?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Snackbar\n */\nexport const Snackbar = ({\n children,\n layout: layoutProps = 'horizontal',\n action,\n before,\n after,\n duration = 4000,\n onActionClick,\n onClose,\n mode = 'default',\n className,\n subtitle,\n ...restProps\n}: SnackbarProps) => {\n const platform = usePlatform();\n const { viewWidth } = useAdaptivityWithJSMediaQueries();\n const isDesktop = viewWidth >= ViewWidth.SMALL_TABLET;\n const { waitTransitionFinish } = useWaitTransitionFinish();\n\n const [closing, setClosing] = React.useState(false);\n const [touched, setTouched] = React.useState(false);\n\n const shiftXPercentRef = React.useRef<number>(0);\n const shiftXCurrentRef = React.useRef<number>(0);\n\n const bodyElRef = React.useRef<HTMLDivElement | null>(null);\n const innerElRef = React.useRef<HTMLDivElement | null>(null);\n\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n\n const transitionFinishDurationFallback = platform === Platform.IOS ? 320 : 400;\n\n const close = () => {\n setClosing(true);\n waitTransitionFinish(\n innerElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n };\n\n const handleActionClick: React.MouseEventHandler<HTMLElement> = (e) => {\n close();\n\n if (action && typeof onActionClick === 'function') {\n onActionClick(e);\n }\n };\n\n const closeTimeout = useTimeout(close, duration);\n\n const setBodyTransform = (percent: number) => {\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n if (bodyElRef.current) {\n bodyElRef.current.style.transform = `translate3d(${percent}%, 0, 0)`;\n }\n });\n };\n\n const onTouchStart = closeTimeout.clear;\n\n const onTouchMoveX = (event: TouchEvent) => {\n const { shiftX, originalEvent } = event;\n originalEvent.preventDefault();\n\n if (!touched) {\n setTouched(true);\n }\n\n shiftXPercentRef.current = (shiftX / (bodyElRef.current?.offsetWidth ?? 0)) * 100;\n shiftXCurrentRef.current = rubber(shiftXPercentRef.current, 72, 1.2, platform !== Platform.IOS);\n\n setBodyTransform(shiftXCurrentRef.current);\n };\n\n const onTouchEnd = (e: TouchEvent) => {\n let callback: VoidFunction | undefined;\n\n if (touched) {\n let shiftXCurrent = shiftXCurrentRef.current;\n const expectTranslateY = (shiftXCurrent / e.duration) * 240 * 0.6;\n shiftXCurrent = shiftXCurrent + expectTranslateY;\n\n if (isDesktop && shiftXCurrent <= -50) {\n closeTimeout.clear();\n waitTransitionFinish(\n bodyElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n setBodyTransform(-120);\n } else if (!isDesktop && shiftXCurrent >= 50) {\n closeTimeout.clear();\n waitTransitionFinish(\n bodyElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n setBodyTransform(120);\n } else {\n callback = () => {\n closeTimeout.set();\n setBodyTransform(0);\n };\n }\n } else {\n closeTimeout.set();\n }\n\n setTouched(false);\n callback && requestAnimationFrame(callback);\n };\n\n React.useEffect(() => closeTimeout.set(), [closeTimeout]);\n\n const layout = after || isDesktop || subtitle ? 'vertical' : layoutProps;\n\n return (\n <AppRootPortal>\n <div\n {...restProps}\n className={classNames(\n styles['Snackbar'],\n platform === Platform.IOS && styles['Snackbar--ios'],\n {\n vertical: styles['Snackbar--layout-vertical'],\n horizontal: styles['Snackbar--layout-horizontal'],\n }[layout],\n mode === 'dark' && styles['Snackbar--mode-dark'],\n closing && styles['Snackbar--closing'],\n touched && styles['Snackbar--touched'],\n isDesktop && styles['Snackbar--desktop'],\n className,\n )}\n >\n <Touch\n className={styles['Snackbar__in']}\n getRootRef={innerElRef}\n onStart={onTouchStart}\n onMoveX={onTouchMoveX}\n onEnd={onTouchEnd}\n >\n <div className={styles['Snackbar__body']} ref={bodyElRef}>\n {before && <div className={styles['Snackbar__before']}>{before}</div>}\n\n <div className={styles['Snackbar__content']}>\n <Paragraph className={styles['Snackbar__content-text']}>{children}</Paragraph>\n {subtitle && !action && (\n <Subhead className={styles['Snackbar__content-subtitle']}>{subtitle}</Subhead>\n )}\n\n {action && !subtitle && (\n <Button\n align=\"left\"\n mode=\"link\"\n appearance={mode === 'dark' ? 'overlay' : 'accent'}\n size=\"s\"\n className={styles['Snackbar__action']}\n onClick={handleActionClick}\n >\n {action}\n </Button>\n )}\n </div>\n\n {after && <div className={styles['Snackbar__after']}>{after}</div>}\n </div>\n </Touch>\n </div>\n </AppRootPortal>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","usePlatform","useTimeout","useWaitTransitionFinish","ViewWidth","Platform","rubber","AppRootPortal","Button","Touch","Paragraph","Subhead","styles","Snackbar","children","layout","layoutProps","action","before","after","duration","onActionClick","onClose","mode","className","subtitle","restProps","platform","viewWidth","isDesktop","SMALL_TABLET","waitTransitionFinish","closing","setClosing","useState","touched","setTouched","shiftXPercentRef","useRef","shiftXCurrentRef","bodyElRef","innerElRef","animationFrameRef","transitionFinishDurationFallback","IOS","close","current","handleActionClick","e","closeTimeout","setBodyTransform","percent","cancelAnimationFrame","requestAnimationFrame","style","transform","onTouchStart","clear","onTouchMoveX","event","shiftX","originalEvent","preventDefault","offsetWidth","onTouchEnd","callback","shiftXCurrent","expectTranslateY","set","useEffect","div","vertical","horizontal","getRootRef","onStart","onMoveX","onEnd","ref","align","appearance","size","onClick"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { ViewWidth } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { rubber } from '../../lib/touch';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { Button } from '../Button/Button';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './Snackbar.module.css';\n\nexport interface SnackbarProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Название кнопки действия в уведомлении\n * Не может использоваться одновременно с `subtitle`\n */\n action?: React.ReactNode;\n\n /**\n * Будет вызвано при клике на кнопку действия\n */\n onActionClick?: (e: React.MouseEvent) => void;\n\n /**\n * Может быть следующими компонентами:\n * - цветная иконка 24x24 или 28x28 пикселя\n * - `<Avatar size={32} />`\n * - `<Image size={40} />`\n */\n before?: React.ReactNode;\n /**\n * Контент в правой части, может быть иконкой 24x24\n */\n after?: React.ReactNode;\n /**\n * Варианты расположения кнопки действия\n * Игнорируется на десктопах и при наличии элементов `after` или `subtitle`\n */\n layout?: 'vertical' | 'horizontal';\n /**\n * Время в миллисекундах, через которое плашка скроется\n */\n duration?: number;\n /**\n * Обработчик закрытия уведомления\n */\n onClose: () => void;\n /**\n * Задает стиль снекбара\n */\n mode?: 'default' | 'dark';\n /**\n * Дополнительная строка текста под `children`.\n * Не может использоваться одновременно с `action`\n */\n subtitle?: React.ReactNode;\n /**\n * Величина отступа снизу. Используется для позиционирования элемента в случае, когда нежелательно, чтобы Snackbar при появлении перекрывал важные элементы интерфейса.\n */\n offsetY?: React.CSSProperties['bottom'];\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Snackbar\n */\nexport const Snackbar = ({\n children,\n layout: layoutProps = 'horizontal',\n action,\n before,\n after,\n duration = 4000,\n onActionClick,\n onClose,\n mode = 'default',\n className,\n subtitle,\n offsetY,\n style,\n ...restProps\n}: SnackbarProps) => {\n const platform = usePlatform();\n const { viewWidth } = useAdaptivityWithJSMediaQueries();\n const isDesktop = viewWidth >= ViewWidth.SMALL_TABLET;\n const { waitTransitionFinish } = useWaitTransitionFinish();\n\n const [closing, setClosing] = React.useState(false);\n const [touched, setTouched] = React.useState(false);\n\n const shiftXPercentRef = React.useRef<number>(0);\n const shiftXCurrentRef = React.useRef<number>(0);\n\n const bodyElRef = React.useRef<HTMLDivElement | null>(null);\n const innerElRef = React.useRef<HTMLDivElement | null>(null);\n\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n\n const transitionFinishDurationFallback = platform === Platform.IOS ? 320 : 400;\n\n const close = () => {\n setClosing(true);\n waitTransitionFinish(\n innerElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n };\n\n const handleActionClick: React.MouseEventHandler<HTMLElement> = (e) => {\n close();\n\n if (action && typeof onActionClick === 'function') {\n onActionClick(e);\n }\n };\n\n const closeTimeout = useTimeout(close, duration);\n\n const setBodyTransform = (percent: number) => {\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n if (bodyElRef.current) {\n bodyElRef.current.style.transform = `translate3d(${percent}%, 0, 0)`;\n }\n });\n };\n\n const onTouchStart = closeTimeout.clear;\n\n const onTouchMoveX = (event: TouchEvent) => {\n const { shiftX, originalEvent } = event;\n originalEvent.preventDefault();\n\n if (!touched) {\n setTouched(true);\n }\n\n shiftXPercentRef.current = (shiftX / (bodyElRef.current?.offsetWidth ?? 0)) * 100;\n shiftXCurrentRef.current = rubber(shiftXPercentRef.current, 72, 1.2, platform !== Platform.IOS);\n\n setBodyTransform(shiftXCurrentRef.current);\n };\n\n const onTouchEnd = (e: TouchEvent) => {\n let callback: VoidFunction | undefined;\n\n if (touched) {\n let shiftXCurrent = shiftXCurrentRef.current;\n const expectTranslateY = (shiftXCurrent / e.duration) * 240 * 0.6;\n shiftXCurrent = shiftXCurrent + expectTranslateY;\n\n if (isDesktop && shiftXCurrent <= -50) {\n closeTimeout.clear();\n waitTransitionFinish(\n bodyElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n setBodyTransform(-120);\n } else if (!isDesktop && shiftXCurrent >= 50) {\n closeTimeout.clear();\n waitTransitionFinish(\n bodyElRef.current,\n () => {\n onClose();\n },\n transitionFinishDurationFallback,\n );\n setBodyTransform(120);\n } else {\n callback = () => {\n closeTimeout.set();\n setBodyTransform(0);\n };\n }\n } else {\n closeTimeout.set();\n }\n\n setTouched(false);\n callback && requestAnimationFrame(callback);\n };\n\n React.useEffect(() => closeTimeout.set(), [closeTimeout]);\n\n const layout = after || isDesktop || subtitle ? 'vertical' : layoutProps;\n\n return (\n <AppRootPortal>\n <div\n {...restProps}\n className={classNames(\n styles['Snackbar'],\n platform === Platform.IOS && styles['Snackbar--ios'],\n {\n vertical: styles['Snackbar--layout-vertical'],\n horizontal: styles['Snackbar--layout-horizontal'],\n }[layout],\n mode === 'dark' && styles['Snackbar--mode-dark'],\n closing && styles['Snackbar--closing'],\n touched && styles['Snackbar--touched'],\n isDesktop && styles['Snackbar--desktop'],\n className,\n )}\n style={offsetY ? { ...style, bottom: offsetY } : style}\n >\n <Touch\n className={styles['Snackbar__in']}\n getRootRef={innerElRef}\n onStart={onTouchStart}\n onMoveX={onTouchMoveX}\n onEnd={onTouchEnd}\n >\n <div className={styles['Snackbar__body']} ref={bodyElRef}>\n {before && <div className={styles['Snackbar__before']}>{before}</div>}\n\n <div className={styles['Snackbar__content']}>\n <Paragraph className={styles['Snackbar__content-text']}>{children}</Paragraph>\n {subtitle && !action && (\n <Subhead className={styles['Snackbar__content-subtitle']}>{subtitle}</Subhead>\n )}\n\n {action && !subtitle && (\n <Button\n align=\"left\"\n mode=\"link\"\n appearance={mode === 'dark' ? 'overlay' : 'accent'}\n size=\"s\"\n className={styles['Snackbar__action']}\n onClick={handleActionClick}\n >\n {action}\n </Button>\n )}\n </div>\n\n {after && <div className={styles['Snackbar__after']}>{after}</div>}\n </div>\n </Touch>\n </div>\n </AppRootPortal>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","usePlatform","useTimeout","useWaitTransitionFinish","ViewWidth","Platform","rubber","AppRootPortal","Button","Touch","Paragraph","Subhead","styles","Snackbar","children","layout","layoutProps","action","before","after","duration","onActionClick","onClose","mode","className","subtitle","offsetY","style","restProps","platform","viewWidth","isDesktop","SMALL_TABLET","waitTransitionFinish","closing","setClosing","useState","touched","setTouched","shiftXPercentRef","useRef","shiftXCurrentRef","bodyElRef","innerElRef","animationFrameRef","transitionFinishDurationFallback","IOS","close","current","handleActionClick","e","closeTimeout","setBodyTransform","percent","cancelAnimationFrame","requestAnimationFrame","transform","onTouchStart","clear","onTouchMoveX","event","shiftX","originalEvent","preventDefault","offsetWidth","onTouchEnd","callback","shiftXCurrent","expectTranslateY","set","useEffect","div","vertical","horizontal","bottom","getRootRef","onStart","onMoveX","onEnd","ref","align","appearance","size","onClick"],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { TappableProps } from '../Tappable/Tappable';
3
3
  export interface SubnavigationButtonProps extends Omit<TappableProps, 'size'> {
4
4
  mode?: 'primary' | 'outline' | 'tertiary';
5
+ appearance?: 'accent' | 'neutral';
5
6
  size?: 's' | 'm' | 'l';
6
7
  selected?: boolean;
7
8
  /**
@@ -21,4 +22,4 @@ export interface SubnavigationButtonProps extends Omit<TappableProps, 'size'> {
21
22
  /**
22
23
  * @see https://vkcom.github.io/VKUI/#/SubnavigationButton
23
24
  */
24
- export declare const SubnavigationButton: ({ mode, size, selected, textLevel, before, after, expandable, children, className, ...restProps }: SubnavigationButtonProps) => React.JSX.Element;
25
+ export declare const SubnavigationButton: ({ mode, appearance, size, selected, textLevel, before, after, expandable, children, className, ...restProps }: SubnavigationButtonProps) => React.JSX.Element;
@@ -7,6 +7,20 @@ import { Tappable } from '../Tappable/Tappable';
7
7
  import { Caption } from '../Typography/Caption/Caption';
8
8
  import { Subhead } from '../Typography/Subhead/Subhead';
9
9
  import styles from './SubnavigationButton.module.css';
10
+ const appearanceStyles = {
11
+ accent: styles['SubnavigationButton--appearance-accent'],
12
+ neutral: styles['SubnavigationButton--appearance-neutral']
13
+ };
14
+ const modeStyles = {
15
+ primary: styles['SubnavigationButton--mode-primary'],
16
+ outline: styles['SubnavigationButton--mode-outline'],
17
+ tertiary: styles['SubnavigationButton--mode-tertiary']
18
+ };
19
+ const sizeStyles = {
20
+ s: styles['SubnavigationButton--size-s'],
21
+ m: styles['SubnavigationButton--size-m'],
22
+ l: styles['SubnavigationButton--size-l']
23
+ };
10
24
  const sizeYClassNames = {
11
25
  none: styles['SubnavigationButton--sizeY-none'],
12
26
  [SizeType.COMPACT]: styles['SubnavigationButton--sizeY-compact']
@@ -22,21 +36,13 @@ const SubnavigationButtonTypography = ({ textLevel, ...restProps })=>{
22
36
  };
23
37
  /**
24
38
  * @see https://vkcom.github.io/VKUI/#/SubnavigationButton
25
- */ export const SubnavigationButton = ({ mode = 'primary', size = 'm', selected, textLevel = '1', before, after, expandable, children, className, ...restProps })=>{
39
+ */ export const SubnavigationButton = ({ mode = 'primary', appearance = 'accent', size = 'm', selected, textLevel = '1', before, after, expandable, children, className, ...restProps })=>{
26
40
  const { sizeY = 'none' } = useAdaptivity();
27
41
  return /*#__PURE__*/ React.createElement(Tappable, {
28
42
  ...restProps,
29
43
  hasActive: false,
30
44
  focusVisibleMode: "outside",
31
- className: classNames(styles['SubnavigationButton'], {
32
- s: styles['SubnavigationButton--size-s'],
33
- m: styles['SubnavigationButton--size-m'],
34
- l: styles['SubnavigationButton--size-l']
35
- }[size], {
36
- primary: styles['SubnavigationButton--mode-primary'],
37
- outline: styles['SubnavigationButton--mode-outline'],
38
- tertiary: styles['SubnavigationButton--mode-tertiary']
39
- }[mode], selected && styles['SubnavigationButton--selected'], sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY], className)
45
+ className: classNames(styles['SubnavigationButton'], sizeStyles[size], modeStyles[mode], appearanceStyles[appearance], selected && styles['SubnavigationButton--selected'], sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY], className)
40
46
  }, /*#__PURE__*/ React.createElement("span", {
41
47
  className: styles['SubnavigationButton__in']
42
48
  }, before && /*#__PURE__*/ React.createElement("span", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Dropdown } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { SizeType } from '../../lib/adaptivity';\nimport { HasChildren, HasComponent } from '../../types';\nimport { Tappable, TappableProps } from '../Tappable/Tappable';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './SubnavigationButton.module.css';\n\nconst sizeYClassNames = {\n none: styles['SubnavigationButton--sizeY-none'],\n [SizeType.COMPACT]: styles['SubnavigationButton--sizeY-compact'],\n};\n\nexport interface SubnavigationButtonProps extends Omit<TappableProps, 'size'> {\n mode?: 'primary' | 'outline' | 'tertiary';\n size?: 's' | 'm' | 'l';\n selected?: boolean;\n /**\n * Размер шрифта. Этим свойством рекомендуется пользоваться, чтобы отрегулировать размер шрифта у кнопок в `<SubnavigationBar mode=\"fixed\" />`\n */\n textLevel?: '1' | '2' | '3';\n /**\n * Рекомендуется использовать только иконки с размером 24\n */\n before?: React.ReactNode;\n /**\n * Рекомендуется использовать только `<Counter size=\"s\" />` или `<Badge />`\n */\n after?: React.ReactNode;\n expandable?: boolean;\n}\n\ntype SubnavigationButtonTypographyProps = Pick<\n SubnavigationButtonProps,\n 'textLevel' | 'className'\n> &\n HasComponent &\n HasChildren;\n\nconst SubnavigationButtonTypography = ({\n textLevel,\n ...restProps\n}: SubnavigationButtonTypographyProps) => {\n if (textLevel === '1') {\n return <Subhead {...restProps} />;\n }\n\n return <Caption level={textLevel === '2' ? '1' : '2'} {...restProps} />;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SubnavigationButton\n */\nexport const SubnavigationButton = ({\n mode = 'primary',\n size = 'm',\n selected,\n textLevel = '1',\n before,\n after,\n expandable,\n children,\n className,\n ...restProps\n}: SubnavigationButtonProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n hasActive={false}\n focusVisibleMode=\"outside\"\n className={classNames(\n styles['SubnavigationButton'],\n {\n s: styles['SubnavigationButton--size-s'],\n m: styles['SubnavigationButton--size-m'],\n l: styles['SubnavigationButton--size-l'],\n }[size],\n {\n primary: styles['SubnavigationButton--mode-primary'],\n outline: styles['SubnavigationButton--mode-outline'],\n tertiary: styles['SubnavigationButton--mode-tertiary'],\n }[mode],\n selected && styles['SubnavigationButton--selected'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n >\n <span className={styles['SubnavigationButton__in']}>\n {before && <span className={styles['SubnavigationButton__before']}>{before}</span>}\n <SubnavigationButtonTypography\n textLevel={textLevel}\n className={styles['SubnavigationButton__label']}\n Component=\"span\"\n >\n {children}\n </SubnavigationButtonTypography>\n {after && <span className={styles['SubnavigationButton__after']}>{after}</span>}\n {expandable && <Icon16Dropdown className={styles['SubnavigationButton__expandableIcon']} />}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","Icon16Dropdown","classNames","useAdaptivity","SizeType","Tappable","Caption","Subhead","styles","sizeYClassNames","none","COMPACT","SubnavigationButtonTypography","textLevel","restProps","level","SubnavigationButton","mode","size","selected","before","after","expandable","children","className","sizeY","hasActive","focusVisibleMode","s","m","l","primary","outline","tertiary","REGULAR","span","Component"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,QAAQ,QAAuB,uBAAuB;AAC/D,SAASC,OAAO,QAAQ,gCAAgC;AACxD,SAASC,OAAO,QAAQ,gCAAgC;AACxD,OAAOC,YAAY,mCAAmC;AAEtD,MAAMC,kBAAkB;IACtBC,MAAMF,MAAM,CAAC,kCAAkC;IAC/C,CAACJ,SAASO,OAAO,CAAC,EAAEH,MAAM,CAAC,qCAAqC;AAClE;AA4BA,MAAMI,gCAAgC,CAAC,EACrCC,SAAS,EACT,GAAGC,WACgC;IACnC,IAAID,cAAc,KAAK;QACrB,qBAAO,oBAACN,SAAYO;IACtB;IAEA,qBAAO,oBAACR;QAAQS,OAAOF,cAAc,MAAM,MAAM;QAAM,GAAGC,SAAS;;AACrE;AAEA;;CAEC,GACD,OAAO,MAAME,sBAAsB,CAAC,EAClCC,OAAO,SAAS,EAChBC,OAAO,GAAG,EACVC,QAAQ,EACRN,YAAY,GAAG,EACfO,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACT,GAAGV,WACsB;IACzB,MAAM,EAAEW,QAAQ,MAAM,EAAE,GAAGtB;IAE3B,qBACE,oBAACE;QACE,GAAGS,SAAS;QACbY,WAAW;QACXC,kBAAiB;QACjBH,WAAWtB,WACTM,MAAM,CAAC,sBAAsB,EAC7B;YACEoB,GAAGpB,MAAM,CAAC,8BAA8B;YACxCqB,GAAGrB,MAAM,CAAC,8BAA8B;YACxCsB,GAAGtB,MAAM,CAAC,8BAA8B;QAC1C,CAAC,CAACU,KAAK,EACP;YACEa,SAASvB,MAAM,CAAC,oCAAoC;YACpDwB,SAASxB,MAAM,CAAC,oCAAoC;YACpDyB,UAAUzB,MAAM,CAAC,qCAAqC;QACxD,CAAC,CAACS,KAAK,EACPE,YAAYX,MAAM,CAAC,gCAAgC,EACnDiB,UAAUrB,SAAS8B,OAAO,IAAIzB,eAAe,CAACgB,MAAM,EACpDD;qBAGF,oBAACW;QAAKX,WAAWhB,MAAM,CAAC,0BAA0B;OAC/CY,wBAAU,oBAACe;QAAKX,WAAWhB,MAAM,CAAC,8BAA8B;OAAGY,uBACpE,oBAACR;QACCC,WAAWA;QACXW,WAAWhB,MAAM,CAAC,6BAA6B;QAC/C4B,WAAU;OAETb,WAEFF,uBAAS,oBAACc;QAAKX,WAAWhB,MAAM,CAAC,6BAA6B;OAAGa,QACjEC,4BAAc,oBAACrB;QAAeuB,WAAWhB,MAAM,CAAC,sCAAsC;;AAI/F,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Dropdown } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { SizeType } from '../../lib/adaptivity';\nimport { HasChildren, HasComponent } from '../../types';\nimport { Tappable, TappableProps } from '../Tappable/Tappable';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './SubnavigationButton.module.css';\n\nconst appearanceStyles = {\n accent: styles['SubnavigationButton--appearance-accent'],\n neutral: styles['SubnavigationButton--appearance-neutral'],\n};\n\nconst modeStyles = {\n primary: styles['SubnavigationButton--mode-primary'],\n outline: styles['SubnavigationButton--mode-outline'],\n tertiary: styles['SubnavigationButton--mode-tertiary'],\n};\n\nconst sizeStyles = {\n s: styles['SubnavigationButton--size-s'],\n m: styles['SubnavigationButton--size-m'],\n l: styles['SubnavigationButton--size-l'],\n};\n\nconst sizeYClassNames = {\n none: styles['SubnavigationButton--sizeY-none'],\n [SizeType.COMPACT]: styles['SubnavigationButton--sizeY-compact'],\n};\n\nexport interface SubnavigationButtonProps extends Omit<TappableProps, 'size'> {\n mode?: 'primary' | 'outline' | 'tertiary';\n appearance?: 'accent' | 'neutral';\n size?: 's' | 'm' | 'l';\n selected?: boolean;\n /**\n * Размер шрифта. Этим свойством рекомендуется пользоваться, чтобы отрегулировать размер шрифта у кнопок в `<SubnavigationBar mode=\"fixed\" />`\n */\n textLevel?: '1' | '2' | '3';\n /**\n * Рекомендуется использовать только иконки с размером 24\n */\n before?: React.ReactNode;\n /**\n * Рекомендуется использовать только `<Counter size=\"s\" />` или `<Badge />`\n */\n after?: React.ReactNode;\n expandable?: boolean;\n}\n\ntype SubnavigationButtonTypographyProps = Pick<\n SubnavigationButtonProps,\n 'textLevel' | 'className'\n> &\n HasComponent &\n HasChildren;\n\nconst SubnavigationButtonTypography = ({\n textLevel,\n ...restProps\n}: SubnavigationButtonTypographyProps) => {\n if (textLevel === '1') {\n return <Subhead {...restProps} />;\n }\n\n return <Caption level={textLevel === '2' ? '1' : '2'} {...restProps} />;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SubnavigationButton\n */\nexport const SubnavigationButton = ({\n mode = 'primary',\n appearance = 'accent',\n size = 'm',\n selected,\n textLevel = '1',\n before,\n after,\n expandable,\n children,\n className,\n ...restProps\n}: SubnavigationButtonProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n hasActive={false}\n focusVisibleMode=\"outside\"\n className={classNames(\n styles['SubnavigationButton'],\n sizeStyles[size],\n modeStyles[mode],\n appearanceStyles[appearance],\n selected && styles['SubnavigationButton--selected'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n >\n <span className={styles['SubnavigationButton__in']}>\n {before && <span className={styles['SubnavigationButton__before']}>{before}</span>}\n <SubnavigationButtonTypography\n textLevel={textLevel}\n className={styles['SubnavigationButton__label']}\n Component=\"span\"\n >\n {children}\n </SubnavigationButtonTypography>\n {after && <span className={styles['SubnavigationButton__after']}>{after}</span>}\n {expandable && <Icon16Dropdown className={styles['SubnavigationButton__expandableIcon']} />}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","Icon16Dropdown","classNames","useAdaptivity","SizeType","Tappable","Caption","Subhead","styles","appearanceStyles","accent","neutral","modeStyles","primary","outline","tertiary","sizeStyles","s","m","l","sizeYClassNames","none","COMPACT","SubnavigationButtonTypography","textLevel","restProps","level","SubnavigationButton","mode","appearance","size","selected","before","after","expandable","children","className","sizeY","hasActive","focusVisibleMode","REGULAR","span","Component"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,QAAQ,QAAuB,uBAAuB;AAC/D,SAASC,OAAO,QAAQ,gCAAgC;AACxD,SAASC,OAAO,QAAQ,gCAAgC;AACxD,OAAOC,YAAY,mCAAmC;AAEtD,MAAMC,mBAAmB;IACvBC,QAAQF,MAAM,CAAC,yCAAyC;IACxDG,SAASH,MAAM,CAAC,0CAA0C;AAC5D;AAEA,MAAMI,aAAa;IACjBC,SAASL,MAAM,CAAC,oCAAoC;IACpDM,SAASN,MAAM,CAAC,oCAAoC;IACpDO,UAAUP,MAAM,CAAC,qCAAqC;AACxD;AAEA,MAAMQ,aAAa;IACjBC,GAAGT,MAAM,CAAC,8BAA8B;IACxCU,GAAGV,MAAM,CAAC,8BAA8B;IACxCW,GAAGX,MAAM,CAAC,8BAA8B;AAC1C;AAEA,MAAMY,kBAAkB;IACtBC,MAAMb,MAAM,CAAC,kCAAkC;IAC/C,CAACJ,SAASkB,OAAO,CAAC,EAAEd,MAAM,CAAC,qCAAqC;AAClE;AA6BA,MAAMe,gCAAgC,CAAC,EACrCC,SAAS,EACT,GAAGC,WACgC;IACnC,IAAID,cAAc,KAAK;QACrB,qBAAO,oBAACjB,SAAYkB;IACtB;IAEA,qBAAO,oBAACnB;QAAQoB,OAAOF,cAAc,MAAM,MAAM;QAAM,GAAGC,SAAS;;AACrE;AAEA;;CAEC,GACD,OAAO,MAAME,sBAAsB,CAAC,EAClCC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,OAAO,GAAG,EACVC,QAAQ,EACRP,YAAY,GAAG,EACfQ,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACT,GAAGX,WACsB;IACzB,MAAM,EAAEY,QAAQ,MAAM,EAAE,GAAGlC;IAE3B,qBACE,oBAACE;QACE,GAAGoB,SAAS;QACba,WAAW;QACXC,kBAAiB;QACjBH,WAAWlC,WACTM,MAAM,CAAC,sBAAsB,EAC7BQ,UAAU,CAACc,KAAK,EAChBlB,UAAU,CAACgB,KAAK,EAChBnB,gBAAgB,CAACoB,WAAW,EAC5BE,YAAYvB,MAAM,CAAC,gCAAgC,EACnD6B,UAAUjC,SAASoC,OAAO,IAAIpB,eAAe,CAACiB,MAAM,EACpDD;qBAGF,oBAACK;QAAKL,WAAW5B,MAAM,CAAC,0BAA0B;OAC/CwB,wBAAU,oBAACS;QAAKL,WAAW5B,MAAM,CAAC,8BAA8B;OAAGwB,uBACpE,oBAACT;QACCC,WAAWA;QACXY,WAAW5B,MAAM,CAAC,6BAA6B;QAC/CkC,WAAU;OAETP,WAEFF,uBAAS,oBAACQ;QAAKL,WAAW5B,MAAM,CAAC,6BAA6B;OAAGyB,QACjEC,4BAAc,oBAACjC;QAAemC,WAAW5B,MAAM,CAAC,sCAAsC;;AAI/F,EAAE"}
@@ -113,6 +113,15 @@
113
113
  box-shadow: inset 0 0 0 var(--vkui_internal--thin_border) var(--vkui--color_field_border_alpha);
114
114
  }
115
115
 
116
+ /**
117
+ * appearance
118
+ */
119
+
120
+ .SubnavigationButton--appearance-neutral .SubnavigationButton__expandableIcon,
121
+ .SubnavigationButton--appearance-neutral .SubnavigationButton__before {
122
+ color: var(--vkui--color_icon_primary);
123
+ }
124
+
116
125
  /**
117
126
  * selected
118
127
  */
@@ -124,14 +133,19 @@
124
133
  border: 0;
125
134
  }
126
135
 
127
- .SubnavigationButton--selected.SubnavigationButton--mode-tertiary {
136
+ .SubnavigationButton--selected.SubnavigationButton--mode-tertiary,
137
+ .SubnavigationButton--selected.SubnavigationButton--appearance-neutral {
128
138
  background-color: var(--vkui--color_transparent--active);
129
139
  color: var(--vkui--color_text_primary);
130
140
  }
131
141
 
132
- .SubnavigationButton--selected:not(.SubnavigationButton--mode-tertiary)
142
+ .SubnavigationButton--selected.SubnavigationButton--appearance-accent:not(
143
+ .SubnavigationButton--mode-tertiary
144
+ )
133
145
  .SubnavigationButton__before,
134
- .SubnavigationButton--selected:not(.SubnavigationButton--mode-tertiary)
146
+ .SubnavigationButton--selected.SubnavigationButton--appearance-accent:not(
147
+ .SubnavigationButton--mode-tertiary
148
+ )
135
149
  .SubnavigationButton__expandableIcon {
136
150
  color: var(--vkui--color_icon_contrast_themed);
137
151
  }
@@ -146,11 +160,18 @@
146
160
  --vkui_internal--counter_inherit_color: var(--vkui--color_text_contrast_themed);
147
161
  }
148
162
 
149
- .SubnavigationButton--selected:not(.SubnavigationButton--mode-tertiary) {
163
+ .SubnavigationButton--selected.SubnavigationButton--appearance-accent:not(
164
+ .SubnavigationButton--mode-tertiary
165
+ ) {
150
166
  --vkui_internal--counter_inherit_background: var(--vkui--color_background_content);
151
167
  --vkui_internal--counter_inherit_color: var(--vkui--color_text_accent_themed);
152
168
  }
153
169
 
170
+ .SubnavigationButton--selected.SubnavigationButton--appearance-neutral {
171
+ --vkui_internal--counter_inherit_background: var(--vkui--color_background_content);
172
+ --vkui_internal--counter_inherit_color: var(--vkui--color_text_primary);
173
+ }
174
+
154
175
  :global(.vkuiInternalSubnavigationBar--mode-fixed) .SubnavigationButton {
155
176
  flex: 1;
156
177
  min-width: 0;
@@ -1,34 +1,18 @@
1
1
  import * as React from 'react';
2
2
  import { type PlacementWithAuto } from '../../lib/floating';
3
3
  import { HasRootRef } from '../../types';
4
- import { type PopperArrowProps } from '../PopperArrow/PopperArrow';
5
- export interface TooltipProps {
4
+ import { type TooltipBaseProps } from '../TooltipBase/TooltipBase';
5
+ export interface TooltipProps extends Omit<TooltipBaseProps, 'arrowCoords' | 'arrowPlacement' | 'getArrowRef' | 'floatingStyle' | 'withArrow'> {
6
6
  /**
7
7
  * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает
8
8
  * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,
9
9
  * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.
10
10
  */
11
11
  children: React.ReactElement<HasRootRef<any>> | React.ReactElement;
12
- /**
13
- * Стиль отображения подсказки
14
- */
15
- appearance?: 'accent' | 'neutral' | 'white' | 'black' | 'inversion';
16
12
  /**
17
13
  * Если передан `false`, то рисуется просто `children`.
18
14
  */
19
15
  isShown?: boolean;
20
- /**
21
- * Текст тултипа.
22
- */
23
- text?: React.ReactNode;
24
- /**
25
- * Заголовок тултипа.
26
- */
27
- header?: React.ReactNode;
28
- /**
29
- * Положение по горизонтали (прижатие к левому или правому краю `children`).
30
- * Если не задано, позиция по горизонтали определятся автоматически
31
- */
32
16
  alignX?: 'center' | 'left' | 'right';
33
17
  /**
34
18
  * Положение по вертикали (расположение над или под `children`).
@@ -51,20 +35,6 @@ export interface TooltipProps {
51
35
  * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.
52
36
  */
53
37
  arrowPadding?: number;
54
- /**
55
- * Пользовательская SVG иконка.
56
- *
57
- * Требования:
58
- *
59
- * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).
60
- * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,
61
- * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.
62
- * (см. https://github.com/VKCOM/VKUI/pull/4496).
63
- * 3. Убедитесь, что компонент принимает все валидные для SVG параметры.
64
- * 4. Убедитесь, что SVG и её элементы наследует цвет через `fill="currentColor"`.
65
- * 5. Если стрелка наезжает на якорный элемент, то увеличьте значение параметра `offsetY`.
66
- */
67
- ArrowIcon?: PopperArrowProps['Icon'];
68
38
  /**
69
39
  * Сдвиг стрелочки относительно центра дочернего элемента.
70
40
  */
@@ -81,12 +51,8 @@ export interface TooltipProps {
81
51
  * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
82
52
  */
83
53
  placement?: PlacementWithAuto;
84
- /**
85
- * Пользовательские css-классы, будут добавлены на root-элемент
86
- */
87
- className?: string;
88
54
  }
89
55
  /**
90
56
  * @see https://vkcom.github.io/VKUI/#/Tooltip
91
57
  */
92
- export declare const Tooltip: ({ children, isShown: isShownProp, offsetX, offsetY, alignX, alignY, onClose, cornerOffset, cornerAbsoluteOffset, appearance, arrow, arrowPadding, ArrowIcon, placement: placementProp, text, header, className, ...restProps }: TooltipProps) => React.JSX.Element;
58
+ export declare const Tooltip: ({ children, isShown: isShownProp, offsetX, offsetY, alignX, alignY, onClose, cornerOffset, cornerAbsoluteOffset, arrow, arrowPadding, placement: placementProp, ...restProps }: TooltipProps) => React.JSX.Element;
@@ -1,27 +1,17 @@
1
1
  import * as React from 'react';
2
2
  import ReactDOM from 'react-dom';
3
- import { classNames, hasReactNode } from '@vkontakte/vkjs';
3
+ import { hasReactNode } from '@vkontakte/vkjs';
4
4
  import { useExternRef } from '../../hooks/useExternRef';
5
- import { useGlobalEventListener } from '../../hooks/useGlobalEventListener';
6
- import { useDOM } from '../../lib/dom';
7
5
  import { arrowMiddleware, autoPlacementMiddleware, autoUpdateFloatingElement, checkIsNotAutoPlacement, convertFloatingDataToReactCSSProperties, flipMiddleware, getAutoPlacementAlign, offsetMiddleware, shiftMiddleware, useFloating } from '../../lib/floating';
8
6
  import { warnOnce } from '../../lib/warnOnce';
9
7
  import { useNavTransition } from '../NavTransitionContext/NavTransitionContext';
10
- import { DefaultIcon } from '../PopperArrow/DefaultIcon';
11
- import { PopperArrow } from '../PopperArrow/PopperArrow';
12
- import { Subhead } from '../Typography/Subhead/Subhead';
8
+ import { TooltipBase } from '../TooltipBase/TooltipBase';
13
9
  import { tooltipContainerAttr } from './TooltipContainer';
14
10
  import styles from './Tooltip.module.css';
15
11
  const isDOMTypeElement = (element)=>{
16
12
  return /*#__PURE__*/ React.isValidElement(element) && typeof element.type === 'string';
17
13
  };
18
14
  const warn = warnOnce('Tooltip');
19
- const stylesAppearance = {
20
- accent: styles['Tooltip--appearance-accent'],
21
- white: styles['Tooltip--appearance-white'],
22
- black: styles['Tooltip--appearance-black'],
23
- inversion: styles['Tooltip--appearance-inversion']
24
- };
25
15
  function mapAlignX(x) {
26
16
  switch(x){
27
17
  case 'left':
@@ -43,7 +33,7 @@ function isVerticalPlacement(placement) {
43
33
  }
44
34
  /**
45
35
  * @see https://vkcom.github.io/VKUI/#/Tooltip
46
- */ export const Tooltip = ({ children, isShown: isShownProp = true, offsetX = 0, offsetY = 15, alignX, alignY, onClose, cornerOffset = 0, cornerAbsoluteOffset, appearance = 'accent', arrow = true, arrowPadding = 14, ArrowIcon = DefaultIcon, placement: placementProp, text, header, className, ...restProps })=>{
36
+ */ export const Tooltip = ({ children, isShown: isShownProp = true, offsetX = 0, offsetY = 15, alignX, alignY, onClose, cornerOffset = 0, cornerAbsoluteOffset, arrow = true, arrowPadding = 14, placement: placementProp, ...restProps })=>{
47
37
  const [arrowRef, setArrowRef] = React.useState(null);
48
38
  const [target, setTarget] = React.useState(null);
49
39
  /* eslint-disable no-restricted-properties */ const tooltipContainer = React.useMemo(()=>target?.closest(`[${tooltipContainerAttr}]`), [
@@ -132,33 +122,23 @@ function isVerticalPlacement(placement) {
132
122
  middleware: memoizedMiddlewares,
133
123
  whileElementsMounted: autoUpdateFloatingElement
134
124
  });
135
- const { document } = useDOM();
136
- useGlobalEventListener(document, 'click', isShown && onClose, {
137
- capture: true,
138
- passive: true
139
- });
140
125
  const childRef = isDOMTypeElement(children) ? children.ref : /*#__PURE__*/ React.isValidElement(children) ? children.props.getRootRef : null;
141
126
  const patchedRef = useExternRef(setTarget, refs.setReference, childRef);
142
127
  const child = /*#__PURE__*/ React.isValidElement(children) ? /*#__PURE__*/ React.cloneElement(children, {
143
128
  [isDOMTypeElement(children) ? 'ref' : 'getRootRef']: patchedRef
144
129
  }) : children;
145
- return /*#__PURE__*/ React.createElement(React.Fragment, null, child, isShown && target != null && /*#__PURE__*/ ReactDOM.createPortal(/*#__PURE__*/ React.createElement("div", {
130
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, child, isShown && target != null && /*#__PURE__*/ ReactDOM.createPortal(/*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(TooltipBase, {
146
131
  ...restProps,
147
- className: classNames(styles['Tooltip'], appearance !== 'neutral' && stylesAppearance[appearance], className)
148
- }, /*#__PURE__*/ React.createElement("div", {
149
- ref: refs.setFloating,
150
- style: convertFloatingDataToReactCSSProperties(floatingPositionStrategy, floatingDataX, floatingDataY)
151
- }, arrow && /*#__PURE__*/ React.createElement(PopperArrow, {
152
- coords: arrowCoords,
153
- placement: resolvedPlacement,
154
- arrowClassName: styles['Tooltip__arrow'],
155
- getRootRef: setArrowRef,
156
- Icon: ArrowIcon
132
+ getRootRef: refs.setFloating,
133
+ floatingStyle: convertFloatingDataToReactCSSProperties(floatingPositionStrategy, floatingDataX, floatingDataY),
134
+ withArrow: arrow,
135
+ arrowCoords: arrowCoords,
136
+ arrowPlacement: resolvedPlacement,
137
+ getArrowRef: setArrowRef
157
138
  }), /*#__PURE__*/ React.createElement("div", {
158
- className: styles['Tooltip__content']
159
- }, header && /*#__PURE__*/ React.createElement(Subhead, {
160
- weight: "2"
161
- }, header), text && /*#__PURE__*/ React.createElement(Subhead, null, text)))), tooltipContainer));
139
+ className: styles['Tooltip__overlay'],
140
+ onClickCapture: onClose
141
+ })), tooltipContainer));
162
142
  };
163
143
 
164
144
  //# sourceMappingURL=Tooltip.js.map