@workbench-kit/shell-react 0.0.2-prototype.0.2.6

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 (93) hide show
  1. package/package.json +49 -0
  2. package/src/chat-ai-mock-proposals.ts +39 -0
  3. package/src/chat-command-input.ts +52 -0
  4. package/src/chat-command-policy.ts +54 -0
  5. package/src/chat-command-surface.tsx +155 -0
  6. package/src/chat-view-data.ts +20 -0
  7. package/src/chat-view.tsx +220 -0
  8. package/src/command-inspector-surface.tsx +46 -0
  9. package/src/commands-view-data.ts +17 -0
  10. package/src/commands-view.tsx +43 -0
  11. package/src/createCommandWorkspaceExplorerPort.ts +86 -0
  12. package/src/devtools/WorkbenchDevtoolsPanel.tsx +124 -0
  13. package/src/devtools/WorkbenchDevtoolsShell.tsx +17 -0
  14. package/src/devtools/index.ts +11 -0
  15. package/src/devtools/use-workbench-devtools-snapshot.ts +84 -0
  16. package/src/devtools/workbench-devtools-snapshot.ts +140 -0
  17. package/src/devtools/workbench-devtools.css +82 -0
  18. package/src/editor-area-dnd.ts +69 -0
  19. package/src/editor-area-model.ts +71 -0
  20. package/src/editor-area.css +454 -0
  21. package/src/editor-area.tsx +676 -0
  22. package/src/editor-host-surface.tsx +634 -0
  23. package/src/editor-pane-visibility.ts +130 -0
  24. package/src/editor-resource.ts +36 -0
  25. package/src/editor-state-storage.ts +193 -0
  26. package/src/editor-tab-context-menu.ts +118 -0
  27. package/src/editor-view-providers.tsx +552 -0
  28. package/src/editor-workspace-file-availability.ts +15 -0
  29. package/src/editor-workspace-reconcile.tsx +28 -0
  30. package/src/explorer-context-menu.ts +114 -0
  31. package/src/explorer-reveal.ts +112 -0
  32. package/src/explorer-view-data.ts +58 -0
  33. package/src/explorer-view.tsx +224 -0
  34. package/src/extension-context-menu.ts +52 -0
  35. package/src/extension-management-model.ts +313 -0
  36. package/src/extensions-view-data.ts +19 -0
  37. package/src/extensions-view.tsx +38 -0
  38. package/src/field-remap-demo.tsx +18 -0
  39. package/src/field-remap-editor-surface.tsx +36 -0
  40. package/src/field-remap-flow-adapter.ts +240 -0
  41. package/src/field-remap-flow.tsx +369 -0
  42. package/src/field-remap-graph.tsx +559 -0
  43. package/src/field-remap-panel.tsx +175 -0
  44. package/src/field-remap-samples.ts +352 -0
  45. package/src/field-remap-tree.tsx +404 -0
  46. package/src/field-remap-view-data.ts +16 -0
  47. package/src/field-remap-view.css +676 -0
  48. package/src/field-remap-view.tsx +86 -0
  49. package/src/index.ts +199 -0
  50. package/src/jdw-lab-view-data.ts +25 -0
  51. package/src/jdw-lab-view.css +21 -0
  52. package/src/jdw-lab-view.tsx +79 -0
  53. package/src/jdw-widget-form-view.tsx +65 -0
  54. package/src/jdw-widget-preview-view.tsx +51 -0
  55. package/src/json-form-source-patch.ts +323 -0
  56. package/src/jsonata-transform.ts +36 -0
  57. package/src/keybinding-management-settings.tsx +16 -0
  58. package/src/keybinding-overrides-storage.ts +57 -0
  59. package/src/management-palette-commands.ts +38 -0
  60. package/src/management-settings-ids.ts +12 -0
  61. package/src/management-settings.tsx +75 -0
  62. package/src/preference-settings-storage.ts +58 -0
  63. package/src/provider.tsx +573 -0
  64. package/src/search-view-data.ts +15 -0
  65. package/src/search-view.tsx +62 -0
  66. package/src/shell-model.tsx +149 -0
  67. package/src/shell-secondary-actions.tsx +59 -0
  68. package/src/shell-settings-constants.ts +9 -0
  69. package/src/shell-settings.tsx +599 -0
  70. package/src/shell-titlebar-layout-controls.tsx +4 -0
  71. package/src/shell-view-host.tsx +199 -0
  72. package/src/shell.tsx +649 -0
  73. package/src/table-mapping-adapter.ts +59 -0
  74. package/src/use-active-workspace-path.ts +15 -0
  75. package/src/use-command-management.ts +191 -0
  76. package/src/use-context-key-revision.ts +18 -0
  77. package/src/use-editor.ts +107 -0
  78. package/src/use-extension-management.ts +193 -0
  79. package/src/use-keybinding-management.ts +130 -0
  80. package/src/use-persisted-workbench-appearance.ts +33 -0
  81. package/src/use-workbench-chat-command-proposals.ts +194 -0
  82. package/src/use-workbench-command-descriptors.ts +41 -0
  83. package/src/workbench-appearance-storage.ts +115 -0
  84. package/src/workbench-command-host.tsx +243 -0
  85. package/src/workbench-command-palette.ts +208 -0
  86. package/src/workbench-keybinding-bridge.ts +54 -0
  87. package/src/workbench-layout-storage.ts +145 -0
  88. package/src/workbench-profile-modal.tsx +118 -0
  89. package/src/workbench-shell-command-registration.ts +58 -0
  90. package/src/workbench-startup-gate.tsx +136 -0
  91. package/src/workbench-status-sections.ts +43 -0
  92. package/src/workbench-user-commands.ts +46 -0
  93. package/src/workspace-view-state.ts +35 -0
