diff --git a/docker-compose.yml b/docker-compose.yml index 75a5d9e5..388cc1da 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,10 @@ services: rspace: - build: - context: . - additional_contexts: - encryptid-sdk: ../encryptid-sdk + image: rspace-online-rspace:latest + # build: + # context: . + # additional_contexts: + # encryptid-sdk: ../encryptid-sdk container_name: rspace-online restart: unless-stopped volumes: diff --git a/modules/rtime/components/folk-timebank-app.ts b/modules/rtime/components/folk-timebank-app.ts index 7ebd7c03..f0e26f3f 100644 --- a/modules/rtime/components/folk-timebank-app.ts +++ b/modules/rtime/components/folk-timebank-app.ts @@ -545,6 +545,10 @@ class FolkTimebankApp extends HTMLElement {
+
+ Commitment Weaving + connect commitments to projects +
@@ -3642,8 +3646,21 @@ const CSS_TEXT = ` } /* SVG canvas area */ -.canvas-wrap { flex: 1; position: relative; overflow: hidden; background: #0f172a; touch-action: none; } -#weave-svg { width: 100%; height: 100%; display: block; touch-action: none; } +.canvas-wrap { flex: 1; position: relative; overflow: hidden; background: #0f172a; touch-action: none; display: flex; flex-direction: column; } +.canvas-wrap-header { + display: none; + justify-content: space-between; align-items: center; + padding: 0.5rem 0.75rem; + font-size: 0.82rem; font-weight: 600; color: #94a3b8; + text-transform: uppercase; letter-spacing: 0.04em; + border-bottom: 1px solid #334155; flex-shrink: 0; + background: #1e293b; +} +.canvas-wrap-hint { + font-size: 0.68rem; font-weight: 400; color: #64748b; font-style: italic; + text-transform: none; letter-spacing: normal; +} +#weave-svg { width: 100%; flex: 1; min-height: 0; display: block; touch-action: none; } /* Zoom controls */ .zoom-controls { @@ -4164,6 +4181,8 @@ const CSS_TEXT = ` :host([data-theme="light"]) .pool-panel { background: #fff; border-right-color: #e2e8f0; } :host([data-theme="light"]) .pool-panel-header { color: #64748b; border-bottom-color: #e2e8f0; } :host([data-theme="light"]) .pool-panel-header button { border-color: #e2e8f0; color: #64748b; } +:host([data-theme="light"]) .canvas-wrap-header { background: #fff; color: #64748b; border-bottom-color: #e2e8f0; } +:host([data-theme="light"]) .canvas-wrap-hint { color: #94a3b8; } :host([data-theme="light"]) .sidebar-task:hover { background: #f1f5f9; } :host([data-theme="light"]) .sidebar-item-name { color: #1e293b; } :host([data-theme="light"]) .canvas-wrap { background: #f8fafc; } @@ -4239,16 +4258,28 @@ const CSS_TEXT = ` .exec-step-checklist input[type="checkbox"] { accent-color: #8b5cf6; } @media (max-width: 768px) { - #canvas-view { flex-direction: column; } - .pool-panel { width: 100% !important; max-height: 220px; min-width: unset; border-right: none; border-bottom: 1px solid #334155; } + .main { overflow: visible; } + #canvas-view { flex-direction: column; overflow-y: auto; position: relative; height: auto; min-height: 100%; } + .pool-panel { + width: 100% !important; min-width: unset; + border-right: none; border-bottom: 1px solid #334155; + min-height: 50vh; max-height: none; flex-shrink: 0; + } + .pool-panel.collapsed { min-height: 36px; max-height: 36px; } + .canvas-wrap { + min-height: 60vh; flex-shrink: 0; + border-top: 1px solid #334155; + } + .canvas-wrap-header { display: flex; } .panel-divider { display: none !important; } .pool-hint { display: none; } .exec-panel { width: 95vw; } .task-edit-panel { width: 95vw; } } @media (max-width: 640px) { - .pool-panel { max-height: 180px; } - .pool-panel.collapsed { width: 100% !important; max-height: 36px; } + .pool-panel { min-height: 45vh; } + .pool-panel.collapsed { width: 100% !important; min-height: 36px; max-height: 36px; } + .canvas-wrap { min-height: 55vh; } } `; diff --git a/server/shell.ts b/server/shell.ts index 292c1328..0e13b00a 100644 --- a/server/shell.ts +++ b/server/shell.ts @@ -361,7 +361,7 @@ export function renderShell(opts: ShellOptions): string { // Service worker registration + update detection if ("serviceWorker" in navigator && location.hostname !== "localhost") { - navigator.serviceWorker.register("/sw.js?v=5").then((reg) => { + navigator.serviceWorker.register("/sw.js?v=8").then((reg) => { function showUpdateBanner() { if (!isStandalone) return; // Only show update prompt in installed PWA if (sessionStorage.getItem('rspace_update_dismissed')) return; // dismissed this session @@ -2521,7 +2521,7 @@ export function renderModuleLanding(opts: ModuleLandingOptions): string {