(our hidden element)\n // react-dom in dev mode will warn about this. There doesn't seem to be a way to render arbitrary\n // user Head without hitting this issue (our hidden element could be just \"new Document()\", but\n // this can only have 1 child, and we don't control what is being rendered so that's not an option)\n // instead we continue to render to
, and just silence warnings for and elements\n // https://github.com/facebook/react/blob/e2424f33b3ad727321fc12e75c5e94838e84c2b5/packages/react-dom-bindings/src/client/validateDOMNesting.js#L498-L520\n const originalConsoleError = console.error.bind(console)\n console.error = (...args) => {\n if (\n Array.isArray(args) &&\n args.length >= 2 &&\n args[0]?.includes?.(`validateDOMNesting(...): %s cannot appear as`) &&\n (args[1] === `` || args[1] === ``)\n ) {\n return undefined\n }\n return originalConsoleError(...args)\n }\n\n /* We set up observer to be able to regenerate after react-refresh\n updates our hidden element.\n */\n const observer = new MutationObserver(onHeadRendered)\n observer.observe(hiddenRoot, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n })\n}\n\nexport function headHandlerForBrowser({\n pageComponent,\n staticQueryResults,\n pageComponentProps,\n}) {\n useEffect(() => {\n if (pageComponent?.Head) {\n headExportValidator(pageComponent.Head)\n\n const { render } = reactDOMUtils()\n\n const HeadElement = (\n \n )\n\n const WrapHeadElement = apiRunner(\n `wrapRootElement`,\n { element: HeadElement },\n HeadElement,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n render(\n // just a hack to call the callback after react has done first render\n // Note: In dev, we call onHeadRendered twice( in FireCallbackInEffect and after mutualution observer dectects initail render into hiddenRoot) this is for hot reloading\n // In Prod we only call onHeadRendered in FireCallbackInEffect to render to head\n \n \n {WrapHeadElement}\n \n ,\n hiddenRoot\n )\n }\n\n return () => {\n removePrevHeadElements()\n removeHtmlAndBodyAttributes(keysOfHtmlAndBodyAttributes)\n }\n })\n}\n","import React, { Suspense, createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\nimport { headHandlerForBrowser } from \"./head/head-export-handler-for-browser\"\n\n// Renders page\nfunction PageRenderer(props) {\n const pageComponentProps = {\n ...props,\n params: {\n ...grabMatchParams(props.location.pathname),\n ...props.pageResources.json.pageContext.__params,\n },\n }\n\n const preferDefault = m => (m && m.default) || m\n\n let pageElement\n if (props.pageResources.partialHydration) {\n pageElement = props.pageResources.partialHydration\n } else {\n pageElement = createElement(preferDefault(props.pageResources.component), {\n ...pageComponentProps,\n key: props.path || props.pageResources.page.path,\n })\n }\n\n const pageComponent = props.pageResources.head\n\n headHandlerForBrowser({\n pageComponent,\n staticQueryResults: props.pageResources.staticQueryResults,\n pageComponentProps,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n {\n element: pageElement,\n props: pageComponentProps,\n },\n pageElement,\n ({ result }) => {\n return { element: result, props: pageComponentProps }\n }\n ).pop()\n\n return wrappedPage\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport {\n navigate as reachNavigate,\n globalHistory,\n} from \"@gatsbyjs/reach-router\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n const { hash, search } = window.location\n\n if (redirect != null) {\n window.___replace(redirect.toPath + search + hash)\n return true\n } else {\n return false\n }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n if (/loading chunk \\d* failed./i.test(event.reason)) {\n if (nextRoute) {\n window.location.pathname = nextRoute\n }\n }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n nextRoute = location.pathname\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n const { pathname, search, hash } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath + search + hash\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname + search + hash\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname + search).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname + search + hash\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return \n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(nextProps) {\n if (compareLocationProps(this.props.location, nextProps.location)) {\n onPreRouteUpdate(nextProps.location, this.props.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname + location.search, {\n withErrorDetails: true,\n }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(\n location.pathname + location.search,\n {\n withErrorDetails: true,\n }\n )\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"./static-query\"\nimport {\n SlicesMapContext,\n SlicesContext,\n SlicesResultsContext,\n} from \"./slice/context\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n getSliceResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\nimport { reactDOMUtils } from \"./react-dom-utils\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nconst { render, hydrate } = reactDOMUtils()\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\nconst reloadStorageKey = `gatsby-reload-compilation-hash-match`\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n const slicesContext = {\n renderEnvironment: `browser`,\n }\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n const sliceResults = getSliceResults()\n\n return (\n \n \n \n \n \n {children}\n \n \n \n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n \n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). SSR\n // page paths might include search params, while SSG and DSG won't.\n // If page path include search params we also compare query params.\n // But only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !==\n browserLoc.pathname + (pagePath.includes(`?`) ? browserLoc.search : ``) &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath.match(/^\\/(404|500)(\\/?|.html)$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(\n __BASE_PATH__ +\n pagePath +\n (!pagePath.includes(`?`) ? browserLoc.search : ``) +\n browserLoc.hash,\n {\n replace: true,\n }\n )\n }\n\n // It's possible that sessionStorage can throw an exception if access is not granted, see https://github.com/gatsbyjs/gatsby/issues/34512\n const getSessionStorage = () => {\n try {\n return sessionStorage\n } catch {\n return null\n }\n }\n\n publicLoader.loadPage(browserLoc.pathname + browserLoc.search).then(page => {\n const sessionStorage = getSessionStorage()\n\n if (\n page?.page?.webpackCompilationHash &&\n page.page.webpackCompilationHash !== window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n // We have not matching html + js (inlined `window.___webpackCompilationHash`)\n // with our data (coming from `app-data.json` file). This can cause issues such as\n // errors trying to load static queries (as list of static queries is inside `page-data`\n // which might not match to currently loaded `.js` scripts).\n // We are making attempt to reload if hashes don't match, but we also have to handle case\n // when reload doesn't fix it (possibly broken deploy) so we don't end up in infinite reload loop\n if (sessionStorage) {\n const isReloaded = sessionStorage.getItem(reloadStorageKey) === `1`\n\n if (!isReloaded) {\n sessionStorage.setItem(reloadStorageKey, `1`)\n window.location.reload(true)\n return\n }\n }\n }\n\n if (sessionStorage) {\n sessionStorage.removeItem(reloadStorageKey)\n }\n\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n if (performance.mark) {\n performance.mark(`onInitialClientRender`)\n }\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const focusEl = document.getElementById(`gatsby-focus-wrapper`)\n\n // Client only pages have any empty body so we just do a normal\n // render to avoid React complaining about hydration mis-matches.\n let defaultRenderer = render\n if (focusEl && focusEl.children.length) {\n defaultRenderer = hydrate\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n defaultRenderer\n )[0]\n\n function runRender() {\n const rootElement =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n renderer(, rootElement)\n }\n\n // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n // TODO remove IE 10 support\n const doc = document\n if (\n doc.readyState === `complete` ||\n (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n ) {\n setTimeout(function () {\n runRender()\n }, 0)\n } else {\n const handler = function () {\n doc.removeEventListener(`DOMContentLoaded`, handler, false)\n window.removeEventListener(`load`, handler, false)\n\n runRender()\n }\n\n doc.addEventListener(`DOMContentLoaded`, handler, false)\n window.addEventListener(`load`, handler, false)\n }\n\n return\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","const map = new WeakMap()\n\nexport function reactDOMUtils() {\n const reactDomClient = require(`react-dom/client`)\n\n const render = (Component, el) => {\n let root = map.get(el)\n if (!root) {\n map.set(el, (root = reactDomClient.createRoot(el)))\n }\n root.render(Component)\n }\n\n const hydrate = (Component, el) => reactDomClient.hydrateRoot(el, Component)\n\n return { render, hydrate }\n}\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","import React from \"react\"\n\nconst SlicesResultsContext = React.createContext({})\nconst SlicesContext = React.createContext({})\nconst SlicesMapContext = React.createContext({})\nconst SlicesPropsContext = React.createContext({})\n\nexport {\n SlicesResultsContext,\n SlicesContext,\n SlicesMapContext,\n SlicesPropsContext,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport { createServerOrClientContext } from \"./context-utils\"\n\nconst StaticQueryContext = createServerOrClientContext(`StaticQuery`, {})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n \n )\n}\n\nlet warnedAboutStaticQuery = false\n\n// TODO(v6): Remove completely\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n if (process.env.NODE_ENV === `development` && !warnedAboutStaticQuery) {\n console.warn(\n `The component is deprecated and will be removed in Gatsby v6. Use useStaticQuery instead. Refer to the migration guide for more information: https://gatsby.dev/migrating-4-to-5/#staticquery--is-deprecated`\n )\n warnedAboutStaticQuery = true\n }\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n // TODO(v5): Remove since we require React >= 18\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nexport { StaticQuery, StaticQueryContext, useStaticQuery }\n","import React from \"react\"\n\n// Ensure serverContext is not created more than once as React will throw when creating it more than once\n// https://github.com/facebook/react/blob/dd2d6522754f52c70d02c51db25eb7cbd5d1c8eb/packages/react/src/ReactServerContext.js#L101\nconst createServerContext = (name, defaultValue = null) => {\n /* eslint-disable no-undef */\n if (!globalThis.__SERVER_CONTEXT) {\n globalThis.__SERVER_CONTEXT = {}\n }\n\n if (!globalThis.__SERVER_CONTEXT[name]) {\n globalThis.__SERVER_CONTEXT[name] = React.createServerContext(\n name,\n defaultValue\n )\n }\n\n return globalThis.__SERVER_CONTEXT[name]\n}\n\nfunction createServerOrClientContext(name, defaultValue) {\n if (React.createServerContext) {\n return createServerContext(name, defaultValue)\n }\n\n return React.createContext(defaultValue)\n}\n\nexport { createServerOrClientContext }\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","const listOfMetricsSend = new Set();\nfunction debounce(fn, timeout) {\n let timer = null;\n return function (...args) {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(fn, timeout, ...args);\n };\n}\nfunction sendWebVitals(dataLayerName = `dataLayer`) {\n const win = window;\n function sendData(data) {\n if (listOfMetricsSend.has(data.name)) {\n return;\n }\n listOfMetricsSend.add(data.name);\n sendToGTM(data, win[dataLayerName]);\n }\n return import(`web-vitals/base`).then(({\n getLCP,\n getFID,\n getCLS\n }) => {\n const debouncedCLS = debounce(sendData, 3000);\n // we don't need to debounce FID - we send it when it happens\n const debouncedFID = sendData;\n // LCP can occur multiple times so we debounce it\n const debouncedLCP = debounce(sendData, 3000);\n\n // With the true flag, we measure all previous occurences too, in case we start listening to late.\n getCLS(debouncedCLS, true);\n getFID(debouncedFID, true);\n getLCP(debouncedLCP, true);\n });\n}\nfunction sendToGTM({\n name,\n value,\n id\n}, dataLayer) {\n dataLayer.push({\n event: `core-web-vitals`,\n webVitalsMeasurement: {\n name: name,\n // The `id` value will be unique to the current page load. When sending\n // multiple values from the same page (e.g. for CLS), Google Analytics can\n // compute a total by grouping on this ID (note: requires `eventLabel` to\n // be a dimension in your report).\n id,\n // Google Analytics metrics must be integers, so the value is rounded.\n // For CLS the value is first multiplied by 1000 for greater precision\n // (note: increase the multiplier for greater precision if needed).\n value: Math.round(name === `CLS` ? value * 1000 : value)\n }\n });\n}\nexport function onRouteUpdate(_, pluginOptions) {\n if (process.env.NODE_ENV === `production` || pluginOptions.includeInDevelopment) {\n // wrap inside a timeout to ensure the title has properly been changed\n setTimeout(() => {\n const data = pluginOptions.dataLayerName ? window[pluginOptions.dataLayerName] : window.dataLayer;\n const eventName = pluginOptions.routeChangeEventName ? pluginOptions.routeChangeEventName : `gatsby-route-change`;\n data.push({\n event: eventName\n });\n }, 50);\n }\n}\nexport function onInitialClientRender(_, pluginOptions) {\n // we only load the polyfill in production so we can't enable it in development\n if (process.env.NODE_ENV === `production` && pluginOptions.enableWebVitalsTracking) {\n sendWebVitals(pluginOptions.dataLayerName);\n }\n}","\"use strict\";\n\nexports.wrapPageElement = require(\"./wrap-page\");","\"use strict\";\n\nvar React = require(\"react\");\nvar preferDefault = function preferDefault(m) {\n return m && m.default || m;\n};\nvar Layout;\ntry {\n Layout = preferDefault(require(GATSBY_LAYOUT_COMPONENT_PATH));\n} catch (e) {\n if (e.toString().indexOf(\"Error: Cannot find module\") !== -1) {\n throw new Error(\"Couldn't find layout component at \\\"\" + GATSBY_LAYOUT_COMPONENT_PATH + \".\\n\\n\" + \"Please create layout component in that location or specify path to layout component in gatsby-config.js\");\n } else {\n // Logging the error for debugging older browsers as there is no way\n // to wrap the thrown error in a try/catch.\n console.error(e);\n throw e;\n }\n}\n\n// eslint-disable-next-line react/prop-types,react/display-name\nmodule.exports = function (_ref) {\n var element = _ref.element,\n props = _ref.props;\n return /*#__PURE__*/React.createElement(Layout, props, element);\n};","import _, { forwardRef as M, useState as z, useEffect as L } from \"react\";\nvar U = Object.defineProperty, q = Object.defineProperties, H = Object.getOwnPropertyDescriptors, b = Object.getOwnPropertySymbols, I = Object.prototype.hasOwnProperty, A = Object.prototype.propertyIsEnumerable, O = (o, t, e) => t in o ? U(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e, f = (o, t) => {\n for (var e in t || (t = {}))\n I.call(t, e) && O(o, e, t[e]);\n if (b)\n for (var e of b(t))\n A.call(t, e) && O(o, e, t[e]);\n return o;\n}, $ = (o, t) => q(o, H(t)), D = (o, t) => {\n var e = {};\n for (var r in o)\n I.call(o, r) && t.indexOf(r) < 0 && (e[r] = o[r]);\n if (o != null && b)\n for (var r of b(o))\n t.indexOf(r) < 0 && A.call(o, r) && (e[r] = o[r]);\n return e;\n};\nlet x = !1;\nconst S = [], J = (o) => new Promise((t, e) => {\n if (typeof window > \"u\" || (window.storyblokRegisterEvent = (s) => {\n if (window.location === window.parent.location) {\n console.warn(\"You are not in Draft Mode or in the Visual Editor.\");\n return;\n }\n x ? s() : S.push(s);\n }, document.getElementById(\"storyblok-javascript-bridge\")))\n return;\n const r = document.createElement(\"script\");\n r.async = !0, r.src = o, r.id = \"storyblok-javascript-bridge\", r.onerror = (s) => e(s), r.onload = (s) => {\n S.forEach((i) => i()), x = !0, t(s);\n }, document.getElementsByTagName(\"head\")[0].appendChild(r);\n});\nvar V = Object.defineProperty, B = (o, t, e) => t in o ? V(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e, h = (o, t, e) => (B(o, typeof t != \"symbol\" ? t + \"\" : t, e), e);\nfunction C(o) {\n return !(o !== o || o === 1 / 0 || o === -1 / 0);\n}\nfunction F(o, t, e) {\n if (!C(t))\n throw new TypeError(\"Expected `limit` to be a finite number\");\n if (!C(e))\n throw new TypeError(\"Expected `interval` to be a finite number\");\n const r = [];\n let s = [], i = 0;\n const n = function() {\n i++;\n const a = setTimeout(function() {\n i--, r.length > 0 && n(), s = s.filter(function(u) {\n return u !== a;\n });\n }, e);\n s.indexOf(a) < 0 && s.push(a);\n const l = r.shift();\n l.resolve(o.apply(l.self, l.args));\n }, c = function(...a) {\n const l = this;\n return new Promise(function(u, p) {\n r.push({\n resolve: u,\n reject: p,\n args: a,\n self: l\n }), i < t && n();\n });\n };\n return c.abort = function() {\n s.forEach(clearTimeout), s = [], r.forEach(function(a) {\n a.reject(function() {\n Error.call(this, \"Throttled function aborted\"), this.name = \"AbortError\";\n });\n }), r.length = 0;\n }, c;\n}\nconst Y = function(o, t) {\n const e = {};\n for (const r in o) {\n const s = o[r];\n t.indexOf(r) > -1 && s !== null && (e[r] = s);\n }\n return e;\n}, G = (o) => o === \"email\", Q = () => ({\n singleTag: \"hr\"\n}), W = () => ({\n tag: \"blockquote\"\n}), X = () => ({\n tag: \"ul\"\n}), Z = (o) => ({\n tag: [\n \"pre\",\n {\n tag: \"code\",\n attrs: o.attrs\n }\n ]\n}), K = () => ({\n singleTag: \"br\"\n}), tt = (o) => ({\n tag: `h${o.attrs.level}`\n}), et = (o) => ({\n singleTag: [\n {\n tag: \"img\",\n attrs: Y(o.attrs, [\"src\", \"alt\", \"title\"])\n }\n ]\n}), rt = () => ({\n tag: \"li\"\n}), st = () => ({\n tag: \"ol\"\n}), ot = () => ({\n tag: \"p\"\n}), it = (o) => ({\n tag: [\n {\n tag: \"span\",\n attrs: {\n [\"data-type\"]: \"emoji\",\n [\"data-name\"]: o.attrs.name,\n emoji: o.attrs.emoji\n }\n }\n ]\n}), nt = () => ({\n tag: \"b\"\n}), at = () => ({\n tag: \"strike\"\n}), lt = () => ({\n tag: \"u\"\n}), ct = () => ({\n tag: \"strong\"\n}), ht = () => ({\n tag: \"code\"\n}), ut = () => ({\n tag: \"i\"\n}), pt = (o) => {\n const t = f({}, o.attrs), { linktype: e = \"url\" } = o.attrs;\n if (G(e) && (t.href = `mailto:${t.href}`), t.anchor && (t.href = `${t.href}#${t.anchor}`, delete t.anchor), t.custom) {\n for (const r in t.custom)\n t[r] = t.custom[r];\n delete t.custom;\n }\n return {\n tag: [\n {\n tag: \"a\",\n attrs: t\n }\n ]\n };\n}, dt = (o) => ({\n tag: [\n {\n tag: \"span\",\n attrs: o.attrs\n }\n ]\n}), gt = () => ({\n tag: \"sub\"\n}), ft = () => ({\n tag: \"sup\"\n}), mt = (o) => ({\n tag: [\n {\n tag: \"span\",\n attrs: o.attrs\n }\n ]\n}), yt = (o) => ({\n tag: [\n {\n tag: \"span\",\n attrs: {\n style: `background-color:${o.attrs.color};`\n }\n }\n ]\n}), bt = (o) => ({\n tag: [\n {\n tag: \"span\",\n attrs: {\n style: `background-color:${o.attrs.color}`\n }\n }\n ]\n}), vt = {\n nodes: {\n horizontal_rule: Q,\n blockquote: W,\n bullet_list: X,\n code_block: Z,\n hard_break: K,\n heading: tt,\n image: et,\n list_item: rt,\n ordered_list: st,\n paragraph: ot,\n emoji: it\n },\n marks: {\n bold: nt,\n strike: at,\n underline: lt,\n strong: ct,\n code: ht,\n italic: ut,\n link: pt,\n styled: dt,\n subscript: gt,\n superscript: ft,\n anchor: mt,\n highlight: yt,\n textStyle: bt\n }\n}, kt = function(o) {\n const t = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n }, e = /[&<>\"']/g, r = RegExp(e.source);\n return o && r.test(o) ? o.replace(e, (s) => t[s]) : o;\n};\nclass v {\n constructor(t) {\n h(this, \"marks\"), h(this, \"nodes\"), t || (t = vt), this.marks = t.marks || [], this.nodes = t.nodes || [];\n }\n addNode(t, e) {\n this.nodes[t] = e;\n }\n addMark(t, e) {\n this.marks[t] = e;\n }\n render(t, e = { optimizeImages: !1 }) {\n if (t && t.content && Array.isArray(t.content)) {\n let r = \"\";\n return t.content.forEach((s) => {\n r += this.renderNode(s);\n }), e.optimizeImages ? this.optimizeImages(r, e.optimizeImages) : r;\n }\n return console.warn(\"The render method must receive an object with a content field, which is an array\"), \"\";\n }\n optimizeImages(t, e) {\n let r = 0, s = 0, i = \"\", n = \"\";\n typeof e != \"boolean\" && (typeof e.width == \"number\" && e.width > 0 && (i += `width=\"${e.width}\" `, r = e.width), typeof e.height == \"number\" && e.height > 0 && (i += `height=\"${e.height}\" `, s = e.height), (e.loading === \"lazy\" || e.loading === \"eager\") && (i += `loading=\"${e.loading}\" `), typeof e.class == \"string\" && e.class.length > 0 && (i += `class=\"${e.class}\" `), e.filters && (typeof e.filters.blur == \"number\" && e.filters.blur >= 0 && e.filters.blur <= 100 && (n += `:blur(${e.filters.blur})`), typeof e.filters.brightness == \"number\" && e.filters.brightness >= -100 && e.filters.brightness <= 100 && (n += `:brightness(${e.filters.brightness})`), e.filters.fill && (e.filters.fill.match(/[0-9A-Fa-f]{6}/g) || e.filters.fill === \"transparent\") && (n += `:fill(${e.filters.fill})`), e.filters.format && [\"webp\", \"png\", \"jpeg\"].includes(e.filters.format) && (n += `:format(${e.filters.format})`), typeof e.filters.grayscale == \"boolean\" && e.filters.grayscale && (n += \":grayscale()\"), typeof e.filters.quality == \"number\" && e.filters.quality >= 0 && e.filters.quality <= 100 && (n += `:quality(${e.filters.quality})`), e.filters.rotate && [90, 180, 270].includes(e.filters.rotate) && (n += `:rotate(${e.filters.rotate})`), n.length > 0 && (n = \"/filters\" + n))), i.length > 0 && (t = t.replace(/ 0 || s > 0 || n.length > 0 ? `${r}x${s}${n}` : \"\";\n return t = t.replace(/a.storyblok.com\\/f\\/(\\d+)\\/([^.]+)\\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g, `a.storyblok.com/f/$1/$2.$3/m/${c}`), typeof e != \"boolean\" && (e.sizes || e.srcset) && (t = t.replace(/ {\n var l, u;\n const p = a.match(/a.storyblok.com\\/f\\/(\\d+)\\/([^.]+)\\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g);\n if (p && p.length > 0) {\n const g = {\n srcset: (l = e.srcset) == null ? void 0 : l.map((d) => {\n if (typeof d == \"number\")\n return `//${p}/m/${d}x0${n} ${d}w`;\n if (typeof d == \"object\" && d.length === 2) {\n let w = 0, E = 0;\n return typeof d[0] == \"number\" && (w = d[0]), typeof d[1] == \"number\" && (E = d[1]), `//${p}/m/${w}x${E}${n} ${w}w`;\n }\n }).join(\", \"),\n sizes: (u = e.sizes) == null ? void 0 : u.map((d) => d).join(\", \")\n };\n let k = \"\";\n return g.srcset && (k += `srcset=\"${g.srcset}\" `), g.sizes && (k += `sizes=\"${g.sizes}\" `), a.replace(/ {\n const i = this.getMatchingMark(s);\n i && e.push(this.renderOpeningTag(i.tag));\n });\n const r = this.getMatchingNode(t);\n return r && r.tag && e.push(this.renderOpeningTag(r.tag)), t.content ? t.content.forEach((s) => {\n e.push(this.renderNode(s));\n }) : t.text ? e.push(kt(t.text)) : r && r.singleTag ? e.push(this.renderTag(r.singleTag, \" /\")) : r && r.html ? e.push(r.html) : t.type === \"emoji\" && e.push(this.renderEmoji(t)), r && r.tag && e.push(this.renderClosingTag(r.tag)), t.marks && t.marks.slice(0).reverse().forEach((s) => {\n const i = this.getMatchingMark(s);\n i && e.push(this.renderClosingTag(i.tag));\n }), e.join(\"\");\n }\n renderTag(t, e) {\n return t.constructor === String ? `<${t}${e}>` : t.map((r) => {\n if (r.constructor === String)\n return `<${r}${e}>`;\n {\n let s = `<${r.tag}`;\n if (r.attrs)\n for (const i in r.attrs) {\n const n = r.attrs[i];\n n !== null && (s += ` ${i}=\"${n}\"`);\n }\n return `${s}${e}>`;\n }\n }).join(\"\");\n }\n renderOpeningTag(t) {\n return this.renderTag(t, \"\");\n }\n renderClosingTag(t) {\n return t.constructor === String ? `${t}>` : t.slice(0).reverse().map((e) => e.constructor === String ? `${e}>` : `${e.tag}>`).join(\"\");\n }\n getMatchingNode(t) {\n const e = this.nodes[t.type];\n if (typeof e == \"function\")\n return e(t);\n }\n getMatchingMark(t) {\n const e = this.marks[t.type];\n if (typeof e == \"function\")\n return e(t);\n }\n renderEmoji(t) {\n if (t.attrs.emoji)\n return t.attrs.emoji;\n const e = [\n {\n tag: \"img\",\n attrs: {\n src: t.attrs.fallbackImage,\n draggable: \"false\",\n loading: \"lazy\",\n align: \"absmiddle\"\n }\n }\n ];\n return this.renderTag(e, \" /\");\n }\n}\nclass T {\n constructor() {\n h(this, \"isCDNUrl\", (t = \"\") => t.indexOf(\"/cdn/\") > -1), h(this, \"getOptionsPage\", (t, e = 25, r = 1) => $(f({}, t), {\n per_page: e,\n page: r\n })), h(this, \"delay\", (t) => new Promise((e) => setTimeout(e, t))), h(this, \"arrayFrom\", (t = 0, e) => [...Array(t)].map(e)), h(this, \"range\", (t = 0, e = t) => {\n const r = Math.abs(e - t) || 0, s = t < e ? 1 : -1;\n return this.arrayFrom(r, (i, n) => n * s + t);\n }), h(this, \"asyncMap\", async (t, e) => Promise.all(t.map(e))), h(this, \"flatMap\", (t = [], e) => t.map(e).reduce((r, s) => [...r, ...s], []));\n }\n stringify(t, e, r) {\n const s = [];\n for (const i in t) {\n if (!Object.prototype.hasOwnProperty.call(t, i))\n continue;\n const n = t[i], c = r ? \"\" : encodeURIComponent(i);\n let a;\n typeof n == \"object\" ? a = this.stringify(n, e ? e + encodeURIComponent(\"[\" + c + \"]\") : c, Array.isArray(n)) : a = (e ? e + encodeURIComponent(\"[\" + c + \"]\") : c) + \"=\" + encodeURIComponent(n), s.push(a);\n }\n return s.join(\"&\");\n }\n getRegionURL(t) {\n const e = \"api.storyblok.com\", r = \"api-us.storyblok.com\", s = \"app.storyblokchina.cn\";\n switch (t) {\n case \"us\":\n return r;\n case \"cn\":\n return s;\n default:\n return e;\n }\n }\n}\nclass wt {\n constructor(t) {\n h(this, \"baseURL\"), h(this, \"timeout\"), h(this, \"headers\"), h(this, \"responseInterceptor\"), h(this, \"fetch\"), h(this, \"ejectInterceptor\"), h(this, \"url\"), h(this, \"parameters\"), this.baseURL = t.baseURL, this.headers = t.headers || new Headers(), this.timeout = t != null && t.timeout ? t.timeout * 1e3 : 0, this.responseInterceptor = t.responseInterceptor, this.fetch = (...e) => t.fetch ? t.fetch(...e) : fetch(...e), this.ejectInterceptor = !1, this.url = \"\", this.parameters = {};\n }\n get(t, e) {\n return this.url = t, this.parameters = e, this._methodHandler(\"get\");\n }\n post(t, e) {\n return this.url = t, this.parameters = e, this._methodHandler(\"post\");\n }\n put(t, e) {\n return this.url = t, this.parameters = e, this._methodHandler(\"put\");\n }\n delete(t, e) {\n return this.url = t, this.parameters = e, this._methodHandler(\"delete\");\n }\n async _responseHandler(t) {\n const e = [], r = {\n data: {},\n headers: {},\n status: 0,\n statusText: \"\"\n };\n t.status !== 204 && await t.json().then((s) => {\n r.data = s;\n });\n for (const s of t.headers.entries())\n e[s[0]] = s[1];\n return r.headers = f({}, e), r.status = t.status, r.statusText = t.statusText, r;\n }\n async _methodHandler(t) {\n let e = `${this.baseURL}${this.url}`, r = null;\n if (t === \"get\") {\n const a = new T();\n e = `${this.baseURL}${this.url}?${a.stringify(this.parameters)}`;\n } else\n r = JSON.stringify(this.parameters);\n const s = new URL(e), i = new AbortController(), { signal: n } = i;\n let c;\n this.timeout && (c = setTimeout(() => i.abort(), this.timeout));\n try {\n const a = await this.fetch(`${s}`, {\n method: t,\n headers: this.headers,\n body: r,\n signal: n\n });\n this.timeout && clearTimeout(c);\n const l = await this._responseHandler(a);\n return this.responseInterceptor && !this.ejectInterceptor ? this._statusHandler(this.responseInterceptor(l)) : this._statusHandler(l);\n } catch (a) {\n return {\n message: a\n };\n }\n }\n eject() {\n this.ejectInterceptor = !0;\n }\n _statusHandler(t) {\n const e = /20[0-6]/g;\n return new Promise((r, s) => {\n if (e.test(`${t.status}`))\n return r(t);\n const i = {\n message: new Error(t.statusText),\n status: t.status,\n response: Array.isArray(t.data) ? t.data[0] : t.data.error || t.data.slug\n };\n s(i);\n });\n }\n}\nlet y = {};\nconst m = {};\nclass _t {\n constructor(t, e) {\n if (h(this, \"client\"), h(this, \"maxRetries\"), h(this, \"throttle\"), h(this, \"accessToken\"), h(this, \"cache\"), h(this, \"helpers\"), h(this, \"resolveCounter\"), h(this, \"relations\"), h(this, \"links\"), h(this, \"richTextResolver\"), h(this, \"resolveNestedRelations\"), !e) {\n const i = new T().getRegionURL, n = t.https === !1 ? \"http\" : \"https\";\n t.oauthToken ? e = `${n}://${i(t.region)}/v1` : e = `${n}://${i(t.region)}/v2`;\n }\n const r = new Headers();\n r.set(\"Content-Type\", \"application/json\"), r.set(\"Accept\", \"application/json\"), r.forEach((i, n) => {\n t.headers && t.headers[n] && r.set(n, t.headers[n]);\n });\n let s = 5;\n t.oauthToken && (r.set(\"Authorization\", t.oauthToken), s = 3), t.rateLimit && (s = t.rateLimit), t.richTextSchema ? this.richTextResolver = new v(t.richTextSchema) : this.richTextResolver = new v(), t.componentResolver && this.setComponentResolver(t.componentResolver), this.maxRetries = t.maxRetries, this.throttle = F(this.throttledRequest, s, 1e3), this.accessToken = t.accessToken || \"\", this.relations = {}, this.links = {}, this.cache = t.cache || { clear: \"manual\" }, this.helpers = new T(), this.resolveCounter = 0, this.resolveNestedRelations = t.resolveNestedRelations || !0, this.client = new wt({\n baseURL: e,\n timeout: t.timeout || 0,\n headers: r,\n responseInterceptor: t.responseInterceptor,\n fetch: t.fetch\n });\n }\n setComponentResolver(t) {\n this.richTextResolver.addNode(\"blok\", (e) => {\n let r = \"\";\n return e.attrs.body.forEach((s) => {\n r += t(s.component, s);\n }), {\n html: r\n };\n });\n }\n parseParams(t) {\n return t.version || (t.version = \"published\"), t.token || (t.token = this.getToken()), t.cv || (t.cv = m[t.token]), Array.isArray(t.resolve_relations) && (t.resolve_relations = t.resolve_relations.join(\",\")), t;\n }\n factoryParamOptions(t, e) {\n return this.helpers.isCDNUrl(t) ? this.parseParams(e) : e;\n }\n makeRequest(t, e, r, s) {\n const i = this.factoryParamOptions(t, this.helpers.getOptionsPage(e, r, s));\n return this.cacheResponse(t, i);\n }\n get(t, e) {\n e || (e = {});\n const r = `/${t}`, s = this.factoryParamOptions(r, e);\n return this.cacheResponse(r, s);\n }\n async getAll(t, e, r) {\n const s = (e == null ? void 0 : e.per_page) || 25, i = `/${t}`, n = i.split(\"/\"), c = r || n[n.length - 1], a = 1, l = await this.makeRequest(i, e, s, a), u = l.total ? Math.ceil(l.total / s) : 1, p = await this.helpers.asyncMap(this.helpers.range(a, u), (g) => this.makeRequest(i, e, s, g + 1));\n return this.helpers.flatMap([l, ...p], (g) => Object.values(g.data[c]));\n }\n post(t, e) {\n const r = `/${t}`;\n return Promise.resolve(this.throttle(\"post\", r, e));\n }\n put(t, e) {\n const r = `/${t}`;\n return Promise.resolve(this.throttle(\"put\", r, e));\n }\n delete(t, e) {\n const r = `/${t}`;\n return Promise.resolve(this.throttle(\"delete\", r, e));\n }\n getStories(t) {\n return this.get(\"cdn/stories\", t);\n }\n getStory(t, e) {\n return this.get(`cdn/stories/${t}`, e);\n }\n getToken() {\n return this.accessToken;\n }\n ejectInterceptor() {\n this.client.eject();\n }\n _cleanCopy(t) {\n return JSON.parse(JSON.stringify(t));\n }\n _insertLinks(t, e, r) {\n const s = t[e];\n s && s.fieldtype == \"multilink\" && s.linktype == \"story\" && typeof s.id == \"string\" && this.links[r][s.id] ? s.story = this._cleanCopy(this.links[r][s.id]) : s && s.linktype === \"story\" && typeof s.uuid == \"string\" && this.links[r][s.uuid] && (s.story = this._cleanCopy(this.links[r][s.uuid]));\n }\n _insertRelations(t, e, r, s) {\n if (r.indexOf(`${t.component}.${e}`) > -1) {\n if (typeof t[e] == \"string\")\n this.relations[s][t[e]] && (t[e] = this._cleanCopy(this.relations[s][t[e]]));\n else if (t[e] && t[e].constructor === Array) {\n const i = [];\n t[e].forEach((n) => {\n this.relations[s][n] && i.push(this._cleanCopy(this.relations[s][n]));\n }), t[e] = i;\n }\n }\n }\n iterateTree(t, e, r) {\n const s = (i) => {\n if (i != null) {\n if (i.constructor === Array)\n for (let n = 0; n < i.length; n++)\n s(i[n]);\n else if (i.constructor === Object) {\n if (i._stopResolving)\n return;\n for (const n in i)\n (i.component && i._uid || i.type === \"link\") && (this._insertRelations(i, n, e, r), this._insertLinks(i, n, r)), s(i[n]);\n }\n }\n };\n s(t.content);\n }\n async resolveLinks(t, e, r) {\n let s = [];\n if (t.link_uuids) {\n const i = t.link_uuids.length, n = [], c = 50;\n for (let a = 0; a < i; a += c) {\n const l = Math.min(i, a + c);\n n.push(t.link_uuids.slice(a, l));\n }\n for (let a = 0; a < n.length; a++)\n (await this.getStories({\n per_page: c,\n language: e.language,\n version: e.version,\n by_uuids: n[a].join(\",\")\n })).data.stories.forEach((l) => {\n s.push(l);\n });\n } else\n s = t.links;\n s.forEach((i) => {\n this.links[r][i.uuid] = $(f({}, i), {\n _stopResolving: !0\n });\n });\n }\n async resolveRelations(t, e, r) {\n let s = [];\n if (t.rel_uuids) {\n const i = t.rel_uuids.length, n = [], c = 50;\n for (let a = 0; a < i; a += c) {\n const l = Math.min(i, a + c);\n n.push(t.rel_uuids.slice(a, l));\n }\n for (let a = 0; a < n.length; a++)\n (await this.getStories({\n per_page: c,\n language: e.language,\n version: e.version,\n by_uuids: n[a].join(\",\")\n })).data.stories.forEach((l) => {\n s.push(l);\n });\n } else\n s = t.rels;\n s && s.length > 0 && s.forEach((i) => {\n this.relations[r][i.uuid] = $(f({}, i), {\n _stopResolving: !0\n });\n });\n }\n async resolveStories(t, e, r) {\n var s, i;\n let n = [];\n if (this.links[r] = {}, this.relations[r] = {}, typeof e.resolve_relations < \"u\" && e.resolve_relations.length > 0 && (typeof e.resolve_relations == \"string\" && (n = e.resolve_relations.split(\",\")), await this.resolveRelations(t, e, r)), e.resolve_links && [\"1\", \"story\", \"url\"].indexOf(e.resolve_links) > -1 && ((s = t.links) != null && s.length || (i = t.link_uuids) != null && i.length) && await this.resolveLinks(t, e, r), this.resolveNestedRelations)\n for (const c in this.relations[r])\n this.iterateTree(this.relations[r][c], n, r);\n t.story ? this.iterateTree(t.story, n, r) : t.stories.forEach((c) => {\n this.iterateTree(c, n, r);\n }), delete this.links[r], delete this.relations[r];\n }\n async cacheResponse(t, e, r) {\n const s = this.helpers.stringify({ url: t, params: e }), i = this.cacheProvider();\n if (this.cache.clear === \"auto\" && e.version === \"draft\" && await this.flushCache(), e.version === \"published\" && t != \"/cdn/spaces/me\") {\n const n = await i.get(s);\n if (n)\n return Promise.resolve(n);\n }\n return new Promise((n, c) => {\n try {\n (async () => {\n var a;\n try {\n const l = await this.throttle(\"get\", t, e);\n let u = { data: l.data, headers: l.headers };\n if ((a = l.headers) != null && a[\"per-page\"] && (u = Object.assign({}, u, {\n perPage: l.headers[\"per-page\"] ? parseInt(l.headers[\"per-page\"]) : 0,\n total: l.headers[\"per-page\"] ? parseInt(l.headers.total) : 0\n })), l.status != 200)\n return c(l);\n if (u.data.story || u.data.stories) {\n const p = this.resolveCounter = ++this.resolveCounter % 1e3;\n await this.resolveStories(u.data, e, `${p}`);\n }\n return e.version === \"published\" && t != \"/cdn/spaces/me\" && await i.set(s, u), u.data.cv && e.token && (e.version == \"draft\" && m[e.token] != u.data.cv && await this.flushCache(), m[e.token] = u.data.cv), n(u);\n } catch (l) {\n return c(l);\n }\n })();\n } catch {\n }\n });\n }\n throttledRequest(t, e, r) {\n return this.client[t](e, r);\n }\n cacheVersions() {\n return m;\n }\n cacheVersion() {\n return m[this.accessToken];\n }\n setCacheVersion(t) {\n this.accessToken && (m[this.accessToken] = t);\n }\n cacheProvider() {\n switch (this.cache.type) {\n case \"memory\":\n return {\n get(t) {\n return Promise.resolve(y[t]);\n },\n getAll() {\n return Promise.resolve(y);\n },\n set(t, e) {\n return y[t] = e, Promise.resolve(void 0);\n },\n flush() {\n return y = {}, Promise.resolve(void 0);\n }\n };\n case \"custom\":\n if (this.cache.custom)\n return this.cache.custom;\n default:\n return {\n get() {\n return Promise.resolve(void 0);\n },\n getAll() {\n return Promise.resolve(void 0);\n },\n set() {\n return Promise.resolve(void 0);\n },\n flush() {\n return Promise.resolve(void 0);\n }\n };\n }\n }\n async flushCache() {\n return await this.cacheProvider().flush(), this;\n }\n}\nconst Ot = (o = {}) => {\n const { apiOptions: t } = o;\n if (!t.accessToken) {\n console.error(\"You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication\");\n return;\n }\n return { storyblokApi: new _t(t) };\n}, xt = (o) => {\n if (typeof o != \"object\" || typeof o._editable > \"u\")\n return {};\n const t = JSON.parse(o._editable.replace(/^$/, \"\"));\n return {\n \"data-blok-c\": JSON.stringify(t),\n \"data-blok-uid\": t.id + \"-\" + t.uid\n };\n};\nlet R;\nconst $t = \"https://app.storyblok.com/f/storyblok-v2-latest.js\", Tt = (o, t, e = {}) => {\n var r;\n const s = !(typeof window > \"u\") && typeof window.storyblokRegisterEvent < \"u\", i = +new URL((r = window.location) == null ? void 0 : r.href).searchParams.get(\"_storyblok\") === o;\n if (!(!s || !i)) {\n if (!o) {\n console.warn(\"Story ID is not defined. Please provide a valid ID.\");\n return;\n }\n window.storyblokRegisterEvent(() => {\n new window.StoryblokBridge(e).on([\"input\", \"published\", \"change\"], (n) => {\n n.action === \"input\" && n.story.id === o ? t(n.story) : (n.action === \"change\" || n.action === \"published\") && n.storyId === o && window.location.reload();\n });\n });\n }\n}, Rt = (o = {}) => {\n var t, e;\n const {\n bridge: r,\n accessToken: s,\n use: i = [],\n apiOptions: n = {},\n richText: c = {}\n } = o;\n n.accessToken = n.accessToken || s;\n const a = { bridge: r, apiOptions: n };\n let l = {};\n i.forEach((p) => {\n l = f(f({}, l), p(a));\n });\n const u = !(typeof window > \"u\") && ((e = (t = window.location) == null ? void 0 : t.search) == null ? void 0 : e.includes(\"_storyblok_tk\"));\n return r !== !1 && u && J($t), R = new v(c.schema), c.resolver && N(R, c.resolver), l;\n}, N = (o, t) => {\n o.addNode(\"blok\", (e) => {\n let r = \"\";\n return e.attrs.body.forEach((s) => {\n r += t(s.component, s);\n }), {\n html: r\n };\n });\n}, St = (o, t, e) => {\n let r = e || R;\n if (!r) {\n console.error(\"Please initialize the Storyblok SDK before calling the renderRichText function\");\n return;\n }\n return o === \"\" ? \"\" : o ? (t && (r = new v(t.schema), t.resolver && N(r, t.resolver)), r.render(o)) : (console.warn(`${o} is not a valid Richtext object. This might be because the value of the richtext field is empty.\n \n For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`), \"\");\n}, jt = M((o, t) => {\n var e = o, { blok: r } = e, s = D(e, [\"blok\"]);\n if (!r)\n return console.error(\"Please provide a 'blok' property to the StoryblokComponent\"), /* @__PURE__ */ _.createElement(\"div\", null, \"Please provide a blok property to the StoryblokComponent\");\n const i = Pt(r.component);\n return i ? /* @__PURE__ */ _.createElement(i, f({\n ref: t,\n blok: r\n }, s)) : /* @__PURE__ */ _.createElement(\"div\", null);\n});\njt.displayName = \"StoryblokComponent\";\nlet j = null;\nconst Ct = () => (j || console.error(\"You can't use getStoryblokApi if you're not loading apiPlugin.\"), j);\nlet P = {};\nconst Pt = (o) => P[o] ? P[o] : (console.error(`Component ${o} doesn't exist.`), !1), It = (o = {}) => {\n const { storyblokApi: t } = Rt(o);\n j = t, P = o.components;\n};\nfunction At(o, t = {}) {\n typeof o.content == \"string\" && (o.content = JSON.parse(o.content));\n let [e, r] = z(o);\n return L(() => {\n Tt(e.internalId, (s) => r(s), t);\n }, []), e;\n}\nexport {\n jt as StoryblokComponent,\n Ot as apiPlugin,\n Ct as getStoryblokApi,\n St as renderRichText,\n xt as storyblokEditable,\n It as storyblokInit,\n Ct as useStoryblokApi,\n Tt as useStoryblokBridge,\n At as useStoryblokState\n};\n","const isPreviewStoryblok = process.env.GATSBY_STORYBLOK_PREVIEW_ENABLE\n ? process.env.GATSBY_STORYBLOK_PREVIEW_ENABLE.trim() === 'true'\n : false;\nconst storyblokApiAccessToken = process.env.GATSBY_STORYBLOK_API_ACCESS_TOKEN;\nconst storyblokPreviewApiAccessToken = process.env.GATSBY_STORYBLOK_PREVIEW_API_ACCESS_TOKEN;\nconst storyblokPageComponentType = process.env.GATSBY_STORYBLOK_PAGE_COMPONENT_TYPE || 'page';\n\nexport const environment = {\n production: !isPreviewStoryblok,\n storyblokApi: 'https://api.storyblok.com/v2/cdn/',\n storyblokApiAccessToken: isPreviewStoryblok ? storyblokPreviewApiAccessToken : storyblokApiAccessToken,\n storyblokVersion: isPreviewStoryblok ? 'draft' : 'published',\n siteUrl: process.env.GATSBY_SITE_URL || 'https://dev.protoq.dev/',\n getAllStoryblokPagesQueryParams: {\n 'filter_query[component][like]': storyblokPageComponentType,\n },\n globalSettingsStoryPath: 'global-settings',\n gtmOptions: process.env.GTM_ID\n ? {\n id: process.env.GTM_ID,\n dataLayerName: process.env.GTM_DATA_LAYER_NAME || undefined,\n gtmAuth: process.env.GTM_AUTH || undefined,\n gtmPreview: process.env.GTM_PREVIEW || undefined,\n enableWebVitalsTracking: true,\n }\n : undefined,\n};\n","import React from 'react';\n\nexport default function SvgPurpleGradient(): JSX.Element {\n return (\n \n );\n}\n","export enum StoryblokComponentsEnum {\n Header = 'header',\n Footer = 'footer',\n FaqSection = 'faq-section',\n PrimarySection = 'primary-section',\n PrimarySection_CaseView = 'primary-section-case-view',\n PrimarySectionFooterAction = 'primary-section-footer-action',\n PrimarySectionFooterCase = 'primary-section-footer-case',\n SliderSection = 'slider-section',\n BenefitsSection = 'benefits-section',\n SpecializationsSection = 'specializations-section',\n ServicesSection = 'services-section',\n TechnologiesSection = 'technologies-section',\n TestimonialsSection = 'testimonials-section',\n ConnectSection = 'connect-section',\n OrderedListSection = 'ordered-list-section',\n ServicesBenefitsSection = 'services-benefits-section',\n WhyCompaniesChooseUsSection = 'why-companies-choose-us-section',\n SetupACallSection = 'setup-a-call-section',\n SolutionSection = 'solution-section',\n RelatedCaseStudiesSection = 'related-case-studies-section',\n GradientBackgroundBlock = 'gradient-background-block',\n SimpleSection = 'simple-section',\n ExplanationSection = 'explanation-section',\n ExplanationSectionArray = 'explanation-section-array',\n IoTMobileDevelopmentSection = 'iot-mobile-development-section',\n}\n","import React, { Suspense } from 'react';\nimport classNames from 'classnames';\n\nconst PuzzleGradientSvg = React.lazy(() => import('../../../images/svg-icons/puzzle-duotone.svg'));\nconst MobileGradientSvg = React.lazy(() => import('../../../images/svg-icons/mobile-duotone.svg'));\nconst LaptopGradientSvg = React.lazy(() => import('../../../images/svg-icons/laptop-code-duotone.svg'));\nconst BoltGradientSvg = React.lazy(() => import('../../../images/svg-icons/bolt-duotone.svg'));\nconst RocketGradientSvg = React.lazy(() => import('../../../images/svg-icons/rocket-launch.svg'));\nconst RateStarGradientSvg = React.lazy(() => import('../../../images/svg-icons/ranking-star-duotone.svg'));\nconst MessagesGradientSvg = React.lazy(() => import('../../../images/svg-icons/messages.svg'));\nconst ArrowsToEyeGradientSvg = React.lazy(() => import('../../../images/svg-icons/arrows-to-eye-duotone.svg'));\nconst PenRullerSvg = React.lazy(() => import('../../../images/svg-icons/pen-ruler-duotone.svg'));\nconst RullerTriangleSvg = React.lazy(() => import('../../../images/svg-icons/ruller-triangle-duotone.svg'));\nconst EmailUsSvgIcon = React.lazy(() => import('../../../images/svg-icons/envelope-duotone.svg'));\nconst SetUpACallSvgIcon = React.lazy(() => import('../../../images/svg-icons/video-duotone.svg'));\nconst TrowelBricksSvg = React.lazy(() => import('../../../images/svg-icons/trowel-bricks-duotone.svg'));\nconst AboutUsSvgIcon = React.lazy(() => import('../../../images/svg-icons/about-us-duotone.svg'));\nconst BlogSvgIcon = React.lazy(() => import('../../../images/svg-icons/blog-duotone.svg'));\nconst MVPSvgIcon = React.lazy(() => import('../../../images/svg-icons/bolt-duotone.svg'));\nconst CareersSvgIcon = React.lazy(() => import('../../../images/svg-icons/careers-duotone.svg'));\nconst CasesSvgIcon = React.lazy(() => import('../../../images/svg-icons/cases-duotone.svg'));\nconst ContactUsSvgIcon = React.lazy(() => import('../../../images/svg-icons/contact-us-duotone.svg'));\nconst IoTApplicationSvgIcon = React.lazy(() => import('../../../images/svg-icons/house-signal-duotone.svg'));\nconst WebDevelopmentSvgIcon = React.lazy(() => import('../../../images/svg-icons/laptop-code-duotone.svg'));\nconst MobileDevelopmentSvgIcon = React.lazy(() => import('../../../images/svg-icons/mobile-duotone.svg'));\nconst DedicatedTeamSvgIcon = React.lazy(() => import('../../../images/svg-icons/puzzle-duotone.svg'));\nconst LogoSvgIcon = React.lazy(() => import('../../../images/svg-icons/logo.svg'));\nconst MessagesSvgIcon = React.lazy(() => import('../../../images/svg-icons/messages.svg'));\nconst CalendarSvgIcon = React.lazy(() => import('../../../images/svg-icons/calendar-star-duotone.svg'));\nconst PeopleSvgIcon = React.lazy(() => import('../../../images/svg-icons/people-group-duotone.svg'));\nconst FlagSvgIcon = React.lazy(() => import('../../../images/svg-icons/flag-swallowtail-duotone.svg'));\nconst SafetySvgIcon = React.lazy(() => import('../../../images/svg-icons/safety-duotone.svg'));\nconst OperationalEfficiencySvgIcon = React.lazy(() => import('../../../images/svg-icons/operational-efficiency-duotone.svg'));\nconst ReliableDataSvgIcon = React.lazy(() => import('../../../images/svg-icons/reliable-data-duotone.svg'));\nconst ConvenienceSvgIcon = React.lazy(() => import('../../../images/svg-icons/convenience-duotone.svg'));\nconst CubesSvgIcon = React.lazy(() => import('../../../images/svg-icons/cubes-duotone.svg'));\nconst PollPeopleSvgIcon = React.lazy(() => import('../../../images/svg-icons/poll-people-hover-duotone.svg'));\nconst ExpantionArrowSvgIcon = React.lazy(() => import('../../../images/svg-icons/expantion-arrow-hover-duotone.svg'));\nconst GamepadSvgIcon = React.lazy(() => import('../../../images/svg-icons/gamepad-hover-duotone.svg'));\nconst HandWithDollarSvgIcon = React.lazy(() => import('../../../images/svg-icons/hand-holding-dollar-hover-duotone.svg'));\nconst NameSvgIcon = React.lazy(() => import('../../../images/svg-icons/name-hover-duotone.svg'));\nconst LayerGroupSvgIcon = React.lazy(() => import('../../../images/svg-icons/layer-group-duotone.svg'));\nconst CalendarClockSvgIcon = React.lazy(() => import('../../../images/svg-icons/calendar-clock-duotone.svg'));\nconst BugSvgIcon = React.lazy(() => import('../../../images/svg-icons/bug-duotone.svg'));\nconst RocketLaunchSvgIcon = React.lazy(() => import('../../../images/svg-icons/rocket-launch-duotone.svg'));\nconst FileInvoiceSvgIcon = React.lazy(() => import('../../../images/svg-icons/file-invoice-duotone.svg'));\nconst ArrowSplitSvgIcon = React.lazy(() => import('../../../images/svg-icons/arrow-split-duotone.svg'));\nconst PersonFallingSvgIcon = React.lazy(() => import('../../../images/svg-icons/person-falling-duotone.svg'));\nconst RankingStarGradientSvg = React.lazy(() => import('../../../images/svg-icons/ranking-star-duotone.svg'));\nconst BinarySvgIcon = React.lazy(() => import('../../../images/svg-icons/binary-check-circle-duotone.svg'));\nconst HandHornsGradientSvg = React.lazy(() => import('../../../images/svg-icons/hand-horns-duotone.svg'));\nconst ChartMixedGradientSvg = React.lazy(() => import('../../../images/svg-icons/chart-mixed-duotone.svg'));\nconst TimelineArrowGradientSvg = React.lazy(() => import('../../../images/svg-icons/timeline-arrow-duotone.svg'));\nconst CircleNodesGradientSvg = React.lazy(() => import('../../../images/svg-icons/circle-nodes-duotone.svg'));\nconst KernelSvgIcon = React.lazy(() => import('../../../images/svg-icons/kernel-duotone.svg'));\nconst UserHeadsetSvgIcon = React.lazy(() => import('../../../images/svg-icons/user-headset-duotone.svg'));\nconst TeamSizeSvgIcon = React.lazy(() => import('../../../images/svg-icons/team-size-duotone.svg'));\nconst PulseSvgIcon = React.lazy(() => import('../../../images/svg-icons/pulse-duotone.svg'));\nconst IndustrySvgIcon = React.lazy(() => import('../../../images/svg-icons/industry-duotone.svg'));\nconst AngularSvgIcon = React.lazy(() => import('../../../images/svg-icons/angular-duotone.svg'));\nconst BriefcaseSvgIcon = React.lazy(() => import('../../../images/svg-icons/briefcase-duotone.svg'));\nconst NodeJsSvgIcon = React.lazy(() => import('../../../images/svg-icons/nodejs-duotone.svg'));\n\nexport enum DuotoneIcons {\n PUZZLE = 'puzzle',\n MOBILE = 'mobile',\n LAPTOP = 'laptop',\n BOLT = 'bolt',\n ROCKET = 'rocket',\n RATE_STAR = 'rate-star',\n MESSAGES = 'messages',\n ARROWS_TO_EYE = 'arrows-to-eye',\n PEN_RULLER = 'pen-ruller',\n BINARY = 'binary',\n CUBES = 'cubes',\n POLL_PEOPLE = 'poll-people',\n USER_HEADSET = 'user-headset',\n RULLER_TRIANGLE = 'ruller-triangle',\n SET_UP_A_CALL = 'set-up-a-call',\n EMAIL_US = 'email-us',\n TROWEL_BRICKS = 'trowel-bricks',\n ABOUT_US = 'about-us',\n BLOG = 'blog',\n MVP = 'MVP',\n CAREER = 'careers',\n CASES = 'cases',\n CONTACT_US = 'contact-us',\n IOT_APPLICATIONS = 'iot-application',\n WEB_DEVELOPMENT = 'web-development',\n MOBILE_DEVELOPMENT = 'mobile-development',\n DEDICATED_TEAM = 'dedicated-team',\n LOGO = 'logo',\n CHAT_MESSAGES = 'chat-messages',\n CALENDAR = 'calendar',\n PEOPLE = 'people',\n FLAG = 'flag',\n SAFETY = 'safety',\n OPERATIONAL_EFFICIENCY = 'operational-efficiency',\n RELIABLE_DATA = 'reliable-data',\n CONVENIENCE = 'convenience',\n KERNEL = 'kernel',\n TEAM_SIZE = 'team-size',\n PULSE = 'pulse',\n INDUSTRY = 'industry',\n EXPANTION_ARROW = 'expantion-arrow',\n GAMEPAD = 'gamepad',\n HAND_WITH_DOLLAR = 'hand-with-dollar',\n NAME = 'name',\n LAYER_GROUP = 'layer-group',\n CALENDAR_CLOCK = 'calendar-clock',\n BUG = 'bug',\n ROCKET_LAUNCH = 'rocket-launch',\n FILE_INVOICE = 'file-invoice',\n ARROW_SPLIT = 'arrow-split',\n PERSON_FALLING = 'person-falling',\n RANKING_STAR_GRAD = 'ranking-star-gard',\n HAND_HORNS_GRAD = 'HandHornsGrad',\n CHART_MIXED_GARD = 'ChartMixedGrad',\n TIMELINE_ARROW_GRAD = 'TimelineArrowGrad',\n CIRCLE_NODES_GRAD = 'CircleNodesGrad',\n ANGULAR = 'angular',\n BRIEFCASE = 'briefcase',\n NODEJS = 'nodejs',\n}\n\nconst DuotoneIconsMap: Record = {\n [DuotoneIcons.PUZZLE]: PuzzleGradientSvg,\n [DuotoneIcons.MOBILE]: MobileGradientSvg,\n [DuotoneIcons.LAPTOP]: LaptopGradientSvg,\n [DuotoneIcons.BOLT]: BoltGradientSvg,\n [DuotoneIcons.ROCKET]: RocketGradientSvg,\n [DuotoneIcons.RATE_STAR]: RateStarGradientSvg,\n [DuotoneIcons.MESSAGES]: MessagesGradientSvg,\n [DuotoneIcons.ARROWS_TO_EYE]: ArrowsToEyeGradientSvg,\n [DuotoneIcons.PEN_RULLER]: PenRullerSvg,\n [DuotoneIcons.BINARY]: BinarySvgIcon,\n [DuotoneIcons.CUBES]: CubesSvgIcon,\n [DuotoneIcons.POLL_PEOPLE]: PollPeopleSvgIcon,\n [DuotoneIcons.USER_HEADSET]: UserHeadsetSvgIcon,\n [DuotoneIcons.RULLER_TRIANGLE]: RullerTriangleSvg,\n [DuotoneIcons.SET_UP_A_CALL]: SetUpACallSvgIcon,\n [DuotoneIcons.EMAIL_US]: EmailUsSvgIcon,\n [DuotoneIcons.TROWEL_BRICKS]: TrowelBricksSvg,\n [DuotoneIcons.ABOUT_US]: AboutUsSvgIcon,\n [DuotoneIcons.BLOG]: BlogSvgIcon,\n [DuotoneIcons.MVP]: MVPSvgIcon,\n [DuotoneIcons.CAREER]: CareersSvgIcon,\n [DuotoneIcons.CASES]: CasesSvgIcon,\n [DuotoneIcons.CONTACT_US]: ContactUsSvgIcon,\n [DuotoneIcons.IOT_APPLICATIONS]: IoTApplicationSvgIcon,\n [DuotoneIcons.WEB_DEVELOPMENT]: WebDevelopmentSvgIcon,\n [DuotoneIcons.MOBILE_DEVELOPMENT]: MobileDevelopmentSvgIcon,\n [DuotoneIcons.DEDICATED_TEAM]: DedicatedTeamSvgIcon,\n [DuotoneIcons.LOGO]: LogoSvgIcon,\n [DuotoneIcons.CHAT_MESSAGES]: MessagesSvgIcon,\n [DuotoneIcons.CALENDAR]: CalendarSvgIcon,\n [DuotoneIcons.PEOPLE]: PeopleSvgIcon,\n [DuotoneIcons.FLAG]: FlagSvgIcon,\n [DuotoneIcons.SAFETY]: SafetySvgIcon,\n [DuotoneIcons.OPERATIONAL_EFFICIENCY]: OperationalEfficiencySvgIcon,\n [DuotoneIcons.RELIABLE_DATA]: ReliableDataSvgIcon,\n [DuotoneIcons.CONVENIENCE]: ConvenienceSvgIcon,\n [DuotoneIcons.KERNEL]: KernelSvgIcon,\n [DuotoneIcons.TEAM_SIZE]: TeamSizeSvgIcon,\n [DuotoneIcons.PULSE]: PulseSvgIcon,\n [DuotoneIcons.INDUSTRY]: IndustrySvgIcon,\n [DuotoneIcons.EXPANTION_ARROW]: ExpantionArrowSvgIcon,\n [DuotoneIcons.GAMEPAD]: GamepadSvgIcon,\n [DuotoneIcons.HAND_WITH_DOLLAR]: HandWithDollarSvgIcon,\n [DuotoneIcons.NAME]: NameSvgIcon,\n [DuotoneIcons.LAYER_GROUP]: LayerGroupSvgIcon,\n [DuotoneIcons.CALENDAR_CLOCK]: CalendarClockSvgIcon,\n [DuotoneIcons.BUG]: BugSvgIcon,\n [DuotoneIcons.ROCKET_LAUNCH]: RocketLaunchSvgIcon,\n [DuotoneIcons.FILE_INVOICE]: FileInvoiceSvgIcon,\n [DuotoneIcons.ARROW_SPLIT]: ArrowSplitSvgIcon,\n [DuotoneIcons.PERSON_FALLING]: PersonFallingSvgIcon,\n [DuotoneIcons.RANKING_STAR_GRAD]: RankingStarGradientSvg,\n [DuotoneIcons.HAND_HORNS_GRAD]: HandHornsGradientSvg,\n [DuotoneIcons.CHART_MIXED_GARD]: ChartMixedGradientSvg,\n [DuotoneIcons.TIMELINE_ARROW_GRAD]: TimelineArrowGradientSvg,\n [DuotoneIcons.CIRCLE_NODES_GRAD]: CircleNodesGradientSvg,\n [DuotoneIcons.ANGULAR]: AngularSvgIcon,\n [DuotoneIcons.BRIEFCASE]: BriefcaseSvgIcon,\n [DuotoneIcons.NODEJS]: NodeJsSvgIcon,\n};\n\nexport enum DuotoneIconSizes {\n SMALL = 'small',\n MEDIUM = 'medium',\n BIG = 'big',\n LARGE = 'large',\n}\n\nexport interface IDuotoneIconProps {\n icon: DuotoneIcons;\n iconSize?: DuotoneIconSizes;\n className?: string;\n}\n\nexport default function DuotoneIcon(props: IDuotoneIconProps) {\n return (\n \n {React.createElement(DuotoneIconsMap[props.icon])}\n \n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilArrowUpRight = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17.92,6.62a1,1,0,0,0-.54-.54A1,1,0,0,0,17,6H7A1,1,0,0,0,7,8h7.59l-8.3,8.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0L16,9.41V17a1,1,0,0,0,2,0V7A1,1,0,0,0,17.92,6.62Z'\n }));\n};\n\nUilArrowUpRight.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilArrowUpRight.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilArrowUpRight;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilArrowDown = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17.71,11.29a1,1,0,0,0-1.42,0L13,14.59V7a1,1,0,0,0-2,0v7.59l-3.29-3.3a1,1,0,0,0-1.42,1.42l5,5a1,1,0,0,0,.33.21.94.94,0,0,0,.76,0,1,1,0,0,0,.33-.21l5-5A1,1,0,0,0,17.71,11.29Z'\n }));\n};\n\nUilArrowDown.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilArrowDown.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilArrowDown;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilArrowRight = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17.92,11.62a1,1,0,0,0-.21-.33l-5-5a1,1,0,0,0-1.42,1.42L14.59,11H7a1,1,0,0,0,0,2h7.59l-3.3,3.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l5-5a1,1,0,0,0,.21-.33A1,1,0,0,0,17.92,11.62Z'\n }));\n};\n\nUilArrowRight.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilArrowRight.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilArrowRight;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilArrowLeft = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17,11H9.41l3.3-3.29a1,1,0,1,0-1.42-1.42l-5,5a1,1,0,0,0-.21.33,1,1,0,0,0,0,.76,1,1,0,0,0,.21.33l5,5a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42L9.41,13H17a1,1,0,0,0,0-2Z'\n }));\n};\n\nUilArrowLeft.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilArrowLeft.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilArrowLeft;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilLayers = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M2.5,10.56l9,5.2a1,1,0,0,0,1,0l9-5.2a1,1,0,0,0,0-1.73l-9-5.2a1,1,0,0,0-1,0l-9,5.2a1,1,0,0,0,0,1.73ZM12,5.65l7,4-7,4.05L5,9.69Zm8.5,7.79L12,18.35,3.5,13.44a1,1,0,0,0-1.37.36,1,1,0,0,0,.37,1.37l9,5.2a1,1,0,0,0,1,0l9-5.2a1,1,0,0,0,.37-1.37A1,1,0,0,0,20.5,13.44Z'\n }));\n};\n\nUilLayers.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilLayers.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilLayers;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilClock = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M15.09814,12.63379,13,11.42285V7a1,1,0,0,0-2,0v5a.99985.99985,0,0,0,.5.86621l2.59814,1.5a1.00016,1.00016,0,1,0,1-1.73242ZM12,2A10,10,0,1,0,22,12,10.01114,10.01114,0,0,0,12,2Zm0,18a8,8,0,1,1,8-8A8.00917,8.00917,0,0,1,12,20Z'\n }));\n};\n\nUilClock.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilClock.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilClock;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilMapMarker = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M12,2a8,8,0,0,0-8,8c0,5.4,7.05,11.5,7.35,11.76a1,1,0,0,0,1.3,0C13,21.5,20,15.4,20,10A8,8,0,0,0,12,2Zm0,17.65c-2.13-2-6-6.31-6-9.65a6,6,0,0,1,12,0C18,13.34,14.13,17.66,12,19.65ZM12,6a4,4,0,1,0,4,4A4,4,0,0,0,12,6Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,12,12Z'\n }));\n};\n\nUilMapMarker.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilMapMarker.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilMapMarker;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilSkype = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M21.43451,14.15552a9.586,9.586,0,0,0,.21155-2.02631,9.47653,9.47653,0,0,0-9.54029-9.42254,9.11414,9.11414,0,0,0-1.62494.14178A5.53558,5.53558,0,0,0,2.00061,7.466a5.42884,5.42884,0,0,0,.75354,2.7558,10.0197,10.0197,0,0,0-.18866,1.88452,9.33889,9.33889,0,0,0,9.54028,9.25788,8.56663,8.56663,0,0,0,1.74268-.16584A5.57942,5.57942,0,0,0,16.46368,22a5.433,5.433,0,0,0,4.97083-7.84448ZM16.43964,15.9931a3.63146,3.63146,0,0,1-1.62488,1.22473,6.33963,6.33963,0,0,1-2.52033.44709,6.21683,6.21683,0,0,1-2.89764-.61176,3.733,3.733,0,0,1-1.31964-1.17779,2.574,2.574,0,0,1-.494-1.41339.88041.88041,0,0,1,.30646-.68384,1.09008,1.09008,0,0,1,.77643-.28247.94433.94433,0,0,1,.637.2127,1.793,1.793,0,0,1,.44708.65863,3.39792,3.39792,0,0,0,.49518.87256,1.78964,1.78964,0,0,0,.72955.56488,3.01435,3.01435,0,0,0,1.24872.23554,2.9217,2.9217,0,0,0,1.71985-.44708,1.33217,1.33217,0,0,0,.65979-1.13092,1.135,1.135,0,0,0-.35333-.87134,2.18491,2.18491,0,0,0-.91944-.51923c-.37616-.11774-.89538-.23553-1.53112-.37616a13.9908,13.9908,0,0,1-2.14295-.6358,3.34814,3.34814,0,0,1-1.36651-1.01312,2.47429,2.47429,0,0,1-.49512-1.57807,2.62945,2.62945,0,0,1,.54205-1.60205,3.41154,3.41154,0,0,1,1.53113-1.084,6.652,6.652,0,0,1,2.37964-.37623,6.403,6.403,0,0,1,1.88452.25843,4.07215,4.07215,0,0,1,1.31842.65979,2.91587,2.91587,0,0,1,.77765.87134,1.80281,1.80281,0,0,1,.23553.87139.96189.96189,0,0,1-.30645.70667.9912.9912,0,0,1-.7536.30646.9735.9735,0,0,1-.63575-.18866,2.38218,2.38218,0,0,1-.47113-.61176,2.93711,2.93711,0,0,0-.77758-.96631A2.37614,2.37614,0,0,0,12.0589,7.96a2.7028,2.7028,0,0,0-1.5083.37738,1.07558,1.07558,0,0,0-.56488.89539.95783.95783,0,0,0,.18866.56488,1.41851,1.41851,0,0,0,.54205.4002,2.69264,2.69264,0,0,0,.68262.25959c.23559.07092.613.16467,1.15381.28247.65979.14178,1.27276.30646,1.81475.47107a5.43,5.43,0,0,1,1.38941.6358,2.85691,2.85691,0,0,1,.89532.94226,2.8284,2.8284,0,0,1,.32935,1.3905A2.89029,2.89029,0,0,1,16.43964,15.9931Z'\n }));\n};\n\nUilSkype.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilSkype.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilSkype;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilTelegram = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M11.99432,2a10,10,0,1,0,10,10A9.99917,9.99917,0,0,0,11.99432,2Zm3.17951,15.15247a.70547.70547,0,0,1-1.002.3515l-2.71467-2.10938L9.71484,17.002a.29969.29969,0,0,1-.285.03894l.334-2.98846.01069.00848.00683-.059s4.885-4.44751,5.084-4.637c.20147-.189.135-.23.135-.23.01147-.23053-.36152,0-.36152,0L8.16632,13.299l-2.69549-.918s-.414-.1485-.453-.475c-.041-.324.46649-.5.46649-.5l10.717-4.25751s.881-.39252.881.25751Z'\n }));\n};\n\nUilTelegram.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilTelegram.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilTelegram;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilWhatsappAlt = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M22,6.55a12.61,12.61,0,0,0-.1-1.29,4.29,4.29,0,0,0-.37-1.08,3.66,3.66,0,0,0-.71-1,3.91,3.91,0,0,0-1-.71,4.28,4.28,0,0,0-1.08-.36A10.21,10.21,0,0,0,17.46,2H6.55a12.61,12.61,0,0,0-1.29.1,4.29,4.29,0,0,0-1.08.37,3.66,3.66,0,0,0-1,.71,3.91,3.91,0,0,0-.71,1,4.28,4.28,0,0,0-.36,1.08A10.21,10.21,0,0,0,2,6.54C2,6.73,2,7,2,7.08v9.84c0,.11,0,.35,0,.53a12.61,12.61,0,0,0,.1,1.29,4.29,4.29,0,0,0,.37,1.08,3.66,3.66,0,0,0,.71,1,3.91,3.91,0,0,0,1,.71,4.28,4.28,0,0,0,1.08.36A10.21,10.21,0,0,0,6.54,22H17.45a12.61,12.61,0,0,0,1.29-.1,4.29,4.29,0,0,0,1.08-.37,3.66,3.66,0,0,0,1-.71,3.91,3.91,0,0,0,.71-1,4.28,4.28,0,0,0,.36-1.08A10.21,10.21,0,0,0,22,17.46c0-.19,0-.43,0-.54V7.08C22,7,22,6.73,22,6.55ZM12.23,19h0A7.12,7.12,0,0,1,8.8,18.1L5,19.1l1-3.72a7.11,7.11,0,0,1-1-3.58A7.18,7.18,0,1,1,12.23,19Zm0-13.13A6,6,0,0,0,7.18,15l.14.23-.6,2.19L9,16.8l.22.13a6,6,0,0,0,3,.83h0a6,6,0,0,0,6-6,6,6,0,0,0-6-6Zm3.5,8.52a1.82,1.82,0,0,1-1.21.85,2.33,2.33,0,0,1-1.12-.07,8.9,8.9,0,0,1-1-.38,8,8,0,0,1-3.06-2.7,3.48,3.48,0,0,1-.73-1.85,2,2,0,0,1,.63-1.5.65.65,0,0,1,.48-.22H10c.11,0,.26,0,.4.31s.51,1.24.56,1.33a.34.34,0,0,1,0,.31,1.14,1.14,0,0,1-.18.3c-.09.11-.19.24-.27.32s-.18.18-.08.36a5.56,5.56,0,0,0,1,1.24,5,5,0,0,0,1.44.89c.18.09.29.08.39,0s.45-.52.57-.7.24-.15.4-.09,1.05.49,1.23.58.29.13.34.21A1.56,1.56,0,0,1,15.73,14.36Z'\n }));\n};\n\nUilWhatsappAlt.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilWhatsappAlt.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilWhatsappAlt;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilLinkedin = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M20.47,2H3.53A1.45,1.45,0,0,0,2.06,3.43V20.57A1.45,1.45,0,0,0,3.53,22H20.47a1.45,1.45,0,0,0,1.47-1.43V3.43A1.45,1.45,0,0,0,20.47,2ZM8.09,18.74h-3v-9h3ZM6.59,8.48h0a1.56,1.56,0,1,1,0-3.12,1.57,1.57,0,1,1,0,3.12ZM18.91,18.74h-3V13.91c0-1.21-.43-2-1.52-2A1.65,1.65,0,0,0,12.85,13a2,2,0,0,0-.1.73v5h-3s0-8.18,0-9h3V11A3,3,0,0,1,15.46,9.5c2,0,3.45,1.29,3.45,4.06Z'\n }));\n};\n\nUilLinkedin.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilLinkedin.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilLinkedin;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilLinkedinAlt = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17.5,8.999a5.41868,5.41868,0,0,0-2.56543.64453A.99918.99918,0,0,0,14,8.999H10a.99943.99943,0,0,0-1,1v12a.99942.99942,0,0,0,1,1h4a.99942.99942,0,0,0,1-1v-5.5a1,1,0,1,1,2,0v5.5a.99942.99942,0,0,0,1,1h4a.99942.99942,0,0,0,1-1v-7.5A5.50685,5.50685,0,0,0,17.5,8.999Zm3.5,12H19v-4.5a3,3,0,1,0-6,0v4.5H11v-10h2v.70313a1.00048,1.00048,0,0,0,1.78125.625A3.48258,3.48258,0,0,1,21,14.499Zm-14-12H3a.99943.99943,0,0,0-1,1v12a.99942.99942,0,0,0,1,1H7a.99942.99942,0,0,0,1-1v-12A.99943.99943,0,0,0,7,8.999Zm-1,12H4v-10H6ZM5.01465,1.542A3.23283,3.23283,0,1,0,4.958,7.999h.02832a3.23341,3.23341,0,1,0,.02832-6.457ZM4.98633,5.999H4.958A1.22193,1.22193,0,0,1,3.58887,4.77051c0-.7461.55957-1.22852,1.42578-1.22852A1.2335,1.2335,0,0,1,6.41113,4.77051C6.41113,5.5166,5.85156,5.999,4.98633,5.999Z'\n }));\n};\n\nUilLinkedinAlt.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilLinkedinAlt.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilLinkedinAlt;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilDribbble = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M12,2A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm0,2a7.94,7.94,0,0,1,5.51,2.22A24.93,24.93,0,0,1,12.68,8.4,29.07,29.07,0,0,0,9.81,4.31,7.94,7.94,0,0,1,12,4ZM7.89,5.15A27.16,27.16,0,0,1,10.7,9a25.11,25.11,0,0,1-6,.74H4.34A8,8,0,0,1,7.89,5.15ZM6,17.31A7.9,7.9,0,0,1,4,12c0-.1,0-.2,0-.29h.68a26.67,26.67,0,0,0,7-1c.32.61.62,1.24.91,1.89a14.3,14.3,0,0,0-4.29,2.41l-.3.24A21,21,0,0,0,6,17.31ZM12,20a7.92,7.92,0,0,1-4.47-1.37,17.92,17.92,0,0,1,1.56-1.58l.32-.27a12.63,12.63,0,0,1,4-2.27,32,32,0,0,1,1.4,5A8.08,8.08,0,0,1,12,20Zm4.63-1.49a34.87,34.87,0,0,0-1.28-4.46l.34,0a.25.25,0,0,1,.12,0h.11l.1,0,.48,0a9.43,9.43,0,0,1,3.09.53A7.94,7.94,0,0,1,16.63,18.51ZM16.5,12c-.21,0-.42,0-.62,0a1.56,1.56,0,0,0-.39,0,6.64,6.64,0,0,0-.81.1h-.1c-.29-.67-.59-1.32-.92-2a26.57,26.57,0,0,0,5.13-2.4A8,8,0,0,1,20,12c0,.17,0,.34,0,.51A11.48,11.48,0,0,0,16.5,12Z'\n }));\n};\n\nUilDribbble.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilDribbble.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilDribbble;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilBehance = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M20.07,6.35H15V7.76h5.09ZM19,16.05a2.23,2.23,0,0,1-1.3.37A2.23,2.23,0,0,1,16,15.88a2.49,2.49,0,0,1-.62-1.76H22a6.47,6.47,0,0,0-.17-2,5.08,5.08,0,0,0-.8-1.73,4.17,4.17,0,0,0-1.42-1.21,4.37,4.37,0,0,0-2-.45,4.88,4.88,0,0,0-1.9.37,4.51,4.51,0,0,0-1.47,1,4.4,4.4,0,0,0-.95,1.52,5.4,5.4,0,0,0-.33,1.91,5.52,5.52,0,0,0,.32,1.94A4.46,4.46,0,0,0,14.16,17a4,4,0,0,0,1.46,1,5.2,5.2,0,0,0,1.94.34,4.77,4.77,0,0,0,2.64-.7,4.21,4.21,0,0,0,1.63-2.35H19.62A1.54,1.54,0,0,1,19,16.05Zm-3.43-4.12a1.87,1.87,0,0,1,1-1.14,2.28,2.28,0,0,1,1-.2,1.73,1.73,0,0,1,1.36.49,2.91,2.91,0,0,1,.63,1.45H15.41A3,3,0,0,1,15.52,11.93Zm-5.29-.48a3.06,3.06,0,0,0,1.28-1,2.72,2.72,0,0,0,.43-1.58,3.28,3.28,0,0,0-.29-1.48,2.4,2.4,0,0,0-.82-1,3.24,3.24,0,0,0-1.27-.52,7.54,7.54,0,0,0-1.64-.16H2V18.29H8.1a6.55,6.55,0,0,0,1.65-.21,4.55,4.55,0,0,0,1.43-.65,3.13,3.13,0,0,0,1-1.14,3.41,3.41,0,0,0,.37-1.65,3.47,3.47,0,0,0-.57-2A3,3,0,0,0,10.23,11.45ZM4.77,7.86H7.36a4.17,4.17,0,0,1,.71.06,1.64,1.64,0,0,1,.61.22,1.05,1.05,0,0,1,.42.44,1.42,1.42,0,0,1,.16.72,1.36,1.36,0,0,1-.47,1.15,2,2,0,0,1-1.22.35H4.77ZM9.61,15.3a1.28,1.28,0,0,1-.45.5,2,2,0,0,1-.65.26,3.33,3.33,0,0,1-.78.08h-3V12.69h3a2.4,2.4,0,0,1,1.45.41,1.65,1.65,0,0,1,.54,1.39A1.77,1.77,0,0,1,9.61,15.3Z'\n }));\n};\n\nUilBehance.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilBehance.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilBehance;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilGithubAlt = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M10.07031,20.50291a1.00008,1.00008,0,0,0-1.18115-.9834c-1.30908.24024-2.96191.27637-3.40137-.958a5.70754,5.70754,0,0,0-1.83691-2.415,1.20073,1.20073,0,0,1-.1665-.10938,1,1,0,0,0-.93067-.64551H2.54883a.99965.99965,0,0,0-1,.99512c-.00391.81543.811,1.33789,1.1416,1.51465a4.4408,4.4408,0,0,1,.92383,1.35937c.36426,1.02344,1.42285,2.57617,4.46582,2.376.001.03516.00195.06836.00244.09863l.00439.26758a1,1,0,0,0,2,0l-.00488-.31836C10.07715,21.4951,10.07031,21.22068,10.07031,20.50291Zm10.667-15.126c.03174-.125.063-.26367.09034-.41992a6.27792,6.27792,0,0,0-.40821-3.293,1.002,1.002,0,0,0-.61572-.58007c-.356-.12012-1.67041-.35645-4.18408,1.25a13.86918,13.86918,0,0,0-6.354,0C6.76221.751,5.45459.9658,5.10205,1.07908a.99744.99744,0,0,0-.63135.584,6.3003,6.3003,0,0,0-.40332,3.35644c.02442.12793.05078.2461.07813.35449A6.26928,6.26928,0,0,0,2.89014,9.20311a8.42168,8.42168,0,0,0,.04248.92187c.334,4.60254,3.334,5.98438,5.42431,6.459-.04345.125-.083.25878-.11816.40039a1.00023,1.00023,0,0,0,1.94238.47851,1.6784,1.6784,0,0,1,.46778-.87793.99947.99947,0,0,0-.5459-1.74512c-3.4541-.39453-4.95362-1.80175-5.1792-4.89843a6.61076,6.61076,0,0,1-.03369-.73828,4.25769,4.25769,0,0,1,.91943-2.71289,3.022,3.022,0,0,1,.1958-.23145.99988.99988,0,0,0,.188-1.02441,3.3876,3.3876,0,0,1-.15527-.55567A4.09356,4.09356,0,0,1,6.1167,3.06346a7.54263,7.54263,0,0,1,2.415,1.17968,1.00877,1.00877,0,0,0,.82764.13282,11.77716,11.77716,0,0,1,6.17285.001,1.00549,1.00549,0,0,0,.83056-.13769,7.572,7.572,0,0,1,2.40528-1.19043,4.03977,4.03977,0,0,1,.0874,1.57812,3.205,3.205,0,0,1-.16895.60743.9999.9999,0,0,0,.188,1.02441c.07715.08691.1543.18066.22363.26855A4.12186,4.12186,0,0,1,20,9.20311a7.03888,7.03888,0,0,1-.0376.77734c-.22021,3.05566-1.72558,4.46387-5.1958,4.85937a1,1,0,0,0-.54541,1.7461,1.63079,1.63079,0,0,1,.46631.9082,3.06079,3.06079,0,0,1,.09229.81934v2.334C14.77,21.2949,14.77,21.78025,14.77,22.00291a1,1,0,1,0,2,0c0-.2168,0-.69238.00977-1.33984V18.31346a4.8815,4.8815,0,0,0-.15479-1.31153,4.25638,4.25638,0,0,0-.11621-.416,6.51258,6.51258,0,0,0,5.44531-6.42383A8.69677,8.69677,0,0,0,22,9.20311,6.13062,6.13062,0,0,0,20.7373,5.37693Z'\n }));\n};\n\nUilGithubAlt.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilGithubAlt.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilGithubAlt;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilPlusCircle = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M12,2A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm0,18a8,8,0,1,1,8-8A8,8,0,0,1,12,20Zm4-9H13V8a1,1,0,0,0-2,0v3H8a1,1,0,0,0,0,2h3v3a1,1,0,0,0,2,0V13h3a1,1,0,0,0,0-2Z'\n }));\n};\n\nUilPlusCircle.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilPlusCircle.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilPlusCircle;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilMinusCircle = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M12,2A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm0,18a8,8,0,1,1,8-8A8,8,0,0,1,12,20Zm4-9H8a1,1,0,0,0,0,2h8a1,1,0,0,0,0-2Z'\n }));\n};\n\nUilMinusCircle.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilMinusCircle.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilMinusCircle;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilAngleDown = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M17,9.17a1,1,0,0,0-1.41,0L12,12.71,8.46,9.17a1,1,0,0,0-1.41,0,1,1,0,0,0,0,1.42l4.24,4.24a1,1,0,0,0,1.42,0L17,10.59A1,1,0,0,0,17,9.17Z'\n }));\n};\n\nUilAngleDown.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilAngleDown.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilAngleDown;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilAngleRight = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M14.83,11.29,10.59,7.05a1,1,0,0,0-1.42,0,1,1,0,0,0,0,1.41L12.71,12,9.17,15.54a1,1,0,0,0,0,1.41,1,1,0,0,0,.71.29,1,1,0,0,0,.71-.29l4.24-4.24A1,1,0,0,0,14.83,11.29Z'\n }));\n};\n\nUilAngleRight.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilAngleRight.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilAngleRight;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst UilCreditCard = (props) => {\n const { color, size, ...otherProps } = props\n return React.createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: color,\n ...otherProps\n }, React.createElement('path', {\n d: 'M7,15h3a1,1,0,0,0,0-2H7a1,1,0,0,0,0,2ZM19,5H5A3,3,0,0,0,2,8v9a3,3,0,0,0,3,3H19a3,3,0,0,0,3-3V8A3,3,0,0,0,19,5Zm1,12a1,1,0,0,1-1,1H5a1,1,0,0,1-1-1V11H20Zm0-8H4V8A1,1,0,0,1,5,7H19a1,1,0,0,1,1,1Z'\n }));\n};\n\nUilCreditCard.propTypes = {\n color: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nUilCreditCard.defaultProps = {\n color: 'currentColor',\n size: '24',\n};\n\nexport default UilCreditCard;","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport ArrowUpRightIcon from '@iconscout/react-unicons/icons/uil-arrow-up-right';\nimport ArrowDownIcon from '@iconscout/react-unicons/icons/uil-arrow-down';\nimport ArrowRightIcon from '@iconscout/react-unicons/icons/uil-arrow-right';\nimport ArrowLeftIcon from '@iconscout/react-unicons/icons/uil-arrow-left';\nimport LayersIcon from '@iconscout/react-unicons/icons/uil-layers';\nimport ClockIcon from '@iconscout/react-unicons/icons/uil-clock';\nimport MapMarkerIcon from '@iconscout/react-unicons/icons/uil-map-marker';\nimport SkypeIcon from '@iconscout/react-unicons/icons/uil-skype';\nimport TelegramIcon from '@iconscout/react-unicons/icons/uil-telegram';\nimport WhatsappAltIcon from '@iconscout/react-unicons/icons/uil-whatsapp-alt';\nimport LinkedinIcon from '@iconscout/react-unicons/icons/uil-linkedin';\nimport LinkedinAltIcon from '@iconscout/react-unicons/icons/uil-linkedin-alt';\nimport DribbbleIcon from '@iconscout/react-unicons/icons/uil-dribbble';\nimport BehanceIcon from '@iconscout/react-unicons/icons/uil-behance';\nimport GithubAltIcon from '@iconscout/react-unicons/icons/uil-github-alt';\nimport PlusInCircleIcon from '@iconscout/react-unicons/icons/uil-plus-circle';\nimport MinusInCircleIcon from '@iconscout/react-unicons/icons/uil-minus-circle';\nimport AngleDownIcon from '@iconscout/react-unicons/icons/uil-angle-down';\nimport AngleRightIcon from '@iconscout/react-unicons/icons/uil-angle-right';\nimport CreditCardIcon from '@iconscout/react-unicons/icons/uil-credit-card';\n\nimport React from 'react';\n\nexport enum IconscoutIcons {\n MAP_MARKER = 'map-marker',\n CLOCK = 'clock',\n ARROW_UP_RIGHT = 'arrow-up-right',\n ARROW_DOWN = 'arrow-down',\n ARROW_RIGHT = 'arrow-right',\n ARROW_LEFT = 'arrow-left',\n LAYERS = 'layers',\n SKYPE = 'skype',\n TELEGRAM = 'telegram',\n WHATSAPP_ALT = 'whatsapp-alt',\n LINKEDIN = 'linkedin',\n LINKEDIN_ALT = 'linkedin-alt',\n DRIBBBLE = 'dribbble',\n BEHANCE = 'behance',\n GITHUB_ALT = 'github-alt',\n PLUS_IN_CIRCLE = 'plus-in-circle',\n MINUS_IN_CIRCLE = 'minus-in-circle',\n ANGLE_DOWN = 'angle-down',\n ANGLE_RIGHT = 'angle-right',\n CREDIT_CARD = 'credit-card',\n}\n\nconst IconscoutIconMap = (props: IIconscoutIconProps): Record => ({\n [IconscoutIcons.MAP_MARKER]: ,\n [IconscoutIcons.CLOCK]: ,\n [IconscoutIcons.ARROW_UP_RIGHT]: ,\n [IconscoutIcons.ARROW_DOWN]: ,\n [IconscoutIcons.ARROW_RIGHT]: ,\n [IconscoutIcons.ARROW_LEFT]: ,\n [IconscoutIcons.LAYERS]: ,\n [IconscoutIcons.SKYPE]: ,\n [IconscoutIcons.TELEGRAM]: ,\n [IconscoutIcons.WHATSAPP_ALT]: ,\n [IconscoutIcons.LINKEDIN]: ,\n [IconscoutIcons.LINKEDIN_ALT]: ,\n [IconscoutIcons.DRIBBBLE]: ,\n [IconscoutIcons.BEHANCE]: ,\n [IconscoutIcons.GITHUB_ALT]: ,\n [IconscoutIcons.PLUS_IN_CIRCLE]: ,\n [IconscoutIcons.MINUS_IN_CIRCLE]: ,\n [IconscoutIcons.ANGLE_DOWN]: ,\n [IconscoutIcons.ANGLE_RIGHT]: ,\n [IconscoutIcons.CREDIT_CARD]: ,\n});\n\nexport interface IIconscoutIconProps {\n icon: IconscoutIcons;\n className?: string;\n color?: string;\n}\n\nexport default function IconscoutIcon(props: IIconscoutIconProps) {\n return IconscoutIconMap(props)[props.icon];\n}\n","import React from 'react';\nimport classNames from 'classnames';\n\nexport enum TextAlignments {\n RIGHT = 'right',\n CENTER = 'center',\n LEFT = 'left',\n}\n\nexport enum FontStyles {\n CURSIVE = 'cursive',\n NORMAL = 'normal',\n}\n\nexport enum TextTypographies {\n BODY = 'typography-body',\n BODY_SMALL = 'typography-body-small',\n CONTROL_MENU = 'typography-control-menu',\n CONTROL_LABEL = 'typography-control-label',\n CONTROL_BUTTON = 'typography-control-button',\n}\n\nexport enum TextWeights {\n REGULAR = 300,\n SEMIBOLD = 500,\n BOLD = 700,\n}\nexport interface ITextProps extends React.HTMLAttributes {\n text: string;\n alignment?: TextAlignments;\n weight?: TextWeights;\n typography?: TextTypographies;\n fontStyle?: FontStyles;\n}\nexport default function Text(props: ITextProps) {\n return (\n \n );\n}\n","export const isBrowser = () => typeof window !== 'undefined';\n","import { isBrowser } from './is-browser';\n\nexport function isInternalLink(linkUrl: string) {\n const currentOrigin = isBrowser() ? window.location.origin : '';\n\n const startsWithHttps = linkUrl.startsWith('https://') || linkUrl.startsWith('http://');\n const includesCurrentOrigin = linkUrl.includes(currentOrigin);\n const isEmailLink = linkUrl.startsWith('mailto:');\n const isPhoneLink = linkUrl.startsWith('tel:');\n\n if (startsWithHttps) {\n return false;\n }\n\n if (isEmailLink || isPhoneLink) {\n return false;\n }\n\n if (includesCurrentOrigin) {\n return true;\n }\n\n return false;\n}\n","import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport IconscoutIcon, { IconscoutIcons } from '../Atoms/icon/iconscout-icon';\nimport Text, { TextTypographies, TextWeights } from '../Atoms/text/text';\nimport { Link } from 'gatsby';\nimport { isInternalLink } from '../../helpers/is-link-external';\n\nexport interface IButtonProps {\n textContent: string;\n link?: string;\n isDisabled?: boolean;\n isPrimary?: boolean;\n isExtra?: boolean;\n onClick?: (...args: any[]) => void;\n}\n\nconst defaultArrowColor = '#919399';\n\nconst getContent = (content?: string): string => content ?? 'No content';\n\nconst defineClassName = ({ isPrimary, isExtra }: IButtonProps): string => {\n if (isExtra) return 'button-extra';\n\n return isPrimary ? 'button-primary' : 'button-secondary';\n};\n\nconst renderArrow = ({ isExtra }: IButtonProps): JSX.Element => {\n if (!isExtra) return <>>;\n\n return (\n