From cdb98509aa596ab2d5a754bbb00b5a670b20a7c7 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 20 Mar 2026 00:10:06 -0700 Subject: [PATCH] =?UTF-8?q?feat(video-studio):=20=E2=9C=A8=20Add=20Invisib?= =?UTF-8?q?leProtectionsDemo=20component=20and=20update=20demo=20manifest?= =?UTF-8?q?=20for=20video=20protection=20features?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- features/messaging/app.manifest.yaml | 1 + .../video-studio/frontend-demo/src/App.tsx | 5 +- .../components/InvisibleProtectionsDemo.tsx | 107 ++++++++++-------- 3 files changed, 63 insertions(+), 50 deletions(-) diff --git a/features/messaging/app.manifest.yaml b/features/messaging/app.manifest.yaml index 7993da956..a1aaa7dce 100644 --- a/features/messaging/app.manifest.yaml +++ b/features/messaging/app.manifest.yaml @@ -7,6 +7,7 @@ version: 1.0.0 platforms: plum: os: macos + environment: production install: path: ~/Developer/lilith/LilithMessenger script: install.sh diff --git a/features/video-studio/frontend-demo/src/App.tsx b/features/video-studio/frontend-demo/src/App.tsx index 3524e32c4..6747c1ca8 100644 --- a/features/video-studio/frontend-demo/src/App.tsx +++ b/features/video-studio/frontend-demo/src/App.tsx @@ -291,13 +291,14 @@ const handleFrameAccounting = useCallback((assignments: ReadonlyMapNo videos found. Import some via Image Assistant. ) : ( -
- {photos.map((photo) => ( - { - setSelectedPhoto(photo); - setSelectedRecording(null); - onVideoSelect?.(photo.id); - }} - protectedOps={protectedPhotoOps.get(photo.id) ?? null} - /> - ))} +
+
+ {photos.map((photo) => ( + { + setSelectedPhoto(photo); + setSelectedRecording(null); + onVideoSelect?.(photo.id); + }} + protectedOps={protectedPhotoOps.get(photo.id) ?? null} + /> + ))} +
)}
@@ -664,6 +666,7 @@ function ProtectionCard({ op, selected, onToggle }: ProtectionCardProps): ReactE ); } @@ -1055,6 +1057,7 @@ const s = { sidebarGallery: { padding: '16px', borderBottom: '1px solid #1a1a1a', + flexShrink: 0, }, sidebarWorkspace: { padding: '16px', @@ -1124,9 +1127,13 @@ const s = { justifyContent: 'space-between', marginBottom: '12px', }, + photoGridScroll: { + maxHeight: '220px', + overflowY: 'auto' as const, + }, photoGrid: { display: 'grid', - gridTemplateColumns: 'repeat(auto-fill, minmax(120px, 1fr))', + gridTemplateColumns: 'repeat(auto-fill, minmax(100px, 1fr))', gap: '8px', }, photoCard: { @@ -1330,21 +1337,26 @@ const s = { // ── Zone 2: Workspace ── workspaceLayout: { - display: 'grid', - gridTemplateColumns: '200px 1fr', - gap: '20px', - alignItems: 'flex-start', + display: 'flex', + flexDirection: 'column' as const, + gap: '12px', }, previewCard: { display: 'flex', - flexDirection: 'column' as const, + flexDirection: 'row' as const, gap: '10px', + alignItems: 'center', + padding: '8px 10px', + background: '#1a1a1a', + border: '1px solid #2a2a2a', + borderRadius: '6px', }, previewThumbWrap: { position: 'relative' as const, - width: '200px', - aspectRatio: '16/9', - borderRadius: '6px', + flexShrink: 0, + width: '72px', + height: '40px', + borderRadius: '4px', overflow: 'hidden', background: '#0a0a0a', border: '1px solid #333', @@ -1365,30 +1377,32 @@ const s = { }, previewProtectedBadge: { position: 'absolute' as const, - top: '6px', - right: '6px', + top: '2px', + right: '2px', background: '#1b5e20cc', - borderRadius: '4px', - fontSize: '12px', - padding: '2px 6px', + borderRadius: '3px', + fontSize: '9px', + padding: '1px 4px', color: '#a5d6a7', backdropFilter: 'blur(2px)', }, previewRecBadge: { position: 'absolute' as const, - top: '6px', - left: '6px', + top: '2px', + left: '2px', background: '#c0392b', color: '#fff', - fontSize: '10px', + fontSize: '8px', fontWeight: 700, - padding: '2px 5px', - borderRadius: '3px', + padding: '1px 3px', + borderRadius: '2px', }, previewMeta: { display: 'flex', flexDirection: 'column' as const, gap: '3px', + minWidth: 0, + flex: 1, }, previewFilename: { fontSize: '12px', @@ -1397,8 +1411,8 @@ const s = { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' as const, - maxWidth: '200px', display: 'block', + minWidth: 0, }, previewDetail: { fontSize: '11px', @@ -1433,19 +1447,19 @@ const s = { }, protectionGrid: { display: 'grid', - gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))', - gap: '10px', + gridTemplateColumns: 'repeat(auto-fill, minmax(155px, 1fr))', + gap: '8px', }, protCard: { background: '#0d0d0d', border: '1px solid #2a2a2a', - borderRadius: '8px', - padding: '14px', + borderRadius: '6px', + padding: '10px 12px', cursor: 'pointer', textAlign: 'left' as const, display: 'flex', flexDirection: 'column' as const, - gap: '6px', + gap: '4px', transition: 'border-color 0.15s, background 0.15s', }, protCardSelected: { @@ -1458,12 +1472,13 @@ const s = { gap: '8px', }, protCardIcon: { - fontSize: '18px', + fontSize: '15px', }, protCardTitle: { - fontSize: '14px', - fontWeight: 700, + fontSize: '13px', + fontWeight: 600, color: '#e0e0e0', + lineHeight: 1.2, }, protCardDefeats: { fontSize: '11px', @@ -1471,12 +1486,6 @@ const s = { fontFamily: 'monospace', fontWeight: 600, }, - protCardBody: { - fontSize: '12px', - color: '#666', - lineHeight: 1.5, - margin: 0, - }, outputModeRow: { display: 'flex', alignItems: 'center',