@autocode-cli/autocode 0.0.43 → 0.1.4
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 +5 -5
- package/LICENSE.fr.md +203 -0
- package/README.md +48 -15
- package/dist/cli/parser.d.ts +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +5 -4
- package/dist/cli/parser.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +47 -7
- package/dist/server/api.js.map +1 -1
- package/dist/server/dashboard/index.d.ts +10 -0
- package/dist/server/dashboard/index.d.ts.map +1 -0
- package/dist/server/dashboard/index.js +16 -0
- package/dist/server/dashboard/index.js.map +1 -0
- package/dist/server/dashboard/pages/column-edit.d.ts +8 -0
- package/dist/server/dashboard/pages/column-edit.d.ts.map +1 -0
- package/dist/server/dashboard/pages/column-edit.js +303 -0
- package/dist/server/dashboard/pages/column-edit.js.map +1 -0
- package/dist/server/dashboard/pages/column-prompt.d.ts +8 -0
- package/dist/server/dashboard/pages/column-prompt.d.ts.map +1 -0
- package/dist/server/dashboard/pages/column-prompt.js +228 -0
- package/dist/server/dashboard/pages/column-prompt.js.map +1 -0
- package/dist/server/dashboard/pages/column-terminal.d.ts +8 -0
- package/dist/server/dashboard/pages/column-terminal.d.ts.map +1 -0
- package/dist/server/dashboard/pages/column-terminal.js +529 -0
- package/dist/server/dashboard/pages/column-terminal.js.map +1 -0
- package/dist/server/dashboard/pages/index.d.ts +12 -0
- package/dist/server/dashboard/pages/index.d.ts.map +1 -0
- package/dist/server/dashboard/pages/index.js +12 -0
- package/dist/server/dashboard/pages/index.js.map +1 -0
- package/dist/server/dashboard/pages/main-dashboard.d.ts +11 -0
- package/dist/server/dashboard/pages/main-dashboard.d.ts.map +1 -0
- package/dist/server/dashboard/pages/main-dashboard.js +209 -0
- package/dist/server/dashboard/pages/main-dashboard.js.map +1 -0
- package/dist/server/dashboard/pages/shared.d.ts +8 -0
- package/dist/server/dashboard/pages/shared.d.ts.map +1 -0
- package/dist/server/dashboard/pages/shared.js +58 -0
- package/dist/server/dashboard/pages/shared.js.map +1 -0
- package/dist/server/dashboard/pages/ticket-view.d.ts +8 -0
- package/dist/server/dashboard/pages/ticket-view.d.ts.map +1 -0
- package/dist/server/dashboard/pages/ticket-view.js +1364 -0
- package/dist/server/dashboard/pages/ticket-view.js.map +1 -0
- package/dist/server/dashboard/scripts/index.d.ts +11 -0
- package/dist/server/dashboard/scripts/index.d.ts.map +1 -0
- package/dist/server/dashboard/scripts/index.js +1325 -0
- package/dist/server/dashboard/scripts/index.js.map +1 -0
- package/dist/server/dashboard/styles/base.d.ts +5 -0
- package/dist/server/dashboard/styles/base.d.ts.map +1 -0
- package/dist/server/dashboard/styles/base.js +110 -0
- package/dist/server/dashboard/styles/base.js.map +1 -0
- package/dist/server/dashboard/styles/board.d.ts +5 -0
- package/dist/server/dashboard/styles/board.d.ts.map +1 -0
- package/dist/server/dashboard/styles/board.js +168 -0
- package/dist/server/dashboard/styles/board.js.map +1 -0
- package/dist/server/dashboard/styles/comments.d.ts +5 -0
- package/dist/server/dashboard/styles/comments.d.ts.map +1 -0
- package/dist/server/dashboard/styles/comments.js +249 -0
- package/dist/server/dashboard/styles/comments.js.map +1 -0
- package/dist/server/dashboard/styles/components.d.ts +5 -0
- package/dist/server/dashboard/styles/components.d.ts.map +1 -0
- package/dist/server/dashboard/styles/components.js +190 -0
- package/dist/server/dashboard/styles/components.js.map +1 -0
- package/dist/server/dashboard/styles/footer.d.ts +5 -0
- package/dist/server/dashboard/styles/footer.d.ts.map +1 -0
- package/dist/server/dashboard/styles/footer.js +32 -0
- package/dist/server/dashboard/styles/footer.js.map +1 -0
- package/dist/server/dashboard/styles/index.d.ts +8 -0
- package/dist/server/dashboard/styles/index.d.ts.map +1 -0
- package/dist/server/dashboard/styles/index.js +27 -0
- package/dist/server/dashboard/styles/index.js.map +1 -0
- package/dist/server/dashboard/styles/logs.d.ts +5 -0
- package/dist/server/dashboard/styles/logs.d.ts.map +1 -0
- package/dist/server/dashboard/styles/logs.js +89 -0
- package/dist/server/dashboard/styles/logs.js.map +1 -0
- package/dist/server/dashboard/styles/notifications.d.ts +5 -0
- package/dist/server/dashboard/styles/notifications.d.ts.map +1 -0
- package/dist/server/dashboard/styles/notifications.js +51 -0
- package/dist/server/dashboard/styles/notifications.js.map +1 -0
- package/dist/server/dashboard/styles/variables.d.ts +5 -0
- package/dist/server/dashboard/styles/variables.d.ts.map +1 -0
- package/dist/server/dashboard/styles/variables.js +29 -0
- package/dist/server/dashboard/styles/variables.js.map +1 -0
- package/dist/server/dashboard/utils.d.ts +8 -0
- package/dist/server/dashboard/utils.d.ts.map +1 -0
- package/dist/server/dashboard/utils.js +14 -0
- package/dist/server/dashboard/utils.js.map +1 -0
- package/dist/server/dashboard.d.ts +5 -21
- package/dist/server/dashboard.d.ts.map +1 -1
- package/dist/server/dashboard.js +5 -4843
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/websocket.d.ts +12 -0
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +19 -0
- package/dist/server/websocket.js.map +1 -1
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +4 -1
- package/dist/services/claude.js.map +1 -1
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/version-check.d.ts +26 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +234 -0
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main dashboard page generator
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports from the parent dashboard for now.
|
|
5
|
+
* The full page content remains in the main file for stability.
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from 'module';
|
|
8
|
+
import { getColumns } from '../../../core/column.js';
|
|
9
|
+
import { listTickets } from '../../../core/ticket.js';
|
|
10
|
+
import { getWorkflowSummary } from '../../../core/workflow.js';
|
|
11
|
+
import { getConfig } from '../../../utils/config.js';
|
|
12
|
+
import { getStyles } from '../styles/index.js';
|
|
13
|
+
import { getScript } from '../scripts/index.js';
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const pkg = require('../../../../package.json');
|
|
16
|
+
/**
|
|
17
|
+
* Generate the full dashboard HTML
|
|
18
|
+
*/
|
|
19
|
+
export function generateDashboard() {
|
|
20
|
+
const config = getConfig();
|
|
21
|
+
const tickets = listTickets(config.root);
|
|
22
|
+
const columns = getColumns();
|
|
23
|
+
const summary = getWorkflowSummary(tickets);
|
|
24
|
+
const columnsJson = JSON.stringify(columns);
|
|
25
|
+
const ticketsJson = JSON.stringify(tickets);
|
|
26
|
+
const timestamp = new Date().toLocaleString('en-US');
|
|
27
|
+
return `<!DOCTYPE html>
|
|
28
|
+
<html lang="en">
|
|
29
|
+
<head>
|
|
30
|
+
<meta charset="UTF-8">
|
|
31
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
32
|
+
<title>AutoCode Dashboard</title>
|
|
33
|
+
<style>
|
|
34
|
+
${getStyles()}
|
|
35
|
+
</style>
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
<div id="notifications" class="notifications"></div>
|
|
39
|
+
|
|
40
|
+
<header>
|
|
41
|
+
<div class="header-logo">
|
|
42
|
+
<a href="#" class="logo-link"><span>⚡</span> AutoCode</a>
|
|
43
|
+
<span class="header-title">Dashboard</span>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="stats" id="stats"></div>
|
|
46
|
+
<div class="filters">
|
|
47
|
+
<select id="filter-priority">
|
|
48
|
+
<option value="" data-i18n="filter.allPriorities">All priorities</option>
|
|
49
|
+
<option value="P0">P0</option>
|
|
50
|
+
<option value="P1">P1</option>
|
|
51
|
+
<option value="P2">P2</option>
|
|
52
|
+
<option value="P3">P3</option>
|
|
53
|
+
</select>
|
|
54
|
+
<input type="text" id="filter-search" placeholder="Search..." data-i18n-placeholder="filter.search">
|
|
55
|
+
<div class="lang-switcher" id="lang-switcher">
|
|
56
|
+
<button class="lang-btn" data-lang="en">EN</button>
|
|
57
|
+
<button class="lang-btn" data-lang="fr">FR</button>
|
|
58
|
+
</div>
|
|
59
|
+
<button class="btn btn-primary" onclick="openModal()" data-i18n="btn.newTicket">+ New ticket</button>
|
|
60
|
+
</div>
|
|
61
|
+
</header>
|
|
62
|
+
|
|
63
|
+
<main class="board" id="board"></main>
|
|
64
|
+
|
|
65
|
+
<!-- Modal Ticket (create/edit) -->
|
|
66
|
+
<div class="modal-overlay" id="modal-overlay">
|
|
67
|
+
<div class="modal">
|
|
68
|
+
<div class="modal-header">
|
|
69
|
+
<h2 id="modal-title" data-i18n="modal.newTicket">New ticket</h2>
|
|
70
|
+
<button class="modal-close" onclick="closeModal()">×</button>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="modal-body">
|
|
73
|
+
<div class="form-group">
|
|
74
|
+
<label for="ticket-title" data-i18n="modal.title">Title *</label>
|
|
75
|
+
<input type="text" id="ticket-title" placeholder="E.g.: Fix the login bug" data-i18n-placeholder="modal.titlePlaceholder">
|
|
76
|
+
</div>
|
|
77
|
+
<div class="form-group">
|
|
78
|
+
<label for="ticket-description" data-i18n="modal.description">Description</label>
|
|
79
|
+
<textarea id="ticket-description" placeholder="Describe the context and details..." data-i18n-placeholder="modal.descriptionPlaceholder"></textarea>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="form-row">
|
|
82
|
+
<div class="form-group">
|
|
83
|
+
<label for="ticket-priority" data-i18n="modal.priority">Priority</label>
|
|
84
|
+
<select id="ticket-priority">
|
|
85
|
+
<option value="P2" data-i18n="priority.p2">P2 - Normal</option>
|
|
86
|
+
<option value="P0" data-i18n="priority.p0">P0 - Critical</option>
|
|
87
|
+
<option value="P1" data-i18n="priority.p1">P1 - High</option>
|
|
88
|
+
<option value="P3" data-i18n="priority.p3">P3 - Low</option>
|
|
89
|
+
</select>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="form-group">
|
|
92
|
+
<label for="ticket-semver" data-i18n="modal.releaseType">Release type</label>
|
|
93
|
+
<select id="ticket-semver">
|
|
94
|
+
<option value="patch" data-i18n="semver.patch">Patch (x.x.X) - Bug fix</option>
|
|
95
|
+
<option value="minor" data-i18n="semver.minor">Minor (x.X.0) - Feature</option>
|
|
96
|
+
<option value="major" data-i18n="semver.major">Major (X.0.0) - Breaking</option>
|
|
97
|
+
<option value="none" data-i18n="semver.none">No deployment</option>
|
|
98
|
+
</select>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
<div class="form-group labels-select">
|
|
102
|
+
<label for="ticket-labels" data-i18n="modal.labels">Labels</label>
|
|
103
|
+
<select id="ticket-labels" onchange="addLabel(this)">
|
|
104
|
+
<option value="" data-i18n="modal.selectLabel">Select a label...</option>
|
|
105
|
+
<option value="bug">bug</option>
|
|
106
|
+
<option value="feature">feature</option>
|
|
107
|
+
<option value="enhancement">enhancement</option>
|
|
108
|
+
<option value="documentation">documentation</option>
|
|
109
|
+
<option value="urgent">urgent</option>
|
|
110
|
+
<option value="refactoring">refactoring</option>
|
|
111
|
+
<option value="security">security</option>
|
|
112
|
+
<option value="performance">performance</option>
|
|
113
|
+
<option value="ui">ui</option>
|
|
114
|
+
<option value="api">api</option>
|
|
115
|
+
</select>
|
|
116
|
+
<div class="selected-labels" id="selected-labels"></div>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="form-group">
|
|
119
|
+
<label data-i18n="modal.acceptanceCriteria">Acceptance criteria</label>
|
|
120
|
+
<div class="criteria-list" id="criteria-list"></div>
|
|
121
|
+
<button type="button" class="btn-add" onclick="addCriteria()">
|
|
122
|
+
<span>+</span> <span data-i18n="modal.addCriteria">Add criteria</span>
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="attachments-section" id="attachments-section" style="display:none">
|
|
126
|
+
<div class="attachments-header">
|
|
127
|
+
<h3 data-i18n="modal.attachments">Attachments</h3>
|
|
128
|
+
<span class="attachments-count" id="attachments-count">0</span>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="attachments-list" id="attachments-list"></div>
|
|
131
|
+
<div class="attachments-upload">
|
|
132
|
+
<input type="file" id="file-input" multiple style="display:none" onchange="uploadFiles(this.files)">
|
|
133
|
+
<button type="button" class="btn-add" onclick="document.getElementById('file-input').click()">
|
|
134
|
+
<span>📎</span> <span data-i18n="modal.addAttachment">Add file</span>
|
|
135
|
+
</button>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="comments-section" id="comments-section" style="display:none">
|
|
139
|
+
<div class="comments-header">
|
|
140
|
+
<h3 data-i18n="modal.comments">Comments</h3>
|
|
141
|
+
<span class="comments-count" id="comments-count">0</span>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="comments-list" id="comments-list">
|
|
144
|
+
<div class="no-comments" data-i18n="modal.noComments">No comments</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="add-comment">
|
|
147
|
+
<textarea id="new-comment" placeholder="Add a comment..." data-i18n-placeholder="modal.addCommentPlaceholder"></textarea>
|
|
148
|
+
<button class="btn-comment" onclick="addComment()" data-i18n="btn.add">Add</button>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
<div class="claude-log-section" id="claude-log-section" style="display:none">
|
|
152
|
+
<div class="claude-log-header">
|
|
153
|
+
<h3 data-i18n="modal.claudeTerminal">Claude Terminal</h3>
|
|
154
|
+
<span class="claude-log-status" id="claude-log-status" data-i18n="status.waiting">Waiting</span>
|
|
155
|
+
</div>
|
|
156
|
+
<pre class="claude-log" id="claude-log"></pre>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="modal-actions">
|
|
159
|
+
<button class="btn btn-secondary" onclick="closeModal()" data-i18n="btn.cancel">Cancel</button>
|
|
160
|
+
<button class="btn btn-danger" id="btn-archive" style="display:none" onclick="archiveTicket()" data-i18n="btn.archive">Archive</button>
|
|
161
|
+
<button class="btn btn-next" id="btn-next" style="display:none" onclick="advanceTicket()" data-i18n="btn.next">Next</button>
|
|
162
|
+
<button class="btn btn-primary" id="btn-save" onclick="saveTicket()" data-i18n="btn.createTicket">Create ticket</button>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<!-- Modal ACTION.md -->
|
|
169
|
+
<div class="modal-overlay" id="action-modal">
|
|
170
|
+
<div class="modal action-modal">
|
|
171
|
+
<div class="modal-header">
|
|
172
|
+
<div>
|
|
173
|
+
<span class="pill">ACTION.md</span>
|
|
174
|
+
<h2 id="action-modal-title" data-i18n="action.instructions">Instructions</h2>
|
|
175
|
+
</div>
|
|
176
|
+
<button class="modal-close" onclick="closeActionModal()">×</button>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="modal-body">
|
|
179
|
+
<div class="action-toolbar">
|
|
180
|
+
<button class="btn btn-secondary" onclick="reloadActionContent()" data-i18n="btn.reload">Reload</button>
|
|
181
|
+
<button class="btn btn-secondary" id="action-edit-btn" onclick="enterActionEdit()" data-i18n="btn.edit">Edit</button>
|
|
182
|
+
<button class="btn btn-primary" id="action-save-btn" onclick="saveActionContent()" disabled data-i18n="btn.save">Save</button>
|
|
183
|
+
</div>
|
|
184
|
+
<div class="action-meta" id="action-meta"></div>
|
|
185
|
+
<div class="action-empty" id="action-empty" style="display:none"></div>
|
|
186
|
+
<textarea id="action-content" readonly placeholder="No instructions available" data-i18n-placeholder="action.noInstructions"></textarea>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<!-- Context menu -->
|
|
192
|
+
<div class="context-menu" id="context-menu">
|
|
193
|
+
<div class="context-menu-item" onclick="editFromContext()" data-i18n="btn.edit">Edit</div>
|
|
194
|
+
<div class="context-menu-item danger" onclick="archiveFromContext()" data-i18n="btn.archive">Archive</div>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<footer>
|
|
198
|
+
<span>AutoCode v${pkg.version} | <span id="time">${timestamp}</span> | <code title="autodoc root">${config.root}</code></span>
|
|
199
|
+
</footer>
|
|
200
|
+
|
|
201
|
+
<script>
|
|
202
|
+
const COLUMNS = ${columnsJson};
|
|
203
|
+
const TICKETS = ${ticketsJson};
|
|
204
|
+
${getScript()}
|
|
205
|
+
</script>
|
|
206
|
+
</body>
|
|
207
|
+
</html>`;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=main-dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-dashboard.js","sourceRoot":"","sources":["../../../../src/server/dashboard/pages/main-dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAErD,OAAO;;;;;;;MAOH,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAoKK,GAAG,CAAC,OAAO,sBAAsB,SAAS,wCAAwC,MAAM,CAAC,IAAI;;;;sBAI7F,WAAW;sBACX,WAAW;MAC3B,SAAS,EAAE;;;QAGT,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/server/dashboard/pages/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiDvE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared page components
|
|
3
|
+
*/
|
|
4
|
+
import { escapeHtml } from '../utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate a 404 page for ticket not found
|
|
7
|
+
*/
|
|
8
|
+
export function generate404Page(ticketKey, lang) {
|
|
9
|
+
return `<!DOCTYPE html>
|
|
10
|
+
<html lang="${lang}">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="UTF-8">
|
|
13
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
14
|
+
<title>Ticket Not Found - AutoCode</title>
|
|
15
|
+
<style>
|
|
16
|
+
:root {
|
|
17
|
+
--bg: #0a0a0f;
|
|
18
|
+
--text: #f1f5f9;
|
|
19
|
+
--accent: #6366f1;
|
|
20
|
+
}
|
|
21
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
22
|
+
body {
|
|
23
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
24
|
+
background: var(--bg);
|
|
25
|
+
color: var(--text);
|
|
26
|
+
min-height: 100vh;
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
justify-content: center;
|
|
30
|
+
}
|
|
31
|
+
.not-found {
|
|
32
|
+
text-align: center;
|
|
33
|
+
padding: 48px;
|
|
34
|
+
}
|
|
35
|
+
h1 { font-size: 2rem; margin-bottom: 16px; }
|
|
36
|
+
p { color: #94a3b8; margin-bottom: 24px; }
|
|
37
|
+
a {
|
|
38
|
+
display: inline-block;
|
|
39
|
+
background: var(--accent);
|
|
40
|
+
color: white;
|
|
41
|
+
padding: 12px 24px;
|
|
42
|
+
border-radius: 8px;
|
|
43
|
+
text-decoration: none;
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
}
|
|
46
|
+
a:hover { opacity: 0.9; }
|
|
47
|
+
</style>
|
|
48
|
+
</head>
|
|
49
|
+
<body>
|
|
50
|
+
<div class="not-found">
|
|
51
|
+
<h1>Ticket Not Found</h1>
|
|
52
|
+
<p>Ticket ${escapeHtml(ticketKey)} does not exist or has been archived.</p>
|
|
53
|
+
<a href="/">← Back to Dashboard</a>
|
|
54
|
+
</div>
|
|
55
|
+
</body>
|
|
56
|
+
</html>`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/server/dashboard/pages/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,IAAY;IAC7D,OAAO;cACK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0CF,UAAU,CAAC,SAAS,CAAC;;;;QAI7B,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-view.d.ts","sourceRoot":"","sources":["../../../../src/server/dashboard/pages/ticket-view.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA00C9E"}
|