@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.
- package/CHANGELOG.md +10 -0
- package/dist/Avatar/index.d.ts +1 -3
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -5
- package/dist/Avatar/utils.d.ts.map +1 -1
- package/dist/Avatar/utils.js.map +1 -1
- package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.d.ts +2 -1
- package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/Breadcrumbs/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.d.ts.map +1 -1
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.js +7 -8
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.js.map +1 -1
- package/dist/Calendar/Calendar.js +8 -1
- package/dist/Calendar/Calendar.js.map +1 -1
- package/dist/Calendar/Calendar.styles.css +1 -1
- package/dist/Calendar/Calendar.styles.d.ts +1 -1
- package/dist/Calendar/Calendar.styles.d.ts.map +1 -1
- package/dist/Calendar/Calendar.styles.js +1 -1
- package/dist/Calendar/Calendar.styles.js.map +1 -1
- package/dist/Calendar/Day/Day.d.ts +3 -2
- package/dist/Calendar/Day/Day.d.ts.map +1 -1
- package/dist/Calendar/Day/Day.js +5 -2
- package/dist/Calendar/Day/Day.js.map +1 -1
- package/dist/Calendar/Day/Day.styles.css +2 -2
- package/dist/Calendar/Day/Day.styles.d.ts.map +1 -1
- package/dist/Calendar/Day/Day.styles.js.map +1 -1
- package/dist/Calendar/Day/index.d.ts +1 -3
- package/dist/Calendar/Day/index.d.ts.map +1 -1
- package/dist/Calendar/Day/index.js +1 -5
- package/dist/Calendar/DayWrapper.d.ts +1 -1
- package/dist/Calendar/DayWrapper.d.ts.map +1 -1
- package/dist/Calendar/DayWrapper.js +15 -7
- package/dist/Calendar/DayWrapper.js.map +1 -1
- package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.css +1 -1
- package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.d.ts +1 -1
- package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.d.ts.map +1 -1
- package/dist/Calendar/SelectMonthTable/SelectMonthTable.styles.js.map +1 -1
- package/dist/Calendar/SelectYearTable/SelectYearTable.styles.css +1 -1
- package/dist/Calendar/SelectYearTable/SelectYearTable.styles.d.ts +1 -1
- package/dist/Calendar/SelectYearTable/SelectYearTable.styles.d.ts.map +1 -1
- package/dist/Calendar/SelectYearTable/SelectYearTable.styles.js.map +1 -1
- package/dist/Calendar/SlideTransition/index.d.ts +1 -3
- package/dist/Calendar/SlideTransition/index.d.ts.map +1 -1
- package/dist/Calendar/SlideTransition/index.js +1 -5
- package/dist/Calendar/utils.js +9 -9
- package/dist/Calendar/utils.js.map +1 -1
- package/dist/CheckboxField/index.d.ts +1 -3
- package/dist/CheckboxField/index.d.ts.map +1 -1
- package/dist/CheckboxField/index.js +1 -5
- package/dist/CheckboxField/types.d.ts +2 -2
- package/dist/CheckboxField/types.d.ts.map +1 -1
- package/dist/Chip/index.d.ts +1 -3
- package/dist/Chip/index.d.ts.map +1 -1
- package/dist/Chip/index.js +1 -5
- package/dist/ClickAwayListener/ClickAwayListener.d.ts.map +1 -1
- package/dist/ClickAwayListener/ClickAwayListener.js +3 -1
- package/dist/ClickAwayListener/ClickAwayListener.js.map +1 -1
- package/dist/ClickAwayListener/index.d.ts +1 -3
- package/dist/ClickAwayListener/index.d.ts.map +1 -1
- package/dist/ClickAwayListener/index.js +1 -5
- package/dist/Counter/index.d.ts +1 -3
- package/dist/Counter/index.d.ts.map +1 -1
- package/dist/Counter/index.js +1 -5
- package/dist/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker/DatePicker.js +1 -1
- package/dist/DatePicker/DatePicker.js.map +1 -1
- package/dist/DateTimePeriod/index.d.ts +2 -5
- package/dist/DateTimePeriod/index.d.ts.map +1 -1
- package/dist/DateTimePeriod/index.js +1 -5
- package/dist/DateTimePicker/index.d.ts +1 -3
- package/dist/DateTimePicker/index.d.ts.map +1 -1
- package/dist/DateTimePicker/index.js +1 -5
- package/dist/Dialog/Dialog.js +1 -1
- package/dist/Dialog/Dialog.js.map +1 -1
- package/dist/DialogActions/index.d.ts +1 -3
- package/dist/DialogActions/index.d.ts.map +1 -1
- package/dist/DialogActions/index.js +1 -5
- package/dist/DialogContent/index.d.ts +1 -3
- package/dist/DialogContent/index.d.ts.map +1 -1
- package/dist/DialogContent/index.js +1 -5
- package/dist/DialogTitle/index.d.ts +1 -3
- package/dist/DialogTitle/index.d.ts.map +1 -1
- package/dist/DialogTitle/index.js +1 -5
- package/dist/Divider/index.d.ts +1 -3
- package/dist/Divider/index.d.ts.map +1 -1
- package/dist/Divider/index.js +1 -5
- package/dist/DraggablePopover/DraggablePopover.d.ts.map +1 -1
- package/dist/DraggablePopover/DraggablePopover.js +2 -2
- package/dist/DraggablePopover/DraggablePopover.js.map +1 -1
- package/dist/DraggablePopover/layersManager.d.ts +1 -1
- package/dist/DraggablePopover/layersManager.d.ts.map +1 -1
- package/dist/DraggablePopover/layersManager.js.map +1 -1
- package/dist/DropDownMenu/index.d.ts +1 -3
- package/dist/DropDownMenu/index.d.ts.map +1 -1
- package/dist/DropDownMenu/index.js +1 -5
- package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts +1 -3
- package/dist/FeatureCallout/FeatureCalloutActions/index.d.ts.map +1 -1
- package/dist/FeatureCallout/FeatureCalloutActions/index.js +1 -5
- package/dist/FeatureCallout/FeatureCalloutText/index.d.ts +1 -3
- package/dist/FeatureCallout/FeatureCalloutText/index.d.ts.map +1 -1
- package/dist/FeatureCallout/FeatureCalloutText/index.js +1 -5
- package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts +1 -3
- package/dist/FeatureCallout/FeatureCalloutTitle/index.d.ts.map +1 -1
- package/dist/FeatureCallout/FeatureCalloutTitle/index.js +1 -5
- package/dist/FeatureCallout/index.d.ts +4 -7
- package/dist/FeatureCallout/index.d.ts.map +1 -1
- package/dist/FeatureCallout/index.js +1 -5
- package/dist/FeatureCallout/utils.d.ts.map +1 -1
- package/dist/FeatureCallout/utils.js +1 -37
- package/dist/FeatureCallout/utils.js.map +1 -1
- package/dist/FieldHint/index.d.ts +1 -3
- package/dist/FieldHint/index.d.ts.map +1 -1
- package/dist/FieldHint/index.js +1 -5
- package/dist/FilterButton/FilterButton.js +1 -1
- package/dist/FilterButton/FilterButton.js.map +1 -1
- package/dist/FormGroup/index.d.ts +1 -3
- package/dist/FormGroup/index.d.ts.map +1 -1
- package/dist/FormGroup/index.js +1 -5
- package/dist/Loader/index.d.ts +1 -3
- package/dist/Loader/index.d.ts.map +1 -1
- package/dist/Loader/index.js +1 -5
- package/dist/LoaderBackdrop/index.d.ts +1 -3
- package/dist/LoaderBackdrop/index.d.ts.map +1 -1
- package/dist/LoaderBackdrop/index.js +1 -5
- package/dist/LoaderDots/index.d.ts +1 -3
- package/dist/LoaderDots/index.d.ts.map +1 -1
- package/dist/LoaderDots/index.js +1 -5
- package/dist/MarketingButton/useMarketingAnimations.d.ts +2 -2
- package/dist/MarketingButton/useMarketingAnimations.d.ts.map +1 -1
- package/dist/MarketingButton/useMarketingAnimations.js +27 -14
- package/dist/MarketingButton/useMarketingAnimations.js.map +1 -1
- package/dist/Modal/ModalManager.d.ts +1 -1
- package/dist/Modal/ModalManager.d.ts.map +1 -1
- package/dist/Modal/ModalManager.js.map +1 -1
- package/dist/Modal/Portal.js +1 -1
- package/dist/Modal/Portal.js.map +1 -1
- package/dist/ModalsProvider/index.d.ts +1 -3
- package/dist/ModalsProvider/index.d.ts.map +1 -1
- package/dist/ModalsProvider/index.js +1 -6
- package/dist/MultiSelectField/MultiSelectField.d.ts.map +1 -1
- package/dist/MultiSelectField/MultiSelectField.js +3 -8
- package/dist/MultiSelectField/MultiSelectField.js.map +1 -1
- package/dist/MultiSelectField/index.d.ts +1 -3
- package/dist/MultiSelectField/index.d.ts.map +1 -1
- package/dist/MultiSelectField/index.js +1 -5
- package/dist/NumberTextField/NumberTextField.js +4 -4
- package/dist/NumberTextField/NumberTextField.js.map +1 -1
- package/dist/NumberTextField/index.d.ts +1 -3
- package/dist/NumberTextField/index.d.ts.map +1 -1
- package/dist/NumberTextField/index.js +1 -5
- package/dist/NumberTextField/utils.d.ts.map +1 -1
- package/dist/NumberTextField/utils.js +1 -1
- package/dist/NumberTextField/utils.js.map +1 -1
- package/dist/PaginatorNumber/NavButton/index.d.ts +1 -3
- package/dist/PaginatorNumber/NavButton/index.d.ts.map +1 -1
- package/dist/PaginatorNumber/NavButton/index.js +1 -5
- package/dist/PaginatorNumber/PageButton/index.d.ts +1 -3
- package/dist/PaginatorNumber/PageButton/index.d.ts.map +1 -1
- package/dist/PaginatorNumber/PageButton/index.js +1 -5
- package/dist/PaginatorNumber/index.d.ts +1 -3
- package/dist/PaginatorNumber/index.d.ts.map +1 -1
- package/dist/PaginatorNumber/index.js +1 -5
- package/dist/PaginatorOverflow/NavButton/index.d.ts +1 -3
- package/dist/PaginatorOverflow/NavButton/index.d.ts.map +1 -1
- package/dist/PaginatorOverflow/NavButton/index.js +1 -5
- package/dist/PaginatorOverflow/PaginatorOverflow.js +2 -2
- package/dist/PaginatorOverflow/PaginatorOverflow.js.map +1 -1
- package/dist/PaginatorOverflow/index.d.ts +1 -3
- package/dist/PaginatorOverflow/index.d.ts.map +1 -1
- package/dist/PaginatorOverflow/index.js +1 -5
- package/dist/Paper/types.d.ts +6 -1
- package/dist/Paper/types.d.ts.map +1 -1
- package/dist/Paper/utils.d.ts +2 -2
- package/dist/PickersUtilsProvider/defaultDateFormatUtils.js +1 -1
- package/dist/PickersUtilsProvider/defaultDateFormatUtils.js.map +1 -1
- package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js +4 -4
- package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js.map +1 -1
- package/dist/PickersUtilsProvider/utils.js +1 -1
- package/dist/PickersUtilsProvider/utils.js.map +1 -1
- package/dist/ProductCard/layouts/ipo/Content.d.ts +2 -2
- package/dist/ProductCard/layouts/ipo/Content.d.ts.map +1 -1
- package/dist/ProductCard/layouts/ipo/Content.js.map +1 -1
- package/dist/ProductCard/utils.d.ts.map +1 -1
- package/dist/ProductCard/utils.js +4 -1
- package/dist/ProductCard/utils.js.map +1 -1
- package/dist/Skeleton/index.d.ts +2 -3
- package/dist/Skeleton/index.d.ts.map +1 -1
- package/dist/Skeleton/index.js +1 -5
- package/dist/Slider/Slider.js +9 -5
- package/dist/Slider/Slider.js.map +1 -1
- package/dist/Snackbar/Snackbar.js.map +1 -1
- package/dist/Stepper/index.d.ts +2 -3
- package/dist/Stepper/index.d.ts.map +1 -1
- package/dist/Stepper/index.js +1 -5
- package/dist/Tab/Tab.d.ts +2 -1
- package/dist/Tab/Tab.d.ts.map +1 -1
- package/dist/Tab/Tab.js +1 -1
- package/dist/Tab/Tab.js.map +1 -1
- package/dist/Tag/Tag.d.ts.map +1 -1
- package/dist/Tag/Tag.js +2 -13
- package/dist/Tag/Tag.js.map +1 -1
- package/dist/Tag/Tag.styles.css +1 -1
- package/dist/Tag/Tag.styles.d.ts.map +1 -1
- package/dist/Tag/Tag.styles.js.map +1 -1
- package/dist/TextArea/TextArea.d.ts +9 -4
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +58 -9
- package/dist/TextArea/TextArea.js.map +1 -1
- package/dist/TextArea/TextArea.styles.css +2 -0
- package/dist/TextArea/TextArea.styles.d.ts +2 -0
- package/dist/TextArea/TextArea.styles.d.ts.map +1 -1
- package/dist/TextArea/TextArea.styles.js +3 -1
- package/dist/TextArea/TextArea.styles.js.map +1 -1
- package/dist/Tooltip/Tooltip.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -1
- package/dist/Avatar/index.js.map +0 -1
- package/dist/Calendar/Day/index.js.map +0 -1
- package/dist/Calendar/SlideTransition/index.js.map +0 -1
- package/dist/CheckboxField/index.js.map +0 -1
- package/dist/Chip/index.js.map +0 -1
- package/dist/ClickAwayListener/index.js.map +0 -1
- package/dist/Counter/index.js.map +0 -1
- package/dist/DateTimePeriod/index.js.map +0 -1
- package/dist/DateTimePicker/index.js.map +0 -1
- package/dist/DialogActions/index.js.map +0 -1
- package/dist/DialogContent/index.js.map +0 -1
- package/dist/DialogTitle/index.js.map +0 -1
- package/dist/Divider/index.js.map +0 -1
- package/dist/DropDownMenu/index.js.map +0 -1
- package/dist/FeatureCallout/FeatureCalloutActions/index.js.map +0 -1
- package/dist/FeatureCallout/FeatureCalloutText/index.js.map +0 -1
- package/dist/FeatureCallout/FeatureCalloutTitle/index.js.map +0 -1
- package/dist/FeatureCallout/index.js.map +0 -1
- package/dist/FieldHint/index.js.map +0 -1
- package/dist/FormGroup/index.js.map +0 -1
- package/dist/Loader/index.js.map +0 -1
- package/dist/LoaderBackdrop/index.js.map +0 -1
- package/dist/LoaderDots/index.js.map +0 -1
- package/dist/ModalsProvider/index.js.map +0 -1
- package/dist/MultiSelectField/index.js.map +0 -1
- package/dist/NumberTextField/index.js.map +0 -1
- package/dist/PaginatorNumber/NavButton/index.js.map +0 -1
- package/dist/PaginatorNumber/PageButton/index.js.map +0 -1
- package/dist/PaginatorNumber/index.js.map +0 -1
- package/dist/PaginatorOverflow/NavButton/index.js.map +0 -1
- package/dist/PaginatorOverflow/index.js.map +0 -1
- package/dist/Skeleton/index.js.map +0 -1
- 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.
|
|
67
|
-
const hasHoverGlowAnimation = marketingType && HOVER_GLOW_ANIMATION_TYPES.
|
|
68
|
-
const hasActiveBgAnimation = marketingType && ACTIVE_BG_ANIMATION_TYPES.
|
|
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,
|
|
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,
|
|
176
|
-
|
|
177
|
-
|
|
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":";;AAUA,MAAMA,2BAA2B,IAAIC,IAAa;IAAC;IAAY;IAAW;IAAe;IAAU;CAAU;AAC7G,MAAMC,6BAA6B,IAAID,IAAa;IAAC;IAAY;IAAW;CAAY;AACxF,MAAME,4BAA4B,IAAIF,IAAa;IAAC;IAAY;CAAS;AAEzE,MAAMG,kBAAkB,CACtBC,SACAC,KACAC,OACAC,KACAC,UACAC;IAEA,MAAMC,YAAYC,YAAY,GAAG;IAEjC,MAAMC,UAAU,CAACC;QACf,MAAMC,UAAUD,OAAOH;QACvB,MAAMK,WAAWC,KAAK,GAAG,CAACF,UAAUN,UAAU;QAC9C,MAAMS,OAAOX,QAASC,AAAAA,CAAAA,MAAMD,KAAI,IAAKY,QAAQH;QAE7CX,QAAQ,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAGa,KAAK,CAAC,CAAC;QAEpD,IAAIF,YAAY,GAAG;YACjBV,IAAI,OAAO,GAAG;YACdI,QAAAA,cAAAA;YACA;QACF;QAEAJ,IAAI,OAAO,GAAGc,sBAAsBP;IACtC;IAEAP,IAAI,OAAO,GAAGc,sBAAsBP;AACtC;AAWA,MAAMQ,sBAAsB,CAC1BhB,SACAC,KACA,EACEgB,SAAS,EACTC,OAAO,EACPC,UAAU,EACVC,QAAQ,EACRhB,QAAQ,EACRC,UAAU,EACiB;IAE7B,MAAMC,YAAYC,YAAY,GAAG;IAEjC,MAAMC,UAAU,CAACC;QACf,MAAMC,UAAUD,OAAOH;QACvB,MAAMK,WAAWC,KAAK,GAAG,CAACF,UAAUN,UAAU;QAC9C,MAAMiB,WAAWJ,YAAaC,AAAAA,CAAAA,UAAUD,SAAQ,IAAKK,OAAOX;QAC5D,MAAMY,YAAYJ,aAAcC,AAAAA,CAAAA,WAAWD,UAAS,IAAKG,OAAOX;QAEhEX,QAAQ,KAAK,CAAC,WAAW,CAAC,oBAAoB,GAAGqB,SAAS,CAAC,CAAC;QAC5DrB,QAAQ,KAAK,CAAC,WAAW,CAAC,qBAAqB,GAAGuB,UAAU,CAAC,CAAC;QAE9D,IAAIZ,YAAY,GAAG;YACjBV,IAAI,OAAO,GAAG;YACdI,QAAAA,cAAAA;YACA;QACF;QAEAJ,IAAI,OAAO,GAAGc,sBAAsBP;IACtC;IAEAP,IAAI,OAAO,GAAGc,sBAAsBP;AACtC;AAEO,MAAMgB,yBAAyB,CAACC;IACrC,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAS;IAC3C,MAAM,CAACC,UAAUC,YAAY,GAAGF,SAAS;IACzC,MAAM,CAACG,MAAMC,QAAQ,GAAGJ,SAAS;QAC/B,SAAS;YAAE,MAAM;YAAG,OAAO;QAAE;QAC7B,MAAMK;IACR;IAEA,MAAMC,eAAeC,OAAsB;IAC3C,MAAMC,oBAAoBD,OAAsB;IAChD,MAAME,aAAaF,OAAe;IAElC,MAAMG,sBACJb,AAAiB,QAAjBA,iBAAyB9B,yBAAyB,GAAG,CAAC8B;IACxD,MAAMc,wBACJd,AAAiB,QAAjBA,iBAAyB5B,2BAA2B,GAAG,CAAC4B;IAC1D,MAAMe,uBACJf,AAAiB,QAAjBA,iBAAyB3B,0BAA0B,GAAG,CAAC2B;IAEzD,MAAMgB,kBAAkBC,YAAY,CAACC;QACnC,MAAMC,OAAOD,EAAE,aAAa,CAAC,qBAAqB;QAClD,MAAME,IAAMF,AAAAA,CAAAA,EAAE,OAAO,GAAGC,KAAK,IAAG,IAAKA,KAAK,KAAK,GAAI;QAEnDP,WAAW,OAAO,GAAGQ;QAErB,IAAIP,uBAAuBZ,WACzB,IAAID,AAAkB,eAAlBA,iBAAgCS,aAAa,OAAO,EAAE;YACxD,MAAMY,mBAAmBC,WAAWJ,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB;YAC9F,IAAIG,oBAAoBD,GAAG;gBACzBG,qBAAqBd,aAAa,OAAO;gBACzCA,aAAa,OAAO,GAAG;YACzB;QACF,OACES,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAGE,EAAE,CAAC,CAAC;QAI7D,IAAIN,uBACFP,QAAQ;YACN,SAASiB,qBAAqBJ;YAC9B,MAAMK,kBAAkBL;QAC1B;IAEJ,GAAG;QAACP;QAAqBC;QAAuBb;QAAWD;KAAc;IAEzE,MAAM0B,mBAAmBT,YAAY,CAACC;QACpC,MAAMC,OAAOD,EAAE,aAAa,CAAC,qBAAqB;QAClD,MAAMS,SAAWT,AAAAA,CAAAA,EAAE,OAAO,GAAGC,KAAK,IAAG,IAAKA,KAAK,KAAK,GAAI;QAExD,IAAInB,AAAkB,eAAlBA,eAA8B;YAChC,MAAM4B,WAAWN,WAAWJ,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB;YAEtF,IAAI/B,KAAK,GAAG,CAACyC,WAAWD,UAAU,GAAG;gBACnC,IAAIlB,aAAa,OAAO,EACtBc,qBAAqBd,aAAa,OAAO;gBAE3CnC,gBAAgB4C,EAAE,aAAa,EAAET,cAAcmB,UAAUD,QAAQ,KAAK;oBACpElB,aAAa,OAAO,GAAG;gBACzB;YACF;QACF;QAEA,IAAIK,uBACFP,QAAQ;YACN,SAASiB,qBAAqBG;YAC9B,MAAMF,kBAAkBE;QAC1B;QAGFzB,aAAa;IACf,GAAG;QAACY;QAAuBd;KAAc;IAEzC,MAAM6B,mBAAmBZ,YAAY,CAACC;QACpC,MAAM3C,UAAU2C,EAAE,aAAa;QAE/B,IAAIJ,uBACFP,QAAQ;YACN,SAAS;gBAAE,MAAM;gBAAG,OAAO;YAAE;YAC7B,MAAMC;QACR;QAGF,IAAIC,aAAa,OAAO,IAAII,qBAAqB;YAC/CU,qBAAqBd,aAAa,OAAO;YACzCA,aAAa,OAAO,GAAG;QACzB;QAEA,IAAIT,AAAkB,eAAlBA,eAA8B;YAChC,MAAM4B,WAAWN,WAAW/C,QAAQ,KAAK,CAAC,gBAAgB,CAAC,mBAAmB;YAC9ED,gBAAgBC,SAASkC,cAAcmB,UAAU,KAAK,KAAK;gBACzDrD,QAAQ,KAAK,CAAC,cAAc,CAAC;YAC/B;QACF;QAEA2B,aAAa;QACbG,YAAY;IACd,GAAG;QAACQ;QAAqBC;QAAuBd;KAAc;IAE9D,MAAM8B,kBAAkBb,YAAY,CAACC;QACnC,IAAIJ,uBACFP,QAAQ;YACN,SAAS;gBAAE,MAAM;gBAAG,OAAO;YAAE;YAC7B,MAAMC;QACR;QAGF,IAAIO,sBAAsB;YACxB,IAAIJ,kBAAkB,OAAO,EAC3BY,qBAAqBZ,kBAAkB,OAAO;YAEhD,MAAMoB,eAAeT,WAAWJ,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,uBAAuB;YAC9F,MAAMc,gBAAgBV,WAAWJ,EAAE,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,wBAAyBlB,CAAAA,AAAkB,eAAlBA,gBAA+B,QAAQ,KAAI;YAC5IT,oBAAoB2B,EAAE,aAAa,EAAEP,mBAAmB;gBACtD,WAAWoB;gBACX,SAAS;gBACT,YAAYC;gBACZ,UAAU;gBACV,UAAU;YACZ;QACF;QAEA3B,YAAY;IACd,GAAG;QAACU;QAAsBD;QAAuBd;KAAc;IAE/D,MAAMiC,gBAAgBhB,YAAY,CAACC;QACjC,MAAM3C,UAAU2C,EAAE,aAAa;QAE/B,IAAIJ,uBAAuB;YACzB,MAAMM,IAAIR,WAAW,OAAO;YAC5BL,QAAQ;gBACN,SAASiB,qBAAqBJ;gBAC9B,MAAMK,kBAAkBL;YAC1B;QACF;QAEA,IAAIL,sBAAsB;YACxB,IAAIJ,kBAAkB,OAAO,EAAE;gBAC7BY,qBAAqBZ,kBAAkB,OAAO;gBAC9CA,kBAAkB,OAAO,GAAG;YAC9B;YACA,MAAMoB,eAAeT,WAAW/C,QAAQ,KAAK,CAAC,gBAAgB,CAAC,uBAAuB;YACtF,MAAMyD,gBAAgBV,WAAW/C,QAAQ,KAAK,CAAC,gBAAgB,CAAC,wBAAwB;YACxF,MAAM2D,eAAejC,aAAaD,AAAkB,eAAlBA,gBAA+B,KAAK;YACtE,MAAMmC,gBAAgBlC,aAAaD,AAAkB,eAAlBA,gBAA+B,MAAOA,AAAkB,eAAlBA,gBAA+B,MAAM;YAC9GT,oBAAoBhB,SAASoC,mBAAmB;gBAC9C,WAAWoB;gBACX,SAASG;gBACT,YAAYF;gBACZ,UAAUG;gBACV,UAAU;gBACV,YAAY;oBACV5D,QAAQ,KAAK,CAAC,cAAc,CAAC;oBAC7BA,QAAQ,KAAK,CAAC,cAAc,CAAC;gBAC/B;YACF;QACF;QAEA8B,YAAY;IACd,GAAG;QAACU;QAAsBD;QAAuBb;QAAWD;KAAc;IAE1E,OAAO;QACL,UAAU;YACR,aAAagB;YACb,cAAcU;YACd,cAAcG;YACd,aAAaC;YACb,WAAWG;QACb;QACA3B;QACAL;QACAG;QACAS;QACAC;QACA,YAAYF,WAAW,OAAO;IAChC;AACF"}
|
|
@@ -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;
|
|
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;;
|
|
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"}
|
package/dist/Modal/Portal.js
CHANGED
|
@@ -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
|
|
9
|
+
null == onRendered || onRendered(mountNode);
|
|
10
10
|
}, [
|
|
11
11
|
mountNode,
|
|
12
12
|
onRendered
|
package/dist/Modal/Portal.js.map
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|
|
@@ -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
|
|
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
|
|
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.
|
|
109
|
-
else if (integerPart) formattedValue = formattedValue.replace(integerPart, integerPart.
|
|
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,
|