lit-shell.js 0.1.3 → 1.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.
@@ -359,45 +359,45 @@ let LitShellTerminal = class LitShellTerminal extends LitElement {
359
359
  this.fitAddon = null;
360
360
  }
361
361
  render() {
362
- return html `
362
+ return html `
363
363
  ${this.noHeader
364
364
  ? nothing
365
- : html `
366
- <div class="header">
367
- <div class="header-title">
368
- <span>Terminal</span>
365
+ : html `
366
+ <div class="header">
367
+ <div class="header-title">
368
+ <span>Terminal</span>
369
369
  ${this.sessionInfo
370
- ? html `<span style="font-weight: normal; font-size: 12px; color: var(--ls-text-muted)">
371
- ${this.sessionInfo.shell}
370
+ ? html `<span style="font-weight: normal; font-size: 12px; color: var(--ls-text-muted)">
371
+ ${this.sessionInfo.shell}
372
372
  </span>`
373
- : nothing}
374
- </div>
375
- <div class="header-actions">
373
+ : nothing}
374
+ </div>
375
+ <div class="header-actions">
376
376
  ${!this.connected
377
- ? html `<button @click=${this.connect} ?disabled=${this.loading}>
378
- ${this.loading ? 'Connecting...' : 'Connect'}
377
+ ? html `<button @click=${this.connect} ?disabled=${this.loading}>
378
+ ${this.loading ? 'Connecting...' : 'Connect'}
379
379
  </button>`
380
380
  : !this.sessionActive
381
- ? html `<button @click=${() => this.spawn()} ?disabled=${this.loading}>
382
- ${this.loading ? 'Spawning...' : 'Start'}
381
+ ? html `<button @click=${() => this.spawn()} ?disabled=${this.loading}>
382
+ ${this.loading ? 'Spawning...' : 'Start'}
383
383
  </button>`
384
- : html `<button @click=${this.kill}>Stop</button>`}
385
- <button @click=${this.clear} ?disabled=${!this.sessionActive}>Clear</button>
386
- <div class="status">
387
- <span class="status-dot ${this.connected ? 'connected' : ''}"></span>
388
- <span>${this.connected ? 'Connected' : 'Disconnected'}</span>
389
- </div>
390
- </div>
391
- </div>
392
- `}
393
-
394
- <div class="terminal-container">
384
+ : html `<button @click=${this.kill}>Stop</button>`}
385
+ <button @click=${this.clear} ?disabled=${!this.sessionActive}>Clear</button>
386
+ <div class="status">
387
+ <span class="status-dot ${this.connected ? 'connected' : ''}"></span>
388
+ <span>${this.connected ? 'Connected' : 'Disconnected'}</span>
389
+ </div>
390
+ </div>
391
+ </div>
392
+ `}
393
+
394
+ <div class="terminal-container">
395
395
  ${this.loading && !this.terminal
396
396
  ? html `<div class="loading"><span class="loading-spinner">⏳</span> Loading...</div>`
397
397
  : this.error && !this.terminal
398
398
  ? html `<div class="error">❌ ${this.error}</div>`
399
- : nothing}
400
- </div>
399
+ : nothing}
400
+ </div>
401
401
  `;
402
402
  }
403
403
  };
