@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.
Files changed (112) hide show
  1. package/dist/client/bootstrap.mjs +24 -51
  2. package/dist/client/chunk-25PXC4HP.mjs +9914 -0
  3. package/dist/client/chunk-RXWLL2AI.mjs +30 -0
  4. package/dist/client/css/activity-bar.css +417 -0
  5. package/dist/client/css/base.css +167 -0
  6. package/dist/client/css/components.css +218 -0
  7. package/dist/client/css/cosmic.css +557 -0
  8. package/dist/client/css/dev-tools.css +163 -0
  9. package/dist/client/css/landing.css +184 -0
  10. package/dist/client/css/layout.css +896 -0
  11. package/dist/client/css/onboarding.css +181 -0
  12. package/dist/client/css/repos.css +740 -0
  13. package/dist/client/css/variables.css +64 -0
  14. package/dist/client/index.html +202 -31
  15. package/dist/client/index.mjs +31 -31
  16. package/dist/client/script.mjs +1 -1
  17. package/dist/client/style.css +11 -1056
  18. package/dist/respec-gib.node.mjs +5 -0
  19. package/dist/server/server.mjs +6879 -3109
  20. package/package.json +6 -6
  21. package/src/client/AUTO-GENERATED-version.mts +1 -1
  22. package/src/client/cosmos/seed-cosmos-workspace.mts +69 -0
  23. package/src/client/css/activity-bar.css +417 -0
  24. package/src/client/css/base.css +167 -0
  25. package/src/client/css/components.css +218 -0
  26. package/src/client/css/cosmic.css +557 -0
  27. package/src/client/css/dev-tools.css +163 -0
  28. package/src/client/css/landing.css +184 -0
  29. package/src/client/css/layout.css +896 -0
  30. package/src/client/css/onboarding.css +181 -0
  31. package/src/client/css/repos.css +740 -0
  32. package/src/client/css/variables.css +64 -0
  33. package/src/client/dev-tools/vcs-workspace.mts +3 -3
  34. package/src/client/index.html +202 -31
  35. package/src/client/style.css +11 -1056
  36. package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
  37. package/src/client/ui/component/chat-view/chat-view.css +381 -0
  38. package/src/client/ui/component/chat-view/chat-view.html +104 -0
  39. package/src/client/ui/component/chat-view/chat-view.mts +277 -0
  40. package/src/client/ui/component/chat-view/index.mts +9 -0
  41. package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
  42. package/src/client/ui/component/clone/clone-constants.mts +16 -0
  43. package/src/client/ui/component/clone/clone-types.mts +60 -0
  44. package/src/client/ui/component/clone/clone.css +383 -0
  45. package/src/client/ui/component/clone/clone.html +89 -0
  46. package/src/client/ui/component/clone/clone.mts +620 -0
  47. package/src/client/ui/component/clone/index.mts +11 -0
  48. package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
  49. package/src/client/ui/component/code-editor/code-editor.css +275 -0
  50. package/src/client/ui/component/code-editor/code-editor.html +54 -0
  51. package/src/client/ui/component/code-editor/code-editor.mts +427 -0
  52. package/src/client/ui/component/code-editor/index.mts +9 -0
  53. package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
  54. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
  55. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +97 -0
  56. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1084 -0
  57. package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
  58. package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
  59. package/src/client/ui/component/file-explorer/file-explorer.css +256 -0
  60. package/src/client/ui/component/file-explorer/file-explorer.html +75 -0
  61. package/src/client/ui/component/file-explorer/file-explorer.mts +346 -0
  62. package/src/client/ui/component/file-explorer/index.mts +9 -0
  63. package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
  64. package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
  65. package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
  66. package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
  67. package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
  68. package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
  69. package/src/client/ui/component/nested-chat/chat/chat.mts +646 -0
  70. package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
  71. package/src/client/ui/component/nested-chat/index.mts +14 -0
  72. package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
  73. package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
  74. package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
  75. package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
  76. package/src/client/ui/component/nested-chat/nested-chat.mts +393 -0
  77. package/src/client/ui/component/notes-explorer/index.mts +9 -0
  78. package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
  79. package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
  80. package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
  81. package/src/client/ui/component/notes-inspector/index.mts +9 -0
  82. package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
  83. package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
  84. package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
  85. package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
  86. package/src/client/ui/component/pitch/index.mts +9 -0
  87. package/src/client/ui/component/pitch/pitch.css +295 -0
  88. package/src/client/ui/component/pitch/pitch.html +97 -0
  89. package/src/client/ui/component/pitch/pitch.mts +135 -0
  90. package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
  91. package/src/client/ui/component/timeline/index.mts +9 -0
  92. package/src/client/ui/component/timeline/timeline.css +264 -0
  93. package/src/client/ui/component/timeline/timeline.html +23 -0
  94. package/src/client/ui/component/timeline/timeline.mts +317 -0
  95. package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
  96. package/src/client/ui/component/timeline-item-details/index.mts +9 -0
  97. package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
  98. package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
  99. package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
  100. package/src/client/ui/router/index.mts +3 -0
  101. package/src/client/ui/router/space-gib-router-helpers.mts +272 -0
  102. package/src/client/ui/router/space-gib-router-helpers.respec.mts +353 -0
  103. package/src/client/ui/router/space-gib-router-service.mts +186 -0
  104. package/src/client/ui/router/space-gib-router-types.mts +93 -0
  105. package/src/client/ui/shell/cosmic-big-bang.mts +844 -0
  106. package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
  107. package/src/client/ui/shell/space-gib-shell-service.mts +1728 -31
  108. package/src/server/server.mts +20 -1
  109. package/tsconfig.test.json +5 -1
  110. package/dist/client/chunk-AX6BROMT.mjs +0 -1
  111. package/dist/client/chunk-CIQUGV7U.mjs +0 -25
  112. package/dist/client/chunk-YPCHYDKL.mjs +0 -3102
