tandem-editor 0.11.2 → 0.13.0
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +3 -3
- package/CHANGELOG.md +201 -72
- package/README.md +141 -238
- package/dist/channel/index.js +211 -81
- package/dist/channel/index.js.map +1 -1
- package/dist/cli/index.js +749 -170
- package/dist/cli/index.js.map +1 -1
- package/dist/client/assets/CoworkSettings-BOYbyKul.js +3 -0
- package/dist/client/assets/event-CNdo2oXa.js +1 -0
- package/dist/client/assets/index-D8uS4cj7.css +1 -0
- package/dist/client/assets/index-Dm_QtxGQ.js +1 -0
- package/dist/client/assets/index-g-KwmRn9.js +271 -0
- package/dist/client/assets/webview-KiZyy_pC.js +1 -0
- package/dist/client/assets/window-DePn7tLG.js +1 -0
- package/dist/client/fonts/OFL-Hanuman.txt +93 -0
- package/dist/client/fonts/OFL-InterTight.txt +93 -0
- package/dist/client/fonts/OFL-JetBrainsMono.txt +93 -0
- package/dist/client/fonts/OFL-SNPro.txt +93 -0
- package/dist/client/fonts/OFL-Sono.txt +93 -0
- package/dist/client/fonts/OFL-SourceSerif4.txt +93 -0
- package/dist/client/fonts/hanuman-latin.woff2 +0 -0
- package/dist/client/fonts/jetbrains-mono-latin.woff2 +0 -0
- package/dist/client/fonts/sn-pro-latin.woff2 +0 -0
- package/dist/client/fonts/sono-latin.woff2 +0 -0
- package/dist/client/fonts/source-serif-4-latin.woff2 +0 -0
- package/dist/client/index.html +206 -17
- package/dist/client/logo.png +0 -0
- package/dist/monitor/index.js +241 -160
- package/dist/monitor/index.js.map +1 -1
- package/dist/server/index.js +22828 -19659
- package/dist/server/index.js.map +1 -1
- package/package.json +12 -4
- package/sample/welcome.md +6 -6
- package/skills/tandem/SKILL.md +15 -0
- package/dist/client/assets/CoworkSettings-DK3jjdwK.js +0 -3
- package/dist/client/assets/index-CfT503n4.js +0 -297
- package/dist/client/assets/index-DeJe09pn.css +0 -1
- package/dist/client/assets/webview-Ben21ZLJ.js +0 -1
- package/dist/client/assets/window-BxBvHL5k.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
font-display: swap;
|
|
35
35
|
src: url("/fonts/source-serif-4-latin.woff2") format("woff2");
|
|
36
36
|
}
|
|
37
|
+
@font-face {
|
|
38
|
+
font-family: "Hanuman";
|
|
39
|
+
font-style: normal;
|
|
40
|
+
font-weight: 400 700;
|
|
41
|
+
font-display: swap;
|
|
42
|
+
src: url("/fonts/hanuman-latin.woff2") format("woff2");
|
|
43
|
+
}
|
|
37
44
|
@font-face {
|
|
38
45
|
font-family: "JetBrains Mono";
|
|
39
46
|
font-style: normal;
|
|
@@ -41,10 +48,24 @@
|
|
|
41
48
|
font-display: swap;
|
|
42
49
|
src: url("/fonts/jetbrains-mono-latin.woff2") format("woff2");
|
|
43
50
|
}
|
|
51
|
+
@font-face {
|
|
52
|
+
font-family: "Sono";
|
|
53
|
+
font-style: normal;
|
|
54
|
+
font-weight: 200 800;
|
|
55
|
+
font-display: swap;
|
|
56
|
+
src: url("/fonts/sono-latin.woff2") format("woff2");
|
|
57
|
+
}
|
|
58
|
+
@font-face {
|
|
59
|
+
font-family: "SN Pro";
|
|
60
|
+
font-style: normal;
|
|
61
|
+
font-weight: 400 700;
|
|
62
|
+
font-display: swap;
|
|
63
|
+
src: url("/fonts/sn-pro-latin.woff2") format("woff2");
|
|
64
|
+
}
|
|
44
65
|
:root {
|
|
45
|
-
--tandem-font-sans: "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
46
|
-
--tandem-font-serif: "Source Serif 4", "Source Serif Pro", Charter, "Iowan Old Style", Georgia, serif;
|
|
47
|
-
--tandem-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
|
|
66
|
+
--tandem-font-sans: "SN Pro", "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
67
|
+
--tandem-font-serif: "Hanuman", "Source Serif 4", "Source Serif Pro", Charter, "Iowan Old Style", Georgia, serif;
|
|
68
|
+
--tandem-font-mono: "Sono", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
|
|
48
69
|
--tandem-bg: oklch(0.985 0.004 80);
|
|
49
70
|
--tandem-fg: oklch(0.22 0.012 280);
|
|
50
71
|
--tandem-surface: oklch(1 0 0);
|
|
@@ -91,7 +112,8 @@
|
|
|
91
112
|
--tandem-suggestion-bg: color-mix(in srgb, var(--tandem-suggestion) 10%, var(--tandem-surface));
|
|
92
113
|
--tandem-suggestion-border: color-mix(in srgb, var(--tandem-suggestion) 40%, var(--tandem-border));
|
|
93
114
|
--tandem-accent-border: oklch(0.84 0.10 var(--tandem-accent-h));
|
|
94
|
-
--tandem-
|
|
115
|
+
--tandem-selection-blurred-bg: color-mix(in srgb, var(--tandem-accent) 22%, transparent);
|
|
116
|
+
--tandem-editor-font-family: var(--tandem-font-sans);
|
|
95
117
|
--tandem-editor-font-size: 17px;
|
|
96
118
|
--tandem-scrollbar-track: oklch(0.96 0.006 80);
|
|
97
119
|
--tandem-scrollbar-thumb: oklch(0.82 0.005 280);
|
|
@@ -131,6 +153,13 @@
|
|
|
131
153
|
--tandem-shadow-2: 0 8px 24px rgba(0, 0, 0, 0.12);
|
|
132
154
|
--tandem-shadow-3: 0 20px 60px rgba(0, 0, 0, 0.2);
|
|
133
155
|
--tandem-shadow-4: 0 16px 48px rgba(0, 0, 0, 0.18);
|
|
156
|
+
/* Directional rail shadows — cast inward toward the editor only. The
|
|
157
|
+
rails sit flush to the window edge; an isotropic shadow would be
|
|
158
|
+
clipped on the outer side. Light theme. Dark-theme override below. */
|
|
159
|
+
--tandem-rail-shadow-left: 4px 0 16px -8px rgba(0, 0, 0, 0.18),
|
|
160
|
+
1px 0 1px rgba(0, 0, 0, 0.03);
|
|
161
|
+
--tandem-rail-shadow-right: -4px 0 16px -8px rgba(0, 0, 0, 0.18),
|
|
162
|
+
-1px 0 1px rgba(0, 0, 0, 0.03);
|
|
134
163
|
--tandem-z-base: 1;
|
|
135
164
|
--tandem-z-dropdown: 10;
|
|
136
165
|
--tandem-z-sticky: 100;
|
|
@@ -138,20 +167,140 @@
|
|
|
138
167
|
--tandem-z-modal: 1000;
|
|
139
168
|
--tandem-z-toast: 1100;
|
|
140
169
|
--tandem-z-tooltip: 10000;
|
|
170
|
+
/* v7 floating chrome clearance/position vars — consumed by W2-W6
|
|
171
|
+
rails, fmtbar, status pill. W4a maximalist lifted DocumentTabs
|
|
172
|
+
into the floating TitleBar (44px tall, no in-flow tabs row), so
|
|
173
|
+
these drop to 52px per the calm-v7.css target. The fmtbar pill is
|
|
174
|
+
fixed-positioned at top: 52px, height 36px → bottom at viewport
|
|
175
|
+
y=88. Editor-scroll lives below the titlebar in the flex column,
|
|
176
|
+
so its top edge is at viewport y=44; an editor padding-top of at
|
|
177
|
+
least 52px (max(--tandem-space-7, 52px)) lands content at y≥96,
|
|
178
|
+
clearing the fmtbar with ≥8px breathing. Rails use
|
|
179
|
+
rail-top-clearance as margin-top inside the editor row → rail top
|
|
180
|
+
also at y=96, in line with the editor content. */
|
|
181
|
+
--tandem-fmtbar-top: 52px;
|
|
182
|
+
--tandem-rail-top-clearance: 52px;
|
|
183
|
+
--tandem-status-clearance: 36px;
|
|
184
|
+
/* Bottom inset that any "hugs-content" rail (outline) reserves
|
|
185
|
+
below itself so the floating status pill (W5) renders into
|
|
186
|
+
clear space. Sum of pill chrome (status-clearance) + a comfy
|
|
187
|
+
24px margin. Consumed by PanelSlot's outline branch in W6. */
|
|
188
|
+
--tandem-status-clearance-total: calc(var(--tandem-status-clearance) + var(--tandem-space-5, 24px));
|
|
189
|
+
/* Light-mode floating-pill stack (matches v7 calm-v7.css). Warm/dark
|
|
190
|
+
override --c7-pill-shadow inside their own theme blocks. */
|
|
191
|
+
--c7-pill-shadow:
|
|
192
|
+
0 1px 1px rgba(0, 0, 0, 0.04),
|
|
193
|
+
0 6px 14px -6px rgba(0, 0, 0, 0.10),
|
|
194
|
+
0 22px 38px -22px rgba(0, 0, 0, 0.16);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* Shared white-mode floating-pill recipe. Applied to every floating
|
|
198
|
+
chrome surface introduced by Waves 3-6: fmtbar, titlebar clusters,
|
|
199
|
+
tab pills, +/add pill, mode segment, status pill, mini-toolbar,
|
|
200
|
+
wincontrols. Surfaces only need .tandem-floating-pill + a sensible
|
|
201
|
+
border-radius (pill or 14px). Surface-specific overrides (padding,
|
|
202
|
+
max-width, drag-region) layer on top. */
|
|
203
|
+
.tandem-floating-pill {
|
|
204
|
+
background: var(--tandem-surface);
|
|
205
|
+
border: 1px solid var(--tandem-border);
|
|
206
|
+
border-radius: var(--tandem-r-pill);
|
|
207
|
+
box-shadow: var(--c7-pill-shadow);
|
|
208
|
+
backdrop-filter: saturate(140%) blur(8px);
|
|
209
|
+
-webkit-backdrop-filter: saturate(140%) blur(8px);
|
|
210
|
+
}
|
|
211
|
+
[data-theme="dark"] .tandem-floating-pill {
|
|
212
|
+
--c7-pill-shadow:
|
|
213
|
+
0 1px 1px rgba(0, 0, 0, 0.30),
|
|
214
|
+
0 6px 14px -6px rgba(0, 0, 0, 0.40),
|
|
215
|
+
0 22px 38px -22px rgba(0, 0, 0, 0.50);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* `filter: opacity()` is used instead of plain `opacity:` so the fade
|
|
219
|
+
composes with cards that already carry an inline opacity (e.g.
|
|
220
|
+
accepted cards at 0.6) rather than being clamped by it. Highlights
|
|
221
|
+
are intentionally excluded — they're user-owned color flags. */
|
|
222
|
+
[data-tandem-mode="solo"] [data-annotation-type="comment"],
|
|
223
|
+
[data-tandem-mode="solo"] [data-annotation-type="note"],
|
|
224
|
+
[data-tandem-mode="solo"] [data-testid="margin-column-left"] .margin-bubble,
|
|
225
|
+
[data-tandem-mode="solo"] [data-testid="margin-column-right"] .margin-bubble {
|
|
226
|
+
filter: opacity(0.45);
|
|
227
|
+
transition: filter 200ms ease;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Fade the in-editor underline decorations to match the side-panel card
|
|
231
|
+
fade above — keeps the visual weight of comments/notes consistent
|
|
232
|
+
between the editor and the panel in solo mode. */
|
|
233
|
+
[data-tandem-mode="solo"] .tandem-comment,
|
|
234
|
+
[data-tandem-mode="solo"] .tandem-note {
|
|
235
|
+
opacity: 0.45;
|
|
236
|
+
transition: opacity 200ms ease;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/* Slash command menu — v7 floating-card variant.
|
|
240
|
+
Inherits floating-pill bg/border/shadow then overrides border-radius
|
|
241
|
+
to a card shape (menus aren't pill-shaped) and stacks an item list
|
|
242
|
+
with a keyboard-hint footer. */
|
|
243
|
+
.tandem-slash-menu {
|
|
244
|
+
border-radius: var(--tandem-r-4);
|
|
245
|
+
min-width: 200px;
|
|
246
|
+
padding: var(--tandem-space-1);
|
|
247
|
+
z-index: var(--tandem-z-popover, 1100);
|
|
248
|
+
}
|
|
249
|
+
.tandem-slash-menu__item {
|
|
250
|
+
display: flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
width: 100%;
|
|
253
|
+
padding: var(--tandem-space-1) var(--tandem-space-3);
|
|
254
|
+
border: 1px solid transparent;
|
|
255
|
+
border-radius: var(--tandem-r-2);
|
|
256
|
+
background: transparent;
|
|
257
|
+
color: var(--tandem-fg);
|
|
258
|
+
font: inherit;
|
|
259
|
+
font-size: var(--tandem-text-sm);
|
|
260
|
+
text-align: left;
|
|
261
|
+
cursor: pointer;
|
|
262
|
+
white-space: nowrap;
|
|
263
|
+
}
|
|
264
|
+
.tandem-slash-menu__item:hover {
|
|
265
|
+
background: color-mix(in srgb, var(--tandem-fg) 5%, transparent);
|
|
266
|
+
}
|
|
267
|
+
.tandem-slash-menu__item[aria-selected="true"] {
|
|
268
|
+
background: var(--tandem-accent-bg);
|
|
269
|
+
color: var(--tandem-accent-fg-strong);
|
|
270
|
+
border-color: var(--tandem-accent-border);
|
|
271
|
+
}
|
|
272
|
+
.tandem-slash-menu__hint {
|
|
273
|
+
display: flex;
|
|
274
|
+
gap: var(--tandem-space-3);
|
|
275
|
+
padding: var(--tandem-space-1) var(--tandem-space-3);
|
|
276
|
+
margin-top: var(--tandem-space-1);
|
|
277
|
+
border-top: 1px solid var(--tandem-border);
|
|
278
|
+
font-size: var(--tandem-text-2xs);
|
|
279
|
+
color: var(--tandem-fg-faint);
|
|
280
|
+
}
|
|
281
|
+
.tandem-slash-menu__hint kbd {
|
|
282
|
+
font-family: var(--tandem-font-mono);
|
|
283
|
+
font-size: var(--tandem-text-2xs);
|
|
284
|
+
padding: 0 4px;
|
|
285
|
+
border: 1px solid var(--tandem-border);
|
|
286
|
+
border-radius: var(--tandem-r-1);
|
|
287
|
+
background: var(--tandem-surface-muted);
|
|
288
|
+
color: var(--tandem-fg-subtle);
|
|
141
289
|
}
|
|
142
290
|
|
|
143
291
|
[data-theme="dark"] {
|
|
144
|
-
|
|
145
|
-
--tandem-
|
|
146
|
-
--tandem-
|
|
147
|
-
--tandem-surface
|
|
148
|
-
--tandem-surface-
|
|
149
|
-
--tandem-
|
|
150
|
-
--tandem-border
|
|
151
|
-
--tandem-
|
|
152
|
-
|
|
153
|
-
--tandem-
|
|
154
|
-
--tandem-fg-
|
|
292
|
+
/* Tracks the calm-v7 dark canon at hue 280°. */
|
|
293
|
+
--tandem-bg: oklch(0.22 0.012 280);
|
|
294
|
+
--tandem-fg: oklch(0.94 0.006 280);
|
|
295
|
+
--tandem-surface: oklch(0.27 0.012 280);
|
|
296
|
+
--tandem-surface-muted: oklch(0.25 0.012 280);
|
|
297
|
+
--tandem-surface-sunk: oklch(0.20 0.012 280);
|
|
298
|
+
--tandem-border: oklch(0.34 0.010 280);
|
|
299
|
+
--tandem-border-strong: oklch(0.42 0.012 280);
|
|
300
|
+
--tandem-fg-muted: oklch(0.74 0.008 280);
|
|
301
|
+
/* 0.70 keeps WCAG AA 4.5:1 against --tandem-surface-muted (0.25). */
|
|
302
|
+
--tandem-fg-subtle: oklch(0.70 0.008 280);
|
|
303
|
+
--tandem-fg-faint: oklch(0.58 0.008 280);
|
|
155
304
|
--tandem-accent-h: 275deg;
|
|
156
305
|
--tandem-accent: oklch(0.72 0.14 var(--tandem-accent-h));
|
|
157
306
|
--tandem-accent-fg: oklch(0.15 0.01 var(--tandem-accent-h));
|
|
@@ -187,6 +336,7 @@
|
|
|
187
336
|
--tandem-suggestion-bg: #2e1065;
|
|
188
337
|
--tandem-suggestion-border: #4c1d95;
|
|
189
338
|
--tandem-accent-border: oklch(0.45 0.14 var(--tandem-accent-h));
|
|
339
|
+
--tandem-selection-blurred-bg: color-mix(in srgb, var(--tandem-accent) 32%, transparent);
|
|
190
340
|
--tandem-scrollbar-track: oklch(0.16 0.012 270);
|
|
191
341
|
--tandem-scrollbar-thumb: oklch(0.38 0.014 270);
|
|
192
342
|
--tandem-highlight-yellow: rgba(255, 220, 0, 0.38);
|
|
@@ -196,6 +346,45 @@
|
|
|
196
346
|
--tandem-page-bg: #2a2a2a;
|
|
197
347
|
--tandem-page-paper: #1a1a1a;
|
|
198
348
|
--tandem-page-shadow: 0 2px 12px rgba(0, 0, 0, 0.4);
|
|
349
|
+
--tandem-rail-shadow-left: 4px 0 18px -6px rgba(0, 0, 0, 0.55),
|
|
350
|
+
1px 0 1px rgba(0, 0, 0, 0.25);
|
|
351
|
+
--tandem-rail-shadow-right: -4px 0 18px -6px rgba(0, 0, 0, 0.55),
|
|
352
|
+
-1px 0 1px rgba(0, 0, 0, 0.25);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* Warm canvas theme — v7 floating chrome. OKLCH values come straight
|
|
356
|
+
from calm-v7.css. Foundational tokens only: surface family + border
|
|
357
|
+
+ scrollbars + page metaphor + the shared pill-shadow used by every
|
|
358
|
+
floating-pill surface (titlebar clusters, fmtbar, tabs, status,
|
|
359
|
+
rails, wincontrols). Component-level adoption happens in W3-W6. */
|
|
360
|
+
[data-theme="warm"] {
|
|
361
|
+
--tandem-bg: oklch(0.945 0.012 70);
|
|
362
|
+
--tandem-fg: oklch(0.22 0.012 280);
|
|
363
|
+
--tandem-surface: oklch(0.975 0.005 75);
|
|
364
|
+
--tandem-surface-muted: oklch(0.960 0.010 75);
|
|
365
|
+
--tandem-surface-sunk: oklch(0.920 0.014 65);
|
|
366
|
+
--tandem-border: oklch(0.91 0.006 75);
|
|
367
|
+
--tandem-border-strong: oklch(0.84 0.008 75);
|
|
368
|
+
--tandem-fg-muted: oklch(0.48 0.008 280);
|
|
369
|
+
--tandem-fg-subtle: oklch(0.54 0.008 280);
|
|
370
|
+
--tandem-fg-faint: oklch(0.64 0.005 280);
|
|
371
|
+
--tandem-scrollbar-track: oklch(0.94 0.012 70);
|
|
372
|
+
--tandem-scrollbar-thumb: oklch(0.78 0.010 75);
|
|
373
|
+
--tandem-page-bg: oklch(0.925 0.012 70);
|
|
374
|
+
--tandem-page-paper: oklch(0.985 0.005 75);
|
|
375
|
+
--tandem-page-shadow: 0 2px 8px oklch(0 0 0 / 0.12);
|
|
376
|
+
/* Floating-pill shadow stack — consumed by the shared
|
|
377
|
+
.tandem-floating-pill class introduced in W3. Three light/dark
|
|
378
|
+
variants of the same shape are exposed so each surface can pick
|
|
379
|
+
the right contrast against its canvas. */
|
|
380
|
+
--c7-pill-shadow:
|
|
381
|
+
0 1px 1px oklch(0 0 0 / 0.03),
|
|
382
|
+
0 4px 10px -4px oklch(0 0 0 / 0.10),
|
|
383
|
+
0 16px 30px -18px oklch(0 0 0 / 0.18);
|
|
384
|
+
--c7-pill-shadow-white:
|
|
385
|
+
0 1px 1px oklch(0 0 0 / 0.04),
|
|
386
|
+
0 6px 14px -6px oklch(0 0 0 / 0.10),
|
|
387
|
+
0 22px 38px -22px oklch(0 0 0 / 0.16);
|
|
199
388
|
}
|
|
200
389
|
|
|
201
390
|
/* density spacing scale — cozy is the default (matches :root values) */
|
|
@@ -289,8 +478,8 @@
|
|
|
289
478
|
scrollbar-color: var(--tandem-scrollbar-thumb) var(--tandem-scrollbar-track);
|
|
290
479
|
}
|
|
291
480
|
</style>
|
|
292
|
-
<script type="module" crossorigin src="/assets/index-
|
|
293
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
481
|
+
<script type="module" crossorigin src="/assets/index-g-KwmRn9.js"></script>
|
|
482
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D8uS4cj7.css">
|
|
294
483
|
</head>
|
|
295
484
|
<body>
|
|
296
485
|
<div id="root"></div>
|
|
Binary file
|