sitedrift 0.1.0 → 0.2.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.
@@ -0,0 +1,159 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>sitedrift</title>
7
+ <link rel="icon" href="/icon.svg">
8
+ <link rel="stylesheet" href="/viewer.css?v=__VERSION__">
9
+ </head>
10
+ <body>
11
+ <main class="app">
12
+ <header class="toolbar">
13
+ <button class="caret" data-action="compact" title="Collapse review chrome" aria-label="Collapse review chrome">
14
+ <svg viewBox="0 0 16 16" aria-hidden="true"><path d="m3 10 5-5 5 5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
15
+ </button>
16
+ <div class="mark"><img class="mark-icon" src="/icon.svg" alt="" width="20" height="20"><strong>sitedrift</strong></div>
17
+ <input class="route" aria-label="Route" value="/" spellcheck="false">
18
+ <button class="icon" data-action="go" title="Load route (Enter)" aria-label="Load route">
19
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 10h11m-4-4 4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
20
+ </button>
21
+ <span class="toolbar-spacer"></span>
22
+ <div class="modes" role="group" aria-label="View mode">
23
+ <button data-mode="split" title="Side by side">Split</button>
24
+ <button data-mode="solo" title="One pane (S swaps)">Solo</button>
25
+ <button data-mode="overlay" title="Overlay the panes (O)">Overlay</button>
26
+ </div>
27
+ <div class="overlay-slider">
28
+ <input type="range" min="0" max="100" value="50" aria-label="Overlay opacity">
29
+ <button class="overlay-blend" data-action="overlay-blend" title="Difference blend (D) — changed pixels light up" aria-pressed="false">Diff</button>
30
+ </div>
31
+ <button class="icon" data-action="reload" title="Reload both panes (R)" aria-label="Reload both panes">
32
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M15.5 6.5V3m0 0H12m3.5 0-2.2 2.2A6 6 0 1 0 15.8 11" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
33
+ </button>
34
+ <button class="icon" data-action="scroll" title="Toggle locked scrolling" aria-label="Toggle locked scrolling">
35
+ <span class="sr-only" data-scroll-label>Locked scroll</span>
36
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 5.5 10 2l3 3.5M10 2v16m-3-3.5L10 18l3-3.5" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
37
+ </button>
38
+ <button class="icon" data-action="swap" title="Swap sides (S)" aria-label="Swap sides">
39
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M3 6h12m-3-3 3 3-3 3M17 14H5m3 3-3-3 3-3" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
40
+ </button>
41
+ <details class="settings">
42
+ <summary class="icon-control" title="Comparison settings" aria-label="Comparison settings">
43
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 5h12M7 10h9M4 15h12M7 3v4m6 1v4m-6 1v4" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>
44
+ </summary>
45
+ <div class="settings-card">
46
+ <button class="setting-row" data-action="mobile"><span>Mobile panes</span><span class="state">Off</span></button>
47
+ <button class="setting-row" data-action="mirror"><span>Mirror links</span><span class="state">Off</span></button>
48
+ <button class="setting-row" data-action="scroll-mode"><span>Scroll mode</span><span class="state">Exact</span></button>
49
+ </div>
50
+ </details>
51
+ <button class="icon" data-action="notes" title="Review notes" aria-label="Review notes">
52
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 3.5h10a1.5 1.5 0 0 1 1.5 1.5v7A1.5 1.5 0 0 1 15 13.5H9L5 17v-3.5A1.5 1.5 0 0 1 3.5 12V5A1.5 1.5 0 0 1 5 3.5Z" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/></svg>
53
+ <span class="count">0</span>
54
+ </button>
55
+ <details class="help">
56
+ <summary class="icon-control" title="Help and keyboard shortcuts" aria-label="Help and keyboard shortcuts">
57
+ <svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="7.5" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M8.3 7.4a1.9 1.9 0 1 1 2.4 1.8c-.7.3-.9.7-.9 1.4M10 14h.01" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>
58
+ </summary>
59
+ <div class="help-card">
60
+ <strong>sitedrift</strong>
61
+ <p class="help-blurb">Local dev and production, locked to the same route and scroll. Compare side&#8209;by&#8209;side, drag the divider, or <b>Overlay</b> the panes — flip overlay to <b>Diff</b> and only the pixels that changed light up.</p>
62
+ <dl class="shortcut-list">
63
+ <dt><kbd>O</kbd></dt><dd>Overlay on/off (restores your layout)</dd>
64
+ <dt><kbd>D</kbd></dt><dd>Difference blend (while overlaid)</dd>
65
+ <dt><kbd>S</kbd></dt><dd>Swap sides (flip in Solo)</dd>
66
+ <dt><kbd>R</kbd></dt><dd>Reload both panes</dd>
67
+ <dt><kbd>0</kbd></dt><dd>Reset divider to 50/50</dd>
68
+ <dt><kbd>/</kbd></dt><dd>Focus the route field</dd>
69
+ <dt><kbd>Space</kbd></dt><dd>Page down / up with Shift</dd>
70
+ <dt><kbd>Esc</kbd></dt><dd>Close notes &amp; popovers</dd>
71
+ </dl>
72
+ <div class="help-credit">Created by <a href="https://github.com/joeseverino" target="_blank" rel="noreferrer">Joe Severino</a> · <span>github.com/joeseverino</span></div>
73
+ </div>
74
+ </details>
75
+ </header>
76
+ <section class="labels">
77
+ <div class="label" data-label="dev">
78
+ <div class="identity">
79
+ <span class="pill dev">DEV</span>
80
+ <img class="favicon" alt="">
81
+ <span class="page-meta"><span class="page-heading">Loading…</span><span class="origin"></span></span>
82
+ </div>
83
+ <div class="label-actions">
84
+ <span class="status-badge" data-status></span>
85
+ <span class="meta-diff" data-metadiff title="Title, description, or canonical differs between sides">≠ meta</span>
86
+ <details><summary class="seo-summary">SEO<span class="seo-flag" hidden></span> <svg viewBox="0 0 12 12" aria-hidden="true"><path d="m2.5 4.5 3.5 3 3.5-3" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></summary><div class="seo-card"></div></details>
87
+ <a class="open-side" target="_blank" rel="noreferrer">Open <svg viewBox="0 0 12 12" aria-hidden="true"><path d="M4.5 2h5.5v5.5M10 2 4 8m-2-4v6h6" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
88
+ </div>
89
+ </div>
90
+ <div class="label" data-label="live">
91
+ <div class="identity">
92
+ <span class="pill live">LIVE</span>
93
+ <img class="favicon" alt="">
94
+ <span class="page-meta"><span class="page-heading">Loading…</span><span class="origin"></span></span>
95
+ </div>
96
+ <div class="label-actions">
97
+ <span class="status-badge" data-status></span>
98
+ <span class="meta-diff" data-metadiff title="Title, description, or canonical differs between sides">≠ meta</span>
99
+ <details><summary class="seo-summary">SEO<span class="seo-flag" hidden></span> <svg viewBox="0 0 12 12" aria-hidden="true"><path d="m2.5 4.5 3.5 3 3.5-3" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></summary><div class="seo-card"></div></details>
100
+ <a class="open-side" target="_blank" rel="noreferrer">Open <svg viewBox="0 0 12 12" aria-hidden="true"><path d="M4.5 2h5.5v5.5M10 2 4 8m-2-4v6h6" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
101
+ </div>
102
+ </div>
103
+ </section>
104
+ <header class="compactbar">
105
+ <button class="caret" data-action="compact" title="Expand review chrome" aria-label="Expand review chrome">
106
+ <svg viewBox="0 0 16 16" aria-hidden="true"><path d="m3 10 5-5 5 5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
107
+ </button>
108
+ <div class="compact-side" data-compact-side="dev"><span class="pill dev">DEV</span><span class="compact-title" data-compact-title="dev">Loading…</span><span class="status-badge"></span></div>
109
+ <div class="compact-controls">
110
+ <div class="modes" role="group" aria-label="View mode">
111
+ <button data-mode="split">Split</button>
112
+ <button data-mode="solo">Solo</button>
113
+ <button data-mode="overlay">Overlay</button>
114
+ </div>
115
+ <div class="overlay-slider">
116
+ <input type="range" min="0" max="100" value="50" aria-label="Overlay opacity">
117
+ <button class="overlay-blend" data-action="overlay-blend" title="Difference blend (D)" aria-pressed="false">Diff</button>
118
+ </div>
119
+ <button class="icon" data-action="reload" title="Reload both panes" aria-label="Reload both panes">
120
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M15.5 6.5V3m0 0H12m3.5 0-2.2 2.2A6 6 0 1 0 15.8 11" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
121
+ </button>
122
+ </div>
123
+ <div class="compact-side" data-compact-side="live"><span class="pill live">LIVE</span><span class="compact-title" data-compact-title="live">Loading…</span><span class="status-badge"></span></div>
124
+ <button class="icon" data-action="notes" title="Review notes" aria-label="Review notes">
125
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 3.5h10a1.5 1.5 0 0 1 1.5 1.5v7A1.5 1.5 0 0 1 15 13.5H9L5 17v-3.5A1.5 1.5 0 0 1 3.5 12V5A1.5 1.5 0 0 1 5 3.5Z" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/></svg>
126
+ </button>
127
+ </header>
128
+ <section class="stage">
129
+ <div class="pane" data-pane="dev"><iframe data-side="dev" title="Development site"></iframe></div>
130
+ <div class="pane" data-pane="live"><iframe data-side="live" title="Live site"></iframe></div>
131
+ <div class="divider" role="separator" aria-label="Resize comparison panes" aria-orientation="vertical" tabindex="0"><span class="grip"></span></div>
132
+ </section>
133
+ <div class="diff-legend" aria-hidden="true">Difference · lit = changed · black = identical</div>
134
+ </main>
135
+ <aside class="review-drawer" aria-label="Review notes">
136
+ <div class="drawer-head">
137
+ <strong>Review notes</strong>
138
+ <button class="icon" data-action="notes-dock" title="Dock: push the panes aside vs float over them" aria-label="Dock notes" aria-pressed="false">
139
+ <svg viewBox="0 0 20 20" aria-hidden="true"><rect x="3" y="4" width="14" height="12" rx="2" fill="none" stroke="currentColor" stroke-width="1.6"/><line x1="12.5" y1="4" x2="12.5" y2="16" stroke="currentColor" stroke-width="1.6"/></svg>
140
+ </button>
141
+ <button class="icon" data-action="notes-close" aria-label="Close notes">×</button>
142
+ </div>
143
+ <ol class="note-list"></ol>
144
+ <div class="note-compose">
145
+ <div class="note-grip" title="Drag to resize" aria-hidden="true"></div>
146
+ <div class="note-input">
147
+ <textarea placeholder="Add a change, question, or thing to verify…"></textarea>
148
+ <button class="note-submit" data-action="note-add" title="Add note (⌘↵)" aria-label="Add note">
149
+ <svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 10h11m-4-4 4 4-4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
150
+ </button>
151
+ </div>
152
+ <div class="note-actions"><button data-action="note-vault" hidden>Send to vault</button><button data-action="note-export">Export .md</button></div>
153
+ </div>
154
+ </aside>
155
+ <div class="toast" role="status"></div>
156
+ <script>window.__SITEDRIFT_CONFIG__ = __CONFIG__;</script>
157
+ <script src="/viewer.js?v=__VERSION__" defer></script>
158
+ </body>
159
+ </html>