{"version":3,"sources":["webpack:///./src/views/Research.vue?eafb","webpack:///./src/views/Research.vue?abc7","webpack:///./src/views/Research.vue","webpack:///./node_modules/core-js/modules/es.array.some.js","webpack:///./src/views/Research.vue?989e","webpack:///src/views/Research.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","category","class","key","staticClass","_v","mobileFiltersOpen","pageReady","_b","ref","elementSizes","attrs","resizeTrig","hero","_e","dimensions","width","on","$event","triggerQueryChange","filtersHash","searchString","mobileFiltersChanged","filtersChangedHandler","searchByString","domProps","_s","pageTitle","localize","gridReady","filteredItems","itemsPerPage","paginated","next","prev","onLangsPageChange","currentItem","staticRenderFns","component","$","$some","some","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","target","proto","forced","callbackfn","arguments","length","undefined","data","pageSubTitle","ro","productAttributesHash","items","paginate","trigger","filterTimer","hickup","currentCategoryValue","categoryChanged","savedFilterChanged","activeFilters","filtersReady","cid","openMobileCats","components","FilterPanel","GridItems","watch","$route","toggleOverlay","initSearchTermParam","$refs","paginator","$nextTick","hasPages","goToPage","destroyed","updateFiltersHash","computed","methods","params","searchterm","$set","fetchItemPropsString","_","values","pick","string","toLowerCase","checkFilters","bool","window","scrollTo","activateFiltersByQuery","query","each","parent","value","active","item","visible","filters","activefilters","scrollToTop","triggerResize","debounce","Date","getTime","removeResizeObserver","els","initResizeObserver","adjustResponsiveClasses","entry","contentRect","left","right","offsetWidth","index","toggleMobileCats","beforeEnter","el","style","opacity","transform","limited","enter","vm","setTimeout","animate","done","leave"],"mappings":"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","file":"js/chunk-3f87a413.d84add37.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.category === 404)?_c('div',{class:['container']},[_c('h2',{key:\"404h2\",staticClass:\"py-xl\"},[_vm._v(\" Sorry... don't know nothing about this page. \")]),_c('h5',{key:\"404h5\"},[_vm._v(\"Seriously, no clue what your talking about!\")])]):_c('div',{key:\"research\",class:[\n 'research',\n _vm.mobileFiltersOpen ? 'filters-open' : '',\n !_vm.pageReady ? 'still-loading' : ''\n ]},[(!_vm.pageReady)?_c('preloader',{key:\"page-preloader\"}):[(_vm.hero)?_c('slider',_vm._b({ref:\"hero\",class:['page-component', (\"el-size--\" + (_vm.elementSizes[0]))],attrs:{\"size\":_vm.elementSizes[0],\"resize-trig\":_vm.resizeTrig}},'slider',_vm.hero,false)):_vm._e(),_c('div',{ref:\"grid\",staticClass:\"research--inner page-component grid-flex-wrap px-2xl pt-2xl\",class:[(\"el-size--\" + (_vm.elementSizes[0]))]},[(_vm.dimensions.width < 600)?_c('i',{class:[\n 'toggle',\n 'unflex',\n 'fas',\n !_vm.mobileFiltersOpen ? 'fa-sliders-h' : 'fa-chevron-left'\n ],on:{\"click\":function($event){_vm.mobileFiltersOpen = !_vm.mobileFiltersOpen}}}):_vm._e(),(_vm.pageReady)?_c('filter-panel',{class:[_vm.dimensions.width < 600 ? 'filter-panel__mobile' : ''],attrs:{\"trigger-query\":_vm.triggerQueryChange,\"ui-filters\":_vm.filtersHash,\"input-search\":_vm.searchString,\"mobile-open\":_vm.mobileFiltersOpen},on:{\"mobile-filters-open\":_vm.mobileFiltersChanged,\"filters-changed\":_vm.filtersChangedHandler,\"search-by-string\":_vm.searchByString}}):_vm._e(),(!_vm.mobileFiltersOpen)?_c('div',{staticClass:\"research--grid page-component flex-1 pb-3xl px-2xl\",class:[(\"el-size--\" + (_vm.elementSizes[2]))]},[_c('div',{staticClass:\"page-header pb-2xl\"},[(_vm.pageTitle)?_c('h3',{staticClass:\"font-rg\",domProps:{\"textContent\":_vm._s(_vm.pageTitle)}}):_vm._e(),(_vm.pageSubTitle)?_c('div',{staticClass:\"font-rg\",domProps:{\"innerHTML\":_vm._s(_vm.localize('all_materials_english'))}}):_vm._e()]),(!_vm.gridReady)?_c('preloader',{key:\"loading\"}):_c('paginate',{ref:\"paginator\",staticClass:\"paginate-langs\",attrs:{\"name\":\"filteredItems\",\"list\":_vm.filteredItems,\"per\":_vm.itemsPerPage,\"tag\":\"div\"}},[_c('keep-alive',[_c('grid-items',{attrs:{\"grid-type\":\"research\",\"paginateditems\":_vm.paginated('filteredItems')}})],1)],1),_c('transition',{attrs:{\"name\":\"slide-up\",\"appear\":\"\"}},[(_vm.hasPages)?_c('div',{staticClass:\"pager align-left pt-l\"},[_c('paginate-links',{ref:\"pager\",attrs:{\"id\":\"pager\",\"for\":\"filteredItems\",\"limit\":4,\"show-step-links\":true,\"step-links\":{ next: _vm.localize('Next'), prev: _vm.localize('Prev') }},on:{\"change\":_vm.onLangsPageChange}})],1):_vm._e()])],1):_vm._e()],1)],_c('keep-alive',[(_vm.currentItem)?_c('router-view',{attrs:{\"currentItem\":_vm.currentItem}}):_vm._e()],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Research.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Research.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Research.vue?vue&type=template&id=27de0c91&\"\nimport script from \"./Research.vue?vue&type=script&lang=js&\"\nexport * from \"./Research.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Research.vue?vue&type=style&index=0&lang=stylus&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/style-resources-loader/lib/index.js??ref--11-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Research.vue?vue&type=style&index=0&lang=stylus&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/style-resources-loader/lib/index.js??ref--11-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Research.vue?vue&type=style&index=0&lang=stylus&\"","<template>\n <div :class=\"['container']\" v-if=\"category === 404\">\n <h2 key=\"404h2\" class=\"py-xl\">\n Sorry... don't know nothing about this page.\n </h2>\n <h5 key=\"404h5\">Seriously, no clue what your talking about!</h5>\n </div>\n <div\n v-else\n key=\"research\"\n :class=\"[\n 'research',\n mobileFiltersOpen ? 'filters-open' : '',\n !pageReady ? 'still-loading' : ''\n ]\"\n >\n <preloader key=\"page-preloader\" v-if=\"!pageReady\" class=\"\" />\n <template v-else>\n <slider\n ref=\"hero\"\n v-if=\"hero\"\n :size=\"elementSizes[0]\"\n :resize-trig=\"resizeTrig\"\n v-bind=\"hero\"\n :class=\"['page-component', `el-size--${elementSizes[0]}`]\"\n >\n </slider>\n\n <div\n ref=\"grid\"\n class=\"research--inner page-component grid-flex-wrap px-2xl pt-2xl\"\n :class=\"[`el-size--${elementSizes[0]}`]\"\n >\n <i\n v-if=\"dimensions.width < 600\"\n @click=\"mobileFiltersOpen = !mobileFiltersOpen\"\n :class=\"[\n 'toggle',\n 'unflex',\n 'fas',\n !mobileFiltersOpen ? 'fa-sliders-h' : 'fa-chevron-left'\n ]\"\n ></i>\n <filter-panel\n v-if=\"pageReady\"\n :class=\"[dimensions.width < 600 ? 'filter-panel__mobile' : '']\"\n @mobile-filters-open=\"mobileFiltersChanged\"\n @filters-changed=\"filtersChangedHandler\"\n @search-by-string=\"searchByString\"\n :trigger-query=\"triggerQueryChange\"\n :ui-filters=\"filtersHash\"\n :input-search=\"searchString\"\n :mobile-open=\"mobileFiltersOpen\"\n ></filter-panel>\n <div\n class=\"research--grid page-component flex-1 pb-3xl px-2xl\"\n :class=\"[`el-size--${elementSizes[2]}`]\"\n v-if=\"!mobileFiltersOpen\"\n >\n <div class=\"page-header pb-2xl\">\n <h3 class=\"font-rg\" v-if=\"pageTitle\" v-text=\"pageTitle\"></h3>\n <div\n class=\"font-rg\"\n v-if=\"pageSubTitle\"\n v-html=\"localize('all_materials_english')\"\n ></div>\n </div>\n <preloader v-if=\"!gridReady\" key=\"loading\"></preloader>\n <paginate\n ref=\"paginator\"\n name=\"filteredItems\"\n :list=\"filteredItems\"\n :per=\"itemsPerPage\"\n tag=\"div\"\n class=\"paginate-langs\"\n v-else\n >\n <keep-alive>\n <grid-items\n grid-type=\"research\"\n :paginateditems=\"paginated('filteredItems')\"\n ></grid-items>\n </keep-alive>\n </paginate>\n\n <transition name=\"slide-up\" appear>\n <div class=\"pager align-left pt-l\" v-if=\"hasPages\">\n <paginate-links\n id=\"pager\"\n ref=\"pager\"\n for=\"filteredItems\"\n :limit=\"4\"\n :show-step-links=\"true\"\n @change=\"onLangsPageChange\"\n :step-links=\"{ next: localize('Next'), prev: localize('Prev') }\"\n ></paginate-links>\n </div>\n </transition>\n </div>\n </div>\n </template>\n <keep-alive>\n <router-view v-if=\"currentItem\" :currentItem=\"currentItem\"></router-view>\n </keep-alive>\n </div>\n</template>\n<script>\nimport { mapState, mapActions } from \"vuex\";\nimport { storage } from \"@/utils\";\n\nimport FilterPanel from \"@/components/FilterPanel.vue\";\nimport GridItems from \"@/components/grid/GridItems.vue\";\nexport default {\n data() {\n return {\n pageTitle: null,\n pageSubTitle: null,\n hero: null,\n ro: null,\n elementSizes: [],\n resizeTrig: -1,\n category: null,\n productAttributesHash: [],\n items: [],\n paginate: [\"filteredItems\"],\n trigger: -1,\n filteredItems: [],\n filterTimer: 2000,\n hickup: 0,\n triggerQueryChange: -1,\n currentCategoryValue: null,\n categoryChanged: false,\n savedFilterChanged: false,\n activeFilters: [],\n currentItem: null,\n // pageReady: false,\n filtersReady: false,\n gridReady: false,\n cid: null,\n openMobileCats: false,\n mobileFiltersOpen: false,\n searchString: null\n };\n },\n components: {\n FilterPanel,\n GridItems\n },\n async beforeRouteUpdate(to, from, next) {\n this.triggerQueryChange = new Date().getTime();\n next();\n },\n watch: {\n $route() {\n this.toggleOverlay(false);\n this.initSearchTermParam();\n },\n \"$route.query\"() {\n if (this.$refs.paginator) {\n this.$nextTick(function() {\n if (this.hasPages) {\n this.$refs.paginator.goToPage(1);\n }\n });\n }\n },\n async \"locale.ln\"() {\n this.setPageReady(false);\n await this.fetchData(this.$route);\n this.setPageReady(true);\n }\n },\n async created() {\n await this.fetchData(this.$route);\n this.setPageReady(true);\n },\n async mounted() {\n this.initSearchTermParam();\n },\n destroyed() {\n this.updateFiltersHash([]);\n },\n computed: {\n ...mapState([\n \"rawitems\",\n \"filtersHash\",\n \"pageReady\",\n \"locale\",\n \"dimensions\"\n ]),\n hasPages() {\n return (\n this.filteredItems.length &&\n this.filteredItems.length > this.itemsPerPage\n );\n },\n itemsPerPage() {\n return 8;\n }\n },\n methods: {\n initSearchTermParam() {\n if (this.$route.params.searchterm) {\n this.$set(\n this,\n \"searchString\",\n this.$route.params.searchterm.replace(/-/g, \" \")\n );\n }\n },\n fetchItemPropsString(item) {\n let pick = _.pick(item, [\n \"cat\",\n \"title\",\n \"description\",\n \"material\",\n \"platform\",\n \"connection\"\n ]);\n return _.values(pick)\n .join(\"\")\n .toLowerCase();\n },\n searchByString(string) {\n if (!string) {\n this.searchString = null;\n this.checkFilters();\n } else {\n this.searchString = string.toLowerCase();\n this.gridReady = false;\n this.$set(this, \"filteredItems\", []);\n this.$nextTick(async function() {\n this.$set(this, \"filteredItems\", await this.freeSearchItems());\n this.gridReady = true;\n });\n }\n },\n async freeSearchItems() {\n let items = _.sortBy(this.items, item => -new Date(item.date_created));\n if (this.searchString) {\n return items.filter(item => {\n let itemPropsString = this.fetchItemPropsString(item);\n return itemPropsString.indexOf(this.searchString) > -1;\n });\n }\n return items;\n },\n mobileFiltersChanged(bool) {\n this.mobileFiltersOpen = bool;\n },\n onLangsPageChange() {\n let top = this.$refs.grid.offsetTop - 60;\n window.scrollTo({ top, behavior: \"smooth\" });\n },\n async fetchData() {\n this.scrollToTop();\n let items = this.rawitems;\n if (!items) {\n items = await this.initRawItems();\n }\n let item = items.find(\n item => item.path.toLowerCase().indexOf(\"research-library\") > -1\n );\n if (item && item.cid) {\n // console.log(\"item.cid >> \", item.cid);\n let layout = await this.initRouteByCid(item.cid);\n if (layout.children) {\n let hero = _.find(layout.children, { type: \"slider\" });\n this.$set(this, \"hero\", hero);\n\n let itemData = _.find(layout.children, { type: \"common-data\" });\n if (itemData && itemData.properties.title) {\n this.$set(this, \"pageTitle\", itemData.properties.title);\n }\n if (itemData && itemData.properties.subtitle) {\n this.$set(this, \"pageSubTitle\", itemData.properties.subtitle);\n }\n this.$set(this, \"items\", itemData.children);\n }\n\n await this.initFilters();\n this.filtersReady = true;\n this.checkFilters();\n } else {\n this.category = 404;\n }\n this.$nextTick(function() {\n this.initResizeObserver();\n });\n return true;\n },\n async initFilters() {\n let ln,\n cc,\n vm = this;\n\n // active cache?\n let useCache = vm.$useCache[\"research\"];\n // locale keys\n ({ ln, cc } = this.locale);\n\n let storageKey = `filters_research_${ln}_${cc}`;\n\n return new Promise(async resolve => {\n let filters = storage.get(storageKey),\n _parsed;\n if (filters) {\n _parsed = JSON.parse(filters);\n } else {\n await fetch(\n `https://api.mis-implants.com/api/ui?type=articles_filters`,\n {\n headers: {\n ln,\n cc,\n \"Access-Control-Allow-Origin\": \"*\",\n \"Content-Type\": \"application/json\"\n }\n }\n )\n .then(function(response) {\n return response.json();\n })\n .then(function(json) {\n // console.log(\"_json >> \", json);\n let filters = json.ui;\n // let _json = JSON.parse(json);\n filters.forEach(filter => {\n filter.visible = filter.type === \"sCIDS\";\n });\n // console.log(\"filters response > \", filters);\n useCache && storage.set(storageKey, filters);\n _parsed = filters;\n vm.$nextTick(function() {\n resolve(filters);\n });\n });\n }\n /*\n Check route query for active fitlers\n and update the filter hash accordingly\n */\n _parsed = vm.activateFiltersByQuery(_parsed);\n // console.log(\"_parsed after query .> \", _parsed);\n vm.updateFiltersHash(_parsed);\n vm.$nextTick(function() {\n resolve(_parsed);\n });\n });\n },\n /*\n\t\t\tUse URL query to filter items\n\t\t\tQUERY > TO > FILTER\n\t\t*/\n activateFiltersByQuery(_filters) {\n let query = this.$route.query,\n filters = _filters;\n if (query) {\n _.each(query, (v, k) => {\n let values = v.split(\",\");\n let parent = _.find(filters, { name: k });\n if (parent) {\n if (parent.value) {\n parent.value = values;\n parent.active = true;\n } else {\n _.each(values, value => {\n let item = _.find(\n parent.filters,\n f => f.name.toLowerCase() === value.toLowerCase()\n );\n if (item) {\n item.active = true;\n }\n });\n }\n parent.visible = true;\n }\n });\n }\n return filters;\n },\n filtersChangedHandler(activefilters) {\n // console.log(\"filtersChangedHandler >> \", activefilters);\n this.activeFilters = activefilters;\n if (this.items.length) {\n this.checkFilters();\n }\n },\n async checkFilters() {\n // console.log(\"FCHEK FILTERS\");\n this.gridReady = false;\n this.$set(this, \"filteredItems\", []);\n this.$nextTick(async function() {\n let items = await this.filterItems();\n // this.$set(this, \"filteredItems\", _.orderBy(items, \"order\", [\"asc\"]));\n this.$set(\n this,\n \"filteredItems\",\n _.orderBy(items, \"order\", [\"asc\"])\n\n // _.sortBy(items, item => -new Date(item.date_created))\n );\n this.gridReady = true;\n // console.log(\"GRID READY\");\n });\n },\n async filterItems() {\n // console.log(\"FILTER ITESM >> \", this.items);\n if (!this.activeFilters.length) {\n return this.items;\n }\n let group = _.groupBy(this.activeFilters, \"type\"), // keyed filters\n items = this.items;\n\n // console.log(\"group >> \", group);\n\n for (var type in group) {\n // let type =\n let _ids = _.map(group[type], \"id\");\n if (type === \"sCIDS\") {\n // console.log(\"sCIDS > \", _.map(_ids, Number));\n items = _.filter(\n items,\n item => _.map(_ids, Number).indexOf(item.pid) > -1\n );\n } else if (type === \"sCPIDS\") {\n // products\n items = _.filter(items, item =>\n item.products.some(v => _.map(_ids, Number).indexOf(v) >= 0)\n );\n } else if (type === \"sYR\") {\n // year\n items = _.filter(\n items,\n item => _ids.indexOf(item.date_created.split(\"/\")[2]) > -1\n );\n } else if (type === \"sSt\") {\n // study\n items = _.filter(items, item => _ids.indexOf(item.studyType) > -1);\n }\n }\n\n return items;\n },\n scrollToTop() {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n },\n /*\n Will set off everytime an element has\n resized and will change a random trigger\n that Components can listen to if needed.\n */\n triggerResize: _.debounce(function() {\n this.resizeTrig = new Date().getTime();\n }, 300),\n removeResizeObserver() {\n const vm = this,\n els = document.querySelectorAll(\".page-component\");\n this.elementSizes.length = els.length;\n [...els].forEach(el => vm.ro.unobserve(el));\n },\n initResizeObserver: _.debounce(async function() {\n const vm = this;\n /*\n The callback will fire for every\n observed element resize\n\n */\n if (\"ResizeObserver\" in window === false) {\n // Loads polyfill asynchronously, only if required.\n const module = await import(\"@juggle/resize-observer\");\n window.ResizeObserver = module.ResizeObserver;\n }\n this.ro = new ResizeObserver(entries => {\n // console.log(\"Elements resized:\", entries.length);\n entries.forEach(\n _.debounce((entry, index) => {\n vm.adjustResponsiveClasses(entry, index);\n vm.triggerResize();\n }, 300)\n );\n });\n /*\n Catch all root level components\n and start observing them for resizes...\n */\n const els = document.querySelectorAll(\".page-component\");\n this.elementSizes.length = els.length;\n [...els].forEach((el, index) => {\n vm.ro.observe(el, { box: \"border-box\" });\n vm.adjustResponsiveClasses(el, index);\n });\n }, 300),\n adjustResponsiveClasses(entry, index) {\n let width;\n if (entry.contentRect) {\n const { left, right } = entry.contentRect;\n width = left + right;\n } else {\n width = entry.offsetWidth;\n }\n if (width > 1200) {\n this.$set(this.elementSizes, index, \"large\");\n } else if (width > 767) {\n this.$set(this.elementSizes, index, \"medium\");\n } else {\n this.$set(this.elementSizes, index, \"small\");\n }\n },\n toggleMobileCats() {\n this.openMobileCats = !this.openMobileCats;\n },\n beforeEnter: function(el) {\n el.style.opacity = 0;\n el.style.transform = this.limited ? \"translateX(20%)\" : \"translateY(20%)\";\n },\n enter: function(el, done) {\n var vm = this,\n lapse = this.limited ? 280 : 120,\n delay = el.dataset.index * lapse;\n setTimeout(function() {\n el.animate(\n {\n opacity: [0, 1],\n transform: vm.limited\n ? [\"translateX(20%)\", \"translateX(0)\"]\n : [\"translateY(20%)\", \"translateY(0)\"],\n easing: \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\"\n },\n { duration: 600, fill: \"forwards\" }\n ).onfinish = function() {\n done();\n };\n }, delay);\n },\n leave: function(el, done) {\n el.style.opacity = 0;\n el.style.transform = this.limited\n ? \"translateX(120%)\"\n : \"translateY(120%)\";\n done();\n },\n ...mapActions([\n \"initRawItems\",\n \"initRouteByCid\",\n \"updateFiltersHash\",\n \"setPageReady\",\n \"toggleOverlay\"\n ])\n }\n};\n</script>\n<style lang=\"stylus\">\n.toggle\n position relative\n z-index 99\n.page\n position relative\n // background linear-gradient(to bottom, gray_0 80%, #fff)\n z-index 9\n.research\n background #fff\n // min-height 70vh\n .filter-panel__mobile\n top 0\n // &.filters-open\n // max-height 100vh\n // overflow hiddens\n .publication-list\n width 80%\n &--inner\n width 100%\n position relative\n _flex(row, nowrap, flex-start, space-between)\n text-align left\n\n &--grid\n position relative\n +below(769px)\n padding 4vh 0 0 0 !important\n</style>\n"],"sourceRoot":""}