@finam/web-ui-kit-components 3.33.1 → 3.33.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 (243) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/Avatar/index.d.ts +1 -3
  3. package/dist/Avatar/index.d.ts.map +1 -1
  4. package/dist/Avatar/index.js +1 -5
  5. package/dist/Avatar/utils.d.ts.map +1 -1
  6. package/dist/Avatar/utils.js.map +1 -1
  7. package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.d.ts +2 -1
  8. package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  9. package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.js.map +1 -1
  10. package/dist/Breadcrumbs/utils/getRenderOnPageItems.d.ts.map +1 -1
  11. package/dist/Breadcrumbs/utils/getRenderOnPageItems.js +7 -8
  12. package/dist/Breadcrumbs/utils/getRenderOnPageItems.js.map +1 -1
  13. package/dist/Calendar/Calendar.js +8 -1
  14. package/dist/Calendar/Calendar.js.map +1 -1
  15. package/dist/Calendar/Calendar.styles.css +1 -1
  16. package/dist/Calendar/Calendar.styles.d.ts +1 -1
  17. package/dist/Calendar/Calendar.styles.d.ts.map +1 -1
  18. package/dist/Calendar/Calendar.styles.js +1 -1
  19. package/dist/Calendar/Calendar.styles.js.map +1 -1
  20. package/dist/Calendar/Day/Day.d.ts +3 -2
  21. package/dist/Calendar/Day/Day.d.ts.map +1 -1
  22. package/dist/Calendar/Day/Day.js +5 -2
  23. package/dist/Calendar/Day/Day.js.map +1 -1
  24. package/dist/Calendar/Day/Day.styles.css +2 -2
  25. package/dist/Calendar/Day/Day.styles.d.ts.map +1 -1
  26. package/dist/Calendar/Day/Day.styles.js.map +1 -1
  27. package/dist/Calendar/Day/index.d.ts +1 -3
  28. package/dist/Calendar/Day/index.d.ts.map +1 -1
  29. package/dist/Calendar/Day/index.js +1 -5
  30. package/dist/Calendar/DayWrapper.d.ts +1 -1
  31. package/dist/Calendar/DayWrapper.d.ts.map +1 -1
  32. package/dist/Calendar/DayWrapper.js +15 -7
  33. package/dist/Calendar/DayWrapper.js.map +1 -1
  34. package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.css +1 -1
  35. package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.d.ts +1 -1
  36. package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.d.ts.map +1 -1
  37. package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.js.map +1 -1
  38. package/dist/Calendar/SelectYearTable/SelectYearTable.styles.css +1 -1
  39. package/dist/Calendar/SelectYearTable/SelectYearTable.styles.d.ts +1 -1
  40. package/dist/Calendar/SelectYearTable/SelectYearTable.styles.d.ts.map +1 -1
  41. package/dist/Calendar/SelectYearTable/SelectYearTable.styles.js.map +1 -1
  42. package/dist/Calendar/SlideTransition/index.d.ts +1 -3
  43. package/dist/Calendar/SlideTransition/index.d.ts.map +1 -1
  44. package/dist/Calendar/SlideTransition/index.js +1 -5
  45. package/dist/Calendar/utils.js +9 -9
  46. package/dist/Calendar/utils.js.map +1 -1
  47. package/dist/Checkbox/Checkbox.styles.css +2 -2
  48. package/dist/Checkbox/Checkbox.styles.d.ts.map +1 -1
  49. package/dist/Checkbox/Checkbox.styles.js.map +1 -1
  50. package/dist/CheckboxField/index.d.ts +1 -3
  51. package/dist/CheckboxField/index.d.ts.map +1 -1
  52. package/dist/CheckboxField/index.js +1 -5
  53. package/dist/CheckboxField/types.d.ts +2 -2
  54. package/dist/CheckboxField/types.d.ts.map +1 -1
  55. package/dist/Chip/index.d.ts +1 -3
  56. package/dist/Chip/index.d.ts.map +1 -1
  57. package/dist/Chip/index.js +1 -5
  58. package/dist/ClickAwayListener/ClickAwayListener.d.ts.map +1 -1
  59. package/dist/ClickAwayListener/ClickAwayListener.js +3 -1
  60. package/dist/ClickAwayListener/ClickAwayListener.js.map +1 -1
  61. package/dist/ClickAwayListener/index.d.ts +1 -3
  62. package/dist/ClickAwayListener/index.d.ts.map +1 -1
  63. package/dist/ClickAwayListener/index.js +1 -5
  64. package/dist/Counter/index.d.ts +1 -3
  65. package/dist/Counter/index.d.ts.map +1 -1
  66. package/dist/Counter/index.js +1 -5
  67. package/dist/DatePicker/DatePicker.d.ts.map +1 -1
  68. package/dist/DatePicker/DatePicker.js +1 -1
  69. package/dist/DatePicker/DatePicker.js.map +1 -1
  70. package/dist/DateTimePeriod/index.d.ts +2 -5
  71. package/dist/DateTimePeriod/index.d.ts.map +1 -1
  72. package/dist/DateTimePeriod/index.js +1 -5
  73. package/dist/DateTimePicker/index.d.ts +1 -3
  74. package/dist/DateTimePicker/index.d.ts.map +1 -1
  75. package/dist/DateTimePicker/index.js +1 -5
  76. package/dist/Dialog/Dialog.js +1 -1
  77. package/dist/Dialog/Dialog.js.map +1 -1
  78. package/dist/DialogActions/index.d.ts +1 -3
  79. package/dist/DialogActions/index.d.ts.map +1 -1
  80. package/dist/DialogActions/index.js +1 -5
  81. package/dist/DialogContent/index.d.ts +1 -3
  82. package/dist/DialogContent/index.d.ts.map +1 -1
  83. package/dist/DialogContent/index.js +1 -5
  84. package/dist/DialogTitle/index.d.ts +1 -3
  85. package/dist/DialogTitle/index.d.ts.map +1 -1
  86. package/dist/DialogTitle/index.js +1 -5
  87. package/dist/Divider/index.d.ts +1 -3
  88. package/dist/Divider/index.d.ts.map +1 -1
  89. package/dist/Divider/index.js +1 -5
  90. package/dist/DraggablePopover/DraggablePopover.d.ts.map +1 -1
  91. package/dist/DraggablePopover/DraggablePopover.js +2 -2
  92. package/dist/DraggablePopover/DraggablePopover.js.map +1 -1
  93. package/dist/DraggablePopover/layersManager.d.ts +1 -1
  94. package/dist/DraggablePopover/layersManager.d.ts.map +1 -1
  95. package/dist/DraggablePopover/layersManager.js.map +1 -1
  96. package/dist/DropDownMenu/index.d.ts +1 -3
  97. package/dist/DropDownMenu/index.d.ts.map +1 -1
  98. package/dist/DropDownMenu/index.js +1 -5
  99. package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts +1 -3
  100. package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts.map +1 -1
  101. package/dist/FeatureCallout/FeatureCalloutActions/index.js +1 -5
  102. package/dist/FeatureCallout/FeatureCalloutText/index.d.ts +1 -3
  103. package/dist/FeatureCallout/FeatureCalloutText/index.d.ts.map +1 -1
  104. package/dist/FeatureCallout/FeatureCalloutText/index.js +1 -5
  105. package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts +1 -3
  106. package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts.map +1 -1
  107. package/dist/FeatureCallout/FeatureCalloutTitle/index.js +1 -5
  108. package/dist/FeatureCallout/index.d.ts +4 -7
  109. package/dist/FeatureCallout/index.d.ts.map +1 -1
  110. package/dist/FeatureCallout/index.js +1 -5
  111. package/dist/FeatureCallout/utils.d.ts.map +1 -1
  112. package/dist/FeatureCallout/utils.js +1 -37
  113. package/dist/FeatureCallout/utils.js.map +1 -1
  114. package/dist/FieldHint/index.d.ts +1 -3
  115. package/dist/FieldHint/index.d.ts.map +1 -1
  116. package/dist/FieldHint/index.js +1 -5
  117. package/dist/FilterButton/FilterButton.js +1 -1
  118. package/dist/FilterButton/FilterButton.js.map +1 -1
  119. package/dist/FormGroup/index.d.ts +1 -3
  120. package/dist/FormGroup/index.d.ts.map +1 -1
  121. package/dist/FormGroup/index.js +1 -5
  122. package/dist/Loader/index.d.ts +1 -3
  123. package/dist/Loader/index.d.ts.map +1 -1
  124. package/dist/Loader/index.js +1 -5
  125. package/dist/LoaderBackdrop/index.d.ts +1 -3
  126. package/dist/LoaderBackdrop/index.d.ts.map +1 -1
  127. package/dist/LoaderBackdrop/index.js +1 -5
  128. package/dist/LoaderDots/index.d.ts +1 -3
  129. package/dist/LoaderDots/index.d.ts.map +1 -1
  130. package/dist/LoaderDots/index.js +1 -5
  131. package/dist/MarketingButton/useMarketingAnimations.d.ts +2 -2
  132. package/dist/MarketingButton/useMarketingAnimations.d.ts.map +1 -1
  133. package/dist/MarketingButton/useMarketingAnimations.js +27 -14
  134. package/dist/MarketingButton/useMarketingAnimations.js.map +1 -1
  135. package/dist/Modal/ModalManager.d.ts +1 -1
  136. package/dist/Modal/ModalManager.d.ts.map +1 -1
  137. package/dist/Modal/ModalManager.js.map +1 -1
  138. package/dist/Modal/Portal.js +1 -1
  139. package/dist/Modal/Portal.js.map +1 -1
  140. package/dist/ModalsProvider/index.d.ts +1 -3
  141. package/dist/ModalsProvider/index.d.ts.map +1 -1
  142. package/dist/ModalsProvider/index.js +1 -6
  143. package/dist/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  144. package/dist/MultiSelectField/MultiSelectField.js +3 -8
  145. package/dist/MultiSelectField/MultiSelectField.js.map +1 -1
  146. package/dist/MultiSelectField/index.d.ts +1 -3
  147. package/dist/MultiSelectField/index.d.ts.map +1 -1
  148. package/dist/MultiSelectField/index.js +1 -5
  149. package/dist/NumberTextField/NumberTextField.js +4 -4
  150. package/dist/NumberTextField/NumberTextField.js.map +1 -1
  151. package/dist/NumberTextField/index.d.ts +1 -3
  152. package/dist/NumberTextField/index.d.ts.map +1 -1
  153. package/dist/NumberTextField/index.js +1 -5
  154. package/dist/NumberTextField/utils.d.ts.map +1 -1
  155. package/dist/NumberTextField/utils.js +1 -1
  156. package/dist/NumberTextField/utils.js.map +1 -1
  157. package/dist/PaginatorNumber/NavButton/index.d.ts +1 -3
  158. package/dist/PaginatorNumber/NavButton/index.d.ts.map +1 -1
  159. package/dist/PaginatorNumber/NavButton/index.js +1 -5
  160. package/dist/PaginatorNumber/PageButton/index.d.ts +1 -3
  161. package/dist/PaginatorNumber/PageButton/index.d.ts.map +1 -1
  162. package/dist/PaginatorNumber/PageButton/index.js +1 -5
  163. package/dist/PaginatorNumber/index.d.ts +1 -3
  164. package/dist/PaginatorNumber/index.d.ts.map +1 -1
  165. package/dist/PaginatorNumber/index.js +1 -5
  166. package/dist/PaginatorOverflow/NavButton/index.d.ts +1 -3
  167. package/dist/PaginatorOverflow/NavButton/index.d.ts.map +1 -1
  168. package/dist/PaginatorOverflow/NavButton/index.js +1 -5
  169. package/dist/PaginatorOverflow/PaginatorOverflow.js +2 -2
  170. package/dist/PaginatorOverflow/PaginatorOverflow.js.map +1 -1
  171. package/dist/PaginatorOverflow/index.d.ts +1 -3
  172. package/dist/PaginatorOverflow/index.d.ts.map +1 -1
  173. package/dist/PaginatorOverflow/index.js +1 -5
  174. package/dist/Paper/types.d.ts +6 -1
  175. package/dist/Paper/types.d.ts.map +1 -1
  176. package/dist/Paper/utils.d.ts +2 -2
  177. package/dist/PickersUtilsProvider/defaultDateFormatUtils.js +1 -1
  178. package/dist/PickersUtilsProvider/defaultDateFormatUtils.js.map +1 -1
  179. package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js +4 -4
  180. package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js.map +1 -1
  181. package/dist/PickersUtilsProvider/utils.js +1 -1
  182. package/dist/PickersUtilsProvider/utils.js.map +1 -1
  183. package/dist/ProductCard/layouts/ipo/Content.d.ts +2 -2
  184. package/dist/ProductCard/layouts/ipo/Content.d.ts.map +1 -1
  185. package/dist/ProductCard/layouts/ipo/Content.js.map +1 -1
  186. package/dist/ProductCard/utils.d.ts.map +1 -1
  187. package/dist/ProductCard/utils.js +4 -1
  188. package/dist/ProductCard/utils.js.map +1 -1
  189. package/dist/Skeleton/index.d.ts +2 -3
  190. package/dist/Skeleton/index.d.ts.map +1 -1
  191. package/dist/Skeleton/index.js +1 -5
  192. package/dist/Slider/Slider.js +9 -5
  193. package/dist/Slider/Slider.js.map +1 -1
  194. package/dist/Snackbar/Snackbar.js.map +1 -1
  195. package/dist/Stepper/index.d.ts +2 -3
  196. package/dist/Stepper/index.d.ts.map +1 -1
  197. package/dist/Stepper/index.js +1 -5
  198. package/dist/Tab/Tab.d.ts +2 -1
  199. package/dist/Tab/Tab.d.ts.map +1 -1
  200. package/dist/Tab/Tab.js +1 -1
  201. package/dist/Tab/Tab.js.map +1 -1
  202. package/dist/Tag/Tag.d.ts.map +1 -1
  203. package/dist/Tag/Tag.js +2 -13
  204. package/dist/Tag/Tag.js.map +1 -1
  205. package/dist/Tag/Tag.styles.css +1 -1
  206. package/dist/Tag/Tag.styles.d.ts.map +1 -1
  207. package/dist/Tag/Tag.styles.js.map +1 -1
  208. package/dist/Tooltip/Tooltip.js.map +1 -1
  209. package/dist/index.js +1 -1
  210. package/package.json +2 -1
  211. package/dist/Avatar/index.js.map +0 -1
  212. package/dist/Calendar/Day/index.js.map +0 -1
  213. package/dist/Calendar/SlideTransition/index.js.map +0 -1
  214. package/dist/CheckboxField/index.js.map +0 -1
  215. package/dist/Chip/index.js.map +0 -1
  216. package/dist/ClickAwayListener/index.js.map +0 -1
  217. package/dist/Counter/index.js.map +0 -1
  218. package/dist/DateTimePeriod/index.js.map +0 -1
  219. package/dist/DateTimePicker/index.js.map +0 -1
  220. package/dist/DialogActions/index.js.map +0 -1
  221. package/dist/DialogContent/index.js.map +0 -1
  222. package/dist/DialogTitle/index.js.map +0 -1
  223. package/dist/Divider/index.js.map +0 -1
  224. package/dist/DropDownMenu/index.js.map +0 -1
  225. package/dist/FeatureCallout/FeatureCalloutActions/index.js.map +0 -1
  226. package/dist/FeatureCallout/FeatureCalloutText/index.js.map +0 -1
  227. package/dist/FeatureCallout/FeatureCalloutTitle/index.js.map +0 -1
  228. package/dist/FeatureCallout/index.js.map +0 -1
  229. package/dist/FieldHint/index.js.map +0 -1
  230. package/dist/FormGroup/index.js.map +0 -1
  231. package/dist/Loader/index.js.map +0 -1
  232. package/dist/LoaderBackdrop/index.js.map +0 -1
  233. package/dist/LoaderDots/index.js.map +0 -1
  234. package/dist/ModalsProvider/index.js.map +0 -1
  235. package/dist/MultiSelectField/index.js.map +0 -1
  236. package/dist/NumberTextField/index.js.map +0 -1
  237. package/dist/PaginatorNumber/NavButton/index.js.map +0 -1
  238. package/dist/PaginatorNumber/PageButton/index.js.map +0 -1
  239. package/dist/PaginatorNumber/index.js.map +0 -1
  240. package/dist/PaginatorOverflow/NavButton/index.js.map +0 -1
  241. package/dist/PaginatorOverflow/index.js.map +0 -1
  242. package/dist/Skeleton/index.js.map +0 -1
  243. package/dist/Stepper/index.js.map +0 -1
