@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,295 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: 100%;
|
|
6
|
+
background: var(--clr-bg-deep, #05080f);
|
|
7
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
8
|
+
font-family: var(--font-sans, system-ui, -apple-system, sans-serif);
|
|
9
|
+
overflow-y: auto;
|
|
10
|
+
overflow-x: hidden;
|
|
11
|
+
position: relative;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.pitch-root {
|
|
15
|
+
width: 100%;
|
|
16
|
+
min-height: 100%;
|
|
17
|
+
padding: 2.5rem 1.5rem 4rem;
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
align-items: center;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.pitch-container {
|
|
25
|
+
width: 100%;
|
|
26
|
+
max-width: 900px;
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
gap: 2.5rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* ── Top Navigation Bar ── */
|
|
33
|
+
.pitch-nav {
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: space-between;
|
|
37
|
+
width: 100%;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.pitch-return-btn {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 0.5rem;
|
|
44
|
+
background: rgba(255, 255, 255, 0.05);
|
|
45
|
+
border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.1));
|
|
46
|
+
border-radius: var(--radius-sm, 6px);
|
|
47
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
48
|
+
padding: 0.45rem 0.9rem;
|
|
49
|
+
font-size: 0.85rem;
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
transition: all 150ms ease;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.pitch-return-btn:hover {
|
|
55
|
+
background: rgba(255, 255, 255, 0.1);
|
|
56
|
+
color: var(--clr-text-primary, #fff);
|
|
57
|
+
border-color: rgba(255, 255, 255, 0.25);
|
|
58
|
+
transform: translateX(-2px);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.pitch-badge {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 0.4rem;
|
|
65
|
+
background: rgba(251, 191, 36, 0.1);
|
|
66
|
+
border: 1px solid rgba(251, 191, 36, 0.35);
|
|
67
|
+
border-radius: 999px;
|
|
68
|
+
padding: 0.25rem 0.8rem;
|
|
69
|
+
font-size: 0.75rem;
|
|
70
|
+
font-weight: 700;
|
|
71
|
+
color: #fde047;
|
|
72
|
+
text-transform: uppercase;
|
|
73
|
+
letter-spacing: 0.06em;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* ── Hero Section ── */
|
|
77
|
+
.pitch-hero {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
align-items: center;
|
|
81
|
+
text-align: center;
|
|
82
|
+
position: relative;
|
|
83
|
+
padding: 1.5rem 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.hero-glow {
|
|
87
|
+
position: absolute;
|
|
88
|
+
top: 50%;
|
|
89
|
+
left: 50%;
|
|
90
|
+
transform: translate(-50%, -50%);
|
|
91
|
+
width: 320px;
|
|
92
|
+
height: 180px;
|
|
93
|
+
background: radial-gradient(circle, rgba(251, 191, 36, 0.18) 0%, transparent 70%);
|
|
94
|
+
pointer-events: none;
|
|
95
|
+
z-index: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.hero-money-icon {
|
|
99
|
+
font-size: 3rem;
|
|
100
|
+
line-height: 1;
|
|
101
|
+
margin-bottom: 0.85rem;
|
|
102
|
+
filter: drop-shadow(0 0 20px rgba(251, 191, 36, 0.6));
|
|
103
|
+
animation: float-icon 4s ease-in-out infinite;
|
|
104
|
+
z-index: 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@keyframes float-icon {
|
|
108
|
+
0%, 100% { transform: translateY(0); }
|
|
109
|
+
50% { transform: translateY(-8px); }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.hero-title {
|
|
113
|
+
margin: 0 0 1rem;
|
|
114
|
+
font-size: 2.25rem;
|
|
115
|
+
font-weight: 800;
|
|
116
|
+
line-height: 1.25;
|
|
117
|
+
letter-spacing: -0.02em;
|
|
118
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
119
|
+
z-index: 1;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.highlight-gold {
|
|
123
|
+
color: #fde047;
|
|
124
|
+
text-shadow: 0 0 24px rgba(251, 191, 36, 0.4);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.hero-subtitle {
|
|
128
|
+
margin: 0;
|
|
129
|
+
font-size: 1.05rem;
|
|
130
|
+
line-height: 1.6;
|
|
131
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
132
|
+
max-width: 720px;
|
|
133
|
+
z-index: 1;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.hero-subtitle code {
|
|
137
|
+
background: rgba(255, 255, 255, 0.06);
|
|
138
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
139
|
+
border-radius: 4px;
|
|
140
|
+
padding: 0.15rem 0.4rem;
|
|
141
|
+
font-family: var(--font-mono, monospace);
|
|
142
|
+
color: var(--clr-accent, #78f87e);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ── Pillars Grid ── */
|
|
146
|
+
.pitch-pillars-grid {
|
|
147
|
+
display: grid;
|
|
148
|
+
grid-template-columns: repeat(auto-fit, minmax(380px, 1fr));
|
|
149
|
+
gap: 1.25rem;
|
|
150
|
+
width: 100%;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.pillar-card {
|
|
154
|
+
background: rgba(18, 25, 42, 0.55);
|
|
155
|
+
border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
|
|
156
|
+
border-radius: var(--radius-md, 12px);
|
|
157
|
+
padding: 1.5rem;
|
|
158
|
+
display: flex;
|
|
159
|
+
flex-direction: column;
|
|
160
|
+
gap: 0.65rem;
|
|
161
|
+
backdrop-filter: blur(10px);
|
|
162
|
+
transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.pillar-card:hover {
|
|
166
|
+
transform: translateY(-3px);
|
|
167
|
+
border-color: rgba(255, 255, 255, 0.2);
|
|
168
|
+
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.pillar-card.gold-border {
|
|
172
|
+
border-color: rgba(251, 191, 36, 0.35);
|
|
173
|
+
background: rgba(251, 191, 36, 0.02);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.pillar-card.gold-border:hover {
|
|
177
|
+
border-color: rgba(251, 191, 36, 0.7);
|
|
178
|
+
box-shadow: 0 8px 32px rgba(251, 191, 36, 0.15);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.pillar-icon {
|
|
182
|
+
font-size: 1.75rem;
|
|
183
|
+
line-height: 1;
|
|
184
|
+
margin-bottom: 0.25rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.pillar-title {
|
|
188
|
+
margin: 0;
|
|
189
|
+
font-size: 1.1rem;
|
|
190
|
+
font-weight: 700;
|
|
191
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.pillar-desc {
|
|
195
|
+
margin: 0;
|
|
196
|
+
font-size: 0.88rem;
|
|
197
|
+
line-height: 1.5;
|
|
198
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.pillar-desc code {
|
|
202
|
+
background: rgba(255, 255, 255, 0.05);
|
|
203
|
+
padding: 0.1rem 0.35rem;
|
|
204
|
+
border-radius: 4px;
|
|
205
|
+
font-family: var(--font-mono, monospace);
|
|
206
|
+
color: var(--clr-accent, #78f87e);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* ── CTA Card ── */
|
|
210
|
+
.pitch-cta-card {
|
|
211
|
+
background: radial-gradient(circle at center, rgba(251, 191, 36, 0.12) 0%, rgba(15, 20, 32, 0.85) 90%);
|
|
212
|
+
border: 1.5px solid rgba(251, 191, 36, 0.45);
|
|
213
|
+
border-radius: var(--radius-md, 14px);
|
|
214
|
+
padding: 2rem 2.25rem;
|
|
215
|
+
display: flex;
|
|
216
|
+
flex-direction: column;
|
|
217
|
+
gap: 1.5rem;
|
|
218
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.6), inset 0 0 20px rgba(251, 191, 36, 0.08);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.cta-header {
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 1.25rem;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.cta-emoji {
|
|
228
|
+
font-size: 2.5rem;
|
|
229
|
+
line-height: 1;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.cta-heading-group {
|
|
233
|
+
display: flex;
|
|
234
|
+
flex-direction: column;
|
|
235
|
+
gap: 0.35rem;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.cta-title {
|
|
239
|
+
margin: 0;
|
|
240
|
+
font-size: 1.35rem;
|
|
241
|
+
font-weight: 800;
|
|
242
|
+
color: #fde047;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.cta-desc {
|
|
246
|
+
margin: 0;
|
|
247
|
+
font-size: 0.925rem;
|
|
248
|
+
line-height: 1.5;
|
|
249
|
+
color: var(--clr-text-secondary, #b4c0d3);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.cta-actions {
|
|
253
|
+
display: flex;
|
|
254
|
+
align-items: center;
|
|
255
|
+
gap: 1rem;
|
|
256
|
+
flex-wrap: wrap;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.cta-btn {
|
|
260
|
+
display: flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
gap: 0.5rem;
|
|
263
|
+
padding: 0.65rem 1.4rem;
|
|
264
|
+
border-radius: var(--radius-sm, 6px);
|
|
265
|
+
font-family: inherit;
|
|
266
|
+
font-size: 0.9rem;
|
|
267
|
+
font-weight: 700;
|
|
268
|
+
cursor: pointer;
|
|
269
|
+
transition: all 150ms ease;
|
|
270
|
+
border: 1px solid transparent;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.cta-btn.primary {
|
|
274
|
+
background: linear-gradient(135deg, #fde047 0%, #d97706 100%);
|
|
275
|
+
color: #05080f;
|
|
276
|
+
box-shadow: 0 4px 18px rgba(251, 191, 36, 0.4);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.cta-btn.primary:hover {
|
|
280
|
+
transform: translateY(-2px);
|
|
281
|
+
box-shadow: 0 6px 26px rgba(251, 191, 36, 0.65);
|
|
282
|
+
background: linear-gradient(135deg, #fef08a 0%, #f59e0b 100%);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.cta-btn.secondary {
|
|
286
|
+
background: rgba(255, 255, 255, 0.06);
|
|
287
|
+
border-color: rgba(255, 255, 255, 0.15);
|
|
288
|
+
color: var(--clr-text-primary, #f0f4fc);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.cta-btn.secondary:hover {
|
|
292
|
+
background: rgba(255, 255, 255, 0.12);
|
|
293
|
+
border-color: rgba(255, 255, 255, 0.3);
|
|
294
|
+
transform: translateY(-2px);
|
|
295
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<div class="pitch-root" id="pitch-root">
|
|
2
|
+
<div class="pitch-container">
|
|
3
|
+
|
|
4
|
+
<!-- Top Navigation / Close -->
|
|
5
|
+
<div class="pitch-nav">
|
|
6
|
+
<button id="btn-pitch-return" class="pitch-return-btn" type="button" title="Return to Workspace">
|
|
7
|
+
<span class="btn-icon">↺</span>
|
|
8
|
+
<span class="btn-text">Return to Cosmos</span>
|
|
9
|
+
</button>
|
|
10
|
+
<div class="pitch-badge">
|
|
11
|
+
<span class="badge-sparkle">✨</span>
|
|
12
|
+
<span class="badge-text">Investment Pitch</span>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<!-- Hero Section -->
|
|
17
|
+
<section class="pitch-hero">
|
|
18
|
+
<div class="hero-glow"></div>
|
|
19
|
+
<div class="hero-money-icon">💰</div>
|
|
20
|
+
<h1 class="hero-title">
|
|
21
|
+
The Future of <span class="highlight-gold">Decentralized Software</span> & Digital Property
|
|
22
|
+
</h1>
|
|
23
|
+
<p class="hero-subtitle">
|
|
24
|
+
<code>space-gib</code> re-architects version control, collaborative code review, and project management
|
|
25
|
+
into a self-sovereign cryptographic Merkle graph. No centralized servers, no SaaS lock-in, and full data sovereignty.
|
|
26
|
+
</p>
|
|
27
|
+
</section>
|
|
28
|
+
|
|
29
|
+
<!-- Core Pillars Grid -->
|
|
30
|
+
<div class="pitch-pillars-grid">
|
|
31
|
+
<!-- Pillar 1 -->
|
|
32
|
+
<div class="pillar-card">
|
|
33
|
+
<div class="pillar-icon">🌐</div>
|
|
34
|
+
<h3 class="pillar-title">Beyond Centralized Silos</h3>
|
|
35
|
+
<p class="pillar-desc">
|
|
36
|
+
GitHub and GitLab hold your issues, discussions, and commit graphs hostage in proprietary relational databases.
|
|
37
|
+
<code>space-gib</code> replaces centralized SaaS with immutable Merkle DAGs owned entirely by developers.
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<!-- Pillar 2 -->
|
|
42
|
+
<div class="pillar-card gold-border">
|
|
43
|
+
<div class="pillar-icon">⚡</div>
|
|
44
|
+
<h3 class="pillar-title">Inverted Soft Rel8ns</h3>
|
|
45
|
+
<p class="pillar-desc">
|
|
46
|
+
Code reviews, living companion notes, and discussions are first-class Merkle nodes linked directly to code
|
|
47
|
+
via <code>data.targetAddr</code>. Metadata points to code, keeping codebases clean for lightweight selective cloning.
|
|
48
|
+
</p>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<!-- Pillar 3 -->
|
|
52
|
+
<div class="pillar-card">
|
|
53
|
+
<div class="pillar-icon">🌿</div>
|
|
54
|
+
<h3 class="pillar-title">Multi-Space Worktree Topology</h3>
|
|
55
|
+
<p class="pillar-desc">
|
|
56
|
+
Branches operate like lightweight git worktrees across specialized peer spaces (codebases, discussions, docs, and assets).
|
|
57
|
+
Users can project, clone, and merge spaces independently or as unified superspaces.
|
|
58
|
+
</p>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<!-- Pillar 4 -->
|
|
62
|
+
<div class="pillar-card">
|
|
63
|
+
<div class="pillar-icon">🔐</div>
|
|
64
|
+
<h3 class="pillar-title">Deterministic Attribution</h3>
|
|
65
|
+
<p class="pillar-desc">
|
|
66
|
+
Zero-knowledge Keystones provide verifiable cryptographic identity and permissionless sync across edge devices
|
|
67
|
+
and federated hubs without requiring centralized email/password accounts.
|
|
68
|
+
</p>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<!-- Investment / Call to Action Section -->
|
|
73
|
+
<section class="pitch-cta-card">
|
|
74
|
+
<div class="cta-header">
|
|
75
|
+
<span class="cta-emoji">🌟</span>
|
|
76
|
+
<div class="cta-heading-group">
|
|
77
|
+
<h2 class="cta-title">Join the Cosmic Syndicate</h2>
|
|
78
|
+
<p class="cta-desc">
|
|
79
|
+
We are opening strategic seed participation for visionaries, developer advocates, and decentralized infrastructure funds.
|
|
80
|
+
</p>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div class="cta-actions">
|
|
85
|
+
<button id="btn-pitch-invest" class="cta-btn primary" type="button">
|
|
86
|
+
<span class="btn-emoji">💰</span>
|
|
87
|
+
<span>Express Investment Interest</span>
|
|
88
|
+
</button>
|
|
89
|
+
<button id="btn-pitch-contact" class="cta-btn secondary" type="button">
|
|
90
|
+
<span class="btn-emoji">✉️</span>
|
|
91
|
+
<span>Contact Founders</span>
|
|
92
|
+
</button>
|
|
93
|
+
</div>
|
|
94
|
+
</section>
|
|
95
|
+
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import thisCss from "./pitch.css";
|
|
2
|
+
import thisHtml from "./pitch.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 { extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
|
|
8
|
+
import {
|
|
9
|
+
IbGibDynamicComponentMetaBase, IbGibDynamicComponentInstanceBase,
|
|
10
|
+
} from "@ibgib/web-gib/dist/ui/component/ibgib-dynamic-component-bases.mjs";
|
|
11
|
+
import {
|
|
12
|
+
ElementsBase, IbGibDynamicComponentInstance,
|
|
13
|
+
} from "@ibgib/web-gib/dist/ui/component/component-types.mjs";
|
|
14
|
+
import { getComponentCtorArg } from "@ibgib/web-gib/dist/app-bootstrap/init-orchestration.mjs";
|
|
15
|
+
|
|
16
|
+
export const PITCH_COMPONENT_NAME = 'space-gib-pitch';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Metadata factory for space-gib-pitch Web Component.
|
|
20
|
+
*/
|
|
21
|
+
export class PitchComponentMeta extends IbGibDynamicComponentMetaBase {
|
|
22
|
+
protected lc: string = `[${PitchComponentMeta.name}]`;
|
|
23
|
+
|
|
24
|
+
routeRegExp?: RegExp = new RegExp(`^${PITCH_COMPONENT_NAME}$`);
|
|
25
|
+
componentName = PITCH_COMPONENT_NAME;
|
|
26
|
+
|
|
27
|
+
constructor() {
|
|
28
|
+
super(getComponentCtorArg());
|
|
29
|
+
if (!customElements.get(this.componentName)) {
|
|
30
|
+
customElements.define(this.componentName, PitchComponentInstance);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async createInstance({
|
|
35
|
+
path,
|
|
36
|
+
ibGibAddr
|
|
37
|
+
}: {
|
|
38
|
+
path: string;
|
|
39
|
+
ibGibAddr: IbGibAddr;
|
|
40
|
+
}): Promise<IbGibDynamicComponentInstance> {
|
|
41
|
+
const component = document.createElement(this.componentName) as PitchComponentInstance;
|
|
42
|
+
await component.initialize({
|
|
43
|
+
ibGibAddr: ibGibAddr || ROOT_ADDR,
|
|
44
|
+
meta: this,
|
|
45
|
+
html: thisHtml,
|
|
46
|
+
css: [thisCss],
|
|
47
|
+
});
|
|
48
|
+
return component;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* References to DOM elements within the pitch component Shadow Root.
|
|
54
|
+
*/
|
|
55
|
+
export interface PitchElements extends ElementsBase {
|
|
56
|
+
rootEl: HTMLDivElement;
|
|
57
|
+
btnReturnEl: HTMLButtonElement;
|
|
58
|
+
btnInvestEl: HTMLButtonElement;
|
|
59
|
+
btnContactEl: HTMLButtonElement;
|
|
60
|
+
contentEl: HTMLDivElement;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Concrete implementation of the space-gib-pitch component.
|
|
65
|
+
*/
|
|
66
|
+
export class PitchComponentInstance
|
|
67
|
+
extends IbGibDynamicComponentInstanceBase<IbGib_V1, PitchElements>
|
|
68
|
+
implements IbGibDynamicComponentInstance<IbGib_V1, PitchElements> {
|
|
69
|
+
|
|
70
|
+
protected lc: string = `[${PitchComponentInstance.name}]`;
|
|
71
|
+
|
|
72
|
+
get el(): PitchElements {
|
|
73
|
+
if (!this.elements) {
|
|
74
|
+
throw new Error(`elements is not defined in ${this.lc}`);
|
|
75
|
+
}
|
|
76
|
+
return this.elements;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override async created(): Promise<void> {
|
|
80
|
+
const lc = `${this.lc}[${this.created.name}]`;
|
|
81
|
+
try {
|
|
82
|
+
const root = this.shadowRoot!;
|
|
83
|
+
this.elements = {
|
|
84
|
+
rootEl: root.getElementById('pitch-root') as HTMLDivElement,
|
|
85
|
+
btnReturnEl: root.getElementById('btn-pitch-return') as HTMLButtonElement,
|
|
86
|
+
btnInvestEl: root.getElementById('btn-pitch-invest') as HTMLButtonElement,
|
|
87
|
+
btnContactEl: root.getElementById('btn-pitch-contact') as HTMLButtonElement,
|
|
88
|
+
contentEl: root.getElementById('pitch-root') as HTMLDivElement,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
this.bindEvents();
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private bindEvents(): void {
|
|
98
|
+
const lc = `${this.lc}[${this.bindEvents.name}]`;
|
|
99
|
+
if (!this.el) return;
|
|
100
|
+
|
|
101
|
+
this.el.btnReturnEl?.addEventListener('click', () => {
|
|
102
|
+
window.dispatchEvent(new CustomEvent('space-gib-pitch-closed', {
|
|
103
|
+
bubbles: true,
|
|
104
|
+
composed: true,
|
|
105
|
+
}));
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
this.el.btnInvestEl?.addEventListener('click', () => {
|
|
109
|
+
alert('💰 Thank you for your interest in investing in space-gib! Syndicate inquiries: invest@ibgib.space');
|
|
110
|
+
window.dispatchEvent(new CustomEvent('space-gib-pitch-interest-expressed', {
|
|
111
|
+
bubbles: true,
|
|
112
|
+
composed: true,
|
|
113
|
+
detail: { action: 'invest' }
|
|
114
|
+
}));
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
this.el.btnContactEl?.addEventListener('click', () => {
|
|
118
|
+
alert('✉️ Contact the founders: team@ibgib.space or join our decentralization syndicate.');
|
|
119
|
+
window.dispatchEvent(new CustomEvent('space-gib-pitch-interest-expressed', {
|
|
120
|
+
bubbles: true,
|
|
121
|
+
composed: true,
|
|
122
|
+
detail: { action: 'contact' }
|
|
123
|
+
}));
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
override async disconnected(): Promise<void> {
|
|
128
|
+
const lc = `${this.lc}[${this.disconnected.name}]`;
|
|
129
|
+
try {
|
|
130
|
+
// cleanup if needed
|
|
131
|
+
} catch (error) {
|
|
132
|
+
console.error(`${lc} ${extractErrorMsg(error)}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# space-gib-timeline Component Implementation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
`space-gib-timeline` is an accordion-style timeline component that lives in the left panel of `space-gib`, directly below the `space-gib-file-explorer` component with zero vertical margin. It displays chronological snapshots (commits/revisions) along a worktree branch.
|
|
5
|
+
|
|
6
|
+
## Architecture
|
|
7
|
+
- **Web Component Tag**: `<space-gib-timeline>`
|
|
8
|
+
- **Meta Class**: `TimelineComponentMeta`
|
|
9
|
+
- **Instance Class**: `TimelineComponentInstance`
|
|
10
|
+
- **Base Class**: `IbGibDynamicComponentInstanceBase<IbGib_V1, TimelineElements>`
|
|
11
|
+
- **Backing ibGib Address**: `ROOT_ADDR`
|
|
12
|
+
|
|
13
|
+
## UI Elements
|
|
14
|
+
1. **Accordion Header**:
|
|
15
|
+
- Chevron toggle (`▼` / `▶`)
|
|
16
|
+
- Timeline Emoji: `⏳`
|
|
17
|
+
- Branch Title: `main` (monospace)
|
|
18
|
+
- Badge: `TIMELINE` (styled identically to the file explorer's `worktree` badge)
|
|
19
|
+
- Action buttons: Collapse/Expand (`⇱`), Refresh (`⟳`)
|
|
20
|
+
2. **Snapshot Stream Container**:
|
|
21
|
+
- Chronological nodes connected by a subtle vertical rail
|
|
22
|
+
- Each item shows:
|
|
23
|
+
- Hash tag (e.g., `3e8f1c2`)
|
|
24
|
+
- Optional `tip` badge for the latest snapshot
|
|
25
|
+
- Commit summary title
|
|
26
|
+
- Relative timestamp
|
|
27
|
+
3. **Interactivity**:
|
|
28
|
+
- Clicking an item selects it and dispatches `space-gib-timeline-item-selected` with the snapshot details.
|
|
29
|
+
- Accordion toggle collapses or expands the snapshot stream.
|
|
30
|
+
|
|
31
|
+
## Events
|
|
32
|
+
- Dispatches `space-gib-timeline-item-selected`: Emitted when the user clicks a snapshot, containing `{ item: TimelineItem }`.
|
|
33
|
+
- Dispatches `space-gib-timeline-refresh-requested`: Emitted when the refresh button is clicked.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getComponentSvc } from "@ibgib/web-gib/dist/ui/component/ibgib-component-service.mjs";
|
|
2
|
+
import { TimelineComponentMeta, TIMELINE_COMPONENT_NAME } from "./timeline.mjs";
|
|
3
|
+
|
|
4
|
+
export * from "./timeline.mjs";
|
|
5
|
+
|
|
6
|
+
export async function registerTimelineComponent(): Promise<void> {
|
|
7
|
+
const componentSvc = await getComponentSvc();
|
|
8
|
+
componentSvc.registerComponentMeta(new TimelineComponentMeta());
|
|
9
|
+
}
|