@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.
- package/backend/lib/database/migrations/023_create_user_unread_sessions_table.ts +32 -0
- package/backend/lib/database/migrations/index.ts +7 -0
- package/backend/lib/database/queries/session-queries.ts +37 -0
- package/backend/lib/git/git-service.ts +1 -0
- package/backend/ws/sessions/crud.ts +34 -2
- package/backend/ws/user/crud.ts +8 -4
- package/bun.lock +34 -12
- package/frontend/lib/components/common/MonacoEditor.svelte +6 -6
- package/frontend/lib/components/common/xterm/XTerm.svelte +27 -108
- package/frontend/lib/components/common/xterm/terminal-config.ts +2 -2
- package/frontend/lib/components/common/xterm/types.ts +1 -0
- package/frontend/lib/components/common/xterm/xterm-service.ts +69 -20
- package/frontend/lib/components/files/FileTree.svelte +4 -6
- package/frontend/lib/components/files/FileViewer.svelte +45 -101
- package/frontend/lib/components/git/CommitForm.svelte +1 -1
- package/frontend/lib/components/git/GitLog.svelte +141 -101
- package/frontend/lib/components/preview/browser/components/Toolbar.svelte +81 -72
- package/frontend/lib/components/settings/SettingsModal.svelte +1 -8
- package/frontend/lib/components/settings/engines/AIEnginesSettings.svelte +3 -3
- package/frontend/lib/components/terminal/Terminal.svelte +1 -1
- package/frontend/lib/components/terminal/TerminalTabs.svelte +28 -26
- package/frontend/lib/components/workspace/PanelHeader.svelte +639 -623
- package/frontend/lib/components/workspace/WorkspaceLayout.svelte +3 -2
- package/frontend/lib/components/workspace/panels/GitPanel.svelte +34 -92
- package/frontend/lib/stores/core/app.svelte.ts +46 -0
- package/frontend/lib/stores/core/sessions.svelte.ts +24 -3
- package/frontend/lib/stores/ui/workspace.svelte.ts +14 -14
- package/package.json +8 -6
|
@@ -31,52 +31,54 @@
|
|
|
31
31
|
});
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
|
-
<!--
|
|
35
|
-
<div class="flex items-center
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
<
|
|
51
|
+
<span
|
|
52
|
+
role="button"
|
|
53
|
+
tabindex="0"
|
|
62
54
|
onclick={(e) => {
|
|
63
55
|
e.stopPropagation();
|
|
64
56
|
onCloseSession?.(session.id);
|
|
65
57
|
}}
|
|
66
|
-
|
|
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-
|
|
71
|
-
</
|
|
72
|
-
|
|
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-
|
|
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
|
>
|