@bytebrand/fe-ui-core-autobahn 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/assets/autode-logo.svg +7 -0
  2. package/cards/CarCard.tsx +174 -0
  3. package/cards/CarRow.tsx +182 -0
  4. package/cards/cardParts.tsx +489 -0
  5. package/cards/index.ts +35 -0
  6. package/cards/types.ts +114 -0
  7. package/chrome/Footer.tsx +189 -0
  8. package/chrome/TopBar.tsx +405 -0
  9. package/chrome/index.ts +20 -0
  10. package/chrome/svg.d.ts +11 -0
  11. package/compat/AccardionSection/AccardionSection.styl +45 -0
  12. package/compat/AccardionSection/AccardionSection.tsx +56 -0
  13. package/compat/AccordionWidget/AccordionWidget.styl +221 -0
  14. package/compat/AccordionWidget/AccordionWidget.tsx +257 -0
  15. package/compat/AccordionWrapper/AccordionItem/AccordionItem.styl +34 -0
  16. package/compat/AccordionWrapper/AccordionItem/AccordionItem.tsx +64 -0
  17. package/compat/AccordionWrapper/AccordionWrapper.tsx +34 -0
  18. package/compat/AdvantageItem/AdvantageItem.styl +47 -0
  19. package/compat/AdvantageItem/AdvantageItem.tsx +26 -0
  20. package/compat/Alternative/DealerInfo.styl +116 -0
  21. package/compat/Alternative/DealerInfo.tsx +171 -0
  22. package/compat/Badge/Badge.styl +44 -0
  23. package/compat/Badge/Badge.tsx +25 -0
  24. package/compat/BodyTypeIcons/Audi.tsx +9 -0
  25. package/compat/BodyTypeIcons/Bmw.tsx +860 -0
  26. package/compat/BodyTypeIcons/Ford.tsx +31 -0
  27. package/compat/BodyTypeIcons/IconsConfig.tsx +44 -0
  28. package/compat/BodyTypeIcons/IconsConfigCompact.tsx +30 -0
  29. package/compat/BodyTypeIcons/Mazda.tsx +44 -0
  30. package/compat/BodyTypeIcons/MercedesBenz.tsx +38 -0
  31. package/compat/BodyTypeIcons/Opel.tsx +19 -0
  32. package/compat/BodyTypeIcons/Search.tsx +19 -0
  33. package/compat/BodyTypeIcons/SelectorCategoryCombi.tsx +68 -0
  34. package/compat/BodyTypeIcons/SelectorCategoryCompact.tsx +20 -0
  35. package/compat/BodyTypeIcons/SelectorCategoryConvertible.tsx +68 -0
  36. package/compat/BodyTypeIcons/SelectorCategoryCoupe.tsx +60 -0
  37. package/compat/BodyTypeIcons/SelectorCategoryMinibus.tsx +64 -0
  38. package/compat/BodyTypeIcons/SelectorCategorySedan.tsx +69 -0
  39. package/compat/BodyTypeIcons/SelectorCategorySuv.tsx +77 -0
  40. package/compat/BodyTypeIcons/SelectorCategoryTransporter.tsx +68 -0
  41. package/compat/BodyTypeIcons/SelectorCategoryVan.tsx +72 -0
  42. package/compat/BodyTypeIcons/Volkswagen.tsx +330 -0
  43. package/compat/BodyTypeIcons/index.ts +17 -0
  44. package/compat/Button/Button.tsx +65 -0
  45. package/compat/ButtonOld/Button.styl +65 -0
  46. package/compat/ButtonOld/Button.tsx +84 -0
  47. package/compat/Checkbox/Checkbox.styl +120 -0
  48. package/compat/Checkbox/Checkbox.tsx +151 -0
  49. package/compat/Checkbox/FormCheckbox.styl +22 -0
  50. package/compat/Checkbox/FormCheckbox.tsx +86 -0
  51. package/compat/Co2Widget/CO2Efficiency.styl +219 -0
  52. package/compat/Co2Widget/CO2Efficiency.tsx +93 -0
  53. package/compat/ContactInfo/ContactInfo.styl +22 -0
  54. package/compat/ContactInfo/ContactInfo.tsx +161 -0
  55. package/compat/ContactInfo/TemporaryTranslation.ts +11 -0
  56. package/compat/CookieModal/CookieModal.tsx +49 -0
  57. package/compat/CookieModal/Modal.tsx +43 -0
  58. package/compat/CookieModal/ModalsConfig.tsx +23 -0
  59. package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.styl +87 -0
  60. package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.tsx +184 -0
  61. package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.styl +67 -0
  62. package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.tsx +51 -0
  63. package/compat/CookieModal/modals/TestModal.tsx +7 -0
  64. package/compat/CookieModal/useModal.ts +13 -0
  65. package/compat/CustomerQuote/CustomerQuote.styl +80 -0
  66. package/compat/CustomerQuote/CustomerQuote.tsx +68 -0
  67. package/compat/CustomerQuotesSlider/CustomerQuotesSlider.styl +46 -0
  68. package/compat/CustomerQuotesSlider/CustomerQuotesSlider.tsx +79 -0
  69. package/compat/CustomerQuotesSlider/SliderArrow.tsx +20 -0
  70. package/compat/CustomerQuotesSlider/slider.global.styl +2 -0
  71. package/compat/ExpansionPanel/ExpansionPanel.tsx +68 -0
  72. package/compat/FirstInfoBlock/FirstInfoBlock.styl +33 -0
  73. package/compat/FirstInfoBlock/FirstInfoBlock.tsx +49 -0
  74. package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.styl +66 -0
  75. package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.tsx +21 -0
  76. package/compat/FormattedNumber/FormattedNumber.styl +2 -0
  77. package/compat/FormattedNumber/FormattedNumber.tsx +90 -0
  78. package/compat/IconContainer/IconContainer.styl +23 -0
  79. package/compat/IconContainer/IconContainer.tsx +34 -0
  80. package/compat/Image/Image.styl +109 -0
  81. package/compat/Image/Image.tsx +302 -0
  82. package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.styl +7 -0
  83. package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.tsx +30 -0
  84. package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.styl +122 -0
  85. package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.tsx +199 -0
  86. package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.styl +3 -0
  87. package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.tsx +15 -0
  88. package/compat/ImageSettings/OptionsTable/OptionsTable.styl +47 -0
  89. package/compat/ImageSettings/OptionsTable/OptionsTable.tsx +122 -0
  90. package/compat/ImageSettings/PricePlan/PricePlan.styl +63 -0
  91. package/compat/ImageSettings/PricePlan/PricePlan.tsx +32 -0
  92. package/compat/ImageSettings/index.ts +42 -0
  93. package/compat/ImagesSet/ImagesSet.styl +28 -0
  94. package/compat/ImagesSet/ImagesSet.tsx +76 -0
  95. package/compat/InfoBlockWrapper/InfoBlockWrapper.styl +41 -0
  96. package/compat/InfoBlockWrapper/InfoBlockWrapper.tsx +46 -0
  97. package/compat/Loader/Loader.styl +39 -0
  98. package/compat/Loader/Loader.tsx +32 -0
  99. package/compat/MagnifyGlass/MagnifyGlass.styl +33 -0
  100. package/compat/MagnifyGlass/MagnifyGlass.tsx +213 -0
  101. package/compat/MdAccordionGroup/MdAccordionGroup.tsx +53 -0
  102. package/compat/MdCheckbox/MdCheckbox.tsx +69 -0
  103. package/compat/MdField/MdField.tsx +100 -0
  104. package/compat/MdSelect/MdSelect.tsx +103 -0
  105. package/compat/MdSwitch/MdSwitch.tsx +29 -0
  106. package/compat/MdTabs/MdTabs.tsx +47 -0
  107. package/compat/MdTooltip/MdTooltip.tsx +31 -0
  108. package/compat/OfferDetailedSection/OfferDetailedSection.styl +31 -0
  109. package/compat/OfferDetailedSection/OfferDetailedSection.tsx +100 -0
  110. package/compat/OfferDetailedSection/partials/PanelConfig.styl +132 -0
  111. package/compat/OfferDetailedSection/partials/PanelConfig.tsx +121 -0
  112. package/compat/OfferPanel/AboAccordion/AboAccordion.styl +25 -0
  113. package/compat/OfferPanel/AboAccordion/AboAccordion.tsx +128 -0
  114. package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.styl +12 -0
  115. package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.tsx +35 -0
  116. package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.styl +21 -0
  117. package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.tsx +25 -0
  118. package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.styl +14 -0
  119. package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.tsx +39 -0
  120. package/compat/OfferPanel/MuiOfferPeriod/MuiOfferPeriod.tsx +42 -0
  121. package/compat/OfferPanel/OfferCheckboxGroup/CheckboxContainer.tsx +140 -0
  122. package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.styl +144 -0
  123. package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.tsx +23 -0
  124. package/compat/OfferPanel/OfferPanel.styl +194 -0
  125. package/compat/OfferPanel/OfferPanel.tsx +81 -0
  126. package/compat/OfferPanel/OfferPeriod/OfferPeriod.styl +25 -0
  127. package/compat/OfferPanel/OfferPeriod/OfferPeriod.tsx +45 -0
  128. package/compat/OfferPanel/RangeGroup/RangeGroup.tsx +39 -0
  129. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styl +120 -0
  130. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styled.tsx +33 -0
  131. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.tsx +122 -0
  132. package/compat/PriceRating/PriceRating.styl +47 -0
  133. package/compat/PriceRating/PriceRating.tsx +64 -0
  134. package/compat/PriceRatingDetailed/PriceRatingDetailed.styl +120 -0
  135. package/compat/PriceRatingDetailed/PriceRatingDetailed.tsx +191 -0
  136. package/compat/PricingToolBlock/PricingTool.styl +7 -0
  137. package/compat/PricingToolBlock/PricingTool.tsx +29 -0
  138. package/compat/Radio/Radio.styl +115 -0
  139. package/compat/Radio/Radio.tsx +141 -0
  140. package/compat/Radio/RadioGroup.styl +5 -0
  141. package/compat/Radio/RadioGroup.tsx +65 -0
  142. package/compat/Range/Range.tsx +79 -0
  143. package/compat/RateSearchValue/RateSearchValue.styl +22 -0
  144. package/compat/RateSearchValue/RateSearchValue.tsx +55 -0
  145. package/compat/RateSearchWidget/RateSearchWidget.styl +107 -0
  146. package/compat/RateSearchWidget/RateSearchWidget.tsx +163 -0
  147. package/compat/ServiceBlockItem/ServiceBlockItem.styl +48 -0
  148. package/compat/ServiceBlockItem/ServiceBlockItem.tsx +25 -0
  149. package/compat/SkeletonItem/SkeletonItem.styl +81 -0
  150. package/compat/SkeletonItem/SkeletonItem.tsx +80 -0
  151. package/compat/StarButton/StarButton.styl +39 -0
  152. package/compat/StarButton/StarButton.tsx +31 -0
  153. package/compat/TabPanel/TabPanel.tsx +29 -0
  154. package/compat/TimePicker/TimePicker.styl +23 -0
  155. package/compat/TimePicker/TimePicker.tsx +156 -0
  156. package/compat/Tooltip/Tooltip.styl +117 -0
  157. package/compat/Tooltip/Tooltip.tsx +63 -0
  158. package/compat/Usp/Usp.styl +78 -0
  159. package/compat/Usp/Usp.tsx +30 -0
  160. package/compat/Usp/uspTranslate.ts +12 -0
  161. package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.styl +37 -0
  162. package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.tsx +178 -0
  163. package/compat/VehicleDetailedSidebar/partials/Price.styl +27 -0
  164. package/compat/VehicleDetailedSidebar/partials/Price.tsx +41 -0
  165. package/compat/VehicleDetailedSidebar/partials/PriceContent.styl +124 -0
  166. package/compat/VehicleDetailedSidebar/partials/PriceContent.tsx +128 -0
  167. package/compat/VehicleDetailedSidebar/partials/Properties.styl +58 -0
  168. package/compat/VehicleDetailedSidebar/partials/Properties.tsx +155 -0
  169. package/compat/VehicleDetailedSidebar/partials/Title.styl +35 -0
  170. package/compat/VehicleDetailedSidebar/partials/Title.tsx +33 -0
  171. package/compat/VehicleDetailedSlider/VehicleDetailedSlider.styl +147 -0
  172. package/compat/VehicleDetailedSlider/VehicleDetailedSlider.tsx +382 -0
  173. package/compat/VehicleDetailedSlider/partials/MobileStast.tsx +61 -0
  174. package/compat/VehicleDetailedSlider/partials/MobileStats.styl +71 -0
  175. package/compat/VehicleDetailedSlider/partials/PriceData.styl +51 -0
  176. package/compat/VehicleDetailedSlider/partials/PriceData.tsx +67 -0
  177. package/compat/VehicleDetailedSlider/partials/Stats.styl +80 -0
  178. package/compat/VehicleDetailedSlider/partials/Stats.tsx +62 -0
  179. package/compat/VehicleDetailedSlider/partials/Title.styl +45 -0
  180. package/compat/VehicleDetailedSlider/partials/Title.tsx +36 -0
  181. package/compat/VehicleFormattedPrice/VehicleFormattedPrice.styl +149 -0
  182. package/compat/VehicleFormattedPrice/VehicleFormattedPrice.tsx +163 -0
  183. package/compat/VehicleSlider/VehicleSlider.styl +63 -0
  184. package/compat/VehicleSlider/VehicleSlider.tsx +125 -0
  185. package/compat/VehicleSlider/VehicleSliderForSRL.tsx +175 -0
  186. package/compat/VehicleSmallCard/SeoText/SeoText.styl +8 -0
  187. package/compat/VehicleSmallCard/SeoText/SeoText.tsx +16 -0
  188. package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +204 -0
  189. package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +199 -0
  190. package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +273 -0
  191. package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +179 -0
  192. package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +165 -0
  193. package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +299 -0
  194. package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +33 -0
  195. package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.tsx +35 -0
  196. package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.styl +136 -0
  197. package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +91 -0
  198. package/compat/VehicleSmallCard/VehicleSmallCard.styl +310 -0
  199. package/compat/VehicleSmallCard/VehicleSmallCard.tsx +448 -0
  200. package/compat/index.ts +77 -0
  201. package/compat/legacy-theme/mixins.styl +93 -0
  202. package/compat/legacy-theme/priceReviewColors.styl +12 -0
  203. package/compat/legacy-theme/slider.global.styl +5 -0
  204. package/compat/legacy-theme/theme.styl +136 -0
  205. package/compat/withLabel/withLabel.styl +33 -0
  206. package/compat/withLabel/withLabel.tsx +44 -0
  207. package/compat/withStats/withStats.styl +174 -0
  208. package/compat/withStats/withStats.tsx +238 -0
  209. package/constants/RateSearchWidget.ts +15 -0
  210. package/constants/Search.ts +290 -0
  211. package/constants/SearchWidget.ts +108 -0
  212. package/constants/app.ts +223 -0
  213. package/constants/common.ts +127 -0
  214. package/constants/core.ts +131 -0
  215. package/constants/highlights.ts +165 -0
  216. package/constants/price.ts +9 -0
  217. package/constants/selectors.ts +38 -0
  218. package/constants.ts +91 -0
  219. package/data/DataTransformers.ts +88 -0
  220. package/data/fieldMapping.ts +342 -0
  221. package/data/toAutobahnCar.ts +442 -0
  222. package/iconsvg/IconSVG.tsx +30 -0
  223. package/iconsvg/IconSVGConfig.tsx +768 -0
  224. package/iconsvg/SVG/AboPartner.tsx +16 -0
  225. package/iconsvg/SVG/ArrowQuotes.tsx +22 -0
  226. package/iconsvg/SVG/CloseIcon.tsx +17 -0
  227. package/iconsvg/SVG/CloseIconSelect.tsx +18 -0
  228. package/iconsvg/SVG/ClosedLockIcon.tsx +18 -0
  229. package/iconsvg/SVG/DealerCheckIcon.tsx +18 -0
  230. package/iconsvg/SVG/DealerPopoverMail.tsx +21 -0
  231. package/iconsvg/SVG/DealerPopoverPhone.tsx +21 -0
  232. package/iconsvg/SVG/GrayPhoneIcon.tsx +22 -0
  233. package/iconsvg/SVG/InternetIcon.tsx +18 -0
  234. package/iconsvg/SVG/WhiteEnvelopeIcon.tsx +21 -0
  235. package/iconsvg/SVG/bodyType/Cabrio.tsx +23 -0
  236. package/iconsvg/SVG/bodyType/Coupe.tsx +22 -0
  237. package/iconsvg/SVG/bodyType/Minibus.tsx +22 -0
  238. package/iconsvg/SVG/bodyType/Other.tsx +25 -0
  239. package/iconsvg/SVG/bodyType/Sedan.tsx +22 -0
  240. package/iconsvg/SVG/bodyType/SelectorCategoryCombi.tsx +68 -0
  241. package/iconsvg/SVG/bodyType/SelectorCategoryCompact.tsx +20 -0
  242. package/iconsvg/SVG/bodyType/SelectorCategoryConvertible.tsx +68 -0
  243. package/iconsvg/SVG/bodyType/SelectorCategoryCoupe.tsx +60 -0
  244. package/iconsvg/SVG/bodyType/SelectorCategoryMinibus.tsx +64 -0
  245. package/iconsvg/SVG/bodyType/SelectorCategoryOther.tsx +60 -0
  246. package/iconsvg/SVG/bodyType/SelectorCategorySedan.tsx +69 -0
  247. package/iconsvg/SVG/bodyType/SelectorCategorySuv.tsx +77 -0
  248. package/iconsvg/SVG/bodyType/SelectorCategoryTransporter.tsx +68 -0
  249. package/iconsvg/SVG/bodyType/SelectorCategoryVan.tsx +72 -0
  250. package/iconsvg/SVG/bodyType/Small.tsx +23 -0
  251. package/iconsvg/SVG/bodyType/Suv.tsx +23 -0
  252. package/iconsvg/SVG/bodyType/Van.tsx +23 -0
  253. package/iconsvg/SVG/bodyType/Wagon.tsx +23 -0
  254. package/iconsvg/SVG/common/AddIcon.tsx +16 -0
  255. package/iconsvg/SVG/common/AddPlus.tsx +16 -0
  256. package/iconsvg/SVG/common/AddressDashboard.tsx +29 -0
  257. package/iconsvg/SVG/common/AddressIcon.tsx +20 -0
  258. package/iconsvg/SVG/common/ArrowDetailedAccordionBlue.tsx +26 -0
  259. package/iconsvg/SVG/common/ArrowDownBlue.tsx +21 -0
  260. package/iconsvg/SVG/common/ArrowSelect.tsx +23 -0
  261. package/iconsvg/SVG/common/ArrowStepDown.tsx +18 -0
  262. package/iconsvg/SVG/common/Autocheck.tsx +19 -0
  263. package/iconsvg/SVG/common/AutodeLogo.tsx +36 -0
  264. package/iconsvg/SVG/common/Avatar.tsx +17 -0
  265. package/iconsvg/SVG/common/BellGray.tsx +19 -0
  266. package/iconsvg/SVG/common/BigInfoTransparent.tsx +13 -0
  267. package/iconsvg/SVG/common/Browse.tsx +20 -0
  268. package/iconsvg/SVG/common/Calendar.tsx +24 -0
  269. package/iconsvg/SVG/common/CallbackDashboard.tsx +30 -0
  270. package/iconsvg/SVG/common/Camera.tsx +17 -0
  271. package/iconsvg/SVG/common/Car.tsx +16 -0
  272. package/iconsvg/SVG/common/CarBody.tsx +19 -0
  273. package/iconsvg/SVG/common/CarFront.tsx +43 -0
  274. package/iconsvg/SVG/common/CarInspectionCheck.tsx +21 -0
  275. package/iconsvg/SVG/common/CarInspectionScheme0.tsx +32 -0
  276. package/iconsvg/SVG/common/CarInspectionScheme1.tsx +53 -0
  277. package/iconsvg/SVG/common/CarInspectionScheme2.tsx +52 -0
  278. package/iconsvg/SVG/common/CarInspectionScheme3.tsx +32 -0
  279. package/iconsvg/SVG/common/CarInspectionScheme4.tsx +32 -0
  280. package/iconsvg/SVG/common/CarInspectionScheme5.tsx +32 -0
  281. package/iconsvg/SVG/common/CarInspectionScheme6.tsx +32 -0
  282. package/iconsvg/SVG/common/CarInspectionSchemeGeneral copy.tsx +24 -0
  283. package/iconsvg/SVG/common/CarInspectionSchemeGeneral.tsx +24 -0
  284. package/iconsvg/SVG/common/CheckBlue.tsx +18 -0
  285. package/iconsvg/SVG/common/CheckGreen.tsx +22 -0
  286. package/iconsvg/SVG/common/CheckMark.tsx +16 -0
  287. package/iconsvg/SVG/common/CheckWhite.tsx +19 -0
  288. package/iconsvg/SVG/common/Chevron.tsx +17 -0
  289. package/iconsvg/SVG/common/CircledCheckmark.tsx +25 -0
  290. package/iconsvg/SVG/common/Clock.tsx +18 -0
  291. package/iconsvg/SVG/common/Close.tsx +19 -0
  292. package/iconsvg/SVG/common/CloseGrey.tsx +22 -0
  293. package/iconsvg/SVG/common/ContactEmail.tsx +21 -0
  294. package/iconsvg/SVG/common/ContactPhone.tsx +28 -0
  295. package/iconsvg/SVG/common/CopyIcon copy.tsx +22 -0
  296. package/iconsvg/SVG/common/CopyIcon.tsx +22 -0
  297. package/iconsvg/SVG/common/CopyIconForDealer.tsx +21 -0
  298. package/iconsvg/SVG/common/DashboardIcon.tsx +20 -0
  299. package/iconsvg/SVG/common/DashboardQuestionMark.tsx +20 -0
  300. package/iconsvg/SVG/common/DealersIcon.tsx +20 -0
  301. package/iconsvg/SVG/common/DeleteCircle.tsx +31 -0
  302. package/iconsvg/SVG/common/DeleteV1Icon.tsx +18 -0
  303. package/iconsvg/SVG/common/DeliveryDashboard.tsx +25 -0
  304. package/iconsvg/SVG/common/DeliveryMail.tsx +24 -0
  305. package/iconsvg/SVG/common/Discount100De.tsx +18 -0
  306. package/iconsvg/SVG/common/Discount100En.tsx +19 -0
  307. package/iconsvg/SVG/common/Discount66De.tsx +28 -0
  308. package/iconsvg/SVG/common/Discount66En.tsx +20 -0
  309. package/iconsvg/SVG/common/DoneIcon.tsx +18 -0
  310. package/iconsvg/SVG/common/EditCircle.tsx +32 -0
  311. package/iconsvg/SVG/common/EditPriceIcon.tsx +20 -0
  312. package/iconsvg/SVG/common/EuroCurrency.tsx +18 -0
  313. package/iconsvg/SVG/common/Export.tsx +20 -0
  314. package/iconsvg/SVG/common/Eye.tsx +17 -0
  315. package/iconsvg/SVG/common/EyeCatch.tsx +19 -0
  316. package/iconsvg/SVG/common/FavoritesIcon.tsx +20 -0
  317. package/iconsvg/SVG/common/FilterRange.tsx +16 -0
  318. package/iconsvg/SVG/common/FilterToolBlack.tsx +23 -0
  319. package/iconsvg/SVG/common/FlagDe.tsx +21 -0
  320. package/iconsvg/SVG/common/FlagEn.tsx +43 -0
  321. package/iconsvg/SVG/common/GrayEnvelopeIcon.tsx +19 -0
  322. package/iconsvg/SVG/common/HamburgerMenuIcon.tsx +18 -0
  323. package/iconsvg/SVG/common/HandingOverDashboard.tsx +32 -0
  324. package/iconsvg/SVG/common/ImageSettingsIcon.tsx +20 -0
  325. package/iconsvg/SVG/common/Info.tsx +16 -0
  326. package/iconsvg/SVG/common/InfoIcon.tsx +17 -0
  327. package/iconsvg/SVG/common/InfoTransparent.tsx +18 -0
  328. package/iconsvg/SVG/common/LogoutIcon.tsx +20 -0
  329. package/iconsvg/SVG/common/MagnifyingGlass.tsx +31 -0
  330. package/iconsvg/SVG/common/MenuArrow.tsx +16 -0
  331. package/iconsvg/SVG/common/MenuGrey.tsx +22 -0
  332. package/iconsvg/SVG/common/MobileDeLogo.tsx +108 -0
  333. package/iconsvg/SVG/common/MyOrderIcon.tsx +20 -0
  334. package/iconsvg/SVG/common/MyVehiclesIcon.tsx +20 -0
  335. package/iconsvg/SVG/common/NewFlagDe.tsx +25 -0
  336. package/iconsvg/SVG/common/NewFlagEn.tsx +34 -0
  337. package/iconsvg/SVG/common/OrderReceivedDashboard.tsx +27 -0
  338. package/iconsvg/SVG/common/Package.tsx +30 -0
  339. package/iconsvg/SVG/common/Phone.tsx +18 -0
  340. package/iconsvg/SVG/common/PhoneGrey.tsx +22 -0
  341. package/iconsvg/SVG/common/PickupDashboard.tsx +30 -0
  342. package/iconsvg/SVG/common/Picture.tsx +24 -0
  343. package/iconsvg/SVG/common/Pictures.tsx +32 -0
  344. package/iconsvg/SVG/common/Plus.tsx +16 -0
  345. package/iconsvg/SVG/common/PlusNew.tsx +16 -0
  346. package/iconsvg/SVG/common/PreparationDashboard.tsx +29 -0
  347. package/iconsvg/SVG/common/ProfileDashboard.tsx +24 -0
  348. package/iconsvg/SVG/common/ProfileIcon.tsx +17 -0
  349. package/iconsvg/SVG/common/Question.tsx +19 -0
  350. package/iconsvg/SVG/common/QuestionBold.tsx +25 -0
  351. package/iconsvg/SVG/common/RegistrationDashboard.tsx +31 -0
  352. package/iconsvg/SVG/common/SavedSearchsIcon.tsx +20 -0
  353. package/iconsvg/SVG/common/Search.tsx +19 -0
  354. package/iconsvg/SVG/common/SearchGrey.tsx +22 -0
  355. package/iconsvg/SVG/common/SettingPenIcon.tsx +20 -0
  356. package/iconsvg/SVG/common/Share.tsx +16 -0
  357. package/iconsvg/SVG/common/ShoppingCart.tsx +18 -0
  358. package/iconsvg/SVG/common/SliderArrow.tsx +21 -0
  359. package/iconsvg/SVG/common/SliderEye.tsx +17 -0
  360. package/iconsvg/SVG/common/SortUpDownArrows.tsx +18 -0
  361. package/iconsvg/SVG/common/Speedometer.tsx +23 -0
  362. package/iconsvg/SVG/common/Star.tsx +20 -0
  363. package/iconsvg/SVG/common/StarNew.tsx +16 -0
  364. package/iconsvg/SVG/common/StarOutline.tsx +20 -0
  365. package/iconsvg/SVG/common/StarRoundedCorners.tsx +18 -0
  366. package/iconsvg/SVG/common/Stats.tsx +17 -0
  367. package/iconsvg/SVG/common/Step1.tsx +21 -0
  368. package/iconsvg/SVG/common/Step2.tsx +20 -0
  369. package/iconsvg/SVG/common/Step3.tsx +21 -0
  370. package/iconsvg/SVG/common/SupportCallbackIcon.tsx +20 -0
  371. package/iconsvg/SVG/common/Telephone.tsx +22 -0
  372. package/iconsvg/SVG/common/Time.tsx +17 -0
  373. package/iconsvg/SVG/common/Timetable.tsx +18 -0
  374. package/iconsvg/SVG/common/Trash.tsx +22 -0
  375. package/iconsvg/SVG/common/TrashRed.tsx +23 -0
  376. package/iconsvg/SVG/common/Upload.tsx +17 -0
  377. package/iconsvg/SVG/common/UserGrey.tsx +22 -0
  378. package/iconsvg/SVG/common/UserProfileIcon.tsx +20 -0
  379. package/iconsvg/SVG/common/ValidateFailure.tsx +21 -0
  380. package/iconsvg/SVG/common/ValidateSuccess.tsx +21 -0
  381. package/iconsvg/SVG/common/WarningTriangle.tsx +20 -0
  382. package/iconsvg/SVG/common/WhiteArrowUp.tsx +21 -0
  383. package/iconsvg/SVG/common/WhiteKey.tsx +21 -0
  384. package/iconsvg/SVG/common/WhitePeople.tsx +23 -0
  385. package/iconsvg/SVG/common/WhiteTick.tsx +19 -0
  386. package/iconsvg/SVG/flags/AT.tsx +19 -0
  387. package/iconsvg/SVG/flags/BE.tsx +20 -0
  388. package/iconsvg/SVG/flags/BG.tsx +20 -0
  389. package/iconsvg/SVG/flags/CH.tsx +22 -0
  390. package/iconsvg/SVG/flags/CZ.tsx +18 -0
  391. package/iconsvg/SVG/flags/DE.tsx +18 -0
  392. package/iconsvg/SVG/flags/DK.tsx +18 -0
  393. package/iconsvg/SVG/flags/ES.tsx +2585 -0
  394. package/iconsvg/SVG/flags/FI.tsx +18 -0
  395. package/iconsvg/SVG/flags/FR.tsx +20 -0
  396. package/iconsvg/SVG/flags/GB.tsx +26 -0
  397. package/iconsvg/SVG/flags/HR.tsx +135 -0
  398. package/iconsvg/SVG/flags/HU.tsx +20 -0
  399. package/iconsvg/SVG/flags/IT.tsx +20 -0
  400. package/iconsvg/SVG/flags/LI.tsx +106 -0
  401. package/iconsvg/SVG/flags/LU.tsx +18 -0
  402. package/iconsvg/SVG/flags/NL.tsx +18 -0
  403. package/iconsvg/SVG/flags/NO.tsx +20 -0
  404. package/iconsvg/SVG/flags/PL.tsx +19 -0
  405. package/iconsvg/SVG/flags/RO.tsx +20 -0
  406. package/iconsvg/SVG/flags/RU.tsx +20 -0
  407. package/iconsvg/SVG/flags/SE.tsx +20 -0
  408. package/iconsvg/SVG/flags/SI.tsx +54 -0
  409. package/iconsvg/SVG/flags/SK.tsx +34 -0
  410. package/iconsvg/SVG/flags/UA.tsx +19 -0
  411. package/iconsvg/SVG/infoBlocks/14DaysReturnPolicy.tsx +18 -0
  412. package/iconsvg/SVG/infoBlocks/AlertInfo.tsx +19 -0
  413. package/iconsvg/SVG/infoBlocks/Autocheck.tsx +19 -0
  414. package/iconsvg/SVG/infoBlocks/CheckTheStory.tsx +22 -0
  415. package/iconsvg/SVG/infoBlocks/CustomerServiceWhite.tsx +16 -0
  416. package/iconsvg/SVG/infoBlocks/Guarantee.tsx +16 -0
  417. package/iconsvg/SVG/infoBlocks/OrderWhite.tsx +13 -0
  418. package/iconsvg/SVG/infoBlocks/PriceGuarantee.tsx +19 -0
  419. package/iconsvg/SVG/infoBlocks/PriceGuaranteeWhite.tsx +17 -0
  420. package/iconsvg/SVG/infoBlocks/TransportAndDelivery.tsx +21 -0
  421. package/iconsvg/SVG/infoBlocks/Warranty.tsx +23 -0
  422. package/iconsvg/SVG/popower/Mail.tsx +18 -0
  423. package/iconsvg/SVG/popower/Phone.tsx +19 -0
  424. package/iconsvg/SVG/popower/Schedule.tsx +18 -0
  425. package/iconsvg/SVG/searchWidgets/drive/AAllWheelDrive.tsx +26 -0
  426. package/iconsvg/SVG/searchWidgets/drive/AllWheelDrive.tsx +26 -0
  427. package/iconsvg/SVG/searchWidgets/drive/FrontWheelDrive.tsx +25 -0
  428. package/iconsvg/SVG/searchWidgets/drive/OtherWheelDrive.tsx +26 -0
  429. package/iconsvg/SVG/searchWidgets/drive/RearWheelDrive.tsx +25 -0
  430. package/iconsvg/SVG/searchWidgets/fuel/FuelDiesel.tsx +18 -0
  431. package/iconsvg/SVG/searchWidgets/fuel/FuelElectrical.tsx +19 -0
  432. package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalDiesel.tsx +34 -0
  433. package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalPetrol.tsx +20 -0
  434. package/iconsvg/SVG/searchWidgets/fuel/FuelEthanol.tsx +53 -0
  435. package/iconsvg/SVG/searchWidgets/fuel/FuelHydrogen.tsx +24 -0
  436. package/iconsvg/SVG/searchWidgets/fuel/FuelLpg.tsx +24 -0
  437. package/iconsvg/SVG/searchWidgets/fuel/FuelNaturalGas.tsx +23 -0
  438. package/iconsvg/SVG/searchWidgets/fuel/FuelOther.tsx +28 -0
  439. package/iconsvg/SVG/searchWidgets/fuel/FuelPetrol.tsx +18 -0
  440. package/iconsvg/SVG/settings/Account.tsx +17 -0
  441. package/iconsvg/SVG/settings/DataUsage.tsx +17 -0
  442. package/iconsvg/SVG/settings/MarketResearch.tsx +17 -0
  443. package/iconsvg/SVG/settings/Newsletter.tsx +17 -0
  444. package/iconsvg/SVG/settings/RemoveEye.tsx +17 -0
  445. package/iconsvg/SVG/settings/RemoveEyeOff.tsx +17 -0
  446. package/iconsvg/SVG/settings/Security.tsx +17 -0
  447. package/iconsvg/SVG/settings/Warning.tsx +17 -0
  448. package/iconsvg/SVG/slider/360.tsx +23 -0
  449. package/iconsvg/SVG/slider/360New.tsx +20 -0
  450. package/iconsvg/SVG/slider/Checked.tsx +19 -0
  451. package/iconsvg/SVG/slider/DiscountRibbon.tsx +51 -0
  452. package/iconsvg/SVG/slider/DiscountRibbonMobile.tsx +47 -0
  453. package/iconsvg/SVG/slider/DiscountRibbonNew.tsx +29 -0
  454. package/iconsvg/SVG/slider/Easy.tsx +19 -0
  455. package/iconsvg/SVG/slider/Fullscreen.tsx +16 -0
  456. package/iconsvg/SVG/slider/FullscreenWindow.tsx +23 -0
  457. package/iconsvg/SVG/slider/Safe.tsx +19 -0
  458. package/iconsvg/SVG/slider/ToBuy.tsx +19 -0
  459. package/iconsvg/SVG/slider/YoutubeButton.tsx +26 -0
  460. package/iconsvg/SVG/slider/ZoomIn.tsx +21 -0
  461. package/iconsvg/SVG/slider/ZoomOut.tsx +21 -0
  462. package/iconsvg/SVG/social/AndroidLogo.tsx +18 -0
  463. package/iconsvg/SVG/social/Apple.tsx +19 -0
  464. package/iconsvg/SVG/social/FacebookF.tsx +19 -0
  465. package/iconsvg/SVG/social/GooglePlusG.tsx +19 -0
  466. package/iconsvg/SVG/social/Instagram.tsx +17 -0
  467. package/iconsvg/SVG/social/Pinterest.tsx +19 -0
  468. package/iconsvg/SVG/social/SharingInterface.tsx +21 -0
  469. package/iconsvg/SVG/social/Twitter.tsx +19 -0
  470. package/iconsvg/SVG/social/Youtube.tsx +19 -0
  471. package/iconsvg/SVG/vehicle/AboIcon.tsx +11 -0
  472. package/iconsvg/SVG/vehicle/Abs.tsx +24 -0
  473. package/iconsvg/SVG/vehicle/AirCond.tsx +34 -0
  474. package/iconsvg/SVG/vehicle/Airbag.tsx +21 -0
  475. package/iconsvg/SVG/vehicle/AuxiliaryHeating.tsx +23 -0
  476. package/iconsvg/SVG/vehicle/Bluetooth.tsx +22 -0
  477. package/iconsvg/SVG/vehicle/BuyIcon.tsx +15 -0
  478. package/iconsvg/SVG/vehicle/CarAvailability.tsx +22 -0
  479. package/iconsvg/SVG/vehicle/CarInspectionCheck.tsx +21 -0
  480. package/iconsvg/SVG/vehicle/CarInspectionCross.tsx +21 -0
  481. package/iconsvg/SVG/vehicle/CheckoutChecked.tsx +15 -0
  482. package/iconsvg/SVG/vehicle/Co2.tsx +24 -0
  483. package/iconsvg/SVG/vehicle/CruiseControl.tsx +25 -0
  484. package/iconsvg/SVG/vehicle/Date.tsx +21 -0
  485. package/iconsvg/SVG/vehicle/Delivery.tsx +12 -0
  486. package/iconsvg/SVG/vehicle/Diesel.tsx +28 -0
  487. package/iconsvg/SVG/vehicle/Display.tsx +25 -0
  488. package/iconsvg/SVG/vehicle/Done.tsx +11 -0
  489. package/iconsvg/SVG/vehicle/Door.tsx +19 -0
  490. package/iconsvg/SVG/vehicle/DoubleDone.tsx +18 -0
  491. package/iconsvg/SVG/vehicle/EditIcon.tsx +11 -0
  492. package/iconsvg/SVG/vehicle/EmergencyBrakeAssistant.tsx +27 -0
  493. package/iconsvg/SVG/vehicle/Eps.tsx +24 -0
  494. package/iconsvg/SVG/vehicle/Esp.tsx +24 -0
  495. package/iconsvg/SVG/vehicle/FinancingIcon.tsx +20 -0
  496. package/iconsvg/SVG/vehicle/FuelConsumption.tsx +20 -0
  497. package/iconsvg/SVG/vehicle/Fueling.tsx +22 -0
  498. package/iconsvg/SVG/vehicle/FullDrive.tsx +24 -0
  499. package/iconsvg/SVG/vehicle/GasElectric.tsx +28 -0
  500. package/iconsvg/SVG/vehicle/HandsFreePhoneSystem.tsx +24 -0
  501. package/iconsvg/SVG/vehicle/Kw.tsx +23 -0
  502. package/iconsvg/SVG/vehicle/LastCrawledAt.tsx +22 -0
  503. package/iconsvg/SVG/vehicle/LeasingIcon.tsx +14 -0
  504. package/iconsvg/SVG/vehicle/Led.tsx +24 -0
  505. package/iconsvg/SVG/vehicle/LightSensor.tsx +22 -0
  506. package/iconsvg/SVG/vehicle/LinkAlternative.tsx +15 -0
  507. package/iconsvg/SVG/vehicle/Location.tsx +17 -0
  508. package/iconsvg/SVG/vehicle/MinusIcon.tsx +11 -0
  509. package/iconsvg/SVG/vehicle/Mirror.tsx +19 -0
  510. package/iconsvg/SVG/vehicle/Navigation.tsx +27 -0
  511. package/iconsvg/SVG/vehicle/NewCar.tsx +21 -0
  512. package/iconsvg/SVG/vehicle/NoImage.tsx +17 -0
  513. package/iconsvg/SVG/vehicle/Owner.tsx +18 -0
  514. package/iconsvg/SVG/vehicle/PanoramicRoof.tsx +23 -0
  515. package/iconsvg/SVG/vehicle/ParkingAssistants.tsx +24 -0
  516. package/iconsvg/SVG/vehicle/PickYourself.tsx +18 -0
  517. package/iconsvg/SVG/vehicle/PlusIcon.tsx +11 -0
  518. package/iconsvg/SVG/vehicle/Power.tsx +21 -0
  519. package/iconsvg/SVG/vehicle/Ps.tsx +19 -0
  520. package/iconsvg/SVG/vehicle/Question.tsx +24 -0
  521. package/iconsvg/SVG/vehicle/Seats.tsx +21 -0
  522. package/iconsvg/SVG/vehicle/SeatsHeating.tsx +26 -0
  523. package/iconsvg/SVG/vehicle/SelectorGearboxAutomatic.tsx +24 -0
  524. package/iconsvg/SVG/vehicle/SelectorGearboxManualShift.tsx +19 -0
  525. package/iconsvg/SVG/vehicle/SelectorGearboxOther.tsx +24 -0
  526. package/iconsvg/SVG/vehicle/SelectorGearboxSemiAutomatic.tsx +30 -0
  527. package/iconsvg/SVG/vehicle/SelectorInteriorTypeAlcantara.tsx +225 -0
  528. package/iconsvg/SVG/vehicle/SelectorInteriorTypeFabric.tsx +29 -0
  529. package/iconsvg/SVG/vehicle/SelectorInteriorTypeFullLeather.tsx +29 -0
  530. package/iconsvg/SVG/vehicle/SelectorInteriorTypeOther.tsx +26 -0
  531. package/iconsvg/SVG/vehicle/SelectorInteriorTypePartLeather.tsx +142 -0
  532. package/iconsvg/SVG/vehicle/SelectorInteriorTypeSyntheticLeather.tsx +27 -0
  533. package/iconsvg/SVG/vehicle/SelectorInteriorTypeVelours.tsx +39 -0
  534. package/iconsvg/SVG/vehicle/Shield.tsx +39 -0
  535. package/iconsvg/SVG/vehicle/Speedometer.tsx +17 -0
  536. package/iconsvg/SVG/vehicle/StartStopSystem.tsx +30 -0
  537. package/iconsvg/SVG/vehicle/Stop.tsx +25 -0
  538. package/iconsvg/SVG/vehicle/TickMark.tsx +21 -0
  539. package/iconsvg/SVG/vehicle/TrafficSignRecognition.tsx +29 -0
  540. package/iconsvg/SVG/vehicle/TrailerCoupling.tsx +24 -0
  541. package/iconsvg/SVG/vehicle/Transmission.tsx +27 -0
  542. package/iconsvg/SVG/vehicle/Wheel.tsx +43 -0
  543. package/iconsvg/SVG/vehicle/Wipers.tsx +22 -0
  544. package/iconsvg/SVG/vehicle/Wrench.tsx +17 -0
  545. package/iconsvg/index.ts +7 -0
  546. package/index.ts +18 -0
  547. package/locales/de/autobahn.json +671 -0
  548. package/locales/en/autobahn.json +671 -0
  549. package/locales/legacy/SearchDetailedPage.ts +205 -0
  550. package/locales/legacy/cbd.ts +719 -0
  551. package/locales/legacy/common.ts +109 -0
  552. package/locales/legacy/data.ts +1118 -0
  553. package/locales/legacy/priceRating.ts +10 -0
  554. package/locales/legacy/sortingOptions.ts +21 -0
  555. package/media/images/question.svg +1 -0
  556. package/media/images/raiting-stars-min.svg +7 -0
  557. package/media/images/refresh-button.svg +49 -0
  558. package/media/images/searchWidget/selector_emissionSticker_green.png +0 -0
  559. package/media/images/searchWidget/selector_emissionSticker_red.png +0 -0
  560. package/media/images/searchWidget/selector_emissionSticker_yellow.png +0 -0
  561. package/media/images/slider-arrow-new.svg +1 -0
  562. package/media/images/user-icon.svg +16 -0
  563. package/media/svg/common/eye.svg +1 -0
  564. package/media/svg/common/star.svg +1 -0
  565. package/media/svg/infoBlocks/whyAutodeIconSet-F.svg +9 -0
  566. package/media/svg/infoBlocks/whyAutodeIconSet-G.svg +8 -0
  567. package/media/svg/infoBlocks/whyAutodeIconSet-Q.svg +6 -0
  568. package/media/svg/infoBlocks/whyAutodeIconSet-R.svg +9 -0
  569. package/media/svg/usp/icon1.svg +16 -0
  570. package/media/svg/usp/icon2.svg +13 -0
  571. package/media/svg/usp/icon3.svg +10 -0
  572. package/media/svg/usp/icon4.svg +14 -0
  573. package/package.json +30 -0
  574. package/schemes/AggregationScheme.ts +73 -0
  575. package/searchFilters/filterOptions.ts +119 -0
  576. package/searchFilters/filterProps.ts +35 -0
  577. package/searchFilters/index.ts +15 -0
  578. package/theme/autobahn.css +25 -0
  579. package/theme/colors_and_type.css +113 -0
  580. package/theme/md3.css +2034 -0
  581. package/types/types.ts +374 -0
  582. package/types.ts +8 -0
  583. package/ui/Accordion.tsx +134 -0
  584. package/ui/Button.tsx +62 -0
  585. package/ui/CardCarousel.tsx +133 -0
  586. package/ui/Chip.tsx +29 -0
  587. package/ui/DatePicker.tsx +145 -0
  588. package/ui/Dropdown.tsx +205 -0
  589. package/ui/FileUpload.tsx +154 -0
  590. package/ui/FormCheckbox.tsx +79 -0
  591. package/ui/FormDropdown.tsx +327 -0
  592. package/ui/FormField.tsx +88 -0
  593. package/ui/FormRadio.tsx +93 -0
  594. package/ui/FormRadioGroup.tsx +106 -0
  595. package/ui/Icon.tsx +391 -0
  596. package/ui/IconButton.tsx +44 -0
  597. package/ui/Modal.tsx +187 -0
  598. package/ui/Pagination.tsx +140 -0
  599. package/ui/Price.tsx +25 -0
  600. package/ui/PriceEvalBar.tsx +48 -0
  601. package/ui/SaveChip.tsx +34 -0
  602. package/ui/Segmented.tsx +48 -0
  603. package/ui/Skeleton.tsx +75 -0
  604. package/ui/Spec.tsx +24 -0
  605. package/ui/Stars.tsx +29 -0
  606. package/ui/StatChip.tsx +21 -0
  607. package/ui/Stepper.tsx +106 -0
  608. package/ui/Switch.tsx +65 -0
  609. package/ui/Table.tsx +156 -0
  610. package/ui/Textarea.tsx +58 -0
  611. package/ui/index.ts +88 -0
  612. package/utils/CommonUtils.ts +649 -0
  613. package/utils/DateUtils.ts +101 -0
  614. package/utils/index.ts +74 -0
  615. package/utils/power.ts +11 -0
  616. package/utils/query.ts +21 -0
  617. package/vdp/FinanceCalculator.tsx +465 -0
  618. package/vdp/VdpModules.tsx +1490 -0
  619. package/vdp/VdpViewer.tsx +139 -0
  620. package/vdp/index.ts +75 -0
  621. package/vdp/types.ts +197 -0
  622. package/vehiclesProps/cbdSelectors.ts +117 -0
  623. package/vehiclesProps/decoratedLightProps.tsx +572 -0
  624. package/vehiclesProps/decoratedProps.tsx +1746 -0
  625. package/vehiclesProps/equipment.ts +129 -0
  626. package/vehiclesProps/vehicleDetails.ts +428 -0
  627. package/widgets/SearchBox.tsx +256 -0
  628. package/widgets/index.ts +5 -0
