@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,79 @@
1
+ // Autobahn (auto.de redesign) — md3 checkbox bound to a mobx-react-form field.
2
+ //
3
+ // Drop-in visual replacement for the legacy fe-ui-core `FormCheckbox` / `CheckboxMaterial`
4
+ // (DealerEmployeeSetPage AccessRights role flags, EmailPermissionBlock T&C/permission box with
5
+ // the 'boolean'/'accepted' rule, SettingsPage data-usage, etc.). Same data contract — only the
6
+ // markup is re-skinned to the `.mcheck` md3 box + check icon. Renders correctly only inside a
7
+ // `<div className="md3">` subtree (scoped theme).
8
+ //
9
+ // BINDING (must match the legacy signature EXACTLY or validation/submit breaks):
10
+ // mobx-react-form fields expose `field.checked` (boolean) and `field.onChange`, which is a
11
+ // NATIVE change-event handler — it reads `event.target.checked` itself and updates field.checked.
12
+ // So we bind `checked={!!field.checked}` and forward the raw native event straight to
13
+ // `field.onChange` — no wrapping, no boolean coercion, no `(event, checked, value)` re-call.
14
+ // This is the same contract the sibling Switch primitive uses, and the same one the legacy
15
+ // fe-ui-core Checkbox got via `field.bind()` (it forwarded the event onward and the field
16
+ // handler ignored the extra args). Validation rules ('required' / 'boolean' / 'accepted') then
17
+ // surface through field.hasError + field.error, shown inline — identical to the legacy FormCheckbox.
18
+ //
19
+ // observer-wrapped so it re-renders when field.checked / field.error change. Beyond the injected
20
+ // field it is pure/presentational.
21
+
22
+ import * as React from 'react';
23
+ import { observer } from 'mobx-react';
24
+
25
+ import Icon from './Icon';
26
+
27
+ export interface FormCheckboxProps {
28
+ /** mobx-react-form field (DealerProfileForm.$('emailPermission'), EmplDataForm.$('isDadmin'), …). Typed any — the lib ships no TS types. */
29
+ field: any;
30
+ /** i18n translate — used ONLY to resolve field.label when no `label`/`children` is supplied (mirrors the legacy CheckboxMaterial). Callers that already translate pass the result as `label`. */
31
+ t?: (key: string, options?: object) => string;
32
+ /** label as plain text OR pre-built JSX (e.g. a translated string, or a <Trans> with links). */
33
+ label?: React.ReactNode;
34
+ /** rich label content (T&C/permission text with links). Takes precedence over `label`. */
35
+ children?: React.ReactNode;
36
+ /** override the field's own disabled flag. */
37
+ disabled?: boolean;
38
+ id?: string;
39
+ }
40
+
41
+ const FormCheckbox: React.FunctionComponent<FormCheckboxProps> = observer(
42
+ ({ field, t, label, children, disabled, id }) => {
43
+ const isChecked = !!field.checked;
44
+ const isDisabled = disabled != null ? disabled : !!field.disabled;
45
+ const hasError = !!field.hasError && !!field.error;
46
+
47
+ // children (rich) > explicit label > translated field.label (legacy CheckboxMaterial behaviour).
48
+ // We do NOT re-translate a passed `label`: callers (AccessRights, EmailPermissionBlock) already
49
+ // pass an already-translated string or a <Trans> element, so re-running t() would risk a miss.
50
+ let content: React.ReactNode = null;
51
+ if (children != null) content = children;
52
+ else if (label != null) content = label;
53
+ else if (field.label) content = t ? t(field.label) : field.label;
54
+
55
+ return (
56
+ <div className={'mcheck-group' + (hasError ? ' mcheck-group--error' : '')}>
57
+ <label className={'mcheck' + (isDisabled ? ' mcheck--disabled' : '')}>
58
+ <input
59
+ id={id}
60
+ type="checkbox"
61
+ className="mcheck-input"
62
+ checked={isChecked}
63
+ disabled={isDisabled}
64
+ aria-checked={isChecked}
65
+ aria-invalid={hasError || undefined}
66
+ onChange={field.onChange}
67
+ />
68
+ <span className="mcheck-box" aria-hidden="true">
69
+ {isChecked ? <Icon name="check" size={16} stroke={3} cls="mcheck-tick" /> : null}
70
+ </span>
71
+ {content != null ? <span className="mcheck-label">{content}</span> : null}
72
+ </label>
73
+ {hasError ? <span className="mcheck-error-text">{field.error}</span> : null}
74
+ </div>
75
+ );
76
+ },
77
+ );
78
+
79
+ export default FormCheckbox;
@@ -0,0 +1,327 @@
1
+ // Autobahn (auto.de redesign) — mobx-react-form-bound dropdown adapter.
2
+ //
3
+ // A drop-in md3 replacement for the legacy fe-ui-core FormDropDown
4
+ // (components/ui/FormDropDown/FormDropDown.tsx). It is the #1 form dependency
5
+ // (11+ pages, 60+ vehicle-form selects: BasicData/EngineData/Chassis/…,
6
+ // Settings gender/title, …). The visual control is the md3 `Dropdown`
7
+ // (single-select) reused as-is; multi-select is implemented here on the same
8
+ // `mselect-*` classes as a checklist with selected chips on the trigger.
9
+ //
10
+ // THE DATA CONTRACT MIRRORS THE LEGACY EXACTLY so validation/output/submit are
11
+ // unchanged — only the markup is re-skinned:
12
+ //
13
+ // • single (default): field.value is the option OBJECT `{value,label}` (legacy
14
+ // `getValue`). We read `field.value.value` and commit
15
+ // `field.onChange({value,label}, field.name)`; clear -> `onChange('', name)`.
16
+ // • isObj: field.value IS the source option object (e.g. a GENDERS item
17
+ // `{value:number,label}`). On change we resolve the matching object out of
18
+ // `field.extra` and `onChange(obj, field.name)` (legacy parity — form.output
19
+ // keeps the object).
20
+ // • isMulti: field.value is a primitive array; the menu is a checklist; the
21
+ // trigger shows the selected labels as chips; `onChange(values, field.name)`.
22
+ //
23
+ // Option shapes in `field.extra` are normalized: primitive lists (['2','3',…]),
24
+ // `{value,label}` and `{key,value}`. Label resolution mirrors the legacy
25
+ // getOptions(): with a namespace, 'cbd' -> t('cbd:'+opt), else a labelled option
26
+ // -> t(namespace+':'+label), else t(opt). When `isApiTranslated`, `field.extra`
27
+ // already carries translated labels, so they are used verbatim.
28
+ //
29
+ // observer-wrapped (re-renders on value/error). Renders correctly only inside a
30
+ // `.md3` subtree.
31
+
32
+ import * as React from 'react';
33
+ import { observer } from 'mobx-react';
34
+
35
+ import Icon from './Icon';
36
+ import Dropdown, { DropdownOption } from './Dropdown';
37
+
38
+ export interface FormDropdownProps {
39
+ /** mobx-react-form field (form.$('basicDataForm.mainData_make') etc.). Untyped — the lib ships no TS types. */
40
+ field: any;
41
+ /** i18n translate — resolves option labels and the field's placeholder/label key. */
42
+ t: (key: string, options?: object) => string;
43
+ /** translation namespace for option labels (e.g. 'common', 'cbd', 'mainData'). */
44
+ namespace?: string;
45
+ /** field.value is the source option OBJECT, not a scalar (GENDERS/TITLES item). */
46
+ isObj?: boolean;
47
+ /** option labels in field.extra are already translated (came from a request). */
48
+ isApiTranslated?: boolean;
49
+ /** multiple selection — value is a primitive array, rendered as chips + checklist. */
50
+ isMulti?: boolean;
51
+ /** hide the clear ("×") affordance on a single select. */
52
+ disableClearable?: boolean;
53
+ /** suppress the built-in label (when an outer wrapper — e.g. FormFieldDropDown — owns the label). */
54
+ hideLabel?: boolean;
55
+ /** accepted for legacy-surface parity (the md3 control never free-types). */
56
+ freeSolo?: boolean;
57
+ disabled?: boolean;
58
+ /** layout passthrough (e.g. grid-area), mirrors legacy `style`. */
59
+ style?: React.CSSProperties;
60
+ /** extra class on the wrapper (legacy `className`). */
61
+ className?: string;
62
+ }
63
+
64
+ /** Raw option as it can appear in field.extra. */
65
+ type RawOption =
66
+ | string
67
+ | number
68
+ | { value: any; label?: any; key?: any; isDisabled?: boolean; isSeries?: boolean };
69
+
70
+ /** Normalize one raw option to a stable { value, label, disabled } shape (label not yet translated). */
71
+ function normalizeOption(opt: RawOption): { value: string; rawLabel: any; disabled: boolean } {
72
+ if (opt !== null && typeof opt === 'object') {
73
+ // {value,label} | {key,value} | {value,...}
74
+ const hasKey = 'key' in opt && !('label' in opt);
75
+ const value = hasKey ? (opt as any).key : (opt as any).value;
76
+ const rawLabel = hasKey
77
+ ? (opt as any).value
78
+ : 'label' in opt && (opt as any).label != null
79
+ ? (opt as any).label
80
+ : (opt as any).value;
81
+ const disabled = !!((opt as any).isDisabled || (opt as any).isSeries);
82
+ return { value: String(value), rawLabel, disabled };
83
+ }
84
+ // primitive
85
+ return { value: String(opt), rawLabel: opt, disabled: false };
86
+ }
87
+
88
+ const FormDropdown: React.FunctionComponent<FormDropdownProps> = observer(
89
+ ({ field, t, namespace, isObj, isApiTranslated, isMulti, disableClearable, freeSolo, disabled, style, className, hideLabel }) => {
90
+ // ---- label resolution (legacy getOptions parity) -------------------------------------------
91
+ const labelFor = React.useCallback(
92
+ (rawLabel: any): string => {
93
+ const s = rawLabel == null ? '' : String(rawLabel);
94
+ if (isApiTranslated) return s; // already translated in field.extra
95
+ if (namespace) {
96
+ if (namespace === 'cbd') return t(`cbd:${s}`);
97
+ // a "labelled" option translates under the namespace; a bare primitive translates as-is.
98
+ return t(s) === s ? t(`${namespace}:${s}`) : t(s);
99
+ }
100
+ return t(s);
101
+ },
102
+ [t, namespace, isApiTranslated],
103
+ );
104
+
105
+ // ---- options (memoized off field.extra) -----------------------------------------------------
106
+ const raw: RawOption[] = Array.isArray(field.extra) ? field.extra : [];
107
+ const options: DropdownOption[] = React.useMemo(
108
+ () =>
109
+ raw.map((o) => {
110
+ const n = normalizeOption(o);
111
+ return { value: n.value, label: labelFor(n.rawLabel), disabled: n.disabled };
112
+ }),
113
+ // field.extra identity changes when the form `.set('extra', …)` runs (make->models).
114
+ [raw, labelFor],
115
+ );
116
+
117
+ const hasError = !!field.hasError && !!field.error;
118
+ const label = field.placeholder ? t(field.placeholder) : field.label ? t(field.label) : '';
119
+ const isDisabled = !!field.disabled || !!disabled;
120
+
121
+ // =========================================================================================
122
+ // MULTI — primitive array value, checklist menu, chips on the trigger.
123
+ // =========================================================================================
124
+ if (isMulti) {
125
+ return (
126
+ <MultiDropdown
127
+ field={field}
128
+ options={options}
129
+ label={hideLabel ? '' : label}
130
+ hasError={hasError}
131
+ disabled={isDisabled}
132
+ ariaLabel={label}
133
+ style={style}
134
+ className={className}
135
+ />
136
+ );
137
+ }
138
+
139
+ // =========================================================================================
140
+ // SINGLE — value is {value,label} (default) or the source object (isObj).
141
+ // =========================================================================================
142
+ // current scalar value to highlight in the menu (legacy reads value.value ?? value).
143
+ const rawValue = field.value;
144
+ const currentValue =
145
+ rawValue && typeof rawValue === 'object'
146
+ ? String(rawValue.value != null ? rawValue.value : '')
147
+ : rawValue != null
148
+ ? String(rawValue)
149
+ : '';
150
+
151
+ const commit = (next: string) => {
152
+ if (next === '') {
153
+ // clear (only reachable when !disableClearable).
154
+ field.onChange(isObj ? null : '', field.name);
155
+ return;
156
+ }
157
+ if (isObj) {
158
+ // resolve the SOURCE option object out of field.extra (matched by value/key) so
159
+ // form.output keeps receiving the object (GENDERS/TITLES parity).
160
+ const match = raw.find((o) => {
161
+ const n = normalizeOption(o);
162
+ return n.value === next;
163
+ });
164
+ field.onChange(match != null ? match : null, field.name);
165
+ } else {
166
+ // legacy getValue(): commit the {value,label} pair.
167
+ const chosen = options.find((o) => o.value === next);
168
+ field.onChange({ value: next, label: chosen ? chosen.label : next }, field.name);
169
+ }
170
+ };
171
+
172
+ // a clear option is prepended (mirrors MaterialAutocomplete's clear) unless disabled.
173
+ const menuOptions: DropdownOption[] =
174
+ disableClearable || !currentValue ? options : [{ value: '', label: '—' }, ...options];
175
+
176
+ return (
177
+ <div className={'mfd' + (className ? ' ' + className : '')} style={style}>
178
+ {label && !hideLabel ? <label className="md-label-sm mfield-label mfd-label">{label}</label> : null}
179
+ <Dropdown
180
+ value={currentValue}
181
+ options={menuOptions}
182
+ onChange={commit}
183
+ placeholder={label || '—'}
184
+ ariaLabel={label}
185
+ disabled={isDisabled}
186
+ className={hasError ? 'mfd-invalid' : undefined}
187
+ />
188
+ {hasError ? <span className="mfield-error-text mfd-error">{field.error}</span> : null}
189
+ </div>
190
+ );
191
+ },
192
+ );
193
+
194
+ // ---------------------------------------------------------------------------------------------
195
+ // Multi-select — built on the same mselect-* classes as the base Dropdown, with a checklist
196
+ // menu and chips on the trigger. Value is a primitive string[] (legacy MaterialSelect parity:
197
+ // onChange(values, field.name); field.output keeps Array.isArray(values) ? values : null).
198
+ // ---------------------------------------------------------------------------------------------
199
+ interface MultiProps {
200
+ field: any;
201
+ options: DropdownOption[];
202
+ label: string;
203
+ hasError: boolean;
204
+ disabled: boolean;
205
+ ariaLabel: string;
206
+ style?: React.CSSProperties;
207
+ className?: string;
208
+ }
209
+
210
+ const MultiDropdown: React.FunctionComponent<MultiProps> = observer(
211
+ ({ field, options, label, hasError, disabled, ariaLabel, style, className }) => {
212
+ const [open, setOpen] = React.useState(false);
213
+ const rootRef = React.useRef<HTMLDivElement | null>(null);
214
+ const btnRef = React.useRef<HTMLButtonElement | null>(null);
215
+
216
+ const selected: string[] = Array.isArray(field.value) ? field.value.map(String) : [];
217
+
218
+ // click-away (guarded for SSR), matching the base Dropdown.
219
+ React.useEffect(() => {
220
+ if (!open || typeof document === 'undefined') return undefined;
221
+ const onDocMouseDown = (e: MouseEvent) => {
222
+ if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);
223
+ };
224
+ document.addEventListener('mousedown', onDocMouseDown);
225
+ return () => document.removeEventListener('mousedown', onDocMouseDown);
226
+ }, [open]);
227
+
228
+ const toggle = (value: string) => {
229
+ if (disabled) return;
230
+ const next = selected.indexOf(value) > -1 ? selected.filter((v) => v !== value) : [...selected, value];
231
+ field.onChange(next, field.name);
232
+ };
233
+
234
+ const removeChip = (e: React.MouseEvent, value: string) => {
235
+ e.stopPropagation();
236
+ if (disabled) return;
237
+ field.onChange(selected.filter((v) => v !== value), field.name);
238
+ };
239
+
240
+ const onTriggerKeyDown = (e: React.KeyboardEvent) => {
241
+ if (disabled) return;
242
+ if (e.key === 'Escape') {
243
+ setOpen(false);
244
+ if (btnRef.current) btnRef.current.focus();
245
+ } else if (e.key === 'Tab') {
246
+ setOpen(false);
247
+ } else if (!open && (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ')) {
248
+ e.preventDefault();
249
+ setOpen(true);
250
+ }
251
+ };
252
+
253
+ const labelOf = (value: string) => {
254
+ const o = options.find((opt) => opt.value === value);
255
+ return o ? o.label : value;
256
+ };
257
+
258
+ return (
259
+ <div className={'mfd' + (className ? ' ' + className : '')} style={style}>
260
+ {label ? <label className="md-label-sm mfield-label mfd-label">{label}</label> : null}
261
+ <div className="mselect mselect--block mfd-multi" ref={rootRef}>
262
+ <button
263
+ ref={btnRef}
264
+ type="button"
265
+ className={'mselect-btn mfd-multi-btn' + (hasError ? ' mfd-invalid' : '')}
266
+ aria-haspopup="listbox"
267
+ aria-expanded={open}
268
+ aria-label={ariaLabel}
269
+ disabled={disabled}
270
+ onClick={() => setOpen((o) => !o)}
271
+ onKeyDown={onTriggerKeyDown}
272
+ >
273
+ {selected.length ? (
274
+ <span className="mfd-chips">
275
+ {selected.map((v) => (
276
+ <span className="mfd-chip" key={v}>
277
+ <span className="mfd-chip-label">{labelOf(v)}</span>
278
+ <span
279
+ className="mfd-chip-x"
280
+ role="button"
281
+ tabIndex={-1}
282
+ aria-label="remove"
283
+ onMouseDown={(e) => e.preventDefault()}
284
+ onClick={(e) => removeChip(e, v)}
285
+ >
286
+ <Icon name="x" size={13} />
287
+ </span>
288
+ </span>
289
+ ))}
290
+ </span>
291
+ ) : (
292
+ <span className="mselect-label mselect-label--ph">{label || '—'}</span>
293
+ )}
294
+ <Icon name="chevron-down" cls="mselect-chev" />
295
+ </button>
296
+ {open && (
297
+ <ul className="mselect-menu mfd-multi-menu" role="listbox" aria-multiselectable="true" tabIndex={-1}>
298
+ {options.map((opt, i) => {
299
+ const checked = selected.indexOf(opt.value) > -1;
300
+ return (
301
+ <li key={`${opt.value}_${i}`} role="presentation">
302
+ <button
303
+ type="button"
304
+ role="option"
305
+ aria-selected={checked}
306
+ disabled={opt.disabled}
307
+ className={'mselect-opt mfd-multi-opt' + (checked ? ' is-checked' : '')}
308
+ onClick={() => toggle(opt.value)}
309
+ >
310
+ <span className={'mfd-check' + (checked ? ' mfd-check--on' : '')}>
311
+ {checked ? <Icon name="check" size={14} /> : null}
312
+ </span>
313
+ <span className="mselect-opt-label">{opt.label}</span>
314
+ </button>
315
+ </li>
316
+ );
317
+ })}
318
+ </ul>
319
+ )}
320
+ </div>
321
+ {hasError ? <span className="mfield-error-text mfd-error">{field.error}</span> : null}
322
+ </div>
323
+ );
324
+ },
325
+ );
326
+
327
+ export default FormDropdown;
@@ -0,0 +1,88 @@
1
+ // Autobahn (auto.de redesign) — md3 form field bound to a mobx-react-form field.
2
+ //
3
+ // The Wave-0 form-kit input: a labelled, outlined MD3 text field that binds directly to a
4
+ // mobx-react-form field via field.bind() — the SAME field objects the legacy FormInput used
5
+ // (LoginForm.$('email'), RegisterForm.$('password'), …). So every existing validation rule,
6
+ // onChange/onBlur, submit hook and error works unchanged; only the markup is re-skinned.
7
+ //
8
+ // Observer-wrapped so it re-renders on field value/error changes. Renders correctly only inside
9
+ // a `.md3` subtree (scoped theme). Pure/presentational beyond the injected field.
10
+
11
+ import * as React from 'react';
12
+ import { observer } from 'mobx-react';
13
+
14
+ import Icon from './Icon';
15
+
16
+ export interface FormFieldProps {
17
+ /** mobx-react-form field (LoginForm.$('email') etc.). Typed any — the lib ships no TS types. */
18
+ field: any;
19
+ /** i18n translate (AuthRegisterPage ns) — resolves the field's placeholder/label key. */
20
+ t: (key: string, options?: object) => string;
21
+ /** override the field's own type (e.g. force 'password'). */
22
+ type?: string;
23
+ id?: string;
24
+ autoComplete?: 'on' | 'off';
25
+ disabled?: boolean;
26
+ onKeyPress?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
27
+ /** suppress the built-in label (for layouts that supply their own external label next to the field). */
28
+ hideLabel?: boolean;
29
+ /** opt-in: show a green check + green border when the field is filled and valid (checkout). */
30
+ showValid?: boolean;
31
+ }
32
+
33
+ const FormField: React.FunctionComponent<FormFieldProps> = observer(
34
+ ({ field, t, type, id, autoComplete, disabled, onKeyPress, hideLabel, showValid }) => {
35
+ const [reveal, setReveal] = React.useState<boolean>(false);
36
+ // Auto-generate a stable id (React 18 useId) when the caller doesn't pass one, so the
37
+ // <label htmlFor> below is ALWAYS wired to a real input id — ~30 call sites (incl. the
38
+ // checkout money-path) never pass `id` and previously rendered an unassociated label.
39
+ // useId() is called unconditionally (rules-of-hooks) even when `id` is supplied; the
40
+ // generated value is simply discarded in that case (`id ||` wins), so it never appears
41
+ // for `id`-bearing fields.
42
+ const generatedId = React.useId();
43
+ const inputId = id || generatedId;
44
+ const bound = field.bind();
45
+ const fieldType: string = type || field.type || 'text';
46
+ const isPassword = fieldType === 'password';
47
+ const inputType = isPassword && reveal ? 'text' : fieldType;
48
+ const hasError = !!field.hasError && !!field.error;
49
+ const isValid = !!showValid && !disabled && !isPassword && !hasError && !!field.value;
50
+ // Visible label (a11y). Prefer the translated placeholder key (Auth forms), else translate the
51
+ // field's label key (Checkout forms use i18n keys as `label`). t() returns the input unchanged
52
+ // when there's no translation (Auth labels are plain strings), so this is safe for both.
53
+ const label = field.placeholder ? t(field.placeholder) : field.label ? t(field.label) : '';
54
+
55
+ return (
56
+ <div className="mfield-group">
57
+ {label && !hideLabel ? <label className="md-label-sm mfield-label" htmlFor={inputId}>{label}</label> : null}
58
+ <div className={'mfield' + (hasError ? ' mfield--error' : '') + (disabled ? ' mfield--disabled' : '') + (isValid ? ' mfield--valid' : '')}>
59
+ <input
60
+ {...bound}
61
+ id={inputId}
62
+ type={inputType}
63
+ autoComplete={autoComplete}
64
+ disabled={disabled}
65
+ placeholder=""
66
+ onKeyPress={onKeyPress}
67
+ style={{ width: '100%' }}
68
+ />
69
+ {isPassword ? (
70
+ <button
71
+ type="button"
72
+ className="mfield-eye"
73
+ tabIndex={-1}
74
+ aria-label={t('autobahn:auth.togglePassword')}
75
+ onClick={() => setReveal((r) => !r)}
76
+ >
77
+ <Icon name={reveal ? 'eye-off' : 'eye'} size={18} />
78
+ </button>
79
+ ) : null}
80
+ {isValid ? <span className="mfield-ok"><Icon name="check" size={18} /></span> : null}
81
+ </div>
82
+ {hasError ? <span className="mfield-error-text">{field.error}</span> : null}
83
+ </div>
84
+ );
85
+ },
86
+ );
87
+
88
+ export default FormField;
@@ -0,0 +1,93 @@
1
+ // Autobahn (auto.de redesign) — md3 selectable radio wrapper.
2
+ //
3
+ // The leaf of the md3 radio pair (used with FormRadioGroup). It is a SELECTABLE WRAPPER around
4
+ // ARBITRARY children, re-skinning the legacy fe-ui-core radio child (a `CheckboxMaterial radio`
5
+ // or `_common/Radio`) used across 5 pages — including the RICH custom-label radios in
6
+ // VehicleEdit/VehicleAdd: exterior/interior color swatches, Feinstaub emission stickers,
7
+ // interior-material icons, energy-efficiency bars, and DAT-model spec grids. Text-only is just
8
+ // the simple case; the mandatory case is arbitrary children, so a radio can contain any markup.
9
+ //
10
+ // LEGACY SIGNATURE (replicated so a structure-preserving re-skin is a drop-in):
11
+ // In the legacy tree the group (`fe-ui-core` RadioGroup / our FormMaterialRadioGroup → MUI
12
+ // RadioGroup) CLONES each child injecting `checked` (computed from `child.value === group.value`)
13
+ // plus an `onChange`. The child carries the option key in `value` and renders its visual via
14
+ // `content` / `icon` / `label`. Here the SAME shape is preserved: `value` is the option key,
15
+ // the children are the visual, and FormRadioGroup injects `checked` + `onSelect` (and the shared
16
+ // `name` / `disabled` / `error`) by cloning. The child fires `onSelect(value)` on activation —
17
+ // the group is what talks to the mobx field, never the leaf.
18
+ //
19
+ // A native hidden `<input type="radio">` is kept (as the legacy `_common/Radio` did) so the control
20
+ // is real radio semantics for a11y + forms; the visible chrome is the md3 `.mradio` surface with a
21
+ // selected ring/outline driven by `checked`. Pure/presentational. Renders correctly only inside a
22
+ // `<div className="md3">` subtree (scoped theme).
23
+
24
+ import * as React from 'react';
25
+
26
+ export interface FormRadioProps {
27
+ /** the option key this radio represents (compared against the group's field.value). */
28
+ value: any;
29
+ /** arbitrary visual: plain text, a color swatch, an emission-sticker <img>, an icon, a spec grid… */
30
+ children?: React.ReactNode;
31
+ disabled?: boolean;
32
+ /** accessible label when `children` is non-text (swatch/icon/img) and needs a name. */
33
+ ariaLabel?: string;
34
+ /** extra class(es) on the wrapper (layout hooks from the caller). */
35
+ className?: string;
36
+ /** inline style on the wrapper `<label>` (layout hooks the caller cannot express as a class,
37
+ * e.g. a full-width stacked DAT-model row). Optional; merged onto the `.mradio` surface. */
38
+ style?: React.CSSProperties;
39
+
40
+ // ---- injected by FormRadioGroup via React.cloneElement (do not pass by hand) ----
41
+ /** true when this radio's `value` is the group's selected value. */
42
+ checked?: boolean;
43
+ /** group callback — fires with this radio's `value` on activation. */
44
+ onSelect?: (value: any) => void;
45
+ /** shared radio-group name (so the native inputs form one exclusive group). */
46
+ name?: string;
47
+ /** mirrors the group's error state (red ring), matching the legacy `error` clone prop. */
48
+ error?: boolean;
49
+ }
50
+
51
+ const FormRadio: React.FunctionComponent<FormRadioProps> = ({
52
+ value,
53
+ children,
54
+ disabled = false,
55
+ ariaLabel,
56
+ className,
57
+ style,
58
+ checked = false,
59
+ onSelect,
60
+ name,
61
+ error = false,
62
+ }) => {
63
+ const handleChange = () => {
64
+ if (disabled) return;
65
+ if (onSelect) onSelect(value);
66
+ };
67
+
68
+ const cls =
69
+ 'mradio' +
70
+ (checked ? ' mradio--on' : '') +
71
+ (disabled ? ' mradio--disabled' : '') +
72
+ (error && !checked ? ' mradio--error' : '') +
73
+ (className ? ` ${className}` : '');
74
+
75
+ return (
76
+ <label className={cls} style={style}>
77
+ {/* Real radio input (hidden) — keeps native exclusive-group + keyboard + a11y semantics. */}
78
+ <input
79
+ type="radio"
80
+ className="mradio-input"
81
+ name={name}
82
+ value={value}
83
+ checked={checked}
84
+ disabled={disabled}
85
+ aria-label={ariaLabel}
86
+ onChange={handleChange}
87
+ />
88
+ <span className="mradio-body">{children}</span>
89
+ </label>
90
+ );
91
+ };
92
+
93
+ export default FormRadio;