export function focusNextMap(reverse = false) { const renderedList = this.renderMaps .map(render => render.target) .filter(ele => ele.getAttribute('data-state') === 'rendered') const mapNum = renderedList.length if (mapNum === 0) return // Get current focused map element const currentFocus = this.container.querySelector('.map-container.focus') // Remove class name of focus for ALL candidates // This may trigger animation renderedList.forEach(ele => ele.classList.remove('focus')) // Get next existing map element const padding = reverse ? -1 : 1 let nextIndex = currentFocus ? renderedList.indexOf(currentFocus) + padding : 0 nextIndex = (nextIndex + mapNum) % mapNum const nextFocus = renderedList[nextIndex] nextFocus.classList.add("focus") return nextFocus } export function focusDelay() { return window.getComputedStyle(this.showcase).display === 'none' ? 50 : 300 } export function switchToNextLayout(reverse = false) { const layouts = this.layouts const currentLayoutName = this.container.getAttribute('data-layout') const currentIndex = layouts.map(l => l.name).indexOf(currentLayoutName) const padding = reverse ? -1 : 1 const nextIndex = currentIndex === -1 ? 0 : (currentIndex + padding + layouts.length) % layouts.length const nextLayout = layouts[nextIndex] this.container.setAttribute("data-layout", nextLayout.name) } export function focusNextBlock(reverse = false) { const blocks = this.blocks.filter(b => b.checkVisibility({ contentVisibilityAuto: true, opacityProperty: true, visibilityProperty: true, })) const currentBlock = blocks.find(b => b.classList.contains('focus')) const currentIndex = blocks.indexOf(currentBlock) const padding = reverse ? -1 : 1 const nextIndex = currentIndex === -1 ? 0 : (currentIndex + padding + blocks.length) % blocks.length const nextBlock = blocks[nextIndex] blocks.forEach(b => b.classList.remove('focus')) nextBlock?.classList?.add('focus') nextBlock.scrollIntoView({ behavior: 'smooth', block: "nearest" }) } export function removeBlockFocus() { this.blocks.forEach(b => b.classList.remove('focus')) }