UNPKG

express-file-index

Version:
419 lines (387 loc) 8.23 kB
body[data-color-mode='dark'] { --c-readme-bg: hsl(0, 0%, 12%); --c-bg-entry-hover: hsl(0, 0%, 15%); --c-preview-bg: hsla(0, 0%, 10%, 70%); --c-preview-card-bg: hsl(0, 0%, 12%); } body[data-color-mode='light'] { --c-readme-bg: hsl(0, 0%, 97%); --c-bg-entry-hover: hsl(0, 0%, 92%); --c-preview-bg: hsla(0, 0%, 95%, 70%); --c-preview-card-bg: hsl(0, 0%, 97%); } .header { margin-bottom: 24px; } .ancestors { color: var(--c-text-muted); margin-bottom: 4px; margin-left: -4px; } .ancestors .link { text-decoration: none; color: var(--c-text-muted); font-size: 15px; border: 1px solid transparent; padding: 3px 4px; border-radius: 4px; line-height: 1.4; } .ancestors .link:hover, .ancestors .link:focus-visible { background: var(--c-bg-entry-hover); border: 1px solid var(--c-border); color: var(--c-text-normal); text-decoration: none; } .ancestors .sep { color: var(--c-text-normal); padding: 0px 2px; } .header .actions { display: flex; gap: 12px; margin-top: 12px; flex-wrap: wrap; } .title { font-size: 26px; font-weight: bold; } .colHeaders, .files .entry { display: flex; align-items: center; padding: 0px 8px; gap: 8px; font-size: 14px; } .colHeaders { color: var(--c-text-muted); padding-bottom: 8px; border-bottom: 1px solid var(--c-border); margin-bottom: 4px; font-size: 12px; } .colHeaders > * { display: flex; gap: 4px; align-items: center; } .colHeaders .icon { font-size: 18px; font-family: 'Material Symbols Outlined'; margin: -8px 0px; user-select: none; } .files .entry { color: var(--c-text-normal); text-decoration: none; height: 36px; border-radius: 8px; border: 1px solid transparent; user-select: none; } .files .entry:hover, .files .entry:focus-visible { background: var(--c-bg-entry-hover); border: 1px solid var(--c-border); color: var(--c-text-normal); text-decoration: none; } .colHeaders *, .files .entry * { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .colHeaders > .icon, .files .entry > .icon { width: 36px; flex-shrink: 0; text-align: center; font-family: 'Material Symbols Outlined'; font-size: 24px; color: var(--c-text-secondary); } .colHeaders .name, .files .entry .name { flex-grow: 1; } .files .entry .name { display: flex; flex-direction: column; gap: 2px; } .files .entry .nameLore { display: none; font-size: 12px; color: var(--c-text-secondary); gap: 4px; } .colHeaders .modified, .files .entry .modified { width: 150px; flex-shrink: 0; } .colHeaders .size, .files .entry .size { width: 100px; flex-shrink: 0; } .files .entry .icon.folder { color: var(--c-icon-folder); } .files .entry .icon.text { color: var(--c-icon-text); } .files .entry .icon.image { color: var(--c-icon-image); } .files .entry .icon.video { color: var(--c-icon-video); } .files .entry .icon.audio { color: var(--c-icon-audio); } .files .entry .icon.file { color: var(--c-icon-file); } .files .entry .modified, .files .entry .size { color: var(--c-text-secondary); } #readme { margin: 16px -8px 0px -8px; border-radius: 16px; background: var(--c-readme-bg); border: 1px solid var(--c-border); overflow: hidden; } #readme .top { display: flex; padding: 8px 16px; align-items: center; border: 1px solid var(--c-border); gap: 12px; border-radius: 0px 0px 16px 16px; margin: -1px; } #readme .top .icon { font-size: 24px; font-family: 'Material Symbols Outlined'; color: var(--c-text-muted); flex-shrink: 0; user-select: none; } #readme .body { padding: 16px; } #readme .body > *:first-child { margin-top: 0px; } #readme .body > *:last-child { margin-bottom: 0px; } .footer { font-size: 12px; color: var(--c-text-muted); text-align: center; margin-top: 24px; } #preview { position: fixed; top: 0; left: 0; width: 100%; height: 100%; margin: 0; padding: 0; border: none; display: flex; flex-direction: column; background: var(--c-preview-bg); backdrop-filter: blur(8px); z-index: 101; opacity: 0; transition: opacity 0.1s ease-in-out; } #preview.visible { opacity: 1; } #preview .topbar { display: flex; align-items: center; padding: 16px 16px 32px 16px; margin-bottom: -32px; gap: 16px; flex-shrink: 0; } #preview .topbar .details { display: flex; flex-direction: column; gap: 2px; flex-grow: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; min-width: 0px; } #previewFileName { font-size: 18px; font-weight: bold; color: var(--c-text-normal); } #previewFileDetails { font-size: 12px; color: var(--c-text-secondary); } #previewContent { padding: 16px; display: flex; flex-direction: column; align-items: center; justify-content: center; flex-grow: 1; overflow: hidden; filter: drop-shadow(0px 0px 16px rgba(0, 0, 0, 0.2)); } #previewContent .card { border-radius: 16px; max-height: 100%; overflow: hidden; background: var(--c-preview-card-bg); border: 1px solid var(--c-border); } #previewContent .card > .body { max-width: 100%; max-height: 100%; overflow: auto; padding: 20px 16px; } #previewContent .card > .body > *:first-child { margin-top: 0px; } #previewContent .card > .body > *:last-child { margin-bottom: 0px; } #previewContent .card.column > .body { display: flex; flex-direction: column; align-items: center; gap: 8px; } #previewContent .card.text, #previewContent .card.html { max-width: 1000px; } #previewContent .card.text > .body { background: none; border: none; margin: 0px; border-radius: 0px; font-family: 'Roboto Mono', monospace; white-space: pre; display: block; padding: 12px; } #previewContent .card.image > .body, #previewContent .card.video > .body { padding: 0px; object-fit: contain; overflow: auto; width: 100%; height: 100%; position: relative; } #previewContent .card.audio { max-width: 500px; width: 100%; display: flex; flex-direction: column; flex-shrink: 1; } #previewContent .card.audio > .body .controls { display: flex; gap: 12px; margin-top: 8px; width: 100%; justify-content: center; } #previewContent .card.audio > .body .progress { width: 100%; max-width: 500px; } #previewContent .card.audio > .body .times { display: flex; font-size: 12px; color: var(--c-text-secondary); } #previewContent .card.audio > .body .times .grow { flex-grow: 1; } #previewContent .card.video > .body .overlay { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; display: flex; align-items: flex-end; justify-content: center; padding: 12px; opacity: 0; pointer-events: none; transition: opacity 0.2s ease-in-out; } #previewContent .card.video > .body .overlay.visible { opacity: 1; pointer-events: all; transition: none; } #previewContent .card.video > .body .controls { display: flex; align-items: center; gap: 12px; width: 100%; } #previewContent .card.video > .body .controls .progress { flex-grow: 1; display: flex; align-items: center; gap: 8px; height: 36px; padding: 0px 12px; background: var(--c-btn-secondary-bg); border-radius: 8px; font-size: 12px; } #previewContent video, #previewContent img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; } @media (max-width: 600px) { .container { padding: 24px 8px; } .colHeaders, .files .entry .modified, .files .entry .size { display: none; } .files .entry { height: 48px; } .files .entry .nameLore { display: flex; } #preview .topbar { padding: 16px 8px 32px 8px; } #previewContent { padding: 16px 8px 8px 8px; } }