@@ -0,0 +1,71 @@
1
+ import {
2
+ codiconForFileKind,
3
+ fileIconKindForPath,
4
+ } from '@workbench-kit/react/workbench/workspace/file-icon';
5
+ import type { EditorTab } from '@workbench-kit/react/primitives';
6
+ import type {
7
+ EditorGroupState,
8
+ EditorLayoutNode,
9
+ EditorTabState,
10
+ } from '@workbench-kit/workbench-core';
11
+
12
+ import { mimeTypeForResource, pathForResource } from './editor-resource.js';
13
+
14
+ export function pruneEditorLayout(
15
+ layout: EditorLayoutNode,
16
+ groupsById: ReadonlyMap<string, EditorGroupState>,
17
+ ): EditorLayoutNode | null {
18
+ if (layout.type === 'group') {
19
+ return groupsById.has(layout.groupId) ? layout : null;
20
+ }
21
+
22
+ const children = layout.children
23
+ .map((child) => pruneEditorLayout(child, groupsById))
24
+ .filter((child): child is EditorLayoutNode => child !== null);
25
+
26
+ if (children.length === 0) {
27
+ return null;
28
+ }
29
+
30
+ if (children.length === 1) {
31
+ return children[0] ?? null;
32
+ }
33
+
34
+ return {
35
+ ...layout,
36
+ children,
37
+ };
38
+ }
39
+
40
+ export function toEditorTabModel(
41
+ tab: EditorTabState,
42
+ dropPosition?: EditorTab['dropPosition'],
43
+ ): EditorTab {
44
+ const path = pathForResource(tab.resourceUri);
45
+ const mimeType = mimeTypeForResource(tab.resourceUri);
46
+
47
+ return {
48
+ closable: true,
49
+ dirty: tab.dirty,
50
+ dropPosition,
51
+ fileIconKind: fileIconKindForPath(path, mimeType),
52
+ icon: tab.icon ?? iconForEditorTab(tab),
53
+ id: tab.id,
54
+ label: tab.title ?? getResourceLabel(tab.resourceUri),
55
+ missing: tab.resourceMissing,
56
+ pinned: tab.pinned,
57
+ preview: tab.preview,
58
+ title: tab.resourceUri,
59
+ };
60
+ }
61
+
62
+ export function getResourceLabel(resourceUri: string): string {
63
+ const path = pathForResource(resourceUri);
64
+ const segments = path.split('/');
65
+ return segments[segments.length - 1] || path;
66
+ }
67
+
68
+ function iconForEditorTab(tab: EditorTabState): string {
69
+ const path = pathForResource(tab.resourceUri);
70
+ return codiconForFileKind(fileIconKindForPath(path, mimeTypeForResource(tab.resourceUri)));
71
+ }
@@ -0,0 +1,454 @@
1
+ .workbench-editor-area {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ min-height: 0;
6
+ background: var(--vscode-editor-background, var(--color-bg));
7
+ }
8
+
9
+ .workbench-editor-area--empty {
10
+ display: grid;
11
+ place-items: center;
12
+ }
13
+
14
+ .workbench-editor-area__empty {
15
+ color: var(--color-text-muted);
16
+ font-size: var(--font-size-sm, 0.875rem);
17
+ }
18
+
19
+ .workbench-editor-area__missing-resource {
20
+ display: flex;
21
+ flex: 1;
22
+ align-items: center;
23
+ justify-content: center;
24
+ min-height: 0;
25
+ padding: 24px;
26
+ }
27
+
28
+ .workbench-editor-area__missing-resource-body {
29
+ max-width: 32rem;
30
+ color: var(--color-text-muted);
31
+ text-align: center;
32
+ }
33
+
34
+ .workbench-editor-area__missing-resource-title {
35
+ margin: 0 0 8px;
36
+ color: var(--vscode-foreground, var(--color-text));
37
+ font-size: 1rem;
38
+ font-weight: 600;
39
+ }
40
+
41
+ .workbench-editor-area__missing-resource-message,
42
+ .workbench-editor-area__missing-resource-path {
43
+ margin: 0 0 8px;
44
+ font-size: var(--font-size-sm, 0.875rem);
45
+ }
46
+
47
+ .workbench-editor-area__missing-resource-path {
48
+ font-family: var(--font-family-mono, monospace);
49
+ word-break: break-all;
50
+ }
51
+
52
+ .workbench-editor-area__missing-resource-close {
53
+ margin-top: 12px;
54
+ padding: 6px 12px;
55
+ border: 1px solid var(--vscode-button-border, var(--color-border));
56
+ border-radius: 4px;
57
+ background: var(--vscode-button-secondaryBackground, var(--color-bg-subtle));
58
+ color: var(--vscode-button-secondaryForeground, var(--color-text));
59
+ cursor: pointer;
60
+ font: inherit;
61
+ }
62
+
63
+ .workbench-editor-area__missing-resource-close:hover {
64
+ background: var(--vscode-button-secondaryHoverBackground, var(--color-bg-muted));
65
+ }
66
+
67
+ .workbench-editor-area__content {
68
+ display: flex;
69
+ flex-direction: column;
70
+ flex: 1;
71
+ min-height: 0;
72
+ overflow: hidden;
73
+ }
74
+
75
+ .workbench-editor-area__group-split.ui-workbench-split-view {
76
+ width: 100%;
77
+ height: 100%;
78
+ }
79
+
80
+ .workbench-editor-area__group-pane {
81
+ position: relative;
82
+ display: flex;
83
+ flex: 1;
84
+ flex-direction: column;
85
+ min-width: 0;
86
+ min-height: 0;
87
+ background: var(--vscode-editor-background, var(--color-bg));
88
+ }
89
+
90
+ .workbench-editor-area__group-body {
91
+ position: relative;
92
+ display: flex;
93
+ flex: 1;
94
+ min-width: 0;
95
+ min-height: 0;
96
+ }
97
+
98
+ .workbench-editor-area__drop-overlay {
99
+ position: absolute;
100
+ inset: 0;
101
+ z-index: 3;
102
+ pointer-events: none;
103
+ }
104
+
105
+ .workbench-editor-area__group-pane[data-drop-side='left'] .workbench-editor-area__drop-overlay {
106
+ right: 50%;
107
+ background: var(
108
+ --vscode-editorGroup-dropBackground,
109
+ color-mix(in srgb, var(--vscode-focusBorder, var(--color-focus-border)) 18%, transparent)
110
+ );
111
+ outline: 1px dashed var(--vscode-focusBorder, var(--color-focus-border));
112
+ outline-offset: -2px;
113
+ }
114
+
115
+ .workbench-editor-area__group-pane[data-drop-side='right'] .workbench-editor-area__drop-overlay {
116
+ left: 50%;
117
+ background: var(
118
+ --vscode-editorGroup-dropBackground,
119
+ color-mix(in srgb, var(--vscode-focusBorder, var(--color-focus-border)) 18%, transparent)
120
+ );
121
+ outline: 1px dashed var(--vscode-focusBorder, var(--color-focus-border));
122
+ outline-offset: -2px;
123
+ }
124
+
125
+ .workbench-editor-area__group-pane[data-drop-side='top'] .workbench-editor-area__drop-overlay {
126
+ bottom: 50%;
127
+ background: var(
128
+ --vscode-editorGroup-dropBackground,
129
+ color-mix(in srgb, var(--vscode-focusBorder, var(--color-focus-border)) 18%, transparent)
130
+ );
131
+ outline: 1px dashed var(--vscode-focusBorder, var(--color-focus-border));
132
+ outline-offset: -2px;
133
+ }
134
+
135
+ .workbench-editor-area__group-pane[data-drop-side='bottom'] .workbench-editor-area__drop-overlay {
136
+ top: 50%;
137
+ background: var(
138
+ --vscode-editorGroup-dropBackground,
139
+ color-mix(in srgb, var(--vscode-focusBorder, var(--color-focus-border)) 18%, transparent)
140
+ );
141
+ outline: 1px dashed var(--vscode-focusBorder, var(--color-focus-border));
142
+ outline-offset: -2px;
143
+ }
144
+
145
+ .workbench-editor-area__group-pane[data-drop-side='center'] .workbench-editor-area__drop-overlay {
146
+ background: var(
147
+ --vscode-editorGroup-dropBackground,
148
+ color-mix(in srgb, var(--vscode-focusBorder, var(--color-focus-border)) 12%, transparent)
149
+ );
150
+ outline: 1px dashed var(--vscode-focusBorder, var(--color-focus-border));
151
+ outline-offset: -2px;
152
+ }
153
+
154
+ .workbench-editor-area__group-actions {
155
+ display: flex;
156
+ flex-shrink: 0;
157
+ align-items: center;
158
+ gap: 4px;
159
+ height: 100%;
160
+ }
161
+
162
+ .workbench-editor-area__host {
163
+ box-sizing: border-box;
164
+ flex: 1;
165
+ min-width: 0;
166
+ height: 100%;
167
+ min-height: 0;
168
+ padding: 16px;
169
+ }
170
+
171
+ .workbench-editor-area__text-editor {
172
+ display: flex;
173
+ flex: 1;
174
+ flex-direction: column;
175
+ min-width: 0;
176
+ height: 100%;
177
+ min-height: 0;
178
+ }
179
+
180
+ .workbench-editor-area__mode-toolbar-outlet {
181
+ display: flex;
182
+ flex-shrink: 0;
183
+ align-items: center;
184
+ height: 100%;
185
+ }
186
+
187
+ .workbench-editor-area__view-toolbar {
188
+ box-sizing: border-box;
189
+ display: flex;
190
+ flex-shrink: 0;
191
+ gap: 2px;
192
+ align-items: center;
193
+ height: 100%;
194
+ }
195
+
196
+ .workbench-editor-area__view-button.ui-icon-button {
197
+ color: var(--vscode-tab-inactiveForeground, var(--color-text-muted));
198
+ opacity: 0.62;
199
+ }
200
+
201
+ .workbench-editor-area__view-button.ui-icon-button .codicon {
202
+ font-size: 15px;
203
+ }
204
+
205
+ .workbench-editor-area__view-button.ui-icon-button:hover {
206
+ opacity: 1;
207
+ background: var(--vscode-toolbar-hoverBackground, var(--color-bg-hover));
208
+ color: var(--vscode-tab-hoverForeground, var(--vscode-foreground, var(--color-text)));
209
+ }
210
+
211
+ .workbench-editor-area__view-button.ui-icon-button[aria-pressed='true'],
212
+ .workbench-editor-area__view-button.ui-icon-button[aria-checked='true'],
213
+ .workbench-editor-area__view-button--active.ui-icon-button {
214
+ opacity: 1;
215
+ color: var(--vscode-tab-activeForeground, var(--color-text));
216
+ background: color-mix(
217
+ in srgb,
218
+ var(--vscode-tab-activeForeground, var(--color-text)) 14%,
219
+ transparent
220
+ );
221
+ border-color: color-mix(
222
+ in srgb,
223
+ var(--vscode-focusBorder, var(--color-focus-border, var(--color-accent))) 35%,
224
+ transparent
225
+ );
226
+ }
227
+
228
+ .workbench-editor-area__view-button.ui-icon-button[aria-pressed='true']:hover,
229
+ .workbench-editor-area__view-button.ui-icon-button[aria-checked='true']:hover,
230
+ .workbench-editor-area__view-button--active.ui-icon-button:hover {
231
+ background: color-mix(
232
+ in srgb,
233
+ var(--vscode-tab-activeForeground, var(--color-text)) 20%,
234
+ transparent
235
+ );
236
+ }
237
+
238
+ .workbench-editor-area__text-editor-body {
239
+ display: flex;
240
+ flex: 1;
241
+ flex-direction: column;
242
+ min-width: 0;
243
+ min-height: 0;
244
+ }
245
+
246
+ .workbench-editor-area__text-editor-body > *:last-child {
247
+ flex: 1;
248
+ min-width: 0;
249
+ min-height: 0;
250
+ }
251
+
252
+ .workbench-editor-area__split.ui-workbench-split-view {
253
+ width: 100%;
254
+ height: 100%;
255
+ }
256
+
257
+ .workbench-editor-area__split-pane {
258
+ display: flex;
259
+ flex: 1;
260
+ min-width: 0;
261
+ min-height: 0;
262
+ }
263
+
264
+ .workbench-editor-area__source-pane {
265
+ display: flex;
266
+ flex: 1;
267
+ min-width: 0;
268
+ min-height: 0;
269
+ }
270
+
271
+ .workbench-editor-area__source-pane .workbench-monaco-panel {
272
+ --panel-bg: var(--vscode-editor-background, var(--color-bg));
273
+ background: var(--vscode-editor-background, var(--color-bg));
274
+ }
275
+
276
+ .workbench-editor-area__source-pane .workbench-monaco-panel,
277
+ .workbench-editor-area__source-pane .workbench-monaco-panel__body {
278
+ box-sizing: border-box;
279
+ flex: 1;
280
+ min-width: 0;
281
+ min-height: 0;
282
+ }
283
+
284
+ .workbench-editor-area__source-pane .workbench-monaco-panel,
285
+ .workbench-editor-area__source-pane .workspace-editor__monaco {
286
+ box-sizing: border-box;
287
+ min-width: 0;
288
+ min-height: 0;
289
+ height: 100%;
290
+ }
291
+
292
+ .workbench-editor-area__source-pane .workbench-monaco-panel__body {
293
+ padding: 0;
294
+ border: 0;
295
+ }
296
+
297
+ .workbench-editor-area__editor-loading {
298
+ display: grid;
299
+ flex: 1;
300
+ min-width: 0;
301
+ min-height: 0;
302
+ place-items: center;
303
+ color: var(--color-text-muted);
304
+ font-size: var(--font-size-sm, 0.875rem);
305
+ }
306
+
307
+ .workbench-editor-area__preview-pane {
308
+ flex: 1;
309
+ min-width: 0;
310
+ min-height: 0;
311
+ padding: 16px;
312
+ background: var(--vscode-editor-background, var(--color-bg));
313
+ }
314
+
315
+ .workbench-editor-area__preview-pane:has(.ui-jdw-preview-viewport) {
316
+ padding: 0;
317
+ overflow: hidden;
318
+ }
319
+
320
+ .workbench-editor-area__jdw-preview,
321
+ .workbench-editor-area__jdw-preview-viewport,
322
+ .workbench-editor-area__preview-pane .ui-jdw-preview-viewport-host {
323
+ min-height: 100%;
324
+ height: 100%;
325
+ }
326
+
327
+ .workbench-editor-area__form,
328
+ .workbench-editor-area__form-placeholder {
329
+ box-sizing: border-box;
330
+ flex: 1 1 auto;
331
+ align-self: stretch;
332
+ min-width: 0;
333
+ min-height: 0;
334
+ width: 100%;
335
+ padding: 16px;
336
+ }
337
+
338
+ .workbench-editor-area__form {
339
+ padding: 0;
340
+ }
341
+
342
+ .workbench-editor-area__form-grid {
343
+ --workbench-editor-form-indent: 14px;
344
+ box-sizing: border-box;
345
+ display: grid;
346
+ grid-template-columns: minmax(9rem, 34%) minmax(12rem, 1fr);
347
+ column-gap: 20px;
348
+ row-gap: 4px;
349
+ align-items: start;
350
+ align-content: start;
351
+ width: 100%;
352
+ max-width: 960px;
353
+ min-height: min-content;
354
+ padding: 16px;
355
+ }
356
+
357
+ .workbench-editor-area__form-field {
358
+ display: contents;
359
+ }
360
+
361
+ .workbench-editor-area__form-label {
362
+ grid-column: 1;
363
+ align-self: start;
364
+ padding-block: 7px;
365
+ padding-inline-start: calc(
366
+ var(--workbench-editor-form-depth, 0) * var(--workbench-editor-form-indent)
367
+ );
368
+ color: var(--color-text-muted);
369
+ font-size: var(--font-size-sm, 0.875rem);
370
+ line-height: 1.4;
371
+ overflow-wrap: anywhere;
372
+ text-align: end;
373
+ }
374
+
375
+ .workbench-editor-area__form-control,
376
+ .workbench-editor-area__form-readonly {
377
+ grid-column: 2;
378
+ align-self: start;
379
+ }
380
+
381
+ .workbench-editor-area__form-control.ui-input,
382
+ .workbench-editor-area__form-control.ui-select {
383
+ width: 100%;
384
+ max-width: 640px;
385
+ min-width: 0;
386
+ }
387
+
388
+ .workbench-editor-area__form-readonly {
389
+ box-sizing: border-box;
390
+ min-width: 0;
391
+ max-width: 640px;
392
+ padding: 5px 8px;
393
+ border: 1px solid var(--vscode-input-border, var(--color-border));
394
+ border-radius: var(--radius-sm, 4px);
395
+ background: var(--vscode-input-background, var(--color-bg));
396
+ color: var(--vscode-descriptionForeground, var(--color-text-muted));
397
+ font-family: ui-monospace, SFMono-Regular, Consolas, 'Liberation Mono', monospace;
398
+ font-size: var(--font-size-xs, 0.75rem);
399
+ line-height: 1.5;
400
+ }
401
+
402
+ .workbench-editor-area__form-group-header {
403
+ grid-column: 1 / -1;
404
+ display: flex;
405
+ align-items: center;
406
+ gap: 8px;
407
+ min-width: 0;
408
+ margin-top: 8px;
409
+ padding-top: 8px;
410
+ padding-inline-start: calc(
411
+ var(--workbench-editor-form-depth, 0) * var(--workbench-editor-form-indent)
412
+ );
413
+ border-top: 1px solid var(--vscode-editorGroup-border, var(--color-border));
414
+ }
415
+
416
+ .workbench-editor-area__form-grid > .workbench-editor-area__form-group-header {
417
+ margin-top: 0;
418
+ padding-top: 0;
419
+ border-top: 0;
420
+ }
421
+
422
+ .workbench-editor-area__form-group-header .workbench-editor-area__form-label {
423
+ grid-column: auto;
424
+ padding-block: 0;
425
+ padding-inline-start: 0;
426
+ color: var(--color-text);
427
+ font-weight: 600;
428
+ text-align: start;
429
+ }
430
+
431
+ .workbench-editor-area__form-badge {
432
+ flex-shrink: 0;
433
+ padding: 1px 6px;
434
+ border-radius: var(--radius-sm, 4px);
435
+ background: var(--vscode-badge-background, var(--color-bg-elevated));
436
+ color: var(--vscode-badge-foreground, var(--color-text-muted));
437
+ font-size: var(--font-size-xs, 0.75rem);
438
+ line-height: 1.4;
439
+ }
440
+
441
+ .workbench-editor-area__form-empty {
442
+ grid-column: 2;
443
+ align-self: start;
444
+ padding-block: 4px;
445
+ color: var(--color-text-muted);
446
+ font-size: var(--font-size-sm, 0.875rem);
447
+ }
448
+
449
+ .workbench-editor-area__form-placeholder p {
450
+ margin: 0 0 8px;
451
+ color: var(--color-text-muted);
452
+ font-size: var(--font-size-sm, 0.875rem);
453
+ line-height: 1.5;
454
+ }