@hh.ru/magritte-ui-swipe 5.0.2 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Swipe.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { FC } from 'react';
2
- import { SwipeProps } from './types';
2
+ import { SwipeProps } from '@hh.ru/magritte-ui-swipe/types';
3
3
  export declare const Swipe: FC<SwipeProps>;
package/Swipe.js CHANGED
@@ -8,7 +8,7 @@ import { useSwipe, MAIN_AXIS_THRESHOLD_PX } from '@hh.ru/magritte-common-use-swi
8
8
  import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
9
9
  import { Layer, LayerName } from '@hh.ru/magritte-ui-layer';
10
10
 
11
- var styles = {"text":"magritte-text___gUsfc_5-0-2","text_max-lines":"magritte-text_max-lines___foe9-_5-0-2","textMaxLines":"magritte-text_max-lines___foe9-_5-0-2","text-dynamic":"magritte-text-dynamic___KzitV_5-0-2","textDynamic":"magritte-text-dynamic___KzitV_5-0-2","text-dynamic_stretched":"magritte-text-dynamic_stretched___hv3Th_5-0-2","textDynamicStretched":"magritte-text-dynamic_stretched___hv3Th_5-0-2","text_style-primary":"magritte-text_style-primary___vYlpl_5-0-2","textStylePrimary":"magritte-text_style-primary___vYlpl_5-0-2","text-dynamic-disabled":"magritte-text-dynamic-disabled___M1GFt_5-0-2","textDynamicDisabled":"magritte-text-dynamic-disabled___M1GFt_5-0-2","text_style-secondary":"magritte-text_style-secondary___qb-4O_5-0-2","textStyleSecondary":"magritte-text_style-secondary___qb-4O_5-0-2","text_style-tertiary":"magritte-text_style-tertiary___atZvg_5-0-2","textStyleTertiary":"magritte-text_style-tertiary___atZvg_5-0-2","text_style-accent":"magritte-text_style-accent___JDNe4_5-0-2","textStyleAccent":"magritte-text_style-accent___JDNe4_5-0-2","text_style-accent-secondary":"magritte-text_style-accent-secondary___JM6z5_5-0-2","textStyleAccentSecondary":"magritte-text_style-accent-secondary___JM6z5_5-0-2","text_style-positive":"magritte-text_style-positive___OjJIB_5-0-2","textStylePositive":"magritte-text_style-positive___OjJIB_5-0-2","text_style-positive-secondary":"magritte-text_style-positive-secondary___LkPe1_5-0-2","textStylePositiveSecondary":"magritte-text_style-positive-secondary___LkPe1_5-0-2","text_style-negative":"magritte-text_style-negative___wBLmp_5-0-2","textStyleNegative":"magritte-text_style-negative___wBLmp_5-0-2","text_style-negative-secondary":"magritte-text_style-negative-secondary___CO58y_5-0-2","textStyleNegativeSecondary":"magritte-text_style-negative-secondary___CO58y_5-0-2","text_style-warning":"magritte-text_style-warning___23C3Y_5-0-2","textStyleWarning":"magritte-text_style-warning___23C3Y_5-0-2","text_style-warning-secondary":"magritte-text_style-warning-secondary___ZJ3uf_5-0-2","textStyleWarningSecondary":"magritte-text_style-warning-secondary___ZJ3uf_5-0-2","text_style-special":"magritte-text_style-special___LaqKY_5-0-2","textStyleSpecial":"magritte-text_style-special___LaqKY_5-0-2","text_style-special-secondary":"magritte-text_style-special-secondary___-whB-_5-0-2","textStyleSpecialSecondary":"magritte-text_style-special-secondary___-whB-_5-0-2","text_style-contrast":"magritte-text_style-contrast___Bx24w_5-0-2","textStyleContrast":"magritte-text_style-contrast___Bx24w_5-0-2","text_style-contrast-secondary":"magritte-text_style-contrast-secondary___xMS2f_5-0-2","textStyleContrastSecondary":"magritte-text_style-contrast-secondary___xMS2f_5-0-2","text_typography-title-1-semibold":"magritte-text_typography-title-1-semibold___WDZXM_5-0-2","textTypographyTitle1Semibold":"magritte-text-typography-title-1-semibold___RE-5E_5-0-2","text_typography-title-2-semibold":"magritte-text_typography-title-2-semibold___4PvYn_5-0-2","textTypographyTitle2Semibold":"magritte-text-typography-title-2-semibold___r-gyn_5-0-2","text_typography-title-3-semibold":"magritte-text_typography-title-3-semibold___E7pmd_5-0-2","textTypographyTitle3Semibold":"magritte-text-typography-title-3-semibold___AxOn9_5-0-2","text_typography-title-4-semibold":"magritte-text_typography-title-4-semibold___u-8Kd_5-0-2","textTypographyTitle4Semibold":"magritte-text-typography-title-4-semibold___4FOf2_5-0-2","text_typography-title-5-semibold":"magritte-text_typography-title-5-semibold___PRTQc_5-0-2","textTypographyTitle5Semibold":"magritte-text-typography-title-5-semibold___ayTa0_5-0-2","text_typography-subtitle-1-semibold":"magritte-text_typography-subtitle-1-semibold___TNYKE_5-0-2","textTypographySubtitle1Semibold":"magritte-text_typography-subtitle-1-semibold___TNYKE_5-0-2","text_typography-subtitle-2-semibold":"magritte-text_typography-subtitle-2-semibold___8GJr9_5-0-2","textTypographySubtitle2Semibold":"magritte-text_typography-subtitle-2-semibold___8GJr9_5-0-2","text_typography-subtitle-3-semibold":"magritte-text_typography-subtitle-3-semibold___scHMl_5-0-2","textTypographySubtitle3Semibold":"magritte-text_typography-subtitle-3-semibold___scHMl_5-0-2","text_typography-subtitle-4-semibold":"magritte-text_typography-subtitle-4-semibold___Yr4Bt_5-0-2","textTypographySubtitle4Semibold":"magritte-text_typography-subtitle-4-semibold___Yr4Bt_5-0-2","text_typography-label-1-regular":"magritte-text_typography-label-1-regular___JMO56_5-0-2","textTypographyLabel1Regular":"magritte-text_typography-label-1-regular___JMO56_5-0-2","text_typography-label-2-regular":"magritte-text_typography-label-2-regular___7gS1P_5-0-2","textTypographyLabel2Regular":"magritte-text_typography-label-2-regular___7gS1P_5-0-2","text_typography-label-3-regular":"magritte-text_typography-label-3-regular___DogGv_5-0-2","textTypographyLabel3Regular":"magritte-text_typography-label-3-regular___DogGv_5-0-2","text_typography-label-4-regular":"magritte-text_typography-label-4-regular___TIPoS_5-0-2","textTypographyLabel4Regular":"magritte-text_typography-label-4-regular___TIPoS_5-0-2","text_typography-label-5-regular":"magritte-text_typography-label-5-regular___y55-P_5-0-2","textTypographyLabel5Regular":"magritte-text_typography-label-5-regular___y55-P_5-0-2","text_typography-paragraph-1-regular":"magritte-text_typography-paragraph-1-regular___ZvHBC_5-0-2","textTypographyParagraph1Regular":"magritte-text_typography-paragraph-1-regular___ZvHBC_5-0-2","text_typography-paragraph-2-regular":"magritte-text_typography-paragraph-2-regular___ndKyc_5-0-2","textTypographyParagraph2Regular":"magritte-text_typography-paragraph-2-regular___ndKyc_5-0-2","text_typography-paragraph-3-regular":"magritte-text_typography-paragraph-3-regular___g0oZF_5-0-2","textTypographyParagraph3Regular":"magritte-text_typography-paragraph-3-regular___g0oZF_5-0-2","text_typography-paragraph-4-regular":"magritte-text_typography-paragraph-4-regular___Iy3Zy_5-0-2","textTypographyParagraph4Regular":"magritte-text_typography-paragraph-4-regular___Iy3Zy_5-0-2","text_typography-custom-1-semibold":"magritte-text_typography-custom-1-semibold___Pv6Lp_5-0-2","textTypographyCustom1Semibold":"magritte-text_typography-custom-1-semibold___Pv6Lp_5-0-2","text_typography-custom-2-semibold":"magritte-text_typography-custom-2-semibold___UP1hj_5-0-2","textTypographyCustom2Semibold":"magritte-text_typography-custom-2-semibold___UP1hj_5-0-2","text_typography-custom-3-semibold":"magritte-text_typography-custom-3-semibold___6yO4m_5-0-2","textTypographyCustom3Semibold":"magritte-text_typography-custom-3-semibold___6yO4m_5-0-2","text_typography-custom-4-semibold":"magritte-text_typography-custom-4-semibold___NEahp_5-0-2","textTypographyCustom4Semibold":"magritte-text_typography-custom-4-semibold___NEahp_5-0-2","text_typography-custom-5-semibold":"magritte-text_typography-custom-5-semibold___-UJfV_5-0-2","textTypographyCustom5Semibold":"magritte-text_typography-custom-5-semibold___-UJfV_5-0-2","text_typography-custom-1-italic":"magritte-text_typography-custom-1-italic___-CpMs_5-0-2","textTypographyCustom1Italic":"magritte-text_typography-custom-1-italic___-CpMs_5-0-2","text_typography-custom-2-italic":"magritte-text_typography-custom-2-italic___SvOG4_5-0-2","textTypographyCustom2Italic":"magritte-text_typography-custom-2-italic___SvOG4_5-0-2","text_typography-custom-3-italic":"magritte-text_typography-custom-3-italic___-g0na_5-0-2","textTypographyCustom3Italic":"magritte-text_typography-custom-3-italic___-g0na_5-0-2","text_typography-custom-4-italic":"magritte-text_typography-custom-4-italic___gOGey_5-0-2","textTypographyCustom4Italic":"magritte-text_typography-custom-4-italic___gOGey_5-0-2","text_typography-custom-5-italic":"magritte-text_typography-custom-5-italic___VR9wy_5-0-2","textTypographyCustom5Italic":"magritte-text_typography-custom-5-italic___VR9wy_5-0-2","text_typography-custom-1-medium":"magritte-text_typography-custom-1-medium___hik0e_5-0-2","textTypographyCustom1Medium":"magritte-text_typography-custom-1-medium___hik0e_5-0-2","text_typography-custom-2-medium":"magritte-text_typography-custom-2-medium___-f6Sh_5-0-2","textTypographyCustom2Medium":"magritte-text_typography-custom-2-medium___-f6Sh_5-0-2","text_typography-custom-3-medium":"magritte-text_typography-custom-3-medium___pLvIb_5-0-2","textTypographyCustom3Medium":"magritte-text_typography-custom-3-medium___pLvIb_5-0-2","text_typography-custom-4-medium":"magritte-text_typography-custom-4-medium___zZteM_5-0-2","textTypographyCustom4Medium":"magritte-text_typography-custom-4-medium___zZteM_5-0-2","text_typography-custom-5-medium":"magritte-text_typography-custom-5-medium___gW1Y8_5-0-2","textTypographyCustom5Medium":"magritte-text_typography-custom-5-medium___gW1Y8_5-0-2","text-typography-title-1-semibold":"magritte-text-typography-title-1-semibold___RE-5E_5-0-2","text-typography-title-2-semibold":"magritte-text-typography-title-2-semibold___r-gyn_5-0-2","text-typography-title-3-semibold":"magritte-text-typography-title-3-semibold___AxOn9_5-0-2","text-typography-title-4-semibold":"magritte-text-typography-title-4-semibold___4FOf2_5-0-2","text-typography-title-5-semibold":"magritte-text-typography-title-5-semibold___ayTa0_5-0-2","root":"magritte-root___gbkM-_5-0-2","swipeble":"magritte-swipeble___EVyAI_5-0-2","childrenWrapper":"magritte-childrenWrapper___1tUbf_5-0-2","buttons":"magritte-buttons___PHNdL_5-0-2","buttons-left":"magritte-buttons-left___WPiN4_5-0-2","buttonsLeft":"magritte-buttons-left___WPiN4_5-0-2","buttons-right":"magritte-buttons-right___G3u6y_5-0-2","buttonsRight":"magritte-buttons-right___G3u6y_5-0-2","button":"magritte-button___jZvyY_5-0-2","button-hide":"magritte-button-hide___5AEdR_5-0-2","buttonHide":"magritte-button-hide___5AEdR_5-0-2","button-grow":"magritte-button-grow___IT4MK_5-0-2","buttonGrow":"magritte-button-grow___IT4MK_5-0-2","button-content":"magritte-button-content___hlzd-_5-0-2","buttonContent":"magritte-button-content___hlzd-_5-0-2","button-content-column":"magritte-button-content-column___48Tzo_5-0-2","buttonContentColumn":"magritte-button-content-column___48Tzo_5-0-2","button-label":"magritte-button-label___l03VO_5-0-2","buttonLabel":"magritte-button-label___l03VO_5-0-2","button_style-neutral":"magritte-button_style-neutral___1yyqh_5-0-2","buttonStyleNeutral":"magritte-button_style-neutral___1yyqh_5-0-2","button_style-accent":"magritte-button_style-accent___L9krS_5-0-2","buttonStyleAccent":"magritte-button_style-accent___L9krS_5-0-2","button_style-positive":"magritte-button_style-positive___2pgae_5-0-2","buttonStylePositive":"magritte-button_style-positive___2pgae_5-0-2","button_style-negative":"magritte-button_style-negative___UClE4_5-0-2","buttonStyleNegative":"magritte-button_style-negative___UClE4_5-0-2","button_style-special":"magritte-button_style-special___sGvAc_5-0-2","buttonStyleSpecial":"magritte-button_style-special___sGvAc_5-0-2","button_style-warning":"magritte-button_style-warning___5bEK0_5-0-2","buttonStyleWarning":"magritte-button_style-warning___5bEK0_5-0-2","icon-wrapper":"magritte-icon-wrapper___0xJZX_5-0-2","iconWrapper":"magritte-icon-wrapper___0xJZX_5-0-2"};
11
+ var styles = {"text":"magritte-text___gUsfc_5-0-3","text_max-lines":"magritte-text_max-lines___foe9-_5-0-3","textMaxLines":"magritte-text_max-lines___foe9-_5-0-3","text-dynamic":"magritte-text-dynamic___KzitV_5-0-3","textDynamic":"magritte-text-dynamic___KzitV_5-0-3","text-dynamic_stretched":"magritte-text-dynamic_stretched___hv3Th_5-0-3","textDynamicStretched":"magritte-text-dynamic_stretched___hv3Th_5-0-3","text_style-primary":"magritte-text_style-primary___vYlpl_5-0-3","textStylePrimary":"magritte-text_style-primary___vYlpl_5-0-3","text-dynamic-disabled":"magritte-text-dynamic-disabled___M1GFt_5-0-3","textDynamicDisabled":"magritte-text-dynamic-disabled___M1GFt_5-0-3","text_style-secondary":"magritte-text_style-secondary___qb-4O_5-0-3","textStyleSecondary":"magritte-text_style-secondary___qb-4O_5-0-3","text_style-tertiary":"magritte-text_style-tertiary___atZvg_5-0-3","textStyleTertiary":"magritte-text_style-tertiary___atZvg_5-0-3","text_style-accent":"magritte-text_style-accent___JDNe4_5-0-3","textStyleAccent":"magritte-text_style-accent___JDNe4_5-0-3","text_style-accent-secondary":"magritte-text_style-accent-secondary___JM6z5_5-0-3","textStyleAccentSecondary":"magritte-text_style-accent-secondary___JM6z5_5-0-3","text_style-positive":"magritte-text_style-positive___OjJIB_5-0-3","textStylePositive":"magritte-text_style-positive___OjJIB_5-0-3","text_style-positive-secondary":"magritte-text_style-positive-secondary___LkPe1_5-0-3","textStylePositiveSecondary":"magritte-text_style-positive-secondary___LkPe1_5-0-3","text_style-negative":"magritte-text_style-negative___wBLmp_5-0-3","textStyleNegative":"magritte-text_style-negative___wBLmp_5-0-3","text_style-negative-secondary":"magritte-text_style-negative-secondary___CO58y_5-0-3","textStyleNegativeSecondary":"magritte-text_style-negative-secondary___CO58y_5-0-3","text_style-warning":"magritte-text_style-warning___23C3Y_5-0-3","textStyleWarning":"magritte-text_style-warning___23C3Y_5-0-3","text_style-warning-secondary":"magritte-text_style-warning-secondary___ZJ3uf_5-0-3","textStyleWarningSecondary":"magritte-text_style-warning-secondary___ZJ3uf_5-0-3","text_style-special":"magritte-text_style-special___LaqKY_5-0-3","textStyleSpecial":"magritte-text_style-special___LaqKY_5-0-3","text_style-special-secondary":"magritte-text_style-special-secondary___-whB-_5-0-3","textStyleSpecialSecondary":"magritte-text_style-special-secondary___-whB-_5-0-3","text_style-contrast":"magritte-text_style-contrast___Bx24w_5-0-3","textStyleContrast":"magritte-text_style-contrast___Bx24w_5-0-3","text_style-contrast-secondary":"magritte-text_style-contrast-secondary___xMS2f_5-0-3","textStyleContrastSecondary":"magritte-text_style-contrast-secondary___xMS2f_5-0-3","text_typography-title-1-semibold":"magritte-text_typography-title-1-semibold___WDZXM_5-0-3","textTypographyTitle1Semibold":"magritte-text-typography-title-1-semibold___RE-5E_5-0-3","text_typography-title-2-semibold":"magritte-text_typography-title-2-semibold___4PvYn_5-0-3","textTypographyTitle2Semibold":"magritte-text-typography-title-2-semibold___r-gyn_5-0-3","text_typography-title-3-semibold":"magritte-text_typography-title-3-semibold___E7pmd_5-0-3","textTypographyTitle3Semibold":"magritte-text-typography-title-3-semibold___AxOn9_5-0-3","text_typography-title-4-semibold":"magritte-text_typography-title-4-semibold___u-8Kd_5-0-3","textTypographyTitle4Semibold":"magritte-text-typography-title-4-semibold___4FOf2_5-0-3","text_typography-title-5-semibold":"magritte-text_typography-title-5-semibold___PRTQc_5-0-3","textTypographyTitle5Semibold":"magritte-text-typography-title-5-semibold___ayTa0_5-0-3","text_typography-subtitle-1-semibold":"magritte-text_typography-subtitle-1-semibold___TNYKE_5-0-3","textTypographySubtitle1Semibold":"magritte-text_typography-subtitle-1-semibold___TNYKE_5-0-3","text_typography-subtitle-2-semibold":"magritte-text_typography-subtitle-2-semibold___8GJr9_5-0-3","textTypographySubtitle2Semibold":"magritte-text_typography-subtitle-2-semibold___8GJr9_5-0-3","text_typography-subtitle-3-semibold":"magritte-text_typography-subtitle-3-semibold___scHMl_5-0-3","textTypographySubtitle3Semibold":"magritte-text_typography-subtitle-3-semibold___scHMl_5-0-3","text_typography-subtitle-4-semibold":"magritte-text_typography-subtitle-4-semibold___Yr4Bt_5-0-3","textTypographySubtitle4Semibold":"magritte-text_typography-subtitle-4-semibold___Yr4Bt_5-0-3","text_typography-label-1-regular":"magritte-text_typography-label-1-regular___JMO56_5-0-3","textTypographyLabel1Regular":"magritte-text_typography-label-1-regular___JMO56_5-0-3","text_typography-label-2-regular":"magritte-text_typography-label-2-regular___7gS1P_5-0-3","textTypographyLabel2Regular":"magritte-text_typography-label-2-regular___7gS1P_5-0-3","text_typography-label-3-regular":"magritte-text_typography-label-3-regular___DogGv_5-0-3","textTypographyLabel3Regular":"magritte-text_typography-label-3-regular___DogGv_5-0-3","text_typography-label-4-regular":"magritte-text_typography-label-4-regular___TIPoS_5-0-3","textTypographyLabel4Regular":"magritte-text_typography-label-4-regular___TIPoS_5-0-3","text_typography-label-5-regular":"magritte-text_typography-label-5-regular___y55-P_5-0-3","textTypographyLabel5Regular":"magritte-text_typography-label-5-regular___y55-P_5-0-3","text_typography-paragraph-1-regular":"magritte-text_typography-paragraph-1-regular___ZvHBC_5-0-3","textTypographyParagraph1Regular":"magritte-text_typography-paragraph-1-regular___ZvHBC_5-0-3","text_typography-paragraph-2-regular":"magritte-text_typography-paragraph-2-regular___ndKyc_5-0-3","textTypographyParagraph2Regular":"magritte-text_typography-paragraph-2-regular___ndKyc_5-0-3","text_typography-paragraph-3-regular":"magritte-text_typography-paragraph-3-regular___g0oZF_5-0-3","textTypographyParagraph3Regular":"magritte-text_typography-paragraph-3-regular___g0oZF_5-0-3","text_typography-paragraph-4-regular":"magritte-text_typography-paragraph-4-regular___Iy3Zy_5-0-3","textTypographyParagraph4Regular":"magritte-text_typography-paragraph-4-regular___Iy3Zy_5-0-3","text_typography-custom-1-semibold":"magritte-text_typography-custom-1-semibold___Pv6Lp_5-0-3","textTypographyCustom1Semibold":"magritte-text_typography-custom-1-semibold___Pv6Lp_5-0-3","text_typography-custom-2-semibold":"magritte-text_typography-custom-2-semibold___UP1hj_5-0-3","textTypographyCustom2Semibold":"magritte-text_typography-custom-2-semibold___UP1hj_5-0-3","text_typography-custom-3-semibold":"magritte-text_typography-custom-3-semibold___6yO4m_5-0-3","textTypographyCustom3Semibold":"magritte-text_typography-custom-3-semibold___6yO4m_5-0-3","text_typography-custom-4-semibold":"magritte-text_typography-custom-4-semibold___NEahp_5-0-3","textTypographyCustom4Semibold":"magritte-text_typography-custom-4-semibold___NEahp_5-0-3","text_typography-custom-5-semibold":"magritte-text_typography-custom-5-semibold___-UJfV_5-0-3","textTypographyCustom5Semibold":"magritte-text_typography-custom-5-semibold___-UJfV_5-0-3","text_typography-custom-1-italic":"magritte-text_typography-custom-1-italic___-CpMs_5-0-3","textTypographyCustom1Italic":"magritte-text_typography-custom-1-italic___-CpMs_5-0-3","text_typography-custom-2-italic":"magritte-text_typography-custom-2-italic___SvOG4_5-0-3","textTypographyCustom2Italic":"magritte-text_typography-custom-2-italic___SvOG4_5-0-3","text_typography-custom-3-italic":"magritte-text_typography-custom-3-italic___-g0na_5-0-3","textTypographyCustom3Italic":"magritte-text_typography-custom-3-italic___-g0na_5-0-3","text_typography-custom-4-italic":"magritte-text_typography-custom-4-italic___gOGey_5-0-3","textTypographyCustom4Italic":"magritte-text_typography-custom-4-italic___gOGey_5-0-3","text_typography-custom-5-italic":"magritte-text_typography-custom-5-italic___VR9wy_5-0-3","textTypographyCustom5Italic":"magritte-text_typography-custom-5-italic___VR9wy_5-0-3","text_typography-custom-1-medium":"magritte-text_typography-custom-1-medium___hik0e_5-0-3","textTypographyCustom1Medium":"magritte-text_typography-custom-1-medium___hik0e_5-0-3","text_typography-custom-2-medium":"magritte-text_typography-custom-2-medium___-f6Sh_5-0-3","textTypographyCustom2Medium":"magritte-text_typography-custom-2-medium___-f6Sh_5-0-3","text_typography-custom-3-medium":"magritte-text_typography-custom-3-medium___pLvIb_5-0-3","textTypographyCustom3Medium":"magritte-text_typography-custom-3-medium___pLvIb_5-0-3","text_typography-custom-4-medium":"magritte-text_typography-custom-4-medium___zZteM_5-0-3","textTypographyCustom4Medium":"magritte-text_typography-custom-4-medium___zZteM_5-0-3","text_typography-custom-5-medium":"magritte-text_typography-custom-5-medium___gW1Y8_5-0-3","textTypographyCustom5Medium":"magritte-text_typography-custom-5-medium___gW1Y8_5-0-3","text-typography-title-1-semibold":"magritte-text-typography-title-1-semibold___RE-5E_5-0-3","text-typography-title-2-semibold":"magritte-text-typography-title-2-semibold___r-gyn_5-0-3","text-typography-title-3-semibold":"magritte-text-typography-title-3-semibold___AxOn9_5-0-3","text-typography-title-4-semibold":"magritte-text-typography-title-4-semibold___4FOf2_5-0-3","text-typography-title-5-semibold":"magritte-text-typography-title-5-semibold___ayTa0_5-0-3","root":"magritte-root___gbkM-_5-0-3","swipeble":"magritte-swipeble___EVyAI_5-0-3","childrenWrapper":"magritte-childrenWrapper___1tUbf_5-0-3","buttons":"magritte-buttons___PHNdL_5-0-3","buttons-left":"magritte-buttons-left___WPiN4_5-0-3","buttonsLeft":"magritte-buttons-left___WPiN4_5-0-3","buttons-right":"magritte-buttons-right___G3u6y_5-0-3","buttonsRight":"magritte-buttons-right___G3u6y_5-0-3","button":"magritte-button___jZvyY_5-0-3","button-hide":"magritte-button-hide___5AEdR_5-0-3","buttonHide":"magritte-button-hide___5AEdR_5-0-3","button-grow":"magritte-button-grow___IT4MK_5-0-3","buttonGrow":"magritte-button-grow___IT4MK_5-0-3","button-content":"magritte-button-content___hlzd-_5-0-3","buttonContent":"magritte-button-content___hlzd-_5-0-3","button-content-column":"magritte-button-content-column___48Tzo_5-0-3","buttonContentColumn":"magritte-button-content-column___48Tzo_5-0-3","button-label":"magritte-button-label___l03VO_5-0-3","buttonLabel":"magritte-button-label___l03VO_5-0-3","button_style-neutral":"magritte-button_style-neutral___1yyqh_5-0-3","buttonStyleNeutral":"magritte-button_style-neutral___1yyqh_5-0-3","button_style-accent":"magritte-button_style-accent___L9krS_5-0-3","buttonStyleAccent":"magritte-button_style-accent___L9krS_5-0-3","button_style-positive":"magritte-button_style-positive___2pgae_5-0-3","buttonStylePositive":"magritte-button_style-positive___2pgae_5-0-3","button_style-negative":"magritte-button_style-negative___UClE4_5-0-3","buttonStyleNegative":"magritte-button_style-negative___UClE4_5-0-3","button_style-special":"magritte-button_style-special___sGvAc_5-0-3","buttonStyleSpecial":"magritte-button_style-special___sGvAc_5-0-3","button_style-warning":"magritte-button_style-warning___5bEK0_5-0-3","buttonStyleWarning":"magritte-button_style-warning___5bEK0_5-0-3","icon-wrapper":"magritte-icon-wrapper___0xJZX_5-0-3","iconWrapper":"magritte-icon-wrapper___0xJZX_5-0-3"};
12
12
 
