@ibgib/space-gib 0.0.33 → 0.0.35
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-FIAGRVBY.mjs +10933 -0
- package/dist/client/chunk-XLQ3UCQY.mjs +53 -0
- package/dist/client/css/activity-bar.css +435 -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 +1017 -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 +208 -31
- package/dist/client/index.mjs +22 -45
- package/dist/client/privacy.html +22 -22
- 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 +6880 -3110
- package/package.json +6 -6
- package/src/client/AUTO-GENERATED-version.mts +1 -1
- package/src/client/cosmos/seed-cosmos-workspace.mts +83 -0
- package/src/client/css/activity-bar.css +435 -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 +1017 -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 +7 -7
- package/src/client/index.html +208 -31
- package/src/client/privacy.html +22 -22
- package/src/client/style.css +11 -1056
- package/src/client/ui/component/changes/changes.css +413 -0
- package/src/client/ui/component/changes/changes.html +37 -0
- package/src/client/ui/component/changes/changes.mts +766 -0
- package/src/client/ui/component/changes/index.mts +9 -0
- 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 +52 -0
- package/src/client/ui/component/chat-view/chat-view.mts +264 -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 +648 -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 +357 -0
- package/src/client/ui/component/code-editor/code-editor.html +67 -0
- package/src/client/ui/component/code-editor/code-editor.mts +643 -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 +92 -0
- package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1317 -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 +720 -0
- package/src/client/ui/component/file-explorer/file-explorer.html +55 -0
- package/src/client/ui/component/file-explorer/file-explorer.mts +1412 -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 +561 -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 +395 -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 +279 -0
- package/src/client/ui/component/timeline/timeline.html +23 -0
- package/src/client/ui/component/timeline/timeline.mts +261 -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 +72 -0
- package/src/client/ui/router/space-gib-router-helpers.respec.mts +529 -0
- package/src/client/ui/router/space-gib-router-service.mts +63 -0
- package/src/client/ui/router/space-gib-router-types.mts +49 -0
- package/src/client/ui/shell/cosmic-big-bang.mts +853 -0
- package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
- package/src/client/ui/shell/space-gib-shell-service.mts +2297 -32
- package/src/server/server.mts +20 -1
- package/tsconfig.test.json +5 -1
- package/dist/client/chunk-CRJV762I.mjs +0 -3102
- package/dist/client/chunk-LXRCF5OS.mjs +0 -25
- package/dist/client/chunk-UBDQUZZV.mjs +0 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
color: #e2e8f0;
|
|
6
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
7
|
+
font-size: 13px;
|
|
8
|
+
background: transparent;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.notes-inspector-root {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
height: 100%;
|
|
15
|
+
background: rgba(10, 14, 25, 0.95);
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Header */
|
|
20
|
+
.inspector-header {
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
padding: 10px 14px;
|
|
25
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
26
|
+
background: rgba(18, 25, 42, 0.6);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.inspector-title-row {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: 8px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.inspector-icon {
|
|
36
|
+
font-size: 15px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.inspector-title {
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
color: #f1f5f9;
|
|
43
|
+
letter-spacing: 0.2px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.btn-inspector-close {
|
|
47
|
+
background: transparent;
|
|
48
|
+
border: none;
|
|
49
|
+
color: #94a3b8;
|
|
50
|
+
font-size: 14px;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
padding: 2px 6px;
|
|
53
|
+
border-radius: 4px;
|
|
54
|
+
line-height: 1;
|
|
55
|
+
transition: background 0.15s, color 0.15s;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.btn-inspector-close:hover {
|
|
59
|
+
background: rgba(255, 255, 255, 0.1);
|
|
60
|
+
color: #f8fafc;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Scrollable Content */
|
|
64
|
+
.inspector-scroll-content {
|
|
65
|
+
flex: 1;
|
|
66
|
+
overflow-y: auto;
|
|
67
|
+
padding: 12px;
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
gap: 12px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Inspector Cards */
|
|
74
|
+
.inspector-card {
|
|
75
|
+
background: rgba(18, 25, 42, 0.7);
|
|
76
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
77
|
+
border-radius: 6px;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.card-header {
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
padding: 8px 12px;
|
|
87
|
+
background: rgba(255, 255, 255, 0.03);
|
|
88
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
89
|
+
gap: 6px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.card-icon {
|
|
93
|
+
font-size: 13px;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.card-title {
|
|
97
|
+
font-size: 11.5px;
|
|
98
|
+
font-weight: 600;
|
|
99
|
+
color: #cbd5e1;
|
|
100
|
+
flex: 1;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.badge-line {
|
|
104
|
+
font-size: 10px;
|
|
105
|
+
font-family: monospace;
|
|
106
|
+
color: #ffd166;
|
|
107
|
+
background: rgba(255, 209, 102, 0.1);
|
|
108
|
+
border: 1px solid rgba(255, 209, 102, 0.25);
|
|
109
|
+
padding: 1px 6px;
|
|
110
|
+
border-radius: 4px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.card-body {
|
|
114
|
+
padding: 10px 12px;
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
gap: 8px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* File Path & Code Snippet */
|
|
121
|
+
.file-path-row {
|
|
122
|
+
font-family: monospace;
|
|
123
|
+
font-size: 11.5px;
|
|
124
|
+
color: #818cf8;
|
|
125
|
+
overflow: hidden;
|
|
126
|
+
text-overflow: ellipsis;
|
|
127
|
+
white-space: nowrap;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.code-snippet-box {
|
|
131
|
+
background: #080c14;
|
|
132
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
133
|
+
border-radius: 4px;
|
|
134
|
+
padding: 8px;
|
|
135
|
+
max-height: 160px;
|
|
136
|
+
overflow: auto;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.code-snippet-box pre {
|
|
140
|
+
margin: 0;
|
|
141
|
+
font-family: "Fira Code", Consolas, Monaco, monospace;
|
|
142
|
+
font-size: 11px;
|
|
143
|
+
line-height: 1.45;
|
|
144
|
+
color: #cbd5e1;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.code-added {
|
|
148
|
+
color: #78f87e;
|
|
149
|
+
background: rgba(120, 248, 126, 0.12);
|
|
150
|
+
display: block;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.card-actions {
|
|
154
|
+
display: flex;
|
|
155
|
+
justify-content: flex-end;
|
|
156
|
+
margin-top: 4px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.btn-primary-action {
|
|
160
|
+
display: inline-flex;
|
|
161
|
+
align-items: center;
|
|
162
|
+
gap: 6px;
|
|
163
|
+
background: #6366f1;
|
|
164
|
+
color: #ffffff;
|
|
165
|
+
border: none;
|
|
166
|
+
border-radius: 4px;
|
|
167
|
+
padding: 5px 10px;
|
|
168
|
+
font-size: 11.5px;
|
|
169
|
+
font-weight: 600;
|
|
170
|
+
cursor: pointer;
|
|
171
|
+
transition: background 0.15s ease, transform 0.1s ease;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.btn-primary-action:hover {
|
|
175
|
+
background: #4f46e5;
|
|
176
|
+
transform: translateY(-1px);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.btn-primary-action:active {
|
|
180
|
+
transform: translateY(0);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.action-icon {
|
|
184
|
+
font-family: monospace;
|
|
185
|
+
font-weight: bold;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* IbGib Metadata */
|
|
189
|
+
.meta-property {
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-direction: column;
|
|
192
|
+
gap: 2px;
|
|
193
|
+
font-size: 11.5px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.prop-label {
|
|
197
|
+
color: #64748b;
|
|
198
|
+
font-size: 10.5px;
|
|
199
|
+
font-weight: 600;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.prop-val {
|
|
203
|
+
color: #f1f5f9;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.prop-val.mono {
|
|
207
|
+
font-family: monospace;
|
|
208
|
+
font-size: 11px;
|
|
209
|
+
color: #cbd5e1;
|
|
210
|
+
word-break: break-all;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.rel8ns-tree {
|
|
214
|
+
display: flex;
|
|
215
|
+
flex-direction: column;
|
|
216
|
+
gap: 3px;
|
|
217
|
+
padding-left: 8px;
|
|
218
|
+
margin-top: 2px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.rel8n-item {
|
|
222
|
+
display: flex;
|
|
223
|
+
gap: 6px;
|
|
224
|
+
font-size: 11px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.rel8n-key {
|
|
228
|
+
color: #818cf8;
|
|
229
|
+
font-weight: 600;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.rel8n-val {
|
|
233
|
+
color: #94a3b8;
|
|
234
|
+
word-break: break-all;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.text-success {
|
|
238
|
+
color: #34d399;
|
|
239
|
+
font-weight: 500;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.text-muted {
|
|
243
|
+
color: #94a3b8;
|
|
244
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<div id="notes-inspector-root" class="notes-inspector-root">
|
|
2
|
+
<!-- Header -->
|
|
3
|
+
<div class="inspector-header">
|
|
4
|
+
<div class="inspector-title-row">
|
|
5
|
+
<span class="inspector-icon">🔍</span>
|
|
6
|
+
<span class="inspector-title">Contextual Inspector</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="inspector-header-actions">
|
|
9
|
+
<button id="btn-inspector-close" class="btn-inspector-close" title="Close Inspector">✕</button>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Inspector Content Scroll Area -->
|
|
14
|
+
<div class="inspector-scroll-content">
|
|
15
|
+
<!-- Card 1: Referenced Code / Artifact -->
|
|
16
|
+
<div class="inspector-card">
|
|
17
|
+
<div class="card-header">
|
|
18
|
+
<span class="card-icon">📄</span>
|
|
19
|
+
<span class="card-title">Referenced Code</span>
|
|
20
|
+
<span id="anchor-badge" class="badge-line">L1080</span>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="card-body">
|
|
23
|
+
<div class="file-path-row">
|
|
24
|
+
<span id="inspector-file-path" class="file-path" title="src/client/ui/shell/space-gib-shell-service.mts">src/client/ui/shell/space-gib-shell-service.mts</span>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="code-snippet-box">
|
|
27
|
+
<pre><code id="inspector-code-snippet">1079:
|
|
28
|
+
1080: const goToCosmos = () => {
|
|
29
|
+
1081: this.switchToSpacesMode();
|
|
30
|
+
1082: this.cosmosNavigatorInstance?.setZoomState('cosmos');
|
|
31
|
+
1083: this.setActiveActivityBarButton('cosmos');
|
|
32
|
+
1084:<span class="code-added">+ this.showLeftPanelView('cosmos');</span>
|
|
33
|
+
1085: };</code></pre>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="card-actions">
|
|
36
|
+
<button id="btn-view-in-code" class="btn-primary-action" title="Jump to Code Editor in Code Galaxy">
|
|
37
|
+
<span class="action-icon"></></span>
|
|
38
|
+
<span class="action-label">View in Code Galaxy</span>
|
|
39
|
+
</button>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<!-- Card 2: IbGib Node Inspector -->
|
|
45
|
+
<div class="inspector-card">
|
|
46
|
+
<div class="card-header">
|
|
47
|
+
<span class="card-icon">🧬</span>
|
|
48
|
+
<span class="card-title">IbGib Node Inspector</span>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="card-body">
|
|
51
|
+
<div class="meta-property">
|
|
52
|
+
<span class="prop-label">Address:</span>
|
|
53
|
+
<span id="node-addr" class="prop-val mono">comment 12-space-sync-bug^gib_4f9a</span>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="meta-property">
|
|
56
|
+
<span class="prop-label">Author:</span>
|
|
57
|
+
<span id="node-author" class="prop-val">👤 @bill (Keystone: 0E0F5A...)</span>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="meta-property">
|
|
60
|
+
<span class="prop-label">Space:</span>
|
|
61
|
+
<span id="node-space" class="prop-val">notes_space_1 (continuous timeline)</span>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="meta-property">
|
|
64
|
+
<span class="prop-label">Rel8ns:</span>
|
|
65
|
+
<div class="rel8ns-tree">
|
|
66
|
+
<div class="rel8n-item">
|
|
67
|
+
<span class="rel8n-key">target:</span>
|
|
68
|
+
<span class="rel8n-val mono">b2t_file^ABC123@code_galaxy/main</span>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="rel8n-item">
|
|
71
|
+
<span class="rel8n-key">past:</span>
|
|
72
|
+
<span class="rel8n-val mono">comment^gib_prev_9a2</span>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<!-- Card 3: Security & Encryption -->
|
|
80
|
+
<div class="inspector-card">
|
|
81
|
+
<div class="card-header">
|
|
82
|
+
<span class="card-icon">🛡️</span>
|
|
83
|
+
<span class="card-title">Security & Integrity</span>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="card-body">
|
|
86
|
+
<div class="meta-property">
|
|
87
|
+
<span class="prop-label">AuthN / AuthZ:</span>
|
|
88
|
+
<span class="prop-val text-success">✓ Keystone Verified</span>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="meta-property">
|
|
91
|
+
<span class="prop-label">Payload Encryption:</span>
|
|
92
|
+
<span id="node-encryption" class="prop-val text-muted">Plaintext (Signed)</span>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import thisCss from "./notes-inspector.css";
|
|
2
|
+
import thisHtml from "./notes-inspector.html";
|
|
3
|
+
|
|
4
|
+
import { ROOT_ADDR } from "@ibgib/ts-gib/dist/V1/constants.mjs";
|
|
5
|
+
import { IbGibAddr } from "@ibgib/ts-gib/dist/types.mjs";
|
|
6
|
+
import { IbGib_V1 } from "@ibgib/ts-gib/dist/V1/types.mjs";
|
|
7
|
+
import {
|
|
8
|
+
IbGibDynamicComponentMetaBase, IbGibDynamicComponentInstanceBase,
|
|
9
|
+
} from "@ibgib/web-gib/dist/ui/component/ibgib-dynamic-component-bases.mjs";
|
|
10
|
+
import {
|
|
11
|
+
ElementsBase, IbGibDynamicComponentInstance,
|
|
12
|
+
} from "@ibgib/web-gib/dist/ui/component/component-types.mjs";
|
|
13
|
+
import { getComponentCtorArg } from "@ibgib/web-gib/dist/app-bootstrap/init-orchestration.mjs";
|
|
14
|
+
|
|
15
|
+
export const NOTES_INSPECTOR_COMPONENT_NAME = 'space-gib-notes-inspector';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Metadata factory for space-gib-notes-inspector Web Component.
|
|
19
|
+
*/
|
|
20
|
+
export class NotesInspectorComponentMeta extends IbGibDynamicComponentMetaBase {
|
|
21
|
+
protected lc: string = `[${NotesInspectorComponentMeta.name}]`;
|
|
22
|
+
|
|
23
|
+
routeRegExp?: RegExp = new RegExp(`^${NOTES_INSPECTOR_COMPONENT_NAME}$`);
|
|
24
|
+
componentName = NOTES_INSPECTOR_COMPONENT_NAME;
|
|
25
|
+
|
|
26
|
+
constructor() {
|
|
27
|
+
super(getComponentCtorArg());
|
|
28
|
+
if (!customElements.get(this.componentName)) {
|
|
29
|
+
customElements.define(this.componentName, NotesInspectorComponentInstance);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async createInstance({
|
|
34
|
+
path,
|
|
35
|
+
ibGibAddr
|
|
36
|
+
}: {
|
|
37
|
+
path: string;
|
|
38
|
+
ibGibAddr: IbGibAddr;
|
|
39
|
+
}): Promise<IbGibDynamicComponentInstance> {
|
|
40
|
+
const component = document.createElement(this.componentName) as NotesInspectorComponentInstance;
|
|
41
|
+
await component.initialize({
|
|
42
|
+
ibGibAddr: ibGibAddr || ROOT_ADDR,
|
|
43
|
+
meta: this,
|
|
44
|
+
html: thisHtml,
|
|
45
|
+
css: [thisCss],
|
|
46
|
+
});
|
|
47
|
+
return component;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Elements inside Shadow Root.
|
|
53
|
+
*/
|
|
54
|
+
export interface NotesInspectorElements extends ElementsBase {
|
|
55
|
+
rootEl: HTMLDivElement;
|
|
56
|
+
filePathEl: HTMLSpanElement;
|
|
57
|
+
codeSnippetEl: HTMLElement;
|
|
58
|
+
anchorBadgeEl: HTMLSpanElement;
|
|
59
|
+
btnViewInCodeEl: HTMLButtonElement;
|
|
60
|
+
btnCloseEl: HTMLButtonElement;
|
|
61
|
+
nodeAddrEl: HTMLSpanElement;
|
|
62
|
+
nodeAuthorEl: HTMLSpanElement;
|
|
63
|
+
nodeSpaceEl: HTMLSpanElement;
|
|
64
|
+
nodeEncryptionEl: HTMLSpanElement;
|
|
65
|
+
contentEl: HTMLDivElement;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Contextual Inspector Component Instance.
|
|
70
|
+
*/
|
|
71
|
+
export class NotesInspectorComponentInstance
|
|
72
|
+
extends IbGibDynamicComponentInstanceBase<IbGib_V1, NotesInspectorElements>
|
|
73
|
+
implements IbGibDynamicComponentInstance<IbGib_V1, NotesInspectorElements> {
|
|
74
|
+
|
|
75
|
+
protected lc: string = `[${NotesInspectorComponentInstance.name}]`;
|
|
76
|
+
|
|
77
|
+
private currentFile: string = 'src/client/ui/shell/space-gib-shell-service.mts';
|
|
78
|
+
private currentLine: number = 1080;
|
|
79
|
+
|
|
80
|
+
get el(): NotesInspectorElements {
|
|
81
|
+
if (!this.elements) {
|
|
82
|
+
throw new Error(`elements is not defined in ${this.lc}`);
|
|
83
|
+
}
|
|
84
|
+
return this.elements;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
override async created(): Promise<void> {
|
|
88
|
+
const shadow = this.shadowRoot!;
|
|
89
|
+
this.elements = {
|
|
90
|
+
rootEl: shadow.getElementById('notes-inspector-root') as HTMLDivElement,
|
|
91
|
+
filePathEl: shadow.getElementById('inspector-file-path') as HTMLSpanElement,
|
|
92
|
+
codeSnippetEl: shadow.getElementById('inspector-code-snippet') as HTMLElement,
|
|
93
|
+
anchorBadgeEl: shadow.getElementById('anchor-badge') as HTMLSpanElement,
|
|
94
|
+
btnViewInCodeEl: shadow.getElementById('btn-view-in-code') as HTMLButtonElement,
|
|
95
|
+
btnCloseEl: shadow.getElementById('btn-inspector-close') as HTMLButtonElement,
|
|
96
|
+
nodeAddrEl: shadow.getElementById('node-addr') as HTMLSpanElement,
|
|
97
|
+
nodeAuthorEl: shadow.getElementById('node-author') as HTMLSpanElement,
|
|
98
|
+
nodeSpaceEl: shadow.getElementById('node-space') as HTMLSpanElement,
|
|
99
|
+
nodeEncryptionEl: shadow.getElementById('node-encryption') as HTMLSpanElement,
|
|
100
|
+
contentEl: shadow.getElementById('notes-inspector-root') as HTMLDivElement,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
this.bindEvents();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
override async disconnected(): Promise<void> {
|
|
107
|
+
// Lifecycle teardown if required
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public inspectFileAnchor(opts: { file: string; line?: number; snippet?: string }): void {
|
|
111
|
+
this.currentFile = opts.file;
|
|
112
|
+
this.currentLine = opts.line || 1;
|
|
113
|
+
|
|
114
|
+
if (this.elements?.filePathEl) {
|
|
115
|
+
this.elements.filePathEl.textContent = opts.file;
|
|
116
|
+
this.elements.filePathEl.title = opts.file;
|
|
117
|
+
}
|
|
118
|
+
if (this.elements?.anchorBadgeEl) {
|
|
119
|
+
this.elements.anchorBadgeEl.textContent = `L${this.currentLine}`;
|
|
120
|
+
}
|
|
121
|
+
if (this.elements?.codeSnippetEl && opts.snippet) {
|
|
122
|
+
this.elements.codeSnippetEl.textContent = opts.snippet;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
public inspectNode(opts: { addr: string; author?: string; space?: string; encryption?: string }): void {
|
|
127
|
+
if (this.elements?.nodeAddrEl) this.elements.nodeAddrEl.textContent = opts.addr;
|
|
128
|
+
if (this.elements?.nodeAuthorEl && opts.author) this.elements.nodeAuthorEl.textContent = opts.author;
|
|
129
|
+
if (this.elements?.nodeSpaceEl && opts.space) this.elements.nodeSpaceEl.textContent = opts.space;
|
|
130
|
+
if (this.elements?.nodeEncryptionEl && opts.encryption) this.elements.nodeEncryptionEl.textContent = opts.encryption;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private bindEvents(): void {
|
|
134
|
+
this.el.btnViewInCodeEl?.addEventListener('click', () => {
|
|
135
|
+
this.dispatchEvent(new CustomEvent('space-gib-jump-to-code-requested', {
|
|
136
|
+
detail: {
|
|
137
|
+
file: this.currentFile,
|
|
138
|
+
line: this.currentLine,
|
|
139
|
+
},
|
|
140
|
+
bubbles: true,
|
|
141
|
+
composed: true,
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
this.el.btnCloseEl?.addEventListener('click', () => {
|
|
146
|
+
this.dispatchEvent(new CustomEvent('space-gib-inspector-close-requested', {
|
|
147
|
+
bubbles: true,
|
|
148
|
+
composed: true,
|
|
149
|
+
}));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# space-gib-pitch Web Component Specification
|
|
2
|
+
|
|
3
|
+
## 1. Overview & Architectural Role
|
|
4
|
+
|
|
5
|
+
`space-gib-pitch` is an `@ibgib` Web Component that provides an investment pitch and vision overview for `space-gib`.
|
|
6
|
+
It is launched when clicking the dead-center gold `💰 Pitch` button in the header or the drifting pitch node in the active cosmos view.
|
|
7
|
+
|
|
8
|
+
### Investment Thesis
|
|
9
|
+
- **Decentralized Digital Property**: Breaking free from monolithic SaaS silos (GitHub/GitLab) by turning repositories, files, discussions, and assets into cryptographically addressed, self-sovereign Merkle ibgibs.
|
|
10
|
+
- **In-Band Living Discussions**: Comments and discussions travel directly with branch DAGs via inverted soft rel8ns (`data.targetAddr`), eliminating external database lock-in.
|
|
11
|
+
- **Worktree Branch Multi-Space Topology**: Lightweight, parallel branches operating across specialized code, discussion, and asset spaces.
|
|
12
|
+
- **Attribution & Economy**: Deterministic cryptographic identity through Keystones.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Component Design & Capabilities
|
|
17
|
+
|
|
18
|
+
- **Tag Name**: `<space-gib-pitch>`
|
|
19
|
+
- **Host Container**: `#pitch-component-container` inside `#view-pitch` in `#center-panel-content`
|
|
20
|
+
- **Header**:
|
|
21
|
+
- Gold badge: `✦ Investment Pitch & Vision ✦`
|
|
22
|
+
- Title: `space-gib: The Next Generation Decentralized Substrate`
|
|
23
|
+
- Tagline: `Decentralized VCS, living in-band discussions, and cryptographically attributed spaces.`
|
|
24
|
+
- **Pillars / Highlights**:
|
|
25
|
+
- `🌐 Beyond Centralized Code Silos`: Sovereign ownership, immune to platform deplatforming.
|
|
26
|
+
- `⚡ Inverted Soft Rel8ns`: Cryptographic Merkle-links with decoupled graph availability.
|
|
27
|
+
- `🌿 Parallel Worktree Branches`: Scalable multi-space projections.
|
|
28
|
+
- `🔐 Keystone Cryptographic Attribution`: Built-in zero-knowledge identity and session sync.
|
|
29
|
+
- **Action Tier**:
|
|
30
|
+
- `💰 Back space-gib (Join Cosmic Syndicate)`
|
|
31
|
+
- `✉️ Contact Founders`
|
|
32
|
+
- `↺ Return to Workspace` (dispatches `space-gib-pitch-closed` to restore previous workspace view)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 3. Custom Event Contracts
|
|
37
|
+
|
|
38
|
+
- `space-gib-pitch-closed`: Dispatched when the user clicks "Return to Workspace", instructing `SpaceGibShellService` to switch back to spaces/repos.
|
|
39
|
+
- `space-gib-pitch-invest-clicked`: Dispatched when the user clicks "Back space-gib".
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 4. Lifecycle & Integration
|
|
44
|
+
|
|
45
|
+
- Scaffolds `PitchComponentMeta` (extends `IbGibDynamicComponentMetaBase`)
|
|
46
|
+
- Scaffolds `PitchComponentInstance` (extends `IbGibDynamicComponentInstanceBase<IbGib_V1, PitchElements>`)
|
|
47
|
+
- Implements `initialize()`, `created()`, `disconnected(): Promise<void>`
|
|
48
|
+
- Registered in `SpaceGibShellService` via `registerPitchComponent()`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getComponentSvc } from "@ibgib/web-gib/dist/ui/component/ibgib-component-service.mjs";
|
|
2
|
+
import { PitchComponentMeta } from "./pitch.mjs";
|
|
3
|
+
|
|
4
|
+
export * from "./pitch.mjs";
|
|
5
|
+
|
|
6
|
+
export async function registerPitchComponent(): Promise<void> {
|
|
7
|
+
const componentSvc = await getComponentSvc();
|
|
8
|
+
componentSvc.registerComponentMeta(new PitchComponentMeta());
|
|
9
|
+
}
|