@@ -56,7 +56,7 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
56
56
  const newValue = valueReducer(rawValue, props, event);
57
57
  const hiddenInput = hiddenInputsRef.current[currentIndex];
58
58
  const previousValue = null == hiddenInput ? void 0 : hiddenInput.value;
59
- if (hiddenInput && null !== newValue && newValue !== parseFloat(previousValue) && 'function' == typeof onChange) triggerChangeEvent(hiddenInput, newValue);
59
+ if (hiddenInput && null !== newValue && newValue !== parseFloat(null != previousValue ? previousValue : '') && 'function' == typeof onChange) triggerChangeEvent(hiddenInput, newValue);
60
60
  }, [
61
61
  props,
62
62
  valueReducer,
@@ -128,8 +128,9 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
128
128
  handleDragEnd
129
129
  ]);
130
130
  const handleMouseDown = useCallback((event)=>{
131
+ var _event_currentTarget_getAttribute;
131
132
  event.preventDefault();
132
- const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR));
133
+ const index = parseFloat(null != (_event_currentTarget_getAttribute = event.currentTarget.getAttribute(INDEX_ATTR)) ? _event_currentTarget_getAttribute : '');
133
134
  setActiveIndex(index);
134
135
  const value = calculateValueFromPercent(event.nativeEvent);
135
136
  const newValue = valueReducer(value, props, event.nativeEvent);
@@ -162,10 +163,11 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
162
163
  handleMouseUp
163
164
  ]);
164
165
  const handleTouchStart = useCallback((event)=>{
166
+ var _event_currentTarget_getAttribute;
165
167
  event.preventDefault();
166
168
  const touch = event.changedTouches.item(0);
167
169
  if (null != touch) touchIdRef.current = touch.identifier;
168
- const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR));
170
+ const index = parseFloat(null != (_event_currentTarget_getAttribute = event.currentTarget.getAttribute(INDEX_ATTR)) ? _event_currentTarget_getAttribute : '');
169
171
  setActiveIndex(index);
170
172
  const value = calculateValueFromPercent(event.nativeEvent);
171
173
  const newValue = valueReducer(value, props, event.nativeEvent);
@@ -191,7 +193,8 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
191
193
  handleMouseMove
192
194
  ]);
193
195
  const handleKeyDown = useCallback((event)=>{
194
- const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR));
196
+ var _event_currentTarget_getAttribute;
197
+ const index = parseFloat(null != (_event_currentTarget_getAttribute = event.currentTarget.getAttribute(INDEX_ATTR)) ? _event_currentTarget_getAttribute : '');
195
198
  const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;
196
199
  const onePercent = Math.abs((max - min) / 100);
197
200
  const step = stepProp || onePercent;
@@ -232,7 +235,8 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
232
235
  ]);
