From ca47052768a5eb22de1669c7896d6cc293529596 Mon Sep 17 00:00:00 2001 From: th Date: Tue, 14 Apr 2026 18:22:02 +0200 Subject: [PATCH] collab attachments, multi-day events, calendar improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Collab buckets sync attachments alongside cards (images/PDFs/audio). New /api/collab-attachments endpoint on relay, encrypted at rest, bucket-scoped for members. - CalDAV multi-day events via **Bis:** body field. Calendar renders event on every day in range with day counter (1/6, 2/6, ...). - Calendar preserves month across close/reopen (only jumps to today on first open). - Calendar title: centered nav group with [MM-DD] Mon Y [KW-KW] — dimmed brackets, fixed width so nothing wiggles. - Editor: scratchpad uses custom confirm, autobackup-draft dialog replaced with custom styled dialog. - Scanlines theme feature removed (performance issue). Co-Authored-By: Claude Opus 4.6 (1M context) --- config.php | 2 +- public/css/style.css | 12 ----- public/index.php | 17 +++--- public/js/modules/calendar.js | 62 ++++++++++++++++++---- public/js/modules/editor.js | 32 ++++++++---- public/js/modules/theme.js | 14 ----- public/plugins/collab-buckets/backend.php | 41 +++++++++++++++ public/plugins/tests/calendar.test.js | 21 ++++++++ relay/inc/bootstrap.php | 14 +++++ relay/inc/routes/collab-cards.php | 63 +++++++++++++++++++++++ src/CalDavSync.php | 40 ++++++++++++-- 11 files changed, 254 insertions(+), 64 deletions(-) diff --git a/config.php b/config.php index 279bda1..0c61f85 100644 --- a/config.php +++ b/config.php @@ -1,7 +1,7 @@ div { pointer-events: auto; } *::-webkit-scrollbar-thumb:hover { background: var(--t-dim); } *::-webkit-scrollbar-corner { background: transparent; } -/* Scanlines */ -body::after { - content: ''; - position: fixed; - inset: 0; - pointer-events: none; - z-index: 9999; - background: repeating-linear-gradient(0deg, transparent, transparent 2px, var(--t-scanline, rgba(0,0,0,0.04)) 2px, var(--t-scanline, rgba(0,0,0,0.04)) 4px); -} - /* Blinking cursor */ .cursor-blink::after { content: '_'; animation: blink 1s step-end infinite; } @keyframes blink { 50% { opacity: 0; } } diff --git a/public/index.php b/public/index.php index c749737..c04fd0a 100644 --- a/public/index.php +++ b/public/index.php @@ -1158,7 +1158,6 @@ if (str_starts_with($route, '/api/')) { // color theme theme: 'slate', // typography - scanlines: '1', fontHeadline: 'pixel', fontContent: 'mono', fontUi: 'pixel', // geometry radiusCard: 0, radiusButton: 0, radiusInput: 0, radiusModal: 0, radiusTag: 0, radiusImage: 0, @@ -1172,7 +1171,6 @@ if (str_starts_with($route, '/api/')) { window.builtinPresets = { Terminal: { ...window.designDefaults }, Modern: { theme: 'paper', - scanlines: '0', fontHeadline: 'mono', fontContent: 'mono', fontUi: 'mono', radiusCard: 10, radiusButton: 24, radiusInput: 5, radiusModal: 15, radiusTag: 3, radiusImage: 8, borderCard: 1, borderStyle: 'solid', barHeight: 3, @@ -1210,7 +1208,6 @@ if (str_starts_with($route, '/api/')) { root.setProperty('--ui-lift-card', d.liftCard + 'px'); root.setProperty('--ui-blur-overlay', d.blurOverlay + 'px'); // body classes - document.body.classList.toggle('no-scanlines', String(d.scanlines) !== '1'); document.body.classList.remove('anim-off', 'anim-fast', 'anim-slow'); if (d.animSpeed === 'off') document.body.classList.add('anim-off'); if (d.animSpeed === 'fast') document.body.classList.add('anim-fast'); @@ -1222,8 +1219,6 @@ if (str_starts_with($route, '/api/')) { // Migrate legacy individual keys (only if no JSON blob exists yet) if (!Object.keys(saved).length) { const legacy = {}; - const sl = localStorage.getItem('hyprcrd-scanlines'); - if (sl !== null) legacy.scanlines = sl; const fh = localStorage.getItem('hyprcrd-font-headline'); if (fh) legacy.fontHeadline = fh; const fc = localStorage.getItem('hyprcrd-font-content'); if (fc) legacy.fontContent = fc; const fu = localStorage.getItem('hyprcrd-font-ui'); if (fu) legacy.fontUi = fu; @@ -1649,7 +1644,6 @@ if (str_starts_with($route, '/api/')) {
-
@@ -1696,7 +1690,6 @@ if (str_starts_with($route, '/api/')) {
-
Scan lines
@@ -2093,14 +2086,16 @@ if (str_starts_with($route, '/api/')) {
-
+
- -

- +
+ +

+ +