@via-profit/ui-kit 0.3.0 → 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 +91 -35
- 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 +1 -0
- 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 +122 -0
- package/Calendar/CalendarCell.js +11 -4
- package/Calendar/CalendarComponent.d.ts +15 -4
- package/Calendar/CalendarComponent.js +150 -55
- 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 +1 -1
- 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 +7 -2
- package/Color/Color.d.ts +4 -4
- package/Color/Color.js +9 -5
- package/Color/ColorGenerator.d.ts +5 -1
- 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 +19 -6
- package/DatePicker/index.js +59 -12
- 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 +9 -6
- package/Menu/MenuContainer.d.ts +8 -0
- package/Menu/MenuContainer.js +101 -30
- package/Menu/MenuItem.js +1 -1
- package/Menu/context.js +5 -0
- 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 +28 -8
- package/Popper/usePopper.d.ts +21 -31
- 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/index.d.ts +18 -2
- package/Selectbox/index.js +23 -7
- 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 +233 -90
- 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 +1 -1
- package/TextField/TextFieldInput.js +2 -0
- package/TextField/TextFieldInputWrapper.d.ts +2 -0
- package/TextField/TextFieldInputWrapper.js +12 -2
- package/TextField/index.js +1 -1
- 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/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/MaskedField/index.js
CHANGED
|
@@ -63,11 +63,14 @@ const MaskedField = (props, ref) => {
|
|
|
63
63
|
const formatted = masked.formatParsedInput(parsed.text, m, parsed.caret);
|
|
64
64
|
const finalText = transform ? transform(formatted.text) : formatted.text;
|
|
65
65
|
setInputValue(finalText);
|
|
66
|
+
// The input shows finalText after the render anyway,
|
|
67
|
+
// this makes the event consistent with the payload
|
|
68
|
+
event.currentTarget.value = finalText;
|
|
66
69
|
onChange({
|
|
67
70
|
caret: formatted.caret,
|
|
68
71
|
isValid: formatted.isValid,
|
|
69
72
|
text: finalText,
|
|
70
|
-
});
|
|
73
|
+
}, event);
|
|
71
74
|
// Устанавливаем caret после рендера
|
|
72
75
|
requestAnimationFrame(() => {
|
|
73
76
|
var _a;
|
|
@@ -83,6 +86,8 @@ const MaskedField = (props, ref) => {
|
|
|
83
86
|
nativeProps.inputRef.current = elem;
|
|
84
87
|
}
|
|
85
88
|
}, [nativeProps]);
|
|
86
|
-
return (react_1.default.createElement(TextField_1.default, Object.assign({ ref: ref }, nativeProps, {
|
|
89
|
+
return (react_1.default.createElement(TextField_1.default, Object.assign({ ref: ref }, nativeProps, {
|
|
90
|
+
// The caret can be moved only in text-like inputs, `tel` also brings up the phone keypad
|
|
91
|
+
type: nativeProps.type === 'tel' ? 'tel' : 'text', value: inputValue, onChange: handleOnChange, inputRef: setInputRef })));
|
|
87
92
|
};
|
|
88
93
|
exports.default = react_1.default.forwardRef(MaskedField);
|
package/MaskedField/templates.js
CHANGED
package/MaskedField/useMasked.js
CHANGED
|
@@ -11,10 +11,12 @@ const useMasked = () => {
|
|
|
11
11
|
text: '',
|
|
12
12
|
caret: 0,
|
|
13
13
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
// Whitespaces are skipped in place, not stripped beforehand:
|
|
15
|
+
// charIndex must stay the index in the original value to be compared with the caret
|
|
16
|
+
value.split('').forEach((character, charIndex) => {
|
|
17
|
+
if (/\s/.test(character)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
18
20
|
const isMatch = mask.some(pattern => {
|
|
19
21
|
if (typeof pattern === 'string') {
|
|
20
22
|
return character === pattern && character;
|
|
@@ -42,7 +44,7 @@ const useMasked = () => {
|
|
|
42
44
|
charIndex: 0,
|
|
43
45
|
};
|
|
44
46
|
if (parsedValue === '') {
|
|
45
|
-
return
|
|
47
|
+
return { text: '', caret, isValid: false };
|
|
46
48
|
}
|
|
47
49
|
const requiredCount = mask.filter(pattern => pattern instanceof RegExp).length;
|
|
48
50
|
let filledCount = 0;
|
|
@@ -90,7 +92,8 @@ const useMasked = () => {
|
|
|
90
92
|
}
|
|
91
93
|
const result = {
|
|
92
94
|
text: data.text,
|
|
93
|
-
caret
|
|
95
|
+
// Extra input beyond the mask is dropped, the caret must not point past the text
|
|
96
|
+
caret: Math.min(data.caret, data.text.length),
|
|
94
97
|
// Valid when every RegExp position of the mask is filled
|
|
95
98
|
isValid: requiredCount > 0 && filledCount === requiredCount,
|
|
96
99
|
};
|
package/Menu/MenuContainer.d.ts
CHANGED
|
@@ -71,6 +71,14 @@ export interface MenuProps<T, Multiple extends boolean | undefined = undefined>
|
|
|
71
71
|
* **Default**: `true`
|
|
72
72
|
*/
|
|
73
73
|
readonly closeOutsideClick?: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Also close the list when the anchor element is clicked.\
|
|
76
|
+
* Leave it `false` when the anchor toggles the list by itself,
|
|
77
|
+
* otherwise the anchor click closes the list and the anchor opens it again\
|
|
78
|
+
* \
|
|
79
|
+
* **Default**: `false`
|
|
80
|
+
*/
|
|
81
|
+
readonly closeOnAnchorClick?: boolean;
|
|
74
82
|
/**
|
|
75
83
|
* Allow the multiple selection
|
|
76
84
|
* \
|
package/Menu/MenuContainer.js
CHANGED
|
@@ -46,7 +46,7 @@ const isEqual = (a, b) => {
|
|
|
46
46
|
return keysA.every(key => Object.prototype.hasOwnProperty.call(b, key) && a[key] === b[key]);
|
|
47
47
|
};
|
|
48
48
|
const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
49
|
-
const { items, value, anchorElement = null, overrides, children, closeOutsideClick = true, isOpen = false, anchorPos = 'bottom', alternativePlacements = ['bottom', 'top'], positionStrategy, autoFlip, viewportMargin, offset, multiple = false, autofocus = true, closeOnSelect = !multiple, onRequestClose = onRequestCloseDefault, onAnchorPosChanged, zIndex, onSelectItem, getOptionSelected, maxWidth, } = props;
|
|
49
|
+
const { items, value, anchorElement = null, overrides, children, closeOutsideClick = true, closeOnAnchorClick = false, isOpen = false, anchorPos = 'bottom', alternativePlacements = ['bottom', 'top'], positionStrategy, autoFlip, viewportMargin, offset, multiple = false, autofocus = true, closeOnSelect = !multiple, onRequestClose = onRequestCloseDefault, onAnchorPosChanged, zIndex, onSelectItem, getOptionSelected, maxWidth, } = props;
|
|
50
50
|
const overridesMap = react_1.default.useMemo(() => ({
|
|
51
51
|
List: (overrides === null || overrides === void 0 ? void 0 : overrides.List) || MenuList_1.default,
|
|
52
52
|
Popper: (overrides === null || overrides === void 0 ? void 0 : overrides.Popper) || Popper_1.default,
|
|
@@ -56,6 +56,16 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
56
56
|
// Starts as `false` so that a menu mounted in the open state is focused and scrolled too
|
|
57
57
|
const isOpenRef = react_1.default.useRef(false);
|
|
58
58
|
const focusTimeoutRef = react_1.default.useRef();
|
|
59
|
+
// Whether the focus is inside the list: then it is returned to the anchor on close
|
|
60
|
+
const hasFocusRef = react_1.default.useRef(false);
|
|
61
|
+
// The parent often resets the anchor together with isOpen, so the last one is kept
|
|
62
|
+
const lastAnchorRef = react_1.default.useRef(anchorElement);
|
|
63
|
+
if (anchorElement) {
|
|
64
|
+
lastAnchorRef.current = anchorElement;
|
|
65
|
+
}
|
|
66
|
+
// Keyboard navigation scrolls the list under a still pointer, and the browser fires
|
|
67
|
+
// mouseenter on the item that appears under it. Such events must not move the highlight
|
|
68
|
+
const isKeyboardNavigationRef = react_1.default.useRef(false);
|
|
59
69
|
const { dispatch, state: { selectedIndexes, markedIndex, hoveredIndex }, } = (0, context_1.default)();
|
|
60
70
|
const selectedIndexesRef = react_1.default.useRef(selectedIndexes);
|
|
61
71
|
const compareFunc = react_1.default.useCallback((item, val) => getOptionSelected ? getOptionSelected({ item, value: val }) : isEqual(item, val), [getOptionSelected]);
|
|
@@ -113,7 +123,8 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
113
123
|
if (index < 0 || index >= items.length)
|
|
114
124
|
return;
|
|
115
125
|
const item = items[index];
|
|
116
|
-
|
|
126
|
+
// Falsy items such as 0 or an empty string are valid options
|
|
127
|
+
if (item === undefined)
|
|
117
128
|
return;
|
|
118
129
|
if (typeof onSelectItem === 'function') {
|
|
119
130
|
if (multiple) {
|
|
@@ -137,11 +148,13 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
137
148
|
}, [onSelectItem, onRequestClose, compareFunc, closeOnSelect, items, value, multiple]);
|
|
138
149
|
const highlightIndex = react_1.default.useCallback((index) => {
|
|
139
150
|
const validIndex = Math.max(-1, Math.min(index, items.length - 1));
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
151
|
+
isKeyboardNavigationRef.current = true;
|
|
152
|
+
// Always dispatched: markedIndex of this closure can be outdated (e.g. the items effect
|
|
153
|
+
// has just reset it), the reducer skips the update when nothing changes.
|
|
154
|
+
// The mouse and the keyboard share one highlight
|
|
155
|
+
dispatch((0, context_1.actionSetmenuState)({ markedIndex: validIndex, hoveredIndex: -1 }));
|
|
156
|
+
scrollToIndex(validIndex);
|
|
157
|
+
}, [dispatch, items.length, scrollToIndex]);
|
|
145
158
|
const highlightPrevItem = react_1.default.useCallback(() => {
|
|
146
159
|
const newIndex = markedIndex - 1;
|
|
147
160
|
highlightIndex(newIndex >= 0 ? newIndex : 0);
|
|
@@ -216,6 +229,12 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
216
229
|
event.preventDefault();
|
|
217
230
|
onRequestClose(event);
|
|
218
231
|
break;
|
|
232
|
+
case 'Tab':
|
|
233
|
+
// The list is rendered in a portal at the end of the page, so the next Tab stop
|
|
234
|
+
// would be lost: close the menu instead, the focus returns to the anchor
|
|
235
|
+
event.preventDefault();
|
|
236
|
+
onRequestClose(event);
|
|
237
|
+
break;
|
|
219
238
|
default:
|
|
220
239
|
break;
|
|
221
240
|
}
|
|
@@ -231,26 +250,34 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
231
250
|
]);
|
|
232
251
|
// Управление открытием/закрытием меню
|
|
233
252
|
react_1.default.useEffect(() => {
|
|
253
|
+
var _a;
|
|
234
254
|
if (isOpenRef.current === isOpen)
|
|
235
255
|
return;
|
|
236
256
|
isOpenRef.current = isOpen;
|
|
237
257
|
if (!isOpen) {
|
|
238
258
|
// The menu is already closed by the parent, so onRequestClose must not be called again
|
|
239
259
|
dispatch((0, context_1.actionSetmenuState)({ markedIndex: -1, hoveredIndex: -1 }));
|
|
260
|
+
// Otherwise the focus is lost together with the unmounted list
|
|
261
|
+
if (hasFocusRef.current) {
|
|
262
|
+
hasFocusRef.current = false;
|
|
263
|
+
(_a = lastAnchorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
264
|
+
}
|
|
240
265
|
return;
|
|
241
266
|
}
|
|
242
267
|
// При открытии
|
|
243
268
|
scrollToFirstSelected();
|
|
244
|
-
if (
|
|
245
|
-
|
|
246
|
-
if (focusTimeoutRef.current) {
|
|
247
|
-
clearTimeout(focusTimeoutRef.current);
|
|
248
|
-
}
|
|
249
|
-
focusTimeoutRef.current = setTimeout(() => {
|
|
250
|
-
var _a;
|
|
251
|
-
(_a = menuListRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
252
|
-
}, 15);
|
|
269
|
+
if (focusTimeoutRef.current) {
|
|
270
|
+
clearTimeout(focusTimeoutRef.current);
|
|
253
271
|
}
|
|
272
|
+
// A menu mounted in the open state gets its list only after the portal is mounted,
|
|
273
|
+
// so the scroll is repeated when the list surely exists
|
|
274
|
+
focusTimeoutRef.current = setTimeout(() => {
|
|
275
|
+
var _a;
|
|
276
|
+
scrollToFirstSelected();
|
|
277
|
+
if (autofocus) {
|
|
278
|
+
(_a = menuListRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
279
|
+
}
|
|
280
|
+
}, 15);
|
|
254
281
|
}, [isOpen, autofocus, dispatch, scrollToFirstSelected]);
|
|
255
282
|
// Обновление выбранных индексов
|
|
256
283
|
react_1.default.useEffect(() => {
|
|
@@ -266,23 +293,65 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
266
293
|
});
|
|
267
294
|
}
|
|
268
295
|
}, [getSelectedIndexes, dispatch]);
|
|
296
|
+
// The highlight is an index, so when the items change it follows the same item
|
|
297
|
+
// or is removed. Otherwise a filtered list highlights a random item at the old index
|
|
298
|
+
const prevItemsRef = react_1.default.useRef(items);
|
|
299
|
+
const markedIndexRef = react_1.default.useRef(markedIndex);
|
|
300
|
+
markedIndexRef.current = markedIndex;
|
|
301
|
+
react_1.default.useEffect(() => {
|
|
302
|
+
const prevItems = prevItemsRef.current;
|
|
303
|
+
prevItemsRef.current = items;
|
|
304
|
+
// A new array with the same items (e.g. `items={list.filter(...)}`) is not a change
|
|
305
|
+
const isSameList = prevItems.length === items.length && prevItems.every((item, i) => item === items[i]);
|
|
306
|
+
if (isSameList) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const prevIndex = markedIndexRef.current;
|
|
310
|
+
const markedItem = prevIndex === -1 ? undefined : prevItems[prevIndex];
|
|
311
|
+
const newIndex = markedItem === undefined
|
|
312
|
+
? -1
|
|
313
|
+
: items.findIndex(item => item === markedItem || compareFunc(item, markedItem));
|
|
314
|
+
if (newIndex !== prevIndex) {
|
|
315
|
+
dispatch((0, context_1.actionSetmenuState)({ markedIndex: newIndex, hoveredIndex: -1 }));
|
|
316
|
+
}
|
|
317
|
+
// The old scroll position means nothing for the new list
|
|
318
|
+
if (newIndex === -1) {
|
|
319
|
+
if (menuListRef.current) {
|
|
320
|
+
menuListRef.current.scrollTop = 0;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
scrollToIndex(newIndex);
|
|
325
|
+
}
|
|
326
|
+
}, [items, compareFunc, dispatch, scrollToIndex]);
|
|
269
327
|
const itemClickHandler = react_1.default.useCallback((index) => () => selectItem(index), [selectItem]);
|
|
328
|
+
// The hovered item becomes the highlighted one, so the keyboard continues from it
|
|
329
|
+
// and Enter selects it
|
|
270
330
|
const itemMouseEnterHandler = react_1.default.useCallback((index) => () => {
|
|
271
|
-
if (
|
|
272
|
-
|
|
273
|
-
hoveredIndex: index,
|
|
274
|
-
markedIndex: -1,
|
|
275
|
-
}));
|
|
331
|
+
if (isKeyboardNavigationRef.current) {
|
|
332
|
+
return;
|
|
276
333
|
}
|
|
277
|
-
|
|
334
|
+
if (index !== markedIndex || index !== hoveredIndex) {
|
|
335
|
+
dispatch((0, context_1.actionSetmenuState)({ hoveredIndex: index, markedIndex: index }));
|
|
336
|
+
}
|
|
337
|
+
}, [dispatch, hoveredIndex, markedIndex]);
|
|
278
338
|
const itemMouseLeaveHandler = react_1.default.useCallback((index) => () => {
|
|
279
339
|
if (index === hoveredIndex) {
|
|
280
|
-
dispatch((0, context_1.actionSetmenuState)({
|
|
281
|
-
hoveredIndex: -1,
|
|
282
|
-
markedIndex: -1,
|
|
283
|
-
}));
|
|
340
|
+
dispatch((0, context_1.actionSetmenuState)({ hoveredIndex: -1 }));
|
|
284
341
|
}
|
|
285
342
|
}, [dispatch, hoveredIndex]);
|
|
343
|
+
// A real pointer movement ends the keyboard navigation
|
|
344
|
+
const listMouseMoveHandler = react_1.default.useCallback(() => {
|
|
345
|
+
isKeyboardNavigationRef.current = false;
|
|
346
|
+
}, []);
|
|
347
|
+
const listFocusHandler = react_1.default.useCallback(() => {
|
|
348
|
+
hasFocusRef.current = true;
|
|
349
|
+
}, []);
|
|
350
|
+
const listBlurHandler = react_1.default.useCallback((event) => {
|
|
351
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
352
|
+
hasFocusRef.current = false;
|
|
353
|
+
}
|
|
354
|
+
}, []);
|
|
286
355
|
const onAnchorPosChangedMemo = react_1.default.useCallback((newPlacement) => {
|
|
287
356
|
if (typeof onAnchorPosChanged === 'function') {
|
|
288
357
|
onAnchorPosChanged(newPlacement);
|
|
@@ -291,15 +360,17 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
291
360
|
const renderedChildren = react_1.default.useMemo(() => items.map((item, index) => children({ item, index }, {
|
|
292
361
|
key: index,
|
|
293
362
|
onMouseEnter: itemMouseEnterHandler(index),
|
|
363
|
+
// mouseenter is skipped during the keyboard navigation, so the item under a moving
|
|
364
|
+
// pointer is highlighted by mousemove
|
|
365
|
+
onMouseMove: itemMouseEnterHandler(index),
|
|
294
366
|
onMouseLeave: itemMouseLeaveHandler(index),
|
|
295
367
|
onClick: itemClickHandler(index),
|
|
296
368
|
selected: selectedIndexes.includes(index),
|
|
297
|
-
hovered:
|
|
369
|
+
hovered: markedIndex === index,
|
|
298
370
|
})), [
|
|
299
371
|
items,
|
|
300
372
|
children,
|
|
301
373
|
selectedIndexes,
|
|
302
|
-
hoveredIndex,
|
|
303
374
|
markedIndex,
|
|
304
375
|
itemMouseEnterHandler,
|
|
305
376
|
itemMouseLeaveHandler,
|
|
@@ -314,9 +385,9 @@ const MenuContainer = react_1.default.forwardRef((props, ref) => {
|
|
|
314
385
|
// Мемоизация компонентов
|
|
315
386
|
const PopperComponent = overridesMap.Popper;
|
|
316
387
|
const ListComponent = overridesMap.List;
|
|
317
|
-
return (react_1.default.createElement(ClickOutside_1.default, { onOutsideClick: onRequestClose, mouseEvent: isOpen && closeOutsideClick ? 'onMouseDown' : false },
|
|
388
|
+
return (react_1.default.createElement(ClickOutside_1.default, { onOutsideClick: onRequestClose, mouseEvent: isOpen && closeOutsideClick ? 'onMouseDown' : false, ignoreElements: closeOnAnchorClick ? undefined : [anchorElement] },
|
|
318
389
|
react_1.default.createElement(PopperComponent, { isOpen: Boolean(isOpen), ref: menuPopperRef, zIndex: zIndex, anchorPos: anchorPos, alternativePlacements: alternativePlacements, anchorElement: anchorElement, onAnchorPosChanged: onAnchorPosChangedMemo, positionStrategy: positionStrategy, autoFlip: autoFlip, viewportMargin: viewportMargin, offset: offset },
|
|
319
|
-
react_1.default.createElement(ListComponent, { anchorPos: anchorPos, isOpen: Boolean(isOpen), ref: menuListRef, maxWidth: maxWidth, onKeyDown: listKeydownEvent }, renderedChildren))));
|
|
390
|
+
react_1.default.createElement(ListComponent, { anchorPos: anchorPos, isOpen: Boolean(isOpen), ref: menuListRef, maxWidth: maxWidth, onKeyDown: listKeydownEvent, onMouseMoveCapture: listMouseMoveHandler, onFocus: listFocusHandler, onBlur: listBlurHandler, role: "listbox", "aria-multiselectable": multiple || undefined }, renderedChildren))));
|
|
320
391
|
});
|
|
321
392
|
MenuContainer.displayName = 'MenuContainer';
|
|
322
393
|
exports.default = MenuContainer;
|
package/Menu/MenuItem.js
CHANGED
|
@@ -62,7 +62,7 @@ exports.MenuItem = react_1.default.forwardRef((props, ref) => {
|
|
|
62
62
|
}
|
|
63
63
|
return react_1.default.createElement(ItemIconWrapper, null, startIcon);
|
|
64
64
|
}, [startIcon]);
|
|
65
|
-
return (react_1.default.createElement(StyledMenuItem, Object.assign({}, nativeProps, { ref: ref, onMouseLeave: onMouseLeave, onMouseEnter: onMouseEnter, onClick: onClick, selected: selected, hovered: hovered }),
|
|
65
|
+
return (react_1.default.createElement(StyledMenuItem, Object.assign({}, nativeProps, { ref: ref, onMouseLeave: onMouseLeave, onMouseEnter: onMouseEnter, onClick: onClick, role: "option", "aria-selected": selected, selected: selected, hovered: hovered }),
|
|
66
66
|
renderStartIcon(),
|
|
67
67
|
children));
|
|
68
68
|
});
|
package/Menu/context.js
CHANGED
|
@@ -18,6 +18,11 @@ exports.defaultState = {
|
|
|
18
18
|
const reducer = (state, action) => {
|
|
19
19
|
switch (action.type) {
|
|
20
20
|
case 'setMenuState': {
|
|
21
|
+
const keys = Object.keys(action.payload);
|
|
22
|
+
// Keep the state object when nothing changes, so the menu is not re-rendered
|
|
23
|
+
if (keys.every(key => state[key] === action.payload[key])) {
|
|
24
|
+
return state;
|
|
25
|
+
}
|
|
21
26
|
return Object.assign(Object.assign({}, state), action.payload);
|
|
22
27
|
}
|
|
23
28
|
default:
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unique and SSR-stable id of a modal, used to link its title and content by aria attributes.
|
|
3
|
+
* The colons of React.useId are removed, so the id can be used in CSS selectors too
|
|
4
|
+
*/
|
|
5
|
+
declare const useDialogID: (prefix: string) => string;
|
|
6
|
+
export default useDialogID;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
/**
|
|
8
|
+
* Unique and SSR-stable id of a modal, used to link its title and content by aria attributes.
|
|
9
|
+
* The colons of React.useId are removed, so the id can be used in CSS selectors too
|
|
10
|
+
*/
|
|
11
|
+
const useDialogID = (prefix) => `${prefix}-${react_1.default.useId().replace(/:/g, '')}`;
|
|
12
|
+
exports.default = useDialogID;
|
|
@@ -23,6 +23,10 @@ const StyledConfirmBoxContainer = styled_1.default.div `
|
|
|
23
23
|
`;
|
|
24
24
|
const ConfirmBoxContainer = (props, ref) => {
|
|
25
25
|
const { children, dialogID } = props, nativeProps = __rest(props, ["children", "dialogID"]);
|
|
26
|
-
return (react_1.default.createElement(StyledConfirmBoxContainer
|
|
26
|
+
return (react_1.default.createElement(StyledConfirmBoxContainer
|
|
27
|
+
// A confirmation requires the user's response
|
|
28
|
+
, Object.assign({
|
|
29
|
+
// A confirmation requires the user's response
|
|
30
|
+
role: "alertdialog", "aria-modal": "true", "aria-labelledby": `${dialogID}-title`, "aria-describedby": `${dialogID}-description` }, nativeProps, { ref: ref }), children));
|
|
27
31
|
};
|
|
28
32
|
exports.default = react_1.default.forwardRef(ConfirmBoxContainer);
|
|
@@ -21,9 +21,10 @@ const ConfirmBoxContent_1 = __importDefault(require("./ConfirmBoxContent"));
|
|
|
21
21
|
const ConfirmBoxFooter_1 = __importDefault(require("./ConfirmBoxFooter"));
|
|
22
22
|
const ConfirmBoxHeader_1 = __importDefault(require("./ConfirmBoxHeader"));
|
|
23
23
|
const ModalOverlay_1 = __importDefault(require("../BaseModal/ModalOverlay"));
|
|
24
|
+
const useDialogID_1 = __importDefault(require("../BaseModal/useDialogID"));
|
|
24
25
|
const ConfirmBox = props => {
|
|
25
26
|
const { header, children, onRequestYes, onRequestClose, overrides, isOpen, dismissButtonLabel, confirmButtonLabel } = props, otherProps = __rest(props, ["header", "children", "onRequestYes", "onRequestClose", "overrides", "isOpen", "dismissButtonLabel", "confirmButtonLabel"]);
|
|
26
|
-
const dialogID =
|
|
27
|
+
const dialogID = (0, useDialogID_1.default)('dialog-confirm');
|
|
27
28
|
const overridesMap = react_1.default.useMemo(() => ({
|
|
28
29
|
Container: (overrides === null || overrides === void 0 ? void 0 : overrides.Container) || ConfirmBoxContainer_1.default,
|
|
29
30
|
Content: (overrides === null || overrides === void 0 ? void 0 : overrides.Content) || ConfirmBoxContent_1.default,
|
|
@@ -22,6 +22,6 @@ const StyledDialogInner = (0, styled_1.default)(ModalInner_1.default) `
|
|
|
22
22
|
`;
|
|
23
23
|
const DialogInner = (props, ref) => {
|
|
24
24
|
const { children, dialogID } = props, restProps = __rest(props, ["children", "dialogID"]);
|
|
25
|
-
return (react_1.default.createElement(StyledDialogInner, Object.assign({ id: `${dialogID}-description` }, restProps, { ref: ref }), children));
|
|
25
|
+
return (react_1.default.createElement(StyledDialogInner, Object.assign({ role: "dialog", "aria-modal": "true", id: `${dialogID}-description` }, restProps, { ref: ref }), children));
|
|
26
26
|
};
|
|
27
27
|
exports.default = react_1.default.forwardRef(DialogInner);
|
package/Modal/Dialog/index.js
CHANGED
|
@@ -40,14 +40,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
const React = __importStar(require("react"));
|
|
41
41
|
const BaseModal_1 = __importDefault(require("../BaseModal"));
|
|
42
42
|
const DialogInner_1 = __importDefault(require("./DialogInner"));
|
|
43
|
+
const useDialogID_1 = __importDefault(require("../BaseModal/useDialogID"));
|
|
43
44
|
const Dialog = props => {
|
|
44
|
-
var _a;
|
|
45
45
|
const { children, overrides } = props, restProps = __rest(props, ["children", "overrides"]);
|
|
46
|
-
const dialogID =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
const dialogID = (0, useDialogID_1.default)('dialog');
|
|
47
|
+
// Created once: a component created during the render is a new type on every render,
|
|
48
|
+
// so React would remount the whole dialog content (inputs lose the focus and the state)
|
|
49
|
+
const Inner = React.useMemo(() => {
|
|
50
|
+
var _a;
|
|
51
|
+
return (_a = overrides === null || overrides === void 0 ? void 0 : overrides.Inner) !== null && _a !== void 0 ? _a : React.forwardRef(function Inner(innerProps, ref) {
|
|
52
|
+
return React.createElement(DialogInner_1.default, Object.assign({ dialogID: dialogID, ref: ref }, innerProps));
|
|
53
|
+
});
|
|
54
|
+
}, [overrides === null || overrides === void 0 ? void 0 : overrides.Inner, dialogID]);
|
|
55
|
+
const modalOverrides = React.useMemo(() => (Object.assign(Object.assign({}, overrides), { Inner })), [overrides, Inner]);
|
|
56
|
+
return (React.createElement(BaseModal_1.default, Object.assign({}, restProps, { overrides: modalOverrides }), children));
|
|
52
57
|
};
|
|
53
58
|
exports.default = Dialog;
|
|
@@ -8,6 +8,16 @@ export type DrawerHeaderProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'titl
|
|
|
8
8
|
* Display close button in the header
|
|
9
9
|
*/
|
|
10
10
|
readonly showCloseButton?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Accessible label of the close button\
|
|
13
|
+
* \
|
|
14
|
+
* **Default**: `'Close'`
|
|
15
|
+
*/
|
|
16
|
+
readonly closeButtonLabel?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Drawer unique ID, the title gets the `${dialogID}-title` id for `aria-labelledby`
|
|
19
|
+
*/
|
|
20
|
+
readonly dialogID?: string;
|
|
11
21
|
/**
|
|
12
22
|
* On close request
|
|
13
23
|
*/
|
|
@@ -22,6 +32,16 @@ declare const _default: React.ForwardRefExoticComponent<Omit<React.HTMLAttribute
|
|
|
22
32
|
* Display close button in the header
|
|
23
33
|
*/
|
|
24
34
|
readonly showCloseButton?: boolean | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Accessible label of the close button\
|
|
37
|
+
* \
|
|
38
|
+
* **Default**: `'Close'`
|
|
39
|
+
*/
|
|
40
|
+
readonly closeButtonLabel?: string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Drawer unique ID, the title gets the `${dialogID}-title` id for `aria-labelledby`
|
|
43
|
+
*/
|
|
44
|
+
readonly dialogID?: string | undefined;
|
|
25
45
|
/**
|
|
26
46
|
* On close request
|
|
27
47
|
*/
|
|
@@ -51,11 +51,11 @@ const StyledDrawerCloseButton = (0, styled_1.default)(Button_1.default) `
|
|
|
51
51
|
cursor: pointer;
|
|
52
52
|
`;
|
|
53
53
|
const DrawerHeader = (props, ref) => {
|
|
54
|
-
const { header, children, showCloseButton, onRequestClose } = props, nativeProps = __rest(props, ["header", "children", "showCloseButton", "onRequestClose"]);
|
|
54
|
+
const { header, children, showCloseButton, closeButtonLabel = 'Close', dialogID, onRequestClose } = props, nativeProps = __rest(props, ["header", "children", "showCloseButton", "closeButtonLabel", "dialogID", "onRequestClose"]);
|
|
55
55
|
return (react_1.default.createElement(StyledDrawerHeader, Object.assign({}, nativeProps, { ref: ref }),
|
|
56
|
-
typeof header !== 'undefined' && react_1.default.createElement(DrawerTitle,
|
|
56
|
+
typeof header !== 'undefined' && (react_1.default.createElement(DrawerTitle, { id: dialogID ? `${dialogID}-title` : undefined }, header)),
|
|
57
57
|
typeof children !== 'undefined' && react_1.default.createElement(DrawerToolbar, null, children),
|
|
58
|
-
typeof onRequestClose === 'function' && showCloseButton && (react_1.default.createElement(StyledDrawerCloseButton, { type: "button", "$withToolbar":
|
|
58
|
+
typeof onRequestClose === 'function' && showCloseButton && (react_1.default.createElement(StyledDrawerCloseButton, { type: "button", "$withToolbar": typeof children !== 'undefined' && children !== null, "aria-label": closeButtonLabel, onClick: onRequestClose },
|
|
59
59
|
react_1.default.createElement(DrawerCloseIcon_1.default, null)))));
|
|
60
60
|
};
|
|
61
61
|
exports.default = react_1.default.forwardRef(DrawerHeader);
|
|
@@ -30,6 +30,8 @@ const StyledDrawerBottomInner = (0, styled_1.default)(ModalInner_1.default) `
|
|
|
30
30
|
flex-direction: column;
|
|
31
31
|
z-index: ${({ theme }) => theme.zIndex.modal};
|
|
32
32
|
background-color: ${({ theme }) => theme.color.surface.toString()};
|
|
33
|
+
/* Only the corners facing the page are rounded: the others touch the edge of the window */
|
|
34
|
+
border-radius: 0;
|
|
33
35
|
border-top-left-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
34
36
|
border-top-right-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
35
37
|
transition:
|
|
@@ -56,6 +58,8 @@ const StyledDrawerTopInner = (0, styled_1.default)(ModalInner_1.default) `
|
|
|
56
58
|
flex-direction: column;
|
|
57
59
|
z-index: ${({ theme }) => theme.zIndex.modal};
|
|
58
60
|
background-color: ${({ theme }) => theme.color.surface.toString()};
|
|
61
|
+
/* Only the corners facing the page are rounded: the others touch the edge of the window */
|
|
62
|
+
border-radius: 0;
|
|
59
63
|
border-bottom-left-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
60
64
|
border-bottom-right-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
61
65
|
transition:
|
|
@@ -82,6 +86,8 @@ const StyledDrawerRightInner = (0, styled_1.default)(ModalInner_1.default) `
|
|
|
82
86
|
flex-direction: column;
|
|
83
87
|
z-index: ${({ theme }) => theme.zIndex.modal};
|
|
84
88
|
background-color: ${({ theme }) => theme.color.surface.toString()};
|
|
89
|
+
/* Only the corners facing the page are rounded: the others touch the edge of the window */
|
|
90
|
+
border-radius: 0;
|
|
85
91
|
border-top-left-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
86
92
|
border-bottom-left-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
87
93
|
transition:
|
|
@@ -108,6 +114,8 @@ const StyledDrawerLeftInner = (0, styled_1.default)(ModalInner_1.default) `
|
|
|
108
114
|
flex-direction: column;
|
|
109
115
|
z-index: ${({ theme }) => theme.zIndex.modal};
|
|
110
116
|
background-color: ${({ theme }) => theme.color.surface.toString()};
|
|
117
|
+
/* Only the corners facing the page are rounded: the others touch the edge of the window */
|
|
118
|
+
border-radius: 0;
|
|
111
119
|
border-top-right-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
112
120
|
border-bottom-right-radius: ${({ theme }) => theme.shape.radiusFactor * 2}em;
|
|
113
121
|
transition:
|
|
@@ -137,6 +145,6 @@ const DrawerInner = (props, ref) => {
|
|
|
137
145
|
return StyledDrawerBottomInner;
|
|
138
146
|
}
|
|
139
147
|
}, [anchor]);
|
|
140
|
-
return (react_1.default.createElement(Element, Object.assign({ isOpen: isOpen, id: `${dialogID}-description`, onRequestClose: onRequestClose }, nativeProps, { ref: ref }), children));
|
|
148
|
+
return (react_1.default.createElement(Element, Object.assign({ role: "dialog", "aria-modal": "true", isOpen: isOpen, id: `${dialogID}-description`, onRequestClose: onRequestClose }, nativeProps, { ref: ref }), children));
|
|
141
149
|
};
|
|
142
150
|
exports.default = react_1.default.forwardRef(DrawerInner);
|
package/Modal/Drawer/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { DrawerHeaderProps } from './DrawerHeader';
|
|
|
6
6
|
import { DrawerContentProps } from './DrawerContent';
|
|
7
7
|
import { DrawerFooterProps } from './DrawerFooter';
|
|
8
8
|
import { ModalOverlayProps } from '../BaseModal/ModalOverlay';
|
|
9
|
+
export type { AnchorVariant } from './DrawerInner';
|
|
9
10
|
export interface DrawerProps extends Omit<BaseModalProps, 'overrides'> {
|
|
10
11
|
/**
|
|
11
12
|
* Drawer position\
|
|
@@ -34,6 +35,12 @@ export interface DrawerProps extends Omit<BaseModalProps, 'overrides'> {
|
|
|
34
35
|
* Display close button in the header
|
|
35
36
|
*/
|
|
36
37
|
readonly showCloseButton?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Accessible label of the close button (it contains only an icon)\
|
|
40
|
+
* \
|
|
41
|
+
* **Default**: `'Close'`
|
|
42
|
+
*/
|
|
43
|
+
readonly closeButtonLabel?: string;
|
|
37
44
|
/**
|
|
38
45
|
* Overridable components map
|
|
39
46
|
*/
|
package/Modal/Drawer/index.js
CHANGED
|
@@ -45,13 +45,20 @@ const DrawerHeader_1 = __importDefault(require("./DrawerHeader"));
|
|
|
45
45
|
const DrawerContent_1 = __importDefault(require("./DrawerContent"));
|
|
46
46
|
const DrawerFooter_1 = __importDefault(require("./DrawerFooter"));
|
|
47
47
|
const ModalOverlay_1 = __importDefault(require("../BaseModal/ModalOverlay"));
|
|
48
|
+
const useDialogID_1 = __importDefault(require("../BaseModal/useDialogID"));
|
|
48
49
|
const Drawer = props => {
|
|
49
|
-
const { children, onRequestClose, showCloseButton, header, anchor, toolbar, footer, overrides } = props, otherProps = __rest(props, ["children", "onRequestClose", "showCloseButton", "header", "anchor", "toolbar", "footer", "overrides"]);
|
|
50
|
+
const { children, onRequestClose, showCloseButton, header, closeButtonLabel, anchor, toolbar, footer, overrides } = props, otherProps = __rest(props, ["children", "onRequestClose", "showCloseButton", "header", "closeButtonLabel", "anchor", "toolbar", "footer", "overrides"]);
|
|
50
51
|
const hasFooter = React.useMemo(() => typeof footer !== 'undefined' && footer !== null, [footer]);
|
|
51
52
|
const hasHeader = React.useMemo(() => typeof header !== 'undefined' ||
|
|
52
53
|
typeof toolbar !== 'undefined' ||
|
|
53
54
|
typeof showCloseButton !== 'undefined', [showCloseButton, header, toolbar]);
|
|
54
|
-
const dialogID =
|
|
55
|
+
const dialogID = (0, useDialogID_1.default)('drawer');
|
|
56
|
+
const hasTitle = typeof header !== 'undefined' && header !== null;
|
|
57
|
+
// Created once: a component created during the render is a new type on every render,
|
|
58
|
+
// so React would remount the whole drawer content (inputs lose the focus and the state)
|
|
59
|
+
const Inner = React.useMemo(() => React.forwardRef(function Inner(innerProps, ref) {
|
|
60
|
+
return (React.createElement(DrawerInner_1.default, Object.assign({ anchor: anchor, dialogID: dialogID, "aria-labelledby": hasTitle ? `${dialogID}-title` : undefined, ref: ref }, innerProps)));
|
|
61
|
+
}), [anchor, dialogID, hasTitle]);
|
|
55
62
|
const overridesMap = React.useMemo(() => ({
|
|
56
63
|
Container: (overrides === null || overrides === void 0 ? void 0 : overrides.Container) || DrawerContainer_1.default,
|
|
57
64
|
Header: (overrides === null || overrides === void 0 ? void 0 : overrides.Header) || DrawerHeader_1.default,
|
|
@@ -59,16 +66,11 @@ const Drawer = props => {
|
|
|
59
66
|
Footer: (overrides === null || overrides === void 0 ? void 0 : overrides.Footer) || DrawerFooter_1.default,
|
|
60
67
|
Overlay: (overrides === null || overrides === void 0 ? void 0 : overrides.Overlay) || ModalOverlay_1.default,
|
|
61
68
|
}), [overrides]);
|
|
69
|
+
const modalOverrides = React.useMemo(() => ({ Overlay: overridesMap.Overlay, Inner }), [overridesMap.Overlay, Inner]);
|
|
62
70
|
return (React.createElement(React.Fragment, null,
|
|
63
|
-
React.createElement(BaseModal_1.default, Object.assign({ onRequestClose: onRequestClose }, otherProps, { overrides:
|
|
64
|
-
Overlay: overridesMap.Overlay,
|
|
65
|
-
Inner: React.forwardRef(function Inner(props, ref) {
|
|
66
|
-
const { children } = props;
|
|
67
|
-
return (React.createElement(DrawerInner_1.default, Object.assign({ anchor: anchor, dialogID: dialogID, ref: ref }, props), children));
|
|
68
|
-
}),
|
|
69
|
-
} }),
|
|
71
|
+
React.createElement(BaseModal_1.default, Object.assign({ onRequestClose: onRequestClose }, otherProps, { overrides: modalOverrides }),
|
|
70
72
|
React.createElement(overridesMap.Container, { anchor: anchor },
|
|
71
|
-
hasHeader && (React.createElement(overridesMap.Header, { showCloseButton: showCloseButton, header: header, onRequestClose: onRequestClose }, toolbar)),
|
|
73
|
+
hasHeader && (React.createElement(overridesMap.Header, { showCloseButton: showCloseButton, closeButtonLabel: closeButtonLabel, dialogID: dialogID, header: header, onRequestClose: onRequestClose }, toolbar)),
|
|
72
74
|
React.createElement(overridesMap.Content, { anchor: anchor }, children),
|
|
73
75
|
hasFooter && React.createElement(overridesMap.Footer, { anchor: anchor }, footer)))));
|
|
74
76
|
};
|
|
@@ -23,6 +23,6 @@ const Container = styled_1.default.div `
|
|
|
23
23
|
`;
|
|
24
24
|
const MessageBoxContainer = (props, ref) => {
|
|
25
25
|
const { children, dialogID } = props, nativeProps = __rest(props, ["children", "dialogID"]);
|
|
26
|
-
return (react_1.default.createElement(Container, Object.assign({ role: "modal
|
|
26
|
+
return (react_1.default.createElement(Container, Object.assign({ role: "dialog", "aria-modal": "true", "aria-labelledby": `${dialogID}-title`, "aria-describedby": `${dialogID}-description` }, nativeProps, { ref: ref }), children));
|
|
27
27
|
};
|
|
28
28
|
exports.default = react_1.default.forwardRef(MessageBoxContainer);
|
|
@@ -44,9 +44,10 @@ const MessageBoxContent_1 = __importDefault(require("./MessageBoxContent"));
|
|
|
44
44
|
const MessageBoxFooter_1 = __importDefault(require("./MessageBoxFooter"));
|
|
45
45
|
const MessageBoxHeader_1 = __importDefault(require("./MessageBoxHeader"));
|
|
46
46
|
const ModalOverlay_1 = __importDefault(require("../BaseModal/ModalOverlay"));
|
|
47
|
+
const useDialogID_1 = __importDefault(require("../BaseModal/useDialogID"));
|
|
47
48
|
const MessageBox = props => {
|
|
48
49
|
const { header, children, onRequestClose, overrides, okButtonLabel, isOpen } = props, otherProps = __rest(props, ["header", "children", "onRequestClose", "overrides", "okButtonLabel", "isOpen"]);
|
|
49
|
-
const dialogID =
|
|
50
|
+
const dialogID = (0, useDialogID_1.default)('dialog-message');
|
|
50
51
|
const buttonRef = React.useRef(null);
|
|
51
52
|
React.useEffect(() => {
|
|
52
53
|
setTimeout(() => {
|
|
@@ -16,7 +16,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
const react_1 = __importDefault(require("react"));
|
|
18
18
|
const styled_1 = __importDefault(require("@emotion/styled"));
|
|
19
|
-
const
|
|
19
|
+
const Unknown_1 = __importDefault(require("../CountryFlags/Unknown"));
|
|
20
20
|
const CountryFlagContainer = styled_1.default.span `
|
|
21
21
|
display: flex;
|
|
22
22
|
align-items: center;
|
|
@@ -39,6 +39,6 @@ const CountryFlagContainer = styled_1.default.span `
|
|
|
39
39
|
`;
|
|
40
40
|
const CountryFlagComponent = props => {
|
|
41
41
|
const { flag } = props, otherProps = __rest(props, ["flag"]);
|
|
42
|
-
return (react_1.default.createElement(CountryFlagContainer, Object.assign({}, otherProps), typeof flag === 'undefined' || flag === null ? react_1.default.createElement(
|
|
42
|
+
return (react_1.default.createElement(CountryFlagContainer, Object.assign({}, otherProps), typeof flag === 'undefined' || flag === null ? react_1.default.createElement(Unknown_1.default, null) : flag));
|
|
43
43
|
};
|
|
44
44
|
exports.default = CountryFlagComponent;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use `Unknown` from `@via-profit/ui-kit/CountryFlags/Unknown`
|
|
4
|
+
*/
|
|
5
|
+
declare const UnknownFlag: import("react").ForwardRefExoticComponent<Omit<import("react").SVGProps<SVGSVGElement>, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
|
|
6
|
+
export default UnknownFlag;
|