tui-cap 0.1.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/LICENSE +21 -0
- package/README.md +213 -0
- package/dist/anim.js +104 -0
- package/dist/animation.js +96 -0
- package/dist/asciinema.js +125 -0
- package/dist/cli.js +648 -0
- package/dist/edits.js +527 -0
- package/dist/fonts.js +87 -0
- package/dist/input.js +136 -0
- package/dist/meta.js +58 -0
- package/dist/palette.js +111 -0
- package/dist/parse.js +659 -0
- package/dist/paths.js +100 -0
- package/dist/record-pty.js +148 -0
- package/dist/record.js +100 -0
- package/dist/server.js +978 -0
- package/dist/svg.js +767 -0
- package/dist/timing.js +112 -0
- package/dist/types.js +2 -0
- package/dist/version.js +232 -0
- package/dist/web/app.js +3312 -0
- package/dist/web/fonts/MonaSansMonoVF-wght.woff2 +0 -0
- package/dist/web/fonts/MonaSansVF-wdth-wght-opsz.woff2 +0 -0
- package/dist/web/fonts/README.md +13 -0
- package/dist/web/index.html +382 -0
- package/dist/web/logo.svg +11 -0
- package/dist/web/styles.css +925 -0
- package/dist/web/timing-model.js +115 -0
- package/dist/web/vendor/mp4-muxer.LICENSE +21 -0
- package/dist/web/vendor/mp4-muxer.js +1885 -0
- package/package.json +61 -0
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Mona Sans
|
|
2
|
+
|
|
3
|
+
These web fonts ship with the GUI so it can render GitHub's Primer Brand
|
|
4
|
+
typography offline, without pulling in an npm package at build time.
|
|
5
|
+
|
|
6
|
+
- **Mona Sans** (`MonaSansVF-wdth-wght-opsz.woff2`) — variable font
|
|
7
|
+
- **Mona Sans Mono** (`MonaSansMonoVF-wght.woff2`) — variable monospace font
|
|
8
|
+
|
|
9
|
+
© GitHub, Inc. Mona Sans is distributed under the SIL Open Font License, v1.1.
|
|
10
|
+
Source: https://github.com/github/mona-sans
|
|
11
|
+
|
|
12
|
+
The full license text is available at https://openfontlicense.org and in the
|
|
13
|
+
upstream Mona Sans repository.
|
|
@@ -0,0 +1,382 @@
|
|
|
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>GHCP Capture — recordings</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="logo.svg" />
|
|
8
|
+
<link rel="stylesheet" href="styles.css" />
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<header class="topbar">
|
|
12
|
+
<div class="brand">
|
|
13
|
+
<img class="logo" src="logo.svg" alt="" aria-hidden="true" />
|
|
14
|
+
<h1>GitHub Copilot CLI Capture</h1>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="view-scale" role="group" aria-label="Canvas scale">
|
|
17
|
+
<button id="zoomFitBtn" class="btn small" type="button"
|
|
18
|
+
title="Fit the canvas to the view" aria-pressed="true" disabled>Zoom to Fit</button>
|
|
19
|
+
<input id="zoomRange" class="zoom-range" type="range" min="10" max="400" value="100" step="1"
|
|
20
|
+
title="Zoom the canvas to an arbitrary size" aria-label="Canvas zoom" disabled />
|
|
21
|
+
<output id="zoomPct" class="zoom-pct muted small" for="zoomRange">100%</output>
|
|
22
|
+
<button id="zoom100Btn" class="btn small" type="button"
|
|
23
|
+
title="Show the canvas at actual size (100%)" aria-pressed="false" disabled>100%</button>
|
|
24
|
+
</div>
|
|
25
|
+
<button id="newRecBtn" class="btn btn-primary">+ New recording</button>
|
|
26
|
+
</header>
|
|
27
|
+
|
|
28
|
+
<!-- Update notice — shown only when a newer npm release is available -->
|
|
29
|
+
<div id="updateBanner" class="update-banner hidden" role="status" aria-live="polite">
|
|
30
|
+
<span class="ub-icon" aria-hidden="true">⬆</span>
|
|
31
|
+
<span id="updateMsg" class="ub-msg"></span>
|
|
32
|
+
<span class="ub-actions">
|
|
33
|
+
<button id="updateBtn" class="btn small btn-primary" type="button">Update now</button>
|
|
34
|
+
<button id="updateDismiss" class="btn small" type="button">Later</button>
|
|
35
|
+
</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<main class="layout">
|
|
39
|
+
<!-- Library -->
|
|
40
|
+
<aside class="panel library">
|
|
41
|
+
<div class="panel-head">
|
|
42
|
+
<h2>Library</h2>
|
|
43
|
+
<div class="panel-head-actions">
|
|
44
|
+
<span id="libStatus" class="muted small"></span>
|
|
45
|
+
<button id="openFolderBtn" class="rec-act lib-folder" type="button"
|
|
46
|
+
title="Open captures folder" aria-label="Open captures folder"></button>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
<ul id="library" class="rec-list"></ul>
|
|
50
|
+
<div id="libLoading" class="lib-loading muted hidden">
|
|
51
|
+
<span class="spinner" aria-hidden="true"></span>
|
|
52
|
+
<span>Loading captures…</span>
|
|
53
|
+
</div>
|
|
54
|
+
<p id="libEmpty" class="empty muted hidden">
|
|
55
|
+
No recordings yet. Use <strong>+ New recording</strong> to capture one.
|
|
56
|
+
</p>
|
|
57
|
+
</aside>
|
|
58
|
+
|
|
59
|
+
<!-- Preview + timeline -->
|
|
60
|
+
<section class="stage">
|
|
61
|
+
<div class="edit-toolbar">
|
|
62
|
+
<button id="editToggle" class="btn small" type="button" aria-pressed="false">
|
|
63
|
+
✎ Edit content
|
|
64
|
+
</button>
|
|
65
|
+
<span id="editHint" class="muted small edit-hint hidden">
|
|
66
|
+
Drag across a line to recolor or rewrite it — edits follow that text across every frame.
|
|
67
|
+
</span>
|
|
68
|
+
<span id="editTools" class="edit-tools hidden">
|
|
69
|
+
<button id="undoBtn" class="btn icon small" type="button" title="Undo (⌘/Ctrl+Z)" disabled>↶</button>
|
|
70
|
+
<button id="redoBtn" class="btn icon small" type="button" title="Redo (⌘/Ctrl+Shift+Z)" disabled>↷</button>
|
|
71
|
+
<span id="editCount" class="muted small"></span>
|
|
72
|
+
<button id="resetEdits" class="btn small danger-text hidden" type="button">Reset all</button>
|
|
73
|
+
</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div id="previewWrap" class="preview-wrap">
|
|
77
|
+
<img id="preview" class="preview" alt="Rendered frame" />
|
|
78
|
+
<div id="selOverlay" class="sel-overlay hidden">
|
|
79
|
+
<div id="selHover" class="sel-cell sel-hover hidden"></div>
|
|
80
|
+
<div id="selRect" class="sel-cell sel-rect hidden"></div>
|
|
81
|
+
<div id="selEditor" class="sel-editor hidden">
|
|
82
|
+
<div id="selEditGhost" class="sel-edit-ghost"></div>
|
|
83
|
+
<div id="selEditText" class="sel-edit-text"></div>
|
|
84
|
+
<span id="selCaret" class="sel-caret"></span>
|
|
85
|
+
<input id="selInput" class="sel-input" type="text" spellcheck="false"
|
|
86
|
+
autocomplete="off" autocapitalize="off" autocorrect="off"
|
|
87
|
+
aria-label="Edit text in place" />
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<p id="previewEmpty" class="empty muted">Select a recording to preview its frames.</p>
|
|
91
|
+
<div id="hud" class="hud hidden" aria-hidden="true">
|
|
92
|
+
<div class="hud-row hud-title">
|
|
93
|
+
<span id="hudState" class="hud-state">⏸ paused</span>
|
|
94
|
+
<span class="hud-tag">timing</span>
|
|
95
|
+
<button id="hudClose" class="hud-close" type="button" title="Close timing debug" aria-label="Close timing debug">✕</button>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="hud-row"><span class="hud-k">frame</span><span id="hudFrame" class="hud-v">—</span></div>
|
|
98
|
+
<div class="hud-row"><span class="hud-k">this</span><span id="hudThis" class="hud-v">—</span></div>
|
|
99
|
+
<div class="hud-row"><span class="hud-k">last shown</span><span id="hudActual" class="hud-v">—</span></div>
|
|
100
|
+
<div class="hud-row"><span class="hud-k">rate</span><span id="hudFps" class="hud-v">—</span></div>
|
|
101
|
+
<div class="hud-row"><span class="hud-k">elapsed</span><span id="hudElapsed" class="hud-v">—</span></div>
|
|
102
|
+
<div class="hud-row"><span class="hud-k">drift</span><span id="hudDrift" class="hud-v">—</span></div>
|
|
103
|
+
<div class="hud-row hud-foot"><span id="hudSettings" class="hud-v">—</span></div>
|
|
104
|
+
<div class="hud-actions">
|
|
105
|
+
<button id="selfTestBtn" type="button" class="btn small" disabled>Run timing test</button>
|
|
106
|
+
</div>
|
|
107
|
+
<p id="selfTestResult" class="muted small timing-result hidden"></p>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="timeline">
|
|
112
|
+
<div class="timeline-toolbar">
|
|
113
|
+
<div class="tl-group transport">
|
|
114
|
+
<button id="goStartBtn" class="btn icon" title="Go to start (Home)" aria-label="Go to start" disabled></button>
|
|
115
|
+
<button id="prevBtn" class="btn icon" title="Previous frame (←)" aria-label="Previous frame" disabled></button>
|
|
116
|
+
<button id="playBtn" class="btn icon" title="Play animation (space)" aria-label="Play animation" disabled></button>
|
|
117
|
+
<button id="nextBtn" class="btn icon" title="Next frame (→)" aria-label="Next frame" disabled></button>
|
|
118
|
+
<button id="goEndBtn" class="btn icon" title="Go to end (End)" aria-label="Go to end" disabled></button>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div id="selGroup" class="tl-group selection hidden">
|
|
122
|
+
<label class="tl-len">
|
|
123
|
+
<span id="selLenLabel" class="muted small">Length</span>
|
|
124
|
+
<input id="selLen" type="number" min="0" step="50" />
|
|
125
|
+
<span class="unit muted small">ms</span>
|
|
126
|
+
</label>
|
|
127
|
+
<button id="selReset" class="btn small" title="Reset to captured timing">↺</button>
|
|
128
|
+
<button id="selDelete" class="btn small danger" title="Delete / skip frames (Delete)">Delete</button>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<span id="frameLabel" class="frame-label muted">—</span>
|
|
132
|
+
|
|
133
|
+
<div class="tl-spacer"></div>
|
|
134
|
+
|
|
135
|
+
<div class="tl-group view">
|
|
136
|
+
<button id="hideSkippedBtn" class="btn small" title="Show deleted frames in the timeline" aria-pressed="false" disabled>Show deleted</button>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<div class="tl-group zoom">
|
|
140
|
+
<span class="zoom-ico muted small" aria-hidden="true">Zoom</span>
|
|
141
|
+
<input id="zoom" type="range" min="0" max="1000" value="0" step="1" aria-label="Timeline zoom" disabled />
|
|
142
|
+
<button id="fitBtn" class="btn small" title="Fit entire timeline" disabled>Fit</button>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div id="timelineScroll" class="timeline-scroll">
|
|
147
|
+
<div id="timelineRuler" class="timeline-ruler" title="Click or drag to scrub"></div>
|
|
148
|
+
<div id="timelineTrack" class="timeline-track"></div>
|
|
149
|
+
<p id="timelineEmpty" class="empty muted timeline-empty">Select a recording to see its timeline.</p>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</section>
|
|
153
|
+
|
|
154
|
+
<!-- Render settings -->
|
|
155
|
+
<aside class="panel settings">
|
|
156
|
+
<div class="panel-head"><h2>Render settings</h2></div>
|
|
157
|
+
|
|
158
|
+
<label class="field">
|
|
159
|
+
<span>Window title</span>
|
|
160
|
+
<input id="title" type="text" value="" />
|
|
161
|
+
</label>
|
|
162
|
+
|
|
163
|
+
<label class="field checkbox">
|
|
164
|
+
<input id="chrome" type="checkbox" checked />
|
|
165
|
+
<span>Window chrome</span>
|
|
166
|
+
</label>
|
|
167
|
+
|
|
168
|
+
<label class="field">
|
|
169
|
+
<span>Window style</span>
|
|
170
|
+
<select id="chromeStyle">
|
|
171
|
+
<option value="mac">macOS</option>
|
|
172
|
+
<option value="mac-inactive" selected>macOS — inactive</option>
|
|
173
|
+
<option value="windows">Windows</option>
|
|
174
|
+
<option value="windows-inactive">Windows — inactive</option>
|
|
175
|
+
</select>
|
|
176
|
+
</label>
|
|
177
|
+
|
|
178
|
+
<label class="field">
|
|
179
|
+
<span>Font size <em id="fontSizeVal" class="muted">14px</em></span>
|
|
180
|
+
<input id="fontSize" type="range" min="8" max="32" value="14" step="1" />
|
|
181
|
+
</label>
|
|
182
|
+
|
|
183
|
+
<label class="field">
|
|
184
|
+
<span>Line spacing <em id="lineHeightVal" class="muted">1.25</em></span>
|
|
185
|
+
<input id="lineHeight" type="range" min="1" max="1.8" value="1.25" step="0.05" />
|
|
186
|
+
</label>
|
|
187
|
+
|
|
188
|
+
<div class="reset-row">
|
|
189
|
+
<button id="resetType" type="button" class="btn small">Reset to defaults</button>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<div class="field">
|
|
193
|
+
<span>Recorded size (char)</span>
|
|
194
|
+
<output id="recordedSize" class="recorded-size">—</output>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<div class="export">
|
|
198
|
+
<button id="downloadBtn" class="btn btn-primary block" disabled>Save SVG…</button>
|
|
199
|
+
<div class="export-png">
|
|
200
|
+
<button id="downloadPngBtn" class="btn" disabled>Save PNG…</button>
|
|
201
|
+
<select id="pngScale" class="png-scale" aria-label="PNG scale" disabled>
|
|
202
|
+
<option value="1">1×</option>
|
|
203
|
+
<option value="2" selected>2×</option>
|
|
204
|
+
<option value="3">3×</option>
|
|
205
|
+
<option value="4">4×</option>
|
|
206
|
+
</select>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div class="panel-head anim-head">
|
|
211
|
+
<h2>Animation</h2>
|
|
212
|
+
<span id="animStatus" class="muted small"></span>
|
|
213
|
+
</div>
|
|
214
|
+
<p id="animNote" class="muted small anim-note hidden"></p>
|
|
215
|
+
|
|
216
|
+
<div class="field-row">
|
|
217
|
+
<label class="field">
|
|
218
|
+
<span>Frame rate</span>
|
|
219
|
+
<select id="animFps">
|
|
220
|
+
<option value="12">12 fps</option>
|
|
221
|
+
<option value="15">15 fps</option>
|
|
222
|
+
<option value="24">24 fps</option>
|
|
223
|
+
<option value="30" selected>30 fps</option>
|
|
224
|
+
<option value="60">60 fps</option>
|
|
225
|
+
</select>
|
|
226
|
+
</label>
|
|
227
|
+
<label class="field">
|
|
228
|
+
<span>Export size</span>
|
|
229
|
+
<select id="animScale">
|
|
230
|
+
<option value="1">1×</option>
|
|
231
|
+
<option value="2" selected>2×</option>
|
|
232
|
+
<option value="3">3×</option>
|
|
233
|
+
<option value="4">4×</option>
|
|
234
|
+
</select>
|
|
235
|
+
</label>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
<label class="field">
|
|
239
|
+
<span>Idle cap <em id="idleCapVal" class="muted">1.5s</em></span>
|
|
240
|
+
<input id="idleCap" type="range" min="1" max="301" value="90" step="1"
|
|
241
|
+
title="Clamp idle gaps; slide fully right for ∞ (use the real recorded hold)" />
|
|
242
|
+
</label>
|
|
243
|
+
|
|
244
|
+
<label class="field">
|
|
245
|
+
<span>Speed <em id="speedVal" class="muted">1.0×</em></span>
|
|
246
|
+
<input id="speed" type="range" min="0.25" max="4" value="1" step="0.25" />
|
|
247
|
+
</label>
|
|
248
|
+
|
|
249
|
+
<label class="field checkbox" title="Show a block cursor in the prompt box — present whenever a prompt is open, and tracking the caret while typing. Appears in preview, SVG export, and MP4.">
|
|
250
|
+
<input id="cursor" type="checkbox" checked />
|
|
251
|
+
<span>Cursor</span>
|
|
252
|
+
</label>
|
|
253
|
+
|
|
254
|
+
<label class="field checkbox">
|
|
255
|
+
<input id="smoothTyping" type="checkbox" />
|
|
256
|
+
<span>Smooth user typing</span>
|
|
257
|
+
</label>
|
|
258
|
+
|
|
259
|
+
<label class="field">
|
|
260
|
+
<span>Typing rate <em id="typingCpsVal" class="muted">30 cps</em></span>
|
|
261
|
+
<input id="typingCps" type="range" min="10" max="60" value="30" step="1"
|
|
262
|
+
title="Constant rate for smoothed typing (characters per second)" />
|
|
263
|
+
</label>
|
|
264
|
+
|
|
265
|
+
<div class="anim-meta">
|
|
266
|
+
<span id="animLen" class="muted small">—</span>
|
|
267
|
+
<button id="clearOverrides" type="button" class="btn small hidden">Reset frame edits</button>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<div class="export">
|
|
271
|
+
<button id="exportMp4Btn" class="btn btn-primary block" disabled>Export MP4…</button>
|
|
272
|
+
<div id="exportProgress" class="progress hidden">
|
|
273
|
+
<div class="progress-track"><div id="exportBar" class="progress-bar"></div></div>
|
|
274
|
+
<span id="exportPct" class="progress-pct small muted">0%</span>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<div id="editsSection" class="edits-section hidden">
|
|
279
|
+
<div class="panel-head edits-head">
|
|
280
|
+
<h2>Content edits</h2>
|
|
281
|
+
<span id="editsCount" class="muted small"></span>
|
|
282
|
+
</div>
|
|
283
|
+
<p class="muted small edits-empty" id="editsEmpty">
|
|
284
|
+
No edits yet. Turn on <strong>Edit content</strong> over the preview, then drag
|
|
285
|
+
across a line of text.
|
|
286
|
+
</p>
|
|
287
|
+
<ul id="editsList" class="edits-list"></ul>
|
|
288
|
+
</div>
|
|
289
|
+
|
|
290
|
+
<button id="timingDebugLink" type="button" class="timing-debug-link">timing debug</button>
|
|
291
|
+
</aside>
|
|
292
|
+
</main>
|
|
293
|
+
|
|
294
|
+
<!-- New recording helper -->
|
|
295
|
+
<dialog id="recDialog" class="dialog">
|
|
296
|
+
<form method="dialog">
|
|
297
|
+
<h2>New recording</h2>
|
|
298
|
+
<p class="muted small">
|
|
299
|
+
Recording attaches to a real terminal, so run this in your own shell.
|
|
300
|
+
The capture lands in your library automatically when the program exits.
|
|
301
|
+
</p>
|
|
302
|
+
<label class="field">
|
|
303
|
+
<span>CLI to record</span>
|
|
304
|
+
<input id="recCmd" type="text" value="copilot" placeholder="copilot" />
|
|
305
|
+
</label>
|
|
306
|
+
<label class="field">
|
|
307
|
+
<span>Save as <em class="muted">(optional)</em></span>
|
|
308
|
+
<input id="recName" type="text" placeholder="copilot-capture_01.ans" />
|
|
309
|
+
</label>
|
|
310
|
+
<p class="muted small">
|
|
311
|
+
Leave blank to auto-name it <code>copilot-capture_NN.ans</code> (the next
|
|
312
|
+
free number) in your library.
|
|
313
|
+
</p>
|
|
314
|
+
<div class="cmd-box">
|
|
315
|
+
<code id="recOut">tui-cap record -- <command></code>
|
|
316
|
+
<button id="recCopy" type="button" class="btn small">Copy</button>
|
|
317
|
+
</div>
|
|
318
|
+
<div class="dialog-actions">
|
|
319
|
+
<button id="recClose" value="close" class="btn">Close</button>
|
|
320
|
+
</div>
|
|
321
|
+
</form>
|
|
322
|
+
</dialog>
|
|
323
|
+
|
|
324
|
+
<!-- Content-edit popover -->
|
|
325
|
+
<div id="editPopover" class="edit-popover hidden" role="dialog" aria-label="Edit text">
|
|
326
|
+
<div class="ep-row ep-preview-row">
|
|
327
|
+
<span class="muted small">Editing</span>
|
|
328
|
+
<code id="epSelected" class="ep-selected">—</code>
|
|
329
|
+
</div>
|
|
330
|
+
|
|
331
|
+
<p class="ep-hint muted small">
|
|
332
|
+
Type in the highlighted box on the canvas to edit text live.
|
|
333
|
+
<em id="epBudget" class="muted"></em>
|
|
334
|
+
</p>
|
|
335
|
+
|
|
336
|
+
<div class="ep-field">
|
|
337
|
+
<span class="muted small">Text color</span>
|
|
338
|
+
<div class="ep-swatch-row">
|
|
339
|
+
<div id="epFg" class="swatches"></div>
|
|
340
|
+
<button id="epFgPick" class="btn-eyedrop" type="button" aria-pressed="false"
|
|
341
|
+
title="Eyedropper: pick a colour from a character on the canvas">
|
|
342
|
+
<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
|
|
343
|
+
<path fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"
|
|
344
|
+
d="M9.5 3.6l2.9 2.9M10.95 2.15a1.6 1.6 0 0 1 2.26 2.26l-1.1 1.1-2.26-2.26 1.1-1.1zM9.85 5.25l-5 5a1.4 1.4 0 0 0-.36.63l-.55 1.95 1.95-.55a1.4 1.4 0 0 0 .63-.36l5-5"/>
|
|
345
|
+
</svg>
|
|
346
|
+
<span class="visually-hidden">Eyedropper</span>
|
|
347
|
+
</button>
|
|
348
|
+
</div>
|
|
349
|
+
</div>
|
|
350
|
+
|
|
351
|
+
<div class="ep-field">
|
|
352
|
+
<span class="muted small">Background</span>
|
|
353
|
+
<div id="epBg" class="swatches"></div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<label class="ep-check">
|
|
357
|
+
<input id="epAll" type="checkbox" />
|
|
358
|
+
<span class="small">Apply to every matching line in a frame</span>
|
|
359
|
+
</label>
|
|
360
|
+
|
|
361
|
+
<div class="ep-field ep-spacing">
|
|
362
|
+
<span class="muted small">Spacing below this line</span>
|
|
363
|
+
<div class="ep-spacing-row">
|
|
364
|
+
<button id="epSpaceRemove" class="btn small" type="button" title="Remove a blank line below">− line</button>
|
|
365
|
+
<span id="epSpaceVal" class="muted small">0</span>
|
|
366
|
+
<button id="epSpaceAdd" class="btn small" type="button" title="Add a blank line below">+ line</button>
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
<div class="ep-actions">
|
|
371
|
+
<button id="epRemove" class="btn small danger-text hidden" type="button">Remove</button>
|
|
372
|
+
<span class="ep-spacer"></span>
|
|
373
|
+
<button id="epCancel" class="btn small" type="button">Cancel</button>
|
|
374
|
+
<button id="epApply" class="btn small btn-primary" type="button">Accept</button>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<div id="toast" class="toast hidden"></div>
|
|
379
|
+
|
|
380
|
+
<script type="module" src="app.js"></script>
|
|
381
|
+
</body>
|
|
382
|
+
</html>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M2.4905 8.19702H0V13.5211H2.4905V8.19702Z" fill="#8534F3"/>
|
|
3
|
+
<path d="M6.22938 8.19702H4.98413V10.8591H6.22938V8.19702Z" fill="#5FED83"/>
|
|
4
|
+
<path d="M9.96815 8.19702H8.7229V10.8591H9.96815V8.19702Z" fill="#5FED83"/>
|
|
5
|
+
<path d="M14.9549 8.19702H12.4644V13.5211H14.9549V8.19702Z" fill="#8534F3"/>
|
|
6
|
+
<path d="M12.4643 13.5211V14.1866H2.49048V13.5211H12.4643Z" fill="#8534F3"/>
|
|
7
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.43105 0.101131C6.06591 0.128732 6.55526 0.636076 6.55526 1.28485V4.56274C6.55526 5.21151 6.06591 5.71856 5.43105 5.74617V5.74761H2.24848V5.74617C1.61362 5.71856 1.12427 5.21151 1.12427 4.56274V1.28485C1.12427 0.636076 1.61362 0.128732 2.24848 0.101131V0.0999756H5.43105V0.101131ZM2.30307 0.42349C1.81376 0.42349 1.43565 0.795531 1.43565 1.28485V4.56274C1.43565 5.05206 1.81376 5.4241 2.30307 5.4241H5.37646C5.86577 5.4241 6.24388 5.05206 6.24388 4.56274V1.28485C6.24388 0.795531 5.86577 0.42349 5.37646 0.42349H2.30307Z" fill="#3094FF"/>
|
|
8
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1105 0.101131C13.7453 0.128732 14.2347 0.636076 14.2347 1.28485V4.56274C14.2347 5.21151 13.7453 5.71856 13.1105 5.74617V5.74761H9.9279V5.74617C9.29304 5.71856 8.80369 5.21151 8.80369 4.56274V1.28485C8.80369 0.636076 9.29304 0.128732 9.9279 0.101131V0.0999756H13.1105V0.101131ZM9.98249 0.42349C9.49318 0.42349 9.11507 0.795531 9.11507 1.28485V4.56274C9.11507 5.05206 9.49318 5.4241 9.98249 5.4241H13.0559C13.5452 5.4241 13.9233 5.05206 13.9233 4.56274V1.28485C13.9233 0.795531 13.5452 0.42349 13.0559 0.42349H9.98249Z" fill="#3094FF"/>
|
|
9
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.43105 0.101131C6.06591 0.128732 6.55526 0.636076 6.55526 1.28485V4.56274C6.55526 5.21151 6.06591 5.71856 5.43105 5.74617V5.74761H2.24848V5.74617C1.61362 5.71856 1.12427 5.21151 1.12427 4.56274V1.28485C1.12427 0.636076 1.61362 0.128732 2.24848 0.101131V0.0999756H5.43105V0.101131ZM2.30307 0.42349C1.81376 0.42349 1.43565 0.795531 1.43565 1.28485V4.56274C1.43565 5.05206 1.81376 5.4241 2.30307 5.4241H5.37646C5.86577 5.4241 6.24388 5.05206 6.24388 4.56274V1.28485C6.24388 0.795531 5.86577 0.42349 5.37646 0.42349H2.30307Z" stroke="#3094FF" stroke-width="0.2"/>
|
|
10
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1105 0.101131C13.7453 0.128732 14.2347 0.636076 14.2347 1.28485V4.56274C14.2347 5.21151 13.7453 5.71856 13.1105 5.74617V5.74761H9.9279V5.74617C9.29304 5.71856 8.80369 5.21151 8.80369 4.56274V1.28485C8.80369 0.636076 9.29304 0.128732 9.9279 0.101131V0.0999756H13.1105V0.101131ZM9.98249 0.42349C9.49318 0.42349 9.11507 0.795531 9.11507 1.28485V4.56274C9.11507 5.05206 9.49318 5.4241 9.98249 5.4241H13.0559C13.5452 5.4241 13.9233 5.05206 13.9233 4.56274V1.28485C13.9233 0.795531 13.5452 0.42349 13.0559 0.42349H9.98249Z" stroke="#3094FF" stroke-width="0.2"/>
|
|
11
|
+
</svg>
|