@wayke-se/components-react 3.0.0-beta.11 → 3.0.0-beta.12

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 (274) hide show
  1. package/package.json +4 -2
  2. package/.editorconfig +0 -10
  3. package/.eslintrc.js +0 -62
  4. package/.github/workflows/release-to-production.yaml +0 -40
  5. package/.github/workflows/release-to-test.yaml +0 -40
  6. package/.prettierrc +0 -12
  7. package/assets/ajax-loader.gif +0 -0
  8. package/assets/default.css +0 -1
  9. package/assets/fonts/slick.eot +0 -0
  10. package/assets/fonts/slick.svg +0 -14
  11. package/assets/fonts/slick.ttf +0 -0
  12. package/assets/fonts/slick.woff +0 -0
  13. package/codegen.yml +0 -19
  14. package/esbuild/build.js +0 -39
  15. package/esbuild/common.js +0 -15
  16. package/esbuild/start.js +0 -21
  17. package/esbuild/www/index.html +0 -32
  18. package/example/src/@types/global.d.ts +0 -7
  19. package/example/src/@types/react-panellum.d.ts +0 -1
  20. package/example/src/App.tsx +0 -77
  21. package/example/src/assets/style/ecom.css +0 -63
  22. package/example/src/assets/style/theme.css +0 -83
  23. package/example/src/index.html +0 -26
  24. package/example/src/index.tsx +0 -11
  25. package/example/src/routes/HashRoute/index.tsx +0 -30
  26. package/example/src/routes/Home/index.tsx +0 -33
  27. package/example/src/routes/NotFound/index.tsx +0 -5
  28. package/example/src/routes/PathRoute/index.tsx +0 -35
  29. package/example/src/routes/Search/index.tsx +0 -28
  30. package/example/src/routes/SearchItem/index.tsx +0 -28
  31. package/example/src/routes/index.tsx +0 -25
  32. package/src/@types/action.ts +0 -3
  33. package/src/@types/codegen/types.ts +0 -366
  34. package/src/@types/filter.ts +0 -18
  35. package/src/@types/queryFilter.ts +0 -5
  36. package/src/@types/react-panellum.d.ts +0 -1
  37. package/src/@types/search.ts +0 -118
  38. package/src/@types/theme.d.ts +0 -5
  39. package/src/@types/vehicle-properties.ts +0 -33
  40. package/src/State/CentralStorage/CentralStorageContext.ts +0 -10
  41. package/src/State/CentralStorage/CentralStorageProvider.tsx +0 -21
  42. package/src/State/CentralStorage/useCentralStorage.ts +0 -37
  43. package/src/State/Path/PathContext.ts +0 -11
  44. package/src/State/Path/PathProvider.tsx +0 -66
  45. package/src/State/Path/reducer.ts +0 -30
  46. package/src/State/Path/usePath.ts +0 -13
  47. package/src/State/RelatedSearch/RelatedSearchContext.ts +0 -18
  48. package/src/State/RelatedSearch/RelatedSearchProvider.tsx +0 -55
  49. package/src/State/RelatedSearch/useRelatedSearch.ts +0 -20
  50. package/src/State/Search/SearchContext.ts +0 -27
  51. package/src/State/Search/SearchProvider.tsx +0 -243
  52. package/src/State/Search/useSearch.ts +0 -6
  53. package/src/State/Settings/SettingsContext.ts +0 -15
  54. package/src/State/Settings/SettingsProvider.tsx +0 -23
  55. package/src/State/Settings/useSettings.ts +0 -7
  56. package/src/components/Accordion/index.tsx +0 -57
  57. package/src/components/Accordion/wrapper.tsx +0 -107
  58. package/src/components/ActionList/index.tsx +0 -48
  59. package/src/components/ActionList/toggle-item.tsx +0 -59
  60. package/src/components/Avatar/index.tsx +0 -12
  61. package/src/components/Avatar/wrapper.tsx +0 -21
  62. package/src/components/Badge/index.tsx +0 -12
  63. package/src/components/Badge/wrapper.tsx +0 -32
  64. package/src/components/Blockquote/index.tsx +0 -32
  65. package/src/components/Blockquote/wrapper.tsx +0 -52
  66. package/src/components/Button/index.tsx +0 -226
  67. package/src/components/CheckMarkList/index.tsx +0 -21
  68. package/src/components/CheckMarkList/wrapper.tsx +0 -31
  69. package/src/components/Checklist/index.tsx +0 -51
  70. package/src/components/Checklist/wrapper.tsx +0 -65
  71. package/src/components/ColorSelect/index.tsx +0 -63
  72. package/src/components/ColorSelect/wrapper.tsx +0 -82
  73. package/src/components/ColumnRow/index.tsx +0 -20
  74. package/src/components/Container/index.tsx +0 -11
  75. package/src/components/Container/wrapper.tsx +0 -14
  76. package/src/components/Content/index.tsx +0 -15
  77. package/src/components/Content/wrapper.tsx +0 -61
  78. package/src/components/ContentLogo/index.tsx +0 -27
  79. package/src/components/DataList/index.tsx +0 -25
  80. package/src/components/DataList/wrapper.tsx +0 -29
  81. package/src/components/DetailBox/index.tsx +0 -34
  82. package/src/components/DetailBox/wrapper.tsx +0 -34
  83. package/src/components/ExtendContent/index.tsx +0 -43
  84. package/src/components/ExtendContent/wrapper.tsx +0 -41
  85. package/src/components/ExtendInfo/index.tsx +0 -32
  86. package/src/components/ExtendInfo/wrapper.tsx +0 -63
  87. package/src/components/Filter/index.tsx +0 -108
  88. package/src/components/Filter/wrapper.tsx +0 -79
  89. package/src/components/FilterPanel/checkListFacet.tsx +0 -46
  90. package/src/components/FilterPanel/colorFacet.tsx +0 -47
  91. package/src/components/FilterPanel/faceSelector.tsx +0 -53
  92. package/src/components/FilterPanel/index.tsx +0 -79
  93. package/src/components/FilterPanel/rangeFacet.tsx +0 -128
  94. package/src/components/FinancialOptions/LoanModal.tsx +0 -223
  95. package/src/components/FinancialOptions/index.tsx +0 -29
  96. package/src/components/FinancialOptions/leasing.tsx +0 -77
  97. package/src/components/FinancialOptions/loan.tsx +0 -87
  98. package/src/components/Gallery/MediaButton.tsx +0 -19
  99. package/src/components/Gallery/index.tsx +0 -227
  100. package/src/components/Gallery/wrapper.tsx +0 -323
  101. package/src/components/Grid/index.tsx +0 -87
  102. package/src/components/Grid/wrapper.tsx +0 -30
  103. package/src/components/Heading/index.tsx +0 -72
  104. package/src/components/Icon/index.tsx +0 -87
  105. package/src/components/InputCheckbox/index.tsx +0 -30
  106. package/src/components/InputCheckbox/wrapper.tsx +0 -87
  107. package/src/components/InputGroup/index.tsx +0 -24
  108. package/src/components/InputLabel/index.tsx +0 -14
  109. package/src/components/InputLabel/wrapper.tsx +0 -10
  110. package/src/components/InputSearch/index.tsx +0 -51
  111. package/src/components/InputSearch/wrapper.tsx +0 -97
  112. package/src/components/InputSelect/index.tsx +0 -35
  113. package/src/components/InputSelect/wrapper.tsx +0 -59
  114. package/src/components/InputText/index.tsx +0 -27
  115. package/src/components/InputText/wrapper.tsx +0 -57
  116. package/src/components/InsuranceOptions/Insurance.tsx +0 -60
  117. package/src/components/InsuranceOptions/InsuranceFree.tsx +0 -59
  118. package/src/components/InsuranceOptions/InsuranceFreeModal.tsx +0 -49
  119. package/src/components/InsuranceOptions/InsuranceModal.tsx +0 -253
  120. package/src/components/InsuranceOptions/index.tsx +0 -27
  121. package/src/components/Lightbox/index.tsx +0 -51
  122. package/src/components/Lightbox/wrapper.tsx +0 -97
  123. package/src/components/Loader/index.tsx +0 -18
  124. package/src/components/Loader/wrapper.tsx +0 -50
  125. package/src/components/LogoBox/index.tsx +0 -22
  126. package/src/components/LogoBox/wrapper.tsx +0 -19
  127. package/src/components/Map/index.tsx +0 -62
  128. package/src/components/Map/wrapper.tsx +0 -29
  129. package/src/components/Modal/index.tsx +0 -51
  130. package/src/components/Modal/wrapper.tsx +0 -127
  131. package/src/components/OpeningHours/index.tsx +0 -145
  132. package/src/components/OptionBox/index.tsx +0 -23
  133. package/src/components/OptionBox/wrapper.tsx +0 -56
  134. package/src/components/OverflowBox/index.tsx +0 -11
  135. package/src/components/OverflowBox/wrapper.tsx +0 -7
  136. package/src/components/OverflowGrid/index.tsx +0 -70
  137. package/src/components/Page/index.tsx +0 -46
  138. package/src/components/Panel/index.tsx +0 -50
  139. package/src/components/Panel/wrapper.tsx +0 -155
  140. package/src/components/Pdf/index.tsx +0 -46
  141. package/src/components/Pdf/wrapper.tsx +0 -61
  142. package/src/components/PhoneNumber/index.tsx +0 -33
  143. package/src/components/Portal/index.ts +0 -5
  144. package/src/components/Portal/portal-element.tsx +0 -9
  145. package/src/components/Portal/portal-namespace.ts +0 -1
  146. package/src/components/Portal/portal.tsx +0 -36
  147. package/src/components/Price/index.tsx +0 -12
  148. package/src/components/PriceTable/index.tsx +0 -34
  149. package/src/components/PriceTable/wrapper.tsx +0 -27
  150. package/src/components/ProductCard/index.tsx +0 -133
  151. package/src/components/ProductCard/wrapper.tsx +0 -147
  152. package/src/components/ProductPage/index.tsx +0 -99
  153. package/src/components/ProgressBar/index.tsx +0 -31
  154. package/src/components/ProgressBar/wrapper.tsx +0 -29
  155. package/src/components/RangeSlider/RangeSliderSimple.tsx +0 -90
  156. package/src/components/RangeSlider/SliderWithLabel.tsx +0 -62
  157. package/src/components/RangeSlider/handle.tsx +0 -26
  158. package/src/components/RangeSlider/index.tsx +0 -132
  159. package/src/components/RangeSlider/track.tsx +0 -19
  160. package/src/components/RangeSlider/wrapper.tsx +0 -93
  161. package/src/components/RangeSliderLabel/index.tsx +0 -18
  162. package/src/components/RangeSliderLabel/wrapper.tsx +0 -33
  163. package/src/components/Repeat/index.tsx +0 -21
  164. package/src/components/Result/index.tsx +0 -91
  165. package/src/components/Result/wrapper.tsx +0 -39
  166. package/src/components/Root/index.tsx +0 -24
  167. package/src/components/SearchBar/index.tsx +0 -48
  168. package/src/components/SearchFilter/index.tsx +0 -31
  169. package/src/components/SearchTerm/index.tsx +0 -23
  170. package/src/components/SearchTerm/wrapper.tsx +0 -71
  171. package/src/components/SectionHeader/index.tsx +0 -25
  172. package/src/components/SectionHeader/wrapper.tsx +0 -17
  173. package/src/components/Snackbar/index.tsx +0 -35
  174. package/src/components/Snackbar/wrapper.tsx +0 -65
  175. package/src/components/SortSelect/index.tsx +0 -35
  176. package/src/components/SortSelect/wrapper.tsx +0 -54
  177. package/src/components/Sphere/Sphere.tsx +0 -49
  178. package/src/components/Sphere/SphereLightbox.tsx +0 -10
  179. package/src/components/Sphere/SphereViewer.tsx +0 -81
  180. package/src/components/Sphere/wrapper.tsx +0 -253
  181. package/src/components/SrOnly/index.tsx +0 -14
  182. package/src/components/SwitchBar/index.tsx +0 -55
  183. package/src/components/SwitchBar/wrapper.tsx +0 -80
  184. package/src/components/TableColumn/index.tsx +0 -18
  185. package/src/components/TableList/index.tsx +0 -39
  186. package/src/components/Tabs/index.tsx +0 -34
  187. package/src/components/Tabs/wrapper.tsx +0 -82
  188. package/src/components/ThreeSixty/Rotation.tsx +0 -136
  189. package/src/components/ThreeSixty/ThreeSixtLightbox.tsx +0 -34
  190. package/src/components/ThreeSixty/ThreeSixty.tsx +0 -53
  191. package/src/components/UspList/index.tsx +0 -47
  192. package/src/components/UspList/wrapper.tsx +0 -92
  193. package/src/components/Utility/index.tsx +0 -17
  194. package/src/components/Video/CustomPlayer.tsx +0 -28
  195. package/src/components/Video/EmbeddedVideoLightbox.tsx +0 -31
  196. package/src/components/Video/EmbededVideo.tsx +0 -72
  197. package/src/components/Video/QuickNavEmbeded.tsx +0 -35
  198. package/src/components/Video/QuickNavVideo.tsx +0 -14
  199. package/src/components/Video/Video.tsx +0 -18
  200. package/src/components/Video/VimeoPlayer.tsx +0 -21
  201. package/src/components/Video/YoutubePlayer.tsx +0 -21
  202. package/src/components/Video/useThumbnail.ts +0 -28
  203. package/src/components/Video/utils.ts +0 -47
  204. package/src/components/Video/wrapper.tsx +0 -29
  205. package/src/hooks/useFetch.ts +0 -88
  206. package/src/hooks/useHasBeenVisible.ts +0 -17
  207. package/src/hooks/useHashGuid.ts +0 -33
  208. package/src/hooks/useInsurance.ts +0 -22
  209. package/src/hooks/useLoan.ts +0 -21
  210. package/src/hooks/useOnScreen.ts +0 -20
  211. package/src/hooks/useOutsideClick.ts +0 -19
  212. package/src/hooks/usePrevious.ts +0 -11
  213. package/src/hooks/useSearchItem.ts +0 -11
  214. package/src/hooks/useSearchItemBranch.ts +0 -14
  215. package/src/hooks/useSessionStorage.ts +0 -32
  216. package/src/hooks/useVimeoThumbnail.ts +0 -31
  217. package/src/images/map/marker.png +0 -0
  218. package/src/images/placeholders/staticmap.jpg +0 -0
  219. package/src/index-dev.tsx +0 -42
  220. package/src/index-esbuild.ts +0 -74
  221. package/src/index.ts +0 -72
  222. package/src/layout/helpers.tsx +0 -6
  223. package/src/layout/keyframes.tsx +0 -23
  224. package/src/layout/theme.ts +0 -60
  225. package/src/layouts/WaykeComposite.tsx +0 -64
  226. package/src/layouts/WaykeCompositeWithProvider.tsx +0 -17
  227. package/src/layouts/search/index.tsx +0 -124
  228. package/src/layouts/searchItem/Branch.tsx +0 -97
  229. package/src/layouts/searchItem/BranchModal.tsx +0 -67
  230. package/src/layouts/searchItem/CheckList.tsx +0 -146
  231. package/src/layouts/searchItem/ManufacturerPackagesOption.tsx +0 -54
  232. package/src/layouts/searchItem/MetadataItem.tsx +0 -74
  233. package/src/layouts/searchItem/PackageOptionModal.tsx +0 -54
  234. package/src/layouts/searchItem/PackageOptions.tsx +0 -58
  235. package/src/layouts/searchItem/Page404.tsx +0 -17
  236. package/src/layouts/searchItem/PageLoading.tsx +0 -17
  237. package/src/layouts/searchItem/Property.tsx +0 -134
  238. package/src/layouts/searchItem/Related.tsx +0 -120
  239. package/src/layouts/searchItem/index.tsx +0 -342
  240. package/src/providers/WaykeItemProvidet.tsx +0 -63
  241. package/src/providers/WaykeProvider.tsx +0 -75
  242. package/src/providers/graphqlProvider.tsx +0 -9
  243. package/src/providers/themeProvider.tsx +0 -15
  244. package/src/queries/INSURANCE_CALCULATION.ts +0 -43
  245. package/src/queries/LOAN_CALCULATION.ts +0 -39
  246. package/src/queries/SEARCH_ITEM_BRANCH_QUERY.ts +0 -120
  247. package/src/queries/SEARCH_ITEM_QUERY.ts +0 -237
  248. package/src/utils/constants.ts +0 -34
  249. package/src/utils/converters.ts +0 -45
  250. package/src/utils/deep-copy.ts +0 -6
  251. package/src/utils/formats.ts +0 -83
  252. package/src/utils/metadata.min.ts +0 -87
  253. package/src/utils/phonenumbers.ts +0 -17
  254. package/src/utils/pubsub/Actions.ts +0 -20
  255. package/src/utils/pubsub/Events.ts +0 -79
  256. package/src/utils/pubsub/pubsub.ts +0 -151
  257. package/src/utils/regex.ts +0 -13
  258. package/src/utils/sortOptions.ts +0 -36
  259. package/src/utils/specification.ts +0 -581
  260. package/src/utils/ssn.ts +0 -1
  261. package/src/utils/url.ts +0 -1
  262. package/src/utils/vehicle-properties/compare-basic-properties.ts +0 -63
  263. package/src/utils/vehicle-properties/compare-categories.ts +0 -45
  264. package/src/utils/vehicle-properties/compare-properties.ts +0 -5
  265. package/src/utils/vehicle-properties/custom-property-adder.ts +0 -163
  266. package/src/utils/vehicle-properties/property-hint-enricher.ts +0 -230
  267. package/src/utils/vehicle-properties/property-remover.ts +0 -28
  268. package/src/utils/vehicle-properties/property-tree-creator.ts +0 -171
  269. package/src/utils/vehicle-properties/property-tree-sorter.ts +0 -20
  270. package/tsconfig.build.json +0 -10
  271. package/tsconfig.eslint.json +0 -11
  272. package/tsconfig.json +0 -18
  273. package/webpack.analyze.js +0 -10
  274. package/webpack.config.js +0 -95
