{"version":3,"file":"link.jsx","sources":["../../../src/react/components/link.tsx"],"sourcesContent":["import { useMemo, type ReactNode, type ComponentPropsWithoutRef } from 'react';\nimport { useEmberService } from '../hooks/use-ember-service.ts';\nimport type { UrlObject } from '../types/router.ts';\nimport { parseUrl } from '../utils/url.ts';\nimport { setUrlFromRelativePath, urlFromRouteInfo } from '../utils/router.ts';\n\nexport interface LinkProps extends Omit<ComponentPropsWithoutRef<'a'>, 'href'> {\n  replace?: boolean;\n  to: string | UrlObject;\n}\n\nexport function Link({\n  children,\n  onClick,\n  replace,\n  to,\n  ...props\n}: LinkProps): ReactNode {\n  const router = useEmberService('router');\n\n  const url = useMemo(() => {\n    const parsedUrl = parseUrl(to);\n    let routeInfo;\n\n    if (parsedUrl.startsWith('/')) {\n      routeInfo = router.recognize(parsedUrl);\n    } else {\n      routeInfo = setUrlFromRelativePath(parsedUrl, router);\n    }\n\n    if (routeInfo) {\n      return urlFromRouteInfo(router, routeInfo);\n    }\n    return '';\n  }, [to, router]);\n\n  const onClickHandler = (event: React.MouseEvent<HTMLAnchorElement>) => {\n    if (onClick) onClick(event);\n    event.preventDefault();\n    if (replace) {\n      router.replaceWith(url);\n    } else {\n      router.transitionTo(url);\n    }\n  };\n\n  return (\n    <a href={url} onClick={onClickHandler} {...props}>\n      {children}\n    </a>\n  );\n}\n"],"names":["Link","children","onClick","replace","to","props","router","useEmberService","url","useMemo","parsedUrl","parseUrl","routeInfo","startsWith","recognize","setUrlFromRelativePath","urlFromRouteInfo","onClickHandler","event","preventDefault","replaceWith","transitionTo","_jsx","href"],"mappings":";;;;;;AAWO,SAASA,IAAIA,CAAC;EACnBC,QAAQ;EACRC,OAAO;EACPC,OAAO;EACPC,EAAE;EACF,GAAGC,KAAAA;AACM,CAAC,EAAa;AACvB,EAAA,MAAMC,MAAM,GAAGC,eAAe,CAAC,QAAQ,CAAC,CAAA;AAExC,EAAA,MAAMC,GAAG,GAAGC,OAAO,CAAC,MAAM;AACxB,IAAA,MAAMC,SAAS,GAAGC,QAAQ,CAACP,EAAE,CAAC,CAAA;AAC9B,IAAA,IAAIQ,SAAS,CAAA;AAEb,IAAA,IAAIF,SAAS,CAACG,UAAU,CAAC,GAAG,CAAC,EAAE;AAC7BD,MAAAA,SAAS,GAAGN,MAAM,CAACQ,SAAS,CAACJ,SAAS,CAAC,CAAA;AACzC,KAAC,MAAM;AACLE,MAAAA,SAAS,GAAGG,sBAAsB,CAACL,SAAS,EAAEJ,MAAM,CAAC,CAAA;AACvD,KAAA;AAEA,IAAA,IAAIM,SAAS,EAAE;AACb,MAAA,OAAOI,gBAAgB,CAACV,MAAM,EAAEM,SAAS,CAAC,CAAA;AAC5C,KAAA;AACA,IAAA,OAAO,EAAE,CAAA;AACX,GAAC,EAAE,CAACR,EAAE,EAAEE,MAAM,CAAC,CAAC,CAAA;EAEhB,MAAMW,cAAc,GAAIC,KAA0C,IAAK;AACrE,IAAA,IAAIhB,OAAO,EAAEA,OAAO,CAACgB,KAAK,CAAC,CAAA;IAC3BA,KAAK,CAACC,cAAc,EAAE,CAAA;AACtB,IAAA,IAAIhB,OAAO,EAAE;AACXG,MAAAA,MAAM,CAACc,WAAW,CAACZ,GAAG,CAAC,CAAA;AACzB,KAAC,MAAM;AACLF,MAAAA,MAAM,CAACe,YAAY,CAACb,GAAG,CAAC,CAAA;AAC1B,KAAA;GACD,CAAA;AAED,EAAA,oBACEc,GAAA,CAAA,GAAA,EAAA;AAAGC,IAAAA,IAAI,EAAEf,GAAI;AAACN,IAAAA,OAAO,EAAEe,cAAe;AAAA,IAAA,GAAKZ,KAAK;AAAAJ,IAAAA,QAAA,EAC7CA,QAAAA;AAAQ,GACR,CAAC,CAAA;AAER;;;;"}