@vitejs/devtools 0.0.0-alpha.8 → 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.
Files changed (35) hide show
  1. package/dist/DockIcon-Jbdv1CYn.js +1720 -0
  2. package/dist/DockStandalone-Dd6Dcd5B.js +81 -0
  3. package/dist/LogItem-CfTxUV6A.js +204 -0
  4. package/dist/ToastOverlay-BVErqkif.js +1048 -0
  5. package/dist/ViewBuiltinLogs-DQLxnQ1c.js +427 -0
  6. package/dist/ViewBuiltinTerminals-B83FB-cT.js +10407 -0
  7. package/dist/cli-commands-DRp01A04.js +178 -0
  8. package/dist/cli-commands.d.ts +18 -0
  9. package/dist/cli-commands.js +3 -0
  10. package/dist/cli.js +5 -94
  11. package/dist/client/inject.js +170 -18
  12. package/dist/client/standalone/assets/DockStandalone-B8W-HO8N.js +1 -0
  13. package/dist/client/standalone/assets/LogItem-B-ayIBi6.js +1 -0
  14. package/dist/client/standalone/assets/ViewBuiltinLogs-B8M7lPbt.js +1 -0
  15. package/dist/client/standalone/assets/ViewBuiltinTerminals-Dkd5qdlN.js +36 -0
  16. package/dist/client/standalone/assets/dist-ZC9UAo6H.js +1 -0
  17. package/dist/client/standalone/assets/index-6F2y1lxr.css +1 -0
  18. package/dist/client/standalone/assets/index-odNIfapG.js +4 -0
  19. package/dist/client/standalone/index.html +5 -3
  20. package/dist/client/webcomponents.d.ts +21656 -30
  21. package/dist/client/webcomponents.js +305 -423
  22. package/dist/config.d.ts +25 -0
  23. package/dist/config.js +14 -0
  24. package/dist/dirs.js +7 -3
  25. package/dist/{dist-BuuUhVT5.js → dist-3NIYLDlS.js} +2261 -936
  26. package/dist/index.d.ts +256 -14
  27. package/dist/index.js +2 -4
  28. package/dist/plugins-6tW2SoNv.js +2115 -0
  29. package/dist/popup-EDv_a9nQ.js +358 -0
  30. package/dist/utils--qjmgani.js +6 -0
  31. package/package.json +51 -21
  32. package/dist/client/standalone/assets/index-DULlvzQC.css +0 -1
  33. package/dist/client/standalone/assets/index-Dpd5aqgb.js +0 -7
  34. package/dist/dirs-DcSK9l9L.js +0 -9
  35. package/dist/plugins-Cj9DSRH1.js +0 -1348
