{"version":3,"file":"microlink.min.mjs","sources":["../../../node_modules/.pnpm/nanoclamp@2.0.18_react@18.3.1/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 t,useMemo as e,useCallback as r,useLayoutEffect as n,createElement as l}from\"react\";const i=({accessibility:i=!0,debounce:u=300,ellipsis:c=\"…\",is:o=\"div\",lines:s=3,text:f,...d})=>{const v=t(null),a=t(\".\"),m={ref:v,...i?{title:f}:{},...d},b=e(()=>\"string\"==typeof f&&f.length>0,[f]),g=r(()=>{if(!b)return;const t=t=>{a.current=t,null!=v.current&&(v.current.textContent=t)},e=()=>{var t,e;return null!==(e=null===(t=v.current)||void 0===t?void 0:t.clientHeight)&&void 0!==e?e:0};t(\".\");const r=(e()+1)*s+1;if(t(f),e()<=r)return;let n=0,l=0,i=f.length;for(;n<=i;){l=Math.floor((n+i)/2);t(f.slice(0,l).trim()+c),e()<=r?n=l+1:i=l-1}t(f.slice(0,l-1).trim()+c)},[c,b,s,f]);return n(()=>{if(g(),null==v.current)return;const t=new ResizeObserver(((t,e)=>{let r;const n=()=>{r=void 0,t()};return()=>{const l=null==r;clearTimeout(r),r=setTimeout(n,e),l&&t()}})(g,u));return t.observe(v.current),()=>t.disconnect()},[g,u]),b?l(o,m,a.current):null};export{i 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-color: transparent;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: 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: $color, title },\n      props: { size: $cardSize }\n    } = useContext(GlobalContext)\n\n    const { contrast: $contrast, direction: $direction, ...props } = restProps\n\n    return createElement(Element, {\n      ...(as === 'a' ? { href, rel, target } : undefined),\n      ...props,\n      $backgroundColor,\n      $cardSize,\n      $color,\n      $contrast,\n      $direction,\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":["i","_ref","_ref$accessibility","accessibility","_ref$debounce","debounce","u","_ref$ellipsis","ellipsis","c","_ref$is","is","o","_ref$lines","lines","s","f","text","d","_objectWithoutProperties","_excluded","v","t","a","m","_objectSpread","ref","title","b","e","length","g","r","current","textContent","elementHeight","clientHeight","n","l","Math","floor","slice","trim","ResizeObserver","later","clearTimeout","setTimeout","observe","disconnect","module","hostname","regex","RegExp","concat","map","re","source","join","test","bind","require","isSSR","window","isFunction","fn","isObject","obj","isNil","value","getUrlPath","data","url","media","css","_templateObject","_taggedTemplateLiteral","arguments","getApiUrl","apiKey","_ref$contrast","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","max","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","_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","_useState","useState","_useState2","_slicedToArray","state","setState","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","_templateObject0","Author","_templateObject1","PoweredBy","_templateObject10","CardContent","_useContext","useContext","_useContext$state","isSmallCard","formattedUrl","getHostname","href","replace","handleOnClick","preventDefault","open","onClick","emptyStatePulse","keyframes","emptyStateImagePulse","emptyStateAnimation","emptyStateImageAnimation","ImageLoadCatcher","loadingOverlay","$isLoading","mediaSizeStyles","small","normal","large","StyledWrap","Wrap","ImageWrap","$url","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","left","$positionX","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","_ref7$type","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","_useContext$props","propRef","setDuration","_useState3","_useState4","setProgress","_useState5","_useState6","buffered","setBuffered","_useState7","_useState8","setCursorX","_useState9","_useState0","setHoveredTime","_useState1","_useState10","setIsPlaying","_useState11","_useState12","setIsMuted","_useState13","_useState14","isBuffering","setIsBuffering","_useState15","_useState16","setIsHovering","_useState17","_useState18","setIsDragging","_useState19","_useState20","setPlaybackRate","_useState21","_useState22","setHasInteracted","_useState23","_useState24","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","_evaluateCursorPositi2","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","$contrast","$direction","CardWrap","_ref8$rel","rel","_ref8$target","target","_ref8$as","restProps","color","direction","undefined","Card","fetchData","lazy","loading","mediaProp","setData","loadingState","setLoading","iframeMedia","setIframeMedia","isError","setIsError","isLoadingUndefined","_useMemo","_useMemo2","apiUrl","apiUrlProps","isLazyEnabled","lazyOptions","_useIntersectionObser","useIntersectionObserver","enabled","options","hasIntersected","setHasIntersected","observer","IntersectionObserver","onIntersect","self","entry","isIntersecting","unobserve","_useIntersectionObser2","cardRef","canFetchData","mergeData","fetchedData","payload","logo","mediaFallback","preferredMedia","getPreferredMedia","prefer","someProp","find","prop","_media","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","_Fragment","Microlink","_ref2$className","_ref2$apiKey","_ref2$autoPlay","_ref2$controls","_ref2$direction","_ref2$lazy","_ref2$loop","_ref2$media","_ref2$fetchData","_ref2$muted","_ref2$playsInline","_ref2$size","otherProps"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}