import { styles } from './styles.ts' import { clientScript } from './client-script.ts' import type { AppVersion } from '../version-shape.ts' export function renderAppPage(input: { appBasePath: string hostedUrl: string repoLabel: string version?: AppVersion }): string { const base = input.appBasePath.endsWith('/') ? input.appBasePath : `${input.appBasePath}/` const version = input.version return ` Lineage · ${escapeHtml(input.repoLabel)}

Lineage

Install Lineage

Full screen, works offline, and the last series stays on this device.

Type

Language

Story

Tap a label on the chart or a card here for the longer note. These mark primitive adds, removals, and combinations — not every large diff.

` } function escapeHtml(value: string): string { return value .replaceAll('&', '&') .replaceAll('<', '<') .replaceAll('>', '>') } function escapeAttr(value: string): string { return escapeHtml(value).replaceAll('"', '"') }