@myrialabs/clopen 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/backend/lib/database/migrations/023_create_user_unread_sessions_table.ts +32 -0
  2. package/backend/lib/database/migrations/index.ts +7 -0
  3. package/backend/lib/database/queries/session-queries.ts +37 -0
  4. package/backend/lib/git/git-service.ts +1 -0
  5. package/backend/ws/sessions/crud.ts +34 -2
  6. package/backend/ws/user/crud.ts +8 -4
  7. package/bun.lock +34 -12
  8. package/frontend/lib/components/common/MonacoEditor.svelte +6 -6
  9. package/frontend/lib/components/common/xterm/XTerm.svelte +27 -108
  10. package/frontend/lib/components/common/xterm/terminal-config.ts +2 -2
  11. package/frontend/lib/components/common/xterm/types.ts +1 -0
  12. package/frontend/lib/components/common/xterm/xterm-service.ts +69 -20
  13. package/frontend/lib/components/files/FileTree.svelte +4 -6
  14. package/frontend/lib/components/files/FileViewer.svelte +45 -101
  15. package/frontend/lib/components/git/CommitForm.svelte +1 -1
  16. package/frontend/lib/components/git/GitLog.svelte +141 -101
  17. package/frontend/lib/components/preview/browser/components/Toolbar.svelte +81 -72
  18. package/frontend/lib/components/settings/SettingsModal.svelte +1 -8
  19. package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +3 -3
  20. package/frontend/lib/components/terminal/Terminal.svelte +1 -1
  21. package/frontend/lib/components/terminal/TerminalTabs.svelte +28 -26
  22. package/frontend/lib/components/workspace/PanelHeader.svelte +639 -623
  23. package/frontend/lib/components/workspace/WorkspaceLayout.svelte +3 -2
  24. package/frontend/lib/components/workspace/panels/GitPanel.svelte +34 -92
  25. package/frontend/lib/stores/core/app.svelte.ts +46 -0
  26. package/frontend/lib/stores/core/sessions.svelte.ts +24 -3
  27. package/frontend/lib/stores/ui/workspace.svelte.ts +14 -14
  28. package/package.json +8 -6
@@ -31,52 +31,54 @@
31
31
  });
32
32
  </script>
33
33
 
34
- <!-- Compact Terminal Tabs -->
35
- <div class="flex items-center gap-1.5 overflow-x-auto flex-1">
34
+ <!-- Terminal Tabs (Git-style underline tabs) -->
35
+ <div class="relative flex items-center overflow-x-auto flex-1">
36
36
  {#each sessions as session (session.id)}
37
- <div
38
- class="group relative flex items-center gap-2 pl-3 pr-2 py-1.5 border border-slate-200 dark:border-slate-700 rounded-lg transition-all duration-200 min-w-0 max-w-xs cursor-pointer
39
- {session.isActive
40
- ? 'bg-slate-100 dark:bg-slate-700 text-slate-900 dark:text-slate-100'
41
- : 'bg-white dark:bg-slate-800 text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-700'}"
37
+ {@const isActive = session.isActive}
38
+ <button
39
+ type="button"
40
+ class="group relative flex items-center justify-center gap-1 px-2 py-2 text-xs font-medium transition-colors min-w-0 max-w-xs cursor-pointer
41
+ {isActive
42
+ ? 'text-violet-600 dark:text-violet-400'
43
+ : 'text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-300'}"
42
44
  onclick={() => onSwitchSession?.(session.id)}
43
45
  role="tab"
44
46
  tabindex="0"
45
- onkeydown={(e) => {
46
- if (e.key === 'Enter' || e.key === ' ') {
47
- e.preventDefault();
48
- onSwitchSession?.(session.id);
49
- }
50
- }}
51
47
  >
52
- <!-- Terminal icon -->
53
48
  <Icon name="lucide:terminal" class="w-3 h-3 flex-shrink-0" />
54
-
55
- <!-- Session name -->
56
- <span class="text-xs font-medium truncate max-w-37.5">
57
- {session.name}
58
- </span>
59
-
49
+ <span class="truncate max-w-28">{session.name}</span>
60
50
  <!-- Close button -->
61
- <button
51
+ <span
52
+ role="button"
53
+ tabindex="0"
62
54
  onclick={(e) => {
63
55
  e.stopPropagation();
64
56
  onCloseSession?.(session.id);
65
57
  }}
66
- class="flex hover:bg-slate-300 dark:hover:bg-slate-600 rounded p-0.5 transition-all duration-200 flex-shrink-0"
58
+ onkeydown={(e) => {
59
+ if (e.key === 'Enter' || e.key === ' ') {
60
+ e.stopPropagation();
61
+ onCloseSession?.(session.id);
62
+ }
63
+ }}
64
+ class="flex items-center justify-center w-4 h-4 rounded hover:bg-slate-200 dark:hover:bg-slate-700 transition-all duration-200 flex-shrink-0"
67
65
  title="Close terminal"
68
66
  aria-label="Close terminal session"
69
67
  >
70
- <Icon name="lucide:x" class="w-3 h-3" />
71
- </button>
72
- </div>
68
+ <Icon name="lucide:x" class="w-2.5 h-2.5" />
69
+ </span>
70
+ {#if isActive}
71
+ <span class="absolute bottom-0 inset-x-0 h-px bg-violet-600 dark:bg-violet-400"></span>
72
+ {/if}
73
+ </button>
73
74
  {/each}
74
75
 
75
76
  <!-- New terminal button -->
76
77
  {#if onNewSession}
77
78
  <button
79
+ type="button"
78
80
  onclick={onNewSession}
79
- class="flex items-center justify-center w-5 h-5 rounded-md hover:bg-slate-200 dark:hover:bg-slate-700 transition-all duration-200 flex-shrink-0"
81
+ class="flex items-center justify-center w-6 h-6 rounded-md text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-slate-200/60 dark:hover:bg-slate-700/60 transition-all duration-200 flex-shrink-0 ml-1"
80
82
  title="New terminal"
81
83
  aria-label="New terminal session"
82
84
  >