x-shell.js 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +304 -0
  2. package/dist/client/browser-bundle.js +314 -0
  3. package/dist/client/browser-bundle.js.map +7 -0
  4. package/dist/client/index.d.ts +7 -0
  5. package/dist/client/index.d.ts.map +1 -0
  6. package/dist/client/index.js +5 -0
  7. package/dist/client/index.js.map +1 -0
  8. package/dist/client/terminal-client.d.ts +122 -0
  9. package/dist/client/terminal-client.d.ts.map +1 -0
  10. package/dist/client/terminal-client.js +328 -0
  11. package/dist/client/terminal-client.js.map +1 -0
  12. package/dist/server/index.d.ts +7 -0
  13. package/dist/server/index.d.ts.map +1 -0
  14. package/dist/server/index.js +5 -0
  15. package/dist/server/index.js.map +1 -0
  16. package/dist/server/terminal-server.d.ts +107 -0
  17. package/dist/server/terminal-server.d.ts.map +1 -0
  18. package/dist/server/terminal-server.js +392 -0
  19. package/dist/server/terminal-server.js.map +1 -0
  20. package/dist/shared/types.d.ts +133 -0
  21. package/dist/shared/types.d.ts.map +1 -0
  22. package/dist/shared/types.js +5 -0
  23. package/dist/shared/types.js.map +1 -0
  24. package/dist/ui/browser-bundle.js +1654 -0
  25. package/dist/ui/browser-bundle.js.map +7 -0
  26. package/dist/ui/index.d.ts +6 -0
  27. package/dist/ui/index.d.ts.map +1 -0
  28. package/dist/ui/index.js +6 -0
  29. package/dist/ui/index.js.map +1 -0
  30. package/dist/ui/styles.d.ts +16 -0
  31. package/dist/ui/styles.d.ts.map +1 -0
  32. package/dist/ui/styles.js +125 -0
  33. package/dist/ui/styles.js.map +1 -0
  34. package/dist/ui/x-shell-terminal.d.ts +100 -0
  35. package/dist/ui/x-shell-terminal.d.ts.map +1 -0
  36. package/dist/ui/x-shell-terminal.js +540 -0
  37. package/dist/ui/x-shell-terminal.js.map +1 -0
  38. package/package.json +94 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * x-shell.js UI exports
