sitelines 1.0.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/DESIGN.md +129 -0
- package/LICENSE +21 -0
- package/README.md +336 -0
- package/bin/sitelines.mjs +155 -0
- package/examples/demo-site/about/index.html +30 -0
- package/examples/demo-site/assets/auth.js +3 -0
- package/examples/demo-site/assets/site.css +27 -0
- package/examples/demo-site/blog/index.html +31 -0
- package/examples/demo-site/blog/introducing-meridian/index.html +30 -0
- package/examples/demo-site/changelog/index.html +30 -0
- package/examples/demo-site/contact/index.html +33 -0
- package/examples/demo-site/docs/api/index.html +31 -0
- package/examples/demo-site/docs/api/webhooks/index.html +30 -0
- package/examples/demo-site/docs/api/webhooks/retries/index.html +30 -0
- package/examples/demo-site/docs/index.html +32 -0
- package/examples/demo-site/docs/quickstart/index.html +31 -0
- package/examples/demo-site/index.html +37 -0
- package/examples/demo-site/legal/privacy/index.html +29 -0
- package/examples/demo-site/legal/terms/index.html +29 -0
- package/examples/demo-site/login/index.html +35 -0
- package/examples/demo-site/pricing/index.html +33 -0
- package/examples/demo-site/product/index.html +31 -0
- package/examples/demo-site/product/integrations/index.html +31 -0
- package/examples/demo-site/signup/index.html +35 -0
- package/examples/demo-site/status/index.html +15 -0
- package/examples/demo-site/thanks/index.html +21 -0
- package/package.json +53 -0
- package/scripts/install-skill.mjs +145 -0
- package/scripts/scan.mjs +399 -0
- package/scripts/serve.mjs +207 -0
- package/skill/AGENTS.md +61 -0
- package/skill/SKILL.md +170 -0
- package/skill/references/edit-protocol.md +57 -0
- package/viewer/app.js +1373 -0
- package/viewer/index.html +202 -0
- package/viewer/style.css +616 -0
|
@@ -0,0 +1,202 @@
|
|
|
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>sitelines</title>
|
|
7
|
+
<meta name="color-scheme" content="light dark">
|
|
8
|
+
<script>
|
|
9
|
+
// Set the theme before first paint so a dark-mode user never sees a light flash.
|
|
10
|
+
try {
|
|
11
|
+
var t = localStorage.getItem('sitelines:theme');
|
|
12
|
+
if (t === 'light' || t === 'dark') document.documentElement.dataset.theme = t;
|
|
13
|
+
} catch (e) { /* private mode */ }
|
|
14
|
+
</script>
|
|
15
|
+
<link rel="stylesheet" href="/style.css">
|
|
16
|
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect x='1' y='1' width='5' height='5' rx='1' fill='none' stroke='%232563eb' stroke-width='1.6'/><rect x='10' y='10' width='5' height='5' rx='1' fill='none' stroke='%232563eb' stroke-width='1.6'/><path d='M6 3.5h3a2 2 0 0 1 2 2v3' fill='none' stroke='%232563eb' stroke-width='1.6'/></svg>">
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
|
|
20
|
+
<!-- Icon sprite. 12-14px geometric glyphs, single 1.6 stroke, currentColor.
|
|
21
|
+
Inline because the project ships zero dependencies and no build step, so
|
|
22
|
+
neither a CDN icon set nor an npm one can be used. See DESIGN.md. -->
|
|
23
|
+
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
|
24
|
+
<defs>
|
|
25
|
+
<symbol id="i-mark" viewBox="0 0 16 16">
|
|
26
|
+
<rect x="1" y="1" width="5" height="5" rx="1"/><rect x="10" y="10" width="5" height="5" rx="1"/>
|
|
27
|
+
<path d="M6 3.5h3a2 2 0 0 1 2 2v3"/>
|
|
28
|
+
</symbol>
|
|
29
|
+
<symbol id="i-search" viewBox="0 0 16 16"><circle cx="7" cy="7" r="4.5"/><path d="M10.5 10.5 14 14"/></symbol>
|
|
30
|
+
<symbol id="i-layers" viewBox="0 0 16 16"><path d="M8 1.5 14.5 5 8 8.5 1.5 5Z"/><path d="M1.5 8.5 8 12l6.5-3.5"/></symbol>
|
|
31
|
+
<symbol id="i-plus" viewBox="0 0 16 16"><path d="M8 3v10M3 8h10"/></symbol>
|
|
32
|
+
<symbol id="i-refresh" viewBox="0 0 16 16"><path d="M13.5 8a5.5 5.5 0 1 1-1.7-4"/><path d="M13.8 1.5v3h-3"/></symbol>
|
|
33
|
+
<symbol id="i-list" viewBox="0 0 16 16"><path d="M5.5 4h8M5.5 8h8M5.5 12h8M2.5 4h.01M2.5 8h.01M2.5 12h.01"/></symbol>
|
|
34
|
+
<symbol id="i-close" viewBox="0 0 16 16"><path d="M4 4l8 8M12 4l-8 8"/></symbol>
|
|
35
|
+
<symbol id="i-sun" viewBox="0 0 16 16"><circle cx="8" cy="8" r="3"/><path d="M8 1v1.5M8 13.5V15M1 8h1.5M13.5 8H15M3.1 3.1l1 1M11.9 11.9l1 1M12.9 3.1l-1 1M4.1 11.9l-1 1"/></symbol>
|
|
36
|
+
<symbol id="i-moon" viewBox="0 0 16 16"><path d="M13.5 9.6A5.8 5.8 0 0 1 6.4 2.5a5.8 5.8 0 1 0 7.1 7.1Z"/></symbol>
|
|
37
|
+
<symbol id="i-chev-down" viewBox="0 0 16 16"><path d="M4 6l4 4 4-4"/></symbol>
|
|
38
|
+
<symbol id="i-chev-right" viewBox="0 0 16 16"><path d="M6 4l4 4-4 4"/></symbol>
|
|
39
|
+
<symbol id="i-external" viewBox="0 0 16 16"><path d="M9 2h5v5"/><path d="M14 2 7.5 8.5"/><path d="M12 9.5V13a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h3.5"/></symbol>
|
|
40
|
+
<symbol id="i-trash" viewBox="0 0 16 16"><path d="M2.5 4h11M6 4V2.5h4V4M4 4l.6 9a1 1 0 0 0 1 1h4.8a1 1 0 0 0 1-1L12 4"/></symbol>
|
|
41
|
+
<symbol id="i-alert" viewBox="0 0 16 16"><circle cx="8" cy="8" r="6.5"/><path d="M8 5v3.5M8 11h.01"/></symbol>
|
|
42
|
+
<symbol id="i-broken" viewBox="0 0 16 16"><path d="M6.5 9.5 4 12a2.5 2.5 0 0 1-3.5-3.5L3 6"/><path d="M9.5 6.5 12 4a2.5 2.5 0 0 1 3.5 3.5L13 10"/><path d="M6 6 4.5 4.5M10 10l1.5 1.5"/></symbol>
|
|
43
|
+
<symbol id="i-check" viewBox="0 0 16 16"><path d="M3 8.5 6.5 12 13 4.5"/></symbol>
|
|
44
|
+
<symbol id="i-minus" viewBox="0 0 16 16"><path d="M3 8h10"/></symbol>
|
|
45
|
+
<symbol id="i-fit" viewBox="0 0 16 16"><path d="M2 5.5V2.5h3M14 5.5V2.5h-3M2 10.5v3h3M14 10.5v3h-3"/></symbol>
|
|
46
|
+
</defs>
|
|
47
|
+
</svg>
|
|
48
|
+
|
|
49
|
+
<header class="bar">
|
|
50
|
+
<span class="brand"><svg class="icon brand-mark"><use href="#i-mark"/></svg><b>sitelines</b></span>
|
|
51
|
+
<span class="sep"></span>
|
|
52
|
+
<nav class="tabs" id="tabs" aria-label="Views"></nav>
|
|
53
|
+
<span class="crumb" id="rootLabel"> </span>
|
|
54
|
+
<label class="field">
|
|
55
|
+
<svg class="icon sm"><use href="#i-search"/></svg>
|
|
56
|
+
<input id="search" type="search" placeholder="Filter pages /" aria-label="Filter pages by route or title">
|
|
57
|
+
</label>
|
|
58
|
+
<div class="pop-wrap">
|
|
59
|
+
<button id="btnLayers" class="btn" aria-expanded="false" aria-controls="layers">
|
|
60
|
+
<svg class="icon"><use href="#i-layers"/></svg>Layers<b class="count" id="layerCount" hidden>0</b>
|
|
61
|
+
</button>
|
|
62
|
+
<div class="pop" id="layers" hidden>
|
|
63
|
+
<div class="pop-label">Show</div>
|
|
64
|
+
<label class="tog"><input type="checkbox" id="fShared"> Site-wide nav and footer links</label>
|
|
65
|
+
<label class="tog"><input type="checkbox" id="fApi"> API endpoints</label>
|
|
66
|
+
<label class="tog"><input type="checkbox" id="fExt"> External links</label>
|
|
67
|
+
<hr>
|
|
68
|
+
<div class="pop-label">Previews</div>
|
|
69
|
+
<label class="tog"><input type="checkbox" id="fPreview" checked> Live page previews</label>
|
|
70
|
+
<label class="tog"><input type="checkbox" id="fJs"> Run page JavaScript <span class="k">slow</span></label>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<span class="spacer"></span>
|
|
74
|
+
<button id="btnTheme" class="btn icon-only" title="Switch theme" aria-label="Switch theme">
|
|
75
|
+
<svg class="icon" id="themeIcon"><use href="#i-moon"/></svg>
|
|
76
|
+
</button>
|
|
77
|
+
<button id="btnAdd" class="btn"><svg class="icon"><use href="#i-plus"/></svg>Page</button>
|
|
78
|
+
<button id="btnRescan" class="btn"><svg class="icon"><use href="#i-refresh"/></svg>Rescan</button>
|
|
79
|
+
<button id="btnEdits" class="btn primary" aria-expanded="false" aria-controls="drawer">
|
|
80
|
+
<svg class="icon"><use href="#i-list"/></svg>Changes<b class="count" id="editCount">0</b>
|
|
81
|
+
</button>
|
|
82
|
+
</header>
|
|
83
|
+
|
|
84
|
+
<main>
|
|
85
|
+
<aside class="rail" id="rail" aria-label="Overview">
|
|
86
|
+
<h3>Overview</h3>
|
|
87
|
+
<div id="stats" class="stats"></div>
|
|
88
|
+
|
|
89
|
+
<h3>Entry points <span class="cnt" id="inCount"></span></h3>
|
|
90
|
+
<div id="inputs" class="rows"></div>
|
|
91
|
+
|
|
92
|
+
<h3>Leaves the site <span class="cnt" id="outCount"></span></h3>
|
|
93
|
+
<div id="outputs" class="rows"></div>
|
|
94
|
+
|
|
95
|
+
<h3>Hidden in this view <span class="cnt" id="exCount"></span></h3>
|
|
96
|
+
<div id="excluded" class="rows"></div>
|
|
97
|
+
<div class="rulebar">
|
|
98
|
+
<input id="ruleInput" placeholder="/docs/**" aria-label="Route pattern">
|
|
99
|
+
<button class="btn sm" id="ruleAdd">Hide</button>
|
|
100
|
+
<button class="btn sm" id="ruleAddIn">Only</button>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="viewctl"><button class="btn sm danger" id="viewDelete" hidden>Delete this view</button></div>
|
|
103
|
+
|
|
104
|
+
<h3>Issues <span class="cnt" id="issueCount"></span></h3>
|
|
105
|
+
<div id="issues" class="issues"></div>
|
|
106
|
+
|
|
107
|
+
<h3>Legend</h3>
|
|
108
|
+
<ul class="legend">
|
|
109
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--wire)" stroke-width="1.5"/></svg>Anchor or button</li>
|
|
110
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--wire)" stroke-width="1.5" stroke-dasharray="1 4"/></svg>Script navigation</li>
|
|
111
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--wire)" stroke-width="1.5" stroke-dasharray="8 5"/></svg>Redirect</li>
|
|
112
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--wire)" stroke-width="1.8"/><path d="M1 1v6" stroke="var(--wire)" stroke-width="1.8"/></svg>Form submit</li>
|
|
113
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--danger)" stroke-width="1.5"/></svg>Goes nowhere</li>
|
|
114
|
+
<li><svg viewBox="0 0 26 8"><path d="M0 4h26" stroke="var(--warn)" stroke-width="2" stroke-dasharray="7 5"/></svg>Queued change</li>
|
|
115
|
+
<li><i class="dot in"></i>Entrance port</li>
|
|
116
|
+
<li><i class="dot out"></i>Exit port</li>
|
|
117
|
+
</ul>
|
|
118
|
+
</aside>
|
|
119
|
+
|
|
120
|
+
<section class="stage" id="stage">
|
|
121
|
+
<div class="canvas" id="canvas">
|
|
122
|
+
<svg id="wires" aria-hidden="true"></svg>
|
|
123
|
+
<div id="nodes"></div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="empty" id="empty" hidden>
|
|
126
|
+
<svg class="icon"><use href="#i-layers"/></svg>
|
|
127
|
+
<b>No pages in this view</b>
|
|
128
|
+
<span>Every page is hidden by this view's rules. Remove a rule in the sidebar, or switch views.</span>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="toast" id="toast" role="status" aria-live="polite"></div>
|
|
131
|
+
<div class="zoom">
|
|
132
|
+
<button data-z="-" class="btn" aria-label="Zoom out"><svg class="icon"><use href="#i-minus"/></svg></button>
|
|
133
|
+
<button data-z="0" class="btn" aria-label="Fit to screen"><svg class="icon"><use href="#i-fit"/></svg></button>
|
|
134
|
+
<button data-z="+" class="btn" aria-label="Zoom in"><svg class="icon"><use href="#i-plus"/></svg></button>
|
|
135
|
+
</div>
|
|
136
|
+
</section>
|
|
137
|
+
|
|
138
|
+
<aside class="inspect" id="inspect" hidden aria-label="Page details">
|
|
139
|
+
<div class="ins-head">
|
|
140
|
+
<div>
|
|
141
|
+
<div class="ins-title" id="insTitle"> </div>
|
|
142
|
+
<div class="ins-route mono" id="insRoute"> </div>
|
|
143
|
+
</div>
|
|
144
|
+
<button class="btn ghost icon-only" id="insClose" aria-label="Close details"><svg class="icon"><use href="#i-close"/></svg></button>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="devices">
|
|
147
|
+
<button class="btn sm" data-w="390">Mobile</button>
|
|
148
|
+
<button class="btn sm" data-w="820">Tablet</button>
|
|
149
|
+
<button class="btn sm on" data-w="1280">Desktop</button>
|
|
150
|
+
<a class="btn sm" id="openTab" target="_blank" rel="noreferrer">Open<svg class="icon sm"><use href="#i-external"/></svg></a>
|
|
151
|
+
</div>
|
|
152
|
+
<div class="preview-wrap"><iframe id="preview" title="Page preview" sandbox=""></iframe></div>
|
|
153
|
+
|
|
154
|
+
<h4>Exits <span><span class="cnt" id="exitCount"></span>
|
|
155
|
+
<button class="btn sm" id="addExit"><svg class="icon sm"><use href="#i-plus"/></svg>Link</button></span></h4>
|
|
156
|
+
<div id="exits" class="rows"></div>
|
|
157
|
+
|
|
158
|
+
<h4>Entrances <span class="cnt" id="entCount"></span></h4>
|
|
159
|
+
<div id="entrances" class="rows"></div>
|
|
160
|
+
|
|
161
|
+
<h4>Notes</h4>
|
|
162
|
+
<textarea id="note" placeholder="What is this page for?" aria-label="Notes for this page"></textarea>
|
|
163
|
+
|
|
164
|
+
<div class="viewctl">
|
|
165
|
+
<button class="btn sm" id="exPage">Hide from this view</button>
|
|
166
|
+
<button class="btn sm" id="exGroup">Hide its whole section</button>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="ins-foot">
|
|
169
|
+
<button class="btn danger sm" id="delPage"><svg class="icon sm"><use href="#i-trash"/></svg>Delete page</button>
|
|
170
|
+
<span class="file" id="insFile"></span>
|
|
171
|
+
</div>
|
|
172
|
+
</aside>
|
|
173
|
+
</main>
|
|
174
|
+
|
|
175
|
+
<div class="tip" id="tip" hidden role="tooltip"></div>
|
|
176
|
+
|
|
177
|
+
<div class="drawer" id="drawer" hidden aria-label="Queued changes">
|
|
178
|
+
<div class="drawer-head">
|
|
179
|
+
<b>Queued changes</b>
|
|
180
|
+
<button class="btn ghost icon-only" id="drawerClose" aria-label="Close"><svg class="icon"><use href="#i-close"/></svg></button>
|
|
181
|
+
</div>
|
|
182
|
+
<div id="editList" class="rows"></div>
|
|
183
|
+
<div class="drawer-foot">
|
|
184
|
+
<button class="btn" id="copyPrompt">Copy prompt</button>
|
|
185
|
+
<span class="muted">Then tell your agent <code>apply my sitelines changes</code></span>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="modal" id="modal" hidden role="dialog" aria-modal="true" aria-labelledby="modalTitle">
|
|
190
|
+
<form class="modal-card" id="modalForm">
|
|
191
|
+
<h4 id="modalTitle"> </h4>
|
|
192
|
+
<div id="modalBody"></div>
|
|
193
|
+
<div class="modal-foot">
|
|
194
|
+
<button type="button" class="btn" id="modalCancel">Cancel</button>
|
|
195
|
+
<button class="btn primary" type="submit" id="modalOk">Confirm</button>
|
|
196
|
+
</div>
|
|
197
|
+
</form>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
<script type="module" src="/app.js"></script>
|
|
201
|
+
</body>
|
|
202
|
+
</html>
|