@@ -0,0 +1,442 @@
1
+ // Autobahn (auto.de redesign) — store-car → AutobahnCar mapper (AB-P0-6).
2
+ //
3
+ // PURE adapter: converts the existing fe-main "store car" (the object
4
+ // `SearchResultsStore.getCarsForPage()` returns to the SRP, produced by
5
+ // `transformDataForVehicles` in framework/DataTransformers.ts) into the
6
+ // `AutobahnCar` view-model the new Autobahn cards consume
7
+ // (components/autobahn/cards/types.ts).
8
+ //
9
+ // WHY a pure function with injected deps:
10
+ // The Autobahn cards are pure/presentational and never touch the store. This
11
+ // mapper is the single seam that reads the real payload. It is kept pure (no
12
+ // store singletons imported here) so it is unit-testable and the SRP container
13
+ // injects the real stores/services (imagesStore.getSupportedImageFormat,
14
+ // appStore.language). Everything it needs arrives through `deps`.
15
+ //
16
+ // NEEDS-DATA discipline (the point of the ticket):
17
+ // Fields with NO real source on the search payload are left `undefined` so the
18
+ // cards render their 'Daten folgt' marker instead of a fabricated number. See
19
+ // the per-field rationale in ./fieldMapping.ts. We NEVER synthesize:
20
+ // drop, marketLow, marketAvg, marketHigh, watchers, views.
21
+ // listPrice / savings are emitted ONLY if a real strike/list price exists.
22
+ //
23
+ // Every field path below was confirmed against the real code (file:line in
24
+ // ./fieldMapping.ts), not guessed.
25
+
26
+ import { getPriceRating, getPredictablePrice } from '../utils/CommonUtils';
27
+ import { formatTimestamp } from '../utils/DateUtils';
28
+ import { getPowerLabel } from '../utils/power';
29
+
30
+ import { AutobahnCar, AutobahnPhev } from '../cards/types';
31
+ import { TIER_LABELS, RatingTier, CO2_CLASSES, Co2Class } from '../constants';
32
+
33
+ /**
34
+ * Last-resort placeholder shown in the carousel until the real images for a car
35
+ * are loaded. The SRP container SHOULD inject the app's real no-image asset via
36
+ * `deps.placeholder` (fe-main exposes PLACEHOLDER_IMAGE_LARGE_URL /
37
+ * PLACEHOLDER_IMAGE_SMALL_URL in framework/constants/app.ts, both derived from
38
+ * config.imagesAPI.imgUrlBase). We do NOT import that here to keep the mapper
39
+ * free of app-config coupling; this empty-data-URI default just guarantees a
40
+ * non-broken <img> in tests / before the container wires the real one.
41
+ */
42
+ export const PLACEHOLDER_IMAGE =
43
+ 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
44
+
45
+ /**
46
+ * Dependencies the SRP container injects. Everything here is what the mapper
47
+ * needs from the outside world — keeping the function itself pure.
48
+ */
49
+ export interface ToAutobahnCarDeps {
50
+ /**
51
+ * Build a ready-to-use image URL for a car image.
52
+ * Pass `imagesStore.getSupportedImageFormat` straight through (it already
53
+ * picks webp/jpeg and the cached size). Signature matches ImagesStore:
54
+ * (vehicleID, imageIdentifier, size) => url
55
+ */
56
+ getImageUrl?: (vehicleID: string, imageIdentifier: string, size: 'small' | 'medium' | 'large') => string;
57
+ /**
58
+ * Loaded gallery images for this car from `imagesStore.images.get(id)`
59
+ * (array of { imageUrlSmall, imageUrlMedium, imageUrlLarge, imageUrl, ... }).
60
+ * When present we use these real URLs; otherwise we fall back to the single
61
+ * main image via getImageUrl, then to the placeholder. Never faked.
62
+ */
63
+ loadedImages?: Array<{ imageUrlSmall?: string; imageUrlMedium?: string; imageUrlLarge?: string; imageUrl?: string }>;
64
+ /** image size used when building gallery URLs from the main image id. */
65
+ imageSize?: 'small' | 'medium' | 'large';
66
+ /** translator for cbd:* selector codes (fuel/gearbox). Falls back to a built-in de map, then the raw code. */
67
+ t?: (key: string, options?: object) => string;
68
+ /** active UI language ('de' | 'en' …). Drives de-DE vs en-IN number grouping for the EnVKV line. */
69
+ language?: string;
70
+ /** placeholder image URL override (defaults to PLACEHOLDER_IMAGE). */
71
+ placeholder?: string;
72
+ }
73
+
74
+ // ---------------------------------------------------------------------------
75
+ // small pure helpers
76
+ // ---------------------------------------------------------------------------
77
+
78
+ const DEFAULT_LANG = 'de';
79
+
80
+ /** locale tag for Number#toLocaleString — de-DE (comma decimals) unless en. */
81
+ function localeTag(language?: string): string {
82
+ return language === 'en' ? 'en-IN' : 'de-DE';
83
+ }
84
+
85
+ /** finite-number coercion: accepts number | numeric string, else undefined. */
86
+ function num(v: any): number | undefined {
87
+ if (v == null) return undefined;
88
+ const n = typeof v === 'number' ? v : Number.parseFloat(String(v));
89
+ return Number.isFinite(n) ? n : undefined;
90
+ }
91
+
92
+ /**
93
+ * Minimal de-DE fallback for the handful of cbd:* selector codes the cards show
94
+ * (fuel + gearbox). Used only when no `t` is injected (e.g. in unit tests).
95
+ * The full set lives in the cbd locale dictionary (@bytebrand/i18n-dictionaries).
96
+ */
97
+ const CBD_DE_FALLBACK: Record<string, string> = {
98
+ selector_fuel_petrol: 'Benzin',
99
+ selector_fuel_diesel: 'Diesel',
100
+ selector_fuel_electrical: 'Elektro',
101
+ selector_fuel_ethanol: 'Ethanol',
102
+ selector_fuel_hybridElectricalDiesel: 'Hybrid (Elektro / Diesel)',
103
+ selector_fuel_hybridElectricalPetrol: 'Hybrid (Elektro / Benzin)',
104
+ selector_fuel_hydrogen: 'Wasserstoff',
105
+ selector_fuel_naturalGas: 'Erdgas',
106
+ selector_gearbox_automatic: 'Automatik',
107
+ selector_gearbox_manualShift: 'Manuell',
108
+ selector_gearbox_semiAutomatic: 'Halbautomatik',
109
+ // highlight-chip keys (DataTransformers highlights) — used when no `t` is injected
110
+ multimedia_navigationSystem: 'Navigationssystem',
111
+ lights_ledHeadlights: 'LED-Scheinwerfer',
112
+ lights_xenonHeadlights: 'Xenon-Scheinwerfer',
113
+ window_panoramicGlassRoof: 'Panoramadach',
114
+ assistants_headUpDisplay: 'Head-up-Display',
115
+ assistants_adaptiveCruiseControl: 'Abstandstempomat',
116
+ search_seatHeating: 'Sitzheizung',
117
+ selector_climatisation_automaticAirCondition: 'Klimaautomatik',
118
+ selector_climatisation_airCondition: 'Klimaanlage',
119
+ search_parkingAssistants: 'Einparkhilfe',
120
+ selector_driveType_allWheelDrive: 'Allradantrieb',
121
+ search_trailerHitch: 'Anhängerkupplung',
122
+ assistants_cruiseControl: 'Tempomat',
123
+ assistants_trafficSignRecognition: 'Verkehrszeichenerkennung',
124
+ assistants_collisionAvoidance: 'Notbremsassistent',
125
+ window_sunroof: 'Schiebedach',
126
+ seats_electricAdjustable: 'Elektr. Sitze',
127
+ exterior_metallic: 'Metallic-Lackierung',
128
+ multimedia_handsFreePhoneSystem: 'Freisprecheinrichtung',
129
+ heatingCooling_auxiliaryHeating: 'Standheizung',
130
+ multimedia_bluetooth: 'Bluetooth',
131
+ };
132
+
133
+ /** translate a cbd:* selector code → human label. */
134
+ function cbd(code: any, t?: (key: string, options?: object) => string): string {
135
+ if (code == null || code === 'N/A') return '';
136
+ const key = String(code);
137
+ if (t) {
138
+ const out = t(`cbd:${key}`);
139
+ // i18next returns the key back when missing; treat that as "no translation".
140
+ if (out && out !== `cbd:${key}` && out !== key) return out;
141
+ }
142
+ return CBD_DE_FALLBACK[key] || key;
143
+ }
144
+
145
+ /**
146
+ * Map the store's energy-efficiency-class selector code (or a bare letter) to a
147
+ * single CO2_CLASSES letter ('A'…'G'). A+/A++/A+++ collapse to 'A' so the card's
148
+ * colored InlineCls (which does CO2_CLASSES.indexOf) still resolves a band color.
149
+ * Returns '' when there is no class (caller decides what to render).
150
+ */
151
+ function co2ClassLetter(code: any): Co2Class | '' {
152
+ if (code == null || code === 'N/A') return '';
153
+ const raw = String(code);
154
+ // selector_energyEfficiencyClass_appp → 'a', _ap → 'a', _b → 'b', …
155
+ const m = raw.match(/selector_energyEfficiencyClass_(a|b|c|d|e|f|g)/i);
156
+ const letter = (m ? m[1] : raw.replace(/\+/g, '').trim().charAt(0)).toUpperCase();
157
+ return (CO2_CLASSES as readonly string[]).includes(letter) ? (letter as Co2Class) : '';
158
+ }
159
+
160
+ /**
161
+ * Real Preisbewertung → AutobahnCar rating tone + German label.
162
+ *
163
+ * Source of truth (confirmed against the live SRP card,
164
+ * VehicleSmallCard/VehicleInfo.tsx:160): the legacy card renders
165
+ * getPriceRating(price.currentSalesPrice, price.mlCurrentSalesPricePredicted)
166
+ * which returns a numeric tier using priceRatings:
167
+ * 0 noRating · 1 highPrice · 2 increasedPrice · 3 fairPrice · 4 goodPrice · 5 topPrice
168
+ * (constants/price.ts in this package).
169
+ *
170
+ * We map that real number onto the Autobahn 5-tier scale (TIER_LABELS,
171
+ * components/autobahn/constants.ts), where index 0=Top … 4=Hoch:
172
+ * topPrice(5)→0 'Top Preis' · goodPrice(4)→1 'Guter Preis' ·
173
+ * fairPrice(3)→2 'Fairer Preis' · increasedPrice(2)→3 'Erhöht' ·
174
+ * highPrice(1)→4 'Hoher Preis'.
175
+ * noRating(0) has no real comparison → neutral 'Fairer Preis' (tier 2) WITHOUT a
176
+ * flattering label (documented in fieldMapping.ts). The card only special-cases
177
+ * the 'fair' tone (warn pill); every other tone is the good/green pill.
178
+ *
179
+ * AutobahnCar.rating is a free string; CarCard does `rating === 'fair' ? warn : good`.
180
+ * We emit the autobahn tier key ('top'|'good'|'fair'|'raised'|'high') so the
181
+ * neutral 'fair' maps to the warn pill exactly like the design intends.
182
+ */
183
+ const LEGACY_TO_TIER: Record<number, RatingTier> = {
184
+ 5: 0, // topPrice → Top Preis
185
+ 4: 1, // goodPrice → Guter Preis
186
+ 3: 2, // fairPrice → Fairer Preis
187
+ 2: 3, // increasedPrice → Erhöht
188
+ 1: 4, // highPrice → Hoher Preis
189
+ };
190
+ const TIER_TONE: Record<RatingTier, string> = {
191
+ 0: 'top',
192
+ 1: 'good',
193
+ 2: 'fair',
194
+ 3: 'raised',
195
+ 4: 'high',
196
+ };
197
+
198
+ function mapRating(currentSalesPrice?: number, predicted?: number): { rating: string; ratingLabel: string } {
199
+ const legacy = getPriceRating(currentSalesPrice as number, predicted as number); // 0..5
200
+ // 0 = noRating: keep neutral (tier 2) — never invent a flattering rating.
201
+ const tier: RatingTier = legacy === 0 ? 2 : LEGACY_TO_TIER[legacy] ?? 2;
202
+ return { rating: TIER_TONE[tier], ratingLabel: TIER_LABELS[tier] };
203
+ }
204
+
205
+ /** Is this car a plug-in hybrid? Determined by fuel type, mirroring ADV-88 in VehicleInfo.tsx. */
206
+ function isPluginHybrid(fuel: any): boolean {
207
+ return fuel === 'selector_fuel_hybridElectricalDiesel' || fuel === 'selector_fuel_hybridElectricalPetrol';
208
+ }
209
+
210
+ /** Build the gallery URL list from real images, falling back to main image, then placeholder. */
211
+ function buildGallery(storeCar: any, deps: ToAutobahnCarDeps): string[] {
212
+ const placeholder = deps.placeholder || PLACEHOLDER_IMAGE;
213
+ // Only 'small' and 'large' variants are pre-generated by image-generator; 'medium' has no cached file.
214
+ const size = deps.imageSize || 'small';
215
+
216
+ // 1) Real loaded images from imagesStore.images.get(id).
217
+ if (Array.isArray(deps.loadedImages) && deps.loadedImages.length) {
218
+ const urls = deps.loadedImages
219
+ .map((img) =>
220
+ size === 'large'
221
+ ? img.imageUrlLarge || img.imageUrlMedium || img.imageUrl
222
+ : size === 'small'
223
+ ? img.imageUrlSmall || img.imageUrlMedium || img.imageUrl
224
+ : img.imageUrlMedium || img.imageUrlLarge || img.imageUrl
225
+ )
226
+ .filter((u): u is string => !!u);
227
+ if (urls.length) return urls;
228
+ }
229
+
230
+ // 2) Not loaded yet, but we have a main image id + a URL builder → single real image.
231
+ const id = storeCar.id;
232
+ const mainImageId = storeCar.mainImageId;
233
+ const hasImages = num(storeCar.imagesCount);
234
+ if (deps.getImageUrl && id && mainImageId && hasImages) {
235
+ const url = deps.getImageUrl(id, mainImageId, size);
236
+ if (url) return [url];
237
+ }
238
+
239
+ // 3) Nothing real yet — single placeholder (never a fabricated photo).
240
+ return [placeholder];
241
+ }
242
+
243
+ /** Build the optional PHEV EnVKV sub-block when the car is a plug-in hybrid and weighted data exists. */
244
+ function buildPhev(storeCar: any, language?: string): AutobahnPhev | undefined {
245
+ const c = storeCar.consumption || {};
246
+ const e = storeCar.environmentEmissions || {};
247
+ if (!isPluginHybrid(c.fuel)) return undefined;
248
+
249
+ const consEl = num(c.wltpWeightedPowerCombined) ?? num(c.consumptionPowerCombined);
250
+ const consFuel = num(c.wltpWeightedCombined);
251
+ const consDis = num(c.wltpCombined) ?? num(c.consumptionCombined);
252
+ const co2w = num(e.wltpCo2) ?? num(e.co2);
253
+ const clsW = co2ClassLetter(e.wltpEnergyEfficiencyClass);
254
+ const clsD = co2ClassLetter(e.wltpDischargedEnergyEfficiencyClass);
255
+
256
+ // Only emit the dual PHEV line when we actually have the weighted figures the
257
+ // EcoLine PHEV branch needs; otherwise let the normal single line render.
258
+ if (consEl == null || consFuel == null || co2w == null) return undefined;
259
+
260
+ return {
261
+ consEl: `${consEl.toLocaleString(localeTag(language))} kWh/100 km`,
262
+ consFuel: `${consFuel.toLocaleString(localeTag(language))} l/100 km`,
263
+ consDis: consDis != null ? `${consDis.toLocaleString(localeTag(language))} l/100 km` : '–',
264
+ co2w: `${co2w.toLocaleString(localeTag(language))} g/km`,
265
+ co2classW: clsW || '–',
266
+ co2classD: clsD || clsW || '–',
267
+ };
268
+ }
269
+
270
+ // ---------------------------------------------------------------------------
271
+ // main mapper
272
+ // ---------------------------------------------------------------------------
273
+
274
+ /**
275
+ * Convert one fe-main store car → AutobahnCar.
276
+ *
277
+ * @param storeCar the object from SearchResultsStore.getCarsForPage()
278
+ * (shape = transformDataForVehicles output). `any` because the store car is
279
+ * itself untyped (`getCarsForPage: (page) => any[]`).
280
+ * @param deps injected services/locale (see ToAutobahnCarDeps). Optional so the
281
+ * mapper still runs in tests with zero wiring (gallery → placeholder, labels →
282
+ * built-in de fallback).
283
+ */
284
+ export function toAutobahnCar(storeCar: any, deps: ToAutobahnCarDeps = {}): AutobahnCar {
285
+ const language = deps.language || DEFAULT_LANG;
286
+ const t = deps.t;
287
+
288
+ const title = storeCar.title || {};
289
+ const info = storeCar.info || {};
290
+ const engineData = storeCar.engineData || {};
291
+ const consumption = storeCar.consumption || {};
292
+ const emissions = storeCar.environmentEmissions || {};
293
+ const price = storeCar.price || {};
294
+
295
+ // --- price / monthly (REQUIRED) ---
296
+ // monthly ← price.financing.monthlyInstallment. This is the financing rate
297
+ // produced by FinancingStore via getComputedFinancing(config).financing
298
+ // (getFinancing.ts:82 `monthlyInstallment`), spread into price.financing by
299
+ // transformDataForVehicles (DataTransformers.ts:345). It is the LEAD price.
300
+ const monthly = num(price?.financing?.monthlyInstallment) ?? 0;
301
+ // price ← price.currentSalesPrice (DataTransformers.ts:352).
302
+ const purchase = num(price?.currentSalesPrice) ?? 0;
303
+
304
+ // --- rating (REQUIRED-WHEN-PRICED) ← real Preisbewertung ---
305
+ // BL-08 (P1, MONEY): getPriceRating(0, 0) mathematically resolves to tier 5
306
+ // ("Top Preis" — the BEST possible rating). Its internal min/max bands are all
307
+ // `predicted * (1 ± pct)`, which collapse to 0 when predicted is 0, and the
308
+ // topPrice branch checks `currentSalesPrice <= min` — 0 <= 0 is true. A
309
+ // missing/broken price payload must NEVER get dressed up as the best deal on
310
+ // the lot. Only compute/emit a rating when there is a real, positive sales
311
+ // price; otherwise rating/ratingLabel stay '' (falsy) — every consumer
312
+ // (CarCard.tsx, cardParts.tsx, FinanceCalculator.tsx) already treats a falsy
313
+ // rating as "no badge", so no type change is needed here.
314
+ const predicted =
315
+ purchase > 0 ? getPredictablePrice(purchase, num(price?.mlCurrentSalesPricePredicted) as number) : undefined;
316
+ const { rating, ratingLabel } = purchase > 0 ? mapRating(purchase, predicted) : { rating: '', ratingLabel: '' };
317
+
318
+ // --- key specs ---
319
+ const powerKW = num(engineData.powerKW);
320
+ const powerPS = num(engineData.powerPS);
321
+ const power = getPowerLabel(powerKW as number, powerPS as number); // "150 kW (204 PS)"
322
+
323
+ const regTs = num(info.regDate);
324
+ const reg = regTs ? formatTimestamp({ timestamp: regTs, format: 'MM/YYYY' }) : '';
325
+
326
+ const ownersN = num(info.numberOfPreviousOwners);
327
+
328
+ // --- EnVKV consumption line (REQUIRED on every German car ad) ---
329
+ // Prefer WLTP figures when present (the legacy cards do too), else NEDC.
330
+ const consVal = num(consumption.wltpCombined) ?? num(consumption.consumptionCombined);
331
+ const co2Val = num(emissions.wltpCo2) ?? num(emissions.co2);
332
+ const cons = consVal != null ? `${consVal.toLocaleString(localeTag(language))} l/100 km` : '';
333
+ const co2 = co2Val != null ? `${co2Val.toLocaleString(localeTag(language))} g/km` : '';
334
+ const co2class = co2ClassLetter(emissions.wltpEnergyEfficiencyClass);
335
+ const phev = buildPhev(storeCar, language);
336
+
337
+ // --- media ---
338
+ const gallery = buildGallery(storeCar, deps);
339
+ const photos = num(storeCar.imagesCount) ?? 0;
340
+
341
+ // --- optional: leasing rate — ONLY when leasing is actually active for this car.
342
+ // SearchResultsStore.getCarsForPage stamps price.leasing.isActive via getLeasingActive
343
+ // (car age + mileage within the leasing limits). Legacy SRP shows "Leasing ---" when
344
+ // inactive; we mirror that by leaving `lease` undefined so PricePaths omits the row
345
+ // (instead of computing/showing a leasing rate the car isn't eligible for).
346
+ const leasingActive = !!(price && price.leasing && price.leasing.isActive);
347
+ const lease = leasingActive ? num(price?.leasing?.monthlyInstallment) : undefined;
348
+
349
+ // --- optional: list price / savings — ONLY from a real strike price ---
350
+ // transformDataForVehicles exposes oldMonthlyInstallment / highestPrice via
351
+ // the financing spread, and price.historyPriceDifference. There is NO reliable
352
+ // purchase-price strike on the search payload today, so we leave listPrice /
353
+ // savings UNDEFINED unless a real highestPrice strike exists above the sale
354
+ // price. See fieldMapping.ts — flagged for backend confirmation.
355
+ const isStrikeShown = !!price?.financing?.isStrikeShown;
356
+ const highest = num(price?.financing?.highestPrice) ?? num(price?.highestPrice);
357
+ let listPrice: number | undefined;
358
+ let savings: number | undefined;
359
+ if (isStrikeShown && highest != null && purchase > 0 && highest > purchase) {
360
+ listPrice = highest;
361
+ savings = highest - purchase;
362
+ }
363
+
364
+ // --- price drop (REAL) — mirrors the legacy SRL green "−X €" badge: show the reduction only
365
+ // when price.historyPriceDifference is a meaningful amount (≥ 500 €, the legacy threshold).
366
+ const histDrop = num(price?.historyPriceDifference);
367
+ const drop = histDrop != null && histDrop >= 500 ? histDrop : undefined;
368
+ // percent reduction (historyPriceDifferencePerCent) — paired with `drop` for the −X% badge.
369
+ const histPct = num(price?.historyPriceDifferencePerCent);
370
+ const dropPct = drop != null && histPct != null && histPct > 0 ? Math.round(histPct) : undefined;
371
+
372
+ // --- NEU badge (REAL) — the legacy showNewLabel flag carried on the store car. ---
373
+ const isNew = !!storeCar.showNewLabel;
374
+
375
+ // --- availability (REAL) — offer.availabilityMode. 'always' → immediately available. ---
376
+ const offer = storeCar.offer && typeof storeCar.offer === 'object' ? storeCar.offer : {};
377
+ const availability =
378
+ offer.availabilityMode === 'selector_availabilityMode_always'
379
+ ? t
380
+ ? t('autobahn:availability.immediately')
381
+ : 'Sofort verfügbar'
382
+ : undefined;
383
+ // 0 € Anzahlung available — transform sets offer.showDownPayment = (raw showDownPayment && zero first installment).
384
+ const zeroDown = !!offer.showDownPayment;
385
+
386
+ const carView: AutobahnCar = {
387
+ // identity / headline
388
+ make: String(title.make ?? ''),
389
+ model: String(title.model ?? ''),
390
+ trim: String(title.subModel ?? ''),
391
+
392
+ // key specs
393
+ km: num(info.mileage) ?? 0,
394
+ reg,
395
+ power,
396
+ fuel: cbd(consumption.fuel, t),
397
+ gear: cbd(info.gearbox, t),
398
+ owners: ownersN ?? 0,
399
+
400
+ // price
401
+ monthly,
402
+ price: purchase,
403
+
404
+ // media
405
+ gallery,
406
+ photos,
407
+
408
+ // EnVKV
409
+ cons,
410
+ co2,
411
+ co2class: co2class || '',
412
+ ...(phev ? { phev } : {}),
413
+
414
+ // trust / features — equipment highlight chips (Matrix-LED, Virtual Cockpit, AHK, ACC, …).
415
+ // transformDataForVehicles extracted the present highlight selector-keys via getActualHighlights
416
+ // (reading the raw equipment categories); translate them to labels here (cbd → t('cbd:<key>')).
417
+ // First 4, like the design's card. Empty when the car has no notable equipment.
418
+ features: (Array.isArray((storeCar as any).highlights) ? (storeCar as any).highlights : [])
419
+ .map((k: any) => cbd(k, t))
420
+ .filter((s: string) => !!s)
421
+ .slice(0, 4),
422
+ rating,
423
+ ratingLabel,
424
+
425
+ // optional (only when real)
426
+ ...(listPrice != null ? { listPrice } : {}),
427
+ ...(savings != null ? { savings } : {}),
428
+ ...(lease != null ? { lease } : {}),
429
+ ...(drop != null ? { drop } : {}),
430
+ ...(dropPct != null ? { dropPct } : {}),
431
+ ...(zeroDown ? { zeroDown } : {}),
432
+ ...(isNew ? { isNew } : {}),
433
+ ...(availability ? { availability } : {}),
434
+
435
+ // NEEDS-DATA: deliberately omitted (marketLow, marketAvg, marketHigh, watchers, views).
436
+ // The cards render 'Daten folgt' for these until a real backend exists.
437
+ };
438
+
439
+ return carView;
440
+ }
441
+
442
+ export default toAutobahnCar;
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import components from './IconSVGConfig';
3
+
4
+ type TIconSVG = {
5
+ [key: string]: any;
6
+ name: string;
7
+ customDimensions?: boolean;
8
+ };
9
+
10
+ const IconSVG: React.FC<TIconSVG> = ({ name, isWarrantyActive, customDimensions, ...props }: TIconSVG) => {
11
+ if (!name) return null;
12
+
13
+ const Component: any = components[name.toString()];
14
+ if (!Component) return null;
15
+
16
+ const style = customDimensions ? null : {
17
+ width: '1.5rem',
18
+ height: 'auto'
19
+ };
20
+
21
+ return (
22
+ <Component style={style} {...props} />
23
+ );
24
+ };
25
+
26
+ IconSVG.defaultProps = {
27
+ customDimensions: false
28
+ };
29
+
30
+ export default IconSVG;