tmex-cli 0.4.1 → 0.4.2

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 (21) hide show
  1. package/dist/runtime/server.js +18 -0
  2. package/package.json +1 -1
  3. package/resources/fe-dist/assets/{DevicePage-n4JoyDed.js → DevicePage-CKaPUo7L.js} +2 -2
  4. package/resources/fe-dist/assets/{DevicePage-n4JoyDed.js.map → DevicePage-CKaPUo7L.js.map} +1 -1
  5. package/resources/fe-dist/assets/DevicesPage-FqU-Dxhu.js +17 -0
  6. package/resources/fe-dist/assets/{DevicesPage-BwLKaiUR.js.map → DevicesPage-FqU-Dxhu.js.map} +1 -1
  7. package/resources/fe-dist/assets/{SettingsPage-hS99lHcp.js → SettingsPage-BfkOW0fc.js} +2 -2
  8. package/resources/fe-dist/assets/{SettingsPage-hS99lHcp.js.map → SettingsPage-BfkOW0fc.js.map} +1 -1
  9. package/resources/fe-dist/assets/{index-CJyFlAt8.js → index-EgHfq93I.js} +6 -6
  10. package/resources/fe-dist/assets/index-EgHfq93I.js.map +1 -0
  11. package/resources/fe-dist/assets/index-Ytlj3p_q.css +1 -0
  12. package/resources/fe-dist/assets/{select-DGBwxGiK.js → select-CNlE6MiW.js} +3 -3
  13. package/resources/fe-dist/assets/{select-DGBwxGiK.js.map → select-CNlE6MiW.js.map} +1 -1
  14. package/resources/fe-dist/assets/{switch-CWUBjs7N.js → switch-CxkzOIL6.js} +2 -2
  15. package/resources/fe-dist/assets/{switch-CWUBjs7N.js.map → switch-CxkzOIL6.js.map} +1 -1
  16. package/resources/fe-dist/assets/{useValueChanged-DwJ_SDCu.js → useValueChanged-CO2U5MoL.js} +2 -2
  17. package/resources/fe-dist/assets/{useValueChanged-DwJ_SDCu.js.map → useValueChanged-CO2U5MoL.js.map} +1 -1
  18. package/resources/fe-dist/index.html +2 -2
  19. package/resources/fe-dist/assets/DevicesPage-BwLKaiUR.js +0 -17
  20. package/resources/fe-dist/assets/index-CJaX5rlK.css +0 -1
  21. package/resources/fe-dist/assets/index-CJyFlAt8.js.map +0 -1
