@ibgib/space-gib 0.0.32 β 0.0.34
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/dist/client/bootstrap.mjs +24 -51
- package/dist/client/chunk-25PXC4HP.mjs +9914 -0
- package/dist/client/chunk-RXWLL2AI.mjs +30 -0
- package/dist/client/css/activity-bar.css +417 -0
- package/dist/client/css/base.css +167 -0
- package/dist/client/css/components.css +218 -0
- package/dist/client/css/cosmic.css +557 -0
- package/dist/client/css/dev-tools.css +163 -0
- package/dist/client/css/landing.css +184 -0
- package/dist/client/css/layout.css +896 -0
- package/dist/client/css/onboarding.css +181 -0
- package/dist/client/css/repos.css +740 -0
- package/dist/client/css/variables.css +64 -0
- package/dist/client/index.html +202 -31
- package/dist/client/index.mjs +31 -31
- package/dist/client/script.mjs +1 -1
- package/dist/client/style.css +11 -1056
- package/dist/respec-gib.node.mjs +5 -0
- package/dist/server/server.mjs +6879 -3109
- package/package.json +6 -6
- package/src/client/AUTO-GENERATED-version.mts +1 -1
- package/src/client/cosmos/seed-cosmos-workspace.mts +69 -0
- package/src/client/css/activity-bar.css +417 -0
- package/src/client/css/base.css +167 -0
- package/src/client/css/components.css +218 -0
- package/src/client/css/cosmic.css +557 -0
- package/src/client/css/dev-tools.css +163 -0
- package/src/client/css/landing.css +184 -0
- package/src/client/css/layout.css +896 -0
- package/src/client/css/onboarding.css +181 -0
- package/src/client/css/repos.css +740 -0
- package/src/client/css/variables.css +64 -0
- package/src/client/dev-tools/vcs-workspace.mts +3 -3
- package/src/client/index.html +202 -31
- package/src/client/style.css +11 -1056
- package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
- package/src/client/ui/component/chat-view/chat-view.css +381 -0
- package/src/client/ui/component/chat-view/chat-view.html +104 -0
- package/src/client/ui/component/chat-view/chat-view.mts +277 -0
- package/src/client/ui/component/chat-view/index.mts +9 -0
- package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
- package/src/client/ui/component/clone/clone-constants.mts +16 -0
- package/src/client/ui/component/clone/clone-types.mts +60 -0
- package/src/client/ui/component/clone/clone.css +383 -0
- package/src/client/ui/component/clone/clone.html +89 -0
- package/src/client/ui/component/clone/clone.mts +620 -0
- package/src/client/ui/component/clone/index.mts +11 -0
- package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
- package/src/client/ui/component/code-editor/code-editor.css +275 -0
- package/src/client/ui/component/code-editor/code-editor.html +54 -0
- package/src/client/ui/component/code-editor/code-editor.mts +427 -0
- package/src/client/ui/component/code-editor/index.mts +9 -0
- package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
- package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
- package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +97 -0
- package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1084 -0
- package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
- package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
- package/src/client/ui/component/file-explorer/file-explorer.css +256 -0
- package/src/client/ui/component/file-explorer/file-explorer.html +75 -0
- package/src/client/ui/component/file-explorer/file-explorer.mts +346 -0
- package/src/client/ui/component/file-explorer/index.mts +9 -0
- package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
- package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
- package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
- package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
- package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
- package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
- package/src/client/ui/component/nested-chat/chat/chat.mts +646 -0
- package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
- package/src/client/ui/component/nested-chat/index.mts +14 -0
- package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
- package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
- package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
- package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
- package/src/client/ui/component/nested-chat/nested-chat.mts +393 -0
- package/src/client/ui/component/notes-explorer/index.mts +9 -0
- package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
- package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
- package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
- package/src/client/ui/component/notes-inspector/index.mts +9 -0
- package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
- package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
- package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
- package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
- package/src/client/ui/component/pitch/index.mts +9 -0
- package/src/client/ui/component/pitch/pitch.css +295 -0
- package/src/client/ui/component/pitch/pitch.html +97 -0
- package/src/client/ui/component/pitch/pitch.mts +135 -0
- package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
- package/src/client/ui/component/timeline/index.mts +9 -0
- package/src/client/ui/component/timeline/timeline.css +264 -0
- package/src/client/ui/component/timeline/timeline.html +23 -0
- package/src/client/ui/component/timeline/timeline.mts +317 -0
- package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
- package/src/client/ui/component/timeline-item-details/index.mts +9 -0
- package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
- package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
- package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
- package/src/client/ui/router/index.mts +3 -0
- package/src/client/ui/router/space-gib-router-helpers.mts +272 -0
- package/src/client/ui/router/space-gib-router-helpers.respec.mts +353 -0
- package/src/client/ui/router/space-gib-router-service.mts +186 -0
- package/src/client/ui/router/space-gib-router-types.mts +93 -0
- package/src/client/ui/shell/cosmic-big-bang.mts +844 -0
- package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
- package/src/client/ui/shell/space-gib-shell-service.mts +1728 -31
- package/src/server/server.mts +20 -1
- package/tsconfig.test.json +5 -1
- package/dist/client/chunk-AX6BROMT.mjs +0 -1
- package/dist/client/chunk-CIQUGV7U.mjs +0 -25
- package/dist/client/chunk-YPCHYDKL.mjs +0 -3102
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# space-gib-chat-view Web Component Specification
|
|
2
|
+
|
|
3
|
+
## 1. Overview & Architectural Role
|
|
4
|
+
|
|
5
|
+
`space-gib-chat-view` is an `@ibgib` Web Component that provides a live discussion and companion note thread directly inside the Right Panel (`#right-panel`).
|
|
6
|
+
|
|
7
|
+
### Inverted Soft Rel8ns & Living Discussions
|
|
8
|
+
In standard VCS platforms (GitHub, GitLab), review comments and discussion threads live outside version control in centralized database tables. In `ibgib`:
|
|
9
|
+
- Discussions, notes, and comments are first-class **metatext ibgibs** (`b2tfs_file` or comment nodes).
|
|
10
|
+
- They link to target code entities (files, directories, commit tips) via **inverted soft rel8ns** (`data.targetAddr`).
|
|
11
|
+
- Discussions travel with branches and merge accretively across spaces without polluting code ASTs.
|
|
12
|
+
- This component renders those linked discussions in a natural, conversational chat interface.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Component Design & Capabilities
|
|
17
|
+
|
|
18
|
+
- **Tag Name**: `<space-gib-chat-view>`
|
|
19
|
+
- **Host Container**: `#code-chat-view-container` inside `#right-panel`
|
|
20
|
+
- **Context Header**:
|
|
21
|
+
- Displays the active conversation context (e.g., `π¬ Discussions: src/index.ts`).
|
|
22
|
+
- Active branch & tip indicator (`πΏ main @ 7f8a1b2`).
|
|
23
|
+
- Collapse / Close button (`β¨`) to toggle the Right Panel.
|
|
24
|
+
- **Message Stream**:
|
|
25
|
+
- Dynamic scrollable thread of discussion messages.
|
|
26
|
+
- Message metadata: author keystone badge (e.g., `Alice (Session Keystone)`), timestamp (`2m ago`), and target anchor badge (`π L1-18`).
|
|
27
|
+
- Markdown-friendly body displaying architectural rationales, questions, and replies.
|
|
28
|
+
- **Compose & Send Bar**:
|
|
29
|
+
- Auto-growing message input textarea.
|
|
30
|
+
- Attach / anchor button to pin comment to specific code lines.
|
|
31
|
+
- Send button (`Send π¬`) dispatching `space-gib-chat-message-sent`.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 3. Custom Event Contracts
|
|
36
|
+
|
|
37
|
+
- `space-gib-chat-message-sent`: Detail `{ text: string, targetAddr?: string, targetFile: string, author: string, timestamp: number }`
|
|
38
|
+
- `space-gib-chat-anchor-clicked`: Detail `{ targetFile: string, lines?: string }`
|
|
39
|
+
- `space-gib-chat-close-requested`: Detail `{}`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 4. Lifecycle & Integration
|
|
44
|
+
|
|
45
|
+
- Scaffolds `ChatViewComponentMeta` (extends `IbGibDynamicComponentMetaBase`)
|
|
46
|
+
- Scaffolds `ChatViewComponentInstance` (extends `IbGibDynamicComponentInstanceBase<IbGib_V1, ChatViewElements>`)
|
|
47
|
+
- Implements `initialize()`, `created()`, `renderUI()`, `disconnected(): Promise<void>`
|
|
48
|
+
- Registered in `SpaceGibShellService` via `registerChatViewComponent()`.
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 100%;
|
|
6
|
+
background: var(--clr-bg-surface, #0d1322);
|
|
7
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
8
|
+
font-family: var(--font-sans, system-ui, -apple-system, sans-serif);
|
|
9
|
+
font-size: 0.85rem;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
border-left: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.chat-root {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* ββ Header ββ */
|
|
23
|
+
.chat-header {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
padding: 0.75rem 1rem;
|
|
28
|
+
background: rgba(5, 8, 15, 0.6);
|
|
29
|
+
border-bottom: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.chat-header-info {
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
gap: 0.6rem;
|
|
37
|
+
min-width: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.chat-header-icon {
|
|
41
|
+
font-size: 1.15rem;
|
|
42
|
+
line-height: 1;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.chat-title-group {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
min-width: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.chat-title {
|
|
52
|
+
margin: 0;
|
|
53
|
+
font-size: 0.875rem;
|
|
54
|
+
font-weight: 600;
|
|
55
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
56
|
+
line-height: 1.2;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.chat-target-badge {
|
|
60
|
+
font-size: 0.725rem;
|
|
61
|
+
font-family: var(--font-mono, monospace);
|
|
62
|
+
color: var(--clr-accent, #78f87e);
|
|
63
|
+
white-space: nowrap;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.chat-header-actions {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
gap: 0.35rem;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.chat-header-btn {
|
|
75
|
+
background: transparent;
|
|
76
|
+
border: 1px solid transparent;
|
|
77
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
78
|
+
padding: 0.3rem 0.45rem;
|
|
79
|
+
border-radius: var(--radius-sm, 4px);
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
font-size: 0.9rem;
|
|
82
|
+
transition: all 120ms ease;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.chat-header-btn:hover {
|
|
86
|
+
background: rgba(255, 255, 255, 0.08);
|
|
87
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
88
|
+
border-color: var(--clr-border, rgba(255, 255, 255, 0.1));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* ββ Context Sub-Bar ββ */
|
|
92
|
+
.chat-sub-bar {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: space-between;
|
|
96
|
+
padding: 0.35rem 1rem;
|
|
97
|
+
background: rgba(0, 0, 0, 0.25);
|
|
98
|
+
border-bottom: 1px solid var(--clr-border, rgba(255, 255, 255, 0.05));
|
|
99
|
+
font-size: 0.75rem;
|
|
100
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
101
|
+
flex-shrink: 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.chat-context-item {
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: 0.35rem;
|
|
108
|
+
font-family: var(--font-mono, monospace);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.context-icon {
|
|
112
|
+
font-size: 0.8rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.filter-text {
|
|
116
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* ββ Messages Stream ββ */
|
|
120
|
+
.chat-messages {
|
|
121
|
+
flex: 1;
|
|
122
|
+
overflow-y: auto;
|
|
123
|
+
padding: 0.85rem 1rem;
|
|
124
|
+
display: flex;
|
|
125
|
+
flex-direction: column;
|
|
126
|
+
gap: 0.85rem;
|
|
127
|
+
min-height: 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.chat-message {
|
|
131
|
+
background: rgba(18, 25, 42, 0.6);
|
|
132
|
+
border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.07));
|
|
133
|
+
border-radius: var(--radius-sm, 6px);
|
|
134
|
+
padding: 0.75rem;
|
|
135
|
+
display: flex;
|
|
136
|
+
flex-direction: column;
|
|
137
|
+
gap: 0.5rem;
|
|
138
|
+
transition: border-color 150ms ease;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.chat-message:hover {
|
|
142
|
+
border-color: rgba(255, 255, 255, 0.15);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.chat-message.in-band-note {
|
|
146
|
+
border-left: 3px solid var(--clr-accent, #78f87e);
|
|
147
|
+
background: rgba(120, 248, 126, 0.03);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.msg-header {
|
|
151
|
+
display: flex;
|
|
152
|
+
align-items: center;
|
|
153
|
+
justify-content: space-between;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.msg-author-group {
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
gap: 0.4rem;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.msg-avatar {
|
|
163
|
+
font-size: 0.95rem;
|
|
164
|
+
line-height: 1;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.msg-author {
|
|
168
|
+
font-weight: 600;
|
|
169
|
+
font-size: 0.825rem;
|
|
170
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.msg-badge {
|
|
174
|
+
font-size: 0.65rem;
|
|
175
|
+
padding: 0.1rem 0.35rem;
|
|
176
|
+
border-radius: 999px;
|
|
177
|
+
background: rgba(120, 248, 126, 0.12);
|
|
178
|
+
color: var(--clr-accent, #78f87e);
|
|
179
|
+
font-weight: 600;
|
|
180
|
+
text-transform: uppercase;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.peer-comment .msg-badge {
|
|
184
|
+
background: rgba(99, 102, 241, 0.15);
|
|
185
|
+
color: #a5b4fc;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.msg-time {
|
|
189
|
+
font-size: 0.7rem;
|
|
190
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.msg-anchor {
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
gap: 0.35rem;
|
|
197
|
+
font-size: 0.725rem;
|
|
198
|
+
font-family: var(--font-mono, monospace);
|
|
199
|
+
color: var(--clr-warn, #ffd166);
|
|
200
|
+
background: rgba(255, 209, 102, 0.08);
|
|
201
|
+
padding: 0.2rem 0.45rem;
|
|
202
|
+
border-radius: 4px;
|
|
203
|
+
width: fit-content;
|
|
204
|
+
cursor: pointer;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.msg-anchor:hover {
|
|
208
|
+
background: rgba(255, 209, 102, 0.16);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.anchor-tag {
|
|
212
|
+
font-size: 0.65rem;
|
|
213
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
214
|
+
margin-left: 0.35rem;
|
|
215
|
+
border-left: 1px solid rgba(255, 255, 255, 0.1);
|
|
216
|
+
padding-left: 0.35rem;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.msg-body {
|
|
220
|
+
font-size: 0.825rem;
|
|
221
|
+
line-height: 1.45;
|
|
222
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.msg-body p {
|
|
226
|
+
margin: 0 0 0.4rem 0;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.msg-body p:last-child {
|
|
230
|
+
margin-bottom: 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.msg-lead {
|
|
234
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.msg-callout {
|
|
238
|
+
display: flex;
|
|
239
|
+
gap: 0.5rem;
|
|
240
|
+
padding: 0.55rem 0.65rem;
|
|
241
|
+
margin-top: 0.45rem;
|
|
242
|
+
border-radius: 4px;
|
|
243
|
+
background: rgba(120, 248, 126, 0.06);
|
|
244
|
+
border: 1px solid rgba(120, 248, 126, 0.15);
|
|
245
|
+
font-size: 0.775rem;
|
|
246
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.callout-emoji {
|
|
250
|
+
font-size: 0.9rem;
|
|
251
|
+
line-height: 1;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.callout-text {
|
|
255
|
+
line-height: 1.35;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.msg-footer {
|
|
259
|
+
display: flex;
|
|
260
|
+
align-items: center;
|
|
261
|
+
gap: 0.5rem;
|
|
262
|
+
margin-top: 0.2rem;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.msg-action-btn {
|
|
266
|
+
background: transparent;
|
|
267
|
+
border: none;
|
|
268
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
269
|
+
font-size: 0.725rem;
|
|
270
|
+
cursor: pointer;
|
|
271
|
+
padding: 0.15rem 0.4rem;
|
|
272
|
+
border-radius: 3px;
|
|
273
|
+
transition: all 120ms ease;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.msg-action-btn:hover {
|
|
277
|
+
background: rgba(255, 255, 255, 0.06);
|
|
278
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* ββ Compose Footer ββ */
|
|
282
|
+
.chat-compose-footer {
|
|
283
|
+
padding: 0.75rem 1rem;
|
|
284
|
+
background: rgba(5, 8, 15, 0.75);
|
|
285
|
+
border-top: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
|
|
286
|
+
flex-shrink: 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.compose-box {
|
|
290
|
+
display: flex;
|
|
291
|
+
flex-direction: column;
|
|
292
|
+
gap: 0.45rem;
|
|
293
|
+
background: rgba(18, 25, 42, 0.8);
|
|
294
|
+
border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.12));
|
|
295
|
+
border-radius: var(--radius-sm, 6px);
|
|
296
|
+
padding: 0.5rem 0.65rem;
|
|
297
|
+
transition: border-color 150ms ease;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.compose-box:focus-within {
|
|
301
|
+
border-color: var(--clr-accent, #78f87e);
|
|
302
|
+
box-shadow: 0 0 0 1px rgba(120, 248, 126, 0.2);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.chat-textarea {
|
|
306
|
+
width: 100%;
|
|
307
|
+
background: transparent;
|
|
308
|
+
border: none;
|
|
309
|
+
outline: none;
|
|
310
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
311
|
+
font-family: inherit;
|
|
312
|
+
font-size: 0.825rem;
|
|
313
|
+
line-height: 1.4;
|
|
314
|
+
resize: none;
|
|
315
|
+
min-height: 48px;
|
|
316
|
+
box-sizing: border-box;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.chat-textarea::placeholder {
|
|
320
|
+
color: var(--clr-text-muted, #7e8c9f);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.compose-toolbar {
|
|
324
|
+
display: flex;
|
|
325
|
+
align-items: center;
|
|
326
|
+
justify-content: space-between;
|
|
327
|
+
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
|
328
|
+
padding-top: 0.4rem;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.compose-tools-left {
|
|
332
|
+
display: flex;
|
|
333
|
+
align-items: center;
|
|
334
|
+
gap: 0.35rem;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
.compose-tool-btn {
|
|
338
|
+
display: flex;
|
|
339
|
+
align-items: center;
|
|
340
|
+
gap: 0.3rem;
|
|
341
|
+
background: rgba(255, 255, 255, 0.04);
|
|
342
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
343
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
344
|
+
padding: 0.2rem 0.45rem;
|
|
345
|
+
border-radius: 4px;
|
|
346
|
+
font-size: 0.725rem;
|
|
347
|
+
font-family: var(--font-mono, monospace);
|
|
348
|
+
cursor: pointer;
|
|
349
|
+
transition: all 120ms ease;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.compose-tool-btn:hover {
|
|
353
|
+
border-color: var(--clr-accent, #78f87e);
|
|
354
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.compose-tool-btn.active {
|
|
358
|
+
background: rgba(120, 248, 126, 0.1);
|
|
359
|
+
border-color: rgba(120, 248, 126, 0.3);
|
|
360
|
+
color: var(--clr-accent, #78f87e);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.compose-send-btn {
|
|
364
|
+
display: flex;
|
|
365
|
+
align-items: center;
|
|
366
|
+
gap: 0.35rem;
|
|
367
|
+
background: var(--clr-accent, #78f87e);
|
|
368
|
+
border: none;
|
|
369
|
+
color: #05080f;
|
|
370
|
+
font-weight: 600;
|
|
371
|
+
font-size: 0.775rem;
|
|
372
|
+
padding: 0.3rem 0.75rem;
|
|
373
|
+
border-radius: 4px;
|
|
374
|
+
cursor: pointer;
|
|
375
|
+
transition: all 120ms ease;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.compose-send-btn:hover {
|
|
379
|
+
background: #9fffa5;
|
|
380
|
+
box-shadow: 0 0 12px rgba(120, 248, 126, 0.4);
|
|
381
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<div class="chat-root" id="chat-root">
|
|
2
|
+
<!-- Header Bar -->
|
|
3
|
+
<header class="chat-header">
|
|
4
|
+
<div class="chat-header-info">
|
|
5
|
+
<span class="chat-header-icon">π¬</span>
|
|
6
|
+
<div class="chat-title-group">
|
|
7
|
+
<h3 class="chat-title">Discussions</h3>
|
|
8
|
+
<span class="chat-target-badge" id="chat-target-file">src/index.ts</span>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="chat-header-actions">
|
|
12
|
+
<button id="btn-chat-close" class="chat-header-btn" type="button" title="Collapse Panel">β¨</button>
|
|
13
|
+
</div>
|
|
14
|
+
</header>
|
|
15
|
+
|
|
16
|
+
<!-- Context Sub-Bar -->
|
|
17
|
+
<div class="chat-sub-bar">
|
|
18
|
+
<div class="chat-context-item">
|
|
19
|
+
<span class="context-icon">πΏ</span>
|
|
20
|
+
<span class="context-text" id="chat-branch-tip">main @ 7f8a1b2</span>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="chat-filter-item">
|
|
23
|
+
<span class="filter-text">2 Notes</span>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- Messages Stream -->
|
|
28
|
+
<div class="chat-messages" id="chat-messages">
|
|
29
|
+
<!-- Message 1: Architectural Note -->
|
|
30
|
+
<div class="chat-message in-band-note">
|
|
31
|
+
<div class="msg-header">
|
|
32
|
+
<div class="msg-author-group">
|
|
33
|
+
<span class="msg-avatar">π©βπ»</span>
|
|
34
|
+
<span class="msg-author">Alice</span>
|
|
35
|
+
<span class="msg-badge">Keystone</span>
|
|
36
|
+
</div>
|
|
37
|
+
<span class="msg-time">2m ago</span>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="msg-anchor">
|
|
40
|
+
<span class="anchor-icon">π</span>
|
|
41
|
+
<span class="anchor-label">src/index.ts#L1-18</span>
|
|
42
|
+
<span class="anchor-tag">Inverted Rel8n</span>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="msg-body">
|
|
45
|
+
<p class="msg-lead"><strong>Architectural Rationale</strong></p>
|
|
46
|
+
<p>This entrypoint initializes the virtual repository workspace within the browserβs local IndexedDB metaspace.
|
|
47
|
+
</p>
|
|
48
|
+
<div class="msg-callout">
|
|
49
|
+
<span class="callout-emoji">π‘</span>
|
|
50
|
+
<div class="callout-text">
|
|
51
|
+
<strong>Why Living Comments?</strong> Unlike centralized SaaS review comments, this discussion node is an
|
|
52
|
+
in-band Merkle ibgib traveling directly with the branch DAG.
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="msg-footer">
|
|
57
|
+
<button class="msg-action-btn" type="button">Reply</button>
|
|
58
|
+
<button class="msg-action-btn" type="button">π 1</button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- Message 2: Code Review Discussion -->
|
|
63
|
+
<div class="chat-message peer-comment">
|
|
64
|
+
<div class="msg-header">
|
|
65
|
+
<div class="msg-author-group">
|
|
66
|
+
<span class="msg-avatar">π¨βπ</span>
|
|
67
|
+
<span class="msg-author">Bob</span>
|
|
68
|
+
<span class="msg-badge">Peer</span>
|
|
69
|
+
</div>
|
|
70
|
+
<span class="msg-time">1m ago</span>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="msg-anchor">
|
|
73
|
+
<span class="anchor-icon">π</span>
|
|
74
|
+
<span class="anchor-label">src/index.ts#L36-42</span>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="msg-body">
|
|
77
|
+
<p>Looks super clean! Should we add an async try/catch boundary around <code>boot()</code> as well?</p>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="msg-footer">
|
|
80
|
+
<button class="msg-action-btn" type="button">Reply</button>
|
|
81
|
+
<button class="msg-action-btn" type="button">π</button>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Compose Footer -->
|
|
87
|
+
<footer class="chat-compose-footer">
|
|
88
|
+
<div class="compose-box">
|
|
89
|
+
<textarea id="chat-input" class="chat-textarea" placeholder="Add a comment to this context." rows="2"></textarea>
|
|
90
|
+
<div class="compose-toolbar">
|
|
91
|
+
<div class="compose-tools-left">
|
|
92
|
+
<button id="btn-chat-pin" class="compose-tool-btn active" type="button" title="Pin to current line selection">
|
|
93
|
+
<span class="tool-icon">π</span>
|
|
94
|
+
<span class="tool-label">src/index.ts</span>
|
|
95
|
+
</button>
|
|
96
|
+
</div>
|
|
97
|
+
<button id="btn-chat-send" class="compose-send-btn" type="button">
|
|
98
|
+
<span>Send</span>
|
|
99
|
+
<span class="send-icon">π¬</span>
|
|
100
|
+
</button>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</footer>
|
|
104
|
+
</div>
|