@@ -0,0 +1,427 @@
1
+ import { B as withDirectives, C as createElementBlock, E as createVNode, J as normalizeStyle, K as unref, N as openBlock, O as defineComponent, P as renderList, S as createCommentVNode, T as createTextVNode, U as ref, Y as toDisplayString, _ as Fragment, b as createBaseVNode, g as withModifiers, j as onMounted, o as useTimeAgo, p as vModelText, q as normalizeClass, x as createBlock, y as computed, z as withCtx } from "./dist-3NIYLDlS.js";
2
+ import { a as levels, i as getHashColorFromString, n as _sfc_main$3, o as markLogsAsRead, r as formEntries, s as useLogs, t as _sfc_main$2 } from "./LogItem-CfTxUV6A.js";
3
+ //#region src/client/webcomponents/components/FilterToggles.vue
4
+ const _hoisted_1$1 = { class: "text-xs op40" };
5
+ const _hoisted_2$1 = { class: "flex flex-wrap items-center gap-0.5" };
6
+ const _hoisted_3$1 = ["onClick"];
7
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
8
+ __name: "FilterToggles",
9
+ props: {
10
+ label: {},
11
+ items: {},
12
+ active: {},
13
+ styles: {},
14
+ hashColor: { type: Function }
15
+ },
16
+ emits: ["toggle"],
17
+ setup(__props) {
18
+ return (_ctx, _cache) => {
19
+ return openBlock(), createElementBlock(Fragment, null, [createBaseVNode("span", _hoisted_1$1, toDisplayString(__props.label), 1), createBaseVNode("div", _hoisted_2$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
20
+ return openBlock(), createElementBlock("button", {
21
+ key: item,
22
+ class: normalizeClass(["px-1.5 py-0.5 rounded text-xs flex items-center gap-0.5 hover:bg-active transition", [__props.active.size === 0 || __props.active.has(item) ? __props.styles?.[item]?.color || "" : "op30"]]),
23
+ style: normalizeStyle(!__props.styles?.[item]?.color && __props.hashColor ? {
24
+ color: __props.active.size === 0 || __props.active.has(item) ? __props.hashColor(item, 1) : void 0,
25
+ backgroundColor: __props.active.size === 0 || __props.active.has(item) ? __props.hashColor(item, .1) : void 0
26
+ } : void 0),
27
+ onClick: ($event) => _ctx.$emit("toggle", item)
28
+ }, [__props.styles?.[item]?.icon ? (openBlock(), createElementBlock("div", {
29
+ key: 0,
30
+ class: normalizeClass([__props.styles[item].icon, "w-3.5 h-3.5"])
31
+ }, null, 2)) : createCommentVNode("v-if", true), createBaseVNode("span", null, toDisplayString(__props.styles?.[item]?.label || item), 1)], 14, _hoisted_3$1);
32
+ }), 128))])], 64);
33
+ };
34
+ }
35
+ });
36
+ //#endregion
37
+ //#region src/client/webcomponents/components/ViewBuiltinLogs.vue
38
+ const _hoisted_1 = { class: "w-full h-full grid grid-rows-[max-content_1fr]" };
39
+ const _hoisted_2 = { class: "border-base border-b p3 flex flex-col gap-2" };
40
+ const _hoisted_3 = { class: "flex items-center gap-1" };
41
+ const _hoisted_4 = ["title"];
42
+ const _hoisted_5 = {
43
+ key: 0,
44
+ class: "text-xs op40"
45
+ };
46
+ const _hoisted_6 = {
47
+ key: 2,
48
+ class: "border-l border-base h-4 mx-0.5"
49
+ };
50
+ const _hoisted_7 = { class: "flex flex-wrap items-center gap-1" };
51
+ const _hoisted_8 = { class: "h-full of-y-auto" };
52
+ const _hoisted_9 = {
53
+ key: 0,
54
+ class: "flex items-center justify-center h-full op50 text-sm"
55
+ };
56
+ const _hoisted_10 = ["onClick"];
57
+ const _hoisted_11 = ["onClick"];
58
+ const _hoisted_12 = {
59
+ key: 0,
60
+ class: "h-full of-y-auto border-l border-base p-4"
61
+ };
62
+ const _hoisted_13 = { class: "flex items-start gap-2 mb-3" };
63
+ const _hoisted_14 = { class: "flex-1" };
64
+ const _hoisted_15 = { class: "font-medium text-lg" };
65
+ const _hoisted_16 = { class: "flex flex-wrap items-center gap-2 mb-3 text-xs" };
66
+ const _hoisted_17 = { class: "capitalize" };
67
+ const _hoisted_18 = {
68
+ key: 1,
69
+ class: "flex items-center gap-1 text-amber"
70
+ };
71
+ const _hoisted_19 = ["title"];
72
+ const _hoisted_20 = {
73
+ key: 2,
74
+ class: "flex items-center gap-0.5 op40"
75
+ };
76
+ const _hoisted_21 = {
77
+ key: 0,
78
+ class: "text-sm op80 mb-3 whitespace-pre-wrap"
79
+ };
80
+ const _hoisted_22 = {
81
+ key: 1,
82
+ class: "flex flex-wrap gap-1 mb-3"
83
+ };
84
+ const _hoisted_23 = {
85
+ key: 3,
86
+ class: "text-sm mb-3 bg-gray/5 rounded p-2"
87
+ };
88
+ const _hoisted_24 = {
89
+ key: 0,
90
+ class: "font-mono text-xs"
91
+ };
92
+ const _hoisted_25 = {
93
+ key: 1,
94
+ class: "text-xs op70 mt-1"
95
+ };
96
+ const _hoisted_26 = {
97
+ key: 2,
98
+ class: "text-xs op50 mt-1 font-mono"
99
+ };
100
+ const _hoisted_27 = {
101
+ key: 4,
102
+ class: "mb-3"
103
+ };
104
+ const _hoisted_28 = { class: "text-xs bg-gray/5 rounded p-2 of-x-auto whitespace-pre-wrap font-mono" };
105
+ const _hoisted_29 = {
106
+ key: 5,
107
+ class: "flex flex-wrap gap-3 mb-3 text-xs op50"
108
+ };
109
+ const _hoisted_30 = {
110
+ key: 0,
111
+ class: "flex items-center gap-1"
112
+ };
113
+ const _hoisted_31 = {
114
+ key: 1,
115
+ class: "flex items-center gap-1"
116
+ };
117
+ const _hoisted_32 = { class: "flex flex-col gap-1 mb-3 text-xs op40 font-mono border-t border-base pt-3" };
118
+ const _sfc_main = /* @__PURE__ */ defineComponent({
119
+ __name: "ViewBuiltinLogs",
120
+ props: { context: {} },
121
+ setup(__props) {
122
+ const props = __props;
123
+ function formatAbsoluteTime(ts) {
124
+ return new Date(ts).toLocaleTimeString();
125
+ }
126
+ const logsState = useLogs(props.context);
127
+ const allLevels = Object.keys(levels);
128
+ const allFroms = Object.keys(formEntries);
129
+ const sortLabels = {
130
+ newest: "Newest first",
131
+ oldest: "Oldest first",
132
+ level: "By severity"
133
+ };
134
+ const sortIcons = {
135
+ newest: "i-ph:sort-descending-duotone",
136
+ oldest: "i-ph:sort-ascending-duotone",
137
+ level: "i-ph:warning-diamond-duotone"
138
+ };
139
+ const search = ref("");
140
+ const selectedId = ref(null);
141
+ const activeFilters = ref(/* @__PURE__ */ new Set());
142
+ const activeLabelFilters = ref(/* @__PURE__ */ new Set());
143
+ const activeFromFilters = ref(/* @__PURE__ */ new Set());
144
+ const activeCategories = ref(/* @__PURE__ */ new Set());
145
+ const sortBy = ref("newest");
146
+ const sortModes = [
147
+ "newest",
148
+ "oldest",
149
+ "level"
150
+ ];
151
+ function cycleSortMode() {
152
+ sortBy.value = sortModes[(sortModes.indexOf(sortBy.value) + 1) % sortModes.length];
153
+ }
154
+ const levelPriority = {
155
+ error: 0,
156
+ warn: 1,
157
+ info: 2,
158
+ success: 3,
159
+ debug: 4
160
+ };
161
+ function toggleFilter(level) {
162
+ const filters = activeFilters.value;
163
+ if (filters.has(level)) filters.delete(level);
164
+ else filters.add(level);
165
+ }
166
+ function toggleLabelFilter(label) {
167
+ const filters = activeLabelFilters.value;
168
+ if (filters.has(label)) filters.delete(label);
169
+ else filters.add(label);
170
+ }
171
+ function toggleFrom(from) {
172
+ const s = activeFromFilters.value;
173
+ if (s.has(from)) s.delete(from);
174
+ else s.add(from);
175
+ }
176
+ function toggleCategory(category) {
177
+ const c = activeCategories.value;
178
+ if (c.has(category)) c.delete(category);
179
+ else c.add(category);
180
+ }
181
+ const hasActiveFilter = computed(() => {
182
+ return activeFilters.value.size > 0 || activeLabelFilters.value.size > 0 || activeFromFilters.value.size > 0 || activeCategories.value.size > 0 || search.value.length > 0;
183
+ });
184
+ function resetFilters() {
185
+ activeFilters.value.clear();
186
+ activeLabelFilters.value.clear();
187
+ activeFromFilters.value.clear();
188
+ activeCategories.value.clear();
189
+ search.value = "";
190
+ }
191
+ const allLabels = computed(() => {
192
+ const labels = /* @__PURE__ */ new Set();
193
+ for (const entry of logsState.entries) if (entry.labels) for (const label of entry.labels) labels.add(label);
194
+ return Array.from(labels).sort();
195
+ });
196
+ const allCategories = computed(() => {
197
+ const cats = /* @__PURE__ */ new Set();
198
+ for (const entry of logsState.entries) if (entry.category) cats.add(entry.category);
199
+ return Array.from(cats).sort();
200
+ });
201
+ const filteredEntries = computed(() => {
202
+ let entries = logsState.entries;
203
+ if (activeFilters.value.size > 0) entries = entries.filter((e) => activeFilters.value.has(e.level));
204
+ if (activeLabelFilters.value.size > 0) entries = entries.filter((e) => e.labels?.some((l) => activeLabelFilters.value.has(l)));
205
+ if (activeFromFilters.value.size > 0) entries = entries.filter((e) => activeFromFilters.value.has(e.from));
206
+ if (activeCategories.value.size > 0) entries = entries.filter((e) => e.category && activeCategories.value.has(e.category));
207
+ if (search.value) {
208
+ const q = search.value.toLowerCase();
209
+ entries = entries.filter((e) => e.message.toLowerCase().includes(q) || e.description?.toLowerCase().includes(q) || e.from?.toLowerCase().includes(q) || e.category?.toLowerCase().includes(q) || e.labels?.some((l) => l.toLowerCase().includes(q)));
210
+ }
211
+ if (sortBy.value === "oldest") return [...entries];
212
+ if (sortBy.value === "level") return entries.toSorted((a, b) => levelPriority[a.level] - levelPriority[b.level]);
213
+ return entries.toReversed();
214
+ });
215
+ const selectedEntry = computed(() => {
216
+ if (!selectedId.value) return null;
217
+ return logsState.entries.find((e) => e.id === selectedId.value) ?? null;
218
+ });
219
+ const selectedTimeAgo = useTimeAgo(computed(() => selectedEntry.value?.timestamp ?? Date.now()));
220
+ async function openFile(entry) {
221
+ if (!entry.filePosition) return;
222
+ const { file, line, column } = entry.filePosition;
223
+ let path = file;
224
+ if (line) path += `:${line}`;
225
+ if (column) path += `:${column}`;
226
+ await props.context.rpc.call("vite:core:open-in-editor", path);
227
+ }
228
+ async function clearAll() {
229
+ await props.context.rpc.call("devtoolskit:internal:logs:clear");
230
+ selectedId.value = null;
231
+ }
232
+ async function removeEntry(id) {
233
+ await props.context.rpc.call("devtoolskit:internal:logs:remove", id);
234
+ if (selectedId.value === id) selectedId.value = null;
235
+ }
236
+ async function dismissFiltered() {
237
+ const ids = filteredEntries.value.map((e) => e.id);
238
+ for (const id of ids) await props.context.rpc.call("devtoolskit:internal:logs:remove", id);
239
+ selectedId.value = null;
240
+ }
241
+ onMounted(() => {
242
+ markLogsAsRead();
243
+ });
244
+ return (_ctx, _cache) => {
245
+ return openBlock(), createElementBlock("div", _hoisted_1, [
246
+ createCommentVNode(" Toolbar "),
247
+ createBaseVNode("div", _hoisted_2, [
248
+ createCommentVNode(" Row 1: Search + sort + actions "),
249
+ createBaseVNode("div", _hoisted_3, [
250
+ withDirectives(createBaseVNode("input", {
251
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => search.value = $event),
252
+ type: "text",
253
+ placeholder: "Search logs...",
254
+ class: "bg-transparent border border-base rounded px-2 py-0.5 text-xs w-48 outline-none focus:border-purple"
255
+ }, null, 512), [[vModelText, search.value]]),
256
+ createBaseVNode("button", {
257
+ class: "flex items-center gap-0.5 op50 hover:op100 p-1 rounded hover:bg-active transition",
258
+ title: sortLabels[sortBy.value],
259
+ onClick: cycleSortMode
260
+ }, [createBaseVNode("div", { class: normalizeClass([sortIcons[sortBy.value], "w-4 h-4"]) }, null, 2)], 8, _hoisted_4),
261
+ _cache[7] || (_cache[7] = createBaseVNode("div", { class: "flex-1" }, null, -1)),
262
+ filteredEntries.value.length !== unref(logsState).entries.length ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(filteredEntries.value.length) + "/" + toDisplayString(unref(logsState).entries.length), 1)) : createCommentVNode("v-if", true),
263
+ hasActiveFilter.value ? (openBlock(), createElementBlock("button", {
264
+ key: 1,
265
+ class: "text-xs op50 hover:op100 px-1.5 py-0.5 hover:bg-active rounded transition flex items-center gap-0.5",
266
+ title: "Reset all filters",
267
+ onClick: resetFilters
268
+ }, [..._cache[4] || (_cache[4] = [createBaseVNode("div", { class: "i-ph:funnel-x-duotone w-3.5 h-3.5" }, null, -1), createTextVNode(" Reset Filters ", -1)])])) : createCommentVNode("v-if", true),
269
+ hasActiveFilter.value ? (openBlock(), createElementBlock("div", _hoisted_6)) : createCommentVNode("v-if", true),
270
+ hasActiveFilter.value && filteredEntries.value.length > 0 ? (openBlock(), createElementBlock("button", {
271
+ key: 3,
272
+ class: "text-xs op50 hover:op100 px-1.5 py-0.5 hover:bg-active rounded transition flex items-center gap-0.5",
273
+ title: "Dismiss all matching the current filter",
274
+ onClick: dismissFiltered
275
+ }, [..._cache[5] || (_cache[5] = [createBaseVNode("div", { class: "i-ph:trash-duotone w-3.5 h-3.5" }, null, -1), createTextVNode(" Dismiss filtered ", -1)])])) : createCommentVNode("v-if", true),
276
+ !hasActiveFilter.value && unref(logsState).entries.length > 0 ? (openBlock(), createElementBlock("button", {
277
+ key: 4,
278
+ class: "text-xs op50 hover:op100 px-1.5 py-0.5 hover:bg-active rounded transition flex items-center gap-0.5",
279
+ title: "Dismiss all logs",
280
+ onClick: clearAll
281
+ }, [..._cache[6] || (_cache[6] = [createBaseVNode("div", { class: "i-ph:trash-duotone w-3.5 h-3.5" }, null, -1), createTextVNode(" Dismiss all ", -1)])])) : createCommentVNode("v-if", true)
282
+ ]),
283
+ createCommentVNode(" Row 2: Level + source + category + label filters "),
284
+ createBaseVNode("div", _hoisted_7, [
285
+ createVNode(_sfc_main$1, {
286
+ label: "Level",
287
+ items: unref(allLevels),
288
+ active: activeFilters.value,
289
+ styles: unref(levels),
290
+ onToggle: toggleFilter
291
+ }, null, 8, [
292
+ "items",
293
+ "active",
294
+ "styles"
295
+ ]),
296
+ _cache[10] || (_cache[10] = createBaseVNode("div", { class: "border-l border-base h-4 mx-0.5" }, null, -1)),
297
+ createVNode(_sfc_main$1, {
298
+ label: "From",
299
+ items: unref(allFroms),
300
+ active: activeFromFilters.value,
301
+ styles: unref(formEntries),
302
+ onToggle: toggleFrom
303
+ }, null, 8, [
304
+ "items",
305
+ "active",
306
+ "styles",
307
+ "onToggle"
308
+ ]),
309
+ allCategories.value.length > 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [_cache[8] || (_cache[8] = createBaseVNode("div", { class: "border-l border-base h-4 mx-1" }, null, -1)), createVNode(_sfc_main$1, {
310
+ label: "Category",
311
+ items: allCategories.value,
312
+ active: activeCategories.value,
313
+ "hash-color": unref(getHashColorFromString),
314
+ onToggle: toggleCategory
315
+ }, null, 8, [
316
+ "items",
317
+ "active",
318
+ "hash-color"
319
+ ])], 64)) : createCommentVNode("v-if", true),
320
+ allLabels.value.length > 0 ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [_cache[9] || (_cache[9] = createBaseVNode("div", { class: "border-l border-base h-4 mx-1" }, null, -1)), createVNode(_sfc_main$1, {
321
+ label: "Labels",
322
+ items: allLabels.value,
323
+ active: activeLabelFilters.value,
324
+ "hash-color": unref(getHashColorFromString),
325
+ onToggle: toggleLabelFilter
326
+ }, null, 8, [
327
+ "items",
328
+ "active",
329
+ "hash-color"
330
+ ])], 64)) : createCommentVNode("v-if", true)
331
+ ])
332
+ ]),
333
+ createCommentVNode(" Content "),
334
+ createBaseVNode("div", { class: normalizeClass(["h-full of-hidden", selectedEntry.value ? "grid grid-cols-[1fr_1fr]" : ""]) }, [
335
+ createCommentVNode(" Log list "),
336
+ createBaseVNode("div", _hoisted_8, [filteredEntries.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_9, " No logs ")) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(filteredEntries.value, (entry) => {
337
+ return openBlock(), createElementBlock("div", {
338
+ key: entry.id,
339
+ class: normalizeClass(["w-full text-left border-b border-base hover:bg-active transition border-l-2 text-sm group cursor-pointer", [selectedId.value === entry.id ? "bg-active" : ""]]),
340
+ onClick: ($event) => selectedId.value = selectedId.value === entry.id ? null : entry.id
341
+ }, [createVNode(_sfc_main$2, {
342
+ entry,
343
+ class: "px-3 py-2.5"
344
+ }, {
345
+ actions: withCtx(() => [createBaseVNode("button", {
346
+ class: "op0 group-hover:op50 hover:op100! p-0.5 rounded hover:bg-active flex-none",
347
+ title: "Dismiss",
348
+ onClick: withModifiers(($event) => removeEntry(entry.id), ["stop"])
349
+ }, [..._cache[11] || (_cache[11] = [createBaseVNode("div", { class: "i-ph-trash-duotone w-3 h-3" }, null, -1)])], 8, _hoisted_11)]),
350
+ _: 2
351
+ }, 1032, ["entry"])], 10, _hoisted_10);
352
+ }), 128))]),
353
+ createCommentVNode(" Detail panel "),
354
+ selectedEntry.value ? (openBlock(), createElementBlock("div", _hoisted_12, [
355
+ createCommentVNode(" Header "),
356
+ createBaseVNode("div", _hoisted_13, [
357
+ createBaseVNode("div", _hoisted_14, [createBaseVNode("div", _hoisted_15, toDisplayString(selectedEntry.value.message), 1)]),
358
+ createCommentVNode(" Dismiss button "),
359
+ createBaseVNode("button", {
360
+ class: "op50 hover:op100 p-1",
361
+ title: "Dismiss",
362
+ onClick: _cache[1] || (_cache[1] = ($event) => removeEntry(selectedEntry.value.id))
363
+ }, [..._cache[12] || (_cache[12] = [createBaseVNode("div", { class: "i-ph-trash-duotone w-4 h-4" }, null, -1)])]),
364
+ createCommentVNode(" Close button "),
365
+ createBaseVNode("button", {
366
+ class: "op50 hover:op100 p-1",
367
+ title: "Close detail",
368
+ onClick: _cache[2] || (_cache[2] = ($event) => selectedId.value = null)
369
+ }, [..._cache[13] || (_cache[13] = [createBaseVNode("div", { class: "i-ph-x w-4 h-4" }, null, -1)])])
370
+ ]),
371
+ createCommentVNode(" Metadata row "),
372
+ createBaseVNode("div", _hoisted_16, [
373
+ createBaseVNode("span", { class: normalizeClass(["flex items-center gap-1", unref(levels)[selectedEntry.value.level].color]) }, [createBaseVNode("div", { class: normalizeClass([unref(levels)[selectedEntry.value.level].icon, "w-3.5 h-3.5"]) }, null, 2), createBaseVNode("span", _hoisted_17, toDisplayString(selectedEntry.value.level), 1)], 2),
374
+ unref(formEntries)[selectedEntry.value.from] ? (openBlock(), createElementBlock("span", {
375
+ key: 0,
376
+ class: normalizeClass(["flex items-center gap-1", unref(formEntries)[selectedEntry.value.from].color])
377
+ }, [createBaseVNode("div", { class: normalizeClass([unref(formEntries)[selectedEntry.value.from].icon, "w-3.5 h-3.5"]) }, null, 2), createTextVNode(" " + toDisplayString(unref(formEntries)[selectedEntry.value.from].label), 1)], 2)) : createCommentVNode("v-if", true),
378
+ selectedEntry.value.status === "loading" ? (openBlock(), createElementBlock("span", _hoisted_18, [..._cache[14] || (_cache[14] = [createBaseVNode("div", { class: "w-3 h-3 border-1.5 border-current border-t-transparent rounded-full animate-spin" }, null, -1), createTextVNode(" Loading ", -1)])])) : createCommentVNode("v-if", true),
379
+ createBaseVNode("span", {
380
+ class: "op40",
381
+ title: formatAbsoluteTime(selectedEntry.value.timestamp)
382
+ }, toDisplayString(unref(selectedTimeAgo)), 9, _hoisted_19),
383
+ selectedEntry.value.notify ? (openBlock(), createElementBlock("span", _hoisted_20, [..._cache[15] || (_cache[15] = [createBaseVNode("div", { class: "i-ph:bell-duotone w-3.5 h-3.5" }, null, -1), createTextVNode(" notify ", -1)])])) : createCommentVNode("v-if", true)
384
+ ]),
385
+ createCommentVNode(" Description "),
386
+ selectedEntry.value.description ? (openBlock(), createElementBlock("div", _hoisted_21, toDisplayString(selectedEntry.value.description), 1)) : createCommentVNode("v-if", true),
387
+ createCommentVNode(" Category + Labels "),
388
+ selectedEntry.value.category || selectedEntry.value.labels && selectedEntry.value.labels.length ? (openBlock(), createElementBlock("div", _hoisted_22, [selectedEntry.value.category ? (openBlock(), createBlock(_sfc_main$3, {
389
+ key: 0,
390
+ label: selectedEntry.value.category
391
+ }, null, 8, ["label"])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(selectedEntry.value.labels, (label) => {
392
+ return openBlock(), createBlock(_sfc_main$3, {
393
+ key: label,
394
+ label
395
+ }, null, 8, ["label"]);
396
+ }), 128))])) : createCommentVNode("v-if", true),
397
+ createCommentVNode(" File position "),
398
+ selectedEntry.value.filePosition ? (openBlock(), createElementBlock("button", {
399
+ key: 2,
400
+ class: "flex items-center gap-1.5 text-sm text-blue hover:underline mb-3",
401
+ onClick: _cache[3] || (_cache[3] = ($event) => openFile(selectedEntry.value))
402
+ }, [_cache[16] || (_cache[16] = createBaseVNode("div", { class: "i-ph:file-code-duotone w-4 h-4" }, null, -1)), createBaseVNode("span", null, [
403
+ createTextVNode(toDisplayString(selectedEntry.value.filePosition.file), 1),
404
+ selectedEntry.value.filePosition.line ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(":" + toDisplayString(selectedEntry.value.filePosition.line), 1)], 64)) : createCommentVNode("v-if", true),
405
+ selectedEntry.value.filePosition.column ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(":" + toDisplayString(selectedEntry.value.filePosition.column), 1)], 64)) : createCommentVNode("v-if", true)
406
+ ])])) : createCommentVNode("v-if", true),
407
+ createCommentVNode(" Element position "),
408
+ selectedEntry.value.elementPosition ? (openBlock(), createElementBlock("div", _hoisted_23, [
409
+ _cache[17] || (_cache[17] = createBaseVNode("div", { class: "op50 text-xs mb-1" }, " Element ", -1)),
410
+ selectedEntry.value.elementPosition.selector ? (openBlock(), createElementBlock("div", _hoisted_24, toDisplayString(selectedEntry.value.elementPosition.selector), 1)) : createCommentVNode("v-if", true),
411
+ selectedEntry.value.elementPosition.description ? (openBlock(), createElementBlock("div", _hoisted_25, toDisplayString(selectedEntry.value.elementPosition.description), 1)) : createCommentVNode("v-if", true),
412
+ selectedEntry.value.elementPosition.boundingBox ? (openBlock(), createElementBlock("div", _hoisted_26, toDisplayString(selectedEntry.value.elementPosition.boundingBox.x) + ", " + toDisplayString(selectedEntry.value.elementPosition.boundingBox.y) + " (" + toDisplayString(selectedEntry.value.elementPosition.boundingBox.width) + " × " + toDisplayString(selectedEntry.value.elementPosition.boundingBox.height) + ") ", 1)) : createCommentVNode("v-if", true)
413
+ ])) : createCommentVNode("v-if", true),
414
+ createCommentVNode(" Stacktrace "),
415
+ selectedEntry.value.stacktrace ? (openBlock(), createElementBlock("div", _hoisted_27, [_cache[18] || (_cache[18] = createBaseVNode("div", { class: "op50 text-xs mb-1" }, " Stack Trace ", -1)), createBaseVNode("pre", _hoisted_28, toDisplayString(selectedEntry.value.stacktrace), 1)])) : createCommentVNode("v-if", true),
416
+ createCommentVNode(" Timers "),
417
+ selectedEntry.value.autoDismiss || selectedEntry.value.autoDelete ? (openBlock(), createElementBlock("div", _hoisted_29, [selectedEntry.value.autoDismiss ? (openBlock(), createElementBlock("span", _hoisted_30, [_cache[19] || (_cache[19] = createBaseVNode("div", { class: "i-ph:bell-slash-duotone w-3.5 h-3.5" }, null, -1)), createTextVNode(" Auto-dismiss: " + toDisplayString(selectedEntry.value.autoDismiss / 1e3) + "s ", 1)])) : createCommentVNode("v-if", true), selectedEntry.value.autoDelete ? (openBlock(), createElementBlock("span", _hoisted_31, [_cache[20] || (_cache[20] = createBaseVNode("div", { class: "i-ph:timer-duotone w-3.5 h-3.5" }, null, -1)), createTextVNode(" Auto-delete: " + toDisplayString(selectedEntry.value.autoDelete / 1e3) + "s ", 1)])) : createCommentVNode("v-if", true)])) : createCommentVNode("v-if", true),
418
+ createCommentVNode(" ID + Timestamp "),
419
+ createBaseVNode("div", _hoisted_32, [createBaseVNode("span", null, "ID: " + toDisplayString(selectedEntry.value.id), 1), createBaseVNode("span", null, toDisplayString(formatAbsoluteTime(selectedEntry.value.timestamp)) + " (" + toDisplayString(new Date(selectedEntry.value.timestamp).toLocaleDateString()) + ")", 1)])
420
+ ])) : createCommentVNode("v-if", true)
421
+ ], 2)
422
+ ]);
423
+ };
424
+ }
425
+ });
426
+ //#endregion
427
+ export { _sfc_main as default };