233
236
  const handleChange = useCallback((event)=>{
234
237
  if (onChange) {
235
- const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR));
238
+ var _event_currentTarget_getAttribute;
239
+ const index = parseFloat(null != (_event_currentTarget_getAttribute = event.currentTarget.getAttribute(INDEX_ATTR)) ? _event_currentTarget_getAttribute : '');
236
240
  let newValue;
237
241
  if (Array.isArray(valueProp)) {
238
242
  newValue = [
@@ -1 +1 @@
1
- {"version":3,"file":"Slider/Slider.js","sources":["../../src/Slider/Slider.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef, useState, memo } from 'react';\nimport type * as React from 'react';\nimport classnames from 'clsx';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport {\n Root,\n Container,\n ThumbWrapper,\n Thumb,\n HiddenNumberInput,\n TrackSvg,\n RailLine,\n TrackLine,\n} from './Slider.styles.js';\nimport {\n clamp,\n percentToValue,\n valueToPercent,\n roundToStep,\n getTouch,\n calculatePercent,\n preventPageScrolling,\n} from './utils.js';\n\ninterface OuterProps extends Omit<React.ComponentPropsWithoutRef<typeof Root>, 'onChange' | 'onDragStart' | 'onDragEnd'> {\n /** Флаг неактивного состояния компонента */\n disabled?: boolean;\n /** from HTMLInputElement */\n name?: string;\n /** Состояние значения компонента */\n value: number;\n /** Минимально возможное значение компонента */\n min?: number;\n /** Максимально возможное значение компонента */\n max?: number;\n /** Шаг изменения значения компонента */\n step?: number;\n /** Отображение меток шага */\n marks?: boolean;\n /** Вариант цветовой схемы */\n color?: 'default' | 'alternative';\n /** Обработчик изменения значения */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number) => void;\n /** Обработчик начала захвата ползунка */\n onDragStart?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Обработчик завершения захвата ползунка */\n onDragEnd?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Переключение на вертикальный вид слайдера */\n vertical?: boolean;\n /** Кастомный обработчик значения перед его изменением */\n valueReducer?: (\n rawValue: number | null,\n props: Props,\n event: MouseEvent | TouchEvent | KeyboardEvent,\n ) => number | null;\n}\n\ninterface OuterPropsRange extends Omit<OuterProps, 'value' | 'onChange'> {\n /** или массив значений */\n value: number[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number[]) => void;\n}\n\nexport type Props = OuterProps | OuterPropsRange;\n\nconst INDEX_ATTR = 'data-index';\n\nexport function defaultValueReducer(rawValue: number | null, props: Props) {\n const { disabled, step } = props;\n\n if (disabled || rawValue === null) {\n return null;\n }\n\n if (step) {\n return roundToStep(rawValue, step);\n }\n\n return Number(rawValue.toFixed(3));\n}\n\nconst Slider = forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n className,\n disabled,\n value: valueProp,\n min = 0,\n max = 100,\n step: stepProp,\n marks,\n onChange,\n onDragStart,\n onDragEnd,\n vertical,\n valueReducer = defaultValueReducer,\n name,\n color = 'default',\n ...otherProps\n } = props;\n\n const touchIdRef = useRef<number | undefined>(undefined);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const removeListenersRef = useRef<VoidFunction | undefined>(undefined);\n const [activeIndex, setActiveIndex] = useState<number>();\n const activeIndexRef = useRef(activeIndex);\n\n if (disabled && activeIndex !== undefined) {\n setActiveIndex(undefined);\n }\n if (activeIndex !== activeIndexRef.current) {\n activeIndexRef.current = activeIndex;\n }\n\n useEffect(() => () => {\n if (removeListenersRef.current) {\n removeListenersRef.current();\n }\n }, []);\n\n const focusThumb = (index: number) => {\n if (\n !containerRef.current?.contains(document.activeElement) ||\n Number(document.activeElement?.getAttribute('data-index')) !== index\n ) {\n containerRef.current\n ?.querySelector<HTMLElement>(`[role=\"slider\"][data-index=\"${index}\"]`)\n ?.focus();\n }\n\n setActiveIndex(prevIndex => (\n prevIndex !== undefined && index !== prevIndex ? index : prevIndex\n ));\n };\n\n const emitChange = useCallback((\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rawValue: number | null,\n index?: number,\n ) => {\n const currentIndex = index === undefined ? activeIndexRef.current : index;\n if (currentIndex === undefined) {\n return;\n }\n\n const newValue = valueReducer(rawValue, props, event);\n const hiddenInput = hiddenInputsRef.current[currentIndex];\n const previousValue = hiddenInput?.value;\n\n if (\n hiddenInput &&\n newValue !== null &&\n newValue !== parseFloat(previousValue!) &&\n typeof onChange === 'function'\n ) {\n triggerChangeEvent(hiddenInput, newValue);\n }\n }, [props, valueReducer, onChange]);\n\n const calculateValueFromPercent = useCallback((event: MouseEvent | TouchEvent): number | null => {\n const percent = containerRef.current && calculatePercent(\n containerRef.current,\n event,\n touchIdRef.current,\n vertical,\n );\n\n return percent != null ? percentToValue(percent, min, max) : null;\n }, [vertical, min, max]);\n\n const handleClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const value = calculateValueFromPercent(event.nativeEvent);\n\n if (value == null) {\n return;\n }\n\n if (Array.isArray(valueProp)) {\n let index;\n let prevDiff: number | undefined;\n\n valueProp.forEach((val, i) => {\n const diff = Math.abs(val - value);\n\n if (prevDiff === undefined || diff < prevDiff) {\n index = i;\n prevDiff = diff;\n }\n });\n\n emitChange(event.nativeEvent, value, index);\n } else {\n emitChange(event.nativeEvent, value, 0);\n }\n }, [calculateValueFromPercent, emitChange, valueProp]);\n\n const handleDragEnd = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n const newValue = valueReducer(value, props, event);\n\n setActiveIndex(undefined);\n\n if (removeListenersRef.current) {\n removeListenersRef.current();\n removeListenersRef.current = undefined;\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd(event, newValue);\n }\n }, [calculateValueFromPercent, valueReducer, props, onDragEnd]);\n\n const handleMouseEnter = useCallback((event: MouseEvent) => {\n // If the slider was being interacted with but the mouse went off the window\n // and then re-entered while unclicked then end the interaction.\n if (event.buttons === 0) {\n handleDragEnd(event);\n }\n }, [handleDragEnd]);\n\n const handleMouseMove = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n\n emitChange(event, value);\n }, [calculateValueFromPercent, emitChange]);\n\n const handleMouseLeave = useCallback((event: MouseEvent) => {\n // The mouse will have moved between the last mouse move event\n // this mouse leave event\n handleMouseMove(event);\n }, [handleMouseMove]);\n\n const handleMouseUp = useCallback((event: MouseEvent | TouchEvent) => {\n handleDragEnd(event);\n }, [handleDragEnd]);\n\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR)!);\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n\n document.body.addEventListener('mouseenter', handleMouseEnter);\n document.body.addEventListener('mouseleave', handleMouseLeave);\n document.body.addEventListener('mousemove', handleMouseMove);\n document.body.addEventListener('mouseup', handleMouseUp);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('mouseenter', handleMouseEnter);\n document.body.removeEventListener('mouseleave', handleMouseLeave);\n document.body.removeEventListener('mousemove', handleMouseMove);\n document.body.removeEventListener('mouseup', handleMouseUp);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [\n calculateValueFromPercent, valueReducer, props,\n handleMouseEnter, handleMouseLeave, handleMouseMove, handleMouseUp, onDragStart,\n ]);\n\n const handleTouchEnd = useCallback((event: TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseUp(event);\n return;\n }\n const touch = getTouch(event, touchIdRef.current);\n if (touch) {\n handleMouseUp(event);\n }\n }, [handleMouseUp]);\n\n const handleTouchStart = useCallback((event: React.TouchEvent) => {\n event.preventDefault();\n const touch = event.changedTouches.item(0);\n if (touch != null) {\n touchIdRef.current = touch.identifier;\n }\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR)!);\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n emitChange(event.nativeEvent, value);\n\n document.body.addEventListener('touchend', handleTouchEnd);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('touchend', handleTouchEnd);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [calculateValueFromPercent, emitChange, handleTouchEnd, onDragStart, props, valueReducer]);\n\n const handleTouchMove = useCallback(({ nativeEvent }: React.TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseMove(nativeEvent);\n return;\n }\n\n const touch = getTouch(nativeEvent, touchIdRef.current);\n if (touch) {\n handleMouseMove(nativeEvent);\n }\n }, [handleMouseMove]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR)!);\n\n const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;\n\n const onePercent = Math.abs((max - min) / 100);\n const step = stepProp || onePercent;\n let value;\n\n switch (event.key) {\n case 'Home':\n value = min;\n break;\n case 'End':\n value = max;\n break;\n case 'PageUp':\n value = currentValue + onePercent * 10;\n break;\n case 'PageDown':\n value = currentValue - onePercent * 10;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n value = currentValue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n value = currentValue - step;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n value = clamp(value, min, max);\n\n emitChange(event.nativeEvent, value, index);\n }, [emitChange, max, min, stepProp, valueProp]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR)!);\n\n let newValue;\n\n if (Array.isArray(valueProp)) {\n newValue = [...valueProp];\n const eventValue = parseFloat(event.target.value);\n newValue[index] = eventValue;\n\n newValue.sort((a, b) => a - b);\n\n focusThumb(newValue.indexOf(eventValue));\n } else {\n newValue = parseFloat(event.target.value);\n }\n\n onChange(event, newValue as number & number[]);\n }\n }, [onChange, valueProp]);\n\n const handleRef = (node: HTMLDivElement | null) => {\n const nextContainer = node;\n const prevContainer = containerRef.current;\n\n if (prevContainer !== nextContainer) {\n if (prevContainer) {\n prevContainer.removeEventListener('touchstart', preventPageScrolling);\n }\n if (nextContainer) {\n nextContainer.addEventListener('touchstart', preventPageScrolling, { passive: false });\n }\n }\n\n containerRef.current = nextContainer;\n };\n\n const handleInputRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n const index = node.getAttribute(INDEX_ATTR);\n\n if (index != null) {\n hiddenInputsRef.current[parseInt(index, 10)] = node;\n }\n }\n }, []);\n\n const calculateTrackPoints = (offset: number, leap: number) => {\n if (vertical) {\n return {\n x1: 1,\n y1: 100 - offset,\n x2: 1,\n y2: 100 - leap,\n };\n }\n\n return {\n x1: offset,\n y1: 1,\n x2: leap,\n y2: 1,\n };\n };\n\n const values = Array.isArray(valueProp) ? valueProp : [valueProp == null ? min : valueProp];\n\n const startValue = Array.isArray(valueProp) ? valueProp[0] : min;\n const endValue = values[values.length - 1];\n\n const tracksCount = marks && stepProp ? (((max - min) / stepProp)) : undefined;\n\n const rootClassName = classnames(\n className,\n {\n vertical,\n disabled,\n activated: activeIndex !== undefined,\n discrete: tracksCount && stepProp != null ? 'discrete' : undefined,\n alternative: color === 'alternative',\n },\n );\n\n return (\n <Root\n className={rootClassName}\n onClick={handleClick}\n {...otherProps}\n ref={ref}\n >\n <Container ref={handleRef} className=\"ui-slider__container\">\n <TrackSvg viewBox={vertical ? '0 0 2 100' : '0 0 100 2'} preserveAspectRatio=\"none\" className=\"ui-slider__track\">\n {\n tracksCount && stepProp != null\n ? Array.from({ length: tracksCount }).map((_, i) => {\n const trackStart = min + i * stepProp;\n const trackEnd = trackStart + stepProp;\n const trackOffset = valueToPercent(trackStart, min, max) + (i === 0 ? 0 : 0.2);\n const trackLeap = valueToPercent(trackEnd, min, max) -\n (i === tracksCount - 1 ? 0 : 0.2);\n const active = trackStart >= startValue && trackEnd <= endValue;\n return (\n <TrackLine\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ active })}\n {...calculateTrackPoints(trackOffset, trackLeap)}\n />\n );\n })\n : (\n <>\n <RailLine\n {...calculateTrackPoints(0, 100)}\n />\n <TrackLine\n className=\"active\"\n {...calculateTrackPoints(\n valueToPercent(startValue, min, max),\n valueToPercent(endValue, min, max),\n )}\n />\n </>\n )\n }\n </TrackSvg>\n {\n values.map((val, i) => {\n const percent = clamp(valueToPercent(val, min, max));\n\n const stylesThumbWrapper = {\n [vertical ? 'bottom' : 'left']: `${percent}%`,\n };\n\n return (\n <ThumbWrapper\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ activated: activeIndex === i })}\n style={stylesThumbWrapper}\n onMouseDown={handleMouseDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n data-index={i}\n >\n <Thumb\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n type=\"button\"\n role=\"slider\"\n data-index={i}\n className=\"ui-slider__thumb\"\n />\n <HiddenNumberInput\n type=\"number\"\n name={name}\n data-index={i}\n value={val}\n onChange={handleChange}\n ref={handleInputRef}\n />\n </ThumbWrapper>\n );\n })\n }\n </Container>\n </Root>\n );\n});\n\nexport default memo(Slider);\n"],"names":["INDEX_ATTR","defaultValueReducer","rawValue","props","disabled","step","roundToStep","Number","Slider","forwardRef","ref","className","valueProp","min","max","stepProp","marks","onChange","onDragStart","onDragEnd","vertical","valueReducer","name","color","otherProps","touchIdRef","useRef","undefined","containerRef","hiddenInputsRef","removeListenersRef","activeIndex","setActiveIndex","useState","activeIndexRef","useEffect","focusThumb","index","_containerRef_current","_document_activeElement","document","_containerRef_current_querySelector","prevIndex","emitChange","useCallback","event","currentIndex","newValue","hiddenInput","previousValue","parseFloat","triggerChangeEvent","calculateValueFromPercent","percent","calculatePercent","percentToValue","handleClick","value","Array","prevDiff","val","i","diff","Math","handleDragEnd","handleMouseEnter","handleMouseMove","handleMouseLeave","handleMouseUp","handleMouseDown","handleTouchEnd","touch","getTouch","handleTouchStart","handleTouchMove","nativeEvent","handleKeyDown","currentValue","onePercent","clamp","handleChange","eventValue","a","b","handleRef","node","nextContainer","prevContainer","preventPageScrolling","handleInputRef","parseInt","calculateTrackPoints","offset","leap","values","startValue","endValue","tracksCount","rootClassName","classnames","Root","Container","TrackSvg","_","trackStart","trackEnd","trackOffset","valueToPercent","trackLeap","active","TrackLine","RailLine","stylesThumbWrapper","ThumbWrapper","Thumb","HiddenNumberInput","memo"],"mappings":"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"}
1
+ {"version":3,"file":"Slider/Slider.js","sources":["../../src/Slider/Slider.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef, useState, memo } from 'react';\nimport type * as React from 'react';\nimport classnames from 'clsx';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport {\n Root,\n Container,\n ThumbWrapper,\n Thumb,\n HiddenNumberInput,\n TrackSvg,\n RailLine,\n TrackLine,\n} from './Slider.styles.js';\nimport {\n clamp,\n percentToValue,\n valueToPercent,\n roundToStep,\n getTouch,\n calculatePercent,\n preventPageScrolling,\n} from './utils.js';\n\ninterface OuterProps extends Omit<React.ComponentPropsWithoutRef<typeof Root>, 'onChange' | 'onDragStart' | 'onDragEnd'> {\n /** Флаг неактивного состояния компонента */\n disabled?: boolean;\n /** from HTMLInputElement */\n name?: string;\n /** Состояние значения компонента */\n value: number;\n /** Минимально возможное значение компонента */\n min?: number;\n /** Максимально возможное значение компонента */\n max?: number;\n /** Шаг изменения значения компонента */\n step?: number;\n /** Отображение меток шага */\n marks?: boolean;\n /** Вариант цветовой схемы */\n color?: 'default' | 'alternative';\n /** Обработчик изменения значения */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number) => void;\n /** Обработчик начала захвата ползунка */\n onDragStart?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Обработчик завершения захвата ползунка */\n onDragEnd?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Переключение на вертикальный вид слайдера */\n vertical?: boolean;\n /** Кастомный обработчик значения перед его изменением */\n valueReducer?: (\n rawValue: number | null,\n props: Props,\n event: MouseEvent | TouchEvent | KeyboardEvent,\n ) => number | null;\n}\n\ninterface OuterPropsRange extends Omit<OuterProps, 'value' | 'onChange'> {\n /** или массив значений */\n value: number[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number[]) => void;\n}\n\nexport type Props = OuterProps | OuterPropsRange;\n\nconst INDEX_ATTR = 'data-index';\n\nexport function defaultValueReducer(rawValue: number | null, props: Props) {\n const { disabled, step } = props;\n\n if (disabled || rawValue === null) {\n return null;\n }\n\n if (step) {\n return roundToStep(rawValue, step);\n }\n\n return Number(rawValue.toFixed(3));\n}\n\nconst Slider = forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n className,\n disabled,\n value: valueProp,\n min = 0,\n max = 100,\n step: stepProp,\n marks,\n onChange,\n onDragStart,\n onDragEnd,\n vertical,\n valueReducer = defaultValueReducer,\n name,\n color = 'default',\n ...otherProps\n } = props;\n\n const touchIdRef = useRef<number | undefined>(undefined);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const removeListenersRef = useRef<VoidFunction | undefined>(undefined);\n const [activeIndex, setActiveIndex] = useState<number>();\n const activeIndexRef = useRef(activeIndex);\n\n if (disabled && activeIndex !== undefined) {\n setActiveIndex(undefined);\n }\n if (activeIndex !== activeIndexRef.current) {\n activeIndexRef.current = activeIndex;\n }\n\n useEffect(() => () => {\n if (removeListenersRef.current) {\n removeListenersRef.current();\n }\n }, []);\n\n const focusThumb = (index: number) => {\n if (\n !containerRef.current?.contains(document.activeElement) ||\n Number(document.activeElement?.getAttribute('data-index')) !== index\n ) {\n containerRef.current\n ?.querySelector<HTMLElement>(`[role=\"slider\"][data-index=\"${index}\"]`)\n ?.focus();\n }\n\n setActiveIndex(prevIndex => (\n prevIndex !== undefined && index !== prevIndex ? index : prevIndex\n ));\n };\n\n const emitChange = useCallback((\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rawValue: number | null,\n index?: number,\n ) => {\n const currentIndex = index === undefined ? activeIndexRef.current : index;\n if (currentIndex === undefined) {\n return;\n }\n\n const newValue = valueReducer(rawValue, props, event);\n const hiddenInput = hiddenInputsRef.current[currentIndex];\n const previousValue = hiddenInput?.value;\n\n if (\n hiddenInput &&\n newValue !== null &&\n newValue !== parseFloat(previousValue ?? '') &&\n typeof onChange === 'function'\n ) {\n triggerChangeEvent(hiddenInput, newValue);\n }\n }, [props, valueReducer, onChange]);\n\n const calculateValueFromPercent = useCallback((event: MouseEvent | TouchEvent): number | null => {\n const percent = containerRef.current && calculatePercent(\n containerRef.current,\n event,\n touchIdRef.current,\n vertical,\n );\n\n return percent != null ? percentToValue(percent, min, max) : null;\n }, [vertical, min, max]);\n\n const handleClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const value = calculateValueFromPercent(event.nativeEvent);\n\n if (value == null) {\n return;\n }\n\n if (Array.isArray(valueProp)) {\n let index;\n let prevDiff: number | undefined;\n\n valueProp.forEach((val, i) => {\n const diff = Math.abs(val - value);\n\n if (prevDiff === undefined || diff < prevDiff) {\n index = i;\n prevDiff = diff;\n }\n });\n\n emitChange(event.nativeEvent, value, index);\n } else {\n emitChange(event.nativeEvent, value, 0);\n }\n }, [calculateValueFromPercent, emitChange, valueProp]);\n\n const handleDragEnd = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n const newValue = valueReducer(value, props, event);\n\n setActiveIndex(undefined);\n\n if (removeListenersRef.current) {\n removeListenersRef.current();\n removeListenersRef.current = undefined;\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd(event, newValue);\n }\n }, [calculateValueFromPercent, valueReducer, props, onDragEnd]);\n\n const handleMouseEnter = useCallback((event: MouseEvent) => {\n // If the slider was being interacted with but the mouse went off the window\n // and then re-entered while unclicked then end the interaction.\n if (event.buttons === 0) {\n handleDragEnd(event);\n }\n }, [handleDragEnd]);\n\n const handleMouseMove = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n\n emitChange(event, value);\n }, [calculateValueFromPercent, emitChange]);\n\n const handleMouseLeave = useCallback((event: MouseEvent) => {\n // The mouse will have moved between the last mouse move event\n // this mouse leave event\n handleMouseMove(event);\n }, [handleMouseMove]);\n\n const handleMouseUp = useCallback((event: MouseEvent | TouchEvent) => {\n handleDragEnd(event);\n }, [handleDragEnd]);\n\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n\n document.body.addEventListener('mouseenter', handleMouseEnter);\n document.body.addEventListener('mouseleave', handleMouseLeave);\n document.body.addEventListener('mousemove', handleMouseMove);\n document.body.addEventListener('mouseup', handleMouseUp);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('mouseenter', handleMouseEnter);\n document.body.removeEventListener('mouseleave', handleMouseLeave);\n document.body.removeEventListener('mousemove', handleMouseMove);\n document.body.removeEventListener('mouseup', handleMouseUp);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [\n calculateValueFromPercent, valueReducer, props,\n handleMouseEnter, handleMouseLeave, handleMouseMove, handleMouseUp, onDragStart,\n ]);\n\n const handleTouchEnd = useCallback((event: TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseUp(event);\n return;\n }\n const touch = getTouch(event, touchIdRef.current);\n if (touch) {\n handleMouseUp(event);\n }\n }, [handleMouseUp]);\n\n const handleTouchStart = useCallback((event: React.TouchEvent) => {\n event.preventDefault();\n const touch = event.changedTouches.item(0);\n if (touch != null) {\n touchIdRef.current = touch.identifier;\n }\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n emitChange(event.nativeEvent, value);\n\n document.body.addEventListener('touchend', handleTouchEnd);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('touchend', handleTouchEnd);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [calculateValueFromPercent, emitChange, handleTouchEnd, onDragStart, props, valueReducer]);\n\n const handleTouchMove = useCallback(({ nativeEvent }: React.TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseMove(nativeEvent);\n return;\n }\n\n const touch = getTouch(nativeEvent, touchIdRef.current);\n if (touch) {\n handleMouseMove(nativeEvent);\n }\n }, [handleMouseMove]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;\n\n const onePercent = Math.abs((max - min) / 100);\n const step = stepProp || onePercent;\n let value;\n\n switch (event.key) {\n case 'Home':\n value = min;\n break;\n case 'End':\n value = max;\n break;\n case 'PageUp':\n value = currentValue + onePercent * 10;\n break;\n case 'PageDown':\n value = currentValue - onePercent * 10;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n value = currentValue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n value = currentValue - step;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n value = clamp(value, min, max);\n\n emitChange(event.nativeEvent, value, index);\n }, [emitChange, max, min, stepProp, valueProp]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n let newValue;\n\n if (Array.isArray(valueProp)) {\n newValue = [...valueProp];\n const eventValue = parseFloat(event.target.value);\n newValue[index] = eventValue;\n\n newValue.sort((a, b) => a - b);\n\n focusThumb(newValue.indexOf(eventValue));\n } else {\n newValue = parseFloat(event.target.value);\n }\n\n onChange(event, newValue as number & number[]);\n }\n }, [onChange, valueProp]);\n\n const handleRef = (node: HTMLDivElement | null) => {\n const nextContainer = node;\n const prevContainer = containerRef.current;\n\n if (prevContainer !== nextContainer) {\n if (prevContainer) {\n prevContainer.removeEventListener('touchstart', preventPageScrolling);\n }\n if (nextContainer) {\n nextContainer.addEventListener('touchstart', preventPageScrolling, { passive: false });\n }\n }\n\n containerRef.current = nextContainer;\n };\n\n const handleInputRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n const index = node.getAttribute(INDEX_ATTR);\n\n if (index != null) {\n hiddenInputsRef.current[parseInt(index, 10)] = node;\n }\n }\n }, []);\n\n const calculateTrackPoints = (offset: number, leap: number) => {\n if (vertical) {\n return {\n x1: 1,\n y1: 100 - offset,\n x2: 1,\n y2: 100 - leap,\n };\n }\n\n return {\n x1: offset,\n y1: 1,\n x2: leap,\n y2: 1,\n };\n };\n\n const values = Array.isArray(valueProp) ? valueProp : [valueProp == null ? min : valueProp];\n\n const startValue = Array.isArray(valueProp) ? valueProp[0] : min;\n const endValue = values[values.length - 1];\n\n const tracksCount = marks && stepProp ? (((max - min) / stepProp)) : undefined;\n\n const rootClassName = classnames(\n className,\n {\n vertical,\n disabled,\n activated: activeIndex !== undefined,\n discrete: tracksCount && stepProp != null ? 'discrete' : undefined,\n alternative: color === 'alternative',\n },\n );\n\n return (\n <Root\n className={rootClassName}\n onClick={handleClick}\n {...otherProps}\n ref={ref}\n >\n <Container ref={handleRef} className=\"ui-slider__container\">\n <TrackSvg viewBox={vertical ? '0 0 2 100' : '0 0 100 2'} preserveAspectRatio=\"none\" className=\"ui-slider__track\">\n {\n tracksCount && stepProp != null\n ? Array.from({ length: tracksCount }).map((_, i) => {\n const trackStart = min + i * stepProp;\n const trackEnd = trackStart + stepProp;\n const trackOffset = valueToPercent(trackStart, min, max) + (i === 0 ? 0 : 0.2);\n const trackLeap = valueToPercent(trackEnd, min, max) -\n (i === tracksCount - 1 ? 0 : 0.2);\n const active = trackStart >= startValue && trackEnd <= endValue;\n return (\n <TrackLine\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ active })}\n {...calculateTrackPoints(trackOffset, trackLeap)}\n />\n );\n })\n : (\n <>\n <RailLine\n {...calculateTrackPoints(0, 100)}\n />\n <TrackLine\n className=\"active\"\n {...calculateTrackPoints(\n valueToPercent(startValue, min, max),\n valueToPercent(endValue, min, max),\n )}\n />\n </>\n )\n }\n </TrackSvg>\n {\n values.map((val, i) => {\n const percent = clamp(valueToPercent(val, min, max));\n\n const stylesThumbWrapper = {\n [vertical ? 'bottom' : 'left']: `${percent}%`,\n };\n\n return (\n <ThumbWrapper\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ activated: activeIndex === i })}\n style={stylesThumbWrapper}\n onMouseDown={handleMouseDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n data-index={i}\n >\n <Thumb\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n type=\"button\"\n role=\"slider\"\n data-index={i}\n className=\"ui-slider__thumb\"\n />\n <HiddenNumberInput\n type=\"number\"\n name={name}\n data-index={i}\n value={val}\n onChange={handleChange}\n ref={handleInputRef}\n />\n </ThumbWrapper>\n );\n })\n }\n </Container>\n </Root>\n );\n});\n\nexport default memo(Slider);\n"],"names":["INDEX_ATTR","defaultValueReducer","rawValue","props","disabled","step","roundToStep","Number","Slider","forwardRef","ref","className","valueProp","min","max","stepProp","marks","onChange","onDragStart","onDragEnd","vertical","valueReducer","name","color","otherProps","touchIdRef","useRef","undefined","containerRef","hiddenInputsRef","removeListenersRef","activeIndex","setActiveIndex","useState","activeIndexRef","useEffect","focusThumb","index","_containerRef_current","_document_activeElement","document","_containerRef_current_querySelector","prevIndex","emitChange","useCallback","event","currentIndex","newValue","hiddenInput","previousValue","parseFloat","triggerChangeEvent","calculateValueFromPercent","percent","calculatePercent","percentToValue","handleClick","value","Array","prevDiff","val","i","diff","Math","handleDragEnd","handleMouseEnter","handleMouseMove","handleMouseLeave","handleMouseUp","handleMouseDown","_event_currentTarget_getAttribute","handleTouchEnd","touch","getTouch","handleTouchStart","handleTouchMove","nativeEvent","handleKeyDown","currentValue","onePercent","clamp","handleChange","eventValue","a","b","handleRef","node","nextContainer","prevContainer","preventPageScrolling","handleInputRef","parseInt","calculateTrackPoints","offset","leap","values","startValue","endValue","tracksCount","rootClassName","classnames","Root","Container","TrackSvg","_","trackStart","trackEnd","trackOffset","valueToPercent","trackLeap","active","TrackLine","RailLine","stylesThumbWrapper","ThumbWrapper","Thumb","HiddenNumberInput","memo"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar/Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport classnames from 'clsx';\nimport { CSSTransition } from 'react-transition-group';\nimport { transitionSlideParent, transitionSlide } from '@finam/web-ui-kit-core/styles/transition';\nimport type { CSSTransitionProps } from '../types.js';\nimport ClickAwayListener, { ClickAwayListenerProps } from '../ClickAwayListener/index.js';\nimport SnackbarContent, { SnackbarContentProps } from '../SnackbarContent/index.js';\nimport { IN, OUT, Root, slide, transitionClassName } from './Snackbar.styles.js';\nimport { transitionClassNames } from '../utils/transition.js';\n\nexport interface Props extends React.ComponentPropsWithoutRef<typeof Root> {\n /** Управление видимостью всплывающего окна */\n open?: boolean;\n /** Объект управляющий позицией всплытия\n * - `horizontal`: \"left\", \"center\", \"right\".\n * - `vertical`: \"top\", \"bottom\".\n */\n anchorOrigin?: AnchorOrigin;\n /** Количество миллисекунд, через которое всплывающее окно будет автоматически скрыто */\n autoHideDuration?: number;\n /** Количество миллисекунд, через которое всплывающее окно будет автоматически скрыто\n * после восстановления активности (после паузы) */\n resumeHideDuration?: number;\n /** Иконка, отображаемая перед контентом всплывающего окна */\n icon?: React.ReactElement<any>;\n /** Элемент, предназначенный для выполнения действий при взаимодействии с пользователем */\n action?: React.ReactNode;\n /** Текст сообщения всплывающего окна */\n message?: React.ReactNode;\n /** Кастомный компонент, полностью заменяющий содержимое всплывающего окна */\n children?: React.ReactElement<any>;\n /** Флаг, включающий возможность копирования текста некастомного контента\n * всплывающего окна по клику */\n withCopy?: boolean;\n /** Кастомные классы передаваемые в корневой компонент */\n className?: string;\n /** Свойства передаваемые в компонент `ClickAwayListener` */\n ClickAwayListenerProps?: Partial<ClickAwayListenerProps<HTMLDivElement>>;\n /** Свойства передаваемые в компонент `SnackbarContent` */\n ContentProps?: Partial<SnackbarContentProps>;\n /** Флаг, отключающий автоматическое скрытие всплывающего окна при потере фокуса\n * активного `windows` */\n disableWindowBlurListener?: boolean;\n /** Функция обратного вызова, вызываемая при закрытии всплывающего окна */\n onClose?: (\n event:\n MouseEvent | React.MouseEvent<HTMLDivElement> |\n TouchEvent | React.TouchEvent<HTMLDivElement> |\n null,\n reason: 'timeout' | 'clickaway' | 'swipe'\n ) => void;\n /** Свойства передаваемые в компонент `CSSTransition` */\n TransitionProps?: Partial<CSSTransitionProps<HTMLElement>>;\n /** Вариант основного цвета всплывающего окна */\n color?: 'regular' | 'danger';\n}\n\nexport interface AnchorOrigin {\n horizontal: 'left' | 'center' | 'right';\n vertical: 'top' | 'bottom';\n}\n\nconst SWIPE_Y_DISTANCE = 20;\n\nconst Snackbar = React.forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n open,\n anchorOrigin: { vertical, horizontal } = { vertical: 'bottom', horizontal: 'center' },\n autoHideDuration,\n resumeHideDuration,\n icon,\n action,\n message,\n withCopy = true,\n children,\n className,\n ClickAwayListenerProps: clickAwayListenerProps,\n ContentProps,\n disableWindowBlurListener = false,\n onClose,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n onTouchEnd,\n TransitionProps,\n color,\n ...other\n } = props;\n\n const timeout = TransitionProps?.timeout || {\n enter: IN,\n exit: OUT,\n };\n const onEnter = TransitionProps?.onEnter;\n const onExited = TransitionProps?.onExited;\n\n const contentRef = React.useRef<HTMLDivElement>(null);\n const timerAutoHide = React.useRef<any | undefined>(undefined);\n const [exited, setExited] = React.useState(true);\n const [dragY, setDragY] = React.useState(0);\n\n // Timer that controls delay before snackbar auto hides\n const setAutoHideTimer = React.useCallback(\n (autoHideDurationParam?: number) => {\n const autoHideDurationBefore =\n autoHideDurationParam != null ? autoHideDurationParam : autoHideDuration;\n\n if (!open || !onClose || autoHideDurationBefore == null) {\n return;\n }\n\n clearTimeout(timerAutoHide.current);\n timerAutoHide.current = setTimeout(() => {\n const autoHideDurationAfter =\n autoHideDurationParam != null ? autoHideDurationParam : autoHideDuration;\n if (!onClose || autoHideDurationAfter == null) {\n return;\n }\n onClose(null, 'timeout');\n }, autoHideDurationBefore);\n },\n [autoHideDuration, onClose, open],\n );\n\n React.useEffect(() => {\n if (open) {\n setAutoHideTimer();\n }\n\n return () => {\n clearTimeout(timerAutoHide.current);\n };\n }, [open, setAutoHideTimer]);\n\n // Pause the timer when the user is interacting with the Snackbar\n // or when the user hide the window.\n const handlePause = React.useCallback(() => {\n clearTimeout(timerAutoHide.current);\n }, []);\n\n // Restart the timer when the user is no longer interacting with the Snackbar\n // or when the window is shown back.\n const handleResume = React.useCallback(() => {\n if (autoHideDuration != null) {\n if (resumeHideDuration != null) {\n setAutoHideTimer(resumeHideDuration);\n return;\n }\n setAutoHideTimer(autoHideDuration * 0.5);\n }\n }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);\n\n const handlePointerEnter = React.useCallback((event: React.PointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== 'touch') {\n if (onMouseEnter) {\n onMouseEnter(event);\n }\n handlePause();\n }\n }, [onMouseEnter, handlePause]);\n\n const handlePointerLeave = React.useCallback((event: React.PointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== 'touch') {\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n handleResume();\n }\n }, [onMouseLeave, handleResume]);\n\n const handleTouchStart = React.useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n if (onTouchStart) {\n onTouchStart(event);\n }\n handlePause();\n\n const startDragY = event.changedTouches?.[0].clientY;\n\n if (startDragY) {\n setDragY(startDragY);\n }\n }, [onTouchStart, handlePause]);\n\n const handleTouchEnd = React.useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n if (onTouchEnd) {\n onTouchEnd(event);\n }\n handleResume();\n\n const endDragY = event.changedTouches?.[0].clientY;\n\n if (endDragY && Math.abs(dragY - endDragY) > SWIPE_Y_DISTANCE) {\n onClose?.(event, 'swipe');\n }\n }, [dragY, onTouchEnd, handleResume, onClose]);\n\n const handleClickAway = React.useCallback((event: MouseEvent | TouchEvent) => {\n if (onClose) {\n onClose(event, 'clickaway');\n }\n }, [onClose]);\n\n const handleEnter = React.useCallback((node: HTMLElement, isAppearing: boolean) => {\n setExited(false);\n onEnter?.(isAppearing);\n }, [onEnter]);\n\n const handleExited = React.useCallback(() => {\n setExited(true);\n onExited?.();\n }, [onExited]);\n\n React.useEffect(() => {\n if (!disableWindowBlurListener && open) {\n window.addEventListener('focus', handleResume);\n window.addEventListener('blur', handlePause);\n\n return () => {\n window.removeEventListener('focus', handleResume);\n window.removeEventListener('blur', handlePause);\n };\n }\n\n return undefined;\n }, [disableWindowBlurListener, handleResume, handlePause, open]);\n\n if (!open && exited) {\n return null;\n }\n\n const rootClassName = classnames(\n `anchor-origin-${vertical}-${horizontal}`,\n className,\n );\n const contentClassName = classnames(\n transitionSlide({ marginThreshold: 'medium', direction: vertical === 'top' ? 'down' : 'up' }),\n slide,\n ContentProps?.className,\n );\n\n return (\n <ClickAwayListener onClickAway={handleClickAway} {...clickAwayListenerProps}>\n <Root\n className={rootClassName}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n ref={ref}\n {...other}\n >\n <CSSTransition\n appear={true}\n in={open}\n timeout={timeout}\n classNames={transitionClassNames([transitionSlideParent, transitionClassName])}\n {...TransitionProps}\n onEnter={handleEnter as any}\n onExited={handleExited}\n nodeRef={contentRef}\n >\n {children || (\n <SnackbarContent\n ref={contentRef}\n message={message}\n icon={icon}\n action={action}\n withCopy={withCopy}\n color={color}\n {...ContentProps}\n className={contentClassName}\n />\n )}\n </CSSTransition>\n </Root>\n </ClickAwayListener>\n );\n});\n\nexport default React.memo(Snackbar);\n"],"names":["SWIPE_Y_DISTANCE","Snackbar","React","props","ref","open","vertical","horizontal","autoHideDuration","resumeHideDuration","icon","action","message","withCopy","children","className","clickAwayListenerProps","ContentProps","disableWindowBlurListener","onClose","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","TransitionProps","color","other","timeout","IN","OUT","onEnter","onExited","contentRef","timerAutoHide","undefined","exited","setExited","dragY","setDragY","setAutoHideTimer","autoHideDurationParam","autoHideDurationBefore","clearTimeout","setTimeout","autoHideDurationAfter","handlePause","handleResume","handlePointerEnter","event","handlePointerLeave","handleTouchStart","_event_changedTouches","startDragY","handleTouchEnd","endDragY","Math","handleClickAway","handleEnter","node","isAppearing","handleExited","window","rootClassName","classnames","contentClassName","transitionSlide","slide","ClickAwayListener","Root","CSSTransition","transitionClassNames","transitionSlideParent","transitionClassName","SnackbarContent"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar/Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport classnames from 'clsx';\nimport { CSSTransition } from 'react-transition-group';\nimport { transitionSlideParent, transitionSlide } from '@finam/web-ui-kit-core/styles/transition';\nimport type { CSSTransitionProps } from '../types.js';\nimport ClickAwayListener, { ClickAwayListenerProps } from '../ClickAwayListener/index.js';\nimport SnackbarContent, { SnackbarContentProps } from '../SnackbarContent/index.js';\nimport { IN, OUT, Root, slide, transitionClassName } from './Snackbar.styles.js';\nimport { transitionClassNames } from '../utils/transition.js';\n\nexport interface Props extends React.ComponentPropsWithoutRef<typeof Root> {\n /** Управление видимостью всплывающего окна */\n open?: boolean;\n /** Объект управляющий позицией всплытия\n * - `horizontal`: \"left\", \"center\", \"right\".\n * - `vertical`: \"top\", \"bottom\".\n */\n anchorOrigin?: AnchorOrigin;\n /** Количество миллисекунд, через которое всплывающее окно будет автоматически скрыто */\n autoHideDuration?: number;\n /** Количество миллисекунд, через которое всплывающее окно будет автоматически скрыто\n * после восстановления активности (после паузы) */\n resumeHideDuration?: number;\n /** Иконка, отображаемая перед контентом всплывающего окна */\n icon?: React.ReactElement<any>;\n /** Элемент, предназначенный для выполнения действий при взаимодействии с пользователем */\n action?: React.ReactNode;\n /** Текст сообщения всплывающего окна */\n message?: React.ReactNode;\n /** Кастомный компонент, полностью заменяющий содержимое всплывающего окна */\n children?: React.ReactElement<any>;\n /** Флаг, включающий возможность копирования текста некастомного контента\n * всплывающего окна по клику */\n withCopy?: boolean;\n /** Кастомные классы передаваемые в корневой компонент */\n className?: string;\n /** Свойства передаваемые в компонент `ClickAwayListener` */\n ClickAwayListenerProps?: Partial<ClickAwayListenerProps<HTMLDivElement>>;\n /** Свойства передаваемые в компонент `SnackbarContent` */\n ContentProps?: Partial<SnackbarContentProps>;\n /** Флаг, отключающий автоматическое скрытие всплывающего окна при потере фокуса\n * активного `windows` */\n disableWindowBlurListener?: boolean;\n /** Функция обратного вызова, вызываемая при закрытии всплывающего окна */\n onClose?: (\n event:\n MouseEvent | React.MouseEvent<HTMLDivElement> |\n TouchEvent | React.TouchEvent<HTMLDivElement> |\n null,\n reason: 'timeout' | 'clickaway' | 'swipe'\n ) => void;\n /** Свойства передаваемые в компонент `CSSTransition` */\n TransitionProps?: Partial<CSSTransitionProps<HTMLElement>>;\n /** Вариант основного цвета всплывающего окна */\n color?: 'regular' | 'danger';\n}\n\nexport interface AnchorOrigin {\n horizontal: 'left' | 'center' | 'right';\n vertical: 'top' | 'bottom';\n}\n\nconst SWIPE_Y_DISTANCE = 20;\n\nconst Snackbar = React.forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n open,\n anchorOrigin: { vertical, horizontal } = { vertical: 'bottom', horizontal: 'center' },\n autoHideDuration,\n resumeHideDuration,\n icon,\n action,\n message,\n withCopy = true,\n children,\n className,\n ClickAwayListenerProps: clickAwayListenerProps,\n ContentProps,\n disableWindowBlurListener = false,\n onClose,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n onTouchEnd,\n TransitionProps,\n color,\n ...other\n } = props;\n\n const timeout = TransitionProps?.timeout || {\n enter: IN,\n exit: OUT,\n };\n const onEnter = TransitionProps?.onEnter;\n const onExited = TransitionProps?.onExited;\n\n const contentRef = React.useRef<HTMLDivElement>(null);\n const timerAutoHide = React.useRef<any>(undefined);\n const [exited, setExited] = React.useState(true);\n const [dragY, setDragY] = React.useState(0);\n\n // Timer that controls delay before snackbar auto hides\n const setAutoHideTimer = React.useCallback(\n (autoHideDurationParam?: number) => {\n const autoHideDurationBefore =\n autoHideDurationParam != null ? autoHideDurationParam : autoHideDuration;\n\n if (!open || !onClose || autoHideDurationBefore == null) {\n return;\n }\n\n clearTimeout(timerAutoHide.current);\n timerAutoHide.current = setTimeout(() => {\n const autoHideDurationAfter =\n autoHideDurationParam != null ? autoHideDurationParam : autoHideDuration;\n if (!onClose || autoHideDurationAfter == null) {\n return;\n }\n onClose(null, 'timeout');\n }, autoHideDurationBefore);\n },\n [autoHideDuration, onClose, open],\n );\n\n React.useEffect(() => {\n if (open) {\n setAutoHideTimer();\n }\n\n return () => {\n clearTimeout(timerAutoHide.current);\n };\n }, [open, setAutoHideTimer]);\n\n // Pause the timer when the user is interacting with the Snackbar\n // or when the user hide the window.\n const handlePause = React.useCallback(() => {\n clearTimeout(timerAutoHide.current);\n }, []);\n\n // Restart the timer when the user is no longer interacting with the Snackbar\n // or when the window is shown back.\n const handleResume = React.useCallback(() => {\n if (autoHideDuration != null) {\n if (resumeHideDuration != null) {\n setAutoHideTimer(resumeHideDuration);\n return;\n }\n setAutoHideTimer(autoHideDuration * 0.5);\n }\n }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);\n\n const handlePointerEnter = React.useCallback((event: React.PointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== 'touch') {\n if (onMouseEnter) {\n onMouseEnter(event);\n }\n handlePause();\n }\n }, [onMouseEnter, handlePause]);\n\n const handlePointerLeave = React.useCallback((event: React.PointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== 'touch') {\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n handleResume();\n }\n }, [onMouseLeave, handleResume]);\n\n const handleTouchStart = React.useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n if (onTouchStart) {\n onTouchStart(event);\n }\n handlePause();\n\n const startDragY = event.changedTouches?.[0].clientY;\n\n if (startDragY) {\n setDragY(startDragY);\n }\n }, [onTouchStart, handlePause]);\n\n const handleTouchEnd = React.useCallback((event: React.TouchEvent<HTMLDivElement>) => {\n if (onTouchEnd) {\n onTouchEnd(event);\n }\n handleResume();\n\n const endDragY = event.changedTouches?.[0].clientY;\n\n if (endDragY && Math.abs(dragY - endDragY) > SWIPE_Y_DISTANCE) {\n onClose?.(event, 'swipe');\n }\n }, [dragY, onTouchEnd, handleResume, onClose]);\n\n const handleClickAway = React.useCallback((event: MouseEvent | TouchEvent) => {\n if (onClose) {\n onClose(event, 'clickaway');\n }\n }, [onClose]);\n\n const handleEnter = React.useCallback((node: HTMLElement, isAppearing: boolean) => {\n setExited(false);\n onEnter?.(isAppearing);\n }, [onEnter]);\n\n const handleExited = React.useCallback(() => {\n setExited(true);\n onExited?.();\n }, [onExited]);\n\n React.useEffect(() => {\n if (!disableWindowBlurListener && open) {\n window.addEventListener('focus', handleResume);\n window.addEventListener('blur', handlePause);\n\n return () => {\n window.removeEventListener('focus', handleResume);\n window.removeEventListener('blur', handlePause);\n };\n }\n\n return undefined;\n }, [disableWindowBlurListener, handleResume, handlePause, open]);\n\n if (!open && exited) {\n return null;\n }\n\n const rootClassName = classnames(\n `anchor-origin-${vertical}-${horizontal}`,\n className,\n );\n const contentClassName = classnames(\n transitionSlide({ marginThreshold: 'medium', direction: vertical === 'top' ? 'down' : 'up' }),\n slide,\n ContentProps?.className,\n );\n\n return (\n <ClickAwayListener onClickAway={handleClickAway} {...clickAwayListenerProps}>\n <Root\n className={rootClassName}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n ref={ref}\n {...other}\n >\n <CSSTransition\n appear={true}\n in={open}\n timeout={timeout}\n classNames={transitionClassNames([transitionSlideParent, transitionClassName])}\n {...TransitionProps}\n onEnter={handleEnter as any}\n onExited={handleExited}\n nodeRef={contentRef}\n >\n {children || (\n <SnackbarContent\n ref={contentRef}\n message={message}\n icon={icon}\n action={action}\n withCopy={withCopy}\n color={color}\n {...ContentProps}\n className={contentClassName}\n />\n )}\n </CSSTransition>\n </Root>\n </ClickAwayListener>\n );\n});\n\nexport default React.memo(Snackbar);\n"],"names":["SWIPE_Y_DISTANCE","Snackbar","React","props","ref","open","vertical","horizontal","autoHideDuration","resumeHideDuration","icon","action","message","withCopy","children","className","clickAwayListenerProps","ContentProps","disableWindowBlurListener","onClose","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","TransitionProps","color","other","timeout","IN","OUT","onEnter","onExited","contentRef","timerAutoHide","undefined","exited","setExited","dragY","setDragY","setAutoHideTimer","autoHideDurationParam","autoHideDurationBefore","clearTimeout","setTimeout","autoHideDurationAfter","handlePause","handleResume","handlePointerEnter","event","handlePointerLeave","handleTouchStart","_event_changedTouches","startDragY","handleTouchEnd","endDragY","Math","handleClickAway","handleEnter","node","isAppearing","handleExited","window","rootClassName","classnames","contentClassName","transitionSlide","slide","ClickAwayListener","Root","CSSTransition","transitionClassNames","transitionSlideParent","transitionClassName","SnackbarContent"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import Stepper, { Props } from './Stepper.js';
2
1
  export type { Size } from './types.js';
3
- export type { Props as StepperProps };
4
- export default Stepper;
2
+ export type { Props as StepperProps } from './Stepper.js';
3
+ export { default } from './Stepper.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE9C,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,KAAK,IAAI,YAAY,EAAE,CAAC;AACtC,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Stepper/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -1,5 +1 @@
1
- import Stepper from "./Stepper.js";
2
- const src_Stepper = Stepper;
3
- export default src_Stepper;
4
-
5
- //# sourceMappingURL=index.js.map
1
+ export { default } from "./Stepper.js";
package/dist/Tab/Tab.d.ts CHANGED
@@ -32,6 +32,7 @@ type ExportProps<T extends ElementType> = {
32
32
  as?: T;
33
33
  ref?: Ref<T>;
34
34
  } & Omit<Props, keyof ComponentPropsWithoutRef<T> | 'as'> & Omit<ComponentPropsWithoutRef<T>, 'as'>;
35
- declare const _default: (<T extends ElementType = "button">(props: ExportProps<T>) => JSX.Element) & MemoExoticComponent<typeof Tab>;
35
+ declare const _default: (<T extends ElementType = "button">(// NOSONAR
36
+ props: ExportProps<T>) => JSX.Element) & MemoExoticComponent<typeof Tab>;
36
37
  export default _default;
37
38
  //# sourceMappingURL=Tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/Tab/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EAET,GAAG,EACH,WAAW,EACX,GAAG,EACH,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5E,MAAM,WAAW,KAAM,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACpE,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yCAAyC;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,gCAAgC;IAChC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,EAAE,CAAC,EAAE,WAAW,CAAC;CAClB;AAED,QAAA,MAAM,GAAG,qGAuEP,CAAC;AAEH,KAAK,WAAW,CAAC,CAAC,SAAS,WAAW,IAChC;IAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GACzB,IAAI,CAAC,KAAK,EAAE,MAAM,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GACrD,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;wBAElB,CAAC,CAAC,CAAC,SAAS,WAAW,GAAG,QAAQ,EAC5D,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAClB,GAAG,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC;AAFnD,wBAEoD"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/Tab/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EAET,GAAG,EACH,WAAW,EACX,GAAG,EACH,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5E,MAAM,WAAW,KAAM,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IACpE,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yCAAyC;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,gCAAgC;IAChC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,EAAE,CAAC,EAAE,WAAW,CAAC;CAClB;AAED,QAAA,MAAM,GAAG,qGAuEP,CAAC;AAEH,KAAK,WAAW,CAAC,CAAC,SAAS,WAAW,IAChC;IAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GACzB,IAAI,CAAC,KAAK,EAAE,MAAM,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GACrD,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;wBAGlB,CAAC,CAAC,CAAC,SAAS,WAAW,GAAG,QAAQ,EAAG,UAAU;AACzE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAClB,GAAG,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC;AAFnD,wBAEoD"}
package/dist/Tab/Tab.js CHANGED
@@ -64,7 +64,7 @@ const Tab = /*#__PURE__*/ forwardRef((_0, _1)=>{
64
64
  children: children
65
65
  }) : children,
66
66
  count ? /*#__PURE__*/ jsx(Counter, {
67
- color: 'buttons' === tabType && selected && 'alternative' != buttonVariant ? 'onbrand' : 'default',
67
+ color: 'buttons' === tabType && selected && 'alternative' !== buttonVariant ? 'onbrand' : 'default',
68
68
  size: 'xs' === size ? 's' : size,
69
69
  className: tabCounterSpacing[tabType],
70
70
  children: count
@@ -1 +1 @@
1
- {"version":3,"file":"Tab/Tab.js","sources":["../../src/Tab/Tab.tsx"],"sourcesContent":["import type {\n ButtonHTMLAttributes,\n ReactNode,\n MouseEvent,\n JSX,\n ElementType,\n Ref,\n ComponentPropsWithoutRef,\n MemoExoticComponent,\n} from 'react';\nimport { forwardRef, memo, useCallback } from 'react';\nimport { tab, tabContentWrapper, tabCounterSpacing } from '@finam/web-ui-kit-core/styles/tab';\nimport classnames from 'clsx';\nimport type { Size, TabType, ButtonVariant, LineVariant } from './types.js';\nimport Counter from '../Counter/index.js';\n\nexport interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Активное состояние компонента */\n selected?: boolean;\n /** Растяжение компонента по ширине контейнера */\n fullWidth?: boolean;\n /** Варианты отображения кнопочного Tab */\n buttonVariant?: ButtonVariant;\n /** Варианты отображения линейного Tab */\n lineVariant?: LineVariant;\n /** Размер Tab */\n size?: Size;\n /** Линейный или кнопочный Tab */\n tabType?: TabType;\n /** Значение вкладки */\n value?: any;\n /** Обработчик выбора вкладки */\n onChange?(value?: any): void;\n /** Иконка, отображаемая слева от текста */\n icon?: ReactNode;\n /** Счетчик, отображаемый справа от текста */\n count?: number;\n /** Направление линейных вкладок */\n vertical?: boolean;\n /** Отключение действия по клику, по-умолчанию true для типа компонента \"button\" */\n preventDefaultOnClick?: boolean;\n\n as?: ElementType;\n}\n\nconst Tab = forwardRef<HTMLButtonElement, Props>(({\n selected,\n fullWidth,\n buttonVariant = 'primary',\n lineVariant = 'primary',\n size = 'm',\n tabType = 'line',\n value,\n onChange,\n icon = null,\n vertical: verticalProp,\n count,\n as: TabComponent = 'button',\n preventDefaultOnClick = TabComponent === 'button',\n ...tabProps\n}, ref) => {\n const vertical = verticalProp && tabType === 'line';\n const { className, disabled, onClick, children } = tabProps;\n\n const handleClick = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n if (preventDefaultOnClick) {\n event.preventDefault();\n }\n onChange?.(value);\n onClick?.(event);\n }, [value, onChange, onClick, preventDefaultOnClick]);\n\n const iconOnly = Boolean(!children && !count && icon);\n\n const buttonClassName = classnames(\n tab({\n size,\n tabType,\n fullWidth,\n vertical,\n disabled,\n buttonVariant,\n lineVariant,\n iconOnly,\n selected,\n }),\n className,\n );\n\n return (\n <TabComponent\n type=\"button\"\n role=\"tab\"\n value={value}\n {...tabProps}\n ref={ref}\n className={buttonClassName}\n onClick={handleClick}\n >\n {icon}\n {tabType === 'buttons' && children ? (\n <span className={tabContentWrapper[size]}>\n {children}\n </span>\n ) : children}\n {count ? (\n <Counter\n color={tabType === 'buttons' && selected && buttonVariant != 'alternative' ? 'onbrand' : 'default'}\n size={size === 'xs' ? 's' : size}\n className={tabCounterSpacing[tabType]}\n >\n {count}\n </Counter>\n ) : null}\n </TabComponent>\n );\n});\n\ntype ExportProps<T extends ElementType> =\n & { as?: T; ref?: Ref<T>; }\n & Omit<Props, keyof ComponentPropsWithoutRef<T> | 'as'>\n & Omit<ComponentPropsWithoutRef<T>, 'as'>;\n\nexport default memo(Tab) as (<T extends ElementType = 'button'>(\n props: ExportProps<T>\n) => JSX.Element) & MemoExoticComponent<typeof Tab>;\n"],"names":["Tab","forwardRef","selected","fullWidth","buttonVariant","lineVariant","size","tabType","value","onChange","icon","verticalProp","count","TabComponent","preventDefaultOnClick","tabProps","ref","vertical","className","disabled","onClick","children","handleClick","useCallback","event","iconOnly","Boolean","buttonClassName","classnames","tab","tabContentWrapper","Counter","tabCounterSpacing","memo"],"mappings":";;;;;;;;AA6CA,MAAMA,MAAM,WAAHA,GAAGC,WAAqC,CAAC,IAAD;;;;iCAAC,EAChDC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,SAAS,EACzBC,cAAc,SAAS,EACvBC,OAAO,GAAG,EACVC,UAAU,MAAM,EAChBC,KAAK,EACLC,QAAQ,EACRC,OAAO,IAAI,EACX,UAAUC,YAAY,EACtBC,KAAK,EACL,IAAIC,eAAe,QAAQ,EAC3BC,wBAAwBD,AAAiB,aAAjBA,YAAyB,EAElD,UADIE,WAAAA,6BAAAA,OAAAA;;;;;;;;;;;;;;SACFC,IAAAA,GAAAA;IACD,MAAMC,WAAWN,gBAAgBJ,AAAY,WAAZA;IACjC,MAAM,EAAEW,SAAS,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGN;IAEnD,MAAMO,cAAcC,YAAY,CAACC;QAC/B,IAAIV,uBACFU,MAAM,cAAc;QAEtBf,QAAAA,YAAAA,SAAWD;QACXY,QAAAA,WAAAA,QAAUI;IACZ,GAAG;QAAChB;QAAOC;QAAUW;QAASN;KAAsB;IAEpD,MAAMW,WAAWC,QAAQ,CAACL,YAAY,CAACT,SAASF;IAEhD,MAAMiB,kBAAkBC,KACtBC,IAAI;QACFvB;QACAC;QACAJ;QACAc;QACAE;QACAf;QACAC;QACAoB;QACAvB;IACF,IACAgB;IAGF,OAAO,WAAP,GACE,KAACL,cAAAA,uBAAAA,EAAAA;QACC,MAAK;QACL,MAAK;QACL,OAAOL;OACHO,WAAAA;QACJ,KAAKC;QACL,WAAWW;QACX,SAASL;;YAERZ;YACY,cAAZH,WAAyBc,WAAW,WAAXA,GACxB,IAAC;gBAAK,WAAWS,iBAAiB,CAACxB,KAAK;0BACrCe;iBAEDA;YACHT,QAAQ,WAARA,GACC,IAACmB,SAAOA;gBACN,OAAOxB,AAAY,cAAZA,WAAyBL,YAAYE,AAAiB,iBAAjBA,gBAAiC,YAAY;gBACzF,MAAME,AAAS,SAATA,OAAgB,MAAMA;gBAC5B,WAAW0B,iBAAiB,CAACzB,QAAQ;0BAEpCK;iBAED;;;AAGV;AAOA,8BAAeqB,KAAKjC"}
1
+ {"version":3,"file":"Tab/Tab.js","sources":["../../src/Tab/Tab.tsx"],"sourcesContent":["import type {\n ButtonHTMLAttributes,\n ReactNode,\n MouseEvent,\n JSX,\n ElementType,\n Ref,\n ComponentPropsWithoutRef,\n MemoExoticComponent,\n} from 'react';\nimport { forwardRef, memo, useCallback } from 'react';\nimport { tab, tabContentWrapper, tabCounterSpacing } from '@finam/web-ui-kit-core/styles/tab';\nimport classnames from 'clsx';\nimport type { Size, TabType, ButtonVariant, LineVariant } from './types.js';\nimport Counter from '../Counter/index.js';\n\nexport interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Активное состояние компонента */\n selected?: boolean;\n /** Растяжение компонента по ширине контейнера */\n fullWidth?: boolean;\n /** Варианты отображения кнопочного Tab */\n buttonVariant?: ButtonVariant;\n /** Варианты отображения линейного Tab */\n lineVariant?: LineVariant;\n /** Размер Tab */\n size?: Size;\n /** Линейный или кнопочный Tab */\n tabType?: TabType;\n /** Значение вкладки */\n value?: any;\n /** Обработчик выбора вкладки */\n onChange?(value?: any): void;\n /** Иконка, отображаемая слева от текста */\n icon?: ReactNode;\n /** Счетчик, отображаемый справа от текста */\n count?: number;\n /** Направление линейных вкладок */\n vertical?: boolean;\n /** Отключение действия по клику, по-умолчанию true для типа компонента \"button\" */\n preventDefaultOnClick?: boolean;\n\n as?: ElementType;\n}\n\nconst Tab = forwardRef<HTMLButtonElement, Props>(({\n selected,\n fullWidth,\n buttonVariant = 'primary',\n lineVariant = 'primary',\n size = 'm',\n tabType = 'line',\n value,\n onChange,\n icon = null,\n vertical: verticalProp,\n count,\n as: TabComponent = 'button',\n preventDefaultOnClick = TabComponent === 'button',\n ...tabProps\n}, ref) => {\n const vertical = verticalProp && tabType === 'line';\n const { className, disabled, onClick, children } = tabProps;\n\n const handleClick = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n if (preventDefaultOnClick) {\n event.preventDefault();\n }\n onChange?.(value);\n onClick?.(event);\n }, [value, onChange, onClick, preventDefaultOnClick]);\n\n const iconOnly = Boolean(!children && !count && icon);\n\n const buttonClassName = classnames(\n tab({\n size,\n tabType,\n fullWidth,\n vertical,\n disabled,\n buttonVariant,\n lineVariant,\n iconOnly,\n selected,\n }),\n className,\n );\n\n return (\n <TabComponent\n type=\"button\"\n role=\"tab\"\n value={value}\n {...tabProps}\n ref={ref}\n className={buttonClassName}\n onClick={handleClick}\n >\n {icon}\n {tabType === 'buttons' && children ? (\n <span className={tabContentWrapper[size]}>\n {children}\n </span>\n ) : children}\n {count ? (\n <Counter\n color={tabType === 'buttons' && selected && buttonVariant !== 'alternative' ? 'onbrand' : 'default'}\n size={size === 'xs' ? 's' : size}\n className={tabCounterSpacing[tabType]}\n >\n {count}\n </Counter>\n ) : null}\n </TabComponent>\n );\n});\n\ntype ExportProps<T extends ElementType> =\n & { as?: T; ref?: Ref<T>; }\n & Omit<Props, keyof ComponentPropsWithoutRef<T> | 'as'> // NOSONAR: 'as' is needed when T has no 'as' prop\n & Omit<ComponentPropsWithoutRef<T>, 'as'>;\n\n// Assertion preserves generic polymorphic signature after memo()\nexport default memo(Tab) as (<T extends ElementType = 'button'>( // NOSONAR\n props: ExportProps<T>\n) => JSX.Element) & MemoExoticComponent<typeof Tab>;\n"],"names":["Tab","forwardRef","selected","fullWidth","buttonVariant","lineVariant","size","tabType","value","onChange","icon","verticalProp","count","TabComponent","preventDefaultOnClick","tabProps","ref","vertical","className","disabled","onClick","children","handleClick","useCallback","event","iconOnly","Boolean","buttonClassName","classnames","tab","tabContentWrapper","Counter","tabCounterSpacing","memo"],"mappings":";;;;;;;;AA6CA,MAAMA,MAAM,WAAHA,GAAGC,WAAqC,CAAC,IAAD;;;;iCAAC,EAChDC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,SAAS,EACzBC,cAAc,SAAS,EACvBC,OAAO,GAAG,EACVC,UAAU,MAAM,EAChBC,KAAK,EACLC,QAAQ,EACRC,OAAO,IAAI,EACX,UAAUC,YAAY,EACtBC,KAAK,EACL,IAAIC,eAAe,QAAQ,EAC3BC,wBAAwBD,AAAiB,aAAjBA,YAAyB,EAElD,UADIE,WAAAA,6BAAAA,OAAAA;;;;;;;;;;;;;;SACFC,IAAAA,GAAAA;IACD,MAAMC,WAAWN,gBAAgBJ,AAAY,WAAZA;IACjC,MAAM,EAAEW,SAAS,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGN;IAEnD,MAAMO,cAAcC,YAAY,CAACC;QAC/B,IAAIV,uBACFU,MAAM,cAAc;QAEtBf,QAAAA,YAAAA,SAAWD;QACXY,QAAAA,WAAAA,QAAUI;IACZ,GAAG;QAAChB;QAAOC;QAAUW;QAASN;KAAsB;IAEpD,MAAMW,WAAWC,QAAQ,CAACL,YAAY,CAACT,SAASF;IAEhD,MAAMiB,kBAAkBC,KACtBC,IAAI;QACFvB;QACAC;QACAJ;QACAc;QACAE;QACAf;QACAC;QACAoB;QACAvB;IACF,IACAgB;IAGF,OAAO,WAAP,GACE,KAACL,cAAAA,uBAAAA,EAAAA;QACC,MAAK;QACL,MAAK;QACL,OAAOL;OACHO,WAAAA;QACJ,KAAKC;QACL,WAAWW;QACX,SAASL;;YAERZ;YACY,cAAZH,WAAyBc,WAAW,WAAXA,GACxB,IAAC;gBAAK,WAAWS,iBAAiB,CAACxB,KAAK;0BACrCe;iBAEDA;YACHT,QAAQ,WAARA,GACC,IAACmB,SAAOA;gBACN,OAAOxB,AAAY,cAAZA,WAAyBL,YAAYE,AAAkB,kBAAlBA,gBAAkC,YAAY;gBAC1F,MAAME,AAAS,SAATA,OAAgB,MAAMA;gBAC5B,WAAW0B,iBAAiB,CAACzB,QAAQ;0BAEpCK;iBAED;;;AAGV;AAQA,8BAAeqB,KAAKjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../src/Tag/Tag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AAGhF,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3F,MAAM,WAAW,KAAM,SAAQ,cAAc,CAAC,eAAe,CAAC;IAC5D,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,GAAG,mGAoEP,CAAC;AAEH,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../src/Tag/Tag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AAGhF,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,WAAW,KAAM,SAAQ,cAAc,CAAC,eAAe,CAAC;IAC5D,gCAAgC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,yBAAyB;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,GAAG,mGA2DP,CAAC;AAEH,eAAe,GAAG,CAAC"}
package/dist/Tag/Tag.js CHANGED
@@ -6,7 +6,6 @@ import { forwardRef, useCallback } from "react";
6
6
  import clsx from "clsx";
7
7
  import { tag, tagIconWrapper } from "@finam/web-ui-kit-core/styles/tag";
8
8
  import { iconButton } from "./Tag.styles.js";
9
- import { KeyboardEventKey } from "../types.js";
10
9
  const Tag = /*#__PURE__*/ forwardRef((_0, _1)=>{
11
10
  let _ref = [
12
11
  _0,
@@ -40,19 +39,9 @@ const Tag = /*#__PURE__*/ forwardRef((_0, _1)=>{
40
39
  }, [
41
40
  onIconClick
42
41
  ]);
43
- const handleIconKeyDown = useCallback((event)=>{
44
- if (event.key === KeyboardEventKey.ENTER || event.key === KeyboardEventKey.SPACE) {
45
- event.stopPropagation();
46
- null == onIconClick || onIconClick();
47
- }
48
- }, [
49
- onIconClick
50
- ]);
51
42
  const renderIcon = (wrapperClassName)=>{
52
- if (onIconClick) return /*#__PURE__*/ jsx("span", {
53
- role: "button",
54
- tabIndex: 0,
55
- onKeyDown: handleIconKeyDown,
43
+ if (onIconClick) return /*#__PURE__*/ jsx("button", {
44
+ type: "button",
56
45
  className: clsx(wrapperClassName, iconButton),
57
46
  onClick: handleIconClick,
58
47
  children: icon
@@ -1 +1 @@
1
- {"version":3,"file":"Tag/Tag.js","sources":["../../src/Tag/Tag.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, type ReactNode, useCallback } from 'react';\nimport classnames from 'clsx';\nimport { tag, tagIconWrapper } from '@finam/web-ui-kit-core/styles/tag';\nimport type { Color, ColorType, Priority, Variant, Size, IconPlacement } from './types.js';\nimport { iconButton } from './Tag.styles.js';\nimport { KeyboardEventKey } from '../types.js';\n\nexport interface Props extends HTMLAttributes<HTMLSpanElement> {\n /** Текстовое содержимое тега */\n children?: ReactNode;\n /** Цветовая схема тега */\n color?: Color;\n /** Тип цветовой схемы */\n colorType?: ColorType;\n /** Тип цветовой схемы тега */\n priority?: Priority;\n /** Вариант отображения тега */\n variant?: Variant;\n /** Размер тега */\n size?: Size;\n /** Иконка, отображаемая вместо текста либо рядом с ним */\n icon?: ReactNode;\n /** Расположение иконки относительно текста */\n iconPlacement?: IconPlacement;\n /** Обработчик клика по иконке */\n onIconClick?: () => void;\n}\n\nconst Tag = forwardRef<HTMLSpanElement, Props>(({\n children,\n color = 'info',\n colorType = 'default',\n priority = 'high',\n variant = 'fill',\n size = 'm',\n icon,\n iconPlacement = 'left',\n className,\n onClick,\n onIconClick,\n ...props\n}, ref) => {\n const iconOnly = Boolean(icon && !children);\n const tagClassName = classnames(className, tag({\n color,\n colorType,\n priority,\n variant,\n size,\n iconOnly,\n clickable: Boolean(onClick),\n }));\n\n const handleIconClick = useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n onIconClick?.();\n }, [onIconClick]);\n\n const handleIconKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (event.key === KeyboardEventKey.ENTER || event.key === KeyboardEventKey.SPACE) {\n event.stopPropagation();\n onIconClick?.();\n }\n }, [onIconClick]);\n\n const renderIcon = (wrapperClassName: string) => {\n if (onIconClick) {\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onKeyDown={handleIconKeyDown}\n className={classnames(wrapperClassName, iconButton)}\n onClick={handleIconClick}\n >\n {icon}\n </span>\n );\n }\n\n return <span className={wrapperClassName}>{icon}</span>;\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span\n className={tagClassName}\n ref={ref}\n onClick={onClick}\n {...props}\n >\n {iconPlacement === 'left' && icon && children && renderIcon(tagIconWrapper.left)}\n {iconOnly ? renderIcon(tagIconWrapper.center) : children}\n {iconPlacement === 'right' && icon && children && renderIcon(tagIconWrapper.right)}\n </span>\n );\n});\n\nexport default Tag;\n"],"names":["Tag","forwardRef","children","color","colorType","priority","variant","size","icon","iconPlacement","className","onClick","onIconClick","props","ref","iconOnly","Boolean","tagClassName","classnames","tag","handleIconClick","useCallback","event","handleIconKeyDown","KeyboardEventKey","renderIcon","wrapperClassName","iconButton","tagIconWrapper"],"mappings":";;;;;;;;;AA4BA,MAAMA,MAAM,WAAHA,GAAGC,WAAmC,CAAC,IAAD;;;;iCAAC,EAC9CC,QAAQ,EACRC,QAAQ,MAAM,EACdC,YAAY,SAAS,EACrBC,WAAW,MAAM,EACjBC,UAAU,MAAM,EAChBC,OAAO,GAAG,EACVC,IAAI,EACJC,gBAAgB,MAAM,EACtBC,SAAS,EACTC,OAAO,EACPC,WAAW,EAEZ,UADIC,QAAAA,6BAAAA,OAAAA;;;;;;;;;;;;SACFC,IAAAA,GAAAA;IACD,MAAMC,WAAWC,QAAQR,QAAQ,CAACN;IAClC,MAAMe,eAAeC,KAAWR,WAAWS,IAAI;QAC7ChB;QACAC;QACAC;QACAC;QACAC;QACAQ;QACA,WAAWC,QAAQL;IACrB;IAEA,MAAMS,kBAAkBC,YAAY,CAACC;QACnCA,MAAM,eAAe;QACrBV,QAAAA,eAAAA;IACF,GAAG;QAACA;KAAY;IAEhB,MAAMW,oBAAoBF,YAAY,CAACC;QACrC,IAAIA,MAAM,GAAG,KAAKE,iBAAiB,KAAK,IAAIF,MAAM,GAAG,KAAKE,iBAAiB,KAAK,EAAE;YAChFF,MAAM,eAAe;YACrBV,QAAAA,eAAAA;QACF;IACF,GAAG;QAACA;KAAY;IAEhB,MAAMa,aAAa,CAACC;QAClB,IAAId,aACF,OAAO,WAAP,GACE,IAAC;YACC,MAAK;YACL,UAAU;YACV,WAAWW;YACX,WAAWL,KAAWQ,kBAAkBC;YACxC,SAASP;sBAERZ;;QAKP,OAAO,WAAP,GAAO,IAAC;YAAK,WAAWkB;sBAAmBlB;;IAC7C;IAEA,O,cAEE,KAAC;QACC,WAAWS;QACX,KAAKH;QACL,SAASH;OACLE,QAAAA;;YAEe,WAAlBJ,iBAA4BD,QAAQN,YAAYuB,WAAWG,eAAe,IAAI;YAC9Eb,WAAWU,WAAWG,eAAe,MAAM,IAAI1B;YAC7B,YAAlBO,iBAA6BD,QAAQN,YAAYuB,WAAWG,eAAe,KAAK;;;AAGvF;AAEA,gBAAe5B"}
1
+ {"version":3,"file":"Tag/Tag.js","sources":["../../src/Tag/Tag.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, type ReactNode, useCallback } from 'react';\nimport classnames from 'clsx';\nimport { tag, tagIconWrapper } from '@finam/web-ui-kit-core/styles/tag';\nimport type { Color, ColorType, Priority, Variant, Size, IconPlacement } from './types.js';\nimport { iconButton } from './Tag.styles.js';\n\nexport interface Props extends HTMLAttributes<HTMLSpanElement> {\n /** Текстовое содержимое тега */\n children?: ReactNode;\n /** Цветовая схема тега */\n color?: Color;\n /** Тип цветовой схемы */\n colorType?: ColorType;\n /** Тип цветовой схемы тега */\n priority?: Priority;\n /** Вариант отображения тега */\n variant?: Variant;\n /** Размер тега */\n size?: Size;\n /** Иконка, отображаемая вместо текста либо рядом с ним */\n icon?: ReactNode;\n /** Расположение иконки относительно текста */\n iconPlacement?: IconPlacement;\n /** Обработчик клика по иконке */\n onIconClick?: () => void;\n}\n\nconst Tag = forwardRef<HTMLSpanElement, Props>(({\n children,\n color = 'info',\n colorType = 'default',\n priority = 'high',\n variant = 'fill',\n size = 'm',\n icon,\n iconPlacement = 'left',\n className,\n onClick,\n onIconClick,\n ...props\n}, ref) => {\n const iconOnly = Boolean(icon && !children);\n const tagClassName = classnames(className, tag({\n color,\n colorType,\n priority,\n variant,\n size,\n iconOnly,\n clickable: Boolean(onClick),\n }));\n\n const handleIconClick = useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n onIconClick?.();\n }, [onIconClick]);\n\n const renderIcon = (wrapperClassName: string) => {\n if (onIconClick) {\n return (\n <button\n type=\"button\"\n className={classnames(wrapperClassName, iconButton)}\n onClick={handleIconClick}\n >\n {icon}\n </button>\n );\n }\n\n return <span className={wrapperClassName}>{icon}</span>;\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span\n className={tagClassName}\n ref={ref}\n onClick={onClick}\n {...props}\n >\n {iconPlacement === 'left' && icon && children && renderIcon(tagIconWrapper.left)}\n {iconOnly ? renderIcon(tagIconWrapper.center) : children}\n {iconPlacement === 'right' && icon && children && renderIcon(tagIconWrapper.right)}\n </span>\n );\n});\n\nexport default Tag;\n"],"names":["Tag","forwardRef","children","color","colorType","priority","variant","size","icon","iconPlacement","className","onClick","onIconClick","props","ref","iconOnly","Boolean","tagClassName","classnames","tag","handleIconClick","useCallback","event","renderIcon","wrapperClassName","iconButton","tagIconWrapper"],"mappings":";;;;;;;;AA2BA,MAAMA,MAAM,WAAHA,GAAGC,WAAmC,CAAC,IAAD;;;;iCAAC,EAC9CC,QAAQ,EACRC,QAAQ,MAAM,EACdC,YAAY,SAAS,EACrBC,WAAW,MAAM,EACjBC,UAAU,MAAM,EAChBC,OAAO,GAAG,EACVC,IAAI,EACJC,gBAAgB,MAAM,EACtBC,SAAS,EACTC,OAAO,EACPC,WAAW,EAEZ,UADIC,QAAAA,6BAAAA,OAAAA;;;;;;;;;;;;SACFC,IAAAA,GAAAA;IACD,MAAMC,WAAWC,QAAQR,QAAQ,CAACN;IAClC,MAAMe,eAAeC,KAAWR,WAAWS,IAAI;QAC7ChB;QACAC;QACAC;QACAC;QACAC;QACAQ;QACA,WAAWC,QAAQL;IACrB;IAEA,MAAMS,kBAAkBC,YAAY,CAACC;QACnCA,MAAM,eAAe;QACrBV,QAAAA,eAAAA;IACF,GAAG;QAACA;KAAY;IAEhB,MAAMW,aAAa,CAACC;QAClB,IAAIZ,aACF,OAAO,WAAP,GACE,IAAC;YACC,MAAK;YACL,WAAWM,KAAWM,kBAAkBC;YACxC,SAASL;sBAERZ;;QAKP,OAAO,WAAP,GAAO,IAAC;YAAK,WAAWgB;sBAAmBhB;;IAC7C;IAEA,O,cAEE,KAAC;QACC,WAAWS;QACX,KAAKH;QACL,SAASH;OACLE,QAAAA;;YAEe,WAAlBJ,iBAA4BD,QAAQN,YAAYqB,WAAWG,eAAe,IAAI;YAC9EX,WAAWQ,WAAWG,eAAe,MAAM,IAAIxB;YAC7B,YAAlBO,iBAA6BD,QAAQN,YAAYqB,WAAWG,eAAe,KAAK;;;AAGvF;AAEA,gBAAe1B"}
@@ -1 +1 @@
1
- .ui_components_i1n6bebk{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit;display:flex;align-items:center;}
1
+ .ui_components_i1n6bebk{appearance:none;background:none;border:none;margin:0;padding:0;cursor:pointer;font:inherit;color:inherit;display:flex;align-items:center;}
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.styles.d.ts","sourceRoot":"","sources":["../../src/Tag/Tag.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,0CAStB,CAAC"}
1
+ {"version":3,"file":"Tag.styles.d.ts","sourceRoot":"","sources":["../../src/Tag/Tag.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,0CAWtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tag/Tag.styles.js","sources":["../../src/Tag/Tag.styles.ts"],"sourcesContent":["import { css } from '@linaria/core';\n\nexport const iconButton = css`\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font: inherit;\n color: inherit;\n display: flex;\n align-items: center;\n`;\n"],"names":["iconButton","css"],"mappings":";AAEO,MAAMA,aAAaC,GAAG,CAAC;;;;;;;;;AAS9B,CAAC"}
1
+ {"version":3,"file":"Tag/Tag.styles.js","sources":["../../src/Tag/Tag.styles.ts"],"sourcesContent":["import { css } from '@linaria/core';\n\nexport const iconButton = css`\n appearance: none;\n background: none;\n border: none;\n margin: 0;\n padding: 0;\n cursor: pointer;\n font: inherit;\n color: inherit;\n display: flex;\n align-items: center;\n`;\n"],"names":["iconButton","css"],"mappings":";AAEO,MAAMA,aAAaC,GAAG,CAAC;;;;;;;;;;;AAW9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip/Tooltip.js","sources":["../../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useCallback,\n useEffect,\n cloneElement,\n ReactElement,\n ReactNode,\n ComponentPropsWithoutRef,\n memo,\n useMemo,\n} from 'react';\nimport classnames from 'clsx';\nimport { transitionGrow, transitionGrowParent } from '@finam/web-ui-kit-core/styles/transition';\nimport { typography } from '@finam/web-ui-kit-core/styles/typography';\nimport type { Middleware } from '@floating-ui/dom';\nimport { arrow, flip, shift } from '@floating-ui/react';\nimport type { Placement, CSSTransitionProps } from '../types.js';\nimport type { PopperProps } from '../Popper/index.js';\nimport { useForkRef } from '../utils/withForwardedRef.js';\nimport { ModalManager } from '../Modal/index.js';\nimport {\n Popper,\n Root,\n TooltipElement,\n Corner,\n Line,\n} from './Tooltip.styles.js';\nimport { windowPadding } from './constants.js';\n\nconst SHORTEST_TRANSITION_DURATION = 150;\n\nconst tooltipModalManager = new ModalManager();\n\nfunction stickToViewportWhenFlipped(): Middleware {\n return {\n name: 'stickToViewportWhenFlipped',\n fn(state) {\n const { y, placement, rects, elements } = state;\n if (!placement.startsWith('top') || !rects.floating) {\n return {};\n }\n const win = elements.floating?.ownerDocument?.defaultView ?? (typeof window !== 'undefined' ? window : null);\n if (!win) {\n return {};\n }\n\n const viewportSafety = 1;\n const maxBottom = win.innerHeight - windowPadding - viewportSafety;\n const bottom = y + rects.floating.height;\n if (bottom <= maxBottom) {\n return {};\n }\n return { y: maxBottom - rects.floating.height };\n },\n };\n}\n\nexport type Variant = 'primary' | 'positive' | 'negative';\n\nexport interface Props extends Omit<ComponentPropsWithoutRef<typeof TooltipElement>, 'title'> {\n /** Элемент инициирующий появление всплывающего окна */\n children: ReactElement<any>;\n /** Контент всплывающего окна */\n title: ReactNode;\n /** Управление видимостью всплывающего окна */\n open?: boolean;\n /** Вариант стиля всплывающего окна */\n variant?: Variant;\n /** Функция обратного вызова, вызываемая при открытии всплывающего окна */\n onOpen?(event: MouseEvent | TouchEvent | FocusEvent): void;\n /** Функция обратного вызова, вызываемая при закрытии всплывающего окна */\n onClose?(event: MouseEvent | TouchEvent | FocusEvent): void;\n /** Позволяет всплывающему окну оставаться видимым при наведении на него */\n interactive?: boolean;\n /** Отключает открытие всплывающего окна на событие фокуса */\n disableFocusListener?: boolean;\n /** Отключает открытие всплывающего окна на событие наведения */\n disableHoverListener?: boolean;\n /** Отключает открытие всплывающего окна на событие сенсорного ввода */\n disableTouchListener?: boolean;\n /** Устанавливает задержку на открытие всплывающего окна на указанное количество миллисекунд */\n enterDelay?: number;\n /** Устанавливает задержку на открытие всплывающего окна на указанное количество миллисекунд\n * для сенсорного ввода */\n enterTouchDelay?: number;\n /** Устанавливает задержку на закрытие всплывающего окна на указанное количество миллисекунд */\n leaveDelay?: number;\n /** Устанавливает задержку на закрытие всплывающего окна на указанное количество миллисекунд\n * для сенсорного ввода */\n leaveTouchDelay?: number;\n /** Устанавливает позиционирование всплывающего окна относительно инициирующего элемента */\n placement?: Placement;\n /** Дополнительные свойства всплывающего окна */\n PopperProps?: Partial<PopperProps>;\n /** from Modal */\n TransitionProps?: Partial<CSSTransitionProps<HTMLElement>>;\n /** Управляет отображением пина */\n withCorner?: boolean;\n /** При развороте тултипа вверх, прижимает его к низу вьюпорта, не давая выйти за вьюпорт */\n stickToViewport?: boolean;\n}\n\nconst Tooltip = ({\n children,\n disableFocusListener = true,\n disableHoverListener = false,\n disableTouchListener = false,\n interactive = false,\n enterDelay = 300,\n enterTouchDelay = 200,\n leaveDelay,\n leaveTouchDelay = 1500,\n id,\n onClose,\n onOpen,\n className,\n open: openProp,\n placement = 'bottom',\n PopperProps: popperProps,\n TransitionProps,\n title,\n variant = 'primary',\n withCorner = true,\n stickToViewport,\n ...otherProps\n}: Props) => {\n const [openState, setOpenState] = useState(false);\n const [, forceUpdate] = useState(false);\n const [childNode, setChildNode] = useState<HTMLElement | null>(null);\n const ignoreNonTouchEvents = useRef(false);\n const ignoreNonFocusEvents = useRef(false);\n const interactiveWrapperListeners = useRef({});\n const { current: isControlled } = useRef(openProp !== undefined);\n const defaultId = useRef<string | undefined>(undefined);\n const closeTimer = useRef<number | undefined>(undefined);\n const enterTimer = useRef<number | undefined>(undefined);\n const leaveTimer = useRef<number | undefined>(undefined);\n const touchTimer = useRef<number | undefined>(undefined);\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const arrowRef = useRef<SVGSVGElement | null>(null);\n const prevUserSelectRef = useRef<string | undefined>(undefined);\n\n const computedLeaveDelay = interactive ? leaveDelay ?? 200 : leaveDelay;\n\n const handleOwnRef = useCallback((ref: HTMLElement) => {\n setChildNode(ref);\n }, []);\n const handleRef = useForkRef(children.props.ref || (children as any).ref, handleOwnRef);\n\n const popperMiddleware = useMemo(() => {\n const middleware = [\n flip({ fallbackAxisSideDirection: 'end' }),\n shift({ padding: windowPadding }),\n ];\n if (stickToViewport) {\n middleware.push(stickToViewportWhenFlipped());\n }\n if (withCorner) {\n middleware.push(arrow({ element: arrowRef, padding: 4 }));\n }\n return middleware;\n }, [stickToViewport, withCorner]);\n\n useEffect(() => {\n // Fallback to this default id when possible.\n // Use the random value for client side rendering only.\n // We can't use it server-side.\n if (!defaultId.current) {\n defaultId.current = `ui-tooltip-${Math.round(Math.random() * 1e5)}`;\n }\n\n // Rerender with defaultId and childNode.\n if (openProp) {\n forceUpdate(n => !n);\n }\n }, [openProp]);\n\n useEffect(() => () => {\n window.clearTimeout(closeTimer.current);\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n window.clearTimeout(touchTimer.current);\n }, []);\n\n useEffect(() => {\n const handleOpen = (event: MouseEvent | TouchEvent | FocusEvent) => {\n // The mouseover event will trigger for every nested element in the tooltip.\n // We can skip rerendering when the tooltip is already open.\n // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n if (!isControlled) {\n setOpenState(true);\n }\n\n if (onOpen) {\n onOpen(event);\n }\n };\n\n const handleEnter = (event: MouseEvent | TouchEvent | FocusEvent) => {\n if (\n ignoreNonTouchEvents.current && event.type !== 'touchstart' ||\n ignoreNonFocusEvents.current && event.type !== 'focusin' && event.type !== 'focus'\n ) {\n return;\n }\n\n // Remove the title ahead of time.\n // We don't want to wait for the next render commit.\n // We would risk displaying two tooltips at the same time (native + this one).\n if (childNode) {\n childNode.setAttribute('title', '');\n }\n\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n if (enterDelay) {\n enterTimer.current = window.setTimeout(() => {\n handleOpen(event);\n }, enterDelay);\n } else {\n handleOpen(event);\n }\n };\n\n const handleFocus = (event: FocusEvent) => {\n // Workaround for https://github.com/facebook/react/issues/7769\n // The autoFocus of React might trigger the event before the componentDidMount.\n // We need to account for this eventuality.\n if (!childNode) {\n setChildNode(event.currentTarget as HTMLElement);\n }\n\n ignoreNonFocusEvents.current = true;\n window.clearTimeout(closeTimer.current);\n handleEnter(event);\n };\n\n const restoreUserSelect = () => {\n if (childNode && prevUserSelectRef.current !== undefined) {\n childNode.style.userSelect = prevUserSelectRef.current;\n prevUserSelectRef.current = undefined;\n // @ts-expect-error\n delete childNode.style.WebkitUserSelect;\n }\n };\n\n const disableUserSelect = () => {\n restoreUserSelect();\n\n if (childNode) {\n prevUserSelectRef.current = window.getComputedStyle(childNode).getPropertyValue('user-select');\n childNode.style.userSelect = 'none';\n // @ts-expect-error\n childNode.style.WebkitUserSelect = 'none';\n }\n };\n\n const handleClose = (event: MouseEvent | TouchEvent | FocusEvent) => {\n restoreUserSelect();\n\n if (!isControlled) {\n setOpenState(false);\n }\n\n if (onClose) {\n onClose(event);\n }\n\n window.clearTimeout(closeTimer.current);\n closeTimer.current = window.setTimeout(() => {\n ignoreNonTouchEvents.current = false;\n ignoreNonFocusEvents.current = false;\n }, SHORTEST_TRANSITION_DURATION);\n };\n\n const handleLeave = (event: MouseEvent | FocusEvent) => {\n if (!disableFocusListener && event.currentTarget === document.activeElement) {\n return;\n }\n if (ignoreNonFocusEvents.current && event.type !== 'focusout' && event.type !== 'blur') {\n return;\n }\n\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n if (computedLeaveDelay) {\n leaveTimer.current = window.setTimeout(() => {\n handleClose(event);\n }, computedLeaveDelay);\n } else {\n handleClose(event);\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n ignoreNonTouchEvents.current = true;\n\n disableUserSelect();\n\n window.clearTimeout(leaveTimer.current);\n window.clearTimeout(closeTimer.current);\n window.clearTimeout(touchTimer.current);\n touchTimer.current = window.setTimeout(() => {\n handleEnter(event);\n }, enterTouchDelay);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n window.clearTimeout(touchTimer.current);\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = window.setTimeout(() => {\n handleClose(event);\n }, leaveTouchDelay);\n };\n\n if (!disableTouchListener) {\n childNode?.addEventListener('touchstart', handleTouchStart);\n childNode?.addEventListener('touchend', handleTouchEnd);\n }\n\n if (!disableHoverListener) {\n childNode?.addEventListener('mouseenter', handleEnter);\n childNode?.addEventListener('mouseleave', handleLeave);\n }\n\n if (!disableFocusListener) {\n childNode?.addEventListener('focusin', handleFocus);\n childNode?.addEventListener('focusout', handleLeave);\n }\n\n interactiveWrapperListeners.current = interactive\n ? {\n onMouseOver: handleEnter,\n onMouseLeave: handleLeave,\n onFocus: handleFocus,\n onBlur: handleLeave,\n }\n : {};\n\n return () => {\n if (!disableTouchListener) {\n childNode?.removeEventListener('touchstart', handleTouchStart);\n childNode?.removeEventListener('touchend', handleTouchEnd);\n }\n\n if (!disableHoverListener) {\n childNode?.removeEventListener('mouseenter', handleEnter);\n childNode?.removeEventListener('mouseleave', handleLeave);\n }\n\n if (!disableFocusListener) {\n childNode?.removeEventListener('focusin', handleFocus);\n childNode?.removeEventListener('focusout', handleLeave);\n }\n };\n }, [\n childNode,\n disableTouchListener,\n disableHoverListener,\n disableFocusListener,\n isControlled,\n onOpen,\n onClose,\n enterDelay,\n computedLeaveDelay,\n enterTouchDelay,\n leaveTouchDelay,\n interactive,\n ]);\n\n let open = isControlled ? openProp : openState;\n\n if (!title) {\n open = false;\n }\n\n const shouldShowNativeTitle = !open && !disableHoverListener;\n const childrenProps = {\n ...children.props,\n 'aria-describedby': open ? id || defaultId.current : null,\n title: shouldShowNativeTitle && typeof title === 'string' ? title : null,\n ref: handleRef,\n };\n\n return (\n <>\n {cloneElement(children, childrenProps)}\n <Popper\n placement={placement}\n anchorEl={childNode}\n open={childNode ? Boolean(open) : false}\n manager={tooltipModalManager}\n id={childrenProps['aria-describedby']}\n TransitionProps={{\n timeout: 300,\n classNames: transitionGrowParent,\n ...TransitionProps,\n nodeRef: tooltipRef,\n }}\n {...interactiveWrapperListeners.current}\n {...popperProps}\n middleware={popperMiddleware}\n className={classnames(popperProps?.className, { interactive })}\n >\n <Root className=\"ui-tooltip__root\" ref={tooltipRef}>\n <div className={classnames(transitionGrow({ inner: true }), 'ui-tooltip__container')}>\n {withCorner && <Corner ref={arrowRef} className=\"ui-tooltip__corner\" />}\n <TooltipElement\n {...otherProps}\n className={classnames(\n typography({\n variant: ignoreNonTouchEvents.current ? 'body14' : 'caption12',\n color: 'ondark',\n }),\n className,\n )}\n >\n <Line className={variant} />\n {title}\n </TooltipElement>\n </div>\n </Root>\n </Popper>\n </>\n );\n};\n\nexport default memo(Tooltip);\n"],"names":["SHORTEST_TRANSITION_DURATION","tooltipModalManager","ModalManager","stickToViewportWhenFlipped","state","_elements_floating_ownerDocument","y","placement","rects","elements","win","window","viewportSafety","maxBottom","windowPadding","bottom","Tooltip","children","disableFocusListener","disableHoverListener","disableTouchListener","interactive","enterDelay","enterTouchDelay","leaveDelay","leaveTouchDelay","id","onClose","onOpen","className","openProp","popperProps","TransitionProps","title","variant","withCorner","stickToViewport","otherProps","openState","setOpenState","useState","forceUpdate","childNode","setChildNode","ignoreNonTouchEvents","useRef","ignoreNonFocusEvents","interactiveWrapperListeners","isControlled","undefined","defaultId","closeTimer","enterTimer","leaveTimer","touchTimer","tooltipRef","arrowRef","prevUserSelectRef","computedLeaveDelay","handleOwnRef","useCallback","ref","handleRef","useForkRef","popperMiddleware","useMemo","middleware","flip","shift","arrow","useEffect","Math","n","handleOpen","event","handleEnter","handleFocus","restoreUserSelect","disableUserSelect","handleClose","handleLeave","document","handleTouchStart","handleTouchEnd","open","shouldShowNativeTitle","childrenProps","cloneElement","Popper","Boolean","transitionGrowParent","classnames","Root","transitionGrow","Corner","TooltipElement","typography","Line","memo"],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip/Tooltip.js","sources":["../../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useCallback,\n useEffect,\n cloneElement,\n ReactElement,\n ReactNode,\n ComponentPropsWithoutRef,\n memo,\n useMemo,\n} from 'react';\nimport classnames from 'clsx';\nimport { transitionGrow, transitionGrowParent } from '@finam/web-ui-kit-core/styles/transition';\nimport { typography } from '@finam/web-ui-kit-core/styles/typography';\nimport type { Middleware } from '@floating-ui/dom';\nimport { arrow, flip, shift } from '@floating-ui/react';\nimport type { Placement, CSSTransitionProps } from '../types.js';\nimport type { PopperProps } from '../Popper/index.js';\nimport { useForkRef } from '../utils/withForwardedRef.js';\nimport { ModalManager } from '../Modal/index.js';\nimport {\n Popper,\n Root,\n TooltipElement,\n Corner,\n Line,\n} from './Tooltip.styles.js';\nimport { windowPadding } from './constants.js';\n\nconst SHORTEST_TRANSITION_DURATION = 150;\n\nconst tooltipModalManager = new ModalManager();\n\nfunction stickToViewportWhenFlipped(): Middleware {\n return {\n name: 'stickToViewportWhenFlipped',\n fn(state) {\n const { y, placement, rects, elements } = state;\n if (!placement.startsWith('top') || !rects.floating) {\n return {};\n }\n const win = elements.floating?.ownerDocument?.defaultView ?? (typeof window !== 'undefined' ? window : null);\n if (!win) {\n return {};\n }\n\n const viewportSafety = 1;\n const maxBottom = win.innerHeight - windowPadding - viewportSafety;\n const bottom = y + rects.floating.height;\n if (bottom <= maxBottom) {\n return {};\n }\n return { y: maxBottom - rects.floating.height };\n },\n };\n}\n\nexport type Variant = 'primary' | 'positive' | 'negative';\n\nexport interface Props extends Omit<ComponentPropsWithoutRef<typeof TooltipElement>, 'title'> {\n /** Элемент инициирующий появление всплывающего окна */\n children: ReactElement<any>;\n /** Контент всплывающего окна */\n title: ReactNode;\n /** Управление видимостью всплывающего окна */\n open?: boolean;\n /** Вариант стиля всплывающего окна */\n variant?: Variant;\n /** Функция обратного вызова, вызываемая при открытии всплывающего окна */\n onOpen?(event: MouseEvent | TouchEvent | FocusEvent): void;\n /** Функция обратного вызова, вызываемая при закрытии всплывающего окна */\n onClose?(event: MouseEvent | TouchEvent | FocusEvent): void;\n /** Позволяет всплывающему окну оставаться видимым при наведении на него */\n interactive?: boolean;\n /** Отключает открытие всплывающего окна на событие фокуса */\n disableFocusListener?: boolean;\n /** Отключает открытие всплывающего окна на событие наведения */\n disableHoverListener?: boolean;\n /** Отключает открытие всплывающего окна на событие сенсорного ввода */\n disableTouchListener?: boolean;\n /** Устанавливает задержку на открытие всплывающего окна на указанное количество миллисекунд */\n enterDelay?: number;\n /** Устанавливает задержку на открытие всплывающего окна на указанное количество миллисекунд\n * для сенсорного ввода */\n enterTouchDelay?: number;\n /** Устанавливает задержку на закрытие всплывающего окна на указанное количество миллисекунд */\n leaveDelay?: number;\n /** Устанавливает задержку на закрытие всплывающего окна на указанное количество миллисекунд\n * для сенсорного ввода */\n leaveTouchDelay?: number;\n /** Устанавливает позиционирование всплывающего окна относительно инициирующего элемента */\n placement?: Placement;\n /** Дополнительные свойства всплывающего окна */\n PopperProps?: Partial<PopperProps>;\n /** from Modal */\n TransitionProps?: Partial<CSSTransitionProps<HTMLElement>>;\n /** Управляет отображением пина */\n withCorner?: boolean;\n /** При развороте тултипа вверх, прижимает его к низу вьюпорта, не давая выйти за вьюпорт */\n stickToViewport?: boolean;\n}\n\nconst Tooltip = ({\n children,\n disableFocusListener = true,\n disableHoverListener = false,\n disableTouchListener = false,\n interactive = false,\n enterDelay = 300,\n enterTouchDelay = 200,\n leaveDelay,\n leaveTouchDelay = 1500,\n id,\n onClose,\n onOpen,\n className,\n open: openProp,\n placement = 'bottom',\n PopperProps: popperProps,\n TransitionProps,\n title,\n variant = 'primary',\n withCorner = true,\n stickToViewport,\n ...otherProps\n}: Props) => {\n const [openState, setOpenState] = useState(false);\n const [, forceUpdate] = useState(false);\n const [childNode, setChildNode] = useState<HTMLElement | null>(null);\n const ignoreNonTouchEvents = useRef(false);\n const ignoreNonFocusEvents = useRef(false);\n const interactiveWrapperListeners = useRef({});\n const { current: isControlled } = useRef(openProp !== undefined);\n const defaultId = useRef<string | undefined>(undefined);\n const closeTimer = useRef<number | undefined>(undefined);\n const enterTimer = useRef<number | undefined>(undefined);\n const leaveTimer = useRef<number | undefined>(undefined);\n const touchTimer = useRef<number | undefined>(undefined);\n const tooltipRef = useRef<HTMLDivElement | null>(null);\n const arrowRef = useRef<SVGSVGElement | null>(null);\n const prevUserSelectRef = useRef<string | undefined>(undefined);\n\n const computedLeaveDelay = interactive ? leaveDelay ?? 200 : leaveDelay;\n\n const handleOwnRef = useCallback((ref: HTMLElement) => {\n setChildNode(ref);\n }, []);\n const handleRef = useForkRef(children.props.ref || (children as any).ref, handleOwnRef);\n\n const popperMiddleware = useMemo(() => {\n const middleware = [\n flip({ fallbackAxisSideDirection: 'end' }),\n shift({ padding: windowPadding }),\n ];\n if (stickToViewport) {\n middleware.push(stickToViewportWhenFlipped());\n }\n if (withCorner) {\n middleware.push(arrow({ element: arrowRef, padding: 4 }));\n }\n return middleware;\n }, [stickToViewport, withCorner]);\n\n useEffect(() => {\n // Fallback to this default id when possible.\n // Use the random value for client side rendering only.\n // We can't use it server-side.\n if (!defaultId.current) {\n defaultId.current = `ui-tooltip-${Math.round(Math.random() * 1e5)}`;\n }\n\n // Rerender with defaultId and childNode.\n if (openProp) {\n forceUpdate(n => !n);\n }\n }, [openProp]);\n\n useEffect(() => () => {\n window.clearTimeout(closeTimer.current);\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n window.clearTimeout(touchTimer.current);\n }, []);\n\n useEffect(() => {\n const handleOpen = (event: MouseEvent | TouchEvent | FocusEvent) => {\n // The mouseover event will trigger for every nested element in the tooltip.\n // We can skip rerendering when the tooltip is already open.\n // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n if (!isControlled) {\n setOpenState(true);\n }\n\n if (onOpen) {\n onOpen(event);\n }\n };\n\n const handleEnter = (event: MouseEvent | TouchEvent | FocusEvent) => {\n if (\n ignoreNonTouchEvents.current && event.type !== 'touchstart' ||\n ignoreNonFocusEvents.current && event.type !== 'focusin' && event.type !== 'focus'\n ) {\n return;\n }\n\n // Remove the title ahead of time.\n // We don't want to wait for the next render commit.\n // We would risk displaying two tooltips at the same time (native + this one).\n if (childNode) {\n childNode.setAttribute('title', '');\n }\n\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n if (enterDelay) {\n enterTimer.current = window.setTimeout(() => {\n handleOpen(event);\n }, enterDelay);\n } else {\n handleOpen(event);\n }\n };\n\n const handleFocus = (event: FocusEvent) => {\n // Workaround for https://github.com/facebook/react/issues/7769\n // The autoFocus of React might trigger the event before the componentDidMount.\n // We need to account for this eventuality.\n if (!childNode) {\n setChildNode(event.currentTarget as HTMLElement); // NOSONAR: currentTarget is EventTarget | null\n }\n\n ignoreNonFocusEvents.current = true;\n window.clearTimeout(closeTimer.current);\n handleEnter(event);\n };\n\n const restoreUserSelect = () => {\n if (childNode && prevUserSelectRef.current !== undefined) {\n childNode.style.userSelect = prevUserSelectRef.current;\n prevUserSelectRef.current = undefined;\n // @ts-expect-error\n delete childNode.style.WebkitUserSelect;\n }\n };\n\n const disableUserSelect = () => {\n restoreUserSelect();\n\n if (childNode) {\n prevUserSelectRef.current = window.getComputedStyle(childNode).getPropertyValue('user-select');\n childNode.style.userSelect = 'none';\n // @ts-expect-error\n childNode.style.WebkitUserSelect = 'none';\n }\n };\n\n const handleClose = (event: MouseEvent | TouchEvent | FocusEvent) => {\n restoreUserSelect();\n\n if (!isControlled) {\n setOpenState(false);\n }\n\n if (onClose) {\n onClose(event);\n }\n\n window.clearTimeout(closeTimer.current);\n closeTimer.current = window.setTimeout(() => {\n ignoreNonTouchEvents.current = false;\n ignoreNonFocusEvents.current = false;\n }, SHORTEST_TRANSITION_DURATION);\n };\n\n const handleLeave = (event: MouseEvent | FocusEvent) => {\n if (!disableFocusListener && event.currentTarget === document.activeElement) {\n return;\n }\n if (ignoreNonFocusEvents.current && event.type !== 'focusout' && event.type !== 'blur') {\n return;\n }\n\n window.clearTimeout(enterTimer.current);\n window.clearTimeout(leaveTimer.current);\n if (computedLeaveDelay) {\n leaveTimer.current = window.setTimeout(() => {\n handleClose(event);\n }, computedLeaveDelay);\n } else {\n handleClose(event);\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n ignoreNonTouchEvents.current = true;\n\n disableUserSelect();\n\n window.clearTimeout(leaveTimer.current);\n window.clearTimeout(closeTimer.current);\n window.clearTimeout(touchTimer.current);\n touchTimer.current = window.setTimeout(() => {\n handleEnter(event);\n }, enterTouchDelay);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n window.clearTimeout(touchTimer.current);\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = window.setTimeout(() => {\n handleClose(event);\n }, leaveTouchDelay);\n };\n\n if (!disableTouchListener) {\n childNode?.addEventListener('touchstart', handleTouchStart);\n childNode?.addEventListener('touchend', handleTouchEnd);\n }\n\n if (!disableHoverListener) {\n childNode?.addEventListener('mouseenter', handleEnter);\n childNode?.addEventListener('mouseleave', handleLeave);\n }\n\n if (!disableFocusListener) {\n childNode?.addEventListener('focusin', handleFocus);\n childNode?.addEventListener('focusout', handleLeave);\n }\n\n interactiveWrapperListeners.current = interactive\n ? {\n onMouseOver: handleEnter,\n onMouseLeave: handleLeave,\n onFocus: handleFocus,\n onBlur: handleLeave,\n }\n : {};\n\n return () => {\n if (!disableTouchListener) {\n childNode?.removeEventListener('touchstart', handleTouchStart);\n childNode?.removeEventListener('touchend', handleTouchEnd);\n }\n\n if (!disableHoverListener) {\n childNode?.removeEventListener('mouseenter', handleEnter);\n childNode?.removeEventListener('mouseleave', handleLeave);\n }\n\n if (!disableFocusListener) {\n childNode?.removeEventListener('focusin', handleFocus);\n childNode?.removeEventListener('focusout', handleLeave);\n }\n };\n }, [\n childNode,\n disableTouchListener,\n disableHoverListener,\n disableFocusListener,\n isControlled,\n onOpen,\n onClose,\n enterDelay,\n computedLeaveDelay,\n enterTouchDelay,\n leaveTouchDelay,\n interactive,\n ]);\n\n let open = isControlled ? openProp : openState;\n\n if (!title) {\n open = false;\n }\n\n const shouldShowNativeTitle = !open && !disableHoverListener;\n const childrenProps = {\n ...children.props,\n 'aria-describedby': open ? id || defaultId.current : null,\n title: shouldShowNativeTitle && typeof title === 'string' ? title : null,\n ref: handleRef,\n };\n\n return (\n <>\n {cloneElement(children, childrenProps)}\n <Popper\n placement={placement}\n anchorEl={childNode}\n open={childNode ? Boolean(open) : false}\n manager={tooltipModalManager}\n id={childrenProps['aria-describedby']}\n TransitionProps={{\n timeout: 300,\n classNames: transitionGrowParent,\n ...TransitionProps,\n nodeRef: tooltipRef,\n }}\n {...interactiveWrapperListeners.current}\n {...popperProps}\n middleware={popperMiddleware}\n className={classnames(popperProps?.className, { interactive })}\n >\n <Root className=\"ui-tooltip__root\" ref={tooltipRef}>\n <div className={classnames(transitionGrow({ inner: true }), 'ui-tooltip__container')}>\n {withCorner && <Corner ref={arrowRef} className=\"ui-tooltip__corner\" />}\n <TooltipElement\n {...otherProps}\n className={classnames(\n typography({\n variant: ignoreNonTouchEvents.current ? 'body14' : 'caption12',\n color: 'ondark',\n }),\n className,\n )}\n >\n <Line className={variant} />\n {title}\n </TooltipElement>\n </div>\n </Root>\n </Popper>\n </>\n );\n};\n\nexport default memo(Tooltip);\n"],"names":["SHORTEST_TRANSITION_DURATION","tooltipModalManager","ModalManager","stickToViewportWhenFlipped","state","_elements_floating_ownerDocument","y","placement","rects","elements","win","window","viewportSafety","maxBottom","windowPadding","bottom","Tooltip","children","disableFocusListener","disableHoverListener","disableTouchListener","interactive","enterDelay","enterTouchDelay","leaveDelay","leaveTouchDelay","id","onClose","onOpen","className","openProp","popperProps","TransitionProps","title","variant","withCorner","stickToViewport","otherProps","openState","setOpenState","useState","forceUpdate","childNode","setChildNode","ignoreNonTouchEvents","useRef","ignoreNonFocusEvents","interactiveWrapperListeners","isControlled","undefined","defaultId","closeTimer","enterTimer","leaveTimer","touchTimer","tooltipRef","arrowRef","prevUserSelectRef","computedLeaveDelay","handleOwnRef","useCallback","ref","handleRef","useForkRef","popperMiddleware","useMemo","middleware","flip","shift","arrow","useEffect","Math","n","handleOpen","event","handleEnter","handleFocus","restoreUserSelect","disableUserSelect","handleClose","handleLeave","document","handleTouchStart","handleTouchEnd","open","shouldShowNativeTitle","childrenProps","cloneElement","Popper","Boolean","transitionGrowParent","classnames","Root","transitionGrow","Corner","TooltipElement","typography","Line","memo"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./types.js";
2
- const version = "3.33.1";
2
+ const version = "3.33.3";
3
3
  export { default as Button } from "./Button/index.js";
4
4
  export { default as ButtonAsync } from "./ButtonAsync/index.js";
5
5
  export { default as MarketingButton } from "./MarketingButton/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finam/web-ui-kit-components",
3
- "version": "3.33.1",
3
+ "version": "3.33.3",
4
4
  "description": "Components library for web-ui-kit",
5
5
  "author": "",
6
6
  "license": "ISC",
@@ -97,6 +97,7 @@
97
97
  "@finam/web-ui-kit-core": "^4.0.0",
98
98
  "@testing-library/jest-dom": "^6.9.1",
99
99
  "@testing-library/react": "^16.3.2",
100
+ "@testing-library/user-event": "^14.6.1",
100
101
  "@types/lodash": "^4.17.21",
101
102
  "@types/react": "^19.2.14",
102
103
  "@types/react-dom": "^19.2.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"Avatar/index.js","sources":["../../src/Avatar/index.ts"],"sourcesContent":["import Avatar, { Props } from './Avatar.js';\n\nexport type { Props as AvatarProps };\nexport default Avatar;\n"],"names":["Avatar"],"mappings":";AAGA,mBAAeA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar/Day/index.js","sources":["../../../src/Calendar/Day/index.ts"],"sourcesContent":["import Day, { Props } from './Day.js';\n\nexport type { Props as DayProps };\nexport default Day;\n"],"names":["Day"],"mappings":";AAGA,qBAAeA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar/SlideTransition/index.js","sources":["../../../src/Calendar/SlideTransition/index.ts"],"sourcesContent":["import SlideTransition, { Props } from './SlideTransition.js';\n\nexport type { SlideDirection } from './types.js';\nexport type { Props as SlideTransitionProps };\nexport default SlideTransition;\n"],"names":["SlideTransition"],"mappings":";AAIA,iCAAeA"}