pinokiod 8.0.41 → 8.0.44
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/kernel/vault/constants.js +1 -5
- package/kernel/vault/hash_worker.js +1 -7
- package/kernel/vault/index.js +515 -873
- package/kernel/vault/registry.js +35 -157
- package/kernel/vault/sweeper.js +106 -181
- package/kernel/vault/walker.js +1 -8
- package/package.json +1 -1
- package/server/index.js +3 -20
- package/server/public/storage-size.js +3 -1
- package/server/public/style.css +0 -13
- package/server/public/vault.css +60 -173
- package/server/public/vault.js +397 -626
- package/server/views/app.ejs +6 -85
- package/server/views/partials/main_sidebar.ejs +1 -4
- package/server/views/partials/vault_workspace.ejs +2 -5
- package/server/views/vault.ejs +1 -1
- package/server/views/vault_app.ejs +1 -1
- package/test/vault-engine.test.js +123 -212
- package/test/vault-sweep.test.js +163 -292
- package/test/vault-ui.test.js +718 -979
- package/server/public/vault-nav.js +0 -96
package/server/public/vault.css
CHANGED
|
@@ -128,9 +128,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
128
128
|
justify-content: center;
|
|
129
129
|
width: 14px;
|
|
130
130
|
height: 14px;
|
|
131
|
-
padding: 0;
|
|
132
|
-
border: 0;
|
|
133
|
-
background: transparent;
|
|
134
131
|
color: var(--task-muted);
|
|
135
132
|
font-size: 9px;
|
|
136
133
|
cursor: help;
|
|
@@ -141,10 +138,11 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
141
138
|
border-radius: 50%;
|
|
142
139
|
}
|
|
143
140
|
.vault-compare-tooltip {
|
|
144
|
-
position:
|
|
141
|
+
position: absolute;
|
|
145
142
|
z-index: 30;
|
|
146
|
-
|
|
147
|
-
|
|
143
|
+
top: calc(100% + 6px);
|
|
144
|
+
left: 0;
|
|
145
|
+
width: min(220px, calc(100vw - var(--vault-inline) - var(--vault-inline)));
|
|
148
146
|
padding: 7px 9px;
|
|
149
147
|
border: 1px solid var(--task-border-strong);
|
|
150
148
|
border-radius: 6px;
|
|
@@ -154,10 +152,19 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
154
152
|
font-size: 10.5px;
|
|
155
153
|
font-weight: 400;
|
|
156
154
|
line-height: 1.4;
|
|
155
|
+
opacity: 0;
|
|
157
156
|
pointer-events: none;
|
|
158
|
-
transform:
|
|
157
|
+
transform: translateY(-2px);
|
|
158
|
+
transition: opacity 100ms ease, transform 100ms ease, visibility 100ms;
|
|
159
|
+
visibility: hidden;
|
|
159
160
|
white-space: normal;
|
|
160
161
|
}
|
|
162
|
+
.vault-compare-info:hover .vault-compare-tooltip,
|
|
163
|
+
.vault-compare-info:focus .vault-compare-tooltip {
|
|
164
|
+
opacity: 1;
|
|
165
|
+
transform: translateY(0);
|
|
166
|
+
visibility: visible;
|
|
167
|
+
}
|
|
161
168
|
.vault-compare-value { font-variant-numeric: tabular-nums; text-align: right; }
|
|
162
169
|
.vault-compare-track {
|
|
163
170
|
position: relative;
|
|
@@ -204,37 +211,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
204
211
|
gap: 8px;
|
|
205
212
|
flex: 0 0 auto;
|
|
206
213
|
}
|
|
207
|
-
.vault-candidate-size {
|
|
208
|
-
display: inline-flex;
|
|
209
|
-
min-height: var(--vault-control-height);
|
|
210
|
-
align-items: center;
|
|
211
|
-
overflow: hidden;
|
|
212
|
-
border: 1px solid var(--task-border-strong);
|
|
213
|
-
border-radius: 7px;
|
|
214
|
-
background: color-mix(in srgb, var(--task-panel) 94%, var(--task-soft));
|
|
215
|
-
color: var(--task-muted);
|
|
216
|
-
font-size: 11px;
|
|
217
|
-
line-height: 1;
|
|
218
|
-
white-space: nowrap;
|
|
219
|
-
}
|
|
220
|
-
.vault-candidate-size > span { padding-left: 10px; }
|
|
221
|
-
.vault-candidate-size select {
|
|
222
|
-
height: calc(var(--vault-control-height) - 2px);
|
|
223
|
-
max-width: 142px;
|
|
224
|
-
padding: 0 24px 0 6px;
|
|
225
|
-
border: 0;
|
|
226
|
-
outline: 0;
|
|
227
|
-
background: transparent;
|
|
228
|
-
color: var(--task-text);
|
|
229
|
-
font: inherit;
|
|
230
|
-
font-weight: 600;
|
|
231
|
-
cursor: pointer;
|
|
232
|
-
}
|
|
233
|
-
.vault-candidate-size:focus-within {
|
|
234
|
-
border-color: color-mix(in srgb, var(--task-accent) 55%, var(--task-border-strong));
|
|
235
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--task-accent) 14%, transparent);
|
|
236
|
-
}
|
|
237
|
-
.vault-candidate-size select:disabled { cursor: default; opacity: .55; }
|
|
238
214
|
.vault-button,
|
|
239
215
|
.vault-icon-button,
|
|
240
216
|
.vault-text-button {
|
|
@@ -258,12 +234,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
258
234
|
white-space: nowrap;
|
|
259
235
|
}
|
|
260
236
|
.vault-button:hover { background: var(--task-soft); }
|
|
261
|
-
.vault-button.primary {
|
|
262
|
-
border-color: var(--task-accent-surface);
|
|
263
|
-
background: var(--task-accent-surface);
|
|
264
|
-
color: var(--task-accent-contrast);
|
|
265
|
-
}
|
|
266
|
-
.vault-button.primary:hover { background: var(--task-accent-hover); }
|
|
267
237
|
.vault-button.review-primary {
|
|
268
238
|
border-color: var(--task-accent-contrast);
|
|
269
239
|
background: var(--task-accent-contrast);
|
|
@@ -313,9 +283,7 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
313
283
|
.vault-button:focus-visible,
|
|
314
284
|
.vault-icon-button:focus-visible,
|
|
315
285
|
.vault-text-button:focus-visible,
|
|
316
|
-
.vault-sharing-switch:focus-visible,
|
|
317
286
|
.vault-rail-add:focus-visible,
|
|
318
|
-
.vault-source-remove:focus-visible,
|
|
319
287
|
.vault-result-toggle:focus-visible,
|
|
320
288
|
.vault-nav-row:focus-visible,
|
|
321
289
|
.vault-sort-button:focus-visible,
|
|
@@ -326,6 +294,7 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
326
294
|
outline-offset: 2px;
|
|
327
295
|
}
|
|
328
296
|
.vault-scan-state,
|
|
297
|
+
.vault-action-state,
|
|
329
298
|
.vault-result,
|
|
330
299
|
.vault-feedback,
|
|
331
300
|
.vault-cloud-warning {
|
|
@@ -337,19 +306,25 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
337
306
|
border-bottom: 1px solid var(--task-border);
|
|
338
307
|
font-size: 12.5px;
|
|
339
308
|
}
|
|
340
|
-
.vault-scan-state
|
|
309
|
+
.vault-scan-state,
|
|
310
|
+
.vault-action-state {
|
|
341
311
|
position: relative;
|
|
342
312
|
overflow: hidden;
|
|
343
313
|
}
|
|
314
|
+
.vault-action-state { background: color-mix(in srgb, var(--task-accent) 5%, var(--task-panel)); }
|
|
344
315
|
.vault-scan-state.show,
|
|
316
|
+
.vault-action-state.show,
|
|
345
317
|
.vault-result.show,
|
|
346
318
|
.vault-feedback.show,
|
|
347
319
|
.vault-cloud-warning.show { display: flex; }
|
|
348
320
|
.vault-scan-state i,
|
|
321
|
+
.vault-action-state i,
|
|
349
322
|
.vault-result > i { color: var(--task-accent); }
|
|
323
|
+
.vault-action-state strong,
|
|
350
324
|
.vault-result strong { font-weight: 650; }
|
|
351
325
|
.vault-result-detail,
|
|
352
|
-
.vault-scan-detail
|
|
326
|
+
.vault-scan-detail,
|
|
327
|
+
.vault-action-detail { color: var(--task-muted); }
|
|
353
328
|
.vault-result.incomplete {
|
|
354
329
|
display: block;
|
|
355
330
|
flex: 0 0 auto;
|
|
@@ -442,7 +417,8 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
442
417
|
overflow-wrap: anywhere;
|
|
443
418
|
white-space: normal;
|
|
444
419
|
}
|
|
445
|
-
.vault-scan-detail
|
|
420
|
+
.vault-scan-detail,
|
|
421
|
+
.vault-action-detail {
|
|
446
422
|
min-width: 0;
|
|
447
423
|
overflow: hidden;
|
|
448
424
|
text-overflow: ellipsis;
|
|
@@ -622,7 +598,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
622
598
|
}
|
|
623
599
|
.vault-source-line.depth-1 { padding-left: 12px; }
|
|
624
600
|
.vault-source-line.depth-2 { padding-left: 24px; }
|
|
625
|
-
.vault-source-line.removable { grid-template-columns: 18px minmax(0, 1fr) 20px; }
|
|
626
601
|
.vault-source-toggle {
|
|
627
602
|
width: 18px;
|
|
628
603
|
height: 100%;
|
|
@@ -634,19 +609,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
634
609
|
font-size: 10px;
|
|
635
610
|
}
|
|
636
611
|
.vault-source-toggle.placeholder { cursor: default; }
|
|
637
|
-
.vault-source-remove {
|
|
638
|
-
width: 20px;
|
|
639
|
-
height: 100%;
|
|
640
|
-
padding: 0;
|
|
641
|
-
border: 0;
|
|
642
|
-
border-radius: 5px;
|
|
643
|
-
background: transparent;
|
|
644
|
-
color: var(--task-muted);
|
|
645
|
-
cursor: pointer;
|
|
646
|
-
font-size: 10px;
|
|
647
|
-
}
|
|
648
|
-
.vault-source-remove:hover { background: var(--task-soft); color: var(--task-text); }
|
|
649
|
-
.vault-source-remove:disabled { opacity: .45; cursor: default; }
|
|
650
612
|
.vault-source-line .vault-nav-row { grid-template-columns: 18px minmax(0, 1fr) auto; }
|
|
651
613
|
.vault-source-line.has-path .vault-nav-row {
|
|
652
614
|
height: var(--vault-tree-path-row);
|
|
@@ -662,6 +624,7 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
662
624
|
font-size: 11.5px;
|
|
663
625
|
}
|
|
664
626
|
.vault-text-button:hover { color: var(--task-text); }
|
|
627
|
+
.vault-text-button:disabled { cursor: progress; opacity: .55; }
|
|
665
628
|
.vault-pane {
|
|
666
629
|
display: grid;
|
|
667
630
|
min-width: 0;
|
|
@@ -729,8 +692,16 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
729
692
|
font-weight: 600;
|
|
730
693
|
}
|
|
731
694
|
.vault-display-mode button:focus-visible { outline-offset: -2px; }
|
|
732
|
-
.vault-toolbar-
|
|
733
|
-
|
|
695
|
+
.vault-toolbar-description {
|
|
696
|
+
min-width: 0;
|
|
697
|
+
flex: 1 1 auto;
|
|
698
|
+
overflow: hidden;
|
|
699
|
+
color: var(--task-muted);
|
|
700
|
+
font-size: 11.5px;
|
|
701
|
+
text-overflow: ellipsis;
|
|
702
|
+
white-space: nowrap;
|
|
703
|
+
}
|
|
704
|
+
.vault-toolbar-count { color: var(--task-muted); font-size: 11.5px; white-space: nowrap; }
|
|
734
705
|
.vault-table { min-width: 660px; }
|
|
735
706
|
.vault-table-wrap {
|
|
736
707
|
min-height: 0;
|
|
@@ -823,27 +794,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
823
794
|
.vault-group-meta { margin: 2px 0 0 23px; color: var(--task-muted); font-size: 10px; }
|
|
824
795
|
.vault-group-action { grid-column: 5; justify-self: end; }
|
|
825
796
|
.vault-group-action .vault-button { min-height: 28px; padding: 4px 9px; }
|
|
826
|
-
.vault-deduplicate-button {
|
|
827
|
-
position: relative;
|
|
828
|
-
min-width: 142px;
|
|
829
|
-
overflow: hidden;
|
|
830
|
-
}
|
|
831
|
-
.vault-deduplicate-button:disabled { opacity: 1; }
|
|
832
|
-
.vault-deduplicate-progress {
|
|
833
|
-
position: absolute;
|
|
834
|
-
right: 0;
|
|
835
|
-
bottom: 0;
|
|
836
|
-
left: 0;
|
|
837
|
-
height: 3px;
|
|
838
|
-
background: color-mix(in srgb, currentColor 22%, transparent);
|
|
839
|
-
}
|
|
840
|
-
.vault-deduplicate-progress > span {
|
|
841
|
-
display: block;
|
|
842
|
-
width: var(--vault-deduplicate-progress);
|
|
843
|
-
height: 100%;
|
|
844
|
-
background: currentColor;
|
|
845
|
-
transition: width 120ms linear;
|
|
846
|
-
}
|
|
847
797
|
.vault-name-cell { display: flex; min-width: 0; align-items: center; gap: 8px; }
|
|
848
798
|
.vault-name-cell.indent-1 { padding-left: 18px; }
|
|
849
799
|
.vault-name-cell.indent-2 { padding-left: 36px; }
|
|
@@ -911,95 +861,33 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
911
861
|
justify-content: space-between;
|
|
912
862
|
gap: 12px;
|
|
913
863
|
}
|
|
914
|
-
.vault-status-cell.
|
|
915
|
-
.vault-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
.vault-file-action-queued i { width: 11px; text-align: center; }
|
|
926
|
-
.vault-file-action-progress {
|
|
927
|
-
display: grid;
|
|
928
|
-
width: min(100%, 300px);
|
|
929
|
-
gap: 4px;
|
|
930
|
-
}
|
|
931
|
-
.vault-file-action-head {
|
|
932
|
-
display: flex;
|
|
933
|
-
align-items: baseline;
|
|
934
|
-
justify-content: space-between;
|
|
935
|
-
gap: 10px;
|
|
936
|
-
color: var(--task-muted);
|
|
937
|
-
font-size: 10px;
|
|
938
|
-
font-variant-numeric: tabular-nums;
|
|
939
|
-
}
|
|
940
|
-
.vault-file-action-head strong { color: var(--task-text); font-weight: 600; }
|
|
941
|
-
.vault-file-action-track {
|
|
942
|
-
display: block;
|
|
943
|
-
height: 3px;
|
|
944
|
-
overflow: hidden;
|
|
945
|
-
border-radius: 999px;
|
|
946
|
-
background: var(--task-soft);
|
|
947
|
-
}
|
|
948
|
-
.vault-file-action-track > span {
|
|
949
|
-
display: block;
|
|
950
|
-
width: var(--vault-file-action-progress);
|
|
951
|
-
height: 100%;
|
|
952
|
-
border-radius: inherit;
|
|
953
|
-
background: var(--task-accent);
|
|
954
|
-
transition: width 120ms linear;
|
|
955
|
-
}
|
|
956
|
-
.vault-status-cell > .vault-text-button { flex: 0 0 auto; }
|
|
957
|
-
.vault-sharing-switch {
|
|
958
|
-
position: relative;
|
|
959
|
-
width: 44px;
|
|
960
|
-
height: 28px;
|
|
961
|
-
flex: 0 0 44px;
|
|
962
|
-
padding: 0;
|
|
963
|
-
border: 0;
|
|
964
|
-
background: transparent;
|
|
965
|
-
cursor: pointer;
|
|
864
|
+
.vault-status-cell > .vault-text-button { min-height: 24px; flex: 0 0 auto; }
|
|
865
|
+
.vault-row-action { justify-self: end; }
|
|
866
|
+
.vault-row-action .vault-text-button { min-height: 24px; color: var(--task-text); font-size: 11.5px; }
|
|
867
|
+
.vault-status-cell > .vault-text-button,
|
|
868
|
+
.vault-row-action .vault-text-button {
|
|
869
|
+
padding: 3px 8px;
|
|
870
|
+
border: 1px solid var(--task-border);
|
|
871
|
+
border-radius: 5px;
|
|
872
|
+
background: color-mix(in srgb, var(--task-panel) 95%, var(--task-soft));
|
|
873
|
+
color: var(--task-text);
|
|
874
|
+
line-height: 1;
|
|
966
875
|
}
|
|
967
|
-
.vault-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
left: 6px;
|
|
971
|
-
width: 32px;
|
|
972
|
-
height: 18px;
|
|
973
|
-
box-sizing: border-box;
|
|
974
|
-
border: 1px solid var(--task-border-strong);
|
|
975
|
-
border-radius: 999px;
|
|
876
|
+
.vault-status-cell > .vault-text-button:hover:not(:disabled),
|
|
877
|
+
.vault-row-action .vault-text-button:hover:not(:disabled) {
|
|
878
|
+
border-color: var(--task-border-strong);
|
|
976
879
|
background: var(--task-soft);
|
|
977
|
-
content: "";
|
|
978
880
|
}
|
|
979
|
-
.vault-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
left: 9px;
|
|
984
|
-
width: 12px;
|
|
985
|
-
height: 12px;
|
|
986
|
-
border-radius: 50%;
|
|
987
|
-
background: var(--task-muted);
|
|
988
|
-
transition: transform 130ms ease-out, background 130ms ease-out;
|
|
881
|
+
body.dark .vault-status-cell > .vault-text-button,
|
|
882
|
+
body.dark .vault-row-action .vault-text-button {
|
|
883
|
+
border-color: color-mix(in srgb, var(--task-text) 24%, transparent);
|
|
884
|
+
background: color-mix(in srgb, var(--task-text) 7%, var(--task-panel));
|
|
989
885
|
}
|
|
990
|
-
.vault-
|
|
991
|
-
|
|
992
|
-
|
|
886
|
+
body.dark .vault-status-cell > .vault-text-button:hover:not(:disabled),
|
|
887
|
+
body.dark .vault-row-action .vault-text-button:hover:not(:disabled) {
|
|
888
|
+
border-color: color-mix(in srgb, var(--task-text) 36%, transparent);
|
|
889
|
+
background: color-mix(in srgb, var(--task-text) 11%, var(--task-panel));
|
|
993
890
|
}
|
|
994
|
-
.vault-sharing-switch.on .vault-sharing-thumb {
|
|
995
|
-
background: var(--task-panel);
|
|
996
|
-
transform: translateX(14px);
|
|
997
|
-
}
|
|
998
|
-
.vault-sharing-switch:hover::before { border-color: var(--task-muted); }
|
|
999
|
-
.vault-sharing-switch.on:hover::before { background: color-mix(in srgb, var(--task-text) 86%, var(--task-panel)); }
|
|
1000
|
-
.vault-sharing-switch:disabled { opacity: .55; cursor: progress; }
|
|
1001
|
-
.vault-row-action { justify-self: end; }
|
|
1002
|
-
.vault-row-action .vault-text-button { color: var(--task-text); font-size: 11.5px; }
|
|
1003
891
|
.vault-detail {
|
|
1004
892
|
padding: 8px var(--vault-inline) 9px 56px;
|
|
1005
893
|
border-bottom: 1px solid var(--task-border);
|
|
@@ -1042,7 +930,6 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
1042
930
|
.vault-metrics { width: 100%; overflow-x: auto; }
|
|
1043
931
|
.vault-metrics.summary { grid-template-columns: minmax(0, 1fr); gap: 11px; overflow: visible; }
|
|
1044
932
|
.vault-summary-side { justify-content: flex-start; flex-wrap: wrap; white-space: normal; }
|
|
1045
|
-
.vault-overview-actions { flex-wrap: wrap; }
|
|
1046
933
|
.vault-comparison { max-width: 100%; }
|
|
1047
934
|
.vault-explorer { display: block; overflow: visible; }
|
|
1048
935
|
.vault-rail { max-height: 330px; border-right: 0; border-bottom: 1px solid var(--task-border); }
|
|
@@ -1066,10 +953,10 @@ body[data-vault-mode="app"] .vault-overview {
|
|
|
1066
953
|
.vault-rail-add { width: 44px; height: 44px; flex-basis: 44px; }
|
|
1067
954
|
.vault-rail-heading { height: 44px; }
|
|
1068
955
|
.vault-source-line { grid-template-columns: 44px minmax(0, 1fr); }
|
|
1069
|
-
.vault-source-line.removable { grid-template-columns: 44px minmax(0, 1fr) 44px; }
|
|
1070
956
|
.vault-source-toggle,
|
|
1071
|
-
.vault-source-remove,
|
|
1072
957
|
.vault-disclosure { width: 44px; min-height: 44px; flex-basis: 44px; }
|
|
958
|
+
.vault-status-cell > .vault-text-button,
|
|
959
|
+
.vault-row-action .vault-text-button { min-height: 44px; }
|
|
1073
960
|
}
|
|
1074
961
|
@media (prefers-reduced-motion: reduce) {
|
|
1075
962
|
.vault-page * { scroll-behavior: auto !important; }
|