Compare commits

...

3 Commits

Author SHA1 Message Date
jamie aa83021393 style: 🎨 lucide icons
CI / Build and Push (push) Successful in 13s
2026-04-24 00:42:18 +01:00
jamie 99ce83c2df refactor: 🎨 change label on host form 2026-04-24 00:34:03 +01:00
jamie 5f00d40e66 fix: 🎨 app icon url 2026-04-24 00:33:44 +01:00
6 changed files with 38 additions and 5 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<link <link
rel="icon" rel="icon"
type="image/png" type="image/png"
href="https://assets.jdbnet.co.uk/ssh.png" href="https://assets.jdbnet.co.uk/projects/ssh.png"
/> />
<link rel="manifest" href="/manifest.webmanifest" /> <link rel="manifest" href="/manifest.webmanifest" />
<meta name="theme-color" content="#0f1419" /> <meta name="theme-color" content="#0f1419" />
+9
View File
@@ -10,6 +10,7 @@
"dependencies": { "dependencies": {
"@xterm/addon-fit": "^0.10.0", "@xterm/addon-fit": "^0.10.0",
"@xterm/xterm": "^5.5.0", "@xterm/xterm": "^5.5.0",
"lucide-vue-next": "^1.0.0",
"pinia": "^2.2.6", "pinia": "^2.2.6",
"vue": "^3.5.13" "vue": "^3.5.13"
}, },
@@ -1609,6 +1610,14 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true "dev": true
}, },
"node_modules/lucide-vue-next": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lucide-vue-next/-/lucide-vue-next-1.0.0.tgz",
"integrity": "sha512-V6SPvx1IHTj/UY+FrIYWV5faISsPSb8BnWSFDxAtezWKvWc9ZZ40PDrdu1/Qb5vg4lHWr1hs1BAMGVGm6V1Xdg==",
"peerDependencies": {
"vue": ">=3.0.1"
}
},
"node_modules/magic-string": { "node_modules/magic-string": {
"version": "0.30.21", "version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+1
View File
@@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@xterm/xterm": "^5.5.0", "@xterm/xterm": "^5.5.0",
"@xterm/addon-fit": "^0.10.0", "@xterm/addon-fit": "^0.10.0",
"lucide-vue-next": "^1.0.0",
"pinia": "^2.2.6", "pinia": "^2.2.6",
"vue": "^3.5.13" "vue": "^3.5.13"
}, },
+7 -3
View File
@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { Folder } from "lucide-vue-next";
import { import {
api, api,
type HostRow, type HostRow,
@@ -463,7 +464,10 @@ async function deleteIdentityRow(id: number) {
class="min-w-0 flex-1 truncate text-left text-sm text-accent hover:underline" class="min-w-0 flex-1 truncate text-left text-sm text-accent hover:underline"
@click="goToFolder(f.id)" @click="goToFolder(f.id)"
> >
📁 {{ f.label }} <span class="inline-flex items-center gap-1.5">
<Folder class="h-4 w-4 shrink-0" aria-hidden="true" />
<span>{{ f.label }}</span>
</span>
</button> </button>
<button <button
type="button" type="button"
@@ -761,7 +765,7 @@ async function deleteIdentityRow(id: number) {
required required
class="mt-1 w-full rounded border border-slate-700 bg-surface-overlay px-2 py-1.5 text-sm" class="mt-1 w-full rounded border border-slate-700 bg-surface-overlay px-2 py-1.5 text-sm"
/> />
<label class="mt-3 block text-xs uppercase text-slate-500">Hostname</label> <label class="mt-3 block text-xs uppercase text-slate-500">Hostname or IP</label>
<input <input
v-model="hostForm.hostname" v-model="hostForm.hostname"
required required
@@ -873,7 +877,7 @@ async function deleteIdentityRow(id: number) {
required required
class="mt-1 w-full rounded border border-slate-700 bg-surface-overlay px-2 py-1.5 text-sm" class="mt-1 w-full rounded border border-slate-700 bg-surface-overlay px-2 py-1.5 text-sm"
> >
<label class="mt-3 block text-xs uppercase text-slate-500">Hostname</label> <label class="mt-3 block text-xs uppercase text-slate-500">Hostname or IP</label>
<input <input
v-model="editHostForm.hostname" v-model="editHostForm.hostname"
required required
+14 -1
View File
@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from "vue"; import { ref, watch } from "vue";
import { File, Folder } from "lucide-vue-next";
import { api, type SftpEntry } from "@/api"; import { api, type SftpEntry } from "@/api";
const props = defineProps<{ connId: string }>(); const props = defineProps<{ connId: string }>();
@@ -198,7 +199,19 @@ function fmtSize(n: number): string {
:class="isDir(e.st_mode) ? 'text-accent' : 'text-slate-200'" :class="isDir(e.st_mode) ? 'text-accent' : 'text-slate-200'"
@click="enter(e)" @click="enter(e)"
> >
{{ isDir(e.st_mode) ? "📁" : "📄" }} {{ e.filename }} <span class="inline-flex items-center gap-1.5">
<Folder
v-if="isDir(e.st_mode)"
class="h-3.5 w-3.5 shrink-0"
aria-hidden="true"
/>
<File
v-else
class="h-3.5 w-3.5 shrink-0"
aria-hidden="true"
/>
<span>{{ e.filename }}</span>
</span>
</button> </button>
<span class="shrink-0 text-[10px] text-slate-500">{{ <span class="shrink-0 text-[10px] text-slate-500">{{
isDir(e.st_mode) ? "" : fmtSize(e.st_size) isDir(e.st_mode) ? "" : fmtSize(e.st_size)
+6
View File
@@ -0,0 +1,6 @@
{
"name": "ssh",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}