{"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":""}