phirepass-widgets 0.0.45 → 0.0.47

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 (36) hide show
  1. package/dist/cjs/{index-DTAHGGCM.js → index-BiurVooY.js} +58 -0
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/phirepass-sftp-client.cjs.entry.js +186 -20
  4. package/dist/cjs/phirepass-terminal.cjs.entry.js +3 -5
  5. package/dist/cjs/phirepass-widgets.cjs.js +2 -2
  6. package/dist/cjs/{protocol-C0YjPrve.js → protocol-BDROfN76.js} +2 -1
  7. package/dist/collection/common/protocol.js +1 -0
  8. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.chevron.svg +6 -0
  9. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.css +421 -119
  10. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.file.svg +6 -0
  11. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.folder.svg +6 -0
  12. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.go_up.svg +6 -0
  13. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.js +190 -19
  14. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.refresh.svg +8 -0
  15. package/dist/collection/components/phirepass-sftp-client/phirepass-sftp-client.upload.svg +7 -0
  16. package/dist/collection/components/phirepass-terminal/phirepass-terminal.js +1 -3
  17. package/dist/components/index.js +1 -1
  18. package/dist/{phirepass-widgets/p-rdgKcesn.js → components/p-BcIhGXR0.js} +1 -1
  19. package/dist/components/phirepass-sftp-client.js +1 -1
  20. package/dist/components/phirepass-terminal.js +2 -2
  21. package/dist/esm/{index-D6RLmr6w.js → index-zZMsduaU.js} +58 -0
  22. package/dist/esm/loader.js +3 -3
  23. package/dist/esm/phirepass-sftp-client.entry.js +186 -20
  24. package/dist/esm/phirepass-terminal.entry.js +3 -5
  25. package/dist/esm/phirepass-widgets.js +3 -3
  26. package/dist/esm/{protocol-rdgKcesn.js → protocol-BcIhGXR0.js} +1 -0
  27. package/dist/phirepass-widgets/p-32ca8ca5.entry.js +1 -0
  28. package/dist/phirepass-widgets/{p-68b6830e.entry.js → p-5b21bc31.entry.js} +5 -5
  29. package/dist/{components/p-rdgKcesn.js → phirepass-widgets/p-BcIhGXR0.js} +1 -1
  30. package/dist/phirepass-widgets/p-zZMsduaU.js +2 -0
  31. package/dist/phirepass-widgets/phirepass-widgets.esm.js +1 -1
  32. package/dist/types/common/protocol.d.ts +37 -13
  33. package/dist/types/components/phirepass-sftp-client/phirepass-sftp-client.d.ts +27 -1
  34. package/package.json +1 -1
  35. package/dist/phirepass-widgets/p-5e9ce2ac.entry.js +0 -1
  36. package/dist/phirepass-widgets/p-D6RLmr6w.js +0 -2
@@ -392,6 +392,13 @@ var h = (nodeName, vnodeData, ...children) => {
392
392
  }
393
393
  }
394
394
  }
395
+ if (typeof nodeName === "function") {
396
+ return nodeName(
397
+ vnodeData === null ? {} : vnodeData,
398
+ vNodeChildren,
399
+ vdomFnUtils
400
+ );
401
+ }
395
402
  const vnode = newVNode(nodeName, null);
396
403
  vnode.$attrs$ = vnodeData;
