{"version":3,"sources":["webpack://loftware/./src/js/helpers/variables.js","webpack://loftware/./src/js/components/react/facet/Facet.js","webpack://loftware/./src/js/components/react/facet/FacetList.js","webpack://loftware/./src/js/components/react/LoadMore.js","webpack://loftware/./src/js/components/react/Dropdown.js","webpack://loftware/./src/js/modules/react/SearchResultsListing/components/SearchBar.js","webpack://loftware/./src/js/modules/react/SearchResultsListing/components/SearchResultCard.js","webpack://loftware/./src/js/modules/react/SearchResultsListing/hooks/useParams.js","webpack://loftware/./src/js/modules/react/SearchResultsListing/hooks/useFetch.js","webpack://loftware/./src/js/modules/react/SearchResultsListing/index.js","webpack://loftware/./src/js/helpers/createScrollShapes.js","webpack://loftware/./src/js/helpers/index.js"],"names":[],"mappings":"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","file":"scripts/46.21f40850ae3af936e3b0.js","sourcesContent":["// /**\r\n// * Key code list object\r\n// */\r\nexport const keyCode = {\r\n TAB: 9,\r\n RETURN: 13,\r\n ESC: 27,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40\r\n};\r\n\r\n// /**\r\n// * Key code list object\r\n// */\r\nexport const breakpoints = {\r\n mobile: 360,\r\n tablet: 768,\r\n tabletLandscape: 1024,\r\n desktop: 1280,\r\n wide: 1600\r\n};\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { open, close } from '../../../helpers/index';\r\n\r\nconst Facet = ({ facet, selected, onFilterChange, onListDisplay }) => {\r\n const breakpoint = window.matchMedia('(max-width: 1279px)');\r\n const { keyword, name } = facet;\r\n const [display, setDisplay] = useState(!breakpoint.matches);\r\n const filterList = useRef(null);\r\n\r\n const handleSelect = value => {\r\n const selectedClone = selected ? [...selected] : [];\r\n\r\n if (selectedClone?.includes(value)) {\r\n selectedClone?.splice(selectedClone?.indexOf(value), 1);\r\n } else {\r\n selectedClone?.push(value);\r\n }\r\n\r\n const facetItems = {\r\n name: keyword,\r\n options: selectedClone\r\n };\r\n\r\n onFilterChange(facetItems);\r\n };\r\n\r\n useEffect(() => {\r\n const listener = () => {\r\n if (breakpoint.matches) {\r\n setDisplay(false);\r\n } else {\r\n setDisplay(true);\r\n }\r\n };\r\n\r\n breakpoint.addListener(listener);\r\n return () => breakpoint.removeListener(listener);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (display) {\r\n filterList.current.style = null;\r\n open({ element: filterList.current });\r\n } else {\r\n close({\r\n element: filterList.current\r\n });\r\n }\r\n }, [display, facet]);\r\n\r\n return (\r\n
\r\n onListDisplay()}\r\n onClick={() => setDisplay(!display)}\r\n >\r\n {name}\r\n
\r\n {display ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n {facet.options.map((option, i) => (\r\n
\r\n \r\n

{option.matches}

\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nFacet.propTypes = {\r\n facet: PropTypes.object,\r\n selected: PropTypes.array || PropTypes.string,\r\n onFilterChange: PropTypes.func.isRequired,\r\n onListDisplay: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Facet;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { open, close } from '../../../helpers/index';\r\n\r\nimport Facet from './Facet';\r\n\r\nconst FacetList = ({\r\n filterResultsLabel,\r\n facets,\r\n selectedFacets,\r\n onFiltersChange,\r\n loading\r\n}) => {\r\n const breakpoint = window.matchMedia('(max-width: 1279px)');\r\n const filterLists = useRef(null);\r\n const [displayFilters, setDisplayFilters] = useState(!breakpoint.matches);\r\n\r\n useEffect(() => {\r\n const listener = () => {\r\n if (breakpoint.matches) {\r\n setDisplayFilters(false);\r\n } else {\r\n setDisplayFilters(true);\r\n }\r\n };\r\n\r\n breakpoint.addListener(listener);\r\n return () => breakpoint.removeListener(listener);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (displayFilters) {\r\n open({ element: filterLists.current, duration: 200 });\r\n } else {\r\n close({ element: filterLists.current, duration: 200 });\r\n }\r\n }, [displayFilters]);\r\n\r\n const updateHeight = () => {\r\n filterLists.current.style.height = 'auto';\r\n };\r\n\r\n return (\r\n
\r\n {loading &&
}\r\n {

{filterResultsLabel}

}\r\n {facets && !loading && (\r\n setDisplayFilters(!displayFilters)}\r\n >\r\n {filterResultsLabel}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {!!facets &&\r\n facets.map((facet, i) => (\r\n \r\n ))}\r\n
\r\n \r\n );\r\n};\r\n\r\nFacetList.propTypes = {\r\n facets: PropTypes.array,\r\n subTitle: PropTypes.string,\r\n filterResultsLabel: PropTypes.string,\r\n selectedFacets: PropTypes.object,\r\n loading: PropTypes.bool,\r\n onFiltersChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default FacetList;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst LoadMore = ({ currentPage, totalPages, onNavigate, resultsPerPage }) => (\r\n
\r\n {resultsPerPage && totalPages > 1 && currentPage !== totalPages && (\r\n {\r\n onNavigate(currentPage + 1);\r\n }}\r\n >\r\n View {resultsPerPage} More\r\n \r\n )}\r\n
\r\n);\r\n\r\nLoadMore.propTypes = {\r\n currentPage: PropTypes.number.isRequired,\r\n totalPages: PropTypes.number.isRequired,\r\n onNavigate: PropTypes.func.isRequired,\r\n resultsPerPage: PropTypes.number\r\n};\r\n\r\nexport default LoadMore;\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Dropdown = ({ selectedOption, options = [], onChange, innerLabel }) => {\r\n const getDisplayLabel = () => {\r\n if (selectedOption) {\r\n if (innerLabel) {\r\n return `${innerLabel} ${selectedOption.label.toLowerCase()}`;\r\n }\r\n return `${selectedOption.label}`;\r\n }\r\n return null;\r\n };\r\n\r\n const [selectLabel, setSelectLabel] = useState(getDisplayLabel());\r\n\r\n const handleOptionChange = e => {\r\n const option = options.find(el => el.value === e.target.value);\r\n onChange(option);\r\n };\r\n\r\n useEffect(() => {\r\n setSelectLabel(getDisplayLabel());\r\n }, [selectedOption]);\r\n\r\n return (\r\n \r\n \r\n {options.map((option, i) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nDropdown.propTypes = {\r\n selectedOption: PropTypes.shape({\r\n value: PropTypes.PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n PropTypes.bool\r\n ]),\r\n label: PropTypes.string\r\n }),\r\n options: PropTypes.arrayOf(PropTypes.object),\r\n onChange: PropTypes.func.isRequired,\r\n innerLabel: PropTypes.string\r\n};\r\n\r\nexport default Dropdown;\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst SearchForm = ({\r\n placeholder,\r\n searchLabel,\r\n clearLabel,\r\n onSearch,\r\n initialQuery,\r\n inputLabel\r\n}) => {\r\n const [q, setQuery] = useState(initialQuery || '');\r\n const [querySubmitted, setQuerySubmitted] = useState(!!initialQuery);\r\n const component = useRef(null);\r\n useEffect(() => {\r\n if (initialQuery) {\r\n setQuery(initialQuery);\r\n setQuerySubmitted(true);\r\n } else {\r\n setQuerySubmitted(false);\r\n }\r\n }, [initialQuery]);\r\n\r\n useEffect(() => {\r\n if (q.length === 0) onSearch(q);\r\n }, [q]);\r\n\r\n const handleTextChange = e => {\r\n e.preventDefault();\r\n const { value } = e.target;\r\n setQuery(value);\r\n setQuerySubmitted(false);\r\n };\r\n\r\n const handleInputClear = e => {\r\n e.preventDefault();\r\n setQuery('');\r\n };\r\n\r\n const handleSubmit = e => {\r\n e.preventDefault();\r\n onSearch(q);\r\n };\r\n\r\n const handleInputFocus = e => {\r\n e.target.placeholder = '';\r\n };\r\n\r\n const handleInputBlur = e => {\r\n e.target.placeholder = q.length === 0 ? placeholder : '';\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n = 1)\r\n ? 'search-bar__input'\r\n : 'search-bar__input search-bar__input--clear-enabled'\r\n }\r\n placeholder={placeholder}\r\n />\r\n \r\n
\r\n = 1)\r\n ? 'search-bar__clear search-bar__clear--disabled'\r\n : 'search-bar__clear'\r\n }\r\n onClick={handleInputClear}\r\n aria-label={clearLabel}\r\n >\r\n {clearLabel}\r\n \r\n = 1\r\n ? 'search-bar__submit'\r\n : 'search-bar__submit search-bar__submit--disabled'\r\n }\r\n aria-label={searchLabel}\r\n disabled={!(q.length >= 1)}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nSearchForm.propTypes = {\r\n initialQuery: PropTypes.string,\r\n placeholder: PropTypes.string.isRequired,\r\n searchLabel: PropTypes.string.isRequired,\r\n clearLabel: PropTypes.string.isRequired,\r\n onSearch: PropTypes.func,\r\n inputLabel: PropTypes.string.isRequired\r\n};\r\n\r\nexport default SearchForm;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport parse from 'html-react-parser';\r\n\r\nconst SearchCard = ({ searchItem, onTagClick }) => {\r\n const { heading, copy, url, isExternal, tags } = searchItem;\r\n\r\n const handleClick = e => {\r\n e.preventDefault();\r\n onTagClick(e.currentTarget.textContent);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{parse(heading)}

\r\n
\r\n
\r\n {copy && (\r\n
\r\n

{parse(copy)}

\r\n
\r\n )}\r\n {tags && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nSearchCard.propTypes = {\r\n heading: PropTypes.string,\r\n copy: PropTypes.string,\r\n url: PropTypes.string,\r\n searchItem: PropTypes.object,\r\n onTagClick: PropTypes.func\r\n};\r\n\r\nexport default SearchCard;\r\n","import { useRef, useMemo, useState, useEffect } from 'react';\r\nimport qs from 'qs';\r\n\r\nconst useParams = () => {\r\n const updateQs = useRef(false);\r\n const { q, page, sort, ...filters } = useMemo(() => {\r\n // eslint-disable-next-line no-shadow\r\n const { q, page, sort, ...filters } = qs.parse(window.location.search, {\r\n ignoreQueryPrefix: true\r\n });\r\n\r\n Object.keys(filters).forEach(filter => {\r\n if (typeof filters[filter] === 'string') {\r\n filters[filter] = [filters[filter]];\r\n }\r\n });\r\n\r\n return { q, page, sort, ...filters };\r\n }, []);\r\n\r\n const [params, setParams] = useState({\r\n q: (q && q.toString()) || '',\r\n page: page || 1,\r\n sort: sort && sort.toString(),\r\n filters\r\n });\r\n\r\n useEffect(() => {\r\n const buildQueryString = () => {\r\n const qsParams = {};\r\n\r\n if (params.q) {\r\n qsParams.q = params.q;\r\n }\r\n\r\n if (params.sort) {\r\n qsParams.sort = params.sort;\r\n }\r\n\r\n if (params.filters) {\r\n Object.keys(params.filters).forEach(key => {\r\n qsParams[key] = params.filters[key];\r\n });\r\n }\r\n const qsValue = qs.stringify(qsParams, {\r\n encode: false,\r\n encodeValuesOnly: true,\r\n arrayFormat: 'repeat'\r\n });\r\n\r\n const newUrl = `${window.location.protocol}//${window.location.host}${\r\n window.location.pathname\r\n }${qsValue ? `?${qsValue}` : ''}`;\r\n window.history.pushState({}, '', newUrl);\r\n };\r\n\r\n if (updateQs.current) {\r\n buildQueryString();\r\n } else {\r\n updateQs.current = true;\r\n }\r\n }, [params]);\r\n\r\n useEffect(() => {\r\n const handlePopState = () => {\r\n const qsParams = qs.parse(window.location.search, {\r\n ignoreQueryPrefix: true\r\n });\r\n updateQs.current = false;\r\n // eslint-disable-next-line no-shadow\r\n const { q: _q, page: _page, sort: _sort, ...rest } = qsParams;\r\n\r\n // console.log(\r\n // '_q',\r\n // _q,\r\n // '_page',\r\n // _page,\r\n // '_sort',\r\n // _sort,\r\n // '_tag',\r\n // _tag,\r\n // 'rest',\r\n // rest\r\n // );\r\n\r\n Object.keys(rest).forEach(filter => {\r\n if (typeof rest[filter] === 'string') {\r\n rest[filter] = [rest[filter]];\r\n }\r\n });\r\n\r\n setParams({\r\n q: _q || '',\r\n page: _page || 1,\r\n sort: _sort,\r\n filters: rest\r\n });\r\n };\r\n\r\n window.addEventListener('popstate', handlePopState);\r\n return () => window.removeEventListener('popstate', handlePopState);\r\n }, []);\r\n\r\n const setQuery = qu => {\r\n setParams({ ...params, q: qu, page: 1 });\r\n };\r\n\r\n const setPage = p => {\r\n setParams({ ...params, page: p });\r\n };\r\n\r\n const setSort = s => {\r\n setParams({ ...params, sort: s, page: 1 });\r\n };\r\n\r\n const setFilters = f => {\r\n setParams({ ...params, filters: f });\r\n };\r\n\r\n const setTag = t => {\r\n // Leaving this here in case client wants to keep filters active when switching tag from a result card\r\n // setParams({ ...params, filters: { ...params.filters, tag: t }, page: 1 });\r\n setParams({ ...params, filters: { tag: t }, page: 1 });\r\n };\r\n\r\n return [params, setQuery, setPage, setSort, setFilters, setTag];\r\n};\r\n\r\nexport default useParams;\r\n","import { useState, useEffect } from 'react';\r\nimport Axios from 'axios';\r\n\r\nconst useFetch = (endpoint, useQuery, { q, page, sort, filters, tag }) => {\r\n const [results, setResults] = useState({});\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n if (!useQuery || q || tag || filters) {\r\n const params = {};\r\n\r\n if (q) {\r\n params.q = q.toString();\r\n }\r\n\r\n if (page) {\r\n params.page = page;\r\n }\r\n\r\n if (sort) {\r\n params.sort = sort.toString();\r\n }\r\n\r\n if (filters) {\r\n Object.keys(filters).forEach(key => {\r\n params[key] = filters[key];\r\n });\r\n }\r\n\r\n if (tag) {\r\n params.tag = tag;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n const { data } = await Axios({\r\n method: 'POST',\r\n url: endpoint,\r\n data: params\r\n });\r\n setResults(data);\r\n } catch (error) {\r\n // eslint-disable-next-line no-console\r\n console.error(error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n };\r\n fetchData();\r\n }, [endpoint, q, page, sort, filters, tag]);\r\n return { results, loading };\r\n};\r\n\r\nexport default useFetch;\r\n","import React, { useRef, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport FacetList from '../../../components/react/facet/FacetList';\r\nimport LoadMore from '../../../components/react/LoadMore';\r\nimport Dropdown from '../../../components/react/Dropdown';\r\nimport SearchBar from './components/SearchBar';\r\nimport SearchResultCard from './components/SearchResultCard';\r\nimport createScrollShapes from '../../../helpers/createScrollShapes';\r\n\r\nimport { useParams, useFetch } from './hooks';\r\n\r\nconst SearchResultsListing = ({\r\n endpoint,\r\n heading,\r\n placeholder,\r\n searchSummaryLabel,\r\n searchLabel,\r\n clearLabel,\r\n filterResultsLabel,\r\n useQuery,\r\n initialQuery,\r\n inputLabel\r\n}) => {\r\n const [\r\n { q, page, sort, filters, tag },\r\n setQuery,\r\n setPage,\r\n setSort,\r\n setFilters,\r\n setTag\r\n ] = useParams();\r\n const [displayedResults, setDisplayedResults] = useState([]);\r\n const { results, loading } = useFetch(endpoint, useQuery, {\r\n q,\r\n page,\r\n sort,\r\n filters,\r\n tag\r\n });\r\n const {\r\n facets,\r\n resultListing,\r\n resultsInfo,\r\n totalResults,\r\n resultsPerPage,\r\n sortOptions\r\n } = results;\r\n\r\n const simpleMastheadContainer = useRef();\r\n const listingContainer = useRef();\r\n\r\n const handleReset = () => {\r\n setFilters({});\r\n };\r\n\r\n const handleLoadMore = p => {\r\n setPage(p);\r\n };\r\n\r\n const scrollIntoViewWithOffset = (selector, offset) => {\r\n window.scrollTo({\r\n behavior: 'smooth',\r\n top:\r\n selector?.getBoundingClientRect().top -\r\n document.body.getBoundingClientRect().top -\r\n offset\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (initialQuery) setQuery(initialQuery);\r\n if (simpleMastheadContainer?.current)\r\n createScrollShapes({\r\n containerEl: simpleMastheadContainer.current,\r\n count: 3,\r\n prefix: 'simple-masthead__',\r\n scrollAnimate: false\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (resultListing)\r\n setDisplayedResults([...displayedResults, ...resultListing]);\r\n }, [resultListing]);\r\n\r\n const handleFilters = filter => {\r\n const selectedFacets = { ...filters };\r\n selectedFacets[filter.name] = filter.options;\r\n setDisplayedResults([]);\r\n setFilters(selectedFacets);\r\n scrollIntoViewWithOffset(listingContainer.current, 150);\r\n };\r\n\r\n const handleQuery = query => {\r\n if (q !== query && query !== '') setDisplayedResults([]);\r\n setQuery(query);\r\n };\r\n\r\n const handleTag = t => {\r\n setDisplayedResults([]);\r\n setTag([t]);\r\n scrollIntoViewWithOffset(listingContainer.current, 150);\r\n };\r\n\r\n const handleSort = s => {\r\n if (sort !== s) setDisplayedResults([]);\r\n setSort(s);\r\n };\r\n\r\n return (\r\n
\r\n {useQuery && (\r\n
\r\n
\r\n
\r\n

{heading}

\r\n

\r\n {!!q && q.length && (\r\n <>\r\n {searchSummaryLabel} {q}\r\n \r\n )}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n {displayedResults.length > 0 && (\r\n <>\r\n
\r\n
\r\n {resultsInfo}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {resultsInfo}\r\n
\r\n
\r\n {sortOptions && (\r\n {\r\n if (opt.value === sort) {\r\n return opt.value;\r\n }\r\n return null;\r\n })\r\n : sortOptions.find(opt => opt.selected === true)\r\n }\r\n onChange={s => handleSort(s.value)}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n {displayedResults.map((result, i) => (\r\n handleTag(t)}\r\n />\r\n ))}\r\n
\r\n {loading && page > 1 &&
}\r\n {!!page && !loading && (\r\n handleLoadMore(p)}\r\n resultsPerPage={resultsPerPage}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n \r\n )}\r\n {resultListing?.length === 0 && !loading && (\r\n

{resultsInfo}

\r\n )}\r\n {displayedResults.length === 0 && loading && (\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nSearchResultsListing.propTypes = {\r\n endpoint: PropTypes.string.isRequired,\r\n heading: PropTypes.string,\r\n placeholder: PropTypes.string,\r\n searchSummaryLabel: PropTypes.string,\r\n searchLabel: PropTypes.string,\r\n clearLabel: PropTypes.string,\r\n filterResultsLabel: PropTypes.string.isRequired,\r\n useQuery: PropTypes.string,\r\n initialQuery: PropTypes.string,\r\n inputLabel: PropTypes.string\r\n};\r\n\r\nexport default React.memo(SearchResultsListing);\r\n","import anime from 'animejs/lib/anime.es';\r\nimport ScrollMagic from 'scrollmagic';\r\nimport { breakpoints } from './variables';\r\n\r\nconst _scrollAnimateShapes = ({\r\n containerEl,\r\n shapeContainer,\r\n offset = 0,\r\n count\r\n}) => {\r\n // Create animation timeline\r\n const timeline = anime.timeline({\r\n easing: 'easeOutExpo',\r\n duration: 1000,\r\n autoplay: false\r\n });\r\n\r\n [...shapeContainer.childNodes].forEach((shape, index) => {\r\n timeline.add(\r\n {\r\n targets: shape,\r\n translateY: [80, 0],\r\n opacity: [0, 1]\r\n },\r\n (1000 / count) * index\r\n );\r\n });\r\n\r\n // Add scrollmagic scene\r\n const controller = new ScrollMagic.Controller();\r\n new ScrollMagic.Scene({\r\n triggerElement: containerEl,\r\n duration: window.innerHeight * 0.7,\r\n offset,\r\n triggerHook: 1 // 0 = onLeave, 1 = onEnter\r\n })\r\n .on('progress', event => {\r\n timeline.seek(timeline.duration * event.progress);\r\n })\r\n .addTo(controller);\r\n};\r\n\r\nconst _animateShapes = ({ shapeContainer, count }) => {\r\n // Create animation timeline\r\n const timeline = anime.timeline({\r\n easing: 'easeOutExpo',\r\n duration: 600\r\n });\r\n\r\n [...shapeContainer.childNodes].forEach((shape, index) => {\r\n timeline.add(\r\n {\r\n targets: shape,\r\n translateY: [80, 0],\r\n opacity: [0, 1]\r\n },\r\n (600 / count) * index\r\n );\r\n });\r\n};\r\n\r\nconst createScrollShapes = ({\r\n containerEl,\r\n count,\r\n prefix = '',\r\n scrollAnimate = true,\r\n offset = 0\r\n}) => {\r\n const breakpoint = window.matchMedia(`(min-width: ${breakpoints.desktop}px)`);\r\n const shapeContainer = document.createElement('div');\r\n shapeContainer.classList.add(`${prefix}shapes-container`);\r\n\r\n for (let i = 0; i < count; i++) {\r\n const shape = document.createElement('span');\r\n shape.classList.add(`shape-${i + 1}`);\r\n shapeContainer.append(shape);\r\n }\r\n\r\n containerEl.append(shapeContainer);\r\n\r\n if (!breakpoint.matches) return;\r\n\r\n if (scrollAnimate) {\r\n _scrollAnimateShapes({ containerEl, shapeContainer, offset, count });\r\n } else {\r\n _animateShapes({ shapeContainer, count });\r\n }\r\n};\r\n\r\nexport default createScrollShapes;\r\n","import anime from 'animejs/lib/anime.es';\r\n\r\n// /**\r\n// * debounce function\r\n// * Delays the processing of the event\r\n// */\r\nexport const debounce = (callback, wait) => {\r\n let timerId;\r\n return (...args) => {\r\n clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n callback(...args);\r\n }, wait);\r\n };\r\n};\r\n\r\n// /**\r\n// * Checks if an element is focusable\r\n// *\r\n// * @param {Object} el - HTML element you want to check if it's focusable\r\n// */\r\nexport const isFocusable = el => {\r\n if (\r\n el.tabIndex > 0 ||\r\n (el.tabIndex === 0 && el.getAttribute('tabIndex') !== null)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (el.disabled) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable indent */\r\n switch (el.nodeName) {\r\n case 'A':\r\n return !!el.href && el.rel !== 'ignore';\r\n case 'INPUT':\r\n return el.type !== 'hidden' && el.type !== 'file';\r\n case 'BUTTON':\r\n case 'SELECT':\r\n case 'TEXTAREA':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n /* eslint-enable indent */\r\n};\r\n\r\n/**\r\n * Opens an element\r\n *\r\n * @example\r\n * import {open} from '../helpers';\r\n *\r\n * open({ element: this.el.querySelector('.element)});\r\n *\r\n * @param {Object} element - HTML element you want to target for animation\r\n * @param {Number} duration - Speed of the animation\r\n * @param {String} ease - Ease of the animation\r\n * @param {Function} onComplete - On complete function\r\n */\r\nexport const open = ({ element, duration = 400 }) => {\r\n anime({\r\n targets: element,\r\n height: [0, element.offsetHeight],\r\n easing: 'easeInOutQuad',\r\n duration\r\n });\r\n};\r\n/**\r\n * Closes an element\r\n *\r\n * @example\r\n * import {close} from '../helpers';\r\n *\r\n * close({ element: this.el.querySelector('.element)});\r\n *\r\n * @param {Object} element - HTML element you want to target for animation\r\n * @param {Number} duration - Speed of the animation\r\n * @param {String} ease - Ease of the animation\r\n * @param {Function} onComplete - On complete function\r\n */\r\nexport const close = ({ element, duration = 400 }) => {\r\n anime.set(element, { height: element.offsetHeight });\r\n anime({\r\n targets: element,\r\n height: 0,\r\n easing: 'easeInOutQuad',\r\n duration\r\n });\r\n};\r\n\r\n// /**\r\n// * Key code list object\r\n// */\r\nexport const keyCode = {\r\n TAB: 9,\r\n RETURN: 13,\r\n ESC: 27,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40\r\n};\r\n"],"sourceRoot":""}