tasmota-webserial-esptool 7.3.4 → 9.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.
package/css/style.css CHANGED
@@ -13,49 +13,51 @@
13
13
  margin: 0;
14
14
  border-bottom: 5px solid #00a7e9;
15
15
  display: flex;
16
- justify-content: space-between;
16
+ justify-content: flex-start;
17
17
  align-items: center;
18
18
  top: 0;
19
19
  transition: transform 0.3s ease-in-out;
20
+ overflow-x: auto;
21
+ overflow-y: hidden;
22
+ -webkit-overflow-scrolling: touch;
20
23
  }
21
24
 
22
25
  .header-hidden {
23
26
  transform: translateY(-100%);
24
27
  }
25
28
 
26
- .header .left {
29
+ .header-content {
27
30
  display: flex;
28
31
  align-items: center;
32
+ gap: 10px;
33
+ flex-wrap: nowrap;
34
+ white-space: nowrap;
29
35
  }
30
36
 
31
- .header .title {
32
- font-size: 24px;
33
- font-weight: 500;
34
- margin-right: 30px;
35
- }
36
-
37
- .header .right {
38
- display: flex;
39
- align-items: center;
40
- gap: 15px;
37
+ .header-content > label {
38
+ font-size: 13px;
39
+ margin-left: 5px;
40
+ white-space: nowrap;
41
41
  }
42
42
 
43
- .header .controls-row {
44
- display: flex;
45
- align-items: center;
46
- gap: 8px;
47
- margin-right: 20px;
48
- padding-right: 20px;
49
- border-right: 2px solid #ccc;
43
+ .header .separator {
44
+ width: 1px;
45
+ height: 30px;
46
+ background-color: #666;
47
+ margin: 0 15px;
48
+ flex-shrink: 0;
50
49
  }
51
50
 
52
- .header .controls-row label {
53
- font-size: 13px;
54
- margin-left: 12px;
51
+ .header .title {
52
+ font-size: 16px;
53
+ font-weight: 600;
54
+ margin-left: auto;
55
+ white-space: nowrap;
56
+ padding-right: 10px;
55
57
  }
56
58
 
57
- .header .controls-row label:first-child {
58
- margin-left: 0;
59
+ .header select {
60
+ height: 30px;
59
61
  }
60
62
 
61
63
  .header button {
@@ -88,10 +90,6 @@
88
90
  }
89
91
  }
90
92
 
91
- .header select {
92
- height: 30px;
93
- }
94
-
95
93
  button,
96
94
  .firmware {
97
95
  height: 25px;
@@ -103,7 +101,7 @@ button,
103
101
  }
104
102
 
105
103
  body {
106
- font-family: proxima-nova, sans-serif;
104
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
107
105
  font-style: normal;
108
106
  font-weight: 400;
109
107
  margin: 0;
@@ -162,8 +160,9 @@ div.clear {
162
160
  display: flex;
163
161
  align-items: center;
164
162
  gap: 8px;
165
- padding-left: 12px;
166
- border-left: 1px solid #ccc;
163
+ padding-left: 0;
164
+ border-left: none;
165
+ white-space: nowrap;
167
166
  }
168
167
 
169
168
  .log-controls.hidden {
@@ -231,7 +230,7 @@ div.clear {
231
230
 
232
231
  #log {
233
232
  max-width: 100%;
234
- font-family: pt-mono, monospace;
233
+ font-family: "SF Mono", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
235
234
  font-style: normal;
236
235
  font-weight: 400;
237
236
  font-size: 16px;
@@ -275,7 +274,7 @@ div.clear {
275
274
  .onoffswitch {
276
275
  display: inline-block;
277
276
  position: relative;
278
- width: 70px;
277
+ width: 50px;
279
278
  margin-right: 5px;
280
279
  -webkit-user-select: none;
281
280
  -moz-user-select: none;
@@ -313,7 +312,7 @@ div.clear {
313
312
  line-height: 25px;
314
313
  font-size: 14px;
315
314
  color: white;
316
- font-family: proxima-nova, sans-serif;
315
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Arial, sans-serif;
317
316
  font-style: normal;
318
317
  font-weight: 600;
319
318
  box-sizing: border-box;
@@ -342,7 +341,7 @@ div.clear {
342
341
  position: absolute;
343
342
  top: 0;
344
343
  bottom: 0;
345
- right: 23px;
344
+ right: 28px;
346
345
  border: 1px solid #900;
347
346
  border-radius: 15px;
348
347
  transition: all 0.3s ease-in 0s;
@@ -521,6 +520,17 @@ div.clear {
521
520
  cursor: pointer;
522
521
  }
523
522
 
523
+ #commands .partition-table #butOpenFSManager {
524
+ background-color: #8ec641;
525
+ color: white;
526
+ border-color: #8ec641;
527
+ }
528
+
529
+ #commands .partition-table #butOpenFSManager:hover {
530
+ background-color: #71ae1e;
531
+ border-color: #71ae1e;
532
+ }
533
+
524
534
  #commands .partition-table .progress-bar {
525
535
  width: 400px;
526
536
  margin-bottom: 10px;
@@ -561,6 +571,50 @@ div.clear {
561
571
  border-color: #00a7e9;
562
572
  }
563
573
 
574
+ /* ESP8266 Filesystem Info Box */
575
+ .esp8266-info {
576
+ width: 100%;
577
+ margin-top: 15px;
578
+ }
579
+
580
+ .esp8266-info .info-box {
581
+ background-color: #f8f9fa;
582
+ border: 2px solid #00a7e9;
583
+ border-radius: 8px;
584
+ padding: 15px 20px;
585
+ text-align: left;
586
+ }
587
+
588
+ .esp8266-info .info-box strong {
589
+ display: block;
590
+ font-size: 16px;
591
+ margin-bottom: 10px;
592
+ color: #00a7e9;
593
+ }
594
+
595
+ .esp8266-info .info-box p {
596
+ margin: 8px 0;
597
+ line-height: 1.5;
598
+ }
599
+
600
+ .esp8266-info .info-box ul {
601
+ margin: 10px 0;
602
+ padding-left: 20px;
603
+ list-style-type: none;
604
+ }
605
+
606
+ .esp8266-info .info-box ul li {
607
+ margin: 5px 0;
608
+ padding-left: 0;
609
+ }
610
+
611
+ .esp8266-info .info-box ul li strong {
612
+ display: inline;
613
+ font-size: 14px;
614
+ color: inherit;
615
+ margin: 0;
616
+ }
617
+
564
618
  .justify {
565
619
  display: flex;
566
620
  justify-content: space-between;
@@ -569,6 +623,229 @@ div.clear {
569
623
  text-align: center;
570
624
  }
571
625
 
626
+ /* LittleFS Manager Styles */
627
+ .littlefs-manager {
628
+ width: 900px;
629
+ margin: 30px auto;
630
+ padding: 25px;
631
+ border: 2px solid #71ae1e;
632
+ border-radius: 10px;
633
+ background-color: rgba(113, 174, 30, 0.05);
634
+ }
635
+
636
+ .littlefs-manager h3 {
637
+ margin: 0 0 20px 0;
638
+ color: #71ae1e;
639
+ font-size: 20px;
640
+ font-weight: 600;
641
+ }
642
+
643
+ .littlefs-info {
644
+ margin-bottom: 20px;
645
+ padding: 15px;
646
+ background-color: rgba(255, 255, 255, 0.5);
647
+ border-radius: 8px;
648
+ }
649
+
650
+ .littlefs-partition-info {
651
+ margin-bottom: 12px;
652
+ font-size: 14px;
653
+ }
654
+
655
+ .littlefs-size {
656
+ color: #666;
657
+ margin-left: 8px;
658
+ }
659
+
660
+ .littlefs-usage {
661
+ margin-top: 10px;
662
+ }
663
+
664
+ .usage-bar {
665
+ width: 100%;
666
+ height: 20px;
667
+ background-color: #e0e0e0;
668
+ border-radius: 10px;
669
+ overflow: hidden;
670
+ margin-bottom: 8px;
671
+ }
672
+
673
+ .usage-fill {
674
+ height: 100%;
675
+ background: linear-gradient(90deg, #71ae1e 0%, #8ec641 100%);
676
+ transition: width 0.3s ease;
677
+ }
678
+
679
+ .usage-text {
680
+ display: flex;
681
+ justify-content: space-between;
682
+ align-items: center;
683
+ font-size: 13px;
684
+ color: #555;
685
+ }
686
+
687
+ .disk-version {
688
+ font-size: 12px;
689
+ padding: 2px 8px;
690
+ background-color: #71ae1e;
691
+ color: white;
692
+ border-radius: 4px;
693
+ }
694
+
695
+ .littlefs-controls {
696
+ display: flex;
697
+ gap: 10px;
698
+ margin-bottom: 20px;
699
+ flex-wrap: wrap;
700
+ }
701
+
702
+ .littlefs-controls button {
703
+ /* Use default button styles from main stylesheet */
704
+ border-style: solid;
705
+ cursor: pointer;
706
+ }
707
+
708
+ .littlefs-controls button:disabled {
709
+ opacity: 0.5;
710
+ cursor: not-allowed;
711
+ }
712
+
713
+ .littlefs-breadcrumb {
714
+ display: flex;
715
+ align-items: center;
716
+ gap: 10px;
717
+ margin-bottom: 15px;
718
+ padding: 10px;
719
+ background-color: rgba(255, 255, 255, 0.5);
720
+ border-radius: 8px;
721
+ }
722
+
723
+ .littlefs-breadcrumb button {
724
+ /* Use default button styles */
725
+ border-style: solid;
726
+ cursor: pointer;
727
+ }
728
+
729
+ .littlefs-breadcrumb button:disabled {
730
+ opacity: 0.4;
731
+ cursor: not-allowed;
732
+ }
733
+
734
+ .littlefs-breadcrumb span {
735
+ font-family: monospace;
736
+ font-size: 14px;
737
+ color: #333;
738
+ }
739
+
740
+ .littlefs-file-upload {
741
+ display: flex;
742
+ gap: 10px;
743
+ margin-bottom: 15px;
744
+ align-items: center;
745
+ }
746
+
747
+ .littlefs-file-upload input[type="file"] {
748
+ flex: 1;
749
+ padding: 5px;
750
+ border: 2px solid #ccc;
751
+ border-radius: 8px;
752
+ }
753
+
754
+ .littlefs-file-upload button {
755
+ /* Use default button styles */
756
+ border-style: solid;
757
+ cursor: pointer;
758
+ }
759
+
760
+ .littlefs-file-upload button:disabled {
761
+ opacity: 0.5;
762
+ cursor: not-allowed;
763
+ }
764
+
765
+ .littlefs-files {
766
+ max-height: 400px;
767
+ overflow-y: auto;
768
+ border: 1px solid #ccc;
769
+ border-radius: 8px;
770
+ }
771
+
772
+ .file-table {
773
+ width: 100%;
774
+ border-collapse: collapse;
775
+ }
776
+
777
+ .file-table thead {
778
+ position: sticky;
779
+ top: 0;
780
+ background-color: #f5f5f5;
781
+ z-index: 10;
782
+ }
783
+
784
+ .file-table th {
785
+ padding: 10px;
786
+ text-align: left;
787
+ font-weight: 600;
788
+ border-bottom: 2px solid #ccc;
789
+ }
790
+
791
+ .file-table td {
792
+ padding: 8px 10px;
793
+ border-bottom: 1px solid #e0e0e0;
794
+ }
795
+
796
+ .file-table tbody tr:hover {
797
+ background-color: rgba(113, 174, 30, 0.1);
798
+ }
799
+
800
+ .file-table .empty-state {
801
+ text-align: center;
802
+ color: #999;
803
+ padding: 30px;
804
+ font-style: italic;
805
+ }
806
+
807
+ .file-name {
808
+ display: flex;
809
+ align-items: center;
810
+ gap: 8px;
811
+ cursor: pointer;
812
+ }
813
+
814
+ .file-name.clickable:hover {
815
+ color: #71ae1e;
816
+ text-decoration: underline;
817
+ }
818
+
819
+ .file-icon {
820
+ font-size: 16px;
821
+ }
822
+
823
+ .file-actions {
824
+ display: flex;
825
+ gap: 5px;
826
+ }
827
+
828
+ .file-actions button {
829
+ padding: 4px 12px;
830
+ font-size: 12px;
831
+ height: auto;
832
+ border-style: solid;
833
+ cursor: pointer;
834
+ transition: all 0.2s;
835
+ }
836
+
837
+ .littlefs-fs-button {
838
+ display: inline-block;
839
+ margin-left: 8px;
840
+ padding: 2px 8px;
841
+ font-size: 11px;
842
+ height: auto;
843
+ border: none;
844
+ border-radius: 4px;
845
+ cursor: pointer;
846
+ font-weight: 600;
847
+ }
848
+
572
849
  /* ESP32-S2 Reconnect Modal */
573
850
  .modal {
574
851
  display: flex;
@@ -645,3 +922,354 @@ div.clear {
645
922
  color: #fff;
646
923
  border-color: #71ae1e;
647
924
  }
925
+
926
+ /* File Viewer Modal Styles */
927
+ .file-viewer-content {
928
+ max-width: 900px;
929
+ width: 90vw;
930
+ max-height: 90vh;
931
+ display: flex;
932
+ flex-direction: column;
933
+ padding: 0;
934
+ overflow: hidden;
935
+ text-align: left;
936
+ }
937
+
938
+ .file-viewer-header {
939
+ display: flex;
940
+ justify-content: space-between;
941
+ align-items: center;
942
+ padding: 20px 30px;
943
+ border-bottom: 2px solid #e0e0e0;
944
+ }
945
+
946
+ .file-viewer-header h2 {
947
+ margin: 0;
948
+ font-size: 20px;
949
+ color: #333;
950
+ }
951
+
952
+ .close-button {
953
+ background: none;
954
+ border: none;
955
+ font-size: 28px;
956
+ color: #999;
957
+ cursor: pointer;
958
+ padding: 0;
959
+ width: 32px;
960
+ height: 32px;
961
+ display: flex;
962
+ align-items: center;
963
+ justify-content: center;
964
+ border-radius: 50%;
965
+ transition: all 0.2s;
966
+ }
967
+
968
+ .close-button:hover {
969
+ background-color: #f0f0f0;
970
+ color: #333;
971
+ }
972
+
973
+ .file-viewer-info {
974
+ display: flex;
975
+ justify-content: space-between;
976
+ padding: 12px 30px;
977
+ background-color: #f8f8f8;
978
+ font-size: 13px;
979
+ color: #666;
980
+ border-bottom: 1px solid #e0e0e0;
981
+ }
982
+
983
+ .file-viewer-tabs {
984
+ display: flex;
985
+ padding: 0 30px;
986
+ background-color: #f8f8f8;
987
+ border-bottom: 2px solid #e0e0e0;
988
+ }
989
+
990
+ .tab-button {
991
+ background: none;
992
+ border: none;
993
+ padding: 12px 24px;
994
+ font-size: 14px;
995
+ font-weight: 600;
996
+ color: #666;
997
+ cursor: pointer;
998
+ border-bottom: 3px solid transparent;
999
+ transition: all 0.2s;
1000
+ margin-bottom: -2px;
1001
+ }
1002
+
1003
+ .tab-button:hover {
1004
+ color: #333;
1005
+ background-color: rgba(113, 174, 30, 0.1);
1006
+ }
1007
+
1008
+ .tab-button.active {
1009
+ color: #71ae1e;
1010
+ border-bottom-color: #71ae1e;
1011
+ }
1012
+
1013
+ .file-viewer-body {
1014
+ flex: 1;
1015
+ overflow: auto;
1016
+ padding: 20px 30px;
1017
+ background-color: #fff;
1018
+ min-height: 300px;
1019
+ max-height: calc(90vh - 250px);
1020
+ text-align: left;
1021
+ }
1022
+
1023
+ .file-viewer-body pre {
1024
+ margin: 0;
1025
+ font-family: "SF Mono", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
1026
+ font-size: 13px;
1027
+ line-height: 1.5;
1028
+ white-space: pre;
1029
+ overflow-x: auto;
1030
+ color: #333;
1031
+ tab-size: 4;
1032
+ text-align: left;
1033
+ }
1034
+
1035
+ .file-viewer-body .hex-view {
1036
+ font-family: "SF Mono", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
1037
+ font-size: 12px;
1038
+ line-height: 1.6;
1039
+ }
1040
+
1041
+ .hex-line {
1042
+ display: flex;
1043
+ margin-bottom: 2px;
1044
+ }
1045
+
1046
+ .hex-offset {
1047
+ color: #999;
1048
+ margin-right: 20px;
1049
+ min-width: 80px;
1050
+ }
1051
+
1052
+ .hex-bytes {
1053
+ color: #333;
1054
+ margin-right: 20px;
1055
+ min-width: 400px;
1056
+ }
1057
+
1058
+ .hex-ascii {
1059
+ color: #666;
1060
+ }
1061
+
1062
+ .file-viewer-footer {
1063
+ padding: 20px 30px;
1064
+ border-top: 2px solid #e0e0e0;
1065
+ display: flex;
1066
+ justify-content: flex-end;
1067
+ gap: 10px;
1068
+ }
1069
+
1070
+ /* Mobile Optimizations */
1071
+ @media (max-width: 768px) {
1072
+ .header {
1073
+ height: auto;
1074
+ min-height: 60px;
1075
+ padding: 10px 15px;
1076
+ }
1077
+
1078
+ .header-content {
1079
+ gap: 8px;
1080
+ width: 100%;
1081
+ overflow-x: auto;
1082
+ -webkit-overflow-scrolling: touch;
1083
+ flex-wrap: nowrap;
1084
+ }
1085
+
1086
+ .header-content > label {
1087
+ font-size: 12px;
1088
+ margin-left: 3px;
1089
+ white-space: nowrap;
1090
+ }
1091
+
1092
+ .onoffswitch {
1093
+ width: 50px;
1094
+ }
1095
+
1096
+ .main {
1097
+ padding-top: 80px;
1098
+ }
1099
+
1100
+ #commands {
1101
+ min-width: unset;
1102
+ padding: 0 15px;
1103
+ }
1104
+
1105
+ #commands .upload {
1106
+ max-width: 100%;
1107
+ padding-left: 0;
1108
+ flex-wrap: wrap;
1109
+ gap: 8px;
1110
+ }
1111
+
1112
+ #commands .upload label {
1113
+ width: 100%;
1114
+ }
1115
+
1116
+ #commands .upload .firmware {
1117
+ width: 100%;
1118
+ margin-left: 0;
1119
+ margin-right: 0;
1120
+ justify-content: center;
1121
+ }
1122
+
1123
+ #commands .buttons {
1124
+ width: 100%;
1125
+ flex-wrap: wrap;
1126
+ }
1127
+
1128
+ #commands .partition-table,
1129
+ #commands .read-flash {
1130
+ width: 100%;
1131
+ padding: 15px 0;
1132
+ }
1133
+
1134
+ #commands .partition-table .progress-bar,
1135
+ #commands .read-flash .progress-bar {
1136
+ width: 100%;
1137
+ }
1138
+
1139
+ #commands .read-flash-inputs {
1140
+ flex-wrap: wrap;
1141
+ width: 100%;
1142
+ }
1143
+
1144
+ #commands .read-flash input {
1145
+ width: 80px;
1146
+ }
1147
+
1148
+ #log {
1149
+ padding: 0 15px;
1150
+ border: 10px solid #000;
1151
+ font-size: 14px;
1152
+ }
1153
+
1154
+ .footer {
1155
+ padding: 10px 15px;
1156
+ }
1157
+
1158
+ .littlefs-manager {
1159
+ width: 100%;
1160
+ margin: 15px auto;
1161
+ padding: 15px;
1162
+ }
1163
+
1164
+ .littlefs-controls {
1165
+ flex-direction: column;
1166
+ }
1167
+
1168
+ .littlefs-controls button {
1169
+ width: 100%;
1170
+ }
1171
+
1172
+ .littlefs-file-upload {
1173
+ flex-direction: column;
1174
+ }
1175
+
1176
+ .littlefs-file-upload input[type="file"],
1177
+ .littlefs-file-upload button {
1178
+ width: 100%;
1179
+ }
1180
+
1181
+ .file-table {
1182
+ font-size: 13px;
1183
+ }
1184
+
1185
+ .file-table th,
1186
+ .file-table td {
1187
+ padding: 6px 8px;
1188
+ }
1189
+
1190
+ .file-actions {
1191
+ flex-direction: column;
1192
+ }
1193
+
1194
+ .file-actions button {
1195
+ width: 100%;
1196
+ }
1197
+
1198
+ .modal-content {
1199
+ padding: 25px;
1200
+ max-width: 90%;
1201
+ }
1202
+
1203
+ .file-viewer-content {
1204
+ width: 95vw;
1205
+ max-height: 95vh;
1206
+ }
1207
+
1208
+ .file-viewer-header,
1209
+ .file-viewer-info,
1210
+ .file-viewer-tabs,
1211
+ .file-viewer-body,
1212
+ .file-viewer-footer {
1213
+ padding-left: 15px;
1214
+ padding-right: 15px;
1215
+ }
1216
+
1217
+ .file-viewer-body pre {
1218
+ font-size: 11px;
1219
+ }
1220
+
1221
+ .hex-bytes {
1222
+ min-width: 250px;
1223
+ }
1224
+ }
1225
+
1226
+ @media (max-width: 480px) {
1227
+ .header {
1228
+ padding: 8px 10px;
1229
+ }
1230
+
1231
+ .header-content {
1232
+ gap: 6px;
1233
+ }
1234
+
1235
+ .header-content > label {
1236
+ display: none;
1237
+ }
1238
+
1239
+ .header-content select {
1240
+ min-width: 90px;
1241
+ height: 30px;
1242
+ font-size: 13px;
1243
+ }
1244
+
1245
+ .onoffswitch {
1246
+ width: 50px;
1247
+ margin-left: 2px;
1248
+ margin-right: 2px;
1249
+ }
1250
+
1251
+ .log-controls {
1252
+ padding-left: 8px;
1253
+ }
1254
+
1255
+ .small-btn {
1256
+ padding: 4px 8px;
1257
+ font-size: 11px;
1258
+ }
1259
+
1260
+ #commands {
1261
+ padding: 0 10px;
1262
+ }
1263
+
1264
+ #log {
1265
+ padding: 0 10px;
1266
+ font-size: 12px;
1267
+ }
1268
+
1269
+ button,
1270
+ .firmware {
1271
+ font-size: 14px;
1272
+ padding-left: 15px;
1273
+ padding-right: 15px;
1274
+ }
1275
+ }