{"version":3,"file":"productSpecification.332a96de194494b57ee6.js","mappings":"kKAEA,UACA,U,kbAEMA,GAAgB,IAAAC,oBAIhBC,IAFS,IAAAC,QAAO,WAEP,IAAAC,WAAS,kBAAMJ,EAAcE,MAAM,KAE5CG,GAAe,IAAAD,WAAS,WAAM,YAClC,MAAO,CACLE,MACEC,EAAMC,UAAUC,QACuB,QADlB,EACrBF,EAAMC,UAAU,GAAD,OAAIN,EAAOI,MAAK,iBAAQ,aAAvC,EAAyCI,cACpB,QAD8B,EACnDH,EAAMC,UAAUF,aAAK,aAArB,EAAuBI,aACvB,GACFC,KAAMJ,EAAMC,UAAU,GAAD,OAAIN,EAAOI,MAAK,UAAWC,EAAMC,UAAUG,MAAQ,GACxEC,cACoB,aAAjBV,EAAOI,QAA6D,QAAzC,EAAIC,EAAMC,UAAUK,6BAAqB,aAArC,EAAuCH,aAAe,GACxFI,aACoB,aAAjBZ,EAAOI,QAA4D,QAAxC,EAAIC,EAAMC,UAAUO,4BAAoB,aAApC,EAAsCL,aAAe,GAE3F,I,2kCCtBA,UACA,U,2aAEMV,GAAgB,IAAAC,oBAIhBC,IAFS,IAAAC,QAAO,WAEP,IAAAC,WAAS,kBAAMJ,EAAcE,MAAM,KAE5Cc,GAAY,IAAAZ,WAAS,WAAM,oBAC/B,MAAO,CACLa,aACG,UAAGf,EAAOI,MAAK,gBAAgBC,EAAMC,YACW,QADF,EAC7CD,EAAMC,UAAU,GAAD,OAAIN,EAAOI,MAAK,eAAc,UAAE,aAA/C,EAAiDI,aAClD,eAAgBH,EAAMC,YAA0C,QAAjC,EAAID,EAAMC,UAAUU,WAAW,UAAE,aAA7B,EAA+BR,aACnE,GACFS,eACG,UAAGjB,EAAOI,MAAK,gBAAgBC,EAAMC,YACW,QADF,EAC7CD,EAAMC,UAAU,GAAD,OAAIN,EAAOI,MAAK,eAAc,UAAE,aAA/C,EAAiDI,aAClD,eAAgBH,EAAMC,YAA0C,QAAjC,EAAID,EAAMC,UAAUU,WAAW,UAAE,aAA7B,EAA+BR,aACnE,GACFC,KAAMJ,EAAMC,UAAU,GAAD,OAAIN,EAAOI,MAAK,UAAWC,EAAMC,UAAUG,MAAQ,GACxES,qBACoB,aAAjBlB,EAAOI,QAAkE,QAA9C,EAAIC,EAAMC,UAAUa,kCAA0B,aAA1C,EAA6C,KAAO,GACtFC,uBACoB,aAAjBpB,EAAOI,QAAkE,QAA9C,EAAIC,EAAMC,UAAUa,kCAA0B,aAA1C,EAA6C,KAAO,GACtFE,oBACoB,aAAjBrB,EAAOI,QACoC,QADhB,EAC1BC,EAAMC,UAAUa,kCAA0B,aAA1C,EAA6C,KAC7Cd,EAAMC,UAAUO,sBAClB,GACFS,sBACoB,aAAjBtB,EAAOI,QACoC,QADhB,EAC1BC,EAAMC,UAAUa,kCAA0B,aAA1C,EAA6C,KAC7Cd,EAAMC,UAAUO,sBAClB,GAEN,IAEMU,GAAgB,IAAArB,WACpB,mCACK,IAAAsB,UAASV,EAAUV,MAAMW,cAAa,YAAID,EAAUV,MAAMK,KAAI,aAAI,IAAAe,UACrEV,EAAUV,MAAMc,sBACjB,YAAIJ,EAAUV,MAAMiB,oBAAmB,QAGpCI,GAAc,IAAAvB,WAClB,4BACK,IAAAsB,UAASV,EAAUV,MAAMa,gBAAe,YAAIH,EAAUV,MAAMK,KAAI,aAAI,IAAAe,UACrEV,EAAUV,MAAMgB,wBACjB,YAAIN,EAAUV,MAAMkB,sBAAqB,I,mfC/C9C,UAAiE,urB,gMAHjE,IAAMI,GAAS,IAAAzB,QAAO,UAChB0B,GAAS,IAAA1B,QAAO,UAIhBH,GAAgB,IAAAC,oBAqBtB,SAAS6B,EAAmBC,GAnB5B,IAKQC,EAKAC,EAUNjC,EAAcE,OAAS6B,EAAOG,OAAO5B,MACrCN,EAAcmC,yBAhBRH,EAAgC,CACpCI,MAAO,qCACPC,aAAcT,EAAOU,aAGjBL,EAAY,EAAH,KACTL,EAAOU,YAAcN,EAVK,CAC9BI,MAAO,wCASyE,IAChFG,4BAA6BvC,EAAcE,QAAU,KACrDsC,iBAAkBZ,EAAOa,WAG3BZ,EAAOI,EAOT,C,y2BC9BA,UACA,aACA,aACA,aAA4G,mD,mRAE5G,IAAML,GAAS,IAAAzB,QAAO,UAChBH,GAAgB,IAAAC,oBAChByC,GAAO,IAAAtC,WAAS,kBAAMJ,EAAc2C,YAAYf,EAAOgB,YAAY,I,OAEzE,IAAAC,gBAAc,WACZ7C,EAAc8C,aACd9C,EAAcE,OAAS0B,EAAOmB,cAC9B/C,EAAcgD,0BAA0BN,EAAKpC,MAC/C,I,oxBCZO,SAAkB2C,GACvB,IAAMjD,GAAgB,EAAAC,EAAAA,oBAEtB,OAASiD,MAAMD,IAAWE,WAAWF,GAAWE,WAAWF,GAAQG,eAAepD,EAAcqD,SAAWJ,CAC7G,EANA,a,iBCDoC,6vB,2EAE7B,IAAMhD,GAAmB,EAFhC,QAEgCqD,aAAY,gBAAiB,CAC3DC,MAAO,WACL,MAAO,CACLC,SAAU,GACVC,QAAS,GACTC,iBAAkB,GAClBxD,OAAQ,SACRyD,eAAe,EACfN,QAAS,GACTO,eAAgB,KAChBC,kBAAmB,GACnBC,kBAAkB,EAEtB,EACAC,QAAS,CACPC,eAAgB,SAACT,GAAK,MAAsB,WAAjBA,EAAMrD,MAAmB,EACpD+D,gBAAiB,SAACV,GAAK,OAAKA,EAAMM,kBAAkBK,QAAO,SAACA,GAAM,OAAKA,EAAOC,QAAQ,GAAC,EACvFC,sBAAuB,SAACb,GAAK,OAAKA,EAAMG,iBAAiBW,MAAM,EAC/DC,iBAAkB,SAACf,GAAK,OAAKA,EAAMC,SAASa,MAAM,EAClDE,0BAA2B,SAAChB,GAC1B,IAAIiB,EAAwB,GAO5B,OANAjB,EAAMU,gBAAgBQ,SAAQ,SAACP,EAAQQ,GACrCA,EAAI,IAAMF,GAAyB,OACnCA,GAAyBN,EAAOS,KAChCH,GAAyB,MACzBA,GAAyBjB,EAAMqB,eAAerB,EAAMsB,QAAQX,IAASzD,KACvE,IACO+D,CACT,GAEFM,QAAS,CACPC,aAAY,SAACvB,GACXwB,KAAKxB,SAAW,GAAH,SACRA,EAASU,QACV,SAACe,GAAI,OACHA,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,QAAdA,EAAKC,MAAiC,SAAfD,EAAK7E,KAAgB,KAC5E2E,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,YAAdA,EAAKC,MAAqC,SAAfD,EAAK7E,KAAgB,GAAC,KACpF,EACEkD,EAASU,QACV,SAACe,GAAI,OACHA,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,QAAdA,EAAKC,MAAiC,SAAfD,EAAK7E,KAAgB,MAC3E2E,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,YAAdA,EAAKC,MAAqC,SAAfD,EAAK7E,KAAgB,GAAC,KACrF,EACEkD,EAASU,QACV,SAACe,GAAI,OACFA,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,QAAdA,EAAKC,MAAiC,SAAfD,EAAK7E,KAAgB,KAC7E2E,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,YAAdA,EAAKC,MAAqC,SAAfD,EAAK7E,KAAgB,GAAC,KACpF,EACEkD,EAASU,QACV,SAACe,GAAI,OACFA,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,QAAdA,EAAKC,MAAiC,SAAfD,EAAK7E,KAAgB,MAC5E2E,EAAKrC,YAAYsC,MAAK,SAACC,GAAI,MAAmB,YAAdA,EAAKC,MAAqC,SAAfD,EAAK7E,KAAgB,GAAC,MAGxF0E,KAAKtB,iBAAmBsB,KAAKxB,QAC/B,EACAV,WAAU,WACRkC,KAAK3B,QACHgC,UAAUC,cACTD,UAAUE,WAAaF,UAAUE,UAAUlB,QAAUgB,UAAUE,UAAU,IAC1EF,UAAUG,UACVH,UAAUI,iBACVJ,UAAUK,gBACV,IACJ,EACAvD,uBAAsB,WAEpB6C,KAAKnB,kBAAoB8B,KAAKC,MAAMD,KAAKE,UAAUb,KAAKvB,UACxDuB,KAAKpB,eAAiB,KACtBoB,KAAKc,kBACP,EACAC,gBAAe,SAACC,GAAU,WACpBC,EAAM,GACVjB,KAAKnB,kBAAoBmB,KAAKnB,kBAAkBqC,KAAI,SAAChC,EAAQQ,GACvDR,EAAOiC,KAAOH,EAChBC,EAAIG,KAAKT,KAAKC,MAAMD,KAAKE,UAAU3B,KAEnC+B,EAAIG,KAAKT,KAAKC,MAAMD,KAAKE,UAAU,EAAKpC,QAAQiB,KAEpD,IACAM,KAAKnB,kBAAoBoC,EACzBjB,KAAKpB,eAAiB,KACtBoB,KAAKc,kBACP,EACAjB,QAAO,SAACX,GACN,OAAOA,EAAOA,EAAOW,QAAU,UAAY,GAAH,OAAMG,KAAK9E,OAAM,WAC3D,EACAI,MAAK,SAACoC,GACJ,OACEA,EAAK,GAAD,OAAIsC,KAAK9E,OAAM,WACnBwC,EAAK,GAAD,OAAIsC,KAAK9E,OAAM,gBACnBwC,EAAI,YACJA,EAAKpC,OACL,EAEJ,EACAsE,eAAc,SAACC,GACb,OAAOA,EAAQX,QAAO,SAACmC,GAAM,OAAKA,EAAOlC,QAAQ,IAAE,EACrD,EACAmC,sBAAqB,SAACC,EAAcC,GAClC,IAAIC,EAAkBF,EAAa,GAC/BG,EAAiBF,EAAY,GAG7BG,EAAiBJ,EAAa,GAAKA,EAAa,GAAKK,IACrDC,EAAgBL,EAAY,GAAKA,EAAY,GAAKI,IAEtD,OAAIE,MAAMC,QAAQR,KACPI,EAAiBD,GAAkBD,EAAkBI,GAEvDN,GAAgBG,GAAkBH,GAAgBM,CAE7D,EACAG,gCAA+B,SAACC,EAAeV,GAC7C,OAAOU,GAAiBV,EAAa,IAAMU,GAAiBV,EAAa,EAC3E,EACAT,iBAAgB,WAAG,WACjBd,KAAKtB,iBAAmBsB,KAAKxB,SAASU,QAAO,SAACgD,GAC5C,IAAIC,EAAa,GACbC,EAAc,EAsBlB,OArBAF,EAAQtE,YAAY6B,SAAQ,SAAC/B,GAC3B,EAAKuB,gBAAgBQ,SAAQ,SAACP,GAC5B,IAIImD,EAJEC,EAAwB,EAAK1C,eAAe,EAAKC,QAAQX,IAAS5D,MAClEiH,EAAqB,EAAK3C,eAAe,EAAKC,QAAQX,IAAShD,WAE/DqF,EAAe,EAAKjG,MAAMoC,GAE5BA,EAAK8E,aAAetD,EAAOiC,KAE3BkB,EADkB,UAAhBnD,EAAOkB,KACI,EAAKkB,sBAAsBC,EAAcgB,GAC7B,WAAhBrD,EAAOkB,MAAqB0B,MAAMC,QAAQR,GACtCS,gCAAgCM,EAAuBf,GAEvDe,IAA0Bf,EAEzCY,EAAWf,KAAKiB,GAChBD,IAEJ,GACF,IAC4BD,EAAWM,OAAM,SAACnH,GAAK,OAAe,IAAVA,CAAc,KACxC8G,IAAgB,EAAKnD,gBAAgBI,MACrE,IACAW,KAAK0C,2BACP,EACAA,0BAAyB,WAAG,WAC1B1C,KAAKnB,kBAAkBY,SAAQ,SAACP,GAC9B,EAAKW,QAAQX,GAAQO,SAAQ,SAAC4B,GAC5B,IAAIsB,EAAkB,GACtB,EAAKjE,iBAAiBe,SAAQ,SAACyC,GAC7BA,EAAQtE,YAAY6B,SAAQ,SAAC/B,GAC3B,IAKM2E,EALAO,EAAsBvB,EAAO/F,MAC7BuH,EAAmBxB,EAAOnF,WAE1BqF,EAAe,EAAKjG,MAAMoC,GAC5BA,EAAK8E,aAAetD,EAAOiC,KAG3BkB,EADkB,UAAhBnD,EAAOkB,KACI,EAAKkB,sBAAsBC,EAAcsB,GAC7B,WAAhB3D,EAAOkB,MAAqB0B,MAAMC,QAAQR,GAEjDqB,GAAuBrB,EAAa,IACpCqB,GAAuBrB,EAAa,GAEzBqB,IAAwBrB,EAEvCoB,EAAgBvB,KAAKiB,GAEzB,GACF,IAGA,IAAMS,EAAqBH,EAAgBI,MAAK,SAACzH,GAAK,OAAe,IAAVA,CAAc,IAIzE,GAHA+F,EAAO2B,UAAYF,EAGC,YAAhB5D,EAAOkB,KAAoB,CAC7B,IAAM6C,EAAmBN,EAAgBF,OAAM,SAACnH,GAAK,OAAKA,IAAUqH,EAAgB,EAAE,IACtFzD,EAAOgE,OAASD,CAClB,CAEA,EAAKrE,eAAiB,IACxB,GACF,GACF,EACAZ,0BAAyB,SAACJ,GACxB,IAAIuF,EAAO,GAgBX,SAASC,EAAeC,EAAKnI,GAC3B,OAAOmI,KAAS,UAAGnI,EAAM,YAC3B,CAfI8E,KAAKxB,SAASa,OAChBW,KAAKxB,SAASiB,SAAQ,SAACyC,GAAO,OAC5BA,EAAQtE,YAAY6B,SAAQ,SAAC/B,GAC3ByF,EAAK/B,KAAI,MAAT+B,EAAI,EAASG,OAAOH,KAAKzF,IAC3B,GAAE,IAEKE,GAETA,EAAY6B,SAAQ,SAAC/B,GACnByF,EAAK/B,KAAI,MAAT+B,EAAI,EAASG,OAAOH,KAAKzF,IAC3B,IAMF,IAAM6F,EAAgBJ,EAAKJ,MAAK,SAACM,GAAG,OAAKD,EAAeC,EAAK,SAAS,IAChEG,EAAkBL,EAAKJ,MAAK,SAACM,GAAG,OAAKD,EAAeC,EAAK,WAAW,IAE1ErD,KAAKrB,cACF4E,GAAiBC,GACjBD,GAAiC,aAAhBvD,KAAK9E,QACtBsI,GAAmC,WAAhBxD,KAAK9E,MAC7B,EACAuI,eAAc,SAAC/F,GACb,IAAMxC,EAAS8E,KAAK9E,OAGpB,MACG,UAAGA,EAAM,gBAAgBwC,GAAQA,EAAK,GAAD,OAAIxC,EAAM,gBAC/C,eAAgBwC,GAAQA,EAAiB,UAE9C,EACAC,YAAW,SAACD,GACV,OAAOA,aAAI,EAAJA,EAAMwB,QAAO,SAACe,GAAI,OAAMA,EAAKyD,GAAG,MAAK,EAC9C,EACAC,oBAAmB,WAAG,WACpB3D,KAAKvB,QAAQgB,SAAQ,SAACP,GACA,WAAhBA,EAAOkB,MACTlB,EAAOW,SAAW,EAAK+D,kBAAkB1E,EAAOW,QAASX,EAAOvD,MAChEuD,EAAO2E,eAAiB,EAAKD,kBAAkB1E,EAAO2E,cAAe3E,EAAO4E,YAC5E5E,EAAO6E,iBACL,EAAKH,kBAAkB1E,EAAO6E,gBAAiB7E,EAAO8E,eAC/B,UAAhB9E,EAAOkB,OAChBlB,EAAOW,SAAW,EAAKoE,iBAAiB/E,EAAOW,QAASX,EAAOvD,MAC/DuD,EAAO2E,eAAiB,EAAKI,iBAAiB/E,EAAO2E,cAAe3E,EAAO4E,YAC3E5E,EAAO6E,iBACL,EAAKE,iBAAiB/E,EAAO6E,gBAAiB7E,EAAO8E,cAE3D,GACF,EACAJ,kBAAiB,SAAC/D,EAASlE,GAAM,WACzBuI,EAAUvI,GAAQ,GACxBkE,EAAQJ,SAAQ,SAAC4B,GACfA,EAAO5F,MAAQ,GAAH,OAAM4F,EAAO/F,MAAM8C,eAAe,EAAKC,SAAQ,YAAI6F,EACjE,GACF,EACAD,iBAAgB,SAACpE,EAASlE,GAAM,WACxBuI,EAAUvI,GAAQ,GACxBkE,EAAQJ,SAAQ,SAAC4B,GACf,GAAiC,IAA7BA,EAAOnF,WAAWmD,OACpBgC,EAAO5F,MAAQ,GAAH,OAAM4F,EAAOnF,WAAW,GAAGkC,eAAe,EAAKC,SAAQ,YAAI6F,QAClE,GAAiC,IAA7B7C,EAAOnF,WAAWmD,OAAc,OACzCgC,EAAO5F,MAAQ,GAAH,OAAM4F,EAAOnF,WAAW,GAAGkC,eACrC,EAAKC,SACN,YAAI6F,EAAO,cAA0B,QAA1B,EAAM7C,EAAOnF,WAAW,UAAE,aAApB,EAAsBkC,eAAe,EAAKC,SAAQ,YAAI6F,EAC1E,CACF,GACF,KAED,oB,sGCrQH,IAGmE,EAHnE,UACA,UACA,GACmE,EADnE,UACmE,2BAAnE,UAAmE,sKAG5D,IAAMC,GAAmB,EAAAC,EAAAA,eAAc,yBACzBC,EAAoB,WACvC,WAAYC,IALqD,4FAKjD,SACdtE,KAAKsE,GAAKA,EACVtE,KAAKuE,MACP,CARiE,UAgBhE,OAhBgE,EAQhE,GARgE,EAQhE,mBACD,YAEE,EAAAC,EAAAA,WAAUC,EAAAA,SACPC,IAAIP,GACJQ,QAAQ,SAAUC,KAClBD,QAAQ,SAAUE,EAAAA,iBAClBC,MAAM9E,KAAKsE,GAChB,MAhBiE,8EAgBhE,EAZsC,GAYtC,W,gFChBH,MAEA,EAFoB,G,gFCApB,MAEA,EAFoB,G,gFCApB,MAEA,EAFoB,G,gFCApB,MAEA,EAFoB,G","sources":["webpack://jcb.com/./src/app/components/product-card/product-card-detail-non-range.vue","webpack://jcb.com/./src/app/components/product-card/product-card-detail-range.vue","webpack://jcb.com/./src/app/components/product-listing/product-listing-system-toggle.vue","webpack://jcb.com/./src/app/views/product-specification/product-specification.vue","webpack://jcb.com/./src/app/composables/useValue.js","webpack://jcb.com/./src/app/stores/productsStore.js","webpack://jcb.com/./src/app/views/product-specification/product-specification.js","webpack://jcb.com/./src/app/components/product-card/product-card-detail-non-range.vue?12a9","webpack://jcb.com/./src/app/components/product-card/product-card-detail-range.vue?1c0c","webpack://jcb.com/./src/app/components/product-listing/product-listing-system-toggle.vue?e5bb","webpack://jcb.com/./src/app/views/product-specification/product-specification.vue?6114"],"sourcesContent":["\r\n\r\n","\r\n\r\n","\r\n\r\n","\r\n\r\n","// Composable takes a string and if it is a number formats it according to local standards\r\nimport { useProductsStore } from '@/app/stores/productsStore.js';\r\n\r\nexport function useValue(string) {\r\n const productsStore = useProductsStore();\r\n\r\n return (!isNaN(string) && parseFloat(string)) ? parseFloat(string).toLocaleString(productsStore.locales) : string;\r\n}\r\n","import { defineStore } from 'pinia';\r\n\r\nexport const useProductsStore = defineStore('productsStore', {\r\n state: () => {\r\n return {\r\n products: [],\r\n filters: [],\r\n productsFiltered: [],\r\n system: 'metric',\r\n displayToggle: false,\r\n locales: '',\r\n openedDropdown: null,\r\n dynamicFiltersArr: [],\r\n hideFilterMobile: false,\r\n };\r\n },\r\n getters: {\r\n isSystemMetric: (state) => state.system === 'metric',\r\n selectedFilters: (state) => state.dynamicFiltersArr.filter((filter) => filter.selected),\r\n filteredProductsCount: (state) => state.productsFiltered.length,\r\n allProductsCount: (state) => state.products.length,\r\n selectedFiltersListString: (state) => {\r\n let selectedFiltersString = '';\r\n state.selectedFilters.forEach((filter, i) => {\r\n i > 0 && (selectedFiltersString += ' | ');\r\n selectedFiltersString += filter.name;\r\n selectedFiltersString += ' : ';\r\n selectedFiltersString += state.selectedOption(state.options(filter)).label;\r\n });\r\n return selectedFiltersString;\r\n },\r\n },\r\n actions: {\r\n sortProducts(products) {\r\n this.products = [\r\n ...products.filter(\r\n (item) =>\r\n item.productData.find((prop) => prop.type === 'new' && prop.value === 'true') &&\r\n item.productData.find((prop) => prop.type === 'popular' && prop.value === 'true'),\r\n ),\r\n ...products.filter(\r\n (item) =>\r\n item.productData.find((prop) => prop.type === 'new' && prop.value === 'true') &&\r\n !item.productData.find((prop) => prop.type === 'popular' && prop.value === 'true'),\r\n ),\r\n ...products.filter(\r\n (item) =>\r\n !item.productData.find((prop) => prop.type === 'new' && prop.value === 'true') &&\r\n item.productData.find((prop) => prop.type === 'popular' && prop.value === 'true'),\r\n ),\r\n ...products.filter(\r\n (item) =>\r\n !item.productData.find((prop) => prop.type === 'new' && prop.value === 'true') &&\r\n !item.productData.find((prop) => prop.type === 'popular' && prop.value === 'true'),\r\n ),\r\n ];\r\n this.productsFiltered = this.products;\r\n },\r\n setLocales() {\r\n this.locales =\r\n navigator.userLanguage ||\r\n (navigator.languages && navigator.languages.length && navigator.languages[0]) ||\r\n navigator.language ||\r\n navigator.browserLanguage ||\r\n navigator.systemLanguage ||\r\n 'en';\r\n },\r\n resetDynamicFiltersArr() {\r\n // deep copy\r\n this.dynamicFiltersArr = JSON.parse(JSON.stringify(this.filters));\r\n this.openedDropdown = null;\r\n this.filterEverything();\r\n },\r\n removeOneFilter(filterId) {\r\n let arr = [];\r\n this.dynamicFiltersArr = this.dynamicFiltersArr.map((filter, i) => {\r\n if (filter.id !== filterId) {\r\n arr.push(JSON.parse(JSON.stringify(filter)));\r\n } else {\r\n arr.push(JSON.parse(JSON.stringify(this.filters[i])));\r\n }\r\n });\r\n this.dynamicFiltersArr = arr;\r\n this.openedDropdown = null;\r\n this.filterEverything();\r\n },\r\n options(filter) {\r\n return filter[filter.options ? 'options' : `${this.system}Options`];\r\n },\r\n value(data) {\r\n return (\r\n data[`${this.system}Value`] ||\r\n data[`${this.system}ValueRange`] ||\r\n data[`valueRange`] ||\r\n data.value ||\r\n ''\r\n );\r\n },\r\n selectedOption(options) {\r\n return options.filter((option) => option.selected)[0];\r\n },\r\n isRangeFilterMatching(productValue, optionValue) {\r\n let firstProductVal = productValue[0];\r\n let firstOptionVal = optionValue[0];\r\n\r\n // no value for the second element or range array = Infinity\r\n let lastProductVal = productValue[1] ? productValue[1] : Infinity;\r\n let lastOptionVal = optionValue[1] ? optionValue[1] : Infinity;\r\n\r\n if (Array.isArray(productValue)) {\r\n return !(lastProductVal < firstOptionVal || firstProductVal > lastOptionVal);\r\n } else {\r\n return productValue >= firstOptionVal && productValue <= lastOptionVal;\r\n }\r\n },\r\n isNumberFilterMatchingWithRange(selectedValue, productValue) {\r\n return selectedValue >= productValue[0] && selectedValue <= productValue[1];\r\n },\r\n filterEverything() {\r\n this.productsFiltered = this.products.filter((product) => {\r\n let resultsArr = [];\r\n let filterFound = 0;\r\n product.productData.forEach((data) => {\r\n this.selectedFilters.forEach((filter) => {\r\n const selectedNonRangeValue = this.selectedOption(this.options(filter)).value;\r\n const selectedRangeValue = this.selectedOption(this.options(filter)).valueRange;\r\n\r\n const productValue = this.value(data);\r\n let isMatching;\r\n if (data.propertyId === filter.id) {\r\n if (filter.type === 'range') {\r\n isMatching = this.isRangeFilterMatching(productValue, selectedRangeValue);\r\n } else if (filter.type === 'number' && Array.isArray(productValue)) {\r\n isMatching = isNumberFilterMatchingWithRange(selectedNonRangeValue, productValue);\r\n } else {\r\n isMatching = selectedNonRangeValue === productValue;\r\n }\r\n resultsArr.push(isMatching);\r\n filterFound++;\r\n }\r\n });\r\n });\r\n const allChecksSuccessful = resultsArr.every((value) => value === true);\r\n return allChecksSuccessful && filterFound === this.selectedFilters.length;\r\n });\r\n this.disableNotMatchingOptions();\r\n },\r\n disableNotMatchingOptions() {\r\n this.dynamicFiltersArr.forEach((filter) => {\r\n this.options(filter).forEach((option) => {\r\n let optionAvailable = [];\r\n this.productsFiltered.forEach((product) => {\r\n product.productData.forEach((data) => {\r\n const optionNonRangeValue = option.value;\r\n const optionRangeValue = option.valueRange;\r\n\r\n const productValue = this.value(data);\r\n if (data.propertyId === filter.id) {\r\n let isMatching;\r\n if (filter.type === 'range') {\r\n isMatching = this.isRangeFilterMatching(productValue, optionRangeValue);\r\n } else if (filter.type === 'number' && Array.isArray(productValue)) {\r\n isMatching =\r\n optionNonRangeValue >= productValue[0] &&\r\n optionNonRangeValue <= productValue[1];\r\n } else {\r\n isMatching = optionNonRangeValue === productValue;\r\n }\r\n optionAvailable.push(isMatching);\r\n }\r\n });\r\n });\r\n\r\n // disable option that would return no products\r\n const atLeastOnePossible = optionAvailable.some((value) => value === true);\r\n option.disabled = !atLeastOnePossible;\r\n\r\n // hide the whole filter if it's boolean with only one disabled option\r\n if (filter.type === 'boolean') {\r\n const allValuesTheSame = optionAvailable.every((value) => value === optionAvailable[0]);\r\n filter.hidden = allValuesTheSame;\r\n }\r\n\r\n this.openedDropdown = null;\r\n });\r\n });\r\n },\r\n manageSystemToggleDisplay(productData) {\r\n let keys = [];\r\n\r\n // for multiple products check\r\n if (this.products.length) {\r\n this.products.forEach((product) =>\r\n product.productData.forEach((data) => {\r\n keys.push(...Object.keys(data));\r\n }),\r\n );\r\n } else if (productData) {\r\n // for single product check\r\n productData.forEach((data) => {\r\n keys.push(...Object.keys(data));\r\n });\r\n }\r\n\r\n function hasSystemValue(key, system) {\r\n return key === (`${system}Value` || `${system}ValueRange`);\r\n }\r\n const hasMetricKeys = keys.some((key) => hasSystemValue(key, 'metric'));\r\n const hasImperialKeys = keys.some((key) => hasSystemValue(key, 'imperial'));\r\n\r\n this.displayToggle =\r\n (hasMetricKeys && hasImperialKeys) ||\r\n (hasMetricKeys && this.system === 'imperial') ||\r\n (hasImperialKeys && this.system === 'metric');\r\n },\r\n hasRangeDetail(data) {\r\n const system = this.system;\r\n\r\n // data object has either 'value' or 'metricalValue' & 'imperialValue' keys, the same applies for 'unit'\r\n return (\r\n (`${system}ValueRange` in data && data[`${system}ValueRange`]) ||\r\n ('valueRange' in data && data['valueRange'])\r\n );\r\n },\r\n detailsData(data) {\r\n return data?.filter((item) => !item.tag) || [];\r\n },\r\n createFiltersLabels() {\r\n this.filters.forEach((filter) => {\r\n if (filter.type === 'number') {\r\n filter.options && this.createNumberLabel(filter.options, filter.unit);\r\n filter.metricOptions && this.createNumberLabel(filter.metricOptions, filter.metricUnit);\r\n filter.imperialOptions &&\r\n this.createNumberLabel(filter.imperialOptions, filter.imperialUnit);\r\n } else if (filter.type === 'range') {\r\n filter.options && this.createRangeLabel(filter.options, filter.unit);\r\n filter.metricOptions && this.createRangeLabel(filter.metricOptions, filter.metricUnit);\r\n filter.imperialOptions &&\r\n this.createRangeLabel(filter.imperialOptions, filter.imperialUnit);\r\n }\r\n });\r\n },\r\n createNumberLabel(options, unit) {\r\n const useUnit = unit || '';\r\n options.forEach((option) => {\r\n option.label = `${option.value.toLocaleString(this.locales)} ${useUnit}`;\r\n });\r\n },\r\n createRangeLabel(options, unit) {\r\n const useUnit = unit || '';\r\n options.forEach((option) => {\r\n if (option.valueRange.length === 1) {\r\n option.label = `${option.valueRange[0].toLocaleString(this.locales)} ${useUnit}`;\r\n } else if (option.valueRange.length === 2) {\r\n option.label = `${option.valueRange[0].toLocaleString(\r\n this.locales,\r\n )} ${useUnit} - ${option.valueRange[1]?.toLocaleString(this.locales)} ${useUnit}`;\r\n }\r\n });\r\n },\r\n },\r\n});\r\n","import { createApp } from 'vue';\r\nimport { createPinia } from 'pinia';\r\nimport productSpecificationApp from '@/app/views/product-specification/product-specification.vue';\r\nimport { pushToDataLayer } from '@/js/analytics/analytics.methods';\r\n\r\n// Product Specification & Related Product components share a Pinia state for metric/imperial system changes\r\nexport const productPagePinia = createPinia();\r\nexport default class productSpecification {\r\n constructor(el) {\r\n this.el = el;\r\n this.init();\r\n }\r\n init() {\r\n // Init Product Specs\r\n createApp(productSpecificationApp)\r\n .use(productPagePinia)\r\n .provide('config', JCB)\r\n .provide('gaPush', pushToDataLayer)\r\n .mount(this.el);\r\n }\r\n}\r\n","import script from \"./product-card-detail-non-range.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./product-card-detail-non-range.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./product-card-detail-range.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./product-card-detail-range.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./product-listing-system-toggle.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./product-listing-system-toggle.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./product-specification.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./product-specification.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"names":["productsStore","useProductsStore","system","inject","computed","nonRangeData","value","props","dataPoint","label","toString","unit","optionalValue","imperialValueOptional","optionalUnit","imperialUnitOptional","rangeData","primaryValue","valueRange","secondaryValue","optionalPrimaryValue","imperialValueOptionalRange","optionalSecondaryValue","optionalPrimaryUnit","optionalSecondaryUnit","rangeTextFrom","useValue","rangeTextTo","config","gaPush","handleToggleChange","$event","gaPayloadProductSpecification","gaPayload","target","resetDynamicFiltersArr","event","product_name","productName","selected_measurement_system","product_category","category","data","detailsData","productData","onBeforeMount","setLocales","defaultSystem","manageSystemToggleDisplay","string","isNaN","parseFloat","toLocaleString","locales","defineStore","state","products","filters","productsFiltered","displayToggle","openedDropdown","dynamicFiltersArr","hideFilterMobile","getters","isSystemMetric","selectedFilters","filter","selected","filteredProductsCount","length","allProductsCount","selectedFiltersListString","selectedFiltersString","forEach","i","name","selectedOption","options","actions","sortProducts","this","item","find","prop","type","navigator","userLanguage","languages","language","browserLanguage","systemLanguage","JSON","parse","stringify","filterEverything","removeOneFilter","filterId","arr","map","id","push","option","isRangeFilterMatching","productValue","optionValue","firstProductVal","firstOptionVal","lastProductVal","Infinity","lastOptionVal","Array","isArray","isNumberFilterMatchingWithRange","selectedValue","product","resultsArr","filterFound","isMatching","selectedNonRangeValue","selectedRangeValue","propertyId","every","disableNotMatchingOptions","optionAvailable","optionNonRangeValue","optionRangeValue","atLeastOnePossible","some","disabled","allValuesTheSame","hidden","keys","hasSystemValue","key","Object","hasMetricKeys","hasImperialKeys","hasRangeDetail","tag","createFiltersLabels","createNumberLabel","metricOptions","metricUnit","imperialOptions","imperialUnit","createRangeLabel","useUnit","productPagePinia","createPinia","productSpecification","el","init","createApp","productSpecificationApp","use","provide","JCB","pushToDataLayer","mount"],"sourceRoot":""}