Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
134 lines (123 loc) · 6.35 KB
/
Copy pathindex.html
File metadata and controls
134 lines (123 loc) · 6.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<!doctype html>
<html lang="en" translate="no">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="theme-color" content="#edefee" />
<meta name="description" content="A blank page for getting a thought out of your head. Nothing is saved." />
<meta name="referrer" content="no-referrer" />
<!-- Chrome's full-page translate uploads the page text to Google.
The editor opts out via ProseMirror's own translate="no"; this
covers the rest of the page and stops the offer appearing. -->
<meta name="google" content="notranslate" />
<!-- Brand assets live under /brand/<name>/. These reference the default
("t"); building with VITE_BRAND=lines rewrites them (vite.config.ts).
The favicon is black-on-white (favicon.svg) so it stands out on any
tab; favicon-theme.svg is the theme-matching alternative — point this
link at it to swap. -->
<link rel="icon" href="/brand/t/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="/brand/t/apple-touch-icon.png" />
<link rel="canonical" href="https://typepaper.app/" />
<!-- Social link previews. Absolute URLs are required by the OG spec;
both point at this same origin, nothing third-party. Crawlers read
these from the HTML — the page itself never fetches them. -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Typepaper" />
<meta property="og:title" content="Typepaper" />
<meta property="og:description" content="A blank page for getting a thought out of your head. Nothing is saved, nothing is sent." />
<meta property="og:url" content="https://typepaper.app/" />
<meta property="og:image" content="https://typepaper.app/brand/t/og.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta name="twitter:card" content="summary_large_image" />
<title>Typepaper</title>
</head>
<body class="is-blank">
<main class="sheet">
<div class="editor"></div>
</main>
<!-- The ground line: what the page doesn't do, along the bottom. Fades on
the first keystroke, and carries the paper-mode hint (see main.ts). -->
<p class="ground">no cookies · no account · no storage · gone when you close the tab</p>
<!-- Navigation, not a request: nothing is fetched unless clicked.
Visible only on the blank sheet, like the ground line it sits with. -->
<a class="source" href="https://github.com/hyperstream-pro/typepaper"
target="_blank" rel="noopener">source</a>
<!-- Words and characters, bottom-right — the ground line's inverse:
appears once there is something to count (see main.ts). -->
<p class="count"></p>
<div class="controls">
<!-- Clear sits first so the pill grows away from the corner: the copy
button keeps the exact position it has always had. Two presses, and
the second is final (see main.ts).
A bin, not a fresh sheet and not a circular arrow. The sheet was
tried first (2026-07-29) and read as "file", which is the one thing
this button doesn't do. A circular arrow is just as legible but
means revert or reload — a promise of recoverability this action
cannot keep, since it takes the undo history with it. The bin is
the glyph that says "your text stops existing", which is exactly
what happens. Lid, tab, tapered body; no inner ticks, they turn to
noise at 17px. -->
<button
type="button"
class="control"
data-action="clear"
data-state="idle"
aria-label="Clear the page"
title="Clear the page"
>
<svg class="glyph" data-glyph="bin" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.6" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M3.5 6.2h17" />
<path d="M9.2 6.2V4.6a2 2 0 0 1 2-2h1.6a2 2 0 0 1 2 2v1.6" />
<path d="M6.3 6.2v13a2.5 2.5 0 0 0 2.5 2.3h6.4a2.5 2.5 0 0 0 2.5-2.3V6.2" />
</svg>
</button>
<button
type="button"
class="control"
data-action="theme"
data-state="day"
aria-label="Switch to dark"
>
<svg class="glyph" data-glyph="sun" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.6" stroke-linecap="round"
aria-hidden="true" focusable="false">
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4" />
</svg>
<svg class="glyph" data-glyph="moon" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.6" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M20.5 14.2A8.5 8.5 0 0 1 9.8 3.5a8.5 8.5 0 1 0 10.7 10.7Z" />
</svg>
</button>
<button
type="button"
class="control"
data-action="copy"
data-state="idle"
aria-label="Copy everything"
title="Copy everything (Ctrl/Cmd + Enter)"
>
<svg class="glyph" data-glyph="copy" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.6" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<rect x="9" y="9" width="12.5" height="12.5" rx="2.5" />
<path d="M5.5 15H4.5A2.5 2.5 0 0 1 2 12.5v-8A2.5 2.5 0 0 1 4.5 2h8A2.5 2.5 0 0 1 15 4.5v1" />
</svg>
<svg class="glyph" data-glyph="check" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="1.9" stroke-linecap="round"
stroke-linejoin="round" aria-hidden="true" focusable="false">
<path d="M20 6.5 9.5 17 4 11.5" />
</svg>
</button>
</div>
<!-- Visible copy feedback for sighted users (failure has no glyph).
The sr-only #status below is the screen-reader channel. -->
<p class="feedback" aria-hidden="true"></p>
<p class="sr-only" id="status" role="status" aria-live="polite"></p>
<script type="module" src="/src/main.ts"></script>
</body>
</html>