depwire-cli 0.6.2 → 0.7.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,397 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
9
+ background: #0a0a0a;
10
+ color: #e0e0e0;
11
+ overflow: hidden;
12
+ }
13
+
14
+ .app {
15
+ display: flex;
16
+ flex-direction: column;
17
+ height: 100vh;
18
+ }
19
+
20
+ .header {
21
+ background: linear-gradient(135deg, #1a1a1a 0%, #0f0f0f 100%);
22
+ border-bottom: 1px solid #2a2a2a;
23
+ padding: 1rem 1.5rem;
24
+ flex-shrink: 0;
25
+ }
26
+
27
+ .header-content {
28
+ display: flex;
29
+ justify-content: space-between;
30
+ align-items: center;
31
+ max-width: 100%;
32
+ }
33
+
34
+ .header h1 {
35
+ font-size: 1.5rem;
36
+ font-weight: 600;
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 0.75rem;
40
+ }
41
+
42
+ .logo {
43
+ color: #00E5FF;
44
+ }
45
+
46
+ .project-name {
47
+ color: #a0a0a0;
48
+ font-weight: 400;
49
+ }
50
+
51
+ .header-stats {
52
+ display: flex;
53
+ gap: 1.5rem;
54
+ }
55
+
56
+ .stat-item {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 0.5rem;
60
+ }
61
+
62
+ .stat-label {
63
+ color: #808080;
64
+ font-size: 0.875rem;
65
+ }
66
+
67
+ .stat-value {
68
+ color: #00E5FF;
69
+ font-weight: 600;
70
+ font-size: 1rem;
71
+ }
72
+
73
+ .main-content {
74
+ display: grid;
75
+ grid-template-columns: 1fr 320px;
76
+ grid-template-rows: 1fr auto;
77
+ flex: 1;
78
+ overflow: hidden;
79
+ gap: 0;
80
+ }
81
+
82
+ .diagram-container {
83
+ grid-column: 1;
84
+ grid-row: 1;
85
+ background: #0f0f0f;
86
+ position: relative;
87
+ overflow: hidden;
88
+ }
89
+
90
+ .timeline-container {
91
+ grid-column: 1 / -1;
92
+ grid-row: 2;
93
+ background: #1a1a1a;
94
+ border-top: 1px solid #2a2a2a;
95
+ padding: 1rem 1.5rem;
96
+ display: flex;
97
+ flex-direction: column;
98
+ gap: 0.75rem;
99
+ }
100
+
101
+ .timeline-controls {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 1rem;
105
+ }
106
+
107
+ .control-btn {
108
+ background: #2a2a2a;
109
+ border: 1px solid #3a3a3a;
110
+ color: #00E5FF;
111
+ padding: 0.5rem;
112
+ border-radius: 4px;
113
+ cursor: pointer;
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ transition: all 0.2s;
118
+ }
119
+
120
+ .control-btn:hover {
121
+ background: #3a3a3a;
122
+ border-color: #00E5FF;
123
+ }
124
+
125
+ .speed-controls {
126
+ display: flex;
127
+ gap: 0.25rem;
128
+ background: #1a1a1a;
129
+ padding: 0.25rem;
130
+ border-radius: 4px;
131
+ border: 1px solid #2a2a2a;
132
+ }
133
+
134
+ .speed-btn {
135
+ background: transparent;
136
+ border: none;
137
+ color: #808080;
138
+ padding: 0.25rem 0.75rem;
139
+ border-radius: 3px;
140
+ cursor: pointer;
141
+ font-size: 0.875rem;
142
+ transition: all 0.2s;
143
+ }
144
+
145
+ .speed-btn:hover {
146
+ color: #00E5FF;
147
+ }
148
+
149
+ .speed-btn.active {
150
+ background: #00E5FF;
151
+ color: #0a0a0a;
152
+ }
153
+
154
+ .timeline-info {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: 0.5rem;
158
+ color: #a0a0a0;
159
+ font-size: 0.875rem;
160
+ margin-left: auto;
161
+ }
162
+
163
+ .timeline-separator {
164
+ color: #3a3a3a;
165
+ }
166
+
167
+ .timeline-track {
168
+ position: relative;
169
+ }
170
+
171
+ .timeline-rail {
172
+ height: 8px;
173
+ background: #2a2a2a;
174
+ border-radius: 4px;
175
+ position: relative;
176
+ cursor: pointer;
177
+ }
178
+
179
+ .timeline-progress {
180
+ height: 100%;
181
+ background: linear-gradient(90deg, #00E5FF 0%, #7c3aed 100%);
182
+ border-radius: 4px;
183
+ width: 0%;
184
+ transition: width 0.3s ease;
185
+ }
186
+
187
+ .timeline-scrubber {
188
+ position: absolute;
189
+ top: 50%;
190
+ transform: translate(-50%, -50%);
191
+ width: 16px;
192
+ height: 16px;
193
+ background: #00E5FF;
194
+ border: 2px solid #0a0a0a;
195
+ border-radius: 50%;
196
+ cursor: grab;
197
+ left: 0%;
198
+ transition: left 0.3s ease;
199
+ }
200
+
201
+ .timeline-scrubber:active {
202
+ cursor: grabbing;
203
+ }
204
+
205
+ .timeline-dots {
206
+ position: absolute;
207
+ top: 0;
208
+ left: 0;
209
+ right: 0;
210
+ height: 8px;
211
+ pointer-events: none;
212
+ }
213
+
214
+ .timeline-dot {
215
+ position: absolute;
216
+ top: 50%;
217
+ transform: translate(-50%, -50%);
218
+ width: 8px;
219
+ height: 8px;
220
+ background: #3a3a3a;
221
+ border-radius: 50%;
222
+ pointer-events: auto;
223
+ cursor: pointer;
224
+ transition: all 0.2s;
225
+ }
226
+
227
+ .timeline-dot:hover {
228
+ background: #00E5FF;
229
+ transform: translate(-50%, -50%) scale(1.3);
230
+ }
231
+
232
+ .timeline-dot.active {
233
+ background: #00E5FF;
234
+ width: 10px;
235
+ height: 10px;
236
+ }
237
+
238
+ .stats-panel {
239
+ grid-column: 2;
240
+ grid-row: 1;
241
+ background: #1a1a1a;
242
+ border-left: 1px solid #2a2a2a;
243
+ padding: 1.5rem;
244
+ overflow-y: auto;
245
+ display: flex;
246
+ flex-direction: column;
247
+ gap: 1.5rem;
248
+ }
249
+
250
+ .stats-panel h3 {
251
+ font-size: 0.875rem;
252
+ text-transform: uppercase;
253
+ letter-spacing: 0.05em;
254
+ color: #808080;
255
+ margin-bottom: 0.5rem;
256
+ }
257
+
258
+ .snapshot-details,
259
+ .stats-details {
260
+ display: flex;
261
+ flex-direction: column;
262
+ gap: 0.75rem;
263
+ }
264
+
265
+ .detail-row,
266
+ .stat-row {
267
+ display: flex;
268
+ justify-content: space-between;
269
+ align-items: flex-start;
270
+ gap: 1rem;
271
+ }
272
+
273
+ .detail-label,
274
+ .stat-label {
275
+ color: #808080;
276
+ font-size: 0.875rem;
277
+ flex-shrink: 0;
278
+ }
279
+
280
+ .detail-value,
281
+ .stat-value {
282
+ color: #e0e0e0;
283
+ font-size: 0.875rem;
284
+ text-align: right;
285
+ }
286
+
287
+ .detail-value.message {
288
+ word-break: break-word;
289
+ font-style: italic;
290
+ color: #a0a0a0;
291
+ }
292
+
293
+ .stat-delta {
294
+ font-size: 0.75rem;
295
+ padding: 0.125rem 0.5rem;
296
+ border-radius: 3px;
297
+ font-weight: 600;
298
+ }
299
+
300
+ .stat-delta.positive {
301
+ color: #22C55E;
302
+ background: rgba(34, 197, 94, 0.1);
303
+ }
304
+
305
+ .stat-delta.negative {
306
+ color: #EF4444;
307
+ background: rgba(239, 68, 68, 0.1);
308
+ }
309
+
310
+ .chart-container {
311
+ background: #0f0f0f;
312
+ border-radius: 4px;
313
+ padding: 1rem;
314
+ border: 1px solid #2a2a2a;
315
+ }
316
+
317
+ #evolutionChart {
318
+ width: 100%;
319
+ height: auto;
320
+ }
321
+
322
+ .search-container {
323
+ margin-top: auto;
324
+ }
325
+
326
+ .search-input {
327
+ width: 100%;
328
+ padding: 0.75rem;
329
+ background: #0f0f0f;
330
+ border: 1px solid #2a2a2a;
331
+ border-radius: 4px;
332
+ color: #e0e0e0;
333
+ font-size: 0.875rem;
334
+ transition: all 0.2s;
335
+ }
336
+
337
+ .search-input:focus {
338
+ outline: none;
339
+ border-color: #00E5FF;
340
+ background: #1a1a1a;
341
+ }
342
+
343
+ .search-input::placeholder {
344
+ color: #606060;
345
+ }
346
+
347
+ .arc {
348
+ transition: opacity 0.5s ease, stroke 0.5s ease;
349
+ }
350
+
351
+ .file-bar {
352
+ transition: fill 0.5s ease, opacity 0.3s ease;
353
+ }
354
+
355
+ .file-bar.search-match {
356
+ fill: #00E5FF !important;
357
+ }
358
+
359
+ .file-bar.search-dim {
360
+ opacity: 0.2;
361
+ }
362
+
363
+ .tooltip {
364
+ position: absolute;
365
+ background: rgba(26, 26, 26, 0.95);
366
+ border: 1px solid #3a3a3a;
367
+ border-radius: 4px;
368
+ padding: 0.75rem;
369
+ font-size: 0.875rem;
370
+ color: #e0e0e0;
371
+ pointer-events: none;
372
+ z-index: 1000;
373
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
374
+ }
375
+
376
+ .tooltip strong {
377
+ color: #00E5FF;
378
+ display: block;
379
+ margin-bottom: 0.5rem;
380
+ }
381
+
382
+ ::-webkit-scrollbar {
383
+ width: 8px;
384
+ }
385
+
386
+ ::-webkit-scrollbar-track {
387
+ background: #0f0f0f;
388
+ }
389
+
390
+ ::-webkit-scrollbar-thumb {
391
+ background: #2a2a2a;
392
+ border-radius: 4px;
393
+ }
394
+
395
+ ::-webkit-scrollbar-thumb:hover {
396
+ background: #3a3a3a;
397
+ }
@@ -0,0 +1,118 @@
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.0">
6
+ <title>Depwire Temporal — Dependency Graph Evolution</title>
7
+ <link rel="stylesheet" href="/temporal.css">
8
+ <script src="https://d3js.org/d3.v7.min.js"></script>
9
+ </head>
10
+ <body>
11
+ <div class="app">
12
+ <header class="header">
13
+ <div class="header-content">
14
+ <h1>
15
+ <span class="logo">Depwire Temporal</span>
16
+ <span class="project-name" id="projectName">Loading...</span>
17
+ </h1>
18
+ <div class="header-stats" id="headerStats">
19
+ <div class="stat-item">
20
+ <span class="stat-label">Snapshots:</span>
21
+ <span class="stat-value" id="snapshotCount">-</span>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </header>
26
+
27
+ <main class="main-content">
28
+ <div class="diagram-container">
29
+ <svg id="diagram"></svg>
30
+ </div>
31
+
32
+ <div class="timeline-container">
33
+ <div class="timeline-controls">
34
+ <button id="playBtn" class="control-btn" title="Play/Pause">
35
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
36
+ <path d="M3 2v12l10-6L3 2z"/>
37
+ </svg>
38
+ </button>
39
+ <div class="speed-controls">
40
+ <button class="speed-btn" data-speed="0.5">0.5×</button>
41
+ <button class="speed-btn active" data-speed="1">1×</button>
42
+ <button class="speed-btn" data-speed="2">2×</button>
43
+ </div>
44
+ <div class="timeline-info" id="timelineInfo">
45
+ <span id="currentCommit">-</span>
46
+ <span class="timeline-separator">•</span>
47
+ <span id="currentDate">-</span>
48
+ </div>
49
+ </div>
50
+ <div class="timeline-track">
51
+ <div class="timeline-rail" id="timelineRail">
52
+ <div class="timeline-progress" id="timelineProgress"></div>
53
+ <div class="timeline-scrubber" id="timelineScrubber"></div>
54
+ </div>
55
+ <div class="timeline-dots" id="timelineDots"></div>
56
+ </div>
57
+ </div>
58
+
59
+ <aside class="stats-panel">
60
+ <h3>Current Snapshot</h3>
61
+ <div class="snapshot-details" id="snapshotDetails">
62
+ <div class="detail-row">
63
+ <span class="detail-label">Commit:</span>
64
+ <span class="detail-value" id="detailCommit">-</span>
65
+ </div>
66
+ <div class="detail-row">
67
+ <span class="detail-label">Date:</span>
68
+ <span class="detail-value" id="detailDate">-</span>
69
+ </div>
70
+ <div class="detail-row">
71
+ <span class="detail-label">Message:</span>
72
+ <span class="detail-value message" id="detailMessage">-</span>
73
+ </div>
74
+ <div class="detail-row">
75
+ <span class="detail-label">Author:</span>
76
+ <span class="detail-value" id="detailAuthor">-</span>
77
+ </div>
78
+ </div>
79
+
80
+ <h3>Statistics</h3>
81
+ <div class="stats-details" id="statsDetails">
82
+ <div class="stat-row">
83
+ <span class="stat-label">Files:</span>
84
+ <span class="stat-value" id="statFiles">-</span>
85
+ <span class="stat-delta" id="deltaFiles"></span>
86
+ </div>
87
+ <div class="stat-row">
88
+ <span class="stat-label">Symbols:</span>
89
+ <span class="stat-value" id="statSymbols">-</span>
90
+ <span class="stat-delta" id="deltaSymbols"></span>
91
+ </div>
92
+ <div class="stat-row">
93
+ <span class="stat-label">Edges:</span>
94
+ <span class="stat-value" id="statEdges">-</span>
95
+ <span class="stat-delta" id="deltaEdges"></span>
96
+ </div>
97
+ </div>
98
+
99
+ <h3>Evolution Chart</h3>
100
+ <div class="chart-container">
101
+ <canvas id="evolutionChart" width="280" height="200"></canvas>
102
+ </div>
103
+
104
+ <div class="search-container">
105
+ <input
106
+ type="text"
107
+ id="searchInput"
108
+ class="search-input"
109
+ placeholder="Search files..."
110
+ />
111
+ </div>
112
+ </aside>
113
+ </main>
114
+ </div>
115
+
116
+ <script src="/temporal.js"></script>
117
+ </body>
118
+ </html>