13
13
  const MIN_BUTTON_WIDTH = 76;
14
14
  const OPEN_THRESHOLD = 1 / 3;
package/Swipe.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Swipe.js","sources":["../src/Swipe.tsx"],"sourcesContent":["import { FC, MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { animated, config, useSpring } from '@react-spring/web';\nimport classNames from 'classnames';\n\nimport { useDebounce } from '@hh.ru/magritte-common-func-utils';\nimport { SwipeEvent, SwipeEventHandler, SwipeThreshold } from '@hh.ru/magritte-common-use-swipe';\nimport { MAIN_AXIS_THRESHOLD_PX, useSwipe } from '@hh.ru/magritte-common-use-swipe/useSwipe';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Layer, LayerName } from '@hh.ru/magritte-ui-layer';\nimport { SwipeButtonsArray, SwipeProps } from '@hh.ru/magritte-ui-swipe/types';\n\nimport styles from './swipe.less';\n\nconst MIN_BUTTON_WIDTH = 76;\nconst OPEN_THRESHOLD = 1 / 3;\nconst MIN_SWIPE_DISTANCE = MIN_BUTTON_WIDTH * OPEN_THRESHOLD;\n\nenum ButtonsState {\n Close = 'close',\n LeftOpen = 'leftOpen',\n RightOpen = 'rightOpen',\n}\n\nenum LongState {\n Off = 'off',\n Left = 'left',\n Right = 'right',\n}\n\nexport const Swipe: FC<SwipeProps> = ({\n children,\n leftButtons,\n rightButtons,\n onStart,\n onFinish,\n useLongSwipe = true,\n 'data-qa': dataQa,\n demo = false,\n twoSidedDemoMode = 'right-to-left',\n demoAppearTime = 200,\n demoIdleTime = 300,\n demoDisappearTime = 200,\n onFinishDemo,\n onStartDemo,\n onResetDemo,\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const swipeableRef = useRef<HTMLDivElement | null>(null);\n const childrenWrapperRef = useRef<HTMLDivElement | null>(null);\n const [swipeableWidth, setSwipeableWidth] = useState(0);\n const leftButtonsRef = useRef<HTMLDivElement | null>(null);\n const rightButtonsRef = useRef<HTMLDivElement | null>(null);\n\n const sumRefs = useRef<HTMLDivElement[]>([]); // ссылки на кнопки, по которым считается реальный размер\n const leftButtonsSumSizeRef = useRef(0); // реальный размер, требуемый левым кнопкам\n const rightButtonsSumSizeRef = useRef(0); // реальный размер, требуемый правым кнопкам\n\n const leftButtonsSizeRef = useRef(0); // установленный размер левых кнопок\n const rigthButtonsSizeRef = useRef(0); // установленный размер правых кнопок\n const prevDistance = useRef(0);\n const swipeThresholdRef = useRef<SwipeThreshold>({ max: MIN_SWIPE_DISTANCE });\n const swipeLockRef = useRef(false);\n const { isMobile } = useBreakpoint();\n\n const [leftBlockStyles, leftBlockApi] = useSpring(() => ({\n width: 0,\n }));\n\n const [rightBlockStyles, rightBlockApi] = useSpring(() => ({\n width: 0,\n }));\n\n const [longState, setLongState] = useState(LongState.Off);\n const stateRef = useRef({\n candidate: ButtonsState.Close, // предполагаемое состояние, нужно чтобы нельзя было двигать влево-вправо за один раз\n now: ButtonsState.Close, // текущее состояние\n next: ButtonsState.Close, // следующее состояние, после завершения свайпа\n });\n\n const [demoInProgress, setDemoInProgress] = useState<boolean>(false);\n\n const setAnimateButtonsWidth = useCallback((flag: boolean) => {\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.transitionProperty = flag ? 'width' : 'none';\n }\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.transitionProperty = flag ? 'width' : 'none';\n }\n }, []);\n\n const setWidth = useDebounce(\n useCallback(() => {\n if (swipeableRef.current && childrenWrapperRef.current && rootRef.current) {\n const value: number = rootRef.current.getBoundingClientRect().width;\n // устанавливаем размер области равной размеру контента,\n // чтобы она не растягивалась, когда растягиваются кнопки\n setSwipeableWidth(value);\n swipeableRef.current.style.width = `${value}px`;\n childrenWrapperRef.current.style.width = `${value}px`;\n childrenWrapperRef.current.style.minWidth = `${value}px`;\n }\n }, [setSwipeableWidth]),\n 64\n );\n\n useEffect(() => {\n setWidth();\n }, [setWidth]);\n\n useEffect(() => {\n if (window && isMobile) {\n window.addEventListener('resize', setWidth);\n }\n\n return () => {\n if (window && isMobile) {\n window.removeEventListener('resize', setWidth);\n }\n };\n }, [setWidth, isMobile]);\n\n // обновляет порог срабатывания для useSwipe в зависимости от состояния\n const updateSwipeThreshold = useCallback(() => {\n const { now, candidate } = stateRef.current;\n\n // если открыта одна из сторон, то мы можем свайпнуть к закрытию, или к активации длинного свайпа\n if ([ButtonsState.LeftOpen, ButtonsState.RightOpen].includes(now)) {\n swipeThresholdRef.current =\n now === ButtonsState.LeftOpen\n ? {\n // свайп к закрытию\n minDelta: -MIN_SWIPE_DISTANCE,\n // свайп к активации длинного свайпа\n maxDelta: useLongSwipe ? MIN_SWIPE_DISTANCE : Number.MAX_SAFE_INTEGER,\n }\n : {\n // свайп к закрытию\n maxDelta: MIN_SWIPE_DISTANCE,\n // свайп к активации длинного свайпа\n minDelta: useLongSwipe ? -MIN_SWIPE_DISTANCE : -Number.MAX_SAFE_INTEGER,\n };\n } else if (candidate === ButtonsState.LeftOpen) {\n // если кандидат на открытие слева, то мы можем свайпнуть к открытию слева\n swipeThresholdRef.current = { maxDelta: MIN_SWIPE_DISTANCE };\n } else if (candidate === ButtonsState.RightOpen) {\n // если кандидат на открытие справа, то мы можем свайпнуть к открытию справа, дельта с отрицательным знаком\n // потому что свайпаем вправо\n swipeThresholdRef.current = { minDelta: -MIN_SWIPE_DISTANCE };\n }\n }, [useLongSwipe]);\n\n // анимирует размер кнопок для перехода в переданное состояние\n const animateToState = useCallback(\n (toState: ButtonsState, velocity: number) => {\n leftBlockApi.stop();\n rightBlockApi.stop();\n stateRef.current.now = toState;\n\n const animationConfig = {\n width: 0,\n config: {\n ...config.gentle,\n clamp: true,\n velocity: 0,\n },\n };\n let api: typeof leftBlockApi | typeof rightBlockApi;\n\n // если нужно закрыть кнопки, то сначала определяем с какой стороны кнопки открыты\n // получаем апи для акнимации кнопок с нужной стороны\n // вычисляем начальную скорость, т.к. анимация закрытия кнопок с разных сторон направлена в разные стороны\n // то для правой стороны нужно поменять знак начальной скорости\n if (toState === ButtonsState.Close) {\n const fromLeft = leftBlockApi.current[0].get().width > 0;\n api = fromLeft ? leftBlockApi : rightBlockApi;\n const v = fromLeft ? velocity : -velocity;\n\n // скорость делим на 1000 т.к. в событии приходит скорость в пикселях в секунду\n // а нужна в пикселях в миллисекунду\n animationConfig.config.velocity = v / 1000;\n } else {\n // если нужно открыть кнопки, то получаем апи для анимации блока кнопок с нужной стороны\n // вычисляем начальную скорость, т.к. анимация открытия кнопок с разных сторон направлена в разные стороны\n // то для правой стороны нужно поменять знак начальной скорости\n api = toState === ButtonsState.LeftOpen ? leftBlockApi : rightBlockApi;\n const v = toState === ButtonsState.LeftOpen ? velocity : -velocity;\n animationConfig.width = Math.min(\n swipeableWidth,\n (toState === ButtonsState.LeftOpen ? leftButtonsSumSizeRef : rightButtonsSumSizeRef).current\n );\n animationConfig.config.velocity = v / 1000;\n }\n\n void api.start(animationConfig)[0].then(({ finished }) => {\n if (finished) {\n stateRef.current.candidate = ButtonsState.Close;\n }\n });\n },\n [leftBlockApi, rightBlockApi, swipeableWidth]\n );\n\n const handleSwipeStart: SwipeEventHandler = useCallback(() => {\n if (demoInProgress || swipeLockRef.current) {\n return;\n }\n\n rightBlockApi.stop();\n leftBlockApi.stop();\n onStart?.();\n onResetDemo?.();\n updateSwipeThreshold();\n if (longState !== LongState.Off) {\n setLongState(LongState.Off);\n }\n prevDistance.current = 0;\n setAnimateButtonsWidth(false);\n }, [\n demoInProgress,\n rightBlockApi,\n leftBlockApi,\n onStart,\n onResetDemo,\n updateSwipeThreshold,\n longState,\n setAnimateButtonsWidth,\n ]);\n\n const handleChangeButtonsSizeByDistance = useCallback(\n (distance: number) => {\n // работаем с изменением дистанции, чтобы добавлять ее к существующей ширине\n const distanceDelta = distance - prevDistance.current;\n\n if (distanceDelta === 0) {\n return;\n }\n\n prevDistance.current = distance;\n\n // определяем сторону свайпа, проверяем есть ли с этой стороны кнопки, если есть меняем ширину блока кнопок\n const isLeft =\n stateRef.current.now === ButtonsState.LeftOpen ||\n stateRef.current.candidate === ButtonsState.LeftOpen ||\n (stateRef.current.now !== ButtonsState.RightOpen &&\n stateRef.current.candidate === ButtonsState.Close &&\n distanceDelta > 0);\n const hasButtons = isLeft ? !!leftButtonsRef.current : !!rightButtonsRef.current;\n const api = isLeft ? leftBlockApi : rightBlockApi;\n const currentWidth = api.current[0].get().width;\n\n if (!hasButtons) {\n return;\n }\n\n const width = Math.max(currentWidth + (isLeft ? distanceDelta : -distanceDelta), 0);\n api.set({ width });\n\n // если ширина блока кнопок > 0 фиксируем сторону-кандидат\n // чтобы не было возможности двигать влево-вправо за один свайп\n if (width > 0) {\n stateRef.current.candidate = isLeft ? ButtonsState.LeftOpen : ButtonsState.RightOpen;\n updateSwipeThreshold();\n }\n\n // определяем значение justifyContent у контейнера в зависимости от того, с какой стороны сейчас раскрыты кнопки\n // если раскрыты слева, то контент должен уходить за пределы области в право, ставим flex-start\n // если раскрыты справа, то контент должен уходить за пределы области в лево, ставим flex-end\n // визуально ничего не меняется, потому что контент в контейнере растянут на всю ширину\n if (swipeableRef.current) {\n swipeableRef.current.style.justifyContent =\n stateRef.current.candidate === ButtonsState.RightOpen ? 'flex-end' : 'flex-start';\n }\n\n // определяем выполнены ли условия для перевода компонента в состояние длинного свайпа\n // длинный свайп может быть отключен вообще или может быть недоступен если это сдвиг на проекцию\n const sumSize = isLeft ? leftButtonsSumSizeRef.current : rightButtonsSumSizeRef.current;\n if (useLongSwipe && width > sumSize + MIN_SWIPE_DISTANCE) {\n setLongState(isLeft ? LongState.Left : LongState.Right);\n stateRef.current.next = ButtonsState.Close;\n } else {\n setLongState(LongState.Off);\n }\n },\n [leftBlockApi, rightBlockApi, useLongSwipe, updateSwipeThreshold]\n );\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event: SwipeEvent) => {\n if (demoInProgress || swipeLockRef.current) {\n return;\n }\n // сдвиг в след за пальцем, можем делать длинный свайп\n handleChangeButtonsSizeByDistance(event.distanceX);\n },\n [demoInProgress, handleChangeButtonsSizeByDistance]\n );\n\n const runSwipeAnimation = useCallback(() => {\n if (!swipeableRef.current) {\n return;\n }\n\n if (stateRef.current.next === ButtonsState.Close) {\n // свайп завершен, кнопки должны закрыться, потому что не выполнен минимальный размер раскрытия\n // сбрасываем ширину в 0\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.width = '0';\n }\n leftButtonsSizeRef.current = 0;\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.width = '0';\n }\n rigthButtonsSizeRef.current = 0;\n } else if (stateRef.current.next === ButtonsState.LeftOpen) {\n // выполнено условие раскрытия слева\n // раскрываем кнопки на ширину их контента, но не больше ширины контейнера\n const maxLeftSize = Math.min(swipeableWidth, leftButtonsSumSizeRef.current);\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.width = `${maxLeftSize}px`;\n }\n leftButtonsSizeRef.current = maxLeftSize;\n rigthButtonsSizeRef.current = 0;\n } else if (stateRef.current.next === ButtonsState.RightOpen) {\n // выполнено условие раскрытия справа\n // раскрываем кнопки на ширину их контента, но не больше ширины контейнера\n const maxRightSize = Math.min(swipeableWidth, rightButtonsSumSizeRef.current);\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.width = `${maxRightSize}px`;\n }\n rigthButtonsSizeRef.current = maxRightSize;\n leftButtonsSizeRef.current = 0;\n }\n stateRef.current.now = stateRef.current.next;\n }, [swipeableWidth]);\n\n const handleSwipeFinish: SwipeEventHandler = useCallback(\n (event: SwipeEvent) => {\n if (demoInProgress) {\n return;\n }\n\n onFinish?.();\n\n // если это длинный свайп, то трггерим клик на соответствующую кнопку, и закрываем блок кнопок\n // если не установлен флаг keepStateAfterLong\n if (longState !== LongState.Off) {\n const buttons = longState === LongState.Left ? leftButtons : rightButtons;\n const button = longState === LongState.Left ? buttons?.[0] : buttons?.[buttons.length - 1];\n button?.onClick();\n onResetDemo?.();\n swipeLockRef.current = !!button?.keepStateAfterLong;\n if (!button?.keepStateAfterLong) {\n animateToState(ButtonsState.Close, event.velocityX);\n }\n return;\n }\n\n // если это не длинный свайп, то анимируем к соответствующему состоянию\n // если открыт левый или правый блок, то анимируем в закрытое состояние\n // если закрыты оба блока, то анимируем к открытию стороны-кадидата\n const { now, candidate } = stateRef.current;\n animateToState(\n [ButtonsState.LeftOpen, ButtonsState.RightOpen].includes(now) ? ButtonsState.Close : candidate,\n event.velocityX\n );\n },\n [demoInProgress, longState, leftButtons, rightButtons, onFinish, onResetDemo, animateToState]\n );\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(\n (event) => {\n animateToState(stateRef.current.now, event.velocityX);\n },\n [animateToState]\n );\n\n const swipeHandlers = useSwipe({\n thresholdXRef: swipeThresholdRef,\n onSwipeStart: handleSwipeStart,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeFinish,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const preventHorizontalScroll: EventListener = useCallback((e) => {\n if (Math.abs(prevDistance.current) > MAIN_AXIS_THRESHOLD_PX) {\n e.preventDefault();\n }\n }, []);\n\n const swipebleRefCurrent = swipeableRef.current;\n\n // выключаем вертикальный скролл, если у нас был минимальный горизонтальный скролл, чтобы не дергалось\n useEffect(() => {\n if (swipebleRefCurrent) {\n swipebleRefCurrent.addEventListener('touchmove', preventHorizontalScroll, { passive: false });\n }\n return () => {\n if (swipebleRefCurrent) {\n swipebleRefCurrent.removeEventListener('touchmove', preventHorizontalScroll);\n }\n };\n }, [preventHorizontalScroll, swipebleRefCurrent]);\n\n const getButtonsFromSide = useCallback((side = stateRef.current.now) => {\n const buttons = side === ButtonsState.RightOpen ? rightButtonsRef.current : leftButtonsRef.current;\n const oppositeButtons = buttons === rightButtonsRef.current ? leftButtonsRef.current : rightButtonsRef.current;\n\n return { buttons, oppositeButtons };\n }, []);\n\n const unmountDemoEndHandler = useCallback(\n (event: TransitionEvent) => {\n if (event.propertyName !== 'width') {\n return;\n }\n\n setDemoInProgress(false);\n\n const isTwoSidedSwipe = !!rightButtonsRef.current && !!leftButtonsRef.current;\n const isLeft = isTwoSidedSwipe\n ? twoSidedDemoMode === 'right-to-left' || twoSidedDemoMode === 'left'\n : !!leftButtonsRef.current;\n const buttons = isLeft ? leftButtonsRef.current : rightButtonsRef.current;\n\n buttons?.removeEventListener('transitionend', unmountDemoEndHandler);\n\n rootRef.current?.style.removeProperty('--transition-duration');\n rootRef.current?.style.removeProperty('--transition-delay');\n\n onResetDemo?.();\n onFinishDemo?.();\n },\n [onFinishDemo, onResetDemo, twoSidedDemoMode]\n );\n\n const demoSideAppearHandler = useCallback(\n (event: TransitionEvent) => {\n if (event.propertyName !== 'width') {\n return;\n }\n\n const currentSide = stateRef.current.now;\n const { buttons, oppositeButtons } = getButtonsFromSide(currentSide);\n\n const appearedIsFirstOfSides =\n !!rightButtonsRef.current &&\n !!leftButtonsRef.current &&\n ((currentSide === ButtonsState.LeftOpen && twoSidedDemoMode === 'left-to-right') ||\n (currentSide === ButtonsState.RightOpen && twoSidedDemoMode === 'right-to-left'));\n\n buttons?.removeEventListener('transitionend', demoSideAppearHandler);\n\n if (rootRef.current) {\n rootRef.current.style.setProperty(\n '--transition-duration',\n `${appearedIsFirstOfSides ? demoAppearTime : demoDisappearTime}ms`\n );\n rootRef.current.style.setProperty('--transition-delay', `${demoIdleTime}ms`);\n }\n\n stateRef.current.next = ButtonsState.Close;\n stateRef.current.candidate = stateRef.current.next;\n runSwipeAnimation();\n\n if (appearedIsFirstOfSides) {\n stateRef.current.next =\n currentSide === ButtonsState.LeftOpen ? ButtonsState.RightOpen : ButtonsState.LeftOpen;\n stateRef.current.candidate = stateRef.current.next;\n\n runSwipeAnimation();\n\n const twiceSideTransitionHandler = () => {\n oppositeButtons?.removeEventListener('transitionstart', twiceSideTransitionHandler);\n\n if (oppositeButtons && childrenWrapperRef.current) {\n const isRight = currentSide === ButtonsState.RightOpen;\n\n childrenWrapperRef.current.style.transform = `translateX(${\n isRight ? leftButtonsSumSizeRef.current : -rightButtonsSumSizeRef.current\n }px)`;\n }\n };\n\n oppositeButtons?.addEventListener('transitionstart', twiceSideTransitionHandler);\n oppositeButtons?.addEventListener('transitionend', demoSideAppearHandler);\n } else {\n const startDestroyDemoHandler = () => {\n buttons?.removeEventListener('transitionstart', startDestroyDemoHandler);\n childrenWrapperRef.current?.style.removeProperty('transform');\n };\n\n buttons?.addEventListener('transitionstart', startDestroyDemoHandler);\n buttons?.addEventListener('transitionend', unmountDemoEndHandler);\n }\n },\n [\n getButtonsFromSide,\n twoSidedDemoMode,\n runSwipeAnimation,\n demoAppearTime,\n demoDisappearTime,\n demoIdleTime,\n unmountDemoEndHandler,\n ]\n );\n\n const startDemo = useCallback(\n (side: ButtonsState.RightOpen | ButtonsState.LeftOpen) => {\n onResetDemo?.();\n onStartDemo?.();\n setDemoInProgress(true);\n\n stateRef.current.now = ButtonsState.Close;\n stateRef.current.next = side;\n stateRef.current.candidate = side;\n\n if (swipeableRef.current) {\n swipeableRef.current.style.justifyContent = side === ButtonsState.RightOpen ? 'flex-end' : 'flex-start';\n }\n\n if (rootRef.current) {\n rootRef.current.style.setProperty('--transition-duration', `${demoAppearTime}ms`);\n }\n\n setLongState(LongState.Off);\n setAnimateButtonsWidth(true);\n runSwipeAnimation();\n\n const { buttons } = getButtonsFromSide(side);\n buttons?.addEventListener('transitionend', demoSideAppearHandler);\n },\n [\n demoAppearTime,\n demoSideAppearHandler,\n getButtonsFromSide,\n runSwipeAnimation,\n onResetDemo,\n onStartDemo,\n setAnimateButtonsWidth,\n ]\n );\n\n useEffect(() => {\n if (\n demo &&\n !demoInProgress &&\n stateRef.current.now === ButtonsState.Close &&\n swipeableRef.current?.style.width\n ) {\n const isTwoSidedSwipe = Boolean(rightButtonsRef.current && leftButtonsRef.current);\n\n if (isTwoSidedSwipe) {\n startDemo(\n twoSidedDemoMode === 'right' || twoSidedDemoMode === 'right-to-left'\n ? ButtonsState.RightOpen\n : ButtonsState.LeftOpen\n );\n } else {\n startDemo(rightButtonsRef.current ? ButtonsState.RightOpen : ButtonsState.LeftOpen);\n }\n }\n\n if (!isMobile && demoInProgress) {\n setDemoInProgress(false);\n stateRef.current = {\n candidate: ButtonsState.Close,\n now: ButtonsState.Close,\n next: ButtonsState.Close,\n };\n }\n }, [demo, twoSidedDemoMode, startDemo, demoInProgress, isMobile, onResetDemo]);\n\n // подсчитываем реальный необходимый размер для кнопок\n // и назначаем проперти исходя из положения кнопки (последняя/не последняя)\n const handleButtonContentRef = useCallback(\n (left: boolean, isGrow: boolean) => (ref: HTMLDivElement) => {\n // нужно чтобы посчитать размеры для каждой кнопки один раз (не придумал, как сделать лучше)\n if (sumRefs.current.includes(ref) || !ref) {\n return;\n }\n\n const width = ref?.offsetWidth ?? 0;\n if (!isGrow) {\n ref.style.maxWidth = `${width}px`;\n }\n sumRefs.current.push(ref);\n if (left) {\n leftButtonsSumSizeRef.current += width;\n } else {\n rightButtonsSumSizeRef.current += width;\n }\n },\n []\n );\n\n const renderButtons = (buttons: SwipeButtonsArray, ref: MutableRefObject<HTMLDivElement | null>, left: boolean) => {\n const isTwoSidedDemoInProgress = leftButtons && rightButtons && demoInProgress;\n return (\n <Layer layer={LayerName.Content}>\n <animated.div\n className={classNames(styles.buttons, {\n [styles.buttonsLeft]: left && twoSidedDemoMode === 'right-to-left' && isTwoSidedDemoInProgress,\n [styles.buttonsRight]:\n !left && twoSidedDemoMode === 'left-to-right' && isTwoSidedDemoInProgress,\n })}\n // \"длинная\" кнопка растягивается максимум на ширину контейнера (buttons)\n // чтобы не было видно пустоты между ней и контейнером\n // нужно устанавливать выравнивание в зависимости от стороны\n style={{\n justifyContent: left ? 'flex-start' : 'flex-end',\n ...(left ? leftBlockStyles : rightBlockStyles),\n }}\n ref={ref}\n data-qa={`swipe-buttons-${left ? 'left' : 'right'}`}\n >\n {buttons.map((item, index) => {\n if (!item) {\n return null;\n }\n const isGrow = left ? index === 0 : index === buttons.length - 1;\n const isHide =\n (left && index !== 0 && longState === LongState.Left) ||\n (!left && index !== buttons.length - 1 && longState === LongState.Right);\n const Icon = item.icon;\n const iconProps = item.showLabel\n ? { 'aria-hidden': true, focusable: false }\n : { 'aria-label': item.label };\n return (\n <button\n className={classNames(styles.button, {\n [styles.buttonGrow]: isGrow,\n [styles.buttonHide]: isHide,\n [styles[`button_style-${item.style}`]]: item.style,\n })}\n // это нужно чтобы анимировался длинный свайп.\n // Здесь должно быть значение максимально близкое к тому,\n // какой максимум может занимать одна кнопка, если кнопок больше 1\n style={isGrow ? { maxWidth: `${swipeableWidth}px` } : {}}\n key={index}\n onClick={() => {\n if (demoInProgress) {\n return;\n }\n if (item.closeOnAction) {\n animateToState(ButtonsState.Close, 0);\n }\n item.onClick();\n }}\n data-qa={`swipe-button-${left ? 'left' : 'right'}-${index}`}\n >\n <div\n className={styles.buttonContent}\n ref={handleButtonContentRef(left, isGrow)}\n data-qa={`swipe-button-content-${left ? 'left' : 'right'}-${index}`}\n >\n <div className={styles.buttonContentColumn}>\n {Icon && (\n <div className={styles.iconWrapper}>\n <Icon {...iconProps} />\n </div>\n )}\n {item.showLabel && <span className={styles.buttonLabel}>{item.label}</span>}\n </div>\n </div>\n </button>\n );\n })}\n </animated.div>\n </Layer>\n );\n };\n\n if (!isMobile) {\n return null;\n }\n\n return (\n <div className={styles.root} ref={rootRef} data-qa={dataQa ?? 'swipe-root'}>\n <div\n className={classNames(styles.swipeble)}\n ref={swipeableRef}\n {...swipeHandlers}\n data-qa=\"swipe-swipeable\"\n >\n {!!leftButtons?.length && renderButtons(leftButtons, leftButtonsRef, true)}\n <div ref={childrenWrapperRef} className={styles.childrenWrapper}>\n {children}\n </div>\n {!!rightButtons?.length && renderButtons(rightButtons, rightButtonsRef, false)}\n </div>\n </div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Swipe.js","sources":["../src/Swipe.tsx"],"sourcesContent":["import { FC, MutableRefObject, useCallback, useEffect, useRef, useState } from 'react';\nimport { animated, config, useSpring } from '@react-spring/web';\nimport classNames from 'classnames';\n\nimport { useDebounce } from '@hh.ru/magritte-common-func-utils';\nimport { SwipeEvent, SwipeEventHandler, SwipeThreshold } from '@hh.ru/magritte-common-use-swipe';\nimport { MAIN_AXIS_THRESHOLD_PX, useSwipe } from '@hh.ru/magritte-common-use-swipe/useSwipe';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Layer, LayerName } from '@hh.ru/magritte-ui-layer';\nimport { SwipeButtonsArray, SwipeProps } from '@hh.ru/magritte-ui-swipe/types';\n\nimport styles from './swipe.less';\n\nconst MIN_BUTTON_WIDTH = 76;\nconst OPEN_THRESHOLD = 1 / 3;\nconst MIN_SWIPE_DISTANCE = MIN_BUTTON_WIDTH * OPEN_THRESHOLD;\n\nenum ButtonsState {\n Close = 'close',\n LeftOpen = 'leftOpen',\n RightOpen = 'rightOpen',\n}\n\nenum LongState {\n Off = 'off',\n Left = 'left',\n Right = 'right',\n}\n\nexport const Swipe: FC<SwipeProps> = ({\n children,\n leftButtons,\n rightButtons,\n onStart,\n onFinish,\n useLongSwipe = true,\n 'data-qa': dataQa,\n demo = false,\n twoSidedDemoMode = 'right-to-left',\n demoAppearTime = 200,\n demoIdleTime = 300,\n demoDisappearTime = 200,\n onFinishDemo,\n onStartDemo,\n onResetDemo,\n}) => {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const swipeableRef = useRef<HTMLDivElement | null>(null);\n const childrenWrapperRef = useRef<HTMLDivElement | null>(null);\n const [swipeableWidth, setSwipeableWidth] = useState(0);\n const leftButtonsRef = useRef<HTMLDivElement | null>(null);\n const rightButtonsRef = useRef<HTMLDivElement | null>(null);\n\n const sumRefs = useRef<HTMLDivElement[]>([]); // ссылки на кнопки, по которым считается реальный размер\n const leftButtonsSumSizeRef = useRef(0); // реальный размер, требуемый левым кнопкам\n const rightButtonsSumSizeRef = useRef(0); // реальный размер, требуемый правым кнопкам\n\n const leftButtonsSizeRef = useRef(0); // установленный размер левых кнопок\n const rigthButtonsSizeRef = useRef(0); // установленный размер правых кнопок\n const prevDistance = useRef(0);\n const swipeThresholdRef = useRef<SwipeThreshold>({ max: MIN_SWIPE_DISTANCE });\n const swipeLockRef = useRef(false);\n const { isMobile } = useBreakpoint();\n\n const [leftBlockStyles, leftBlockApi] = useSpring(() => ({\n width: 0,\n }));\n\n const [rightBlockStyles, rightBlockApi] = useSpring(() => ({\n width: 0,\n }));\n\n const [longState, setLongState] = useState(LongState.Off);\n const stateRef = useRef({\n candidate: ButtonsState.Close, // предполагаемое состояние, нужно чтобы нельзя было двигать влево-вправо за один раз\n now: ButtonsState.Close, // текущее состояние\n next: ButtonsState.Close, // следующее состояние, после завершения свайпа\n });\n\n const [demoInProgress, setDemoInProgress] = useState<boolean>(false);\n\n const setAnimateButtonsWidth = useCallback((flag: boolean) => {\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.transitionProperty = flag ? 'width' : 'none';\n }\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.transitionProperty = flag ? 'width' : 'none';\n }\n }, []);\n\n const setWidth = useDebounce(\n useCallback(() => {\n if (swipeableRef.current && childrenWrapperRef.current && rootRef.current) {\n const value: number = rootRef.current.getBoundingClientRect().width;\n // устанавливаем размер области равной размеру контента,\n // чтобы она не растягивалась, когда растягиваются кнопки\n setSwipeableWidth(value);\n swipeableRef.current.style.width = `${value}px`;\n childrenWrapperRef.current.style.width = `${value}px`;\n childrenWrapperRef.current.style.minWidth = `${value}px`;\n }\n }, [setSwipeableWidth]),\n 64\n );\n\n useEffect(() => {\n setWidth();\n }, [setWidth]);\n\n useEffect(() => {\n if (window && isMobile) {\n window.addEventListener('resize', setWidth);\n }\n\n return () => {\n if (window && isMobile) {\n window.removeEventListener('resize', setWidth);\n }\n };\n }, [setWidth, isMobile]);\n\n // обновляет порог срабатывания для useSwipe в зависимости от состояния\n const updateSwipeThreshold = useCallback(() => {\n const { now, candidate } = stateRef.current;\n\n // если открыта одна из сторон, то мы можем свайпнуть к закрытию, или к активации длинного свайпа\n if ([ButtonsState.LeftOpen, ButtonsState.RightOpen].includes(now)) {\n swipeThresholdRef.current =\n now === ButtonsState.LeftOpen\n ? {\n // свайп к закрытию\n minDelta: -MIN_SWIPE_DISTANCE,\n // свайп к активации длинного свайпа\n maxDelta: useLongSwipe ? MIN_SWIPE_DISTANCE : Number.MAX_SAFE_INTEGER,\n }\n : {\n // свайп к закрытию\n maxDelta: MIN_SWIPE_DISTANCE,\n // свайп к активации длинного свайпа\n minDelta: useLongSwipe ? -MIN_SWIPE_DISTANCE : -Number.MAX_SAFE_INTEGER,\n };\n } else if (candidate === ButtonsState.LeftOpen) {\n // если кандидат на открытие слева, то мы можем свайпнуть к открытию слева\n swipeThresholdRef.current = { maxDelta: MIN_SWIPE_DISTANCE };\n } else if (candidate === ButtonsState.RightOpen) {\n // если кандидат на открытие справа, то мы можем свайпнуть к открытию справа, дельта с отрицательным знаком\n // потому что свайпаем вправо\n swipeThresholdRef.current = { minDelta: -MIN_SWIPE_DISTANCE };\n }\n }, [useLongSwipe]);\n\n // анимирует размер кнопок для перехода в переданное состояние\n const animateToState = useCallback(\n (toState: ButtonsState, velocity: number) => {\n leftBlockApi.stop();\n rightBlockApi.stop();\n stateRef.current.now = toState;\n\n const animationConfig = {\n width: 0,\n config: {\n ...config.gentle,\n clamp: true,\n velocity: 0,\n },\n };\n let api: typeof leftBlockApi | typeof rightBlockApi;\n\n // если нужно закрыть кнопки, то сначала определяем с какой стороны кнопки открыты\n // получаем апи для акнимации кнопок с нужной стороны\n // вычисляем начальную скорость, т.к. анимация закрытия кнопок с разных сторон направлена в разные стороны\n // то для правой стороны нужно поменять знак начальной скорости\n if (toState === ButtonsState.Close) {\n const fromLeft = leftBlockApi.current[0].get().width > 0;\n api = fromLeft ? leftBlockApi : rightBlockApi;\n const v = fromLeft ? velocity : -velocity;\n\n // скорость делим на 1000 т.к. в событии приходит скорость в пикселях в секунду\n // а нужна в пикселях в миллисекунду\n animationConfig.config.velocity = v / 1000;\n } else {\n // если нужно открыть кнопки, то получаем апи для анимации блока кнопок с нужной стороны\n // вычисляем начальную скорость, т.к. анимация открытия кнопок с разных сторон направлена в разные стороны\n // то для правой стороны нужно поменять знак начальной скорости\n api = toState === ButtonsState.LeftOpen ? leftBlockApi : rightBlockApi;\n const v = toState === ButtonsState.LeftOpen ? velocity : -velocity;\n animationConfig.width = Math.min(\n swipeableWidth,\n (toState === ButtonsState.LeftOpen ? leftButtonsSumSizeRef : rightButtonsSumSizeRef).current\n );\n animationConfig.config.velocity = v / 1000;\n }\n\n void api.start(animationConfig)[0].then(({ finished }) => {\n if (finished) {\n stateRef.current.candidate = ButtonsState.Close;\n }\n });\n },\n [leftBlockApi, rightBlockApi, swipeableWidth]\n );\n\n const handleSwipeStart: SwipeEventHandler = useCallback(() => {\n if (demoInProgress || swipeLockRef.current) {\n return;\n }\n\n rightBlockApi.stop();\n leftBlockApi.stop();\n onStart?.();\n onResetDemo?.();\n updateSwipeThreshold();\n if (longState !== LongState.Off) {\n setLongState(LongState.Off);\n }\n prevDistance.current = 0;\n setAnimateButtonsWidth(false);\n }, [\n demoInProgress,\n rightBlockApi,\n leftBlockApi,\n onStart,\n onResetDemo,\n updateSwipeThreshold,\n longState,\n setAnimateButtonsWidth,\n ]);\n\n const handleChangeButtonsSizeByDistance = useCallback(\n (distance: number) => {\n // работаем с изменением дистанции, чтобы добавлять ее к существующей ширине\n const distanceDelta = distance - prevDistance.current;\n\n if (distanceDelta === 0) {\n return;\n }\n\n prevDistance.current = distance;\n\n // определяем сторону свайпа, проверяем есть ли с этой стороны кнопки, если есть меняем ширину блока кнопок\n const isLeft =\n stateRef.current.now === ButtonsState.LeftOpen ||\n stateRef.current.candidate === ButtonsState.LeftOpen ||\n (stateRef.current.now !== ButtonsState.RightOpen &&\n stateRef.current.candidate === ButtonsState.Close &&\n distanceDelta > 0);\n const hasButtons = isLeft ? !!leftButtonsRef.current : !!rightButtonsRef.current;\n const api = isLeft ? leftBlockApi : rightBlockApi;\n const currentWidth = api.current[0].get().width;\n\n if (!hasButtons) {\n return;\n }\n\n const width = Math.max(currentWidth + (isLeft ? distanceDelta : -distanceDelta), 0);\n api.set({ width });\n\n // если ширина блока кнопок > 0 фиксируем сторону-кандидат\n // чтобы не было возможности двигать влево-вправо за один свайп\n if (width > 0) {\n stateRef.current.candidate = isLeft ? ButtonsState.LeftOpen : ButtonsState.RightOpen;\n updateSwipeThreshold();\n }\n\n // определяем значение justifyContent у контейнера в зависимости от того, с какой стороны сейчас раскрыты кнопки\n // если раскрыты слева, то контент должен уходить за пределы области в право, ставим flex-start\n // если раскрыты справа, то контент должен уходить за пределы области в лево, ставим flex-end\n // визуально ничего не меняется, потому что контент в контейнере растянут на всю ширину\n if (swipeableRef.current) {\n swipeableRef.current.style.justifyContent =\n stateRef.current.candidate === ButtonsState.RightOpen ? 'flex-end' : 'flex-start';\n }\n\n // определяем выполнены ли условия для перевода компонента в состояние длинного свайпа\n // длинный свайп может быть отключен вообще или может быть недоступен если это сдвиг на проекцию\n const sumSize = isLeft ? leftButtonsSumSizeRef.current : rightButtonsSumSizeRef.current;\n if (useLongSwipe && width > sumSize + MIN_SWIPE_DISTANCE) {\n setLongState(isLeft ? LongState.Left : LongState.Right);\n stateRef.current.next = ButtonsState.Close;\n } else {\n setLongState(LongState.Off);\n }\n },\n [leftBlockApi, rightBlockApi, useLongSwipe, updateSwipeThreshold]\n );\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event: SwipeEvent) => {\n if (demoInProgress || swipeLockRef.current) {\n return;\n }\n // сдвиг в след за пальцем, можем делать длинный свайп\n handleChangeButtonsSizeByDistance(event.distanceX);\n },\n [demoInProgress, handleChangeButtonsSizeByDistance]\n );\n\n const runSwipeAnimation = useCallback(() => {\n if (!swipeableRef.current) {\n return;\n }\n\n if (stateRef.current.next === ButtonsState.Close) {\n // свайп завершен, кнопки должны закрыться, потому что не выполнен минимальный размер раскрытия\n // сбрасываем ширину в 0\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.width = '0';\n }\n leftButtonsSizeRef.current = 0;\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.width = '0';\n }\n rigthButtonsSizeRef.current = 0;\n } else if (stateRef.current.next === ButtonsState.LeftOpen) {\n // выполнено условие раскрытия слева\n // раскрываем кнопки на ширину их контента, но не больше ширины контейнера\n const maxLeftSize = Math.min(swipeableWidth, leftButtonsSumSizeRef.current);\n if (leftButtonsRef.current) {\n leftButtonsRef.current.style.width = `${maxLeftSize}px`;\n }\n leftButtonsSizeRef.current = maxLeftSize;\n rigthButtonsSizeRef.current = 0;\n } else if (stateRef.current.next === ButtonsState.RightOpen) {\n // выполнено условие раскрытия справа\n // раскрываем кнопки на ширину их контента, но не больше ширины контейнера\n const maxRightSize = Math.min(swipeableWidth, rightButtonsSumSizeRef.current);\n if (rightButtonsRef.current) {\n rightButtonsRef.current.style.width = `${maxRightSize}px`;\n }\n rigthButtonsSizeRef.current = maxRightSize;\n leftButtonsSizeRef.current = 0;\n }\n stateRef.current.now = stateRef.current.next;\n }, [swipeableWidth]);\n\n const handleSwipeFinish: SwipeEventHandler = useCallback(\n (event: SwipeEvent) => {\n if (demoInProgress) {\n return;\n }\n\n onFinish?.();\n\n // если это длинный свайп, то трггерим клик на соответствующую кнопку, и закрываем блок кнопок\n // если не установлен флаг keepStateAfterLong\n if (longState !== LongState.Off) {\n const buttons = longState === LongState.Left ? leftButtons : rightButtons;\n const button = longState === LongState.Left ? buttons?.[0] : buttons?.[buttons.length - 1];\n button?.onClick();\n onResetDemo?.();\n swipeLockRef.current = !!button?.keepStateAfterLong;\n if (!button?.keepStateAfterLong) {\n animateToState(ButtonsState.Close, event.velocityX);\n }\n return;\n }\n\n // если это не длинный свайп, то анимируем к соответствующему состоянию\n // если открыт левый или правый блок, то анимируем в закрытое состояние\n // если закрыты оба блока, то анимируем к открытию стороны-кадидата\n const { now, candidate } = stateRef.current;\n animateToState(\n [ButtonsState.LeftOpen, ButtonsState.RightOpen].includes(now) ? ButtonsState.Close : candidate,\n event.velocityX\n );\n },\n [demoInProgress, longState, leftButtons, rightButtons, onFinish, onResetDemo, animateToState]\n );\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(\n (event) => {\n animateToState(stateRef.current.now, event.velocityX);\n },\n [animateToState]\n );\n\n const swipeHandlers = useSwipe({\n thresholdXRef: swipeThresholdRef,\n onSwipeStart: handleSwipeStart,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeFinish,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const preventHorizontalScroll: EventListener = useCallback((e) => {\n if (Math.abs(prevDistance.current) > MAIN_AXIS_THRESHOLD_PX) {\n e.preventDefault();\n }\n }, []);\n\n const swipebleRefCurrent = swipeableRef.current;\n\n // выключаем вертикальный скролл, если у нас был минимальный горизонтальный скролл, чтобы не дергалось\n useEffect(() => {\n if (swipebleRefCurrent) {\n swipebleRefCurrent.addEventListener('touchmove', preventHorizontalScroll, { passive: false });\n }\n return () => {\n if (swipebleRefCurrent) {\n swipebleRefCurrent.removeEventListener('touchmove', preventHorizontalScroll);\n }\n };\n }, [preventHorizontalScroll, swipebleRefCurrent]);\n\n const getButtonsFromSide = useCallback((side = stateRef.current.now) => {\n const buttons = side === ButtonsState.RightOpen ? rightButtonsRef.current : leftButtonsRef.current;\n const oppositeButtons = buttons === rightButtonsRef.current ? leftButtonsRef.current : rightButtonsRef.current;\n\n return { buttons, oppositeButtons };\n }, []);\n\n const unmountDemoEndHandler = useCallback(\n (event: TransitionEvent) => {\n if (event.propertyName !== 'width') {\n return;\n }\n\n setDemoInProgress(false);\n\n const isTwoSidedSwipe = !!rightButtonsRef.current && !!leftButtonsRef.current;\n const isLeft = isTwoSidedSwipe\n ? twoSidedDemoMode === 'right-to-left' || twoSidedDemoMode === 'left'\n : !!leftButtonsRef.current;\n const buttons = isLeft ? leftButtonsRef.current : rightButtonsRef.current;\n\n buttons?.removeEventListener('transitionend', unmountDemoEndHandler);\n\n rootRef.current?.style.removeProperty('--transition-duration');\n rootRef.current?.style.removeProperty('--transition-delay');\n\n onResetDemo?.();\n onFinishDemo?.();\n },\n [onFinishDemo, onResetDemo, twoSidedDemoMode]\n );\n\n const demoSideAppearHandler = useCallback(\n (event: TransitionEvent) => {\n if (event.propertyName !== 'width') {\n return;\n }\n\n const currentSide = stateRef.current.now;\n const { buttons, oppositeButtons } = getButtonsFromSide(currentSide);\n\n const appearedIsFirstOfSides =\n !!rightButtonsRef.current &&\n !!leftButtonsRef.current &&\n ((currentSide === ButtonsState.LeftOpen && twoSidedDemoMode === 'left-to-right') ||\n (currentSide === ButtonsState.RightOpen && twoSidedDemoMode === 'right-to-left'));\n\n buttons?.removeEventListener('transitionend', demoSideAppearHandler);\n\n if (rootRef.current) {\n rootRef.current.style.setProperty(\n '--transition-duration',\n `${appearedIsFirstOfSides ? demoAppearTime : demoDisappearTime}ms`\n );\n rootRef.current.style.setProperty('--transition-delay', `${demoIdleTime}ms`);\n }\n\n stateRef.current.next = ButtonsState.Close;\n stateRef.current.candidate = stateRef.current.next;\n runSwipeAnimation();\n\n if (appearedIsFirstOfSides) {\n stateRef.current.next =\n currentSide === ButtonsState.LeftOpen ? ButtonsState.RightOpen : ButtonsState.LeftOpen;\n stateRef.current.candidate = stateRef.current.next;\n\n runSwipeAnimation();\n\n const twiceSideTransitionHandler = () => {\n oppositeButtons?.removeEventListener('transitionstart', twiceSideTransitionHandler);\n\n if (oppositeButtons && childrenWrapperRef.current) {\n const isRight = currentSide === ButtonsState.RightOpen;\n\n childrenWrapperRef.current.style.transform = `translateX(${\n isRight ? leftButtonsSumSizeRef.current : -rightButtonsSumSizeRef.current\n }px)`;\n }\n };\n\n oppositeButtons?.addEventListener('transitionstart', twiceSideTransitionHandler);\n oppositeButtons?.addEventListener('transitionend', demoSideAppearHandler);\n } else {\n const startDestroyDemoHandler = () => {\n buttons?.removeEventListener('transitionstart', startDestroyDemoHandler);\n childrenWrapperRef.current?.style.removeProperty('transform');\n };\n\n buttons?.addEventListener('transitionstart', startDestroyDemoHandler);\n buttons?.addEventListener('transitionend', unmountDemoEndHandler);\n }\n },\n [\n getButtonsFromSide,\n twoSidedDemoMode,\n runSwipeAnimation,\n demoAppearTime,\n demoDisappearTime,\n demoIdleTime,\n unmountDemoEndHandler,\n ]\n );\n\n const startDemo = useCallback(\n (side: ButtonsState.RightOpen | ButtonsState.LeftOpen) => {\n onResetDemo?.();\n onStartDemo?.();\n setDemoInProgress(true);\n\n stateRef.current.now = ButtonsState.Close;\n stateRef.current.next = side;\n stateRef.current.candidate = side;\n\n if (swipeableRef.current) {\n swipeableRef.current.style.justifyContent = side === ButtonsState.RightOpen ? 'flex-end' : 'flex-start';\n }\n\n if (rootRef.current) {\n rootRef.current.style.setProperty('--transition-duration', `${demoAppearTime}ms`);\n }\n\n setLongState(LongState.Off);\n setAnimateButtonsWidth(true);\n runSwipeAnimation();\n\n const { buttons } = getButtonsFromSide(side);\n buttons?.addEventListener('transitionend', demoSideAppearHandler);\n },\n [\n demoAppearTime,\n demoSideAppearHandler,\n getButtonsFromSide,\n runSwipeAnimation,\n onResetDemo,\n onStartDemo,\n setAnimateButtonsWidth,\n ]\n );\n\n useEffect(() => {\n if (\n demo &&\n !demoInProgress &&\n stateRef.current.now === ButtonsState.Close &&\n swipeableRef.current?.style.width\n ) {\n const isTwoSidedSwipe = Boolean(rightButtonsRef.current && leftButtonsRef.current);\n\n if (isTwoSidedSwipe) {\n startDemo(\n twoSidedDemoMode === 'right' || twoSidedDemoMode === 'right-to-left'\n ? ButtonsState.RightOpen\n : ButtonsState.LeftOpen\n );\n } else {\n startDemo(rightButtonsRef.current ? ButtonsState.RightOpen : ButtonsState.LeftOpen);\n }\n }\n\n if (!isMobile && demoInProgress) {\n setDemoInProgress(false);\n stateRef.current = {\n candidate: ButtonsState.Close,\n now: ButtonsState.Close,\n next: ButtonsState.Close,\n };\n }\n }, [demo, twoSidedDemoMode, startDemo, demoInProgress, isMobile, onResetDemo]);\n\n // подсчитываем реальный необходимый размер для кнопок\n // и назначаем проперти исходя из положения кнопки (последняя/не последняя)\n const handleButtonContentRef = useCallback(\n (left: boolean, isGrow: boolean) => (ref: HTMLDivElement) => {\n // нужно чтобы посчитать размеры для каждой кнопки один раз (не придумал, как сделать лучше)\n if (sumRefs.current.includes(ref) || !ref) {\n return;\n }\n\n const width = ref?.offsetWidth ?? 0;\n if (!isGrow) {\n ref.style.maxWidth = `${width}px`;\n }\n sumRefs.current.push(ref);\n if (left) {\n leftButtonsSumSizeRef.current += width;\n } else {\n rightButtonsSumSizeRef.current += width;\n }\n },\n []\n );\n\n const renderButtons = (buttons: SwipeButtonsArray, ref: MutableRefObject<HTMLDivElement | null>, left: boolean) => {\n const isTwoSidedDemoInProgress = leftButtons && rightButtons && demoInProgress;\n return (\n <Layer layer={LayerName.Content}>\n <animated.div\n className={classNames(styles.buttons, {\n [styles.buttonsLeft]: left && twoSidedDemoMode === 'right-to-left' && isTwoSidedDemoInProgress,\n [styles.buttonsRight]:\n !left && twoSidedDemoMode === 'left-to-right' && isTwoSidedDemoInProgress,\n })}\n // \"длинная\" кнопка растягивается максимум на ширину контейнера (buttons)\n // чтобы не было видно пустоты между ней и контейнером\n // нужно устанавливать выравнивание в зависимости от стороны\n style={{\n justifyContent: left ? 'flex-start' : 'flex-end',\n ...(left ? leftBlockStyles : rightBlockStyles),\n }}\n ref={ref}\n data-qa={`swipe-buttons-${left ? 'left' : 'right'}`}\n >\n {buttons.map((item, index) => {\n if (!item) {\n return null;\n }\n const isGrow = left ? index === 0 : index === buttons.length - 1;\n const isHide =\n (left && index !== 0 && longState === LongState.Left) ||\n (!left && index !== buttons.length - 1 && longState === LongState.Right);\n const Icon = item.icon;\n const iconProps = item.showLabel\n ? { 'aria-hidden': true, focusable: false }\n : { 'aria-label': item.label };\n return (\n <button\n className={classNames(styles.button, {\n [styles.buttonGrow]: isGrow,\n [styles.buttonHide]: isHide,\n [styles[`button_style-${item.style}`]]: item.style,\n })}\n // это нужно чтобы анимировался длинный свайп.\n // Здесь должно быть значение максимально близкое к тому,\n // какой максимум может занимать одна кнопка, если кнопок больше 1\n style={isGrow ? { maxWidth: `${swipeableWidth}px` } : {}}\n key={index}\n onClick={() => {\n if (demoInProgress) {\n return;\n }\n if (item.closeOnAction) {\n animateToState(ButtonsState.Close, 0);\n }\n item.onClick();\n }}\n data-qa={`swipe-button-${left ? 'left' : 'right'}-${index}`}\n >\n <div\n className={styles.buttonContent}\n ref={handleButtonContentRef(left, isGrow)}\n data-qa={`swipe-button-content-${left ? 'left' : 'right'}-${index}`}\n >\n <div className={styles.buttonContentColumn}>\n {Icon && (\n <div className={styles.iconWrapper}>\n <Icon {...iconProps} />\n </div>\n )}\n {item.showLabel && <span className={styles.buttonLabel}>{item.label}</span>}\n </div>\n </div>\n </button>\n );\n })}\n </animated.div>\n </Layer>\n );\n };\n\n if (!isMobile) {\n return null;\n }\n\n return (\n <div className={styles.root} ref={rootRef} data-qa={dataQa ?? 'swipe-root'}>\n <div\n className={classNames(styles.swipeble)}\n ref={swipeableRef}\n {...swipeHandlers}\n data-qa=\"swipe-swipeable\"\n >\n {!!leftButtons?.length && renderButtons(leftButtons, leftButtonsRef, true)}\n <div ref={childrenWrapperRef} className={styles.childrenWrapper}>\n {children}\n </div>\n {!!rightButtons?.length && renderButtons(rightButtons, rightButtonsRef, false)}\n </div>\n </div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;AAaA,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAE7D,IAAK,YAIJ,CAAA;AAJD,CAAA,UAAK,YAAY,EAAA;AACb,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAJI,YAAY,KAAZ,YAAY,GAIhB,EAAA,CAAA,CAAA,CAAA;AAED,IAAK,SAIJ,CAAA;AAJD,CAAA,UAAK,SAAS,EAAA;AACV,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACnB,CAAC,EAJI,SAAS,KAAT,SAAS,GAIb,EAAA,CAAA,CAAA,CAAA;MAEY,KAAK,GAAmB,CAAC,EAClC,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,YAAY,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAG,KAAK,EACZ,gBAAgB,GAAG,eAAe,EAClC,cAAc,GAAG,GAAG,EACpB,YAAY,GAAG,GAAG,EAClB,iBAAiB,GAAG,GAAG,EACvB,YAAY,EACZ,WAAW,EACX,WAAW,GACd,KAAI;AACD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;AACpD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;AACzD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;AAC3D,IAAA,MAAM,eAAe,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,MAAM,CAAmB,EAAE,CAAC,CAAC;IAC7C,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,iBAAiB,GAAG,MAAM,CAAiB,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC9E,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IAErC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,SAAS,CAAC,OAAO;AACrD,QAAA,KAAK,EAAE,CAAC;AACX,KAAA,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC,OAAO;AACvD,QAAA,KAAK,EAAE,CAAC;AACX,KAAA,CAAC,CAAC,CAAC;AAEJ,IAAA,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC;QACpB,SAAS,EAAE,YAAY,CAAC,KAAK;QAC7B,GAAG,EAAE,YAAY,CAAC,KAAK;AACvB,QAAA,IAAI,EAAE,YAAY,CAAC,KAAK;AAC3B,KAAA,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;AAErE,IAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,IAAa,KAAI;QACzD,IAAI,cAAc,CAAC,OAAO,EAAE;AACxB,YAAA,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;AAC7E,SAAA;QACD,IAAI,eAAe,CAAC,OAAO,EAAE;AACzB,YAAA,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;AAC9E,SAAA;KACJ,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,QAAQ,GAAG,WAAW,CACxB,WAAW,CAAC,MAAK;QACb,IAAI,YAAY,CAAC,OAAO,IAAI,kBAAkB,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;YACvE,MAAM,KAAK,GAAW,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;;;YAGpE,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;YAChD,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;YACtD,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;AAC5D,SAAA;KACJ,EAAE,CAAC,iBAAiB,CAAC,CAAC,EACvB,EAAE,CACL,CAAC;IAEF,SAAS,CAAC,MAAK;AACX,QAAA,QAAQ,EAAE,CAAC;AACf,KAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,MAAK;QACX,IAAI,MAAM,IAAI,QAAQ,EAAE;AACpB,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,OAAO,MAAK;YACR,IAAI,MAAM,IAAI,QAAQ,EAAE;AACpB,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAClD,aAAA;AACL,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;;AAGzB,IAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAK;QAC1C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;;AAG5C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/D,YAAA,iBAAiB,CAAC,OAAO;gBACrB,GAAG,KAAK,YAAY,CAAC,QAAQ;AACzB,sBAAE;;wBAEI,QAAQ,EAAE,CAAC,kBAAkB;;wBAE7B,QAAQ,EAAE,YAAY,GAAG,kBAAkB,GAAG,MAAM,CAAC,gBAAgB;AACxE,qBAAA;AACH,sBAAE;;AAEI,wBAAA,QAAQ,EAAE,kBAAkB;;AAE5B,wBAAA,QAAQ,EAAE,YAAY,GAAG,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,gBAAgB;qBAC1E,CAAC;AACf,SAAA;AAAM,aAAA,IAAI,SAAS,KAAK,YAAY,CAAC,QAAQ,EAAE;;YAE5C,iBAAiB,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AAChE,SAAA;AAAM,aAAA,IAAI,SAAS,KAAK,YAAY,CAAC,SAAS,EAAE;;;YAG7C,iBAAiB,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,kBAAkB,EAAE,CAAC;AACjE,SAAA;AACL,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;;IAGnB,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,OAAqB,EAAE,QAAgB,KAAI;QACxC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,aAAa,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;AAE/B,QAAA,MAAM,eAAe,GAAG;AACpB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE;gBACJ,GAAG,MAAM,CAAC,MAAM;AAChB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,CAAC;AACd,aAAA;SACJ,CAAC;AACF,QAAA,IAAI,GAA+C,CAAC;;;;;AAMpD,QAAA,IAAI,OAAO,KAAK,YAAY,CAAC,KAAK,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YACzD,GAAG,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;AAC9C,YAAA,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;;;YAI1C,eAAe,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC;AAC9C,SAAA;AAAM,aAAA;;;;AAIH,YAAA,GAAG,GAAG,OAAO,KAAK,YAAY,CAAC,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;AACvE,YAAA,MAAM,CAAC,GAAG,OAAO,KAAK,YAAY,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACnE,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAC5B,cAAc,EACd,CAAC,OAAO,KAAK,YAAY,CAAC,QAAQ,GAAG,qBAAqB,GAAG,sBAAsB,EAAE,OAAO,CAC/F,CAAC;YACF,eAAe,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC;AAC9C,SAAA;AAED,QAAA,KAAK,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAI;AACrD,YAAA,IAAI,QAAQ,EAAE;gBACV,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACnD,aAAA;AACL,SAAC,CAAC,CAAC;KACN,EACD,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,CAChD,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAsB,WAAW,CAAC,MAAK;AACzD,QAAA,IAAI,cAAc,IAAI,YAAY,CAAC,OAAO,EAAE;YACxC,OAAO;AACV,SAAA;QAED,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;QACZ,WAAW,IAAI,CAAC;AAChB,QAAA,oBAAoB,EAAE,CAAC;AACvB,QAAA,IAAI,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE;AAC7B,YAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;QACzB,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAClC,KAAC,EAAE;QACC,cAAc;QACd,aAAa;QACb,YAAY;QACZ,OAAO;QACP,WAAW;QACX,oBAAoB;QACpB,SAAS;QACT,sBAAsB;AACzB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,iCAAiC,GAAG,WAAW,CACjD,CAAC,QAAgB,KAAI;;AAEjB,QAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;QAEtD,IAAI,aAAa,KAAK,CAAC,EAAE;YACrB,OAAO;AACV,SAAA;AAED,QAAA,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC;;QAGhC,MAAM,MAAM,GACR,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,QAAQ;AAC9C,YAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,YAAY,CAAC,QAAQ;aACnD,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,SAAS;AAC5C,gBAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,YAAY,CAAC,KAAK;gBACjD,aAAa,GAAG,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC;AAClD,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAEhD,IAAI,CAAC,UAAU,EAAE;YACb,OAAO;AACV,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,GAAG,aAAa,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,QAAA,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;;;QAInB,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC;AACrF,YAAA,oBAAoB,EAAE,CAAC;AAC1B,SAAA;;;;;QAMD,IAAI,YAAY,CAAC,OAAO,EAAE;AACtB,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc;AACrC,gBAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,YAAY,CAAC,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AACzF,SAAA;;;AAID,QAAA,MAAM,OAAO,GAAG,MAAM,GAAG,qBAAqB,CAAC,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC;AACxF,QAAA,IAAI,YAAY,IAAI,KAAK,GAAG,OAAO,GAAG,kBAAkB,EAAE;AACtD,YAAA,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YACxD,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;AAC9C,SAAA;AAAM,aAAA;AACH,YAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;KACJ,EACD,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,CAAC,CACpE,CAAC;AAEF,IAAA,MAAM,eAAe,GAAsB,WAAW,CAClD,CAAC,KAAiB,KAAI;AAClB,QAAA,IAAI,cAAc,IAAI,YAAY,CAAC,OAAO,EAAE;YACxC,OAAO;AACV,SAAA;;AAED,QAAA,iCAAiC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACvD,KAAC,EACD,CAAC,cAAc,EAAE,iCAAiC,CAAC,CACtD,CAAC;AAEF,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YACvB,OAAO;AACV,SAAA;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,EAAE;;;YAG9C,IAAI,cAAc,CAAC,OAAO,EAAE;gBACxB,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC5C,aAAA;AACD,YAAA,kBAAkB,CAAC,OAAO,GAAG,CAAC,CAAC;YAC/B,IAAI,eAAe,CAAC,OAAO,EAAE;gBACzB,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC7C,aAAA;AACD,YAAA,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;AACnC,SAAA;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,QAAQ,EAAE;;;AAGxD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5E,IAAI,cAAc,CAAC,OAAO,EAAE;gBACxB,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,WAAW,CAAA,EAAA,CAAI,CAAC;AAC3D,aAAA;AACD,YAAA,kBAAkB,CAAC,OAAO,GAAG,WAAW,CAAC;AACzC,YAAA,mBAAmB,CAAC,OAAO,GAAG,CAAC,CAAC;AACnC,SAAA;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE;;;AAGzD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,eAAe,CAAC,OAAO,EAAE;gBACzB,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI,CAAC;AAC7D,aAAA;AACD,YAAA,mBAAmB,CAAC,OAAO,GAAG,YAAY,CAAC;AAC3C,YAAA,kBAAkB,CAAC,OAAO,GAAG,CAAC,CAAC;AAClC,SAAA;QACD,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACjD,KAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AAErB,IAAA,MAAM,iBAAiB,GAAsB,WAAW,CACpD,CAAC,KAAiB,KAAI;AAClB,QAAA,IAAI,cAAc,EAAE;YAChB,OAAO;AACV,SAAA;QAED,QAAQ,IAAI,CAAC;;;AAIb,QAAA,IAAI,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE;AAC7B,YAAA,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC;YAC1E,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3F,MAAM,EAAE,OAAO,EAAE,CAAC;YAClB,WAAW,IAAI,CAAC;YAChB,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACpD,YAAA,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE;gBAC7B,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACvD,aAAA;YACD,OAAO;AACV,SAAA;;;;QAKD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC5C,QAAA,cAAc,CACV,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,SAAS,EAC9F,KAAK,CAAC,SAAS,CAClB,CAAC;AACN,KAAC,EACD,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC,CAChG,CAAC;AAEF,IAAA,MAAM,iBAAiB,GAAsB,WAAW,CACpD,CAAC,KAAK,KAAI;QACN,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1D,KAAC,EACD,CAAC,cAAc,CAAC,CACnB,CAAC;IAEF,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC3B,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,YAAY,EAAE,gBAAgB;AAC9B,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,UAAU,EAAE,iBAAiB;AAC7B,QAAA,aAAa,EAAE,iBAAiB;AACnC,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,uBAAuB,GAAkB,WAAW,CAAC,CAAC,CAAC,KAAI;QAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,sBAAsB,EAAE;YACzD,CAAC,CAAC,cAAc,EAAE,CAAC;AACtB,SAAA;KACJ,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC;;IAGhD,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,kBAAkB,EAAE;AACpB,YAAA,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EAAE,uBAAuB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACjG,SAAA;AACD,QAAA,OAAO,MAAK;AACR,YAAA,IAAI,kBAAkB,EAAE;AACpB,gBAAA,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;AAChF,aAAA;AACL,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAElD,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAI;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,YAAY,CAAC,SAAS,GAAG,eAAe,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;AACnG,QAAA,MAAM,eAAe,GAAG,OAAO,KAAK,eAAe,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AAE/G,QAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;KACvC,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,KAAsB,KAAI;AACvB,QAAA,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE;YAChC,OAAO;AACV,SAAA;QAED,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAEzB,QAAA,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;QAC9E,MAAM,MAAM,GAAG,eAAe;AAC1B,cAAE,gBAAgB,KAAK,eAAe,IAAI,gBAAgB,KAAK,MAAM;AACrE,cAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AAE1E,QAAA,OAAO,EAAE,mBAAmB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAErE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QAC/D,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAE5D,WAAW,IAAI,CAAC;QAChB,YAAY,IAAI,CAAC;KACpB,EACD,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAChD,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,KAAsB,KAAI;AACvB,QAAA,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE;YAChC,OAAO;AACV,SAAA;AAED,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAErE,QAAA,MAAM,sBAAsB,GACxB,CAAC,CAAC,eAAe,CAAC,OAAO;YACzB,CAAC,CAAC,cAAc,CAAC,OAAO;aACvB,CAAC,WAAW,KAAK,YAAY,CAAC,QAAQ,IAAI,gBAAgB,KAAK,eAAe;iBAC1E,WAAW,KAAK,YAAY,CAAC,SAAS,IAAI,gBAAgB,KAAK,eAAe,CAAC,CAAC,CAAC;AAE1F,QAAA,OAAO,EAAE,mBAAmB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAErE,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC7B,uBAAuB,EACvB,CAAA,EAAG,sBAAsB,GAAG,cAAc,GAAG,iBAAiB,CAAI,EAAA,CAAA,CACrE,CAAC;AACF,YAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;AAChF,SAAA;QAED,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACnD,QAAA,iBAAiB,EAAE,CAAC;AAEpB,QAAA,IAAI,sBAAsB,EAAE;YACxB,QAAQ,CAAC,OAAO,CAAC,IAAI;AACjB,gBAAA,WAAW,KAAK,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC;YAC3F,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAEnD,YAAA,iBAAiB,EAAE,CAAC;YAEpB,MAAM,0BAA0B,GAAG,MAAK;AACpC,gBAAA,eAAe,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;AAEpF,gBAAA,IAAI,eAAe,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC/C,oBAAA,MAAM,OAAO,GAAG,WAAW,KAAK,YAAY,CAAC,SAAS,CAAC;oBAEvD,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CACzC,WAAA,EAAA,OAAO,GAAG,qBAAqB,CAAC,OAAO,GAAG,CAAC,sBAAsB,CAAC,OACtE,CAAA,GAAA,CAAK,CAAC;AACT,iBAAA;AACL,aAAC,CAAC;AAEF,YAAA,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;AACjF,YAAA,eAAe,EAAE,gBAAgB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;AAC7E,SAAA;AAAM,aAAA;YACH,MAAM,uBAAuB,GAAG,MAAK;AACjC,gBAAA,OAAO,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;gBACzE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAClE,aAAC,CAAC;AAEF,YAAA,OAAO,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;AACtE,YAAA,OAAO,EAAE,gBAAgB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;AACrE,SAAA;AACL,KAAC,EACD;QACI,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,cAAc;QACd,iBAAiB;QACjB,YAAY;QACZ,qBAAqB;AACxB,KAAA,CACJ,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,WAAW,CACzB,CAAC,IAAoD,KAAI;QACrD,WAAW,IAAI,CAAC;QAChB,WAAW,IAAI,CAAC;QAChB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExB,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;AAC1C,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,QAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QAElC,IAAI,YAAY,CAAC,OAAO,EAAE;YACtB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,KAAK,YAAY,CAAC,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAC3G,SAAA;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAA,EAAG,cAAc,CAAA,EAAA,CAAI,CAAC,CAAC;AACrF,SAAA;AAED,QAAA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,iBAAiB,EAAE,CAAC;QAEpB,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAA,OAAO,EAAE,gBAAgB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;AACtE,KAAC,EACD;QACI,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,iBAAiB;QACjB,WAAW;QACX,WAAW;QACX,sBAAsB;AACzB,KAAA,CACJ,CAAC;IAEF,SAAS,CAAC,MAAK;AACX,QAAA,IACI,IAAI;AACJ,YAAA,CAAC,cAAc;AACf,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,KAAK;AAC3C,YAAA,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EACnC;AACE,YAAA,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AAEnF,YAAA,IAAI,eAAe,EAAE;AACjB,gBAAA,SAAS,CACL,gBAAgB,KAAK,OAAO,IAAI,gBAAgB,KAAK,eAAe;sBAC9D,YAAY,CAAC,SAAS;AACxB,sBAAE,YAAY,CAAC,QAAQ,CAC9B,CAAC;AACL,aAAA;AAAM,iBAAA;AACH,gBAAA,SAAS,CAAC,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AACvF,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE;YAC7B,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,QAAQ,CAAC,OAAO,GAAG;gBACf,SAAS,EAAE,YAAY,CAAC,KAAK;gBAC7B,GAAG,EAAE,YAAY,CAAC,KAAK;gBACvB,IAAI,EAAE,YAAY,CAAC,KAAK;aAC3B,CAAC;AACL,SAAA;AACL,KAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;;;AAI/E,IAAA,MAAM,sBAAsB,GAAG,WAAW,CACtC,CAAC,IAAa,EAAE,MAAe,KAAK,CAAC,GAAmB,KAAI;;QAExD,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;YACvC,OAAO;AACV,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,GAAG,EAAE,WAAW,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE;YACT,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAG,EAAA,KAAK,IAAI,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,qBAAqB,CAAC,OAAO,IAAI,KAAK,CAAC;AAC1C,SAAA;AAAM,aAAA;AACH,YAAA,sBAAsB,CAAC,OAAO,IAAI,KAAK,CAAC;AAC3C,SAAA;KACJ,EACD,EAAE,CACL,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,OAA0B,EAAE,GAA4C,EAAE,IAAa,KAAI;AAC9G,QAAA,MAAM,wBAAwB,GAAG,WAAW,IAAI,YAAY,IAAI,cAAc,CAAC;QAC/E,QACIA,IAAC,KAAK,EAAA,EAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAC3B,QAAA,EAAAA,GAAA,CAAC,QAAQ,CAAC,GAAG,IACT,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;oBAClC,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,gBAAgB,KAAK,eAAe,IAAI,wBAAwB;AAC9F,oBAAA,CAAC,MAAM,CAAC,YAAY,GAChB,CAAC,IAAI,IAAI,gBAAgB,KAAK,eAAe,IAAI,wBAAwB;iBAChF,CAAC;;;;AAIF,gBAAA,KAAK,EAAE;oBACH,cAAc,EAAE,IAAI,GAAG,YAAY,GAAG,UAAU;oBAChD,IAAI,IAAI,GAAG,eAAe,GAAG,gBAAgB;iBAChD,EACD,GAAG,EAAE,GAAG,EACC,SAAA,EAAA,CAAA,cAAA,EAAiB,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA,CAAE,EAElD,QAAA,EAAA,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;oBACzB,IAAI,CAAC,IAAI,EAAE;AACP,wBAAA,OAAO,IAAI,CAAC;AACf,qBAAA;AACD,oBAAA,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACjE,oBAAA,MAAM,MAAM,GACR,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI;AACpD,yBAAC,CAAC,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7E,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;0BAC1B,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;0BACzC,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACnC,QACIA,gBACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;AACjC,4BAAA,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM;AAC3B,4BAAA,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM;AAC3B,4BAAA,CAAC,MAAM,CAAC,CAAgB,aAAA,EAAA,IAAI,CAAC,KAAK,CAAE,CAAA,CAAC,GAAG,IAAI,CAAC,KAAK;yBACrD,CAAC;;;;wBAIF,KAAK,EAAE,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAG,EAAA,cAAc,IAAI,EAAE,GAAG,EAAE,EAExD,OAAO,EAAE,MAAK;AACV,4BAAA,IAAI,cAAc,EAAE;gCAChB,OAAO;AACV,6BAAA;4BACD,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gCAAA,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzC,6BAAA;4BACD,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,yBAAC,aACQ,CAAgB,aAAA,EAAA,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,EAAA,QAAA,EAE3DA,aACI,SAAS,EAAE,MAAM,CAAC,aAAa,EAC/B,GAAG,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,aAChC,CAAwB,qBAAA,EAAA,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,EAAA,QAAA,EAEnEC,cAAK,SAAS,EAAE,MAAM,CAAC,mBAAmB,aACrC,IAAI,KACDD,GAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,WAAW,EAC9B,QAAA,EAAAA,GAAA,CAAC,IAAI,EAAK,EAAA,GAAA,SAAS,GAAI,EACrB,CAAA,CACT,EACA,IAAI,CAAC,SAAS,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,WAAW,EAAA,QAAA,EAAG,IAAI,CAAC,KAAK,GAAQ,CACzE,EAAA,CAAA,EAAA,CACJ,IAzBD,KAAK,CA0BL,EACX;AACN,iBAAC,CAAC,EAAA,CACS,EACX,CAAA,EACV;AACN,KAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE;AACX,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;AAED,IAAA,QACIA,GAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAW,SAAA,EAAA,MAAM,IAAI,YAAY,EAAA,QAAA,EACtEC,cACI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EACtC,GAAG,EAAE,YAAY,EACb,GAAA,aAAa,aACT,iBAAiB,EAAA,QAAA,EAAA,CAExB,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,CAAC,EAC1ED,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,eAAe,EAC1D,QAAA,EAAA,QAAQ,EACP,CAAA,EACL,CAAC,CAAC,YAAY,EAAE,MAAM,IAAI,aAAa,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,CAC5E,EAAA,CAAA,EAAA,CACJ,EACR;AACN;;;;"}