397
404
  if (vNodeChildren.length > 0) {
@@ -421,6 +428,36 @@ var newVNode = (tag, text) => {
421
428
  };
422
429
  var Host = {};
423
430
  var isHost = (node) => node && node.$tag$ === Host;
431
+ var vdomFnUtils = {
432
+ forEach: (children, cb) => children.map(convertToPublic).forEach(cb),
433
+ map: (children, cb) => children.map(convertToPublic).map(cb).map(convertToPrivate)
434
+ };
435
+ var convertToPublic = (node) => ({
436
+ vattrs: node.$attrs$,
437
+ vchildren: node.$children$,
438
+ vkey: node.$key$,
439
+ vname: node.$name$,
440
+ vtag: node.$tag$,
441
+ vtext: node.$text$
442
+ });
443
+ var convertToPrivate = (node) => {
444
+ if (typeof node.vtag === "function") {
445
+ const vnodeData = { ...node.vattrs };
446
+ if (node.vkey) {
447
+ vnodeData.key = node.vkey;
448
+ }
449
+ if (node.vname) {
450
+ vnodeData.name = node.vname;
451
+ }
452
+ return h(node.vtag, vnodeData, ...node.vchildren || []);
453
+ }
454
+ const vnode = newVNode(node.vtag, node.vtext);
455
+ vnode.$attrs$ = node.vattrs;
456
+ vnode.$children$ = node.vchildren;
457
+ vnode.$key$ = node.vkey;
458
+ vnode.$name$ = node.vname;
459
+ return vnode;
460
+ };
424
461
 
425
462
  // src/runtime/normalize-watchers.ts
426
463
  var normalizeWatchers = (raw) => {
@@ -503,6 +540,27 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
503
540
  classList.remove(...oldClasses.filter((c) => c && !newClasses.includes(c)));
504
541
  classList.add(...newClasses.filter((c) => c && !oldClasses.includes(c)));
505
542
  }
543
+ } else if (memberName === "style") {
544
+ {
545
+ for (const prop in oldValue) {
546
+ if (!newValue || newValue[prop] == null) {
547
+ if (prop.includes("-")) {
548
+ elm.style.removeProperty(prop);
549
+ } else {
550
+ elm.style[prop] = "";
551
+ }
552
+ }
553
+ }
554
+ }
555
+ for (const prop in newValue) {
556
+ if (!oldValue || newValue[prop] !== oldValue[prop]) {
557
+ if (prop.includes("-")) {
558
+ elm.style.setProperty(prop, newValue[prop]);
559
+ } else {
560
+ elm.style[prop] = newValue[prop];
561
+ }
562
+ }
563
+ }
506
564
  } else if (memberName === "key") ; else if (memberName === "ref") {
507
565
  if (newValue) {
508
566
  queueRefAttachment(newValue, elm);
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DTAHGGCM.js');
3
+ var index = require('./index-BiurVooY.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["phirepass-sftp-client.cjs",[[513,"phirepass-sftp-client",{"name":[1],"description":[1],"hideHeader":[4,"hide-header"],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"],"max":[32],"show_login_screen":[32],"show_login_screen_username":[32],"show_login_screen_password":[32],"maximize":[64],"minimize":[64]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]],["phirepass-terminal.cjs",[[513,"phirepass-terminal",{"terminalOptions":[16],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]]], options);
9
+ return index.bootstrapLazy([["phirepass-sftp-client.cjs",[[513,"phirepass-sftp-client",{"name":[1],"description":[1],"hideHeader":[4,"hide-header"],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"],"max":[32],"show_login_screen":[32],"show_login_screen_username":[32],"show_error":[32],"error_message":[32],"show_login_screen_password":[32],"show_navigation":[32],"breadcrumbs":[32],"current_dir":[32],"listing":[32],"show_content":[32],"show_loader":[32],"version":[32],"status":[32],"selected_item":[32],"maximize":[64],"minimize":[64]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]],["phirepass-terminal.cjs",[[513,"phirepass-terminal",{"terminalOptions":[16],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -1,13 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DTAHGGCM.js');
4
- var protocol = require('./protocol-C0YjPrve.js');
3
+ var index = require('./index-BiurVooY.js');
4
+ var protocol = require('./protocol-BDROfN76.js');
5
5
 
6
6
  const phirepassSftpClientLogoSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoNDYsIDE4NCwgMTM4KSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgICBjbGFzcz0ibHVjaWRlIGx1Y2lkZS10ZXJtaW5hbCB3LTMuNSBoLTMuNSB0ZXh0LXByaW1hcnkiPgogICAgPHBvbHlsaW5lIHBvaW50cz0iNCAxNyAxMCAxMSA0IDUiPjwvcG9seWxpbmU+CiAgICA8bGluZSB4MT0iMTIiIHgyPSIyMCIgeTE9IjE5IiB5Mj0iMTkiPjwvbGluZT4KPC9zdmc+Cg==';
7
7
 
8
8
  const phirepassSftpClientMaxSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTE1LCAxMjMsIDE0MCkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgY2xhc3M9Imx1Y2lkZSBsdWNpZGUtbWF4aW1pemUyIHctMyBoLTMiPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMTUgMyAyMSAzIDIxIDkiPjwvcG9seWxpbmU+CiAgICA8cG9seWxpbmUgcG9pbnRzPSI5IDIxIDMgMjEgMyAxNSI+PC9wb2x5bGluZT4KICAgIDxsaW5lIHgxPSIyMSIgeDI9IjE0IiB5MT0iMyIgeTI9IjEwIj48L2xpbmU+CiAgICA8bGluZSB4MT0iMyIgeDI9IjEwIiB5MT0iMjEiIHkyPSIxNCI+PC9saW5lPgo8L3N2Zz4K';
9
9
 
10
- const phirepassSftpClientCss = () => `:host{--radius:0.375rem;--card:220 18% 10%;--border:220 15% 18%;--primary:160 60% 45%;--muted-foreground:220 10% 50%;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;height:100%;width:100%;border:1px solid hsl(var(--border));background-color:hsl(var(--card));border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;position:relative;.listing{flex:1;display:flex;flex-direction:column;justify-content:space-between;header{height:30px;background:rgba(28, 31, 38, 0.6);border-bottom:1px solid hsl(var(--border));display:flex;align-items:center;justify-content:space-between;.actions{display:flex;align-items:center;.action{cursor:pointer;padding:4px;display:flex;align-items:center;z-index:1;img{height:14px;padding:4px;border-radius:4px}&:hover{background-color:hsl(var(--border) / 0.6)}}}.title{color:hsl(var(--primary));height:14px;padding:0 12px;display:flex;align-items:center;font-size:0.75rem;line-height:1rem;img{height:14px;margin-right:5px}.text{display:flex;flex-direction:row;justify-content:center;margin-top:2px;.name{margin-right:10px}.description{color:hsl(var(--muted-foreground))}}}}footer{height:25px;background:rgba(28, 31, 38, 0.6);border-top:1px solid hsl(var(--border))}}.creds{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;justify-content:center;align-items:center;&.blurred{background:rgba(28, 31, 38, 0);backdrop-filter:blur(4px)}.form{display:flex;flex-direction:column;background:hsl(var(--card));width:200px;position:relative;background-color:rgba(21, 24, 30, 0.95);border:1px solid hsl(var(--border));padding:20px;box-shadow:rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.5) 0px 25px 50px -12px}}}:host(.max){height:100vh;width:100vw;position:fixed;top:0;left:0;z-index:9999}`;
10
+ const phirepassSftpClientChevronSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTg5LCAyMTksIDIwOSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogICAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIKICAgIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNoZXZyb24tcmlnaHQgdy0zIGgtMyB0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAgc2hyaW5rLTAiPgogICAgPHBhdGggZD0ibTkgMTggNi02LTYtNiI+PC9wYXRoPgo8L3N2Zz4K';
11
+
12
+ const phirepassSftpClientFolderSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoNDYsIDE4NCwgMTM4KSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgICBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1mb2xkZXIgdy0zLjUgaC0zLjUgdGV4dC1wcmltYXJ5IHNocmluay0wIj4KICAgIDxwYXRoCiAgICAgICAgZD0iTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiI+PC9wYXRoPgo8L3N2Zz4K';
13
+
14
+ const phirepassSftpClientFileSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTE1LCAxMjMsIDE0MCkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgY2xhc3M9Imx1Y2lkZSBsdWNpZGUtZmlsZSB3LTMuNSBoLTMuNSB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2hyaW5rLTAiPgogICAgPHBhdGggZD0iTTE1IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3WiI+PC9wYXRoPgogICAgPHBhdGggZD0iTTE0IDJ2NGEyIDIgMCAwIDAgMiAyaDQiPjwvcGF0aD4KPC9zdmc+Cg==';
15
+
16
+ const phirepassSftpClientGoUpSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTg5LCAyMTksIDIwOSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgY2xhc3M9Imx1Y2lkZSBsdWNpZGUtYXJyb3ctdXAgdy0zLjUgaC0zLjUiPgogICAgPHBhdGggZD0ibTUgMTIgNy03IDcgNyI+PC9wYXRoPgogICAgPHBhdGggZD0iTTEyIDE5VjUiPjwvcGF0aD4KPC9zdmc+Cg==';
17
+
18
+ const phirepassSftpClientRefreshSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTg5LCAyMTksIDIwOSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgY2xhc3M9Imx1Y2lkZSBsdWNpZGUtcmVmcmVzaC1jdyB3LTMuNSBoLTMuNSI+CiAgICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCI+PC9wYXRoPgogICAgPHBhdGggZD0iTTIxIDN2NWgtNSI+PC9wYXRoPgogICAgPHBhdGggZD0iTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2Ij48L3BhdGg+CiAgICA8cGF0aCBkPSJNOCAxNkgzdjUiPjwvcGF0aD4KPC9zdmc+Cg==';
19
+
20
+ const phirepassSftpClientUploadSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIgogICAgc3Ryb2tlPSJyZ2IoMTg5LCAyMTksIDIwOSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgY2xhc3M9Imx1Y2lkZSBsdWNpZGUtdXBsb2FkIHctMy41IGgtMy41Ij4KICAgIDxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIxNyA4IDEyIDMgNyA4Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjEyIiB4Mj0iMTIiIHkxPSIzIiB5Mj0iMTUiPjwvbGluZT4KPC9zdmc+Cg==';
21
+
22
+ const phirepassSftpClientCss = () => `:host{--radius:0.375rem;--card:220 18% 10%;--border:220 15% 18%;--primary:160 60% 45%;--radius:0.375rem;--destructive:0 70% 50%;--muted:220 15% 13%;--muted-foreground:220 10% 50%;--primary-foreground:220 20% 7%;--scroll-track:220 16% 12%;--scroll-thumb:220 12% 34%;--scroll-thumb-hover:160 45% 44%;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;height:100%;width:100%;border:1px solid hsl(var(--border));background-color:hsl(var(--card));border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;position:relative;.listing{flex:1;display:flex;flex-direction:column;justify-content:space-between;min-height:0;header{height:30px;background:rgba(28, 31, 38, 0.6);border-bottom:1px solid hsl(var(--border));display:flex;align-items:center;justify-content:space-between;.actions{display:flex;align-items:center;.action{cursor:pointer;padding:4px;display:flex;align-items:center;z-index:1;img{height:14px;padding:4px;border-radius:4px}&:hover{background-color:hsl(var(--border) / 0.6)}}}.title{color:hsl(var(--primary));height:14px;padding:0 12px;display:flex;align-items:center;font-size:0.75rem;line-height:1rem;img{height:14px;margin-right:5px}.text{display:flex;flex-direction:row;justify-content:center;margin-top:2px;.name{margin-right:10px}.description{color:hsl(var(--muted-foreground))}}}}main{flex:1;display:flex;flex-direction:column;position:relative;min-height:0;overflow:hidden;.loader{color:hsl(var(--muted-foreground));font-size:13px;animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;text-align:center;display:flex;align-items:center;justify-content:center;position:absolute;height:100%;width:100%;background:rgba(28, 31, 38, 0);backdrop-filter:blur(4px)}.error{font-size:13px;text-align:center;color:hsl(var(--destructive));height:100%;display:flex;align-items:center;justify-content:center}.navigation{height:25px;padding:10px;font-size:0.75rem;line-height:1rem;background-color:hsl(var(--card));display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid hsl(var(--border));position:sticky;top:0;z-index:3;.breadcrumbs{display:flex;align-items:center;margin-right:10px;.breadcrumb{color:hsl(var(--primary));margin-right:4px;cursor:pointer;&:after{margin-left:4px}&:hover{color:rgb(189, 219, 209)}&:last-child{margin-right:0;color:rgb(189, 219, 209);cursor:default}}.arrow{height:12px;width:12px;opacity:0.6;top:2px;margin-right:4px;position:relative}}.actions{display:flex;align-items:center;gap:8px}.action{border:none;background:transparent;color:rgb(189, 219, 209);font-size:1.1rem;line-height:1;padding:2px 4px;border-radius:4px;cursor:pointer;&:hover{background-color:hsl(var(--border) / 0.6)}img{height:14px;width:14px;display:block}}.action.disconnect{color:#ff4d5f;font-size:0.65rem;letter-spacing:0.08em;padding:4px 8px;&:hover{color:#ff6b7a;background-color:hsl(var(--destructive) / 0.12)}}}.content{flex:1;min-height:0;overflow:auto;font-size:0.75rem;line-height:1rem;scrollbar-width:thin;scrollbar-color:hsl(var(--scroll-thumb)) hsl(var(--scroll-track));&::-webkit-scrollbar{width:10px;height:10px}&::-webkit-scrollbar-track{background:hsl(var(--scroll-track))}&::-webkit-scrollbar-thumb{background:hsl(var(--scroll-thumb));border-radius:999px;border:2px solid hsl(var(--scroll-track))}&::-webkit-scrollbar-thumb:hover{background:hsl(var(--scroll-thumb-hover))}table{width:100%;border-collapse:separate;border-spacing:0;thead{background-color:hsl(var(--muted));border-bottom:1px solid hsl(var(--border));th{padding:8px 10px;text-align:left;color:hsl(var(--muted-foreground));position:sticky;top:0;z-index:2;background-color:hsl(var(--muted));border-bottom:1px solid hsl(var(--border));line-height:0.95rem}}tbody{padding:10px 10px;tr{border-bottom:1px solid hsl(var(--border) / 0.4);td{padding:10px 10px 9px;color:hsl(var(--muted-foreground));.name{&.file{color:rgb(189, 219, 209)}&.folder{color:hsl(var(--primary))}}.kind{height:14px;width:14px;margin-right:5px;top:3px;position:relative}}&:hover{cursor:pointer;background-color:hsl(var(--muted) / 0.4)}&.selected{background-color:hsl(var(--primary) / 0.3);&:hover{background-color:hsl(var(--primary) / 0.4)}}}}}}}footer{height:25px;background:rgba(28, 31, 38, 0.6);border-top:1px solid hsl(var(--border));font-size:0.75rem;line-height:1rem;display:flex;align-items:center;justify-content:space-between;padding:0 10px;.status{font-size:0.65rem;color:hsl(var(--muted-foreground));.selected-item{margin-left:10px;color:hsl(var(--primary))}}.version{font-size:0.65rem;color:hsl(var(--muted-foreground))}}}.creds{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;justify-content:center;align-items:center;;&.blurred{background:rgba(28, 31, 38, 0);backdrop-filter:blur(4px)}.auth{display:flex;flex-direction:column;background:hsl(var(--card));position:relative;background-color:rgba(21, 24, 30, 0.95);border:1px solid hsl(var(--border));padding:30px;box-shadow:rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.5) 0px 25px 50px -12px;border-radius:var(--radius);.title{margin-bottom:12px;color:hsl(var(--primary))}label{font-size:0.75rem;line-height:1rem;margin-bottom:1rem;color:hsl(var(--muted-foreground))}input{font-size:0.875rem;line-height:1.25rem;padding-top:0.5rem;padding-bottom:0.5rem;padding-left:0.75rem;padding-right:0.75rem;background-color:rgb(28, 31, 38);border-color:rgb(39, 44, 53);border-width:1px;border-radius:calc(var(--radius) - 2px);width:100%;margin-bottom:12px;color:rgb(189, 219, 209);box-sizing:border-box;&:focus{outline:none;border-color:hsl(var(--primary));box-shadow:0 0 0 1px hsl(var(--primary))}}button[type='submit']{margin-top:12px;width:100%;background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));letter-spacing:0.05em;font-size:13px;font-weight:500;padding:0.5rem 1rem;border-radius:calc(var(--radius) - 2px);height:2rem;cursor:pointer;border:none;&:hover{background-color:hsl(var(--primary) / 0.9)}}}}}:host(.max){height:100vh;width:100vw;position:fixed;top:0;left:0;z-index:9999}`;
11
23
 
12
24
  const PhirepassSftpClient = class {
13
25
  constructor(hostRef) {
@@ -19,8 +31,9 @@ const PhirepassSftpClient = class {
19
31
  domReady = false;
20
32
  runtimeReady = false;
21
33
  connected = false;
34
+ uploadInputEl;
22
35
  // private inputMode: InputMode = InputMode.Default;
23
- // private session_id?: number;
36
+ session_id;
24
37
  // private usernameBuffer = "";
25
38
  // private passwordBuffer = "";
26
39
  name = 'SFTP';
@@ -46,6 +59,7 @@ const PhirepassSftpClient = class {
46
59
  if (newValue) {
47
60
  this.open_comms();
48
61
  this.channel.connect();
62
+ this.status = 'Connecting...';
49
63
  }
50
64
  }
51
65
  serverId;
@@ -63,7 +77,18 @@ const PhirepassSftpClient = class {
63
77
  max = false;
64
78
  show_login_screen = false;
65
79
  show_login_screen_username = false;
80
+ show_error = false;
81
+ error_message = '';
66
82
  show_login_screen_password = false;
83
+ show_navigation = false;
84
+ breadcrumbs = [];
85
+ current_dir = '.';
86
+ listing = [];
87
+ show_content = false;
88
+ show_loader = false;
89
+ version = '';
90
+ status = 'Disconnected';
91
+ selected_item = null;
67
92
  toggle_max() {
68
93
  this.maximizeEvent?.emit(!this.max);
69
94
  }
@@ -100,6 +125,7 @@ const PhirepassSftpClient = class {
100
125
  connect() {
101
126
  this.connected = true;
102
127
  this.channel.connect();
128
+ this.status = 'Connecting...';
103
129
  // const container = this.containerEl;
104
130
  // console.log('Attempting to connect terminal to container:', container);
105
131
  // if (container) {
@@ -133,22 +159,63 @@ const PhirepassSftpClient = class {
133
159
  }
134
160
  return `${protocol}://${this.serverHost}:${this.serverPort}`;
135
161
  }
136
- handle_error(_error_) {
137
- //
162
+ handle_error(error) {
163
+ switch (error.kind) {
164
+ case protocol.ErrorType.Generic:
165
+ case protocol.ErrorType.Authentication:
166
+ this.error_message = error.message || 'An unknown error occurred.';
167
+ break;
168
+ case protocol.ErrorType.RequiresUsername:
169
+ this.show_login_screen_username = true;
170
+ this.show_login_screen_password = false;
171
+ this.show_login_screen = true;
172
+ break;
173
+ case protocol.ErrorType.RequiresPassword:
174
+ this.show_login_screen_username = false;
175
+ this.show_login_screen_password = true;
176
+ this.show_login_screen = true;
177
+ break;
178
+ case protocol.ErrorType.RequiresUsernamePassword:
179
+ this.show_login_screen_username = true;
180
+ this.show_login_screen_password = true;
181
+ this.show_login_screen = true;
182
+ break;
183
+ }
184
+ setTimeout(() => {
185
+ this.show_loader = false;
186
+ }, 1_000);
138
187
  }
139
- handle_auth_success(_auth_) {
188
+ handle_auth_success(auth) {
140
189
  this.clear_creds_buffer();
190
+ this.version = auth.version;
141
191
  this.channel.start_heartbeat(this.heartbeatInterval <= 15_000 ? 30_000 : this.heartbeatInterval);
142
192
  this.channel.open_sftp_tunnel(this.nodeId);
193
+ this.status = 'Connected';
143
194
  }
144
- handle_tunnel_opened(_web_) {
145
- // this.session_id = web.sid;
195
+ handle_tunnel_opened(web) {
196
+ this.session_id = web.sid;
146
197
  // this.terminal.reset();
147
198
  // this.fit_terminal_safely();
148
199
  // this.send_ssh_terminal_resize();
200
+ this.channel.send_sftp_list_data(this.nodeId, this.session_id, this.current_dir);
149
201
  }
150
- handle_tunnel_data(_web_) {
151
- // TODO
202
+ handle_sftp_list_items(web) {
203
+ setTimeout(() => {
204
+ this.show_loader = false;
205
+ }, 500);
206
+ this.listing = web.dir.items;
207
+ this.current_dir = web.path;
208
+ this.breadcrumbs = web.path.split('/').map((path, index, arr) => {
209
+ if (path === '' && index === 0) {
210
+ return { label: '/', path: '/' };
211
+ }
212
+ return { label: path, path: arr.slice(0, index + 1).join('/') };
213
+ });
214
+ this.show_content = true;
215
+ this.show_navigation = true;
216
+ }
217
+ handle_tunnel_data(web) {
218
+ console.log('received tunnel data:', web);
152
219
  }
153
220
  handle_tunnel_closed(_web_) {
154
221
  // this.session_id = undefined;
@@ -168,16 +235,18 @@ const PhirepassSftpClient = class {
168
235
  this.channel.on_connection_open(() => {
169
236
  this.connectionStateChanged.emit([protocol.ConnectionState.Connected]);
170
237
  this.channel.authenticate(this.token, this.nodeId);
238
+ this.status = 'Authenticating...';
171
239
  });
172
240
  this.channel.on_connection_close(() => {
173
241
  this.connectionStateChanged.emit([protocol.ConnectionState.Disconnected]);
174
- // this.terminal.reset();
242
+ this.status = 'Disconnected';
175
243
  });
176
244
  this.channel.on_connection_error((err) => {
177
245
  this.connectionStateChanged.emit([protocol.ConnectionState.Error, err]);
246
+ this.status = 'Error ' + err.message;
178
247
  });
179
248
  this.channel.on_connection_message((_raw_) => {
180
- // console.log('>> raw message received', raw);
249
+ //
181
250
  });
182
251
  this.channel.on_protocol_message((msg) => {
183
252
  const { web } = msg.data;
@@ -197,8 +266,11 @@ const PhirepassSftpClient = class {
197
266
  case protocol.ProtocolMessageType.TunnelData:
198
267
  this.handle_tunnel_data(web);
199
268
  break;
269
+ case protocol.ProtocolMessageType.SFTPListItems:
270
+ this.handle_sftp_list_items(web);
271
+ break;
200
272
  default:
201
- console.warn('Unknown protocol message type:', web);
273
+ console.warn('Unhandled protocol message type:', web);
202
274
  }
203
275
  });
204
276
  }
@@ -215,15 +287,109 @@ const PhirepassSftpClient = class {
215
287
  // this.inputMode = InputMode.Default;
216
288
  this.clear_creds_buffer();
217
289
  }
290
+ list_breadcrumb(path) {
291
+ this.show_loader = true;
292
+ this.selected_item = null;
293
+ this.channel.send_sftp_list_data(this.nodeId, this.session_id, path);
294
+ }
295
+ go_to_parent_directory() {
296
+ if (!this.session_id) {
297
+ return;
298
+ }
299
+ if (this.current_dir === '/') {
300
+ return;
301
+ }
302
+ const parent = this.breadcrumbs[this.breadcrumbs.length - 2]?.path || '/';
303
+ this.list_breadcrumb(parent);
304
+ }
305
+ refresh_directory() {
306
+ if (!this.session_id) {
307
+ return;
308
+ }
309
+ this.list_breadcrumb(this.current_dir);
310
+ }
311
+ disconnect_session() {
312
+ this.close_comms();
313
+ this.session_id = undefined;
314
+ this.status = 'Disconnected';
315
+ this.show_loader = false;
316
+ }
317
+ open_upload_picker() {
318
+ this.uploadInputEl?.click();
319
+ }
320
+ on_upload_selected(event) {
321
+ const input = event.target;
322
+ const file = input.files?.[0];
323
+ if (!file) {
324
+ return;
325
+ }
326
+ this.show_error = true;
327
+ this.error_message = 'Upload is not available yet in this widget.';
328
+ setTimeout(() => {
329
+ this.show_error = false;
330
+ }, 2_000);
331
+ input.value = '';
332
+ }
333
+ is_selected(item) {
334
+ if (!this.selected_item) {
335
+ return false;
336
+ }
337
+ return this.selected_item.path === item.path &&
338
+ this.selected_item.name === item.name;
339
+ }
340
+ list_directory(entry) {
341
+ if (!this.session_id) {
342
+ console.warn('No active session. Cannot list directory.');
343
+ return;
344
+ }
345
+ if (entry.kind === 'File') {
346
+ console.warn('Cannot list directory of a file. Ignoring click.');
347
+ this.selected_item = entry;
348
+ return;
349
+ }
350
+ const path = [entry.path, entry.name].join('/');
351
+ if (path === this.current_dir) {
352
+ console.warn('Already in this directory. Ignoring click.');
353
+ return;
354
+ }
355
+ this.show_loader = true;
356
+ this.selected_item = null;
357
+ this.channel.send_sftp_list_data(this.nodeId, this.session_id, path);
358
+ }
359
+ get_full_path(item) {
360
+ return [item.path, item.name].join('/');
361
+ }
218
362
  render() {
219
- return (index.h(index.Host, { key: 'ac63e2c701cd09a605d0aaa7396eaec16ff9c3bc', class: {
363
+ return (index.h(index.Host, { key: 'c19b87e943347cc55424450e7e4f10bc3447e828', class: {
220
364
  'default': !this.max,
221
365
  'max': this.max,
222
- } }, index.h("section", { key: '253dfc510c62ee57a96d574af993e8017475a0c2', class: "listing" }, !this.hideHeader &&
223
- index.h("header", { key: '215ddf76ba55641892fc9a758077ba8d1f3a6671' }, index.h("section", { key: '49541a8d31d8c61e2df84c60348f7426fddec67c', class: "title" }, index.h("img", { key: '1a86ba6b3de92b35cbd5b1bacfdfee2da6fa6766', src: phirepassSftpClientLogoSvg, alt: "SFTP Client" }), index.h("div", { key: '38d90384978acc8b323ca4c396db7bda54320059', class: "text" }, index.h("div", { key: 'a94b3fd21025000b620b2bb85aec87198e575bfa', class: "name" }, this.name), index.h("div", { key: '072c41dc8d05faf77929f8c128bb97b64d8835bf', class: "description" }, this.description))), index.h("section", { key: '46e575f4ce5f2da0913d2f3aebe025540f1f3688', class: "actions" }, index.h("div", { key: 'f92d66ab7ab5e9c25a29037c60709c54623194be', class: "action", onClick: () => this.toggle_max() }, index.h("img", { key: 'e115204a83336fc4b49a30551208b727c3f33be9', src: phirepassSftpClientMaxSvg, alt: "Maximize" })))), index.h("main", { key: 'c6bf5ab4e5aa46dcba8e50ec1a9c2feb1f55ea02' }), index.h("footer", { key: 'ac67a3e0966e3f04bee019162f8174aae58cbf1a' })), index.h("section", { key: '07e83117470f7f226328703b18f836bd4358cfe9', class: {
224
- 'creds': true,
225
- 'blurred': this.show_login_screen,
226
- } }, this.show_login_screen && index.h("form", { key: '808209eaba50f10a8ef96163972ad36ea9e3d3e2', class: "form" }, index.h("div", { key: '9e26efeac2f17d6b4168e1a77da6ef61d325f6e3' }, "SFTP Connection"), index.h("div", { key: 'f9badb92d4434a16916429a2bedb6e38d2ae647c' }, index.h("div", { key: '9fb267ba7828cd950b327a17e0ee803dc399c80b' }, "Username"), index.h("input", { key: '65b34c14292b0bde408861e791f3baa99c4c9a02', type: "text", placeholder: "" })), index.h("div", { key: 'f1f9def8290dfcde9beff0f61092f6020580b72c' }, index.h("div", { key: '1c89b71c4126299b7e8e421b05761d2b0424d4ed' }, "Password"), index.h("input", { key: '17364976158ddaacbb55ed17ee09ec242bcbdce7', type: "password", placeholder: "" })), index.h("div", { key: '9362acdf153ceeba3c8e8cee0518cf2baeec27e0' }, index.h("button", { key: 'ebf6c205276a7c3ff34c13e148978be61044ff7a' }, "Connect"))))));
366
+ } }, index.h("section", { key: '88ecbc0d1a1460dd262150706216f7f758fb7981', class: "listing" }, !this.hideHeader &&
367
+ index.h("header", { key: 'dd28677d023aeaf431cb3b99449751f6385c767d' }, index.h("section", { key: 'ad56b31550d096cb59e92bc6167be11b76a9c368', class: "title" }, index.h("img", { key: '00ce4e832edfb672b0eadb0462a5a132cfa67e09', src: phirepassSftpClientLogoSvg, alt: "SFTP Client" }), index.h("div", { key: 'ee186cc2c643afefa425bb6ce862686dce5ba6ab', class: "text" }, index.h("div", { key: '29c5922bf9826930ac33fe6c200bf47fce1e183e', class: "name" }, this.name), index.h("div", { key: '76d6bba6cb51b9907db533395c258ee7458cf5ce', class: "description" }, this.description))), index.h("section", { key: 'd3bfbf402aed51cba973830b14b9d4f276011535', class: "actions" }, index.h("div", { key: '87eb4484d8552a582c35e4960a82003f7570bf26', class: "action", onClick: () => this.toggle_max() }, index.h("img", { key: '3ff40a471fc54a1d97a4aa5c4746dc837082307d', src: phirepassSftpClientMaxSvg, alt: "Maximize" })))), index.h("main", { key: 'a441806676df938682df422acce7b640e452eece' }, this.show_navigation && index.h("nav", { key: 'd7fe91b30ecd998985301c2f0ac5064ee4bfc9fa', class: "navigation" }, index.h("div", { key: '17bd0d958fb55b8a89b6af7becbeb1cd892066a5', class: "breadcrumbs" }, this.breadcrumbs.map((crumb, index$1, breadcrumbs) => (index.h(index.h.Fragment, null, index.h("span", { key: index$1, onClick: () => this.list_breadcrumb(crumb.path), class: "breadcrumb" }, crumb.label), index$1 < breadcrumbs.length - 1 && index.h("img", { class: "arrow", src: phirepassSftpClientChevronSvg }))))), index.h("section", { key: '0f65ff3c51a3aeba3bf046445fc858b05e1e5106', class: "actions", "aria-label": "SFTP actions" }, index.h("button", { key: '5184ea48385f5b1f235e7fe0a01eed0171782e76', type: "button", class: "action", onClick: () => this.go_to_parent_directory(), title: "Go to parent directory", "aria-label": "Go to parent directory" }, index.h("img", { key: '345aa00fe17569c8d9037e9304b381868effe862', src: phirepassSftpClientGoUpSvg, alt: "Go up" })), index.h("button", { key: 'eec7a682ed944746eabf939dfff1073bb85dfae6', type: "button", class: "action", onClick: () => this.refresh_directory(), title: "Refresh", "aria-label": "Refresh" }, index.h("img", { key: 'ab1faf4dc27ca0a85b152c559b2f4953c7fddb15', src: phirepassSftpClientRefreshSvg, alt: "Refresh" })), index.h("button", { key: '529ad0cd6e000978294be16aedb9ec8f2b6d699e', type: "button", class: "action", onClick: () => this.open_upload_picker(), title: "Upload", "aria-label": "Upload" }, index.h("img", { key: '669ceed59555391014ea531e4398517a1c4bc77a', src: phirepassSftpClientUploadSvg, alt: "Upload" })), index.h("button", { key: '3b0602bd52a1ed066e76f136ba18e67a2e923f05', type: "button", class: "action disconnect", onClick: () => this.disconnect_session(), title: "Disconnect", "aria-label": "Disconnect" }, "DISCONNECT"))), index.h("input", { key: '272d2fe2f2d61b02c4d2e5c8624f2c0ccc7daa92', type: "file", ref: (el) => this.uploadInputEl = el, onChange: (event) => this.on_upload_selected(event), style: { display: 'none' } }), this.show_content && index.h("div", { key: '2f080688bfa4c95663c278d875eceebbda78094a', class: "content" }, index.h("table", { key: '3c10b9615ba21dce3aaa47850d03f083d0ef0107' }, index.h("thead", { key: '366af5b1b875d394450b78b6490c813ac930f0fa' }, index.h("tr", { key: 'd3116485a0f02953c96e309f1c44d5e47cea9dcd' }, index.h("th", { key: '6af47d08c0bac5dd887ceda7b3f75101caeaebc3' }, "Name"), index.h("th", { key: '3c8c72711429b988e24118810ef3ea30eb779bb7' }, "Size"), index.h("th", { key: '8dd16c387287e4dd3bf29dbea304f6dd8871686a' }, "Permissions"), index.h("th", { key: '7b2c6ca49d8dd4150895307a4499d3e083cc8900' }, "Owner"), index.h("th", { key: '1723d32cf185dbaeea6d3bd9dbe3f72fc055c5a2' }, "Modified"))), index.h("tbody", { key: '685d9eae4f0ac61e07b44710be235bafaaefa7df' }, this.listing.map((item, index$1) => (index.h("tr", { key: index$1, class: {
368
+ 'selected': this.is_selected(item),
369
+ }, onClick: () => this.list_directory(item) }, index.h("td", null, item.kind === 'Folder' ? index.h("img", { class: "kind", src: phirepassSftpClientFolderSvg, alt: "Folder" }) : index.h("img", { class: "kind", src: phirepassSftpClientFileSvg, alt: "File" }), index.h("span", { class: `name ${item.kind.toLowerCase()}` }, item.name)), index.h("td", null, item.attributes.size), index.h("td", null, item.attributes.permissions ?? '-'), index.h("td", null, item.attributes.user ?? '-'), index.h("td", null, new Date(item.attributes.mtime * 1000).toLocaleString()))))))), this.show_loader && index.h("div", { key: '8337354a4cd9ca456d7845ff4934ceebb36f7dc6', class: "loader" }, "Loading..."), this.show_error && index.h("div", { key: 'c547ad1c0f24de427a77129f77402830910e98b4', class: "error" }, this.error_message)), index.h("footer", { key: 'e452f0e2f7982049df57498ef9ed1cf63c70e9eb' }, index.h("section", { key: '00111d90943b2bfb21392dede79af5e009d43524', class: "status" }, index.h("span", { key: '1c10ae5cb21118059fe61625f9fc4d0aa18be448' }, this.status), this.selected_item && index.h("span", { key: '82939fb59d72ca3823e8c580578a6f13ce4079b0', class: "selected-item" }, this.get_full_path(this.selected_item))), index.h("section", { key: '38380847cf818eb024ec5743ffd92e3369b2cc40', class: "version" }, "Version: ", this.version))), this.show_login_screen &&
370
+ index.h("section", { key: '1840f9bae95e8906c38dade1e15f6c52f360829b', class: {
371
+ 'creds': true,
372
+ 'blurred': this.show_login_screen,
373
+ } }, index.h("form", { key: 'b7b7c3494329a93aafc6c948c879ba8ecd8bd42a', class: "auth", onSubmit: (event) => {
374
+ const formData = new FormData(event.target);
375
+ let username = undefined;
376
+ if (this.show_login_screen_username) {
377
+ username = formData.get('username');
378
+ }
379
+ let password = undefined;
380
+ if (this.show_login_screen_password) {
381
+ password = formData.get('password');
382
+ }
383
+ this.channel.open_sftp_tunnel(this.nodeId, username, password);
384
+ this.show_login_screen_username = false;
385
+ this.show_login_screen_password = false;
386
+ this.show_login_screen = false;
387
+ this.show_loader = true;
388
+ event.stopPropagation();
389
+ event.preventDefault();
390
+ } }, index.h("div", { key: '25a15115fb41d65d59750a176d46a7e844286e00', class: "title" }, "SFTP Connection"), this.show_login_screen_username &&
391
+ index.h("div", { key: '13f5053dbf65445220551f554df5ab03fb7fb7c0' }, index.h("label", { key: '5016afe8eb38c54800697fbe2d4602269966edc9', htmlFor: "username" }, "Username"), index.h("input", { key: '48e7e3029b0369e06f5d1bafcf4bc9bc3fccfb1a', id: "username", autoComplete: 'off', name: "username", type: "text", placeholder: "" })), this.show_login_screen_password &&
392
+ index.h("div", { key: 'cd06fc73813094a57899c3be077f3dba0a5ca133' }, index.h("label", { key: 'f64e3145d4df56d4654dedb0188c2a33db09634b', htmlFor: "password" }, "Password"), index.h("input", { key: '6e22d7cfbf40b8d2e77a23730d55df2e900d5da7', id: "password", autoComplete: 'off', name: "password", type: "password", placeholder: "" })), index.h("div", { key: '9405dbf23cb588db9b2368c3155a9230ab046438' }, index.h("button", { key: 'b8087e7b9a828db3d6b36f8fe06d564c76d01402', type: "submit" }, "Connect"))))));
227
393
  }
228
394
  static get watchers() { return {
229
395
  "nodeId": [{
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DTAHGGCM.js');
4
- var protocol = require('./protocol-C0YjPrve.js');
3
+ var index = require('./index-BiurVooY.js');
4
+ var protocol = require('./protocol-BDROfN76.js');
5
5
 
6
6
  /**
7
7
  * Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.
@@ -503,7 +503,6 @@ const PhirepassTerminal = class {
503
503
  }
504
504
  }
505
505
  handle_error(error) {
506
- console.log('Handling protocol error message:', error);
507
506
  switch (error.kind) {
508
507
  case protocol.ErrorType.Generic:
509
508
  case protocol.ErrorType.Authentication:
@@ -514,7 +513,6 @@ const PhirepassTerminal = class {
514
513
  this.passwordBuffer = "";
515
514
  break;
516
515
  case protocol.ErrorType.RequiresUsernamePassword:
517
- console.log('Server requires both username and password. Prompting for username first.');
518
516
  case protocol.ErrorType.RequiresUsername:
519
517
  this.terminal.reset();
520
518
  this.inputMode = protocol.InputMode.Username;
@@ -696,7 +694,7 @@ const PhirepassTerminal = class {
696
694
  this.usernameBuffer = "";
697
695
  }
698
696
  render() {
699
- return (index.h(index.Host, { key: '35e5c0bae22383759a360fc3b596c97f5056f8a0' }, index.h("div", { key: '3e0f91502f089cad4bd8fa1dc98e650dae5af358', id: "ccc", ref: el => (this.containerEl = el) })));
697
+ return (index.h(index.Host, { key: '13831d1794d5739dcd61460571dbdd86eb3b7368' }, index.h("div", { key: '1a68fbc0c601df5525e278627567fa1c62c59992', id: "ccc", ref: el => (this.containerEl = el) })));
700
698
  }
701
699
  static get watchers() { return {
702
700
  "nodeId": [{
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DTAHGGCM.js');
3
+ var index = require('./index-BiurVooY.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["phirepass-sftp-client.cjs",[[513,"phirepass-sftp-client",{"name":[1],"description":[1],"hideHeader":[4,"hide-header"],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"],"max":[32],"show_login_screen":[32],"show_login_screen_username":[32],"show_login_screen_password":[32],"maximize":[64],"minimize":[64]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]],["phirepass-terminal.cjs",[[513,"phirepass-terminal",{"terminalOptions":[16],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]]], options);
22
+ return index.bootstrapLazy([["phirepass-sftp-client.cjs",[[513,"phirepass-sftp-client",{"name":[1],"description":[1],"hideHeader":[4,"hide-header"],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"],"max":[32],"show_login_screen":[32],"show_login_screen_username":[32],"show_error":[32],"error_message":[32],"show_login_screen_password":[32],"show_navigation":[32],"breadcrumbs":[32],"current_dir":[32],"listing":[32],"show_content":[32],"show_loader":[32],"version":[32],"status":[32],"selected_item":[32],"maximize":[64],"minimize":[64]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]],["phirepass-terminal.cjs",[[513,"phirepass-terminal",{"terminalOptions":[16],"serverHost":[1,"server-host"],"serverPort":[2,"server-port"],"allowInsecure":[4,"allow-insecure"],"heartbeatInterval":[2,"heartbeat-interval"],"nodeId":[1,"node-id"],"token":[1],"serverId":[1,"server-id"]},null,{"nodeId":[{"onNodeIdChange":0}],"serverId":[{"onServerIdChange":0}]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -762,7 +762,7 @@ async function __wbg_init(module_or_path) {
762
762
  }
763
763
 
764
764
  if (module_or_path === undefined) {
765
- module_or_path = new URL('phirepass-channel_bg.wasm', (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('protocol-C0YjPrve.js', document.baseURI).href)));
765
+ module_or_path = new URL('phirepass-channel_bg.wasm', (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('protocol-BDROfN76.js', document.baseURI).href)));
766
766
  }
767
767
  const imports = __wbg_get_imports();
768
768
 
@@ -782,6 +782,7 @@ exports.ProtocolMessageType = void 0;
782
782
  ProtocolMessageType["TunnelOpened"] = "TunnelOpened";
783
783
  ProtocolMessageType["TunnelClosed"] = "TunnelClosed";
784
784
  ProtocolMessageType["TunnelData"] = "TunnelData";
785
+ ProtocolMessageType["SFTPListItems"] = "SFTPListItems";
785
786
  })(exports.ProtocolMessageType || (exports.ProtocolMessageType = {}));
786
787
  exports.InputMode = void 0;
787
788
  (function (InputMode) {
@@ -6,6 +6,7 @@ export var ProtocolMessageType;
6
6
  ProtocolMessageType["TunnelOpened"] = "TunnelOpened";
7
7
  ProtocolMessageType["TunnelClosed"] = "TunnelClosed";
8
8
  ProtocolMessageType["TunnelData"] = "TunnelData";
9
+ ProtocolMessageType["SFTPListItems"] = "SFTPListItems";
9
10
  })(ProtocolMessageType || (ProtocolMessageType = {}));
10
11
  export var InputMode;
11
12
  (function (InputMode) {
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
2
+ stroke="rgb(189, 219, 209)" stroke-width="2" stroke-linecap="round"
3
+ stroke-linejoin="round"
4
+ class="lucide lucide-chevron-right w-3 h-3 text-muted-foreground/50 shrink-0">
5
+ <path d="m9 18 6-6-6-6"></path>
6
+ </svg>