slicejs-web-framework 1.0.32 → 1.0.34

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.
@@ -18,8 +18,11 @@ export default class Debugger extends HTMLElement {
18
18
  }
19
19
 
20
20
  async enableDebugMode() {
21
- const html = await slice.controller.fetchText('Debugger', 'html', 'Structural');
22
- const css = await slice.controller.fetchText('Debugger', 'css', 'Structural');
21
+ //const html = await slice.controller.fetchText('Debugger', 'html', 'Structural');
22
+ //const css = await slice.controller.fetchText('Debugger', 'css', 'Structural');
23
+
24
+ const html = productionOnlyHtml();
25
+ const css = productionOnlyCSS();
23
26
 
24
27
  this.innerHTML = html;
25
28
  slice.stylesManager.registerComponentStyles('Debugger', css);
@@ -640,4 +643,706 @@ export default class Debugger extends HTMLElement {
640
643
  }
641
644
  }
642
645
 
643
- customElements.define('slice-debugger', Debugger);
646
+ customElements.define('slice-debugger', Debugger);
647
+
648
+ function productionOnlyCSS(){
649
+ return `
650
+ #debugger-container {
651
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
652
+ display: none;
653
+ position: fixed;
654
+ top: 20px;
655
+ right: 20px;
656
+ width: 420px;
657
+ height: 85vh;
658
+ max-height: 85vh;
659
+ background: var(--primary-background-color);
660
+ border: 1px solid var(--medium-color);
661
+ border-radius: 12px;
662
+ box-shadow: 0 20px 40px rgba(var(--primary-color-rgb), 0.15), 0 4px 12px rgba(0, 0, 0, 0.1);
663
+ z-index: 10000;
664
+ overflow: hidden;
665
+ backdrop-filter: blur(10px);
666
+ }
667
+
668
+ #debugger-container.active {
669
+ display: flex;
670
+ flex-direction: column;
671
+ }
672
+
673
+ .debugger-header {
674
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-color-shade));
675
+ color: var(--primary-color-contrast);
676
+ padding: 12px 16px;
677
+ border-radius: 12px 12px 0 0;
678
+ user-select: none;
679
+ cursor: grab;
680
+ }
681
+
682
+ .debugger-header:active {
683
+ cursor: grabbing;
684
+ }
685
+
686
+ .header-content {
687
+ display: flex;
688
+ justify-content: space-between;
689
+ align-items: center;
690
+ }
691
+
692
+ .component-info {
693
+ display: flex;
694
+ align-items: center;
695
+ gap: 10px;
696
+ }
697
+
698
+ .component-icon {
699
+ font-size: 20px;
700
+ opacity: 0.9;
701
+ }
702
+
703
+ .component-name {
704
+ font-size: 14px;
705
+ font-weight: 600;
706
+ margin-bottom: 2px;
707
+ }
708
+
709
+ .component-id {
710
+ font-size: 11px;
711
+ opacity: 0.8;
712
+ }
713
+
714
+ .header-actions {
715
+ display: flex;
716
+ gap: 8px;
717
+ }
718
+
719
+ .minimize-btn, #close-debugger {
720
+ background: rgba(255, 255, 255, 0.2);
721
+ border: none;
722
+ color: var(--primary-color-contrast);
723
+ width: 28px;
724
+ height: 28px;
725
+ border-radius: 6px;
726
+ cursor: pointer;
727
+ display: flex;
728
+ align-items: center;
729
+ justify-content: center;
730
+ font-size: 16px;
731
+ font-weight: bold;
732
+ transition: background 0.2s ease;
733
+ }
734
+
735
+ .minimize-btn:hover, #close-debugger:hover {
736
+ background: rgba(255, 255, 255, 0.3);
737
+ }
738
+
739
+ .debugger-content {
740
+ flex: 1;
741
+ display: flex;
742
+ flex-direction: column;
743
+ overflow: hidden;
744
+ }
745
+
746
+ .tabs-container {
747
+ border-bottom: 1px solid var(--medium-color);
748
+ }
749
+
750
+ .tab-nav {
751
+ display: flex;
752
+ background: var(--tertiary-background-color);
753
+ }
754
+
755
+ .tab-btn {
756
+ flex: 1;
757
+ padding: 10px 14px;
758
+ border: none;
759
+ background: transparent;
760
+ color: var(--font-secondary-color);
761
+ font-size: 12px;
762
+ font-weight: 500;
763
+ cursor: pointer;
764
+ transition: all 0.2s ease;
765
+ border-bottom: 2px solid transparent;
766
+ }
767
+
768
+ .tab-btn:hover {
769
+ background: var(--secondary-background-color);
770
+ color: var(--font-primary-color);
771
+ }
772
+
773
+ .tab-btn.active {
774
+ background: var(--primary-background-color);
775
+ color: var(--primary-color);
776
+ border-bottom-color: var(--primary-color);
777
+ font-weight: 600;
778
+ }
779
+
780
+ .tab-content {
781
+ flex: 1;
782
+ overflow: hidden;
783
+ height: calc(85vh - 100px);
784
+ }
785
+
786
+ .tab-pane {
787
+ display: none;
788
+ height: 100%;
789
+ overflow-y: auto;
790
+ overflow-x: hidden;
791
+ padding: 16px;
792
+ }
793
+
794
+ .tab-pane.active {
795
+ display: block;
796
+ }
797
+
798
+ .tab-pane::-webkit-scrollbar {
799
+ width: 4px;
800
+ }
801
+
802
+ .tab-pane::-webkit-scrollbar-track {
803
+ background: var(--tertiary-background-color);
804
+ border-radius: 2px;
805
+ }
806
+
807
+ .tab-pane::-webkit-scrollbar-thumb {
808
+ background: var(--medium-color);
809
+ border-radius: 2px;
810
+ }
811
+
812
+ .tab-pane::-webkit-scrollbar-thumb:hover {
813
+ background: var(--primary-color);
814
+ }
815
+
816
+ .props-container {
817
+ display: flex;
818
+ flex-direction: column;
819
+ gap: 12px;
820
+ margin-bottom: 16px;
821
+ }
822
+
823
+ .props-actions {
824
+ border-top: 1px solid var(--medium-color);
825
+ padding-top: 16px;
826
+ margin-top: 8px;
827
+ }
828
+
829
+ .actions-note {
830
+ margin-top: 12px;
831
+ padding: 8px 12px;
832
+ background: var(--tertiary-background-color);
833
+ border-radius: 6px;
834
+ border: 1px solid var(--medium-color);
835
+ }
836
+
837
+ .actions-note small {
838
+ color: var(--font-secondary-color);
839
+ font-size: 11px;
840
+ display: flex;
841
+ align-items: center;
842
+ gap: 6px;
843
+ }
844
+
845
+ .props-section {
846
+ background: var(--tertiary-background-color);
847
+ border: 1px solid var(--medium-color);
848
+ border-radius: 8px;
849
+ padding: 12px;
850
+ }
851
+
852
+ .section-title {
853
+ font-size: 12px;
854
+ font-weight: 600;
855
+ color: var(--font-primary-color);
856
+ margin-bottom: 12px;
857
+ display: flex;
858
+ align-items: center;
859
+ gap: 6px;
860
+ }
861
+
862
+ .prop-item {
863
+ display: flex;
864
+ flex-direction: column;
865
+ gap: 6px;
866
+ padding: 12px;
867
+ background: var(--primary-background-color);
868
+ border: 1px solid var(--medium-color);
869
+ border-radius: 6px;
870
+ margin-bottom: 8px;
871
+ transition: border-color 0.2s ease;
872
+ }
873
+
874
+ .prop-item:hover {
875
+ border-color: var(--primary-color);
876
+ }
877
+
878
+ .prop-header {
879
+ display: flex;
880
+ justify-content: space-between;
881
+ align-items: center;
882
+ }
883
+
884
+ .prop-name {
885
+ font-size: 13px;
886
+ font-weight: 600;
887
+ color: var(--font-primary-color);
888
+ }
889
+
890
+ .prop-name.required::after {
891
+ content: " *";
892
+ color: var(--danger-color);
893
+ }
894
+
895
+ .prop-meta {
896
+ display: flex;
897
+ align-items: center;
898
+ gap: 8px;
899
+ }
900
+
901
+ .prop-type {
902
+ font-size: 11px;
903
+ padding: 2px 6px;
904
+ background: var(--secondary-color);
905
+ color: var(--secondary-color-contrast);
906
+ border-radius: 4px;
907
+ font-family: monospace;
908
+ font-weight: 500;
909
+ }
910
+
911
+ .prop-status {
912
+ font-size: 12px;
913
+ font-weight: 500;
914
+ }
915
+
916
+ .status-used {
917
+ color: var(--success-color);
918
+ }
919
+
920
+ .status-missing {
921
+ color: var(--danger-color);
922
+ }
923
+
924
+ .status-optional {
925
+ color: var(--medium-color);
926
+ }
927
+
928
+ .prop-input {
929
+ margin-top: 8px;
930
+ }
931
+
932
+ .input-group {
933
+ position: relative;
934
+ }
935
+
936
+ .prop-control {
937
+ width: 100%;
938
+ padding: 8px 32px 8px 10px;
939
+ border: 1px solid var(--medium-color);
940
+ border-radius: 6px;
941
+ background: var(--primary-background-color);
942
+ color: var(--font-primary-color);
943
+ font-size: 13px;
944
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
945
+ font-family: monospace;
946
+ }
947
+
948
+ .prop-control:focus {
949
+ outline: none;
950
+ border-color: var(--primary-color);
951
+ box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb), 0.1);
952
+ }
953
+
954
+ .prop-control:disabled {
955
+ background: var(--disabled-color);
956
+ color: var(--font-secondary-color);
957
+ cursor: not-allowed;
958
+ }
959
+
960
+ .prop-control[readonly] {
961
+ background: var(--tertiary-background-color);
962
+ cursor: pointer;
963
+ }
964
+
965
+ .prop-control[readonly]:focus {
966
+ border-color: var(--accent-color);
967
+ box-shadow: 0 0 0 3px rgba(var(--accent-color), 0.1);
968
+ }
969
+
970
+ /* Estilos específicos para checkboxes */
971
+ .prop-control[type="checkbox"] {
972
+ width: auto;
973
+ padding: 0;
974
+ margin: 0;
975
+ cursor: pointer;
976
+ }
977
+
978
+ .edit-btn {
979
+ position: absolute;
980
+ right: 4px;
981
+ top: 50%;
982
+ transform: translateY(-50%);
983
+ background: var(--accent-color);
984
+ border: none;
985
+ color: white;
986
+ width: 24px;
987
+ height: 24px;
988
+ border-radius: 4px;
989
+ cursor: pointer;
990
+ font-size: 12px;
991
+ display: flex;
992
+ align-items: center;
993
+ justify-content: center;
994
+ transition: background 0.2s ease;
995
+ }
996
+
997
+ .edit-btn:hover {
998
+ background: var(--primary-color);
999
+ }
1000
+
1001
+ .default-value {
1002
+ font-size: 11px;
1003
+ color: var(--font-secondary-color);
1004
+ font-style: italic;
1005
+ margin-top: 4px;
1006
+ }
1007
+
1008
+ .info-list {
1009
+ display: flex;
1010
+ flex-direction: column;
1011
+ gap: 12px;
1012
+ }
1013
+
1014
+ .info-item {
1015
+ display: flex;
1016
+ justify-content: space-between;
1017
+ padding: 12px;
1018
+ background: var(--tertiary-background-color);
1019
+ border-radius: 6px;
1020
+ border: 1px solid var(--medium-color);
1021
+ }
1022
+
1023
+ .info-label {
1024
+ font-weight: 600;
1025
+ color: var(--font-primary-color);
1026
+ font-size: 13px;
1027
+ }
1028
+
1029
+ .info-value {
1030
+ color: var(--font-secondary-color);
1031
+ font-family: monospace;
1032
+ font-size: 12px;
1033
+ }
1034
+
1035
+ .actions-container {
1036
+ display: flex;
1037
+ flex-direction: column;
1038
+ gap: 16px;
1039
+ }
1040
+
1041
+ .action-buttons {
1042
+ display: flex;
1043
+ flex-direction: column;
1044
+ gap: 8px;
1045
+ }
1046
+
1047
+ .action-btn {
1048
+ padding: 12px 16px;
1049
+ border: none;
1050
+ border-radius: 6px;
1051
+ font-size: 13px;
1052
+ font-weight: 500;
1053
+ cursor: pointer;
1054
+ transition: all 0.2s ease;
1055
+ display: flex;
1056
+ align-items: center;
1057
+ justify-content: center;
1058
+ gap: 8px;
1059
+ }
1060
+
1061
+ .action-btn.primary {
1062
+ background: var(--primary-color);
1063
+ color: var(--primary-color-contrast);
1064
+ }
1065
+
1066
+ .action-btn.primary:hover {
1067
+ background: var(--primary-color-shade);
1068
+ }
1069
+
1070
+ .action-btn.secondary {
1071
+ background: var(--secondary-color);
1072
+ color: var(--secondary-color-contrast);
1073
+ }
1074
+
1075
+ .action-btn.secondary:hover {
1076
+ opacity: 0.9;
1077
+ }
1078
+
1079
+ .action-btn.tertiary {
1080
+ background: var(--tertiary-background-color);
1081
+ color: var(--font-primary-color);
1082
+ border: 1px solid var(--medium-color);
1083
+ }
1084
+
1085
+ .action-btn.tertiary:hover {
1086
+ background: var(--secondary-background-color);
1087
+ }
1088
+
1089
+ /* Modal Styles */
1090
+ .editor-modal {
1091
+ display: none;
1092
+ position: fixed;
1093
+ top: 0;
1094
+ left: 0;
1095
+ width: 100%;
1096
+ height: 100%;
1097
+ background: rgba(0, 0, 0, 0.6);
1098
+ z-index: 20000;
1099
+ backdrop-filter: blur(4px);
1100
+ }
1101
+
1102
+ .editor-modal.active {
1103
+ display: flex;
1104
+ align-items: center;
1105
+ justify-content: center;
1106
+ }
1107
+
1108
+ .modal-content {
1109
+ background: var(--primary-background-color);
1110
+ border-radius: 12px;
1111
+ width: 90%;
1112
+ max-width: 600px;
1113
+ max-height: 80%;
1114
+ display: flex;
1115
+ flex-direction: column;
1116
+ box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);
1117
+ border: 1px solid var(--medium-color);
1118
+ }
1119
+
1120
+ .modal-header {
1121
+ padding: 16px 20px;
1122
+ background: var(--tertiary-background-color);
1123
+ border-radius: 12px 12px 0 0;
1124
+ border-bottom: 1px solid var(--medium-color);
1125
+ display: flex;
1126
+ justify-content: space-between;
1127
+ align-items: center;
1128
+ }
1129
+
1130
+ .modal-header h3 {
1131
+ margin: 0;
1132
+ font-size: 16px;
1133
+ font-weight: 600;
1134
+ color: var(--font-primary-color);
1135
+ }
1136
+
1137
+ .modal-close {
1138
+ background: none;
1139
+ border: none;
1140
+ font-size: 20px;
1141
+ color: var(--font-secondary-color);
1142
+ cursor: pointer;
1143
+ width: 32px;
1144
+ height: 32px;
1145
+ border-radius: 6px;
1146
+ display: flex;
1147
+ align-items: center;
1148
+ justify-content: center;
1149
+ transition: background 0.2s ease;
1150
+ }
1151
+
1152
+ .modal-close:hover {
1153
+ background: var(--secondary-background-color);
1154
+ }
1155
+
1156
+ .modal-body {
1157
+ flex: 1;
1158
+ padding: 20px;
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: 16px;
1162
+ overflow: hidden;
1163
+ }
1164
+
1165
+ .editor-type-selector {
1166
+ display: flex;
1167
+ gap: 4px;
1168
+ background: var(--tertiary-background-color);
1169
+ padding: 4px;
1170
+ border-radius: 6px;
1171
+ }
1172
+
1173
+ .type-btn {
1174
+ flex: 1;
1175
+ padding: 8px 12px;
1176
+ border: none;
1177
+ background: transparent;
1178
+ color: var(--font-secondary-color);
1179
+ font-size: 12px;
1180
+ font-weight: 500;
1181
+ cursor: pointer;
1182
+ border-radius: 4px;
1183
+ transition: all 0.2s ease;
1184
+ }
1185
+
1186
+ .type-btn.active {
1187
+ background: var(--primary-color);
1188
+ color: var(--primary-color-contrast);
1189
+ }
1190
+
1191
+ .editor-container {
1192
+ flex: 1;
1193
+ position: relative;
1194
+ min-height: 200px;
1195
+ }
1196
+
1197
+ #property-editor {
1198
+ width: 100%;
1199
+ height: 100%;
1200
+ border: 1px solid var(--medium-color);
1201
+ border-radius: 6px;
1202
+ padding: 12px;
1203
+ background: var(--primary-background-color);
1204
+ color: var(--font-primary-color);
1205
+ font-family: 'Monaco', 'Consolas', monospace;
1206
+ font-size: 13px;
1207
+ line-height: 1.5;
1208
+ resize: none;
1209
+ outline: none;
1210
+ min-height: 200px;
1211
+ }
1212
+
1213
+ #property-editor:focus {
1214
+ border-color: var(--primary-color);
1215
+ box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb), 0.1);
1216
+ }
1217
+
1218
+ .validation-message {
1219
+ font-size: 12px;
1220
+ color: var(--danger-color);
1221
+ min-height: 18px;
1222
+ display: flex;
1223
+ align-items: center;
1224
+ gap: 6px;
1225
+ }
1226
+
1227
+ .modal-actions {
1228
+ padding: 16px 20px;
1229
+ background: var(--tertiary-background-color);
1230
+ border-radius: 0 0 12px 12px;
1231
+ border-top: 1px solid var(--medium-color);
1232
+ display: flex;
1233
+ gap: 12px;
1234
+ justify-content: flex-end;
1235
+ }
1236
+
1237
+ .modal-btn {
1238
+ padding: 10px 20px;
1239
+ border: none;
1240
+ border-radius: 6px;
1241
+ font-size: 13px;
1242
+ font-weight: 500;
1243
+ cursor: pointer;
1244
+ transition: all 0.2s ease;
1245
+ }
1246
+
1247
+ .modal-btn.cancel {
1248
+ background: var(--tertiary-background-color);
1249
+ color: var(--font-primary-color);
1250
+ border: 1px solid var(--medium-color);
1251
+ }
1252
+
1253
+ .modal-btn.cancel:hover {
1254
+ background: var(--secondary-background-color);
1255
+ }
1256
+
1257
+ .modal-btn.save {
1258
+ background: var(--success-color);
1259
+ color: var(--success-contrast);
1260
+ }
1261
+
1262
+ .modal-btn.save:hover {
1263
+ opacity: 0.9;
1264
+ }
1265
+
1266
+ .modal-btn.save:disabled {
1267
+ background: var(--disabled-color);
1268
+ cursor: not-allowed;
1269
+ }
1270
+ `
1271
+ }
1272
+
1273
+ function productionOnlyHtml(){
1274
+ return `
1275
+ <div id="debugger-container">
1276
+ <div class="debugger-header">
1277
+ <div class="header-content">
1278
+ <div class="component-info">
1279
+ <div class="component-icon">🔍</div>
1280
+ <div class="component-details">
1281
+ <div class="component-name">Component Inspector</div>
1282
+ <div class="component-id">Ready to debug</div>
1283
+ </div>
1284
+ </div>
1285
+ <div class="header-actions">
1286
+ <button class="minimize-btn" title="Minimize">−</button>
1287
+ <button id="close-debugger" title="Close">×</button>
1288
+ </div>
1289
+ </div>
1290
+ </div>
1291
+
1292
+ <div class="debugger-content">
1293
+ <div class="tabs-container">
1294
+ <div class="tab-nav">
1295
+ <button class="tab-btn active" data-tab="props">📋 Props</button>
1296
+ <button class="tab-btn" data-tab="info">â„šī¸ Info</button>
1297
+ </div>
1298
+ </div>
1299
+
1300
+ <div class="tab-content">
1301
+ <div class="tab-pane active" id="props-tab">
1302
+ <div class="props-container"></div>
1303
+ <div class="props-actions">
1304
+ <div class="action-buttons">
1305
+ <button class="action-btn primary" id="apply-changes">✅ Apply Changes</button>
1306
+ <button class="action-btn secondary" id="reset-values">🔄 Reset Values</button>
1307
+ </div>
1308
+ <div class="actions-note">
1309
+ <small>💡 Press Enter on any input to apply changes automatically</small>
1310
+ </div>
1311
+ </div>
1312
+ </div>
1313
+
1314
+ <div class="tab-pane" id="info-tab">
1315
+ <div class="info-container">
1316
+ <div class="info-list"></div>
1317
+ </div>
1318
+ </div>
1319
+ </div>
1320
+ </div>
1321
+
1322
+ <!-- Modal para editar objetos/funciones -->
1323
+ <div class="editor-modal" id="editor-modal">
1324
+ <div class="modal-content">
1325
+ <div class="modal-header">
1326
+ <h3 id="modal-title">Edit Property</h3>
1327
+ <button class="modal-close" id="modal-close">×</button>
1328
+ </div>
1329
+ <div class="modal-body">
1330
+ <div class="editor-type-selector">
1331
+ <button class="type-btn active" data-type="json">📋 JSON</button>
1332
+ <button class="type-btn" data-type="function">⚡ Function</button>
1333
+ </div>
1334
+ <div class="editor-container">
1335
+ <textarea id="property-editor" spellcheck="false"></textarea>
1336
+ </div>
1337
+ <div class="editor-footer">
1338
+ <div class="validation-message"></div>
1339
+ </div>
1340
+ </div>
1341
+ <div class="modal-actions">
1342
+ <button class="modal-btn cancel" id="modal-cancel">Cancel</button>
1343
+ <button class="modal-btn save" id="modal-save">Save Changes</button>
1344
+ </div>
1345
+ </div>
1346
+ </div>
1347
+ </div>`
1348
+ }