vitepress-plugin-filelist 0.7.2 → 0.9.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.
@@ -826,47 +826,138 @@
826
826
  /* ---------------- long folders ---------------- */
827
827
 
828
828
  .fl-more {
829
- background: var(--vp-c-bg-soft);
829
+ color: var(--vp-c-text-2);
830
830
  }
831
831
 
832
832
  .fl-more-cell {
833
833
  grid-column: 2 / -1;
834
- gap: 12px;
834
+ /* the same gaps as a file's name cell, so the tag and count line up with its type and name */
835
+ gap: 8px;
835
836
  align-self: stretch;
836
837
  }
837
838
 
838
- .fl-more-cell .fl-indent {
839
- /* line the row up with the folder's files (arrow + icon columns) */
840
- margin-right: 36px;
839
+ /* “⋯” in the file-type column: the size of .fl-type */
840
+ .fl-more-tag {
841
+ display: inline-flex;
842
+ flex: none;
843
+ align-items: center;
844
+ justify-content: center;
845
+ width: 34px;
846
+ height: 20px;
847
+ font-size: 13px;
848
+ font-weight: 700;
849
+ line-height: 1;
850
+ color: var(--vp-c-text-3);
851
+ letter-spacing: 1px;
852
+ background: var(--vp-c-default-soft);
853
+ border-radius: 4px;
841
854
  }
842
855
 
843
856
  .fl-more-count {
857
+ min-width: 0;
858
+ overflow: hidden;
844
859
  font-size: 13px;
845
- color: var(--vp-c-text-2);
860
+ text-overflow: ellipsis;
846
861
  white-space: nowrap;
847
862
  }
848
863
 
849
- .fl-more-btn {
864
+ /* the short forms are for narrow lists */
865
+ .fl-more-short {
866
+ display: none;
867
+ }
868
+
869
+ .fl-more-actions {
870
+ display: flex;
871
+ flex: none;
872
+ gap: 2px;
873
+ align-items: center;
874
+ margin-left: auto;
875
+ }
876
+
877
+ .fl-more-link {
850
878
  height: 28px;
851
- padding: 0 12px;
879
+ padding: 0 8px;
852
880
  font-size: 13px;
853
- font-weight: 600;
854
881
  color: var(--vp-c-brand-1);
855
882
  white-space: nowrap;
856
883
  cursor: pointer;
884
+ background: transparent;
885
+ border: 0;
886
+ border-radius: 6px;
887
+ }
888
+
889
+ .fl-more-all {
890
+ font-weight: 600;
891
+ }
892
+
893
+ /* hover only where there is a pointer, so a tap does not leave a mark behind */
894
+ @media (hover: hover) {
895
+ .fl-more-link:hover,
896
+ .fl-pin-less:hover {
897
+ background: var(--vp-c-default-soft);
898
+ }
899
+ }
900
+
901
+ /* the folder row pinned at the top while scrolling through a long folder */
902
+ .fl-pin-anchor {
903
+ position: sticky;
904
+ top: calc(var(--fl-sticky) + var(--fl-pin-offset, 0px));
905
+ z-index: 5;
906
+ height: 0;
907
+ }
908
+
909
+ .fl-pin {
910
+ position: absolute;
911
+ inset: 0 0 auto;
912
+ display: grid;
913
+ grid-template-columns: 40px minmax(0, 1fr) auto;
914
+ align-items: center;
915
+ min-height: var(--fl-row-h);
916
+ padding: 0 8px;
857
917
  background: var(--vp-c-bg);
858
- border: 1px solid var(--vp-c-brand-soft);
859
- border-radius: 7px;
918
+ border-bottom: 1px solid var(--vp-c-divider);
919
+ box-shadow: 0 6px 12px -8px rgb(0 0 0 / 25%);
860
920
  }
861
921
 
862
- .fl-more-btn:hover {
863
- border-color: var(--vp-c-brand-1);
922
+ .fl-pin-arrow {
923
+ display: inline-flex;
924
+ flex: none;
925
+ align-items: center;
926
+ justify-content: center;
927
+ width: 18px;
928
+ color: var(--vp-c-text-2);
929
+ transform: rotate(90deg);
864
930
  }
865
931
 
866
- .fl-more-all {
867
- font-weight: 400;
868
- background: transparent;
869
- border-color: transparent;
932
+ .fl-pin-name {
933
+ min-width: 0;
934
+ overflow: hidden;
935
+ font-weight: 500;
936
+ text-overflow: ellipsis;
937
+ white-space: nowrap;
938
+ }
939
+
940
+ .fl-pin-count {
941
+ flex: none;
942
+ font-size: 12px;
943
+ color: var(--vp-c-text-2);
944
+ white-space: nowrap;
945
+ }
946
+
947
+ .fl-pin-less {
948
+ display: inline-flex;
949
+ gap: 4px;
950
+ align-items: center;
951
+ height: 26px;
952
+ padding: 0 10px;
953
+ font-size: 12px;
954
+ font-weight: 600;
955
+ color: var(--vp-c-brand-1);
956
+ white-space: nowrap;
957
+ cursor: pointer;
958
+ background: var(--vp-c-brand-soft);
959
+ border: 0;
960
+ border-radius: 13px;
870
961
  }
871
962
 
872
963
  /* ---------------- filter and deep search ---------------- */
@@ -1127,31 +1218,63 @@
1127
1218
  border-radius: 10px;
1128
1219
  }
1129
1220
 
1130
- .fl-more-cell {
1131
- gap: 4px;
1132
- }
1133
-
1134
- .fl-more-cell .fl-indent {
1135
- margin-right: 10px;
1221
+ .fl-more-tag {
1222
+ width: 36px;
1223
+ height: 22px;
1136
1224
  }
1137
1225
 
1138
1226
  .fl-more-count {
1139
1227
  flex: 1 1 auto;
1140
1228
  }
1141
1229
 
1142
- .fl-more-btn {
1143
- height: 44px;
1144
- padding: 0 12px;
1230
+ .fl-more-long {
1231
+ display: none;
1232
+ }
1233
+
1234
+ .fl-more-short {
1235
+ display: inline;
1236
+ }
1237
+
1238
+ /* smaller to look at, still a 44px target */
1239
+ .fl-more-link {
1240
+ position: relative;
1241
+ height: 32px;
1242
+ padding: 0 10px;
1145
1243
  font-size: 14px;
1146
- border-radius: 10px;
1147
1244
  }
1148
1245
 
1149
- .fl-more-page {
1246
+ .fl-more-link::after {
1247
+ position: absolute;
1248
+ inset: -6px 0;
1249
+ content: '';
1250
+ }
1251
+
1252
+ .fl-pin {
1253
+ grid-template-columns: 44px minmax(0, 1fr) auto;
1254
+ padding: 0 8px 0 0;
1255
+ }
1256
+
1257
+ .fl-pin-count {
1150
1258
  display: none;
1151
1259
  }
1152
1260
 
1261
+ .fl-pin-less {
1262
+ position: relative;
1263
+ height: 32px;
1264
+ padding: 0 12px;
1265
+ font-size: 13px;
1266
+ border-radius: 16px;
1267
+ }
1268
+
1269
+ .fl-pin-less::after {
1270
+ position: absolute;
1271
+ inset: -6px 0;
1272
+ content: '';
1273
+ }
1274
+
1153
1275
  /* rows (container queries cannot restyle .fl-root itself) */
1154
- .fl-row {
1276
+ .fl-row,
1277
+ .fl-pin {
1155
1278
  --fl-indent: 16px;
1156
1279
  --fl-row-h: 56px;
1157
1280
  --fl-cols: 44px minmax(0, 1fr) auto;
@@ -1221,6 +1344,7 @@
1221
1344
 
1222
1345
  .fl-arrow,
1223
1346
  .fl-arrow-placeholder,
1347
+ .fl-pin-arrow,
1224
1348
  .fl-count {
1225
1349
  display: none;
1226
1350
  }
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "vitepress-plugin-filelist",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "packageManager": "pnpm@11.25.0",
5
+ "engines": {
6
+ "node": "^20.19.0 || >=22.12.0"
7
+ },
5
8
  "type": "module",
6
9
  "description": "OpenList file browser for VitePress: tree view, batch ZIP download, i18n, password and token support.",
7
10
  "author": "nrjycyd",
8
11
  "license": "MIT",
9
- "homepage": "https://github.com/nrjycyd/vitepress-plugin-filelist#readme",
12
+ "homepage": "https://nrjycyd.github.io/vitepress-plugin-filelist/",
10
13
  "repository": {
11
14
  "type": "git",
12
15
  "url": "git+https://github.com/nrjycyd/vitepress-plugin-filelist.git"
@@ -44,17 +47,23 @@
44
47
  "test:watch": "vitest",
45
48
  "pack:check": "npm pack --dry-run",
46
49
  "test:e2e": "playwright test",
47
- "e2e:site": "pnpm run build && pnpm --dir demo install --force && pnpm --dir demo run build:e2e"
50
+ "e2e:site": "pnpm run build && pnpm --dir demo install --force && pnpm --dir demo run build:e2e",
51
+ "test:compat": "node scripts/compat.mjs"
48
52
  },
49
53
  "peerDependencies": {
50
- "vitepress": "^1.0.0 || ^2.0.0-alpha.0",
54
+ "vitepress": "^1.6.0 || >=2.0.0-alpha.18",
55
+ "vitepress-tuck": ">=0.12.2",
51
56
  "vue": "^3.5.0"
52
57
  },
58
+ "peerDependenciesMeta": {
59
+ "vitepress-tuck": {
60
+ "optional": true
61
+ }
62
+ },
53
63
  "dependencies": {
54
64
  "client-zip": "^2.5.1",
55
65
  "dompurify": "^3.4.17",
56
- "markdown-it": "^14.3.3",
57
- "vitepress-tuck": "^0.12.2"
66
+ "markdown-it": "^14.3.3"
58
67
  },
59
68
  "devDependencies": {
60
69
  "@playwright/test": "1.63.0",
@@ -67,6 +76,7 @@
67
76
  "unplugin-vue": "^8.0.1",
68
77
  "unrun": "^0.3.1",
69
78
  "vitepress": "^2.0.0-alpha.21",
79
+ "vitepress-tuck": "^0.12.2",
70
80
  "vitest": "^5.1.0",
71
81
  "vue": "^3.5.0",
72
82
  "vue-tsc": "^2.2.0"