hemfixarna-web-components 1.8.2 → 1.8.4

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 (139) hide show
  1. package/dist/cjs/hemfixarna-address_15.cjs.entry.js +7 -7
  2. package/dist/cjs/hemfixarna-address_15.cjs.entry.js.map +1 -1
  3. package/dist/cjs/hemfixarna-byggmax.cjs.entry.js +2 -2
  4. package/dist/cjs/hemfixarna-category.cjs.entry.js +2 -2
  5. package/dist/cjs/hemfixarna-components.cjs.js +2 -2
  6. package/dist/cjs/hemfixarna-components.cjs.js.map +1 -1
  7. package/dist/cjs/hemfixarna-doro.cjs.entry.js +2 -2
  8. package/dist/cjs/hemfixarna-elfa.cjs.entry.js +2 -2
  9. package/dist/cjs/hemfixarna-fargvaruhuset.cjs.entry.js +2 -2
  10. package/dist/cjs/hemfixarna-flyttsmart.cjs.entry.js +2 -2
  11. package/dist/cjs/hemfixarna-forebygg.cjs.entry.js +2 -2
  12. package/dist/cjs/hemfixarna-hornbach.cjs.entry.js +2 -2
  13. package/dist/cjs/hemfixarna-kbygg.cjs.entry.js +2 -2
  14. package/dist/cjs/hemfixarna-klint.cjs.entry.js +2 -2
  15. package/dist/cjs/hemfixarna-kund.cjs.entry.js +2 -2
  16. package/dist/cjs/hemfixarna-norrgavel.cjs.entry.js +2 -2
  17. package/dist/cjs/hemfixarna-power.cjs.entry.js +2 -2
  18. package/dist/cjs/hemfixarna-service.cjs.entry.js +2 -2
  19. package/dist/cjs/hemfixarna-skanska.cjs.entry.js +2 -2
  20. package/dist/cjs/hemfixarna-sparfonster.cjs.entry.js +2 -2
  21. package/dist/cjs/hemfixarna-string-furniture.cjs.entry.js +2 -2
  22. package/dist/cjs/hemfixarna-superfront.cjs.entry.js +2 -2
  23. package/dist/cjs/hemfixarna-tesla.cjs.entry.js +2 -2
  24. package/dist/cjs/hemfixarna-traningspartner.cjs.entry.js +2 -2
  25. package/dist/cjs/hemfixarna-zaptec.cjs.entry.js +2 -2
  26. package/dist/cjs/{index-6af772cf.js → index-3e8dcb29.js} +2 -2
  27. package/dist/cjs/{index-6af772cf.js.map → index-3e8dcb29.js.map} +1 -1
  28. package/dist/cjs/{index-b83343b9.js → index-e6926623.js} +74 -20
  29. package/dist/cjs/index-e6926623.js.map +1 -0
  30. package/dist/cjs/{index-739bf321.js → index-e81df82e.js} +6 -1
  31. package/dist/cjs/index-e81df82e.js.map +1 -0
  32. package/dist/cjs/loader.cjs.js +2 -2
  33. package/dist/cjs/loader.cjs.js.map +1 -1
  34. package/dist/collection/collection-manifest.json +2 -2
  35. package/dist/collection/types/index.js +5 -0
  36. package/dist/collection/types/index.js.map +1 -1
  37. package/dist/esm/hemfixarna-address_15.entry.js +7 -7
  38. package/dist/esm/hemfixarna-address_15.entry.js.map +1 -1
  39. package/dist/esm/hemfixarna-byggmax.entry.js +2 -2
  40. package/dist/esm/hemfixarna-category.entry.js +2 -2
  41. package/dist/esm/hemfixarna-components.js +3 -3
  42. package/dist/esm/hemfixarna-components.js.map +1 -1
  43. package/dist/esm/hemfixarna-doro.entry.js +2 -2
  44. package/dist/esm/hemfixarna-elfa.entry.js +2 -2
  45. package/dist/esm/hemfixarna-fargvaruhuset.entry.js +2 -2
  46. package/dist/esm/hemfixarna-flyttsmart.entry.js +2 -2
  47. package/dist/esm/hemfixarna-forebygg.entry.js +2 -2
  48. package/dist/esm/hemfixarna-hornbach.entry.js +2 -2
  49. package/dist/esm/hemfixarna-kbygg.entry.js +2 -2
  50. package/dist/esm/hemfixarna-klint.entry.js +2 -2
  51. package/dist/esm/hemfixarna-kund.entry.js +2 -2
  52. package/dist/esm/hemfixarna-norrgavel.entry.js +2 -2
  53. package/dist/esm/hemfixarna-power.entry.js +2 -2
  54. package/dist/esm/hemfixarna-service.entry.js +2 -2
  55. package/dist/esm/hemfixarna-skanska.entry.js +2 -2
  56. package/dist/esm/hemfixarna-sparfonster.entry.js +2 -2
  57. package/dist/esm/hemfixarna-string-furniture.entry.js +2 -2
  58. package/dist/esm/hemfixarna-superfront.entry.js +2 -2
  59. package/dist/esm/hemfixarna-tesla.entry.js +2 -2
  60. package/dist/esm/hemfixarna-traningspartner.entry.js +2 -2
  61. package/dist/esm/hemfixarna-zaptec.entry.js +2 -2
  62. package/dist/esm/{index-8282f88e.js → index-aa51ad9d.js} +2 -2
  63. package/dist/esm/{index-8282f88e.js.map → index-aa51ad9d.js.map} +1 -1
  64. package/dist/esm/{index-c8aebf0d.js → index-c8ce6f4b.js} +6 -1
  65. package/dist/esm/index-c8ce6f4b.js.map +1 -0
  66. package/dist/esm/{index-04bcf90e.js → index-ea1d222e.js} +74 -20
  67. package/dist/esm/index-ea1d222e.js.map +1 -0
  68. package/dist/esm/loader.js +3 -3
  69. package/dist/esm/loader.js.map +1 -1
  70. package/dist/hemfixarna-components/hemfixarna-components.esm.js +1 -1
  71. package/dist/hemfixarna-components/hemfixarna-components.esm.js.map +1 -1
  72. package/dist/hemfixarna-components/{p-24b53f91.entry.js → p-0106398c.entry.js} +2 -2
  73. package/dist/hemfixarna-components/p-2171ef72.entry.js +2 -0
  74. package/dist/hemfixarna-components/{p-facaf951.entry.js → p-21f904c4.entry.js} +2 -2
  75. package/dist/hemfixarna-components/{p-d6af83de.entry.js → p-30539ae5.entry.js} +2 -2
  76. package/dist/hemfixarna-components/p-3064ec85.entry.js +2 -0
  77. package/dist/hemfixarna-components/p-31254a9b.entry.js +2 -0
  78. package/dist/hemfixarna-components/{p-d297cb30.js → p-5cc10f3e.js} +2 -2
  79. package/dist/hemfixarna-components/p-5cc10f3e.js.map +1 -0
  80. package/dist/hemfixarna-components/p-5f8e1f23.entry.js +2 -0
  81. package/dist/hemfixarna-components/{p-49c372d6.entry.js → p-62fdb014.entry.js} +2 -2
  82. package/dist/hemfixarna-components/{p-b397b966.js → p-642db21e.js} +2 -2
  83. package/dist/hemfixarna-components/p-695b4ab5.entry.js +2 -0
  84. package/dist/hemfixarna-components/p-695b4ab5.entry.js.map +1 -0
  85. package/dist/hemfixarna-components/{p-f6de66c8.entry.js → p-6f9913cb.entry.js} +2 -2
  86. package/dist/hemfixarna-components/p-80044bef.entry.js +2 -0
  87. package/dist/hemfixarna-components/{p-a09f4a5d.entry.js → p-9defa3dc.entry.js} +2 -2
  88. package/dist/hemfixarna-components/{p-8cc96dd9.entry.js → p-a66f910f.entry.js} +2 -2
  89. package/dist/hemfixarna-components/{p-075a13b6.entry.js → p-b904e94f.entry.js} +2 -2
  90. package/dist/hemfixarna-components/p-c707b937.js +3 -0
  91. package/dist/hemfixarna-components/p-c707b937.js.map +1 -0
  92. package/dist/hemfixarna-components/{p-eaa3e1c0.entry.js → p-cc0920f6.entry.js} +2 -2
  93. package/dist/hemfixarna-components/{p-d013eeee.entry.js → p-d2135574.entry.js} +2 -2
  94. package/dist/hemfixarna-components/{p-6c0e0f95.entry.js → p-d31b9a6e.entry.js} +2 -2
  95. package/dist/hemfixarna-components/{p-9b409902.entry.js → p-d452b6c8.entry.js} +2 -2
  96. package/dist/hemfixarna-components/{p-0aa722e7.entry.js → p-d522ece7.entry.js} +2 -2
  97. package/dist/hemfixarna-components/p-dcf4f921.entry.js +2 -0
  98. package/dist/hemfixarna-components/{p-e8800c3b.entry.js → p-e2cd711c.entry.js} +2 -2
  99. package/dist/hemfixarna-components/{p-ee6d1a35.entry.js → p-ff1548ae.entry.js} +2 -2
  100. package/dist/types/stencil-public-runtime.d.ts +3 -0
  101. package/dist/types/types/index.d.ts +6 -1
  102. package/package.json +1 -1
  103. package/dist/cjs/index-739bf321.js.map +0 -1
  104. package/dist/cjs/index-b83343b9.js.map +0 -1
  105. package/dist/esm/index-04bcf90e.js.map +0 -1
  106. package/dist/esm/index-c8aebf0d.js.map +0 -1
  107. package/dist/hemfixarna-components/p-1cbfbf5a.entry.js +0 -2
  108. package/dist/hemfixarna-components/p-1cbfbf5a.entry.js.map +0 -1
  109. package/dist/hemfixarna-components/p-226a06bb.entry.js +0 -2
  110. package/dist/hemfixarna-components/p-32a8152b.js +0 -3
  111. package/dist/hemfixarna-components/p-32a8152b.js.map +0 -1
  112. package/dist/hemfixarna-components/p-506c766c.entry.js +0 -2
  113. package/dist/hemfixarna-components/p-53edf50e.entry.js +0 -2
  114. package/dist/hemfixarna-components/p-66515865.entry.js +0 -2
  115. package/dist/hemfixarna-components/p-bf515028.entry.js +0 -2
  116. package/dist/hemfixarna-components/p-d281e9e3.entry.js +0 -2
  117. package/dist/hemfixarna-components/p-d297cb30.js.map +0 -1
  118. /package/dist/hemfixarna-components/{p-24b53f91.entry.js.map → p-0106398c.entry.js.map} +0 -0
  119. /package/dist/hemfixarna-components/{p-bf515028.entry.js.map → p-2171ef72.entry.js.map} +0 -0
  120. /package/dist/hemfixarna-components/{p-facaf951.entry.js.map → p-21f904c4.entry.js.map} +0 -0
  121. /package/dist/hemfixarna-components/{p-d6af83de.entry.js.map → p-30539ae5.entry.js.map} +0 -0
  122. /package/dist/hemfixarna-components/{p-66515865.entry.js.map → p-3064ec85.entry.js.map} +0 -0
  123. /package/dist/hemfixarna-components/{p-53edf50e.entry.js.map → p-31254a9b.entry.js.map} +0 -0
  124. /package/dist/hemfixarna-components/{p-d281e9e3.entry.js.map → p-5f8e1f23.entry.js.map} +0 -0
  125. /package/dist/hemfixarna-components/{p-49c372d6.entry.js.map → p-62fdb014.entry.js.map} +0 -0
  126. /package/dist/hemfixarna-components/{p-b397b966.js.map → p-642db21e.js.map} +0 -0
  127. /package/dist/hemfixarna-components/{p-f6de66c8.entry.js.map → p-6f9913cb.entry.js.map} +0 -0
  128. /package/dist/hemfixarna-components/{p-506c766c.entry.js.map → p-80044bef.entry.js.map} +0 -0
  129. /package/dist/hemfixarna-components/{p-a09f4a5d.entry.js.map → p-9defa3dc.entry.js.map} +0 -0
  130. /package/dist/hemfixarna-components/{p-8cc96dd9.entry.js.map → p-a66f910f.entry.js.map} +0 -0
  131. /package/dist/hemfixarna-components/{p-075a13b6.entry.js.map → p-b904e94f.entry.js.map} +0 -0
  132. /package/dist/hemfixarna-components/{p-eaa3e1c0.entry.js.map → p-cc0920f6.entry.js.map} +0 -0
  133. /package/dist/hemfixarna-components/{p-d013eeee.entry.js.map → p-d2135574.entry.js.map} +0 -0
  134. /package/dist/hemfixarna-components/{p-6c0e0f95.entry.js.map → p-d31b9a6e.entry.js.map} +0 -0
  135. /package/dist/hemfixarna-components/{p-9b409902.entry.js.map → p-d452b6c8.entry.js.map} +0 -0
  136. /package/dist/hemfixarna-components/{p-0aa722e7.entry.js.map → p-d522ece7.entry.js.map} +0 -0
  137. /package/dist/hemfixarna-components/{p-226a06bb.entry.js.map → p-dcf4f921.entry.js.map} +0 -0
  138. /package/dist/hemfixarna-components/{p-e8800c3b.entry.js.map → p-e2cd711c.entry.js.map} +0 -0
  139. /package/dist/hemfixarna-components/{p-ee6d1a35.entry.js.map → p-ff1548ae.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["hideField","field","split","reduce","acc","curr","length","slice","repeat","scrollToTop","el","scrollTo","top","behavior","HemfixarnaAddress","this","handleSubmit","e","preventDefault","streetValid","street","streetError","zipValid","zip","zipIsNumber","test","zipError","townValid","town","townError","state","user","Object","assign","checkoutStep","checkoutEdit","closest","handleChangeStreet","target","value","handleChangeZip","handleChangeTown","render","h","class","onSubmit","onInput","type","name","htmlFor","componentWillLoad","getRutPrice","price","Math","ceil","getRotPrice","getGreenPrice","getProductPrice","product","amount","rot","rut","green","getProductPriceWithRotAndRut","getPartPrice","part","groupCartItemsByStartFee","cart","groups","item","startFeeID","_a","start_fee_obj","ID","push","calculateStartFee","uniqueStartFees","Set","totalRut","totalRot","totalGreen","totalDefault","forEach","startFee","has","add","appliedDiscounts","default","filter","Boolean","getItemPrice","partsPrice","parts","calculateRot","totalWithRot","some","totalWithoutRot","startFeeApplied","calculateGreenDiscount","totalWithGreen","totalWithoutGreen","calculateRut","totalWithRut","totalWithoutRut","getTotalPrice","isProduct","category","post_name","undefined","isBusiness","partner","values","Business","includes","HemfixarnaBox","setTaxonomy","taxonomy","selectedCategory","step","post_type","selectedService","selectedProduct","setProduct","selectedCustomerCategory","Fragment","onClick","height","src","icon","alt","title","invoice","post","postTitle","HemfixarnaBreadcrumbs","triggerScrollTotop","nextSibling","getCartLength","handleCartClick","handleHomePageClick","parentCategory","setTimeout","maleri","logo","getAssetPath","close","back","width","closeModal","customer","post_title","HemfixarnaCart","livePreviewUrl","getDefaultApiUrl","window","location","href","getApiUrl","process","env","API_URL","getDefaultCreditSafeApiUrl","getCreditSafeApiUrl","CREDIT_SAFE_API_URL","base","async","fetchWithType","request","options","response","fetch","body","json","getCustomer","slug","res","error","console","log","loginCustomer","id","password","method","JSON","stringify","headers","status","getOptions","getRut","data","getRot","getGreenDiscount","postOrder","postPerson","felixOrder","HemfixarnaCheckout","handleChangeDate","dateError","date","handleChangeTerms","generalError","sendOrder","loading","startFees","map","_b","_c","order","firstName","creditSafeUser","lastName","ssn","email","phone","url","business","string","products","String","quantity","start_fee_id","flat","start_fees","creditSafe","id_source","source","fieldData","So01_Name","id_sub_source","selectedSubSource","seller_id","sellerID","referral_id","RefferalID","_d","scriptResult","felixStatus","orderConfirm","validDate","checkBoxes","Array","from","querySelectorAll","notValidTerms","find","i","checked","selectSource","sub_sources","dateLogo","down","min","Date","toISOString","onChange","disabled","selected","sub","innerHTML","terms","terms_checkout","hemfixarnaCss","HemfixarnaComponent","shadowRoot","querySelector","WidgetStyle","standard","loadCategoryOrProduct","proppedProduct","startsWith","categories","c","sub_categories","replace","show_products","p","fields","parseInt","sessionStorage","getItem","parse","greenDiscount","Promise","all","code","warn","rotOptions","rutOptions","greenOptions","localStorage","openModal","modal","showModal","handleClick","composedPath","classList","contains","infomodal","isClickInside","loginSourceError","passwordInput","showSourcePasswordPrompt","pensel","monteringLogo","widgetStyle","alternative_2","alternative_3","widget_title","_f","_e","_g","_h","alternative","style","color","_j","buttonColor","_k","backgroundColor","_l","buttonBg","_m","text","handleLogin","placeholder","HemfixarnaInfo","vertical","viewBox","fill","d","xmlns","hemfixarnaDemoCss","MyComponent","debounce","cdnLink","debouncedFunction","clearTimeout","checkColorAccessibility","defaultTextColor","defaultBgColor","firstColor","secondColor","mode","colors","Error","colorAccessibility","getColor","rating","pathname","kund","password_protected","loggedIn","getExample","selectedSlug","selectedID","copyExample","navigator","clipboard","writeText","tooltipText","copyCdn","copyNpmInstall","showMaleri","allCategories","add_painting","shadowHost","document","loginError","setItem","copy","at_hemfixarna","key","small","bold","large","contrast","display","justifyContent","maxWidth","margin","sc","flexDirection","gap","padding","border","borderRadius","gridColumn","textAlign","fontSize","fontWeight","PersonnummerError","constructor","super","compareAsc","dateLeft","dateRight","diff","getTime","diffInYears","sign","yearDiff","abs","getFullYear","setFullYear","isLastYearNotFull","result","luhn","str","sum","l","v","testDate","year","month","day","getMonth","getDate","Personnummer","pin","_century","_fullYear","_year","_month","_day","_sep","_num","_check","allowCoordinationNumber","allowInterimNumber","century","fullYear","sep","num","check","static","reg","match","exec","baseYear","substr","valid","isCoordinationNumber","isInterimNumber","format","longFormat","getAge","now","ageDay","ageDate","isFemale","isMale","sexDigit","src_default","defineProperty","exports","utf8","encode","decode","unicodeText","char","charCodeAt","fromCharCode","utf8Text","char1","char2","char3","generate","x","k","AA","BB","CC","DD","a","b","S11","S12","S13","S14","S21","S22","S23","S24","S31","S32","S33","S34","S41","S42","S43","S44","utf8_1","convertToWordArray","FF","GG","HH","II","addUnsigned","wordToHex","rotateLeft","lValue","iShiftBits","lX","lY","lX4","lY4","lX8","lY8","lResult","F","y","z","G","H","I","s","ac","lWordCount","lMessageLength","lNumberOfWordsTemp1","lNumberOfWordsTemp2","lNumberOfWords","lWordArray","lBytePosition","lByteCount","wordToHexValue","wordToHexValueTemp","lByte","lCount","toString","MD5","md5_2","md5_1","enumerable","get","apiSearch","query","hash","HemfixarnaGetuser","handleChangeEmail","emailError","handleChangePhone","phoneError","handleChangessn","ssnError","emailRegex","RegExp","validEmail","validPhone","validssn","pn","join","creditSafeData","hostRef","info_title","info_text","checkout_title","trust_badges","trust","trust_badge","checkout_trust_badges","link","hemfixarnaInvoiceCss","HemfixarnaInvoice","isValidEmail","componentDidRender","form","addEventListener","formError","disconnectedCallback","removeEventListener","formState","currentTarget","elements","description","descriptionInput","emailInput","tel","telInput","termsInput","terms_show_checkbox","formData","FormData","append","formImages","file","has_rut","has_rot","has_green","checkoutInvoice","handleImageDrop","files","dataTransfer","reader","FileReader","onload","displayImages","readAsDataURL","handleFileInputChange","handleImageClick","click","preventDragOver","removeImage","index","_","upload","invoice_description","submit","role","onDragOver","onDrop","accept","multiple","img","HemfixarnaOrder","background","thank_you_image","resetShop","HemfixarnaOrderrows","goToProduct","getDiscountedInfo","renderStartFees","fees","rotStartFee","rutStartFee","greenStartFee","pop_up","fee","entries","items","hemfixarnaProductCss","HemfixarnaProduct","addProduct","productInCart","start_fee","hide_start_fee","removeProduct","addPart","partInCart","sp","removePart","goToCart","getAmount","getPartAmount","partId","linkElem","createElement","setAttribute","fonts","checkAndInjectCSS","parents","getElementsByTagName","appendChild","plus","minus","defer","maleri_title","subtitle","maleri_text","invoice_price","list","bullet","hideDescription","HemfixarnaGrid","isMainCategory","handleMaleriClick","maleriLogo","tree","sub_cats","sort"],"sources":["./src/utils/form.ts","./src/utils/scroll.ts","./src/components/hemfixarna-address/hemfixarna-address.tsx","./src/utils/calc.ts","./src/utils/types.ts","./src/components/hemfixarna-box/hemfixarna-box.tsx","./src/components/hemfixarna-breadcrumbs/hemfixarna-breadcrumbs.tsx","./src/components/hemfixarna-cart/hemfixarna-cart.tsx","./src/utils/enviroment.ts","./src/utils/api.ts","./src/utils/felixApi.ts","./src/components/hemfixarna-checkout/hemfixarna-checkout.tsx","./src/components/hemfixarna-component/hemfixarna.scss?tag=hemfixarna-component&encapsulation=shadow","./src/components/hemfixarna-component/hemfixarna-component.tsx","./src/components/hemfixarna-contact/hemfixarna-contact.tsx","./src/components/hemfixarna-demo/hemfixarna-demo.scss?tag=hemfixarna-demo&encapsulation=shadow","./src/components/hemfixarna-demo/hemfixarna-demo.tsx","./node_modules/personnummer/dist/esm/index.js","./node_modules/md5-js-tools/lib/utf8.js","./node_modules/md5-js-tools/lib/md5.js","./node_modules/md5-js-tools/lib/index.js","./src/utils/creditSafe.ts","./src/components/hemfixarna-getuser/hemfixarna-getuser.tsx","./src/components/hemfixarna-info/hemfixarna-info.tsx","./src/components/hemfixarna-invoice/hemfixarna-invoice.scss?tag=hemfixarna-invoice","./src/components/hemfixarna-invoice/hemfixarna-invoice.tsx","./src/components/hemfixarna-order/hemfixarna-order.tsx","./src/components/hemfixarna-orderrows/hemfixarna-orderrows.tsx","./src/components/hemfixarna-product/hemfixarna-product.scss?tag=hemfixarna-product","./src/components/hemfixarna-product/hemfixarna-product.tsx","./src/components/hemfixarna-start/hemfixarna-start.tsx"],"sourcesContent":["const hideField = (field: string) => {\n return field.split(' ').reduce((acc, curr) => {\n if (curr.length <= 2) {\n return acc + curr.slice(0, 1) + '* ';\n } else {\n return acc + curr.slice(0, 1) + '*'.repeat(curr.length - 2) + curr.slice(-1) + ' ';\n }\n }, '');\n};\n\nexport { hideField };\n","const scrollToTop = (el: Element | undefined) => {\n if (!el) return;\n el.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n};\n\nexport { scrollToTop };\n","import { Component, Element, State, h } from '@stencil/core';\nimport state from '../../store';\nimport { hideField } from '../../utils/form';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-address',\n shadow: false,\n})\nexport class HemfixarnaAddress {\n @State() street: string = '';\n @State() streetError: string | null = null;\n @State() zip: string = '';\n @State() zipError: string | null = null;\n @State() town: string = '';\n @State() townError: string | null = null;\n @Element() private el: HTMLElement;\n\n componentWillLoad() {\n if (state.user) {\n this.street = state.user.street;\n this.zip = state.user.zip;\n this.town = state.user.town;\n }\n }\n\n handleSubmit = (e: Event) => {\n e.preventDefault();\n const streetValid = this.street.length > 0;\n if (!streetValid) {\n this.streetError = 'Ange en gatuadress';\n }\n const zipValid = this.zip.length > 0;\n const zipIsNumber = /^\\s*\\d[\\d\\s]*$/.test(this.zip);\n if (!zipIsNumber) {\n this.zipError = 'Postnummer får endast innehålla siffror';\n }\n if (!zipValid) {\n this.zipError = 'Ange ett postnummer';\n }\n const townValid = /^[^\\d\\s]{2,}$/.test(this.town);\n if (!townValid) {\n this.townError = 'Ange en ort';\n }\n if (streetValid && zipValid && townValid && zipIsNumber) {\n state.user = { ...state.user, street: this.street, zip: this.zip, town: this.town };\n state.checkoutStep = 2;\n state.checkoutEdit = false;\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n }\n };\n\n handleChangeStreet = (e: Event) => {\n this.streetError = null;\n this.street = this.street === state.user.street ? '' : (e.target as HTMLInputElement).value;\n };\n\n handleChangeZip = (e: Event) => {\n this.zipError = null;\n this.zip = this.zip === state.user.zip ? '' : (e.target as HTMLInputElement).value;\n };\n\n handleChangeTown = (e: Event) => {\n this.townError = null;\n this.town = this.town === state.user.town ? '' : (e.target as HTMLInputElement).value;\n };\n\n render = () => {\n return (\n <form class=\"hemfixarna_address\" onSubmit={e => this.handleSubmit(e)}>\n <div>\n <input\n class={`${this.street.length ? 'input_active' : ''}`}\n onInput={this.handleChangeStreet}\n type=\"text\"\n name=\"street\"\n value={this.street === state.user.street ? hideField(this.street) : this.street}\n />\n <label htmlFor=\"street\">Gatuaddress </label>\n </div>\n {this.streetError && <span>{this.streetError}</span>}\n <div>\n <input\n class={`${this.zip.length ? 'input_active' : ''}`}\n onInput={this.handleChangeZip}\n type=\"tel\"\n name=\"zip\"\n value={this.zip === state.user.zip ? hideField(this.zip) : this.zip}\n />\n <label htmlFor=\"zip\">Postnummer </label>\n </div>\n {this.zipError && <span>{this.zipError}</span>}\n <div>\n <input\n class={`${this.town.length ? 'input_active' : ''}`}\n onInput={this.handleChangeTown}\n type=\"text\"\n name=\"town\"\n value={this.town === state.user.town ? hideField(this.town) : this.town}\n />\n <label htmlFor=\"town\">Ort </label>\n </div>\n {this.townError && <span>{this.townError}</span>}\n <input type=\"submit\" value=\"Fortsätt\" />\n </form>\n );\n };\n}\n","import state from '../store';\nimport { CartItem, CartPart, Part, Product } from '../types';\n\nconst getRutPrice = (price: number) => {\n return Math.ceil(price / 2);\n};\n\nconst getRotPrice = (price: number) => {\n return Math.ceil(price * 0.7);\n};\n\nconst getGreenPrice = (price: number) => {\n return Math.ceil(price * 0.5);\n};\n\nconst getRutStartFee = () => {\n if (!state.options) return 448;\n if (state.rut) {\n return getRutPrice(state.options.start_fee);\n } else {\n return state.options.start_fee;\n }\n};\n\nconst getRotStartFee = () => {\n if (!state.options) return 448;\n if (state.rot) {\n return getRotPrice(state.options.start_fee);\n } else {\n return state.options.start_fee;\n }\n};\n\nconst getProductPrice = (product: Product | CartItem, price?: number, amount: number = 1) => {\n if (product.rot && state.rot) {\n return getRotPrice((price || product.price) * amount);\n } else if (product.rut && state.rut) {\n return getRutPrice((price || product.price) * amount);\n } else if (product.green && state.green) {\n return getGreenPrice((price || product.price) * amount);\n } else {\n return (price || product.price) * amount;\n }\n};\n\nconst getProductPriceWithRotAndRut = (product: Product) => {\n if (product.rot) {\n return getRotPrice(product.price);\n } else if (product.rut && state.rut) {\n return getRutPrice(product.price);\n } else {\n return product.price;\n }\n};\n\nconst getPartPrice = (part: Part | CartPart, product: Product | CartItem, amount: number = 1) => {\n if (product.rot && state.rot) {\n return getRotPrice(part.price * amount);\n } else if (product.rut && state.rut) {\n return getRutPrice(part.price * amount);\n } else if (product.green && state.green) {\n return getGreenPrice(part.price * amount);\n } else {\n return part.price * amount;\n }\n};\n\n\nconst groupCartItemsByStartFee = (cart: CartItem[]) => {\n return cart.reduce((groups, item) => {\n const startFeeID = item.start_fee_obj?.ID || null;\n if (!groups[startFeeID]) {\n groups[startFeeID] = [];\n }\n groups[startFeeID].push(item);\n return groups;\n }, {} as Record<string, CartItem[]>);\n};\n\nconst calculateStartFee = (cart: CartItem[] = state.cart) => {\n const uniqueStartFees = new Set<number>();\n let totalRut = 0;\n let totalRot = 0;\n let totalGreen = 0;\n let totalDefault = 0;\n\n cart.forEach(item => {\n const startFee = item.start_fee_obj;\n if (startFee && !uniqueStartFees.has(startFee.ID)) {\n uniqueStartFees.add(startFee.ID);\n\n if (item.rut) {\n totalRut += state.rut ? getRutPrice(startFee.price) : startFee.price;\n }\n if (item.rot) {\n totalRot += state.rot ? getRotPrice(startFee.price) : startFee.price;\n }\n if (item.green) {\n totalGreen += state.green ? getGreenPrice(startFee.price) : startFee.price;\n }\n if (!item.rut && !item.rot && !item.green) {\n totalDefault += startFee.price;\n }\n }\n });\n\n const appliedDiscounts = [totalRut > 0, totalRot > 0, totalGreen > 0];\n return {\n rut: totalRut,\n rot: totalRot,\n green: totalGreen,\n default: totalDefault,\n length: appliedDiscounts.filter(Boolean).length,\n };\n};\n\nconst getStartFee = () => {\n if (!state.cart) return { rut: 0, rot: 0, green: 0 };\n const hasRut = state.cart.some(item => item.rut && item.start_fee);\n const hasRot = state.cart.some(item => item.rot && item.start_fee);\n const hasGreen = state.cart.some(item => item.green && item.start_fee);\n const rutPrice = state.rut ? getRutPrice(state.options.start_fee) : state.options.start_fee * 1;\n const rotPrice = state.rot ? getRotPrice(state.options.start_fee) : state.options.start_fee * 1;\n const greenPrice = state.green ? getGreenPrice(state.options.start_fee) : state.options.start_fee * 1;\n return { rut: hasRut ? rutPrice : 0, rot: hasRot ? rotPrice : 0, green: hasGreen ? greenPrice : 0, length: [hasRut, hasRot, hasGreen].filter(d => d).length };\n // if (hasRut && hasRot) {\n // return { rut: rutPrice, rot: rotPrice, length: 2 };\n // } else if (hasRut) {\n // return { rut: rutPrice, rot: 0, length: 1 };\n // } else if (hasRot) {\n // return { rut: 0, rot: rotPrice, length: 1 };\n // } else {\n // return { rut: 0, rot: 0, length: 0 };\n // }\n};\n\nconst getItemPrice = (item: CartItem) => {\n const partsPrice = item.parts.reduce((acc, curr) => {\n return acc + curr.price * curr.amount;\n }, 0);\n return getProductPrice(item, item.price * item.amount + partsPrice);\n};\n\nconst calculateRot = () => {\n const totalWithRot =\n state.cart.reduce((acc, curr) => {\n return curr.rot ? acc + getItemPrice(curr) : acc;\n }, 0) + (state.cart.some(item => item.rot) ? calculateStartFee().rot : 0);\n\n const totalWithoutRot = state.cart.reduce((acc, curr) => {\n const partsPrice = curr.parts.reduce((acc, part) => {\n return acc + part.price * part.amount;\n }, 0);\n const startFee = curr.start_fee_obj?.price || 0;\n\n if (curr.rot) {\n if (!acc.startFeeApplied) {\n acc.startFeeApplied = true;\n acc.amount += curr.price * curr.amount + partsPrice + startFee;\n } else {\n acc.amount += curr.price * curr.amount + partsPrice;\n }\n }\n \n return acc;\n }, { amount: 0, startFeeApplied: false }).amount;\n\n return totalWithoutRot - totalWithRot;\n};\n\nconst calculateGreenDiscount = () => {\n const totalWithGreen =\n state.cart.reduce((acc, curr) => {\n return curr.green ? acc + getItemPrice(curr) : acc;\n }, 0) + (state.cart.some(item => item.green) ? calculateStartFee().green : 0);\n\n const totalWithoutGreen = state.cart.reduce((acc, curr) => {\n const partsPrice = curr.parts.reduce((acc, part) => {\n return acc + part.price * part.amount;\n }, 0);\n const startFee = curr.start_fee_obj?.price || 0;\n\n if (curr.green) {\n if (!acc.startFeeApplied) {\n acc.startFeeApplied = true;\n acc.amount += curr.price * curr.amount + partsPrice + startFee;\n } else {\n acc.amount += curr.price * curr.amount + partsPrice;\n }\n }\n \n return acc;\n }, { amount: 0, startFeeApplied: false }).amount;\n\n return totalWithoutGreen - totalWithGreen;\n};\n\nconst calculateRut = () => {\n const totalWithRut =\n state.cart.reduce((acc, curr) => {\n return curr.rut ? acc + getItemPrice(curr) : acc;\n }, 0) + (state.cart.some(item => item.rut) ? calculateStartFee().rut : 0);\n\n const totalWithoutRut = state.cart.reduce((acc, curr) => {\n const partsPrice = curr.parts.reduce((acc, part) => {\n return acc + part.price * part.amount;\n }, 0);\n const startFee = curr.start_fee_obj?.price || 0;\n\n if (curr.rut) {\n if (!acc.startFeeApplied) {\n acc.startFeeApplied = true;\n acc.amount += curr.price * curr.amount + partsPrice + startFee;\n } else {\n acc.amount += curr.price * curr.amount + partsPrice;\n }\n }\n \n return acc;\n }, { amount: 0, startFeeApplied: false }).amount;\n\n return totalWithoutRut - totalWithRut;\n};\n\nconst getTotalPrice = () => {\n return state.cart.reduce((acc, curr) => acc + getItemPrice(curr), 0) + calculateStartFee().rot + calculateStartFee().rut + calculateStartFee().green + calculateStartFee().default;\n};\n\nexport {\n calculateGreenDiscount,\n calculateRot,\n calculateRut,\n getGreenPrice,\n getItemPrice,\n getPartPrice,\n getProductPrice,\n getProductPriceWithRotAndRut,\n getRotPrice,\n getRotStartFee,\n getRutPrice,\n getRutStartFee,\n getStartFee,\n getTotalPrice,\n groupCartItemsByStartFee,\n calculateStartFee\n};\n","import { Business, CustomerCategory, CustomerSubCategory, Product } from '../types';\n\nconst isProduct = (category: CustomerCategory | CustomerSubCategory | Product): category is Product => {\n return (category as Product).post_name !== undefined;\n};\n\nconst isBusiness = (partner: string): partner is Business => {\n return Object.values(Business).includes(partner as Business);\n};\n\nexport { isBusiness, isProduct };\n","import { Component, Element, Fragment, Prop, h } from '@stencil/core';\nimport state from '../../store';\nimport { Category, CustomerCategory, CustomerSubCategory, Product, Service } from '../../types';\nimport { getProductPrice } from '../../utils/calc';\nimport { scrollToTop } from '../../utils/scroll';\nimport { isProduct } from '../../utils/types';\n\n@Component({\n tag: 'hemfixarna-box',\n shadow: false,\n})\nexport class HemfixarnaBox {\n @Prop() post: Category | Product | Service;\n @Prop() category: CustomerCategory | CustomerSubCategory | Product;\n @Prop() icon: string;\n @Prop() postTitle: string;\n @Element() private el: HTMLElement;\n\n setTaxonomy(taxonomy: Category | Service | Product) {\n if (taxonomy) {\n if ((taxonomy as Category)?.taxonomy === 'service_cat') {\n state.selectedCategory = taxonomy as Category;\n state.step = 2;\n } else if ((taxonomy as Service)?.post_type === 'service') {\n state.selectedService = taxonomy as Service;\n state.step = 3;\n } else if ((taxonomy as Product)?.post_type === 'ikea_product') {\n state.selectedProduct = taxonomy as Product;\n state.step = 4;\n }\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n }\n }\n\n setProduct() {\n state.selectedProduct = this.category as Product;\n state.step = 4;\n state.selectedCustomerCategory = null;\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n }\n\n render() {\n return this.category ? (\n <Fragment>\n {isProduct(this.category) ? (\n <li onClick={() => this.setProduct()}>\n <img class=\"hemfixarna_logo\" height={82} src={this.category.icon as string} alt={this.category.post_name} />\n <div>\n <p>{this.category.title}</p>\n {!this.category.invoice ? <p class=\"price\">Från {getProductPrice(this.category)}kr</p> : null}\n </div>\n </li>\n ) : (\n <li onClick={() => (state.selectedCustomerCategory = this.category as CustomerCategory)}>\n <img class=\"hemfixarna_logo\" height={82} src={this.category.icon} alt={this.category.name} />\n <div>\n <p>{this.category.name}</p>\n </div>\n </li>\n )}\n </Fragment>\n ) : (\n <li onClick={() => this.setTaxonomy(this.post)}>\n {this.post.icon && <img class=\"hemfixarna_logo\" height={82} src={this.icon} alt={this.postTitle} />}\n <div>\n <p>{this.postTitle}</p>\n {state.step === 3 && <p class=\"price\">Från {getProductPrice(this.post as Product)}kr</p>}\n </div>\n </li>\n );\n }\n}\n","import { Component, Element, Prop, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-breadcrumbs',\n shadow: false,\n})\nexport class HemfixarnaBreadcrumbs {\n @Prop() closeModal: () => void;\n @Element() private el: HTMLElement;\n\n getCartLength() {\n return state.cart.reduce((acc, curr) => acc + curr.amount, 0);\n }\n\n triggerScrollTotop = () => {\n const el = this.el.nextSibling as HTMLElement;\n scrollToTop(el);\n };\n\n handleCartClick() {\n if (state.cart?.length) {\n state.step = 5;\n this.triggerScrollTotop();\n }\n }\n\n handleHomePageClick() {\n state.step = 1;\n state.parentCategory = null;\n state.selectedCustomerCategory = null;\n this.triggerScrollTotop();\n setTimeout(() => {\n state.selectedCategory = null;\n state.selectedProduct = null;\n state.maleri = null;\n state.selectedService = null;\n }, 200);\n }\n\n render() {\n const logo = getAssetPath(`./assets/hemfixarna.svg`);\n const close = getAssetPath(`./assets/close.svg`);\n const cart = getAssetPath(`./assets/cart.svg`);\n const back = getAssetPath(`./assets/back.svg`);\n\n return (\n <div>\n <div class=\"hemfixarna_crumbs\">\n <div class=\"hemfixarna_crumbs--links\">\n <img onClick={() => this.handleHomePageClick()} src={logo} width={110} />\n <img onClick={() => this.closeModal()} class=\"close\" src={close} width={32} />\n <div>\n <button onClick={() => this.handleHomePageClick()}>Alla tjänster</button>\n </div>\n </div>\n <div class=\"hemfixarna_crumbs--right\">\n <hemfixarna-contact></hemfixarna-contact>\n <div onClick={() => this.handleCartClick()} class={`cart ${this.getCartLength() > 0 ? 'cart_active' : ''}`}>\n <img src={cart} width={24} />\n <span>{this.getCartLength()}</span>\n </div>\n </div>\n </div>\n {[3, 4].includes(state.step) && !state.customer && (\n <button\n class=\"hemfixarna_crumbs--back\"\n onClick={() => {\n state.step = state.step === 4 ? 3 : 2;\n }}\n >\n <img width={24} src={back} alt=\"back arrow\" />\n <span>Se allt {state.step === 4 ? state.selectedService.post_title : state.selectedCategory.name}</span>\n </button>\n )}\n {!state.parentCategory && state.step && state.selectedCustomerCategory && (\n <button\n class=\"hemfixarna_crumbs--back\"\n onClick={() => {\n state.step = 1;\n state.selectedCustomerCategory = null;\n state.selectedProduct = null;\n state.maleri = null;\n }}\n >\n <img width={24} src={back} alt=\"back arrow\" />\n <span>Se alla tjänster</span>\n </button>\n )}\n {state.parentCategory && state.step < 5 && (\n <button\n class=\"hemfixarna_crumbs--back\"\n onClick={() => {\n state.step = 1;\n state.selectedCustomerCategory = state.parentCategory;\n state.selectedProduct = null;\n state.maleri = null;\n }}\n >\n <img width={24} src={back} alt=\"back arrow\" />\n <span>Se allt {state.parentCategory.name}</span>\n </button>\n )}\n </div>\n );\n }\n}\n","import { Component, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\n\n@Component({\n tag: 'hemfixarna-cart',\n shadow: false,\n})\nexport class HemfixarnaCart {\n render() {\n const back = getAssetPath(`./assets/back.svg`);\n\n return (\n <div class=\"hemfixarna_cart\">\n <div class=\"hemfixarna_cart--left\">\n <h2>\n {state.checkoutStep === 2 && !state.checkoutEdit && (\n <button\n onClick={() => {\n state.checkoutStep = 1;\n }}\n >\n <img width={24} src={back} alt=\"back arrow\" />\n </button>\n )}\n Din bokning\n </h2>\n <hemfixarna-orderrows />\n </div>\n <div class=\"hemfixarna_cart--right\">\n <h2>\n {state.checkoutStep === 2 && !state.checkoutEdit && (\n <button\n onClick={() => {\n state.checkoutStep = 1;\n }}\n >\n <img width={24} src={back} alt=\"back arrow\" />\n </button>\n )}\n Dina uppgifter\n </h2>\n <hemfixarna-checkout />\n <hemfixarna-info />\n </div>\n </div>\n );\n }\n}\n","const livePreviewUrl = 'hemfixarna-partner.vercel.app';\n\nconst getDefaultApiUrl = () => {\n if (window.location.href.includes('vercel.app') && !window.location.href.includes(livePreviewUrl)) {\n return 'https://hemfixare.dev.afonso.se';\n } else {\n return 'https://hemfixarna.se';\n }\n};\n\nconst getApiUrl = () => {\n if (typeof process !== 'undefined' && process.env && process.env.API_URL) {\n return process.env.API_URL;\n }\n\n return getDefaultApiUrl();\n};\n\nconst getDefaultCreditSafeApiUrl = () => {\n if (window.location.href.includes('vercel.app')) {\n return 'https://hemfixare-lookup-dev.vercel.app/api';\n } else {\n return 'https://hemfixare-lookup.vercel.app/api';\n }\n};\n\nconst getCreditSafeApiUrl = () => {\n if (typeof process !== 'undefined' && process.env && process.env.CREDIT_SAFE_API_URL) {\n return process.env.CREDIT_SAFE_API_URL;\n }\n\n return getDefaultCreditSafeApiUrl();\n};\n\nexport { getApiUrl, getCreditSafeApiUrl };\n","import { RotOptions, RutOptions, WpOptions } from '../types';\nimport { getApiUrl } from './enviroment';\nimport { FelixOrder } from './felixApi';\n\nconst base = `${getApiUrl()}/wp-json/headless`;\n\nexport async function fetchWithType<T>(request: RequestInfo, options?: RequestInit): Promise<T> {\n const response = await fetch(request, options);\n const body = await response.json();\n return body;\n}\n\nconst getTaxonomy = async (endpoint: string) => {\n if (!endpoint) {\n return;\n }\n const type = endpoint.split('/')[0];\n const slug = endpoint.split('/')[1];\n try {\n const res = await fetch(`${base}/${type}/${slug}`);\n return await res.json();\n } catch (error) {\n console.log(error);\n }\n};\n\nconst getCustomer = async (slug: string) => {\n try {\n const res = await fetch(`${base}/customer/${slug}`);\n return await res.json();\n } catch (error) {\n console.log(error);\n }\n};\n\nconst loginCustomer = async ({ id, password }: { id: number; password: string }) => {\n try {\n const res = await fetch(`${base}/customer/login`, {\n method: 'POST',\n body: JSON.stringify({ id, password }),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n return res.status;\n } catch (error) {\n console.log(error);\n }\n};\n\nconst getOptions = async () => {\n try {\n const res = await fetch(`${base}/webcoptions`);\n return (await res.json()) as WpOptions;\n } catch (error) {\n console.log(error);\n }\n};\n\nconst getRut = async () => {\n try {\n const data = await fetchWithType<RutOptions>(`${base}/rut`);\n return data;\n } catch (error) {\n console.log(error);\n }\n};\n\nconst getRot = async () => {\n try {\n const res = await fetch(`${base}/rot`);\n return (await res.json()) as RotOptions;\n } catch (error) {\n console.log(error);\n }\n};\n\nconst getGreenDiscount = async () => {\n try {\n const res = await fetch(`${base}/green-discount`);\n return await res.json();\n } catch (error) {\n console.log(error);\n }\n};\n\nconst postOrder = async (data: FelixOrder) => {\n try {\n const res = await fetch(`${base}/weborder`, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n return (await res.json()) as { message: string; post_id: number; data: FelixOrder; status?: number };\n } catch (error) {\n console.log(error);\n }\n};\n\nexport { getCustomer, getGreenDiscount, getOptions, getRot, getRut, getTaxonomy, loginCustomer, postOrder };\n","import { fetchWithType } from './api';\nimport { getApiUrl } from './enviroment';\n\nconst base = `${getApiUrl()}/wp-json/felix`;\n\ninterface FelixOrder {\n firstName: string;\n lastName: string;\n street: string;\n zip: string;\n town: string;\n ssn: string;\n email: string;\n phone: string;\n url: string;\n date: string;\n notes?: string;\n wws?: string;\n referral_id?: string;\n id_source?: string;\n id_sub_source?: string;\n products: {\n id: string;\n name: string;\n quantity: number;\n rut: number;\n rot: number;\n }[];\n start_fees: {\n ID: number;\n price: number;\n rut: number;\n rot: number;\n green: number;\n }[];\n creditSafe: {\n firstName: string;\n lastName: string;\n street: string;\n zip: string;\n town: string;\n };\n felixStatus?: 'success' | 'error';\n customer?: string;\n seller_id?: string;\n refferal_id?: string;\n}\n\nconst postPerson = async (felixOrder: FelixOrder) => {\n try {\n return await fetchWithType<\n | {\n response: {\n scriptResult: string;\n scriptError: string;\n };\n messages: [\n {\n code: string;\n message: string;\n },\n ];\n }\n | false\n >(`${base}/createperson`, {\n method: 'POST',\n body: JSON.stringify(felixOrder),\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n } catch (error) {\n console.log(error);\n }\n};\n\nexport { FelixOrder, postPerson };\n","import { Component, Element, Fragment, State, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Business } from '../../types';\nimport { postOrder } from '../../utils/api';\nimport { FelixOrder, postPerson } from '../../utils/felixApi';\nimport { hideField } from '../../utils/form';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-checkout',\n shadow: false,\n})\nexport class HemfixarnaCheckout {\n @State() date: string = '';\n @State() dateError: string | null = null;\n @State() generalError: string | null = null;\n @State() loading = false;\n @State() enteredPin: string = '';\n @Element() private el: HTMLElement;\n @State() selectedSubSource: string | null = null;\n @State() partnerOrderId: string | null = null;\n @State() sellerID: string | null = null;\n @State() RefferalID: string | null = null;\n\n handleChangeDate = (e: Event) => {\n this.dateError = null;\n this.date = (e.target as HTMLInputElement).value;\n };\n\n handleChangeTerms = () => {\n this.generalError = null;\n };\n\n sendOrder = async () => {\n if (this.loading) return;\n this.loading = true;\n\n const startFees = state.cart\n .filter(item => item.start_fee_obj)\n .map(item => ({\n ID: item.start_fee_obj?.ID,\n title: item.start_fee_obj?.title,\n price: item.start_fee_obj?.price,\n rut: item.rut ? 1 : 0,\n rot: item.rot ? 1 : 0,\n green: item.green ? 1 : 0,\n }));\n\n let order: FelixOrder = {\n firstName: state.creditSafeUser.firstName,\n lastName: state.creditSafeUser.lastName,\n street: state.user.street,\n zip: state.user.zip,\n town: state.user.town,\n ssn: state.user.ssn,\n email: state.user.email,\n phone: state.user.phone,\n url: `${state.business === Business.string ? 'string' : state.business}-webk`,\n date: this.date,\n products: [\n ...state.cart.map(item => {\n const parts = item.parts.map(part => ({\n id: String(part.id),\n name: part.name,\n quantity: part.amount,\n rut: 0,\n rot: 0,\n start_fee_id: item.start_fee_obj ? item.start_fee_obj.ID : null,\n }));\n return [\n {\n id: String(item.id),\n name: item.name,\n quantity: item.amount,\n rot: item.rot ? 1 : 0,\n rut: item.rut ? 1 : 0,\n start_fee_id: item.start_fee_obj ? item.start_fee_obj.ID : null,\n },\n ...parts,\n ];\n }),\n ].flat(),\n start_fees: startFees,\n creditSafe: state.creditSafeUser,\n customer: state.business,\n id_source: state.customer.source ? state.customer.source.fieldData.So01_Name : '',\n id_sub_source: this.selectedSubSource ? this.selectedSubSource : '',\n seller_id: this.sellerID ?? '',\n referral_id: this.RefferalID ?? '',\n };\n\n const felixOrder = await postPerson(order);\n if (!felixOrder || !felixOrder.response?.scriptResult?.includes('OK')) {\n order = { ...order, felixStatus: 'error' };\n } else {\n order = { ...order, felixStatus: 'success' };\n }\n\n try {\n const { data: orderConfirm, status } = await postOrder(order);\n if (orderConfirm && status && status === 200) {\n state.step = 6;\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n } else {\n this.generalError = 'Något gick fel, försök igen senare';\n }\n } catch (error) {\n this.generalError = 'Något gick fel, försök igen senare';\n }\n this.loading = false;\n };\n\n handleSubmit = (e: Event) => {\n e.preventDefault();\n this.generalError = null;\n const validDate = this.date.length > 0;\n if (!validDate) {\n this.dateError = 'Ange ett giltigt datum';\n }\n const checkBoxes = Array.from(this.el.querySelectorAll('input[type=\"checkbox\"]'));\n const notValidTerms = checkBoxes.find(i => !(i as HTMLInputElement).checked);\n if (notValidTerms) {\n this.generalError = 'Du måste godkänna villkoren';\n }\n if (state.customer.source && state.selectSource) {\n if (!this.sellerID) {\n this.generalError = 'Ange säljare';\n return;\n }\n if (state.customer.source.sub_sources?.length && !this.selectedSubSource) {\n this.generalError = 'Välj underkälla';\n return;\n }\n }\n if (validDate && !notValidTerms) {\n this.sendOrder();\n }\n };\n\n componentWillLoad() {\n if (Boolean(state.user && state.user.street)) {\n state.checkoutStep = 2;\n }\n }\n\n render = () => {\n const dateLogo = getAssetPath(`./assets/date.svg`);\n const down = getAssetPath(`./assets/down.svg`);\n const loading = getAssetPath(`./assets/spinner.gif`);\n\n if (state.checkoutEdit) {\n return <hemfixarna-address />;\n } else if (state.checkoutStep === 1) {\n return <hemfixarna-getuser />;\n } else if (state.checkoutStep === 2) {\n return (\n <div class=\"mb-2\">\n <div class=\"hemfixarna_addressinfo\">\n <div>\n <p>{hideField(state.user.firstName)}</p>\n <p>{hideField(state.user.lastName)}</p>\n <p>{state.user.email}</p>\n <p>{state.user.phone}</p>\n </div>\n <div>\n <p>{hideField(state.user.street)}</p>\n <p>{hideField(state.user.zip)}</p>\n <p>{hideField(state.user.town)}</p>\n </div>\n <button onClick={() => (state.checkoutEdit = true)}>Behöver du ändra adressen?</button>\n </div>\n <form onSubmit={e => this.handleSubmit(e)}>\n <div>\n <img src={dateLogo} width={24} />\n <input\n class={`${this.date.length ? 'input_active' : ''}`}\n min={new Date().toISOString().split('T')[0]}\n onChange={e => this.handleChangeDate(e)}\n type=\"date\"\n name=\"date\"\n value={this.date}\n />\n <label htmlFor=\"date\">Tidigaste datum för hembesök</label>\n <img src={down} width={24} />\n </div>\n {this.dateError && <span>{this.dateError}</span>}\n {state.customer.source && state.selectSource ? (\n <Fragment>\n <p>\n Inloggad som:\n <strong> {state.customer.source.fieldData.So01_Name}</strong>\n </p>\n <label>\n Säljare (SäljarId)\n <input type=\"text\" value={this.sellerID} onChange={e => (this.sellerID = (e.target as HTMLInputElement).value)} />\n </label>\n <label>\n PartnerOrderID (RefferalID)\n <input type=\"text\" value={this.RefferalID} onChange={e => (this.RefferalID = (e.target as HTMLInputElement).value)} />\n </label>\n {state.customer.source.sub_sources?.length ? (\n <div>\n <select onChange={e => (this.selectedSubSource = (e.target as HTMLSelectElement).value)}>\n <option disabled selected value=\"null\">\n Välj underkälla\n </option>\n {state.customer.source.sub_sources.map(sub => (\n <option value={sub['So_SubSource::Sus01_Name']}>{sub['So_SubSource::Sus01_Name']}</option>\n ))}\n </select>\n </div>\n ) : (\n <p>Det finns inga underkällor att välja</p>\n )}\n </Fragment>\n ) : null}\n <label class=\"hemfixarna_checkbox\">\n <input onChange={() => this.handleChangeTerms()} type=\"checkbox\" />\n <span innerHTML={state.options.terms} />\n </label>\n {state.cart\n .filter(i => i.terms_checkout?.length)\n .map(item => (\n <Fragment>\n <label class=\"hemfixarna_checkbox\">\n <input onChange={() => this.handleChangeTerms()} type=\"checkbox\" />\n <span>{item.terms_checkout}</span>\n </label>\n </Fragment>\n ))}\n {this.generalError && <span>{this.generalError}</span>}\n <div class={this.loading ? 'loading' : ''}>\n <input type=\"submit\" value={this.loading ? '' : 'Skicka bokning'} />\n <img width={20} height={20} src={loading} alt=\"spinner\" />\n </div>\n </form>\n </div>\n );\n }\n };\n}\n","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap');\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n$yellow: #fffaf2;\n$background: #faf1e8;\n$grey: #b7b7b7;\n$brown: #e9d7ca;\n$black: #474444;\n$white: #fff;\n$darkyellow: #fcd9c9;\n$pink: #f1ded6;\n$green: #25a710;\n$orange: #ec6632;\n$darkorange: #c84e18;\n\n$border: 1px solid $darkyellow;\n$greyBorder: 1px solid #e3e3e3;\n$border-radius: 4px;\n$box-shadow: 0px 4px 8px 0px #0000000a;\n$box-shadow-hover: 0px 8px 16px 2px #0000000a;\n$widgetBoxColor: 0px 2px 16px 0px #00000014;\n\n@mixin hover {\n &:hover {\n transition: 0.1s all cubic-bezier(0.465, 0.183, 0.153, 0.946);\n filter: brightness(1.02);\n transform: scale(1.01);\n box-shadow: $box-shadow-hover;\n }\n}\n\n@mixin cartLength {\n position: relative;\n span {\n position: absolute;\n background: $white;\n border-radius: 100%;\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n font-size: 13px;\n line-height: 11px;\n top: -6px;\n right: -12px;\n }\n}\n\n@mixin mobile {\n @media (max-width: 768px) {\n @content;\n }\n}\n\n@mixin desktop {\n @media (min-width: 769px) {\n @content;\n }\n}\n\n* {\n box-sizing: border-box;\n}\n\n:host {\n font-family: 'Inter', sans-serif;\n input[type='text'] {\n padding: 16px;\n width: 100%;\n font-size: 16px;\n border: 1px solid $darkyellow;\n }\n .mb-2 {\n margin-bottom: 32px;\n }\n button {\n color: $black;\n }\n form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n position: relative;\n button {\n position: absolute;\n right: 0;\n top: -1rem;\n }\n img {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n &:first-of-type {\n left: 16px;\n }\n &:last-of-type {\n right: 16px;\n }\n }\n span {\n margin-top: -8px;\n color: $orange;\n }\n p {\n text-align: center;\n }\n p {\n margin: 0;\n }\n div {\n position: relative;\n label {\n pointer-events: none;\n position: absolute;\n left: 16px;\n top: 50%;\n transform: translateY(-50%);\n background: $white;\n padding: 4px;\n transition: 0.2s all cubic-bezier(0.465, 0.183, 0.153, 0.946);\n }\n input {\n padding: 16px;\n width: 100%;\n font-size: 16px;\n border: 1px solid $darkyellow;\n }\n input:focus ~ label,\n .input_active ~ label {\n top: 0;\n transform: translateY(-50%);\n background: linear-gradient(180deg, $background 50%, $white 50%);\n }\n }\n select {\n padding: 0.75rem 1rem;\n width: 100%;\n }\n }\n h1 {\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n letter-spacing: -3%;\n text-align: left;\n margin: 0 0 8px;\n }\n h2 {\n margin: 0 0 24px;\n font-weight: 700;\n font-size: 20px;\n line-height: 28px;\n letter-spacing: -3%;\n }\n p {\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: -3%;\n }\n .hemfixarna {\n width: 100%;\n &_source {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n img {\n width: 20px;\n }\n &--pw {\n max-width: 300px !important;\n input[type='password'] {\n padding: 0.5rem;\n }\n form {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n }\n }\n &_contact {\n display: flex;\n gap: 16px;\n a {\n display: flex;\n align-items: center;\n gap: 8px;\n color: $black;\n text-decoration: none;\n font-weight: 600;\n font-size: 13px;\n &:hover {\n text-decoration: underline;\n }\n }\n &--horizontal {\n span {\n display: none;\n }\n @include desktop {\n span {\n display: initial;\n }\n }\n }\n }\n &_painting {\n > h2,\n p {\n text-align: center;\n padding: 0 16px;\n }\n > h2 {\n margin: 0 0 8px;\n }\n opacity: 0;\n padding: 0 1rem;\n animation: fadeIn 0.5s forwards 0.3s;\n }\n &_partnerlogo {\n max-height: 50px;\n min-height: 45px;\n object-fit: contain;\n max-width: 150px;\n @include desktop {\n max-width: 200px;\n }\n }\n &_nav {\n position: absolute;\n top: 0;\n width: 100dvw;\n left: 0;\n height: 80px;\n z-index: 9999;\n\n &--links {\n display: none !important;\n @include desktop {\n display: flex !important;\n }\n a {\n color: $orange;\n text-decoration: none;\n border: 1px solid rgba($color: $white, $alpha: 0.3);\n border-radius: 56px;\n padding: 8px 32px;\n text-transform: capitalize;\n }\n }\n > div {\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 16px;\n @include desktop {\n padding: 0 32px;\n }\n > div {\n display: flex;\n gap: 32px;\n justify-content: space-between;\n }\n\n > img {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: -1;\n }\n }\n a {\n text-decoration: none;\n }\n p {\n color: $black;\n }\n p.with-bg {\n color: $white;\n }\n }\n &_standalone {\n .hemfixarna {\n &_backdrop {\n background: $yellow;\n opacity: 1;\n }\n &_modal {\n top: 80px;\n transform: translateX(-50%);\n border: none;\n height: calc(100dvh - 80px);\n opacity: 0;\n &--open {\n opacity: 1;\n }\n }\n }\n }\n .switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n }\n\n /* Hide default HTML checkbox */\n .switch input {\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n /* The slider */\n .slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n border-radius: 34px;\n }\n\n .slider:before {\n position: absolute;\n content: '';\n height: 18px;\n width: 18px;\n left: 2px;\n bottom: 1px;\n background-color: white;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n border-radius: 50%;\n }\n\n input:checked + .slider {\n background-color: $darkyellow;\n }\n\n input:focus + .slider {\n box-shadow: 0 0 1px $darkyellow;\n }\n\n input:checked + .slider:before {\n -webkit-transform: translateX(18px);\n -ms-transform: translateX(18px);\n transform: translateX(18px);\n background: $orange;\n }\n\n &_maleribox {\n background: $white;\n box-shadow: $box-shadow;\n width: 100%;\n min-height: 132px;\n padding: 24px;\n display: flex;\n align-items: center;\n gap: 24px;\n text-align: left;\n @include hover;\n }\n\n &_checkbox {\n display: grid;\n grid-template-columns: 40px auto;\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: -3%;\n > span {\n transform: translateY(6px);\n }\n span,\n span p {\n color: $black;\n font-size: 14px;\n }\n p {\n text-align: left;\n }\n }\n\n &_info {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 32px;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n border: $border;\n h2 {\n margin: 0;\n }\n @include desktop {\n position: sticky;\n top: 0;\n }\n }\n\n &_infomodal {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n max-width: 80%;\n background: $yellow;\n border: $border;\n padding: 32px;\n z-index: 99;\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n display: flex;\n flex-direction: column;\n gap: 16px;\n p,\n h4 {\n margin: 0;\n }\n button {\n background: $orange;\n color: $white;\n border-radius: 60px;\n font-size: 16px;\n padding: 8px 16px;\n }\n }\n\n &_addressinfo {\n padding: 16px 16px 64px;\n border: $border;\n position: relative;\n margin-bottom: 32px;\n display: grid;\n grid-template-columns: 1fr;\n gap: 8px;\n @include desktop {\n grid-template-columns: 1fr 1fr;\n }\n button {\n position: absolute;\n bottom: 16px;\n right: 16px;\n font-weight: 500;\n text-underline-offset: 2px;\n text-decoration: underline;\n }\n }\n\n &_part {\n background: $white;\n box-shadow: $box-shadow;\n display: grid;\n padding: 16px;\n grid-template-columns: auto 75px;\n }\n &_counter {\n display: flex;\n align-items: center;\n span {\n padding: 0 8px;\n }\n img {\n cursor: pointer;\n &:not(.disabled) {\n @include hover;\n }\n }\n }\n &_description {\n display: grid;\n gap: 16px;\n ul {\n list-style: disc;\n padding-right: 12px;\n transform: translateX(12px);\n }\n &--hidden {\n max-height: 140px;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n &::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 128px;\n background: linear-gradient(180deg, rgba(255, 253, 250, 0), rgba(255, 253, 250, 0.46) 50%, $background);\n }\n }\n }\n &_terms {\n font-size: 14px;\n a {\n color: inherit;\n }\n }\n &_logo {\n height: 64px;\n }\n &_box {\n padding: 16px;\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n border-radius: 4px;\n gap: 16px 8px;\n border-radius: 4px;\n gap: 16px 8px;\n p,\n span {\n font-size: 15px;\n }\n .underline {\n text-decoration: underline;\n text-underline-offset: 2px;\n }\n .pointer {\n cursor: pointer;\n }\n .p-s {\n font-size: 12px;\n }\n > div {\n display: grid;\n gap: 8px;\n }\n &--standard {\n background: $yellow;\n border: $border;\n }\n &--alternative,\n &--alternative_2,\n &--alternative_3 {\n background: transparent;\n border: $greyBorder;\n }\n &--alternative_2,\n &--alternative_3 {\n box-shadow: $widgetBoxColor;\n }\n &--alternative_3 {\n justify-content: center;\n }\n }\n &_altbtn {\n display: flex !important;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n margin-left: auto;\n }\n &_btn {\n margin-left: auto;\n }\n &_btn,\n &_buy,\n input[type='submit'] {\n border: none;\n border-radius: 60px;\n font-weight: 600;\n letter-spacing: 0.5px;\n line-height: 20px;\n box-shadow: $box-shadow;\n &:not(.disabled) {\n @include hover;\n }\n }\n div:has(> input[type='submit']) {\n position: relative;\n input {\n cursor: pointer;\n }\n img {\n display: none;\n }\n }\n .loading {\n cursor: default;\n opacity: 0.6;\n > img {\n display: initial !important;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n &_btn {\n font-size: 14px;\n background: $darkorange;\n color: $white;\n padding: 16px 24px;\n white-space: nowrap;\n @include cartLength;\n span {\n background: $green;\n color: $white;\n right: 0 !important;\n }\n }\n &_buy,\n input[type='submit'] {\n font-size: 21px;\n background: $green;\n color: $white;\n padding: 16px 24px;\n }\n .disabled {\n opacity: 0.5;\n cursor: default;\n }\n &_modal {\n position: fixed;\n background: $background;\n border: $border;\n border-radius: $border-radius;\n top: 50%;\n left: 50%;\n z-index: 1000;\n transition: 0.1s all cubic-bezier(0.465, 0.183, 0.153, 0.946);\n transform: translate(-50%, -50%) scale(0.7);\n opacity: 0;\n height: 92%;\n width: 92%;\n max-width: 920px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n &--open {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n }\n &_backdrop {\n z-index: 999;\n position: fixed;\n background: $black;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n transition:\n transform 0.1s cubic-bezier(0.465, 0.183, 0.153, 0.946),\n opacity 0.1s cubic-bezier(0.465, 0.183, 0.153, 0.946);\n &--open {\n opacity: 0.3;\n }\n }\n &_order {\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n background-repeat: no-repeat !important;\n background-size: cover !important;\n background-position: center !important;\n display: grid;\n grid-template-columns: 1fr 1fr;\n padding: 48px 32px 64px;\n @include mobile {\n grid-template-columns: 1fr;\n grid-template-rows: 0 auto;\n }\n > div:last-of-type {\n background: $yellow;\n padding: 32px;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n overflow: auto;\n }\n img {\n cursor: pointer;\n }\n button {\n margin: 16px 0;\n padding: 0;\n text-decoration: underline;\n text-underline-offset: 2px;\n font-size: 14px;\n font-weight: 600;\n }\n }\n &_cart {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n @include mobile {\n grid-template-columns: 1fr;\n gap: 0;\n }\n &--right,\n &--left {\n h2 {\n display: flex;\n align-items: center;\n img {\n margin-top: 3.2px;\n }\n }\n }\n &--left {\n h2 {\n button {\n @include desktop {\n display: none;\n }\n }\n }\n }\n &--right {\n h2 {\n button {\n @include mobile {\n display: none;\n }\n }\n }\n }\n &--startfee {\n display: flex;\n justify-content: space-between;\n }\n &--rutrot {\n display: flex;\n justify-content: space-between;\n div {\n display: flex;\n gap: 16px;\n align-items: center;\n }\n }\n &--additional {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n border-top: $border;\n p {\n font-size: 14px;\n position: relative;\n strong {\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n }\n img {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: -20px;\n cursor: pointer;\n }\n }\n }\n &--price {\n border-top: $border;\n h3 {\n margin: 0;\n }\n padding: 16px;\n display: flex;\n justify-content: space-between;\n }\n &--item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px 0;\n border-top: $border;\n span {\n font-size: 12px;\n }\n > div {\n display: flex;\n justify-content: space-between;\n > div {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n button {\n color: $orange;\n }\n }\n }\n &--group {\n border-radius: 16px;\n background: #fefaf6;\n margin-bottom: 16px;\n padding: 10px 20px;\n ul {\n li {\n &:first-of-type {\n border-top: 0;\n }\n }\n }\n }\n }\n &_categories {\n &--wrapper {\n gap: 32px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n @include mobile {\n grid-template-columns: 1fr;\n }\n }\n display: flex;\n flex-direction: column;\n gap: 24px;\n li {\n position: relative;\n background: $white;\n border-radius: $border-radius;\n min-height: 132px;\n padding: 24px;\n box-shadow: $box-shadow;\n display: flex;\n align-items: center;\n gap: 24px;\n cursor: pointer;\n @include hover;\n > button {\n height: 100%;\n width: 100%;\n }\n .price {\n font-weight: 700;\n }\n }\n }\n &_content {\n height: 100%;\n overflow: auto;\n padding: 0 32px 64px;\n &--5 {\n padding-top: 16px;\n }\n &--painting {\n padding: 0;\n overflow: initial;\n }\n }\n &_crumbs {\n position: relative;\n padding: 16px 24px;\n border-bottom: $border;\n display: flex;\n justify-content: space-between;\n &--back {\n padding: 16px 24px 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n box-shadow: none !important;\n @include hover;\n }\n img {\n cursor: pointer;\n }\n .close {\n position: absolute;\n right: -16px;\n top: -16px;\n z-index: 9;\n -webkit-transform: translate3d(0, 0, 0);\n }\n .cart {\n display: flex;\n padding-left: 16px;\n img {\n cursor: inherit;\n }\n @include cartLength;\n &_active {\n cursor: pointer;\n span {\n background: $green;\n color: $white;\n }\n }\n }\n &--links {\n display: flex;\n align-items: center;\n gap: 16px;\n overflow: auto;\n @include desktop {\n &::-webkit-scrollbar {\n display: none;\n }\n\n &::-webkit-scrollbar-button {\n display: none;\n }\n -ms-overflow-style: none;\n }\n }\n &--right {\n display: flex;\n align-items: center;\n }\n button {\n white-space: nowrap;\n background: $pink;\n border-radius: 64px;\n padding: 12px 16px;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.3px;\n box-shadow: none !important;\n &:not(.active) {\n @include hover;\n }\n @include mobile {\n display: none;\n }\n }\n .active {\n background: $yellow;\n cursor: default;\n // border: 1px solid $pink;\n }\n }\n &_features {\n gap: 12px !important;\n li {\n display: flex;\n gap: 16px;\n align-items: center;\n }\n }\n &_address {\n margin-bottom: 16px;\n }\n &_product {\n display: grid;\n gap: 16px;\n &--link {\n font-weight: 700;\n color: $black;\n text-underline-offset: 4px;\n }\n &--left {\n gap: 32px;\n }\n &--right {\n gap: 32px;\n }\n &--price {\n margin-top: 4px;\n font-weight: 700;\n }\n &--total {\n text-align: center;\n margin: -16px 0;\n font-size: 21px;\n line-height: 28px;\n }\n &--item {\n background: $white;\n padding: 16px;\n display: grid;\n grid-template-columns: auto 75px;\n box-shadow: $box-shadow;\n }\n &--grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 32px;\n @include mobile {\n grid-template-columns: 1fr;\n }\n > div {\n display: flex;\n flex-direction: column;\n }\n ul {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n }\n p {\n margin: 0;\n }\n &--top {\n img {\n object-fit: contain;\n }\n > div {\n width: 100%;\n h1 {\n max-width: 80%;\n @include mobile {\n max-width: 100%;\n }\n }\n }\n display: flex;\n gap: 32px;\n h4 {\n margin-bottom: 8px;\n }\n }\n }\n }\n h5,\n p {\n margin: 0;\n }\n input[type='submit'] {\n cursor: pointer;\n }\n input[type='date'] ~ label {\n left: 56px;\n }\n input[type='date'] {\n border: 1px solid $darkyellow;\n padding-left: 64px;\n }\n input[type='checkbox'] {\n height: 18px;\n width: 18px;\n border: $border;\n }\n input[type='checkbox']:checked {\n background: red;\n }\n input[type='date']::-webkit-calendar-picker-indicator {\n background: transparent;\n bottom: 0;\n color: transparent;\n cursor: pointer;\n height: auto;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n width: auto;\n }\n button,\n a {\n cursor: pointer;\n background: none;\n border: none;\n }\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n}\n","import { Component, Element, Fragment, Listen, Prop, State, Watch, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Business, Product, WidgetStyle } from '../../types';\nimport { getCustomer, getGreenDiscount, getOptions, getRot, getRut, loginCustomer } from '../../utils/api';\nimport { getProductPriceWithRotAndRut } from '../../utils/calc';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-component',\n styleUrl: 'hemfixarna.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class HemfixarnaComponent {\n @State() modal: boolean = false;\n @State() showModal: boolean = false;\n @State() product: Product | null = null;\n @Prop() id?: string;\n @Prop() slug?: string;\n @Prop() business: Business;\n @Prop() widgetStyle: WidgetStyle = WidgetStyle.standard;\n @Prop() buttonColor?: string;\n @Prop() buttonBg?: string;\n @State() proppedProduct: Product | null = null;\n @State() loginSourceError: null | string = null;\n\n @Element() private el: HTMLElement;\n\n loadCategoryOrProduct(id: string) {\n this.proppedProduct = null;\n if (id.startsWith('c-')) {\n const categories = [...state.customer.categories, ...state.customer.categories.map(c => c.sub_categories ?? [])].flat();\n const category = categories.find(c => c && c.id === id.replace('c-', ''));\n if (category) {\n state.selectedCustomerCategory = category;\n state.step = 2;\n }\n } else {\n const products = state.customer.categories\n .map(c => (c.show_products ? c.products : c.sub_categories ? c.sub_categories.map(c => c.products) : []))\n .flat()\n .flat();\n const product = products.find(p => p && p.fields.ID === parseInt(id));\n if (product) {\n state.selectedProduct = product.fields;\n state.step = 4;\n this.proppedProduct = product.fields;\n }\n }\n }\n\n @Watch('id')\n async watchIdChange(id: string) {\n if (id && state.customer) {\n if (id === 'maleri') {\n state.maleri = true;\n state.step = 4;\n } else {\n this.loadCategoryOrProduct(id);\n }\n }\n }\n\n async componentWillLoad() {\n state.business = this.business;\n const cart = window.sessionStorage.getItem(`hemfixarna-${this.business}-cart`);\n if (cart) {\n state.cart = JSON.parse(cart);\n }\n const user = window.sessionStorage.getItem(`hemfixarna-${this.business}-user`);\n if (user) {\n state.user = JSON.parse(user);\n }\n const creditSafeUser = window.sessionStorage.getItem(`hemfixarna-${this.business}-creditSafeUser`);\n if (creditSafeUser) {\n state.creditSafeUser = JSON.parse(creditSafeUser);\n }\n\n const [options, rut, rot, greenDiscount] = await Promise.all([getOptions(), getRut(), getRot(), getGreenDiscount()]);\n\n try {\n const customer = await getCustomer(this.business);\n if (customer?.code === 'not_found') {\n console.warn('customer not found');\n } else if (customer) {\n state.customer = customer;\n const id = this.id || this.slug;\n if (id) {\n if (id === 'maleri') {\n state.maleri = true;\n state.step = 4;\n } else {\n this.loadCategoryOrProduct(id);\n }\n }\n }\n } catch (error) {\n console.warn('customer not found');\n }\n\n state.rotOptions = rot;\n state.rutOptions = rut;\n state.greenOptions = greenDiscount;\n state.options = options;\n\n if (localStorage.getItem('select_source')) {\n state.selectSource = true;\n }\n }\n\n triggerScrollTotop = () => {\n const el = this.el.shadowRoot.querySelector('.hemfixarna_content');\n scrollToTop(el);\n };\n\n // Open close modal && click outside event\n openModal() {\n if (this.id) {\n if (this.id === 'maleri') {\n state.maleri = true;\n state.step = 4;\n } else {\n state.maleri = false;\n this.loadCategoryOrProduct(this.id);\n }\n }\n this.modal = true;\n setTimeout(() => {\n this.showModal = true;\n }, 50);\n }\n closeModal() {\n this.showModal = false;\n setTimeout(() => {\n this.modal = false;\n }, 200);\n }\n @Listen('click')\n handleClick(e: Event) {\n if ((e?.composedPath()[0] as HTMLElement).classList.contains('hemfixarna_backdrop')) {\n this.closeModal();\n }\n const infomodal = this.el.shadowRoot.querySelector('.hemfixarna_infomodal');\n if (infomodal) {\n const isClickInside = infomodal.contains(e.composedPath()[0] as HTMLInputElement);\n if (!isClickInside) {\n state.modal = null;\n }\n }\n }\n\n async handleLogin() {\n this.loginSourceError = null;\n const passwordInput = this.el.shadowRoot.querySelector('input[type=\"password\"]');\n const password = (passwordInput as HTMLInputElement).value;\n\n try {\n const status = await loginCustomer({ id: state.customer.ID, password: password });\n if (status === 200) {\n state.showSourcePasswordPrompt = false;\n state.selectSource = true;\n } else {\n this.loginSourceError = 'Fel lösenord';\n }\n } catch (error) {\n console.log(error);\n this.loginSourceError = 'Fel lösenord';\n }\n }\n\n getCartLength() {\n return state.cart.reduce((acc, curr) => acc + curr.amount, 0);\n }\n\n render() {\n const logo = getAssetPath(`./assets/hemfixarna.svg`);\n const pensel = getAssetPath(`./assets/pensel.svg`);\n const monteringLogo = getAssetPath(`./assets/montering.svg`);\n\n return (\n <div class={`hemfixarna hemfixarna-${this.business}`}>\n <div class={`hemfixarna_box hemfixarna_box--${this.widgetStyle}`}>\n {[WidgetStyle.alternative_2, WidgetStyle.alternative_3].includes(this.widgetStyle) ? (\n <img src={this.id === 'maleri' ? pensel : monteringLogo} alt=\"montering logo\" width={32} height={32} />\n ) : null}\n <div>\n <div>\n <p\n onClick={() => this.openModal()}\n class={`pointer ${[WidgetStyle.alternative_2, WidgetStyle.alternative_3].includes(this.widgetStyle) && state.selectedProduct ? 'underline' : ''}`}\n >\n {this.id === 'maleri' ? (\n <span>Beräkna fast pris på måleri & tapetsering här</span>\n ) : (\n <Fragment>\n {!state.selectedCustomerCategory && !this.product && !this.proppedProduct ? (\n <Fragment>\n {state.customer?.widget_title ? (\n <span>{state.customer.widget_title}</span>\n ) : (\n <span>\n Montering/Installation - <strong class=\"underline\">se priser här</strong>\n </span>\n )}\n </Fragment>\n ) : (\n <Fragment>\n {this.product?.title || this.proppedProduct?.title || state.selectedCustomerCategory?.widget_title || (\n <span>\n Montering\n <wbr />\n /Installation {state.selectedCustomerCategory?.name ?? 'på plats'} - <strong class=\"underline\">se priser här</strong>\n </span>\n )}\n {this.proppedProduct && !this.product?.invoice && !this.proppedProduct?.invoice ? (\n <span>\n {' från'} <strong>{getProductPriceWithRotAndRut(this.proppedProduct || this.product)}kr</strong>\n </span>\n ) : null}\n </Fragment>\n )}\n </Fragment>\n )}\n </p>\n </div>\n {this.widgetStyle === WidgetStyle.standard ? <img src={logo} width={104} /> : null}\n {this.widgetStyle === WidgetStyle.alternative ? (\n <span class=\"p-s\">\n Utförs av <strong>Hemfixarna</strong>\n </span>\n ) : null}\n </div>\n {[WidgetStyle.standard, WidgetStyle.alternative].includes(this.widgetStyle) ? (\n <button\n onClick={() => this.openModal()}\n class=\"hemfixarna_btn\"\n style={{\n color: this.buttonColor?.startsWith('#') || !this.buttonColor?.length ? this.buttonColor : `#${this.buttonColor}`,\n backgroundColor: this.buttonBg?.startsWith('#') || !this.buttonBg?.length ? this.buttonBg : `#${this.buttonBg}`,\n }}\n >\n Beställ här\n {this.getCartLength() > 0 && <span>{this.getCartLength()}</span>}\n </button>\n ) : null}\n {WidgetStyle.alternative_2 === this.widgetStyle ? (\n <div class=\"hemfixarna_altbtn\">\n <strong class=\"p-s\">Utförs av</strong>\n <img src={logo} alt=\"hemfixarna logo\" width={98} />\n </div>\n ) : null}\n </div>\n {this.modal && (\n <div>\n <div class={`hemfixarna_modal ${this.showModal ? 'hemfixarna_modal--open' : ''}`}>\n {state.modal && (\n <div class=\"hemfixarna_infomodal\">\n {state.modal.title && <h2>{state.modal.title}</h2>}\n <p innerHTML={state.modal.text}></p>\n <div>\n <button onClick={() => (state.modal = null)}>Stäng</button>\n </div>\n </div>\n )}\n {state.showSourcePasswordPrompt ? (\n <div class=\"hemfixarna_source--pw hemfixarna_infomodal\">\n <form\n onSubmit={e => {\n e.preventDefault();\n this.handleLogin();\n }}\n >\n <input type=\"password\" placeholder=\"Lösenord\" />\n <input type=\"submit\" value=\"Logga in\" />\n {this.loginSourceError && <span>Fel lösenord</span>}\n </form>\n </div>\n ) : null}\n {state.customer && <hemfixarna-breadcrumbs closeModal={() => this.closeModal()} />}\n <div class={`hemfixarna_content hemfixarna_content--${state.step} ${state.step === 4 && state.maleri ? 'hemfixarna_content--painting' : ''}`}>\n {state.step < 4 && <hemfixarna-start />}\n {/* // IF SELECTED PRODUCT (step 4) */}\n {state.step === 4 && <hemfixarna-product />}\n {/* // IF CHECKOUT (step 5) */}\n {state.step === 5 && <hemfixarna-cart />}\n {/* // IF ORDER CONFIRM (step 6) */}\n {state.step === 6 && <hemfixarna-order />}\n </div>\n </div>\n <div class={`hemfixarna_backdrop ${this.showModal ? 'hemfixarna_backdrop--open' : ''}`}></div>\n </div>\n )}\n </div>\n );\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport state from '../../store';\n\n@Component({\n tag: 'hemfixarna-contact',\n shadow: false,\n})\nexport class HemfixarnaInfo {\n @Prop() vertical?: boolean = false;\n\n render() {\n return (\n <div class={`hemfixarna_contact ${this.vertical ? 'hemfixarna_contact--vertical' : 'hemfixarna_contact--horizontal'}`}>\n {state.customer.source ? (\n <div\n onClick={() => {\n if (!state.selectSource) {\n state.showSourcePasswordPrompt = true;\n }\n }}\n class=\"hemfixarna_source\"\n >\n {state.selectSource ? (\n <svg viewBox=\"0 0 1024 1024\" fill=\"#C84E18\" height=\"1em\" width=\"1em\">\n <path d=\"M832 464H332V240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v68c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-68c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM540 701v53c0 4.4-3.6 8-8 8h-40c-4.4 0-8-3.6-8-8v-53a48.01 48.01 0 1156 0z\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 1024 1024\" fill=\"#C84E18\" height=\"1em\" width=\"1em\">\n <path d=\"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM540 701v53c0 4.4-3.6 8-8 8h-40c-4.4 0-8-3.6-8-8v-53a48.01 48.01 0 1156 0zm152-237H332V240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224z\" />\n </svg>\n )}\n </div>\n ) : null}\n <a href=\"tel:0770-220 720\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7 4V20H17V4H7ZM6 2H18C18.5523 2 19 2.44772 19 3V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V3C5 2.44772 5.44772 2 6 2ZM12 17C12.5523 17 13 17.4477 13 18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18C11 17.4477 11.4477 17 12 17Z\"\n fill=\"#C84E18\"\n />\n </svg>\n <span>0770-220 720</span>\n </a>\n <a href=\"https://hemfixarna.se/kundservice/\" target=\"_blank\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_1001_894)\">\n <path\n d=\"M21 12.22C21 6.73 16.74 3 12 3C7.31 3 3 6.65 3 12.28C2.4 12.62 2 13.26 2 14V16C2 17.1 2.9 18 4 18H5V11.9C5 8.03 8.13 4.9 12 4.9C15.87 4.9 19 8.03 19 11.9V19H11V21H19C20.1 21 21 20.1 21 19V17.78C21.59 17.47 22 16.86 22 16.14V13.84C22 13.14 21.59 12.53 21 12.22Z\"\n fill=\"#C84E18\"\n />\n <path d=\"M9 14C9.55228 14 10 13.5523 10 13C10 12.4477 9.55228 12 9 12C8.44772 12 8 12.4477 8 13C8 13.5523 8.44772 14 9 14Z\" fill=\"#C84E18\" />\n <path d=\"M15 14C15.5523 14 16 13.5523 16 13C16 12.4477 15.5523 12 15 12C14.4477 12 14 12.4477 14 13C14 13.5523 14.4477 14 15 14Z\" fill=\"#C84E18\" />\n <path\n d=\"M18 11.03C17.52 8.18 15.04 6 12.05 6C9.01997 6 5.75997 8.51 6.01997 12.45C8.48997 11.44 10.35 9.24 10.88 6.56C12.19 9.19 14.88 11 18 11.03Z\"\n fill=\"#C84E18\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1001_894\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <span>Kundservice</span>\n </a>\n </div>\n );\n }\n}\n","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap');\n\n:host {\n font-family: 'Inter', sans-serif;\n\n .hemfixarna {\n &_widgetstyles {\n label {\n cursor: pointer;\n }\n > div {\n display: flex;\n gap: 1rem;\n }\n h5 {\n margin: 1rem 0;\n }\n }\n &_example {\n margin-bottom: 16px;\n background: #000;\n padding: 16px;\n color: #fff;\n display: flex;\n justify-content: space-between;\n cursor: pointer;\n max-width: 500px;\n box-sizing: border-box;\n position: relative;\n\n &--tooltip {\n background: #000;\n top: -48px;\n font-size: 16px;\n left: 40%;\n color: white;\n padding: 8px;\n position: absolute;\n opacity: 0;\n &::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-color: #000 transparent transparent transparent;\n }\n }\n &:hover {\n .hemfixarna_example--tooltip {\n opacity: 1;\n }\n }\n p {\n font-size: 14px;\n }\n img {\n filter: invert(1);\n }\n }\n &_install {\n display: grid;\n gap: 8px;\n margin-top: 16px;\n }\n &_product--label {\n background: #e1e0f5;\n }\n &_categories {\n max-height: 100%;\n overflow: auto;\n position: relative;\n &--label {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px;\n button {\n background: #3f3a92;\n border: none;\n font-weight: 600;\n padding: 3.2px 9.6px;\n border-radius: 10px;\n margin-right: 8px;\n color: #ece8e8;\n &:active {\n transform: scale(0.95);\n }\n }\n &--big {\n font-weight: 600;\n border-bottom: 1px solid black;\n }\n }\n }\n }\n p {\n margin: 0;\n }\n span {\n color: darkolivegreen;\n font-size: 10px;\n }\n button {\n cursor: pointer;\n }\n > div:not(.hemfixarna_hosted) {\n grid-template-columns: 1fr 1fr;\n }\n .hemfixarna_hosted {\n .hemfixarna_scripts {\n display: none;\n }\n }\n > div {\n display: grid;\n gap: 32px;\n width: 100%;\n height: 100vh;\n place-items: center;\n overflow: hidden;\n padding: 16px 32px;\n box-sizing: border-box;\n > * {\n width: 100%;\n }\n > div {\n max-width: 500px;\n }\n ul {\n margin: 0;\n padding: 0;\n list-style: none;\n ul {\n gap: 1px;\n display: grid;\n }\n li {\n padding-left: 16px;\n background: #fff;\n }\n }\n }\n}\n","import { Component, Fragment, State, Watch, getAssetPath, h } from '@stencil/core';\nimport { Business, Category, Customer, WidgetStyle } from '../../types';\nimport { getCustomer, loginCustomer } from '../../utils/api';\nimport { getApiUrl } from '../../utils/enviroment';\nimport { isBusiness } from '../../utils/types';\n\ninterface ColorAccessibility {\n small: string;\n bold: string;\n large: string;\n overall: string;\n contrast: string;\n}\n\n@Component({\n tag: 'hemfixarna-demo',\n styleUrl: 'hemfixarna-demo.scss',\n shadow: true,\n})\nexport class MyComponent {\n @State() selectedSlug: string;\n @State() selectedID: string;\n @State() tooltipText: string = 'Kopiera till urklipp';\n @State() tree: Category | null = null;\n @State() customer: Customer | null = null;\n @State() widgetStyle: WidgetStyle = WidgetStyle.standard;\n @State() buttonBg: string = '';\n @State() buttonColor: string = '';\n @State() partner: Business | undefined = undefined;\n @State() colorAccessibility?: ColorAccessibility = undefined;\n @State() loggedIn: boolean = false;\n @State() loginError: boolean = false;\n private debounce?: number = null;\n\n @Watch('buttonBg')\n @Watch('buttonColor')\n debouncedFunction() {\n if (this.debounce !== null) {\n clearTimeout(this.debounce);\n this.debounce = null;\n }\n\n this.debounce = window.setTimeout(() => {\n this.checkColorAccessibility();\n this.debounce = null;\n }, 1500);\n }\n\n async checkColorAccessibility() {\n const defaultTextColor = '#fff';\n const defaultBgColor = '#c84e18';\n const firstColor = this.buttonBg.length ? (this.buttonBg.startsWith('#') ? this.buttonBg : `#${this.buttonBg}`) : defaultBgColor;\n const secondColor = this.buttonColor.length ? (this.buttonColor.startsWith('#') ? this.buttonColor : `#${this.buttonColor}`) : defaultTextColor;\n try {\n const response = await fetch('https://www.aremycolorsaccessible.com/api/are-they', {\n mode: 'cors',\n method: 'POST',\n body: JSON.stringify({ colors: [firstColor, secondColor] }),\n });\n\n if (!response) {\n throw new Error('Network response was not ok');\n }\n\n const json = await response.json();\n if (json && (json satisfies ColorAccessibility)) {\n this.colorAccessibility = json;\n }\n } catch (error) {\n console.warn('Error fetching color accessibility:', error);\n }\n }\n\n getColor(rating: string) {\n switch (rating) {\n case 'AAA':\n return 'green';\n case 'AA':\n return 'orange';\n case 'A':\n return 'yellow';\n case 'Fail':\n return 'red';\n default:\n return 'black';\n }\n }\n\n async componentWillLoad() {\n const partner = window.location.pathname.replace('/', '');\n if (!isBusiness(partner) && partner) return;\n this.partner = partner ? (partner as Business) : Business.kund;\n const customer = await getCustomer(this.partner);\n if (customer.code !== 'not_found' && customer) {\n this.customer = customer;\n if (!this.customer.password_protected || window.localStorage.getItem(`${this.customer.ID}-loggedin`)) {\n this.loggedIn = true;\n }\n }\n }\n\n getExample() {\n return `<hemfixarna-component business=\"${this.partner}\"${this.selectedSlug ? ` slug=\"${this.selectedSlug}\" ` : ''}${this.selectedID ? ` id=\"${this.selectedID}\" ` : ''} ${\n this.widgetStyle === WidgetStyle.standard ? '' : `widget-style=\"${this.widgetStyle}\"`\n } ${this.buttonColor.length ? `button-color=\"${this.buttonColor}\"` : ''} ${this.buttonBg.length ? `button-bg=\"${this.buttonBg}\"` : ''}></hemfixarna-component>`;\n }\n\n copyExample() {\n navigator.clipboard.writeText(this.getExample());\n this.tooltipText = 'Snippet kopierad';\n setTimeout(() => {\n this.tooltipText = 'Kopiera till urklipp';\n }, 2000);\n }\n\n cdnLink = '<script type=\"module\" src=\"https://cdn.jsdelivr.net/npm//hemfixarna-web-components@latest/dist/hemfixarna-components/hemfixarna-components.esm.js\"></script>';\n\n copyCdn() {\n navigator.clipboard.writeText(this.cdnLink);\n this.tooltipText = 'Text kopierad';\n setTimeout(() => {\n this.tooltipText = 'Kopiera till urklipp';\n }, 2000);\n }\n\n copyNpmInstall() {\n navigator.clipboard.writeText('npm i hemfixarna-web-components');\n this.tooltipText = 'Text kopierad';\n setTimeout(() => {\n this.tooltipText = 'Kopiera till urklipp';\n }, 2000);\n }\n\n showMaleri() {\n const allCategories = this.customer?.categories.map(c => (c.sub_categories ? c.sub_categories : c)).flat();\n return allCategories?.some(c => c.add_painting);\n }\n\n async handleLogin() {\n const shadowHost = document.querySelector('hemfixarna-demo');\n const shadowRoot = shadowHost.shadowRoot;\n const passwordInput = shadowRoot.querySelector('input[type=\"password\"]');\n const password = (passwordInput as HTMLInputElement).value;\n\n this.loginError = false;\n try {\n const status = await loginCustomer({ id: this.customer.ID, password: password });\n if (status === 200) {\n this.loggedIn = true;\n window.localStorage.setItem(`${this.customer.ID}-loggedin`, 'true');\n } else {\n this.loginError = true;\n }\n } catch (error) {\n console.log(error);\n this.loginError = true;\n }\n }\n\n render() {\n const copy = getAssetPath(`./assets/copy.png`);\n\n return this.customer ? (\n <Fragment>\n {this.loggedIn ? (\n <div class={this.customer?.at_hemfixarna ? 'hemfixarna_hosted' : ''}>\n <div class=\"hemfixarna_scripts\">\n <div onClick={() => this.copyExample()} class=\"hemfixarna_example\">\n <p>{this.getExample()}</p>\n <img src={copy} height={20} />\n <span class=\"hemfixarna_example--tooltip\">{this.tooltipText}</span>\n </div>\n <hemfixarna-component\n business={this.partner}\n buttonBg={this.buttonBg}\n buttonColor={this.buttonColor}\n widgetStyle={this.widgetStyle}\n id={this.selectedID}\n ></hemfixarna-component>\n <div class=\"hemfixarna_install\">\n <div onClick={() => this.copyCdn()} class=\"hemfixarna_example\">\n <p>{this.cdnLink}</p>\n <span class=\"hemfixarna_example--tooltip\">{this.tooltipText}</span>\n <img src={copy} height={20} />\n </div>\n </div>\n <div class=\"hemfixarna_widgetstyles\">\n <h5>Widget styles</h5>\n <div>\n {Object.values(WidgetStyle).map(style => (\n <label key={style}>\n <input type=\"radio\" value={style} checked={this.widgetStyle === style} onChange={() => (this.widgetStyle = style)} />\n {style}\n </label>\n ))}\n </div>\n <div>\n <div>\n <h5>Button background color</h5>\n <input type=\"text\" value={this.buttonBg} onInput={e => (this.buttonBg = (e.target as HTMLInputElement).value)} />\n </div>\n <div>\n <h5>Button text color</h5>\n <input type=\"text\" value={this.buttonColor} onInput={e => (this.buttonColor = (e.target as HTMLInputElement).value)} />\n </div>\n </div>\n </div>\n <span>Write an hexa code no # needed</span>\n {this.colorAccessibility ? (\n <div>\n <h5>Tillgänglighetsrapport</h5>\n <div>\n <strong>Liten text:</strong>\n <span style={{ color: this.getColor(this.colorAccessibility.small) }}>{this.colorAccessibility.small}</span>\n <br />\n <strong>Fet text:</strong>\n <span style={{ color: this.getColor(this.colorAccessibility.bold) }}>{this.colorAccessibility.bold}</span>\n <br />\n <strong>Stor text:</strong>\n <span style={{ color: this.getColor(this.colorAccessibility.large) }}>{this.colorAccessibility.large}</span>\n <br />\n <strong>Kontrastförhållande:</strong> {this.colorAccessibility.contrast}\n </div>\n </div>\n ) : null}\n </div>\n <ul class=\"hemfixarna_categories\">\n <div>\n {this.customer.logo ? (\n <div style={{ width: '100%', display: 'flex', justifyContent: 'center' }}>\n <img style={{ maxWidth: '250px', height: 'auto', margin: '0 auto 2rem' }} src={this.customer.logo.url} alt={this.customer.post_title} />\n </div>\n ) : null}\n {this.showMaleri() ? (\n <li>\n <div class=\"hemfixarna_categories--label hemfixarna_categories--label--big\">\n <div>\n <p>Måleriverktyget</p>\n <span>maleri</span>\n </div>\n <div>\n <button onClick={() => navigator.clipboard.writeText('maleri')}>Kopiera ID</button>\n {this.customer.at_hemfixarna ? (\n <button onClick={() => navigator.clipboard.writeText(`${getApiUrl()}/partner/${this.customer.post_name}?id=maleri`)}>Kopiera URL</button>\n ) : (\n <button onClick={() => (this.selectedID = 'maleri')}>Ladda måleri</button>\n )}\n </div>\n </div>\n </li>\n ) : null}\n {this.customer.categories.map(c => (\n <li>\n <div class=\"hemfixarna_categories--label hemfixarna_categories--label--big\">\n <div>\n <p>{c.name}</p>\n <span>{`c-${c.id}`}</span>\n </div>\n <div>\n <button onClick={() => navigator.clipboard.writeText(`c-${c.id}`)}>Kopiera ID</button>\n {this.customer.at_hemfixarna ? (\n <button onClick={() => navigator.clipboard.writeText(`${getApiUrl()}/partner/${this.customer.post_name}?id=c-${c.id}`)}>Kopiera URL</button>\n ) : (\n <button onClick={() => (this.selectedID = `c-${c.id}`)}>Ladda kategori</button>\n )}\n </div>\n </div>\n {c.show_products && c.products ? (\n <ul>\n {c.products.map(p => (\n <li>\n <div class=\"hemfixarna_categories--label hemfixarna_product--label\">\n <div>\n <p>{p.fields.title}</p>\n <span>{p.fields.ID}</span>\n </div>\n <div>\n <button onClick={() => navigator.clipboard.writeText(String(p.fields.ID))}>Kopiera ID</button>\n {this.customer.at_hemfixarna ? (\n <button onClick={() => navigator.clipboard.writeText(`${getApiUrl()}/partner/${this.customer.post_name}?id=${p.fields.ID}`)}>Kopiera URL</button>\n ) : (\n <button onClick={() => (this.selectedID = String(p.fields.ID))}>Ladda produkt</button>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n ) : (\n <ul>\n {c.sub_categories &&\n c.sub_categories.map(sc => (\n <li>\n <div class=\"hemfixarna_categories--label\">\n <div>\n <p>{sc.name}</p>\n <span>{`c-${sc.id}`}</span>\n </div>\n <div>\n <button onClick={() => navigator.clipboard.writeText(`c-${sc.id}`)}>Kopiera ID</button>\n {this.customer.at_hemfixarna ? (\n <button onClick={() => navigator.clipboard.writeText(`${getApiUrl()}/partner/${this.customer.post_name}?id=c-${c.id}`)}>Kopiera URL</button>\n ) : (\n <button onClick={() => (this.selectedID = `c-${sc.id}`)}>Ladda kategori</button>\n )}\n </div>\n </div>\n <ul>\n {sc.products.map(p => (\n <li>\n <div class=\"hemfixarna_categories--label hemfixarna_product--label\">\n <div>\n <p>{p.fields.title}</p>\n <span>{p.fields.ID}</span>\n </div>\n <div>\n <button onClick={() => navigator.clipboard.writeText(String(p.fields.ID))}>Kopiera ID</button>\n {this.customer.at_hemfixarna ? (\n <button onClick={() => navigator.clipboard.writeText(`${getApiUrl()}/partner/${this.customer.post_name}?id=${p.fields.ID}`)}>\n Kopiera URL\n </button>\n ) : (\n <button onClick={() => (this.selectedID = String(p.fields.ID))}>Ladda produkt</button>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </div>\n </ul>\n </div>\n ) : (\n <div>\n <form\n onSubmit={e => {\n e.preventDefault();\n this.handleLogin();\n }}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n maxWidth: '300px',\n margin: 'auto',\n padding: '20px',\n border: '1px solid #ccc',\n borderRadius: '5px',\n gridColumn: 'span 2',\n }}\n >\n <input type=\"password\" placeholder=\"Lösenord\" />\n <button type=\"submit\">Logga in</button>\n {this.loginError && <span>Fel lösenord</span>}\n </form>\n </div>\n )}\n </Fragment>\n ) : (\n <h1\n style={{\n textAlign: 'center',\n margin: 'auto',\n padding: '20px',\n fontSize: '24px',\n fontWeight: 'bold',\n color: 'red',\n }}\n >\n No customer found\n </h1>\n );\n }\n}\n","// src/errors.ts\nvar PersonnummerError = class extends Error {\n constructor() {\n super(\"Invalid swedish personal identity number\");\n }\n};\n\n// src/utils.ts\nvar compareAsc = (dateLeft, dateRight) => {\n const diff = dateLeft.getTime() - dateRight.getTime();\n return diff < 0 ? -1 : diff > 0 ? 1 : diff;\n};\nvar diffInYears = (dateLeft, dateRight) => {\n const sign = compareAsc(dateLeft, dateRight);\n const yearDiff = Math.abs(dateLeft.getFullYear() - dateRight.getFullYear());\n dateLeft.setFullYear(dateLeft.getFullYear() - sign * yearDiff);\n const isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n const result = sign * (yearDiff - +isLastYearNotFull);\n return result === 0 ? 0 : result;\n};\nvar luhn = (str) => {\n let sum = 0;\n str += \"\";\n for (let i = 0, l = str.length; i < l; i++) {\n let v = parseInt(str[i]);\n v *= 2 - i % 2;\n if (v > 9) {\n v -= 9;\n }\n sum += v;\n }\n return Math.ceil(sum / 10) * 10 - sum;\n};\nvar testDate = (year, month, day) => {\n month -= 1;\n const date = new Date(year, month, day);\n return !(date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day);\n};\n\n// src/index.ts\nvar Personnummer = class {\n /**\n * Personnummer constructor.\n *\n * @param {string} pin\n * @param {object} options\n */\n constructor(pin, options) {\n /**\n * Personnummer century.\n *\n * @var {string}\n */\n this._century = \"\";\n /**\n * Personnummer full year.\n *\n * @var {string}\n */\n this._fullYear = \"\";\n /**\n * Personnummer year.\n *\n * @var {string}\n */\n this._year = \"\";\n /**\n * Personnummer month.\n *\n * @var {string}\n */\n this._month = \"\";\n /**\n * Personnummer day.\n *\n * @var {string}\n */\n this._day = \"\";\n /**\n * Personnummer seperator.\n *\n * @var {string}\n */\n this._sep = \"\";\n /**\n * Personnumer first three of the last four numbers.\n *\n * @var {string}\n */\n this._num = \"\";\n /**\n * The last number of the personnummer.\n *\n * @var {string}\n */\n this._check = \"\";\n this.parse(pin, {\n allowCoordinationNumber: true,\n allowInterimNumber: false,\n ...options\n });\n }\n /**\n * Get century.\n *\n * @return {string}\n */\n get century() {\n return this._century;\n }\n /**\n * Get age.\n *\n * @return {string}\n */\n get fullYear() {\n return this._fullYear;\n }\n /**\n * Get age.\n *\n * @return {string}\n */\n get year() {\n return this._year;\n }\n /**\n * Get month.\n *\n * @return {string}\n */\n get month() {\n return this._month;\n }\n /**\n * Get day.\n *\n * @return {string}\n */\n get day() {\n return this._day;\n }\n /**\n * Get sep.\n *\n * @return {string}\n */\n get sep() {\n return this._sep;\n }\n /**\n * Get num.\n *\n * @return {string}\n */\n get num() {\n return this._num;\n }\n /**\n * Get check.\n *\n * @return {string}\n */\n get check() {\n return this._check;\n }\n /**\n * Parse personnummer.\n *\n * @param {string} pin\n * @param {object} options\n *\n * @return {Personnummer}\n */\n static parse(pin, options) {\n return new Personnummer(pin, options);\n }\n /**\n * Validate a Swedish personal identity number.\n *\n * @param {string} str\n * @param {object} options\n *\n * @return {boolean}\n */\n static valid(pin, options) {\n try {\n Personnummer.parse(pin, options);\n return true;\n } catch (e) {\n return false;\n }\n }\n /**\n * Parse personnummer and set class properties.\n *\n * @param {string} pin\n * @param {object} options\n */\n parse(pin, options) {\n if (pin.length < 10 || pin.length > 13) {\n throw new PersonnummerError();\n }\n const reg = /^(\\d{2}){0,1}(\\d{2})(\\d{2})(\\d{2})([+-]?)((?!000)\\d{3}|[TRSUWXJKLMN]\\d{2})(\\d)$/;\n const match = reg.exec(pin);\n if (!match) {\n throw new PersonnummerError();\n }\n const century = match[1];\n const year = match[2];\n const month = match[3];\n const day = match[4];\n const sep = match[5];\n const num = match[6];\n const check = match[7];\n if (typeof century === \"undefined\" || !century.length) {\n const d = /* @__PURE__ */ new Date();\n let baseYear = 0;\n if (sep === \"+\") {\n this._sep = \"+\";\n baseYear = d.getFullYear() - 100;\n } else {\n this._sep = \"-\";\n baseYear = d.getFullYear();\n }\n this._century = (\"\" + (baseYear - (baseYear - parseInt(year)) % 100)).substr(0, 2);\n } else {\n this._century = century;\n if ((/* @__PURE__ */ new Date()).getFullYear() - parseInt(century + year, 10) < 100) {\n this._sep = \"-\";\n } else {\n this._sep = \"+\";\n }\n }\n this._year = year;\n this._fullYear = this._century + year;\n this._month = month;\n this._day = day;\n this._num = num;\n this._check = check;\n if (!this.valid()) {\n throw new PersonnummerError();\n }\n if (!(options == null ? void 0 : options.allowCoordinationNumber) && this.isCoordinationNumber()) {\n throw new PersonnummerError();\n }\n if (!(options == null ? void 0 : options.allowInterimNumber) && this.isInterimNumber()) {\n throw new PersonnummerError();\n }\n }\n /**\n * Validate a Swedish personal identity number.\n *\n * @return {boolean}\n */\n valid() {\n const valid = luhn(\n this.year + this.month + this.day + this.num.replace(/[TRSUWXJKLMN]/, \"1\")\n ) === +this.check && !!this.check;\n if (valid && testDate(parseInt(this.century + this.year), +this.month, +this.day)) {\n return valid;\n }\n return valid && testDate(parseInt(this.century + this.year), +this.month, +this.day - 60);\n }\n /**\n * Format a Swedish personal identity number as one of the official formats,\n * A long format or a short format.\n *\n * If the input number could not be parsed a empty string will be returned.\n *\n * @param {boolean} longFormat\n *\n * @return {string}\n */\n format(longFormat = false) {\n if (longFormat) {\n return `${this.century}${this.year}${this.month}${this.day}${this.num}${this.check}`;\n }\n return `${this.year}${this.month}${this.day}${this.sep}${this.num}${this.check}`;\n }\n /**\n * Get age from a Swedish personal identity number.\n *\n * @return {number}\n */\n getAge() {\n const date = this.getDate();\n return diffInYears(new Date(Date.now()), date);\n }\n /**\n * Get date from a Swedish personal identity number.\n *\n * @return {Date}\n */\n getDate() {\n let ageDay = +this.day;\n if (this.isCoordinationNumber()) {\n ageDay -= 60;\n }\n const ageDate = this.century + this.year + \"-\" + this.month + \"-\" + (ageDay < 10 ? \"0\" + ageDay : ageDay);\n return new Date(ageDate);\n }\n /**\n * Check if a Swedish personal identity number is a interim number or not.\n *\n * @return {boolean}\n */\n isInterimNumber() {\n return /[TRSUWXJKLMN]/.test(this.num[0]);\n }\n /**\n * Check if a Swedish personal identity number is a coordination number or not.\n *\n * @return {boolean}\n */\n isCoordinationNumber() {\n return testDate(\n parseInt(this.century + this.year),\n +this.month,\n +this.day - 60\n );\n }\n /**\n * Check if a Swedish personal identity number is for a female.\n *\n * @return {boolean}\n */\n isFemale() {\n return !this.isMale();\n }\n /**\n * Check if a Swedish personal identity number is for a male.\n *\n * @return {boolean}\n */\n isMale() {\n const sexDigit = parseInt(this.num.substr(-1));\n return sexDigit % 2 === 1;\n }\n};\nvar src_default = Personnummer;\nexport {\n src_default as default\n};\n","\"use strict\";\r\n// tslint:disable:no-bitwise\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.utf8 = void 0;\r\nexports.utf8 = {\r\n encode: encode,\r\n decode: decode,\r\n};\r\nfunction encode(unicodeText) {\r\n unicodeText = unicodeText.replace(/\\r\\n/g, \"\\n\");\r\n var result = \"\";\r\n for (var i = 0; i < unicodeText.length; i++) {\r\n var char = unicodeText.charCodeAt(i);\r\n if (char < 128) {\r\n result += String.fromCharCode(char);\r\n }\r\n else if (char > 127 && char < 2048) {\r\n result += String.fromCharCode((char >> 6) | 192);\r\n result += String.fromCharCode((char & 63) | 128);\r\n }\r\n else {\r\n result += String.fromCharCode((char >> 12) | 224);\r\n result += String.fromCharCode(((char >> 6) & 63) | 128);\r\n result += String.fromCharCode((char & 63) | 128);\r\n }\r\n }\r\n return result;\r\n}\r\nfunction decode(utf8Text) {\r\n var result = \"\";\r\n var i = 0;\r\n var char1 = 0;\r\n var char2 = 0;\r\n var char3 = 0;\r\n while (i < utf8Text.length) {\r\n char1 = utf8Text.charCodeAt(i);\r\n if (char1 < 128) {\r\n result += String.fromCharCode(char1);\r\n i++;\r\n }\r\n else if (char1 > 191 && char1 < 224) {\r\n char2 = utf8Text.charCodeAt(i + 1);\r\n result += String.fromCharCode(((char1 & 31) << 6) | (char2 & 63));\r\n i += 2;\r\n }\r\n else {\r\n char2 = utf8Text.charCodeAt(i + 1);\r\n char3 = utf8Text.charCodeAt(i + 2);\r\n result += String.fromCharCode(((char1 & 15) << 12) | ((char2 & 63) << 6) | (char3 & 63));\r\n i += 3;\r\n }\r\n }\r\n return result;\r\n}\r\n","\"use strict\";\r\n// tslint:disable:no-bitwise\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.generate = void 0;\r\nvar utf8_1 = require(\"./utf8\");\r\nfunction generate(unicodeText) {\r\n var x = [];\r\n var k;\r\n var AA;\r\n var BB;\r\n var CC;\r\n var DD;\r\n var a;\r\n var b;\r\n var c;\r\n var d;\r\n var S11 = 7;\r\n var S12 = 12;\r\n var S13 = 17;\r\n var S14 = 22;\r\n var S21 = 5;\r\n var S22 = 9;\r\n var S23 = 14;\r\n var S24 = 20;\r\n var S31 = 4;\r\n var S32 = 11;\r\n var S33 = 16;\r\n var S34 = 23;\r\n var S41 = 6;\r\n var S42 = 10;\r\n var S43 = 15;\r\n var S44 = 21;\r\n var utf8Text = utf8_1.utf8.encode(unicodeText);\r\n x = convertToWordArray(utf8Text);\r\n a = 0x67452301;\r\n b = 0xefcdab89;\r\n c = 0x98badcfe;\r\n d = 0x10325476;\r\n for (k = 0; k < x.length; k += 16) {\r\n AA = a;\r\n BB = b;\r\n CC = c;\r\n DD = d;\r\n a = FF(a, b, c, d, x[k + 0], S11, 0xd76aa478);\r\n d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);\r\n c = FF(c, d, a, b, x[k + 2], S13, 0x242070db);\r\n b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);\r\n a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);\r\n d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);\r\n c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613);\r\n b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501);\r\n a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8);\r\n d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);\r\n c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);\r\n b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);\r\n a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122);\r\n d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193);\r\n c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e);\r\n b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821);\r\n a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);\r\n d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340);\r\n c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);\r\n b = GG(b, c, d, a, x[k + 0], S24, 0xe9b6c7aa);\r\n a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);\r\n d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);\r\n c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);\r\n b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);\r\n a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);\r\n d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);\r\n c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);\r\n b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);\r\n a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);\r\n d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);\r\n c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);\r\n b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);\r\n a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);\r\n d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681);\r\n c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);\r\n b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);\r\n a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);\r\n d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);\r\n c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);\r\n b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);\r\n a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);\r\n d = HH(d, a, b, c, x[k + 0], S32, 0xeaa127fa);\r\n c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);\r\n b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05);\r\n a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);\r\n d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);\r\n c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);\r\n b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);\r\n a = II(a, b, c, d, x[k + 0], S41, 0xf4292244);\r\n d = II(d, a, b, c, x[k + 7], S42, 0x432aff97);\r\n c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7);\r\n b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039);\r\n a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3);\r\n d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);\r\n c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d);\r\n b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1);\r\n a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);\r\n d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);\r\n c = II(c, d, a, b, x[k + 6], S43, 0xa3014314);\r\n b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);\r\n a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82);\r\n d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235);\r\n c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);\r\n b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391);\r\n a = addUnsigned(a, AA);\r\n b = addUnsigned(b, BB);\r\n c = addUnsigned(c, CC);\r\n d = addUnsigned(d, DD);\r\n }\r\n return wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);\r\n}\r\nexports.generate = generate;\r\nfunction rotateLeft(lValue, iShiftBits) {\r\n return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));\r\n}\r\nfunction addUnsigned(lX, lY) {\r\n var lX4;\r\n var lY4;\r\n var lX8;\r\n var lY8;\r\n var lResult;\r\n lX8 = lX & 0x80000000;\r\n lY8 = lY & 0x80000000;\r\n lX4 = lX & 0x40000000;\r\n lY4 = lY & 0x40000000;\r\n lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);\r\n if (lX4 & lY4) {\r\n return lResult ^ 0x80000000 ^ lX8 ^ lY8;\r\n }\r\n if (lX4 | lY4) {\r\n if (lResult & 0x40000000) {\r\n return lResult ^ 0xc0000000 ^ lX8 ^ lY8;\r\n }\r\n else {\r\n return lResult ^ 0x40000000 ^ lX8 ^ lY8;\r\n }\r\n }\r\n else {\r\n return lResult ^ lX8 ^ lY8;\r\n }\r\n}\r\nfunction F(x, y, z) {\r\n return (x & y) | (~x & z);\r\n}\r\nfunction G(x, y, z) {\r\n return (x & z) | (y & ~z);\r\n}\r\nfunction H(x, y, z) {\r\n return x ^ y ^ z;\r\n}\r\nfunction I(x, y, z) {\r\n return y ^ (x | ~z);\r\n}\r\nfunction FF(a, b, c, d, x, s, ac) {\r\n a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));\r\n return addUnsigned(rotateLeft(a, s), b);\r\n}\r\nfunction GG(a, b, c, d, x, s, ac) {\r\n a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));\r\n return addUnsigned(rotateLeft(a, s), b);\r\n}\r\nfunction HH(a, b, c, d, x, s, ac) {\r\n a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));\r\n return addUnsigned(rotateLeft(a, s), b);\r\n}\r\nfunction II(a, b, c, d, x, s, ac) {\r\n a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));\r\n return addUnsigned(rotateLeft(a, s), b);\r\n}\r\nfunction convertToWordArray(value) {\r\n var lWordCount;\r\n var lMessageLength = value.length;\r\n var lNumberOfWordsTemp1 = lMessageLength + 8;\r\n var lNumberOfWordsTemp2 = (lNumberOfWordsTemp1 - (lNumberOfWordsTemp1 % 64)) / 64;\r\n var lNumberOfWords = (lNumberOfWordsTemp2 + 1) * 16;\r\n var lWordArray = Array(lNumberOfWords - 1);\r\n var lBytePosition = 0;\r\n var lByteCount = 0;\r\n while (lByteCount < lMessageLength) {\r\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\r\n lBytePosition = (lByteCount % 4) * 8;\r\n lWordArray[lWordCount] =\r\n lWordArray[lWordCount] | (value.charCodeAt(lByteCount) << lBytePosition);\r\n lByteCount++;\r\n }\r\n lWordCount = (lByteCount - (lByteCount % 4)) / 4;\r\n lBytePosition = (lByteCount % 4) * 8;\r\n lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);\r\n lWordArray[lNumberOfWords - 2] = lMessageLength << 3;\r\n lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;\r\n return lWordArray;\r\n}\r\nfunction wordToHex(lValue) {\r\n var wordToHexValue = \"\";\r\n var wordToHexValueTemp = \"\";\r\n var lByte;\r\n var lCount;\r\n for (lCount = 0; lCount <= 3; lCount++) {\r\n lByte = (lValue >>> (lCount * 8)) & 255;\r\n wordToHexValueTemp = \"0\" + lByte.toString(16);\r\n wordToHexValue =\r\n wordToHexValue + wordToHexValueTemp.substr(wordToHexValueTemp.length - 2, 2);\r\n }\r\n return wordToHexValue;\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MD5 = exports.generate = void 0;\r\nvar md5_1 = require(\"./md5\");\r\nvar md5_2 = require(\"./md5\");\r\nObject.defineProperty(exports, \"generate\", { enumerable: true, get: function () { return md5_2.generate; } });\r\nexports.MD5 = {\r\n generate: md5_1.generate,\r\n};\r\n","import { MD5 } from 'md5-js-tools';\nimport { CreditSafeUser } from '../types/felixtypes';\nimport { getCreditSafeApiUrl } from './enviroment';\n\nconst apiSearch = async (query: string): Promise<CreditSafeUser> => {\n const res = await fetch(getCreditSafeApiUrl(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query,\n hash: MD5.generate(String.fromCharCode(83, 101, 67, 82, 101, 116) + query),\n }),\n });\n const data = await res.json();\n return data;\n};\n\nexport default apiSearch;\n","import { Component, Element, State, h } from '@stencil/core';\nimport Personnummer from 'personnummer';\nimport state from '../../store';\nimport apiSearch from '../../utils/creditSafe';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-getuser',\n shadow: false,\n})\nexport class HemfixarnaGetuser {\n @State() email: string = '';\n @State() emailError: string | null = null;\n @State() phone: string = '';\n @State() phoneError: string | null = null;\n @State() ssn: string = '';\n @State() ssnError: string | null = null;\n @Element() private el: HTMLElement;\n\n componentWillLoad() {\n if (state.user) {\n this.email = state.user.email;\n this.phone = state.user.phone;\n this.ssn = state.user.ssn;\n }\n }\n\n handleChangeEmail = (e: Event) => {\n this.emailError = null;\n this.email = (e.target as HTMLInputElement).value;\n };\n\n handleChangePhone = (e: Event) => {\n this.phoneError = null;\n this.phone = (e.target as HTMLInputElement).value;\n };\n\n handleChangessn = (e: Event) => {\n this.ssnError = null;\n this.ssn = (e.target as HTMLInputElement).value;\n };\n\n handleSubmit = async (e: Event) => {\n e.preventDefault();\n const emailRegex = new RegExp(\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n );\n const validEmail = emailRegex.test(this.email);\n if (!validEmail) {\n this.emailError = 'Ange en giltig e-postadress';\n }\n const validPhone = /^[\\d\\s()+-]{6,}$/.test(this.phone);\n if (!validPhone) {\n this.phoneError = 'Ange ett giltigt telefonnummer';\n }\n const validssn = Personnummer.valid(this.ssn);\n if (!validssn) {\n this.ssnError = 'Ange ett giltigt personnummer';\n } else if (validssn) {\n const pn = Personnummer.parse(this.ssn).format(true);\n this.ssn = [pn.slice(0, 8), '-', pn.slice(8)].join('');\n }\n if (validEmail && validPhone && validssn) {\n try {\n const creditSafeData = await apiSearch(this.ssn);\n if (creditSafeData) {\n state.creditSafeUser = creditSafeData;\n state.checkoutStep = 2;\n state.user = {\n ...creditSafeData,\n email: this.email,\n phone: this.phone,\n ssn: this.ssn,\n };\n } else {\n this.ssnError = 'Vi kunde tyvärr inte hitta en address med ditt angivna personnummer';\n }\n } catch (e) {\n this.ssnError = 'Vi kunde tyvärr inte hitta en address med ditt angivna personnummer';\n console.log(e);\n } finally {\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n }\n }\n };\n\n render = () => {\n return (\n <form class=\"mb-2\" onSubmit={e => this.handleSubmit(e)}>\n <div>\n <input class={`${this.email.length ? 'input_active' : ''}`} onChange={e => this.handleChangeEmail(e)} type=\"email\" name=\"email\" value={this.email} />\n <label htmlFor=\"email\">E-post </label>\n </div>\n {this.emailError && <span>{this.emailError}</span>}\n <div>\n <input class={`${this.phone.length ? 'input_active' : ''}`} onChange={e => this.handleChangePhone(e)} type=\"tel\" name=\"phone\" value={this.phone} />\n <label htmlFor=\"phone\">Mobiltelefon </label>\n </div>\n {this.phoneError && <span>{this.phoneError}</span>}\n <div>\n <input class={`${this.ssn.length ? 'input_active' : ''}`} onChange={e => this.handleChangessn(e)} type=\"tel\" name=\"ssn\" value={this.ssn} />\n <label htmlFor=\"phone\">Personnummer*</label>\n </div>\n {this.ssnError && <span>{this.ssnError}</span>}\n <input type=\"submit\" value=\"Fortsätt*\" />\n <p>*Vi hämtar din adress</p>\n </form>\n );\n };\n}\n","import { Component, Fragment, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\n\n@Component({\n tag: 'hemfixarna-info',\n shadow: false,\n})\nexport class HemfixarnaInfo {\n logo = getAssetPath(`./assets/hemfixarna.svg`);\n\n render() {\n const checked = getAssetPath(`./assets/checked.svg`);\n return (\n <div class=\"hemfixarna_info\">\n {state.step < 5 ? (\n <Fragment>\n <h2>{state.customer.info_title}</h2>\n <p>{state.customer.info_text}</p>\n </Fragment>\n ) : (\n <h2>{state.customer.checkout_title}</h2>\n )}\n <ul class=\"hemfixarna_features\">\n {state.step < 5 ? (\n <Fragment>\n {state.customer.trust_badges?.length ? (\n <Fragment>\n {state.customer.trust_badges.map(l => (\n <li key={l.text}>\n <img src={checked} alt=\"checked\" />\n <p>{l.text}</p>\n </li>\n ))}\n </Fragment>\n ) : (\n <Fragment>\n {state.options.trust.map(l => (\n <li key={l.trust_badge}>\n <img src={checked} alt=\"checked\" />\n <p>{l.trust_badge}</p>\n </li>\n ))}\n </Fragment>\n )}\n </Fragment>\n ) : (\n <Fragment>\n {state.customer.checkout_trust_badges?.map(l => (\n <li key={l.text}>\n <img src={checked} alt=\"checked\" />\n <p>{l.text}</p>\n </li>\n ))}\n </Fragment>\n )}\n </ul>\n <img src={this.logo} width={200} alt=\"hemfixarna\" />\n <a class=\"hemfixarna_product--link\" target=\"_blank\" href={state.options.link.url}>\n {state.options.link.title}\n </a>\n </div>\n );\n }\n}\n",":host {\n .invoice {\n gap: 16px;\n display: grid;\n form {\n > span {\n text-align: center;\n padding: 16px 0;\n }\n }\n img {\n right: unset;\n left: unset;\n position: initial;\n transform: none;\n }\n label {\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: flex-start;\n padding: 16px 0;\n input {\n margin: 0 5px 0 0;\n accent-color: #ea662c;\n }\n }\n &-preview {\n display: flex;\n gap: 4px;\n div {\n position: relative;\n button {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0;\n img {\n width: 24px;\n height: 24px;\n }\n }\n > img {\n width: 100px;\n height: 80px;\n object-fit: cover;\n }\n }\n }\n input[type='email'],\n input[type='tel'],\n textarea {\n padding: 16px;\n border: 1px solid #fcd9c9;\n font-size: 16px;\n }\n textarea {\n resize: none;\n height: 200px;\n font-family: 'Inter', sans-serif;\n }\n div:has(> input[type='file']) {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background: #fff;\n border: 1px solid #fcd9c9;\n padding: 32px 16px;\n gap: 16px;\n span {\n color: #000;\n font-size: 12px;\n }\n }\n input[type='file'] {\n display: none;\n }\n }\n}\n","import { Component, Element, State, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { getApiUrl } from '../../utils/enviroment';\n\nconst base = `${getApiUrl()}/wp-json/headless`;\n\ninterface FormElements extends HTMLCollection {\n descriptionInput: {\n value: string;\n };\n emailInput: {\n value: string;\n };\n telInput: {\n value: string;\n };\n termsInput: {\n checked: boolean;\n };\n}\n\n@Component({\n tag: 'hemfixarna-invoice',\n styleUrl: 'hemfixarna-invoice.scss',\n shadow: false,\n})\nexport class HemfixarnaInvoice {\n @State() formError: string | null = null;\n @Element() private el: HTMLElement;\n @State() displayImages: Array<string | ArrayBuffer> = [];\n @State() formImages: Array<File> = [];\n @State() formState: 'initial' | 'loading' = 'initial';\n\n isValidEmail(email: string) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n }\n\n componentDidRender() {\n const form = this.el.querySelector('form') as HTMLFormElement;\n if (form) {\n form.addEventListener('input', () => {\n this.formError = null;\n });\n }\n }\n\n disconnectedCallback() {\n const form = this.el.querySelector('form') as HTMLFormElement;\n if (form) {\n form.removeEventListener('input', () => {\n this.formError = null;\n });\n }\n }\n\n async submit(e: Event) {\n e.preventDefault();\n this.formState = 'loading';\n this.formError = null;\n const form = (e.currentTarget as HTMLFormElement).elements as FormElements;\n const values = {\n description: form.descriptionInput.value.length ? form.descriptionInput.value : null,\n email: form.emailInput.value.length ? form.emailInput.value : null,\n tel: form.telInput.value.length ? form.telInput.value : null,\n terms: form.termsInput?.checked,\n };\n\n if (!values.description) {\n this.formError = 'Vänligen fyll i formulärtexten';\n this.formState = 'initial';\n return;\n }\n if (!values.email || !this.isValidEmail(values.email)) {\n this.formError = 'Vänligen ange en giltig e-postadress';\n this.formState = 'initial';\n return;\n }\n if (!values.tel) {\n this.formError = 'Vänligen ange ditt telefonnummer';\n this.formState = 'initial';\n return;\n }\n if (state.selectedProduct.terms_show_checkbox && !values.terms) {\n this.formError = 'Vänligen acceptera villkoren';\n this.formState = 'initial';\n return;\n }\n\n const formData = new FormData();\n formData.append('text', values.description);\n formData.append('email', values.email);\n formData.append('phone', values.tel);\n formData.append('customer', state.business);\n\n this.formImages.forEach(file => {\n formData.append('images[]', file);\n });\n\n formData.append(\n 'product',\n JSON.stringify({\n title: state.selectedProduct.title,\n amount: 1,\n has_rut: state.selectedProduct.rut,\n has_rot: state.selectedProduct.rot,\n has_green: state.selectedProduct.green,\n ID: state.selectedProduct.ID,\n parts: [],\n }),\n );\n\n try {\n const res = await fetch(`${base}/saveinvoiceproduct`, {\n method: 'POST',\n body: formData,\n });\n const { response } = await res.json();\n if (response.code === 200) {\n state.checkoutInvoice = true;\n state.step = 6;\n } else {\n this.formError = 'Vi kan inte ta emot din beställning just nu';\n this.formState = 'initial';\n }\n } catch (error) {\n this.formError = 'Vi kan inte ta emot din beställning just nu';\n this.formState = 'initial';\n }\n }\n\n handleImageDrop(e: DragEvent) {\n e.preventDefault();\n const files = e.dataTransfer.files;\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n\n if (file.type.startsWith('image/')) {\n const reader = new FileReader();\n\n reader.onload = () => {\n this.displayImages = [...this.displayImages, reader.result];\n this.formImages = [...this.formImages, file];\n };\n\n reader.readAsDataURL(file);\n }\n }\n }\n\n handleFileInputChange(e: Event) {\n e.preventDefault();\n const files = (e.target as HTMLInputElement).files;\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n if (file.type.startsWith('image/')) {\n const reader = new FileReader();\n reader.onload = () => {\n this.displayImages = [...this.displayImages, reader.result];\n this.formImages = [...this.formImages, file];\n };\n\n reader.readAsDataURL(file);\n }\n }\n }\n\n handleImageClick() {\n (this.el.querySelector('.hemfixarna-file-upload') as HTMLInputElement).click();\n }\n\n preventDragOver(e: DragEvent) {\n e.preventDefault();\n }\n\n removeImage(index: number) {\n this.displayImages = this.displayImages.filter((_, i) => i !== index);\n this.formImages = this.formImages.filter((_, i) => i !== index);\n }\n\n render() {\n const upload = getAssetPath(`./assets/drag-drop.svg`);\n return (\n <div class=\"invoice\">\n {state.selectedProduct?.invoice_description ? <p>{state.selectedProduct.invoice_description}</p> : null}\n <form onSubmit={e => this.submit(e)}>\n <textarea name=\"descriptionInput\" placeholder=\"Beskriv ditt ärende\" />\n <div role=\"button\" aria-label=\"upload image\" onDragOver={e => this.preventDragOver(e)} onDrop={e => this.handleImageDrop(e)} onClick={() => this.handleImageClick()}>\n <img src={upload} alt=\"hemfixarna_logo\" width={24} />\n <div>\n <p>Bifoga ev bilder</p>\n <span>(dra bilder hit)</span>\n </div>\n <input onChange={e => this.handleFileInputChange(e)} class=\"hemfixarna-file-upload\" accept=\"image/*\" type=\"file\" multiple name=\"fileInput\" />\n </div>\n <div class=\"invoice-preview\">\n {this.displayImages.map((img, i) => (\n <div key={i}>\n <img src={img as string} alt=\"uploaded image\" />\n <button onClick={() => this.removeImage(i)}>\n <img src={getAssetPath(`./assets/close.svg`)} alt=\"close\" />\n </button>\n </div>\n ))}\n </div>\n <input placeholder=\"E-post\" type=\"email\" name=\"emailInput\" />\n <input placeholder=\"Telefonnummer\" type=\"tel\" name=\"telInput\" />\n {state.selectedProduct.terms_show_checkbox ? (\n <label>\n <input type=\"checkbox\" name=\"termsInput\" />\n {state.selectedProduct.terms}\n </label>\n ) : null}\n {this.formError ? <span>{this.formError}</span> : null}\n <input type=\"submit\" value={this.formState === 'loading' ? 'Skickar' : 'Kontakta mig'} />\n </form>\n </div>\n );\n }\n}\n","import { Component, h } from '@stencil/core';\nimport state from '../../store';\n\n@Component({\n tag: 'hemfixarna-order',\n shadow: false,\n})\nexport class HemfixarnaOrder {\n resetShop() {\n state.step = 1;\n state.cart = [];\n state.selectedCategory = null;\n state.selectedService = null;\n state.selectedProduct = null;\n state.maleri = null;\n state.checkoutStep = 1;\n }\n\n disconnectedCallback() {\n this.resetShop();\n }\n\n render = () => {\n return (\n <div style={{ background: `url(${state.options.thank_you_image})` }} class=\"hemfixarna_order\">\n <div></div>\n <div>\n <h2>{state.checkoutInvoice ? 'Tack för din förfrågan' : 'Tack för din bokning'}</h2>\n {state.checkoutInvoice ? <p>Vi återkommer inom kort till dig på angivet telefonnummer eller epost</p> : null}\n {state.checkoutInvoice ? <div></div> : <hemfixarna-orderrows cart={false}></hemfixarna-orderrows>}\n <span onClick={() => this.resetShop()}>\n <button>Gör en ny bokning</button>\n </span>\n <hemfixarna-info />\n </div>\n </div>\n );\n };\n}\n","import { Component, Fragment, Prop, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { CartItem, Icon } from '../../types';\nimport { groupCartItemsByStartFee, calculateStartFee, calculateGreenDiscount, calculateRot, calculateRut, getPartPrice, getProductPrice, getTotalPrice } from '../../utils/calc';\n\n@Component({\n tag: 'hemfixarna-orderrows',\n shadow: false,\n})\nexport class HemfixarnaOrderrows {\n @Prop() cart: boolean = true;\n\n goToProduct(id: number) {\n const products = state.customer.categories\n .map(c => (c.show_products ? c.products : c.sub_categories ? c.sub_categories.map(c => c.products) : []))\n .flat()\n .flat();\n const product = products.find(p => p && p.fields.ID === id);\n if (product) {\n state.selectedProduct = product.fields;\n state.step = 4;\n }\n }\n\n openModal(title: string, text: string) {\n state.modal = {\n title,\n text,\n };\n }\n\n getDiscountedInfo(item: CartItem) {\n if (item.rut && state.rut) {\n return ' (efter RUT-avdrag)';\n } else if (item.rot && state.rot) {\n return ' (efter ROT-avdrag)';\n } else if (item.green && state.green) {\n return ' (efter Grön teknik avdrag)';\n } else {\n return '';\n }\n }\n\n renderStartFees() {\n const startFees = new Set();\n const fees = [];\n \n state.cart.forEach(item => {\n const startFee = item.start_fee_obj;\n if (startFee && !startFees.has(startFee.ID)) {\n startFees.add(startFee.ID);\n \n const rotStartFee = item.rot ? calculateStartFee().rot : 0;\n const rutStartFee = item.rut ? calculateStartFee().rut : 0;\n const greenStartFee = item.green ? calculateStartFee().green : 0;\n \n fees.push({\n id: startFee.ID,\n name: startFee.title,\n price: startFee.price,\n text: startFee.pop_up,\n rot: rotStartFee,\n rut: rutStartFee,\n green: greenStartFee,\n });\n }\n });\n \n return fees.map(fee => (\n <div key={fee.id} class=\"hemfixarna_cart--startfee\">\n <p onClick={() =>\n this.openModal(\n fee.name,\n fee.text\n )\n }>\n <strong>\n {fee.name}\n </strong>\n <img\n height={16}\n src={getAssetPath('./assets/info.svg')}\n alt=\"info monteringsavgift\"\n />\n </p>\n <p>\n {!fee.rut && !fee.rot && !fee.green && <span>{fee.price}kr</span>}\n {fee.rut > 0 && <span>{fee.rut}kr (RUT)</span>}\n {fee.rot > 0 && <span>{fee.rot}kr (ROT)</span>}\n {fee.green > 0 && <span>{fee.green}kr (Grön teknik)</span>}\n </p>\n </div>\n ));\n }\n \n\n render() {\n return (\n <Fragment>\n <ul class=\"hemfixarna_cart--items\">\n {Object.entries(groupCartItemsByStartFee(state.cart)).map(([startFeeID, items]) => (\n <li key={startFeeID} class=\"hemfixarna_cart--group\">\n <ul>\n {items.map(item => (\n <li class=\"hemfixarna_cart--item\" key={item.id}>\n <div>\n <div>\n {item.icon && (\n <img\n width={30}\n src={(item.icon as Icon).url ?? (item.icon as string)}\n alt={item.name}\n />\n )}\n <p>\n <strong>{item.amount}x </strong>\n {item.name}\n </p>\n </div>\n {this.cart && (\n <button onClick={() => this.goToProduct(item.id)}>Ändra</button>\n )}\n </div>\n <p>\n <strong>{getProductPrice(item, item.price, item.amount)}kr</strong>\n <span>{this.getDiscountedInfo(item)}</span>\n </p>\n {item.parts.length > 0 && (\n <ul>\n {item.parts.map(part => (\n <li key={part.name}>\n <p>\n <strong>{part.amount}x </strong>\n {part.name}\n </p>\n <p>\n <strong>{getPartPrice(part, item, part.amount)}kr</strong>\n </p>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n <div class=\"hemfixarna_cart--additional\">\n {this.renderStartFees()} \n {this.cart && state.cart.find((item: CartItem) => item.rot) && (\n <div class=\"hemfixarna_cart--rutrot\">\n <div>\n <label class=\"switch\">\n <input checked={state.rot} onChange={() => (state.rot = !state.rot)} type=\"checkbox\" />\n <span class=\"slider\"></span>\n </label>\n <p>ROT-avdrag</p>\n </div>\n <p>(-{state.rot ? calculateRot() : 0}kr)</p>\n </div>\n )}\n {this.cart && state.cart.find((item: CartItem) => item.rut) && (\n <div class=\"hemfixarna_cart--rutrot\">\n <div>\n <label class=\"switch\">\n <input onChange={() => (state.rut = !state.rut)} checked={state.rut} type=\"checkbox\" />\n <span class=\"slider\"></span>\n </label>\n <p>RUT-avdrag</p>\n </div>\n <p>(-{state.rut ? calculateRut() : 0}kr)</p>\n </div>\n )}\n {this.cart && state.cart.find((item: CartItem) => item.green) && (\n <div class=\"hemfixarna_cart--rutrot\">\n <div>\n <label class=\"switch\">\n <input onChange={() => (state.green = !state.green)} checked={state.green} type=\"checkbox\" />\n <span class=\"slider\"></span>\n </label>\n <p>Grön teknik avdrag</p>\n </div>\n <p>(-{state.green ? calculateGreenDiscount() : 0}kr)</p>\n </div>\n )}\n </div>\n\n <div class=\"hemfixarna_cart--price\">\n <h2>Totalbelopp: </h2>\n <h2>{getTotalPrice()}kr</h2>\n </div>\n </Fragment>\n );\n }\n}\n",null,"import { Component, Element, Fragment, State, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Business, Icon, Part } from '../../types';\nimport { getPartPrice, getProductPrice } from '../../utils/calc';\nimport { scrollToTop } from '../../utils/scroll';\n\n@Component({\n tag: 'hemfixarna-product',\n styleUrl: 'hemfixarna-product.scss',\n shadow: false,\n})\nexport class HemfixarnaProduct {\n @State() amount: number = 0;\n @State() hideDescription: boolean = true;\n @Element() private el: HTMLElement;\n\n addProduct() {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart) {\n productInCart.amount++;\n state.cart = [...state.cart];\n } else {\n state.cart = [\n ...state.cart,\n {\n id: state.selectedProduct.ID,\n rut: state.selectedProduct.rut,\n rot: state.selectedProduct.rot,\n green: state.selectedProduct.green,\n amount: 1,\n parts: [],\n price: state.selectedProduct.price,\n name: state.selectedProduct.title,\n start_fee: !state.selectedProduct.hide_start_fee,\n terms_checkout: state.selectedProduct.terms_checkout,\n icon: state.selectedProduct.icon,\n start_fee_obj: state.selectedProduct.start_fee_obj,\n },\n ];\n }\n }\n\n removeProduct() {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart && productInCart.amount > 1) {\n productInCart.amount--;\n state.cart = [...state.cart];\n } else {\n state.cart = state.cart.filter(p => p.id !== state.selectedProduct.ID);\n }\n }\n\n //Handle cart and parts\n addPart(part: Part) {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart) {\n const partInCart = productInCart.parts.find(sp => sp.id === part.ID);\n if (partInCart) {\n partInCart.amount++;\n productInCart.parts = [...productInCart.parts];\n } else {\n productInCart.parts = [...productInCart.parts, { id: part.ID, amount: 1, price: part.price, name: part.title ?? part.title }];\n }\n state.cart = [...state.cart.filter(p => p.id !== productInCart.id), productInCart];\n }\n }\n\n removePart(part: Part) {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart) {\n const partInCart = productInCart.parts.find(sp => sp.id === part.ID);\n if (partInCart && partInCart.amount > 1) {\n partInCart.amount--;\n productInCart.parts = [...productInCart.parts];\n } else {\n productInCart.parts = productInCart.parts.filter(sp => sp.id !== part.ID);\n }\n state.cart = [...state.cart.filter(p => p.id !== productInCart.id), productInCart];\n }\n }\n\n goToCart() {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart) {\n state.step = 5;\n const el = this.el.closest('.hemfixarna_content');\n scrollToTop(el);\n }\n }\n\n getAmount() {\n return state.cart.find(p => p.id === state.selectedProduct.ID)?.amount || 0;\n }\n\n getPartAmount(partId: number) {\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n return productInCart?.parts.find(sp => sp.id === partId)?.amount || 0;\n }\n\n getTotalPrice() {\n let price = 0;\n const productInCart = state.cart.find(p => p.id === state.selectedProduct.ID);\n if (productInCart) {\n const partsPrice = productInCart.parts.reduce((acc, curr) => {\n const part = state.selectedProduct.parts.find(p => p.ID === curr.id);\n if (part) {\n return acc + part.price * curr.amount;\n }\n return acc;\n }, 0);\n price = state.selectedProduct.price * productInCart.amount + partsPrice;\n } else {\n price = state.selectedProduct.price;\n }\n return getProductPrice(state.selectedProduct, price);\n }\n\n componentDidRender() {\n const linkElem = document.createElement('link');\n linkElem.setAttribute('rel', 'stylesheet');\n linkElem.setAttribute('href', 'https://painting-frontend.vercel.app/static/css/main.css');\n const fonts = document.createElement('link');\n fonts.setAttribute('rel', 'stylesheet');\n fonts.setAttribute('href', 'https://painting-frontend.vercel.app/fonts.css');\n\n const checkAndInjectCSS = () => {\n const parents = this.el.getElementsByTagName('hemfixare-calculator');\n if (parents.length > 0 && parents[0].shadowRoot !== null) {\n parents[0].shadowRoot.appendChild(linkElem);\n parents[0].shadowRoot.appendChild(fonts);\n } else {\n setTimeout(checkAndInjectCSS, 1);\n }\n };\n\n checkAndInjectCSS();\n }\n\n render() {\n const checked = getAssetPath(`./assets/checked.svg`);\n const plus = getAssetPath(`./assets/plus.svg`);\n const minus = getAssetPath(`./assets/minus.svg`);\n\n if (state.maleri) {\n return (\n <div class=\"hemfixarna_painting\">\n <script\n type=\"text/javascript\"\n src={\n ['localhost', 'vercel'].some(v => window.location.href.includes(v))\n ? 'https://painting-dev.vercel.app/static/js/main.js'\n : 'https://painting-frontend.vercel.app/static/js/main.js'\n }\n defer\n async\n ></script>\n <hemfixare-calculator\n title={state.options.maleri_title}\n subtitle={state.options.maleri_text}\n modal=\"true\"\n customer={state.business === Business.string ? 'string' : state.business}\n ></hemfixare-calculator>\n </div>\n );\n }\n\n return state.selectedProduct ? (\n <div class=\"hemfixarna_product\">\n <div class=\"hemfixarna_product--top\">\n {state.selectedProduct.icon && (\n <img width={80} src={(state.selectedProduct.icon as Icon).url ?? (state.selectedProduct.icon as string)} alt={state.selectedProduct.title} />\n )}\n <div>\n <h1>{state.selectedProduct.title}</h1>\n {!state.selectedProduct.invoice ? <h2>{getProductPrice(state.selectedProduct)} kr/st</h2> : <h2>{state.selectedProduct.invoice_price}</h2>}\n </div>\n </div>\n\n <div class=\"hemfixarna_product--grid\">\n <div class=\"hemfixarna_product--left\">\n {state.selectedProduct.list?.length && (\n <ul class=\"hemfixarna_features\">\n {state.selectedProduct.list.map(l => (\n <li key={l.bullet}>\n <img src={checked} alt=\"checked\" />\n <p>{l.bullet}</p>\n </li>\n ))}\n </ul>\n )}\n {state.selectedProduct.description && (\n <p\n onClick={() => (this.hideDescription = false)}\n class={`hemfixarna_description ${this.hideDescription ? 'hemfixarna_description--hidden' : ''}`}\n innerHTML={state.selectedProduct.description}\n ></p>\n )}\n </div>\n <div class=\"hemfixarna_product--right\">\n {state.selectedProduct.invoice ? (\n <hemfixarna-invoice />\n ) : (\n <Fragment>\n <ul>\n <li class=\"hemfixarna_product--item\">\n <div>\n <p>{state.selectedProduct.title}</p>\n <p class=\"hemfixarna_product--price\">{getProductPrice(state.selectedProduct)}kr/st</p>\n </div>\n <div class=\"hemfixarna_counter\">\n <img class={`${this.getAmount() === 0 ? 'disabled' : ''}`} src={minus} onClick={() => this.removeProduct()} />\n <span>{this.getAmount()}</span>\n <img src={plus} onClick={() => this.addProduct()} />\n </div>\n </li>\n {state.selectedProduct.parts?.length &&\n state.selectedProduct.parts.map(p => (\n <li class=\"hemfixarna_part\">\n <div>\n <p>{p.title ?? p.title}</p>\n <p class=\"hemfixarna_product--price\">{getPartPrice(p, state.selectedProduct)}kr/st</p>\n </div>\n <div class=\"hemfixarna_counter\">\n <img class={`${this.getPartAmount(p.ID) === 0 ? 'disabled' : ''}`} src={minus} onClick={() => this.removePart(p)} />\n <span>{this.getPartAmount(p.ID)}</span>\n <img class={`${this.getAmount() === 0 ? 'disabled' : ''}`} src={plus} onClick={() => this.addPart(p)} />\n </div>\n </li>\n ))}\n </ul>\n <h4 class=\"hemfixarna_product--total\">Totalt {this.getTotalPrice()} kr</h4>\n <button onClick={() => this.goToCart()} class={`hemfixarna_buy ${this.getAmount() === 0 ? 'disabled' : ''}`}>\n Fortsätt\n </button>\n </Fragment>\n )}\n {!state.selectedProduct.hide_start_fee && state.selectedProduct.start_fee_obj?.title && (\n <p class=\"hemfixarna_terms\">\n <strong>{state.selectedProduct.start_fee_obj.title}</strong>\n <br />\n <span innerHTML={state.selectedProduct.start_fee_obj.description}></span>\n </p>\n )}\n {state.options && <hemfixarna-info />}\n </div>\n </div>\n </div>\n ) : null;\n }\n}\n","import { Component, Prop, getAssetPath, h } from '@stencil/core';\nimport state from '../../store';\nimport { Category, CustomerCategory, CustomerSubCategory, Icon } from '../../types';\n\n@Component({\n tag: 'hemfixarna-start',\n shadow: false,\n})\nexport class HemfixarnaGrid {\n @Prop() tree?: Category;\n @Prop() slug?: string;\n\n isMainCategory(category: CustomerCategory | CustomerSubCategory): category is CustomerCategory {\n return (category as CustomerCategory).show_products !== undefined;\n }\n\n handleMaleriClick() {\n state.step = 4;\n state.maleri = true;\n }\n\n render() {\n const maleriLogo = getAssetPath('./assets/gubbe-pensel.svg');\n return state.customer ? (\n <div>\n <h2>{state.selectedCustomerCategory ? state.selectedCustomerCategory.name : 'Alla tjänster'}</h2>\n <div class=\"hemfixarna_categories--wrapper\">\n <ul class=\"hemfixarna_categories\">\n {state.selectedCustomerCategory?.add_painting ? (\n <button onClick={() => this.handleMaleriClick()} class=\"hemfixarna_maleribox\">\n <img height={64} src={maleriLogo} alt=\"Måleri Logotyp\" />\n <p>Beräkna fast pris på måleri & tapetsering här</p>\n </button>\n ) : null}\n {state.selectedCustomerCategory\n ? this.isMainCategory(state.selectedCustomerCategory) && state.selectedCustomerCategory.sub_categories && !state.selectedCustomerCategory.show_products\n ? state.selectedCustomerCategory.sub_categories.map(c => <hemfixarna-box category={c}></hemfixarna-box>)\n : state.selectedCustomerCategory.products\n ? state.selectedCustomerCategory.products.map(c => <hemfixarna-box category={c.fields}></hemfixarna-box>)\n : null\n : state.customer.categories.map(c => <hemfixarna-box category={c}></hemfixarna-box>)}\n </ul>\n <hemfixarna-info />\n </div>\n </div>\n ) : (\n <div>\n <h2>Alla tjänster</h2>\n <div class=\"hemfixarna_categories--wrapper\">\n <ul class=\"hemfixarna_categories\">\n {this.tree.sub_cats\n .sort((a, b) => (a.name < b.name ? -1 : 1))\n .map(c => (\n <hemfixarna-box post={c} icon={(c.icon as Icon).url ?? (c.icon as string)} postTitle={c.name}></hemfixarna-box>\n ))}\n </ul>\n <hemfixarna-info />\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as t,h as s}from"./p-32a8152b.js";import{W as i,B as e}from"./p-d297cb30.js";const n=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:e.tesla})}};export{n as hemfixarna_tesla};
2
- //# sourceMappingURL=p-f6de66c8.entry.js.map
1
+ import{r as t,h as s}from"./p-c707b937.js";import{W as i,B as e}from"./p-5cc10f3e.js";const n=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:e.tesla})}};export{n as hemfixarna_tesla};
2
+ //# sourceMappingURL=p-6f9913cb.entry.js.map
@@ -0,0 +1,2 @@
1
+ import{r as t,h as s}from"./p-c707b937.js";import{W as i,B as e}from"./p-5cc10f3e.js";const n=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:e.flyttsmart})}};export{n as hemfixarna_flyttsmart};
2
+ //# sourceMappingURL=p-80044bef.entry.js.map
@@ -1,2 +1,2 @@
1
- import{r as t,h as s}from"./p-32a8152b.js";import{W as i,B as n}from"./p-d297cb30.js";const r=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:n.traningspartner})}};export{r as hemfixarna_traningspartner};
2
- //# sourceMappingURL=p-a09f4a5d.entry.js.map
1
+ import{r as t,h as s}from"./p-c707b937.js";import{W as i,B as n}from"./p-5cc10f3e.js";const e=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:n.traningspartner})}};export{e as hemfixarna_traningspartner};
2
+ //# sourceMappingURL=p-9defa3dc.entry.js.map
@@ -1,2 +1,2 @@
1
- import{r,h as e}from"./p-32a8152b.js";import{s as a}from"./p-b397b966.js";const s=class{constructor(e){r(this,e)}setSelectedService(r){a.selectedService=r;a.step=3}render(){return e("div",null,e("h2",null,a.selectedCategory.name),e("div",{class:"hemfixarna_categories--wrapper"},e("div",null,e("ul",{class:"hemfixarna_categories"},a.selectedCategory.services.sort(((r,e)=>r.post_title<e.post_title?-1:1)).map((r=>{var a;return e("hemfixarna-box",{post:r,icon:(a=r.icon.url)!==null&&a!==void 0?a:r.icon,postTitle:r.post_title})})))),e("hemfixarna-info",null)))}};export{s as hemfixarna_category};
2
- //# sourceMappingURL=p-8cc96dd9.entry.js.map
1
+ import{r,h as e}from"./p-c707b937.js";import{s as a}from"./p-642db21e.js";const s=class{constructor(e){r(this,e)}setSelectedService(r){a.selectedService=r;a.step=3}render(){return e("div",null,e("h2",null,a.selectedCategory.name),e("div",{class:"hemfixarna_categories--wrapper"},e("div",null,e("ul",{class:"hemfixarna_categories"},a.selectedCategory.services.sort(((r,e)=>r.post_title<e.post_title?-1:1)).map((r=>{var a;return e("hemfixarna-box",{post:r,icon:(a=r.icon.url)!==null&&a!==void 0?a:r.icon,postTitle:r.post_title})})))),e("hemfixarna-info",null)))}};export{s as hemfixarna_category};
2
+ //# sourceMappingURL=p-a66f910f.entry.js.map
@@ -1,2 +1,2 @@
1
- import{r as t,h as s}from"./p-32a8152b.js";import{W as i,B as e}from"./p-d297cb30.js";const n=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:e.fargvaruhuset})}};export{n as hemfixarna_fargvaruhuset};
2
- //# sourceMappingURL=p-075a13b6.entry.js.map
1
+ import{r as t,h as s}from"./p-c707b937.js";import{W as i,B as e}from"./p-5cc10f3e.js";const n=class{constructor(s){t(this,s);this.id=undefined;this.widgetStyle=i.standard;this.buttonColor=undefined;this.buttonBg=undefined}render(){return s("hemfixarna-component",{widgetStyle:this.widgetStyle,buttonBg:this.buttonBg,buttonColor:this.buttonColor,id:this.id,business:e.fargvaruhuset})}};export{n as hemfixarna_fargvaruhuset};
2
+ //# sourceMappingURL=p-b904e94f.entry.js.map