{"version":3,"file":"microlink.min.mjs","sources":["../../../node_modules/.pnpm/nanoclamp@2.0.7_react@18.2.0/node_modules/nanoclamp/dist/nanoclamp.mjs","../../../node_modules/.pnpm/is-local-address@2.0.0/node_modules/is-local-address/src/index.js","../../../node_modules/.pnpm/is-local-address@2.0.0/node_modules/is-local-address/src/ipv4.js","../../../node_modules/.pnpm/is-local-address@2.0.0/node_modules/is-local-address/src/ipv6.js","../src/utils/index.js","../src/components/Card/CardText.js","../src/theme.js","../src/context/GlobalState.js","../src/components/Card/CardContent.js","../src/components/Card/CardAnimation.js","../src/components/Card/CardMedia/loader.js","../src/components/Card/CardMedia/Wrap.js","../src/components/Card/CardMedia/Image.js","../src/components/Card/CardEmpty.js","../src/components/Card/CardMedia/Controls/MediaButton.js","../src/components/Card/CardMedia/Controls/FooterControls.js","../src/components/Card/CardMedia/Controls/PlaybackButton.js","../src/components/Card/CardMedia/Controls/ProgressBar/Scrubber.js","../src/components/Card/CardMedia/Controls/ProgressBar/Tooltip.js","../src/components/Card/CardMedia/Controls/ProgressBar/index.js","../src/components/Card/CardMedia/Controls/SeekButton.js","../src/components/Card/CardMedia/Controls/Spinner.js","../src/components/Card/CardMedia/Controls/index.js","../src/components/Card/CardMedia/Video.js","../src/components/Card/CardMedia/index.js","../src/components/Card/CardMedia/Audio.js","../src/components/Card/CardWrap.js","../src/index.js","../src/utils/hooks.js"],"sourcesContent":["import{useRef as e,useMemo as t,useCallback as n,useEffect as r,createElement as i}from\"react\";const l=({accessibility:l=!0,debounce:o=300,ellipsis:u=\"…\",is:c=\"div\",lines:s=3,text:d,...v})=>{const a=e(null),f=e(\".\"),h={ref:a,...l?{title:d}:{},...v},g=t((()=>\"string\"==typeof d&&d.length>0),[d]),m=n((()=>{var e,t,n,r;if(!g)return;const i=e=>{f.current=e,null!=a.current&&(a.current.innerText=e)};i(\".\");const l=((null!==(t=null===(e=a.current)||void 0===e?void 0:e.clientHeight)&&void 0!==t?t:0)+1)*s+1,o=\"…\"===u?5:1.2*u.length;let c=0,v=0,h=d.length;for(;c<=h;){v=Math.floor((c+h)/2);if(i(d.slice(0,v)),v===d.length)return;(null!==(r=null===(n=a.current)||void 0===n?void 0:n.clientHeight)&&void 0!==r?r:0)<=l?c=v+1:h=v-1}i(d.slice(0,Math.max(v-o,0)).trim()+u)}),[u,g,s,d]);return r((()=>{m();const e=((e,t)=>{let n;const r=()=>{n=void 0,e()};return()=>{const i=null==n;clearTimeout(n),n=setTimeout(r,t),i&&e()}})(m,o);return window.addEventListener(\"resize\",e),()=>window.removeEventListener(\"resize\",e)}),[m,o]),g?i(c,h,f.current):null};export{l as default};\n//# sourceMappingURL=nanoclamp.mjs.map\n","'use strict'\nmodule.exports = hostname => require('./ipv4')(hostname) || require('./ipv6')(hostname)\n","'use strict'\n\nconst IP_RANGES = [\n  // 10.0.0.0 - 10.255.255.255\n  /^(:{2}f{4}:)?10(?:\\.\\d{1,3}){3}$/,\n  // 127.0.0.0 - 127.255.255.255\n  /^(:{2}f{4}:)?127(?:\\.\\d{1,3}){3}$/,\n  // 169.254.1.0 - 169.254.254.255\n  /^(::f{4}:)?169\\.254\\.([1-9]|1?\\d\\d|2[0-4]\\d|25[0-4])\\.\\d{1,3}$/,\n  // 172.16.0.0 - 172.31.255.255\n  /^(:{2}f{4}:)?(172\\.1[6-9]|172\\.2\\d|172\\.3[01])(?:\\.\\d{1,3}){2}$/,\n  // 192.168.0.0 - 192.168.255.255\n  /^(:{2}f{4}:)?192\\.168(?:\\.\\d{1,3}){2}$/,\n  // fc00::/7\n  /^f[cd][\\da-f]{2}(::1$|:[\\da-f]{1,4}){1,7}$/,\n  // fe80::/10s\n  /^fe[89ab][\\da-f](::1$|:[\\da-f]{1,4}){1,7}$/,\n  // localhost in IPv4\n  /^localhost$|^0\\.0\\.0\\.0$/\n]\n\nconst regex = new RegExp(`^(${IP_RANGES.map(re => re.source).join('|')})$`)\n\nmodule.exports = regex.test.bind(regex)\nmodule.exports.regex = regex\n","'use strict'\n\nconst IP_RANGES = [\n  // localhost in IPv6\n  /^\\[(::1|::)\\]$/\n]\n\nconst regex = new RegExp(`^(${IP_RANGES.map(re => re.source).join('|')})$`)\n\nmodule.exports = regex.test.bind(regex)\nmodule.exports.regex = regex\n","import { fetchFromApi, getApiUrl as createApiUrl } from '@microlink/mql'\nimport isLocalAddress from 'is-local-address'\nimport { css } from 'styled-components'\n\nexport const isSSR = typeof window === 'undefined'\n\nexport const castArray = value => [].concat(value)\n\nexport const getPreferredMedia = (data, mediaProps) => {\n  let prefer\n\n  for (let index = 0; index < mediaProps.length; index++) {\n    const key = mediaProps[index]\n    const value = data[key]\n    if (!isNil(value)) {\n      prefer = key\n      break\n    }\n  }\n\n  return prefer\n}\n\nexport const isFunction = fn => typeof fn === 'function'\n\nexport const isObject = obj => typeof obj === 'object'\n\nexport const isNil = value => value == null\n\nexport const getUrlPath = data => (isObject(data) ? data.url : data)\n\nexport const someProp = (data, props) =>\n  data[props.find(prop => !isNil(data[prop]))]\n\nexport const media = {\n  mobile: (...args) => css`\n    @media (max-width: 48em) {\n      ${css(...args)};\n    }\n  `,\n  desktop: (...args) => css`\n    @media (min-width: 48em) {\n      ${css(...args)};\n    }\n  `\n}\n\nexport const getApiUrl = ({\n  apiKey,\n  contrast = false,\n  data,\n  endpoint,\n  force,\n  headers,\n  media,\n  prerender,\n  proxy,\n  ttl,\n  url\n}) =>\n  createApiUrl(url, {\n    apiKey,\n    audio: media.includes('audio'),\n    data,\n    endpoint,\n    force,\n    headers,\n    iframe: media.includes('iframe'),\n    palette: contrast,\n    prerender,\n    proxy,\n    screenshot: media.includes('screenshot'),\n    ttl,\n    video: media.includes('video')\n  })\n\nexport { fetchFromApi }\n\nexport const isLarge = cardSize => cardSize === 'large'\n\nexport const isSmall = cardSize => cardSize === 'small'\n\nexport const imageProxy = url =>\n  isLocalAddress(new URL(url).hostname)\n    ? url\n    : `https://images.weserv.nl/?${new URLSearchParams({\n      url,\n      default: url,\n      l: 9,\n      af: '',\n      il: '',\n      n: -1\n    }).toString()}`\n\nexport const isLazySupported = !isSSR && 'IntersectionObserver' in window\n\nexport const formatSeconds = secs => {\n  const secsToNum = parseInt(secs, 10)\n  const hours = Math.floor(secsToNum / 3600)\n  const minutes = Math.floor(secsToNum / 60) % 60\n  const seconds = secsToNum % 60\n\n  return [hours, minutes, seconds]\n    .filter((v, i) => v > 0 || i > 0)\n    .map(v => (v >= 10 ? v : `0${v}`))\n    .join(':')\n}\n\nexport const clampNumber = (num, min, max) => {\n  switch (true) {\n    case num <= min:\n      return min\n    case num >= max:\n      return max\n    default:\n      return num\n  }\n}\n\nconst BASE_CLASSNAME = 'microlink_card'\nconst CONTENT_BASE_CLASSNAME = `${BASE_CLASSNAME}__content`\nconst MEDIA_BASE_CLASSNAME = `${BASE_CLASSNAME}__media`\nconst CONTROLS_BASE_CLASSNAME = `${MEDIA_BASE_CLASSNAME}__controls`\n\nexport const classNames = {\n  main: BASE_CLASSNAME,\n  content: CONTENT_BASE_CLASSNAME,\n  title: `${CONTENT_BASE_CLASSNAME}_title`,\n  description: `${CONTENT_BASE_CLASSNAME}_description`,\n  url: `${CONTENT_BASE_CLASSNAME}_url`,\n  mediaWrapper: `${MEDIA_BASE_CLASSNAME}_wrapper`,\n  media: MEDIA_BASE_CLASSNAME,\n  image: `${MEDIA_BASE_CLASSNAME}_image`,\n  videoWrapper: `${MEDIA_BASE_CLASSNAME}_video_wrapper`,\n  video: `${MEDIA_BASE_CLASSNAME}_video`,\n  audioWrapper: `${MEDIA_BASE_CLASSNAME}_audio_wrapper`,\n  audio: `${MEDIA_BASE_CLASSNAME}_audio`,\n  mediaControls: CONTROLS_BASE_CLASSNAME,\n  playbackControl: `${CONTROLS_BASE_CLASSNAME}_playback`,\n  volumeControl: `${CONTROLS_BASE_CLASSNAME}_volume`,\n  rwControl: `${CONTROLS_BASE_CLASSNAME}_rewind`,\n  ffwControl: `${CONTROLS_BASE_CLASSNAME}_fast_forward`,\n  rateControl: `${CONTROLS_BASE_CLASSNAME}_rate`,\n  progressBar: `${CONTROLS_BASE_CLASSNAME}_progress_bar`,\n  progressTime: `${CONTROLS_BASE_CLASSNAME}_progress_time`,\n  spinner: `${CONTROLS_BASE_CLASSNAME}_spinner`,\n  iframe: `${BASE_CLASSNAME}__iframe`\n}\n","/* eslint-disable multiline-ternary */\n\nimport React from 'react'\nimport { styled, css } from 'styled-components'\nimport NanoClamp from 'nanoclamp'\n\nimport { isNil } from '../../utils'\n\nconst Clamp = ({ children, className, lines }) =>\n  isNil(children) ? null : (\n    <NanoClamp className={className} lines={lines} text={children} is='p' />\n  )\n\nconst StyledClamp = styled(Clamp)`\n  &&& {\n    text-align: inherit;\n    font-weight: inherit;\n    font-family: inherit;\n    color: inherit;\n    margin: 0;\n\n    ${({ $useNanoClamp }) =>\n      !$useNanoClamp &&\n      css`\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n      `}\n  }\n`\n\nconst CardText = ({ useNanoClamp = true, children, ...props }) => {\n  const textProps = useNanoClamp\n    ? props\n    : { ...props, as: 'p', title: children }\n\n  return (\n    <StyledClamp $useNanoClamp={useNanoClamp} {...textProps}>\n      {children}\n    </StyledClamp>\n  )\n}\n\nexport default CardText\n","export const speed = {\n  short: '100ms',\n  medium: '150ms',\n  long: '300ms'\n}\n\nexport const animation = {\n  short: 'cubic-bezier(.25,.8,.25,1)',\n  medium: 'cubic-bezier(.25,.8,.25,1)',\n  long: 'cubic-bezier(.4, 0, .2, 1)'\n}\n\nconst createTransition = (properties, s) => {\n  const suffix = `${speed[s]} ${animation[s]}`\n  return properties.map(property => `${property} ${suffix}`).join(', ')\n}\n\nexport const transition = {\n  short: (...properties) => createTransition(properties, 'short'),\n  medium: (...properties) => createTransition(properties, 'medium'),\n  long: (...properties) => createTransition(properties, 'long')\n}\n\n// https://primer.style/design/foundations/typography\nexport const font = {\n  sans: \"InterUI, -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Open Sans', sans-serif\",\n  mono: \"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace\"\n}\n","import React, { useCallback, useMemo, useState } from 'react'\n\nconst initialState = {}\n\nexport const GlobalContext = React.createContext(initialState)\n\nconst GlobalState = ({\n  autoPlay,\n  children,\n  controls,\n  loop,\n  mediaRef,\n  muted,\n  playsInline,\n  size,\n  ...rest\n}) => {\n  const [state, setState] = useState(initialState)\n\n  const updateState = useCallback(\n    newState => setState(currentState => ({ ...currentState, ...newState })),\n    []\n  )\n\n  const props = useMemo(\n    () => ({\n      autoPlay,\n      controls,\n      loop,\n      mediaRef,\n      muted,\n      playsInline,\n      size\n    }),\n    [autoPlay, controls, loop, mediaRef, muted, playsInline, size]\n  )\n\n  const values = useMemo(\n    () => ({\n      props,\n      state,\n      updateState\n    }),\n    [props, state, updateState]\n  )\n\n  return (\n    <GlobalContext.Provider value={values}>\n      {children(rest)}\n    </GlobalContext.Provider>\n  )\n}\n\nexport default GlobalState\n","/* global URL */\n\nimport React, { useCallback, useMemo, useContext } from 'react'\nimport { styled, css } from 'styled-components'\nimport CardText from './CardText'\n\nimport { transition } from '../../theme'\nimport { classNames, media, isLarge, isSmall, isNil } from '../../utils'\nimport { GlobalContext } from '../../context/GlobalState'\n\nconst REGEX_STRIP_WWW = /^www\\./\nconst BADGE_WIDTH = '16px'\nconst BADGE_HEIGHT = '12px'\n\nconst getHostname = href => {\n  if (isNil(href)) return ''\n  const { hostname } = new URL(href)\n  return hostname.replace(REGEX_STRIP_WWW, '')\n}\n\nconst mobileDescriptionStyle = css`\n  ${media.mobile`\n    > p {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n  `};\n`\n\nexport const Content = styled('div').attrs({ className: classNames.content })`\n  display: flex;\n  padding: 10px 15px;\n  min-width: 0;\n  box-sizing: border-box;\n  ${({ $cardSize }) => css`\n    flex: ${!isLarge($cardSize) ? 1 : '0 0 125px'};\n    justify-content: ${!isSmall($cardSize) ? 'space-around' : 'space-between'};\n    flex-direction: ${!isSmall($cardSize) ? 'column' : 'row'};\n    align-items: ${!isSmall($cardSize) ? 'stretch' : 'center'};\n  `};\n`\n\nconst Header = styled('header').attrs({ className: classNames.title })`\n  text-align: left;\n  font-weight: bold;\n  margin: 0;\n  width: 100%;\n  ${({ $cardSize }) => css`\n    flex-grow: ${!isSmall($cardSize) ? 1.2 : 0.8};\n    font-size: ${!isSmall($cardSize) ? '16px' : '15px'};\n\n    ${isSmall($cardSize) &&\n    css`\n      min-width: 0;\n      padding-right: 14px;\n    `}\n  `}\n`\n\nconst Description = styled('div').attrs({ className: classNames.description })`\n  text-align: left;\n  font-size: 14px;\n  flex-grow: 2;\n  margin: auto 0;\n  line-height: 18px;\n  font-weight: normal;\n  ${({ $cardSize }) => !isLarge($cardSize) && mobileDescriptionStyle};\n`\n\nconst Footer = styled('footer').attrs({ className: classNames.url })`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  text-align: left;\n  margin: 0;\n  flex-grow: 0;\n  font-weight: normal;\n  ${({ $cardSize }) => css`\n    font-size: ${!isSmall($cardSize) ? '12px' : '10px'};\n    ${!isSmall($cardSize) && 'width: 100%;'}\n  `};\n`\n\nconst Author = styled(CardText)`\n  opacity: 0.75;\n  transition: ${transition.medium('opacity')};\n  will-change: opacity;\n\n  .${classNames.main}:hover & {\n    opacity: 1;\n  }\n`\n\nconst PoweredBy = styled('span').attrs({ title: 'microlink.io' })`\n  background: url('https://cdn.microlink.io/logo/logo.svg') no-repeat center\n    center;\n  display: block;\n  margin-left: 15px;\n  transition: ${transition.medium('filter', 'opacity')};\n  will-change: filter, opacity;\n  &:not(:hover) {\n    filter: grayscale(100%);\n    opacity: 0.75;\n  }\n\n  min-width: ${BADGE_WIDTH};\n  width: ${BADGE_WIDTH};\n  background-size: ${BADGE_WIDTH};\n  height: ${BADGE_HEIGHT};\n`\n\nconst CardContent = () => {\n  const {\n    state: { description, title, url },\n    props: { size }\n  } = useContext(GlobalContext)\n  const isSmallCard = isSmall(size)\n  const formattedUrl = useMemo(() => getHostname(url), [url])\n  const handleOnClick = useCallback(e => {\n    e.preventDefault()\n    window.open('https://www.microlink.io', '_blank')\n  }, [])\n\n  return (\n    <Content $cardSize={size}>\n      <Header $cardSize={size}>\n        <CardText $useNanoClamp={false}>{title}</CardText>\n      </Header>\n      {!isSmallCard && (\n        <Description $cardSize={size}>\n          <CardText lines={2}>{description}</CardText>\n        </Description>\n      )}\n      <Footer $cardSize={size}>\n        <Author $useNanoClamp={false}>{formattedUrl}</Author>\n        <PoweredBy onClick={handleOnClick} />\n      </Footer>\n    </Content>\n  )\n}\n\nexport default CardContent\n","import { css, keyframes } from 'styled-components'\n\nconst emptyStatePulse = keyframes`\n  0% {\n    background: #e1e8ed;\n  }\n  70% {\n    background: #cdd4d8;\n  }\n  100% {\n    background: #e1e8ed;\n  }\n`\nconst emptyStateImagePulse = keyframes`\n  0% {\n    background: #e1e8ed;\n  }\n  70% {\n    background: #dce3e8;\n  }\n  100% {\n    background: #e1e8ed;\n  }\n`\n\nexport const emptyStateAnimation = css`\n  animation: ${emptyStatePulse} .75s linear infinite;\n`\n\nexport const emptyStateImageAnimation = css`\n  animation: ${emptyStateImagePulse} 1.25s linear infinite;\n`\n","import { styled, css } from 'styled-components'\nimport { transition } from '../../../theme'\n\nexport const ImageLoadCatcher = styled('img')`\n  height: 1px;\n  width: 1px;\n  position: absolute;\n  z-index: -1;\n`\n\nexport const loadingOverlay = css`\n  &::after {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: #e1e8ed;\n    z-index: 1;\n    transition: ${transition.medium('opacity', 'visibility')};\n    will-change: opacity;\n\n    ${({ $isLoading }) => css`\n      opacity: ${$isLoading ? 1 : 0};\n      visibility: ${$isLoading ? '$visible' : 'hidden'};\n    `};\n  }\n`\n","import React, { useContext } from 'react'\nimport { styled, css } from 'styled-components'\n\nimport { GlobalContext } from '../../../context/GlobalState'\nimport { media } from '../../../utils'\nimport { loadingOverlay } from './loader'\n\nconst mediaSizeStyles = {\n  small: css`\n    flex: 0 0 48px;\n  `,\n  normal: css`\n    flex: 0 0 125px;\n\n    ${media.mobile`\n      flex: 0 0 92px;\n    `}\n  `,\n  large: css`\n    flex: 1;\n\n    &::before {\n      padding-bottom: 0;\n    }\n  `\n}\n\nconst StyledWrap = styled('div')`\n  background: transparent no-repeat center center / cover;\n  display: block;\n  overflow: hidden;\n  height: auto;\n  position: relative;\n\n  &::before {\n    content: '';\n    padding-bottom: 100%;\n    display: block;\n  }\n\n  ${({ $cardSize }) => mediaSizeStyles[$cardSize]};\n\n  ${loadingOverlay};\n`\n\nconst Wrap = props => {\n  const {\n    props: { size }\n  } = useContext(GlobalContext)\n\n  return <StyledWrap $cardSize={size} {...props} />\n}\n\nexport default Wrap\n","import React, { useContext } from 'react'\nimport { styled } from 'styled-components'\n\nimport Wrap from './Wrap'\nimport { GlobalContext } from '../../../context/GlobalState'\nimport { classNames, imageProxy } from '../../../utils'\n\nconst ImageWrap = styled(Wrap).attrs({\n  className: `${classNames.media} ${classNames.image}`\n})`\n  background-image: ${({ url }) => (url ? `url('${imageProxy(url)}')` : '')};\n`\n\nconst ImageComponent = props => {\n  const {\n    state: { imageUrl }\n  } = useContext(GlobalContext)\n\n  return <ImageWrap url={imageUrl} {...props} />\n}\n\nexport default ImageComponent\n","/* eslint-disable multiline-ternary */\n\nimport React, { useContext } from 'react'\nimport { styled } from 'styled-components'\n\nimport { emptyStateAnimation, emptyStateImageAnimation } from './CardAnimation'\nimport CardImage from './CardMedia/Image'\nimport { Content } from './CardContent'\nimport { GlobalContext } from '../../context/GlobalState'\nimport { isLarge, isSmall } from '../../utils'\n\nconst MediaEmpty = styled(CardImage)`\n  ${emptyStateImageAnimation};\n`\n\nconst HeaderEmpty = styled('span')`\n  opacity: 0.8;\n  height: 16px;\n  width: ${({ $cardSize }) => (!isSmall($cardSize) ? '60%' : '75%')};\n  display: block;\n  background: #e1e8ed;\n  margin: ${({ $cardSize }) =>\n    !isSmall($cardSize) ? '2px 0 8px' : '0 20px 0 0'};\n  ${emptyStateAnimation};\n\n  ${({ $cardSize }) =>\n    !isLarge($cardSize) &&\n    `\n    height: 15px;\n  `};\n`\n\nconst DescriptionEmpty = styled('span')`\n  opacity: 0.8;\n  height: 14px;\n  width: 95%;\n  display: block;\n  position: relative;\n  ${emptyStateAnimation};\n  animation-delay: 0.125s;\n`\n\nconst FooterEmpty = styled('span')`\n  opacity: 0.8;\n  height: 12px;\n  width: 30%;\n  display: block;\n  ${emptyStateAnimation} animation-delay: .25s;\n\n  ${({ $cardSize }) =>\n    !isLarge($cardSize) &&\n    `\n    height: 10px;\n  `};\n`\n\nconst CardEmptyState = () => {\n  const {\n    props: { size }\n  } = useContext(GlobalContext)\n  const isSmallCard = isSmall(size)\n\n  return (\n    <>\n      <MediaEmpty $cardSize={size} />\n      <Content $cardSize={size}>\n        <HeaderEmpty $cardSize={size} />\n        {!isSmallCard ? (\n          <>\n            <DescriptionEmpty $cardSize={size} />\n            <DescriptionEmpty\n              $cardSize={size}\n              style={{ marginBottom: '12px' }}\n            />\n          </>\n        ) : null}\n        <FooterEmpty />\n      </Content>\n    </>\n  )\n}\n\nexport default CardEmptyState\n","import { styled } from 'styled-components'\nimport { transition } from '../../../../theme'\n\nconst MediaButton = styled('div')`\n  backface-visibility: hidden;\n  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));\n  transition: ${transition.short('transform')};\n  will-change: transform;\n\n  > svg {\n    display: block;\n  }\n\n  &:active:not(:focus) {\n    transform: scale(0.9);\n  }\n`\n\nexport default MediaButton\n","import React, { useMemo } from 'react'\nimport { styled } from 'styled-components'\n\nimport MediaButton from './MediaButton'\nimport { classNames, media, isLarge } from '../../../../utils'\nimport { font, transition } from '../../../../theme'\n\nconst VolumeMute = props => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M15.5 6.205l-.705-.705L13 7.295 11.205 5.5l-.705.705L12.295 8 10.5 9.795l.705.705L13 8.705l1.795 1.795.705-.705L13.705 8 15.5 6.205zM9 15a.5.5 0 01-.355-.15L4.835 11H1.5a.5.5 0 01-.5-.5v-5a.5.5 0 01.5-.5h3.335l3.81-3.85a.5.5 0 01.705 0 .5.5 0 01.15.35v13a.5.5 0 01-.5.5z'\n      transform='translate(-1 -1)'\n    />\n  </svg>\n)\n\nconst VolumeUp = props => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M13.58 4.04l-.765.645a5 5 0 01-.145 6.615l.735.7a6 6 0 00.175-7.94v-.02zM10.79 6a3 3 0 01-.09 3.97l.735.68a4 4 0 00.115-5.295L10.79 6zM9 15a.5.5 0 01-.355-.15L4.835 11H1.5a.5.5 0 01-.5-.5v-5a.5.5 0 01.5-.5h3.335l3.81-3.85a.5.5 0 01.705 0 .5.5 0 01.15.35v13a.5.5 0 01-.5.5z'\n      transform='translate(-1 -1)'\n    />\n  </svg>\n)\n\nconst BottomControls = styled('div')`\n  z-index: 2;\n  position: absolute;\n  bottom: ${({ $cardSize }) => (isLarge($cardSize) ? 18 : 14)}px;\n  left: 0;\n  right: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  transition: ${transition.medium('opacity')};\n  will-change: opacity;\n`\n\nconst VolumeIcon = styled('svg')`\n  stroke: #fff;\n`\n\nconst VolumeButton = styled(MediaButton).attrs({\n  className: classNames.volumeControl\n})`\n  ${VolumeIcon} {\n    width: ${({ $cardSize }) => (isLarge($cardSize) ? 16 : 14)}px;\n    height: ${({ $cardSize }) => (isLarge($cardSize) ? 16 : 14)}px;\n\n    ${({ $cardSize }) =>\n      !isLarge($cardSize) &&\n      media.mobile`\n      width: 12px;\n      height: 12px;\n    `}\n  }\n`\n\nconst PlaybackRateButton = styled(MediaButton).attrs({\n  className: classNames.rateControl\n})`\n  font-size: ${({ $cardSize }) => (isLarge($cardSize) ? 12 : 10)}px;\n  min-width: ${({ $cardSize }) => (isLarge($cardSize) ? 33 : 28)}px;\n  line-height: 1;\n  font-weight: bold;\n  border: 1.5px solid #fff;\n  border-radius: 9999px;\n  padding: 1px 5px;\n  text-align: center;\n  color: #fff;\n  margin-left: 10px;\n\n  ${({ $cardSize }) =>\n    !isLarge($cardSize) &&\n    media.mobile`\n    font-size: 8px;\n    margin-left: 8px;\n    min-width: 23px;\n  `}\n`\n\nconst TimeLabel = styled('span').attrs({ className: classNames.progressTime })`\n  margin: ${({ $right }) => (!$right ? '0 auto 0 0' : '0 0 0 auto')};\n  font-family: ${font.mono};\n  font-size: 12px;\n  padding: 0 16px;\n  color: #fff;\n  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n`\n\nconst FooterControls = ({\n  $cardSize,\n  currentTime,\n  endTime,\n  isMuted,\n  onMuteClick,\n  onPlaybackRateClick,\n  playbackRate\n}) => {\n  const VolumeComponent = useMemo(\n    () => (isMuted ? VolumeMute : VolumeUp),\n    [isMuted]\n  )\n  const isLargeCard = useMemo(() => isLarge($cardSize), [$cardSize])\n\n  return (\n    <BottomControls $cardSize={$cardSize}>\n      {isLargeCard && <TimeLabel>{currentTime}</TimeLabel>}\n\n      <VolumeButton\n        title={isMuted ? 'Unmute' : 'Mute'}\n        $cardSize={$cardSize}\n        onClick={onMuteClick}\n      >\n        <VolumeIcon as={VolumeComponent} />\n      </VolumeButton>\n\n      <PlaybackRateButton\n        title='Playback Rate'\n        $cardSize={$cardSize}\n        onClick={onPlaybackRateClick}\n      >\n        <span>{playbackRate}x</span>\n      </PlaybackRateButton>\n\n      {isLargeCard && <TimeLabel $right>{endTime}</TimeLabel>}\n    </BottomControls>\n  )\n}\n\nexport default FooterControls\n","import React, { useMemo } from 'react'\nimport { styled, css } from 'styled-components'\n\nimport MediaButton from './MediaButton'\nimport { classNames, isSmall, isLarge, media } from '../../../../utils'\n\nconst Pause = props => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 20' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M12 6h-2a2 2 0 00-2 2v16a2 2 0 002 2h2a2 2 0 002-2V8a2 2 0 00-2-2zm10 0h-2a2 2 0 00-2 2v16a2 2 0 002 2h2a2 2 0 002-2V8a2 2 0 00-2-2z'\n      transform='translate(-8 -6)'\n    />\n  </svg>\n)\n\nconst Play = props => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 24' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M7 28a1 1 0 01-1-1V5a1 1 0 011.501-.865l19 11a1 1 0 010 1.73l-19 11A.998.998 0 017 28z'\n      transform='translate(-6 -4)'\n    />\n  </svg>\n)\n\nconst iconSizes = {\n  large: '50px',\n  normal: '35px',\n  small: '20px'\n}\n\nconst PlaybackIcon = styled('svg')`\n  stroke: #fff;\n`\n\nconst PlaybackButtonWrap = styled(MediaButton).attrs({\n  className: classNames.playbackControl\n})`\n  ${PlaybackIcon} {\n    ${({ $cardSize }) => css`\n      width: ${iconSizes[$cardSize]};\n      height: ${iconSizes[$cardSize]};\n      padding: ${isLarge($cardSize) ? 0 : '8px'};\n\n      ${!isLarge($cardSize) &&\n      !isSmall($cardSize) &&\n      media.mobile`\n        width: calc(${iconSizes.small} * 1.2);\n        height: calc(${iconSizes.small} * 1.2);\n      `}\n    `}\n  }\n`\n\nconst PlaybackButton = ({ $isPlaying, ...props }) => {\n  const PlaybackComponent = useMemo(\n    () => ($isPlaying ? Pause : Play),\n    [$isPlaying]\n  )\n\n  return (\n    <PlaybackButtonWrap title={$isPlaying ? 'Pause' : 'Play'} {...props}>\n      <PlaybackIcon as={PlaybackComponent} />\n    </PlaybackButtonWrap>\n  )\n}\n\nexport default PlaybackButton\n","import { styled, css } from 'styled-components'\n\nimport { transition } from '../../../../../theme'\n\nconst SCRUBBER_SIZE = 12\n\nconst scrubberSizeScales = { normal: 0.8, small: 0.9 }\n\nconst getScrubberSize = size =>\n  Math.floor(SCRUBBER_SIZE * (scrubberSizeScales[size] || 1))\n\nconst Scrubber = styled('div').attrs(({ $isVisible, $positionX }) => ({\n  style: {\n    left: $positionX,\n    transform: `scale(${$isVisible ? 1 : 0.5}) translate(-50%, -50%)`,\n    opacity: $isVisible ? 1 : 0,\n    visibility: $isVisible ? '$visible' : 'hidden'\n  }\n}))`\n  position: absolute;\n  top: 50%;\n  background: #ffffff;\n  border-radius: 50%;\n  transform-origin: center center;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n  transition: ${transition.short('transform', 'opacity', 'visibility')};\n  will-change: left, transform, opacity, visibility;\n  backface-visibility: hidden;\n  z-index: 3;\n\n  ${({ $cardSize }) => {\n    const scrubberSize = getScrubberSize($cardSize)\n    return css`\n      height: ${scrubberSize}px;\n      width: ${scrubberSize}px;\n    `\n  }}\n`\n\nexport default Scrubber\n","import React, { forwardRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { font, transition } from '../../../../../theme'\n\nconst BASE_FONT_SIZE = 11\n\nconst sizeScales = { normal: 0.8 }\nconst getMarkerFontSize = size => BASE_FONT_SIZE * (sizeScales[size] || 1)\n\nconst TooltipBase = styled('span').attrs(\n  ({ $position, $isDragging, $visible }) => ({\n    style: {\n      left: `${$position}px`,\n      top: $visible ? '-4px' : '0px',\n      visibility: $visible ? '$visible' : 'hidden',\n      opacity: $visible ? 1 : 0,\n      transform: `translate(-50%, ${!$isDragging ? -100 : -110}%)`\n    }\n  })\n)`\n  position: absolute;\n  background: rgba(24, 25, 25, 0.75);\n  color: #fff;\n  text-shadow: 0 1px 2px rgba(24, 25, 25, 0.15);\n  padding: 2px 3px;\n  border-radius: 4px;\n  font-family: ${font.mono};\n  font-size: ${({ $cardSize }) => getMarkerFontSize($cardSize)}px;\n  line-height: 1;\n  transition: ${transition.medium('opacity', 'visibility', 'transform')},\n    ${transition.long('top')};\n  will-change: top, left, visibility, opacity, transform;\n  backface-visibility: hidden;\n`\n\nconst Tooltip = forwardRef(\n  ({ $isDragging, $isVisible, label, $positionX, size, ...props }, ref) => (\n    <>\n      <TooltipBase\n        $visible={$isVisible}\n        $position={$positionX}\n        $cardSize={size}\n        ref={ref}\n        $isDragging={$isDragging}\n        {...props}\n      >\n        {label}\n      </TooltipBase>\n    </>\n  )\n)\n\nTooltip.displayName = 'Tooltip'\n\nexport default Tooltip\n","import React, { useCallback, useContext, useMemo, useRef } from 'react'\nimport { styled, css } from 'styled-components'\n\nimport { transition } from '../../../../../theme'\nimport {\n  clampNumber,\n  classNames,\n  formatSeconds,\n  isSmall\n} from '../../../../../utils'\nimport { GlobalContext } from '../../../../../context/GlobalState'\n\nimport Scrubber from './Scrubber'\nimport Tooltip from './Tooltip'\n\nconst HEIGHT = 6\nconst PADDING = 6\n\nconst heightScales = { normal: 0.7, small: 0.6 }\nconst activeHeightScales = { small: 0.9, large: 1.4 }\n\nconst getProgressBarHeight = size =>\n  Math.floor(HEIGHT * (heightScales[size] || 1))\n\nconst getProgressBarActiveHeight = size =>\n  Math.floor(HEIGHT * (activeHeightScales[size] || 1))\n\nconst OuterWrap = styled('div').attrs(() => ({\n  className: classNames.progressBar\n}))`\n  position: relative;\n  padding: ${PADDING}px ${PADDING / 2}px ${PADDING / 2}px;\n  z-index: 2;\n  backface-visibility: hidden;\n`\n\nconst BarsWrap = styled('div').attrs(({ $cardSize, $isDragging }) => {\n  if ($isDragging) {\n    const activeHeight = getProgressBarActiveHeight($cardSize)\n\n    return {\n      style: {\n        height: `${activeHeight}px`\n      }\n    }\n  }\n\n  return {}\n})`\n  background: transparent;\n  border-radius: 9999px;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n  background: rgba(255, 255, 255, 0.15);\n  transition: ${transition.short('height')};\n  will-change: height;\n  pointer-events: none;\n  position: relative;\n\n  ${({ $cardSize }) => {\n    const height = getProgressBarHeight($cardSize)\n    const activeHeight = getProgressBarActiveHeight($cardSize)\n\n    return css`\n      height: ${height}px;\n\n      ${OuterWrap}:hover & {\n        height: ${activeHeight}px;\n      }\n    `\n  }}\n`\n\nconst ProgressLine = styled('div')`\n  border-radius: inherit;\n  height: 100%;\n  position: relative;\n  overflow: hidden;\n`\n\nconst ProgressMask = styled('div').attrs(({ $maskScale }) => ({\n  style: {\n    transform: `scaleX(${$maskScale})`\n  }\n}))`\n  position: absolute;\n  left: 0;\n  top: -50%;\n  height: 200%;\n  width: 100%;\n  background: #ffffff;\n  transform-origin: left center;\n  will-change: transform;\n`\n\nconst ProgressHover = styled('div').attrs(\n  ({ $cursorRatio, $isHovering, $progressPercent }) => ({\n    style: {\n      left: $progressPercent,\n      transform: `scaleX(${$cursorRatio})`,\n      opacity: $isHovering ? 1 : 0,\n      visibility: $isHovering ? '$visible' : 'hidden'\n    }\n  })\n)`\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(255, 255, 255, 0.4);\n  transform-origin: left center;\n  transition: ${transition.short('opacity', 'visibility')};\n  will-change: left, transform, opacity, $visible;\n`\n\nconst BufferedChunk = styled('div').attrs(({ start, end }) => ({\n  style: {\n    left: `${start}px`,\n    right: `${end}px`\n  }\n}))`\n  background: rgba(255, 255, 255, 0.35);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n`\n\nconst ProgressBar = ({\n  bufferedMedia,\n  cursorX,\n  duration,\n  hoveredTime,\n  $isDragging,\n  $isHovering,\n  onClick,\n  onMouseDown,\n  onMouseOver,\n  progress,\n  showTooltip\n}) => {\n  const {\n    props: { size }\n  } = useContext(GlobalContext)\n  const wrapRef = useRef()\n  const tooltipRef = useRef()\n\n  const isSmallCard = useMemo(() => isSmall(size), [size])\n\n  const getWrapWidth = useCallback(() => {\n    if (wrapRef.current) {\n      return wrapRef.current.getBoundingClientRect().width - PADDING\n    }\n\n    return 0\n  }, [])\n\n  const progressRatio = useMemo(\n    () => clampNumber(progress / duration, 0, 1),\n    [duration, progress]\n  )\n\n  const $progressPercent = useMemo(\n    () => `${clampNumber(progressRatio * 100, 1, 99)}%`,\n    [progressRatio]\n  )\n\n  const $cursorRatio = useMemo(() => {\n    if (wrapRef.current) {\n      const wrapWidth = getWrapWidth()\n      const startPoint = progressRatio * wrapWidth\n      const cursorPosition = cursorX - startPoint\n      const width = wrapWidth - startPoint\n\n      if (cursorPosition > 0) {\n        return clampNumber((cursorPosition / width).toFixed(3), 0, 0.99)\n      }\n    }\n\n    return 0\n  }, [cursorX, getWrapWidth, progressRatio])\n\n  const bufferedMediaChunks = useMemo(() => {\n    const wrapWidth = getWrapWidth()\n\n    return bufferedMedia.map((chunk, key) => {\n      const start = chunk.start * wrapWidth\n      const end = wrapWidth - chunk.end * wrapWidth\n\n      return { key, start, end }\n    })\n  }, [bufferedMedia, getWrapWidth])\n\n  const tooltipLabel = useMemo(() => formatSeconds(hoveredTime), [hoveredTime])\n\n  const tooltipPositionX = useMemo(() => {\n    if (wrapRef.current && tooltipRef.current) {\n      const wrapWidth = getWrapWidth()\n      const tooltipWidth = tooltipRef.current.getBoundingClientRect().width\n      const tooltipHalf = tooltipWidth / 2\n\n      return clampNumber(cursorX, tooltipHalf, wrapWidth - tooltipHalf)\n    }\n\n    return 0\n  }, [cursorX, getWrapWidth])\n\n  const mouseEvents = useMemo(\n    () => ({\n      onClick,\n      onMouseDown,\n      onMouseOver\n    }),\n    [onClick, onMouseDown, onMouseOver]\n  )\n\n  const showAccessories = useMemo(\n    () => $isDragging || $isHovering,\n    [$isDragging, $isHovering]\n  )\n\n  return (\n    <OuterWrap $cardSize={size} ref={wrapRef} {...mouseEvents}>\n      <BarsWrap $cardSize={size} $isDragging={$isDragging}>\n        <ProgressLine>\n          <ProgressHover\n            $cursorRatio={$cursorRatio}\n            $isHovering={$isHovering}\n            $progressPercent={$progressPercent}\n          />\n\n          {bufferedMediaChunks.map(({ key, ...chunk }) => (\n            <BufferedChunk key={key} {...chunk} />\n          ))}\n\n          <ProgressMask $maskScale={progressRatio} />\n        </ProgressLine>\n\n        <Scrubber\n          $cardSize={size}\n          $isVisible={showAccessories}\n          $positionX={$progressPercent}\n        />\n\n        {!isSmallCard && (\n          <Tooltip\n            $isDragging={$isDragging}\n            $isVisible={showAccessories}\n            label={tooltipLabel}\n            $positionX={tooltipPositionX}\n            ref={tooltipRef}\n            size={size}\n          />\n        )}\n      </BarsWrap>\n    </OuterWrap>\n  )\n}\n\nexport default ProgressBar\n","import React, { useMemo } from 'react'\nimport { styled } from 'styled-components'\n\nimport MediaButton from './MediaButton'\nimport { media, isLarge } from '../../../../utils'\n\nconst Backward = ({ $cardSize, ...props }) => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 29' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M4 18c0 6.627 5.373 12 12 12s12-5.373 12-12S22.627 6 16 6h-4V1L6 7l6 6V8h4c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 23.523 6 18H4zm15.63 4.13a2.84 2.84 0 01-1.28-.27 2.44 2.44 0 01-.89-.77 3.57 3.57 0 01-.52-1.25 7.69 7.69 0 01-.17-1.68 7.83 7.83 0 01.17-1.68c.094-.445.27-.87.52-1.25.23-.325.535-.59.89-.77.4-.188.838-.28 1.28-.27a2.44 2.44 0 012.16 1 5.23 5.23 0 01.7 2.93 5.23 5.23 0 01-.7 2.93 2.44 2.44 0 01-2.16 1.08zm0-1.22c.411.025.8-.19 1-.55a3.38 3.38 0 00.37-1.51v-1.38a3.31 3.31 0 00-.29-1.5 1.23 1.23 0 00-2.06 0 3.31 3.31 0 00-.29 1.5v1.38a3.38 3.38 0 00.29 1.51c.195.356.575.57.98.55zm-9 1.09v-1.18h2v-5.19l-1.86 1-.55-1.06 2.32-1.3H14v6.5h1.78V22h-5.15z'\n      transform='translate(-4 -1)'\n    />\n  </svg>\n)\n\nconst Forward = ({ $cardSize, ...props }) => (\n  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 29' {...props}>\n    <path\n      fill='#FFF'\n      fillRule='evenodd'\n      stroke='none'\n      strokeWidth='1'\n      d='M26 18c0 5.523-4.477 10-10 10S6 23.523 6 18 10.477 8 16 8h4v5l6-6-6-6v5h-4C9.373 6 4 11.373 4 18s5.373 12 12 12 12-5.373 12-12h-2zm-6.36 4.13a2.81 2.81 0 01-1.28-.27 2.36 2.36 0 01-.89-.77 3.39 3.39 0 01-.47-1.25 7.12 7.12 0 01-.17-1.68 7.24 7.24 0 01.17-1.68 3.46 3.46 0 01.52-1.25 2.36 2.36 0 01.89-.77c.4-.19.838-.282 1.28-.27a2.44 2.44 0 012.16 1 5.31 5.31 0 01.7 2.93 5.31 5.31 0 01-.7 2.93 2.44 2.44 0 01-2.21 1.08zm0-1.22a1 1 0 001-.55c.22-.472.323-.99.3-1.51v-1.38a3.17 3.17 0 00-.3-1.5 1.22 1.22 0 00-2.05 0 3.18 3.18 0 00-.29 1.5v1.38a3.25 3.25 0 00.29 1.51 1 1 0 001.05.55zm-7.02-3.49c.355.035.71-.06 1-.27a.84.84 0 00.31-.68v-.08a.94.94 0 00-.3-.74 1.2 1.2 0 00-.83-.27 1.65 1.65 0 00-.89.24 2.1 2.1 0 00-.68.68l-.93-.83a5.37 5.37 0 01.44-.51 2.7 2.7 0 01.54-.4 2.55 2.55 0 01.7-.27 3.25 3.25 0 01.87-.1 3.94 3.94 0 011.06.14c.297.078.576.214.82.4.224.168.408.383.54.63.123.26.184.543.18.83a2 2 0 01-.11.67 1.82 1.82 0 01-.32.52 1.79 1.79 0 01-.47.36 2.27 2.27 0 01-.57.2V18c.219.04.431.11.63.21a1.7 1.7 0 01.85.93c.084.234.124.481.12.73a2 2 0 01-.2.92 2 2 0 01-.58.72 2.66 2.66 0 01-.89.45 3.76 3.76 0 01-1.15.16 4.1 4.1 0 01-1-.11 3.1 3.1 0 01-.76-.31 2.76 2.76 0 01-.56-.45 4.22 4.22 0 01-.44-.55l1.07-.81c.082.147.175.288.28.42.105.128.226.243.36.34.137.097.29.171.45.22a2 2 0 00.57.07 1.45 1.45 0 001-.3 1.12 1.12 0 00.34-.85v-.08a1 1 0 00-.37-.8 1.78 1.78 0 00-1.06-.28h-.76v-1.21h.74z'\n      transform='translate(-4 -1)'\n    />\n  </svg>\n)\n\nconst SeekIcon = styled('svg')`\n  stroke: #fff;\n  width: ${({ $cardSize }) => (isLarge($cardSize) ? 30 : 24)}px;\n  height: ${({ $cardSize }) => (isLarge($cardSize) ? 30 : 24)}px;\n\n  ${({ $cardSize }) =>\n    !isLarge($cardSize) &&\n    media.mobile`\n    width: 0;\n    height: 0;\n  `}\n`\n\nconst SeekButtonWrap = styled(MediaButton)`\n  margin: 0 ${({ $cardSize }) => (isLarge($cardSize) ? '28px' : '3px')};\n`\n\nconst SeekButton = ({ type = 'rewind', $cardSize, ...props }) => {\n  const IconComponent = useMemo(\n    () => (type === 'rewind' ? Backward : Forward),\n    [type]\n  )\n\n  return (\n    <SeekButtonWrap\n      title={type === 'rewind' ? 'Rewind' : 'Forward'}\n      $cardSize={$cardSize}\n      {...props}\n    >\n      <SeekIcon as={IconComponent} $cardSize={$cardSize} />\n    </SeekButtonWrap>\n  )\n}\n\nexport default SeekButton\n","import React from 'react'\nimport { styled, css, keyframes } from 'styled-components'\n\nimport { transition } from '../../../../theme'\nimport { classNames } from '../../../../utils'\n\nimport MediaButton from './MediaButton'\n\nconst BASE_SIZE = 12\nconst BASE_OFFSET = 6\n\nconst offsetScales = { normal: 0.8, small: 0.6 }\nconst sizeScales = { normal: 0.9, small: 0.8 }\n\nconst getSpinnerOffset = size =>\n  Math.floor(BASE_OFFSET * (offsetScales[size] || 1))\n\nconst getSpinnerSize = size => Math.floor(BASE_SIZE * (sizeScales[size] || 1))\n\nconst rotate = keyframes`\n  100% {\n    transform: rotate(360deg);\n  }\n`\n\nconst dash = keyframes`\n  0% {\n    stroke-dasharray: 1, 150;\n    stroke-dashoffset: 0;\n  }\n  50% {\n    stroke-dasharray: 90, 150;\n    stroke-dashoffset: -35;\n  }\n  100% {\n    stroke-dasharray: 90, 150;\n    stroke-dashoffset: -124;\n  }\n`\n\nconst Wrap = styled(MediaButton).attrs(({ $isVisible }) => ({\n  style: {\n    opacity: $isVisible ? 1 : 0,\n    visibility: $isVisible ? '$visible' : 'hidden'\n  }\n}))(({ $cardSize }) => {\n  const size = `${getSpinnerSize($cardSize)}px`\n  const offset = `${getSpinnerOffset($cardSize)}px`\n\n  return css`\n    position: absolute;\n    width: ${size};\n    right: ${offset};\n    top: ${offset};\n    transition: ${transition.medium('opacity', 'visibility')};\n    will-change: opacity, visibility;\n    pointer-events: none;\n  `\n})\n\nconst Svg = styled('svg')`\n  width: 100%;\n  animation: ${rotate} 2s linear infinite;\n  will-change: transform;\n`\n\nconst Circle = styled('circle')`\n  stroke: #fff;\n  stroke-linecap: round;\n  stroke-width: 7;\n  fill: none;\n  animation: ${dash} 1.5s ease-in-out infinite;\n  will-change: stroke-dasharray, stroke-dashoffset;\n`\n\nconst Spinner = ({ size, $isVisible }) => (\n  <Wrap $cardSize={size} className={classNames.spinner} $isVisible={$isVisible}>\n    <Svg viewBox='0 0 50 50'>\n      <Circle cx='25' cy='25' r='20' />\n    </Svg>\n  </Wrap>\n)\n\nexport default Spinner\n","/* eslint-disable multiline-ternary */\n\nimport React, {\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react'\n\nimport { styled, css } from 'styled-components'\n\nimport FooterControls from './FooterControls'\nimport PlaybackButton from './PlaybackButton'\nimport ProgressBar from './ProgressBar'\nimport SeekButton from './SeekButton'\nimport Spinner from './Spinner'\nimport { transition } from '../../../../theme'\n\nimport {\n  classNames,\n  formatSeconds,\n  isSmall,\n  isFunction,\n  clampNumber\n} from '../../../../utils'\n\nimport { GlobalContext } from '../../../../context/GlobalState'\n\nconst SPACE_KEY = 32\nconst L_ARROW_KEY = 37\nconst R_ARROW_KEY = 39\nconst M_KEY = 77\n\nconst OuterWrap = styled('div').attrs({ className: classNames.mediaControls })`\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  transition: ${transition.long('background')}, ${transition.medium('opacity')};\n  will-change: background;\n  display: flex;\n  flex-direction: column;\n  pointer-events: auto;\n\n  ${({ $hasInteracted, $isDragging, $isPlaying }) => {\n    const bg = 'rgba(0, 0, 0, 0.35)'\n    const dragBg = 'rgba(0, 0, 0, 0.2)'\n    const isPaused = $hasInteracted && !$isPlaying\n\n    return css`\n      .${classNames.main}:hover & {\n        background: ${!$isDragging ? bg : dragBg};\n      }\n\n      .${classNames.main}:not(:hover) & {\n        opacity: ${!$hasInteracted || isPaused ? 1 : 0};\n        ${isPaused && `background: ${bg}`};\n      }\n    `\n  }}\n`\n\nconst InnerWrap = styled('div')`\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: 2;\n`\n\nconst ControlsTop = styled('div')`\n  flex: 1;\n\n  ${({ $isVisible }) =>\n    !$isVisible &&\n    css`\n      *[class*='${classNames.mediaControls}']:not(.${classNames.progressTime}) {\n        transition: ${transition.medium('opacity', 'visibility')};\n        opacity: 0;\n        visibility: hidden;\n      }\n    `}\n`\n\nconst getNextPlaybackRate = rate => {\n  switch (rate) {\n    case 1:\n      return 1.25\n    case 1.25:\n      return 1.5\n    case 1.5:\n      return 2\n    default:\n      return 1\n  }\n}\n\nconst Controls = ({ MediaComponent, mediaProps }) => {\n  const {\n    props: { autoPlay, controls, mediaRef: propRef, muted, loop, size }\n  } = useContext(GlobalContext)\n  const [duration, setDuration] = useState(0)\n  const [progress, setProgress] = useState(0)\n  const [buffered, setBuffered] = useState([])\n  const [cursorX, setCursorX] = useState(0)\n  const [hoveredTime, setHoveredTime] = useState(0)\n  const [$isPlaying, setIsPlaying] = useState(autoPlay)\n  const [isMuted, setIsMuted] = useState(muted)\n  const [isBuffering, setIsBuffering] = useState(false)\n  const [$isHovering, setIsHovering] = useState(false)\n  const [$isDragging, setIsDragging] = useState(false)\n  const [playbackRate, setPlaybackRate] = useState(1)\n  const [$hasInteracted, setHasInteracted] = useState(autoPlay)\n  const [pausedByDrag, setPausedByDrag] = useState(false)\n\n  const mediaRef = useRef()\n  const setRefs = useCallback(\n    node => {\n      mediaRef.current = node\n\n      if (propRef) {\n        if (isFunction(propRef)) {\n          propRef(node)\n        } else {\n          propRef.current = node\n        }\n      }\n    },\n    [propRef]\n  )\n\n  const isNotSmall = useMemo(() => !isSmall(size), [size])\n\n  const mediaEvents = useMemo(\n    () => ({\n      onCanPlay: () => setIsBuffering(false),\n      onLoadedMetadata: e => setDuration(e.currentTarget.duration),\n      onPause: () => setIsPlaying(false),\n      onPlay: () => setIsPlaying(true),\n      onPlaying: () => setIsBuffering(false),\n      onProgress: e => setBuffered(e.currentTarget.buffered),\n      onRateChange: e => setPlaybackRate(e.currentTarget.playbackRate),\n      onTimeUpdate: e => setProgress(e.currentTarget.currentTime),\n      onVolumeChange: e => setIsMuted(e.currentTarget.muted),\n      onWaiting: e => setIsBuffering(true)\n    }),\n    []\n  )\n\n  const evaluateCursorPosition = useCallback(event => {\n    if (mediaRef.current) {\n      const bounds = event.currentTarget.getBoundingClientRect()\n      const cursor = clampNumber(\n        Math.floor(event.clientX - bounds.left),\n        0,\n        bounds.width\n      )\n      const time = (cursor / bounds.width) * mediaRef.current.duration\n\n      return { cursor, time }\n    }\n\n    return { cursor: 0, time: 0 }\n  }, [])\n\n  const togglePlayback = useCallback(() => {\n    if (mediaRef.current) {\n      if (mediaRef.current.paused) {\n        if (!$hasInteracted) {\n          setHasInteracted(true)\n        }\n\n        mediaRef.current.play()\n      } else {\n        mediaRef.current.pause()\n      }\n    }\n  }, [$hasInteracted])\n\n  const jumpTo = useCallback(time => {\n    if (mediaRef.current) {\n      const t = clampNumber(time, 0, mediaRef.current.duration)\n\n      mediaRef.current.currentTime = t\n      setProgress(t)\n    }\n  }, [])\n\n  const onSeekClick = useCallback(\n    (event, type) => {\n      event.preventDefault()\n      event.stopPropagation()\n\n      if (mediaRef.current) {\n        const { currentTime } = mediaRef.current\n\n        jumpTo(type === 'rewind' ? currentTime - 10 : currentTime + 30)\n      }\n    },\n    [jumpTo]\n  )\n\n  const onMuteClick = useCallback(event => {\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (mediaRef.current) {\n      mediaRef.current.muted = !mediaRef.current.muted\n    }\n  }, [])\n\n  const onPlaybackRateClick = useCallback(event => {\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (mediaRef.current) {\n      mediaRef.current.playbackRate = getNextPlaybackRate(\n        mediaRef.current.playbackRate\n      )\n    }\n  }, [])\n\n  const onProgressBarClick = useCallback(event => {\n    event.preventDefault()\n    event.stopPropagation()\n    setIsDragging(false)\n  }, [])\n\n  const onProgressBarMouseDown = useCallback(\n    event => {\n      event.preventDefault()\n      event.stopPropagation()\n      setIsDragging(true)\n\n      const { time } = evaluateCursorPosition(event)\n      jumpTo(time)\n    },\n    [evaluateCursorPosition, jumpTo]\n  )\n\n  const onProgressBarMouseOver = useCallback(() => setIsHovering(true), [])\n\n  const onWrapClick = useCallback(\n    event => {\n      event.preventDefault()\n      event.stopPropagation()\n\n      if ($isDragging) {\n        setIsDragging(false)\n      } else {\n        togglePlayback()\n      }\n    },\n    [$isDragging, togglePlayback]\n  )\n\n  const onWrapMouseMove = useCallback(\n    event => {\n      if (($isDragging || $isHovering) && mediaRef.current) {\n        event.preventDefault()\n        const { cursor, time } = evaluateCursorPosition(event)\n\n        setHoveredTime(time)\n        setCursorX(cursor)\n\n        if ($isDragging) {\n          if (!mediaRef.current.paused) {\n            mediaRef.current.pause()\n            setPausedByDrag(true)\n          }\n\n          jumpTo(time)\n        }\n      }\n    },\n    [evaluateCursorPosition, $isDragging, $isHovering, jumpTo]\n  )\n\n  const onWrapMouseOver = useCallback(\n    event => {\n      if ($isDragging && event.buttons === 0) {\n        setIsDragging(false)\n      }\n    },\n    [$isDragging]\n  )\n\n  const onWrapKeyDown = useCallback(\n    event => {\n      if ($isDragging) {\n        return\n      }\n\n      const { keyCode } = event\n\n      if (\n        [SPACE_KEY, L_ARROW_KEY, R_ARROW_KEY, M_KEY].includes(keyCode) &&\n        mediaRef.current\n      ) {\n        event.preventDefault()\n\n        switch (keyCode) {\n          case SPACE_KEY:\n            togglePlayback()\n            break\n          case L_ARROW_KEY:\n            jumpTo(mediaRef.current.currentTime - 5)\n            break\n          case R_ARROW_KEY:\n            jumpTo(mediaRef.current.currentTime + 5)\n            break\n          case M_KEY:\n            mediaRef.current.muted = !mediaRef.current.muted\n            break\n        }\n      }\n    },\n    [$isDragging, jumpTo, togglePlayback]\n  )\n\n  const outerWrapEvents = useMemo(\n    () => ({\n      onClick: onWrapClick,\n      onKeyDown: onWrapKeyDown,\n      onMouseMove: onWrapMouseMove,\n      onMouseOut: () => setIsHovering(false),\n      onMouseOver: onWrapMouseOver\n    }),\n    [onWrapClick, onWrapKeyDown, onWrapMouseMove, onWrapMouseOver]\n  )\n\n  const outerWrapTitle = useMemo(\n    () => ($hasInteracted ? { title: '' } : {}),\n    [$hasInteracted]\n  )\n\n  const bufferedMedia = useMemo(() => {\n    if (buffered && buffered.length && mediaRef.current) {\n      return [...Array(buffered.length).keys()].map(index => {\n        return {\n          start: buffered.start(index) / mediaRef.current.duration,\n          end: buffered.end(index) / mediaRef.current.duration\n        }\n      })\n    }\n\n    return []\n  }, [buffered])\n\n  const currentTime = useMemo(() => formatSeconds(progress || 0), [progress])\n  const endTime = useMemo(() => formatSeconds(duration || 0), [duration])\n\n  const footerControlsProps = useMemo(\n    () => ({\n      $cardSize: size,\n      currentTime,\n      endTime,\n      isMuted,\n      onMuteClick,\n      onPlaybackRateClick,\n      playbackRate\n    }),\n    [\n      currentTime,\n      endTime,\n      isMuted,\n      onMuteClick,\n      onPlaybackRateClick,\n      playbackRate,\n      size\n    ]\n  )\n\n  const progressBarProps = useMemo(\n    () => ({\n      bufferedMedia,\n      cursorX,\n      duration,\n      hoveredTime,\n      $isDragging,\n      $isHovering,\n      onClick: onProgressBarClick,\n      onMouseDown: onProgressBarMouseDown,\n      onMouseOver: onProgressBarMouseOver,\n      progress,\n      showTooltip: $isDragging || $isHovering\n    }),\n    [\n      bufferedMedia,\n      cursorX,\n      duration,\n      hoveredTime,\n      $isDragging,\n      $isHovering,\n      onProgressBarClick,\n      onProgressBarMouseDown,\n      onProgressBarMouseOver,\n      progress\n    ]\n  )\n\n  useEffect(() => {\n    if (\n      !$isDragging &&\n      pausedByDrag &&\n      mediaRef.current &&\n      mediaRef.current.paused\n    ) {\n      mediaRef.current.play()\n      setPausedByDrag(false)\n    }\n  }, [pausedByDrag, $isDragging])\n\n  return (\n    <>\n      <MediaComponent\n        {...mediaProps}\n        {...mediaEvents}\n        ref={setRefs}\n        autoPlay={autoPlay}\n        loop={loop}\n        muted={muted}\n      />\n\n      {controls && (\n        <OuterWrap\n          {...outerWrapTitle}\n          tabIndex={0}\n          $hasInteracted={$hasInteracted}\n          $isDragging={$isDragging}\n          $isPlaying={$isPlaying}\n          {...outerWrapEvents}\n        >\n          <Spinner size={size} $isVisible={isBuffering} />\n\n          {!$hasInteracted ? (\n            <InnerWrap>\n              <PlaybackButton $cardSize={size} />\n            </InnerWrap>\n          ) : (\n            <>\n              <ControlsTop $isVisible={!$isDragging}>\n                <InnerWrap>\n                  {isNotSmall && (\n                    <SeekButton\n                      className={classNames.rwControl}\n                      type='rewind'\n                      $cardSize={size}\n                      onClick={event => onSeekClick(event, 'rewind')}\n                    />\n                  )}\n\n                  <PlaybackButton $cardSize={size} $isPlaying={$isPlaying} />\n\n                  {isNotSmall && (\n                    <SeekButton\n                      className={classNames.ffwControl}\n                      type='fastforward'\n                      $cardSize={size}\n                      onClick={event => onSeekClick(event, 'fastforward')}\n                    />\n                  )}\n                </InnerWrap>\n\n                {isNotSmall && <FooterControls {...footerControlsProps} />}\n              </ControlsTop>\n\n              <ProgressBar {...progressBarProps} />\n            </>\n          )}\n        </OuterWrap>\n      )}\n    </>\n  )\n}\n\nexport default Controls\n","import React, { useContext, useMemo } from 'react'\nimport { styled } from 'styled-components'\n\nimport Wrap from './Wrap'\nimport Controls from './Controls'\nimport { GlobalContext } from '../../../context/GlobalState'\nimport { classNames, imageProxy } from '../../../utils'\n\nconst VideoDOM = styled('video')`\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n\n  &::media-controls-start-playback-button {\n    display: none;\n    appearance: none;\n  }\n`\n\nconst Video = props => {\n  const {\n    state: { imageUrl, playsInline, videoUrl }\n  } = useContext(GlobalContext)\n\n  const mediaProps = useMemo(() => {\n    const mediaProps = {\n      className: `${classNames.media} ${classNames.video}`,\n      src: videoUrl,\n      playsInline\n    }\n    if (imageUrl) mediaProps.poster = imageProxy(imageUrl)\n    return mediaProps\n  }, [imageUrl, playsInline, videoUrl])\n\n  return (\n    <Wrap\n      className={`${classNames.mediaWrapper} ${classNames.videoWrapper}`}\n      {...props}\n    >\n      <Controls MediaComponent={VideoDOM} mediaProps={mediaProps} />\n    </Wrap>\n  )\n}\n\nexport default Video\n","import React, { useContext, useState } from 'react'\n\nimport { GlobalContext } from '../../../context/GlobalState'\nimport { getUrlPath } from '../../../utils'\nimport { ImageLoadCatcher } from './loader'\nimport Image from './Image'\nimport Video from './Video'\nimport Audio from './Audio'\n\nconst isUrl = url => getUrlPath(url) !== null\n\nconst MEDIA_COMPONENT = {\n  video: Video,\n  image: Image,\n  audio: Audio\n}\n\nconst getMediaType = (isAudio, isVideo) => {\n  if (isAudio) return 'audio'\n  if (isVideo) return 'video'\n  return 'image'\n}\n\nconst CardMedia = () => {\n  const {\n    state: { imageUrl, isAudio, isVideo }\n  } = useContext(GlobalContext)\n  const [isLoading, setIsLoading] = useState(isUrl(imageUrl))\n  const mediaType = getMediaType(isAudio, isVideo)\n  const MediaComponent = MEDIA_COMPONENT[mediaType]\n\n  return (\n    <>\n      <MediaComponent $isLoading={isLoading} />\n      {isLoading && (\n        <ImageLoadCatcher src={imageUrl} onLoad={() => setIsLoading(false)} />\n      )}\n    </>\n  )\n}\n\nexport default CardMedia\n","import React, { useContext, useMemo } from 'react'\n\nimport Image from './Image'\nimport Controls from './Controls'\nimport { GlobalContext } from '../../../context/GlobalState'\nimport { classNames } from '../../../utils'\n\nconst Audio = props => {\n  const {\n    state: { audioUrl }\n  } = useContext(GlobalContext)\n\n  const mediaProps = useMemo(\n    () => ({\n      className: `${classNames.media} ${classNames.audio}`,\n      src: audioUrl\n    }),\n    [audioUrl]\n  )\n\n  return (\n    // eslint-disable-next-line\n    <Image\n      className={`${classNames.mediaWrapper} ${classNames.audioWrapper}`}\n      {...props}\n    >\n      <Controls MediaComponent='audio' mediaProps={mediaProps} />\n    </Image>\n  )\n}\n\nexport default Audio\n","import { createElement, forwardRef, useContext } from 'react'\nimport { styled, css } from 'styled-components'\n\nimport { GlobalContext } from '../../context/GlobalState'\nimport { font, animation, speed } from '../../theme'\nimport { media, isLarge } from '../../utils'\n\nconst HEIGHT = '382px'\n\nconst contrastStyle = ({ $backgroundColor, color }) => css`\n  background-color: ${$backgroundColor};\n  border-color: ${color};\n  transition-property: filter;\n  will-change: filter;\n\n  &&& {\n    color: ${color};\n  }\n\n  &:hover {\n    filter: brightness(90%);\n  }\n`\n\nconst largeStyle = css`\n  flex-direction: column;\n  height: ${HEIGHT};\n  ${media.mobile`\n    height: calc(${HEIGHT} * 7/9);\n  `};\n`\n\nconst hoverStyle = css`\n  transition-property: background, border-color;\n  will-change: background, border-color;\n  &:hover {\n    background-color: var(--microlink-hover-background-color, #f5f8fa);\n    border-color: var(--microlink-hover-border-color, #8899a680);\n  }\n`\n\nconst rtlStyle = ({ $cardSize }) => css`\n  flex-direction: ${isLarge($cardSize) ? 'column-reverse' : 'row-reverse'};\n`\n\nconst baseStyle = css(\n  () => `\n  max-width: var(--microlink-max-width, 500px);\n  background-color: var(--microlink-background-color, #fff);\n  border-width: var(--microlink-border-width, 1px);\n  border-style: var(--microlink-border-style, solid);\n  border-color: var(--microlink-border-color, #e1e8ed);\n  color: var(--microlink-color, #181919);\n  overflow: hidden;\n  font-family: ${font.sans};\n  display: flex;\n  text-decoration: none;\n  opacity: 1;\n  position: relative;\n  transition-duration: ${speed.medium};\n  transition-timing-function: ${animation.medium};\n\n  &:active,\n  &:hover {\n    outline: 0;\n  }\n`\n)\n\nconst Element = styled('a')(\n  baseStyle,\n  ({ $isLoading, contrast }) => !$isLoading && !contrast && hoverStyle,\n  ({ $cardSize }) => isLarge($cardSize) && largeStyle,\n  ({ direction }) => direction === 'rtl' && rtlStyle,\n  ({ $backgroundColor, color, contrast }) =>\n    contrast && color && $backgroundColor && contrastStyle,\n  ({ $backgroundColor, color, contrast }) =>\n    contrast && (!color || !$backgroundColor) && hoverStyle\n)\n\nconst CardWrap = forwardRef(\n  (\n    {\n      href,\n      rel = 'noopener noreferrer',\n      target = '_blank',\n      as = 'a',\n      ...restProps\n    },\n    ref\n  ) => {\n    const {\n      state: { $backgroundColor, color, title },\n      props: { size: $cardSize }\n    } = useContext(GlobalContext)\n\n    return createElement(Element, {\n      ...(as === 'a' ? { href, rel, target } : undefined),\n      ...restProps,\n      $backgroundColor,\n      $cardSize,\n      color,\n      ref,\n      title\n    })\n  }\n)\n\nCardWrap.displayName = 'CardWrap'\n\nexport default CardWrap\n","/* eslint-disable multiline-ternary */\n\nimport React, {\n  useState,\n  useEffect,\n  useCallback,\n  useMemo,\n  useContext\n} from 'react'\n\nimport PropTypes from 'prop-types'\n\nimport { CardWrap, CardMedia, CardContent, CardEmpty } from './components/Card'\nimport GlobalState, { GlobalContext } from './context/GlobalState'\nimport {\n  castArray,\n  classNames,\n  fetchFromApi,\n  getApiUrl,\n  getUrlPath,\n  getPreferredMedia,\n  imageProxy,\n  isFunction,\n  isLazySupported,\n  isObject,\n  isSSR,\n  someProp\n} from './utils'\n\nimport { useIntersectionObserver } from './utils/hooks'\n\nconst Card = props => {\n  const {\n    className,\n    fetchData,\n    lazy,\n    loading,\n    media: mediaProp,\n    setData,\n    url,\n    apiKey, // destructuring to avoid pass it\n    ...restProps\n  } = props\n\n  const mediaProps = useMemo(() => castArray(mediaProp), [mediaProp])\n  const { updateState } = useContext(GlobalContext)\n  const [loadingState, setLoading] = useState(true)\n  const [iframeMedia, setIframeMedia] = useState(null)\n  const [isError, setIsError] = useState(false)\n  const isLoadingUndefined = useMemo(() => loading === undefined, [loading])\n  const [apiUrl, apiUrlProps] = useMemo(\n    () => getApiUrl({ ...props, media: mediaProps }),\n    [mediaProps, props]\n  )\n\n  const isLazyEnabled = useMemo(\n    () => isLazySupported && (lazy === true || isObject(lazy)),\n    [lazy]\n  )\n  const lazyOptions = useMemo(() => (isObject(lazy) ? lazy : undefined), [lazy])\n  const [hasIntersected, cardRef] = useIntersectionObserver(\n    isLazyEnabled,\n    lazyOptions\n  )\n\n  const canFetchData = useMemo(\n    () => !isLazyEnabled || (isLazyEnabled && hasIntersected),\n    [isLazyEnabled, hasIntersected]\n  )\n\n  const mergeData = useCallback(\n    fetchedData => {\n      const payload = isFunction(setData)\n        ? setData(fetchedData)\n        : { ...fetchedData, ...setData }\n\n      const { title, description, url, video, audio, image, logo, iframe } =\n        payload\n\n      const mediaFallback = image || logo || {}\n      let media = mediaFallback\n      let videoUrl\n      let audioUrl\n      let isVideo = false\n      let isAudio = false\n\n      const preferredMedia = getPreferredMedia(payload, mediaProps)\n\n      switch (preferredMedia) {\n        case 'audio':\n          isAudio = true\n          audioUrl = getUrlPath(audio)\n          break\n        case 'video':\n          isVideo = true\n          videoUrl = getUrlPath(video)\n          break\n        case 'iframe':\n          setIframeMedia(iframe)\n          break\n        default:\n          media = someProp(payload, mediaProps) || mediaFallback\n          break\n      }\n\n      const imageUrl = getUrlPath(media)\n      const { color, background_color: $backgroundColor } = media\n\n      updateState({\n        url,\n        color,\n        title,\n        description,\n        imageUrl,\n        videoUrl,\n        audioUrl,\n        isVideo,\n        isAudio,\n        $backgroundColor\n      })\n\n      setLoading(false)\n    },\n    [updateState, mediaProps, setData]\n  )\n\n  const toFetchData = useCallback(() => {\n    if (canFetchData) {\n      setLoading(true)\n\n      const fetch = fetchData\n        ? fetchFromApi(apiUrl, apiUrlProps)\n        : Promise.resolve({})\n\n      fetch\n        .then(({ data }) => mergeData(data))\n        .catch(error => {\n          setLoading(false)\n          setIsError(true)\n          console.error(`\n┌───────────────┐\n│ Microlink SDK │\n└───────────────┘\n\n${error.description}\n\n${JSON.stringify(error.data)}\n\nid   ${error.headers['x-request-id']}\nuri  ${error.url}\ncode ${error.code} (${error.statusCode})\n\nmicrolink.io/${error.code.toLowerCase()}\n`)\n        })\n    }\n  }, [apiUrlProps, fetchData, apiUrl, mergeData, canFetchData])\n\n  useEffect(toFetchData, [url, setData, hasIntersected])\n\n  const isLoading = isLoadingUndefined ? loadingState : loading\n\n  if (isError) {\n    return (\n      <a href={url} {...restProps}>\n        {url}\n      </a>\n    )\n  }\n\n  if (iframeMedia) {\n    if (!isSSR) {\n      iframeMedia.scripts.forEach(attrs => {\n        const hasScript = document.querySelector(`script[src=\"${attrs.src}\"]`)\n        if (!hasScript) {\n          const script = document.createElement('script')\n          Object.keys(attrs).forEach(key => (script[key] = attrs[key]))\n          document.body.appendChild(script)\n        }\n      })\n    }\n\n    return (\n      <div\n        className={classNames.iframe}\n        dangerouslySetInnerHTML={{ __html: iframeMedia.html }}\n        {...restProps}\n      />\n    )\n  }\n\n  return (\n    <CardWrap\n      className={`${classNames.main} ${className}`.trim()}\n      href={url}\n      $isLoading={isLoading}\n      ref={cardRef}\n      {...restProps}\n    >\n      {isLoading ? (\n        <CardEmpty />\n      ) : (\n        <>\n          <CardMedia />\n          <CardContent />\n        </>\n      )}\n    </CardWrap>\n  )\n}\n\nconst Microlink = ({\n  className = '',\n  apiKey = undefined,\n  autoPlay = true,\n  controls = true,\n  direction = 'ltr',\n  lazy = true,\n  loop = true,\n  media = ['iframe', 'video', 'audio', 'image', 'logo'],\n  fetchData = true,\n  muted = true,\n  playsInline = true,\n  size = 'normal',\n  ...props\n}) => (\n  <GlobalState\n    className={className}\n    apiKey={apiKey}\n    autoPlay={autoPlay}\n    controls={controls}\n    direction={direction}\n    lazy={lazy}\n    loop={loop}\n    media={media}\n    fetchData={fetchData}\n    muted={muted}\n    playsInline={playsInline}\n    size={size}\n    {...props}\n  >\n    {otherProps => <Card {...otherProps} />}\n  </GlobalState>\n)\n\nMicrolink.propTypes = {\n  apiKey: PropTypes.string,\n  autoPlay: PropTypes.bool,\n  contrast: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  controls: PropTypes.bool,\n  direction: PropTypes.string,\n  lazy: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n  loop: PropTypes.bool,\n  media: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.arrayOf(PropTypes.string)\n  ]),\n  mediaRef: PropTypes.oneOfType([\n    PropTypes.func,\n    PropTypes.shape({ current: PropTypes.elementType })\n  ]),\n  muted: PropTypes.bool,\n  playsInline: PropTypes.bool,\n  prerender: PropTypes.oneOf(['auto', true, false]),\n  size: PropTypes.oneOf(['normal', 'large', 'small']),\n  url: PropTypes.string.isRequired\n}\n\nexport { imageProxy, getApiUrl, fetchFromApi }\n\nexport default Microlink\n","/* global IntersectionObserver */\n\nimport { useCallback, useState } from 'react'\n\nexport const useIntersectionObserver = (enabled, options) => {\n  const [hasIntersected, setHasIntersected] = useState(false)\n\n  const refCallback = useCallback(\n    node => {\n      if (enabled) {\n        const onIntersect = ([entry], self) => {\n          if (entry.isIntersecting) {\n            setHasIntersected(true)\n            self.unobserve(entry.target)\n          }\n        }\n        const observer = new IntersectionObserver(onIntersect, options)\n\n        if (node !== null) {\n          observer.observe(node)\n        }\n      } else {\n        setHasIntersected(true)\n      }\n    },\n    [enabled, options]\n  )\n\n  return [hasIntersected, refCallback]\n}\n"],"names":["l","_ref","accessibility","debounce","o","ellipsis","u","is","c","lines","s","text","d","v","_objectWithoutProperties","_excluded","a","e","f","h","_objectSpread","ref","title","g","t","length","m","n","r","i","current","innerText","clientHeight","Math","floor","slice","max","trim","later","clearTimeout","setTimeout","window","addEventListener","removeEventListener","hostname","regex","RegExp","concat","map","re","source","join","ipv4Module","exports","test","bind","module","require","ipv6Module","isSSR","isFunction","fn","isObject","obj","isNil","value","getUrlPath","data","url","media","css","_templateObject","_taggedTemplateLiteral","arguments","getApiUrl","apiKey","contrast","endpoint","force","headers","prerender","proxy","ttl","createApiUrl","audio","includes","iframe","palette","screenshot","video","isLarge","cardSize","isSmall","imageProxy","isLocalAddress","URL","URLSearchParams","default","af","il","toString","isLazySupported","formatSeconds","secs","secsToNum","parseInt","filter","clampNumber","num","min","BASE_CLASSNAME","CONTENT_BASE_CLASSNAME","MEDIA_BASE_CLASSNAME","CONTROLS_BASE_CLASSNAME","classNames","main","content","description","mediaWrapper","image","videoWrapper","audioWrapper","mediaControls","playbackControl","volumeControl","rwControl","ffwControl","rateControl","progressBar","progressTime","spinner","StyledClamp","styled","children","className","React","createElement","NanoClamp","_ref2","$useNanoClamp","_templateObject2","CardText","_ref3","useNanoClamp","props","textProps","as","_extends","speed","short","medium","long","animation","createTransition","properties","suffix","property","transition","_len","Array","_key","_len2","_key2","_len3","_key3","font","initialState","GlobalContext","createContext","GlobalState","autoPlay","controls","loop","mediaRef","muted","playsInline","size","rest","state","setState","useState","updateState","useCallback","newState","currentState","useMemo","values","Provider","REGEX_STRIP_WWW","BADGE_WIDTH","mobileDescriptionStyle","Content","attrs","_templateObject3","$cardSize","_templateObject4","Header","_templateObject5","_templateObject6","_templateObject7","Description","_templateObject8","Footer","_templateObject9","_ref4","_templateObject10","Author","_templateObject11","PoweredBy","_templateObject12","CardContent","useContext","isSmallCard","formattedUrl","href","replace","getHostname","handleOnClick","preventDefault","open","onClick","emptyStatePulse","keyframes","emptyStateImagePulse","emptyStateAnimation","emptyStateImageAnimation","ImageLoadCatcher","loadingOverlay","$isLoading","mediaSizeStyles","small","normal","large","StyledWrap","Wrap","ImageWrap","ImageComponent","imageUrl","MediaEmpty","CardImage","HeaderEmpty","DescriptionEmpty","FooterEmpty","CardEmptyState","Fragment","style","marginBottom","_FooterEmpty","MediaButton","VolumeMute","xmlns","viewBox","_path","fill","fillRule","stroke","strokeWidth","transform","VolumeUp","_path2","BottomControls","VolumeIcon","VolumeButton","PlaybackRateButton","_ref5","_ref6","_ref7","TimeLabel","_ref8","$right","FooterControls","_ref9","currentTime","endTime","isMuted","onMuteClick","onPlaybackRateClick","playbackRate","VolumeComponent","isLargeCard","Pause","Play","iconSizes","PlaybackIcon","PlaybackButtonWrap","PlaybackButton","$isPlaying","PlaybackComponent","scrubberSizeScales","Scrubber","$isVisible","$positionX","left","opacity","visibility","scrubberSize","sizeScales","TooltipBase","$position","$isDragging","$visible","top","Tooltip","forwardRef","label","displayName","heightScales","activeHeightScales","getProgressBarActiveHeight","OuterWrap","PADDING","BarsWrap","activeHeight","height","ProgressLine","ProgressMask","$maskScale","ProgressHover","$cursorRatio","$isHovering","$progressPercent","BufferedChunk","start","end","right","ProgressBar","bufferedMedia","cursorX","duration","hoveredTime","onMouseDown","onMouseOver","progress","showTooltip","wrapRef","useRef","tooltipRef","getWrapWidth","getBoundingClientRect","width","progressRatio","wrapWidth","startPoint","cursorPosition","toFixed","bufferedMediaChunks","chunk","key","tooltipLabel","tooltipPositionX","tooltipHalf","mouseEvents","showAccessories","Backward","Forward","_excluded2","SeekIcon","SeekButtonWrap","SeekButton","type","_excluded3","IconComponent","offsetScales","rotate","dash","getSpinnerSize","offset","getSpinnerOffset","Svg","Circle","Spinner","_Svg","cx","cy","SPACE_KEY","L_ARROW_KEY","R_ARROW_KEY","M_KEY","$hasInteracted","bg","isPaused","InnerWrap","ControlsTop","Controls","MediaComponent","mediaProps","propRef","setDuration","setProgress","buffered","setBuffered","setCursorX","setHoveredTime","setIsPlaying","setIsMuted","isBuffering","setIsBuffering","setIsHovering","setIsDragging","setPlaybackRate","setHasInteracted","pausedByDrag","setPausedByDrag","setRefs","node","isNotSmall","mediaEvents","onCanPlay","onLoadedMetadata","currentTarget","onPause","onPlay","onPlaying","onProgress","onRateChange","onTimeUpdate","onVolumeChange","onWaiting","evaluateCursorPosition","event","bounds","cursor","clientX","time","togglePlayback","paused","play","pause","jumpTo","onSeekClick","stopPropagation","rate","getNextPlaybackRate","onProgressBarClick","onProgressBarMouseDown","onProgressBarMouseOver","onWrapClick","onWrapMouseMove","onWrapMouseOver","buttons","onWrapKeyDown","keyCode","outerWrapEvents","onKeyDown","onMouseMove","onMouseOut","outerWrapTitle","keys","index","footerControlsProps","progressBarProps","useEffect","tabIndex","VideoDOM","MEDIA_COMPONENT","videoUrl","src","poster","Image","audioUrl","CardMedia","isAudio","isVideo","isLoading","setIsLoading","mediaType","getMediaType","onLoad","HEIGHT","contrastStyle","$backgroundColor","color","largeStyle","hoverStyle","rtlStyle","baseStyle","Element","direction","CardWrap","rel","target","restProps","undefined","Card","fetchData","lazy","loading","mediaProp","setData","loadingState","setLoading","iframeMedia","setIframeMedia","isError","setIsError","isLoadingUndefined","apiUrl","apiUrlProps","isLazyEnabled","lazyOptions","hasIntersected","cardRef","useIntersectionObserver","enabled","options","setHasIntersected","observer","IntersectionObserver","onIntersect","self","entry","isIntersecting","unobserve","observe","canFetchData","mergeData","fetchedData","payload","logo","mediaFallback","preferredMedia","getPreferredMedia","prefer","someProp","find","prop","background_color","toFetchData","fetchFromApi","Promise","resolve","then","catch","error","console","JSON","stringify","code","statusCode","toLowerCase","scripts","forEach","document","querySelector","script","Object","body","appendChild","dangerouslySetInnerHTML","__html","html","_CardEmpty","CardEmpty","_CardMedia","_CardContent","Microlink","otherProps"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}