@via-profit/ui-kit 0.2.6 → 0.4.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/Accordion/AccordionContainer.js +11 -11
- package/Accordion/AccordionContent.js +16 -7
- package/Accordion/AccordionHeader.d.ts +22 -0
- package/Accordion/AccordionHeader.js +35 -18
- package/Accordion/Chevron.js +3 -3
- package/Accordion/index.d.ts +12 -8
- package/Accordion/index.js +21 -6
- package/Autocomplete/AutocompleteContainer.d.ts +5 -9
- package/Autocomplete/AutocompleteContainer.js +125 -57
- package/Autocomplete/AutocompleteTagsInput.d.ts +15 -0
- package/Autocomplete/AutocompleteTagsInput.js +65 -0
- package/Autocomplete/context.d.ts +1 -0
- package/Autocomplete/context.js +5 -5
- package/Autocomplete/index.js +10 -7
- package/Avatar/AvatarBase.js +1 -1
- package/Avatar/AvatarContainer.js +6 -11
- package/Avatar/AvatarPicture.d.ts +9 -1
- package/Avatar/AvatarPicture.js +4 -3
- package/Avatar/index.js +10 -10
- package/Badge/BadgeBase.d.ts +9 -0
- package/Badge/BadgeBase.js +21 -3
- package/Badge/BadgeContainer.js +2 -1
- package/Badge/BadgeDeleteButton.d.ts +1 -1
- package/Badge/BadgeOutlined.d.ts +1 -1
- package/Badge/BadgeOutlined.js +5 -80
- package/Badge/BadgeStandard.d.ts +1 -1
- package/Badge/BadgeStandard.js +5 -91
- package/Badge/BadgeStyled.d.ts +5 -0
- package/Badge/BadgeStyled.js +125 -0
- package/Badge/index.d.ts +2 -2
- package/Badge/index.js +3 -20
- package/Button/ButtonBase.js +8 -4
- package/Button/ButtonContainer.js +2 -0
- package/Button/ButtonIconWrapper.d.ts +1 -1
- package/Button/ButtonOutlined.d.ts +1 -1
- package/Button/ButtonOutlined.js +5 -80
- package/Button/ButtonPlain.d.ts +1 -1
- package/Button/ButtonPlain.js +5 -85
- package/Button/ButtonStandard.d.ts +1 -1
- package/Button/ButtonStandard.js +5 -97
- package/Button/ButtonStyled.d.ts +10 -0
- package/Button/ButtonStyled.js +205 -0
- package/Button/index.d.ts +5 -5
- package/Button/index.js +3 -24
- package/ButtonGroup/ButtonGroupContext.d.ts +21 -0
- package/ButtonGroup/ButtonGroupContext.js +11 -0
- package/ButtonGroup/index.d.ts +76 -0
- package/ButtonGroup/index.js +132 -0
- package/CHANGELOG.md +160 -0
- package/Calendar/CalendarCell.js +11 -4
- package/Calendar/CalendarComponent.d.ts +15 -4
- package/Calendar/CalendarComponent.js +201 -103
- package/Calendar/CalendarDayBadge.d.ts +1 -1
- package/Calendar/CalendarMonthCell.js +1 -11
- package/Calendar/CalendarWeekDayLabel.js +3 -1
- package/Calendar/CalendarWeekDaysBar.js +6 -1
- package/Calendar/CalendarYearCell.js +1 -16
- package/Calendar/CalendarYearsSelector.d.ts +0 -1
- package/Calendar/CalendarYearsSelector.js +33 -35
- package/Calendar/use-calendar.d.ts +4 -3
- package/Calendar/use-calendar.js +31 -24
- package/Checkbox/CheckboxAsterisk.d.ts +13 -0
- package/{Autocomplete2/Autocomplete2TextField.js → Checkbox/CheckboxAsterisk.js} +24 -10
- package/Checkbox/CheckboxBox.d.ts +22 -0
- package/Checkbox/CheckboxBox.js +88 -0
- package/Checkbox/CheckboxContainer.d.ts +27 -0
- package/Checkbox/CheckboxContainer.js +38 -0
- package/Checkbox/CheckboxErrorText.d.ts +6 -0
- package/Checkbox/CheckboxErrorText.js +76 -0
- package/Checkbox/CheckboxIcon.d.ts +10 -0
- package/Checkbox/CheckboxIcon.js +57 -0
- package/Checkbox/CheckboxTextWrapper.d.ts +4 -0
- package/Checkbox/CheckboxTextWrapper.js +29 -0
- package/Checkbox/CheckboxWrapper.d.ts +4 -0
- package/Checkbox/CheckboxWrapper.js +29 -0
- package/Checkbox/index.d.ts +144 -0
- package/Checkbox/index.js +71 -0
- package/Checkbox/useCheckboxColor.d.ts +6 -0
- package/Checkbox/useCheckboxColor.js +33 -0
- package/ClickOutside/index.d.ts +6 -0
- package/ClickOutside/index.js +19 -3
- package/Color/Color.d.ts +4 -4
- package/Color/Color.js +9 -5
- package/Color/ColorGenerator.d.ts +5 -1
- package/Color/ColorParser.d.ts +9 -0
- package/Color/ColorParser.js +52 -12
- package/CountryFlags/AC.js +5 -1
- package/CountryFlags/AD.js +5 -1
- package/CountryFlags/AE.js +5 -1
- package/CountryFlags/AF.js +5 -1
- package/CountryFlags/AG.js +5 -1
- package/CountryFlags/AI.js +5 -1
- package/CountryFlags/AL.js +5 -1
- package/CountryFlags/AM.js +5 -1
- package/CountryFlags/AO.js +5 -1
- package/CountryFlags/AQ.js +5 -1
- package/CountryFlags/AR.js +5 -1
- package/CountryFlags/AS.js +5 -1
- package/CountryFlags/AT.js +5 -1
- package/CountryFlags/AU.js +5 -1
- package/CountryFlags/AW.js +5 -1
- package/CountryFlags/AX.js +5 -1
- package/CountryFlags/AZ.js +5 -1
- package/CountryFlags/BA.js +5 -1
- package/CountryFlags/BB.js +5 -1
- package/CountryFlags/BD.js +5 -1
- package/CountryFlags/BE.js +5 -1
- package/CountryFlags/BF.js +5 -1
- package/CountryFlags/BG.js +5 -1
- package/CountryFlags/BH.js +5 -1
- package/CountryFlags/BI.js +5 -1
- package/CountryFlags/BJ.js +5 -1
- package/CountryFlags/BL.js +5 -1
- package/CountryFlags/BM.js +5 -1
- package/CountryFlags/BN.js +5 -1
- package/CountryFlags/BO.js +5 -1
- package/CountryFlags/BQ.js +5 -1
- package/CountryFlags/BR.js +5 -1
- package/CountryFlags/BS.js +5 -1
- package/CountryFlags/BT.js +5 -1
- package/CountryFlags/BV.js +5 -1
- package/CountryFlags/BW.js +5 -1
- package/CountryFlags/BY.js +5 -1
- package/CountryFlags/BZ.js +5 -1
- package/CountryFlags/CA.js +5 -1
- package/CountryFlags/CC.js +5 -1
- package/CountryFlags/CD.js +5 -1
- package/CountryFlags/CF.js +5 -1
- package/CountryFlags/CG.js +5 -1
- package/CountryFlags/CH.js +5 -1
- package/CountryFlags/CI.js +5 -1
- package/CountryFlags/CK.js +5 -1
- package/CountryFlags/CL.js +5 -1
- package/CountryFlags/CM.js +5 -1
- package/CountryFlags/CN.js +5 -1
- package/CountryFlags/CO.js +5 -1
- package/CountryFlags/CR.js +5 -1
- package/CountryFlags/CU.js +5 -1
- package/CountryFlags/CV.js +5 -1
- package/CountryFlags/CW.js +5 -1
- package/CountryFlags/CX.js +5 -1
- package/CountryFlags/CY.js +5 -1
- package/CountryFlags/CZ.js +5 -1
- package/CountryFlags/DE.js +5 -1
- package/CountryFlags/DJ.js +5 -1
- package/CountryFlags/DK.js +5 -1
- package/CountryFlags/DM.js +5 -1
- package/CountryFlags/DO.js +5 -1
- package/CountryFlags/DZ.js +5 -1
- package/CountryFlags/EC.js +5 -1
- package/CountryFlags/EE.js +5 -1
- package/CountryFlags/EG.js +5 -1
- package/CountryFlags/EH.js +5 -1
- package/CountryFlags/ER.js +5 -1
- package/CountryFlags/ES.js +5 -1
- package/CountryFlags/ET.js +5 -1
- package/CountryFlags/EU.js +5 -1
- package/CountryFlags/FI.js +5 -1
- package/CountryFlags/FJ.js +5 -1
- package/CountryFlags/FK.js +5 -1
- package/CountryFlags/FM.js +5 -1
- package/CountryFlags/FO.js +5 -1
- package/CountryFlags/FR.js +5 -1
- package/CountryFlags/GA.js +5 -1
- package/CountryFlags/GB.js +5 -1
- package/CountryFlags/GD.js +5 -1
- package/CountryFlags/GE.js +5 -1
- package/CountryFlags/GEAB.js +5 -1
- package/CountryFlags/GEOS.js +5 -1
- package/CountryFlags/GF.js +5 -1
- package/CountryFlags/GG.js +5 -1
- package/CountryFlags/GH.js +5 -1
- package/CountryFlags/GI.js +5 -1
- package/CountryFlags/GL.js +5 -1
- package/CountryFlags/GM.js +5 -1
- package/CountryFlags/GN.js +5 -1
- package/CountryFlags/GP.js +5 -1
- package/CountryFlags/GQ.js +5 -1
- package/CountryFlags/GR.js +5 -1
- package/CountryFlags/GS.js +5 -1
- package/CountryFlags/GT.js +5 -1
- package/CountryFlags/GU.js +5 -1
- package/CountryFlags/GW.js +5 -1
- package/CountryFlags/GY.js +5 -1
- package/CountryFlags/HK.js +5 -1
- package/CountryFlags/HM.js +5 -1
- package/CountryFlags/HN.js +5 -1
- package/CountryFlags/HR.js +5 -1
- package/CountryFlags/HT.js +5 -1
- package/CountryFlags/HU.js +5 -1
- package/CountryFlags/IC.js +5 -1
- package/CountryFlags/ID.js +5 -1
- package/CountryFlags/IE.js +5 -1
- package/CountryFlags/IL.js +5 -1
- package/CountryFlags/IM.js +5 -1
- package/CountryFlags/IN.js +5 -1
- package/CountryFlags/IO.js +5 -1
- package/CountryFlags/IQ.js +5 -1
- package/CountryFlags/IR.js +5 -1
- package/CountryFlags/IS.js +5 -1
- package/CountryFlags/IT.js +5 -1
- package/CountryFlags/JE.js +5 -1
- package/CountryFlags/JM.js +5 -1
- package/CountryFlags/JO.js +5 -1
- package/CountryFlags/JP.js +5 -1
- package/CountryFlags/KE.js +5 -1
- package/CountryFlags/KG.js +5 -1
- package/CountryFlags/KH.js +5 -1
- package/CountryFlags/KI.js +5 -1
- package/CountryFlags/KM.js +5 -1
- package/CountryFlags/KN.js +5 -1
- package/CountryFlags/KP.js +5 -1
- package/CountryFlags/KR.js +5 -1
- package/CountryFlags/KW.js +5 -1
- package/CountryFlags/KY.js +5 -1
- package/CountryFlags/KZ.js +5 -1
- package/CountryFlags/LA.js +5 -1
- package/CountryFlags/LB.js +5 -1
- package/CountryFlags/LC.js +5 -1
- package/CountryFlags/LI.js +5 -1
- package/CountryFlags/LK.js +5 -1
- package/CountryFlags/LR.js +5 -1
- package/CountryFlags/LS.js +5 -1
- package/CountryFlags/LT.js +5 -1
- package/CountryFlags/LU.js +5 -1
- package/CountryFlags/LV.js +5 -1
- package/CountryFlags/LY.js +5 -1
- package/CountryFlags/MA.js +5 -1
- package/CountryFlags/MC.js +5 -1
- package/CountryFlags/MD.js +5 -1
- package/CountryFlags/ME.js +5 -1
- package/CountryFlags/MF.js +5 -1
- package/CountryFlags/MG.js +5 -1
- package/CountryFlags/MH.js +5 -1
- package/CountryFlags/MK.js +5 -1
- package/CountryFlags/ML.js +5 -1
- package/CountryFlags/MM.js +5 -1
- package/CountryFlags/MN.js +5 -1
- package/CountryFlags/MO.js +5 -1
- package/CountryFlags/MP.js +5 -1
- package/CountryFlags/MQ.js +5 -1
- package/CountryFlags/MR.js +5 -1
- package/CountryFlags/MS.js +5 -1
- package/CountryFlags/MT.js +5 -1
- package/CountryFlags/MU.js +5 -1
- package/CountryFlags/MV.js +5 -1
- package/CountryFlags/MW.js +5 -1
- package/CountryFlags/MX.js +5 -1
- package/CountryFlags/MY.js +5 -1
- package/CountryFlags/MZ.js +5 -1
- package/CountryFlags/NA.js +5 -1
- package/CountryFlags/NC.js +5 -1
- package/CountryFlags/NE.js +5 -1
- package/CountryFlags/NF.js +5 -1
- package/CountryFlags/NG.js +5 -1
- package/CountryFlags/NI.js +5 -1
- package/CountryFlags/NL.js +5 -1
- package/CountryFlags/NO.js +5 -1
- package/CountryFlags/NP.js +5 -1
- package/CountryFlags/NR.js +5 -1
- package/CountryFlags/NU.js +5 -1
- package/CountryFlags/NZ.js +5 -1
- package/CountryFlags/OM.js +5 -1
- package/CountryFlags/PA.js +5 -1
- package/CountryFlags/PE.js +5 -1
- package/CountryFlags/PF.js +5 -1
- package/CountryFlags/PG.js +5 -1
- package/CountryFlags/PH.js +5 -1
- package/CountryFlags/PK.js +5 -1
- package/CountryFlags/PL.js +5 -1
- package/CountryFlags/PM.js +5 -1
- package/CountryFlags/PN.js +5 -1
- package/CountryFlags/PR.js +5 -1
- package/CountryFlags/PS.js +5 -1
- package/CountryFlags/PT.js +5 -1
- package/CountryFlags/PW.js +5 -1
- package/CountryFlags/PY.js +5 -1
- package/CountryFlags/QA.js +5 -1
- package/CountryFlags/RE.js +5 -1
- package/CountryFlags/RO.js +5 -1
- package/CountryFlags/RS.js +5 -1
- package/CountryFlags/RU.js +5 -1
- package/CountryFlags/RW.js +5 -1
- package/CountryFlags/SA.js +5 -1
- package/CountryFlags/SB.js +5 -1
- package/CountryFlags/SC.js +5 -1
- package/CountryFlags/SD.js +5 -1
- package/CountryFlags/SE.js +5 -1
- package/CountryFlags/SG.js +5 -1
- package/CountryFlags/SH.js +5 -1
- package/CountryFlags/SI.js +5 -1
- package/CountryFlags/SJ.js +5 -1
- package/CountryFlags/SK.js +5 -1
- package/CountryFlags/SL.js +5 -1
- package/CountryFlags/SM.js +5 -1
- package/CountryFlags/SN.js +5 -1
- package/CountryFlags/SO.js +5 -1
- package/CountryFlags/SR.js +5 -1
- package/CountryFlags/SS.js +5 -1
- package/CountryFlags/ST.js +5 -1
- package/CountryFlags/SV.js +5 -1
- package/CountryFlags/SX.js +5 -1
- package/CountryFlags/SY.js +5 -1
- package/CountryFlags/SZ.js +5 -1
- package/CountryFlags/TA.js +5 -1
- package/CountryFlags/TC.js +5 -1
- package/CountryFlags/TD.js +5 -1
- package/CountryFlags/TF.js +5 -1
- package/CountryFlags/TG.js +5 -1
- package/CountryFlags/TH.js +5 -1
- package/CountryFlags/TJ.js +5 -1
- package/CountryFlags/TK.js +5 -1
- package/CountryFlags/TL.js +5 -1
- package/CountryFlags/TM.js +5 -1
- package/CountryFlags/TN.js +5 -1
- package/CountryFlags/TO.js +5 -1
- package/CountryFlags/TR.js +5 -1
- package/CountryFlags/TT.js +5 -1
- package/CountryFlags/TV.js +5 -1
- package/CountryFlags/TW.js +5 -1
- package/CountryFlags/TZ.js +5 -1
- package/CountryFlags/UA.js +5 -1
- package/CountryFlags/UG.js +5 -1
- package/CountryFlags/UM.js +5 -1
- package/CountryFlags/US.js +5 -1
- package/CountryFlags/UY.js +5 -1
- package/CountryFlags/UZ.js +5 -1
- package/CountryFlags/Uknown.d.ts +7 -3
- package/CountryFlags/Uknown.js +9 -31
- package/CountryFlags/Unknown.d.ts +3 -0
- package/CountryFlags/Unknown.js +42 -0
- package/CountryFlags/VA.js +5 -1
- package/CountryFlags/VC.js +5 -1
- package/CountryFlags/VE.js +5 -1
- package/CountryFlags/VG.js +5 -1
- package/CountryFlags/VI.js +5 -1
- package/CountryFlags/VN.js +5 -1
- package/CountryFlags/VU.js +5 -1
- package/CountryFlags/WF.js +5 -1
- package/CountryFlags/WS.js +5 -1
- package/CountryFlags/XK.js +5 -1
- package/CountryFlags/YE.js +5 -1
- package/CountryFlags/YT.js +5 -1
- package/CountryFlags/ZA.js +5 -1
- package/CountryFlags/ZM.js +5 -1
- package/CountryFlags/ZW.js +5 -1
- package/CountryFlags/index.d.ts +2 -1
- package/CountryFlags/index.js +3 -1
- package/CountryFlags/isLabelled.d.ts +6 -0
- package/CountryFlags/isLabelled.js +7 -0
- package/DatePicker/index.d.ts +23 -6
- package/DatePicker/index.js +84 -23
- package/DatePicker/useDatePickerFormat.js +20 -3
- package/Grid/index.d.ts +60 -0
- package/Grid/index.js +43 -0
- package/Highlighted/index.d.ts +1 -1
- package/Highlighted/index.js +14 -10
- package/LoadingIndicator/LoadingOverlay.d.ts +11 -0
- package/LoadingIndicator/LoadingOverlay.js +63 -0
- package/LoadingIndicator/Spinner.d.ts +34 -5
- package/LoadingIndicator/Spinner.js +48 -37
- package/LoadingIndicator/SpinnerCircle.d.ts +14 -0
- package/LoadingIndicator/SpinnerCircle.js +34 -0
- package/LoadingIndicator/index.d.ts +8 -3
- package/LoadingIndicator/index.js +9 -15
- package/MaskedField/index.d.ts +3 -2
- package/MaskedField/index.js +7 -2
- package/MaskedField/templates.js +2 -0
- package/MaskedField/useMasked.js +26 -12
- package/Menu/MenuContainer.d.ts +11 -3
- package/Menu/MenuContainer.js +127 -65
- package/Menu/MenuItem.js +1 -1
- package/Menu/VirtualizedList.js +1 -3
- package/Menu/context.js +5 -0
- package/Modal/BaseModal/ModalWrapper.js +65 -38
- package/Modal/BaseModal/context.js +6 -0
- package/Modal/BaseModal/index.js +0 -8
- package/Modal/BaseModal/useDialogID.d.ts +6 -0
- package/Modal/BaseModal/useDialogID.js +12 -0
- package/Modal/ConfirmBox/ConfirmBoxContainer.js +5 -1
- package/Modal/ConfirmBox/index.js +2 -1
- package/Modal/Dialog/DialogInner.js +1 -1
- package/Modal/Dialog/index.js +12 -7
- package/Modal/Drawer/DrawerHeader.d.ts +20 -0
- package/Modal/Drawer/DrawerHeader.js +3 -3
- package/Modal/Drawer/DrawerInner.js +9 -1
- package/Modal/Drawer/index.d.ts +7 -0
- package/Modal/Drawer/index.js +12 -10
- package/Modal/MessageBox/MessageBoxContainer.js +1 -1
- package/Modal/MessageBox/index.js +2 -1
- package/PhoneField/CountryFlagComponent.js +2 -2
- package/PhoneField/UnknownFlag.d.ts +6 -3
- package/PhoneField/UnknownFlag.js +8 -31
- package/PhoneField/index.js +45 -55
- package/PhoneField/templates.js +13 -14
- package/PhoneField/usePhoneUtils.d.ts +15 -0
- package/PhoneField/usePhoneUtils.js +30 -37
- package/Popper/Popper.d.ts +30 -10
- package/Popper/Popper.js +9 -7
- package/Popper/usePopper.d.ts +21 -31
- package/Popper/usePopper.js +79 -46
- package/README.md +27 -10
- package/Radio/RadioBox.d.ts +14 -0
- package/Radio/RadioBox.js +100 -0
- package/Radio/RadioContainer.d.ts +27 -0
- package/Radio/RadioContainer.js +38 -0
- package/Radio/RadioTextWrapper.d.ts +4 -0
- package/Radio/RadioTextWrapper.js +29 -0
- package/Radio/index.d.ts +64 -0
- package/Radio/index.js +49 -0
- package/Radio/useRadioColor.d.ts +6 -0
- package/Radio/useRadioColor.js +33 -0
- package/RadioGroup/RadioGroupAsterisk.d.ts +13 -0
- package/RadioGroup/RadioGroupAsterisk.js +53 -0
- package/RadioGroup/RadioGroupContainer.d.ts +4 -0
- package/RadioGroup/RadioGroupContainer.js +36 -0
- package/RadioGroup/RadioGroupContext.d.ts +20 -0
- package/RadioGroup/RadioGroupContext.js +11 -0
- package/RadioGroup/RadioGroupErrorText.d.ts +6 -0
- package/RadioGroup/RadioGroupErrorText.js +76 -0
- package/RadioGroup/RadioGroupItems.d.ts +9 -0
- package/RadioGroup/RadioGroupItems.js +30 -0
- package/RadioGroup/RadioGroupLegend.d.ts +4 -0
- package/RadioGroup/RadioGroupLegend.js +37 -0
- package/RadioGroup/index.d.ts +134 -0
- package/RadioGroup/index.js +62 -0
- package/Selectbox/SelectboxMenu.d.ts +1 -1
- package/Selectbox/index.d.ts +18 -2
- package/Selectbox/index.js +32 -32
- package/Stack/index.d.ts +62 -0
- package/Stack/index.js +38 -0
- package/Surface/SurfaceContainer.js +6 -0
- package/Surface/index.js +7 -3
- package/Swiper/Swiper.d.ts +28 -2
- package/Swiper/Swiper.js +246 -91
- package/Swiper/SwiperContainer.js +0 -2
- package/Swiper/SwiperSlidesRenderer.d.ts +8 -0
- package/Swiper/SwiperSlidesRenderer.js +17 -14
- package/Swiper/SwiperTrack.d.ts +8 -0
- package/Swiper/SwiperTrack.js +8 -3
- package/Swiper/SwiperWrapper.js +9 -1
- package/Switch/SwitchContainer.d.ts +1 -1
- package/Switch/SwitchContainer.js +5 -5
- package/Switch/SwitchDot.js +13 -53
- package/Switch/SwitchToggleWrapper.d.ts +1 -1
- package/Switch/SwitchToggleWrapper.js +5 -6
- package/Switch/SwitchTrack.js +5 -41
- package/Switch/index.d.ts +4 -4
- package/Switch/index.js +21 -11
- package/Switch/useSwitchColor.d.ts +7 -0
- package/Switch/useSwitchColor.js +33 -0
- package/Table/Table.d.ts +6 -0
- package/Table/Table.js +7 -62
- package/Table/TableBody.d.ts +1 -1
- package/Table/TableBody.js +4 -2
- package/Table/TableCaption.d.ts +2 -2
- package/Table/TableCaption.js +2 -3
- package/Table/TableCell.js +2 -5
- package/Table/TableFooter.js +8 -7
- package/Table/TableHeader.js +6 -2
- package/Table/TableHeaderCell.js +8 -9
- package/Table/TableRow.js +1 -5
- package/TextArea/TextAreaIconWrapper.d.ts +1 -1
- package/TextArea/TextAreaInput.js +2 -0
- package/TextArea/index.js +7 -15
- package/TextField/TextFieldInput.js +2 -0
- package/TextField/TextFieldInputWrapper.d.ts +2 -0
- package/TextField/TextFieldInputWrapper.js +12 -2
- package/TextField/index.js +7 -19
- package/ThemeProvider/createTheme.js +2 -3
- package/ThemeProvider/index.d.ts +19 -2
- package/Typography/Base.d.ts +1 -1
- package/Typography/Base.js +1 -1
- package/Typography/Blockquote.js +1 -1
- package/Typography/Del.js +2 -2
- package/Typography/H4.js +1 -1
- package/Typography/H5.js +2 -2
- package/Typography/H6.d.ts +4 -0
- package/Typography/H6.js +28 -0
- package/Typography/SectionDescription.js +0 -1
- package/Typography/SectionTitle.d.ts +4 -7
- package/Typography/SectionTitle.js +26 -8
- package/Typography/index.d.ts +27 -0
- package/Typography/index.js +35 -0
- package/package.json +2 -4
- package/utils/TabManager.d.ts +7 -1
- package/utils/TabManager.js +39 -45
- package/utils/spacing.d.ts +11 -0
- package/utils/spacing.js +14 -0
- package/Autocomplete/OverrideMenuList.d.ts +0 -4
- package/Autocomplete/OverrideMenuList.js +0 -39
- package/Autocomplete2/Autocomplete2.d.ts +0 -12
- package/Autocomplete2/Autocomplete2.js +0 -83
- package/Autocomplete2/Autocomplete2TextField.d.ts +0 -7
- package/Autocomplete2/index.d.ts +0 -2
- package/Autocomplete2/index.js +0 -7
- package/CountryFlags/SwiperOverview.d.ts +0 -257
- package/CountryFlags/SwiperOverview.js +0 -524
package/Swiper/Swiper.js
CHANGED
|
@@ -47,13 +47,14 @@ const SwiperWrapper_1 = __importDefault(require("./SwiperWrapper"));
|
|
|
47
47
|
const SwiperTrack_1 = __importDefault(require("./SwiperTrack"));
|
|
48
48
|
const SwiperSlidesRenderer_1 = __importDefault(require("./SwiperSlidesRenderer"));
|
|
49
49
|
__exportStar(require("./SwiperSlide"), exports);
|
|
50
|
+
const defaultSlideLabel = (index, total) => `${index + 1} / ${total}`;
|
|
50
51
|
exports.Swiper = React.forwardRef((props, ref) => {
|
|
51
|
-
const { children, dragThreshold = 240, snap = true, draggable = true, overrides, initialIndex = 0, infinite = false, onSlideChange, autoplay = false, autoplayInterval = 3000, pauseOnHover = true, threshold = 20, resistance = true, slidesPerView = 1 } = props, restProps = __rest(props, ["children", "dragThreshold", "snap", "draggable", "overrides", "initialIndex", "infinite", "onSlideChange", "autoplay", "autoplayInterval", "pauseOnHover", "threshold", "resistance", "slidesPerView"]);
|
|
52
|
+
const { children, dragThreshold = 240, snap = true, draggable = true, overrides, initialIndex = 0, infinite = false, onSlideChange, autoplay = false, autoplayInterval = 3000, pauseOnHover = true, threshold = 20, resistance = true, slidesPerView = 1, keyboardControl = true, slideLabel = defaultSlideLabel } = props, restProps = __rest(props, ["children", "dragThreshold", "snap", "draggable", "overrides", "initialIndex", "infinite", "onSlideChange", "autoplay", "autoplayInterval", "pauseOnHover", "threshold", "resistance", "slidesPerView", "keyboardControl", "slideLabel"]);
|
|
52
53
|
// #region Slides
|
|
53
54
|
const slides = React.useMemo(() => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
// toArray skips null/false and keeps the user keys (prefixed), so the slides are not remounted
|
|
56
|
+
// when a slide is added to the start
|
|
57
|
+
const childrenSlides = React.Children.toArray(children).filter(React.isValidElement);
|
|
57
58
|
if (infinite) {
|
|
58
59
|
if (childrenSlides.length < 2) {
|
|
59
60
|
console.error('To infinite loop counts of the slides must be greater than 2');
|
|
@@ -72,14 +73,9 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
72
73
|
key: `clone-tail-${i}`,
|
|
73
74
|
'data-clone': 'tail',
|
|
74
75
|
}));
|
|
75
|
-
|
|
76
|
-
key: `slide-${idx}`,
|
|
77
|
-
}));
|
|
78
|
-
return [...headClones, ...mainSlides, ...tailClones];
|
|
76
|
+
return [...headClones, ...childrenSlides, ...tailClones];
|
|
79
77
|
}
|
|
80
|
-
return childrenSlides
|
|
81
|
-
key: `slide-${idx}`,
|
|
82
|
-
}));
|
|
78
|
+
return childrenSlides;
|
|
83
79
|
}, [children, infinite, slidesPerView]);
|
|
84
80
|
const total = slides.length;
|
|
85
81
|
const realSlidesCount = infinite ? total - 2 * slidesPerView : total;
|
|
@@ -92,9 +88,15 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
92
88
|
return initialIndex + slidesPerView;
|
|
93
89
|
});
|
|
94
90
|
const [offset, setOffset] = React.useState(0);
|
|
91
|
+
// The long decelerating transition after a free swipe (snap=false)
|
|
92
|
+
const [isMomentum, setIsMomentum] = React.useState(false);
|
|
95
93
|
const [isDragging, setIsDragging] = React.useState(false);
|
|
96
94
|
const [disableAnimation, setDisableAnimation] = React.useState(false);
|
|
97
|
-
const [
|
|
95
|
+
const [isPausedByApi, setIsPausedByApi] = React.useState(false);
|
|
96
|
+
const [isHovered, setIsHovered] = React.useState(false);
|
|
97
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
98
|
+
// The pause by the API is not cancelled when the mouse leaves the swiper
|
|
99
|
+
const isPaused = isPausedByApi || isHovered || isFocused;
|
|
98
100
|
// #region Refs
|
|
99
101
|
const dragging = React.useRef(false);
|
|
100
102
|
const startX = React.useRef(0);
|
|
@@ -104,9 +106,8 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
104
106
|
const wrapperRef = React.useRef(null);
|
|
105
107
|
const trackRef = React.useRef(null);
|
|
106
108
|
const isAnimating = React.useRef(false);
|
|
107
|
-
const autoplayTimer = React.useRef();
|
|
108
109
|
const mounted = React.useRef(true);
|
|
109
|
-
const
|
|
110
|
+
const suppressClick = React.useRef(false);
|
|
110
111
|
// #region Real Index
|
|
111
112
|
const realIndex = React.useMemo(() => {
|
|
112
113
|
if (!infinite) {
|
|
@@ -119,7 +120,8 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
119
120
|
if (realIndex >= realSlidesCount) {
|
|
120
121
|
return realIndex - realSlidesCount;
|
|
121
122
|
}
|
|
122
|
-
|
|
123
|
+
// In the infinite mode any slide can be the first visible one, so there is no clamp
|
|
124
|
+
return realIndex;
|
|
123
125
|
}, [index, infinite, slidesPerView, realSlidesCount]);
|
|
124
126
|
const prevRealIndex = React.useRef(realIndex);
|
|
125
127
|
// #region Effects
|
|
@@ -132,11 +134,13 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
132
134
|
React.useEffect(() => {
|
|
133
135
|
if (!mounted.current)
|
|
134
136
|
return;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
// The slides were removed: keep the index inside the allowed range
|
|
138
|
+
const lastIndex = infinite ? total - slidesPerView : maxIndex;
|
|
139
|
+
if (index > lastIndex) {
|
|
140
|
+
setIndex(infinite ? slidesPerView : maxIndex);
|
|
141
|
+
setOffset(0);
|
|
138
142
|
}
|
|
139
|
-
}, [
|
|
143
|
+
}, [index, infinite, total, slidesPerView, maxIndex]);
|
|
140
144
|
// #region Normalization
|
|
141
145
|
const normalizeIndex = React.useCallback(() => {
|
|
142
146
|
if (!infinite || !mounted.current)
|
|
@@ -144,15 +148,17 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
144
148
|
const firstRealIndex = slidesPerView;
|
|
145
149
|
const lastRealIndex = total - slidesPerView - 1;
|
|
146
150
|
if (index < firstRealIndex || index > lastRealIndex) {
|
|
147
|
-
|
|
151
|
+
// A clone position shows the same slides as the real position shifted by the slides count.
|
|
152
|
+
// Not always the first/last real slide: after several fast clicks the index may be deeper in the clones
|
|
153
|
+
const target = index < firstRealIndex ? index + realSlidesCount : index - realSlidesCount;
|
|
148
154
|
setDisableAnimation(true);
|
|
149
155
|
requestAnimationFrame(() => {
|
|
150
156
|
var _a;
|
|
151
157
|
if (!mounted.current)
|
|
152
158
|
return;
|
|
153
159
|
(_a = trackRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
160
|
+
// The offset is kept: in the free mode (snap=false) the track stops between the slides
|
|
154
161
|
setIndex(target);
|
|
155
|
-
setOffset(0);
|
|
156
162
|
requestAnimationFrame(() => {
|
|
157
163
|
if (mounted.current) {
|
|
158
164
|
setDisableAnimation(false);
|
|
@@ -160,14 +166,16 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
160
166
|
});
|
|
161
167
|
});
|
|
162
168
|
}
|
|
163
|
-
}, [index, infinite, slidesPerView, total]);
|
|
169
|
+
}, [index, infinite, slidesPerView, total, realSlidesCount]);
|
|
164
170
|
// #region Navigation API
|
|
165
171
|
const indexRef = React.useRef(index);
|
|
166
172
|
React.useEffect(() => {
|
|
167
173
|
indexRef.current = index;
|
|
168
174
|
}, [index]);
|
|
169
175
|
const goToIndex = React.useCallback((i) => {
|
|
170
|
-
|
|
176
|
+
// In the infinite mode the index is normalized after the transition, so wait for it.
|
|
177
|
+
// In the regular mode the transition is simply retargeted
|
|
178
|
+
if (infinite && isAnimating.current)
|
|
171
179
|
return;
|
|
172
180
|
let targetIndex = i;
|
|
173
181
|
if (infinite) {
|
|
@@ -183,16 +191,21 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
183
191
|
return; // никуда не едем — флаг не трогаем
|
|
184
192
|
}
|
|
185
193
|
setDisableAnimation(false);
|
|
194
|
+
setIsMomentum(false);
|
|
195
|
+
setOffset(0);
|
|
186
196
|
setIndex(targetIndex);
|
|
187
197
|
isAnimating.current = true;
|
|
188
198
|
}, [infinite, slidesPerView, realSlidesCount, maxIndex]);
|
|
189
199
|
const next = React.useCallback(() => {
|
|
190
|
-
// if (isAnimating.current) return;
|
|
191
200
|
setDisableAnimation(false);
|
|
201
|
+
setIsMomentum(false);
|
|
202
|
+
setOffset(0);
|
|
192
203
|
setIndex(prev => {
|
|
193
204
|
let nextIndex;
|
|
194
205
|
if (infinite) {
|
|
195
|
-
|
|
206
|
+
// The last position is the first tail clone: it mirrors the first real slide.
|
|
207
|
+
// Further positions would show the empty space when slidesPerView > 1
|
|
208
|
+
nextIndex = Math.min(prev + 1, total - slidesPerView);
|
|
196
209
|
}
|
|
197
210
|
else {
|
|
198
211
|
nextIndex = Math.min(prev + 1, maxIndex);
|
|
@@ -204,10 +217,11 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
204
217
|
isAnimating.current = true;
|
|
205
218
|
return nextIndex;
|
|
206
219
|
});
|
|
207
|
-
}, [infinite, maxIndex, total]);
|
|
220
|
+
}, [infinite, maxIndex, total, slidesPerView]);
|
|
208
221
|
const prev = React.useCallback(() => {
|
|
209
|
-
// if (isAnimating.current) return;
|
|
210
222
|
setDisableAnimation(false);
|
|
223
|
+
setIsMomentum(false);
|
|
224
|
+
setOffset(0);
|
|
211
225
|
setIndex(prev => {
|
|
212
226
|
const nextIndex = Math.max(prev - 1, 0);
|
|
213
227
|
if (nextIndex === prev) {
|
|
@@ -217,22 +231,70 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
217
231
|
return nextIndex;
|
|
218
232
|
});
|
|
219
233
|
}, []);
|
|
234
|
+
// #region Position
|
|
235
|
+
// The position is the distance in pixels from the start of the track to the left edge of the view.
|
|
236
|
+
// The state keeps it as index (whole slides) + offset (pixels), the track is translated by both
|
|
237
|
+
const getSlideWidth = React.useCallback(() => { var _a; return (((_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth) || 0) / slidesPerView; }, [slidesPerView]);
|
|
238
|
+
// The last allowed position. In the infinite mode it is the first tail clone
|
|
239
|
+
const maxPosition = React.useCallback(() => (infinite ? total - slidesPerView : maxIndex) * getSlideWidth(), [infinite, total, slidesPerView, maxIndex, getSlideWidth]);
|
|
240
|
+
// The position on the screen right now, also in the middle of a transition
|
|
241
|
+
const readPosition = React.useCallback(() => {
|
|
242
|
+
const track = trackRef.current;
|
|
243
|
+
if (track && typeof DOMMatrixReadOnly !== 'undefined') {
|
|
244
|
+
const { transform } = getComputedStyle(track);
|
|
245
|
+
if (transform && transform !== 'none') {
|
|
246
|
+
return -new DOMMatrixReadOnly(transform).m41;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return index * getSlideWidth() - offset;
|
|
250
|
+
}, [index, offset, getSlideWidth]);
|
|
251
|
+
// Infinite mode: the same view is shown by the real slides and by the clones,
|
|
252
|
+
// so the position is moved by the whole slides count when it comes close to the edge of the track
|
|
253
|
+
const wrapPosition = React.useCallback((position) => {
|
|
254
|
+
const width = getSlideWidth();
|
|
255
|
+
const span = realSlidesCount * width;
|
|
256
|
+
if (!infinite || width === 0)
|
|
257
|
+
return 0;
|
|
258
|
+
if (position < width * 0.5)
|
|
259
|
+
return span;
|
|
260
|
+
if (position > maxPosition() - width * 0.5)
|
|
261
|
+
return -span;
|
|
262
|
+
return 0;
|
|
263
|
+
}, [infinite, realSlidesCount, getSlideWidth, maxPosition]);
|
|
264
|
+
const dragBasePosition = React.useRef(0);
|
|
265
|
+
const dragAnchorIndex = React.useRef(0);
|
|
266
|
+
const dragPosition = React.useRef(0);
|
|
220
267
|
// #region Pointer Events
|
|
221
268
|
const onPointerDown = React.useCallback((e) => {
|
|
222
269
|
if (!wrapperRef.current || !draggable)
|
|
223
270
|
return;
|
|
271
|
+
// Only the main mouse button, the touch or the pen
|
|
272
|
+
if (e.pointerType === 'mouse' && e.button !== 0)
|
|
273
|
+
return;
|
|
274
|
+
const width = getSlideWidth();
|
|
275
|
+
// Grab the track where it is now: a running transition stops under the finger instead of jumping
|
|
276
|
+
let position = readPosition();
|
|
277
|
+
position += wrapPosition(position);
|
|
278
|
+
const anchor = width > 0 ? Math.round(position / width) : index;
|
|
279
|
+
dragBasePosition.current = position;
|
|
280
|
+
dragPosition.current = position;
|
|
281
|
+
dragAnchorIndex.current = anchor;
|
|
282
|
+
suppressClick.current = false;
|
|
224
283
|
dragging.current = true;
|
|
225
284
|
isAnimating.current = false;
|
|
226
285
|
setDisableAnimation(true);
|
|
286
|
+
setIsMomentum(false);
|
|
227
287
|
setIsDragging(true);
|
|
288
|
+
setIndex(anchor);
|
|
289
|
+
setOffset(anchor * width - position);
|
|
228
290
|
startX.current = e.clientX;
|
|
229
291
|
lastX.current = e.clientX;
|
|
230
292
|
lastTime.current = performance.now();
|
|
231
293
|
velocity.current = 0;
|
|
232
294
|
e.target.setPointerCapture(e.pointerId);
|
|
233
|
-
}, [draggable]);
|
|
295
|
+
}, [draggable, getSlideWidth, readPosition, wrapPosition, index]);
|
|
234
296
|
const onPointerMove = React.useCallback((e) => {
|
|
235
|
-
if (!dragging.current
|
|
297
|
+
if (!dragging.current)
|
|
236
298
|
return;
|
|
237
299
|
const now = performance.now();
|
|
238
300
|
const dx = e.clientX - lastX.current;
|
|
@@ -242,100 +304,172 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
242
304
|
}
|
|
243
305
|
lastX.current = e.clientX;
|
|
244
306
|
lastTime.current = now;
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
307
|
+
const width = getSlideWidth();
|
|
308
|
+
let position = dragBasePosition.current - (e.clientX - startX.current);
|
|
309
|
+
// Endless drag in the infinite mode: move the base together with the position
|
|
310
|
+
const shift = wrapPosition(position);
|
|
311
|
+
if (shift !== 0) {
|
|
312
|
+
dragBasePosition.current += shift;
|
|
313
|
+
dragAnchorIndex.current += Math.round(shift / width);
|
|
314
|
+
position += shift;
|
|
315
|
+
}
|
|
316
|
+
if (!infinite) {
|
|
317
|
+
const max = maxPosition();
|
|
318
|
+
if (position < 0) {
|
|
319
|
+
position = resistance ? position * 0.3 : 0;
|
|
249
320
|
}
|
|
250
|
-
if (
|
|
251
|
-
|
|
321
|
+
else if (position > max) {
|
|
322
|
+
position = resistance ? max + (position - max) * 0.3 : max;
|
|
252
323
|
}
|
|
253
324
|
}
|
|
254
|
-
|
|
255
|
-
|
|
325
|
+
dragPosition.current = position;
|
|
326
|
+
// snap: the index stays the same during the drag, the slide changes after the release.
|
|
327
|
+
// free: the index follows the position, so onSlideChange reports the slide under the view
|
|
328
|
+
const nextIndex = snap ? dragAnchorIndex.current : Math.round(position / width);
|
|
329
|
+
setIndex(nextIndex);
|
|
330
|
+
setOffset(nextIndex * width - position);
|
|
331
|
+
}, [getSlideWidth, wrapPosition, infinite, maxPosition, resistance, snap]);
|
|
256
332
|
const onPointerUp = React.useCallback((e) => {
|
|
257
333
|
if (!dragging.current)
|
|
258
334
|
return;
|
|
335
|
+
const width = getSlideWidth();
|
|
336
|
+
const position = dragPosition.current;
|
|
259
337
|
const delta = lastX.current - startX.current;
|
|
260
|
-
|
|
261
|
-
const
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
if (Math.abs(delta) >
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
if (!infinite) {
|
|
268
|
-
nextIndex = Math.max(0, Math.min(maxIndex, nextIndex));
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
nextIndex = Math.max(0, Math.min(total - 1, nextIndex));
|
|
338
|
+
// The pointer stopped before the release: no inertia
|
|
339
|
+
const v = performance.now() - lastTime.current > 100 ? 0 : velocity.current;
|
|
340
|
+
const lastIndex = infinite ? total - slidesPerView : maxIndex;
|
|
341
|
+
// It was a drag, not a click: the click on a link or a button inside the slide must not fire
|
|
342
|
+
if (Math.abs(delta) > threshold) {
|
|
343
|
+
suppressClick.current = true;
|
|
272
344
|
}
|
|
273
345
|
setDisableAnimation(false);
|
|
274
346
|
if (snap) {
|
|
347
|
+
const anchor = dragAnchorIndex.current;
|
|
348
|
+
const displacement = position - anchor * width;
|
|
349
|
+
const velocityFactor = Math.min(Math.abs(v) * 250, 0.65);
|
|
350
|
+
const dynamicThreshold = Math.max(threshold, Math.min(dragThreshold * (1 - velocityFactor), dragThreshold));
|
|
351
|
+
let nextIndex = anchor;
|
|
352
|
+
if (Math.abs(displacement) > dynamicThreshold) {
|
|
353
|
+
// At least one slide, more if the slide was dragged further
|
|
354
|
+
nextIndex =
|
|
355
|
+
displacement > 0
|
|
356
|
+
? Math.max(anchor + 1, Math.round(position / width))
|
|
357
|
+
: Math.min(anchor - 1, Math.round(position / width));
|
|
358
|
+
}
|
|
359
|
+
nextIndex = Math.max(0, Math.min(lastIndex, nextIndex));
|
|
275
360
|
setIndex(nextIndex);
|
|
276
361
|
setOffset(0);
|
|
362
|
+
// A click without movement does not start a transition, so transitionend never comes
|
|
363
|
+
// and the flag would block autoplay and goToIndex forever
|
|
364
|
+
isAnimating.current = Math.abs(nextIndex * width - position) > 0.5;
|
|
277
365
|
}
|
|
278
366
|
else {
|
|
367
|
+
// Free mode: the track keeps moving by inertia and stops where it stops
|
|
368
|
+
const projected = Math.max(0, Math.min(lastIndex * width, position - v * 300));
|
|
369
|
+
const nextIndex = width > 0 ? Math.round(projected / width) : index;
|
|
370
|
+
setIsMomentum(true);
|
|
279
371
|
setIndex(nextIndex);
|
|
372
|
+
setOffset(nextIndex * width - projected);
|
|
373
|
+
isAnimating.current = Math.abs(projected - position) > 0.5;
|
|
280
374
|
}
|
|
281
|
-
isAnimating.current = true;
|
|
282
375
|
dragging.current = false;
|
|
283
376
|
setIsDragging(false);
|
|
284
377
|
e.target.releasePointerCapture(e.pointerId);
|
|
285
|
-
}, [
|
|
378
|
+
}, [
|
|
379
|
+
getSlideWidth,
|
|
380
|
+
infinite,
|
|
381
|
+
total,
|
|
382
|
+
slidesPerView,
|
|
383
|
+
maxIndex,
|
|
384
|
+
threshold,
|
|
385
|
+
snap,
|
|
386
|
+
dragThreshold,
|
|
387
|
+
index,
|
|
388
|
+
]);
|
|
286
389
|
const onLostPointerCapture = React.useCallback((e) => {
|
|
287
390
|
if (dragging.current) {
|
|
288
391
|
onPointerUp(e);
|
|
289
392
|
}
|
|
290
393
|
}, [onPointerUp]);
|
|
291
394
|
// #region Autoplay
|
|
292
|
-
const
|
|
395
|
+
const autoplayStep = React.useRef(() => undefined);
|
|
396
|
+
autoplayStep.current = () => {
|
|
397
|
+
// Without the infinite loop the autoplay returns to the first slide instead of stopping at the end
|
|
398
|
+
if (!infinite && indexRef.current >= maxIndex) {
|
|
399
|
+
goToIndex(0);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
next();
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
const pause = React.useCallback(() => setIsPausedByApi(true), []);
|
|
406
|
+
const resume = React.useCallback(() => setIsPausedByApi(false), []);
|
|
407
|
+
React.useEffect(() => {
|
|
293
408
|
if (!autoplay || isPaused)
|
|
294
|
-
return;
|
|
295
|
-
|
|
296
|
-
if (!
|
|
297
|
-
|
|
409
|
+
return undefined;
|
|
410
|
+
const timer = setInterval(() => {
|
|
411
|
+
if (!dragging.current && !isAnimating.current && mounted.current) {
|
|
412
|
+
autoplayStep.current();
|
|
298
413
|
}
|
|
299
414
|
}, autoplayInterval);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
autoplayTimer.current = undefined;
|
|
306
|
-
}
|
|
307
|
-
}, []);
|
|
308
|
-
const resume = React.useCallback(() => {
|
|
309
|
-
setIsPaused(false);
|
|
310
|
-
}, []);
|
|
311
|
-
// #region Hover
|
|
415
|
+
return () => clearInterval(timer);
|
|
416
|
+
}, [autoplay, autoplayInterval, isPaused]);
|
|
417
|
+
// #region Hover and focus
|
|
418
|
+
// The autoplay pauses while the pointer is over the swiper (pauseOnHover)
|
|
419
|
+
// and always while the focus is inside it, so the keyboard user is not interrupted
|
|
312
420
|
React.useEffect(() => {
|
|
313
|
-
if (!autoplay || !pauseOnHover)
|
|
314
|
-
return;
|
|
315
421
|
const wrapper = wrapperRef.current;
|
|
316
|
-
if (!wrapper)
|
|
317
|
-
return;
|
|
318
|
-
const handleMouseEnter = () =>
|
|
319
|
-
const handleMouseLeave = () =>
|
|
422
|
+
if (!autoplay || !wrapper)
|
|
423
|
+
return undefined;
|
|
424
|
+
const handleMouseEnter = () => pauseOnHover && setIsHovered(true);
|
|
425
|
+
const handleMouseLeave = () => setIsHovered(false);
|
|
426
|
+
const handleFocusIn = () => setIsFocused(true);
|
|
427
|
+
const handleFocusOut = (event) => {
|
|
428
|
+
if (!wrapper.contains(event.relatedTarget)) {
|
|
429
|
+
setIsFocused(false);
|
|
430
|
+
}
|
|
431
|
+
};
|
|
320
432
|
wrapper.addEventListener('mouseenter', handleMouseEnter);
|
|
321
433
|
wrapper.addEventListener('mouseleave', handleMouseLeave);
|
|
434
|
+
wrapper.addEventListener('focusin', handleFocusIn);
|
|
435
|
+
wrapper.addEventListener('focusout', handleFocusOut);
|
|
322
436
|
return () => {
|
|
323
437
|
wrapper.removeEventListener('mouseenter', handleMouseEnter);
|
|
324
438
|
wrapper.removeEventListener('mouseleave', handleMouseLeave);
|
|
439
|
+
wrapper.removeEventListener('focusin', handleFocusIn);
|
|
440
|
+
wrapper.removeEventListener('focusout', handleFocusOut);
|
|
325
441
|
};
|
|
326
|
-
}, [autoplay, pauseOnHover
|
|
327
|
-
// #region
|
|
328
|
-
React.
|
|
329
|
-
if (
|
|
330
|
-
|
|
442
|
+
}, [autoplay, pauseOnHover]);
|
|
443
|
+
// #region Keyboard
|
|
444
|
+
const onKeyDown = React.useCallback((event) => {
|
|
445
|
+
if (!keyboardControl)
|
|
446
|
+
return;
|
|
447
|
+
// Do not steal the arrows from the fields inside the slides
|
|
448
|
+
const target = event.target;
|
|
449
|
+
if (target.closest('input, textarea, select, [contenteditable="true"]'))
|
|
450
|
+
return;
|
|
451
|
+
if (event.key === 'ArrowLeft') {
|
|
452
|
+
event.preventDefault();
|
|
453
|
+
prev();
|
|
331
454
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
455
|
+
if (event.key === 'ArrowRight') {
|
|
456
|
+
event.preventDefault();
|
|
457
|
+
next();
|
|
458
|
+
}
|
|
459
|
+
}, [keyboardControl, prev, next]);
|
|
460
|
+
const onClickCapture = React.useCallback((event) => {
|
|
461
|
+
if (suppressClick.current) {
|
|
462
|
+
suppressClick.current = false;
|
|
463
|
+
event.preventDefault();
|
|
464
|
+
event.stopPropagation();
|
|
465
|
+
}
|
|
466
|
+
}, []);
|
|
467
|
+
// The images and the links are dragged by the browser as files, it breaks the swipe
|
|
468
|
+
const onDragStart = React.useCallback((event) => {
|
|
469
|
+
if (draggable) {
|
|
470
|
+
event.preventDefault();
|
|
471
|
+
}
|
|
472
|
+
}, [draggable]);
|
|
339
473
|
// #region Transition End
|
|
340
474
|
React.useEffect(() => {
|
|
341
475
|
const track = trackRef.current;
|
|
@@ -347,8 +481,17 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
347
481
|
isAnimating.current = false;
|
|
348
482
|
normalizeIndex(); // <-- вот здесь
|
|
349
483
|
};
|
|
484
|
+
const handleTransitionCancel = (e) => {
|
|
485
|
+
if (e.propertyName !== 'transform')
|
|
486
|
+
return;
|
|
487
|
+
isAnimating.current = false;
|
|
488
|
+
};
|
|
350
489
|
track.addEventListener('transitionend', handleTransitionEnd);
|
|
351
|
-
|
|
490
|
+
track.addEventListener('transitioncancel', handleTransitionCancel);
|
|
491
|
+
return () => {
|
|
492
|
+
track.removeEventListener('transitionend', handleTransitionEnd);
|
|
493
|
+
track.removeEventListener('transitioncancel', handleTransitionCancel);
|
|
494
|
+
};
|
|
352
495
|
}, [normalizeIndex]);
|
|
353
496
|
// #region Mount
|
|
354
497
|
React.useEffect(() => {
|
|
@@ -386,10 +529,22 @@ exports.Swiper = React.forwardRef((props, ref) => {
|
|
|
386
529
|
}
|
|
387
530
|
return domIndex - slidesPerView;
|
|
388
531
|
}, [infinite, realSlidesCount, slidesPerView, total]);
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
532
|
+
// The slides at least partially in the view: they are not inert, so a partially visible slide
|
|
533
|
+
// can be clicked. Between the slides (drag, free mode) one more slide is partially visible
|
|
534
|
+
const slideWidth = wrapperRef.current ? wrapperRef.current.clientWidth / slidesPerView : 0;
|
|
535
|
+
let firstVisibleDomIndex = index;
|
|
536
|
+
let visibleCount = slidesPerView;
|
|
537
|
+
if (slideWidth > 0 && Math.abs(offset) > 0.5) {
|
|
538
|
+
const position = index * slideWidth - offset;
|
|
539
|
+
firstVisibleDomIndex = Math.floor(position / slideWidth + 0.001);
|
|
540
|
+
const lastVisibleDomIndex = Math.ceil((position + slidesPerView * slideWidth) / slideWidth - 0.001) - 1;
|
|
541
|
+
visibleCount = lastVisibleDomIndex - firstVisibleDomIndex + 1;
|
|
542
|
+
}
|
|
543
|
+
firstVisibleDomIndex = Math.max(0, Math.min(total - 1, firstVisibleDomIndex));
|
|
544
|
+
return (React.createElement(overridesMap.Container, Object.assign({ role: "region", "aria-roledescription": "carousel" }, restProps),
|
|
545
|
+
React.createElement(overridesMap.Wrapper, { ref: wrapperRef, draggable: draggable, slidesPerView: slidesPerView, tabIndex: keyboardControl ? 0 : undefined, "aria-live": autoplay && !isPaused ? 'off' : 'polite', onKeyDown: onKeyDown, onClickCapture: onClickCapture, onDragStart: onDragStart, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, onLostPointerCapture: onLostPointerCapture },
|
|
546
|
+
React.createElement(overridesMap.Track, { ref: trackRef, dragging: isDragging, index: index, offset: offset, disableAnimation: disableAnimation, momentum: isMomentum, slidesPerView: slidesPerView },
|
|
547
|
+
React.createElement(SwiperSlidesRenderer_1.default, { slides: slides, slidesPerView: slidesPerView, realIndex: realIndex, firstVisibleIndex: getSlideRealIndex(firstVisibleDomIndex), visibleCount: visibleCount, realSlidesCount: realSlidesCount, getSlideRealIndex: getSlideRealIndex, slideLabel: slideLabel })))));
|
|
393
548
|
});
|
|
394
549
|
exports.Swiper.displayName = 'Swiper';
|
|
395
550
|
exports.default = exports.Swiper;
|
|
@@ -4,8 +4,16 @@ export type SwiperSlidesRendererProps = {
|
|
|
4
4
|
readonly slides: readonly SwiperSlideElement[];
|
|
5
5
|
readonly slidesPerView: number;
|
|
6
6
|
readonly realIndex: number;
|
|
7
|
+
/**
|
|
8
|
+
* The real index of the first slide that is at least partially in the view
|
|
9
|
+
* and the count of such slides. In the free mode (snap=false) the track stops between the slides,
|
|
10
|
+
* then one more slide is partially visible
|
|
11
|
+
*/
|
|
12
|
+
readonly firstVisibleIndex?: number;
|
|
13
|
+
readonly visibleCount?: number;
|
|
7
14
|
readonly realSlidesCount: number;
|
|
8
15
|
readonly getSlideRealIndex: (index: number) => number;
|
|
16
|
+
readonly slideLabel: (index: number, total: number) => string;
|
|
9
17
|
};
|
|
10
18
|
declare const _default: React.NamedExoticComponent<SwiperSlidesRendererProps>;
|
|
11
19
|
export default _default;
|
|
@@ -24,23 +24,24 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
const React = __importStar(require("react"));
|
|
27
|
+
// React 19 supports the boolean `inert`, React 18 passes only the string value to the DOM
|
|
28
|
+
const INERT_VALUE = parseInt(React.version, 10) >= 19 ? true : '';
|
|
27
29
|
const SwiperSlidesRenderer = props => {
|
|
28
|
-
const { slides, slidesPerView, realIndex, realSlidesCount, getSlideRealIndex } = props;
|
|
29
|
-
// Мемоизируем вычисления видимости
|
|
30
|
+
const { slides, slidesPerView, realIndex, realSlidesCount, getSlideRealIndex, slideLabel, firstVisibleIndex = realIndex, visibleCount = slidesPerView, } = props;
|
|
30
31
|
const visibilityMap = React.useMemo(() => {
|
|
31
32
|
const map = new Map();
|
|
32
|
-
if (realSlidesCount <=
|
|
33
|
+
if (realSlidesCount <= visibleCount) {
|
|
33
34
|
slides.forEach((_, i) => {
|
|
34
35
|
map.set(i, { isVisible: true, isNearby: false });
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
else {
|
|
38
39
|
const visibleIndices = [];
|
|
39
|
-
for (let j = 0; j <
|
|
40
|
-
visibleIndices.push((
|
|
40
|
+
for (let j = 0; j < visibleCount; j++) {
|
|
41
|
+
visibleIndices.push((firstVisibleIndex + j) % realSlidesCount);
|
|
41
42
|
}
|
|
42
|
-
const prevIndex = (
|
|
43
|
-
const nextIndex = (
|
|
43
|
+
const prevIndex = (firstVisibleIndex - 1 + realSlidesCount) % realSlidesCount;
|
|
44
|
+
const nextIndex = (firstVisibleIndex + visibleCount) % realSlidesCount;
|
|
44
45
|
slides.forEach((_, i) => {
|
|
45
46
|
const slideRealIndex = getSlideRealIndex(i);
|
|
46
47
|
const isVisible = visibleIndices.includes(slideRealIndex);
|
|
@@ -49,23 +50,25 @@ const SwiperSlidesRenderer = props => {
|
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
52
|
return map;
|
|
52
|
-
}, [slides,
|
|
53
|
+
}, [slides, visibleCount, firstVisibleIndex, realSlidesCount, getSlideRealIndex]);
|
|
53
54
|
return (React.createElement(React.Fragment, null, slides.map((slide, i) => {
|
|
54
55
|
const { isVisible, isNearby } = visibilityMap.get(i) || {
|
|
55
56
|
isVisible: false,
|
|
56
57
|
isNearby: false,
|
|
57
58
|
};
|
|
58
59
|
const slideRealIndex = getSlideRealIndex(i);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
slide.props.isNearby === isNearby) {
|
|
63
|
-
return slide;
|
|
64
|
-
}
|
|
60
|
+
const isClone = typeof slide.props['data-clone'] !== 'undefined';
|
|
61
|
+
// The slides out of the view are inert: Tab does not go into them (it would scroll the track)
|
|
62
|
+
// and screen readers skip them. The clones are always hidden from screen readers
|
|
65
63
|
return React.cloneElement(slide, {
|
|
66
64
|
slidesPerView,
|
|
67
65
|
isVisible,
|
|
68
66
|
isNearby,
|
|
67
|
+
role: 'group',
|
|
68
|
+
'aria-roledescription': 'slide',
|
|
69
|
+
'aria-label': slideLabel(slideRealIndex, realSlidesCount),
|
|
70
|
+
'aria-hidden': isClone || !isVisible ? true : undefined,
|
|
71
|
+
inert: isVisible && !isClone ? undefined : INERT_VALUE,
|
|
69
72
|
'data-index': i,
|
|
70
73
|
'data-real-index': slideRealIndex,
|
|
71
74
|
});
|
package/Swiper/SwiperTrack.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ export type SwiperTrackProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
5
5
|
readonly offset: number;
|
|
6
6
|
readonly dragging: boolean;
|
|
7
7
|
readonly disableAnimation?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The long decelerating transition after a free swipe (snap=false)
|
|
10
|
+
*/
|
|
11
|
+
readonly momentum?: boolean;
|
|
8
12
|
readonly slidesPerView: number;
|
|
9
13
|
};
|
|
10
14
|
export declare const SwiperTrack: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
@@ -13,6 +17,10 @@ export declare const SwiperTrack: React.ForwardRefExoticComponent<React.HTMLAttr
|
|
|
13
17
|
readonly offset: number;
|
|
14
18
|
readonly dragging: boolean;
|
|
15
19
|
readonly disableAnimation?: boolean | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* The long decelerating transition after a free swipe (snap=false)
|
|
22
|
+
*/
|
|
23
|
+
readonly momentum?: boolean | undefined;
|
|
16
24
|
readonly slidesPerView: number;
|
|
17
25
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
18
26
|
export default SwiperTrack;
|
package/Swiper/SwiperTrack.js
CHANGED
|
@@ -43,13 +43,18 @@ const styled_1 = __importDefault(require("@emotion/styled"));
|
|
|
43
43
|
const StyledTrack = styled_1.default.div `
|
|
44
44
|
display: flex;
|
|
45
45
|
height: 100%;
|
|
46
|
-
transition: ${({ $dragging, $disableAnimation }) =>
|
|
46
|
+
transition: ${({ $dragging, $disableAnimation, $momentum }) => {
|
|
47
|
+
if ($dragging || $disableAnimation) {
|
|
48
|
+
return 'none';
|
|
49
|
+
}
|
|
50
|
+
return $momentum ? 'transform 0.6s cubic-bezier(0.25, 1, 0.5, 1)' : 'transform 0.3s ease';
|
|
51
|
+
}};
|
|
47
52
|
will-change: transform;
|
|
48
53
|
transform: ${({ $index, $offset, $slidesPerView }) => `translateX(calc(${-(($index * 100) / $slidesPerView)}% + ${$offset}px))`};
|
|
49
54
|
`;
|
|
50
55
|
exports.SwiperTrack = React.forwardRef((props, ref) => {
|
|
51
|
-
const { children, index, offset, dragging, disableAnimation, slidesPerView } = props, restProps = __rest(props, ["children", "index", "offset", "dragging", "disableAnimation", "slidesPerView"]);
|
|
52
|
-
return (React.createElement(StyledTrack, Object.assign({ "$dragging": dragging, "$index": index, "$offset": offset, "$disableAnimation": disableAnimation, "$slidesPerView": slidesPerView }, restProps, { ref: ref }), children));
|
|
56
|
+
const { children, index, offset, dragging, disableAnimation, momentum, slidesPerView } = props, restProps = __rest(props, ["children", "index", "offset", "dragging", "disableAnimation", "momentum", "slidesPerView"]);
|
|
57
|
+
return (React.createElement(StyledTrack, Object.assign({ "$dragging": dragging, "$index": index, "$offset": offset, "$disableAnimation": disableAnimation, "$momentum": momentum, "$slidesPerView": slidesPerView }, restProps, { ref: ref }), children));
|
|
53
58
|
});
|
|
54
59
|
exports.SwiperTrack.displayName = 'SwiperTrack';
|
|
55
60
|
exports.default = exports.SwiperTrack;
|