@bytebrand/fe-ui-core-autobahn 1.0.1 → 1.0.2
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/assets/autode-logo.svg +6 -6
- package/cards/CarCard.tsx +174 -174
- package/cards/CarRow.tsx +186 -182
- package/cards/cardParts.tsx +529 -489
- package/cards/index.ts +37 -35
- package/cards/types.ts +122 -114
- package/chrome/Footer.tsx +189 -189
- package/chrome/TopBar.tsx +405 -405
- package/chrome/index.ts +20 -20
- package/chrome/svg.d.ts +11 -11
- package/compat/AccardionSection/AccardionSection.styl +45 -45
- package/compat/AccardionSection/AccardionSection.tsx +56 -56
- package/compat/AccordionWidget/AccordionWidget.styl +220 -220
- package/compat/AccordionWidget/AccordionWidget.tsx +257 -257
- package/compat/AccordionWrapper/AccordionItem/AccordionItem.styl +34 -34
- package/compat/AccordionWrapper/AccordionItem/AccordionItem.tsx +64 -64
- package/compat/AccordionWrapper/AccordionWrapper.tsx +34 -34
- package/compat/AdvantageItem/AdvantageItem.styl +47 -47
- package/compat/AdvantageItem/AdvantageItem.tsx +26 -26
- package/compat/Alternative/DealerInfo.styl +116 -116
- package/compat/Alternative/DealerInfo.tsx +171 -171
- package/compat/Badge/Badge.styl +44 -44
- package/compat/Badge/Badge.tsx +25 -25
- package/compat/BodyTypeIcons/Audi.tsx +9 -9
- package/compat/BodyTypeIcons/Bmw.tsx +860 -860
- package/compat/BodyTypeIcons/Ford.tsx +31 -31
- package/compat/BodyTypeIcons/IconsConfig.tsx +44 -44
- package/compat/BodyTypeIcons/IconsConfigCompact.tsx +30 -30
- package/compat/BodyTypeIcons/Mazda.tsx +44 -44
- package/compat/BodyTypeIcons/MercedesBenz.tsx +38 -38
- package/compat/BodyTypeIcons/Opel.tsx +19 -19
- package/compat/BodyTypeIcons/Search.tsx +19 -19
- package/compat/BodyTypeIcons/SelectorCategoryCombi.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryCompact.tsx +20 -20
- package/compat/BodyTypeIcons/SelectorCategoryConvertible.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryCoupe.tsx +60 -60
- package/compat/BodyTypeIcons/SelectorCategoryMinibus.tsx +64 -64
- package/compat/BodyTypeIcons/SelectorCategorySedan.tsx +69 -69
- package/compat/BodyTypeIcons/SelectorCategorySuv.tsx +77 -77
- package/compat/BodyTypeIcons/SelectorCategoryTransporter.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryVan.tsx +72 -72
- package/compat/BodyTypeIcons/Volkswagen.tsx +330 -330
- package/compat/BodyTypeIcons/index.ts +17 -17
- package/compat/Button/Button.tsx +65 -65
- package/compat/ButtonOld/Button.styl +65 -65
- package/compat/ButtonOld/Button.tsx +84 -84
- package/compat/Checkbox/Checkbox.styl +119 -119
- package/compat/Checkbox/Checkbox.tsx +151 -151
- package/compat/Checkbox/FormCheckbox.styl +22 -22
- package/compat/Checkbox/FormCheckbox.tsx +86 -86
- package/compat/Co2Widget/CO2Efficiency.styl +219 -219
- package/compat/Co2Widget/CO2Efficiency.tsx +93 -93
- package/compat/ContactInfo/ContactInfo.styl +22 -22
- package/compat/ContactInfo/ContactInfo.tsx +161 -161
- package/compat/ContactInfo/TemporaryTranslation.ts +11 -11
- package/compat/CookieModal/CookieModal.tsx +49 -49
- package/compat/CookieModal/Modal.tsx +43 -43
- package/compat/CookieModal/ModalsConfig.tsx +23 -23
- package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.styl +86 -86
- package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.tsx +184 -184
- package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.styl +66 -66
- package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.tsx +51 -51
- package/compat/CookieModal/modals/TestModal.tsx +7 -7
- package/compat/CookieModal/useModal.ts +13 -13
- package/compat/CustomerQuote/CustomerQuote.styl +79 -79
- package/compat/CustomerQuote/CustomerQuote.tsx +68 -68
- package/compat/CustomerQuotesSlider/CustomerQuotesSlider.styl +46 -46
- package/compat/CustomerQuotesSlider/CustomerQuotesSlider.tsx +79 -79
- package/compat/CustomerQuotesSlider/SliderArrow.tsx +20 -20
- package/compat/CustomerQuotesSlider/slider.global.styl +2 -2
- package/compat/ExpansionPanel/ExpansionPanel.tsx +68 -68
- package/compat/FirstInfoBlock/FirstInfoBlock.styl +33 -33
- package/compat/FirstInfoBlock/FirstInfoBlock.tsx +49 -49
- package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.styl +66 -66
- package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.tsx +21 -21
- package/compat/FormattedNumber/FormattedNumber.styl +1 -1
- package/compat/FormattedNumber/FormattedNumber.tsx +90 -90
- package/compat/IconContainer/IconContainer.styl +23 -23
- package/compat/IconContainer/IconContainer.tsx +34 -34
- package/compat/Image/Image.styl +109 -109
- package/compat/Image/Image.tsx +302 -302
- package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.styl +7 -7
- package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.tsx +30 -30
- package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.styl +122 -122
- package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.tsx +199 -199
- package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.styl +3 -3
- package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.tsx +15 -15
- package/compat/ImageSettings/OptionsTable/OptionsTable.styl +47 -47
- package/compat/ImageSettings/OptionsTable/OptionsTable.tsx +122 -122
- package/compat/ImageSettings/PricePlan/PricePlan.styl +63 -63
- package/compat/ImageSettings/PricePlan/PricePlan.tsx +32 -32
- package/compat/ImageSettings/index.ts +42 -42
- package/compat/ImagesSet/ImagesSet.styl +27 -27
- package/compat/ImagesSet/ImagesSet.tsx +76 -76
- package/compat/InfoBlockWrapper/InfoBlockWrapper.styl +41 -41
- package/compat/InfoBlockWrapper/InfoBlockWrapper.tsx +46 -46
- package/compat/Loader/Loader.styl +39 -39
- package/compat/Loader/Loader.tsx +32 -32
- package/compat/MagnifyGlass/MagnifyGlass.styl +33 -33
- package/compat/MagnifyGlass/MagnifyGlass.tsx +213 -213
- package/compat/MdAccordionGroup/MdAccordionGroup.tsx +53 -53
- package/compat/MdCheckbox/MdCheckbox.tsx +69 -69
- package/compat/MdField/MdField.tsx +100 -100
- package/compat/MdSelect/MdSelect.tsx +103 -103
- package/compat/MdSwitch/MdSwitch.tsx +29 -29
- package/compat/MdTabs/MdTabs.tsx +47 -47
- package/compat/MdTooltip/MdTooltip.tsx +31 -31
- package/compat/OfferDetailedSection/OfferDetailedSection.styl +31 -31
- package/compat/OfferDetailedSection/OfferDetailedSection.tsx +100 -100
- package/compat/OfferDetailedSection/partials/PanelConfig.styl +131 -131
- package/compat/OfferDetailedSection/partials/PanelConfig.tsx +121 -121
- package/compat/OfferPanel/AboAccordion/AboAccordion.styl +24 -24
- package/compat/OfferPanel/AboAccordion/AboAccordion.tsx +128 -128
- package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.styl +11 -11
- package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.tsx +35 -35
- package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.styl +20 -20
- package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.tsx +25 -25
- package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.styl +13 -13
- package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.tsx +39 -39
- package/compat/OfferPanel/MuiOfferPeriod/MuiOfferPeriod.tsx +42 -42
- package/compat/OfferPanel/OfferCheckboxGroup/CheckboxContainer.tsx +140 -140
- package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.styl +144 -144
- package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.tsx +23 -23
- package/compat/OfferPanel/OfferPanel.styl +193 -193
- package/compat/OfferPanel/OfferPanel.tsx +81 -81
- package/compat/OfferPanel/OfferPeriod/OfferPeriod.styl +24 -24
- package/compat/OfferPanel/OfferPeriod/OfferPeriod.tsx +45 -45
- package/compat/OfferPanel/RangeGroup/RangeGroup.tsx +39 -39
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styl +119 -119
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styled.tsx +33 -33
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.tsx +122 -122
- package/compat/PriceRating/PriceRating.styl +47 -47
- package/compat/PriceRating/PriceRating.tsx +64 -64
- package/compat/PriceRatingDetailed/PriceRatingDetailed.styl +120 -120
- package/compat/PriceRatingDetailed/PriceRatingDetailed.tsx +191 -191
- package/compat/PricingToolBlock/PricingTool.styl +6 -6
- package/compat/PricingToolBlock/PricingTool.tsx +29 -29
- package/compat/Radio/Radio.styl +115 -115
- package/compat/Radio/Radio.tsx +141 -141
- package/compat/Radio/RadioGroup.styl +5 -5
- package/compat/Radio/RadioGroup.tsx +65 -65
- package/compat/Range/Range.tsx +79 -79
- package/compat/RateSearchValue/RateSearchValue.styl +22 -22
- package/compat/RateSearchValue/RateSearchValue.tsx +55 -55
- package/compat/RateSearchWidget/RateSearchWidget.styl +106 -106
- package/compat/RateSearchWidget/RateSearchWidget.tsx +163 -163
- package/compat/ServiceBlockItem/ServiceBlockItem.styl +47 -47
- package/compat/ServiceBlockItem/ServiceBlockItem.tsx +25 -25
- package/compat/SkeletonItem/SkeletonItem.styl +80 -80
- package/compat/SkeletonItem/SkeletonItem.tsx +80 -80
- package/compat/StarButton/StarButton.styl +39 -39
- package/compat/StarButton/StarButton.tsx +31 -31
- package/compat/TabPanel/TabPanel.tsx +28 -28
- package/compat/TimePicker/TimePicker.styl +22 -22
- package/compat/TimePicker/TimePicker.tsx +156 -156
- package/compat/Tooltip/Tooltip.styl +117 -117
- package/compat/Tooltip/Tooltip.tsx +63 -63
- package/compat/Usp/Usp.styl +78 -78
- package/compat/Usp/Usp.tsx +30 -30
- package/compat/Usp/uspTranslate.ts +12 -12
- package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.styl +36 -36
- package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.tsx +178 -178
- package/compat/VehicleDetailedSidebar/partials/Price.styl +27 -27
- package/compat/VehicleDetailedSidebar/partials/Price.tsx +41 -41
- package/compat/VehicleDetailedSidebar/partials/PriceContent.styl +123 -123
- package/compat/VehicleDetailedSidebar/partials/PriceContent.tsx +128 -128
- package/compat/VehicleDetailedSidebar/partials/Properties.styl +58 -58
- package/compat/VehicleDetailedSidebar/partials/Properties.tsx +155 -155
- package/compat/VehicleDetailedSidebar/partials/Title.styl +35 -35
- package/compat/VehicleDetailedSidebar/partials/Title.tsx +33 -33
- package/compat/VehicleDetailedSlider/VehicleDetailedSlider.styl +146 -146
- package/compat/VehicleDetailedSlider/VehicleDetailedSlider.tsx +382 -382
- package/compat/VehicleDetailedSlider/partials/MobileStast.tsx +61 -61
- package/compat/VehicleDetailedSlider/partials/MobileStats.styl +71 -71
- package/compat/VehicleDetailedSlider/partials/PriceData.styl +50 -50
- package/compat/VehicleDetailedSlider/partials/PriceData.tsx +67 -67
- package/compat/VehicleDetailedSlider/partials/Stats.styl +80 -80
- package/compat/VehicleDetailedSlider/partials/Stats.tsx +62 -62
- package/compat/VehicleDetailedSlider/partials/Title.styl +44 -44
- package/compat/VehicleDetailedSlider/partials/Title.tsx +36 -36
- package/compat/VehicleFormattedPrice/VehicleFormattedPrice.styl +148 -148
- package/compat/VehicleFormattedPrice/VehicleFormattedPrice.tsx +163 -163
- package/compat/VehicleSlider/VehicleSlider.styl +62 -62
- package/compat/VehicleSlider/VehicleSlider.tsx +125 -125
- package/compat/VehicleSlider/VehicleSliderForSRL.tsx +175 -175
- package/compat/VehicleSmallCard/SeoText/SeoText.styl +8 -8
- package/compat/VehicleSmallCard/SeoText/SeoText.tsx +16 -16
- package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +204 -204
- package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +199 -199
- package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +273 -273
- package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +179 -179
- package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +165 -165
- package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +299 -299
- package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +32 -32
- package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.tsx +35 -35
- package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.styl +135 -135
- package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +91 -91
- package/compat/VehicleSmallCard/VehicleSmallCard.styl +309 -309
- package/compat/VehicleSmallCard/VehicleSmallCard.tsx +448 -448
- package/compat/index.ts +77 -77
- package/compat/legacy-theme/mixins.styl +93 -93
- package/compat/legacy-theme/priceReviewColors.styl +12 -12
- package/compat/legacy-theme/slider.global.styl +5 -5
- package/compat/legacy-theme/theme.styl +136 -136
- package/compat/withLabel/withLabel.styl +33 -33
- package/compat/withLabel/withLabel.tsx +44 -44
- package/compat/withStats/withStats.styl +174 -174
- package/compat/withStats/withStats.tsx +238 -238
- package/constants/RateSearchWidget.ts +15 -15
- package/constants/Search.ts +290 -290
- package/constants/SearchWidget.ts +108 -108
- package/constants/app.ts +223 -223
- package/constants/common.ts +127 -127
- package/constants/core.ts +131 -131
- package/constants/highlights.ts +165 -165
- package/constants/price.ts +9 -9
- package/constants/selectors.ts +38 -38
- package/constants.ts +91 -91
- package/data/DataTransformers.ts +88 -88
- package/data/fieldMapping.ts +364 -342
- package/data/toAutobahnCar.ts +455 -442
- package/iconsvg/IconSVG.tsx +30 -30
- package/iconsvg/IconSVGConfig.tsx +768 -768
- package/iconsvg/SVG/AboPartner.tsx +16 -16
- package/iconsvg/SVG/ArrowQuotes.tsx +22 -22
- package/iconsvg/SVG/CloseIcon.tsx +17 -17
- package/iconsvg/SVG/CloseIconSelect.tsx +18 -18
- package/iconsvg/SVG/ClosedLockIcon.tsx +18 -18
- package/iconsvg/SVG/DealerCheckIcon.tsx +18 -18
- package/iconsvg/SVG/DealerPopoverMail.tsx +21 -21
- package/iconsvg/SVG/DealerPopoverPhone.tsx +21 -21
- package/iconsvg/SVG/GrayPhoneIcon.tsx +22 -22
- package/iconsvg/SVG/InternetIcon.tsx +18 -18
- package/iconsvg/SVG/WhiteEnvelopeIcon.tsx +21 -21
- package/iconsvg/SVG/bodyType/Cabrio.tsx +23 -23
- package/iconsvg/SVG/bodyType/Coupe.tsx +22 -22
- package/iconsvg/SVG/bodyType/Minibus.tsx +22 -22
- package/iconsvg/SVG/bodyType/Other.tsx +25 -25
- package/iconsvg/SVG/bodyType/Sedan.tsx +22 -22
- package/iconsvg/SVG/bodyType/SelectorCategoryCombi.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryCompact.tsx +20 -20
- package/iconsvg/SVG/bodyType/SelectorCategoryConvertible.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryCoupe.tsx +60 -60
- package/iconsvg/SVG/bodyType/SelectorCategoryMinibus.tsx +64 -64
- package/iconsvg/SVG/bodyType/SelectorCategoryOther.tsx +60 -60
- package/iconsvg/SVG/bodyType/SelectorCategorySedan.tsx +69 -69
- package/iconsvg/SVG/bodyType/SelectorCategorySuv.tsx +77 -77
- package/iconsvg/SVG/bodyType/SelectorCategoryTransporter.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryVan.tsx +72 -72
- package/iconsvg/SVG/bodyType/Small.tsx +23 -23
- package/iconsvg/SVG/bodyType/Suv.tsx +23 -23
- package/iconsvg/SVG/bodyType/Van.tsx +23 -23
- package/iconsvg/SVG/bodyType/Wagon.tsx +23 -23
- package/iconsvg/SVG/common/AddIcon.tsx +16 -16
- package/iconsvg/SVG/common/AddPlus.tsx +16 -16
- package/iconsvg/SVG/common/AddressDashboard.tsx +29 -29
- package/iconsvg/SVG/common/AddressIcon.tsx +20 -20
- package/iconsvg/SVG/common/ArrowDetailedAccordionBlue.tsx +26 -26
- package/iconsvg/SVG/common/ArrowDownBlue.tsx +21 -21
- package/iconsvg/SVG/common/ArrowSelect.tsx +23 -23
- package/iconsvg/SVG/common/ArrowStepDown.tsx +18 -18
- package/iconsvg/SVG/common/Autocheck.tsx +19 -19
- package/iconsvg/SVG/common/AutodeLogo.tsx +36 -36
- package/iconsvg/SVG/common/Avatar.tsx +17 -17
- package/iconsvg/SVG/common/BellGray.tsx +19 -19
- package/iconsvg/SVG/common/BigInfoTransparent.tsx +13 -13
- package/iconsvg/SVG/common/Browse.tsx +20 -20
- package/iconsvg/SVG/common/Calendar.tsx +24 -24
- package/iconsvg/SVG/common/CallbackDashboard.tsx +30 -30
- package/iconsvg/SVG/common/Camera.tsx +17 -17
- package/iconsvg/SVG/common/Car.tsx +16 -16
- package/iconsvg/SVG/common/CarBody.tsx +19 -19
- package/iconsvg/SVG/common/CarFront.tsx +43 -43
- package/iconsvg/SVG/common/CarInspectionCheck.tsx +21 -21
- package/iconsvg/SVG/common/CarInspectionScheme0.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme1.tsx +53 -53
- package/iconsvg/SVG/common/CarInspectionScheme2.tsx +52 -52
- package/iconsvg/SVG/common/CarInspectionScheme3.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme4.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme5.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme6.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionSchemeGeneral copy.tsx +24 -24
- package/iconsvg/SVG/common/CarInspectionSchemeGeneral.tsx +24 -24
- package/iconsvg/SVG/common/CheckBlue.tsx +18 -18
- package/iconsvg/SVG/common/CheckGreen.tsx +22 -22
- package/iconsvg/SVG/common/CheckMark.tsx +16 -16
- package/iconsvg/SVG/common/CheckWhite.tsx +19 -19
- package/iconsvg/SVG/common/Chevron.tsx +17 -17
- package/iconsvg/SVG/common/CircledCheckmark.tsx +25 -25
- package/iconsvg/SVG/common/Clock.tsx +18 -18
- package/iconsvg/SVG/common/Close.tsx +19 -19
- package/iconsvg/SVG/common/CloseGrey.tsx +22 -22
- package/iconsvg/SVG/common/ContactEmail.tsx +21 -21
- package/iconsvg/SVG/common/ContactPhone.tsx +28 -28
- package/iconsvg/SVG/common/CopyIcon copy.tsx +22 -22
- package/iconsvg/SVG/common/CopyIcon.tsx +22 -22
- package/iconsvg/SVG/common/CopyIconForDealer.tsx +21 -21
- package/iconsvg/SVG/common/DashboardIcon.tsx +20 -20
- package/iconsvg/SVG/common/DashboardQuestionMark.tsx +20 -20
- package/iconsvg/SVG/common/DealersIcon.tsx +20 -20
- package/iconsvg/SVG/common/DeleteCircle.tsx +31 -31
- package/iconsvg/SVG/common/DeleteV1Icon.tsx +18 -18
- package/iconsvg/SVG/common/DeliveryDashboard.tsx +25 -25
- package/iconsvg/SVG/common/DeliveryMail.tsx +24 -24
- package/iconsvg/SVG/common/Discount100De.tsx +18 -18
- package/iconsvg/SVG/common/Discount100En.tsx +19 -19
- package/iconsvg/SVG/common/Discount66De.tsx +28 -28
- package/iconsvg/SVG/common/Discount66En.tsx +20 -20
- package/iconsvg/SVG/common/DoneIcon.tsx +18 -18
- package/iconsvg/SVG/common/EditCircle.tsx +32 -32
- package/iconsvg/SVG/common/EditPriceIcon.tsx +20 -20
- package/iconsvg/SVG/common/EuroCurrency.tsx +18 -18
- package/iconsvg/SVG/common/Export.tsx +20 -20
- package/iconsvg/SVG/common/Eye.tsx +17 -17
- package/iconsvg/SVG/common/EyeCatch.tsx +19 -19
- package/iconsvg/SVG/common/FavoritesIcon.tsx +20 -20
- package/iconsvg/SVG/common/FilterRange.tsx +16 -16
- package/iconsvg/SVG/common/FilterToolBlack.tsx +23 -23
- package/iconsvg/SVG/common/FlagDe.tsx +21 -21
- package/iconsvg/SVG/common/FlagEn.tsx +43 -43
- package/iconsvg/SVG/common/GrayEnvelopeIcon.tsx +19 -19
- package/iconsvg/SVG/common/HamburgerMenuIcon.tsx +18 -18
- package/iconsvg/SVG/common/HandingOverDashboard.tsx +32 -32
- package/iconsvg/SVG/common/ImageSettingsIcon.tsx +20 -20
- package/iconsvg/SVG/common/Info.tsx +16 -16
- package/iconsvg/SVG/common/InfoIcon.tsx +17 -17
- package/iconsvg/SVG/common/InfoTransparent.tsx +18 -18
- package/iconsvg/SVG/common/LogoutIcon.tsx +20 -20
- package/iconsvg/SVG/common/MagnifyingGlass.tsx +31 -31
- package/iconsvg/SVG/common/MenuArrow.tsx +16 -16
- package/iconsvg/SVG/common/MenuGrey.tsx +22 -22
- package/iconsvg/SVG/common/MobileDeLogo.tsx +108 -108
- package/iconsvg/SVG/common/MyOrderIcon.tsx +20 -20
- package/iconsvg/SVG/common/MyVehiclesIcon.tsx +20 -20
- package/iconsvg/SVG/common/NewFlagDe.tsx +25 -25
- package/iconsvg/SVG/common/NewFlagEn.tsx +34 -34
- package/iconsvg/SVG/common/OrderReceivedDashboard.tsx +27 -27
- package/iconsvg/SVG/common/Package.tsx +30 -30
- package/iconsvg/SVG/common/Phone.tsx +18 -18
- package/iconsvg/SVG/common/PhoneGrey.tsx +22 -22
- package/iconsvg/SVG/common/PickupDashboard.tsx +30 -30
- package/iconsvg/SVG/common/Picture.tsx +24 -24
- package/iconsvg/SVG/common/Pictures.tsx +32 -32
- package/iconsvg/SVG/common/Plus.tsx +16 -16
- package/iconsvg/SVG/common/PlusNew.tsx +16 -16
- package/iconsvg/SVG/common/PreparationDashboard.tsx +29 -29
- package/iconsvg/SVG/common/ProfileDashboard.tsx +24 -24
- package/iconsvg/SVG/common/ProfileIcon.tsx +17 -17
- package/iconsvg/SVG/common/Question.tsx +19 -19
- package/iconsvg/SVG/common/QuestionBold.tsx +25 -25
- package/iconsvg/SVG/common/RegistrationDashboard.tsx +31 -31
- package/iconsvg/SVG/common/SavedSearchsIcon.tsx +20 -20
- package/iconsvg/SVG/common/Search.tsx +19 -19
- package/iconsvg/SVG/common/SearchGrey.tsx +22 -22
- package/iconsvg/SVG/common/SettingPenIcon.tsx +20 -20
- package/iconsvg/SVG/common/Share.tsx +16 -16
- package/iconsvg/SVG/common/ShoppingCart.tsx +18 -18
- package/iconsvg/SVG/common/SliderArrow.tsx +21 -21
- package/iconsvg/SVG/common/SliderEye.tsx +17 -17
- package/iconsvg/SVG/common/SortUpDownArrows.tsx +18 -18
- package/iconsvg/SVG/common/Speedometer.tsx +23 -23
- package/iconsvg/SVG/common/Star.tsx +20 -20
- package/iconsvg/SVG/common/StarNew.tsx +16 -16
- package/iconsvg/SVG/common/StarOutline.tsx +20 -20
- package/iconsvg/SVG/common/StarRoundedCorners.tsx +18 -18
- package/iconsvg/SVG/common/Stats.tsx +17 -17
- package/iconsvg/SVG/common/Step1.tsx +21 -21
- package/iconsvg/SVG/common/Step2.tsx +20 -20
- package/iconsvg/SVG/common/Step3.tsx +21 -21
- package/iconsvg/SVG/common/SupportCallbackIcon.tsx +20 -20
- package/iconsvg/SVG/common/Telephone.tsx +22 -22
- package/iconsvg/SVG/common/Time.tsx +17 -17
- package/iconsvg/SVG/common/Timetable.tsx +18 -18
- package/iconsvg/SVG/common/Trash.tsx +22 -22
- package/iconsvg/SVG/common/TrashRed.tsx +23 -23
- package/iconsvg/SVG/common/Upload.tsx +17 -17
- package/iconsvg/SVG/common/UserGrey.tsx +22 -22
- package/iconsvg/SVG/common/UserProfileIcon.tsx +20 -20
- package/iconsvg/SVG/common/ValidateFailure.tsx +21 -21
- package/iconsvg/SVG/common/ValidateSuccess.tsx +21 -21
- package/iconsvg/SVG/common/WarningTriangle.tsx +20 -20
- package/iconsvg/SVG/common/WhiteArrowUp.tsx +21 -21
- package/iconsvg/SVG/common/WhiteKey.tsx +21 -21
- package/iconsvg/SVG/common/WhitePeople.tsx +23 -23
- package/iconsvg/SVG/common/WhiteTick.tsx +19 -19
- package/iconsvg/SVG/flags/AT.tsx +19 -19
- package/iconsvg/SVG/flags/BE.tsx +20 -20
- package/iconsvg/SVG/flags/BG.tsx +20 -20
- package/iconsvg/SVG/flags/CH.tsx +22 -22
- package/iconsvg/SVG/flags/CZ.tsx +18 -18
- package/iconsvg/SVG/flags/DE.tsx +18 -18
- package/iconsvg/SVG/flags/DK.tsx +18 -18
- package/iconsvg/SVG/flags/ES.tsx +2585 -2585
- package/iconsvg/SVG/flags/FI.tsx +18 -18
- package/iconsvg/SVG/flags/FR.tsx +20 -20
- package/iconsvg/SVG/flags/GB.tsx +26 -26
- package/iconsvg/SVG/flags/HR.tsx +135 -135
- package/iconsvg/SVG/flags/HU.tsx +20 -20
- package/iconsvg/SVG/flags/IT.tsx +20 -20
- package/iconsvg/SVG/flags/LI.tsx +106 -106
- package/iconsvg/SVG/flags/LU.tsx +18 -18
- package/iconsvg/SVG/flags/NL.tsx +18 -18
- package/iconsvg/SVG/flags/NO.tsx +20 -20
- package/iconsvg/SVG/flags/PL.tsx +19 -19
- package/iconsvg/SVG/flags/RO.tsx +20 -20
- package/iconsvg/SVG/flags/RU.tsx +20 -20
- package/iconsvg/SVG/flags/SE.tsx +20 -20
- package/iconsvg/SVG/flags/SI.tsx +54 -54
- package/iconsvg/SVG/flags/SK.tsx +34 -34
- package/iconsvg/SVG/flags/UA.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/14DaysReturnPolicy.tsx +18 -18
- package/iconsvg/SVG/infoBlocks/AlertInfo.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/Autocheck.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/CheckTheStory.tsx +22 -22
- package/iconsvg/SVG/infoBlocks/CustomerServiceWhite.tsx +16 -16
- package/iconsvg/SVG/infoBlocks/Guarantee.tsx +16 -16
- package/iconsvg/SVG/infoBlocks/OrderWhite.tsx +13 -13
- package/iconsvg/SVG/infoBlocks/PriceGuarantee.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/PriceGuaranteeWhite.tsx +17 -17
- package/iconsvg/SVG/infoBlocks/TransportAndDelivery.tsx +21 -21
- package/iconsvg/SVG/infoBlocks/Warranty.tsx +23 -23
- package/iconsvg/SVG/popower/Mail.tsx +18 -18
- package/iconsvg/SVG/popower/Phone.tsx +19 -19
- package/iconsvg/SVG/popower/Schedule.tsx +18 -18
- package/iconsvg/SVG/searchWidgets/drive/AAllWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/AllWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/FrontWheelDrive.tsx +25 -25
- package/iconsvg/SVG/searchWidgets/drive/OtherWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/RearWheelDrive.tsx +25 -25
- package/iconsvg/SVG/searchWidgets/fuel/FuelDiesel.tsx +18 -18
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectrical.tsx +19 -19
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalDiesel.tsx +34 -34
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalPetrol.tsx +20 -20
- package/iconsvg/SVG/searchWidgets/fuel/FuelEthanol.tsx +53 -53
- package/iconsvg/SVG/searchWidgets/fuel/FuelHydrogen.tsx +24 -24
- package/iconsvg/SVG/searchWidgets/fuel/FuelLpg.tsx +24 -24
- package/iconsvg/SVG/searchWidgets/fuel/FuelNaturalGas.tsx +23 -23
- package/iconsvg/SVG/searchWidgets/fuel/FuelOther.tsx +28 -28
- package/iconsvg/SVG/searchWidgets/fuel/FuelPetrol.tsx +18 -18
- package/iconsvg/SVG/settings/Account.tsx +17 -17
- package/iconsvg/SVG/settings/DataUsage.tsx +17 -17
- package/iconsvg/SVG/settings/MarketResearch.tsx +17 -17
- package/iconsvg/SVG/settings/Newsletter.tsx +17 -17
- package/iconsvg/SVG/settings/RemoveEye.tsx +17 -17
- package/iconsvg/SVG/settings/RemoveEyeOff.tsx +17 -17
- package/iconsvg/SVG/settings/Security.tsx +17 -17
- package/iconsvg/SVG/settings/Warning.tsx +17 -17
- package/iconsvg/SVG/slider/360.tsx +23 -23
- package/iconsvg/SVG/slider/360New.tsx +20 -20
- package/iconsvg/SVG/slider/Checked.tsx +19 -19
- package/iconsvg/SVG/slider/DiscountRibbon.tsx +51 -51
- package/iconsvg/SVG/slider/DiscountRibbonMobile.tsx +47 -47
- package/iconsvg/SVG/slider/DiscountRibbonNew.tsx +29 -29
- package/iconsvg/SVG/slider/Easy.tsx +19 -19
- package/iconsvg/SVG/slider/Fullscreen.tsx +16 -16
- package/iconsvg/SVG/slider/FullscreenWindow.tsx +23 -23
- package/iconsvg/SVG/slider/Safe.tsx +19 -19
- package/iconsvg/SVG/slider/ToBuy.tsx +19 -19
- package/iconsvg/SVG/slider/YoutubeButton.tsx +26 -26
- package/iconsvg/SVG/slider/ZoomIn.tsx +21 -21
- package/iconsvg/SVG/slider/ZoomOut.tsx +21 -21
- package/iconsvg/SVG/social/AndroidLogo.tsx +18 -18
- package/iconsvg/SVG/social/Apple.tsx +19 -19
- package/iconsvg/SVG/social/FacebookF.tsx +19 -19
- package/iconsvg/SVG/social/GooglePlusG.tsx +19 -19
- package/iconsvg/SVG/social/Instagram.tsx +17 -17
- package/iconsvg/SVG/social/Pinterest.tsx +19 -19
- package/iconsvg/SVG/social/SharingInterface.tsx +21 -21
- package/iconsvg/SVG/social/Twitter.tsx +19 -19
- package/iconsvg/SVG/social/Youtube.tsx +19 -19
- package/iconsvg/SVG/vehicle/AboIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Abs.tsx +24 -24
- package/iconsvg/SVG/vehicle/AirCond.tsx +34 -34
- package/iconsvg/SVG/vehicle/Airbag.tsx +21 -21
- package/iconsvg/SVG/vehicle/AuxiliaryHeating.tsx +23 -23
- package/iconsvg/SVG/vehicle/Bluetooth.tsx +22 -22
- package/iconsvg/SVG/vehicle/BuyIcon.tsx +15 -15
- package/iconsvg/SVG/vehicle/CarAvailability.tsx +22 -22
- package/iconsvg/SVG/vehicle/CarInspectionCheck.tsx +21 -21
- package/iconsvg/SVG/vehicle/CarInspectionCross.tsx +21 -21
- package/iconsvg/SVG/vehicle/CheckoutChecked.tsx +15 -15
- package/iconsvg/SVG/vehicle/Co2.tsx +24 -24
- package/iconsvg/SVG/vehicle/CruiseControl.tsx +25 -25
- package/iconsvg/SVG/vehicle/Date.tsx +21 -21
- package/iconsvg/SVG/vehicle/Delivery.tsx +12 -12
- package/iconsvg/SVG/vehicle/Diesel.tsx +28 -28
- package/iconsvg/SVG/vehicle/Display.tsx +25 -25
- package/iconsvg/SVG/vehicle/Done.tsx +11 -11
- package/iconsvg/SVG/vehicle/Door.tsx +19 -19
- package/iconsvg/SVG/vehicle/DoubleDone.tsx +18 -18
- package/iconsvg/SVG/vehicle/EditIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/EmergencyBrakeAssistant.tsx +27 -27
- package/iconsvg/SVG/vehicle/Eps.tsx +24 -24
- package/iconsvg/SVG/vehicle/Esp.tsx +24 -24
- package/iconsvg/SVG/vehicle/FinancingIcon.tsx +20 -20
- package/iconsvg/SVG/vehicle/FuelConsumption.tsx +20 -20
- package/iconsvg/SVG/vehicle/Fueling.tsx +22 -22
- package/iconsvg/SVG/vehicle/FullDrive.tsx +24 -24
- package/iconsvg/SVG/vehicle/GasElectric.tsx +28 -28
- package/iconsvg/SVG/vehicle/HandsFreePhoneSystem.tsx +24 -24
- package/iconsvg/SVG/vehicle/Kw.tsx +23 -23
- package/iconsvg/SVG/vehicle/LastCrawledAt.tsx +22 -22
- package/iconsvg/SVG/vehicle/LeasingIcon.tsx +14 -14
- package/iconsvg/SVG/vehicle/Led.tsx +24 -24
- package/iconsvg/SVG/vehicle/LightSensor.tsx +22 -22
- package/iconsvg/SVG/vehicle/LinkAlternative.tsx +15 -15
- package/iconsvg/SVG/vehicle/Location.tsx +17 -17
- package/iconsvg/SVG/vehicle/MinusIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Mirror.tsx +19 -19
- package/iconsvg/SVG/vehicle/Navigation.tsx +27 -27
- package/iconsvg/SVG/vehicle/NewCar.tsx +21 -21
- package/iconsvg/SVG/vehicle/NoImage.tsx +17 -17
- package/iconsvg/SVG/vehicle/Owner.tsx +18 -18
- package/iconsvg/SVG/vehicle/PanoramicRoof.tsx +23 -23
- package/iconsvg/SVG/vehicle/ParkingAssistants.tsx +24 -24
- package/iconsvg/SVG/vehicle/PickYourself.tsx +18 -18
- package/iconsvg/SVG/vehicle/PlusIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Power.tsx +21 -21
- package/iconsvg/SVG/vehicle/Ps.tsx +19 -19
- package/iconsvg/SVG/vehicle/Question.tsx +24 -24
- package/iconsvg/SVG/vehicle/Seats.tsx +21 -21
- package/iconsvg/SVG/vehicle/SeatsHeating.tsx +26 -26
- package/iconsvg/SVG/vehicle/SelectorGearboxAutomatic.tsx +24 -24
- package/iconsvg/SVG/vehicle/SelectorGearboxManualShift.tsx +19 -19
- package/iconsvg/SVG/vehicle/SelectorGearboxOther.tsx +24 -24
- package/iconsvg/SVG/vehicle/SelectorGearboxSemiAutomatic.tsx +30 -30
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeAlcantara.tsx +225 -225
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeFabric.tsx +29 -29
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeFullLeather.tsx +29 -29
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeOther.tsx +26 -26
- package/iconsvg/SVG/vehicle/SelectorInteriorTypePartLeather.tsx +142 -142
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeSyntheticLeather.tsx +27 -27
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeVelours.tsx +39 -39
- package/iconsvg/SVG/vehicle/Shield.tsx +39 -39
- package/iconsvg/SVG/vehicle/Speedometer.tsx +17 -17
- package/iconsvg/SVG/vehicle/StartStopSystem.tsx +30 -30
- package/iconsvg/SVG/vehicle/Stop.tsx +25 -25
- package/iconsvg/SVG/vehicle/TickMark.tsx +21 -21
- package/iconsvg/SVG/vehicle/TrafficSignRecognition.tsx +29 -29
- package/iconsvg/SVG/vehicle/TrailerCoupling.tsx +24 -24
- package/iconsvg/SVG/vehicle/Transmission.tsx +27 -27
- package/iconsvg/SVG/vehicle/Wheel.tsx +43 -43
- package/iconsvg/SVG/vehicle/Wipers.tsx +22 -22
- package/iconsvg/SVG/vehicle/Wrench.tsx +17 -17
- package/iconsvg/index.ts +7 -7
- package/index.ts +18 -18
- package/locales/de/autobahn.json +676 -671
- package/locales/en/autobahn.json +676 -671
- package/locales/legacy/SearchDetailedPage.ts +205 -205
- package/locales/legacy/cbd.ts +719 -719
- package/locales/legacy/common.ts +109 -109
- package/locales/legacy/data.ts +1118 -1118
- package/locales/legacy/priceRating.ts +10 -10
- package/locales/legacy/sortingOptions.ts +21 -21
- package/media/images/raiting-stars-min.svg +7 -7
- package/media/images/refresh-button.svg +49 -49
- package/media/images/user-icon.svg +16 -16
- package/media/svg/infoBlocks/whyAutodeIconSet-F.svg +9 -9
- package/media/svg/infoBlocks/whyAutodeIconSet-G.svg +8 -8
- package/media/svg/infoBlocks/whyAutodeIconSet-Q.svg +6 -6
- package/media/svg/infoBlocks/whyAutodeIconSet-R.svg +9 -9
- package/media/svg/usp/icon1.svg +16 -16
- package/media/svg/usp/icon2.svg +13 -13
- package/media/svg/usp/icon3.svg +10 -10
- package/media/svg/usp/icon4.svg +14 -14
- package/package.json +30 -30
- package/schemes/AggregationScheme.ts +73 -73
- package/searchFilters/filterOptions.ts +119 -119
- package/searchFilters/filterProps.ts +35 -35
- package/searchFilters/index.ts +15 -15
- package/theme/autobahn.css +25 -25
- package/theme/colors_and_type.css +113 -113
- package/theme/md3.css +2045 -2034
- package/types/types.ts +373 -373
- package/types.ts +8 -8
- package/ui/Accordion.tsx +134 -134
- package/ui/Button.tsx +62 -62
- package/ui/CardCarousel.tsx +133 -133
- package/ui/Chip.tsx +29 -29
- package/ui/DatePicker.tsx +145 -145
- package/ui/Dropdown.tsx +205 -205
- package/ui/FileUpload.tsx +154 -154
- package/ui/FormCheckbox.tsx +79 -79
- package/ui/FormDropdown.tsx +327 -327
- package/ui/FormField.tsx +88 -88
- package/ui/FormRadio.tsx +93 -93
- package/ui/FormRadioGroup.tsx +106 -106
- package/ui/Icon.tsx +391 -391
- package/ui/IconButton.tsx +44 -44
- package/ui/Modal.tsx +187 -187
- package/ui/Pagination.tsx +140 -140
- package/ui/Price.tsx +25 -25
- package/ui/PriceEvalBar.tsx +48 -48
- package/ui/SaveChip.tsx +34 -34
- package/ui/Segmented.tsx +48 -48
- package/ui/Skeleton.tsx +75 -75
- package/ui/Spec.tsx +24 -24
- package/ui/Stars.tsx +29 -29
- package/ui/StatChip.tsx +21 -21
- package/ui/Stepper.tsx +106 -106
- package/ui/Switch.tsx +65 -65
- package/ui/Table.tsx +156 -156
- package/ui/Textarea.tsx +58 -58
- package/ui/index.ts +88 -88
- package/utils/CommonUtils.ts +648 -648
- package/utils/DateUtils.ts +101 -101
- package/utils/index.ts +74 -74
- package/utils/power.ts +11 -11
- package/utils/query.ts +21 -21
- package/vdp/FinanceCalculator.tsx +465 -465
- package/vdp/VdpModules.tsx +1490 -1490
- package/vdp/VdpViewer.tsx +209 -209
- package/vdp/index.ts +75 -75
- package/vdp/types.ts +197 -197
- package/vehiclesProps/cbdSelectors.ts +117 -117
- package/vehiclesProps/decoratedLightProps.tsx +572 -572
- package/vehiclesProps/decoratedProps.tsx +1746 -1746
- package/vehiclesProps/equipment.ts +129 -129
- package/vehiclesProps/vehicleDetails.ts +428 -428
- package/widgets/SearchBox.tsx +256 -256
- package/widgets/index.ts +5 -5
package/ui/FormField.tsx
CHANGED
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 form field bound to a mobx-react-form field.
|
|
2
|
-
//
|
|
3
|
-
// The Wave-0 form-kit input: a labelled, outlined MD3 text field that binds directly to a
|
|
4
|
-
// mobx-react-form field via field.bind() — the SAME field objects the legacy FormInput used
|
|
5
|
-
// (LoginForm.$('email'), RegisterForm.$('password'), …). So every existing validation rule,
|
|
6
|
-
// onChange/onBlur, submit hook and error works unchanged; only the markup is re-skinned.
|
|
7
|
-
//
|
|
8
|
-
// Observer-wrapped so it re-renders on field value/error changes. Renders correctly only inside
|
|
9
|
-
// a `.md3` subtree (scoped theme). Pure/presentational beyond the injected field.
|
|
10
|
-
|
|
11
|
-
import * as React from 'react';
|
|
12
|
-
import { observer } from 'mobx-react';
|
|
13
|
-
|
|
14
|
-
import Icon from './Icon';
|
|
15
|
-
|
|
16
|
-
export interface FormFieldProps {
|
|
17
|
-
/** mobx-react-form field (LoginForm.$('email') etc.). Typed any — the lib ships no TS types. */
|
|
18
|
-
field: any;
|
|
19
|
-
/** i18n translate (AuthRegisterPage ns) — resolves the field's placeholder/label key. */
|
|
20
|
-
t: (key: string, options?: object) => string;
|
|
21
|
-
/** override the field's own type (e.g. force 'password'). */
|
|
22
|
-
type?: string;
|
|
23
|
-
id?: string;
|
|
24
|
-
autoComplete?: 'on' | 'off';
|
|
25
|
-
disabled?: boolean;
|
|
26
|
-
onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
27
|
-
/** suppress the built-in label (for layouts that supply their own external label next to the field). */
|
|
28
|
-
hideLabel?: boolean;
|
|
29
|
-
/** opt-in: show a green check + green border when the field is filled and valid (checkout). */
|
|
30
|
-
showValid?: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const FormField: React.FunctionComponent<FormFieldProps> = observer(
|
|
34
|
-
({ field, t, type, id, autoComplete, disabled, onKeyPress, hideLabel, showValid }) => {
|
|
35
|
-
const [reveal, setReveal] = React.useState<boolean>(false);
|
|
36
|
-
// Auto-generate a stable id (React 18 useId) when the caller doesn't pass one, so the
|
|
37
|
-
// <label htmlFor> below is ALWAYS wired to a real input id — ~30 call sites (incl. the
|
|
38
|
-
// checkout money-path) never pass `id` and previously rendered an unassociated label.
|
|
39
|
-
// useId() is called unconditionally (rules-of-hooks) even when `id` is supplied; the
|
|
40
|
-
// generated value is simply discarded in that case (`id ||` wins), so it never appears
|
|
41
|
-
// for `id`-bearing fields.
|
|
42
|
-
const generatedId = React.useId();
|
|
43
|
-
const inputId = id || generatedId;
|
|
44
|
-
const bound = field.bind();
|
|
45
|
-
const fieldType: string = type || field.type || 'text';
|
|
46
|
-
const isPassword = fieldType === 'password';
|
|
47
|
-
const inputType = isPassword && reveal ? 'text' : fieldType;
|
|
48
|
-
const hasError = !!field.hasError && !!field.error;
|
|
49
|
-
const isValid = !!showValid && !disabled && !isPassword && !hasError && !!field.value;
|
|
50
|
-
// Visible label (a11y). Prefer the translated placeholder key (Auth forms), else translate the
|
|
51
|
-
// field's label key (Checkout forms use i18n keys as `label`). t() returns the input unchanged
|
|
52
|
-
// when there's no translation (Auth labels are plain strings), so this is safe for both.
|
|
53
|
-
const label = field.placeholder ? t(field.placeholder) : field.label ? t(field.label) : '';
|
|
54
|
-
|
|
55
|
-
return (
|
|
56
|
-
<div className="mfield-group">
|
|
57
|
-
{label && !hideLabel ? <label className="md-label-sm mfield-label" htmlFor={inputId}>{label}</label> : null}
|
|
58
|
-
<div className={'mfield' + (hasError ? ' mfield--error' : '') + (disabled ? ' mfield--disabled' : '') + (isValid ? ' mfield--valid' : '')}>
|
|
59
|
-
<input
|
|
60
|
-
{...bound}
|
|
61
|
-
id={inputId}
|
|
62
|
-
type={inputType}
|
|
63
|
-
autoComplete={autoComplete}
|
|
64
|
-
disabled={disabled}
|
|
65
|
-
placeholder=""
|
|
66
|
-
onKeyPress={onKeyPress}
|
|
67
|
-
style={{ width: '100%' }}
|
|
68
|
-
/>
|
|
69
|
-
{isPassword ? (
|
|
70
|
-
<button
|
|
71
|
-
type="button"
|
|
72
|
-
className="mfield-eye"
|
|
73
|
-
tabIndex={-1}
|
|
74
|
-
aria-label={t('autobahn:auth.togglePassword')}
|
|
75
|
-
onClick={() => setReveal((r) => !r)}
|
|
76
|
-
>
|
|
77
|
-
<Icon name={reveal ? 'eye-off' : 'eye'} size={18} />
|
|
78
|
-
</button>
|
|
79
|
-
) : null}
|
|
80
|
-
{isValid ? <span className="mfield-ok"><Icon name="check" size={18} /></span> : null}
|
|
81
|
-
</div>
|
|
82
|
-
{hasError ? <span className="mfield-error-text">{field.error}</span> : null}
|
|
83
|
-
</div>
|
|
84
|
-
);
|
|
85
|
-
},
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
export default FormField;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 form field bound to a mobx-react-form field.
|
|
2
|
+
//
|
|
3
|
+
// The Wave-0 form-kit input: a labelled, outlined MD3 text field that binds directly to a
|
|
4
|
+
// mobx-react-form field via field.bind() — the SAME field objects the legacy FormInput used
|
|
5
|
+
// (LoginForm.$('email'), RegisterForm.$('password'), …). So every existing validation rule,
|
|
6
|
+
// onChange/onBlur, submit hook and error works unchanged; only the markup is re-skinned.
|
|
7
|
+
//
|
|
8
|
+
// Observer-wrapped so it re-renders on field value/error changes. Renders correctly only inside
|
|
9
|
+
// a `.md3` subtree (scoped theme). Pure/presentational beyond the injected field.
|
|
10
|
+
|
|
11
|
+
import * as React from 'react';
|
|
12
|
+
import { observer } from 'mobx-react';
|
|
13
|
+
|
|
14
|
+
import Icon from './Icon';
|
|
15
|
+
|
|
16
|
+
export interface FormFieldProps {
|
|
17
|
+
/** mobx-react-form field (LoginForm.$('email') etc.). Typed any — the lib ships no TS types. */
|
|
18
|
+
field: any;
|
|
19
|
+
/** i18n translate (AuthRegisterPage ns) — resolves the field's placeholder/label key. */
|
|
20
|
+
t: (key: string, options?: object) => string;
|
|
21
|
+
/** override the field's own type (e.g. force 'password'). */
|
|
22
|
+
type?: string;
|
|
23
|
+
id?: string;
|
|
24
|
+
autoComplete?: 'on' | 'off';
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
27
|
+
/** suppress the built-in label (for layouts that supply their own external label next to the field). */
|
|
28
|
+
hideLabel?: boolean;
|
|
29
|
+
/** opt-in: show a green check + green border when the field is filled and valid (checkout). */
|
|
30
|
+
showValid?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const FormField: React.FunctionComponent<FormFieldProps> = observer(
|
|
34
|
+
({ field, t, type, id, autoComplete, disabled, onKeyPress, hideLabel, showValid }) => {
|
|
35
|
+
const [reveal, setReveal] = React.useState<boolean>(false);
|
|
36
|
+
// Auto-generate a stable id (React 18 useId) when the caller doesn't pass one, so the
|
|
37
|
+
// <label htmlFor> below is ALWAYS wired to a real input id — ~30 call sites (incl. the
|
|
38
|
+
// checkout money-path) never pass `id` and previously rendered an unassociated label.
|
|
39
|
+
// useId() is called unconditionally (rules-of-hooks) even when `id` is supplied; the
|
|
40
|
+
// generated value is simply discarded in that case (`id ||` wins), so it never appears
|
|
41
|
+
// for `id`-bearing fields.
|
|
42
|
+
const generatedId = React.useId();
|
|
43
|
+
const inputId = id || generatedId;
|
|
44
|
+
const bound = field.bind();
|
|
45
|
+
const fieldType: string = type || field.type || 'text';
|
|
46
|
+
const isPassword = fieldType === 'password';
|
|
47
|
+
const inputType = isPassword && reveal ? 'text' : fieldType;
|
|
48
|
+
const hasError = !!field.hasError && !!field.error;
|
|
49
|
+
const isValid = !!showValid && !disabled && !isPassword && !hasError && !!field.value;
|
|
50
|
+
// Visible label (a11y). Prefer the translated placeholder key (Auth forms), else translate the
|
|
51
|
+
// field's label key (Checkout forms use i18n keys as `label`). t() returns the input unchanged
|
|
52
|
+
// when there's no translation (Auth labels are plain strings), so this is safe for both.
|
|
53
|
+
const label = field.placeholder ? t(field.placeholder) : field.label ? t(field.label) : '';
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<div className="mfield-group">
|
|
57
|
+
{label && !hideLabel ? <label className="md-label-sm mfield-label" htmlFor={inputId}>{label}</label> : null}
|
|
58
|
+
<div className={'mfield' + (hasError ? ' mfield--error' : '') + (disabled ? ' mfield--disabled' : '') + (isValid ? ' mfield--valid' : '')}>
|
|
59
|
+
<input
|
|
60
|
+
{...bound}
|
|
61
|
+
id={inputId}
|
|
62
|
+
type={inputType}
|
|
63
|
+
autoComplete={autoComplete}
|
|
64
|
+
disabled={disabled}
|
|
65
|
+
placeholder=""
|
|
66
|
+
onKeyPress={onKeyPress}
|
|
67
|
+
style={{ width: '100%' }}
|
|
68
|
+
/>
|
|
69
|
+
{isPassword ? (
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
className="mfield-eye"
|
|
73
|
+
tabIndex={-1}
|
|
74
|
+
aria-label={t('autobahn:auth.togglePassword')}
|
|
75
|
+
onClick={() => setReveal((r) => !r)}
|
|
76
|
+
>
|
|
77
|
+
<Icon name={reveal ? 'eye-off' : 'eye'} size={18} />
|
|
78
|
+
</button>
|
|
79
|
+
) : null}
|
|
80
|
+
{isValid ? <span className="mfield-ok"><Icon name="check" size={18} /></span> : null}
|
|
81
|
+
</div>
|
|
82
|
+
{hasError ? <span className="mfield-error-text">{field.error}</span> : null}
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
},
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
export default FormField;
|
package/ui/FormRadio.tsx
CHANGED
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 selectable radio wrapper.
|
|
2
|
-
//
|
|
3
|
-
// The leaf of the md3 radio pair (used with FormRadioGroup). It is a SELECTABLE WRAPPER around
|
|
4
|
-
// ARBITRARY children, re-skinning the legacy fe-ui-core radio child (a `CheckboxMaterial radio`
|
|
5
|
-
// or `_common/Radio`) used across 5 pages — including the RICH custom-label radios in
|
|
6
|
-
// VehicleEdit/VehicleAdd: exterior/interior color swatches, Feinstaub emission stickers,
|
|
7
|
-
// interior-material icons, energy-efficiency bars, and DAT-model spec grids. Text-only is just
|
|
8
|
-
// the simple case; the mandatory case is arbitrary children, so a radio can contain any markup.
|
|
9
|
-
//
|
|
10
|
-
// LEGACY SIGNATURE (replicated so a structure-preserving re-skin is a drop-in):
|
|
11
|
-
// In the legacy tree the group (`fe-ui-core` RadioGroup / our FormMaterialRadioGroup → MUI
|
|
12
|
-
// RadioGroup) CLONES each child injecting `checked` (computed from `child.value === group.value`)
|
|
13
|
-
// plus an `onChange`. The child carries the option key in `value` and renders its visual via
|
|
14
|
-
// `content` / `icon` / `label`. Here the SAME shape is preserved: `value` is the option key,
|
|
15
|
-
// the children are the visual, and FormRadioGroup injects `checked` + `onSelect` (and the shared
|
|
16
|
-
// `name` / `disabled` / `error`) by cloning. The child fires `onSelect(value)` on activation —
|
|
17
|
-
// the group is what talks to the mobx field, never the leaf.
|
|
18
|
-
//
|
|
19
|
-
// A native hidden `<input type="radio">` is kept (as the legacy `_common/Radio` did) so the control
|
|
20
|
-
// is real radio semantics for a11y + forms; the visible chrome is the md3 `.mradio` surface with a
|
|
21
|
-
// selected ring/outline driven by `checked`. Pure/presentational. Renders correctly only inside a
|
|
22
|
-
// `<div className="md3">` subtree (scoped theme).
|
|
23
|
-
|
|
24
|
-
import * as React from 'react';
|
|
25
|
-
|
|
26
|
-
export interface FormRadioProps {
|
|
27
|
-
/** the option key this radio represents (compared against the group's field.value). */
|
|
28
|
-
value: any;
|
|
29
|
-
/** arbitrary visual: plain text, a color swatch, an emission-sticker <img>, an icon, a spec grid… */
|
|
30
|
-
children?: React.ReactNode;
|
|
31
|
-
disabled?: boolean;
|
|
32
|
-
/** accessible label when `children` is non-text (swatch/icon/img) and needs a name. */
|
|
33
|
-
ariaLabel?: string;
|
|
34
|
-
/** extra class(es) on the wrapper (layout hooks from the caller). */
|
|
35
|
-
className?: string;
|
|
36
|
-
/** inline style on the wrapper `<label>` (layout hooks the caller cannot express as a class,
|
|
37
|
-
* e.g. a full-width stacked DAT-model row). Optional; merged onto the `.mradio` surface. */
|
|
38
|
-
style?: React.CSSProperties;
|
|
39
|
-
|
|
40
|
-
// ---- injected by FormRadioGroup via React.cloneElement (do not pass by hand) ----
|
|
41
|
-
/** true when this radio's `value` is the group's selected value. */
|
|
42
|
-
checked?: boolean;
|
|
43
|
-
/** group callback — fires with this radio's `value` on activation. */
|
|
44
|
-
onSelect?: (value: any) => void;
|
|
45
|
-
/** shared radio-group name (so the native inputs form one exclusive group). */
|
|
46
|
-
name?: string;
|
|
47
|
-
/** mirrors the group's error state (red ring), matching the legacy `error` clone prop. */
|
|
48
|
-
error?: boolean;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const FormRadio: React.FunctionComponent<FormRadioProps> = ({
|
|
52
|
-
value,
|
|
53
|
-
children,
|
|
54
|
-
disabled = false,
|
|
55
|
-
ariaLabel,
|
|
56
|
-
className,
|
|
57
|
-
style,
|
|
58
|
-
checked = false,
|
|
59
|
-
onSelect,
|
|
60
|
-
name,
|
|
61
|
-
error = false,
|
|
62
|
-
}) => {
|
|
63
|
-
const handleChange = () => {
|
|
64
|
-
if (disabled) return;
|
|
65
|
-
if (onSelect) onSelect(value);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const cls =
|
|
69
|
-
'mradio' +
|
|
70
|
-
(checked ? ' mradio--on' : '') +
|
|
71
|
-
(disabled ? ' mradio--disabled' : '') +
|
|
72
|
-
(error && !checked ? ' mradio--error' : '') +
|
|
73
|
-
(className ? ` ${className}` : '');
|
|
74
|
-
|
|
75
|
-
return (
|
|
76
|
-
<label className={cls} style={style}>
|
|
77
|
-
{/* Real radio input (hidden) — keeps native exclusive-group + keyboard + a11y semantics. */}
|
|
78
|
-
<input
|
|
79
|
-
type="radio"
|
|
80
|
-
className="mradio-input"
|
|
81
|
-
name={name}
|
|
82
|
-
value={value}
|
|
83
|
-
checked={checked}
|
|
84
|
-
disabled={disabled}
|
|
85
|
-
aria-label={ariaLabel}
|
|
86
|
-
onChange={handleChange}
|
|
87
|
-
/>
|
|
88
|
-
<span className="mradio-body">{children}</span>
|
|
89
|
-
</label>
|
|
90
|
-
);
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
export default FormRadio;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 selectable radio wrapper.
|
|
2
|
+
//
|
|
3
|
+
// The leaf of the md3 radio pair (used with FormRadioGroup). It is a SELECTABLE WRAPPER around
|
|
4
|
+
// ARBITRARY children, re-skinning the legacy fe-ui-core radio child (a `CheckboxMaterial radio`
|
|
5
|
+
// or `_common/Radio`) used across 5 pages — including the RICH custom-label radios in
|
|
6
|
+
// VehicleEdit/VehicleAdd: exterior/interior color swatches, Feinstaub emission stickers,
|
|
7
|
+
// interior-material icons, energy-efficiency bars, and DAT-model spec grids. Text-only is just
|
|
8
|
+
// the simple case; the mandatory case is arbitrary children, so a radio can contain any markup.
|
|
9
|
+
//
|
|
10
|
+
// LEGACY SIGNATURE (replicated so a structure-preserving re-skin is a drop-in):
|
|
11
|
+
// In the legacy tree the group (`fe-ui-core` RadioGroup / our FormMaterialRadioGroup → MUI
|
|
12
|
+
// RadioGroup) CLONES each child injecting `checked` (computed from `child.value === group.value`)
|
|
13
|
+
// plus an `onChange`. The child carries the option key in `value` and renders its visual via
|
|
14
|
+
// `content` / `icon` / `label`. Here the SAME shape is preserved: `value` is the option key,
|
|
15
|
+
// the children are the visual, and FormRadioGroup injects `checked` + `onSelect` (and the shared
|
|
16
|
+
// `name` / `disabled` / `error`) by cloning. The child fires `onSelect(value)` on activation —
|
|
17
|
+
// the group is what talks to the mobx field, never the leaf.
|
|
18
|
+
//
|
|
19
|
+
// A native hidden `<input type="radio">` is kept (as the legacy `_common/Radio` did) so the control
|
|
20
|
+
// is real radio semantics for a11y + forms; the visible chrome is the md3 `.mradio` surface with a
|
|
21
|
+
// selected ring/outline driven by `checked`. Pure/presentational. Renders correctly only inside a
|
|
22
|
+
// `<div className="md3">` subtree (scoped theme).
|
|
23
|
+
|
|
24
|
+
import * as React from 'react';
|
|
25
|
+
|
|
26
|
+
export interface FormRadioProps {
|
|
27
|
+
/** the option key this radio represents (compared against the group's field.value). */
|
|
28
|
+
value: any;
|
|
29
|
+
/** arbitrary visual: plain text, a color swatch, an emission-sticker <img>, an icon, a spec grid… */
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
/** accessible label when `children` is non-text (swatch/icon/img) and needs a name. */
|
|
33
|
+
ariaLabel?: string;
|
|
34
|
+
/** extra class(es) on the wrapper (layout hooks from the caller). */
|
|
35
|
+
className?: string;
|
|
36
|
+
/** inline style on the wrapper `<label>` (layout hooks the caller cannot express as a class,
|
|
37
|
+
* e.g. a full-width stacked DAT-model row). Optional; merged onto the `.mradio` surface. */
|
|
38
|
+
style?: React.CSSProperties;
|
|
39
|
+
|
|
40
|
+
// ---- injected by FormRadioGroup via React.cloneElement (do not pass by hand) ----
|
|
41
|
+
/** true when this radio's `value` is the group's selected value. */
|
|
42
|
+
checked?: boolean;
|
|
43
|
+
/** group callback — fires with this radio's `value` on activation. */
|
|
44
|
+
onSelect?: (value: any) => void;
|
|
45
|
+
/** shared radio-group name (so the native inputs form one exclusive group). */
|
|
46
|
+
name?: string;
|
|
47
|
+
/** mirrors the group's error state (red ring), matching the legacy `error` clone prop. */
|
|
48
|
+
error?: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const FormRadio: React.FunctionComponent<FormRadioProps> = ({
|
|
52
|
+
value,
|
|
53
|
+
children,
|
|
54
|
+
disabled = false,
|
|
55
|
+
ariaLabel,
|
|
56
|
+
className,
|
|
57
|
+
style,
|
|
58
|
+
checked = false,
|
|
59
|
+
onSelect,
|
|
60
|
+
name,
|
|
61
|
+
error = false,
|
|
62
|
+
}) => {
|
|
63
|
+
const handleChange = () => {
|
|
64
|
+
if (disabled) return;
|
|
65
|
+
if (onSelect) onSelect(value);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const cls =
|
|
69
|
+
'mradio' +
|
|
70
|
+
(checked ? ' mradio--on' : '') +
|
|
71
|
+
(disabled ? ' mradio--disabled' : '') +
|
|
72
|
+
(error && !checked ? ' mradio--error' : '') +
|
|
73
|
+
(className ? ` ${className}` : '');
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<label className={cls} style={style}>
|
|
77
|
+
{/* Real radio input (hidden) — keeps native exclusive-group + keyboard + a11y semantics. */}
|
|
78
|
+
<input
|
|
79
|
+
type="radio"
|
|
80
|
+
className="mradio-input"
|
|
81
|
+
name={name}
|
|
82
|
+
value={value}
|
|
83
|
+
checked={checked}
|
|
84
|
+
disabled={disabled}
|
|
85
|
+
aria-label={ariaLabel}
|
|
86
|
+
onChange={handleChange}
|
|
87
|
+
/>
|
|
88
|
+
<span className="mradio-body">{children}</span>
|
|
89
|
+
</label>
|
|
90
|
+
);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export default FormRadio;
|
package/ui/FormRadioGroup.tsx
CHANGED
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 radio group bound to a mobx-react-form field.
|
|
2
|
-
//
|
|
3
|
-
// Drop-in re-skin of the legacy radio group (`components/ui/FormMaterialRadioGroup`, which wraps the
|
|
4
|
-
// fe-ui-core MUI `RadioGroup`) used on 5 pages: DealerEmployeeSetPage, Checkout (Zahlart / services),
|
|
5
|
-
// and the rich VehicleEdit/VehicleAdd sections (ColorPad colors, Environment emission stickers +
|
|
6
|
-
// EnVKV type, FormCarEngine DAT models). It binds to the SAME mobx-react-form field objects the
|
|
7
|
-
// legacy group used (VehicleEditForm.$('colorPadForm.exterior_exteriorColor'),
|
|
8
|
-
// form.$('environmentForm.environmentEmissions_emissionSticker'), …) so every existing validation
|
|
9
|
-
// rule / submit hook / error keeps working — only the markup is re-skinned.
|
|
10
|
-
//
|
|
11
|
-
// LEGACY SIGNATURE (replicated exactly — the contract a structure-preserving re-skin must keep):
|
|
12
|
-
// The legacy group owns the selected value from `field.value`, and CLONES each child injecting
|
|
13
|
-
// `checked` (computed from `child.value === field.value`) plus an `onChange`. The fe-ui-core
|
|
14
|
-
// RadioGroup's own change handler has the shape `onChange(event, value, radioName)`; bound to a
|
|
15
|
-
// mobx field via FormMaterialRadioGroup it forwards the selected value into the field. Here the
|
|
16
|
-
// same flow is preserved: this group reads `field.value`, clones each FormRadio child with
|
|
17
|
-
// `checked={child.value === field.value}` + an `onSelect(value)` + the shared `name`/`disabled`/
|
|
18
|
-
// `error`, and on select pushes the value into the field via the kit's standard call
|
|
19
|
-
// `field.onChange(value, field.name)` (the exact form DatePicker/Switch use — mobx-react-form
|
|
20
|
-
// reads the raw value as the change argument). The inline error mirrors the legacy `field.hasError
|
|
21
|
-
// && field.error`.
|
|
22
|
-
//
|
|
23
|
-
// observer-wrapped so it re-renders when field.value / field.error change. Children are cloned
|
|
24
|
-
// (FormRadio leaves) so the group is the single owner of selection + field talk. Renders correctly
|
|
25
|
-
// only inside a `<div className="md3">` subtree (scoped theme).
|
|
26
|
-
|
|
27
|
-
import * as React from 'react';
|
|
28
|
-
import { observer } from 'mobx-react';
|
|
29
|
-
|
|
30
|
-
import FormRadio from './FormRadio';
|
|
31
|
-
|
|
32
|
-
export interface FormRadioGroupProps {
|
|
33
|
-
/** mobx-react-form field (VehicleEditForm.$('colorPadForm.exterior_exteriorColor') etc.). Typed any — the lib ships no TS types. */
|
|
34
|
-
field: any;
|
|
35
|
-
/** radio-group name for the native inputs; defaults to field.name so each field is its own exclusive group. */
|
|
36
|
-
name?: string;
|
|
37
|
-
/** FormRadio children (each carries a `value` + arbitrary visual). */
|
|
38
|
-
children: React.ReactNode;
|
|
39
|
-
/** disables every radio in the group. */
|
|
40
|
-
disabled?: boolean;
|
|
41
|
-
/** accessible label for the group when there is no adjacent visible heading. */
|
|
42
|
-
ariaLabel?: string;
|
|
43
|
-
/** extra class(es) on the group container (layout hooks: wrap, swatch grid, sticker row…). */
|
|
44
|
-
className?: string;
|
|
45
|
-
/**
|
|
46
|
-
* extra class(es) on the inner radio row (`.mradio-set`, the element that is the direct
|
|
47
|
-
* flex/grid parent of the radios). Use this when a caller's layout class must lay the radios
|
|
48
|
-
* out (e.g. the legacy `FormMaterialRadioGroup` call sites whose section classes — `styles.colors`,
|
|
49
|
-
* `styles.usageTypesField`, the DAT `styles.radioGroup` … — were applied to the radio container,
|
|
50
|
-
* not an outer wrapper). Optional + defaulted, so existing callers are unaffected.
|
|
51
|
-
*/
|
|
52
|
-
setClassName?: string;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const FormRadioGroup: React.FunctionComponent<FormRadioGroupProps> = observer(
|
|
56
|
-
({ field, name, children, disabled = false, ariaLabel, className, setClassName }) => {
|
|
57
|
-
const groupName: string = name || (field && field.name) || 'mradio-group';
|
|
58
|
-
const selected = field ? field.value : undefined;
|
|
59
|
-
const hasError = !!(field && field.hasError && field.error);
|
|
60
|
-
|
|
61
|
-
// Push the chosen option key into the mobx field. Matches the kit's bound-control convention
|
|
62
|
-
// (DatePicker/Switch): mobx-react-form's onChange takes the raw value as its change argument,
|
|
63
|
-
// and we pass field.name as the second arg exactly as the other bound primitives do.
|
|
64
|
-
const handleSelect = React.useCallback(
|
|
65
|
-
(value: any) => {
|
|
66
|
-
if (disabled || !field) return;
|
|
67
|
-
field.onChange(value, field.name);
|
|
68
|
-
},
|
|
69
|
-
[disabled, field],
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
// Clone each FormRadio leaf, injecting the legacy-style derived props: checked, onSelect, the
|
|
73
|
-
// shared name, the merged disabled, and the error flag. Non-element children pass through.
|
|
74
|
-
const radios = React.Children.map(children, (child) => {
|
|
75
|
-
if (!React.isValidElement(child)) return child;
|
|
76
|
-
const childProps = child.props as { value?: any; disabled?: boolean };
|
|
77
|
-
return React.cloneElement(child as React.ReactElement<any>, {
|
|
78
|
-
checked: childProps.value === selected,
|
|
79
|
-
onSelect: handleSelect,
|
|
80
|
-
name: groupName,
|
|
81
|
-
disabled: disabled || childProps.disabled,
|
|
82
|
-
error: hasError,
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
return (
|
|
87
|
-
<div className={'mradio-group' + (className ? ` ${className}` : '')}>
|
|
88
|
-
<div
|
|
89
|
-
className={
|
|
90
|
-
'mradio-set' +
|
|
91
|
-
(hasError ? ' mradio-set--error' : '') +
|
|
92
|
-
(setClassName ? ` ${setClassName}` : '')
|
|
93
|
-
}
|
|
94
|
-
role="radiogroup"
|
|
95
|
-
aria-label={ariaLabel}
|
|
96
|
-
aria-invalid={hasError || undefined}
|
|
97
|
-
>
|
|
98
|
-
{radios}
|
|
99
|
-
</div>
|
|
100
|
-
{hasError ? <span className="mfield-error-text">{field.error}</span> : null}
|
|
101
|
-
</div>
|
|
102
|
-
);
|
|
103
|
-
},
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
export default FormRadioGroup;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 radio group bound to a mobx-react-form field.
|
|
2
|
+
//
|
|
3
|
+
// Drop-in re-skin of the legacy radio group (`components/ui/FormMaterialRadioGroup`, which wraps the
|
|
4
|
+
// fe-ui-core MUI `RadioGroup`) used on 5 pages: DealerEmployeeSetPage, Checkout (Zahlart / services),
|
|
5
|
+
// and the rich VehicleEdit/VehicleAdd sections (ColorPad colors, Environment emission stickers +
|
|
6
|
+
// EnVKV type, FormCarEngine DAT models). It binds to the SAME mobx-react-form field objects the
|
|
7
|
+
// legacy group used (VehicleEditForm.$('colorPadForm.exterior_exteriorColor'),
|
|
8
|
+
// form.$('environmentForm.environmentEmissions_emissionSticker'), …) so every existing validation
|
|
9
|
+
// rule / submit hook / error keeps working — only the markup is re-skinned.
|
|
10
|
+
//
|
|
11
|
+
// LEGACY SIGNATURE (replicated exactly — the contract a structure-preserving re-skin must keep):
|
|
12
|
+
// The legacy group owns the selected value from `field.value`, and CLONES each child injecting
|
|
13
|
+
// `checked` (computed from `child.value === field.value`) plus an `onChange`. The fe-ui-core
|
|
14
|
+
// RadioGroup's own change handler has the shape `onChange(event, value, radioName)`; bound to a
|
|
15
|
+
// mobx field via FormMaterialRadioGroup it forwards the selected value into the field. Here the
|
|
16
|
+
// same flow is preserved: this group reads `field.value`, clones each FormRadio child with
|
|
17
|
+
// `checked={child.value === field.value}` + an `onSelect(value)` + the shared `name`/`disabled`/
|
|
18
|
+
// `error`, and on select pushes the value into the field via the kit's standard call
|
|
19
|
+
// `field.onChange(value, field.name)` (the exact form DatePicker/Switch use — mobx-react-form
|
|
20
|
+
// reads the raw value as the change argument). The inline error mirrors the legacy `field.hasError
|
|
21
|
+
// && field.error`.
|
|
22
|
+
//
|
|
23
|
+
// observer-wrapped so it re-renders when field.value / field.error change. Children are cloned
|
|
24
|
+
// (FormRadio leaves) so the group is the single owner of selection + field talk. Renders correctly
|
|
25
|
+
// only inside a `<div className="md3">` subtree (scoped theme).
|
|
26
|
+
|
|
27
|
+
import * as React from 'react';
|
|
28
|
+
import { observer } from 'mobx-react';
|
|
29
|
+
|
|
30
|
+
import FormRadio from './FormRadio';
|
|
31
|
+
|
|
32
|
+
export interface FormRadioGroupProps {
|
|
33
|
+
/** mobx-react-form field (VehicleEditForm.$('colorPadForm.exterior_exteriorColor') etc.). Typed any — the lib ships no TS types. */
|
|
34
|
+
field: any;
|
|
35
|
+
/** radio-group name for the native inputs; defaults to field.name so each field is its own exclusive group. */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** FormRadio children (each carries a `value` + arbitrary visual). */
|
|
38
|
+
children: React.ReactNode;
|
|
39
|
+
/** disables every radio in the group. */
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/** accessible label for the group when there is no adjacent visible heading. */
|
|
42
|
+
ariaLabel?: string;
|
|
43
|
+
/** extra class(es) on the group container (layout hooks: wrap, swatch grid, sticker row…). */
|
|
44
|
+
className?: string;
|
|
45
|
+
/**
|
|
46
|
+
* extra class(es) on the inner radio row (`.mradio-set`, the element that is the direct
|
|
47
|
+
* flex/grid parent of the radios). Use this when a caller's layout class must lay the radios
|
|
48
|
+
* out (e.g. the legacy `FormMaterialRadioGroup` call sites whose section classes — `styles.colors`,
|
|
49
|
+
* `styles.usageTypesField`, the DAT `styles.radioGroup` … — were applied to the radio container,
|
|
50
|
+
* not an outer wrapper). Optional + defaulted, so existing callers are unaffected.
|
|
51
|
+
*/
|
|
52
|
+
setClassName?: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const FormRadioGroup: React.FunctionComponent<FormRadioGroupProps> = observer(
|
|
56
|
+
({ field, name, children, disabled = false, ariaLabel, className, setClassName }) => {
|
|
57
|
+
const groupName: string = name || (field && field.name) || 'mradio-group';
|
|
58
|
+
const selected = field ? field.value : undefined;
|
|
59
|
+
const hasError = !!(field && field.hasError && field.error);
|
|
60
|
+
|
|
61
|
+
// Push the chosen option key into the mobx field. Matches the kit's bound-control convention
|
|
62
|
+
// (DatePicker/Switch): mobx-react-form's onChange takes the raw value as its change argument,
|
|
63
|
+
// and we pass field.name as the second arg exactly as the other bound primitives do.
|
|
64
|
+
const handleSelect = React.useCallback(
|
|
65
|
+
(value: any) => {
|
|
66
|
+
if (disabled || !field) return;
|
|
67
|
+
field.onChange(value, field.name);
|
|
68
|
+
},
|
|
69
|
+
[disabled, field],
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Clone each FormRadio leaf, injecting the legacy-style derived props: checked, onSelect, the
|
|
73
|
+
// shared name, the merged disabled, and the error flag. Non-element children pass through.
|
|
74
|
+
const radios = React.Children.map(children, (child) => {
|
|
75
|
+
if (!React.isValidElement(child)) return child;
|
|
76
|
+
const childProps = child.props as { value?: any; disabled?: boolean };
|
|
77
|
+
return React.cloneElement(child as React.ReactElement<any>, {
|
|
78
|
+
checked: childProps.value === selected,
|
|
79
|
+
onSelect: handleSelect,
|
|
80
|
+
name: groupName,
|
|
81
|
+
disabled: disabled || childProps.disabled,
|
|
82
|
+
error: hasError,
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<div className={'mradio-group' + (className ? ` ${className}` : '')}>
|
|
88
|
+
<div
|
|
89
|
+
className={
|
|
90
|
+
'mradio-set' +
|
|
91
|
+
(hasError ? ' mradio-set--error' : '') +
|
|
92
|
+
(setClassName ? ` ${setClassName}` : '')
|
|
93
|
+
}
|
|
94
|
+
role="radiogroup"
|
|
95
|
+
aria-label={ariaLabel}
|
|
96
|
+
aria-invalid={hasError || undefined}
|
|
97
|
+
>
|
|
98
|
+
{radios}
|
|
99
|
+
</div>
|
|
100
|
+
{hasError ? <span className="mfield-error-text">{field.error}</span> : null}
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
},
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
export default FormRadioGroup;
|