{"version":3,"file":"link-type-utils-BUU9GwT5.cjs","names":[],"sources":["../../widgets/src/lib/rep-public-id-url.ts","../../widgets/src/lib/link-type-utils.ts"],"sourcesContent":["const HTTP_SCHEME_RE = /^https?:\\/\\//i;\n\n/**\n * Appends the rep's `public_id` query parameter to a URL so the destination\n * can identify the referring rep, matching the mobile builder and MySite\n * Liquid theme behavior on the server side.\n *\n * Returns the URL unchanged when:\n * - `url` is empty or not parseable as a valid http(s) URL\n * - `publicId` is empty\n *\n * Otherwise returns the URL with `public_id=<publicId>` set as a query\n * parameter. An existing `public_id=` is REPLACED (not duplicated) so an\n * edit round-trip (read decorated URL → save back → re-decorate) is\n * idempotent and stays in sync with the server-side decorator.\n */\nexport function appendRepPublicIdToUrl(\n  url: string,\n  publicId: string | undefined,\n): string {\n  if (!url || !publicId) return url;\n\n  const normalizedUrl = HTTP_SCHEME_RE.test(url) ? url : `https://${url}`;\n\n  try {\n    const parsed = new URL(normalizedUrl);\n    if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n      return url;\n    }\n    if (!parsed.hostname.includes(\".\") && parsed.hostname !== \"localhost\") {\n      return url;\n    }\n    parsed.searchParams.set(\"public_id\", publicId);\n    return parsed.toString();\n  } catch {\n    return url;\n  }\n}\n","import { appendRepPublicIdToUrl } from \"./rep-public-id-url\";\n\nexport type LinkType = \"url\" | \"screen\" | \"share\";\nexport type ShareSource = \"resource\" | \"url\";\n\nexport function sanitizeHref(url: string): string | undefined {\n  if (!url) return undefined;\n  if (/^(https?:|mailto:|tel:|\\/)/i.test(url)) return url;\n  return undefined;\n}\n\nexport function decoratedHref(\n  href: string,\n  publicId: string | undefined,\n): string | undefined {\n  const sanitized = sanitizeHref(href);\n  if (!sanitized) return undefined;\n  // Only http(s) URLs get the rep public_id; mailto:/tel:/internal paths pass through.\n  if (!/^https?:/i.test(sanitized)) return sanitized;\n  return appendRepPublicIdToUrl(sanitized, publicId);\n}\n\nexport async function triggerShare(options: {\n  shareSource: ShareSource | undefined;\n  shareResource:\n    | { share_link?: string | null; title?: string | null }\n    | undefined;\n  shareUrl: string | undefined;\n}): Promise<void> {\n  const isResourceMode =\n    options.shareSource === \"resource\" || options.shareSource == null;\n  const url = isResourceMode\n    ? (options.shareResource?.share_link ?? undefined)\n    : (options.shareUrl ?? undefined);\n  if (!url) return;\n\n  if (navigator.share) {\n    try {\n      await navigator.share({\n        url,\n        ...(isResourceMode && options.shareResource?.title\n          ? { title: options.shareResource.title }\n          : {}),\n      });\n      return;\n    } catch (e) {\n      // User dismissed the share sheet — don't fall through to clipboard\n      if (e instanceof DOMException && e.name === \"AbortError\") return;\n    }\n  }\n\n  try {\n    await navigator.clipboard.writeText(url);\n  } catch {}\n}\n"],"mappings":";AAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;AAgBvB,SAAgB,uBACd,KACA,UACQ;AACR,KAAI,CAAC,OAAO,CAAC,SAAU,QAAO;CAE9B,MAAM,gBAAgB,eAAe,KAAK,IAAI,GAAG,MAAM,WAAW;AAElE,KAAI;EACF,MAAM,SAAS,IAAI,IAAI,cAAc;AACrC,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,SACrD,QAAO;AAET,MAAI,CAAC,OAAO,SAAS,SAAS,IAAI,IAAI,OAAO,aAAa,YACxD,QAAO;AAET,SAAO,aAAa,IAAI,aAAa,SAAS;AAC9C,SAAO,OAAO,UAAU;SAClB;AACN,SAAO;;;;;AC9BX,SAAgB,aAAa,KAAiC;AAC5D,KAAI,CAAC,IAAK,QAAO,KAAA;AACjB,KAAI,8BAA8B,KAAK,IAAI,CAAE,QAAO;;AAItD,SAAgB,cACd,MACA,UACoB;CACpB,MAAM,YAAY,aAAa,KAAK;AACpC,KAAI,CAAC,UAAW,QAAO,KAAA;AAEvB,KAAI,CAAC,YAAY,KAAK,UAAU,CAAE,QAAO;AACzC,QAAO,uBAAuB,WAAW,SAAS;;AAGpD,eAAsB,aAAa,SAMjB;CAChB,MAAM,iBACJ,QAAQ,gBAAgB,cAAc,QAAQ,eAAe;CAC/D,MAAM,MAAM,iBACP,QAAQ,eAAe,cAAc,KAAA,IACrC,QAAQ,YAAY,KAAA;AACzB,KAAI,CAAC,IAAK;AAEV,KAAI,UAAU,MACZ,KAAI;AACF,QAAM,UAAU,MAAM;GACpB;GACA,GAAI,kBAAkB,QAAQ,eAAe,QACzC,EAAE,OAAO,QAAQ,cAAc,OAAO,GACtC,EAAE;GACP,CAAC;AACF;UACO,GAAG;AAEV,MAAI,aAAa,gBAAgB,EAAE,SAAS,aAAc;;AAI9D,KAAI;AACF,QAAM,UAAU,UAAU,UAAU,IAAI;SAClC"}