@@ -1,46 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Scalars } from '../../@types/codegen/types';
4
- import {
5
- PdfListItem,
6
- PdfSubtitle,
7
- PdfTitle,
8
- PdfContainer,
9
- PdfListInner,
10
- PdfLink,
11
- PdfColumn,
12
- } from './wrapper';
13
-
14
- interface PdfDownloadItemProps {
15
- document: Scalars['FileDocument'];
16
- }
17
-
18
- export const PdfDownloadItem = ({ document }: PdfDownloadItemProps) => (
19
- <PdfListItem>
20
- <PdfListInner>
21
- <PdfColumn>
22
- <PdfTitle>{document.name}</PdfTitle>
23
- <PdfSubtitle>{document.contentType}</PdfSubtitle>
24
- </PdfColumn>
25
- <PdfColumn>
26
- <PdfLink href={document.url} rel="noopener noreferrer nofollow" target="_blank">
27
- Öppna
28
- </PdfLink>
29
- </PdfColumn>
30
- </PdfListInner>
31
- </PdfListItem>
32
- );
33
-
34
- interface PdfDownloadContainerProps {
35
- documents: Scalars['FileDocument'][];
36
- }
37
-
38
- export const PdfDownloadContainer = ({ documents }: PdfDownloadContainerProps) => (
39
- <PdfContainer>
40
- {documents.map((document, i) => (
41
- <PdfDownloadItem key={`${document.url}-${i}`} document={document} />
42
- ))}
43
- </PdfContainer>
44
- );
45
-
46
- export default PdfDownloadContainer;
@@ -1,61 +0,0 @@
1
- import styled from 'styled-components';
2
- import { size } from '../../layout/helpers';
3
-
4
- export const PdfListItem = styled.li.attrs(() => ({
5
- className: 'wayke__theme wayke__color--primary-text',
6
- }))`
7
- flex: 0 0 50%;
8
- padding: ${size(1)};
9
-
10
- ${({ theme }) => theme.breakpoint.LtSm} {
11
- flex: 0 0 100%;
12
- }
13
- `;
14
-
15
- export const PdfContainer = styled.ul`
16
- list-style: none;
17
- padding: 0;
18
- display: flex;
19
- flex-wrap: wrap;
20
- margin: ${size(-1)};
21
- `;
22
-
23
- export const PdfLink = styled.a.attrs(() => ({
24
- className: 'wayke__theme wayke__color--primary-text wayke__font--bold',
25
- }))`
26
- text-decoration: none;
27
- font-size: 0.875rem;
28
- &:after {
29
- content: '';
30
- position: absolute;
31
- top: 0;
32
- left: 0;
33
- width: 100%;
34
- height: 100%;
35
- }
36
- `;
37
-
38
- export const PdfTitle = styled.div`
39
- color: ${(props) => props.theme.color.textDark};
40
- `;
41
- export const PdfSubtitle = styled.div`
42
- color: ${(props) => props.theme.color.textDarkLighten};
43
- `;
44
-
45
- export const PdfColumn = styled.div`
46
- flex 0 0 auto;
47
- &:first-child {
48
- flex: 1 1 auto;
49
- }
50
- `;
51
-
52
- export const PdfListInner = styled.div`
53
- position: relative;
54
- border: 1px solid ${(props) => props.theme.color.border};
55
- padding: ${size(1.5)};
56
- display: flex;
57
- align-items: center;
58
- :hover {
59
- background-color: ${(props) => props.theme.color.hoverOverlay};
60
- }
61
- `;
@@ -1,33 +0,0 @@
1
- import React, { useState, useCallback } from 'react';
2
-
3
- import { TableColumnRow, TableColumnCell } from '../TableColumn/index';
4
- import { ButtonContent, ButtonInlineBold } from '../Button/index';
5
-
6
- interface PhoneNumberProps {
7
- phoneNumber: string;
8
- }
9
-
10
- const PhoneNumber = ({ phoneNumber }: PhoneNumberProps) => {
11
- const [visible, setVisible] = useState(false);
12
-
13
- const onClick = useCallback(() => !visible && setVisible(true), [visible]);
14
-
15
- return (
16
- <TableColumnRow>
17
- <TableColumnCell>Telefonnummer</TableColumnCell>
18
- <TableColumnCell>
19
- {visible ? (
20
- <ButtonInlineBold as="a" href={`tel:${phoneNumber}`} title={`Ring ${phoneNumber}`}>
21
- <ButtonContent>{phoneNumber}</ButtonContent>
22
- </ButtonInlineBold>
23
- ) : (
24
- <ButtonInlineBold onClick={onClick} title="Visa telefonnummer">
25
- <ButtonContent>Visa telefonnummer</ButtonContent>
26
- </ButtonInlineBold>
27
- )}
28
- </TableColumnCell>
29
- </TableColumnRow>
30
- );
31
- };
32
-
33
- export default PhoneNumber;
@@ -1,5 +0,0 @@
1
- import * as PortalNamespace from './portal-namespace';
2
-
3
- export { default as PortalElement } from './portal-element';
4
- export { default as Portal } from './portal';
5
- export { PortalNamespace };
@@ -1,9 +0,0 @@
1
- import * as React from 'react';
2
-
3
- export interface IPortalElement {
4
- id: string;
5
- }
6
-
7
- const PortalElement = ({ id }: IPortalElement) => <div id={id} />;
8
-
9
- export default PortalElement;
@@ -1 +0,0 @@
1
- export const DefaultPortal = 'DEFAULT_PORTAL';
@@ -1,36 +0,0 @@
1
- import React from 'react';
2
- import ReactDOM from 'react-dom';
3
-
4
- export interface IPortal {
5
- id: string;
6
- children: React.ReactNode;
7
- }
8
-
9
- const Portal = ({ id, children }: IPortal) => {
10
- const el = React.useRef(document.getElementById(id) || document.createElement('div'));
11
- if (!el.current) {
12
- return null;
13
- }
14
-
15
- const { current } = el;
16
-
17
- const [dynamic] = React.useState(!current.parentElement);
18
-
19
- React.useEffect(() => {
20
- if (dynamic) {
21
- current.id = id;
22
- if (document.body) {
23
- document.body.appendChild(current);
24
- }
25
- }
26
- return () => {
27
- if (dynamic && current.parentElement) {
28
- current.parentElement.removeChild(current);
29
- }
30
- };
31
- }, [id]);
32
-
33
- return ReactDOM.createPortal(children, current);
34
- };
35
-
36
- export default React.memo<IPortal>(Portal);
@@ -1,12 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- export const Price = styled.div.attrs(() => ({
4
- className: 'wayke__theme wayke__color--primary-text wayke__font--bold',
5
- }))`
6
- font-size: 1.375rem;
7
- `;
8
-
9
- export const OldPrice = styled.div`
10
- color: ${(props) => props.theme.color.textDarkLighten};
11
- text-decoration: line-through;
12
- `;
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
-
3
- import { List, Item, Value, Label } from './wrapper';
4
- import { VisualHeading } from '../Heading/index';
5
- import { Price, OldPrice } from '../Price/index';
6
- import { numberSeparator } from '../../utils/formats';
7
-
8
- interface PriceTableProps {
9
- price: number;
10
- oldPrice?: number;
11
- }
12
-
13
- const PriceTable = ({ price, oldPrice }: PriceTableProps) => (
14
- <List>
15
- <Item>
16
- <Label>
17
- <VisualHeading>Pris</VisualHeading>
18
- </Label>
19
- <Value>
20
- <Price>{numberSeparator(price)} kr</Price>
21
- </Value>
22
- </Item>
23
- {oldPrice !== undefined && (
24
- <Item>
25
- <Label />
26
- <Value>
27
- <OldPrice>{numberSeparator(oldPrice)} kr</OldPrice>
28
- </Value>
29
- </Item>
30
- )}
31
- </List>
32
- );
33
-
34
- export default PriceTable;
@@ -1,27 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
-
5
- export const List = styled.ul`
6
- list-style: none;
7
- padding: 0;
8
- margin: 0;
9
- `;
10
-
11
- export const Item = styled.li`
12
- display: flex;
13
- align-items: flex-end;
14
- line-height: 1;
15
-
16
- & + & {
17
- margin-top: ${size(0.5)};
18
- }
19
- `;
20
-
21
- export const Label = styled.div`
22
- flex: 1 1 auto;
23
- `;
24
-
25
- export const Value = styled.div`
26
- flex-shrink: 0;
27
- `;
@@ -1,133 +0,0 @@
1
- import React, { useCallback, useMemo } from 'react';
2
- import LazyLoad from 'react-lazyload';
3
-
4
- import {
5
- Wrapper,
6
- Image,
7
- Picture,
8
- Source,
9
- Img,
10
- Content,
11
- ContentBody,
12
- ContentFooter,
13
- Heading,
14
- Link,
15
- Description,
16
- Usp,
17
- Price,
18
- CurrentPrice,
19
- OldPrice,
20
- PriceCell,
21
- Label,
22
- } from './wrapper';
23
- import UspList, { ItemProps } from '../UspList/index';
24
- import { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';
25
- import usePath from '../../State/Path/usePath';
26
-
27
- interface Props {
28
- id: string;
29
- title: string;
30
- href?: string;
31
- image?: string;
32
- pathRoute?: string;
33
- placeholderImage?: string;
34
- description?: string;
35
- uspList?: ItemProps[];
36
- price: string;
37
- leasingPrice?: string;
38
- oldPrice?: string;
39
- onClick?: (id: string) => void;
40
- }
41
-
42
- const ProductCard = ({
43
- id,
44
- title,
45
- href,
46
- image,
47
- pathRoute,
48
- placeholderImage,
49
- description,
50
- uspList,
51
- price,
52
- oldPrice,
53
- leasingPrice,
54
- onClick,
55
- }: Props) => {
56
- const { pushState } = usePath();
57
- const _onClick = useMemo(() => (onClick ? () => onClick(id) : undefined), [id]);
58
-
59
- const onHrefClick = useCallback(
60
- (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
61
- if (!!pathRoute && href) {
62
- e.preventDefault();
63
- pushState(href);
64
- }
65
- },
66
- [id, pathRoute, href]
67
- );
68
-
69
- return (
70
- <Wrapper onClick={_onClick}>
71
- <Image>
72
- <LazyLoad>
73
- {image ? (
74
- <>
75
- <Picture>
76
- <Source
77
- type="image/webp"
78
- srcSet={`${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`}
79
- sizes="(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)"
80
- />
81
- <Img
82
- srcSet={`${image}?spec=822x548 822w, ${image}?spec=750x500 750w, ${image}?spec=411x274 411w`}
83
- sizes="(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)"
84
- src={`${image}?spec=411x274`}
85
- alt={title}
86
- />
87
- </Picture>
88
- </>
89
- ) : (
90
- <Picture>
91
- <Img src={placeholderImage || DEFAULT_PLACEHOLDER_IMAGE} />
92
- </Picture>
93
- )}
94
- </LazyLoad>
95
- </Image>
96
- <Content>
97
- <ContentBody>
98
- <Heading>
99
- {href ? (
100
- <Link onClick={onHrefClick} href={href} title={title} aria-label={title}>
101
- {title}
102
- </Link>
103
- ) : (
104
- title
105
- )}
106
- </Heading>
107
- {description && <Description>{description}</Description>}
108
- {uspList && (
109
- <Usp>
110
- <UspList small items={uspList} />
111
- </Usp>
112
- )}
113
- </ContentBody>
114
- <ContentFooter>
115
- <Price>
116
- <PriceCell>
117
- {oldPrice ? <OldPrice>{oldPrice}</OldPrice> : <Label>Pris</Label>}
118
- <CurrentPrice>{price}</CurrentPrice>
119
- </PriceCell>
120
- {leasingPrice && (
121
- <PriceCell>
122
- <Label>Leasingpris</Label>
123
- <CurrentPrice>{leasingPrice}</CurrentPrice>
124
- </PriceCell>
125
- )}
126
- </Price>
127
- </ContentFooter>
128
- </Content>
129
- </Wrapper>
130
- );
131
- };
132
-
133
- export default ProductCard;
@@ -1,147 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
-
5
- export const Wrapper = styled.article`
6
- position: relative;
7
- height: 100%;
8
- display: flex;
9
- flex-direction: column;
10
- transform-origin: 50% 50%;
11
- transition: transform 150ms ease;
12
-
13
- :active {
14
- transform: scale(0.98);
15
- }
16
- `;
17
-
18
- export const Image = styled.div`
19
- flex-shrink: 0;
20
- position: relative;
21
- height: 0;
22
- padding-bottom: 66.666%;
23
- background-color: ${(props) => props.theme.color.accentDark};
24
- border-radius: 3px;
25
-
26
- :before {
27
- content: '';
28
- position: absolute;
29
- top: 0;
30
- left: 0;
31
- width: 100%;
32
- height: 100%;
33
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
34
- border-radius: 3px;
35
- opacity: 0;
36
- transition: opacity 200ms ease;
37
- }
38
-
39
- ${Wrapper}:hover & {
40
- :before {
41
- opacity: 1;
42
- }
43
- }
44
- `;
45
-
46
- export const Picture = styled.picture``;
47
-
48
- export const Source = styled.source``;
49
-
50
- export const Img = styled.img`
51
- position: absolute;
52
- width: 100%;
53
- height: 100%;
54
- object-fit: cover;
55
- top: auto;
56
- left: auto;
57
- border-radius: 3px;
58
- `;
59
-
60
- export const Content = styled.div`
61
- flex: 1 1 auto;
62
- display: flex;
63
- flex-direction: column;
64
- margin-top: ${size(2)};
65
- `;
66
-
67
- export const ContentBody = styled.div``;
68
-
69
- export const ContentFooter = styled.div`
70
- margin-top: auto;
71
- padding-top: ${size(1)};
72
- `;
73
-
74
- export const Heading = styled.h1.attrs(() => ({
75
- className: 'wayke__theme wayke__font--bold',
76
- }))`
77
- display: -webkit-box;
78
- -webkit-line-clamp: 2;
79
- -webkit-box-orient: vertical;
80
- overflow: hidden;
81
- font-weight: 400;
82
- margin: 0;
83
- font-size: 1rem;
84
- `;
85
-
86
- export const Link = styled.a`
87
- display: block;
88
- color: inherit;
89
- text-decoration: none;
90
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
91
-
92
- :before {
93
- content: '';
94
- position: absolute;
95
- top: 0;
96
- left: 0;
97
- width: 100%;
98
- height: 100%;
99
- }
100
-
101
- :focus {
102
- text-decoration: underline;
103
- }
104
- `;
105
-
106
- export const Description = styled.div`
107
- font-size: 0.875rem;
108
- display: -webkit-box;
109
- -webkit-line-clamp: 3;
110
- -webkit-box-orient: vertical;
111
- overflow: hidden;
112
- margin-top: ${size(0.25)};
113
- `;
114
-
115
- export const Usp = styled.div`
116
- margin-top: ${size(1)};
117
- `;
118
-
119
- export const Price = styled.div`
120
- display: flex;
121
- align-items: center;
122
- flex-wrap: wrap;
123
- width: 100%;
124
- `;
125
-
126
- export const CurrentPrice = styled.div.attrs(() => ({
127
- className: 'wayke__theme wayke__color--primary-text wayke__font--bold',
128
- }))`
129
- font-size: 1rem;
130
- margin-right: ${size(1)};
131
- `;
132
-
133
- export const PriceCell = styled.div`
134
- flex: 1 1 auto;
135
- padding-right: ${size(1)};
136
- `;
137
-
138
- export const OldPrice = styled.div`
139
- text-decoration: line-through;
140
- color: ${(props) => props.theme.color.textDarkLighten};
141
- font-size: 0.875rem;
142
- `;
143
-
144
- export const Label = styled.label`
145
- color: ${(props) => props.theme.color.disabledText};
146
- font-size: 0.875rem;
147
- `;
@@ -1,99 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
- import { Wrapper as Container } from '../Container/wrapper';
5
-
6
- export const ProductPage = styled.div`
7
- display: flex;
8
- flex-direction: column;
9
-
10
- ${(props) => props.theme.breakpoint.Md} {
11
- flex-direction: row;
12
- }
13
- `;
14
-
15
- export const ProductPageAside = styled.div`
16
- ${(props) => props.theme.breakpoint.LtMd} {
17
- display: contents;
18
- }
19
-
20
- ${(props) => props.theme.breakpoint.Md} {
21
- flex-shrink: 0;
22
- width: calc(375px + ${size(2)});
23
- padding-right: ${size(2)};
24
- }
25
- `;
26
-
27
- export const ProductPageMain = styled.div`
28
- ${(props) => props.theme.breakpoint.LtMd} {
29
- display: contents;
30
- }
31
-
32
- ${(props) => props.theme.breakpoint.Md} {
33
- flex: 1 1 100%;
34
- min-width: 0;
35
- padding-left: ${size(2)};
36
- }
37
- `;
38
-
39
- type ProductPageAsideSectionProps = React.DetailedHTMLProps<
40
- React.HTMLAttributes<HTMLDivElement>,
41
- HTMLDivElement
42
- > & {
43
- mobileOrder?: number;
44
- };
45
-
46
- export const ProductPageAsideSection = styled.div<ProductPageAsideSectionProps>`
47
- ${(props) => props.theme.breakpoint.LtMd} {
48
- order: ${(props) => props.mobileOrder};
49
-
50
- & + & {
51
- margin-top: ${size(2)};
52
- }
53
-
54
- :last-child {
55
- margin-bottom: ${size(4)};
56
- }
57
-
58
- ${ProductPageMain} & {
59
- margin-top: ${size(2)};
60
- }
61
- }
62
-
63
- ${(props) => props.theme.breakpoint.Md} {
64
- & + & {
65
- margin-top: ${size(4)};
66
- }
67
-
68
- ${ProductPageMain} & {
69
- margin-bottom: ${size(8)};
70
- }
71
- }
72
- `;
73
-
74
- export const ProductPageMainSection = styled.div`
75
- ${(props) => props.theme.breakpoint.LtMd} {
76
- order: 99;
77
- padding: ${size(4)} 0;
78
- border-top: ${size(1)} solid ${(props) => props.theme.color.accent};
79
-
80
- ${Container} & {
81
- margin-left: ${size(-2)};
82
- margin-right: ${size(-2)};
83
- padding-left: ${size(2)};
84
- padding-right: ${size(2)};
85
- }
86
- }
87
-
88
- ${(props) => props.theme.breakpoint.Md} {
89
- & + & {
90
- margin-top: ${size(8)};
91
- padding-top: ${size(8)};
92
- border-top: 1px solid ${(props) => props.theme.color.border};
93
- }
94
- }
95
- `;
96
-
97
- export const ProductPageContentLimit = styled.div`
98
- max-width: 420px;
99
- `;
@@ -1,31 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Wrapper, Description, Bar, BarActive } from './wrapper';
4
-
5
- interface Props {
6
- unit: string;
7
- valueCurrent: number;
8
- valueMax: number;
9
- }
10
-
11
- const ProgressBar = ({ unit, valueCurrent, valueMax }: Props) => {
12
- const barWidth = (valueCurrent / valueMax) * 100;
13
-
14
- return (
15
- <Wrapper>
16
- <Description>
17
- Visar {valueCurrent.toString()} av {valueMax.toString()} {unit}
18
- </Description>
19
- <Bar>
20
- <BarActive
21
- style={{ width: `${barWidth}%` }}
22
- aria-valuenow={valueCurrent}
23
- aria-valuemin={0}
24
- aria-valuemax={valueMax}
25
- />
26
- </Bar>
27
- </Wrapper>
28
- );
29
- };
30
-
31
- export default ProgressBar;