@@ -0,0 +1,89 @@
1
+ # space-gib Code File Editor Web Component (`space-gib-code-editor`)
2
+
3
+ Implementation specification and architecture doc for the `@ibgib` Web Component responsible for viewing and editing code files within the `space-gib` client application.
4
+
5
+ ---
6
+
7
+ ## 1. Overview & Architectural Role
8
+
9
+ * **Component Tag**: `<space-gib-code-editor>`
10
+ * **Meta Class**: `CodeEditorComponentMeta` (extends `IbGibDynamicComponentMetaBase`)
11
+ * **Instance Class**: `CodeEditorComponentInstance` (extends `IbGibDynamicComponentInstanceBase`)
12
+ * **Purpose**:
13
+ - Replaces static repository code mockup with a dynamic, encapsulated code viewer/editor.
14
+ - Combines the file view breadcrumb header and the single code editor pane into one cohesive component.
15
+ - Features `readOnly` / `readonly` mode control allowing the component to function both as an interactive code editor and as a protected viewer.
16
+ - Integrates a secondary virtual breadcrumb displaying the active branch and Merkle tip address (`@ 🌿 main [7f8a1b2]`).
17
+ - Supports synchronized line number gutters, monospace formatting, and tab key handling.
18
+
19
+ ---
20
+
21
+ ## 2. Component Design & Layout
22
+
23
+ ```
24
+ ┌────────────────────────────────────────────────────────────────────────────────────────┐
25
+ │ [my-app] / [src] / [index.ts] [@ 🌿 main 7f8a1b2] │ TypeScript · 18 lines · 🔒 Read-Only │
26
+ ├───────┬────────────────────────────────────────────────────────────────────────────────┤
27
+ │ 1 │ /** │
28
+ │ 2 │ * @module my-app/index │
29
+ │ 3 │ * Application entry point running on ibgib VCS. │
30
+ │ 4 │ */ │
31
+ │ 5 │ │
32
+ │ 6 │ import { getGlobalMetaspace } from '@ibgib/web-gib'; │
33
+ │ ... │ ... │
34
+ └───────┴────────────────────────────────────────────────────────────────────────────────┘
35
+ ```
36
+
37
+ ### Key Sub-Elements:
38
+ 1. **Header Bar (`.editor-header`)**:
39
+ - Primary breadcrumbs (`#crumb-repo`, `#crumb-path`).
40
+ - Secondary virtual tip pill (`#crumb-tip-container` with branch icon `🌿`, branch name, and tip hash).
41
+ - Stats bar: language badge (`#stat-lang`), line count (`#stat-lines`), byte size (`#stat-size`).
42
+ - Mode badge / toggle button (`#badge-mode` with `🔒 Read-Only` or `✏️ Editable`).
43
+ - Quick action: Copy to clipboard (`#btn-copy-code`).
44
+ 2. **Editor Body (`.editor-body`)**:
45
+ - Synchronized line numbers gutter (`#editor-gutter`).
46
+ - Code input / viewer textarea (`#editor-textarea`).
47
+ - Single pane (no split view).
48
+
49
+ ---
50
+
51
+ ## 3. Properties & Methods
52
+
53
+ * **`readOnly: boolean`** (and `readonly: boolean`):
54
+ - Getter and setter reflecting to textarea and DOM classes.
55
+ - Observed attribute: `readonly`.
56
+ * **`loadFile(opts: { filepath: string; content: string; branch?: string; tipAddr?: string; language?: string }): void`**:
57
+ - Updates breadcrumbs, tip address pill, textarea content, line numbers, and language badge.
58
+ * **`getContent(): string`**:
59
+ - Returns current textarea text.
60
+ * **`setContent(text: string): void`**:
61
+ - Sets textarea text and re-computes line numbers gutter.
62
+
63
+ ---
64
+
65
+ ## 4. Events
66
+
67
+ * **`space-gib-code-changed`**: Dispatched on input in editable mode:
68
+ ```typescript
69
+ detail: {
70
+ filepath: string;
71
+ content: string;
72
+ lineCount: number;
73
+ }
74
+ ```
75
+ * **`space-gib-code-copied`**: Dispatched when code is copied to clipboard.
76
+
77
+ ---
78
+
79
+ ## 5. Implementation Checklist
80
+
81
+ - [x] Create `IMPLEMENTATION.md`
82
+ - [ ] Create `code-editor.html`
83
+ - [ ] Create `code-editor.css`
84
+ - [ ] Create `code-editor.mts`
85
+ - [ ] Create `index.mts`
86
+ - [ ] Update `index.html` (remove `repo-top-bar`, mount host container)
87
+ - [ ] Update `layout.css`
88
+ - [ ] Integrate into `space-gib-shell-service.mts`
89
+ - [ ] Verify build and docker restart
@@ -0,0 +1,275 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ height: 100%;
6
+ min-height: 0;
7
+ background: var(--clr-bg-deep, #05080f);
8
+ color: var(--clr-text-primary, #f0f4fc);
9
+ font-family: var(--font-sans, system-ui, -apple-system, sans-serif);
10
+ overflow: hidden;
11
+ position: relative;
12
+ }
13
+
14
+ .editor-root {
15
+ display: flex;
16
+ flex-direction: column;
17
+ width: 100%;
18
+ height: 100%;
19
+ min-height: 0;
20
+ overflow: hidden;
21
+ }
22
+
23
+ /* ── Integrated Header (File Breadcrumb + Virtual Tip + Actions) ── */
24
+ .editor-header {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: space-between;
28
+ padding: 0.65rem 1.25rem;
29
+ background: rgba(11, 17, 32, 0.75);
30
+ border-bottom: 1px solid var(--clr-border, rgba(255, 255, 255, 0.08));
31
+ flex-shrink: 0;
32
+ gap: 1rem;
33
+ flex-wrap: wrap;
34
+ backdrop-filter: blur(10px);
35
+ }
36
+
37
+ .header-left {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 0.5rem;
41
+ flex-wrap: wrap;
42
+ }
43
+
44
+ .file-breadcrumb {
45
+ display: flex;
46
+ align-items: center;
47
+ font-size: 0.875rem;
48
+ font-family: var(--font-mono, monospace);
49
+ }
50
+
51
+ .crumb-icon {
52
+ margin-right: 0.4rem;
53
+ font-size: 0.95rem;
54
+ }
55
+
56
+ .crumb-repo {
57
+ color: var(--clr-text-muted, #7e8c9f);
58
+ font-weight: 500;
59
+ }
60
+
61
+ .crumb-sep {
62
+ color: var(--clr-border, rgba(255, 255, 255, 0.2));
63
+ margin: 0 0.35rem;
64
+ font-weight: 300;
65
+ }
66
+
67
+ .crumb-path {
68
+ color: var(--clr-accent, #78f87e);
69
+ font-weight: 600;
70
+ }
71
+
72
+ /* ── Secondary Virtual Breadcrumb: Active Branch & Tip Merkle Address ── */
73
+ .tip-virtual-breadcrumb {
74
+ display: inline-flex;
75
+ align-items: center;
76
+ gap: 0.35rem;
77
+ background: rgba(124, 92, 252, 0.12);
78
+ border: 1px solid rgba(124, 92, 252, 0.35);
79
+ border-radius: var(--radius-sm, 6px);
80
+ padding: 0.2rem 0.55rem;
81
+ font-size: 0.775rem;
82
+ font-family: var(--font-mono, monospace);
83
+ color: #c4b5fd;
84
+ user-select: none;
85
+ transition: all 150ms ease;
86
+ }
87
+
88
+ .tip-virtual-breadcrumb:hover {
89
+ background: rgba(124, 92, 252, 0.2);
90
+ border-color: rgba(124, 92, 252, 0.6);
91
+ box-shadow: 0 0 10px rgba(124, 92, 252, 0.25);
92
+ }
93
+
94
+ .tip-sep {
95
+ color: rgba(196, 181, 253, 0.5);
96
+ }
97
+
98
+ .tip-icon {
99
+ font-size: 0.8rem;
100
+ }
101
+
102
+ .tip-branch {
103
+ color: #ddd6fe;
104
+ font-weight: 600;
105
+ }
106
+
107
+ .tip-hash {
108
+ color: #a78bfa;
109
+ font-weight: 700;
110
+ letter-spacing: 0.02em;
111
+ }
112
+
113
+ /* ── Header Right: Stats & Actions ── */
114
+ .header-right {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 1rem;
118
+ flex-wrap: wrap;
119
+ }
120
+
121
+ .editor-stats {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 0.5rem;
125
+ font-size: 0.78rem;
126
+ color: var(--clr-text-secondary, #b4c0d3);
127
+ font-family: var(--font-mono, monospace);
128
+ }
129
+
130
+ .stat-sep {
131
+ color: rgba(255, 255, 255, 0.18);
132
+ }
133
+
134
+ .header-actions {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 0.5rem;
138
+ }
139
+
140
+ .mode-toggle-btn {
141
+ display: inline-flex;
142
+ align-items: center;
143
+ gap: 0.35rem;
144
+ background: rgba(255, 255, 255, 0.04);
145
+ border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.12));
146
+ border-radius: var(--radius-sm, 4px);
147
+ padding: 0.25rem 0.65rem;
148
+ color: var(--clr-text-secondary, #b4c0d3);
149
+ font-family: inherit;
150
+ font-size: 0.78rem;
151
+ font-weight: 600;
152
+ cursor: pointer;
153
+ transition: all 150ms ease;
154
+ }
155
+
156
+ .mode-toggle-btn:hover {
157
+ background: rgba(255, 255, 255, 0.08);
158
+ color: #ffffff;
159
+ border-color: rgba(255, 255, 255, 0.25);
160
+ }
161
+
162
+ .mode-toggle-btn.readonly {
163
+ border-color: rgba(251, 191, 36, 0.4);
164
+ color: #fde047;
165
+ background: rgba(251, 191, 36, 0.08);
166
+ }
167
+
168
+ .mode-toggle-btn.readonly:hover {
169
+ background: rgba(251, 191, 36, 0.15);
170
+ border-color: rgba(251, 191, 36, 0.7);
171
+ }
172
+
173
+ .mode-toggle-btn.editable {
174
+ border-color: rgba(120, 248, 126, 0.4);
175
+ color: #78f87e;
176
+ background: rgba(120, 248, 126, 0.08);
177
+ }
178
+
179
+ .mode-toggle-btn.editable:hover {
180
+ background: rgba(120, 248, 126, 0.15);
181
+ border-color: rgba(120, 248, 126, 0.7);
182
+ }
183
+
184
+ .action-btn {
185
+ display: inline-flex;
186
+ align-items: center;
187
+ justify-content: center;
188
+ background: rgba(255, 255, 255, 0.04);
189
+ border: 1px solid var(--clr-border, rgba(255, 255, 255, 0.1));
190
+ border-radius: var(--radius-sm, 4px);
191
+ padding: 0.25rem 0.5rem;
192
+ color: var(--clr-text-secondary, #b4c0d3);
193
+ cursor: pointer;
194
+ transition: all 150ms ease;
195
+ }
196
+
197
+ .action-btn:hover {
198
+ background: rgba(255, 255, 255, 0.1);
199
+ color: #ffffff;
200
+ border-color: rgba(255, 255, 255, 0.25);
201
+ }
202
+
203
+ /* ── Editor Body (Gutter + Textarea) ── */
204
+ .editor-body {
205
+ display: flex;
206
+ flex: 1;
207
+ min-height: 0;
208
+ overflow: hidden;
209
+ background: rgba(5, 8, 15, 0.85);
210
+ position: relative;
211
+ }
212
+
213
+ .editor-gutter {
214
+ width: 54px;
215
+ padding: 1rem 0.75rem 1rem 0;
216
+ display: flex;
217
+ flex-direction: column;
218
+ align-items: flex-end;
219
+ background: rgba(11, 17, 32, 0.4);
220
+ border-right: 1px solid var(--clr-border, rgba(255, 255, 255, 0.06));
221
+ font-family: var(--font-mono, 'JetBrains Mono', monospace);
222
+ font-size: 0.85rem;
223
+ line-height: 1.6;
224
+ color: var(--clr-text-muted, #4b5563);
225
+ user-select: none;
226
+ flex-shrink: 0;
227
+ box-sizing: border-box;
228
+ overflow: hidden;
229
+ }
230
+
231
+ .line-num {
232
+ height: 1.6em;
233
+ line-height: 1.6em;
234
+ }
235
+
236
+ .editor-content-wrapper {
237
+ flex: 1;
238
+ min-width: 0;
239
+ height: 100%;
240
+ overflow: hidden;
241
+ position: relative;
242
+ display: flex;
243
+ }
244
+
245
+ .editor-textarea {
246
+ width: 100%;
247
+ height: 100%;
248
+ box-sizing: border-box;
249
+ padding: 1rem 1.25rem;
250
+ margin: 0;
251
+ border: none;
252
+ outline: none;
253
+ resize: none;
254
+ background: transparent;
255
+ color: var(--clr-text-primary, #f0f4fc);
256
+ font-family: var(--font-mono, 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace);
257
+ font-size: 0.85rem;
258
+ line-height: 1.6;
259
+ tab-size: 4;
260
+ -moz-tab-size: 4;
261
+ white-space: pre;
262
+ overflow: auto;
263
+ caret-color: var(--clr-accent, #78f87e);
264
+ }
265
+
266
+ .editor-textarea::selection {
267
+ background: rgba(120, 248, 126, 0.25);
268
+ }
269
+
270
+ /* Read-only appearance */
271
+ :host([readonly]) .editor-textarea,
272
+ .editor-root.readonly-mode .editor-textarea {
273
+ cursor: default;
274
+ caret-color: transparent;
275
+ }
@@ -0,0 +1,54 @@
1
+ <div class="editor-root" id="editor-root">
2
+ <!-- Combined File View Header & Virtual Breadcrumb -->
3
+ <header class="editor-header" id="editor-header">
4
+ <div class="header-left">
5
+ <div class="file-breadcrumb">
6
+ <span class="crumb-icon">📄</span>
7
+ <span class="crumb-repo" id="crumb-repo">my-app</span>
8
+ <span class="crumb-sep">/</span>
9
+ <span class="crumb-path" id="crumb-path">src/index.ts</span>
10
+ </div>
11
+
12
+ <!-- Secondary Virtual Breadcrumb: Active Branch & Tip Merkle Hash -->
13
+ <div class="tip-virtual-breadcrumb" id="crumb-tip-container" title="Active Branch Tip Merkle Address">
14
+ <span class="tip-sep">@</span>
15
+ <span class="tip-icon">🌿</span>
16
+ <span class="tip-branch" id="crumb-branch">main</span>
17
+ <span class="tip-hash" id="crumb-tip">7f8a1b2</span>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="header-right">
22
+ <div class="editor-stats">
23
+ <span class="stat-badge" id="stat-lang">TypeScript</span>
24
+ <span class="stat-sep">·</span>
25
+ <span class="stat-badge" id="stat-lines">18 lines</span>
26
+ <span class="stat-sep">·</span>
27
+ <span class="stat-badge" id="stat-size">520 B</span>
28
+ </div>
29
+
30
+ <div class="header-actions">
31
+ <!-- Read-Only / Editable Mode Toggle -->
32
+ <button id="btn-toggle-readonly" class="mode-toggle-btn" type="button" title="Toggle Read-Only / Editable Mode">
33
+ <span class="mode-icon" id="mode-icon">🔒</span>
34
+ <span class="mode-text" id="mode-text">Read-Only</span>
35
+ </button>
36
+
37
+ <!-- Copy Code Action -->
38
+ <button id="btn-copy-code" class="action-btn" type="button" title="Copy code to clipboard">
39
+ <span class="btn-icon">📋</span>
40
+ </button>
41
+ </div>
42
+ </div>
43
+ </header>
44
+
45
+ <!-- Single Editor Body (Gutter + Code Textarea) -->
46
+ <main class="editor-body" id="editor-body">
47
+ <div class="editor-gutter" id="editor-gutter" aria-hidden="true">
48
+ <span class="line-num">1</span>
49
+ </div>
50
+ <div class="editor-content-wrapper">
51
+ <textarea id="editor-textarea" class="editor-textarea" spellcheck="false" autocomplete="off" autocapitalize="off" wrap="off" placeholder="Write code here..."></textarea>
52
+ </div>
53
+ </main>
54
+ </div>