Yang2001 commited on
Commit
740f31d
·
1 Parent(s): 604ad14

feat: replace example images with custom assets and add auto-scrolling marquee

Browse files
.gitattributes CHANGED
@@ -106,3 +106,8 @@ assets/hdri/night.exr filter=lfs diff=lfs merge=lfs -text
106
  assets/hdri/sunrise.exr filter=lfs diff=lfs merge=lfs -text
107
  assets/hdri/sunset.exr filter=lfs diff=lfs merge=lfs -text
108
  assets/teaser.webp filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
106
  assets/hdri/sunrise.exr filter=lfs diff=lfs merge=lfs -text
107
  assets/hdri/sunset.exr filter=lfs diff=lfs merge=lfs -text
108
  assets/teaser.webp filter=lfs diff=lfs merge=lfs -text
109
+ assets/images/0_img.png filter=lfs diff=lfs merge=lfs -text
110
+ assets/images/7_img.png filter=lfs diff=lfs merge=lfs -text
111
+ assets/images/*.png filter=lfs diff=lfs merge=lfs -text
112
+ assets/images/*.jpg filter=lfs diff=lfs merge=lfs -text
113
+ assets/images/*.webp filter=lfs diff=lfs merge=lfs -text
assets/images/0_img.png ADDED

Git LFS Details

  • SHA256: 6959e517ee4bc6852791f69bd6ece696a435abcda8321727c07db8daf7f457cf
  • Pointer size: 133 Bytes
  • Size of remote file: 14 MB
assets/images/10_img.webp ADDED

Git LFS Details

  • SHA256: 9558307682a1e723f86291af377f0b53970c0d301304c1f43dec741fedc209d7
  • Pointer size: 131 Bytes
  • Size of remote file: 118 kB
assets/images/11_img.png ADDED

Git LFS Details

  • SHA256: fbef7bb66e4ffa0cf4866399cf2b0841c56239086772f2fedea87a76718dde4d
  • Pointer size: 132 Bytes
  • Size of remote file: 8.41 MB
assets/images/12_img.png ADDED

Git LFS Details

  • SHA256: c8a4b4e92b4fa6a8eeec352f25af3f66b65ee0c743ad483b727404c9cb9a6914
  • Pointer size: 132 Bytes
  • Size of remote file: 7.96 MB
assets/images/17_img.png ADDED

Git LFS Details

  • SHA256: 134136dd4086cfc1b887ab0a134c4a2b906223762a0d5959a8b90cc68f11f4f0
  • Pointer size: 132 Bytes
  • Size of remote file: 1.49 MB
assets/images/1_img.png ADDED

Git LFS Details

  • SHA256: fdd82d60b7ec11e6d5699df29693d8ab538f9dab4b04e3f2abaa59ccd7b4709a
  • Pointer size: 131 Bytes
  • Size of remote file: 226 kB
assets/images/21_img.png ADDED

Git LFS Details

  • SHA256: 5793b52a21507a5cdd661f8d87681b303e420057a8c65aaa16e0560409a7a34e
  • Pointer size: 131 Bytes
  • Size of remote file: 725 kB
assets/images/3_img.webp ADDED

Git LFS Details

  • SHA256: d15269d0c0b427eabcca39d6d093cc2cfdaab19cb8a40b6158988a70a91ffe45
  • Pointer size: 131 Bytes
  • Size of remote file: 207 kB
assets/images/4_img.png ADDED

Git LFS Details

  • SHA256: 73d09b20fb4e7ab6513a3ac99f7c87166ec655a731bd1be9b14cec6aef36c4ef
  • Pointer size: 132 Bytes
  • Size of remote file: 1.51 MB
assets/images/5_img.webp ADDED

Git LFS Details

  • SHA256: a319ace2549835da92a6ffa5db73eebd7fce29079e5865cb32dfbdac21d9b900
  • Pointer size: 131 Bytes
  • Size of remote file: 100 kB
assets/images/6_img.png ADDED

Git LFS Details

  • SHA256: e8afc2d5a553e965ae13671eaeb198f807c5e6021a6f96b1d8f900b056b70d9d
  • Pointer size: 133 Bytes
  • Size of remote file: 10 MB
assets/images/7_img.png ADDED

Git LFS Details

  • SHA256: c4d0c266c01dc8e24cf33bb0d1155a18bd851ea09b6de914e79a78f021024d5b
  • Pointer size: 133 Bytes
  • Size of remote file: 11.2 MB
assets/images/8_img.png ADDED

Git LFS Details

  • SHA256: adba4a0efaad6e22b667b516a2724d62a40b09726578cd71dc3b2abcfcb7c5a2
  • Pointer size: 131 Bytes
  • Size of remote file: 438 kB
assets/images/9_img.png ADDED

Git LFS Details

  • SHA256: d7e716abe8f8895080f562d1dc26b14fa0e20a05aa5beb2770c6fb3b87b3476a
  • Pointer size: 131 Bytes
  • Size of remote file: 594 kB
assets/images/s_13_img.jpg ADDED

Git LFS Details

  • SHA256: d63c45cf9f39b9e410a3a700a8deefe295654a1437d238c0b61a37fbe2752adc
  • Pointer size: 132 Bytes
  • Size of remote file: 1.36 MB
assets/images/s_14_img.jpg ADDED

Git LFS Details

  • SHA256: f199f6f12d8f363fe62bfb5cf6927f27864581debd8df68bf30c3dacdde9e301
  • Pointer size: 131 Bytes
  • Size of remote file: 182 kB
assets/images/s_15_img.png ADDED

Git LFS Details

  • SHA256: 68e9363e8d93dddfc9aaeb4ee52dcbec37cb423c75981d29da4eff370575846a
  • Pointer size: 132 Bytes
  • Size of remote file: 2.29 MB
assets/images/s_16_img.png ADDED

Git LFS Details

  • SHA256: a90ee0608ad7137ad0aac7e4dadf5f8909110673fed663df276e955fb10e05fb
  • Pointer size: 132 Bytes
  • Size of remote file: 2.41 MB
assets/images/s_18_img.png ADDED

Git LFS Details

  • SHA256: 4019f8e13be59da80e3bdcc2c359b04f514ee04a7889c9e66ec621429af9a236
  • Pointer size: 131 Bytes
  • Size of remote file: 769 kB
assets/images/s_19_img.png ADDED

Git LFS Details

  • SHA256: 3c97c1f74d30d4f7963f42b498de205c984e2e287d2ef5f0d225b00c5c6a2d2b
  • Pointer size: 131 Bytes
  • Size of remote file: 720 kB
assets/images/s_20_img.webp ADDED

Git LFS Details

  • SHA256: f9fb089c74f8ec90451788799566aa80e16168e7cb1770d48b0e74e142e8357c
  • Pointer size: 131 Bytes
  • Size of remote file: 885 kB
index.html CHANGED
@@ -68,6 +68,7 @@
68
 
69
  .main-content {
70
  flex: 1;
 
71
  display: flex;
72
  flex-direction: column;
73
  position: relative;
@@ -415,17 +416,32 @@
415
  padding: 1.5rem 2rem;
416
  border-top: 1px solid var(--border);
417
  background: var(--surface);
 
418
  }
419
 
420
  .examples-grid {
421
  display: flex;
 
422
  gap: 1rem;
423
- overflow-x: auto;
424
  padding-bottom: 0.5rem;
425
  }
 
 
 
 
 
 
 
 
 
 
 
 
426
 
427
  .example-item {
428
- flex: 0 0 100px;
 
429
  aspect-ratio: 1/1;
430
  border-radius: var(--radius-md);
431
  overflow: hidden;
@@ -1073,28 +1089,56 @@
1073
  function loadSamples() {
1074
  const grid = document.getElementById('examples-grid');
1075
  const samples = [
1076
- 'assets/example_image/0a34fae7ba57cb8870df5325b9c30ea474def1b0913c19c596655b85a79fdee4.webp',
1077
- 'assets/example_image/0e4984a9b3765ce80e9853443f9319ecedf90885c74b56cccfebc09402740f8a.webp',
1078
- 'assets/example_image/130c2b18f1651a70f8aa15b2c99f8dba29bb943044d92871f9223bd3e989e8b1.webp',
1079
- 'assets/example_image/22a868bac8e62511fccd2bc82ed31ae77ed31ae2a8a149be7150957f11b30c9b.webp',
1080
- 'assets/example_image/3903b87907a6b4947006e6fc7c0c64f40cd98932a02bf0ecf7d6dfae776f3a38.webp',
1081
- 'assets/example_image/4bc7abe209c8673dd3766ee4fad14d40acbed02d118e7629f645c60fd77313f1.webp'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1082
  ];
1083
-
1084
- samples.forEach(path => {
 
 
 
 
1085
  const div = document.createElement('div');
1086
  div.className = 'example-item';
1087
- div.innerHTML = `<img src="${path}">`;
1088
  div.onclick = async () => {
1089
  showLoading();
1090
  const res = await fetch(path);
1091
  const blob = await res.blob();
1092
- const file = new File([blob], "sample.webp", { type: "image/webp" });
 
 
 
1093
  await handleImageUpload(file);
1094
  hideLoading();
1095
  };
1096
- grid.appendChild(div);
1097
- });
 
 
 
 
 
 
1098
  }
1099
 
1100
  // Helpers
 
68
 
69
  .main-content {
70
  flex: 1;
71
+ min-width: 0;
72
  display: flex;
73
  flex-direction: column;
74
  position: relative;
 
416
  padding: 1.5rem 2rem;
417
  border-top: 1px solid var(--border);
418
  background: var(--surface);
419
+ overflow: hidden;
420
  }
421
 
422
  .examples-grid {
423
  display: flex;
424
+ flex-wrap: nowrap;
425
  gap: 1rem;
426
+ overflow: hidden;
427
  padding-bottom: 0.5rem;
428
  }
429
+ .examples-track {
430
+ display: flex;
431
+ gap: 1rem;
432
+ animation: marquee-scroll 180s linear infinite;
433
+ }
434
+ .examples-track:hover {
435
+ animation-play-state: paused;
436
+ }
437
+ @keyframes marquee-scroll {
438
+ 0% { transform: translateX(0); }
439
+ 100% { transform: translateX(-50%); }
440
+ }
441
 
442
  .example-item {
443
+ flex: 0 0 140px;
444
+ min-width: 140px;
445
  aspect-ratio: 1/1;
446
  border-radius: var(--radius-md);
447
  overflow: hidden;
 
1089
  function loadSamples() {
1090
  const grid = document.getElementById('examples-grid');
1091
  const samples = [
1092
+ 'assets/images/0_img.png',
1093
+ 'assets/images/1_img.png',
1094
+ 'assets/images/3_img.webp',
1095
+ 'assets/images/4_img.png',
1096
+ 'assets/images/5_img.webp',
1097
+ 'assets/images/6_img.png',
1098
+ 'assets/images/7_img.png',
1099
+ 'assets/images/8_img.png',
1100
+ 'assets/images/9_img.png',
1101
+ 'assets/images/10_img.webp',
1102
+ 'assets/images/11_img.png',
1103
+ 'assets/images/12_img.png',
1104
+ 'assets/images/17_img.png',
1105
+ 'assets/images/21_img.png',
1106
+ 'assets/images/s_13_img.jpg',
1107
+ 'assets/images/s_14_img.jpg',
1108
+ 'assets/images/s_15_img.png',
1109
+ 'assets/images/s_16_img.png',
1110
+ 'assets/images/s_18_img.png',
1111
+ 'assets/images/s_19_img.png',
1112
+ 'assets/images/s_20_img.webp'
1113
  ];
1114
+
1115
+ // Create track element for seamless loop
1116
+ const track = document.createElement('div');
1117
+ track.className = 'examples-track';
1118
+
1119
+ function createItem(path) {
1120
  const div = document.createElement('div');
1121
  div.className = 'example-item';
1122
+ div.innerHTML = `<img src="${path}" draggable="false">`;
1123
  div.onclick = async () => {
1124
  showLoading();
1125
  const res = await fetch(path);
1126
  const blob = await res.blob();
1127
+ const ext = path.split('.').pop().toLowerCase();
1128
+ const mimeMap = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', webp: 'image/webp' };
1129
+ const mime = mimeMap[ext] || 'image/png';
1130
+ const file = new File([blob], path.split('/').pop(), { type: mime });
1131
  await handleImageUpload(file);
1132
  hideLoading();
1133
  };
1134
+ return div;
1135
+ }
1136
+
1137
+ // Add items twice for seamless loop
1138
+ samples.forEach(path => track.appendChild(createItem(path)));
1139
+ samples.forEach(path => track.appendChild(createItem(path)));
1140
+
1141
+ grid.appendChild(track);
1142
  }
1143
 
1144
  // Helpers