@finam/web-ui-kit-components 3.33.2 → 3.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +10 -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/CheckboxField/index.d.ts +1 -3
  48. package/dist/CheckboxField/index.d.ts.map +1 -1
  49. package/dist/CheckboxField/index.js +1 -5
  50. package/dist/CheckboxField/types.d.ts +2 -2
  51. package/dist/CheckboxField/types.d.ts.map +1 -1
  52. package/dist/Chip/index.d.ts +1 -3
  53. package/dist/Chip/index.d.ts.map +1 -1
  54. package/dist/Chip/index.js +1 -5
  55. package/dist/ClickAwayListener/ClickAwayListener.d.ts.map +1 -1
  56. package/dist/ClickAwayListener/ClickAwayListener.js +3 -1
  57. package/dist/ClickAwayListener/ClickAwayListener.js.map +1 -1
  58. package/dist/ClickAwayListener/index.d.ts +1 -3
  59. package/dist/ClickAwayListener/index.d.ts.map +1 -1
  60. package/dist/ClickAwayListener/index.js +1 -5
  61. package/dist/Counter/index.d.ts +1 -3
  62. package/dist/Counter/index.d.ts.map +1 -1
  63. package/dist/Counter/index.js +1 -5
  64. package/dist/DatePicker/DatePicker.d.ts.map +1 -1
  65. package/dist/DatePicker/DatePicker.js +1 -1
  66. package/dist/DatePicker/DatePicker.js.map +1 -1
  67. package/dist/DateTimePeriod/index.d.ts +2 -5
  68. package/dist/DateTimePeriod/index.d.ts.map +1 -1
  69. package/dist/DateTimePeriod/index.js +1 -5
  70. package/dist/DateTimePicker/index.d.ts +1 -3
  71. package/dist/DateTimePicker/index.d.ts.map +1 -1
  72. package/dist/DateTimePicker/index.js +1 -5
  73. package/dist/Dialog/Dialog.js +1 -1
  74. package/dist/Dialog/Dialog.js.map +1 -1
  75. package/dist/DialogActions/index.d.ts +1 -3
  76. package/dist/DialogActions/index.d.ts.map +1 -1
  77. package/dist/DialogActions/index.js +1 -5
  78. package/dist/DialogContent/index.d.ts +1 -3
  79. package/dist/DialogContent/index.d.ts.map +1 -1
  80. package/dist/DialogContent/index.js +1 -5
  81. package/dist/DialogTitle/index.d.ts +1 -3
  82. package/dist/DialogTitle/index.d.ts.map +1 -1
  83. package/dist/DialogTitle/index.js +1 -5
  84. package/dist/Divider/index.d.ts +1 -3
  85. package/dist/Divider/index.d.ts.map +1 -1
  86. package/dist/Divider/index.js +1 -5
  87. package/dist/DraggablePopover/DraggablePopover.d.ts.map +1 -1
  88. package/dist/DraggablePopover/DraggablePopover.js +2 -2
  89. package/dist/DraggablePopover/DraggablePopover.js.map +1 -1
  90. package/dist/DraggablePopover/layersManager.d.ts +1 -1
  91. package/dist/DraggablePopover/layersManager.d.ts.map +1 -1
  92. package/dist/DraggablePopover/layersManager.js.map +1 -1
  93. package/dist/DropDownMenu/index.d.ts +1 -3
  94. package/dist/DropDownMenu/index.d.ts.map +1 -1
  95. package/dist/DropDownMenu/index.js +1 -5
  96. package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts +1 -3
  97. package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts.map +1 -1
  98. package/dist/FeatureCallout/FeatureCalloutActions/index.js +1 -5
  99. package/dist/FeatureCallout/FeatureCalloutText/index.d.ts +1 -3
  100. package/dist/FeatureCallout/FeatureCalloutText/index.d.ts.map +1 -1
  101. package/dist/FeatureCallout/FeatureCalloutText/index.js +1 -5
  102. package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts +1 -3
  103. package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts.map +1 -1
  104. package/dist/FeatureCallout/FeatureCalloutTitle/index.js +1 -5
  105. package/dist/FeatureCallout/index.d.ts +4 -7
  106. package/dist/FeatureCallout/index.d.ts.map +1 -1
  107. package/dist/FeatureCallout/index.js +1 -5
  108. package/dist/FeatureCallout/utils.d.ts.map +1 -1
  109. package/dist/FeatureCallout/utils.js +1 -37
  110. package/dist/FeatureCallout/utils.js.map +1 -1
  111. package/dist/FieldHint/index.d.ts +1 -3
  112. package/dist/FieldHint/index.d.ts.map +1 -1
  113. package/dist/FieldHint/index.js +1 -5
  114. package/dist/FilterButton/FilterButton.js +1 -1
  115. package/dist/FilterButton/FilterButton.js.map +1 -1
  116. package/dist/FormGroup/index.d.ts +1 -3
  117. package/dist/FormGroup/index.d.ts.map +1 -1
  118. package/dist/FormGroup/index.js +1 -5
  119. package/dist/Loader/index.d.ts +1 -3
  120. package/dist/Loader/index.d.ts.map +1 -1
  121. package/dist/Loader/index.js +1 -5
  122. package/dist/LoaderBackdrop/index.d.ts +1 -3
  123. package/dist/LoaderBackdrop/index.d.ts.map +1 -1
  124. package/dist/LoaderBackdrop/index.js +1 -5
  125. package/dist/LoaderDots/index.d.ts +1 -3
  126. package/dist/LoaderDots/index.d.ts.map +1 -1
  127. package/dist/LoaderDots/index.js +1 -5
  128. package/dist/MarketingButton/useMarketingAnimations.d.ts +2 -2
  129. package/dist/MarketingButton/useMarketingAnimations.d.ts.map +1 -1
  130. package/dist/MarketingButton/useMarketingAnimations.js +27 -14
  131. package/dist/MarketingButton/useMarketingAnimations.js.map +1 -1
  132. package/dist/Modal/ModalManager.d.ts +1 -1
  133. package/dist/Modal/ModalManager.d.ts.map +1 -1
  134. package/dist/Modal/ModalManager.js.map +1 -1
  135. package/dist/Modal/Portal.js +1 -1
  136. package/dist/Modal/Portal.js.map +1 -1
  137. package/dist/ModalsProvider/index.d.ts +1 -3
  138. package/dist/ModalsProvider/index.d.ts.map +1 -1
  139. package/dist/ModalsProvider/index.js +1 -6
  140. package/dist/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  141. package/dist/MultiSelectField/MultiSelectField.js +3 -8
  142. package/dist/MultiSelectField/MultiSelectField.js.map +1 -1
  143. package/dist/MultiSelectField/index.d.ts +1 -3
  144. package/dist/MultiSelectField/index.d.ts.map +1 -1
  145. package/dist/MultiSelectField/index.js +1 -5
  146. package/dist/NumberTextField/NumberTextField.js +4 -4
  147. package/dist/NumberTextField/NumberTextField.js.map +1 -1
  148. package/dist/NumberTextField/index.d.ts +1 -3
  149. package/dist/NumberTextField/index.d.ts.map +1 -1
  150. package/dist/NumberTextField/index.js +1 -5
  151. package/dist/NumberTextField/utils.d.ts.map +1 -1
  152. package/dist/NumberTextField/utils.js +1 -1
  153. package/dist/NumberTextField/utils.js.map +1 -1
  154. package/dist/PaginatorNumber/NavButton/index.d.ts +1 -3
  155. package/dist/PaginatorNumber/NavButton/index.d.ts.map +1 -1
  156. package/dist/PaginatorNumber/NavButton/index.js +1 -5
  157. package/dist/PaginatorNumber/PageButton/index.d.ts +1 -3
  158. package/dist/PaginatorNumber/PageButton/index.d.ts.map +1 -1
  159. package/dist/PaginatorNumber/PageButton/index.js +1 -5
  160. package/dist/PaginatorNumber/index.d.ts +1 -3
  161. package/dist/PaginatorNumber/index.d.ts.map +1 -1
  162. package/dist/PaginatorNumber/index.js +1 -5
  163. package/dist/PaginatorOverflow/NavButton/index.d.ts +1 -3
  164. package/dist/PaginatorOverflow/NavButton/index.d.ts.map +1 -1
  165. package/dist/PaginatorOverflow/NavButton/index.js +1 -5
  166. package/dist/PaginatorOverflow/PaginatorOverflow.js +2 -2
  167. package/dist/PaginatorOverflow/PaginatorOverflow.js.map +1 -1
  168. package/dist/PaginatorOverflow/index.d.ts +1 -3
  169. package/dist/PaginatorOverflow/index.d.ts.map +1 -1
  170. package/dist/PaginatorOverflow/index.js +1 -5
  171. package/dist/Paper/types.d.ts +6 -1
  172. package/dist/Paper/types.d.ts.map +1 -1
  173. package/dist/Paper/utils.d.ts +2 -2
  174. package/dist/PickersUtilsProvider/defaultDateFormatUtils.js +1 -1
  175. package/dist/PickersUtilsProvider/defaultDateFormatUtils.js.map +1 -1
  176. package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js +4 -4
  177. package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js.map +1 -1
  178. package/dist/PickersUtilsProvider/utils.js +1 -1
  179. package/dist/PickersUtilsProvider/utils.js.map +1 -1
  180. package/dist/ProductCard/layouts/ipo/Content.d.ts +2 -2
  181. package/dist/ProductCard/layouts/ipo/Content.d.ts.map +1 -1
  182. package/dist/ProductCard/layouts/ipo/Content.js.map +1 -1
  183. package/dist/ProductCard/utils.d.ts.map +1 -1
  184. package/dist/ProductCard/utils.js +4 -1
  185. package/dist/ProductCard/utils.js.map +1 -1
  186. package/dist/Skeleton/index.d.ts +2 -3
  187. package/dist/Skeleton/index.d.ts.map +1 -1
  188. package/dist/Skeleton/index.js +1 -5
  189. package/dist/Slider/Slider.js +9 -5
  190. package/dist/Slider/Slider.js.map +1 -1
  191. package/dist/Snackbar/Snackbar.js.map +1 -1
  192. package/dist/Stepper/index.d.ts +2 -3
  193. package/dist/Stepper/index.d.ts.map +1 -1
  194. package/dist/Stepper/index.js +1 -5
  195. package/dist/Tab/Tab.d.ts +2 -1
  196. package/dist/Tab/Tab.d.ts.map +1 -1
  197. package/dist/Tab/Tab.js +1 -1
  198. package/dist/Tab/Tab.js.map +1 -1
  199. package/dist/Tag/Tag.d.ts.map +1 -1
  200. package/dist/Tag/Tag.js +2 -13
  201. package/dist/Tag/Tag.js.map +1 -1
  202. package/dist/Tag/Tag.styles.css +1 -1
  203. package/dist/Tag/Tag.styles.d.ts.map +1 -1
  204. package/dist/Tag/Tag.styles.js.map +1 -1
  205. package/dist/TextArea/TextArea.d.ts +9 -4
  206. package/dist/TextArea/TextArea.d.ts.map +1 -1
  207. package/dist/TextArea/TextArea.js +58 -9
  208. package/dist/TextArea/TextArea.js.map +1 -1
  209. package/dist/TextArea/TextArea.styles.css +2 -0
  210. package/dist/TextArea/TextArea.styles.d.ts +2 -0
  211. package/dist/TextArea/TextArea.styles.d.ts.map +1 -1
  212. package/dist/TextArea/TextArea.styles.js +3 -1
  213. package/dist/TextArea/TextArea.styles.js.map +1 -1
  214. package/dist/Tooltip/Tooltip.js.map +1 -1
  215. package/dist/index.js +1 -1
  216. package/package.json +2 -1
  217. package/dist/Avatar/index.js.map +0 -1
  218. package/dist/Calendar/Day/index.js.map +0 -1
  219. package/dist/Calendar/SlideTransition/index.js.map +0 -1
  220. package/dist/CheckboxField/index.js.map +0 -1
  221. package/dist/Chip/index.js.map +0 -1
  222. package/dist/ClickAwayListener/index.js.map +0 -1
  223. package/dist/Counter/index.js.map +0 -1
  224. package/dist/DateTimePeriod/index.js.map +0 -1
  225. package/dist/DateTimePicker/index.js.map +0 -1
  226. package/dist/DialogActions/index.js.map +0 -1
  227. package/dist/DialogContent/index.js.map +0 -1
  228. package/dist/DialogTitle/index.js.map +0 -1
  229. package/dist/Divider/index.js.map +0 -1
  230. package/dist/DropDownMenu/index.js.map +0 -1
  231. package/dist/FeatureCallout/FeatureCalloutActions/index.js.map +0 -1
  232. package/dist/FeatureCallout/FeatureCalloutText/index.js.map +0 -1
  233. package/dist/FeatureCallout/FeatureCalloutTitle/index.js.map +0 -1
  234. package/dist/FeatureCallout/index.js.map +0 -1
  235. package/dist/FieldHint/index.js.map +0 -1
  236. package/dist/FormGroup/index.js.map +0 -1
  237. package/dist/Loader/index.js.map +0 -1
  238. package/dist/LoaderBackdrop/index.js.map +0 -1
  239. package/dist/LoaderDots/index.js.map +0 -1
  240. package/dist/ModalsProvider/index.js.map +0 -1
  241. package/dist/MultiSelectField/index.js.map +0 -1
  242. package/dist/NumberTextField/index.js.map +0 -1
  243. package/dist/PaginatorNumber/NavButton/index.js.map +0 -1
  244. package/dist/PaginatorNumber/PageButton/index.js.map +0 -1
  245. package/dist/PaginatorNumber/index.js.map +0 -1
  246. package/dist/PaginatorOverflow/NavButton/index.js.map +0 -1
  247. package/dist/PaginatorOverflow/index.js.map +0 -1
  248. package/dist/Skeleton/index.js.map +0 -1
  249. package/dist/Stepper/index.js.map +0 -1
