@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/Skeleton.tsx
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 loading skeleton.
|
|
2
|
-
//
|
|
3
|
-
// md3.css ships no skeleton class, so this is the ONE addition covering every
|
|
4
|
-
// legacy `Skeleton`/`SkeletonItem` (MUI) call site: a div with an animated
|
|
5
|
-
// gradient shimmer built from --md surface tokens. Prop surface mirrors the
|
|
6
|
-
// subset fe-main actually used (variant / width / height / className / style;
|
|
7
|
-
// `animation` is accepted and ignored — the shimmer always runs).
|
|
8
|
-
// Renders correctly only inside a `<div className="md3">` subtree.
|
|
9
|
-
|
|
10
|
-
import React from 'react';
|
|
11
|
-
|
|
12
|
-
export interface SkeletonProps {
|
|
13
|
-
variant?: 'text' | 'rectangular' | 'circular';
|
|
14
|
-
width?: number | string;
|
|
15
|
-
height?: number | string;
|
|
16
|
-
className?: string;
|
|
17
|
-
style?: React.CSSProperties;
|
|
18
|
-
/** legacy MUI prop, accepted and ignored. */
|
|
19
|
-
animation?: 'pulse' | 'wave' | false;
|
|
20
|
-
children?: React.ReactNode;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const SKELETON_CSS = `
|
|
24
|
-
.md3 .mskeleton {
|
|
25
|
-
display: block;
|
|
26
|
-
background: linear-gradient(90deg, var(--md-sc) 25%, var(--md-sc-high, var(--md-sc-lowest)) 37%, var(--md-sc) 63%);
|
|
27
|
-
background-size: 400% 100%;
|
|
28
|
-
animation: md3-skeleton-shimmer 1.4s ease infinite;
|
|
29
|
-
border-radius: var(--md-r-sm);
|
|
30
|
-
}
|
|
31
|
-
.md3 .mskeleton--text { border-radius: var(--md-r-xs, 4px); transform: scale(1, 0.7); }
|
|
32
|
-
.md3 .mskeleton--circular { border-radius: 50%; }
|
|
33
|
-
@keyframes md3-skeleton-shimmer {
|
|
34
|
-
0% { background-position: 100% 50%; }
|
|
35
|
-
100% { background-position: 0 50%; }
|
|
36
|
-
}`;
|
|
37
|
-
|
|
38
|
-
const SKELETON_STYLE_ID = 'md3-skeleton-styles';
|
|
39
|
-
|
|
40
|
-
// one <style id> in document.head no matter how many skeletons mount — the same
|
|
41
|
-
// pattern fe-main's VehicleSmallCardMd3 uses. SSR-safe (guarded document access).
|
|
42
|
-
function ensureStylesInjected(): void {
|
|
43
|
-
if (typeof document === 'undefined' || document.getElementById(SKELETON_STYLE_ID)) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const style = document.createElement('style');
|
|
47
|
-
style.id = SKELETON_STYLE_ID;
|
|
48
|
-
style.innerHTML = SKELETON_CSS;
|
|
49
|
-
document.head.appendChild(style);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const Skeleton: React.FunctionComponent<SkeletonProps> = ({
|
|
53
|
-
variant = 'rectangular', width, height, className, style, children,
|
|
54
|
-
}) => {
|
|
55
|
-
React.useEffect(() => { ensureStylesInjected(); }, []);
|
|
56
|
-
const dims: React.CSSProperties = {};
|
|
57
|
-
if (width != null) dims.width = width;
|
|
58
|
-
if (height != null) dims.height = height;
|
|
59
|
-
if (variant === 'text' && height == null) dims.height = '1.2em';
|
|
60
|
-
return (
|
|
61
|
-
<span
|
|
62
|
-
className={
|
|
63
|
-
'mskeleton' +
|
|
64
|
-
(variant !== 'rectangular' ? ` mskeleton--${variant}` : '') +
|
|
65
|
-
(className ? ` ${className}` : '')
|
|
66
|
-
}
|
|
67
|
-
style={{ ...dims, ...style }}
|
|
68
|
-
aria-hidden='true'
|
|
69
|
-
>
|
|
70
|
-
{children}
|
|
71
|
-
</span>
|
|
72
|
-
);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export default Skeleton;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 loading skeleton.
|
|
2
|
+
//
|
|
3
|
+
// md3.css ships no skeleton class, so this is the ONE addition covering every
|
|
4
|
+
// legacy `Skeleton`/`SkeletonItem` (MUI) call site: a div with an animated
|
|
5
|
+
// gradient shimmer built from --md surface tokens. Prop surface mirrors the
|
|
6
|
+
// subset fe-main actually used (variant / width / height / className / style;
|
|
7
|
+
// `animation` is accepted and ignored — the shimmer always runs).
|
|
8
|
+
// Renders correctly only inside a `<div className="md3">` subtree.
|
|
9
|
+
|
|
10
|
+
import React from 'react';
|
|
11
|
+
|
|
12
|
+
export interface SkeletonProps {
|
|
13
|
+
variant?: 'text' | 'rectangular' | 'circular';
|
|
14
|
+
width?: number | string;
|
|
15
|
+
height?: number | string;
|
|
16
|
+
className?: string;
|
|
17
|
+
style?: React.CSSProperties;
|
|
18
|
+
/** legacy MUI prop, accepted and ignored. */
|
|
19
|
+
animation?: 'pulse' | 'wave' | false;
|
|
20
|
+
children?: React.ReactNode;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const SKELETON_CSS = `
|
|
24
|
+
.md3 .mskeleton {
|
|
25
|
+
display: block;
|
|
26
|
+
background: linear-gradient(90deg, var(--md-sc) 25%, var(--md-sc-high, var(--md-sc-lowest)) 37%, var(--md-sc) 63%);
|
|
27
|
+
background-size: 400% 100%;
|
|
28
|
+
animation: md3-skeleton-shimmer 1.4s ease infinite;
|
|
29
|
+
border-radius: var(--md-r-sm);
|
|
30
|
+
}
|
|
31
|
+
.md3 .mskeleton--text { border-radius: var(--md-r-xs, 4px); transform: scale(1, 0.7); }
|
|
32
|
+
.md3 .mskeleton--circular { border-radius: 50%; }
|
|
33
|
+
@keyframes md3-skeleton-shimmer {
|
|
34
|
+
0% { background-position: 100% 50%; }
|
|
35
|
+
100% { background-position: 0 50%; }
|
|
36
|
+
}`;
|
|
37
|
+
|
|
38
|
+
const SKELETON_STYLE_ID = 'md3-skeleton-styles';
|
|
39
|
+
|
|
40
|
+
// one <style id> in document.head no matter how many skeletons mount — the same
|
|
41
|
+
// pattern fe-main's VehicleSmallCardMd3 uses. SSR-safe (guarded document access).
|
|
42
|
+
function ensureStylesInjected(): void {
|
|
43
|
+
if (typeof document === 'undefined' || document.getElementById(SKELETON_STYLE_ID)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const style = document.createElement('style');
|
|
47
|
+
style.id = SKELETON_STYLE_ID;
|
|
48
|
+
style.innerHTML = SKELETON_CSS;
|
|
49
|
+
document.head.appendChild(style);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const Skeleton: React.FunctionComponent<SkeletonProps> = ({
|
|
53
|
+
variant = 'rectangular', width, height, className, style, children,
|
|
54
|
+
}) => {
|
|
55
|
+
React.useEffect(() => { ensureStylesInjected(); }, []);
|
|
56
|
+
const dims: React.CSSProperties = {};
|
|
57
|
+
if (width != null) dims.width = width;
|
|
58
|
+
if (height != null) dims.height = height;
|
|
59
|
+
if (variant === 'text' && height == null) dims.height = '1.2em';
|
|
60
|
+
return (
|
|
61
|
+
<span
|
|
62
|
+
className={
|
|
63
|
+
'mskeleton' +
|
|
64
|
+
(variant !== 'rectangular' ? ` mskeleton--${variant}` : '') +
|
|
65
|
+
(className ? ` ${className}` : '')
|
|
66
|
+
}
|
|
67
|
+
style={{ ...dims, ...style }}
|
|
68
|
+
aria-hidden='true'
|
|
69
|
+
>
|
|
70
|
+
{children}
|
|
71
|
+
</span>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default Skeleton;
|
package/ui/Spec.tsx
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import Icon from './Icon';
|
|
4
|
-
|
|
5
|
-
export interface SpecProps {
|
|
6
|
-
/** kebab-case lucide icon name. */
|
|
7
|
-
icon: string;
|
|
8
|
-
/** caption shown beneath the bold value. */
|
|
9
|
-
label?: React.ReactNode;
|
|
10
|
-
/** the bold value. */
|
|
11
|
-
children?: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const Spec: React.FunctionComponent<SpecProps> = ({ icon, label, children }) => (
|
|
15
|
-
<div className="specitem">
|
|
16
|
-
<Icon name={icon} size={20} stroke={1.75} />
|
|
17
|
-
<div>
|
|
18
|
-
<b>{children}</b>
|
|
19
|
-
<span>{label}</span>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
export default Spec;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import Icon from './Icon';
|
|
4
|
+
|
|
5
|
+
export interface SpecProps {
|
|
6
|
+
/** kebab-case lucide icon name. */
|
|
7
|
+
icon: string;
|
|
8
|
+
/** caption shown beneath the bold value. */
|
|
9
|
+
label?: React.ReactNode;
|
|
10
|
+
/** the bold value. */
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const Spec: React.FunctionComponent<SpecProps> = ({ icon, label, children }) => (
|
|
15
|
+
<div className="specitem">
|
|
16
|
+
<Icon name={icon} size={20} stroke={1.75} />
|
|
17
|
+
<div>
|
|
18
|
+
<b>{children}</b>
|
|
19
|
+
<span>{label}</span>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
export default Spec;
|
package/ui/Stars.tsx
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import Icon from './Icon';
|
|
4
|
-
|
|
5
|
-
export interface StarsProps {
|
|
6
|
-
/** rating value 0–5; each star fills when value − index >= 0.5. */
|
|
7
|
-
value: number;
|
|
8
|
-
size?: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** 5-star row (rounded to nearest .5). */
|
|
12
|
-
const Stars: React.FunctionComponent<StarsProps> = ({ value, size = 16 }) => (
|
|
13
|
-
<span style={{ display: 'inline-flex', gap: 1 }}>
|
|
14
|
-
{[0, 1, 2, 3, 4].map((i) => {
|
|
15
|
-
const fill = value - i;
|
|
16
|
-
return (
|
|
17
|
-
<Icon
|
|
18
|
-
key={i}
|
|
19
|
-
name={fill >= 0.5 ? 'star' : 'star'}
|
|
20
|
-
size={size}
|
|
21
|
-
color={fill >= 0.5 ? '#F2A900' : '#D8D6DC'}
|
|
22
|
-
style={{ fill: fill >= 0.5 ? '#F2A900' : '#D8D6DC' }}
|
|
23
|
-
/>
|
|
24
|
-
);
|
|
25
|
-
})}
|
|
26
|
-
</span>
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
export default Stars;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import Icon from './Icon';
|
|
4
|
+
|
|
5
|
+
export interface StarsProps {
|
|
6
|
+
/** rating value 0–5; each star fills when value − index >= 0.5. */
|
|
7
|
+
value: number;
|
|
8
|
+
size?: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** 5-star row (rounded to nearest .5). */
|
|
12
|
+
const Stars: React.FunctionComponent<StarsProps> = ({ value, size = 16 }) => (
|
|
13
|
+
<span style={{ display: 'inline-flex', gap: 1 }}>
|
|
14
|
+
{[0, 1, 2, 3, 4].map((i) => {
|
|
15
|
+
const fill = value - i;
|
|
16
|
+
return (
|
|
17
|
+
<Icon
|
|
18
|
+
key={i}
|
|
19
|
+
name={fill >= 0.5 ? 'star' : 'star'}
|
|
20
|
+
size={size}
|
|
21
|
+
color={fill >= 0.5 ? '#F2A900' : '#D8D6DC'}
|
|
22
|
+
style={{ fill: fill >= 0.5 ? '#F2A900' : '#D8D6DC' }}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
})}
|
|
26
|
+
</span>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export default Stars;
|
package/ui/StatChip.tsx
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import Icon from './Icon';
|
|
4
|
-
|
|
5
|
-
export type StatChipTone = 'good' | 'warn';
|
|
6
|
-
|
|
7
|
-
export interface StatChipProps {
|
|
8
|
-
tone?: StatChipTone;
|
|
9
|
-
/** kebab-case lucide icon name rendered before the content. */
|
|
10
|
-
icon?: string;
|
|
11
|
-
children?: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const StatChip: React.FunctionComponent<StatChipProps> = ({ tone = 'good', icon, children }) => (
|
|
15
|
-
<span className={`statchip statchip--${tone}`}>
|
|
16
|
-
{icon && <Icon name={icon} size={14} />}
|
|
17
|
-
{children}
|
|
18
|
-
</span>
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
export default StatChip;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import Icon from './Icon';
|
|
4
|
+
|
|
5
|
+
export type StatChipTone = 'good' | 'warn';
|
|
6
|
+
|
|
7
|
+
export interface StatChipProps {
|
|
8
|
+
tone?: StatChipTone;
|
|
9
|
+
/** kebab-case lucide icon name rendered before the content. */
|
|
10
|
+
icon?: string;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const StatChip: React.FunctionComponent<StatChipProps> = ({ tone = 'good', icon, children }) => (
|
|
15
|
+
<span className={`statchip statchip--${tone}`}>
|
|
16
|
+
{icon && <Icon name={icon} size={14} />}
|
|
17
|
+
{children}
|
|
18
|
+
</span>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default StatChip;
|
package/ui/Stepper.tsx
CHANGED
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 step indicator (numbered circles + connectors).
|
|
2
|
-
//
|
|
3
|
-
// A reusable, presentational MD3 stepper for multi-step flows (Checkout, …). Mirrors the
|
|
4
|
-
// visual language of the inline `.co-stepper` in CheckoutChromeNext (30px numbered dots,
|
|
5
|
-
// primary-filled done/active states, 2px connectors) but generalised: it takes a plain
|
|
6
|
-
// `steps` array + `activeStep`, supports horizontal/vertical orientation, and is non-linear
|
|
7
|
-
// (any step is clickable via `onStepClick`). Step state is derived from `activeStep` unless a
|
|
8
|
-
// step carries an explicit `status` (so a flow that tracks per-step completion — e.g. the
|
|
9
|
-
// checkout store's `completed` set — can mark a later step done or an earlier one still todo).
|
|
10
|
-
//
|
|
11
|
-
// Pure/presentational: no store, no API, no window access. Not observer-wrapped — it binds to
|
|
12
|
-
// no mobx field; callers that read observable state (e.g. checkoutStore.activeStep) should wrap
|
|
13
|
-
// their own render. Renders correctly only inside a `<div className="md3">` subtree.
|
|
14
|
-
|
|
15
|
-
import React from 'react';
|
|
16
|
-
|
|
17
|
-
import Icon from './Icon';
|
|
18
|
-
|
|
19
|
-
export type StepStatus = 'done' | 'active' | 'todo';
|
|
20
|
-
|
|
21
|
-
export interface StepperStep {
|
|
22
|
-
/** visible step label. */
|
|
23
|
-
label: string;
|
|
24
|
-
/** explicit state override; when omitted it's derived from `activeStep` (index < active = done). */
|
|
25
|
-
status?: StepStatus;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface StepperProps {
|
|
29
|
-
/** the steps, in order. */
|
|
30
|
-
steps: StepperStep[];
|
|
31
|
-
/** index of the current step (0-based). */
|
|
32
|
-
activeStep: number;
|
|
33
|
-
/** layout direction (default 'horizontal'). */
|
|
34
|
-
orientation?: 'horizontal' | 'vertical';
|
|
35
|
-
/** non-linear: fired with the clicked step's index. When omitted, steps are not interactive. */
|
|
36
|
-
onStepClick?: (index: number) => void;
|
|
37
|
-
/** accessible label for the stepper nav (e.g. the flow name). */
|
|
38
|
-
ariaLabel?: string;
|
|
39
|
-
/** extra class(es) appended after the mstep classes (layout hooks). */
|
|
40
|
-
className?: string;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const Stepper: React.FunctionComponent<StepperProps> = ({
|
|
44
|
-
steps,
|
|
45
|
-
activeStep,
|
|
46
|
-
orientation = 'horizontal',
|
|
47
|
-
onStepClick,
|
|
48
|
-
ariaLabel,
|
|
49
|
-
className,
|
|
50
|
-
}) => {
|
|
51
|
-
// derive state: explicit `status` wins; otherwise index vs activeStep.
|
|
52
|
-
const resolve = (step: StepperStep, index: number): StepStatus => {
|
|
53
|
-
if (step.status) return step.status;
|
|
54
|
-
if (index < activeStep) return 'done';
|
|
55
|
-
if (index === activeStep) return 'active';
|
|
56
|
-
return 'todo';
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const clickable = typeof onStepClick === 'function';
|
|
60
|
-
|
|
61
|
-
const wrapCls = ['mstep', `mstep--${orientation}`, clickable && 'mstep--clickable', className]
|
|
62
|
-
.filter(Boolean)
|
|
63
|
-
.join(' ');
|
|
64
|
-
|
|
65
|
-
return (
|
|
66
|
-
<nav className={wrapCls} aria-label={ariaLabel}>
|
|
67
|
-
<ol className="mstep-list">
|
|
68
|
-
{steps.map((step, i) => {
|
|
69
|
-
const status = resolve(step, i);
|
|
70
|
-
const isLast = i === steps.length - 1;
|
|
71
|
-
const itemCls = `mstep-item mstep-item--${status}`;
|
|
72
|
-
const dot = status === 'done' ? <Icon name="check" size={16} /> : i + 1;
|
|
73
|
-
|
|
74
|
-
// the dot + label are a button when interactive, a plain span otherwise — so a
|
|
75
|
-
// non-linear flow gets real focus/keyboard semantics without forcing them on a
|
|
76
|
-
// read-only indicator.
|
|
77
|
-
const inner = clickable ? (
|
|
78
|
-
<button
|
|
79
|
-
type="button"
|
|
80
|
-
className="mstep-btn"
|
|
81
|
-
aria-current={status === 'active' ? 'step' : undefined}
|
|
82
|
-
onClick={() => onStepClick && onStepClick(i)}
|
|
83
|
-
>
|
|
84
|
-
<span className="mstep-dot">{dot}</span>
|
|
85
|
-
<span className="mstep-label">{step.label}</span>
|
|
86
|
-
</button>
|
|
87
|
-
) : (
|
|
88
|
-
<span className="mstep-btn" aria-current={status === 'active' ? 'step' : undefined}>
|
|
89
|
-
<span className="mstep-dot">{dot}</span>
|
|
90
|
-
<span className="mstep-label">{step.label}</span>
|
|
91
|
-
</span>
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
return (
|
|
95
|
-
<li key={`${step.label}_${i}`} className={itemCls}>
|
|
96
|
-
{inner}
|
|
97
|
-
{!isLast ? <span className="mstep-connector" aria-hidden="true" /> : null}
|
|
98
|
-
</li>
|
|
99
|
-
);
|
|
100
|
-
})}
|
|
101
|
-
</ol>
|
|
102
|
-
</nav>
|
|
103
|
-
);
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export default Stepper;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 step indicator (numbered circles + connectors).
|
|
2
|
+
//
|
|
3
|
+
// A reusable, presentational MD3 stepper for multi-step flows (Checkout, …). Mirrors the
|
|
4
|
+
// visual language of the inline `.co-stepper` in CheckoutChromeNext (30px numbered dots,
|
|
5
|
+
// primary-filled done/active states, 2px connectors) but generalised: it takes a plain
|
|
6
|
+
// `steps` array + `activeStep`, supports horizontal/vertical orientation, and is non-linear
|
|
7
|
+
// (any step is clickable via `onStepClick`). Step state is derived from `activeStep` unless a
|
|
8
|
+
// step carries an explicit `status` (so a flow that tracks per-step completion — e.g. the
|
|
9
|
+
// checkout store's `completed` set — can mark a later step done or an earlier one still todo).
|
|
10
|
+
//
|
|
11
|
+
// Pure/presentational: no store, no API, no window access. Not observer-wrapped — it binds to
|
|
12
|
+
// no mobx field; callers that read observable state (e.g. checkoutStore.activeStep) should wrap
|
|
13
|
+
// their own render. Renders correctly only inside a `<div className="md3">` subtree.
|
|
14
|
+
|
|
15
|
+
import React from 'react';
|
|
16
|
+
|
|
17
|
+
import Icon from './Icon';
|
|
18
|
+
|
|
19
|
+
export type StepStatus = 'done' | 'active' | 'todo';
|
|
20
|
+
|
|
21
|
+
export interface StepperStep {
|
|
22
|
+
/** visible step label. */
|
|
23
|
+
label: string;
|
|
24
|
+
/** explicit state override; when omitted it's derived from `activeStep` (index < active = done). */
|
|
25
|
+
status?: StepStatus;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface StepperProps {
|
|
29
|
+
/** the steps, in order. */
|
|
30
|
+
steps: StepperStep[];
|
|
31
|
+
/** index of the current step (0-based). */
|
|
32
|
+
activeStep: number;
|
|
33
|
+
/** layout direction (default 'horizontal'). */
|
|
34
|
+
orientation?: 'horizontal' | 'vertical';
|
|
35
|
+
/** non-linear: fired with the clicked step's index. When omitted, steps are not interactive. */
|
|
36
|
+
onStepClick?: (index: number) => void;
|
|
37
|
+
/** accessible label for the stepper nav (e.g. the flow name). */
|
|
38
|
+
ariaLabel?: string;
|
|
39
|
+
/** extra class(es) appended after the mstep classes (layout hooks). */
|
|
40
|
+
className?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const Stepper: React.FunctionComponent<StepperProps> = ({
|
|
44
|
+
steps,
|
|
45
|
+
activeStep,
|
|
46
|
+
orientation = 'horizontal',
|
|
47
|
+
onStepClick,
|
|
48
|
+
ariaLabel,
|
|
49
|
+
className,
|
|
50
|
+
}) => {
|
|
51
|
+
// derive state: explicit `status` wins; otherwise index vs activeStep.
|
|
52
|
+
const resolve = (step: StepperStep, index: number): StepStatus => {
|
|
53
|
+
if (step.status) return step.status;
|
|
54
|
+
if (index < activeStep) return 'done';
|
|
55
|
+
if (index === activeStep) return 'active';
|
|
56
|
+
return 'todo';
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const clickable = typeof onStepClick === 'function';
|
|
60
|
+
|
|
61
|
+
const wrapCls = ['mstep', `mstep--${orientation}`, clickable && 'mstep--clickable', className]
|
|
62
|
+
.filter(Boolean)
|
|
63
|
+
.join(' ');
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<nav className={wrapCls} aria-label={ariaLabel}>
|
|
67
|
+
<ol className="mstep-list">
|
|
68
|
+
{steps.map((step, i) => {
|
|
69
|
+
const status = resolve(step, i);
|
|
70
|
+
const isLast = i === steps.length - 1;
|
|
71
|
+
const itemCls = `mstep-item mstep-item--${status}`;
|
|
72
|
+
const dot = status === 'done' ? <Icon name="check" size={16} /> : i + 1;
|
|
73
|
+
|
|
74
|
+
// the dot + label are a button when interactive, a plain span otherwise — so a
|
|
75
|
+
// non-linear flow gets real focus/keyboard semantics without forcing them on a
|
|
76
|
+
// read-only indicator.
|
|
77
|
+
const inner = clickable ? (
|
|
78
|
+
<button
|
|
79
|
+
type="button"
|
|
80
|
+
className="mstep-btn"
|
|
81
|
+
aria-current={status === 'active' ? 'step' : undefined}
|
|
82
|
+
onClick={() => onStepClick && onStepClick(i)}
|
|
83
|
+
>
|
|
84
|
+
<span className="mstep-dot">{dot}</span>
|
|
85
|
+
<span className="mstep-label">{step.label}</span>
|
|
86
|
+
</button>
|
|
87
|
+
) : (
|
|
88
|
+
<span className="mstep-btn" aria-current={status === 'active' ? 'step' : undefined}>
|
|
89
|
+
<span className="mstep-dot">{dot}</span>
|
|
90
|
+
<span className="mstep-label">{step.label}</span>
|
|
91
|
+
</span>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<li key={`${step.label}_${i}`} className={itemCls}>
|
|
96
|
+
{inner}
|
|
97
|
+
{!isLast ? <span className="mstep-connector" aria-hidden="true" /> : null}
|
|
98
|
+
</li>
|
|
99
|
+
);
|
|
100
|
+
})}
|
|
101
|
+
</ol>
|
|
102
|
+
</nav>
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export default Stepper;
|
package/ui/Switch.tsx
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 toggle switch.
|
|
2
|
-
//
|
|
3
|
-
// Drop-in visual replacement for the legacy fe-ui-core `Switch` (used in
|
|
4
|
-
// SettingsPage → ProfileTabDataUsage as `<Switch checked={field.checked} onChange={field.onChange} />`,
|
|
5
|
-
// bound to DataUsageForm.$('email') / $('research')). It emits the `.mswitch` track+thumb
|
|
6
|
-
// markup that already lives in theme/autobahn/md3.css.
|
|
7
|
-
//
|
|
8
|
-
// BINDING (must match the legacy signature exactly or validation/submit breaks):
|
|
9
|
-
// mobx-react-form fields expose `field.checked` (boolean) and `field.onChange`, which is a
|
|
10
|
-
// NATIVE change-event handler — it reads `event.target.checked` itself. So when `field` is
|
|
11
|
-
// passed we render `<input type="checkbox" checked={field.checked} onChange={field.onChange}>`
|
|
12
|
-
// and let the native event flow straight through, unchanged. No wrapping, no boolean coercion.
|
|
13
|
-
//
|
|
14
|
-
// Two modes:
|
|
15
|
-
// - BOUND: pass `field` → reads field.checked, forwards the native event to field.onChange.
|
|
16
|
-
// - CONTROLLED: pass `checked` + `onChange` → `onChange` receives the native React change event
|
|
17
|
-
// (same shape the field handler gets), so callers can read e.target.checked.
|
|
18
|
-
//
|
|
19
|
-
// observer-wrapped so the bound mode re-renders when field.checked changes. Pure/presentational
|
|
20
|
-
// otherwise. Renders correctly only inside a `<div className="md3">` subtree (scoped theme).
|
|
21
|
-
|
|
22
|
-
import * as React from 'react';
|
|
23
|
-
import { observer } from 'mobx-react';
|
|
24
|
-
|
|
25
|
-
export interface SwitchProps {
|
|
26
|
-
/** mobx-react-form field (DataUsageForm.$('email') etc.). Typed any — the lib ships no TS types. */
|
|
27
|
-
field?: any;
|
|
28
|
-
/** controlled checked state (ignored when `field` is supplied). */
|
|
29
|
-
checked?: boolean;
|
|
30
|
-
/** native change-event handler. Bound mode forwards the field's own handler; controlled mode gets the React event. */
|
|
31
|
-
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
32
|
-
/** optional visible label rendered after the track. */
|
|
33
|
-
label?: React.ReactNode;
|
|
34
|
-
disabled?: boolean;
|
|
35
|
-
id?: string;
|
|
36
|
-
/** accessible label when there is no visible `label`. */
|
|
37
|
-
ariaLabel?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const Switch: React.FunctionComponent<SwitchProps> = observer(
|
|
41
|
-
({ field, checked, onChange, label, disabled, id, ariaLabel }) => {
|
|
42
|
-
// Bound mode reads straight off the field; controlled mode uses the `checked` prop.
|
|
43
|
-
const isChecked = field ? !!field.checked : !!checked;
|
|
44
|
-
const handleChange = field ? field.onChange : onChange;
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<label className={'mswitch' + (disabled ? ' mswitch--disabled' : '') + (label ? ' mswitch--labeled' : '')}>
|
|
48
|
-
<input
|
|
49
|
-
id={id}
|
|
50
|
-
type="checkbox"
|
|
51
|
-
role="switch"
|
|
52
|
-
checked={isChecked}
|
|
53
|
-
disabled={disabled}
|
|
54
|
-
aria-label={ariaLabel}
|
|
55
|
-
aria-checked={isChecked}
|
|
56
|
-
onChange={handleChange}
|
|
57
|
-
/>
|
|
58
|
-
<span className="mswitch-track"><span className="mswitch-thumb" /></span>
|
|
59
|
-
{label ? <span className="mswitch-label">{label}</span> : null}
|
|
60
|
-
</label>
|
|
61
|
-
);
|
|
62
|
-
},
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
export default Switch;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 toggle switch.
|
|
2
|
+
//
|
|
3
|
+
// Drop-in visual replacement for the legacy fe-ui-core `Switch` (used in
|
|
4
|
+
// SettingsPage → ProfileTabDataUsage as `<Switch checked={field.checked} onChange={field.onChange} />`,
|
|
5
|
+
// bound to DataUsageForm.$('email') / $('research')). It emits the `.mswitch` track+thumb
|
|
6
|
+
// markup that already lives in theme/autobahn/md3.css.
|
|
7
|
+
//
|
|
8
|
+
// BINDING (must match the legacy signature exactly or validation/submit breaks):
|
|
9
|
+
// mobx-react-form fields expose `field.checked` (boolean) and `field.onChange`, which is a
|
|
10
|
+
// NATIVE change-event handler — it reads `event.target.checked` itself. So when `field` is
|
|
11
|
+
// passed we render `<input type="checkbox" checked={field.checked} onChange={field.onChange}>`
|
|
12
|
+
// and let the native event flow straight through, unchanged. No wrapping, no boolean coercion.
|
|
13
|
+
//
|
|
14
|
+
// Two modes:
|
|
15
|
+
// - BOUND: pass `field` → reads field.checked, forwards the native event to field.onChange.
|
|
16
|
+
// - CONTROLLED: pass `checked` + `onChange` → `onChange` receives the native React change event
|
|
17
|
+
// (same shape the field handler gets), so callers can read e.target.checked.
|
|
18
|
+
//
|
|
19
|
+
// observer-wrapped so the bound mode re-renders when field.checked changes. Pure/presentational
|
|
20
|
+
// otherwise. Renders correctly only inside a `<div className="md3">` subtree (scoped theme).
|
|
21
|
+
|
|
22
|
+
import * as React from 'react';
|
|
23
|
+
import { observer } from 'mobx-react';
|
|
24
|
+
|
|
25
|
+
export interface SwitchProps {
|
|
26
|
+
/** mobx-react-form field (DataUsageForm.$('email') etc.). Typed any — the lib ships no TS types. */
|
|
27
|
+
field?: any;
|
|
28
|
+
/** controlled checked state (ignored when `field` is supplied). */
|
|
29
|
+
checked?: boolean;
|
|
30
|
+
/** native change-event handler. Bound mode forwards the field's own handler; controlled mode gets the React event. */
|
|
31
|
+
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
32
|
+
/** optional visible label rendered after the track. */
|
|
33
|
+
label?: React.ReactNode;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
id?: string;
|
|
36
|
+
/** accessible label when there is no visible `label`. */
|
|
37
|
+
ariaLabel?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const Switch: React.FunctionComponent<SwitchProps> = observer(
|
|
41
|
+
({ field, checked, onChange, label, disabled, id, ariaLabel }) => {
|
|
42
|
+
// Bound mode reads straight off the field; controlled mode uses the `checked` prop.
|
|
43
|
+
const isChecked = field ? !!field.checked : !!checked;
|
|
44
|
+
const handleChange = field ? field.onChange : onChange;
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<label className={'mswitch' + (disabled ? ' mswitch--disabled' : '') + (label ? ' mswitch--labeled' : '')}>
|
|
48
|
+
<input
|
|
49
|
+
id={id}
|
|
50
|
+
type="checkbox"
|
|
51
|
+
role="switch"
|
|
52
|
+
checked={isChecked}
|
|
53
|
+
disabled={disabled}
|
|
54
|
+
aria-label={ariaLabel}
|
|
55
|
+
aria-checked={isChecked}
|
|
56
|
+
onChange={handleChange}
|
|
57
|
+
/>
|
|
58
|
+
<span className="mswitch-track"><span className="mswitch-thumb" /></span>
|
|
59
|
+
{label ? <span className="mswitch-label">{label}</span> : null}
|
|
60
|
+
</label>
|
|
61
|
+
);
|
|
62
|
+
},
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
export default Switch;
|