arkaos 3.70.5 → 3.70.6
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/VERSION +1 -1
- package/dashboard/app/pages/terminal.vue +93 -77
- package/package.json +1 -1
- package/pyproject.toml +1 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.70.
|
|
1
|
+
3.70.6
|
|
@@ -101,10 +101,17 @@ watch(searchResults, () => {
|
|
|
101
101
|
searchSelectedIdx.value = 0
|
|
102
102
|
})
|
|
103
103
|
|
|
104
|
+
const searchInputEl = ref<HTMLInputElement | null>(null)
|
|
105
|
+
|
|
104
106
|
function openSearch() {
|
|
105
107
|
searchOpen.value = true
|
|
106
108
|
searchQuery.value = ''
|
|
107
109
|
searchSelectedIdx.value = 0
|
|
110
|
+
// autofocus on the bare input only fires on initial mount; the modal
|
|
111
|
+
// is mounted persistently, so we focus explicitly each time it opens.
|
|
112
|
+
nextTick(() => {
|
|
113
|
+
requestAnimationFrame(() => searchInputEl.value?.focus())
|
|
114
|
+
})
|
|
108
115
|
}
|
|
109
116
|
|
|
110
117
|
function pickFromSearch(cmd: string) {
|
|
@@ -392,22 +399,18 @@ const showHistory = ref(false)
|
|
|
392
399
|
No matches for
|
|
393
400
|
<span class="font-mono text-default">{{ sidebarFilter }}</span>.
|
|
394
401
|
</div>
|
|
395
|
-
<ul v-else class="
|
|
402
|
+
<ul v-else class="py-1">
|
|
396
403
|
<li
|
|
397
404
|
v-for="entry in visibleHistory"
|
|
398
405
|
:key="entry.ts"
|
|
399
|
-
class="group px-
|
|
406
|
+
class="group mx-1 px-2.5 py-1 rounded-md cursor-pointer flex items-center gap-2 hover:bg-elevated/40 transition-colors"
|
|
400
407
|
:title="`${entry.cmd} — ${relativeTime(entry.ts)}`"
|
|
401
408
|
@click="sendToActive(entry.cmd)"
|
|
402
409
|
>
|
|
403
|
-
<UIcon
|
|
404
|
-
name="i-lucide-chevron-right"
|
|
405
|
-
class="size-3 shrink-0 text-muted group-hover:text-primary"
|
|
406
|
-
/>
|
|
407
410
|
<span class="flex-1 min-w-0 font-mono text-xs truncate">
|
|
408
411
|
{{ entry.cmd }}
|
|
409
412
|
</span>
|
|
410
|
-
<span class="text-[10px] text-muted shrink-0 tabular-nums opacity-0 group-hover:opacity-100 transition-opacity">
|
|
413
|
+
<span class="text-[10px] text-muted/70 shrink-0 tabular-nums opacity-0 group-hover:opacity-100 transition-opacity">
|
|
411
414
|
{{ relativeTime(entry.ts) }}
|
|
412
415
|
</span>
|
|
413
416
|
<UIcon
|
|
@@ -431,112 +434,125 @@ const showHistory = ref(false)
|
|
|
431
434
|
|
|
432
435
|
<UModal
|
|
433
436
|
v-model:open="searchOpen"
|
|
434
|
-
:ui="{ content: 'max-w-2xl' }"
|
|
437
|
+
:ui="{ content: 'max-w-2xl ring-0 shadow-2xl' }"
|
|
435
438
|
>
|
|
436
439
|
<template #content>
|
|
437
|
-
<
|
|
438
|
-
<
|
|
439
|
-
<
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
esc
|
|
454
|
-
</kbd>
|
|
455
|
-
</div>
|
|
456
|
-
</template>
|
|
440
|
+
<div class="rounded-xl bg-default overflow-hidden">
|
|
441
|
+
<div class="flex items-center gap-3 px-4 py-3 border-b border-default/60">
|
|
442
|
+
<UIcon name="i-lucide-history" class="size-4 text-muted shrink-0" />
|
|
443
|
+
<input
|
|
444
|
+
ref="searchInputEl"
|
|
445
|
+
v-model="searchQuery"
|
|
446
|
+
type="text"
|
|
447
|
+
autofocus
|
|
448
|
+
placeholder="Filter command history…"
|
|
449
|
+
class="palette-input flex-1 bg-transparent text-default placeholder:text-muted/70 focus:outline-none border-0 ring-0 text-sm"
|
|
450
|
+
@keydown="searchKeydown"
|
|
451
|
+
>
|
|
452
|
+
<span class="text-[11px] text-muted/70 shrink-0 tabular-nums">
|
|
453
|
+
{{ searchResults.length }} of {{ history.length }}
|
|
454
|
+
</span>
|
|
455
|
+
</div>
|
|
457
456
|
|
|
458
457
|
<div class="max-h-[60vh] overflow-y-auto">
|
|
459
458
|
<div
|
|
460
459
|
v-if="history.length === 0"
|
|
461
|
-
class="
|
|
460
|
+
class="px-6 py-12 text-center text-sm text-muted"
|
|
462
461
|
>
|
|
463
|
-
<UIcon name="i-lucide-terminal" class="size-
|
|
462
|
+
<UIcon name="i-lucide-terminal" class="size-7 mx-auto mb-3 opacity-30" />
|
|
464
463
|
<p>No commands yet.</p>
|
|
465
|
-
<p class="text-xs mt-1">
|
|
464
|
+
<p class="text-xs mt-1 opacity-70">
|
|
466
465
|
Run something in the terminal — it'll show up here.
|
|
467
466
|
</p>
|
|
468
467
|
</div>
|
|
469
468
|
<div
|
|
470
469
|
v-else-if="searchResults.length === 0"
|
|
471
|
-
class="
|
|
470
|
+
class="px-6 py-12 text-center text-sm text-muted"
|
|
472
471
|
>
|
|
473
472
|
No match for
|
|
474
473
|
<span class="font-mono text-default">{{ searchQuery }}</span>.
|
|
475
474
|
</div>
|
|
476
|
-
<ul v-else class="
|
|
475
|
+
<ul v-else class="py-1">
|
|
477
476
|
<li
|
|
478
477
|
v-for="(entry, i) in searchResults"
|
|
479
478
|
:key="entry.ts"
|
|
480
|
-
class="px-
|
|
479
|
+
class="mx-1 px-3 py-1.5 rounded-md cursor-pointer flex items-center gap-3 transition-colors"
|
|
481
480
|
:class="i === searchSelectedIdx
|
|
482
|
-
? 'bg-
|
|
483
|
-
: 'hover:bg-elevated/
|
|
481
|
+
? 'bg-elevated/70'
|
|
482
|
+
: 'hover:bg-elevated/30'"
|
|
484
483
|
@click="pickFromSearch(entry.cmd)"
|
|
485
484
|
@mouseenter="searchSelectedIdx = i"
|
|
486
485
|
>
|
|
487
|
-
<UIcon
|
|
488
|
-
name="i-lucide-chevron-right"
|
|
489
|
-
class="size-3.5 shrink-0"
|
|
490
|
-
:class="i === searchSelectedIdx ? 'text-primary' : 'text-muted'"
|
|
491
|
-
/>
|
|
492
486
|
<span class="flex-1 min-w-0 font-mono text-sm truncate">
|
|
493
487
|
{{ entry.cmd }}
|
|
494
488
|
</span>
|
|
495
|
-
<span class="text-
|
|
489
|
+
<span class="text-[11px] text-muted/70 shrink-0 tabular-nums">
|
|
496
490
|
{{ relativeTime(entry.ts) }}
|
|
497
491
|
</span>
|
|
498
|
-
<
|
|
499
|
-
|
|
500
|
-
class="
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
</kbd>
|
|
492
|
+
<UIcon
|
|
493
|
+
name="i-lucide-corner-down-left"
|
|
494
|
+
class="size-3.5 shrink-0 transition-opacity"
|
|
495
|
+
:class="i === searchSelectedIdx ? 'text-default opacity-100' : 'text-muted opacity-0'"
|
|
496
|
+
/>
|
|
504
497
|
</li>
|
|
505
498
|
</ul>
|
|
506
499
|
</div>
|
|
507
500
|
|
|
508
|
-
<
|
|
509
|
-
<
|
|
510
|
-
<
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
</
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
>
|
|
532
|
-
Clear all
|
|
533
|
-
</UButton>
|
|
534
|
-
</div>
|
|
535
|
-
</template>
|
|
536
|
-
</UCard>
|
|
501
|
+
<div class="px-4 py-2.5 border-t border-default/60 flex items-center gap-4 text-[11px] text-muted/80">
|
|
502
|
+
<span class="flex items-center gap-1.5">
|
|
503
|
+
<kbd class="palette-kbd">↑</kbd><kbd class="palette-kbd">↓</kbd>
|
|
504
|
+
navigate
|
|
505
|
+
</span>
|
|
506
|
+
<span class="flex items-center gap-1.5">
|
|
507
|
+
<kbd class="palette-kbd">↵</kbd>
|
|
508
|
+
send
|
|
509
|
+
</span>
|
|
510
|
+
<span class="flex items-center gap-1.5">
|
|
511
|
+
<kbd class="palette-kbd">esc</kbd>
|
|
512
|
+
close
|
|
513
|
+
</span>
|
|
514
|
+
<button
|
|
515
|
+
v-if="history.length > 0"
|
|
516
|
+
class="ml-auto text-muted/80 hover:text-red-400 transition-colors flex items-center gap-1"
|
|
517
|
+
@click="clearHistory"
|
|
518
|
+
>
|
|
519
|
+
<UIcon name="i-lucide-trash-2" class="size-3" />
|
|
520
|
+
Clear
|
|
521
|
+
</button>
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
537
524
|
</template>
|
|
538
525
|
</UModal>
|
|
539
526
|
</div>
|
|
540
527
|
</template>
|
|
541
528
|
</UDashboardPanel>
|
|
542
529
|
</template>
|
|
530
|
+
|
|
531
|
+
<style scoped>
|
|
532
|
+
.palette-input {
|
|
533
|
+
/* Defensive: kill any inherited ring/border from Tailwind base */
|
|
534
|
+
box-shadow: none !important;
|
|
535
|
+
outline: none !important;
|
|
536
|
+
}
|
|
537
|
+
.palette-input:focus,
|
|
538
|
+
.palette-input:focus-visible {
|
|
539
|
+
outline: none !important;
|
|
540
|
+
box-shadow: none !important;
|
|
541
|
+
border-color: transparent !important;
|
|
542
|
+
}
|
|
543
|
+
.palette-kbd {
|
|
544
|
+
display: inline-flex;
|
|
545
|
+
align-items: center;
|
|
546
|
+
justify-content: center;
|
|
547
|
+
min-width: 1.1rem;
|
|
548
|
+
padding: 0 0.3rem;
|
|
549
|
+
height: 1.1rem;
|
|
550
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
551
|
+
font-size: 10px;
|
|
552
|
+
line-height: 1;
|
|
553
|
+
border-radius: 4px;
|
|
554
|
+
background-color: rgb(var(--ui-bg-elevated) / 0.5);
|
|
555
|
+
color: rgb(var(--ui-text-muted));
|
|
556
|
+
border: 1px solid rgb(var(--ui-border) / 0.4);
|
|
557
|
+
}
|
|
558
|
+
</style>
|
package/package.json
CHANGED