glad-web 1.0.44 → 1.0.45
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.
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/lib/claude/structured-session.js +10 -5
- package/lib/codex/image-store.js +1 -2
- package/lib/codex/structured-session.js +24 -73
- package/lib/commands/web.js +41 -5
- package/lib/server/routes/providers.js +0 -12
- package/lib/session/file-attachment-store.js +168 -0
- package/lib/session/session-manager.js +75 -23
- package/lib/web/claude.js +15 -8
- package/lib/web/codex.js +46 -20
- package/lib/web/composer.js +263 -28
- package/lib/web/core.js +10 -4
- package/lib/web/git.js +53 -51
- package/lib/web/gitgraph.js +8 -8
- package/lib/web/index.html +19 -15
- package/lib/web/session.js +4 -19
- package/lib/web/styles.css +103 -8
- package/lib/web/timed-inputs.js +6 -6
- package/package.json +1 -1
package/lib/web/styles.css
CHANGED
|
@@ -148,8 +148,10 @@
|
|
|
148
148
|
#attachment-strip::-webkit-scrollbar { display: none; }
|
|
149
149
|
.attachment-chip { min-width: 0; max-width: 210px; display: flex; align-items: center; gap: 7px; padding: 7px 9px; border: 1px solid rgba(0,122,255,0.45); border-radius: 10px; background: rgba(0,122,255,0.14); color: #e9f2ff; font-size: 12px; }
|
|
150
150
|
.attachment-chip.uploading { border-color: rgba(255,159,10,0.55); background: rgba(255,159,10,0.12); }
|
|
151
|
+
.attachment-chip.file { border-color: var(--line); background: var(--surface-soft); color: var(--text); }
|
|
151
152
|
.attachment-chip-content { min-width: 0; flex: 1; }
|
|
152
153
|
.attachment-chip-name { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
154
|
+
.attachment-chip-icon { width: 17px; height: 17px; flex: 0 0 17px; }
|
|
153
155
|
.attachment-progress { display: block; height: 5px; margin-top: 5px; overflow: hidden; border-radius: 999px; background: rgba(255,255,255,0.16); }
|
|
154
156
|
.attachment-progress > span { display: block; height: 100%; border-radius: inherit; background: #ff9f0a; transition: width .15s ease; }
|
|
155
157
|
.attachment-progress.estimated > span { background: repeating-linear-gradient(90deg, #ff9f0a 0 12px, #ffd37b 12px 24px); background-size: 48px 100%; animation: attachment-upload-pulse .75s linear infinite; }
|
|
@@ -185,7 +187,7 @@
|
|
|
185
187
|
.codex-conversation { width: min(100%, var(--chat-content-max)); margin: 0 auto; }
|
|
186
188
|
.codex-working-indicator, .claude-working-indicator { position: sticky; top: 0; z-index: 4; width: 28px; height: 28px; margin: 0 0 -28px auto; border: 1px solid rgba(255,255,255,.1); border-radius: 50%; background: rgba(28,28,30,.68); box-shadow: 0 5px 16px rgba(0,0,0,.24); backdrop-filter: blur(8px); pointer-events: none; }
|
|
187
189
|
.codex-working-indicator::after, .claude-working-indicator::after { content: ''; position: absolute; inset: 8px; border: 1.5px solid rgba(255,255,255,.7); border-top-color: transparent; border-radius: 50%; animation: codex-spin .8s linear infinite; }
|
|
188
|
-
.codex-skill-bubble { position:
|
|
190
|
+
.codex-skill-bubble { position: relative; z-index: 5; display: flex; width: max-content; max-width: min(280px, 72vw); min-height: 28px; padding: 0 4px 0 10px; align-items: center; gap: 7px; border: 1px solid rgba(0,122,255,.42); border-bottom: 0; border-radius: 12px 12px 0 0; background: rgba(21,47,78,.96); color: #eaf3ff; box-shadow: 0 -3px 12px rgba(0,0,0,.12); font-size: 11px; font-weight: 750; }
|
|
189
191
|
.codex-skill-bubble-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
190
192
|
.codex-skill-bubble-close { width: 23px; height: 23px; padding: 0; border: 0; border-radius: 50%; background: rgba(255,255,255,.1); color: #fff; cursor: pointer; font-size: 16px; line-height: 1; }
|
|
191
193
|
.codex-message-block { max-width: 100%; margin: 0 0 12px; }
|
|
@@ -323,9 +325,12 @@
|
|
|
323
325
|
.claude-message-block.user > .claude-message { max-width: 100%; }
|
|
324
326
|
.claude-message-time { display: block; width: max-content; margin-top: 4px; padding: 0 2px; color: #8e8e93; font-size: 10px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums; }
|
|
325
327
|
.claude-message-block.user .claude-message-time { margin-left: auto; }
|
|
326
|
-
.codex-message-
|
|
328
|
+
.codex-message-skills { position: relative; z-index: 1; display: flex; justify-content: flex-start; gap: 5px; margin-bottom: -1px; }
|
|
329
|
+
.codex-message-skill { display: inline-flex; max-width: min(220px, 58vw); min-height: 18px; align-items: center; padding: 2px 8px; border: 1px solid rgba(0,122,255,.32); border-bottom: 0; border-radius: 9px 9px 0 0; background: rgba(0,122,255,.16); color: #8fc5ff; font-size: 9px; font-weight: 750; line-height: 1.2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
330
|
+
.codex-message-skills + .codex-message.user { border-top-left-radius: 4px; }
|
|
327
331
|
.claude-message-attachments { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
|
|
328
332
|
.claude-message-attachment { max-width: 100%; border: 1px solid rgba(255,255,255,.14); border-radius: 999px; padding: 3px 7px; color: #d1d5db; background: rgba(255,255,255,.07); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
333
|
+
.message-attachment-icon { width: 13px; height: 13px; flex: 0 0 13px; margin-right: 4px; vertical-align: -2px; }
|
|
329
334
|
.claude-message.user { margin-left: auto; background: rgba(0,122,255,0.24); border: 1px solid rgba(0,122,255,0.32); color: #fff; border-radius: 12px; padding-top: 7px; padding-bottom: 7px; }
|
|
330
335
|
.claude-message.assistant { max-width: 100%; background: transparent; border: 0; color: #f5f5f7; padding: 0 4px; margin: 0 0 12px 0; }
|
|
331
336
|
.claude-message.event { max-width: 100%; background: transparent; border: 0; color: var(--text-dim); font-size: 12px; padding: 3px 2px; text-align: center; }
|
|
@@ -449,6 +454,9 @@
|
|
|
449
454
|
.history-meta { color: var(--text-dim); font-size: 11px; padding: 8px 14px; border-bottom: 1px solid rgba(255,255,255,0.06); background: #0d0d0d; }
|
|
450
455
|
|
|
451
456
|
.tab-bar { display: flex; border-bottom: 1px solid rgba(255,255,255,0.1); background: var(--bg); }
|
|
457
|
+
.subview-nav { flex: 0 0 auto; padding-top: env(safe-area-inset-top); border-bottom: 1px solid var(--line); background: var(--surface); }
|
|
458
|
+
.subview-nav-row { display: flex; align-items: center; padding: 8px 14px; }
|
|
459
|
+
.subview-nav-title { flex: 1; min-width: 0; color: var(--text); text-align: center; font-size: 16px; font-weight: 600; }
|
|
452
460
|
.tab-btn { flex: 1; text-align: center; padding: 12px 0; font-size: 14px; font-weight: 600; color: var(--text-dim); background: none; border: none; cursor: pointer; position: relative; }
|
|
453
461
|
.tab-btn.active { color: var(--text); }
|
|
454
462
|
.tab-btn.active::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); height: 2px; width: 40px; background: var(--primary); border-radius: 2px; }
|
|
@@ -520,9 +528,8 @@
|
|
|
520
528
|
.usage-summary-card .value { font-size: 21px; }
|
|
521
529
|
}
|
|
522
530
|
@media (max-width: 430px) {
|
|
523
|
-
#nav-bar > div:last-child .icon-btn
|
|
524
|
-
#nav-bar > div:last-child .icon-btn
|
|
525
|
-
#codex-terminal-switch { padding-left: 8px !important; padding-right: 8px !important; }
|
|
531
|
+
#nav-bar > div:last-child .icon-btn { width: 34px; font-size: 0 !important; gap: 0 !important; }
|
|
532
|
+
#nav-bar > div:last-child .icon-btn svg { width: 16px; height: 16px; }
|
|
526
533
|
}
|
|
527
534
|
@media (min-width: 768px) and (max-width: 1199px) {
|
|
528
535
|
:root { --chat-content-max: 780px; --control-content-max: 920px; }
|
|
@@ -546,6 +553,15 @@
|
|
|
546
553
|
--input-fg: #ffffff;
|
|
547
554
|
--input-placeholder: rgba(255,255,255,.45);
|
|
548
555
|
--overlay-bg: rgba(0,0,0,.80);
|
|
556
|
+
--git-diff-bg: #0d0d0d;
|
|
557
|
+
--git-diff-text: #d1d5db;
|
|
558
|
+
--git-add-text: #4ade80;
|
|
559
|
+
--git-add-bg: rgba(74,222,128,.1);
|
|
560
|
+
--git-del-text: #f87171;
|
|
561
|
+
--git-del-bg: rgba(248,113,113,.1);
|
|
562
|
+
--git-hunk-text: #60a5fa;
|
|
563
|
+
--git-hunk-bg: rgba(96,165,250,.1);
|
|
564
|
+
--git-modified-text: #fbbf24;
|
|
549
565
|
color-scheme: dark;
|
|
550
566
|
}
|
|
551
567
|
|
|
@@ -563,6 +579,15 @@ html[data-theme="light"] {
|
|
|
563
579
|
--input-fg: #172033;
|
|
564
580
|
--input-placeholder: #8a94a6;
|
|
565
581
|
--overlay-bg: rgba(15,23,42,.45);
|
|
582
|
+
--git-diff-bg: #f7f8fa;
|
|
583
|
+
--git-diff-text: #344054;
|
|
584
|
+
--git-add-text: #176b3a;
|
|
585
|
+
--git-add-bg: #dff4e7;
|
|
586
|
+
--git-del-text: #a12b24;
|
|
587
|
+
--git-del-bg: #fde5e3;
|
|
588
|
+
--git-hunk-text: #075fae;
|
|
589
|
+
--git-hunk-bg: #e6f2ff;
|
|
590
|
+
--git-modified-text: #9a6700;
|
|
566
591
|
color-scheme: light;
|
|
567
592
|
}
|
|
568
593
|
|
|
@@ -581,13 +606,31 @@ html[data-theme="dark"] { color-scheme: dark; }
|
|
|
581
606
|
#detail-empty p { max-width: 360px; margin: 8px 0 0; font-size: 13px; line-height: 1.5; }
|
|
582
607
|
#sidebar-resizer { display: none; }
|
|
583
608
|
|
|
584
|
-
#terminal-view.active { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; }
|
|
609
|
+
#terminal-view.active { display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; }
|
|
585
610
|
#top-ui { display: contents; }
|
|
586
611
|
#nav-bar { grid-row: 1; z-index: 20; padding-top: max(8px, env(safe-area-inset-top)); background: var(--surface); border-color: var(--line); }
|
|
587
|
-
#
|
|
612
|
+
#session-status-strip { display: none; grid-row: 2; z-index: 19; padding: 6px 12px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--surface) 97%, transparent); }
|
|
613
|
+
#session-attention-rail { display: flex; width: min(100%, var(--chat-content-max)); min-width: 0; margin: 0 auto; gap: 7px; overflow-x: auto; scrollbar-width: none; white-space: nowrap; }
|
|
614
|
+
#session-attention-rail::-webkit-scrollbar { display: none; }
|
|
615
|
+
.session-attention-pill { display: inline-flex; min-height: 28px; flex: 0 0 auto; align-items: center; gap: 5px; padding: 0 10px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-soft); color: var(--text-dim); font-size: 11px; font-weight: 750; cursor: pointer; }
|
|
616
|
+
.session-attention-pill.approval { border-color: rgba(255,204,0,.42); background: rgba(255,204,0,.10); color: #ffd60a; }
|
|
617
|
+
.session-attention-pill.subagent { border-color: rgba(100,210,255,.35); background: rgba(100,210,255,.10); color: #64d2ff; }
|
|
618
|
+
.session-attention-pill:active { transform: translateY(1px); }
|
|
619
|
+
html[data-theme="light"] .session-attention-pill.approval { border-color: #e5bd36; background: #fff7d6; color: #795500; }
|
|
620
|
+
html[data-theme="light"] .session-attention-pill.subagent { border-color: #99c8f7; background: #e8f3ff; color: #075fae; }
|
|
621
|
+
#terminal-controls { position: relative; inset: auto; grid-row: 4; z-index: 30; max-height: min(62dvh, 620px); overflow-y: auto; padding-bottom: env(safe-area-inset-bottom); border-top: 1px solid var(--line); border-bottom: 0; background: color-mix(in srgb, var(--surface) 96%, transparent); box-shadow: 0 -10px 28px rgba(0,0,0,.12); }
|
|
588
622
|
#terminal-controls-spacer { display: none; }
|
|
589
|
-
#terminal-container, #claude-chat-container, #codex-chat-container { grid-row:
|
|
623
|
+
#terminal-container, #claude-chat-container, #codex-chat-container { grid-row: 3; min-width: 0; min-height: 0; background: var(--chat-bg); }
|
|
624
|
+
#composer-skill-prefix { display: none; width: min(100%, var(--control-content-max)); margin: 0 auto; padding: 8px 14px 0; box-sizing: border-box; }
|
|
625
|
+
#composer-skill-prefix.active { display: flex; justify-content: flex-start; }
|
|
626
|
+
#composer-skill-prefix.active + #input-row { padding-top: 0; }
|
|
590
627
|
#input-row { padding-top: 10px; padding-bottom: 7px; }
|
|
628
|
+
@media (max-width: 480px) {
|
|
629
|
+
#composer-skill-prefix { padding-left: 10px; padding-right: 10px; }
|
|
630
|
+
}
|
|
631
|
+
@media (min-width: 768px) and (max-width: 1199px) {
|
|
632
|
+
#composer-skill-prefix { padding-left: 18px; padding-right: 18px; }
|
|
633
|
+
}
|
|
591
634
|
#cmd-input { width: 100%; min-height: 42px; border-color: var(--line); background: var(--input-bg); color: var(--input-fg); }
|
|
592
635
|
#cmd-input::placeholder { color: var(--input-placeholder); }
|
|
593
636
|
#cmd-input:focus { color: var(--input-fg); }
|
|
@@ -595,6 +638,8 @@ html[data-theme="dark"] { color-scheme: dark; }
|
|
|
595
638
|
.composer-action-btn { position: relative; width: 40px; min-width: 40px; height: 40px; flex: 0 0 40px; padding: 0; margin: 0; border: 1px solid var(--line); border-radius: 12px; background: var(--surface-soft); color: var(--text-dim); display: flex; align-items: center; justify-content: center; cursor: pointer; }
|
|
596
639
|
.composer-action-btn:hover { color: var(--text); }
|
|
597
640
|
.composer-action-btn.active { color: var(--primary); border-color: color-mix(in srgb, var(--primary) 48%, transparent); background: color-mix(in srgb, var(--primary) 14%, var(--surface)); }
|
|
641
|
+
#composer-action-tooltip { position: fixed; z-index: 11000; display: none; max-width: min(220px, calc(100vw - 24px)); padding: 6px 9px; border: 1px solid var(--line); border-radius: 7px; background: color-mix(in srgb, var(--surface-raised) 96%, transparent); color: var(--text); box-shadow: 0 6px 18px rgba(0,0,0,.18); font-size: 11px; font-weight: 700; line-height: 1.2; text-align: center; white-space: nowrap; pointer-events: none; }
|
|
642
|
+
#composer-action-tooltip.visible { display: block; }
|
|
598
643
|
#send-btn { right: max(12px, calc((100% - var(--control-content-max)) / 2 + 14px)); width: 44px; height: 40px; }
|
|
599
644
|
#claude-control-panel, #codex-control-panel { position: relative; flex-direction: column; width: min(100%, var(--control-content-max)); padding: 0 14px 10px; border: 0; background: transparent; }
|
|
600
645
|
.claude-control-rail, .codex-control-rail { order: 100; min-height: 40px; gap: 7px; margin: 0 58px 0 0; padding: 0; overflow-x: auto; overflow-y: hidden; scroll-snap-type: none; scroll-padding: 0; }
|
|
@@ -748,6 +793,9 @@ html[data-theme="light"] .codex-warning-title { color: #7a5200; }
|
|
|
748
793
|
html[data-theme="light"] .codex-warning-text { color: #725d28; }
|
|
749
794
|
html[data-theme="light"] .codex-compaction-card { border-color: #d9c4ef; background: #f7f0ff; color: #3f2a56; }
|
|
750
795
|
html[data-theme="light"] .codex-compaction-meta { color: #725d86; }
|
|
796
|
+
html[data-theme="light"] .codex-skill-bubble,
|
|
797
|
+
html[data-theme="light"] .codex-message-skill { border-color: #99c8f7; background: #e8f3ff; color: #075fae; }
|
|
798
|
+
html[data-theme="light"] .codex-skill-bubble-close { background: rgba(7,95,174,.10); color: #075fae; }
|
|
751
799
|
html[data-theme="light"] .codex-context-meter { --context-color: #168447; border-color: #69c98a; background: #effaf3; color: #125f34; }
|
|
752
800
|
html[data-theme="light"] .codex-context-meter::before { background: #bcebc9; }
|
|
753
801
|
html[data-theme="light"] .codex-context-meter.warn { --context-color: #a66f00; border-color: #e0b53e; background: #fff9df; color: #715000; }
|
|
@@ -808,3 +856,50 @@ html[data-theme="light"] .usage-pricing-note { color: #667085; }
|
|
|
808
856
|
html[data-theme="light"] .usage-chart-track { background: #e9edf2; }
|
|
809
857
|
html[data-theme="light"] .usage-table th { border-color: #dfe4eb; color: #667085; }
|
|
810
858
|
html[data-theme="light"] .usage-table td { border-color: #edf0f3; color: #344054; }
|
|
859
|
+
html[data-theme="light"] .tool-modal-header { border-color: #e0e5ec; }
|
|
860
|
+
html[data-theme="light"] .tool-item { border: 1px solid #e0e5ec; background: #f7f9fb; color: #172033; }
|
|
861
|
+
html[data-theme="light"] .tool-item:hover,
|
|
862
|
+
html[data-theme="light"] .tool-item:active { border-color: #99c8f7; background: #eaf4ff; }
|
|
863
|
+
html[data-theme="light"] .tool-icon { background: #dceeff; color: #006acb; }
|
|
864
|
+
html[data-theme="light"] #default-cwd { color: #526174 !important; }
|
|
865
|
+
html[data-theme="light"] .usage-source-item { border: 1px solid #e1e6ed; background: #f7f9fb; color: #172033; }
|
|
866
|
+
html[data-theme="light"] .usage-source-item:hover,
|
|
867
|
+
html[data-theme="light"] .usage-source-item:active { border-color: #99c8f7; background: #eaf4ff; }
|
|
868
|
+
html[data-theme="light"] .usage-source-copy strong { color: #172033; }
|
|
869
|
+
html[data-theme="light"] .usage-source-badge { background: #dceeff; color: #006acb; }
|
|
870
|
+
html[data-theme="light"] .usage-source-arrow { color: #667085; }
|
|
871
|
+
html[data-theme="light"] .attachment-chip { border-color: #99c8f7; background: #e8f3ff; color: #173b61; }
|
|
872
|
+
html[data-theme="light"] .attachment-chip.file { border-color: #c8d0dc; background: #f2f4f7; color: #344054; }
|
|
873
|
+
html[data-theme="light"] .attachment-chip.uploading { border-color: #e6b94c; background: #fff6df; color: #715000; }
|
|
874
|
+
html[data-theme="light"] .attachment-status { color: #725d28; }
|
|
875
|
+
html[data-theme="light"] .attachment-remove { background: rgba(23,59,97,.1); color: #344054; }
|
|
876
|
+
html[data-theme="light"] .attachment-progress { background: rgba(23,59,97,.12); }
|
|
877
|
+
html[data-theme="light"] .claude-message-attachment { border-color: #b9c9dc; background: rgba(255,255,255,.72); color: #344054; }
|
|
878
|
+
html[data-theme="light"] .claude-md a { color: #006acb; }
|
|
879
|
+
|
|
880
|
+
.tool-modal-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 18px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
|
|
881
|
+
.tool-modal-header h2 { margin: 0; }
|
|
882
|
+
.tool-modal-header .icon-btn { width: 32px; height: 32px; border-radius: 50%; color: var(--text-dim); font-size: 24px; }
|
|
883
|
+
#add-step-type { border-color: var(--line) !important; background: var(--surface-soft) !important; color: var(--text) !important; }
|
|
884
|
+
|
|
885
|
+
.git-change-card { margin-bottom: 8px; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-raised); }
|
|
886
|
+
.git-change-header { display: flex; align-items: center; min-height: 42px; padding: 8px 10px; color: var(--text); cursor: pointer; font-size: 13px; font-weight: 600; outline: none; user-select: none; }
|
|
887
|
+
.git-change-header:hover { background: var(--surface-soft); }
|
|
888
|
+
.git-change-path { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
889
|
+
.git-status-badge { flex: 0 0 auto; margin-left: 8px; padding: 1px 5px; border: 1px solid currentColor; border-radius: 4px; font-size: 10px; font-weight: 800; }
|
|
890
|
+
.git-status-badge.modified { color: var(--git-modified-text); }
|
|
891
|
+
.git-status-badge.added { color: var(--git-staged-color, #34c759); }
|
|
892
|
+
.git-status-badge.deleted { color: var(--git-deleted-color, #ff3b30); }
|
|
893
|
+
.git-inline-diff { border-top: 1px solid var(--line); background: var(--git-diff-bg); }
|
|
894
|
+
.git-inline-diff-body { max-height: 400px; overflow: auto; padding: 4px 0; font: 12px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
895
|
+
.git-inline-diff-footer { padding: 8px; border-top: 1px solid var(--line); background: var(--surface); text-align: center; }
|
|
896
|
+
.git-diff-panel { margin-bottom: 8px; overflow: hidden; border: 1px solid var(--line); border-radius: 6px; }
|
|
897
|
+
.git-diff-summary { padding: 7px 10px; background: var(--surface-raised); color: var(--text); cursor: pointer; font-size: 13px; font-weight: 600; outline: none; user-select: none; }
|
|
898
|
+
.git-diff-body { overflow-x: auto; padding: 4px 0; background: var(--git-diff-bg); font: 12px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
899
|
+
.git-file-code { overflow-x: auto; margin: 0; padding: 12px 0; border-radius: 8px; background: var(--git-diff-bg); color: var(--git-diff-text); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
900
|
+
.git-file-toolbar-group { display: flex; gap: 2px; margin-right: 8px; padding: 2px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
|
|
901
|
+
.git-file-toolbar-button { padding: 4px 8px; border: 0; border-radius: 3px; background: transparent; color: var(--text-dim); cursor: pointer; font-size: 12px; }
|
|
902
|
+
.git-file-toolbar-button:hover { background: var(--surface-raised); color: var(--text); }
|
|
903
|
+
.git-file-mode-button { padding: 4px 8px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); color: var(--text); cursor: pointer; font-size: 12px; }
|
|
904
|
+
.git-file-mode-button.active { border-color: var(--primary); background: var(--primary); color: #fff; }
|
|
905
|
+
.git-line-number { width: 36px; flex: 0 0 36px; margin-right: 16px; color: var(--text-dim); text-align: right; user-select: none; }
|
package/lib/web/timed-inputs.js
CHANGED
|
@@ -172,17 +172,17 @@
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
document.getElementById('send-btn').addEventListener('click', performSend);
|
|
175
|
-
document.getElementById('
|
|
176
|
-
|
|
175
|
+
document.getElementById('attachment-btn').addEventListener('click', () => {
|
|
176
|
+
attachmentFileInput.click();
|
|
177
177
|
});
|
|
178
178
|
document.getElementById('schedule-send-btn').addEventListener('click', () => {
|
|
179
179
|
if (document.getElementById('timed-send-panel').classList.contains('active')) closeTimedSendPanel();
|
|
180
180
|
else openTimedSendPanel();
|
|
181
181
|
});
|
|
182
|
-
|
|
183
|
-
const files =
|
|
184
|
-
if (files?.length) void
|
|
185
|
-
|
|
182
|
+
attachmentFileInput.addEventListener('change', () => {
|
|
183
|
+
const files = attachmentFileInput.files;
|
|
184
|
+
if (files?.length) void uploadSelectedAttachments(files);
|
|
185
|
+
attachmentFileInput.value = '';
|
|
186
186
|
});
|
|
187
187
|
inputEl.addEventListener('keydown', (e) => {
|
|
188
188
|
if (e.key === 'Enter' && e.shiftKey) { e.preventDefault(); performSend(); }
|