Compare commits

...

8 Commits

Author SHA1 Message Date
d3f2ea0f08 Fix Blossom view layout overflow (v0.37.1)
Some checks failed
Go / build-and-release (push) Has been cancelled
- Use box-sizing instead of explicit width to fix right edge overflow

Files modified:
- pkg/version/version: Bump to v0.37.1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 13:15:13 +01:00
3f07e47ffb Fix Blossom view right edge overflow 2025-12-25 13:10:44 +01:00
aea8fd31e7 Improve Blossom UI with thumbnails and full-width layout (v0.37.0)
Some checks failed
Go / build-and-release (push) Has been cancelled
- Make Blossom view use full available width
- Add "Upload new files" label with Select Files button on right
- Show image/video thumbnails in file list (48x48px)
- Add emoji icons for audio (🎵) and documents (📄)
- Show full hash on screens > 720px, truncated on smaller

Files modified:
- app/web/src/BlossomView.svelte: UI layout and thumbnail changes
- app/web/dist/*: Rebuilt bundle

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 13:07:25 +01:00
0de4137a10 Fix embedded web UI deployment by tracking dist assets (v0.36.23)
Some checks failed
Go / build-and-release (push) Has been cancelled
- Track bundle.js, bundle.css, and all dist assets in git
- Previously only index.html was tracked, breaking VPS deployments
- Remove debug logging from BlossomView

Files modified:
- app/web/dist/*: Add all build assets to git tracking
- app/web/src/BlossomView.svelte: Remove debug code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 12:44:14 +01:00
042acd9ed2 Track all dist assets and remove debug logging 2025-12-25 12:38:54 +01:00
dddf1ac568 Add bundle.js to git tracking for embedded web UI 2025-12-25 12:34:48 +01:00
d6f2a0f7cf Add visible debug bar for role detection 2025-12-25 12:32:40 +01:00
7c60b63df6 Add debug logging for Blossom admin role detection (v0.36.22)
Some checks failed
Go / build-and-release (push) Has been cancelled
- Add console.log to trace currentEffectiveRole value in BlossomView
- Add HTML comment showing role and isAdmin values for debugging

Files modified:
- app/web/src/BlossomView.svelte: Add debug logging for role detection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 12:30:15 +01:00
8 changed files with 246 additions and 16 deletions

87
app/web/dist/bundle.css vendored Normal file

File diff suppressed because one or more lines are too long

24
app/web/dist/bundle.js vendored Normal file

File diff suppressed because one or more lines are too long

1
app/web/dist/bundle.js.map vendored Normal file

File diff suppressed because one or more lines are too long

BIN
app/web/dist/favicon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

69
app/web/dist/global.css vendored Normal file
View File

@@ -0,0 +1,69 @@
html,
body {
position: relative;
width: 100%;
height: 100%;
}
body {
color: #333;
margin: 0;
padding: 8px;
box-sizing: border-box;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu,
Cantarell, "Helvetica Neue", sans-serif;
}
a {
color: rgb(0, 100, 200);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:visited {
color: rgb(0, 80, 160);
}
label {
display: block;
}
input,
button,
select,
textarea {
font-family: inherit;
font-size: inherit;
-webkit-padding: 0.4em 0;
padding: 0.4em;
margin: 0 0 0.5em 0;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 2px;
}
input:disabled {
color: #ccc;
}
button {
color: #333;
background-color: #f4f4f4;
outline: none;
}
button:disabled {
color: #999;
}
button:not(:disabled):active {
background-color: #ddd;
}
button:focus {
border-color: #666;
}

BIN
app/web/dist/orly.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 KiB

View File

@@ -159,10 +159,10 @@
function getMimeIcon(mimeType) {
const category = getMimeCategory(mimeType);
switch (category) {
case "image": return "";
case "video": return "";
case "audio": return "";
default: return "";
case "image": return "🖼️";
case "video": return "🎬";
case "audio": return "🎵";
default: return "📄";
}
}
@@ -464,6 +464,7 @@
{#if !isAdminView && !selectedAdminUser}
<div class="upload-section">
<span class="upload-label">Upload new files</span>
<input
type="file"
multiple
@@ -471,9 +472,6 @@
on:change={handleFileSelect}
class="file-input-hidden"
/>
<button class="select-btn" on:click={triggerFileInput} disabled={isUploading}>
Select Files
</button>
{#if selectedFiles.length > 0}
<span class="selected-count">{selectedFiles.length} file(s) selected</span>
<button
@@ -484,6 +482,9 @@
{isUploading ? uploadProgress : "Upload"}
</button>
{/if}
<button class="select-btn" on:click={triggerFileInput} disabled={isUploading}>
Select Files
</button>
</div>
{/if}
@@ -552,12 +553,19 @@
role="button"
tabindex="0"
>
<div class="blob-icon">
{getMimeIcon(blob.type)}
<div class="blob-thumbnail">
{#if getMimeCategory(blob.type) === "image"}
<img src={getBlobUrl(blob)} alt="" class="thumbnail-img" />
{:else if getMimeCategory(blob.type) === "video"}
<video src={getBlobUrl(blob)} class="thumbnail-video" muted preload="metadata"></video>
{:else}
<span class="thumbnail-icon">{getMimeIcon(blob.type)}</span>
{/if}
</div>
<div class="blob-info">
<div class="blob-hash" title={blob.sha256}>
{truncateHash(blob.sha256)}
<span class="hash-full">{blob.sha256}</span>
<span class="hash-truncated">{truncateHash(blob.sha256)}</span>
</div>
<div class="blob-meta">
<span class="blob-size">{formatSize(blob.size)}</span>
@@ -678,7 +686,7 @@
<style>
.blossom-view {
padding: 1em;
max-width: 900px;
box-sizing: border-box;
}
.header-section {
@@ -777,6 +785,12 @@
flex-wrap: wrap;
}
.upload-label {
color: var(--text-color);
font-size: 0.95em;
flex: 1;
}
.file-input-hidden {
display: none;
}
@@ -861,10 +875,27 @@
background-color: var(--sidebar-bg);
}
.blob-icon {
.blob-thumbnail {
width: 48px;
height: 48px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: var(--bg-color);
border-radius: 4px;
overflow: hidden;
}
.thumbnail-img,
.thumbnail-video {
width: 100%;
height: 100%;
object-fit: cover;
}
.thumbnail-icon {
font-size: 1.5em;
width: 2em;
text-align: center;
}
.blob-info {
@@ -878,6 +909,14 @@
color: var(--text-color);
}
.hash-full {
display: inline;
}
.hash-truncated {
display: none;
}
.blob-meta {
display: flex;
gap: 1em;
@@ -1263,6 +1302,16 @@
color: var(--text-color);
}
@media (max-width: 720px) {
.hash-full {
display: none;
}
.hash-truncated {
display: inline;
}
}
@media (max-width: 600px) {
.blob-item {
flex-wrap: wrap;
@@ -1271,7 +1320,7 @@
.blob-date {
width: 100%;
margin-top: 0.5em;
padding-left: 3em;
padding-left: 3.5em;
}
.modal-footer {

View File

@@ -1 +1 @@
v0.36.21
v0.37.1