@latchprotocol/widgets 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/lockCharts.tsx","../src/components/LocksWidgets.tsx","../src/components/TokenTrustPanel.tsx","../src/components/LockerWidget.tsx"],"sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * Two compact lock visuals the lock widgets share, in plain SVG / CSS (no\n * chart library, so the embed bundle stays small):\n *\n * - `ShareBar`: a whole split into its locked parts (permanent LP locker,\n * time-locked, unvested, vested-unclaimed); the empty track is \"not\n * locked\". Grows in from the left. Each part states its exact share on\n * hover (title) and to a screen reader (the bar's label).\n * - `ScheduleSpark`: a token's cumulative release schedule (the SDK's\n * `vestedAt`, the contract's own formula), drawn on, with a \"now\" rule.\n * Pointer or arrow keys read any point: its date and the amount vested by\n * then.\n *\n * Themed only by `--latch-*` properties; motion is CSS and is switched off\n * under `prefers-reduced-motion`. Nothing is drawn that was not read.\n */\n\nimport { useMemo, useState, type CSSProperties, type KeyboardEvent, type PointerEvent } from \"react\";\n\nimport { formatLockAmount, formatLockBps, formatUtc, type LocksTokenMeta, type SchedulePoint, type ShareBarView } from \"../locks/model.js\";\n\nconst partText = (p: ShareBarView[\"parts\"][number]): string => (p.bps === 0 && p.nonZero ? \"<0.01%\" : formatLockBps(p.bps));\n\nexport function ShareBar({ view, label, keyed = true }: { view: ShareBarView; label: string; keyed?: boolean }): JSX.Element {\n const words = view.parts.map((p) => `${p.label} ${partText(p)}`).join(\", \");\n return (\n <div className=\"latch-sharebar\" role=\"img\" aria-label={`${label}: ${words || \"nothing locked\"}, ${formatLockBps(view.restBps)} not locked, ${view.of}`}>\n <div className=\"latch-sharebar__track\">\n <div className=\"latch-sharebar__grow\">\n {view.parts.map((p) => (\n <span\n key={p.key}\n className={`latch-sharebar__part latch-sharebar__part--${p.key}`}\n style={{ width: p.bps === 0 ? \"2px\" : `${p.bps / 100}%` } as CSSProperties}\n title={`${p.label}: ${partText(p)} ${view.of}`}\n />\n ))}\n </div>\n </div>\n {keyed && view.parts.length > 1 ? (\n <ul className=\"latch-sharebar__key\" aria-hidden=\"true\">\n {view.parts.map((p) => (\n <li key={p.key}>\n <span className={`latch-sharebar__sw latch-sharebar__part--${p.key}`} />\n {p.label} {partText(p)}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nconst W = 240;\nconst H = 44;\n\nexport function ScheduleSpark({\n points,\n total,\n now,\n token,\n}: {\n points: readonly SchedulePoint[];\n total: bigint;\n now: bigint | null;\n token: Pick<LocksTokenMeta, \"symbol\" | \"decimals\">;\n}): JSX.Element | null {\n const [active, setActive] = useState<number | null>(null);\n const geo = useMemo(() => {\n if (points.length < 2 || total === 0n) return null;\n const t0 = Number(points[0]!.t);\n const t1 = Number(points[points.length - 1]!.t);\n const x = (t: bigint) => ((Number(t) - t0) / (t1 - t0)) * W;\n const y = (v: bigint) => H - 3 - (Number((v * 10_000n) / total) / 10_000) * (H - 6);\n return { x, y, d: points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${x(p.t).toFixed(1)} ${y(p.vested).toFixed(1)}`).join(\" \") };\n }, [points, total]);\n if (geo === null) return null;\n const first = points[0]!;\n const last = points[points.length - 1]!;\n const nowX = now !== null && now > first.t && now < last.t ? geo.x(now) : null;\n const pick = (e: PointerEvent<SVGSVGElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const fx = ((e.clientX - r.left) / r.width) * W;\n let best = 0;\n for (let i = 1; i < points.length; i++) if (Math.abs(geo.x(points[i]!.t) - fx) < Math.abs(geo.x(points[best]!.t) - fx)) best = i;\n setActive(best);\n };\n const onKey = (e: KeyboardEvent<SVGSVGElement>) => {\n if (e.key !== \"ArrowLeft\" && e.key !== \"ArrowRight\") return;\n e.preventDefault();\n setActive((a) => Math.max(0, Math.min(points.length - 1, (a ?? (e.key === \"ArrowLeft\" ? points.length : -1)) + (e.key === \"ArrowLeft\" ? -1 : 1))));\n };\n const at = active === null ? null : points[active]!;\n return (\n <figure className=\"latch-spark\">\n <svg\n className=\"latch-spark__svg\"\n viewBox={`0 0 ${W} ${H}`}\n preserveAspectRatio=\"none\"\n tabIndex={0}\n role=\"img\"\n aria-label={`Release schedule from ${formatUtc(first.t)} to ${formatUtc(last.t)}, ${formatLockAmount(total, token)} in all. Arrow keys read points.`}\n onPointerMove={pick}\n onPointerLeave={() => setActive(null)}\n onKeyDown={onKey}\n onBlur={() => setActive(null)}\n >\n <line className=\"latch-spark__base\" x1={0} x2={W} y1={H - 3} y2={H - 3} vectorEffect=\"non-scaling-stroke\" />\n <path className=\"latch-spark__line\" d={geo.d} fill=\"none\" vectorEffect=\"non-scaling-stroke\" />\n {nowX !== null ? <line className=\"latch-spark__now\" x1={nowX} x2={nowX} y1={1} y2={H - 3} vectorEffect=\"non-scaling-stroke\" /> : null}\n {at !== null ? <line className=\"latch-spark__cross\" x1={geo.x(at.t)} x2={geo.x(at.t)} y1={1} y2={H - 3} vectorEffect=\"non-scaling-stroke\" /> : null}\n </svg>\n <figcaption className=\"latch-spark__cap\" aria-live=\"polite\">\n {at !== null ? (\n <>\n <span className=\"latch-locks__timer\">{formatUtc(at.t)}</span> · {formatLockAmount(at.vested, token)} vested\n </>\n ) : (\n <>\n Release schedule {formatUtc(first.t).slice(0, 10)} → {formatUtc(last.t).slice(0, 10)}\n {nowX !== null ? \" · dashed line = now\" : \"\"}\n </>\n )}\n </figcaption>\n </figure>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `LocksBadge` and `LocksPanel`: \"is this liquidity (or this token) locked,\n * until when?\", read live from the Latch lock contracts.\n *\n * - `LocksBadge` is one line: the locked share of a pool's ACTIVE liquidity\n * (or of a token's supply), a countdown to the next unlock, and a link to\n * the lock page. For beside a pool or a token, anywhere.\n * - `LocksPanel` is the list: every lock with its owner, liquidity or amount,\n * unlock date, countdown and status.\n *\n * Both take a viem `PublicClient` and the lock contract's address from the\n * host's address book; `null` renders the not-deployed state instead of a\n * read. No provider, no wallet, no writes. Themed by the same `--latch-*`\n * properties as every other widget; `theme` falls back to a mounted\n * `WidgetProvider`'s, then to `system`.\n */\n\nimport { useEffect, useId } from \"react\";\nimport type { PublicClient } from \"viem\";\n\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport {\n useChainClock,\n usePoolLocks,\n useTokenLocks,\n type NativeCurrencyMeta,\n type PoolLocksData,\n type TokenLocksData,\n} from \"../hooks/useLocks.js\";\nimport {\n POSITION_STATUS_LABEL,\n binPoolBadgeView,\n TOKEN_STATUS_LABEL,\n formatCountdown,\n formatLockAmount,\n formatLockBps,\n formatUtc,\n lockPageUrl,\n poolBadgeView,\n tokenBadgeView,\n vestedBps,\n binShareBar,\n poolShareBar,\n releaseSchedule,\n tokenShareBar,\n type LocksBadgeView,\n type ShareBarView,\n type LocksTarget,\n} from \"../locks/model.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\nimport { ScheduleSpark, ShareBar } from \"./lockCharts.js\";\nimport { tokenEmbedView } from \"../locks/embedModel.js\";\nimport { shortAddress } from \"../core/format.js\";\nimport type { AsyncResource } from \"../hooks/useAsyncResource.js\";\n\n/** Props shared by {@link LocksBadge} and {@link LocksPanel}. */\nexport interface LocksWidgetProps {\n /** Reads go here. The chain it is connected to is the chain the lock address is on. */\n readonly client: PublicClient;\n /** A pool id with the chain's `LatchPositionLock`, or a token with its `LatchTokenLock`. `null` address = the chain has no such contract in the host address book; the widget renders \"coming soon\". */\n readonly target: LocksTarget;\n /** Base URL of a Latch app; the widget links to `<siteUrl>/app/locks/...`. Omit to render no link. */\n readonly siteUrl?: string;\n /** The lock pages' path under `siteUrl`; default `/app/locks` (e.g. `/locks` for the public pages). */\n readonly lockPathBase?: string;\n /** Appended to the lock page URL, e.g. `net=robinhood`. */\n readonly lockQuery?: string;\n /** Anchor target for the lock page link, e.g. `_blank` when the badge is inside an iframe. */\n readonly linkTarget?: \"_blank\" | \"_top\" | \"_self\";\n /**\n * `embed`: the \"Locked by Latch\" badge's words (`../locks/embedModel.ts`): a\n * token reads as the share of supply NOT YET VESTED (\"Y% of supply locked\")\n * rather than what the locker holds. Same reads either way.\n */\n readonly wording?: \"default\" | \"embed\";\n /**\n * The Latch mark (the brand kit's `masters/latch-mark.svg`, e.g.\n * `<latch site>/brand/masters/latch-mark.svg` — or `latch-mark-onlight.svg` on a light\n * ground, because the current mark is two-tone), shown at the kit's 24 px minimum\n * beside \"Read from chain\". Omit for no mark.\n */\n readonly brandMarkUrl?: string;\n readonly theme?: WidgetTheme;\n /** Native currency display facts (default ETH, 18). */\n readonly native?: NativeCurrencyMeta;\n /** Re-read interval in ms; default 60,000. */\n readonly refetchIntervalMs?: number;\n readonly className?: string;\n}\n\ntype Loaded =\n | { readonly kind: \"pool\"; readonly res: AsyncResource<PoolLocksData> }\n | { readonly kind: \"token\"; readonly res: AsyncResource<TokenLocksData> };\n\n/** Both hooks always run (rules of hooks); the one not targeted is disabled. */\nfunction useTargetLocks(props: LocksWidgetProps): Loaded {\n const t = props.target;\n const lp = {\n ...(t.lpLocker !== undefined ? { lpLocker: t.lpLocker } : {}),\n ...(t.binLpLocker !== undefined ? { binLpLocker: t.binLpLocker } : {}),\n ...(t.lpLockerTokenIds !== undefined ? { lpLockerTokenIds: t.lpLockerTokenIds } : {}),\n ...(t.lpLockerFromBlock !== undefined ? { lpLockerFromBlock: t.lpLockerFromBlock } : {}),\n ...(t.poolType !== undefined ? { poolType: t.poolType } : {}),\n };\n const opts = { lp, ...(props.native ? { native: props.native } : {}), ...(props.refetchIntervalMs !== undefined ? { refetchIntervalMs: props.refetchIntervalMs } : {}) };\n const pool = usePoolLocks(props.client, t.kind === \"pool\" ? t.positionLock : null, t.kind === \"pool\" ? t.poolId : \"0x\", opts);\n const token = useTokenLocks(props.client, t.kind === \"token\" ? t.tokenLock : null, t.kind === \"token\" ? t.token : \"0x0000000000000000000000000000000000000000\", opts);\n return t.kind === \"pool\" ? { kind: \"pool\", res: pool } : { kind: \"token\", res: token };\n}\n\n/** Something to read: the time-lock contract, or a permanent LP locker. */\nfunction lockAddressOf(t: LocksTarget) {\n if (t.kind === \"pool\" && t.poolType === \"bin\") return t.binLpLocker ?? null;\n return (t.kind === \"pool\" ? t.positionLock : t.tokenLock) ?? t.lpLocker ?? t.binLpLocker ?? null;\n}\n\nfunction useShell(theme: WidgetTheme | undefined): WidgetTheme {\n const ctx = useOptionalWidgetContext();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n return theme ?? ctx?.theme ?? \"dark\";\n}\n\nfunction Link({ props }: { props: LocksWidgetProps }): JSX.Element | null {\n if (props.siteUrl === undefined) return null;\n const t = props.target;\n const href = lockPageUrl(props.siteUrl, t.kind === \"pool\" ? { kind: \"pool\", poolId: t.poolId } : { kind: \"token\", token: t.token }, {\n ...(props.lockPathBase !== undefined ? { pathBase: props.lockPathBase } : {}),\n ...(props.lockQuery !== undefined ? { query: props.lockQuery } : {}),\n });\n return (\n <a className=\"latch-locks__link\" href={href} {...(props.linkTarget === undefined || props.linkTarget === \"_self\" ? {} : { target: props.linkTarget, rel: \"noopener noreferrer\" })}>\n {t.kind === \"pool\" ? \"Locks for this pool →\" : \"Locks for this token →\"}\n </a>\n );\n}\n\nfunction view(l: Loaded, wording: LocksWidgetProps[\"wording\"] = \"default\"): LocksBadgeView | null {\n if (l.res.data === null) return null;\n if (wording === \"embed\" && l.kind === \"token\") return tokenEmbedView(l.res.data as TokenLocksData);\n if (l.kind === \"pool\") {\n const d = l.res.data as PoolLocksData;\n return d.bin !== null ? binPoolBadgeView(d.bin, d.currency0, d.currency1) : poolBadgeView(d.summary);\n }\n const d = l.res.data as TokenLocksData;\n const empty = { locks: [], totalHeld: 0n, unvested: 0n, heldBps: null, unvestedBps: null, nextCliffOrEnd: null, lastEnd: null, totalSupply: null };\n return tokenBadgeView(d.summary ?? empty, d.token, d.permanent);\n}\n\n/** The share bar for what was read: a CL pool's active liquidity, a Bin pool's active bin, or a token's supply. */\nfunction shareView(l: Loaded): ShareBarView | null {\n if (l.res.data === null) return null;\n if (l.kind === \"pool\") {\n const d = l.res.data as PoolLocksData;\n return d.bin !== null ? binShareBar(d.bin) : poolShareBar(d.summary);\n }\n const d = l.res.data as TokenLocksData;\n if (d.summary === null) return null;\n return tokenShareBar(d.summary, d.permanent?.total ?? null);\n}\n\nfunction StateLine({ l, target }: { l: Loaded; target: LocksTarget }): JSX.Element | null {\n if (lockAddressOf(target) === null) {\n return (\n <p className=\"latch-locks__headline\">\n <span className=\"latch-locks__dot latch-locks__dot--none\" aria-hidden=\"true\" />\n {target.kind === \"pool\" ? \"Latch liquidity locks are coming soon on this chain\" : \"Latch token locks are coming soon on this chain\"}\n </p>\n );\n }\n if (l.res.status === \"error\" && l.res.data === null) {\n return (\n <p className=\"latch-locks__headline latch-locks__headline--error\" role=\"status\">\n Couldn&rsquo;t load locks. Try again.\n </p>\n );\n }\n if (l.res.data === null) {\n return (\n <p className=\"latch-locks__headline latch-locks__headline--muted\" role=\"status\">\n Loading locks…\n </p>\n );\n }\n return null;\n}\n\n/** One line: the share locked, the countdown to the next unlock, a link. */\nexport function LocksBadge(props: LocksWidgetProps): JSX.Element {\n const theme = useShell(props.theme);\n const l = useTargetLocks(props);\n const v = view(l, props.wording);\n const share = shareView(l);\n const data = l.res.data;\n const now = useChainClock(data?.chainNow ?? null, data?.readAtMs ?? null);\n const pending = <StateLine l={l} target={props.target} />;\n return (\n <div\n className={`latch-widget latch-locks latch-locks--badge${props.className ? ` ${props.className}` : \"\"}`}\n data-latch-theme={theme}\n data-tone={v?.tone ?? \"none\"}\n >\n {v === null ? (\n pending\n ) : (\n <>\n <p className=\"latch-locks__headline\">\n <span className={`latch-locks__dot latch-locks__dot--${v.tone}`} aria-hidden=\"true\" />\n <span>{v.headline}</span>\n </p>\n {share !== null ? <ShareBar view={share} label={v.headline} keyed={false} /> : null}\n {v.countdownTo !== null && now !== null ? (\n <p className=\"latch-locks__countdown\">\n <span className=\"latch-locks__timer\">{formatCountdown(v.countdownTo - now)}</span> to {v.countdownLabel}\n </p>\n ) : null}\n </>\n )}\n {props.brandMarkUrl !== undefined ? (\n <p className=\"latch-brand\">\n <img className=\"latch-brand__mark\" src={props.brandMarkUrl} width={665} height={765} alt=\"Latch\" />\n <span>Live from the chain</span>\n <span className=\"latch-brand__spacer\" />\n <Link props={props} />\n </p>\n ) : (\n <Link props={props} />\n )}\n </div>\n );\n}\n\n/** The list of every lock for the target, under the badge's summary. */\nexport function LocksPanel(props: LocksWidgetProps & { readonly title?: string }): JSX.Element {\n const theme = useShell(props.theme);\n const headingId = useId();\n const l = useTargetLocks(props);\n const v = view(l);\n const share = shareView(l);\n const schedule = l.kind === \"token\" && l.res.data !== null ? releaseSchedule((l.res.data as TokenLocksData).summary?.locks ?? [], (l.res.data as TokenLocksData).chainNow) : null;\n const data = l.res.data;\n const now = useChainClock(data?.chainNow ?? null, data?.readAtMs ?? null);\n return (\n <section\n className={`latch-widget latch-locks latch-locks--panel${props.className ? ` ${props.className}` : \"\"}`}\n data-latch-theme={theme}\n aria-labelledby={headingId}\n >\n <header className=\"latch-header\">\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"Locks\"}\n </h2>\n <Link props={props} />\n </header>\n {v === null ? (\n <StateLine l={l} target={props.target} />\n ) : (\n <>\n <p className=\"latch-locks__headline\">\n <span className={`latch-locks__dot latch-locks__dot--${v.tone}`} aria-hidden=\"true\" />\n <span>{v.headline}</span>\n </p>\n {share !== null ? <ShareBar view={share} label={v.headline} /> : null}\n {v.detail !== null ? <p className=\"latch-note\">{v.detail}</p> : null}\n {v.countdownTo !== null && now !== null ? (\n <p className=\"latch-locks__countdown\">\n <span className=\"latch-locks__timer\">{formatCountdown(v.countdownTo - now)}</span> to {v.countdownLabel}\n </p>\n ) : null}\n {schedule !== null && l.kind === \"token\" ? <ScheduleSpark points={schedule.points} total={schedule.total} now={now} token={(l.res.data as TokenLocksData).token} /> : null}\n {l.kind === \"pool\" ? <PoolRows data={l.res.data as PoolLocksData} now={now} /> : <TokenRows data={l.res.data as TokenLocksData} now={now} />}\n </>\n )}\n <p className=\"latch-footer latch-footer--brand\">Live from the chain</p>\n </section>\n );\n}\n\nfunction PoolRows({ data, now }: { data: PoolLocksData; now: bigint | null }): JSX.Element | null {\n const locks = data.summary.locks;\n const permanent = data.summary.permanent;\n const binLocks = data.bin?.locks ?? [];\n if (locks.length === 0 && permanent.length === 0 && binLocks.length === 0) return null;\n const active = data.summary.pool?.activeLiquidity ?? 0n;\n return (\n <ul className=\"latch-locks__list\">\n {permanent.map((p) => {\n const share = p.inRange === true && active > 0n ? Number((p.liquidity * 10_000n) / active) : null;\n return (\n <li key={`lp${p.tokenId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>Position #{p.tokenId.toString()}</strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Fees to</dt>\n <dd title={p.creator}>{shortAddress(p.creator)} (creator)</dd>\n </div>\n {p.amount0 !== null && p.amount1 !== null ? (\n <div>\n <dt>Holds now</dt>\n <dd title={`Liquidity ${p.liquidity.toLocaleString(\"en-US\")}`}>\n {formatLockAmount(p.amount0, data.currency0)} + {formatLockAmount(p.amount1, data.currency1)}\n {p.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n ) : (\n <div>\n <dt>Liquidity</dt>\n <dd>\n L {p.liquidity.toLocaleString(\"en-US\")}\n {p.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n )}\n <div>\n <dt>Share of active</dt>\n <dd>{share === null ? \"—\" : formatLockBps(share)}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n );\n })}\n {binLocks.map((b) => (\n <li key={`bin${b.lockId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>Bin lock #{b.lockId.toString()}</strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Bins</dt>\n <dd>\n {b.bins.length.toLocaleString(\"en-US\")}\n {b.bins.length > 0 ? ` (ids ${b.bins[0]!.binId}–${b.bins[b.bins.length - 1]!.binId})` : \"\"}\n </dd>\n </div>\n <div>\n <dt>Holds now</dt>\n <dd>\n {formatLockAmount(b.amount0, data.currency0)} + {formatLockAmount(b.amount1, data.currency1)}\n </dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n ))}\n {locks.map((lk) => {\n const share = lk.inRange === true && lk.liquidity !== null && active > 0n && lk.status === \"locked\" ? Number((lk.liquidity * 10_000n) / active) : null;\n return (\n <li key={lk.tokenId.toString()} className=\"latch-locks__item\" data-status={lk.status}>\n <div className=\"latch-locks__row\">\n <strong>Position #{lk.tokenId.toString()}</strong>\n <span className={`latch-locks__status latch-locks__status--${lk.status}`}>{POSITION_STATUS_LABEL[lk.status]}</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Lock owner</dt>\n <dd title={lk.owner}>{shortAddress(lk.owner)}</dd>\n </div>\n {lk.amount0 !== null && lk.amount1 !== null ? (\n <div>\n <dt>Holds now</dt>\n <dd title={lk.liquidity === null ? undefined : `Liquidity ${lk.liquidity.toLocaleString(\"en-US\")}`}>\n {formatLockAmount(lk.amount0, data.currency0)} + {formatLockAmount(lk.amount1, data.currency1)}\n {lk.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n ) : (\n <div>\n <dt>Liquidity</dt>\n <dd>\n {lk.liquidity === null ? \"—\" : `L ${lk.liquidity.toLocaleString(\"en-US\")}`}\n {lk.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n )}\n <div>\n <dt>Share of active</dt>\n <dd>{share === null ? \"—\" : formatLockBps(share)}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>\n {formatUtc(lk.unlockAt)}\n {lk.status === \"locked\" && now !== null ? <span className=\"latch-locks__timer\"> · {formatCountdown(lk.unlockAt - now)}</span> : null}\n </dd>\n </div>\n </dl>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction TokenRows({ data, now }: { data: TokenLocksData; now: bigint | null }): JSX.Element | null {\n const locks = data.summary?.locks ?? [];\n const lpPools = data.permanent?.pools ?? [];\n if (locks.length === 0 && lpPools.length === 0) return null;\n const supply = data.summary?.totalSupply ?? null;\n return (\n <ul className=\"latch-locks__list\">\n {lpPools.map((p) => (\n <li key={`${p.kind}${p.poolId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>\n {p.kind === \"cl-lp-locker\" ? \"CL\" : \"Bin\"} pool {p.poolId.slice(0, 10)}…\n </strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>{data.token.symbol} in the locked liquidity</dt>\n <dd>\n {formatLockAmount(p.amount, data.token)}\n {supply !== null && supply > 0n ? ` · ${formatLockBps(Number((p.amount * 10_000n) / supply))} of supply` : \"\"}\n </dd>\n </div>\n <div>\n <dt>Locks</dt>\n <dd>{p.locks.toLocaleString(\"en-US\")}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n ))}\n {locks.map((lk) => {\n const remaining = lk.amount - lk.claimed;\n const pct = supply === null || supply === 0n ? null : Number((remaining * 10_000n) / supply);\n const next = lk.status === \"cliff\" ? lk.cliff : lk.status === \"vesting\" ? lk.end : null;\n const vb = vestedBps(lk);\n return (\n <li key={lk.lockId.toString()} className=\"latch-locks__item\" data-status={lk.status}>\n <div className=\"latch-locks__row\">\n <strong>Lock #{lk.lockId.toString()}</strong>\n <span className={`latch-locks__status latch-locks__status--${lk.status}`}>{TOKEN_STATUS_LABEL[lk.status]}</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Beneficiary</dt>\n <dd title={lk.beneficiary}>{shortAddress(lk.beneficiary)}</dd>\n </div>\n <div>\n <dt>Amount</dt>\n <dd>{formatLockAmount(lk.amount, data.token)}</dd>\n </div>\n <div>\n <dt>Still held</dt>\n <dd>\n {formatLockAmount(remaining, data.token)}\n {pct !== null ? ` · ${formatLockBps(pct)} of supply` : \"\"}\n </dd>\n </div>\n <div>\n <dt>{lk.start === lk.end ? \"Unlocks\" : \"Vesting\"}</dt>\n <dd>\n {lk.start === lk.end ? formatUtc(lk.end) : `${formatUtc(lk.start)} → ${formatUtc(lk.end)}${lk.cliff > lk.start ? `, cliff ${formatUtc(lk.cliff)}` : \"\"}`}\n {next !== null && now !== null ? <span className=\"latch-locks__timer\"> · {formatCountdown(next - now)}</span> : null}\n </dd>\n </div>\n </dl>\n <div className=\"latch-progress\" role=\"img\" aria-label={`${formatLockBps(vb)} vested`}>\n <div className=\"latch-progress-fill\" style={{ width: `${vb / 100}%` }} />\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `TokenTrustPanel`: one place, for one token, with what the Latch contracts\n * hold about it - its liquidity locks per pool (time-locked and permanent LP\n * locker, as the locked share of ACTIVE liquidity), its token locks and\n * vesting, the creator tax a Kit v2 launch guard takes, each pool's LP fee and\n * protocol fee, and what LatchRegistry records about each pool's hook. Every\n * row names the contract, the view and the blocks it was read at.\n *\n * Read-only: a viem `PublicClient` and the chain's contract addresses from the\n * host's address book. No wallet, no provider. Four states, each distinct:\n * reading, the rows, \"could not be read\" when the chain does not answer, and\n * \"coming soon\" when `contracts` is `null` — a feature that has not arrived is not an outage, and the two read differently. It never says\n * \"safe\": a listing is what the registry records, not an audit.\n */\n\nimport { useEffect, useId } from \"react\";\nimport type { Address, Hex, PublicClient } from \"viem\";\n\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport { useTokenTrust, type TokenTrustTarget } from \"../hooks/useTokenTrust.js\";\nimport { tokenTrustView, type TrustRowView } from \"../trust/model.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\nimport { ShareBar } from \"./lockCharts.js\";\n\nexport interface TokenTrustPanelProps extends TokenTrustTarget {\n readonly client: PublicClient;\n readonly theme?: WidgetTheme;\n readonly title?: string;\n /** Links each source contract to an explorer. Return `null` for no link (e.g. a devnet). */\n readonly explorerAddressUrl?: (address: Address) => string | null;\n /** Links each pool to its lock page. Return `null` for no link. */\n readonly poolLockUrl?: (poolId: Hex) => string | null;\n /** Anchor target for those links, e.g. `_blank` inside an iframe. */\n readonly linkTarget?: \"_blank\" | \"_top\" | \"_self\";\n readonly refetchIntervalMs?: number;\n readonly className?: string;\n}\n\nfunction linkProps(target: TokenTrustPanelProps[\"linkTarget\"]): { target?: string; rel?: string } {\n return target === undefined || target === \"_self\" ? {} : { target, rel: \"noopener noreferrer\" };\n}\n\nfunction Row({ r, props }: { r: TrustRowView; props: TokenTrustPanelProps }): JSX.Element {\n return (\n <div className=\"latch-trust__row\" data-tone={r.tone}>\n <dt className=\"latch-trust__label\">{r.label}</dt>\n <dd className=\"latch-trust__value\">\n <p className=\"latch-trust__headline\">\n <span className={`latch-trust__dot latch-trust__dot--${r.tone}`} aria-hidden=\"true\" />\n <span>{r.headline}</span>\n </p>\n {r.share ? <ShareBar view={r.share} label={`${r.label}: ${r.headline}`} /> : null}\n {r.detail !== null ? <p className=\"latch-trust__detail\">{r.detail}</p> : null}\n {r.sources.length > 0 ? (\n <p className=\"latch-trust__source\">\n {r.sources.map((s, i) => {\n const href = props.explorerAddressUrl?.(s.address) ?? null;\n const text = r.provenance[i] ?? s.contract;\n return (\n <span key={`${s.address}${i}`} className=\"latch-trust__source-item\">\n {href === null ? (\n text\n ) : (\n <a href={href} {...linkProps(props.linkTarget ?? \"_blank\")}>\n {text}\n </a>\n )}\n </span>\n );\n })}\n </p>\n ) : null}\n </dd>\n </div>\n );\n}\n\nexport function TokenTrustPanel(props: TokenTrustPanelProps): JSX.Element {\n const ctx = useOptionalWidgetContext();\n const theme = props.theme ?? ctx?.theme ?? \"dark\";\n const headingId = useId();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n const res = useTokenTrust(props.client, props, props.refetchIntervalMs === undefined ? {} : { refetchIntervalMs: props.refetchIntervalMs });\n const data = res.data;\n const view = data === null ? null : tokenTrustView(data.trust, data.symbols);\n\n let body: JSX.Element;\n if (props.contracts === null) {\n body = (\n <p className=\"latch-trust__state\" role=\"status\">\n Latch is coming soon on this chain, so nothing about this token can be read from its contracts yet.\n </p>\n );\n } else if (view === null && res.status === \"error\") {\n body = (\n <p className=\"latch-trust__state latch-trust__state--error\" role=\"alert\">\n Couldn&rsquo;t load. Try again.{\" \"}\n <button type=\"button\" className=\"latch-trust__retry\" onClick={res.refetch}>\n Retry\n </button>\n </p>\n );\n } else if (view === null) {\n body = (\n <p className=\"latch-trust__state\" role=\"status\">\n Loading…\n </p>\n );\n } else {\n body = (\n <>\n <dl className=\"latch-trust__list\">\n <Row r={view.launch} props={props} />\n <Row r={view.tokenLocks} props={props} />\n <Row r={view.creatorTax} props={props} />\n </dl>\n <h3 className=\"latch-trust__subhead\">Pools</h3>\n {view.pools.length === 0 ? (\n <p className=\"latch-trust__state\">No pool of this token was found through a Latch launch, lock or this page&rsquo;s pool list.</p>\n ) : (\n view.pools.map((p) => {\n const href = props.poolLockUrl?.(p.poolId) ?? null;\n return (\n <section key={p.poolId} className=\"latch-trust__pool\" aria-label={p.title}>\n <header className=\"latch-trust__pool-head\">\n <strong>{p.title}</strong>\n <code title={p.poolId}>\n {p.poolId.slice(0, 10)}…{p.poolId.slice(-6)}\n </code>\n {href !== null ? (\n <a className=\"latch-trust__link\" href={href} {...linkProps(props.linkTarget)}>\n Locks →\n </a>\n ) : null}\n </header>\n <p className=\"latch-trust__found\">{p.foundBy}</p>\n <dl className=\"latch-trust__list\">\n {p.rows.map((r) => (\n <Row key={r.key} r={r} props={props} />\n ))}\n </dl>\n </section>\n );\n })\n )}\n {view.failedPools.map((f) => (\n <p key={f} className=\"latch-trust__state latch-trust__state--error\">\n {f}\n </p>\n ))}\n <p className=\"latch-note\">{view.discoveryNote}</p>\n {res.status === \"error\" ? <p className=\"latch-note latch-note--warn\">The last refresh failed; these rows are from the previous read.</p> : null}\n <p className=\"latch-footer latch-footer--brand\">{view.readAtNote}</p>\n </>\n );\n }\n\n return (\n <section className={`latch-widget latch-trust${props.className ? ` ${props.className}` : \"\"}`} data-latch-theme={theme} aria-labelledby={headingId}>\n <header className=\"latch-header\">\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"What the contracts say\"}\n </h2>\n </header>\n {body}\n </section>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `LockerWidget`: lock liquidity and tokens with Latch from any React app.\n *\n * Lock liquidity time-lock a CL position NFT in `LatchPositionLock`\n * Lock tokens a time lock or cliff + linear vesting in `LatchTokenLock`\n * My locks the connected wallet's locks: collect fees, extend,\n * withdraw after the date, claim what has vested, accept an\n * offered lock\n *\n * The fee is read live from each contract (`feeWei` and any announced\n * `pendingFee`) and shown before anything is signed; it is the contract's, not\n * this widget's, so every caller pays the same. Approvals are exact (this one\n * NFT; exactly the amount), and only when the chain says one is missing. Every\n * call is simulated with its exact bytes before the wallet sees it, and every\n * receipt is checked: a mined revert is reported as one. Errors read through\n * the widgets' decoder.\n *\n * The wallet is `wallet` (the `WidgetWallet` surface `createViemAdapter`\n * takes), else the mounted `WidgetProvider`'s adapter. Reads go through\n * `client`, on the lock contracts' chain.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useState } from \"react\";\nimport { erc20Abi, getAddress, isAddress, zeroAddress, type Address, type Hex, type PublicClient } from \"viem\";\nimport { CL_POSITION_MANAGER_ABI } from \"@latchprotocol/sdk\";\nimport {\n buildAcceptBeneficiary,\n buildAcceptLockOwner,\n buildApprovePositionForLock,\n buildClaimTokenLock,\n buildCollectLockedFees,\n buildErc20Approve,\n buildExtendPositionLock,\n buildLockPosition,\n buildTokenLock,\n buildWithdrawPosition,\n readChainNow,\n readErc20Allowance,\n readFeeGate,\n readPositionApproval,\n readPositionLockContext,\n validatePositionLock,\n validateTokenLock,\n} from \"@latchprotocol/sdk/lock\";\n\nimport type { WidgetWallet } from \"../adapters/viem.js\";\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport { useAsyncResource } from \"../hooks/useAsyncResource.js\";\nimport { useLockerAccount, useLockerFees, useLockerRunner, useLockerWallet, useMyLocks, type LockerContracts, type RunnerState, type RunnerStep } from \"../hooks/useLocker.js\";\nimport {\n POSITION_ACTION_LABEL,\n TOKEN_ACTION_LABEL,\n lockSchedule,\n lockerFeeView,\n parseDays,\n parseLockAmount,\n parseUtcInput,\n planPositionLock,\n planTokenLock,\n positionLockActions,\n toUtcInput,\n tokenLockActions,\n type VestingMode,\n} from \"../locker/model.js\";\nimport { formatLockAmount, formatLockBps, formatUtc, releaseSchedule, vestedBps } from \"../locks/model.js\";\nimport { ScheduleSpark } from \"./lockCharts.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\n\nexport interface LockerWidgetProps {\n readonly client: PublicClient;\n readonly contracts: LockerContracts;\n readonly wallet?: WidgetWallet;\n readonly native?: { readonly symbol: string; readonly decimals: number };\n readonly theme?: WidgetTheme;\n readonly title?: string;\n readonly defaultTab?: LockerTab;\n /** Prefill the token tab. */\n readonly defaultToken?: Address;\n /** Opens the host's wallet connect flow; falls back to the provider's. */\n readonly onConnectRequest?: () => void;\n /** Links a transaction hash to an explorer; `null` for no link. */\n readonly explorerTxUrl?: (hash: Hex) => string | null;\n /** The Latch mark (brand kit `masters/latch-mark.svg`, or `-onlight` on a light ground) beside the\n * title, at the kit's 24 px minimum. The intrinsic size is the master's real viewBox so the shape\n * is reserved correctly; CSS decides how big it draws. Omit for none. */\n readonly brandMarkUrl?: string;\n readonly className?: string;\n}\n\nexport type LockerTab = \"position\" | \"token\" | \"mine\";\n\nconst DEFAULT_NATIVE = { symbol: \"ETH\", decimals: 18 };\nconst short = (a: string): string => `${a.slice(0, 6)}…${a.slice(-4)}`;\n\nfunction Progress({ state, explorerTxUrl }: { state: RunnerState; explorerTxUrl: LockerWidgetProps[\"explorerTxUrl\"] }): JSX.Element | null {\n if (state.k === \"idle\") return null;\n const labels = state.labels;\n const active = state.k === \"done\" ? labels.length : state.active;\n return (\n <div role=\"status\" aria-live=\"polite\">\n <ol className=\"latch-locker__steps\">\n {labels.map((l, i) => (\n <li key={l} data-state={i < active ? \"done\" : i === active && state.k === \"running\" ? \"active\" : \"pending\"}>\n {l}\n </li>\n ))}\n </ol>\n {state.k === \"running\" ? (\n <p className=\"latch-locker__status\">\n {state.phase === \"simulating\" ? \"Simulating the exact transaction…\" : state.phase === \"signing\" ? \"Confirm in your wallet…\" : \"Waiting for the receipt…\"}\n </p>\n ) : state.k === \"failed\" ? (\n <p className=\"latch-locker__status\" data-kind=\"error\">\n {state.message}\n </p>\n ) : (\n <p className=\"latch-locker__status\" data-kind=\"success\">\n Done: every receipt succeeded.{\" \"}\n {state.hashes.map((h) => {\n const href = explorerTxUrl?.(h) ?? null;\n return href === null ? (\n <code key={h}>{short(h)} </code>\n ) : (\n <a key={h} href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {short(h)}{\" \"}\n </a>\n );\n })}\n </p>\n )}\n </div>\n );\n}\n\nfunction FeeBox({ terms, native }: { terms: Parameters<typeof lockerFeeView>[0] | null | undefined; native: { symbol: string; decimals: number } }): JSX.Element {\n if (terms === undefined) return <p className=\"latch-locker__fee\">Loading the fee…</p>;\n if (terms === null) return <p className=\"latch-locker__fee\">Couldn&rsquo;t load the fee. Try again.</p>;\n const v = lockerFeeView(terms, native);\n return (\n <p className=\"latch-locker__fee\">\n <span>\n Fee <strong>{v.fee}</strong>, sends <strong>{v.sends}</strong>\n </span>\n {v.pending !== null ? <span>{v.pending}</span> : null}\n <span className=\"latch-note\">{v.note}</span>\n </p>\n );\n}\n\n/* ------------------------------------------------------------ position tab --- */\n\nfunction PositionTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null; fee: Parameters<typeof lockerFeeView>[0] | null | undefined; onDone: () => void }): JSX.Element {\n const { client, contracts } = p.props;\n const lock = contracts.positionLock as Address;\n const [tokenIdText, setTokenId] = useState(\"\");\n const [unlockText, setUnlock] = useState(\"\");\n const [ownerText, setOwner] = useState(\"\");\n const tokenId = /^\\d+$/.test(tokenIdText.trim()) ? BigInt(tokenIdText.trim()) : null;\n const unlockAt = parseUtcInput(unlockText);\n const owner = ownerText.trim() === \"\" ? p.account : isAddress(ownerText.trim(), { strict: false }) ? getAddress(ownerText.trim()) : null;\n\n const pos = useAsyncResource(\n async () => {\n const ctx = await readPositionLockContext(client, lock);\n const id = tokenId as bigint;\n const [nftOwner, info, approved, now] = await Promise.all([\n client.readContract({ address: ctx.positionManager, abi: CL_POSITION_MANAGER_ABI, functionName: \"ownerOf\", args: [id] }).catch(() => null),\n client.readContract({ address: ctx.positionManager, abi: CL_POSITION_MANAGER_ABI, functionName: \"positions\", args: [id] }).catch(() => null),\n p.account === null ? Promise.resolve(false) : readPositionApproval(client, { positionManager: ctx.positionManager, lock, tokenId: id, owner: p.account }).catch(() => false),\n readChainNow(client),\n ]);\n return { ctx, nftOwner, liquidity: info === null ? null : (info[3] as bigint), approved, now };\n },\n [client, lock, tokenId, p.account],\n { enabled: tokenId !== null },\n );\n const d = pos.data;\n useEffect(() => {\n if (unlockText === \"\" && d !== null) setUnlock(toUtcInput(d.now + 30n * 86_400n));\n }, [d, unlockText]);\n\n const issues: string[] = [];\n if (tokenIdText.trim() !== \"\" && tokenId === null) issues.push(\"The position id is a whole number.\");\n if (d !== null && tokenId !== null) {\n if (d.nftOwner === null) issues.push(`Position #${tokenId} does not exist on this position manager.`);\n else if (p.account !== null && d.nftOwner.toLowerCase() !== p.account.toLowerCase()) issues.push(`Position #${tokenId} is owned by ${short(d.nftOwner)}, not the connected wallet.`);\n if (d.liquidity === 0n) issues.push(\"The position holds no liquidity.\");\n if (unlockAt === null) issues.push(\"Choose an unlock date.\");\n else for (const i of validatePositionLock({ unlockAt, owner: owner ?? \"\", nowSeconds: d.now, lock })) issues.push(i.message);\n }\n const runner = useLockerRunner(client, p.wallet, p.account, p.onDone);\n const ready = d !== null && tokenId !== null && unlockAt !== null && owner !== null && issues.length === 0 && p.account !== null && runner.state.k !== \"running\";\n const plan = ready ? planPositionLock({ tokenId: tokenId as bigint, approved: d.approved, unlockAt: unlockAt as bigint }) : [];\n\n const go = (): void => {\n if (!ready) return;\n const id = tokenId as bigint;\n const steps: RunnerStep[] = plan.map((s) => ({\n label: s.label,\n build:\n s.key === \"approve\"\n ? async () => buildApprovePositionForLock({ positionManager: d.ctx.positionManager, lock, tokenId: id })\n : async () => buildLockPosition({ lock, tokenId: id, unlockAt: unlockAt as bigint, owner: owner as Address, terms: await readFeeGate(client, lock) }),\n }));\n void runner.run(steps);\n };\n\n return (\n <div className=\"latch-locker__form\">\n <label className=\"latch-locker__field\">\n <span>Position id (CL position NFT)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={tokenIdText} onChange={(e) => setTokenId(e.target.value)} placeholder=\"Position id\" />\n </label>\n {d !== null && d.liquidity !== null ? <p className=\"latch-note\">Liquidity L {d.liquidity.toLocaleString(\"en-US\")}{d.approved ? \" · already approved to the lock\" : \"\"}</p> : null}\n {pos.status === \"error\" ? <p className=\"latch-locker__status\" data-kind=\"error\">Couldn&rsquo;t load the position. Try again.</p> : null}\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Unlock (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={unlockText} onChange={(e) => setUnlock(e.target.value)} />\n </label>\n <label className=\"latch-locker__field\">\n <span>Lock owner</span>\n <input className=\"latch-locker__input\" value={ownerText} onChange={(e) => setOwner(e.target.value)} placeholder={p.account === null ? \"0x…\" : `${short(p.account)} (you)`} />\n </label>\n </div>\n {issues.length > 0 ? (\n <ul className=\"latch-locker__issues\">\n {issues.map((i) => (\n <li key={i}>{i}</li>\n ))}\n </ul>\n ) : null}\n <FeeBox terms={p.fee} native={p.props.native ?? DEFAULT_NATIVE} />\n <p className=\"latch-note\">Until the unlock date nobody can remove the liquidity or move the NFT. The lock owner keeps collecting its swap fees and withdraws after the date. A lock can be extended, never shortened.</p>\n <button type=\"button\" className=\"latch-cta\" disabled={!ready} onClick={go}>\n {plan.length > 1 ? \"Approve and lock\" : \"Lock position\"}\n </button>\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* --------------------------------------------------------------- token tab --- */\n\nfunction TokenTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null; fee: Parameters<typeof lockerFeeView>[0] | null | undefined; onDone: () => void }): JSX.Element {\n const { client, contracts } = p.props;\n const lock = contracts.tokenLock as Address;\n const native = p.props.native ?? DEFAULT_NATIVE;\n const [isNative, setIsNative] = useState(false);\n const [tokenText, setToken] = useState(p.props.defaultToken ?? \"\");\n const [amountText, setAmount] = useState(\"\");\n const [benText, setBen] = useState(\"\");\n const [mode, setMode] = useState<VestingMode>(\"timelock\");\n const [unlockText, setUnlock] = useState(\"\");\n const [startText, setStart] = useState(\"\");\n const [cliffText, setCliff] = useState(\"0\");\n const [durText, setDur] = useState(\"365\");\n const token: Address | null = isNative ? zeroAddress : isAddress(tokenText.trim(), { strict: false }) ? getAddress(tokenText.trim()) : null;\n const beneficiary = benText.trim() === \"\" ? p.account : isAddress(benText.trim(), { strict: false }) ? getAddress(benText.trim()) : null;\n\n const tok = useAsyncResource(\n async () => {\n const t = token as Address;\n const [symbol, decimals, balance, allowance, now] = await Promise.all([\n isNative ? Promise.resolve(native.symbol) : client.readContract({ address: t, abi: erc20Abi, functionName: \"symbol\" }),\n isNative ? Promise.resolve(native.decimals) : client.readContract({ address: t, abi: erc20Abi, functionName: \"decimals\" }),\n p.account === null ? Promise.resolve(null) : isNative ? client.getBalance({ address: p.account }) : client.readContract({ address: t, abi: erc20Abi, functionName: \"balanceOf\", args: [p.account] }),\n p.account === null || isNative ? Promise.resolve(0n) : readErc20Allowance(client, t, p.account, lock),\n readChainNow(client),\n ]);\n return { symbol, decimals: Number(decimals), balance, allowance, now };\n },\n [client, token, isNative, p.account, lock],\n { enabled: token !== null },\n );\n const d = tok.data;\n useEffect(() => {\n if (d === null) return;\n if (unlockText === \"\") setUnlock(toUtcInput(d.now + 30n * 86_400n));\n if (startText === \"\") setStart(toUtcInput(d.now + 3600n));\n }, [d, unlockText, startText]);\n\n const amount = d === null ? null : parseLockAmount(amountText, d.decimals);\n const schedule = lockSchedule(mode, { unlockAt: parseUtcInput(unlockText), start: parseUtcInput(startText), cliffDays: parseDays(cliffText), durationDays: parseDays(durText) });\n const issues: string[] = [];\n if (!isNative && tokenText.trim() !== \"\" && token === null) issues.push(\"The token is not an address.\");\n if (tok.status === \"error\" && d === null) issues.push(\"The token could not be read: is it an ERC-20 on this chain?\");\n if (d !== null) {\n if (amountText.trim() !== \"\" && amount === null) issues.push(`Enter an amount with at most ${d.decimals} decimals.`);\n if (amount !== null && d.balance !== null && amount > d.balance) issues.push(`The connected wallet holds ${formatLockAmount(d.balance, { symbol: d.symbol, decimals: d.decimals })}.`);\n if (schedule === null) issues.push(mode === \"timelock\" ? \"Choose an unlock date.\" : \"Set a start date, a cliff and a duration in whole days.\");\n else if (amount !== null) for (const i of validateTokenLock({ currency: token as string, amount, beneficiary: beneficiary ?? \"\", schedule, nowSeconds: d.now, lock })) issues.push(i.message);\n }\n const runner = useLockerRunner(client, p.wallet, p.account, p.onDone);\n const ready = d !== null && amount !== null && amount > 0n && schedule !== null && beneficiary !== null && issues.length === 0 && p.account !== null && runner.state.k !== \"running\";\n const plan = ready ? planTokenLock({ native: isNative, allowance: d.allowance, amount: amount as bigint, amountText: amountText.trim(), symbol: d.symbol }) : [];\n\n const go = (): void => {\n if (!ready) return;\n const steps: RunnerStep[] = plan.map((s) => ({\n label: s.label,\n build:\n s.key === \"approve\"\n ? async () => buildErc20Approve({ token: token as Address, spender: lock, amount: amount as bigint })\n : async () => buildTokenLock({ lock, currency: token as Address, amount: amount as bigint, beneficiary: beneficiary as Address, schedule, terms: await readFeeGate(client, lock) }),\n }));\n void runner.run(steps);\n };\n\n return (\n <div className=\"latch-locker__form\">\n <div className=\"latch-locker__choice\" role=\"radiogroup\" aria-label=\"Currency\">\n <label>\n <input type=\"radio\" checked={!isNative} onChange={() => setIsNative(false)} /> ERC-20 token\n </label>\n <label>\n <input type=\"radio\" checked={isNative} onChange={() => setIsNative(true)} /> Native {native.symbol}\n </label>\n </div>\n {!isNative ? (\n <label className=\"latch-locker__field\">\n <span>Token address</span>\n <input className=\"latch-locker__input\" value={tokenText} onChange={(e) => setToken(e.target.value)} placeholder=\"0x…\" spellCheck={false} />\n </label>\n ) : null}\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Amount{d !== null ? ` (${d.symbol})` : \"\"}</span>\n <input className=\"latch-locker__input\" inputMode=\"decimal\" value={amountText} onChange={(e) => setAmount(e.target.value)} placeholder=\"0.0\" />\n </label>\n <label className=\"latch-locker__field\">\n <span>Beneficiary</span>\n <input className=\"latch-locker__input\" value={benText} onChange={(e) => setBen(e.target.value)} placeholder={p.account === null ? \"0x…\" : `${short(p.account)} (you)`} spellCheck={false} />\n </label>\n </div>\n {d !== null && d.balance !== null ? <p className=\"latch-note\">Balance {formatLockAmount(d.balance, { symbol: d.symbol, decimals: d.decimals })}</p> : null}\n <div className=\"latch-locker__choice\" role=\"radiogroup\" aria-label=\"Schedule\">\n <label>\n <input type=\"radio\" checked={mode === \"timelock\"} onChange={() => setMode(\"timelock\")} /> Time lock (all at one date)\n </label>\n <label>\n <input type=\"radio\" checked={mode === \"vesting\"} onChange={() => setMode(\"vesting\")} /> Vesting (cliff, then linear)\n </label>\n </div>\n {mode === \"timelock\" ? (\n <label className=\"latch-locker__field\">\n <span>Unlock (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={unlockText} onChange={(e) => setUnlock(e.target.value)} />\n </label>\n ) : (\n <>\n <label className=\"latch-locker__field\">\n <span>Vesting starts (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={startText} onChange={(e) => setStart(e.target.value)} />\n </label>\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Cliff (days after start)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={cliffText} onChange={(e) => setCliff(e.target.value)} />\n </label>\n <label className=\"latch-locker__field\">\n <span>Fully vested (days after start)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={durText} onChange={(e) => setDur(e.target.value)} />\n </label>\n </div>\n </>\n )}\n {schedule !== null && mode === \"vesting\" ? <p className=\"latch-note\">Nothing claimable before {formatUtc(schedule.cliff)}; everything vested at {formatUtc(schedule.end)}.</p> : null}\n {schedule !== null && mode === \"vesting\" && d !== null && amount !== null && amount > 0n\n ? (() => {\n const sched = releaseSchedule([{ ...schedule, amount }], d.now);\n return sched === null ? null : <ScheduleSpark points={sched.points} total={sched.total} now={d.now} token={{ symbol: d.symbol, decimals: d.decimals }} />;\n })()\n : null}\n {issues.length > 0 ? (\n <ul className=\"latch-locker__issues\">\n {issues.map((i) => (\n <li key={i}>{i}</li>\n ))}\n </ul>\n ) : null}\n <FeeBox terms={p.fee} native={native} />\n <p className=\"latch-note\">The schedule is fixed at creation: no key can shorten, revoke or redirect it. The beneficiary claims what has vested, to any address.</p>\n <button type=\"button\" className=\"latch-cta\" disabled={!ready} onClick={go}>\n {plan.length > 1 ? \"Approve and lock\" : \"Lock tokens\"}\n </button>\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* ---------------------------------------------------------------- my locks --- */\n\nfunction MineTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null }): JSX.Element {\n const { client, contracts } = p.props;\n const mine = useMyLocks(client, contracts, p.account);\n const runner = useLockerRunner(client, p.wallet, p.account, mine.refetch);\n const [extend, setExtend] = useState<Record<string, string>>({});\n const native = p.props.native ?? DEFAULT_NATIVE;\n const metas = useAsyncResource(\n async () => {\n const cur = [...new Set((mine.data?.tokens ?? []).map((t) => t.currency.toLowerCase()))] as Address[];\n const out: Record<string, { symbol: string; decimals: number | null }> = {};\n await Promise.all(\n cur.map(async (c) => {\n if (c === zeroAddress) out[c] = native;\n else {\n const [s, dd] = await Promise.all([\n client.readContract({ address: c, abi: erc20Abi, functionName: \"symbol\" }).catch(() => short(c)),\n client.readContract({ address: c, abi: erc20Abi, functionName: \"decimals\" }).catch(() => null),\n ]);\n out[c] = { symbol: s, decimals: dd === null ? null : Number(dd) };\n }\n }),\n );\n return out;\n },\n [client, (mine.data?.tokens ?? []).map((t) => t.currency).join(\",\")],\n { enabled: (mine.data?.tokens.length ?? 0) > 0 },\n );\n if (p.account === null) return <p className=\"latch-trust__state\">Connect a wallet to see its locks.</p>;\n if (mine.data === null) {\n return mine.status === \"error\" ? (\n <p className=\"latch-locker__status\" data-kind=\"error\">\n Couldn&rsquo;t load the locks.{\" \"}\n <button type=\"button\" className=\"latch-trust__retry\" onClick={mine.refetch}>\n Retry\n </button>\n </p>\n ) : (\n <p className=\"latch-trust__state\">Loading your locks…</p>\n );\n }\n const { positions, tokens, now } = mine.data;\n const busy = runner.state.k === \"running\";\n const act = (label: string, build: RunnerStep[\"build\"]): void => void runner.run([{ label, build }]);\n const posLock = contracts.positionLock;\n const tokLock = contracts.tokenLock;\n return (\n <div className=\"latch-locker__form\">\n {positions.length === 0 && tokens.length === 0 ? <p className=\"latch-trust__state\">This wallet owns no lock and has been offered none.</p> : null}\n {posLock !== null && positions.length > 0 ? (\n <ul className=\"latch-locks__list\">\n {positions.map((r) => {\n const actions = positionLockActions(r, p.account, now);\n const k = r.tokenId.toString();\n const newUnlock = parseUtcInput(extend[k] ?? \"\");\n return (\n <li key={k} className=\"latch-locks__item\" data-status={r.withdrawn ? \"withdrawn\" : now < r.unlockAt ? \"locked\" : \"unlockable\"}>\n <div className=\"latch-locks__row\">\n <strong>Position #{k}</strong>\n <span className=\"latch-locks__status\">{r.withdrawn ? \"Withdrawn\" : now < r.unlockAt ? \"Locked\" : \"Unlockable\"}</span>\n </div>\n <p className=\"latch-note\">\n Unlocks {formatUtc(r.unlockAt)} · pool {r.poolId.slice(0, 10)}…{r.pendingOwner !== null ? ` · offered to ${short(r.pendingOwner)}` : \"\"}\n </p>\n {actions.includes(\"extend\") ? (\n <label className=\"latch-locker__field\">\n <span>New unlock (UTC), later than the current one</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={extend[k] ?? toUtcInput(r.unlockAt)} onChange={(e) => setExtend({ ...extend, [k]: e.target.value })} />\n </label>\n ) : null}\n <div className=\"latch-locker__actions\">\n {actions.map((a) => (\n <button\n key={a}\n type=\"button\"\n className=\"latch-locker__btn\"\n disabled={busy || (a === \"extend\" && (newUnlock === null || newUnlock <= r.unlockAt))}\n onClick={() =>\n act(\n `${POSITION_ACTION_LABEL[a]}: position #${k}`,\n async () =>\n a === \"collect\"\n ? buildCollectLockedFees({ lock: posLock, tokenId: r.tokenId })\n : a === \"extend\"\n ? buildExtendPositionLock({ lock: posLock, tokenId: r.tokenId, newUnlockAt: newUnlock as bigint })\n : a === \"withdraw\"\n ? buildWithdrawPosition({ lock: posLock, tokenId: r.tokenId, to: p.account as Address })\n : buildAcceptLockOwner({ lock: posLock, tokenId: r.tokenId }),\n )\n }\n >\n {POSITION_ACTION_LABEL[a]}\n </button>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n {tokLock !== null && tokens.length > 0 ? (\n <ul className=\"latch-locks__list\">\n {tokens.map((l) => {\n const m = metas.data?.[l.currency.toLowerCase()] ?? { symbol: short(l.currency), decimals: null };\n const actions = tokenLockActions(l, p.account);\n return (\n <li key={l.lockId.toString()} className=\"latch-locks__item\" data-status={l.status}>\n <div className=\"latch-locks__row\">\n <strong>Lock #{l.lockId.toString()}</strong>\n <span className=\"latch-locks__status\">{l.status === \"cliff\" ? \"Before cliff\" : l.status === \"vesting\" ? \"Vesting\" : l.status === \"vested\" ? \"Fully vested\" : \"Claimed\"}</span>\n </div>\n <div className=\"latch-progress\" role=\"img\" aria-label={`${formatLockBps(vestedBps(l))} vested`}>\n <div className=\"latch-progress-fill\" style={{ width: `${vestedBps(l) / 100}%` }} />\n </div>\n <p className=\"latch-note\">\n {formatLockAmount(l.amount, m)} · claimable {formatLockAmount(l.claimable, m)} · {l.start === l.end ? `unlocks ${formatUtc(l.end)}` : `vests ${formatUtc(l.start)} → ${formatUtc(l.end)}`}\n </p>\n <div className=\"latch-locker__actions\">\n {actions.map((a) => (\n <button\n key={a}\n type=\"button\"\n className=\"latch-locker__btn\"\n disabled={busy}\n onClick={() =>\n act(`${TOKEN_ACTION_LABEL[a]}: lock #${l.lockId}`, async () =>\n a === \"claim\" ? buildClaimTokenLock({ lock: tokLock, lockId: l.lockId, to: p.account as Address }) : buildAcceptBeneficiary({ lock: tokLock, lockId: l.lockId }),\n )\n }\n >\n {TOKEN_ACTION_LABEL[a]}\n </button>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ widget --- */\n\nexport function LockerWidget(props: LockerWidgetProps): JSX.Element {\n const ctx = useOptionalWidgetContext();\n const theme = props.theme ?? ctx?.theme ?? \"dark\";\n const headingId = useId();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n const wallet = useLockerWallet(props.wallet);\n const accountRes = useLockerAccount(wallet);\n const account = accountRes.data ?? null;\n const fees = useLockerFees(props.client, props.contracts);\n const hasPos = props.contracts.positionLock !== null;\n const hasTok = props.contracts.tokenLock !== null;\n const [tab, setTab] = useState<LockerTab>(props.defaultTab ?? (hasPos ? \"position\" : \"token\"));\n /* After a lock mines, the fee (and so the form) is re-read; \"My locks\" reads on every visit. */\n const onDone = useCallback(() => fees.refetch(), [fees.refetch]);\n const connect = props.onConnectRequest ?? ctx?.onConnectRequest;\n const tabs = useMemo(() => {\n const t: { key: LockerTab; label: string }[] = [];\n if (hasPos) t.push({ key: \"position\", label: \"Lock liquidity\" });\n if (hasTok) t.push({ key: \"token\", label: \"Lock tokens\" });\n t.push({ key: \"mine\", label: \"My locks\" });\n return t;\n }, [hasPos, hasTok]);\n const feeFor = (which: \"position\" | \"token\") => (fees.data === null ? (fees.status === \"error\" ? null : undefined) : fees.data[which]);\n\n return (\n <section className={`latch-widget latch-locker${props.className ? ` ${props.className}` : \"\"}`} data-latch-theme={theme} aria-labelledby={headingId}>\n <header className=\"latch-header latch-brand\">\n {props.brandMarkUrl !== undefined ? <img className=\"latch-brand__mark\" src={props.brandMarkUrl} width={665} height={765} alt=\"\" /> : null}\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"Lock with Latch\"}\n </h2>\n </header>\n {!hasPos && !hasTok ? (\n <p className=\"latch-trust__state\" role=\"status\">\n Latch locks are coming soon on this chain.\n </p>\n ) : (\n <>\n <div className=\"latch-locker__tabs\" role=\"tablist\">\n {tabs.map((t) => (\n <button key={t.key} type=\"button\" role=\"tab\" className=\"latch-locker__tab\" aria-selected={tab === t.key} onClick={() => setTab(t.key)}>\n {t.label}\n </button>\n ))}\n </div>\n {account === null ? (\n <button type=\"button\" className=\"latch-cta\" disabled={connect === undefined} onClick={connect}>\n Connect wallet\n </button>\n ) : (\n <p className=\"latch-note\">Connected {short(account)}</p>\n )}\n {tab === \"position\" && hasPos ? <PositionTab props={props} account={account} wallet={wallet} fee={feeFor(\"position\")} onDone={onDone} /> : null}\n {tab === \"token\" && hasTok ? <TokenTab props={props} account={account} wallet={wallet} fee={feeFor(\"token\")} onDone={onDone} /> : null}\n {tab === \"mine\" ? <MineTab props={props} account={account} wallet={wallet} /> : null}\n </>\n )}\n <p className=\"latch-footer latch-footer--brand\">Fees read live from the lock contracts · every call simulated first</p>\n </section>\n );\n}\n"],"names":["partText","p","formatLockBps","ShareBar","view","label","keyed","words","jsxs","jsx","W","H","ScheduleSpark","points","total","now","token","active","setActive","useState","geo","useMemo","t0","t1","x","t","y","v","i","first","last","nowX","pick","e","r","fx","best","onKey","a","at","formatUtc","formatLockAmount","Fragment","useTargetLocks","props","opts","pool","usePoolLocks","useTokenLocks","lockAddressOf","useShell","theme","ctx","useOptionalWidgetContext","useEffect","injectWidgetStyles","Link","href","lockPageUrl","l","wording","tokenEmbedView","d","binPoolBadgeView","poolBadgeView","empty","tokenBadgeView","shareView","binShareBar","poolShareBar","tokenShareBar","StateLine","target","LocksBadge","share","data","useChainClock","pending","LocksPanel","headingId","useId","schedule","releaseSchedule","PoolRows","TokenRows","locks","permanent","binLocks","shortAddress","b","lk","POSITION_STATUS_LABEL","formatCountdown","lpPools","supply","remaining","pct","next","vb","vestedBps","TOKEN_STATUS_LABEL","linkProps","Row","s","text","TokenTrustPanel","res","useTokenTrust","tokenTrustView","body","f","DEFAULT_NATIVE","short","Progress","state","explorerTxUrl","labels","h","FeeBox","terms","native","lockerFeeView","PositionTab","client","contracts","lock","tokenIdText","setTokenId","unlockText","setUnlock","ownerText","setOwner","tokenId","unlockAt","parseUtcInput","owner","isAddress","getAddress","pos","useAsyncResource","readPositionLockContext","id","nftOwner","info","approved","CL_POSITION_MANAGER_ABI","readPositionApproval","readChainNow","toUtcInput","issues","validatePositionLock","runner","useLockerRunner","ready","plan","planPositionLock","go","steps","buildApprovePositionForLock","buildLockPosition","readFeeGate","TokenTab","isNative","setIsNative","tokenText","setToken","amountText","setAmount","benText","setBen","mode","setMode","startText","setStart","cliffText","setCliff","durText","setDur","zeroAddress","beneficiary","tok","symbol","decimals","balance","allowance","erc20Abi","readErc20Allowance","amount","parseLockAmount","lockSchedule","parseDays","validateTokenLock","planTokenLock","buildErc20Approve","buildTokenLock","sched","MineTab","mine","useMyLocks","extend","setExtend","metas","cur","out","c","dd","positions","tokens","busy","act","build","posLock","tokLock","actions","positionLockActions","k","newUnlock","POSITION_ACTION_LABEL","buildCollectLockedFees","buildExtendPositionLock","buildWithdrawPosition","buildAcceptLockOwner","m","tokenLockActions","TOKEN_ACTION_LABEL","buildClaimTokenLock","buildAcceptBeneficiary","LockerWidget","wallet","useLockerWallet","account","useLockerAccount","fees","useLockerFees","hasPos","hasTok","tab","setTab","onDone","useCallback","connect","tabs","feeFor","which"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/lockCharts.tsx","../src/components/LocksWidgets.tsx","../src/components/TokenTrustPanel.tsx","../src/components/LockerWidget.tsx"],"sourcesContent":["// SPDX-License-Identifier: MIT\n/**\n * Two compact lock visuals the lock widgets share, in plain SVG / CSS (no\n * chart library, so the embed bundle stays small):\n *\n * - `ShareBar`: a whole split into its locked parts (permanent LP locker,\n * time-locked, unvested, vested-unclaimed); the empty track is \"not\n * locked\". Grows in from the left. Each part states its exact share on\n * hover (title) and to a screen reader (the bar's label).\n * - `ScheduleSpark`: a token's cumulative release schedule (the SDK's\n * `vestedAt`, the contract's own formula), drawn on, with a \"now\" rule.\n * Pointer or arrow keys read any point: its date and the amount vested by\n * then.\n *\n * Themed only by `--latch-*` properties; motion is CSS and is switched off\n * under `prefers-reduced-motion`. Nothing is drawn that was not read.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useMemo, useState, type CSSProperties, type KeyboardEvent, type PointerEvent } from \"react\";\n\nimport { formatLockAmount, formatLockBps, formatUtc, type LocksTokenMeta, type SchedulePoint, type ShareBarView } from \"../locks/model.js\";\n\nconst partText = (p: ShareBarView[\"parts\"][number]): string => (p.bps === 0 && p.nonZero ? \"<0.01%\" : formatLockBps(p.bps));\n\nexport function ShareBar({ view, label, keyed = true }: { view: ShareBarView; label: string; keyed?: boolean }): ReactElement {\n const words = view.parts.map((p) => `${p.label} ${partText(p)}`).join(\", \");\n return (\n <div className=\"latch-sharebar\" role=\"img\" aria-label={`${label}: ${words || \"nothing locked\"}, ${formatLockBps(view.restBps)} not locked, ${view.of}`}>\n <div className=\"latch-sharebar__track\">\n <div className=\"latch-sharebar__grow\">\n {view.parts.map((p) => (\n <span\n key={p.key}\n className={`latch-sharebar__part latch-sharebar__part--${p.key}`}\n style={{ width: p.bps === 0 ? \"2px\" : `${p.bps / 100}%` } as CSSProperties}\n title={`${p.label}: ${partText(p)} ${view.of}`}\n />\n ))}\n </div>\n </div>\n {keyed && view.parts.length > 1 ? (\n <ul className=\"latch-sharebar__key\" aria-hidden=\"true\">\n {view.parts.map((p) => (\n <li key={p.key}>\n <span className={`latch-sharebar__sw latch-sharebar__part--${p.key}`} />\n {p.label} {partText(p)}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\nconst W = 240;\nconst H = 44;\n\nexport function ScheduleSpark({\n points,\n total,\n now,\n token,\n}: {\n points: readonly SchedulePoint[];\n total: bigint;\n now: bigint | null;\n token: Pick<LocksTokenMeta, \"symbol\" | \"decimals\">;\n}): ReactElement | null {\n const [active, setActive] = useState<number | null>(null);\n const geo = useMemo(() => {\n if (points.length < 2 || total === 0n) return null;\n const t0 = Number(points[0]!.t);\n const t1 = Number(points[points.length - 1]!.t);\n const x = (t: bigint) => ((Number(t) - t0) / (t1 - t0)) * W;\n const y = (v: bigint) => H - 3 - (Number((v * 10_000n) / total) / 10_000) * (H - 6);\n return { x, y, d: points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${x(p.t).toFixed(1)} ${y(p.vested).toFixed(1)}`).join(\" \") };\n }, [points, total]);\n if (geo === null) return null;\n const first = points[0]!;\n const last = points[points.length - 1]!;\n const nowX = now !== null && now > first.t && now < last.t ? geo.x(now) : null;\n const pick = (e: PointerEvent<SVGSVGElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const fx = ((e.clientX - r.left) / r.width) * W;\n let best = 0;\n for (let i = 1; i < points.length; i++) if (Math.abs(geo.x(points[i]!.t) - fx) < Math.abs(geo.x(points[best]!.t) - fx)) best = i;\n setActive(best);\n };\n const onKey = (e: KeyboardEvent<SVGSVGElement>) => {\n if (e.key !== \"ArrowLeft\" && e.key !== \"ArrowRight\") return;\n e.preventDefault();\n setActive((a) => Math.max(0, Math.min(points.length - 1, (a ?? (e.key === \"ArrowLeft\" ? points.length : -1)) + (e.key === \"ArrowLeft\" ? -1 : 1))));\n };\n const at = active === null ? null : points[active]!;\n return (\n <figure className=\"latch-spark\">\n <svg\n className=\"latch-spark__svg\"\n viewBox={`0 0 ${W} ${H}`}\n preserveAspectRatio=\"none\"\n tabIndex={0}\n role=\"img\"\n aria-label={`Release schedule from ${formatUtc(first.t)} to ${formatUtc(last.t)}, ${formatLockAmount(total, token)} in all. Arrow keys read points.`}\n onPointerMove={pick}\n onPointerLeave={() => setActive(null)}\n onKeyDown={onKey}\n onBlur={() => setActive(null)}\n >\n <line className=\"latch-spark__base\" x1={0} x2={W} y1={H - 3} y2={H - 3} vectorEffect=\"non-scaling-stroke\" />\n <path className=\"latch-spark__line\" d={geo.d} fill=\"none\" vectorEffect=\"non-scaling-stroke\" />\n {nowX !== null ? <line className=\"latch-spark__now\" x1={nowX} x2={nowX} y1={1} y2={H - 3} vectorEffect=\"non-scaling-stroke\" /> : null}\n {at !== null ? <line className=\"latch-spark__cross\" x1={geo.x(at.t)} x2={geo.x(at.t)} y1={1} y2={H - 3} vectorEffect=\"non-scaling-stroke\" /> : null}\n </svg>\n <figcaption className=\"latch-spark__cap\" aria-live=\"polite\">\n {at !== null ? (\n <>\n <span className=\"latch-locks__timer\">{formatUtc(at.t)}</span> · {formatLockAmount(at.vested, token)} vested\n </>\n ) : (\n <>\n Release schedule {formatUtc(first.t).slice(0, 10)} → {formatUtc(last.t).slice(0, 10)}\n {nowX !== null ? \" · dashed line = now\" : \"\"}\n </>\n )}\n </figcaption>\n </figure>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `LocksBadge` and `LocksPanel`: \"is this liquidity (or this token) locked,\n * until when?\", read live from the Latch lock contracts.\n *\n * - `LocksBadge` is one line: the locked share of a pool's ACTIVE liquidity\n * (or of a token's supply), a countdown to the next unlock, and a link to\n * the lock page. For beside a pool or a token, anywhere.\n * - `LocksPanel` is the list: every lock with its owner, liquidity or amount,\n * unlock date, countdown and status.\n *\n * Both take a viem `PublicClient` and the lock contract's address from the\n * host's address book; `null` renders the not-deployed state instead of a\n * read. No provider, no wallet, no writes. Themed by the same `--latch-*`\n * properties as every other widget; `theme` falls back to a mounted\n * `WidgetProvider`'s, then to `system`.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useEffect, useId } from \"react\";\nimport type { PublicClient } from \"viem\";\n\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport {\n useChainClock,\n usePoolLocks,\n useTokenLocks,\n type NativeCurrencyMeta,\n type PoolLocksData,\n type TokenLocksData,\n} from \"../hooks/useLocks.js\";\nimport {\n POSITION_STATUS_LABEL,\n binPoolBadgeView,\n TOKEN_STATUS_LABEL,\n formatCountdown,\n formatLockAmount,\n formatLockBps,\n formatUtc,\n lockPageUrl,\n poolBadgeView,\n tokenBadgeView,\n vestedBps,\n binShareBar,\n poolShareBar,\n releaseSchedule,\n tokenShareBar,\n type LocksBadgeView,\n type ShareBarView,\n type LocksTarget,\n} from \"../locks/model.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\nimport { ScheduleSpark, ShareBar } from \"./lockCharts.js\";\nimport { tokenEmbedView } from \"../locks/embedModel.js\";\nimport { shortAddress } from \"../core/format.js\";\nimport type { AsyncResource } from \"../hooks/useAsyncResource.js\";\n\n/** Props shared by {@link LocksBadge} and {@link LocksPanel}. */\nexport interface LocksWidgetProps {\n /** Reads go here. The chain it is connected to is the chain the lock address is on. */\n readonly client: PublicClient;\n /** A pool id with the chain's `LatchPositionLock`, or a token with its `LatchTokenLock`. `null` address = the chain has no such contract in the host address book; the widget renders \"coming soon\". */\n readonly target: LocksTarget;\n /** Base URL of a Latch app; the widget links to `<siteUrl>/app/locks/...`. Omit to render no link. */\n readonly siteUrl?: string;\n /** The lock pages' path under `siteUrl`; default `/app/locks` (e.g. `/locks` for the public pages). */\n readonly lockPathBase?: string;\n /** Appended to the lock page URL, e.g. `net=robinhood`. */\n readonly lockQuery?: string;\n /** Anchor target for the lock page link, e.g. `_blank` when the badge is inside an iframe. */\n readonly linkTarget?: \"_blank\" | \"_top\" | \"_self\";\n /**\n * `embed`: the \"Locked by Latch\" badge's words (`../locks/embedModel.ts`): a\n * token reads as the share of supply NOT YET VESTED (\"Y% of supply locked\")\n * rather than what the locker holds. Same reads either way.\n */\n readonly wording?: \"default\" | \"embed\";\n /**\n * The Latch mark (the brand kit's `masters/latch-mark.svg`, e.g.\n * `<latch site>/brand/masters/latch-mark.svg` — or `latch-mark-onlight.svg` on a light\n * ground, because the current mark is two-tone), shown at the kit's 24 px minimum\n * beside \"Read from chain\". Omit for no mark.\n */\n readonly brandMarkUrl?: string;\n readonly theme?: WidgetTheme;\n /** Native currency display facts (default ETH, 18). */\n readonly native?: NativeCurrencyMeta;\n /** Re-read interval in ms; default 60,000. */\n readonly refetchIntervalMs?: number;\n readonly className?: string;\n}\n\ntype Loaded =\n | { readonly kind: \"pool\"; readonly res: AsyncResource<PoolLocksData> }\n | { readonly kind: \"token\"; readonly res: AsyncResource<TokenLocksData> };\n\n/** Both hooks always run (rules of hooks); the one not targeted is disabled. */\nfunction useTargetLocks(props: LocksWidgetProps): Loaded {\n const t = props.target;\n const lp = {\n ...(t.lpLocker !== undefined ? { lpLocker: t.lpLocker } : {}),\n ...(t.binLpLocker !== undefined ? { binLpLocker: t.binLpLocker } : {}),\n ...(t.lpLockerTokenIds !== undefined ? { lpLockerTokenIds: t.lpLockerTokenIds } : {}),\n ...(t.lpLockerFromBlock !== undefined ? { lpLockerFromBlock: t.lpLockerFromBlock } : {}),\n ...(t.poolType !== undefined ? { poolType: t.poolType } : {}),\n };\n const opts = { lp, ...(props.native ? { native: props.native } : {}), ...(props.refetchIntervalMs !== undefined ? { refetchIntervalMs: props.refetchIntervalMs } : {}) };\n const pool = usePoolLocks(props.client, t.kind === \"pool\" ? t.positionLock : null, t.kind === \"pool\" ? t.poolId : \"0x\", opts);\n const token = useTokenLocks(props.client, t.kind === \"token\" ? t.tokenLock : null, t.kind === \"token\" ? t.token : \"0x0000000000000000000000000000000000000000\", opts);\n return t.kind === \"pool\" ? { kind: \"pool\", res: pool } : { kind: \"token\", res: token };\n}\n\n/** Something to read: the time-lock contract, or a permanent LP locker. */\nfunction lockAddressOf(t: LocksTarget) {\n if (t.kind === \"pool\" && t.poolType === \"bin\") return t.binLpLocker ?? null;\n return (t.kind === \"pool\" ? t.positionLock : t.tokenLock) ?? t.lpLocker ?? t.binLpLocker ?? null;\n}\n\nfunction useShell(theme: WidgetTheme | undefined): WidgetTheme {\n const ctx = useOptionalWidgetContext();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n return theme ?? ctx?.theme ?? \"dark\";\n}\n\nfunction Link({ props }: { props: LocksWidgetProps }): ReactElement | null {\n if (props.siteUrl === undefined) return null;\n const t = props.target;\n const href = lockPageUrl(props.siteUrl, t.kind === \"pool\" ? { kind: \"pool\", poolId: t.poolId } : { kind: \"token\", token: t.token }, {\n ...(props.lockPathBase !== undefined ? { pathBase: props.lockPathBase } : {}),\n ...(props.lockQuery !== undefined ? { query: props.lockQuery } : {}),\n });\n return (\n <a className=\"latch-locks__link\" href={href} {...(props.linkTarget === undefined || props.linkTarget === \"_self\" ? {} : { target: props.linkTarget, rel: \"noopener noreferrer\" })}>\n {t.kind === \"pool\" ? \"Locks for this pool →\" : \"Locks for this token →\"}\n </a>\n );\n}\n\nfunction view(l: Loaded, wording: LocksWidgetProps[\"wording\"] = \"default\"): LocksBadgeView | null {\n if (l.res.data === null) return null;\n if (wording === \"embed\" && l.kind === \"token\") return tokenEmbedView(l.res.data as TokenLocksData);\n if (l.kind === \"pool\") {\n const d = l.res.data as PoolLocksData;\n return d.bin !== null ? binPoolBadgeView(d.bin, d.currency0, d.currency1) : poolBadgeView(d.summary);\n }\n const d = l.res.data as TokenLocksData;\n const empty = { locks: [], totalHeld: 0n, unvested: 0n, heldBps: null, unvestedBps: null, nextCliffOrEnd: null, lastEnd: null, totalSupply: null };\n return tokenBadgeView(d.summary ?? empty, d.token, d.permanent);\n}\n\n/** The share bar for what was read: a CL pool's active liquidity, a Bin pool's active bin, or a token's supply. */\nfunction shareView(l: Loaded): ShareBarView | null {\n if (l.res.data === null) return null;\n if (l.kind === \"pool\") {\n const d = l.res.data as PoolLocksData;\n return d.bin !== null ? binShareBar(d.bin) : poolShareBar(d.summary);\n }\n const d = l.res.data as TokenLocksData;\n if (d.summary === null) return null;\n return tokenShareBar(d.summary, d.permanent?.total ?? null);\n}\n\nfunction StateLine({ l, target }: { l: Loaded; target: LocksTarget }): ReactElement | null {\n if (lockAddressOf(target) === null) {\n return (\n <p className=\"latch-locks__headline\">\n <span className=\"latch-locks__dot latch-locks__dot--none\" aria-hidden=\"true\" />\n {target.kind === \"pool\" ? \"Latch liquidity locks are coming soon on this chain\" : \"Latch token locks are coming soon on this chain\"}\n </p>\n );\n }\n if (l.res.status === \"error\" && l.res.data === null) {\n return (\n <p className=\"latch-locks__headline latch-locks__headline--error\" role=\"status\">\n Couldn&rsquo;t load locks. Try again.\n </p>\n );\n }\n if (l.res.data === null) {\n return (\n <p className=\"latch-locks__headline latch-locks__headline--muted\" role=\"status\">\n Loading locks…\n </p>\n );\n }\n return null;\n}\n\n/** One line: the share locked, the countdown to the next unlock, a link. */\nexport function LocksBadge(props: LocksWidgetProps): ReactElement {\n const theme = useShell(props.theme);\n const l = useTargetLocks(props);\n const v = view(l, props.wording);\n const share = shareView(l);\n const data = l.res.data;\n const now = useChainClock(data?.chainNow ?? null, data?.readAtMs ?? null);\n const pending = <StateLine l={l} target={props.target} />;\n return (\n <div\n className={`latch-widget latch-locks latch-locks--badge${props.className ? ` ${props.className}` : \"\"}`}\n data-latch-theme={theme}\n data-tone={v?.tone ?? \"none\"}\n >\n {v === null ? (\n pending\n ) : (\n <>\n <p className=\"latch-locks__headline\">\n <span className={`latch-locks__dot latch-locks__dot--${v.tone}`} aria-hidden=\"true\" />\n <span>{v.headline}</span>\n </p>\n {share !== null ? <ShareBar view={share} label={v.headline} keyed={false} /> : null}\n {v.countdownTo !== null && now !== null ? (\n <p className=\"latch-locks__countdown\">\n <span className=\"latch-locks__timer\">{formatCountdown(v.countdownTo - now)}</span> to {v.countdownLabel}\n </p>\n ) : null}\n </>\n )}\n {props.brandMarkUrl !== undefined ? (\n <p className=\"latch-brand\">\n <img className=\"latch-brand__mark\" src={props.brandMarkUrl} width={665} height={765} alt=\"Latch\" />\n <span>Live from the chain</span>\n <span className=\"latch-brand__spacer\" />\n <Link props={props} />\n </p>\n ) : (\n <Link props={props} />\n )}\n </div>\n );\n}\n\n/** The list of every lock for the target, under the badge's summary. */\nexport function LocksPanel(props: LocksWidgetProps & { readonly title?: string }): ReactElement {\n const theme = useShell(props.theme);\n const headingId = useId();\n const l = useTargetLocks(props);\n const v = view(l);\n const share = shareView(l);\n const schedule = l.kind === \"token\" && l.res.data !== null ? releaseSchedule((l.res.data as TokenLocksData).summary?.locks ?? [], (l.res.data as TokenLocksData).chainNow) : null;\n const data = l.res.data;\n const now = useChainClock(data?.chainNow ?? null, data?.readAtMs ?? null);\n return (\n <section\n className={`latch-widget latch-locks latch-locks--panel${props.className ? ` ${props.className}` : \"\"}`}\n data-latch-theme={theme}\n aria-labelledby={headingId}\n >\n <header className=\"latch-header\">\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"Locks\"}\n </h2>\n <Link props={props} />\n </header>\n {v === null ? (\n <StateLine l={l} target={props.target} />\n ) : (\n <>\n <p className=\"latch-locks__headline\">\n <span className={`latch-locks__dot latch-locks__dot--${v.tone}`} aria-hidden=\"true\" />\n <span>{v.headline}</span>\n </p>\n {share !== null ? <ShareBar view={share} label={v.headline} /> : null}\n {v.detail !== null ? <p className=\"latch-note\">{v.detail}</p> : null}\n {v.countdownTo !== null && now !== null ? (\n <p className=\"latch-locks__countdown\">\n <span className=\"latch-locks__timer\">{formatCountdown(v.countdownTo - now)}</span> to {v.countdownLabel}\n </p>\n ) : null}\n {schedule !== null && l.kind === \"token\" ? <ScheduleSpark points={schedule.points} total={schedule.total} now={now} token={(l.res.data as TokenLocksData).token} /> : null}\n {l.kind === \"pool\" ? <PoolRows data={l.res.data as PoolLocksData} now={now} /> : <TokenRows data={l.res.data as TokenLocksData} now={now} />}\n </>\n )}\n <p className=\"latch-footer latch-footer--brand\">Live from the chain</p>\n </section>\n );\n}\n\nfunction PoolRows({ data, now }: { data: PoolLocksData; now: bigint | null }): ReactElement | null {\n const locks = data.summary.locks;\n const permanent = data.summary.permanent;\n const binLocks = data.bin?.locks ?? [];\n if (locks.length === 0 && permanent.length === 0 && binLocks.length === 0) return null;\n const active = data.summary.pool?.activeLiquidity ?? 0n;\n return (\n <ul className=\"latch-locks__list\">\n {permanent.map((p) => {\n const share = p.inRange === true && active > 0n ? Number((p.liquidity * 10_000n) / active) : null;\n return (\n <li key={`lp${p.tokenId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>Position #{p.tokenId.toString()}</strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Fees to</dt>\n <dd title={p.creator}>{shortAddress(p.creator)} (creator)</dd>\n </div>\n {p.amount0 !== null && p.amount1 !== null ? (\n <div>\n <dt>Holds now</dt>\n <dd title={`Liquidity ${p.liquidity.toLocaleString(\"en-US\")}`}>\n {formatLockAmount(p.amount0, data.currency0)} + {formatLockAmount(p.amount1, data.currency1)}\n {p.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n ) : (\n <div>\n <dt>Liquidity</dt>\n <dd>\n L {p.liquidity.toLocaleString(\"en-US\")}\n {p.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n )}\n <div>\n <dt>Share of active</dt>\n <dd>{share === null ? \"—\" : formatLockBps(share)}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n );\n })}\n {binLocks.map((b) => (\n <li key={`bin${b.lockId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>Bin lock #{b.lockId.toString()}</strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Bins</dt>\n <dd>\n {b.bins.length.toLocaleString(\"en-US\")}\n {b.bins.length > 0 ? ` (ids ${b.bins[0]!.binId}–${b.bins[b.bins.length - 1]!.binId})` : \"\"}\n </dd>\n </div>\n <div>\n <dt>Holds now</dt>\n <dd>\n {formatLockAmount(b.amount0, data.currency0)} + {formatLockAmount(b.amount1, data.currency1)}\n </dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n ))}\n {locks.map((lk) => {\n const share = lk.inRange === true && lk.liquidity !== null && active > 0n && lk.status === \"locked\" ? Number((lk.liquidity * 10_000n) / active) : null;\n return (\n <li key={lk.tokenId.toString()} className=\"latch-locks__item\" data-status={lk.status}>\n <div className=\"latch-locks__row\">\n <strong>Position #{lk.tokenId.toString()}</strong>\n <span className={`latch-locks__status latch-locks__status--${lk.status}`}>{POSITION_STATUS_LABEL[lk.status]}</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Lock owner</dt>\n <dd title={lk.owner}>{shortAddress(lk.owner)}</dd>\n </div>\n {lk.amount0 !== null && lk.amount1 !== null ? (\n <div>\n <dt>Holds now</dt>\n <dd title={lk.liquidity === null ? undefined : `Liquidity ${lk.liquidity.toLocaleString(\"en-US\")}`}>\n {formatLockAmount(lk.amount0, data.currency0)} + {formatLockAmount(lk.amount1, data.currency1)}\n {lk.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n ) : (\n <div>\n <dt>Liquidity</dt>\n <dd>\n {lk.liquidity === null ? \"—\" : `L ${lk.liquidity.toLocaleString(\"en-US\")}`}\n {lk.inRange === false ? \" · out of range\" : \"\"}\n </dd>\n </div>\n )}\n <div>\n <dt>Share of active</dt>\n <dd>{share === null ? \"—\" : formatLockBps(share)}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>\n {formatUtc(lk.unlockAt)}\n {lk.status === \"locked\" && now !== null ? <span className=\"latch-locks__timer\"> · {formatCountdown(lk.unlockAt - now)}</span> : null}\n </dd>\n </div>\n </dl>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction TokenRows({ data, now }: { data: TokenLocksData; now: bigint | null }): ReactElement | null {\n const locks = data.summary?.locks ?? [];\n const lpPools = data.permanent?.pools ?? [];\n if (locks.length === 0 && lpPools.length === 0) return null;\n const supply = data.summary?.totalSupply ?? null;\n return (\n <ul className=\"latch-locks__list\">\n {lpPools.map((p) => (\n <li key={`${p.kind}${p.poolId}`} className=\"latch-locks__item\" data-status=\"permanent\">\n <div className=\"latch-locks__row\">\n <strong>\n {p.kind === \"cl-lp-locker\" ? \"CL\" : \"Bin\"} pool {p.poolId.slice(0, 10)}…\n </strong>\n <span className=\"latch-locks__status latch-locks__status--permanent\">Locked permanently (LP locker)</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>{data.token.symbol} in the locked liquidity</dt>\n <dd>\n {formatLockAmount(p.amount, data.token)}\n {supply !== null && supply > 0n ? ` · ${formatLockBps(Number((p.amount * 10_000n) / supply))} of supply` : \"\"}\n </dd>\n </div>\n <div>\n <dt>Locks</dt>\n <dd>{p.locks.toLocaleString(\"en-US\")}</dd>\n </div>\n <div>\n <dt>Unlocks</dt>\n <dd>never: the LP locker has no withdraw path</dd>\n </div>\n </dl>\n </li>\n ))}\n {locks.map((lk) => {\n const remaining = lk.amount - lk.claimed;\n const pct = supply === null || supply === 0n ? null : Number((remaining * 10_000n) / supply);\n const next = lk.status === \"cliff\" ? lk.cliff : lk.status === \"vesting\" ? lk.end : null;\n const vb = vestedBps(lk);\n return (\n <li key={lk.lockId.toString()} className=\"latch-locks__item\" data-status={lk.status}>\n <div className=\"latch-locks__row\">\n <strong>Lock #{lk.lockId.toString()}</strong>\n <span className={`latch-locks__status latch-locks__status--${lk.status}`}>{TOKEN_STATUS_LABEL[lk.status]}</span>\n </div>\n <dl className=\"latch-locks__facts\">\n <div>\n <dt>Beneficiary</dt>\n <dd title={lk.beneficiary}>{shortAddress(lk.beneficiary)}</dd>\n </div>\n <div>\n <dt>Amount</dt>\n <dd>{formatLockAmount(lk.amount, data.token)}</dd>\n </div>\n <div>\n <dt>Still held</dt>\n <dd>\n {formatLockAmount(remaining, data.token)}\n {pct !== null ? ` · ${formatLockBps(pct)} of supply` : \"\"}\n </dd>\n </div>\n <div>\n <dt>{lk.start === lk.end ? \"Unlocks\" : \"Vesting\"}</dt>\n <dd>\n {lk.start === lk.end ? formatUtc(lk.end) : `${formatUtc(lk.start)} → ${formatUtc(lk.end)}${lk.cliff > lk.start ? `, cliff ${formatUtc(lk.cliff)}` : \"\"}`}\n {next !== null && now !== null ? <span className=\"latch-locks__timer\"> · {formatCountdown(next - now)}</span> : null}\n </dd>\n </div>\n </dl>\n <div className=\"latch-progress\" role=\"img\" aria-label={`${formatLockBps(vb)} vested`}>\n <div className=\"latch-progress-fill\" style={{ width: `${vb / 100}%` }} />\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `TokenTrustPanel`: one place, for one token, with what the Latch contracts\n * hold about it - its liquidity locks per pool (time-locked and permanent LP\n * locker, as the locked share of ACTIVE liquidity), its token locks and\n * vesting, the creator tax a Kit v2 launch guard takes, each pool's LP fee and\n * protocol fee, and what LatchRegistry records about each pool's hook. Every\n * row names the contract, the view and the blocks it was read at.\n *\n * Read-only: a viem `PublicClient` and the chain's contract addresses from the\n * host's address book. No wallet, no provider. Four states, each distinct:\n * reading, the rows, \"could not be read\" when the chain does not answer, and\n * \"coming soon\" when `contracts` is `null` — a feature that has not arrived is not an outage, and the two read differently. It never says\n * \"safe\": a listing is what the registry records, not an audit.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useEffect, useId } from \"react\";\nimport type { Address, Hex, PublicClient } from \"viem\";\n\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport { useTokenTrust, type TokenTrustTarget } from \"../hooks/useTokenTrust.js\";\nimport { tokenTrustView, type TrustRowView } from \"../trust/model.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\nimport { ShareBar } from \"./lockCharts.js\";\n\nexport interface TokenTrustPanelProps extends TokenTrustTarget {\n readonly client: PublicClient;\n readonly theme?: WidgetTheme;\n readonly title?: string;\n /** Links each source contract to an explorer. Return `null` for no link (e.g. a devnet). */\n readonly explorerAddressUrl?: (address: Address) => string | null;\n /** Links each pool to its lock page. Return `null` for no link. */\n readonly poolLockUrl?: (poolId: Hex) => string | null;\n /** Anchor target for those links, e.g. `_blank` inside an iframe. */\n readonly linkTarget?: \"_blank\" | \"_top\" | \"_self\";\n readonly refetchIntervalMs?: number;\n readonly className?: string;\n}\n\nfunction linkProps(target: TokenTrustPanelProps[\"linkTarget\"]): { target?: string; rel?: string } {\n return target === undefined || target === \"_self\" ? {} : { target, rel: \"noopener noreferrer\" };\n}\n\nfunction Row({ r, props }: { r: TrustRowView; props: TokenTrustPanelProps }): ReactElement {\n return (\n <div className=\"latch-trust__row\" data-tone={r.tone}>\n <dt className=\"latch-trust__label\">{r.label}</dt>\n <dd className=\"latch-trust__value\">\n <p className=\"latch-trust__headline\">\n <span className={`latch-trust__dot latch-trust__dot--${r.tone}`} aria-hidden=\"true\" />\n <span>{r.headline}</span>\n </p>\n {r.share ? <ShareBar view={r.share} label={`${r.label}: ${r.headline}`} /> : null}\n {r.detail !== null ? <p className=\"latch-trust__detail\">{r.detail}</p> : null}\n {r.sources.length > 0 ? (\n <p className=\"latch-trust__source\">\n {r.sources.map((s, i) => {\n const href = props.explorerAddressUrl?.(s.address) ?? null;\n const text = r.provenance[i] ?? s.contract;\n return (\n <span key={`${s.address}${i}`} className=\"latch-trust__source-item\">\n {href === null ? (\n text\n ) : (\n <a href={href} {...linkProps(props.linkTarget ?? \"_blank\")}>\n {text}\n </a>\n )}\n </span>\n );\n })}\n </p>\n ) : null}\n </dd>\n </div>\n );\n}\n\nexport function TokenTrustPanel(props: TokenTrustPanelProps): ReactElement {\n const ctx = useOptionalWidgetContext();\n const theme = props.theme ?? ctx?.theme ?? \"dark\";\n const headingId = useId();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n const res = useTokenTrust(props.client, props, props.refetchIntervalMs === undefined ? {} : { refetchIntervalMs: props.refetchIntervalMs });\n const data = res.data;\n const view = data === null ? null : tokenTrustView(data.trust, data.symbols);\n\n let body: ReactElement;\n if (props.contracts === null) {\n body = (\n <p className=\"latch-trust__state\" role=\"status\">\n Latch is coming soon on this chain, so nothing about this token can be read from its contracts yet.\n </p>\n );\n } else if (view === null && res.status === \"error\") {\n body = (\n <p className=\"latch-trust__state latch-trust__state--error\" role=\"alert\">\n Couldn&rsquo;t load. Try again.{\" \"}\n <button type=\"button\" className=\"latch-trust__retry\" onClick={res.refetch}>\n Retry\n </button>\n </p>\n );\n } else if (view === null) {\n body = (\n <p className=\"latch-trust__state\" role=\"status\">\n Loading…\n </p>\n );\n } else {\n body = (\n <>\n <dl className=\"latch-trust__list\">\n <Row r={view.launch} props={props} />\n <Row r={view.tokenLocks} props={props} />\n <Row r={view.creatorTax} props={props} />\n </dl>\n <h3 className=\"latch-trust__subhead\">Pools</h3>\n {view.pools.length === 0 ? (\n <p className=\"latch-trust__state\">No pool of this token was found through a Latch launch, lock or this page&rsquo;s pool list.</p>\n ) : (\n view.pools.map((p) => {\n const href = props.poolLockUrl?.(p.poolId) ?? null;\n return (\n <section key={p.poolId} className=\"latch-trust__pool\" aria-label={p.title}>\n <header className=\"latch-trust__pool-head\">\n <strong>{p.title}</strong>\n <code title={p.poolId}>\n {p.poolId.slice(0, 10)}…{p.poolId.slice(-6)}\n </code>\n {href !== null ? (\n <a className=\"latch-trust__link\" href={href} {...linkProps(props.linkTarget)}>\n Locks →\n </a>\n ) : null}\n </header>\n <p className=\"latch-trust__found\">{p.foundBy}</p>\n <dl className=\"latch-trust__list\">\n {p.rows.map((r) => (\n <Row key={r.key} r={r} props={props} />\n ))}\n </dl>\n </section>\n );\n })\n )}\n {view.failedPools.map((f) => (\n <p key={f} className=\"latch-trust__state latch-trust__state--error\">\n {f}\n </p>\n ))}\n <p className=\"latch-note\">{view.discoveryNote}</p>\n {res.status === \"error\" ? <p className=\"latch-note latch-note--warn\">The last refresh failed; these rows are from the previous read.</p> : null}\n <p className=\"latch-footer latch-footer--brand\">{view.readAtNote}</p>\n </>\n );\n }\n\n return (\n <section className={`latch-widget latch-trust${props.className ? ` ${props.className}` : \"\"}`} data-latch-theme={theme} aria-labelledby={headingId}>\n <header className=\"latch-header\">\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"What the contracts say\"}\n </h2>\n </header>\n {body}\n </section>\n );\n}\n","// SPDX-License-Identifier: MIT\n/**\n * `LockerWidget`: lock liquidity and tokens with Latch from any React app.\n *\n * Lock liquidity time-lock a CL position NFT in `LatchPositionLock`\n * Lock tokens a time lock or cliff + linear vesting in `LatchTokenLock`\n * My locks the connected wallet's locks: collect fees, extend,\n * withdraw after the date, claim what has vested, accept an\n * offered lock\n *\n * The fee is read live from each contract (`feeWei` and any announced\n * `pendingFee`) and shown before anything is signed; it is the contract's, not\n * this widget's, so every caller pays the same. Approvals are exact (this one\n * NFT; exactly the amount), and only when the chain says one is missing. Every\n * call is simulated with its exact bytes before the wallet sees it, and every\n * receipt is checked: a mined revert is reported as one. Errors read through\n * the widgets' decoder.\n *\n * The wallet is `wallet` (the `WidgetWallet` surface `createViemAdapter`\n * takes), else the mounted `WidgetProvider`'s adapter. Reads go through\n * `client`, on the lock contracts' chain.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useCallback, useEffect, useId, useMemo, useState } from \"react\";\nimport { erc20Abi, getAddress, isAddress, zeroAddress, type Address, type Hex, type PublicClient } from \"viem\";\nimport { CL_POSITION_MANAGER_ABI } from \"@latchprotocol/sdk\";\nimport {\n buildAcceptBeneficiary,\n buildAcceptLockOwner,\n buildApprovePositionForLock,\n buildClaimTokenLock,\n buildCollectLockedFees,\n buildErc20Approve,\n buildExtendPositionLock,\n buildLockPosition,\n buildTokenLock,\n buildWithdrawPosition,\n readChainNow,\n readErc20Allowance,\n readFeeGate,\n readPositionApproval,\n readPositionLockContext,\n validatePositionLock,\n validateTokenLock,\n} from \"@latchprotocol/sdk/lock\";\n\nimport type { WidgetWallet } from \"../adapters/viem.js\";\nimport { useOptionalWidgetContext, type WidgetTheme } from \"../context/WidgetProvider.js\";\nimport { useAsyncResource } from \"../hooks/useAsyncResource.js\";\nimport { useLockerAccount, useLockerFees, useLockerRunner, useLockerWallet, useMyLocks, type LockerContracts, type RunnerState, type RunnerStep } from \"../hooks/useLocker.js\";\nimport {\n POSITION_ACTION_LABEL,\n TOKEN_ACTION_LABEL,\n lockSchedule,\n lockerFeeView,\n parseDays,\n parseLockAmount,\n parseUtcInput,\n planPositionLock,\n planTokenLock,\n positionLockActions,\n toUtcInput,\n tokenLockActions,\n type VestingMode,\n} from \"../locker/model.js\";\nimport { formatLockAmount, formatLockBps, formatUtc, releaseSchedule, vestedBps } from \"../locks/model.js\";\nimport { ScheduleSpark } from \"./lockCharts.js\";\nimport { injectWidgetStyles } from \"../styles/css.js\";\n\nexport interface LockerWidgetProps {\n readonly client: PublicClient;\n readonly contracts: LockerContracts;\n readonly wallet?: WidgetWallet;\n readonly native?: { readonly symbol: string; readonly decimals: number };\n readonly theme?: WidgetTheme;\n readonly title?: string;\n readonly defaultTab?: LockerTab;\n /** Prefill the token tab. */\n readonly defaultToken?: Address;\n /** Opens the host's wallet connect flow; falls back to the provider's. */\n readonly onConnectRequest?: () => void;\n /** Links a transaction hash to an explorer; `null` for no link. */\n readonly explorerTxUrl?: (hash: Hex) => string | null;\n /** The Latch mark (brand kit `masters/latch-mark.svg`, or `-onlight` on a light ground) beside the\n * title, at the kit's 24 px minimum. The intrinsic size is the master's real viewBox so the shape\n * is reserved correctly; CSS decides how big it draws. Omit for none. */\n readonly brandMarkUrl?: string;\n readonly className?: string;\n}\n\nexport type LockerTab = \"position\" | \"token\" | \"mine\";\n\nconst DEFAULT_NATIVE = { symbol: \"ETH\", decimals: 18 };\nconst short = (a: string): string => `${a.slice(0, 6)}…${a.slice(-4)}`;\n\nfunction Progress({ state, explorerTxUrl }: { state: RunnerState; explorerTxUrl: LockerWidgetProps[\"explorerTxUrl\"] }): ReactElement | null {\n if (state.k === \"idle\") return null;\n const labels = state.labels;\n const active = state.k === \"done\" ? labels.length : state.active;\n return (\n <div role=\"status\" aria-live=\"polite\">\n <ol className=\"latch-locker__steps\">\n {labels.map((l, i) => (\n <li key={l} data-state={i < active ? \"done\" : i === active && state.k === \"running\" ? \"active\" : \"pending\"}>\n {l}\n </li>\n ))}\n </ol>\n {state.k === \"running\" ? (\n <p className=\"latch-locker__status\">\n {state.phase === \"simulating\" ? \"Simulating the exact transaction…\" : state.phase === \"signing\" ? \"Confirm in your wallet…\" : \"Waiting for the receipt…\"}\n </p>\n ) : state.k === \"failed\" ? (\n <p className=\"latch-locker__status\" data-kind=\"error\">\n {state.message}\n </p>\n ) : (\n <p className=\"latch-locker__status\" data-kind=\"success\">\n Done: every receipt succeeded.{\" \"}\n {state.hashes.map((h) => {\n const href = explorerTxUrl?.(h) ?? null;\n return href === null ? (\n <code key={h}>{short(h)} </code>\n ) : (\n <a key={h} href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {short(h)}{\" \"}\n </a>\n );\n })}\n </p>\n )}\n </div>\n );\n}\n\nfunction FeeBox({ terms, native }: { terms: Parameters<typeof lockerFeeView>[0] | null | undefined; native: { symbol: string; decimals: number } }): ReactElement {\n if (terms === undefined) return <p className=\"latch-locker__fee\">Loading the fee…</p>;\n if (terms === null) return <p className=\"latch-locker__fee\">Couldn&rsquo;t load the fee. Try again.</p>;\n const v = lockerFeeView(terms, native);\n return (\n <p className=\"latch-locker__fee\">\n <span>\n Fee <strong>{v.fee}</strong>, sends <strong>{v.sends}</strong>\n </span>\n {v.pending !== null ? <span>{v.pending}</span> : null}\n <span className=\"latch-note\">{v.note}</span>\n </p>\n );\n}\n\n/* ------------------------------------------------------------ position tab --- */\n\nfunction PositionTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null; fee: Parameters<typeof lockerFeeView>[0] | null | undefined; onDone: () => void }): ReactElement {\n const { client, contracts } = p.props;\n const lock = contracts.positionLock as Address;\n const [tokenIdText, setTokenId] = useState(\"\");\n const [unlockText, setUnlock] = useState(\"\");\n const [ownerText, setOwner] = useState(\"\");\n const tokenId = /^\\d+$/.test(tokenIdText.trim()) ? BigInt(tokenIdText.trim()) : null;\n const unlockAt = parseUtcInput(unlockText);\n const owner = ownerText.trim() === \"\" ? p.account : isAddress(ownerText.trim(), { strict: false }) ? getAddress(ownerText.trim()) : null;\n\n const pos = useAsyncResource(\n async () => {\n const ctx = await readPositionLockContext(client, lock);\n const id = tokenId as bigint;\n const [nftOwner, info, approved, now] = await Promise.all([\n client.readContract({ address: ctx.positionManager, abi: CL_POSITION_MANAGER_ABI, functionName: \"ownerOf\", args: [id] }).catch(() => null),\n client.readContract({ address: ctx.positionManager, abi: CL_POSITION_MANAGER_ABI, functionName: \"positions\", args: [id] }).catch(() => null),\n p.account === null ? Promise.resolve(false) : readPositionApproval(client, { positionManager: ctx.positionManager, lock, tokenId: id, owner: p.account }).catch(() => false),\n readChainNow(client),\n ]);\n return { ctx, nftOwner, liquidity: info === null ? null : (info[3] as bigint), approved, now };\n },\n [client, lock, tokenId, p.account],\n { enabled: tokenId !== null },\n );\n const d = pos.data;\n useEffect(() => {\n if (unlockText === \"\" && d !== null) setUnlock(toUtcInput(d.now + 30n * 86_400n));\n }, [d, unlockText]);\n\n const issues: string[] = [];\n if (tokenIdText.trim() !== \"\" && tokenId === null) issues.push(\"The position id is a whole number.\");\n if (d !== null && tokenId !== null) {\n if (d.nftOwner === null) issues.push(`Position #${tokenId} does not exist on this position manager.`);\n else if (p.account !== null && d.nftOwner.toLowerCase() !== p.account.toLowerCase()) issues.push(`Position #${tokenId} is owned by ${short(d.nftOwner)}, not the connected wallet.`);\n if (d.liquidity === 0n) issues.push(\"The position holds no liquidity.\");\n if (unlockAt === null) issues.push(\"Choose an unlock date.\");\n else for (const i of validatePositionLock({ unlockAt, owner: owner ?? \"\", nowSeconds: d.now, lock })) issues.push(i.message);\n }\n const runner = useLockerRunner(client, p.wallet, p.account, p.onDone);\n const ready = d !== null && tokenId !== null && unlockAt !== null && owner !== null && issues.length === 0 && p.account !== null && runner.state.k !== \"running\";\n const plan = ready ? planPositionLock({ tokenId: tokenId as bigint, approved: d.approved, unlockAt: unlockAt as bigint }) : [];\n\n const go = (): void => {\n if (!ready) return;\n const id = tokenId as bigint;\n const steps: RunnerStep[] = plan.map((s) => ({\n label: s.label,\n build:\n s.key === \"approve\"\n ? async () => buildApprovePositionForLock({ positionManager: d.ctx.positionManager, lock, tokenId: id })\n : async () => buildLockPosition({ lock, tokenId: id, unlockAt: unlockAt as bigint, owner: owner as Address, terms: await readFeeGate(client, lock) }),\n }));\n void runner.run(steps);\n };\n\n return (\n <div className=\"latch-locker__form\">\n <label className=\"latch-locker__field\">\n <span>Position id (CL position NFT)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={tokenIdText} onChange={(e) => setTokenId(e.target.value)} placeholder=\"Position id\" />\n </label>\n {d !== null && d.liquidity !== null ? <p className=\"latch-note\">Liquidity L {d.liquidity.toLocaleString(\"en-US\")}{d.approved ? \" · already approved to the lock\" : \"\"}</p> : null}\n {pos.status === \"error\" ? <p className=\"latch-locker__status\" data-kind=\"error\">Couldn&rsquo;t load the position. Try again.</p> : null}\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Unlock (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={unlockText} onChange={(e) => setUnlock(e.target.value)} />\n </label>\n <label className=\"latch-locker__field\">\n <span>Lock owner</span>\n <input className=\"latch-locker__input\" value={ownerText} onChange={(e) => setOwner(e.target.value)} placeholder={p.account === null ? \"0x…\" : `${short(p.account)} (you)`} />\n </label>\n </div>\n {issues.length > 0 ? (\n <ul className=\"latch-locker__issues\">\n {issues.map((i) => (\n <li key={i}>{i}</li>\n ))}\n </ul>\n ) : null}\n <FeeBox terms={p.fee} native={p.props.native ?? DEFAULT_NATIVE} />\n <p className=\"latch-note\">Until the unlock date nobody can remove the liquidity or move the NFT. The lock owner keeps collecting its swap fees and withdraws after the date. A lock can be extended, never shortened.</p>\n <button type=\"button\" className=\"latch-cta\" disabled={!ready} onClick={go}>\n {plan.length > 1 ? \"Approve and lock\" : \"Lock position\"}\n </button>\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* --------------------------------------------------------------- token tab --- */\n\nfunction TokenTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null; fee: Parameters<typeof lockerFeeView>[0] | null | undefined; onDone: () => void }): ReactElement {\n const { client, contracts } = p.props;\n const lock = contracts.tokenLock as Address;\n const native = p.props.native ?? DEFAULT_NATIVE;\n const [isNative, setIsNative] = useState(false);\n const [tokenText, setToken] = useState(p.props.defaultToken ?? \"\");\n const [amountText, setAmount] = useState(\"\");\n const [benText, setBen] = useState(\"\");\n const [mode, setMode] = useState<VestingMode>(\"timelock\");\n const [unlockText, setUnlock] = useState(\"\");\n const [startText, setStart] = useState(\"\");\n const [cliffText, setCliff] = useState(\"0\");\n const [durText, setDur] = useState(\"365\");\n const token: Address | null = isNative ? zeroAddress : isAddress(tokenText.trim(), { strict: false }) ? getAddress(tokenText.trim()) : null;\n const beneficiary = benText.trim() === \"\" ? p.account : isAddress(benText.trim(), { strict: false }) ? getAddress(benText.trim()) : null;\n\n const tok = useAsyncResource(\n async () => {\n const t = token as Address;\n const [symbol, decimals, balance, allowance, now] = await Promise.all([\n isNative ? Promise.resolve(native.symbol) : client.readContract({ address: t, abi: erc20Abi, functionName: \"symbol\" }),\n isNative ? Promise.resolve(native.decimals) : client.readContract({ address: t, abi: erc20Abi, functionName: \"decimals\" }),\n p.account === null ? Promise.resolve(null) : isNative ? client.getBalance({ address: p.account }) : client.readContract({ address: t, abi: erc20Abi, functionName: \"balanceOf\", args: [p.account] }),\n p.account === null || isNative ? Promise.resolve(0n) : readErc20Allowance(client, t, p.account, lock),\n readChainNow(client),\n ]);\n return { symbol, decimals: Number(decimals), balance, allowance, now };\n },\n [client, token, isNative, p.account, lock],\n { enabled: token !== null },\n );\n const d = tok.data;\n useEffect(() => {\n if (d === null) return;\n if (unlockText === \"\") setUnlock(toUtcInput(d.now + 30n * 86_400n));\n if (startText === \"\") setStart(toUtcInput(d.now + 3600n));\n }, [d, unlockText, startText]);\n\n const amount = d === null ? null : parseLockAmount(amountText, d.decimals);\n const schedule = lockSchedule(mode, { unlockAt: parseUtcInput(unlockText), start: parseUtcInput(startText), cliffDays: parseDays(cliffText), durationDays: parseDays(durText) });\n const issues: string[] = [];\n if (!isNative && tokenText.trim() !== \"\" && token === null) issues.push(\"The token is not an address.\");\n if (tok.status === \"error\" && d === null) issues.push(\"The token could not be read: is it an ERC-20 on this chain?\");\n if (d !== null) {\n if (amountText.trim() !== \"\" && amount === null) issues.push(`Enter an amount with at most ${d.decimals} decimals.`);\n if (amount !== null && d.balance !== null && amount > d.balance) issues.push(`The connected wallet holds ${formatLockAmount(d.balance, { symbol: d.symbol, decimals: d.decimals })}.`);\n if (schedule === null) issues.push(mode === \"timelock\" ? \"Choose an unlock date.\" : \"Set a start date, a cliff and a duration in whole days.\");\n else if (amount !== null) for (const i of validateTokenLock({ currency: token as string, amount, beneficiary: beneficiary ?? \"\", schedule, nowSeconds: d.now, lock })) issues.push(i.message);\n }\n const runner = useLockerRunner(client, p.wallet, p.account, p.onDone);\n const ready = d !== null && amount !== null && amount > 0n && schedule !== null && beneficiary !== null && issues.length === 0 && p.account !== null && runner.state.k !== \"running\";\n const plan = ready ? planTokenLock({ native: isNative, allowance: d.allowance, amount: amount as bigint, amountText: amountText.trim(), symbol: d.symbol }) : [];\n\n const go = (): void => {\n if (!ready) return;\n const steps: RunnerStep[] = plan.map((s) => ({\n label: s.label,\n build:\n s.key === \"approve\"\n ? async () => buildErc20Approve({ token: token as Address, spender: lock, amount: amount as bigint })\n : async () => buildTokenLock({ lock, currency: token as Address, amount: amount as bigint, beneficiary: beneficiary as Address, schedule, terms: await readFeeGate(client, lock) }),\n }));\n void runner.run(steps);\n };\n\n return (\n <div className=\"latch-locker__form\">\n <div className=\"latch-locker__choice\" role=\"radiogroup\" aria-label=\"Currency\">\n <label>\n <input type=\"radio\" checked={!isNative} onChange={() => setIsNative(false)} /> ERC-20 token\n </label>\n <label>\n <input type=\"radio\" checked={isNative} onChange={() => setIsNative(true)} /> Native {native.symbol}\n </label>\n </div>\n {!isNative ? (\n <label className=\"latch-locker__field\">\n <span>Token address</span>\n <input className=\"latch-locker__input\" value={tokenText} onChange={(e) => setToken(e.target.value)} placeholder=\"0x…\" spellCheck={false} />\n </label>\n ) : null}\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Amount{d !== null ? ` (${d.symbol})` : \"\"}</span>\n <input className=\"latch-locker__input\" inputMode=\"decimal\" value={amountText} onChange={(e) => setAmount(e.target.value)} placeholder=\"0.0\" />\n </label>\n <label className=\"latch-locker__field\">\n <span>Beneficiary</span>\n <input className=\"latch-locker__input\" value={benText} onChange={(e) => setBen(e.target.value)} placeholder={p.account === null ? \"0x…\" : `${short(p.account)} (you)`} spellCheck={false} />\n </label>\n </div>\n {d !== null && d.balance !== null ? <p className=\"latch-note\">Balance {formatLockAmount(d.balance, { symbol: d.symbol, decimals: d.decimals })}</p> : null}\n <div className=\"latch-locker__choice\" role=\"radiogroup\" aria-label=\"Schedule\">\n <label>\n <input type=\"radio\" checked={mode === \"timelock\"} onChange={() => setMode(\"timelock\")} /> Time lock (all at one date)\n </label>\n <label>\n <input type=\"radio\" checked={mode === \"vesting\"} onChange={() => setMode(\"vesting\")} /> Vesting (cliff, then linear)\n </label>\n </div>\n {mode === \"timelock\" ? (\n <label className=\"latch-locker__field\">\n <span>Unlock (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={unlockText} onChange={(e) => setUnlock(e.target.value)} />\n </label>\n ) : (\n <>\n <label className=\"latch-locker__field\">\n <span>Vesting starts (UTC)</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={startText} onChange={(e) => setStart(e.target.value)} />\n </label>\n <div className=\"latch-locker__row2\">\n <label className=\"latch-locker__field\">\n <span>Cliff (days after start)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={cliffText} onChange={(e) => setCliff(e.target.value)} />\n </label>\n <label className=\"latch-locker__field\">\n <span>Fully vested (days after start)</span>\n <input className=\"latch-locker__input\" inputMode=\"numeric\" value={durText} onChange={(e) => setDur(e.target.value)} />\n </label>\n </div>\n </>\n )}\n {schedule !== null && mode === \"vesting\" ? <p className=\"latch-note\">Nothing claimable before {formatUtc(schedule.cliff)}; everything vested at {formatUtc(schedule.end)}.</p> : null}\n {schedule !== null && mode === \"vesting\" && d !== null && amount !== null && amount > 0n\n ? (() => {\n const sched = releaseSchedule([{ ...schedule, amount }], d.now);\n return sched === null ? null : <ScheduleSpark points={sched.points} total={sched.total} now={d.now} token={{ symbol: d.symbol, decimals: d.decimals }} />;\n })()\n : null}\n {issues.length > 0 ? (\n <ul className=\"latch-locker__issues\">\n {issues.map((i) => (\n <li key={i}>{i}</li>\n ))}\n </ul>\n ) : null}\n <FeeBox terms={p.fee} native={native} />\n <p className=\"latch-note\">The schedule is fixed at creation: no key can shorten, revoke or redirect it. The beneficiary claims what has vested, to any address.</p>\n <button type=\"button\" className=\"latch-cta\" disabled={!ready} onClick={go}>\n {plan.length > 1 ? \"Approve and lock\" : \"Lock tokens\"}\n </button>\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* ---------------------------------------------------------------- my locks --- */\n\nfunction MineTab(p: { props: LockerWidgetProps; account: Address | null; wallet: WidgetWallet | null }): ReactElement {\n const { client, contracts } = p.props;\n const mine = useMyLocks(client, contracts, p.account);\n const runner = useLockerRunner(client, p.wallet, p.account, mine.refetch);\n const [extend, setExtend] = useState<Record<string, string>>({});\n const native = p.props.native ?? DEFAULT_NATIVE;\n const metas = useAsyncResource(\n async () => {\n const cur = [...new Set((mine.data?.tokens ?? []).map((t) => t.currency.toLowerCase()))] as Address[];\n const out: Record<string, { symbol: string; decimals: number | null }> = {};\n await Promise.all(\n cur.map(async (c) => {\n if (c === zeroAddress) out[c] = native;\n else {\n const [s, dd] = await Promise.all([\n client.readContract({ address: c, abi: erc20Abi, functionName: \"symbol\" }).catch(() => short(c)),\n client.readContract({ address: c, abi: erc20Abi, functionName: \"decimals\" }).catch(() => null),\n ]);\n out[c] = { symbol: s, decimals: dd === null ? null : Number(dd) };\n }\n }),\n );\n return out;\n },\n [client, (mine.data?.tokens ?? []).map((t) => t.currency).join(\",\")],\n { enabled: (mine.data?.tokens.length ?? 0) > 0 },\n );\n if (p.account === null) return <p className=\"latch-trust__state\">Connect a wallet to see its locks.</p>;\n if (mine.data === null) {\n return mine.status === \"error\" ? (\n <p className=\"latch-locker__status\" data-kind=\"error\">\n Couldn&rsquo;t load the locks.{\" \"}\n <button type=\"button\" className=\"latch-trust__retry\" onClick={mine.refetch}>\n Retry\n </button>\n </p>\n ) : (\n <p className=\"latch-trust__state\">Loading your locks…</p>\n );\n }\n const { positions, tokens, now } = mine.data;\n const busy = runner.state.k === \"running\";\n const act = (label: string, build: RunnerStep[\"build\"]): void => void runner.run([{ label, build }]);\n const posLock = contracts.positionLock;\n const tokLock = contracts.tokenLock;\n return (\n <div className=\"latch-locker__form\">\n {positions.length === 0 && tokens.length === 0 ? <p className=\"latch-trust__state\">This wallet owns no lock and has been offered none.</p> : null}\n {posLock !== null && positions.length > 0 ? (\n <ul className=\"latch-locks__list\">\n {positions.map((r) => {\n const actions = positionLockActions(r, p.account, now);\n const k = r.tokenId.toString();\n const newUnlock = parseUtcInput(extend[k] ?? \"\");\n return (\n <li key={k} className=\"latch-locks__item\" data-status={r.withdrawn ? \"withdrawn\" : now < r.unlockAt ? \"locked\" : \"unlockable\"}>\n <div className=\"latch-locks__row\">\n <strong>Position #{k}</strong>\n <span className=\"latch-locks__status\">{r.withdrawn ? \"Withdrawn\" : now < r.unlockAt ? \"Locked\" : \"Unlockable\"}</span>\n </div>\n <p className=\"latch-note\">\n Unlocks {formatUtc(r.unlockAt)} · pool {r.poolId.slice(0, 10)}…{r.pendingOwner !== null ? ` · offered to ${short(r.pendingOwner)}` : \"\"}\n </p>\n {actions.includes(\"extend\") ? (\n <label className=\"latch-locker__field\">\n <span>New unlock (UTC), later than the current one</span>\n <input className=\"latch-locker__input\" type=\"datetime-local\" value={extend[k] ?? toUtcInput(r.unlockAt)} onChange={(e) => setExtend({ ...extend, [k]: e.target.value })} />\n </label>\n ) : null}\n <div className=\"latch-locker__actions\">\n {actions.map((a) => (\n <button\n key={a}\n type=\"button\"\n className=\"latch-locker__btn\"\n disabled={busy || (a === \"extend\" && (newUnlock === null || newUnlock <= r.unlockAt))}\n onClick={() =>\n act(\n `${POSITION_ACTION_LABEL[a]}: position #${k}`,\n async () =>\n a === \"collect\"\n ? buildCollectLockedFees({ lock: posLock, tokenId: r.tokenId })\n : a === \"extend\"\n ? buildExtendPositionLock({ lock: posLock, tokenId: r.tokenId, newUnlockAt: newUnlock as bigint })\n : a === \"withdraw\"\n ? buildWithdrawPosition({ lock: posLock, tokenId: r.tokenId, to: p.account as Address })\n : buildAcceptLockOwner({ lock: posLock, tokenId: r.tokenId }),\n )\n }\n >\n {POSITION_ACTION_LABEL[a]}\n </button>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n {tokLock !== null && tokens.length > 0 ? (\n <ul className=\"latch-locks__list\">\n {tokens.map((l) => {\n const m = metas.data?.[l.currency.toLowerCase()] ?? { symbol: short(l.currency), decimals: null };\n const actions = tokenLockActions(l, p.account);\n return (\n <li key={l.lockId.toString()} className=\"latch-locks__item\" data-status={l.status}>\n <div className=\"latch-locks__row\">\n <strong>Lock #{l.lockId.toString()}</strong>\n <span className=\"latch-locks__status\">{l.status === \"cliff\" ? \"Before cliff\" : l.status === \"vesting\" ? \"Vesting\" : l.status === \"vested\" ? \"Fully vested\" : \"Claimed\"}</span>\n </div>\n <div className=\"latch-progress\" role=\"img\" aria-label={`${formatLockBps(vestedBps(l))} vested`}>\n <div className=\"latch-progress-fill\" style={{ width: `${vestedBps(l) / 100}%` }} />\n </div>\n <p className=\"latch-note\">\n {formatLockAmount(l.amount, m)} · claimable {formatLockAmount(l.claimable, m)} · {l.start === l.end ? `unlocks ${formatUtc(l.end)}` : `vests ${formatUtc(l.start)} → ${formatUtc(l.end)}`}\n </p>\n <div className=\"latch-locker__actions\">\n {actions.map((a) => (\n <button\n key={a}\n type=\"button\"\n className=\"latch-locker__btn\"\n disabled={busy}\n onClick={() =>\n act(`${TOKEN_ACTION_LABEL[a]}: lock #${l.lockId}`, async () =>\n a === \"claim\" ? buildClaimTokenLock({ lock: tokLock, lockId: l.lockId, to: p.account as Address }) : buildAcceptBeneficiary({ lock: tokLock, lockId: l.lockId }),\n )\n }\n >\n {TOKEN_ACTION_LABEL[a]}\n </button>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n <Progress state={runner.state} explorerTxUrl={p.props.explorerTxUrl} />\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ widget --- */\n\nexport function LockerWidget(props: LockerWidgetProps): ReactElement {\n const ctx = useOptionalWidgetContext();\n const theme = props.theme ?? ctx?.theme ?? \"dark\";\n const headingId = useId();\n useEffect(() => {\n injectWidgetStyles();\n }, []);\n const wallet = useLockerWallet(props.wallet);\n const accountRes = useLockerAccount(wallet);\n const account = accountRes.data ?? null;\n const fees = useLockerFees(props.client, props.contracts);\n const hasPos = props.contracts.positionLock !== null;\n const hasTok = props.contracts.tokenLock !== null;\n const [tab, setTab] = useState<LockerTab>(props.defaultTab ?? (hasPos ? \"position\" : \"token\"));\n /* After a lock mines, the fee (and so the form) is re-read; \"My locks\" reads on every visit. */\n const onDone = useCallback(() => fees.refetch(), [fees.refetch]);\n const connect = props.onConnectRequest ?? ctx?.onConnectRequest;\n const tabs = useMemo(() => {\n const t: { key: LockerTab; label: string }[] = [];\n if (hasPos) t.push({ key: \"position\", label: \"Lock liquidity\" });\n if (hasTok) t.push({ key: \"token\", label: \"Lock tokens\" });\n t.push({ key: \"mine\", label: \"My locks\" });\n return t;\n }, [hasPos, hasTok]);\n const feeFor = (which: \"position\" | \"token\") => (fees.data === null ? (fees.status === \"error\" ? null : undefined) : fees.data[which]);\n\n return (\n <section className={`latch-widget latch-locker${props.className ? ` ${props.className}` : \"\"}`} data-latch-theme={theme} aria-labelledby={headingId}>\n <header className=\"latch-header latch-brand\">\n {props.brandMarkUrl !== undefined ? <img className=\"latch-brand__mark\" src={props.brandMarkUrl} width={665} height={765} alt=\"\" /> : null}\n <h2 id={headingId} className=\"latch-title\">\n {props.title ?? \"Lock with Latch\"}\n </h2>\n </header>\n {!hasPos && !hasTok ? (\n <p className=\"latch-trust__state\" role=\"status\">\n Latch locks are coming soon on this chain.\n </p>\n ) : (\n <>\n <div className=\"latch-locker__tabs\" role=\"tablist\">\n {tabs.map((t) => (\n <button key={t.key} type=\"button\" role=\"tab\" className=\"latch-locker__tab\" aria-selected={tab === t.key} onClick={() => setTab(t.key)}>\n {t.label}\n </button>\n ))}\n </div>\n {account === null ? (\n <button type=\"button\" className=\"latch-cta\" disabled={connect === undefined} onClick={connect}>\n Connect wallet\n </button>\n ) : (\n <p className=\"latch-note\">Connected {short(account)}</p>\n )}\n {tab === \"position\" && hasPos ? <PositionTab props={props} account={account} wallet={wallet} fee={feeFor(\"position\")} onDone={onDone} /> : null}\n {tab === \"token\" && hasTok ? <TokenTab props={props} account={account} wallet={wallet} fee={feeFor(\"token\")} onDone={onDone} /> : null}\n {tab === \"mine\" ? <MineTab props={props} account={account} wallet={wallet} /> : null}\n </>\n )}\n <p className=\"latch-footer latch-footer--brand\">Fees read live from the lock contracts · every call simulated first</p>\n </section>\n );\n}\n"],"names":["partText","p","formatLockBps","ShareBar","view","label","keyed","words","jsxs","jsx","W","H","ScheduleSpark","points","total","now","token","active","setActive","useState","geo","useMemo","t0","t1","x","t","y","v","i","first","last","nowX","pick","e","r","fx","best","onKey","a","at","formatUtc","formatLockAmount","Fragment","useTargetLocks","props","opts","pool","usePoolLocks","useTokenLocks","lockAddressOf","useShell","theme","ctx","useOptionalWidgetContext","useEffect","injectWidgetStyles","Link","href","lockPageUrl","l","wording","tokenEmbedView","d","binPoolBadgeView","poolBadgeView","empty","tokenBadgeView","shareView","binShareBar","poolShareBar","tokenShareBar","StateLine","target","LocksBadge","share","data","useChainClock","pending","LocksPanel","headingId","useId","schedule","releaseSchedule","PoolRows","TokenRows","locks","permanent","binLocks","shortAddress","b","lk","POSITION_STATUS_LABEL","formatCountdown","lpPools","supply","remaining","pct","next","vb","vestedBps","TOKEN_STATUS_LABEL","linkProps","Row","s","text","TokenTrustPanel","res","useTokenTrust","tokenTrustView","body","f","DEFAULT_NATIVE","short","Progress","state","explorerTxUrl","labels","h","FeeBox","terms","native","lockerFeeView","PositionTab","client","contracts","lock","tokenIdText","setTokenId","unlockText","setUnlock","ownerText","setOwner","tokenId","unlockAt","parseUtcInput","owner","isAddress","getAddress","pos","useAsyncResource","readPositionLockContext","id","nftOwner","info","approved","CL_POSITION_MANAGER_ABI","readPositionApproval","readChainNow","toUtcInput","issues","validatePositionLock","runner","useLockerRunner","ready","plan","planPositionLock","go","steps","buildApprovePositionForLock","buildLockPosition","readFeeGate","TokenTab","isNative","setIsNative","tokenText","setToken","amountText","setAmount","benText","setBen","mode","setMode","startText","setStart","cliffText","setCliff","durText","setDur","zeroAddress","beneficiary","tok","symbol","decimals","balance","allowance","erc20Abi","readErc20Allowance","amount","parseLockAmount","lockSchedule","parseDays","validateTokenLock","planTokenLock","buildErc20Approve","buildTokenLock","sched","MineTab","mine","useMyLocks","extend","setExtend","metas","cur","out","c","dd","positions","tokens","busy","act","build","posLock","tokLock","actions","positionLockActions","k","newUnlock","POSITION_ACTION_LABEL","buildCollectLockedFees","buildExtendPositionLock","buildWithdrawPosition","buildAcceptLockOwner","m","tokenLockActions","TOKEN_ACTION_LABEL","buildClaimTokenLock","buildAcceptBeneficiary","LockerWidget","wallet","useLockerWallet","account","useLockerAccount","fees","useLockerFees","hasPos","hasTok","tab","setTab","onDone","useCallback","connect","tabs","feeFor","which"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latchprotocol/widgets",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Embeddable swap, liquidity and launch widgets for LatchProtocol. Headless controllers plus drop-in styled UI, with first-class integrator fee attribution.",
5
5
  "license": "MIT",
6
6
  "type": "module",