Spaces:
Running on Zero
Running on Zero
feat: replace example images with custom assets and add auto-scrolling marquee
Browse files- .gitattributes +5 -0
- assets/images/0_img.png +3 -0
- assets/images/10_img.webp +3 -0
- assets/images/11_img.png +3 -0
- assets/images/12_img.png +3 -0
- assets/images/17_img.png +3 -0
- assets/images/1_img.png +3 -0
- assets/images/21_img.png +3 -0
- assets/images/3_img.webp +3 -0
- assets/images/4_img.png +3 -0
- assets/images/5_img.webp +3 -0
- assets/images/6_img.png +3 -0
- assets/images/7_img.png +3 -0
- assets/images/8_img.png +3 -0
- assets/images/9_img.png +3 -0
- assets/images/s_13_img.jpg +3 -0
- assets/images/s_14_img.jpg +3 -0
- assets/images/s_15_img.png +3 -0
- assets/images/s_16_img.png +3 -0
- assets/images/s_18_img.png +3 -0
- assets/images/s_19_img.png +3 -0
- assets/images/s_20_img.webp +3 -0
- index.html +58 -14
.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
|
assets/images/10_img.webp
ADDED
|
Git LFS Details
|
assets/images/11_img.png
ADDED
|
Git LFS Details
|
assets/images/12_img.png
ADDED
|
Git LFS Details
|
assets/images/17_img.png
ADDED
|
Git LFS Details
|
assets/images/1_img.png
ADDED
|
Git LFS Details
|
assets/images/21_img.png
ADDED
|
Git LFS Details
|
assets/images/3_img.webp
ADDED
|
Git LFS Details
|
assets/images/4_img.png
ADDED
|
Git LFS Details
|
assets/images/5_img.webp
ADDED
|
Git LFS Details
|
assets/images/6_img.png
ADDED
|
Git LFS Details
|
assets/images/7_img.png
ADDED
|
Git LFS Details
|
assets/images/8_img.png
ADDED
|
Git LFS Details
|
assets/images/9_img.png
ADDED
|
Git LFS Details
|
assets/images/s_13_img.jpg
ADDED
|
Git LFS Details
|
assets/images/s_14_img.jpg
ADDED
|
Git LFS Details
|
assets/images/s_15_img.png
ADDED
|
Git LFS Details
|
assets/images/s_16_img.png
ADDED
|
Git LFS Details
|
assets/images/s_18_img.png
ADDED
|
Git LFS Details
|
assets/images/s_19_img.png
ADDED
|
Git LFS Details
|
assets/images/s_20_img.webp
ADDED
|
Git LFS Details
|
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
|
| 424 |
padding-bottom: 0.5rem;
|
| 425 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 426 |
|
| 427 |
.example-item {
|
| 428 |
-
flex: 0 0
|
|
|
|
| 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/
|
| 1077 |
-
'assets/
|
| 1078 |
-
'assets/
|
| 1079 |
-
'assets/
|
| 1080 |
-
'assets/
|
| 1081 |
-
'assets/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1082 |
];
|
| 1083 |
-
|
| 1084 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
|
|
|
|
|
|
|
|
|
| 1093 |
await handleImageUpload(file);
|
| 1094 |
hideLoading();
|
| 1095 |
};
|
| 1096 |
-
|
| 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
|