@@ -405,105 +405,105 @@ LitShellTerminal.styles = [
405
405
  sharedStyles,
406
406
  themeStyles,
407
407
  buttonStyles,
408
- css `
409
- :host {
410
- display: flex;
411
- flex-direction: column;
412
- height: 100%;
413
- min-height: 200px;
414
- border: 1px solid var(--ls-border);
415
- border-radius: 4px;
416
- overflow: hidden;
417
- }
418
-
419
- .header {
420
- display: flex;
421
- align-items: center;
422
- justify-content: space-between;
423
- padding: 8px 12px;
424
- background: var(--ls-bg-header);
425
- border-bottom: 1px solid var(--ls-border);
426
- }
427
-
428
- .header-title {
429
- display: flex;
430
- align-items: center;
431
- gap: 8px;
432
- font-weight: 600;
433
- }
434
-
435
- .header-actions {
436
- display: flex;
437
- gap: 8px;
438
- }
439
-
440
- .status {
441
- display: flex;
442
- align-items: center;
443
- gap: 6px;
444
- font-size: 12px;
445
- color: var(--ls-text-muted);
446
- }
447
-
448
- .status-dot {
449
- width: 8px;
450
- height: 8px;
451
- border-radius: 50%;
452
- background: var(--ls-status-disconnected);
453
- }
454
-
455
- .status-dot.connected {
456
- background: var(--ls-status-connected);
457
- }
458
-
459
- .terminal-container {
460
- flex: 1;
461
- padding: 4px;
462
- background: var(--ls-terminal-bg);
463
- overflow: hidden;
464
- }
465
-
466
- .terminal-container .xterm {
467
- height: 100%;
468
- }
469
-
470
- .terminal-container .xterm-viewport {
471
- overflow-y: auto;
472
- }
473
-
474
- .loading,
475
- .error {
476
- display: flex;
477
- align-items: center;
478
- justify-content: center;
479
- height: 100%;
480
- padding: 20px;
481
- text-align: center;
482
- color: var(--ls-text-muted);
483
- }
484
-
485
- .error {
486
- color: #ef4444;
487
- }
488
-
489
- .loading-spinner {
490
- animation: spin 1s linear infinite;
491
- margin-right: 8px;
492
- }
493
-
494
- @keyframes spin {
495
- from {
496
- transform: rotate(0deg);
497
- }
498
- to {
499
- transform: rotate(360deg);
500
- }
501
- }
502
-
503
- /* Hide header if requested */
504
- :host([no-header]) .header {
505
- display: none;
506
- }
408
+ css `
409
+ :host {
410
+ display: flex;
411
+ flex-direction: column;
412
+ height: 100%;
413
+ min-height: 200px;
414
+ border: 1px solid var(--ls-border);
415
+ border-radius: 4px;
416
+ overflow: hidden;
417
+ }
418
+
419
+ .header {
420
+ display: flex;
421
+ align-items: center;
422
+ justify-content: space-between;
423
+ padding: 8px 12px;
424
+ background: var(--ls-bg-header);
425
+ border-bottom: 1px solid var(--ls-border);
426
+ }
427
+
428
+ .header-title {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 8px;
432
+ font-weight: 600;
433
+ }
434
+
435
+ .header-actions {
436
+ display: flex;
437
+ gap: 8px;
438
+ }
439
+
440
+ .status {
441
+ display: flex;
442
+ align-items: center;
443
+ gap: 6px;
444
+ font-size: 12px;
445
+ color: var(--ls-text-muted);
446
+ }
447
+
448
+ .status-dot {
449
+ width: 8px;
450
+ height: 8px;
451
+ border-radius: 50%;
452
+ background: var(--ls-status-disconnected);
453
+ }
454
+
455
+ .status-dot.connected {
456
+ background: var(--ls-status-connected);
457
+ }
458
+
459
+ .terminal-container {
460
+ flex: 1;
461
+ padding: 4px;
462
+ background: var(--ls-terminal-bg);
463
+ overflow: hidden;
464
+ }
465
+
466
+ .terminal-container .xterm {
467
+ height: 100%;
468
+ }
469
+
470
+ .terminal-container .xterm-viewport {
471
+ overflow-y: auto;
472
+ }
473
+
474
+ .loading,
475
+ .error {
476
+ display: flex;
477
+ align-items: center;
478
+ justify-content: center;
479
+ height: 100%;
480
+ padding: 20px;
481
+ text-align: center;
482
+ color: var(--ls-text-muted);
483
+ }
484
+
485
+ .error {
486
+ color: #ef4444;
487
+ }
488
+
489
+ .loading-spinner {
490
+ animation: spin 1s linear infinite;
491
+ margin-right: 8px;
492
+ }
493
+
494
+ @keyframes spin {
495
+ from {
496
+ transform: rotate(0deg);
497
+ }
498
+ to {
499
+ transform: rotate(360deg);
500
+ }
501
+ }
502
+
503
+ /* Hide header if requested */
504
+ :host([no-header]) .header {
505
+ display: none;
506
+ }
507
507
  `,
508
508
  ];
509
509
  __decorate([
package/dist/ui/styles.js CHANGED
@@ -5,121 +5,121 @@ import { css } from 'lit';
5
5
  /**
6
6
  * Theme styles - sets CSS custom properties based on theme attribute
7
7
  */
8
- export const themeStyles = css `
9
- /* Light theme */
10
- :host([theme='light']) {
11
- --ls-bg: #ffffff;
12
- --ls-bg-header: #f5f5f5;
13
- --ls-text: #1f2937;
14
- --ls-text-muted: #6b7280;
15
- --ls-border: #e5e7eb;
16
- --ls-terminal-bg: #ffffff;
17
- --ls-terminal-fg: #1f2937;
18
- --ls-terminal-cursor: #1f2937;
19
- --ls-terminal-selection: #b4d5fe;
20
- --ls-btn-bg: #e5e7eb;
21
- --ls-btn-text: #374151;
22
- --ls-btn-hover: #d1d5db;
23
- --ls-status-connected: #22c55e;
24
- --ls-status-disconnected: #ef4444;
25
- }
26
-
27
- /* Dark theme (default) */
28
- :host,
29
- :host([theme='dark']) {
30
- --ls-bg: #1e1e1e;
31
- --ls-bg-header: #2d2d2d;
32
- --ls-text: #cccccc;
33
- --ls-text-muted: #808080;
34
- --ls-border: #3e3e3e;
35
- --ls-terminal-bg: #1e1e1e;
36
- --ls-terminal-fg: #cccccc;
37
- --ls-terminal-cursor: #ffffff;
38
- --ls-terminal-selection: #264f78;
39
- --ls-btn-bg: #3c3c3c;
40
- --ls-btn-text: #cccccc;
41
- --ls-btn-hover: #4a4a4a;
42
- --ls-status-connected: #22c55e;
43
- --ls-status-disconnected: #ef4444;
44
- }
45
-
46
- /* Auto theme - follows system preference */
47
- :host([theme='auto']) {
48
- --ls-bg: #1e1e1e;
49
- --ls-bg-header: #2d2d2d;
50
- --ls-text: #cccccc;
51
- --ls-text-muted: #808080;
52
- --ls-border: #3e3e3e;
53
- --ls-terminal-bg: #1e1e1e;
54
- --ls-terminal-fg: #cccccc;
55
- --ls-terminal-cursor: #ffffff;
56
- --ls-terminal-selection: #264f78;
57
- --ls-btn-bg: #3c3c3c;
58
- --ls-btn-text: #cccccc;
59
- --ls-btn-hover: #4a4a4a;
60
- --ls-status-connected: #22c55e;
61
- --ls-status-disconnected: #ef4444;
62
- }
63
-
64
- @media (prefers-color-scheme: light) {
65
- :host([theme='auto']) {
66
- --ls-bg: #ffffff;
67
- --ls-bg-header: #f5f5f5;
68
- --ls-text: #1f2937;
69
- --ls-text-muted: #6b7280;
70
- --ls-border: #e5e7eb;
71
- --ls-terminal-bg: #ffffff;
72
- --ls-terminal-fg: #1f2937;
73
- --ls-terminal-cursor: #1f2937;
74
- --ls-terminal-selection: #b4d5fe;
75
- --ls-btn-bg: #e5e7eb;
76
- --ls-btn-text: #374151;
77
- --ls-btn-hover: #d1d5db;
78
- }
79
- }
8
+ export const themeStyles = css `
9
+ /* Light theme */
10
+ :host([theme='light']) {
11
+ --ls-bg: #ffffff;
12
+ --ls-bg-header: #f5f5f5;
13
+ --ls-text: #1f2937;
14
+ --ls-text-muted: #6b7280;
15
+ --ls-border: #e5e7eb;
16
+ --ls-terminal-bg: #ffffff;
17
+ --ls-terminal-fg: #1f2937;
18
+ --ls-terminal-cursor: #1f2937;
19
+ --ls-terminal-selection: #b4d5fe;
20
+ --ls-btn-bg: #e5e7eb;
21
+ --ls-btn-text: #374151;
22
+ --ls-btn-hover: #d1d5db;
23
+ --ls-status-connected: #22c55e;
24
+ --ls-status-disconnected: #ef4444;
25
+ }
26
+
27
+ /* Dark theme (default) */
28
+ :host,
29
+ :host([theme='dark']) {
30
+ --ls-bg: #1e1e1e;
31
+ --ls-bg-header: #2d2d2d;
32
+ --ls-text: #cccccc;
33
+ --ls-text-muted: #808080;
34
+ --ls-border: #3e3e3e;
35
+ --ls-terminal-bg: #1e1e1e;
36
+ --ls-terminal-fg: #cccccc;
37
+ --ls-terminal-cursor: #ffffff;
38
+ --ls-terminal-selection: #264f78;
39
+ --ls-btn-bg: #3c3c3c;
40
+ --ls-btn-text: #cccccc;
41
+ --ls-btn-hover: #4a4a4a;
42
+ --ls-status-connected: #22c55e;
43
+ --ls-status-disconnected: #ef4444;
44
+ }
45
+
46
+ /* Auto theme - follows system preference */
47
+ :host([theme='auto']) {
48
+ --ls-bg: #1e1e1e;
49
+ --ls-bg-header: #2d2d2d;
50
+ --ls-text: #cccccc;
51
+ --ls-text-muted: #808080;
52
+ --ls-border: #3e3e3e;
53
+ --ls-terminal-bg: #1e1e1e;
54
+ --ls-terminal-fg: #cccccc;
55
+ --ls-terminal-cursor: #ffffff;
56
+ --ls-terminal-selection: #264f78;
57
+ --ls-btn-bg: #3c3c3c;
58
+ --ls-btn-text: #cccccc;
59
+ --ls-btn-hover: #4a4a4a;
60
+ --ls-status-connected: #22c55e;
61
+ --ls-status-disconnected: #ef4444;
62
+ }
63
+
64
+ @media (prefers-color-scheme: light) {
65
+ :host([theme='auto']) {
66
+ --ls-bg: #ffffff;
67
+ --ls-bg-header: #f5f5f5;
68
+ --ls-text: #1f2937;
69
+ --ls-text-muted: #6b7280;
70
+ --ls-border: #e5e7eb;
71
+ --ls-terminal-bg: #ffffff;
72
+ --ls-terminal-fg: #1f2937;
73
+ --ls-terminal-cursor: #1f2937;
74
+ --ls-terminal-selection: #b4d5fe;
75
+ --ls-btn-bg: #e5e7eb;
76
+ --ls-btn-text: #374151;
77
+ --ls-btn-hover: #d1d5db;
78
+ }
79
+ }
80
80
  `;
81
81
  /**
82
82
  * Shared base styles
83
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(--ls-text);
91
- background: var(--ls-bg);
92
- }
93
-
94
- * {
95
- box-sizing: border-box;
96
- }
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(--ls-text);
91
+ background: var(--ls-bg);
92
+ }
93
+
94
+ * {
95
+ box-sizing: border-box;
96
+ }
97
97
  `;
98
98
  /**
99
99
  * Button styles
100
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(--ls-btn-bg);
110
- color: var(--ls-btn-text);
111
- font-size: 13px;
112
- cursor: pointer;
113
- transition: background-color 0.15s;
114
- }
115
-
116
- button:hover {
117
- background: var(--ls-btn-hover);
118
- }
119
-
120
- button:disabled {
121
- opacity: 0.5;
122
- cursor: not-allowed;
123
- }
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(--ls-btn-bg);
110
+ color: var(--ls-btn-text);
111
+ font-size: 13px;
112
+ cursor: pointer;
113
+ transition: background-color 0.15s;
114
+ }
115
+
116
+ button:hover {
117
+ background: var(--ls-btn-hover);
118
+ }
119
+
120
+ button:disabled {
121
+ opacity: 0.5;
122
+ cursor: not-allowed;
123
+ }
124
124
  `;
125
125
  //# sourceMappingURL=styles.js.map