@@ -1,21 +1,21 @@
1
1
  import { useCallback, useRef, useState } from "react";
2
2
  import { GLOW_BLUR_MIN, calculateGlowBlur, calculateGlowOpacity, easeIn, easeOut } from "./utils.js";
3
- const HOVER_BG_ANIMATION_TYPES = [
3
+ const HOVER_BG_ANIMATION_TYPES = new Set([
4
4
  'gradient',
5
5
  'primary',
6
6
  'alternative',
7
7
  'ondark',
8
8
  'outline'
9
- ];
10
- const HOVER_GLOW_ANIMATION_TYPES = [
9
+ ]);
10
+ const HOVER_GLOW_ANIMATION_TYPES = new Set([
11
11
  'gradient',
12
12
  'primary',
13
13
  'secondary'
14
- ];
15
- const ACTIVE_BG_ANIMATION_TYPES = [
14
+ ]);
15
+ const ACTIVE_BG_ANIMATION_TYPES = new Set([
16
16
  'gradient',
17
17
  'ondark'
18
- ];
18
+ ]);
19
19
  const animateGradient = (element, ref, fromX, toX, duration, onComplete)=>{
20
20
  const startTime = performance.now();
21
21
  const animate = (time)=>{
@@ -32,7 +32,7 @@ const animateGradient = (element, ref, fromX, toX, duration, onComplete)=>{
32
32
  };
33
33
  ref.current = requestAnimationFrame(animate);
34
34
  };
35
- const animateGradientSize = (element, ref, fromWidth, toWidth, fromHeight, toHeight, duration, onComplete)=>{
35
+ const animateGradientSize = (element, ref, { fromWidth, toWidth, fromHeight, toHeight, duration, onComplete })=>{
36
36
  const startTime = performance.now();
37
37
  const animate = (time)=>{
38
38
  const elapsed = time - startTime;
@@ -63,9 +63,9 @@ const useMarketingAnimations = (marketingType)=>{
63
63
  const animationRef = useRef(null);
64
64
  const scaleAnimationRef = useRef(null);
65
65
  const lastMouseX = useRef(0);
66
- const hasHoverBgAnimation = marketingType && HOVER_BG_ANIMATION_TYPES.includes(marketingType);
67
- const hasHoverGlowAnimation = marketingType && HOVER_GLOW_ANIMATION_TYPES.includes(marketingType);
68
- const hasActiveBgAnimation = marketingType && ACTIVE_BG_ANIMATION_TYPES.includes(marketingType);
66
+ const hasHoverBgAnimation = null != marketingType && HOVER_BG_ANIMATION_TYPES.has(marketingType);
67
+ const hasHoverGlowAnimation = null != marketingType && HOVER_GLOW_ANIMATION_TYPES.has(marketingType);
68
+ const hasActiveBgAnimation = null != marketingType && ACTIVE_BG_ANIMATION_TYPES.has(marketingType);
69
69
  const handleMouseMove = useCallback((e)=>{
70
70
  const rect = e.currentTarget.getBoundingClientRect();
71
71
  const x = (e.clientX - rect.left) / rect.width * 100;
@@ -146,7 +146,13 @@ const useMarketingAnimations = (marketingType)=>{
146
146
  if (scaleAnimationRef.current) cancelAnimationFrame(scaleAnimationRef.current);
147
147
  const currentWidth = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-width') || '100');
148
148
  const currentHeight = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-height') || ('gradient' === marketingType ? '328' : '180'));
149
- animateGradientSize(e.currentTarget, scaleAnimationRef, currentWidth, 120, currentHeight, 394, 300);
149
+ animateGradientSize(e.currentTarget, scaleAnimationRef, {
150
+ fromWidth: currentWidth,
151
+ toWidth: 120,
152
+ fromHeight: currentHeight,
153
+ toHeight: 394,
154
+ duration: 300
155
+ });
150
156
  }
151
157
  setIsActive(true);
152
158
  }, [
@@ -172,9 +178,16 @@ const useMarketingAnimations = (marketingType)=>{
172
178
  const currentHeight = parseFloat(element.style.getPropertyValue('--gradient-height') || '394');
173
179
  const defaultWidth = isHovered && 'gradient' === marketingType ? 90 : 100;
174
180
  const defaultHeight = isHovered && 'gradient' === marketingType ? 300 : 'gradient' === marketingType ? 328 : 180;
175
- animateGradientSize(element, scaleAnimationRef, currentWidth, defaultWidth, currentHeight, defaultHeight, 300, ()=>{
176
- element.style.removeProperty('--gradient-width');
177
- element.style.removeProperty('--gradient-height');
181
+ animateGradientSize(element, scaleAnimationRef, {
182
+ fromWidth: currentWidth,
183
+ toWidth: defaultWidth,
184
+ fromHeight: currentHeight,
185
+ toHeight: defaultHeight,
186
+ duration: 300,
187
+ onComplete: ()=>{
188
+ element.style.removeProperty('--gradient-width');
189
+ element.style.removeProperty('--gradient-height');
190
+ }
178
191
  });
179
192
  }
180
193
  setIsActive(false);
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingButton/useMarketingAnimations.js","sources":["../../src/MarketingButton/useMarketingAnimations.ts"],"sourcesContent":["import { useState, useRef, MouseEvent, useCallback } from 'react';\nimport type { Variant } from './types.js';\nimport {\n GLOW_BLUR_MIN,\n calculateGlowOpacity,\n calculateGlowBlur,\n easeOut,\n easeIn,\n} from './utils.js';\n\nconst HOVER_BG_ANIMATION_TYPES: Variant[] = ['gradient', 'primary', 'alternative', 'ondark', 'outline'];\nconst HOVER_GLOW_ANIMATION_TYPES: Variant[] = ['gradient', 'primary', 'secondary'];\nconst ACTIVE_BG_ANIMATION_TYPES: Variant[] = ['gradient', 'ondark'];\n\nconst animateGradient = (\n element: HTMLButtonElement | HTMLAnchorElement,\n ref: React.RefObject<number | null>,\n fromX: number,\n toX: number,\n duration: number,\n onComplete?: () => void,\n) => {\n const startTime = performance.now();\n\n const animate = (time: number) => {\n const elapsed = time - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const newX = fromX + (toX - fromX) * easeOut(progress);\n\n element.style.setProperty('--gradient-x', `${newX}%`);\n\n if (progress >= 1) {\n ref.current = null;\n onComplete?.();\n return;\n }\n\n ref.current = requestAnimationFrame(animate);\n };\n\n ref.current = requestAnimationFrame(animate);\n};\n\nconst animateGradientSize = (\n element: HTMLButtonElement | HTMLAnchorElement,\n ref: React.RefObject<number | null>,\n fromWidth: number,\n toWidth: number,\n fromHeight: number,\n toHeight: number,\n duration: number,\n onComplete?: () => void,\n) => {\n const startTime = performance.now();\n\n const animate = (time: number) => {\n const elapsed = time - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const newWidth = fromWidth + (toWidth - fromWidth) * easeIn(progress);\n const newHeight = fromHeight + (toHeight - fromHeight) * easeIn(progress);\n\n element.style.setProperty('--gradient-width', `${newWidth}%`);\n element.style.setProperty('--gradient-height', `${newHeight}%`);\n\n if (progress >= 1) {\n ref.current = null;\n onComplete?.();\n return;\n }\n\n ref.current = requestAnimationFrame(animate);\n };\n\n ref.current = requestAnimationFrame(animate);\n};\n\nexport const useMarketingAnimations = (marketingType?: Variant) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const [glow, setGlow] = useState({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n\n const animationRef = useRef<number | null>(null);\n const scaleAnimationRef = useRef<number | null>(null);\n const lastMouseX = useRef<number>(0);\n\n const hasHoverBgAnimation =\n marketingType && HOVER_BG_ANIMATION_TYPES.includes(marketingType);\n const hasHoverGlowAnimation =\n marketingType && HOVER_GLOW_ANIMATION_TYPES.includes(marketingType);\n const hasActiveBgAnimation =\n marketingType && ACTIVE_BG_ANIMATION_TYPES.includes(marketingType);\n\n const handleMouseMove = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - rect.left) / rect.width) * 100;\n\n lastMouseX.current = x;\n\n if (hasHoverBgAnimation && isHovered) {\n if (marketingType === 'gradient' && animationRef.current) {\n const currentGradientX = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-x') || '100');\n if (currentGradientX <= x) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n } else {\n e.currentTarget.style.setProperty('--gradient-x', `${x}%`);\n }\n }\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: calculateGlowOpacity(x),\n blur: calculateGlowBlur(x),\n });\n }\n }, [hasHoverBgAnimation, hasHoverGlowAnimation, isHovered, marketingType]);\n\n const handleMouseEnter = useCallback((e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const mouseX = ((e.clientX - rect.left) / rect.width) * 100;\n\n if (marketingType === 'gradient') {\n const currentX = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-x') || '100');\n\n if (Math.abs(currentX - mouseX) > 1) {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n animateGradient(e.currentTarget, animationRef, currentX, mouseX, 300, () => {\n animationRef.current = null;\n });\n }\n }\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: calculateGlowOpacity(mouseX),\n blur: calculateGlowBlur(mouseX),\n });\n }\n\n setIsHovered(true);\n }, [hasHoverGlowAnimation, marketingType]);\n\n const handleMouseLeave = useCallback((e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const element = e.currentTarget;\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n }\n\n if (animationRef.current && hasHoverBgAnimation) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n\n if (marketingType === 'gradient') {\n const currentX = parseFloat(element.style.getPropertyValue('--gradient-x') || '100');\n animateGradient(element, animationRef, currentX, 100, 300, () => {\n element.style.removeProperty('--gradient-x');\n });\n }\n\n setIsHovered(false);\n setIsActive(false);\n }, [hasHoverBgAnimation, hasHoverGlowAnimation, marketingType]);\n\n const handleMouseDown = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n }\n\n if (hasActiveBgAnimation) {\n if (scaleAnimationRef.current) {\n cancelAnimationFrame(scaleAnimationRef.current);\n }\n const currentWidth = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-width') || '100');\n const currentHeight = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-height') || (marketingType === 'gradient' ? '328' : '180'));\n animateGradientSize(e.currentTarget, scaleAnimationRef, currentWidth, 120, currentHeight, 394, 300);\n }\n\n setIsActive(true);\n }, [hasActiveBgAnimation, hasHoverGlowAnimation, marketingType]);\n\n const handleMouseUp = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const element = e.currentTarget;\n\n if (hasHoverGlowAnimation) {\n const x = lastMouseX.current;\n setGlow({\n opacity: calculateGlowOpacity(x),\n blur: calculateGlowBlur(x),\n });\n }\n\n if (hasActiveBgAnimation) {\n if (scaleAnimationRef.current) {\n cancelAnimationFrame(scaleAnimationRef.current);\n scaleAnimationRef.current = null;\n }\n const currentWidth = parseFloat(element.style.getPropertyValue('--gradient-width') || '120');\n const currentHeight = parseFloat(element.style.getPropertyValue('--gradient-height') || '394');\n const defaultWidth = isHovered && marketingType === 'gradient' ? 90 : 100;\n const defaultHeight = isHovered && marketingType === 'gradient' ? 300 : (marketingType === 'gradient' ? 328 : 180);\n animateGradientSize(element, scaleAnimationRef, currentWidth, defaultWidth, currentHeight, defaultHeight, 300, () => {\n element.style.removeProperty('--gradient-width');\n element.style.removeProperty('--gradient-height');\n });\n }\n\n setIsActive(false);\n }, [hasActiveBgAnimation, hasHoverGlowAnimation, isHovered, marketingType]);\n\n return {\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onMouseDown: handleMouseDown,\n onMouseUp: handleMouseUp,\n },\n glow,\n isHovered,\n isActive,\n hasHoverBgAnimation,\n hasHoverGlowAnimation,\n highlightX: lastMouseX.current,\n };\n};\n"],"names":["HOVER_BG_ANIMATION_TYPES","HOVER_GLOW_ANIMATION_TYPES","ACTIVE_BG_ANIMATION_TYPES","animateGradient","element","ref","fromX","toX","duration","onComplete","startTime","performance","animate","time","elapsed","progress","Math","newX","easeOut","requestAnimationFrame","animateGradientSize","fromWidth","toWidth","fromHeight","toHeight","newWidth","easeIn","newHeight","useMarketingAnimations","marketingType","isHovered","setIsHovered","useState","isActive","setIsActive","glow","setGlow","GLOW_BLUR_MIN","animationRef","useRef","scaleAnimationRef","lastMouseX","hasHoverBgAnimation","hasHoverGlowAnimation","hasActiveBgAnimation","handleMouseMove","useCallback","e","rect","x","currentGradientX","parseFloat","cancelAnimationFrame","calculateGlowOpacity","calculateGlowBlur","handleMouseEnter","mouseX","currentX","handleMouseLeave","handleMouseDown","currentWidth","currentHeight","handleMouseUp","defaultWidth","defaultHeight"],"mappings":"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"}
1
+ {"version":3,"file":"MarketingButton/useMarketingAnimations.js","sources":["../../src/MarketingButton/useMarketingAnimations.ts"],"sourcesContent":["import { useState, useRef, MouseEvent, useCallback } from 'react';\nimport type { Variant } from './types.js';\nimport {\n GLOW_BLUR_MIN,\n calculateGlowOpacity,\n calculateGlowBlur,\n easeOut,\n easeIn,\n} from './utils.js';\n\nconst HOVER_BG_ANIMATION_TYPES = new Set<Variant>(['gradient', 'primary', 'alternative', 'ondark', 'outline']);\nconst HOVER_GLOW_ANIMATION_TYPES = new Set<Variant>(['gradient', 'primary', 'secondary']);\nconst ACTIVE_BG_ANIMATION_TYPES = new Set<Variant>(['gradient', 'ondark']);\n\nconst animateGradient = (\n element: HTMLButtonElement | HTMLAnchorElement,\n ref: React.RefObject<number | null>,\n fromX: number,\n toX: number,\n duration: number,\n onComplete?: () => void,\n) => {\n const startTime = performance.now();\n\n const animate = (time: number) => {\n const elapsed = time - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const newX = fromX + (toX - fromX) * easeOut(progress);\n\n element.style.setProperty('--gradient-x', `${newX}%`);\n\n if (progress >= 1) {\n ref.current = null;\n onComplete?.();\n return;\n }\n\n ref.current = requestAnimationFrame(animate);\n };\n\n ref.current = requestAnimationFrame(animate);\n};\n\ntype AnimateGradientSizeOptions = {\n fromWidth: number;\n toWidth: number;\n fromHeight: number;\n toHeight: number;\n duration: number;\n onComplete?: () => void;\n};\n\nconst animateGradientSize = (\n element: HTMLButtonElement | HTMLAnchorElement,\n ref: React.RefObject<number | null>,\n {\n fromWidth,\n toWidth,\n fromHeight,\n toHeight,\n duration,\n onComplete,\n }: AnimateGradientSizeOptions,\n) => {\n const startTime = performance.now();\n\n const animate = (time: number) => {\n const elapsed = time - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const newWidth = fromWidth + (toWidth - fromWidth) * easeIn(progress);\n const newHeight = fromHeight + (toHeight - fromHeight) * easeIn(progress);\n\n element.style.setProperty('--gradient-width', `${newWidth}%`);\n element.style.setProperty('--gradient-height', `${newHeight}%`);\n\n if (progress >= 1) {\n ref.current = null;\n onComplete?.();\n return;\n }\n\n ref.current = requestAnimationFrame(animate);\n };\n\n ref.current = requestAnimationFrame(animate);\n};\n\nexport const useMarketingAnimations = (marketingType?: Variant) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const [glow, setGlow] = useState({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n\n const animationRef = useRef<number | null>(null);\n const scaleAnimationRef = useRef<number | null>(null);\n const lastMouseX = useRef<number>(0);\n\n const hasHoverBgAnimation =\n marketingType != null && HOVER_BG_ANIMATION_TYPES.has(marketingType);\n const hasHoverGlowAnimation =\n marketingType != null && HOVER_GLOW_ANIMATION_TYPES.has(marketingType);\n const hasActiveBgAnimation =\n marketingType != null && ACTIVE_BG_ANIMATION_TYPES.has(marketingType);\n\n const handleMouseMove = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const x = ((e.clientX - rect.left) / rect.width) * 100;\n\n lastMouseX.current = x;\n\n if (hasHoverBgAnimation && isHovered) {\n if (marketingType === 'gradient' && animationRef.current) {\n const currentGradientX = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-x') || '100');\n if (currentGradientX <= x) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n } else {\n e.currentTarget.style.setProperty('--gradient-x', `${x}%`);\n }\n }\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: calculateGlowOpacity(x),\n blur: calculateGlowBlur(x),\n });\n }\n }, [hasHoverBgAnimation, hasHoverGlowAnimation, isHovered, marketingType]);\n\n const handleMouseEnter = useCallback((e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const mouseX = ((e.clientX - rect.left) / rect.width) * 100;\n\n if (marketingType === 'gradient') {\n const currentX = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-x') || '100');\n\n if (Math.abs(currentX - mouseX) > 1) {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n animateGradient(e.currentTarget, animationRef, currentX, mouseX, 300, () => {\n animationRef.current = null;\n });\n }\n }\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: calculateGlowOpacity(mouseX),\n blur: calculateGlowBlur(mouseX),\n });\n }\n\n setIsHovered(true);\n }, [hasHoverGlowAnimation, marketingType]);\n\n const handleMouseLeave = useCallback((e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const element = e.currentTarget;\n\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n }\n\n if (animationRef.current && hasHoverBgAnimation) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n\n if (marketingType === 'gradient') {\n const currentX = parseFloat(element.style.getPropertyValue('--gradient-x') || '100');\n animateGradient(element, animationRef, currentX, 100, 300, () => {\n element.style.removeProperty('--gradient-x');\n });\n }\n\n setIsHovered(false);\n setIsActive(false);\n }, [hasHoverBgAnimation, hasHoverGlowAnimation, marketingType]);\n\n const handleMouseDown = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n if (hasHoverGlowAnimation) {\n setGlow({\n opacity: { left: 0, right: 0 },\n blur: GLOW_BLUR_MIN,\n });\n }\n\n if (hasActiveBgAnimation) {\n if (scaleAnimationRef.current) {\n cancelAnimationFrame(scaleAnimationRef.current);\n }\n const currentWidth = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-width') || '100');\n const currentHeight = parseFloat(e.currentTarget.style.getPropertyValue('--gradient-height') || (marketingType === 'gradient' ? '328' : '180'));\n animateGradientSize(e.currentTarget, scaleAnimationRef, {\n fromWidth: currentWidth,\n toWidth: 120,\n fromHeight: currentHeight,\n toHeight: 394,\n duration: 300,\n });\n }\n\n setIsActive(true);\n }, [hasActiveBgAnimation, hasHoverGlowAnimation, marketingType]);\n\n const handleMouseUp = useCallback((e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const element = e.currentTarget;\n\n if (hasHoverGlowAnimation) {\n const x = lastMouseX.current;\n setGlow({\n opacity: calculateGlowOpacity(x),\n blur: calculateGlowBlur(x),\n });\n }\n\n if (hasActiveBgAnimation) {\n if (scaleAnimationRef.current) {\n cancelAnimationFrame(scaleAnimationRef.current);\n scaleAnimationRef.current = null;\n }\n const currentWidth = parseFloat(element.style.getPropertyValue('--gradient-width') || '120');\n const currentHeight = parseFloat(element.style.getPropertyValue('--gradient-height') || '394');\n const defaultWidth = isHovered && marketingType === 'gradient' ? 90 : 100;\n const defaultHeight = isHovered && marketingType === 'gradient' ? 300 : (marketingType === 'gradient' ? 328 : 180);\n animateGradientSize(element, scaleAnimationRef, {\n fromWidth: currentWidth,\n toWidth: defaultWidth,\n fromHeight: currentHeight,\n toHeight: defaultHeight,\n duration: 300,\n onComplete: () => {\n element.style.removeProperty('--gradient-width');\n element.style.removeProperty('--gradient-height');\n },\n });\n }\n\n setIsActive(false);\n }, [hasActiveBgAnimation, hasHoverGlowAnimation, isHovered, marketingType]);\n\n return {\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onMouseDown: handleMouseDown,\n onMouseUp: handleMouseUp,\n },\n glow,\n isHovered,\n isActive,\n hasHoverBgAnimation,\n hasHoverGlowAnimation,\n highlightX: lastMouseX.current,\n };\n};\n"],"names":["HOVER_BG_ANIMATION_TYPES","Set","HOVER_GLOW_ANIMATION_TYPES","ACTIVE_BG_ANIMATION_TYPES","animateGradient","element","ref","fromX","toX","duration","onComplete","startTime","performance","animate","time","elapsed","progress","Math","newX","easeOut","requestAnimationFrame","animateGradientSize","fromWidth","toWidth","fromHeight","toHeight","newWidth","easeIn","newHeight","useMarketingAnimations","marketingType","isHovered","setIsHovered","useState","isActive","setIsActive","glow","setGlow","GLOW_BLUR_MIN","animationRef","useRef","scaleAnimationRef","lastMouseX","hasHoverBgAnimation","hasHoverGlowAnimation","hasActiveBgAnimation","handleMouseMove","useCallback","e","rect","x","currentGradientX","parseFloat","cancelAnimationFrame","calculateGlowOpacity","calculateGlowBlur","handleMouseEnter","mouseX","currentX","handleMouseLeave","handleMouseDown","currentWidth","currentHeight","handleMouseUp","defaultWidth","defaultHeight"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  declare class ModalManager {
2
- private modals;
2
+ private readonly modals;
3
3
  add(modal: HTMLElement): number;
4
4
  remove(modal: HTMLElement): number;
5
5
  isTop(modal: HTMLElement): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ModalManager.d.ts","sourceRoot":"","sources":["../../src/Modal/ModalManager.ts"],"names":[],"mappings":"AAAA,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAqB;IAEnC,GAAG,CAAC,KAAK,EAAE,WAAW;IAStB,MAAM,CAAC,KAAK,EAAE,WAAW;IAWzB,KAAK,CAAC,KAAK,EAAE,WAAW;CAGzB;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ModalManager.d.ts","sourceRoot":"","sources":["../../src/Modal/ModalManager.ts"],"names":[],"mappings":"AAAA,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,GAAG,CAAC,KAAK,EAAE,WAAW;IAStB,MAAM,CAAC,KAAK,EAAE,WAAW;IAWzB,KAAK,CAAC,KAAK,EAAE,WAAW;CAGzB;AAED,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal/ModalManager.js","sources":["../../src/Modal/ModalManager.ts"],"sourcesContent":["class ModalManager {\n private modals: HTMLElement[] = [];\n\n add(modal: HTMLElement) {\n const modalIndex = this.modals.indexOf(modal);\n if (modalIndex !== -1) {\n return modalIndex;\n }\n\n return this.modals.push(modal) - 1;\n }\n\n remove(modal: HTMLElement) {\n const modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex === -1) {\n return modalIndex;\n }\n\n this.modals.splice(modalIndex, 1);\n return modalIndex;\n }\n\n isTop(modal: HTMLElement) {\n return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n }\n}\n\nexport default ModalManager;\n"],"names":["ModalManager","modal","modalIndex"],"mappings":"AAAA,MAAMA;IAGJ,IAAIC,KAAkB,EAAE;QACtB,MAAMC,aAAa,IAAI,CAAC,MAAM,CAAC,OAAO,CAACD;QACvC,IAAIC,AAAe,OAAfA,YACF,OAAOA;QAGT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAACD,SAAS;IACnC;IAEA,OAAOA,KAAkB,EAAE;QACzB,MAAMC,aAAa,IAAI,CAAC,MAAM,CAAC,OAAO,CAACD;QAEvC,IAAIC,AAAe,OAAfA,YACF,OAAOA;QAGT,IAAI,CAAC,MAAM,CAAC,MAAM,CAACA,YAAY;QAC/B,OAAOA;IACT;IAEA,MAAMD,KAAkB,EAAE;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,KAAKA;IAC3E;;aAxBQ,MAAM,GAAkB,EAAE;;AAyBpC;AAEA,2BAAeD"}
1
+ {"version":3,"file":"Modal/ModalManager.js","sources":["../../src/Modal/ModalManager.ts"],"sourcesContent":["class ModalManager {\n private readonly modals: HTMLElement[] = [];\n\n add(modal: HTMLElement) {\n const modalIndex = this.modals.indexOf(modal);\n if (modalIndex !== -1) {\n return modalIndex;\n }\n\n return this.modals.push(modal) - 1;\n }\n\n remove(modal: HTMLElement) {\n const modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex === -1) {\n return modalIndex;\n }\n\n this.modals.splice(modalIndex, 1);\n return modalIndex;\n }\n\n isTop(modal: HTMLElement) {\n return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n }\n}\n\nexport default ModalManager;\n"],"names":["ModalManager","modal","modalIndex"],"mappings":"AAAA,MAAMA;IAGJ,IAAIC,KAAkB,EAAE;QACtB,MAAMC,aAAa,IAAI,CAAC,MAAM,CAAC,OAAO,CAACD;QACvC,IAAIC,AAAe,OAAfA,YACF,OAAOA;QAGT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAACD,SAAS;IACnC;IAEA,OAAOA,KAAkB,EAAE;QACzB,MAAMC,aAAa,IAAI,CAAC,MAAM,CAAC,OAAO,CAACD;QAEvC,IAAIC,AAAe,OAAfA,YACF,OAAOA;QAGT,IAAI,CAAC,MAAM,CAAC,MAAM,CAACA,YAAY;QAC/B,OAAOA;IACT;IAEA,MAAMD,KAAkB,EAAE;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,KAAKA;IAC3E;;aAxBiB,MAAM,GAAkB,EAAE;;AAyB7C;AAEA,2BAAeD"}
@@ -6,7 +6,7 @@ function getContainer(container) {
6
6
  const Portal = ({ container, onRendered, show, children })=>{
7
7
  const [mountNode, setMountNode] = useState(null);
8
8
  useEffect(()=>{
9
- onRendered && onRendered(mountNode);
9
+ null == onRendered || onRendered(mountNode);
10
10
  }, [
11
11
  mountNode,
12
12
  onRendered
@@ -1 +1 @@
1
- {"version":3,"file":"Modal/Portal.js","sources":["../../src/Modal/Portal.tsx"],"sourcesContent":["import { ReactNode, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction getContainer(container: Element | (() => Element) | null | undefined): Element | null {\n return typeof container === 'function' ? container() : container || null;\n}\n\ninterface Props {\n /**\n * The children to render into the `container`.\n */\n children: ReactNode;\n /**\n * A node, component instance, or function that returns either.\n * The `container` will have the portal children appended to it.\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container?: Element | (() => Element);\n /**\n * Callback fired once the children has been mounted into the `container`.\n */\n onRendered?(mountNode: Element | null): void;\n show: boolean;\n}\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\nconst Portal = ({ container, onRendered, show, children }: Props) => {\n const [mountNode, setMountNode] = useState<Element | null>(null);\n\n useEffect(() => {\n onRendered && onRendered(mountNode);\n }, [mountNode, onRendered]);\n\n useEffect(() => {\n setMountNode(getContainer(container) || document.body);\n }, [container]);\n\n return mountNode && show ? createPortal(children, mountNode) : null;\n};\n\nexport default Portal;\n"],"names":["getContainer","container","Portal","onRendered","show","children","mountNode","setMountNode","useState","useEffect","document","createPortal"],"mappings":";;AAGA,SAASA,aAAaC,SAAuD;IAC3E,OAAO,AAAqB,cAArB,OAAOA,YAA2BA,cAAcA,aAAa;AACtE;AAyBA,MAAMC,SAAS,CAAC,EAAED,SAAS,EAAEE,UAAU,EAAEC,IAAI,EAAEC,QAAQ,EAAS;IAC9D,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAyB;IAE3DC,UAAU;QACRN,cAAcA,WAAWG;IAC3B,GAAG;QAACA;QAAWH;KAAW;IAE1BM,UAAU;QACRF,aAAaP,aAAaC,cAAcS,SAAS,IAAI;IACvD,GAAG;QAACT;KAAU;IAEd,OAAOK,aAAaF,OAAO,WAAPA,GAAOO,aAAaN,UAAUC,aAAa;AACjE;AAEA,qBAAeJ"}
1
+ {"version":3,"file":"Modal/Portal.js","sources":["../../src/Modal/Portal.tsx"],"sourcesContent":["import { ReactNode, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction getContainer(container: Element | (() => Element) | null | undefined): Element | null {\n return typeof container === 'function' ? container() : container || null;\n}\n\ninterface Props {\n /**\n * The children to render into the `container`.\n */\n children: ReactNode;\n /**\n * A node, component instance, or function that returns either.\n * The `container` will have the portal children appended to it.\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container?: Element | (() => Element);\n /**\n * Callback fired once the children has been mounted into the `container`.\n */\n onRendered?(mountNode: Element | null): void;\n show: boolean;\n}\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\nconst Portal = ({ container, onRendered, show, children }: Props) => {\n const [mountNode, setMountNode] = useState<Element | null>(null);\n\n useEffect(() => {\n onRendered?.(mountNode);\n }, [mountNode, onRendered]);\n\n useEffect(() => {\n setMountNode(getContainer(container) || document.body);\n }, [container]);\n\n return mountNode && show ? createPortal(children, mountNode) : null;\n};\n\nexport default Portal;\n"],"names":["getContainer","container","Portal","onRendered","show","children","mountNode","setMountNode","useState","useEffect","document","createPortal"],"mappings":";;AAGA,SAASA,aAAaC,SAAuD;IAC3E,OAAO,AAAqB,cAArB,OAAOA,YAA2BA,cAAcA,aAAa;AACtE;AAyBA,MAAMC,SAAS,CAAC,EAAED,SAAS,EAAEE,UAAU,EAAEC,IAAI,EAAEC,QAAQ,EAAS;IAC9D,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAyB;IAE3DC,UAAU;QACRN,QAAAA,cAAAA,WAAaG;IACf,GAAG;QAACA;QAAWH;KAAW;IAE1BM,UAAU;QACRF,aAAaP,aAAaC,cAAcS,SAAS,IAAI;IACvD,GAAG;QAACT;KAAU;IAEd,OAAOK,aAAaF,OAAO,WAAPA,GAAOO,aAAaN,UAAUC,aAAa;AACjE;AAEA,qBAAeJ"}
@@ -1,6 +1,4 @@
1
- import ModalsProvider, { ModalsProviderProps } from './ModalsProvider.js';
2
- export { ModalsProvider, type ModalsProviderProps };
1
+ export { default, ModalsProvider, type ModalsProviderProps } from './ModalsProvider.js';
3
2
  export { default as useModalState } from './useModalState.js';
4
3
  export * from './types.js';
5
- export default ModalsProvider;
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ModalsProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,EAAE,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,YAAY,CAAC;AAE3B,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ModalsProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,cAAc,YAAY,CAAC"}
@@ -1,8 +1,3 @@
1
- import ModalsProvider from "./ModalsProvider.js";
2
1
  export * from "./types.js";
3
- const src_ModalsProvider = ModalsProvider;
2
+ export { ModalsProvider, default } from "./ModalsProvider.js";
4
3
  export { default as useModalState } from "./useModalState.js";
5
- export default src_ModalsProvider;
6
- export { ModalsProvider };
7
-
8
- //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectField.d.ts","sourceRoot":"","sources":["../../src/MultiSelectField/MultiSelectField.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAAE,SAAS,EAAE,YAAY,EACjD,WAAW,EAIZ,MAAM,OAAO,CAAC;AAOf,OAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAEnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAEL,aAAa,EAad,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1B,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACtG,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,gCAAgC;IAChC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gCAAgC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAChF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;iEAC6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;mFAC+E;IAC/E,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6EAA6E;IAC7E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;;AA+nBD,wBAAsC"}
1
+ {"version":3,"file":"MultiSelectField.d.ts","sourceRoot":"","sources":["../../src/MultiSelectField/MultiSelectField.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAAE,SAAS,EAAE,YAAY,EACjD,WAAW,EAIZ,MAAM,OAAO,CAAC;AAOf,OAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAEnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAEL,aAAa,EAad,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAG1B,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACtG,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,gCAAgC;IAChC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gCAAgC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAChF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;iEAC6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;mFAC+E;IAC/E,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6EAA6E;IAC7E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;;AA2nBD,wBAAsC"}
@@ -263,12 +263,7 @@ const MultiSelectField = /*#__PURE__*/ forwardRef((_0, _1)=>{
263
263
  pointerEvents: 'none'
264
264
  }
265
265
  });
266
- const selectedItems = [];
267
- const isChildSelected = childProps.selected;
268
- if (isChildSelected) {
269
- selectedItems.push(childProps);
270
- checkedExist = true;
271
- }
266
+ if (childProps.selected) checkedExist = true;
272
267
  if (open && isFocused) focusedItemValueRef.current = childValue;
273
268
  if (!childProps.disabled) itemIndex += 1;
274
269
  return {
@@ -341,7 +336,7 @@ const MultiSelectField = /*#__PURE__*/ forwardRef((_0, _1)=>{
341
336
  const moreTag = createStyledTag(`${moreText} ${selectedItems.length}`);
342
337
  tempContainer.appendChild(moreTag);
343
338
  const moreTagWidth = moreTag.offsetWidth + 8;
344
- tempContainer.removeChild(moreTag);
339
+ moreTag.remove();
345
340
  let totalWidth = 0;
346
341
  let visibleCount = 0;
347
342
  for(let i = 0; i < selectedItems.length; i++){
@@ -359,7 +354,7 @@ const MultiSelectField = /*#__PURE__*/ forwardRef((_0, _1)=>{
359
354
  const newVisibleCount = selectedItems.length > 0 ? Math.max(1, visibleCount) : null;
360
355
  setVisibleTagsCount(newVisibleCount);
361
356
  } finally{
362
- document.body.removeChild(tempContainer);
357
+ tempContainer.remove();
363
358
  }
364
359
  }, [
365
360
  items,
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectField/MultiSelectField.js","sources":["../../src/MultiSelectField/MultiSelectField.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef, ReactNode, ReactElement,\n ChangeEvent, MouseEvent, KeyboardEvent,\n useCallback, useEffect, useMemo, useRef, useState, Children, isValidElement, memo,\n Fragment, RefObject,\n forwardRef,\n} from 'react';\nimport classnames from 'clsx';\nimport DismissGhostMid from '@finam/web-ui-kit-icons/Dismiss/DismissGhostMid';\nimport DismissIcon from '@finam/web-ui-kit-icons/Dismiss/DismissCircleSmallColored';\nimport { tag as tagClassNames } from '@finam/web-ui-kit-core/styles/tag';\nimport FieldHint from '../FieldHint/index.js';\nimport { useModalState } from '../ModalsProvider/index.js';\nimport DropDownMenu, { DropDownMenuProps } from '../DropDownMenu/index.js';\nimport type { Origin } from '../Popover/index.js';\nimport { Placement, InputVariant, InputSize, KeyboardEventKey } from '../types.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport type { TypographyProps } from '../Typography/index.js';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport { setRef, useForkRef } from '../utils/withForwardedRef.js';\nimport { useIsomorphicEffect } from '../utils/useIsomorphicEffect.js';\nimport {\n Root,\n PrimarySelect,\n OutlineSelect,\n TextSelect,\n IconUp,\n IconDown,\n Icon,\n LockIcon, HiddenInput,\n DisplayValue,\n Adornment,\n SecondaryLabel,\n Border,\n Container,\n IconLeft,\n} from '../Select/SelectField.styles.js';\nimport { styles } from './MultiSelectField.styles.js';\nimport { getMenuSize, getDisplayValueVariant, getSecondaryLabelVariant } from '../Select/utils.js';\nimport { CheckboxFieldProps } from '../CheckboxField/index.js';\nimport Tag from '../Tag/Tag.js';\nimport MenuItem from '../MenuItem/index.js';\nimport LoaderDots from '../LoaderDots/LoaderDots.js';\n\ntype Locale = 'ru' | 'en';\n\nexport interface Props extends Omit<ComponentPropsWithoutRef<typeof PrimarySelect>, 'type' | 'onChange'> {\n /** from HTMLInputElement */\n name?: string;\n /** Локаль */\n locale: Locale;\n /** Состояние значения выпадающего списка */\n value?: string | string[];\n /** Отображаемое значение выпадающего списка */\n displayValue?: ReactNode;\n /** from HTMLInputElement */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Текст сообщения подсказки */\n message?: ReactNode;\n /** Текст побочного label выпадающего списка */\n secondaryLabel?: string;\n /** Текст метки-заполнителя */\n placeholder?: string;\n /** Иконка, размещающаяся в блоке отображаемого значения */\n icon?: ReactNode;\n /** Иконка, размещающаяся слева от блока отображаемого значения */\n iconLeft?: ReactNode;\n /** Вариант отображения выпадающего списка */\n variant?: InputVariant;\n /** Флаг неактивного состояния выпадающего списка */\n disabled?: boolean;\n /** Флаг доступности выпадающего списка только для чтения */\n readOnly?: boolean;\n /** Растяжение компонента по ширине контейнера */\n fullWidth?: boolean;\n /** Размер выпадающего списка */\n size?: InputSize;\n /** Сообщение об ошибке */\n errorText?: string;\n /** Отображение иконки, если есть ошибка */\n errorIcon?: boolean;\n /** Пункты выпадающего меню */\n children: ReactElement<CheckboxFieldProps> | ReactElement<CheckboxFieldProps>[];\n /** Скрывать блок подсказки, если `message` отсутствует */\n hideEmptyHint?: boolean;\n /** Флаг отображения подсказки в виде всплывающего окна */\n hintTooltip?: boolean;\n /** Расположение всплывающего окна подсказки */\n hintTooltipPlacement?: Placement;\n /** Максимальная ширина всплывающего окна подсказки */\n hintTooltipMaxWidth?: number;\n /** Флаг, отключающий расширение блока выпадающего списка,\n * если содержимое пунктов меню не вмещается в данный блок */\n disableMenuGrow?: boolean;\n /** Флаг, отключающий раскрытие выпадающего списка в случае,\n * если значение не задано и количество пунктов меню меньше или равно одному */\n disableOneItemDropDown?: boolean;\n /** Флаг, отключающий закрытие выпадающего списка после выбора пункта меню */\n disableCloseOnItemClick?: boolean;\n /** Дополнительные свойства для компонента обертки выпадающего списка */\n MenuProps?: Partial<DropDownMenuProps>;\n /** Дополнительные свойства для побочного label выпадающего списка */\n SecondaryLabelProps?: Partial<TypographyProps>;\n /** Флаг, показывающий LoaderDots в выпадающем списке */\n loading?: boolean;\n}\n\nconst selectVariant = (variant?: InputVariant) => {\n switch (variant) {\n case 'primary': {\n return PrimarySelect;\n }\n case 'outline': {\n return OutlineSelect;\n }\n case 'ghost': {\n return TextSelect;\n }\n default:\n return PrimarySelect;\n }\n};\n\nconst moreTextTranslations: Record<Locale, string> = {\n ru: 'Еще',\n en: 'More',\n};\n\nconst anchorOrigin: Origin = { vertical: 'bottom', horizontal: 'left' };\nconst transformOrigin: Origin = { vertical: -8, horizontal: 'left' };\n\nconst defaultMenuProps: Props['MenuProps'] = {};\nconst defaultSecondaryLabelProps: Props['SecondaryLabelProps'] = {};\n\nconst MultiSelectField = forwardRef<HTMLButtonElement, Props>(({\n variant = 'primary',\n fullWidth = true,\n size = 'l',\n locale,\n name,\n value: valueProp,\n displayValue: displayValueProp,\n message,\n secondaryLabel,\n icon,\n iconLeft,\n errorText,\n errorIcon,\n disabled,\n readOnly,\n className,\n children,\n placeholder,\n onChange,\n onClick,\n onKeyDown,\n onMouseDown,\n hideEmptyHint,\n hintTooltip = size !== 'l',\n hintTooltipPlacement,\n hintTooltipMaxWidth,\n disableMenuGrow = false,\n disableOneItemDropDown,\n disableCloseOnItemClick = true,\n MenuProps = defaultMenuProps,\n SecondaryLabelProps = defaultSecondaryLabelProps,\n loading,\n ...buttonProps\n}, forwardedRef) => {\n const paperRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputRef = useRef<HTMLInputElement | null>(null);\n const itemsCountRef = useRef(Children.count(children));\n const focusedItemValueRef = useRef<string | number | undefined>(undefined);\n const tagsContainerRef = useRef<HTMLDivElement | null>(null);\n const selectRef = useRef<HTMLButtonElement | null>(null);\n const forkedRef = useForkRef(selectRef, forwardedRef);\n\n const { open: initialOpen } = useModalState(MenuProps.id);\n const [open, setOpen] = useState(initialOpen ?? false);\n const [menuMinWidth, setMenuMinWidth] = useState(0);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [visibleTagsCount, setVisibleTagsCount] = useState<number | null>(null);\n\n const [value, valueArray] = useMemo(() => {\n if (Array.isArray(valueProp)) {\n return [valueProp.join(','), valueProp];\n }\n\n return [valueProp, valueProp?.split(',')];\n }, [valueProp]);\n\n useEffect(() => {\n if (hiddenInputRef.current && hiddenInputRef.current.value !== value) {\n hiddenInputRef.current.value = value || '';\n }\n }, [value]);\n\n useEffect(() => {\n if (focusedIndex >= itemsCountRef.current) {\n setFocusedIndex(-1);\n }\n }, [focusedIndex, open]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setFocusedIndex(-1);\n }, []);\n\n const getResultValue = useCallback(\n (itemValue: string | number | undefined) => {\n if (itemValue === '') {\n return '';\n }\n\n let resultValue = itemValue;\n\n if (valueArray?.length && itemValue != null) {\n if (valueArray.includes(String(itemValue))) {\n const index = valueArray.indexOf(String(itemValue));\n\n if (index !== -1) {\n valueArray.splice(index, 1);\n resultValue = valueArray.join(',');\n }\n } else if (value) {\n resultValue = `${value},${itemValue}`;\n }\n }\n\n return resultValue;\n },\n [value, valueArray],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const target = event.target as HTMLElement;\n const isTag = target.closest('svg');\n\n if (isTag) {\n return;\n }\n\n setOpen(true);\n setMenuMinWidth(selectRef.current?.clientWidth || 0);\n onClick?.(event);\n },\n [onClick],\n );\n\n const handleItemClick = useCallback(\n (itemProps: MenuItemProps) => (event: MouseEvent<HTMLLIElement>) => {\n if (readOnly) {\n return;\n }\n\n if (!disableCloseOnItemClick) {\n handleClose();\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n itemProps.onClick?.(event);\n\n if (onChange && hiddenInputRef.current) {\n triggerChangeEvent(hiddenInputRef.current, getResultValue(itemProps.value));\n }\n },\n [disableCloseOnItemClick, onChange, handleClose, getResultValue, readOnly],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (event.defaultPrevented || !open) {\n return;\n }\n\n switch (event.key) {\n case KeyboardEventKey.ARROW_UP:\n case KeyboardEventKey.UP:\n event.preventDefault();\n setFocusedIndex(prevIndex => (prevIndex > 0 ? prevIndex - 1 : itemsCountRef.current - 1));\n break;\n case KeyboardEventKey.ARROW_DOWN:\n case KeyboardEventKey.DOWN:\n event.preventDefault();\n setFocusedIndex(prevIndex => (prevIndex < itemsCountRef.current - 1 ? prevIndex + 1 : 0));\n break;\n case KeyboardEventKey.ENTER:\n case KeyboardEventKey.SPACE:\n if (focusedItemValueRef.current != null) {\n event.preventDefault();\n\n if (onChange && hiddenInputRef.current) {\n triggerChangeEvent(\n hiddenInputRef.current,\n getResultValue(focusedItemValueRef.current),\n );\n }\n }\n break;\n case KeyboardEventKey.ESCAPE:\n case KeyboardEventKey.ESC:\n event.preventDefault();\n handleClose();\n break;\n case KeyboardEventKey.DELETE:\n case KeyboardEventKey.DEL:\n case KeyboardEventKey.BACKSPACE:\n break;\n }\n },\n [open, onChange, getResultValue, handleClose],\n );\n\n const handleSelectKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (readOnly) {\n return;\n }\n\n onKeyDown?.(event);\n handleKeyDown(event);\n },\n [readOnly, onKeyDown, handleKeyDown],\n );\n\n const handleDropDownKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (readOnly) {\n return;\n }\n\n MenuProps.onKeyDown?.(event);\n handleKeyDown(event);\n },\n [MenuProps, handleKeyDown, readOnly],\n );\n\n const handleTagIconClick = useCallback(\n (tagValue: string) => {\n if (readOnly) {\n return;\n }\n\n const resultValue = getResultValue(tagValue ?? '');\n\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, resultValue);\n }\n },\n [getResultValue, readOnly],\n );\n\n const handleClearAll = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, '');\n }\n },\n [],\n );\n\n const handlePaperRef = useCallback(\n (el: HTMLDivElement) => {\n setRef(paperRef, el);\n\n if (MenuProps.PaperProps?.ref) {\n setRef(MenuProps.PaperProps.ref, el);\n }\n },\n [MenuProps.PaperProps?.ref],\n );\n\n const { items, checkedExists } = useMemo(() => {\n focusedItemValueRef.current = undefined;\n let itemIndex = 0;\n let checkedExist = false;\n\n const resultItems = Children.map(children, (child) => {\n if (!isValidElement<MenuItemProps>(child)) {\n return null;\n }\n\n const val: string | number | undefined = child.props.value;\n\n const childValue = child.props.value;\n const selected = val != null\n ? (valueArray?.length ? valueArray.includes(String(val)) : false)\n : false;\n\n const isFocused = child.props.focused == null && !child.props.disabled\n ? focusedIndex === itemIndex\n : child.props.focused;\n\n const childProps = {\n ...child.props,\n label: child.props.label,\n disabled: child.props.disabled,\n size,\n selected,\n paperRef,\n checked: Boolean(selected),\n 'data-value': val,\n style: { pointerEvents: 'none' },\n };\n\n const selectedItems: typeof childProps[] = [];\n const isChildSelected = childProps.selected;\n\n if (isChildSelected) {\n selectedItems.push(childProps);\n checkedExist = true;\n }\n\n if (open && isFocused) {\n focusedItemValueRef.current = childValue;\n }\n\n if (!childProps.disabled) {\n itemIndex += 1;\n }\n\n return {\n type: child.type,\n props: {\n ...childProps,\n },\n focused: isFocused,\n onClick: childProps.disabled ? undefined : handleItemClick({\n value: childProps.value,\n onClick: child.props.onClick,\n }),\n };\n });\n\n itemsCountRef.current = itemIndex;\n\n return {\n items: resultItems,\n checkedExists: checkedExist,\n };\n }, [children, valueArray, size, handleItemClick, focusedIndex, open]);\n\n const handleClearHiddenTags = useCallback(() => {\n if (readOnly) {\n return;\n }\n const selectedItems = items.filter(item => item.props.selected);\n const visibleItems = selectedItems.slice(0, visibleTagsCount || 0);\n\n const newValue = visibleItems.map(item => item.props.value).join(',');\n\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, newValue);\n }\n }, [items, visibleTagsCount, readOnly]);\n\n const moreText = useMemo(() => {\n return moreTextTranslations[locale] ?? '';\n }, [locale]);\n\n const measureTagsWidth = useCallback(() => {\n if (!tagsContainerRef.current || !selectRef.current) {\n return;\n }\n\n const selectedItems = items.filter(item => item.props.selected);\n\n if (selectedItems.length === 0) {\n setVisibleTagsCount(null);\n\n return;\n }\n\n const containerWidth = tagsContainerRef.current.offsetWidth;\n const adornmentElement = selectRef.current.querySelector('[data-testid=\"multiselect-adornment\"]');\n const adornmentWidth = adornmentElement ? adornmentElement.getBoundingClientRect().width : 60;\n // Небольшой запас, чтобы теги не прилипали к иконкам\n const safetyMargin = 64;\n const availableWidth = containerWidth - adornmentWidth - safetyMargin;\n\n const createStyledTag = (text: string): HTMLSpanElement => {\n const tag = document.createElement('span');\n\n const classes = tagClassNames({ size, variant: 'fill', color: 'info', priority: 'low' }).split(' ');\n\n tag.classList.add(...classes);\n tag.textContent = text;\n\n return tag;\n };\n\n const tempContainer = document.createElement('div');\n tempContainer.style.position = 'absolute';\n tempContainer.style.visibility = 'hidden';\n tempContainer.style.whiteSpace = 'nowrap';\n document.body.appendChild(tempContainer);\n\n try {\n const moreTag = createStyledTag(`${moreText} ${selectedItems.length}`);\n tempContainer.appendChild(moreTag);\n const moreTagWidth = moreTag.offsetWidth + 8;\n tempContainer.removeChild(moreTag);\n\n let totalWidth = 0;\n let visibleCount = 0;\n\n for (let i = 0; i < selectedItems.length; i++) {\n const item = selectedItems[i];\n const tempTag = createStyledTag(String(item.props.label));\n tempContainer.appendChild(tempTag);\n\n const tagWidth = tempTag.offsetWidth + 8;\n\n const hasMoreItems = i < selectedItems.length - 1;\n const requiredWidth = totalWidth + tagWidth + (hasMoreItems ? moreTagWidth : 0);\n\n if (requiredWidth <= availableWidth) {\n totalWidth += tagWidth;\n visibleCount++;\n } else {\n break;\n }\n }\n\n const newVisibleCount = selectedItems.length > 0 ? Math.max(1, visibleCount) : null;\n setVisibleTagsCount(newVisibleCount);\n } finally {\n document.body.removeChild(tempContainer);\n }\n }, [items, moreText, size]);\n\n useIsomorphicEffect(() => {\n if (checkedExists) {\n measureTagsWidth();\n }\n }, [checkedExists, measureTagsWidth]);\n\n useIsomorphicEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n if (checkedExists) {\n measureTagsWidth();\n }\n });\n\n if (tagsContainerRef.current) {\n resizeObserver.observe(tagsContainerRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [checkedExists, measureTagsWidth]);\n\n const PaperProps = useMemo(\n () => ({\n ...MenuProps.PaperProps,\n ref: handlePaperRef,\n style: {\n minWidth: disableMenuGrow ? undefined : menuMinWidth,\n width: disableMenuGrow ? menuMinWidth : undefined,\n ...(MenuProps.PaperProps?.style || null),\n },\n }),\n [MenuProps.PaperProps, handlePaperRef, menuMinWidth, disableMenuGrow],\n );\n\n const SelectElement = selectVariant(variant);\n const withLabel = Boolean(\n placeholder && size !== 's' && size !== 'xs',\n );\n const dropDownHidden = disableOneItemDropDown && items.length <= 1;\n\n const rootClassName = classnames(className, size, {\n error: Boolean(errorText),\n disabled,\n opened: open,\n selected: Array.isArray(valueProp) && !!value,\n fullWidth,\n disableTextOverflow: true,\n });\n\n const DisplayValueWrapper = iconLeft && withLabel ? Container : Fragment;\n\n const displayValue = useMemo(() => {\n if (!checkedExists) {\n return placeholder;\n }\n\n const selectedItems = items.filter(item => item.props.selected);\n const visibleItems = selectedItems.slice(0, visibleTagsCount || selectedItems.length);\n const hiddenItems = selectedItems.slice(visibleTagsCount || selectedItems.length);\n\n const tags = visibleItems.map(item => (\n <Tag\n key={item.props.value}\n size={size}\n priority=\"low\"\n variant=\"fill\"\n color=\"info\"\n icon={<DismissGhostMid />}\n className={styles.tag}\n iconPlacement=\"right\"\n onIconClick={readOnly ? undefined : () => handleTagIconClick(String(item.props.value))}\n >\n {item.props.label}\n </Tag>\n ));\n\n if (hiddenItems.length > 0 && visibleTagsCount && visibleTagsCount < selectedItems.length) {\n tags.push(\n <Tag\n key=\"more-tag\"\n size={size}\n priority=\"low\"\n variant=\"fill\"\n color=\"info\"\n icon={<DismissGhostMid />}\n className={styles.tag}\n iconPlacement=\"right\"\n onIconClick={readOnly ? undefined : handleClearHiddenTags}\n >\n {`${moreText} ${hiddenItems.length}`}\n </Tag>,\n );\n }\n\n return tags;\n }, [checkedExists, placeholder, items, size, handleTagIconClick, visibleTagsCount, handleClearHiddenTags, readOnly, moreText]);\n\n return (\n <Root className={rootClassName}>\n <FieldHint\n variant={hintTooltip ? 'tooltip' : 'static'}\n size={size}\n message={!open || !hintTooltip ? errorText || message : undefined}\n disabled={disabled}\n error={Boolean(errorText)}\n errorIcon={errorIcon}\n hideEmpty={hideEmptyHint}\n tooltipPlacement={hintTooltipPlacement}\n tooltipMaxWidth={hintTooltipMaxWidth}\n >\n <SelectElement\n type=\"button\"\n {...buttonProps}\n ref={forkedRef}\n disabled={disabled}\n className={classnames({ dropDownHidden, readOnly })}\n onClick={disabled || readOnly || dropDownHidden ? undefined : handleClick}\n onKeyDown={handleSelectKeyDown}\n >\n {iconLeft && (\n <IconLeft className=\"ui-select-field_icon-left\">{iconLeft}</IconLeft>\n )}\n <DisplayValueWrapper>\n <DisplayValue\n ref={tagsContainerRef}\n className=\"ui-select-field__value\"\n variant={getDisplayValueVariant(size)}\n color={disabled ? 'disabled' : undefined}\n >\n {displayValue}\n </DisplayValue>\n </DisplayValueWrapper>\n <Adornment className=\"ui-select-field__adornment\" data-testid=\"multiselect-adornment\">\n {(secondaryLabel || icon) && (\n <>\n {secondaryLabel && (\n <SecondaryLabel color=\"custom\" variant={getSecondaryLabelVariant(size)} {...SecondaryLabelProps}>\n {secondaryLabel}\n </SecondaryLabel>\n )}\n {icon && <Icon className=\"ui-select-field__icon\">{icon}</Icon>}\n </>\n )}\n {checkedExists && !readOnly\n ? (\n <Icon\n className=\"ui-select-field__icon\"\n onClick={handleClearAll}\n >\n <DismissIcon />\n </Icon>\n )\n : null}\n {readOnly ? (\n <LockIcon />\n ) : open ? (\n <IconUp />\n ) : (\n <IconDown />\n )}\n </Adornment>\n <Border className=\"ui-select__border\" />\n </SelectElement>\n </FieldHint>\n <DropDownMenu\n anchorEl={selectRef.current || undefined}\n open={open}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n onClose={handleClose}\n size={getMenuSize(size)}\n {...MenuProps}\n onKeyDown={handleDropDownKeyDown}\n PaperProps={PaperProps}\n >\n {loading\n ? <LoaderDots className={styles.loaderDots} size={size} />\n : (\n items.map(item => (\n <MenuItem\n key={item.props.value}\n onClick={item.onClick}\n focused={item.focused}\n disabled={item.props.disabled}\n paperRef={paperRef.current ? paperRef as RefObject<HTMLElement> : undefined}\n value={item.props.value}\n >\n <item.type\n key={item.props.value}\n {...item.props}\n />\n </MenuItem>\n ))\n )}\n </DropDownMenu>\n <HiddenInput\n type=\"text\"\n name={name}\n // We don't want use autoComplete in hidden input\n // Use set manually\n autoComplete=\"off\"\n onChange={onChange}\n ref={hiddenInputRef}\n />\n </Root>\n );\n});\n\nexport default memo(MultiSelectField);\n"],"names":["selectVariant","variant","PrimarySelect","OutlineSelect","TextSelect","moreTextTranslations","anchorOrigin","transformOrigin","defaultMenuProps","defaultSecondaryLabelProps","MultiSelectField","forwardRef","fullWidth","size","locale","name","valueProp","displayValueProp","message","secondaryLabel","icon","iconLeft","errorText","errorIcon","disabled","readOnly","className","children","placeholder","onChange","onClick","onKeyDown","onMouseDown","hideEmptyHint","hintTooltip","hintTooltipPlacement","hintTooltipMaxWidth","disableMenuGrow","disableOneItemDropDown","disableCloseOnItemClick","MenuProps","SecondaryLabelProps","loading","buttonProps","forwardedRef","_MenuProps_PaperProps","paperRef","useRef","hiddenInputRef","itemsCountRef","Children","focusedItemValueRef","undefined","tagsContainerRef","selectRef","forkedRef","useForkRef","initialOpen","useModalState","open","setOpen","useState","menuMinWidth","setMenuMinWidth","focusedIndex","setFocusedIndex","visibleTagsCount","setVisibleTagsCount","value","valueArray","useMemo","Array","useEffect","handleClose","useCallback","getResultValue","itemValue","resultValue","String","index","handleClick","event","_selectRef_current","target","isTag","handleItemClick","itemProps","triggerChangeEvent","handleKeyDown","KeyboardEventKey","prevIndex","handleSelectKeyDown","handleDropDownKeyDown","handleTagIconClick","tagValue","handleClearAll","e","handlePaperRef","el","setRef","items","checkedExists","itemIndex","checkedExist","resultItems","child","isValidElement","val","childValue","selected","isFocused","childProps","Boolean","selectedItems","isChildSelected","handleClearHiddenTags","item","visibleItems","newValue","moreText","_moreTextTranslations_locale","measureTagsWidth","containerWidth","adornmentElement","adornmentWidth","safetyMargin","availableWidth","createStyledTag","text","tag","document","classes","tagClassNames","tempContainer","moreTag","moreTagWidth","totalWidth","visibleCount","i","tempTag","tagWidth","hasMoreItems","requiredWidth","newVisibleCount","Math","useIsomorphicEffect","resizeObserver","ResizeObserver","PaperProps","SelectElement","withLabel","dropDownHidden","rootClassName","classnames","DisplayValueWrapper","Container","Fragment","displayValue","hiddenItems","tags","Tag","DismissGhostMid","styles","Root","FieldHint","IconLeft","DisplayValue","getDisplayValueVariant","Adornment","SecondaryLabel","getSecondaryLabelVariant","Icon","DismissIcon","LockIcon","IconUp","IconDown","Border","DropDownMenu","getMenuSize","LoaderDots","MenuItem","HiddenInput","memo"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectField/MultiSelectField.js","sources":["../../src/MultiSelectField/MultiSelectField.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef, ReactNode, ReactElement,\n ChangeEvent, MouseEvent, KeyboardEvent,\n useCallback, useEffect, useMemo, useRef, useState, Children, isValidElement, memo,\n Fragment, RefObject,\n forwardRef,\n} from 'react';\nimport classnames from 'clsx';\nimport DismissGhostMid from '@finam/web-ui-kit-icons/Dismiss/DismissGhostMid';\nimport DismissIcon from '@finam/web-ui-kit-icons/Dismiss/DismissCircleSmallColored';\nimport { tag as tagClassNames } from '@finam/web-ui-kit-core/styles/tag';\nimport FieldHint from '../FieldHint/index.js';\nimport { useModalState } from '../ModalsProvider/index.js';\nimport DropDownMenu, { DropDownMenuProps } from '../DropDownMenu/index.js';\nimport type { Origin } from '../Popover/index.js';\nimport { Placement, InputVariant, InputSize, KeyboardEventKey } from '../types.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport type { TypographyProps } from '../Typography/index.js';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport { setRef, useForkRef } from '../utils/withForwardedRef.js';\nimport { useIsomorphicEffect } from '../utils/useIsomorphicEffect.js';\nimport {\n Root,\n PrimarySelect,\n OutlineSelect,\n TextSelect,\n IconUp,\n IconDown,\n Icon,\n LockIcon, HiddenInput,\n DisplayValue,\n Adornment,\n SecondaryLabel,\n Border,\n Container,\n IconLeft,\n} from '../Select/SelectField.styles.js';\nimport { styles } from './MultiSelectField.styles.js';\nimport { getMenuSize, getDisplayValueVariant, getSecondaryLabelVariant } from '../Select/utils.js';\nimport { CheckboxFieldProps } from '../CheckboxField/index.js';\nimport Tag from '../Tag/Tag.js';\nimport MenuItem from '../MenuItem/index.js';\nimport LoaderDots from '../LoaderDots/LoaderDots.js';\n\ntype Locale = 'ru' | 'en';\ntype FocusedItemValue = string | number | undefined;\n\nexport interface Props extends Omit<ComponentPropsWithoutRef<typeof PrimarySelect>, 'type' | 'onChange'> {\n /** from HTMLInputElement */\n name?: string;\n /** Локаль */\n locale: Locale;\n /** Состояние значения выпадающего списка */\n value?: string | string[];\n /** Отображаемое значение выпадающего списка */\n displayValue?: ReactNode;\n /** from HTMLInputElement */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Текст сообщения подсказки */\n message?: ReactNode;\n /** Текст побочного label выпадающего списка */\n secondaryLabel?: string;\n /** Текст метки-заполнителя */\n placeholder?: string;\n /** Иконка, размещающаяся в блоке отображаемого значения */\n icon?: ReactNode;\n /** Иконка, размещающаяся слева от блока отображаемого значения */\n iconLeft?: ReactNode;\n /** Вариант отображения выпадающего списка */\n variant?: InputVariant;\n /** Флаг неактивного состояния выпадающего списка */\n disabled?: boolean;\n /** Флаг доступности выпадающего списка только для чтения */\n readOnly?: boolean;\n /** Растяжение компонента по ширине контейнера */\n fullWidth?: boolean;\n /** Размер выпадающего списка */\n size?: InputSize;\n /** Сообщение об ошибке */\n errorText?: string;\n /** Отображение иконки, если есть ошибка */\n errorIcon?: boolean;\n /** Пункты выпадающего меню */\n children: ReactElement<CheckboxFieldProps> | ReactElement<CheckboxFieldProps>[];\n /** Скрывать блок подсказки, если `message` отсутствует */\n hideEmptyHint?: boolean;\n /** Флаг отображения подсказки в виде всплывающего окна */\n hintTooltip?: boolean;\n /** Расположение всплывающего окна подсказки */\n hintTooltipPlacement?: Placement;\n /** Максимальная ширина всплывающего окна подсказки */\n hintTooltipMaxWidth?: number;\n /** Флаг, отключающий расширение блока выпадающего списка,\n * если содержимое пунктов меню не вмещается в данный блок */\n disableMenuGrow?: boolean;\n /** Флаг, отключающий раскрытие выпадающего списка в случае,\n * если значение не задано и количество пунктов меню меньше или равно одному */\n disableOneItemDropDown?: boolean;\n /** Флаг, отключающий закрытие выпадающего списка после выбора пункта меню */\n disableCloseOnItemClick?: boolean;\n /** Дополнительные свойства для компонента обертки выпадающего списка */\n MenuProps?: Partial<DropDownMenuProps>;\n /** Дополнительные свойства для побочного label выпадающего списка */\n SecondaryLabelProps?: Partial<TypographyProps>;\n /** Флаг, показывающий LoaderDots в выпадающем списке */\n loading?: boolean;\n}\n\nconst selectVariant = (variant?: InputVariant) => {\n switch (variant) {\n case 'primary': {\n return PrimarySelect;\n }\n case 'outline': {\n return OutlineSelect;\n }\n case 'ghost': {\n return TextSelect;\n }\n default:\n return PrimarySelect;\n }\n};\n\nconst moreTextTranslations: Record<Locale, string> = {\n ru: 'Еще',\n en: 'More',\n};\n\nconst anchorOrigin: Origin = { vertical: 'bottom', horizontal: 'left' };\nconst transformOrigin: Origin = { vertical: -8, horizontal: 'left' };\n\nconst defaultMenuProps: Props['MenuProps'] = {};\nconst defaultSecondaryLabelProps: Props['SecondaryLabelProps'] = {};\n\nconst MultiSelectField = forwardRef<HTMLButtonElement, Props>(({\n variant = 'primary',\n fullWidth = true,\n size = 'l',\n locale,\n name,\n value: valueProp,\n displayValue: displayValueProp,\n message,\n secondaryLabel,\n icon,\n iconLeft,\n errorText,\n errorIcon,\n disabled,\n readOnly,\n className,\n children,\n placeholder,\n onChange,\n onClick,\n onKeyDown,\n onMouseDown,\n hideEmptyHint,\n hintTooltip = size !== 'l',\n hintTooltipPlacement,\n hintTooltipMaxWidth,\n disableMenuGrow = false,\n disableOneItemDropDown,\n disableCloseOnItemClick = true,\n MenuProps = defaultMenuProps,\n SecondaryLabelProps = defaultSecondaryLabelProps,\n loading,\n ...buttonProps\n}, forwardedRef) => {\n const paperRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputRef = useRef<HTMLInputElement | null>(null);\n const itemsCountRef = useRef(Children.count(children));\n const focusedItemValueRef = useRef<FocusedItemValue>(undefined);\n const tagsContainerRef = useRef<HTMLDivElement | null>(null);\n const selectRef = useRef<HTMLButtonElement | null>(null);\n const forkedRef = useForkRef(selectRef, forwardedRef);\n\n const { open: initialOpen } = useModalState(MenuProps.id);\n const [open, setOpen] = useState(initialOpen ?? false);\n const [menuMinWidth, setMenuMinWidth] = useState(0);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [visibleTagsCount, setVisibleTagsCount] = useState<number | null>(null);\n\n const [value, valueArray] = useMemo(() => {\n if (Array.isArray(valueProp)) {\n return [valueProp.join(','), valueProp];\n }\n\n return [valueProp, valueProp?.split(',')];\n }, [valueProp]);\n\n useEffect(() => {\n if (hiddenInputRef.current && hiddenInputRef.current.value !== value) {\n hiddenInputRef.current.value = value || '';\n }\n }, [value]);\n\n useEffect(() => {\n if (focusedIndex >= itemsCountRef.current) {\n setFocusedIndex(-1);\n }\n }, [focusedIndex, open]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setFocusedIndex(-1);\n }, []);\n\n const getResultValue = useCallback(\n (itemValue: string | number | undefined) => {\n if (itemValue === '') {\n return '';\n }\n\n let resultValue = itemValue;\n\n if (valueArray?.length && itemValue != null) {\n if (valueArray.includes(String(itemValue))) {\n const index = valueArray.indexOf(String(itemValue));\n\n if (index !== -1) {\n valueArray.splice(index, 1);\n resultValue = valueArray.join(',');\n }\n } else if (value) {\n resultValue = `${value},${itemValue}`;\n }\n }\n\n return resultValue;\n },\n [value, valueArray],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n const target = event.target as HTMLElement;\n const isTag = target.closest('svg');\n\n if (isTag) {\n return;\n }\n\n setOpen(true);\n setMenuMinWidth(selectRef.current?.clientWidth || 0);\n onClick?.(event);\n },\n [onClick],\n );\n\n const handleItemClick = useCallback(\n (itemProps: MenuItemProps) => (event: MouseEvent<HTMLLIElement>) => {\n if (readOnly) {\n return;\n }\n\n if (!disableCloseOnItemClick) {\n handleClose();\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n itemProps.onClick?.(event);\n\n if (onChange && hiddenInputRef.current) {\n triggerChangeEvent(hiddenInputRef.current, getResultValue(itemProps.value));\n }\n },\n [disableCloseOnItemClick, onChange, handleClose, getResultValue, readOnly],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (event.defaultPrevented || !open) {\n return;\n }\n\n switch (event.key) {\n case KeyboardEventKey.ARROW_UP:\n case KeyboardEventKey.UP:\n event.preventDefault();\n setFocusedIndex(prevIndex => (prevIndex > 0 ? prevIndex - 1 : itemsCountRef.current - 1));\n break;\n case KeyboardEventKey.ARROW_DOWN:\n case KeyboardEventKey.DOWN:\n event.preventDefault();\n setFocusedIndex(prevIndex => (prevIndex < itemsCountRef.current - 1 ? prevIndex + 1 : 0));\n break;\n case KeyboardEventKey.ENTER:\n case KeyboardEventKey.SPACE:\n if (focusedItemValueRef.current != null) {\n event.preventDefault();\n\n if (onChange && hiddenInputRef.current) {\n triggerChangeEvent(\n hiddenInputRef.current,\n getResultValue(focusedItemValueRef.current),\n );\n }\n }\n break;\n case KeyboardEventKey.ESCAPE:\n case KeyboardEventKey.ESC:\n event.preventDefault();\n handleClose();\n break;\n case KeyboardEventKey.DELETE:\n case KeyboardEventKey.DEL:\n case KeyboardEventKey.BACKSPACE:\n break;\n }\n },\n [open, onChange, getResultValue, handleClose],\n );\n\n const handleSelectKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (readOnly) {\n return;\n }\n\n onKeyDown?.(event);\n handleKeyDown(event);\n },\n [readOnly, onKeyDown, handleKeyDown],\n );\n\n const handleDropDownKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (readOnly) {\n return;\n }\n\n MenuProps.onKeyDown?.(event);\n handleKeyDown(event);\n },\n [MenuProps, handleKeyDown, readOnly],\n );\n\n const handleTagIconClick = useCallback(\n (tagValue: string) => {\n if (readOnly) {\n return;\n }\n\n const resultValue = getResultValue(tagValue ?? '');\n\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, resultValue);\n }\n },\n [getResultValue, readOnly],\n );\n\n const handleClearAll = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, '');\n }\n },\n [],\n );\n\n const handlePaperRef = useCallback(\n (el: HTMLDivElement) => {\n setRef(paperRef, el);\n\n if (MenuProps.PaperProps?.ref) {\n setRef(MenuProps.PaperProps.ref, el);\n }\n },\n [MenuProps.PaperProps?.ref],\n );\n\n const { items, checkedExists } = useMemo(() => {\n focusedItemValueRef.current = undefined;\n let itemIndex = 0;\n let checkedExist = false;\n\n const resultItems = Children.map(children, (child) => {\n if (!isValidElement<MenuItemProps>(child)) {\n return null;\n }\n\n const val: string | number | undefined = child.props.value;\n\n const childValue = child.props.value;\n const selected = val != null\n ? (valueArray?.length ? valueArray.includes(String(val)) : false)\n : false;\n\n const isFocused = child.props.focused == null && !child.props.disabled\n ? focusedIndex === itemIndex\n : child.props.focused;\n\n const childProps = {\n ...child.props,\n label: child.props.label,\n disabled: child.props.disabled,\n size,\n selected,\n paperRef,\n checked: Boolean(selected),\n 'data-value': val,\n style: { pointerEvents: 'none' },\n };\n\n if (childProps.selected) {\n checkedExist = true;\n }\n\n if (open && isFocused) {\n focusedItemValueRef.current = childValue;\n }\n\n if (!childProps.disabled) {\n itemIndex += 1;\n }\n\n return {\n type: child.type,\n props: {\n ...childProps,\n },\n focused: isFocused,\n onClick: childProps.disabled ? undefined : handleItemClick({\n value: childProps.value,\n onClick: child.props.onClick,\n }),\n };\n });\n\n itemsCountRef.current = itemIndex;\n\n return {\n items: resultItems,\n checkedExists: checkedExist,\n };\n }, [children, valueArray, size, handleItemClick, focusedIndex, open]);\n\n const handleClearHiddenTags = useCallback(() => {\n if (readOnly) {\n return;\n }\n const selectedItems = items.filter(item => item.props.selected);\n const visibleItems = selectedItems.slice(0, visibleTagsCount || 0);\n\n const newValue = visibleItems.map(item => item.props.value).join(',');\n\n if (hiddenInputRef.current != null) {\n triggerChangeEvent(hiddenInputRef.current, newValue);\n }\n }, [items, visibleTagsCount, readOnly]);\n\n const moreText = useMemo(() => {\n return moreTextTranslations[locale] ?? '';\n }, [locale]);\n\n const measureTagsWidth = useCallback(() => {\n if (!tagsContainerRef.current || !selectRef.current) {\n return;\n }\n\n const selectedItems = items.filter(item => item.props.selected);\n\n if (selectedItems.length === 0) {\n setVisibleTagsCount(null);\n\n return;\n }\n\n const containerWidth = tagsContainerRef.current.offsetWidth;\n const adornmentElement = selectRef.current.querySelector('[data-testid=\"multiselect-adornment\"]');\n const adornmentWidth = adornmentElement ? adornmentElement.getBoundingClientRect().width : 60;\n // Небольшой запас, чтобы теги не прилипали к иконкам\n const safetyMargin = 64;\n const availableWidth = containerWidth - adornmentWidth - safetyMargin;\n\n const createStyledTag = (text: string): HTMLSpanElement => {\n const tag = document.createElement('span');\n\n const classes = tagClassNames({ size, variant: 'fill', color: 'info', priority: 'low' }).split(' ');\n\n tag.classList.add(...classes);\n tag.textContent = text;\n\n return tag;\n };\n\n const tempContainer = document.createElement('div');\n tempContainer.style.position = 'absolute';\n tempContainer.style.visibility = 'hidden';\n tempContainer.style.whiteSpace = 'nowrap';\n document.body.appendChild(tempContainer);\n\n try {\n const moreTag = createStyledTag(`${moreText} ${selectedItems.length}`);\n tempContainer.appendChild(moreTag);\n const moreTagWidth = moreTag.offsetWidth + 8;\n moreTag.remove();\n\n let totalWidth = 0;\n let visibleCount = 0;\n\n for (let i = 0; i < selectedItems.length; i++) {\n const item = selectedItems[i];\n const tempTag = createStyledTag(String(item.props.label));\n tempContainer.appendChild(tempTag);\n\n const tagWidth = tempTag.offsetWidth + 8;\n\n const hasMoreItems = i < selectedItems.length - 1;\n const requiredWidth = totalWidth + tagWidth + (hasMoreItems ? moreTagWidth : 0);\n\n if (requiredWidth <= availableWidth) {\n totalWidth += tagWidth;\n visibleCount++;\n } else {\n break;\n }\n }\n\n const newVisibleCount = selectedItems.length > 0 ? Math.max(1, visibleCount) : null;\n setVisibleTagsCount(newVisibleCount);\n } finally {\n tempContainer.remove();\n }\n }, [items, moreText, size]);\n\n useIsomorphicEffect(() => {\n if (checkedExists) {\n measureTagsWidth();\n }\n }, [checkedExists, measureTagsWidth]);\n\n useIsomorphicEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n if (checkedExists) {\n measureTagsWidth();\n }\n });\n\n if (tagsContainerRef.current) {\n resizeObserver.observe(tagsContainerRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [checkedExists, measureTagsWidth]);\n\n const PaperProps = useMemo(\n () => ({\n ...MenuProps.PaperProps,\n ref: handlePaperRef,\n style: {\n minWidth: disableMenuGrow ? undefined : menuMinWidth,\n width: disableMenuGrow ? menuMinWidth : undefined,\n ...(MenuProps.PaperProps?.style || null),\n },\n }),\n [MenuProps.PaperProps, handlePaperRef, menuMinWidth, disableMenuGrow],\n );\n\n const SelectElement = selectVariant(variant);\n const withLabel = Boolean(\n placeholder && size !== 's' && size !== 'xs',\n );\n const dropDownHidden = disableOneItemDropDown && items.length <= 1;\n\n const rootClassName = classnames(className, size, {\n error: Boolean(errorText),\n disabled,\n opened: open,\n selected: Array.isArray(valueProp) && !!value,\n fullWidth,\n disableTextOverflow: true,\n });\n\n const DisplayValueWrapper = iconLeft && withLabel ? Container : Fragment;\n\n const displayValue = useMemo(() => {\n if (!checkedExists) {\n return placeholder;\n }\n\n const selectedItems = items.filter(item => item.props.selected);\n const visibleItems = selectedItems.slice(0, visibleTagsCount || selectedItems.length);\n const hiddenItems = selectedItems.slice(visibleTagsCount || selectedItems.length);\n\n const tags = visibleItems.map(item => (\n <Tag\n key={item.props.value}\n size={size}\n priority=\"low\"\n variant=\"fill\"\n color=\"info\"\n icon={<DismissGhostMid />}\n className={styles.tag}\n iconPlacement=\"right\"\n onIconClick={readOnly ? undefined : () => handleTagIconClick(String(item.props.value))}\n >\n {item.props.label}\n </Tag>\n ));\n\n if (hiddenItems.length > 0 && visibleTagsCount && visibleTagsCount < selectedItems.length) {\n tags.push(\n <Tag\n key=\"more-tag\"\n size={size}\n priority=\"low\"\n variant=\"fill\"\n color=\"info\"\n icon={<DismissGhostMid />}\n className={styles.tag}\n iconPlacement=\"right\"\n onIconClick={readOnly ? undefined : handleClearHiddenTags}\n >\n {`${moreText} ${hiddenItems.length}`}\n </Tag>,\n );\n }\n\n return tags;\n }, [checkedExists, placeholder, items, size, handleTagIconClick, visibleTagsCount, handleClearHiddenTags, readOnly, moreText]);\n\n return (\n <Root className={rootClassName}>\n <FieldHint\n variant={hintTooltip ? 'tooltip' : 'static'}\n size={size}\n message={!open || !hintTooltip ? errorText || message : undefined}\n disabled={disabled}\n error={Boolean(errorText)}\n errorIcon={errorIcon}\n hideEmpty={hideEmptyHint}\n tooltipPlacement={hintTooltipPlacement}\n tooltipMaxWidth={hintTooltipMaxWidth}\n >\n <SelectElement\n type=\"button\"\n {...buttonProps}\n ref={forkedRef}\n disabled={disabled}\n className={classnames({ dropDownHidden, readOnly })}\n onClick={disabled || readOnly || dropDownHidden ? undefined : handleClick}\n onKeyDown={handleSelectKeyDown}\n >\n {iconLeft && (\n <IconLeft className=\"ui-select-field_icon-left\">{iconLeft}</IconLeft>\n )}\n <DisplayValueWrapper>\n <DisplayValue\n ref={tagsContainerRef}\n className=\"ui-select-field__value\"\n variant={getDisplayValueVariant(size)}\n color={disabled ? 'disabled' : undefined}\n >\n {displayValue}\n </DisplayValue>\n </DisplayValueWrapper>\n <Adornment className=\"ui-select-field__adornment\" data-testid=\"multiselect-adornment\">\n {(secondaryLabel || icon) && (\n <>\n {secondaryLabel && (\n <SecondaryLabel color=\"custom\" variant={getSecondaryLabelVariant(size)} {...SecondaryLabelProps}>\n {secondaryLabel}\n </SecondaryLabel>\n )}\n {icon && <Icon className=\"ui-select-field__icon\">{icon}</Icon>}\n </>\n )}\n {checkedExists && !readOnly\n ? (\n <Icon\n className=\"ui-select-field__icon\"\n onClick={handleClearAll}\n >\n <DismissIcon />\n </Icon>\n )\n : null}\n {readOnly ? (\n <LockIcon />\n ) : open ? (\n <IconUp />\n ) : (\n <IconDown />\n )}\n </Adornment>\n <Border className=\"ui-select__border\" />\n </SelectElement>\n </FieldHint>\n <DropDownMenu\n anchorEl={selectRef.current || undefined}\n open={open}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n onClose={handleClose}\n size={getMenuSize(size)}\n {...MenuProps}\n onKeyDown={handleDropDownKeyDown}\n PaperProps={PaperProps}\n >\n {loading\n ? <LoaderDots className={styles.loaderDots} size={size} />\n : (\n items.map(item => (\n <MenuItem\n key={item.props.value}\n onClick={item.onClick}\n focused={item.focused}\n disabled={item.props.disabled}\n paperRef={paperRef.current ? paperRef as RefObject<HTMLElement> : undefined}\n value={item.props.value}\n >\n <item.type\n key={item.props.value}\n {...item.props}\n />\n </MenuItem>\n ))\n )}\n </DropDownMenu>\n <HiddenInput\n type=\"text\"\n name={name}\n // We don't want use autoComplete in hidden input\n // Use set manually\n autoComplete=\"off\"\n onChange={onChange}\n ref={hiddenInputRef}\n />\n </Root>\n );\n});\n\nexport default memo(MultiSelectField);\n"],"names":["selectVariant","variant","PrimarySelect","OutlineSelect","TextSelect","moreTextTranslations","anchorOrigin","transformOrigin","defaultMenuProps","defaultSecondaryLabelProps","MultiSelectField","forwardRef","fullWidth","size","locale","name","valueProp","displayValueProp","message","secondaryLabel","icon","iconLeft","errorText","errorIcon","disabled","readOnly","className","children","placeholder","onChange","onClick","onKeyDown","onMouseDown","hideEmptyHint","hintTooltip","hintTooltipPlacement","hintTooltipMaxWidth","disableMenuGrow","disableOneItemDropDown","disableCloseOnItemClick","MenuProps","SecondaryLabelProps","loading","buttonProps","forwardedRef","_MenuProps_PaperProps","paperRef","useRef","hiddenInputRef","itemsCountRef","Children","focusedItemValueRef","undefined","tagsContainerRef","selectRef","forkedRef","useForkRef","initialOpen","useModalState","open","setOpen","useState","menuMinWidth","setMenuMinWidth","focusedIndex","setFocusedIndex","visibleTagsCount","setVisibleTagsCount","value","valueArray","useMemo","Array","useEffect","handleClose","useCallback","getResultValue","itemValue","resultValue","String","index","handleClick","event","_selectRef_current","target","isTag","handleItemClick","itemProps","triggerChangeEvent","handleKeyDown","KeyboardEventKey","prevIndex","handleSelectKeyDown","handleDropDownKeyDown","handleTagIconClick","tagValue","handleClearAll","e","handlePaperRef","el","setRef","items","checkedExists","itemIndex","checkedExist","resultItems","child","isValidElement","val","childValue","selected","isFocused","childProps","Boolean","handleClearHiddenTags","selectedItems","item","visibleItems","newValue","moreText","_moreTextTranslations_locale","measureTagsWidth","containerWidth","adornmentElement","adornmentWidth","safetyMargin","availableWidth","createStyledTag","text","tag","document","classes","tagClassNames","tempContainer","moreTag","moreTagWidth","totalWidth","visibleCount","i","tempTag","tagWidth","hasMoreItems","requiredWidth","newVisibleCount","Math","useIsomorphicEffect","resizeObserver","ResizeObserver","PaperProps","SelectElement","withLabel","dropDownHidden","rootClassName","classnames","DisplayValueWrapper","Container","Fragment","displayValue","hiddenItems","tags","Tag","DismissGhostMid","styles","Root","FieldHint","IconLeft","DisplayValue","getDisplayValueVariant","Adornment","SecondaryLabel","getSecondaryLabelVariant","Icon","DismissIcon","LockIcon","IconUp","IconDown","Border","DropDownMenu","getMenuSize","LoaderDots","MenuItem","HiddenInput","memo"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- import MultiSelectField, { Props } from './MultiSelectField.js';
2
- export type { Props as MultiSelectFieldProps };
3
- export default MultiSelectField;
1
+ export { default, type Props as MultiSelectFieldProps } from './MultiSelectField.js';
4
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MultiSelectField/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEhE,YAAY,EAAE,KAAK,IAAI,qBAAqB,EAAE,CAAC;AAC/C,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MultiSelectField/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,5 +1 @@
1
- import MultiSelectField from "./MultiSelectField.js";
2
- const src_MultiSelectField = MultiSelectField;
3
- export default src_MultiSelectField;
4
-
5
- //# sourceMappingURL=index.js.map
1
+ export { default } from "./MultiSelectField.js";
@@ -79,13 +79,13 @@ const NumberTextField = /*#__PURE__*/ forwardRef((_0, _1)=>{
79
79
  ]);
80
80
  const filterMaxValue = useCallback((value)=>{
81
81
  const max = getMax(value);
82
- return max < value ? max : value;
82
+ return Math.min(value, max);
83
83
  }, [
84
84
  getMax
85
85
  ]);
86
86
  const filterMinValue = useCallback((value)=>{
87
87
  const min = getMin(value);
88
- return min > value ? min : value;
88
+ return Math.max(value, min);
89
89
  }, [
90
90
  getMin
91
91
  ]);
@@ -105,8 +105,8 @@ const NumberTextField = /*#__PURE__*/ forwardRef((_0, _1)=>{
105
105
  const [integerPart, ...fractionParts] = formattedValue.split('.');
106
106
  const dcpl = getDcpl(parsedValue);
107
107
  const maxIntLength = getIntLength(parsedValue < 0 || formattedValue.startsWith('-') ? min : getMax(parsedValue), integerPart.length);
108
- if ((null == fractionParts ? void 0 : fractionParts.length) && (fractionParts.length > 1 || fractionParts[0].length > dcpl)) formattedValue = `${integerPart.substr(0, maxIntLength)}.${fractionParts.join('').substr(0, dcpl)}`;
109
- else if (integerPart) formattedValue = formattedValue.replace(integerPart, integerPart.substr(0, maxIntLength));
108
+ if ((null == fractionParts ? void 0 : fractionParts.length) && (fractionParts.length > 1 || fractionParts[0].length > dcpl)) formattedValue = `${integerPart.slice(0, maxIntLength)}.${fractionParts.join('').slice(0, dcpl)}`;
109
+ else if (integerPart) formattedValue = formattedValue.replace(integerPart, integerPart.slice(0, maxIntLength));
110
110
  return formattedValue;
111
111
  }, [
112
112
  getMin,