3
+ */
4
+ export { XShellTerminal } from './x-shell-terminal.js';
5
+ export { sharedStyles, buttonStyles, themeStyles } from './styles.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * x-shell.js UI exports
3
+ */
4
+ export { XShellTerminal } from './x-shell-terminal.js';
5
+ export { sharedStyles, buttonStyles, themeStyles } from './styles.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared styles for x-shell UI components
3
+ */
4
+ /**
5
+ * Theme styles - sets CSS custom properties based on theme attribute
6
+ */
7
+ export declare const themeStyles: import("lit").CSSResult;
8
+ /**
9
+ * Shared base styles
10
+ */
11
+ export declare const sharedStyles: import("lit").CSSResult;
12
+ /**
13
+ * Button styles
14
+ */
15
+ export declare const buttonStyles: import("lit").CSSResult;
16
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/ui/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,WAAW,yBAwEvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,yBAaxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,yBAuBxB,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Shared styles for x-shell UI components
3
+ */
4
+ import { css } from 'lit';
5
+ /**
6
+ * Theme styles - sets CSS custom properties based on theme attribute
7
+ */
8
+ export const themeStyles = css `
9
+ /* Light theme */
10
+ :host([theme='light']) {
11
+ --xs-bg: #ffffff;
12
+ --xs-bg-header: #f5f5f5;
13
+ --xs-text: #1f2937;
14
+ --xs-text-muted: #6b7280;
15
+ --xs-border: #e5e7eb;
16
+ --xs-terminal-bg: #ffffff;
17
+ --xs-terminal-fg: #1f2937;
18
+ --xs-terminal-cursor: #1f2937;
19
+ --xs-terminal-selection: #b4d5fe;
20
+ --xs-btn-bg: #e5e7eb;
21
+ --xs-btn-text: #374151;
22
+ --xs-btn-hover: #d1d5db;
23
+ --xs-status-connected: #22c55e;
24
+ --xs-status-disconnected: #ef4444;
25
+ }
26
+
27
+ /* Dark theme (default) */
28
+ :host,
29
+ :host([theme='dark']) {
30
+ --xs-bg: #1e1e1e;
31
+ --xs-bg-header: #2d2d2d;
32
+ --xs-text: #cccccc;
33
+ --xs-text-muted: #808080;
34
+ --xs-border: #3e3e3e;
35
+ --xs-terminal-bg: #1e1e1e;
36
+ --xs-terminal-fg: #cccccc;
37
+ --xs-terminal-cursor: #ffffff;
38
+ --xs-terminal-selection: #264f78;
39
+ --xs-btn-bg: #3c3c3c;
40
+ --xs-btn-text: #cccccc;
41
+ --xs-btn-hover: #4a4a4a;
42
+ --xs-status-connected: #22c55e;
43
+ --xs-status-disconnected: #ef4444;
44
+ }
45
+
46
+ /* Auto theme - follows system preference */
47
+ :host([theme='auto']) {
48
+ --xs-bg: #1e1e1e;
49
+ --xs-bg-header: #2d2d2d;
50
+ --xs-text: #cccccc;
51
+ --xs-text-muted: #808080;
52
+ --xs-border: #3e3e3e;
53
+ --xs-terminal-bg: #1e1e1e;
54
+ --xs-terminal-fg: #cccccc;
55
+ --xs-terminal-cursor: #ffffff;
56
+ --xs-terminal-selection: #264f78;
57
+ --xs-btn-bg: #3c3c3c;
58
+ --xs-btn-text: #cccccc;
59
+ --xs-btn-hover: #4a4a4a;
60
+ --xs-status-connected: #22c55e;
61
+ --xs-status-disconnected: #ef4444;
62
+ }
63
+
64
+ @media (prefers-color-scheme: light) {
65
+ :host([theme='auto']) {
66
+ --xs-bg: #ffffff;
67
+ --xs-bg-header: #f5f5f5;
68
+ --xs-text: #1f2937;
69
+ --xs-text-muted: #6b7280;
70
+ --xs-border: #e5e7eb;
71
+ --xs-terminal-bg: #ffffff;
72
+ --xs-terminal-fg: #1f2937;
73
+ --xs-terminal-cursor: #1f2937;
74
+ --xs-terminal-selection: #b4d5fe;
75
+ --xs-btn-bg: #e5e7eb;
76
+ --xs-btn-text: #374151;
77
+ --xs-btn-hover: #d1d5db;
78
+ }
79
+ }
80
+ `;
81
+ /**
82
+ * Shared base styles
83
+ */
84
+ export const sharedStyles = css `
85
+ :host {
86
+ display: block;
87
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
88
+ Ubuntu, Cantarell, sans-serif;
89
+ font-size: 14px;
90
+ color: var(--xs-text);
91
+ background: var(--xs-bg);
92
+ }
93
+
94
+ * {
95
+ box-sizing: border-box;
96
+ }
97
+ `;
98
+ /**
99
+ * Button styles
100
+ */
101
+ export const buttonStyles = css `
102
+ button {
103
+ display: inline-flex;
104
+ align-items: center;
105
+ gap: 4px;
106
+ padding: 6px 12px;
107
+ border: none;
108
+ border-radius: 4px;
109
+ background: var(--xs-btn-bg);
110
+ color: var(--xs-btn-text);
111
+ font-size: 13px;
112
+ cursor: pointer;
113
+ transition: background-color 0.15s;
114
+ }
115
+
116
+ button:hover {
117
+ background: var(--xs-btn-hover);
118
+ }
119
+
120
+ button:disabled {
121
+ opacity: 0.5;
122
+ cursor: not-allowed;
123
+ }
124
+ `;
125
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/ui/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwE7B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;CAa9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;CAuB9B,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * x-shell-terminal web component
3
+ *
4
+ * A ready-to-use terminal component that wraps xterm.js and
5
+ * connects to an x-shell server via WebSocket.
6
+ *
7
+ * Usage:
8
+ * ```html
9
+ * <x-shell-terminal
10
+ * url="ws://localhost:3000/terminal"
11
+ * shell="/bin/bash"
12
+ * cwd="/home/user"
13
+ * theme="dark"
14
+ * ></x-shell-terminal>
15
+ * ```
16
+ */
17
+ import { LitElement } from 'lit';
18
+ import type { TerminalOptions } from '../shared/types.js';
19
+ export declare class XShellTerminal extends LitElement {
20
+ static styles: import("lit").CSSResult[];
21
+ url: string;
22
+ shell: string;
23
+ cwd: string;
24
+ cols: number;
25
+ rows: number;
26
+ theme: 'dark' | 'light' | 'auto';
27
+ noHeader: boolean;
28
+ autoConnect: boolean;
29
+ autoSpawn: boolean;
30
+ fontSize: number;
31
+ fontFamily: string;
32
+ private client;
33
+ private terminal;
34
+ private fitAddon;
35
+ private connected;
36
+ private sessionActive;
37
+ private loading;
38
+ private error;
39
+ private sessionInfo;
40
+ private xtermModule;
41
+ private fitAddonModule;
42
+ private resizeObserver;
43
+ connectedCallback(): void;
44
+ disconnectedCallback(): void;
45
+ /**
46
+ * Load xterm.js dynamically
47
+ */
48
+ private loadXterm;
49
+ /**
50
+ * Connect to the terminal server
51
+ */
52
+ connect(): Promise<void>;
53
+ /**
54
+ * Disconnect from the server
55
+ */
56
+ disconnect(): void;
57
+ /**
58
+ * Spawn a terminal session
59
+ */
60
+ spawn(options?: TerminalOptions): Promise<void>;
61
+ /**
62
+ * Initialize xterm.js UI
63
+ */
64
+ private initTerminalUI;
65
+ /**
66
+ * Get terminal theme based on component theme
67
+ */
68
+ private getTerminalTheme;
69
+ /**
70
+ * Kill the current session
71
+ */
72
+ kill(): void;
73
+ /**
74
+ * Clear the terminal
75
+ */
76
+ clear(): void;
77
+ /**
78
+ * Write data to the terminal (display only, not sent to server)
79
+ */
80
+ write(data: string): void;
81
+ /**
82
+ * Write line to the terminal (display only, not sent to server)
83
+ */
84
+ writeln(data: string): void;
85
+ /**
86
+ * Focus the terminal
87
+ */
88
+ focus(): void;
89
+ /**
90
+ * Cleanup resources
91
+ */
92
+ private cleanup;
93
+ render(): import("lit-html").TemplateResult<1>;
94
+ }
95
+ declare global {
96
+ interface HTMLElementTagNameMap {
97
+ 'x-shell-terminal': XShellTerminal;
98
+ }
99
+ }
100
+ //# sourceMappingURL=x-shell-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-shell-terminal.d.ts","sourceRoot":"","sources":["../../src/ui/x-shell-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAsBvE,qBACa,cAAe,SAAQ,UAAU;IAC5C,OAAgB,MAAM,4BAwGpB;IAG0B,GAAG,SAAM;IACT,KAAK,SAAM;IACX,GAAG,SAAM;IACT,IAAI,SAAM;IACV,IAAI,SAAM;IACK,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAU;IAChC,QAAQ,UAAS;IACd,WAAW,UAAS;IACtB,SAAS,UAAS;IAGpB,QAAQ,SAAM;IACZ,UAAU,SACpB;IAGnC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAA4B;IAGxD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAA+B;IAE5C,iBAAiB;IAQjB,oBAAoB;IAK7B;;OAEG;YACW,SAAS;IAsBvB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE9B;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCrD;;OAEG;YACW,cAAc;IA4D5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM3B;;OAEG;IACM,KAAK,IAAI,IAAI;IAMtB;;OAEG;IACH,OAAO,CAAC,OAAO;IAmBN,MAAM;CA0ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}