@@ -20363,8 +20363,13 @@ var I18N_RESOURCES = {
20363
20363
  title: "Device Management",
20364
20364
  devices: "Devices",
20365
20365
  addDevice: "Add Device",
20366
+ addDeviceDescription: "Fill in device details and choose a connection method",
20366
20367
  addFirstDevice: "Add First Device",
20367
20368
  editDevice: "Edit Device",
20369
+ editDeviceDescription: "Update device configuration",
20370
+ sectionBasic: "Basic Info",
20371
+ sectionConnection: "Connection",
20372
+ sectionAuth: "Authentication",
20368
20373
  noDevices: "No Devices",
20369
20374
  noDevicesDescription: "Add a local or SSH device to get started",
20370
20375
  name: "Device Name",
@@ -20397,6 +20402,7 @@ var I18N_RESOURCES = {
20397
20402
  disconnected: "Disconnected",
20398
20403
  connecting: "Connecting...",
20399
20404
  deleteConfirm: "Delete this device?",
20405
+ deleteDescription: 'Device "{{name}}" will be permanently removed. This action cannot be undone.',
20400
20406
  deleteSuccess: "Device deleted",
20401
20407
  createSuccess: "Device created",
20402
20408
  updateSuccess: "Device updated",
@@ -20695,8 +20701,13 @@ Time: {{time}}`,
20695
20701
  title: "\u8BBE\u5907\u7BA1\u7406",
20696
20702
  devices: "\u8BBE\u5907",
20697
20703
  addDevice: "\u6DFB\u52A0\u8BBE\u5907",
20704
+ addDeviceDescription: "\u586B\u5199\u8BBE\u5907\u4FE1\u606F\u5E76\u9009\u62E9\u8FDE\u63A5\u65B9\u5F0F",
20698
20705
  addFirstDevice: "\u6DFB\u52A0\u7B2C\u4E00\u4E2A\u8BBE\u5907",
20699
20706
  editDevice: "\u4FEE\u6539\u8BBE\u5907",
20707
+ editDeviceDescription: "\u66F4\u65B0\u8BBE\u5907\u914D\u7F6E",
20708
+ sectionBasic: "\u57FA\u672C\u4FE1\u606F",
20709
+ sectionConnection: "\u8FDE\u63A5\u4FE1\u606F",
20710
+ sectionAuth: "\u8BA4\u8BC1\u4FE1\u606F",
20700
20711
  noDevices: "\u6682\u65E0\u8BBE\u5907",
20701
20712
  noDevicesDescription: "\u6DFB\u52A0\u672C\u5730\u6216 SSH \u8BBE\u5907\u5F00\u59CB\u4F7F\u7528",
20702
20713
  name: "\u8BBE\u5907\u540D\u79F0",
@@ -20729,6 +20740,7 @@ Time: {{time}}`,
20729
20740
  disconnected: "\u5DF2\u65AD\u5F00",
20730
20741
  connecting: "\u8FDE\u63A5\u4E2D...",
20731
20742
  deleteConfirm: "\u5220\u9664\u6B64\u8BBE\u5907\uFF1F",
20743
+ deleteDescription: '\u8BBE\u5907 "{{name}}" \u5C06\u88AB\u6C38\u4E45\u79FB\u9664\uFF0C\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002',
20732
20744
  deleteSuccess: "\u8BBE\u5907\u5DF2\u5220\u9664",
20733
20745
  createSuccess: "\u8BBE\u5907\u5DF2\u521B\u5EFA",
20734
20746
  updateSuccess: "\u8BBE\u5907\u5DF2\u66F4\u65B0",
@@ -21027,8 +21039,13 @@ Bot\uFF1A{{botName}}
21027
21039
  title: "\u30C7\u30D0\u30A4\u30B9\u7BA1\u7406",
21028
21040
  devices: "\u30C7\u30D0\u30A4\u30B9",
21029
21041
  addDevice: "\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0",
21042
+ addDeviceDescription: "\u30C7\u30D0\u30A4\u30B9\u60C5\u5831\u3092\u5165\u529B\u3057\u3001\u63A5\u7D9A\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",
21030
21043
  addFirstDevice: "\u6700\u521D\u306E\u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0",
21031
21044
  editDevice: "\u30C7\u30D0\u30A4\u30B9\u3092\u7DE8\u96C6",
21045
+ editDeviceDescription: "\u30C7\u30D0\u30A4\u30B9\u8A2D\u5B9A\u3092\u66F4\u65B0",
21046
+ sectionBasic: "\u57FA\u672C\u60C5\u5831",
21047
+ sectionConnection: "\u63A5\u7D9A\u60C5\u5831",
21048
+ sectionAuth: "\u8A8D\u8A3C\u60C5\u5831",
21032
21049
  noDevices: "\u30C7\u30D0\u30A4\u30B9\u304C\u3042\u308A\u307E\u305B\u3093",
21033
21050
  noDevicesDescription: "\u30ED\u30FC\u30AB\u30EB\u307E\u305F\u306F SSH \u30C7\u30D0\u30A4\u30B9\u3092\u8FFD\u52A0\u3057\u3066\u958B\u59CB",
21034
21051
  name: "\u30C7\u30D0\u30A4\u30B9\u540D",
@@ -21061,6 +21078,7 @@ Bot\uFF1A{{botName}}
21061
21078
  disconnected: "\u5207\u65AD\u6E08\u307F",
21062
21079
  connecting: "\u63A5\u7D9A\u4E2D...",
21063
21080
  deleteConfirm: "\u3053\u306E\u30C7\u30D0\u30A4\u30B9\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F",
21081
+ deleteDescription: "\u30C7\u30D0\u30A4\u30B9\u300C{{name}}\u300D\u306F\u5B8C\u5168\u306B\u524A\u9664\u3055\u308C\u307E\u3059\u3002\u3053\u306E\u64CD\u4F5C\u306F\u53D6\u308A\u6D88\u305B\u307E\u305B\u3093\u3002",
21064
21082
  deleteSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u524A\u9664\u3057\u307E\u3057\u305F",
21065
21083
  createSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u4F5C\u6210\u3057\u307E\u3057\u305F",
21066
21084
  updateSuccess: "\u30C7\u30D0\u30A4\u30B9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tmex-cli",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tmex": "./bin/tmex.js",
@@ -1,4 +1,4 @@
1
- var Xt=Object.defineProperty;var Jt=(s,e,t)=>e in s?Xt(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var g=(s,e,t)=>Jt(s,typeof e!="symbol"?e+"":e,t);import{c as He,r as u,bw as j,bx as dt,j as m,b as nt,u as Nt,by as rt,bz as Qt,bA as it,d as de,e as Zt,bB as we,f as Ke,B as ge}from"./index-CJyFlAt8.js";import{T as es,A as ts,a as ss,b as ns,c as rs,d as is,e as os,f as ls,g as as}from"./useValueChanged-DwJ_SDCu.js";import{L as We,S as cs,a as ht}from"./switch-CWUBjs7N.js";/**
1
+ var Xt=Object.defineProperty;var Jt=(s,e,t)=>e in s?Xt(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var g=(s,e,t)=>Jt(s,typeof e!="symbol"?e+"":e,t);import{c as He,r as u,bw as j,bx as dt,j as m,b as nt,u as Nt,by as rt,bz as Qt,bA as it,d as de,e as Zt,bB as we,f as Ke,B as ge}from"./index-EgHfq93I.js";import{T as es,A as ts,a as ss,b as ns,c as rs,d as is,e as os,f as ls,g as as}from"./useValueChanged-CO2U5MoL.js";import{L as We,S as cs,a as ht}from"./switch-CxkzOIL6.js";/**
2
2
  * @license lucide-react v0.564.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -23,4 +23,4 @@ var Xt=Object.defineProperty;var Jt=(s,e,t)=>e in s?Xt(s,e,{enumerable:!0,config
23
23
  `);return(e.endsWith(`
24
24
  `)?e.slice(0,-1):e).replace(/\n/g,`\r
25
25
  `)}const nr="\x1B[?1049h\x1B[H\x1B[2J";function rr(s){return nr+Ht(s)}function Rt(s,e){let t=e,n=0;for(const l of s)l===10&&!t&&(n+=1),t=l===13;const r=t;if(n===0)return{normalized:s,endedWithCR:r};const i=new Uint8Array(s.length+n);let o=0;t=e;for(const l of s)l===10&&!t&&(i[o]=13,o+=1),i[o]=l,o+=1,t=l===13;return{normalized:i,endedWithCR:r}}const ir=1.3,or=36;function lr(s,e){const t=u.useRef(!1);return u.useEffect(()=>{const n=s.current;if(!n||!(window.innerWidth<768||navigator.maxTouchPoints>0||"ontouchstart"in window))return;t.current=!0;let i=0,o=null,l=!1,d=0;const c=w=>w?!!(w.closest(".scrollbar")||w.closest(".slider")||w.closest(".xterm-scroll-area")):!1,y=(w,h,A)=>{const N=A instanceof Element?A:null;if(c(N))return!0;const q=document.elementFromPoint(w,h);if(c(q))return!0;const H=n.querySelector(".xterm");if(!(H instanceof HTMLElement))return!1;const M=H.getBoundingClientRect(),G=w>=M.left&&w<=M.right,X=h>=M.top&&h<=M.bottom;return!G||!X?!1:w>=M.right-or},D=()=>[n.querySelector(".xterm-viewport"),n.querySelector(".xterm-scrollable-element")].filter(h=>h instanceof HTMLElement),k=w=>{if(o===null)return null;for(let h=0;h<w.length;h+=1){const A=w.item(h);if(A&&A.identifier===o)return A}return null},I=w=>{if(w.touches.length!==1)return;const h=w.touches.item(0);h&&(o=h.identifier,i=h.clientY,d=0,l=y(h.clientX,h.clientY,w.target))},E=w=>{var G,X,oe,Q,_,U,V,Y;const h=k(w.touches)??w.touches.item(0);if(!h||(l||(l=y(h.clientX,h.clientY,w.target),l&&(d=0)),l))return;const A=h.clientY,N=i-A;if(i=A,N===0)return;let q=!1,H=!1;const M=(e==null?void 0:e())??null;if(M){const R=M==null?void 0:M._core,C=((Q=(oe=(X=(G=R==null?void 0:R._renderService)==null?void 0:G.dimensions)==null?void 0:X.css)==null?void 0:oe.cell)==null?void 0:Q.height)??18;d+=N*ir;const T=d>0?Math.floor(d/C):Math.ceil(d/C);if(typeof M.handleViewportGesture=="function")T!==0&&(q=M.handleViewportGesture({source:"touch",deltaY:T*C,clientX:h.clientX,clientY:h.clientY}),d-=T*C);else if(T!==0){const z=((U=(_=M.buffer)==null?void 0:_.active)==null?void 0:U.viewportY)??0;M.scrollLines(T);const te=((Y=(V=M.buffer)==null?void 0:V.active)==null?void 0:Y.viewportY)??0;q=z!==te,H=T<0&&z<=0&&te<=0,d-=T*C}}else{const R=D();if(R.length===0)return;for(const C of R){const T=C.scrollTop;C.scrollTop+=N;const z=C.scrollTop;Math.abs(z-T)>0&&(q=!0),N<0&&z<=0&&(H=!0)}if(!q){const C=n.querySelector(".xterm");if(C instanceof HTMLElement){const T=new WheelEvent("wheel",{bubbles:!0,cancelable:!0,deltaMode:WheelEvent.DOM_DELTA_PIXEL,deltaY:N}),z=C.dispatchEvent(T);q=T.defaultPrevented||!z}}}w.cancelable&&(q||H)&&w.preventDefault()},x=w=>{o===null||!k(w.changedTouches)||(o=null,d=0,l=!1)};return n.addEventListener("touchstart",I,{passive:!0}),n.addEventListener("touchmove",E,{passive:!1}),n.addEventListener("touchend",x,{passive:!0}),n.addEventListener("touchcancel",x,{passive:!0}),()=>{t.current=!1,n.removeEventListener("touchstart",I),n.removeEventListener("touchmove",E),n.removeEventListener("touchend",x),n.removeEventListener("touchcancel",x)}},[s,e]),t}function ar({now:s,remoteSize:e,pendingLocalSize:t,ttlMs:n=2e3}){return!t||s-t.at>n?!0:t.cols===e.cols&&t.rows===e.rows}function cr({currentSize:s,containerSize:e,force:t=!1}){return t?!0:s.cols!==e.cols||s.rows!==e.rows}function ur({deviceId:s,paneId:e,deviceConnected:t,isSelectionInvalid:n,onResize:r,onSync:i,getContainerRect:o}){const l=u.useRef(null),d=u.useRef(null),c=u.useRef(null),y=u.useRef(null),D=u.useRef(0),k=u.useRef([]),I=u.useRef(null),E=u.useRef(null),x=u.useRef(o),w=u.useRef(!1),h=u.useRef(r),A=u.useRef(i);u.useEffect(()=>{h.current=r},[r]),u.useEffect(()=>{A.current=i},[i]),u.useEffect(()=>{x.current=o},[o]);const N=u.useCallback(()=>{var z,te,S,b,P,B,$,K,le,O;const _=E.current,U=I.current;if(!_||!U||!_.element)return null;let V;try{const ae=U.proposeDimensions();if(!ae)throw new Error("fitAddon.proposeDimensions() returned null");V=Math.max(2,ae.cols)}catch{const ae=_._core,ce=((b=(S=(te=(z=ae==null?void 0:ae._renderService)==null?void 0:z.dimensions)==null?void 0:te.css)==null?void 0:S.cell)==null?void 0:b.width)??9,ee=(P=x.current)==null?void 0:P.call(x);if(!ee||ee.width===0)return null;V=Math.max(2,Math.floor(ee.width/ce))}const Y=(B=x.current)==null?void 0:B.call(x);if(!Y||Y.height===0)return null;const R=_._core,C=((O=(le=(K=($=R==null?void 0:R._renderService)==null?void 0:$.dimensions)==null?void 0:K.css)==null?void 0:le.cell)==null?void 0:O.height)??17,T=Math.max(2,Math.floor(Y.height/C));return{cols:V,rows:T}},[]),q=u.useCallback((_,U)=>{const V=E.current;V&&(V.cols===_&&V.rows===U||V.resize(_,U))},[]),H=u.useCallback((_,U=!1)=>{if(!s||!e||!t||n&&_!=="sync"||!U&&Date.now()<D.current||!E.current)return!1;const Y=N();if(!Y)return!1;const{cols:R,rows:C}=Y,T=c.current;return!U&&T&&T.cols===R&&T.rows===C?(q(R,C),!0):(q(R,C),_==="sync"?A.current(R,C):h.current(R,C),c.current={cols:R,rows:C},y.current={cols:R,rows:C,at:Date.now()},!0)},[q,t,s,n,N,e]),M=u.useCallback((_="resize",U={})=>{const{immediate:V=!1,force:Y=!1}=U;d.current!==null&&(window.clearTimeout(d.current),d.current=null),l.current!==null&&(cancelAnimationFrame(l.current),l.current=null);const R=()=>{l.current=requestAnimationFrame(()=>{l.current=null,H(_,Y)})};if(V){R();return}d.current=window.setTimeout(()=>{d.current=null,R()},150)},[H]),G=u.useCallback(()=>{for(const _ of k.current)window.clearTimeout(_);k.current=[]},[]),X=u.useCallback(()=>{var U;G(),M("sync",{immediate:!0,force:!0});const _=window.setTimeout(()=>{M("sync",{immediate:!0,force:!0})},60);k.current.push(_),typeof document<"u"&&"fonts"in document&&((U=document.fonts)!=null&&U.ready)&&document.fonts.ready.then(()=>{M("sync",{immediate:!0,force:!0})}).catch(()=>{})},[G,M]);u.useEffect(()=>{let _=null;const U=()=>{_!==null&&cancelAnimationFrame(_),_=requestAnimationFrame(()=>{_=null,M("resize")})};return window.addEventListener("resize",U),()=>{window.removeEventListener("resize",U),_!==null&&cancelAnimationFrame(_)}},[M]),u.useEffect(()=>{const _=()=>{var z;const R=E.current,C=N();if(!R||!C)return;if(!cr({currentSize:{cols:Math.max(2,R.cols),rows:Math.max(2,R.rows)},containerSize:C})){(z=R.refresh)==null||z.call(R);return}M("sync",{force:!0})},U=()=>{if(document.visibilityState!=="visible"){w.current=!0;return}w.current&&(w.current=!1,_())},V=()=>{w.current=!0},Y=()=>{w.current&&(w.current=!1,_())};return document.addEventListener("visibilitychange",U),window.addEventListener("blur",V),window.addEventListener("focus",Y),()=>{document.removeEventListener("visibilitychange",U),window.removeEventListener("blur",V),window.removeEventListener("focus",Y)}},[N,M]),u.useEffect(()=>()=>{G(),d.current!==null&&window.clearTimeout(d.current),l.current!==null&&cancelAnimationFrame(l.current)},[G]);const oe=u.useCallback(_=>{I.current=_},[]),Q=u.useCallback(_=>{E.current=_},[]);return{scheduleResize:M,runPostSelectResize:X,clearPostSelectResizeTimers:G,setFitAddon:oe,setTerminal:Q,lastReportedSize:c,pendingLocalSize:y,suppressLocalResizeUntil:D}}const dr={fontFamily:sr,fontSize:13,scrollback:1e4},st="tmex:terminal-mode-cache";function hr(s,e){try{const t=sessionStorage.getItem(st);return t?JSON.parse(t)[`${s}:${e}`]??null:null}catch{return null}}function fr(s,e,t){try{const n=sessionStorage.getItem(st),r=n?JSON.parse(n):{},i=`${s}:${e}`;t?r[i]=t:delete r[i],sessionStorage.setItem(st,JSON.stringify(r))}catch{}}function mr(){return{mouseX10:!1,mouseNormal:!0,mouseButton:!1,mouseAny:!1,mouseUtf8:!1,mouseSgr:!0,mouseSgrPixels:!1,mouseUrxvt:!1,altScroll:!0,altScreen1047:!1,altScreen1049:!1}}function pr(s,e){if(!e)return s?{...s,mouseX10:!1,mouseNormal:!1,mouseButton:!1,mouseAny:!1,mouseUtf8:!1,mouseSgrPixels:!1,mouseUrxvt:!1,altScreen1047:!1,altScreen1049:!1}:null;const t=mr();if(!s)return t;const n=s.mouseNormal||s.mouseButton||s.mouseAny;return{...s,mouseX10:!1,mouseUtf8:!1,mouseSgr:!0,mouseSgrPixels:!1,mouseUrxvt:!1,altScroll:!0,altScreen1047:!1,altScreen1049:!1,mouseNormal:n?s.mouseNormal:t.mouseNormal}}function gr(s){var t;const e=globalThis;e.__tmexE2eXterm=s,e.__tmexE2eTerminal=s,e.__tmexE2eTerminalEngine=It,e.__tmexE2eTerminalRenderer=((t=s.getRendererKind)==null?void 0:t.call(s))??null}function wr(s){if(!s)return;const e=globalThis;e.__tmexE2eTerminal!==s&&e.__tmexE2eXterm!==s||(e.__tmexE2eXterm=null,e.__tmexE2eTerminal=null,e.__tmexE2eTerminalEngine=null,e.__tmexE2eTerminalRenderer=null,e.__tmexE2eTerminalSelectionText=null)}const Vt=u.forwardRef(({deviceId:s,paneId:e,theme:t,inputMode:n,deviceConnected:r,isSelectionInvalid:i,onResize:o,onSync:l},d)=>{const[c,y]=u.useState(null),D=j(S=>S.sendInput),k=u.useMemo(()=>{switch(t){case"light":return Ut;default:return Bt}},[t]),I=u.useRef(null),E=u.useRef(null),x=u.useRef(null),w=u.useRef(s),h=u.useRef(e),A=u.useRef(s),N=u.useRef(e),q=u.useRef(r&&!i),H=u.useRef(n),M=u.useRef(k),G=u.useRef(!1),X=u.useRef(!1),oe=u.useRef(null),Q=u.useRef(!1),_=u.useCallback((S,b,P)=>{!(S!=null&&S.exportModeSnapshot)||!b||!P||fr(b,P,S.exportModeSnapshot())},[]),U=u.useCallback(()=>c,[c]);lr(I,U),u.useEffect(()=>{w.current=s,h.current=e,X.current=!1},[s,e]),u.useEffect(()=>{q.current=r&&!i},[r,i]),u.useEffect(()=>{H.current=n},[n]),u.useEffect(()=>{M.current=k},[k]);const V=u.useCallback(S=>{if(!S||n!=="direct"||!q.current)return;const b=w.current,P=h.current;!b||!P||D(b,P,S,!1)},[n,D]),{pendingLocalSize:Y,scheduleResize:R,runPostSelectResize:C,setFitAddon:T,setTerminal:z}=ur({deviceId:s,paneId:e,deviceConnected:r,isSelectionInvalid:i,onResize:o,onSync:l,getContainerRect:()=>{const S=I.current;if(!S)return null;const b=S.getBoundingClientRect();return{width:b.width,height:b.height}}});u.useEffect(()=>{let S=!1,b=null;return tr({...dr,theme:M.current,disableStdin:H.current==="editor"}).then(P=>{if(S){P.dispose();return}b=P,E.current&&P.open(E.current),gr(P),y(P)}),()=>{S=!0,y(null),wr(b),b==null||b.dispose()}},[]),u.useEffect(()=>{!c||!("setTheme"in c)||c.setTheme(k)},[c,k]),u.useEffect(()=>{!c||!("setDisableStdin"in c)||c.setDisableStdin(n==="editor")},[c,n]);const te=u.useMemo(()=>c?{onResetTerminal:S=>{w.current===S&&(_(c,A.current,N.current),Q.current=!0,c.reset(),G.current=!1,C())},onApplyHistory:(S,b,P)=>{var K;if(w.current!==S)return;const B=pr(hr(w.current,h.current),P);B&&((K=c.restoreModeSnapshot)==null||K.call(c,B));const $=P?rr(b):Ht(b);X.current=!0,c.write($),Q.current=!1,A.current=w.current,N.current=h.current,_(c,w.current,h.current)},onFlushBuffer:(S,b)=>{if(w.current===S){for(const P of b){const B=Rt(P,G.current);G.current=B.endedWithCR,c.write(B.normalized)}X.current&&(c.buffer.active.baseY<=1&&c.scrollToTop(),X.current=!1),A.current=w.current,N.current=h.current,_(c,w.current,h.current)}},onOutput:(S,b,P)=>{if(w.current!==S||h.current!==b)return;const B=Rt(P,G.current);G.current=B.endedWithCR,c.write(B.normalized),X.current&&(c.buffer.active.baseY<=1&&c.scrollToTop(),X.current=!1),A.current=w.current,N.current=h.current,_(c,w.current,h.current)}}:{},[c,_,C]);return u.useEffect(()=>{c?oe.current!==c&&(G.current=!1,A.current=w.current,N.current=h.current,oe.current=c):oe.current=null},[c]),u.useEffect(()=>{if(!(!c||!s||!e))return()=>{if(Q.current){Q.current=!1;return}_(c,A.current,N.current)}},[s,c,e,_]),u.useEffect(()=>{dt(te)},[te]),u.useEffect(()=>()=>{dt({})},[]),u.useEffect(()=>{if(!c){x.current=null,T(null),z(null);return}const S=new er;return c.loadAddon(S),x.current=S,T(S),z(c),C(),()=>{try{S.dispose()}finally{x.current=null,T(null),z(null)}}},[c,C,T,z]),u.useEffect(()=>{const S=I.current;if(!S)return;let b=null;const P=new ResizeObserver(()=>{b!==null&&cancelAnimationFrame(b),b=requestAnimationFrame(()=>{b=null,R("resize")})});return P.observe(S),()=>{P.disconnect(),b!==null&&cancelAnimationFrame(b)}},[R]),u.useEffect(()=>{if(!c||!s||!e)return;const S=c.onData(b=>{!r||i||V(b)});return c.attachCustomKeyEventHandler(b=>!r||i||b.type!=="keydown"||n!=="direct"?!0:b.shiftKey&&b.key==="Enter"?(b.preventDefault(),V("\x1B[13;2u"),!1):!0),()=>{S.dispose(),c.attachCustomKeyEventHandler(()=>!0)}},[c,r,i,n,V,s,e]),u.useImperativeHandle(d,()=>({write:S=>c==null?void 0:c.write(S),reset:()=>{c==null||c.reset(),G.current=!1},scrollToBottom:()=>c==null?void 0:c.scrollToBottom(),resize:(S,b)=>c==null?void 0:c.resize(S,b),getTerminal:()=>c??null,getSize:()=>c?{cols:Math.max(2,c.cols),rows:Math.max(2,c.rows)}:null,runPostSelectResize:()=>C(),scheduleResize:(S,b)=>R(S,b),calculateSizeFromContainer:()=>{var ae,ce,ee,se,ne,be,Fe,Ge,ze,Se,J,xe,me,Ce,De,ue;const S=I.current,b=c,P=x.current;if(!S||!b)return null;const B=S.getBoundingClientRect();if(B.width===0||B.height===0)return null;const $=b._core;let K;if(P)try{const re=P.proposeDimensions();if(re)K=Math.max(2,re.cols);else{const he=((se=(ee=(ce=(ae=$==null?void 0:$._renderService)==null?void 0:ae.dimensions)==null?void 0:ce.css)==null?void 0:ee.cell)==null?void 0:se.width)??9;K=Math.max(2,Math.floor(B.width/he))}}catch{const re=((Ge=(Fe=(be=(ne=$==null?void 0:$._renderService)==null?void 0:ne.dimensions)==null?void 0:be.css)==null?void 0:Fe.cell)==null?void 0:Ge.width)??9;K=Math.max(2,Math.floor(B.width/re))}else{const re=((xe=(J=(Se=(ze=$==null?void 0:$._renderService)==null?void 0:ze.dimensions)==null?void 0:Se.css)==null?void 0:J.cell)==null?void 0:xe.width)??9;K=Math.max(2,Math.floor(B.width/re))}const le=((ue=(De=(Ce=(me=$==null?void 0:$._renderService)==null?void 0:me.dimensions)==null?void 0:Ce.css)==null?void 0:De.cell)==null?void 0:ue.height)??17,O=Math.max(2,Math.floor(B.height/le));return{cols:K,rows:O}},getPendingLocalSize:()=>Y.current}),[c,Y,C,R]),m.jsxDEV("div",{ref:I,className:"h-full w-full relative",style:{backgroundColor:k.background},"data-terminal-engine":It,children:m.jsxDEV("div",{ref:E,className:"absolute inset-0"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/components/terminal/Terminal.tsx",lineNumber:550,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/components/terminal/Terminal.tsx",lineNumber:544,columnNumber:7},void 0)});Vt.displayName="Terminal";const yr=1200,br=2e3;function pe(s,e){return!s||!e?!1:s.windowId===e.windowId&&s.paneId===e.paneId}function Ft(s,e){const t=s.filter(n=>e-n.at<yr);return t.length===0?null:t.reduce((n,r)=>r.at>n.at?r:n)}function Re(s,e=Date.now()){return!s||e-s.at>br?null:s}function Sr(s){const e=s.now??Date.now(),t=Ft(s.recentSelectRequests,e);if(t&&!pe(t,s.activePaneFromEvent)||pe(s.currentRoute,s.activePaneFromEvent)||pe(s.lastHandledActive,s.activePaneFromEvent))return!0;const n=Re(s.pendingUserSelection,e);return!!(n&&!pe(n,s.activePaneFromEvent))}function xr(s){const e=s.now??Date.now(),t=Ft(s.recentSelectRequests,e),n=Re(s.pendingUserSelection,e);return!!(n&&!pe(n,s.snapshotActive)||t&&!pe(t,s.snapshotActive))}function _r(s){const e=s.now??Date.now(),t=Re(s.pendingUserSelection,e);return!(t&&pe(t,s.routeTarget)||s.snapshotActive&&pe(s.snapshotActive,s.routeTarget))}function Er(){const s=nt.getState().settings;return(s==null?void 0:s.siteName)||"tmex"}function Ct(s){const e=s==null?void 0:s.trim();return e&&e.length>0?e:"?"}function Gt({paneIdx:s,windowIdx:e,paneTitle:t,windowName:n,deviceName:r}){const i=e??"?",o=s??"?",l=Ct(t??n),d=Ct(r);return`${i}/${o}: ${l}@${d}`}function Tr(s){const e=Er();return s!=null&&s.trim()?`[${e}]${s}`:e}function vr(){if(typeof navigator>"u")return!1;const s=navigator.userAgent,e=/iPad|iPhone|iPod/.test(s),t=navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;return e||t}const Rr=[{key:"enter",label:"ENTER",payload:"\r"},{key:"ctrl-c",label:"CTRL-C",payload:""},{key:"ctrl-d",label:"CTRL-D",payload:""},{key:"up",label:"↑",payload:"\x1B[A"},{key:"down",label:"↓",payload:"\x1B[B"},{key:"left",label:"←",payload:"\x1B[D"},{key:"right",label:"→",payload:"\x1B[C"},{key:"shift-enter",label:"SHIFT+ENTER",payload:"\x1B[13;2u"},{key:"tab",label:"TAB",payload:" "},{key:"backspace",label:"BACKSPACE",payload:"\b"},{key:"esc",label:"ESC",payload:"\x1B"},{key:"delete",label:"DELETE",payload:""},{key:":",label:":",payload:":"},{key:"/",label:"/",payload:"/"},{key:"'",label:"'",payload:"'"},{key:'"',label:'"',payload:'"'},{key:"`",label:"`",payload:"`"}],Dt=u.memo(function({onSend:e,onFocusEditor:t,disabled:n,isMobile:r,inputMode:i}){return m.jsxDEV("div",{className:"terminal-shortcuts-strip my-2 bg-muted rounded-xl","data-testid":"terminal-shortcuts-strip",children:m.jsxDEV("div",{className:"shortcut-row flex items-center gap-1.5 p-2 overflow-x-auto scrollbar-thin","data-testid":"editor-shortcuts-row",children:Rr.map(o=>m.jsxDEV(ge,{variant:"secondary",size:"sm",className:"h-7 min-w-9 px-2.5 rounded-full text-[11px] font-medium tracking-wide shrink-0 [@media(any-pointer:coarse)]:h-9 [@media(any-pointer:coarse)]:min-w-10 [@media(any-pointer:coarse)]:px-3",title:o.label,"aria-label":o.label,"data-testid":`editor-shortcut-${o.key}`,onPointerDown:l=>l.preventDefault(),onClick:()=>{e(o.payload),r&&i==="editor"&&(t==null||t())},disabled:n,children:o.label},o.key,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:107,columnNumber:11},this))},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:102,columnNumber:7},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:98,columnNumber:5},this)});function kr(){var ut;const{t:s}=Nt(),{deviceId:e,windowId:t,paneId:n}=rt(),r=Qt(),i=u.useRef(null),o=u.useRef(null),l=u.useRef(null),d=u.useRef(null),c=u.useRef(!1),y=u.useRef(!1),D=u.useRef(null),k=j(a=>a.selectPane),I=j(a=>e?a.snapshots[e]:void 0),E=j(a=>{var p;return e?(p=a.deviceErrors)==null?void 0:p[e]:void 0}),x=j(a=>{var p;return e?((p=a.deviceConnected)==null?void 0:p[e])??!1:!1}),w=nt(a=>{var p;return((p=a.settings)==null?void 0:p.siteName)??"tmex"}),h=u.useMemo(()=>it(n),[n]),A=u.useMemo(()=>e&&h?`${e}:${h}`:null,[e,h]),[N,q]=u.useState(!1),[H,M]=u.useState(""),[G,X]=u.useState(!1),oe=u.useRef(!1),Q=!x||!h,[_,U]=u.useState(0),[V,Y]=u.useState(0),[R,C]=u.useState(!1),T=de(a=>a.inputMode),z=de(a=>a.theme),te=de(a=>a.editorSendWithEnter),S=de(a=>a.setEditorSendWithEnter),b=de(a=>a.addEditorHistory),P=de(a=>a.setEditorDraft),B=de(a=>a.removeEditorDraft),$=de(a=>A?a.editorDrafts[A]??"":""),K=u.useMemo(()=>vr(),[]),le=N&&T==="editor"&&K&&G,O=(ut=I==null?void 0:I.session)==null?void 0:ut.windows,ae=z==="light"?Ut:Bt,{data:ce}=Zt({queryKey:["devices"],queryFn:async()=>{const a=await fetch("/api/devices");if(!a.ok)throw new Error("Failed to fetch devices");return a.json()},throwOnError:!1}),ee=u.useMemo(()=>{if(e)return ce==null?void 0:ce.devices.find(a=>a.id===e)},[e,ce==null?void 0:ce.devices]),se=u.useMemo(()=>{if(!(!t||!O))return O.find(a=>a.id===t)},[t,O]),ne=u.useMemo(()=>{if(!(!h||!se))return se.panes.find(a=>a.id===h)},[h,se]),be=!!O,Se=!!(be&&!!t&&!se||be&&!!t&&!!h&&!!se&&!ne?s("wsError.checkGateway"):null),J=!!(x&&h&&!Se),xe=u.useMemo(()=>{if(!se||!ne)return null;const a=(ee==null?void 0:ee.name)??e;return Gt({paneIdx:ne.index,windowIdx:se.index,paneTitle:ne.title,windowName:se.name,deviceName:a})},[ee==null?void 0:ee.name,e,ne,se]),me=u.useMemo(()=>{if(!O||O.length===0)return null;const a=O.find(f=>f.active),p=a==null?void 0:a.panes.find(f=>f.active);return!a||!p?null:{windowId:a.id,paneId:p.id}},[O]),Ce=u.useCallback((a,p)=>{!e||!h||j.getState().resizePane(e,h,a,p)},[e,h]),De=u.useCallback((a,p)=>{!e||!h||j.getState().syncPaneSize(e,h,a,p)},[e,h]),ue=u.useCallback((a,p)=>{const f=d.current,v=(f==null?void 0:f.calculateSizeFromContainer())??(f==null?void 0:f.getSize())??void 0;if(v)return v;if(!a||!p||!O)return;const W=O.find(ie=>ie.id===a),F=W==null?void 0:W.panes.find(ie=>ie.id===p);if(!(!F||F.width<=1||F.height<=1))return{cols:F.width,rows:F.height}},[O]);u.useEffect(()=>{const a=()=>{q(window.innerWidth<768||"ontouchstart"in window)};return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),u.useEffect(()=>{if(!N||!K||y.current)return;y.current=!0;const a=()=>{window.scrollTo(0,1)},p=window.requestAnimationFrame(a),f=window.setTimeout(a,120),v=window.setTimeout(a,420);return()=>{window.cancelAnimationFrame(p),window.clearTimeout(f),window.clearTimeout(v)}},[K,N]),u.useEffect(()=>{T!=="editor"&&X(!1)},[T]),u.useEffect(()=>{var v,W;if(!(N&&K&&T==="editor"&&G)){U(0);return}let a=null;const p=()=>{const F=window.visualViewport,ie=(F==null?void 0:F.height)??window.innerHeight,Ee=(F==null?void 0:F.offsetTop)??0,qt=Math.max(0,Math.round(window.innerHeight-ie-Ee));U(qt)},f=()=>{a===null&&(a=window.requestAnimationFrame(()=>{a=null,p()}))};return p(),(v=window.visualViewport)==null||v.addEventListener("resize",f),(W=window.visualViewport)==null||W.addEventListener("scroll",f),window.addEventListener("resize",f),()=>{var F,ie;(F=window.visualViewport)==null||F.removeEventListener("resize",f),(ie=window.visualViewport)==null||ie.removeEventListener("scroll",f),window.removeEventListener("resize",f),a!==null&&window.cancelAnimationFrame(a)}},[T,G,K,N]),u.useEffect(()=>{if(!le){Y(0);return}const a=o.current;if(!a)return;const p=()=>{Y(Math.ceil(a.getBoundingClientRect().height))};p();const f=new ResizeObserver(p);return f.observe(a),()=>f.disconnect()},[le]),u.useEffect(()=>{e&&(c.current=!1,Ye.current=null,_e.current=null,D.current=null,re.current=[])},[e]),u.useEffect(()=>{x||(c.current=!1)},[x]),u.useEffect(()=>{if(!e||!x||!t||!O)return;if(O.length===0){r("/devices",{replace:!0});return}const a=O.find(f=>f.id===t);if(!a)return;if(!h){const f=a.panes.find(v=>v.active)??a.panes[0];f&&r(`/devices/${e}/windows/${t}/panes/${we(f.id)}`,{replace:!0});return}if(!a.panes.find(f=>f.id===h)){const f=a.panes.find(v=>v.active)??a.panes[0];f&&r(`/devices/${e}/windows/${t}/panes/${we(f.id)}`,{replace:!0});return}},[e,x,O,t,h,r]),u.useEffect(()=>{if(!e||!x||!O||O.length===0||t&&h||c.current)return;const a=O.find(f=>f.active)??O[0],p=a.panes.find(f=>f.active)??a.panes[0];p&&(c.current=!0,r(`/devices/${e}/windows/${a.id}/panes/${we(p.id)}`,{replace:!0}))},[x,e,r,h,t,O]),u.useEffect(()=>{if(!e||!t||!h||Q||!x)return;const a=j.getState().selectedPanes[e];if(a&&a.windowId===t&&a.paneId===h)return;const p=ue(t,h);he(t,h),k(e,t,h,p)},[x,e,ue,Q,h,k,t]),u.useEffect(()=>{if(!e||!x||!t||!h)return;const a={windowId:t,paneId:h};_r({routeTarget:a,snapshotActive:me,pendingUserSelection:D.current})&&(D.current={windowId:a.windowId,paneId:a.paneId,at:Date.now()})},[x,e,h,me,t]);const re=u.useRef([]),he=u.useCallback((a,p)=>{const f=Date.now(),v=[...re.current.filter(W=>f-W.at<2e3),{windowId:a,paneId:p,at:f}];re.current=v.slice(-8)},[]),Z=j(a=>e?a.activePaneFromEvent[e]:void 0),Ye=u.useRef(null);u.useEffect(()=>{if(!e||!x||!t||!h||!Z)return;const a=Date.now(),p=Re(D.current,a);if(D.current=p,Sr({now:a,pendingUserSelection:p,activePaneFromEvent:Z,currentRoute:{windowId:t,paneId:h},recentSelectRequests:re.current,lastHandledActive:Ye.current}))return;Ye.current={...Z},p&&p.windowId===Z.windowId&&p.paneId===Z.paneId&&(D.current=null);const f=ue(Z.windowId,Z.paneId);he(Z.windowId,Z.paneId),k(e,Z.windowId,Z.paneId,f),r(`/devices/${e}/windows/${Z.windowId}/panes/${we(Z.paneId)}`,{replace:!0})},[e,x,t,h,Z,he,ue,k,r]);const _e=u.useRef(null);u.useEffect(()=>{if(!e||!x||!O||O.length===0)return;const a=re.current,p=O.find(Ee=>Ee.active);if(!p)return;const f=p.panes.find(Ee=>Ee.active);if(!f)return;const v={windowId:p.id,paneId:f.id},W=Date.now(),F=Re(D.current,W);if(D.current=F,xr({now:W,pendingUserSelection:F,snapshotActive:v,recentSelectRequests:a})||_e.current&&_e.current.windowId===v.windowId&&_e.current.paneId===v.paneId||(_e.current={...v},F&&F.windowId===v.windowId&&F.paneId===v.paneId&&(D.current=null),t===v.windowId&&h===v.paneId))return;const ie=ue(v.windowId,v.paneId);he(v.windowId,v.paneId),k(e,v.windowId,v.paneId,ie),r(`/devices/${e}/windows/${v.windowId}/panes/${we(v.paneId)}`,{replace:!0})},[e,x,O,t,h,he,ue,k,r]);const $e=j(a=>e?a.pendingCreateWindowAt[e]:void 0);u.useEffect(()=>{if(!e||!x||!$e)return;const a=5e3,p=Date.now()-$e;if(p>a){j.getState().clearPendingCreateWindow(e);return}if(!me){const W=window.setTimeout(()=>{j.getState().clearPendingCreateWindow(e)},a-p);return()=>window.clearTimeout(W)}const f=me;if(t===f.windowId&&h===f.paneId){const W=window.setTimeout(()=>{j.getState().clearPendingCreateWindow(e)},a-p);return()=>window.clearTimeout(W)}D.current={windowId:f.windowId,paneId:f.paneId,at:Date.now()};const v=ue(f.windowId,f.paneId);he(f.windowId,f.paneId),k(e,f.windowId,f.paneId,v),r(`/devices/${e}/windows/${f.windowId}/panes/${we(f.paneId)}`,{replace:!0}),j.getState().clearPendingCreateWindow(e)},[e,x,$e,me,t,h,he,ue,k,r]),u.useEffect(()=>{if(!J||!ne||Q)return;const a=d.current,p=a==null?void 0:a.getTerminal();if(!p)return;const f=Math.max(2,Math.floor(ne.width||0)),v=Math.max(2,Math.floor(ne.height||0));if(!f||!v)return;const W=Date.now(),F={cols:f,rows:v},ie=(a==null?void 0:a.getPendingLocalSize())??null;ar({now:W,remoteSize:F,pendingLocalSize:ie})&&(p.cols===f&&p.rows===v||p.resize(f,v))},[J,Q,ne]),u.useEffect(()=>{const a=window.requestAnimationFrame(()=>{var f;(f=d.current)==null||f.scrollToBottom()}),p=window.setTimeout(()=>{var f;(f=d.current)==null||f.scrollToBottom()},120);return()=>{window.cancelAnimationFrame(a),window.clearTimeout(p)}},[T]),u.useEffect(()=>{E!=null&&E.message&&Ke.error(E.message)},[E==null?void 0:E.message]),u.useEffect(()=>(document.title=Tr(xe),()=>{document.title=w}),[w,xe]),u.useEffect(()=>{const a=()=>{var p;(p=d.current)==null||p.scrollToBottom()};return window.addEventListener("tmex:jump-to-latest",a),()=>{window.removeEventListener("tmex:jump-to-latest",a)}},[]),u.useEffect(()=>{const a=p=>{const{deviceId:f,windowId:v,paneId:W}=p.detail;f===e&&(D.current={windowId:v,paneId:W,at:Date.now()})};return window.addEventListener("tmex:user-initiated-selection",a),()=>{window.removeEventListener("tmex:user-initiated-selection",a)}},[e]),u.useEffect(()=>{M($)},[$]);const ct=u.useCallback(a=>{if(!e||!h||!J)return;j.getState().sendInput(e,h,a,!1)},[J,e,h]),zt=u.useCallback(()=>{if(!J){Ke.error(s("wsError.checkGateway"));return}if(!e||!h||!H.trim())return;C(!0),window.setTimeout(()=>C(!1),150);const a=te?`${H}\r`:H;j.getState().sendInput(e,h,a,!1),b(H),A&&B(A),M("")},[b,J,e,A,te,H,B,h,s]),Yt=u.useCallback(()=>{if(!J){Ke.error(s("wsError.checkGateway"));return}if(!e||!h||!H.trim())return;C(!0),window.setTimeout(()=>C(!1),150);const a=H.split(/\r?\n/),p=j.getState();for(const f of a)f.trim()&&p.sendInput(e,h,`${f}\r`,!1);b(H),A&&B(A),M("")},[b,J,e,A,H,B,h,s]),$t=u.useCallback(a=>{if(X(!0),!(N&&K))return;const p=a.currentTarget;window.requestAnimationFrame(()=>{p.scrollIntoView({block:"nearest",inline:"nearest"})}),window.setTimeout(()=>{window.scrollTo(0,1)},60)},[K,N]),Kt=u.useCallback(()=>{X(!1)},[]),Wt=u.useCallback(()=>{var a;(a=l.current)==null||a.focus({preventScroll:!0})},[]);if(!e)return m.jsxDEV("div",{className:"flex h-full items-center justify-center p-4",children:m.jsxDEV("div",{className:"rounded-lg border border-dashed border-border px-4 py-3 text-sm text-muted-foreground",children:s("device.noDevices")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:976,columnNumber:9},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:975,columnNumber:7},this);const jt=!x&&!E;return m.jsxDEV("div",{className:"flex h-full min-h-0 flex-col bg-background","data-testid":"device-page",children:[m.jsxDEV("div",{className:`flex-1 relative overflow-hidden min-h-0 min-w-0 ${N&&T==="editor"&&!le?"pb-1":""}`,style:{paddingBottom:le?`${V+60}px`:void 0},children:[m.jsxDEV("div",{className:"h-full px-3 py-1 min-h-0 min-w-0 w-full relative flex rounded-xl",style:{backgroundColor:ae.background},children:x&&h?m.jsxDEV("div",{ref:i,className:"flex-1 h-full min-h-0 w-full",children:m.jsxDEV(Vt,{ref:d,deviceId:e,paneId:h,theme:z,inputMode:T,deviceConnected:x,isSelectionInvalid:Se,onResize:Ce,onSync:De},`${e}:${h}`,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1001,columnNumber:15},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1e3,columnNumber:13},this):m.jsxDEV("div",{className:"absolute inset-0 flex flex-col items-center justify-center p-8 text-center",children:m.jsxDEV("div",{className:"max-w-sm space-y-4",children:x?t?m.jsxDEV(m.Fragment,{children:[m.jsxDEV("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:m.jsxDEV(We,{className:"h-6 w-6 text-muted-foreground animate-spin"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1038,columnNumber:23},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1037,columnNumber:21},this),m.jsxDEV("h3",{className:"text-lg font-medium",children:s("terminal.connecting")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1040,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1036,columnNumber:19},this):m.jsxDEV(m.Fragment,{children:[m.jsxDEV("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:m.jsxDEV("span",{className:"text-2xl text-muted-foreground",children:"📋"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1028,columnNumber:23},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1027,columnNumber:21},this),m.jsxDEV("h3",{className:"text-lg font-medium",children:s("window.noWindowSelected")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1030,columnNumber:21},this),m.jsxDEV("p",{className:"text-sm text-muted-foreground",children:s("window.selectWindowToStart")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1031,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1026,columnNumber:19},this):m.jsxDEV(m.Fragment,{children:[m.jsxDEV("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:m.jsxDEV("span",{className:"text-2xl text-muted-foreground",children:"🔌"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1020,columnNumber:23},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1019,columnNumber:21},this),m.jsxDEV("h3",{className:"text-lg font-medium",children:s("device.disconnected")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1022,columnNumber:21},this),m.jsxDEV("p",{className:"text-sm text-muted-foreground",children:s("device.connectToStart")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1023,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1018,columnNumber:19},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1016,columnNumber:15},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1015,columnNumber:13},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:995,columnNumber:9},this),jt&&m.jsxDEV("div",{className:"absolute inset-0 flex items-center justify-center bg-background/85 backdrop-blur-sm","data-testid":"terminal-status-overlay",children:m.jsxDEV("div",{className:"flex flex-col items-center gap-2 rounded-lg border border-border bg-card/90 px-4 py-3 shadow-sm",children:[m.jsxDEV("div",{className:"h-7 w-7 rounded-full border-2 border-primary border-t-transparent animate-spin"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1054,columnNumber:15},this),m.jsxDEV("span",{className:"text-xs text-muted-foreground","data-testid":"terminal-status-text",children:s("terminal.connecting")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1055,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1053,columnNumber:13},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1049,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:987,columnNumber:7},this),T==="direct"&&m.jsxDEV("div",{className:"",children:m.jsxDEV(Dt,{onSend:ct,disabled:!J,isMobile:N,inputMode:T},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1066,columnNumber:11},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1065,columnNumber:9},this),T==="editor"&&m.jsxDEV("div",{ref:o,className:`editor-mode-input bg-card/85 backdrop-blur-sm ${le?"fixed left-0 right-0 z-50":""}`,style:le?{bottom:`${_}px`}:void 0,children:[N&&m.jsxDEV(Dt,{onSend:ct,onFocusEditor:Wt,disabled:!J,isMobile:N,inputMode:T},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1085,columnNumber:13},this),m.jsxDEV("textarea",{ref:l,"data-testid":"editor-input",className:"min-h-[88px] max-h-[28vh] w-full resize-y rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground shadow-xs outline-none transition-colors focus:border-ring",value:H,onChange:a=>{const p=a.target.value;if(M(p),!!A){if(p){P(A,p);return}B(A)}},placeholder:s("terminal.inputPlaceholder"),onFocus:$t,onBlur:Kt,onCompositionStart:()=>{oe.current=!0},onCompositionEnd:()=>{oe.current=!1}},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1093,columnNumber:11},this),m.jsxDEV("div",{className:"actions mt-2",children:m.jsxDEV("div",{className:"send-row flex flex-wrap items-center justify-end gap-2","data-testid":"editor-send-row",children:[m.jsxDEV("div",{className:"send-with-enter-toggle mr-auto flex items-center gap-2 text-xs text-muted-foreground","data-testid":"editor-send-with-enter-toggle",children:[m.jsxDEV(cs,{size:"sm",checked:te,onCheckedChange:a=>S(!!a)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1129,columnNumber:17},this),m.jsxDEV("span",{children:s("terminal.editorSendWithEnter")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1134,columnNumber:17},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1125,columnNumber:15},this),m.jsxDEV(ge,{variant:"outline",size:"sm","data-testid":"editor-clear",onPointerDown:a=>a.preventDefault(),onClick:()=>{var a;M(""),A&&B(A),N&&T==="editor"&&((a=l.current)==null||a.focus({preventScroll:!0}))},title:s("terminal.clear"),children:[m.jsxDEV(es,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1152,columnNumber:17},this),s("terminal.clear")]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1136,columnNumber:15},this),m.jsxDEV(ge,{variant:"secondary",size:"sm","data-testid":"editor-send-line-by-line",onPointerDown:a=>a.preventDefault(),onClick:()=>{var a;Yt(),N&&T==="editor"&&((a=l.current)==null||a.focus({preventScroll:!0}))},disabled:!J||R,children:[R?m.jsxDEV(We,{className:"h-4 w-4 animate-spin"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1169,columnNumber:19},this):m.jsxDEV(ht,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1171,columnNumber:19},this),s("terminal.editorSendLineByLine")]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1155,columnNumber:15},this),m.jsxDEV(ge,{variant:"default",size:"sm","data-testid":"editor-send",onPointerDown:a=>a.preventDefault(),onClick:()=>{var a;zt(),N&&T==="editor"&&((a=l.current)==null||a.focus({preventScroll:!0}))},disabled:!J||R,children:[R?m.jsxDEV(We,{className:"h-4 w-4 animate-spin"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1189,columnNumber:19},this):m.jsxDEV(ht,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1191,columnNumber:19},this),s("common.send")]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1175,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1121,columnNumber:13},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1120,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1076,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:986,columnNumber:5},this)}function Ar(){const{deviceId:s,windowId:e,paneId:t}=rt(),n=t?it(t):void 0,r=j(y=>y.snapshots),i=nt(y=>{var D;return((D=y.settings)==null?void 0:D.siteName)??"tmex"}),o=s?r[s]:void 0,l=u.useMemo(()=>{var y;if(!(!e||!((y=o==null?void 0:o.session)!=null&&y.windows)))return o.session.windows.find(D=>D.id===e)},[e,o]),d=u.useMemo(()=>{if(!(!n||!l))return l.panes.find(y=>y.id===n)},[n,l]),c=u.useMemo(()=>l&&d?Gt({paneIdx:d.index,windowIdx:l.index,paneTitle:d.title,windowName:l.name,deviceName:i}):s??"",[l,d,i,s]);return m.jsxDEV(m.Fragment,{children:c},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1234,columnNumber:10},this)}function Lr(){const{t:s}=Nt(),{deviceId:e,paneId:t}=rt(),n=t?it(t):void 0,r=de(E=>E.inputMode),i=de(E=>E.setInputMode),o=j(E=>{var x;return e?((x=E.deviceConnected)==null?void 0:x[e])??!1:!1}),[l,d]=u.useState(!1),c=!!(n&&o),y=()=>{i(r==="direct"?"editor":"direct")},D=()=>{window.dispatchEvent(new CustomEvent("tmex:jump-to-latest"))},k=()=>{d(!0)},I=()=>{window.location.reload()};return m.jsxDEV(m.Fragment,{children:[m.jsxDEV(ge,{variant:"ghost",size:"icon-sm",onClick:k,"aria-label":s("nav.refreshPage"),title:s("nav.refreshPage"),children:m.jsxDEV(ps,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1278,columnNumber:9},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1271,columnNumber:7},this),m.jsxDEV(ge,{variant:"ghost",size:"icon-sm",onClick:y,disabled:!c,"data-testid":"terminal-input-mode-toggle","aria-label":s(r==="direct"?"nav.switchToEditor":"nav.switchToDirect"),title:s(r==="direct"?"nav.switchToEditor":"nav.switchToDirect"),children:r==="direct"?m.jsxDEV(fs,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1290,columnNumber:11},this):m.jsxDEV(ws,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1292,columnNumber:11},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1280,columnNumber:7},this),m.jsxDEV(ge,{variant:"ghost",size:"icon-sm",onClick:D,disabled:!c,"aria-label":s("nav.jumpToLatest"),title:s("nav.jumpToLatest"),children:m.jsxDEV(ds,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1303,columnNumber:9},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1295,columnNumber:7},this),m.jsxDEV(ts,{open:l,onOpenChange:d,children:m.jsxDEV(ss,{children:[m.jsxDEV(ns,{children:[m.jsxDEV(rs,{children:s("nav.refreshPage")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1309,columnNumber:13},this),m.jsxDEV(is,{children:s("nav.refreshPageConfirm")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1310,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1308,columnNumber:11},this),m.jsxDEV(os,{children:[m.jsxDEV(ls,{onClick:()=>d(!1),children:s("common.cancel")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1313,columnNumber:13},this),m.jsxDEV(as,{onClick:I,children:s("common.confirm")},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1316,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1312,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1307,columnNumber:9},this)},void 0,!1,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1306,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/krhougs/LocalCodes/tmex/apps/fe/src/pages/DevicePage.tsx",lineNumber:1270,columnNumber:5},this)}export{Lr as PageActions,Ar as PageTitle,kr as default};
26
- //# sourceMappingURL=DevicePage-n4JoyDed.js.map
26
+ //# sourceMappingURL=DevicePage-CKaPUo7L.js.map