@tutti-os/workbench-surface 0.0.1

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.
@@ -0,0 +1,717 @@
1
+ import { WorkbenchFrame as WorkbenchFrame$1, WorkbenchSnapshotDisplayModeV1, WorkbenchSnapshot, WorkbenchSnapshotNode } from '@tutti-os/workbench-snapshot';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { HTMLAttributes, ReactNode } from 'react';
4
+ import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
5
+ import { c as WorkbenchWindowChromeI18nRuntime } from './workbenchHostI18n-5xMPPBkf.js';
6
+ export { b as WorkbenchWindowChromeI18nKey, d as createWorkbenchHostI18nRuntime, e as createWorkbenchWindowChromeI18nRuntime, f as workbenchHostI18nResources, g as workbenchWindowChromeI18nNamespace, h as workbenchWindowChromeI18nResources } from './workbenchHostI18n-5xMPPBkf.js';
7
+
8
+ interface WorkbenchSize {
9
+ width: number;
10
+ height: number;
11
+ }
12
+ type WorkbenchFrame = WorkbenchFrame$1;
13
+ interface WorkbenchSafeArea {
14
+ top: number;
15
+ right: number;
16
+ bottom: number;
17
+ left: number;
18
+ }
19
+ type WorkbenchDisplayMode = WorkbenchSnapshotDisplayModeV1;
20
+ type WorkbenchSnapTarget = "left" | "right" | "top" | null;
21
+ type WorkbenchQuickLayoutTarget = "left" | "right" | "top" | "bottom";
22
+ type WorkbenchLayoutPreset = {
23
+ kind: "balanced";
24
+ } | {
25
+ kind: "row";
26
+ } | {
27
+ kind: "column";
28
+ };
29
+ interface WorkbenchNode<TData = unknown> {
30
+ id: string;
31
+ kind: string;
32
+ title: string;
33
+ frame: WorkbenchFrame;
34
+ displayMode: WorkbenchDisplayMode;
35
+ restoreFrame: WorkbenchFrame | null;
36
+ isMinimized: boolean;
37
+ minimizedAtUnixMs?: number | null;
38
+ sizeConstraints?: WorkbenchNodeSizeConstraints | null;
39
+ data: TData;
40
+ }
41
+ interface WorkbenchNodeSizeConstraints {
42
+ minWidth?: number;
43
+ minHeight?: number;
44
+ }
45
+ interface WorkbenchState<TData = unknown> {
46
+ nodes: WorkbenchNode<TData>[];
47
+ nodeStack: string[];
48
+ activeDragNodeId: string | null;
49
+ activeResizeNodeId: string | null;
50
+ activeSnapTarget: WorkbenchSnapTarget;
51
+ surfaceSize: WorkbenchSize;
52
+ layoutConstraints: WorkbenchLayoutConstraints;
53
+ }
54
+ interface WorkbenchLayoutConstraints {
55
+ minWidth: number;
56
+ minHeight: number;
57
+ surfacePadding: number;
58
+ safeArea: WorkbenchSafeArea;
59
+ }
60
+ interface WorkbenchLayoutConstraintsInput extends Partial<Omit<WorkbenchLayoutConstraints, "safeArea">> {
61
+ safeArea?: Partial<WorkbenchSafeArea>;
62
+ }
63
+
64
+ type WorkbenchAction<TData = unknown> = {
65
+ type: "replaceState";
66
+ state: Partial<WorkbenchState<TData>>;
67
+ } | {
68
+ type: "replaceNodes";
69
+ nodes: WorkbenchNode<TData>[];
70
+ } | {
71
+ type: "openNode";
72
+ node: WorkbenchNode<TData>;
73
+ } | {
74
+ type: "closeNode";
75
+ nodeID: string;
76
+ } | {
77
+ type: "focusNode";
78
+ nodeID: string;
79
+ } | {
80
+ type: "minimizeNode";
81
+ nodeID: string;
82
+ } | {
83
+ type: "restoreNode";
84
+ nodeID: string;
85
+ } | {
86
+ type: "enterFullscreen";
87
+ nodeID: string;
88
+ } | {
89
+ type: "exitFullscreen";
90
+ nodeID: string;
91
+ } | {
92
+ type: "applyQuickLayout";
93
+ nodeID: string;
94
+ target: WorkbenchQuickLayoutTarget;
95
+ } | {
96
+ type: "applyLayoutPreset";
97
+ nodeIDs: string[];
98
+ preset: WorkbenchLayoutPreset;
99
+ } | {
100
+ type: "applyActiveSnapTarget";
101
+ nodeID: string;
102
+ } | {
103
+ type: "applySnapTarget";
104
+ nodeID: string;
105
+ snapTarget: WorkbenchSnapTarget;
106
+ } | {
107
+ type: "dragNode";
108
+ nodeID: string;
109
+ frame: WorkbenchFrame;
110
+ } | {
111
+ type: "moveNode";
112
+ nodeID: string;
113
+ frame: WorkbenchFrame;
114
+ } | {
115
+ type: "resizeNode";
116
+ nodeID: string;
117
+ frame: WorkbenchFrame;
118
+ } | {
119
+ type: "setActiveDragNode";
120
+ nodeID: string | null;
121
+ } | {
122
+ type: "setActiveResizeNode";
123
+ nodeID: string | null;
124
+ } | {
125
+ type: "setActiveSnapTarget";
126
+ snapTarget: WorkbenchSnapTarget;
127
+ } | {
128
+ type: "setSurfaceSize";
129
+ size: WorkbenchSize;
130
+ } | {
131
+ type: "setLayoutConstraints";
132
+ constraints: WorkbenchLayoutConstraintsInput;
133
+ } | {
134
+ type: "setNodeSizeConstraints";
135
+ nodeID: string;
136
+ sizeConstraints: WorkbenchNodeSizeConstraints | null;
137
+ };
138
+
139
+ interface WorkbenchCommands<TData = unknown> {
140
+ replaceState(state: Partial<WorkbenchState<TData>>): void;
141
+ replaceNodes(nodes: WorkbenchNode<TData>[]): void;
142
+ openNode(node: WorkbenchNode<TData>): void;
143
+ closeNode(nodeID: string): void;
144
+ focusNode(nodeID: string): void;
145
+ minimizeNode(nodeID: string): void;
146
+ restoreNode(nodeID: string): void;
147
+ enterFullscreen(nodeID: string): void;
148
+ exitFullscreen(nodeID: string): void;
149
+ applyQuickLayout(nodeID: string, target: WorkbenchQuickLayoutTarget): void;
150
+ applyLayoutPreset(nodeIDs: string[], preset: WorkbenchLayoutPreset): void;
151
+ applyActiveSnapTarget(nodeID: string): void;
152
+ applySnapTarget(nodeID: string, snapTarget: WorkbenchSnapTarget): void;
153
+ dragNode(nodeID: string, frame: WorkbenchFrame): void;
154
+ moveNode(nodeID: string, frame: WorkbenchFrame): void;
155
+ resizeNode(nodeID: string, frame: WorkbenchFrame): void;
156
+ setActiveDragNode(nodeID: string | null): void;
157
+ setActiveResizeNode(nodeID: string | null): void;
158
+ setActiveSnapTarget(snapTarget: WorkbenchSnapTarget): void;
159
+ setSurfaceSize(size: WorkbenchSize): void;
160
+ setLayoutConstraints(constraints: WorkbenchLayoutConstraintsInput): void;
161
+ setNodeSizeConstraints(nodeID: string, sizeConstraints: WorkbenchNodeSizeConstraints | null): void;
162
+ }
163
+
164
+ type WorkbenchListener = () => void;
165
+ type WorkbenchUnsubscribe = () => void;
166
+ interface WorkbenchDebugDiagnostics {
167
+ isEnabled(): boolean;
168
+ log?(input: {
169
+ details?: Record<string, unknown>;
170
+ event: string;
171
+ level?: "debug" | "info" | "warn" | "error";
172
+ source: string;
173
+ workspaceId?: string | null;
174
+ }): Promise<void> | void;
175
+ }
176
+ interface WorkbenchStore<TData = unknown> {
177
+ getSnapshot(): WorkbenchState<TData>;
178
+ subscribe(listener: WorkbenchListener): WorkbenchUnsubscribe;
179
+ dispatch(action: WorkbenchAction<TData>): void;
180
+ }
181
+ interface WorkbenchController<TData = unknown> extends WorkbenchStore<TData> {
182
+ readonly commands: WorkbenchCommands<TData>;
183
+ }
184
+
185
+ declare function createWorkbenchController<TData = unknown>(initialState?: Partial<WorkbenchState<TData>>, options?: {
186
+ debugDiagnostics?: WorkbenchDebugDiagnostics;
187
+ }): WorkbenchController<TData>;
188
+
189
+ type WorkbenchMissionControlMode = "activate" | "layout";
190
+ interface WorkbenchMissionControlSnapshot<TData = unknown> {
191
+ layoutConstraints: WorkbenchLayoutConstraints;
192
+ surfaceSize: WorkbenchSize;
193
+ visibleNodes: readonly WorkbenchNode<TData>[];
194
+ }
195
+ interface WorkbenchMissionControlAdapter<TData = unknown> {
196
+ applyLayoutPreset(nodeIds: string[], preset: WorkbenchLayoutPreset): void;
197
+ focusNode(nodeId: string): void;
198
+ getSnapshot(): WorkbenchMissionControlSnapshot<TData>;
199
+ subscribe(listener: () => void): () => void;
200
+ }
201
+
202
+ interface WorkbenchNodeRenderFrame {
203
+ frame: WorkbenchFrame;
204
+ zIndex: number;
205
+ isFocused: boolean;
206
+ presentation?: WorkbenchSurfacePresentation | null;
207
+ }
208
+ interface WorkbenchSurfacePresentation {
209
+ frameByNodeId: ReadonlyMap<string, WorkbenchFrame>;
210
+ interaction?: WorkbenchSurfacePresentationInteraction | null;
211
+ mode: "mission-control";
212
+ }
213
+ interface WorkbenchSurfacePresentationInteraction {
214
+ mode: "activate" | "layout";
215
+ onBackdropPress: () => void;
216
+ onNodePress(nodeId: string): void;
217
+ selectedNodeIds: ReadonlySet<string>;
218
+ }
219
+ interface WorkbenchRenderNodeContext<TData = unknown> {
220
+ node: WorkbenchNode<TData>;
221
+ layout: WorkbenchNodeRenderFrame;
222
+ controller: WorkbenchController<TData>;
223
+ }
224
+ interface WorkbenchDockContext<TData = unknown> {
225
+ focusedNodeId: string | null;
226
+ minimizedNodes: readonly WorkbenchNode<TData>[];
227
+ nodes: readonly WorkbenchNode<TData>[];
228
+ controller: WorkbenchController<TData>;
229
+ genie: {
230
+ launchNodeFromAnchor(anchorKey: string, nodeID: string, launch: () => void): void;
231
+ registerDockAnchor(anchorKey: string, element: HTMLElement | null): void;
232
+ };
233
+ }
234
+ type WorkbenchDockPlacement = "bottom" | "left";
235
+ interface WorkbenchWindowActionContext<TData = unknown> {
236
+ node: WorkbenchNode<TData>;
237
+ controller: WorkbenchController<TData>;
238
+ genie: {
239
+ minimizeNodeToAnchor(nodeID: string, minimize?: () => void): void;
240
+ };
241
+ }
242
+ type WorkbenchWindowChromeMode = "system" | "custom-header";
243
+ type WorkbenchFullscreenHeaderMode = "persistent" | "reveal";
244
+ interface WorkbenchResolveWindowChromeModeContext<TData = unknown> {
245
+ node: WorkbenchNode<TData>;
246
+ controller: WorkbenchController<TData>;
247
+ }
248
+ type WorkbenchResolveWindowChromeMode<TData = unknown> = (context: WorkbenchResolveWindowChromeModeContext<TData>) => WorkbenchWindowChromeMode;
249
+ type WorkbenchResolveFullscreenHeaderMode<TData = unknown> = (context: WorkbenchResolveWindowChromeModeContext<TData>) => WorkbenchFullscreenHeaderMode | undefined;
250
+ type WorkbenchKeepMinimizedNodeMounted<TData = unknown> = (node: WorkbenchNode<TData>) => boolean;
251
+ interface WorkbenchWindowHeaderDragHandleProps {
252
+ "data-workbench-drag-handle": "true";
253
+ onDoubleClick: HTMLAttributes<HTMLElement>["onDoubleClick"];
254
+ onPointerDown: HTMLAttributes<HTMLElement>["onPointerDown"];
255
+ }
256
+ interface WorkbenchWindowHeaderContext<TData = unknown> {
257
+ node: WorkbenchNode<TData>;
258
+ controller: WorkbenchController<TData>;
259
+ surfaceSize: WorkbenchSize;
260
+ genie: {
261
+ minimizeNodeToAnchor(nodeID: string, minimize?: () => void): void;
262
+ };
263
+ defaultActions: ReactNode;
264
+ dragHandleProps: WorkbenchWindowHeaderDragHandleProps;
265
+ }
266
+ type WorkbenchRenderNode<TData = unknown> = (context: WorkbenchRenderNodeContext<TData>) => ReactNode;
267
+ type WorkbenchRenderWindowActions<TData = unknown> = (context: WorkbenchWindowActionContext<TData>) => ReactNode;
268
+ type WorkbenchRenderWindowHeader<TData = unknown> = (context: WorkbenchWindowHeaderContext<TData>) => ReactNode;
269
+
270
+ interface WorkbenchDockPreviewCacheKey {
271
+ instanceId: string;
272
+ instanceKey?: string | null;
273
+ nodeId: string;
274
+ typeId: string;
275
+ workspaceId: string;
276
+ }
277
+ interface WorkbenchDockPreviewCache {
278
+ read(key: WorkbenchDockPreviewCacheKey): Promise<string | null>;
279
+ write(input: {
280
+ key: WorkbenchDockPreviewCacheKey;
281
+ previewImageUrl: string;
282
+ }): void;
283
+ }
284
+ type WorkbenchDockPreviewCacheKeyResolver<TData = unknown> = (node: WorkbenchNode<TData>) => WorkbenchDockPreviewCacheKey | null;
285
+
286
+ interface WorkbenchSurfaceProps<TData = unknown> {
287
+ captureNodePreviewImage?: (node: WorkbenchNode<TData>) => Promise<string | null> | string | null;
288
+ className?: string;
289
+ controller: WorkbenchController<TData>;
290
+ dockPreviewCache?: WorkbenchDockPreviewCache;
291
+ dockPlacement?: WorkbenchDockPlacement;
292
+ interactive?: boolean;
293
+ layoutConstraints?: WorkbenchLayoutConstraintsInput;
294
+ missionControlPhase?: "closed" | "entering" | "open" | "closing";
295
+ presentation?: WorkbenchSurfacePresentation | null;
296
+ renderBackdrop?: () => ReactNode;
297
+ renderBottomChrome?: () => ReactNode;
298
+ renderDock?: (context: WorkbenchDockContext<TData>) => ReactNode;
299
+ renderNode: WorkbenchRenderNode<TData>;
300
+ renderOverlay?: () => ReactNode;
301
+ renderTopChrome?: () => ReactNode;
302
+ renderWindowActions?: WorkbenchRenderWindowActions<TData>;
303
+ renderWindowHeader?: WorkbenchRenderWindowHeader<TData>;
304
+ shouldKeepMinimizedNodeMounted?: WorkbenchKeepMinimizedNodeMounted<TData>;
305
+ resolveFullscreenHeaderMode?: WorkbenchResolveFullscreenHeaderMode<TData>;
306
+ resolveDockAnchorKey?: (node: WorkbenchNode<TData>) => string;
307
+ resolveDockPreviewCacheKey?: WorkbenchDockPreviewCacheKeyResolver<TData>;
308
+ shortcutsEnabled?: boolean;
309
+ wallpaper?: WorkbenchSurfaceWallpaper;
310
+ windowChromeMode?: WorkbenchWindowChromeMode | WorkbenchResolveWindowChromeMode<TData>;
311
+ windowChromeI18n?: WorkbenchWindowChromeI18nRuntime;
312
+ }
313
+ type WorkbenchSurfaceWallpaperFit = "contain" | "cover" | "stretch" | "center";
314
+ interface WorkbenchSurfaceWallpaper {
315
+ appearance?: "dark" | "light";
316
+ fit?: WorkbenchSurfaceWallpaperFit;
317
+ position?: string;
318
+ url: string;
319
+ }
320
+ declare function WorkbenchSurface<TData>({ captureNodePreviewImage, className, controller, dockPreviewCache, dockPlacement, interactive, layoutConstraints, missionControlPhase, presentation, renderBackdrop, renderBottomChrome, renderDock, renderNode, renderOverlay, renderTopChrome, renderWindowActions, renderWindowHeader, shouldKeepMinimizedNodeMounted, resolveFullscreenHeaderMode, resolveDockAnchorKey, resolveDockPreviewCacheKey, shortcutsEnabled, wallpaper, windowChromeMode, windowChromeI18n }: WorkbenchSurfaceProps<TData>): react_jsx_runtime.JSX.Element;
321
+
322
+ interface WorkbenchHostActivation<TPayload = unknown> {
323
+ payload?: TPayload;
324
+ sequence: number;
325
+ type: string;
326
+ }
327
+ interface WorkbenchHostNodeData {
328
+ activation?: WorkbenchHostActivation | null;
329
+ dockEntryId?: string | null;
330
+ instanceId: string;
331
+ instanceKey?: string | null;
332
+ isProjected?: boolean;
333
+ launchSource?: string | null;
334
+ projectionSubject?: WorkbenchHostProjectedNodeSubject | null;
335
+ runtimeNodeState?: unknown;
336
+ snapshotNodeState?: unknown;
337
+ typeId: string;
338
+ }
339
+ interface WorkbenchHostProjectedNodeSubject {
340
+ id: string;
341
+ type: string;
342
+ }
343
+ interface WorkbenchHostProjectedNode {
344
+ dockEntryId?: string | null;
345
+ defaultFrame?: WorkbenchFrame;
346
+ instanceId: string;
347
+ instanceKey?: string | null;
348
+ sizeConstraints?: WorkbenchNodeSizeConstraints | null;
349
+ subject?: WorkbenchHostProjectedNodeSubject | null;
350
+ title: string;
351
+ typeId: string;
352
+ }
353
+ interface WorkbenchHostExternalStateLookupInput {
354
+ instanceId: string;
355
+ instanceKey?: string | null;
356
+ nodeId: string;
357
+ subject?: WorkbenchHostProjectedNodeSubject | null;
358
+ typeId: string;
359
+ workspaceId: string;
360
+ }
361
+ interface WorkbenchHostExternalStateSource<TNodeState = unknown, TWorkspaceState = unknown> {
362
+ getNodeState(input: WorkbenchHostExternalStateLookupInput): TNodeState;
363
+ getSnapshotNodeState?(input: WorkbenchHostExternalStateLookupInput): unknown;
364
+ getWorkspaceState(input: {
365
+ workspaceId: string;
366
+ }): TWorkspaceState;
367
+ subscribe?(listener: () => void): () => void;
368
+ }
369
+ type WorkbenchHostNodeCloseDecision = "close" | "keep-open";
370
+ type WorkbenchHostCloseDialogScope = "node" | "window";
371
+ type WorkbenchHostCloseDialogVariant = "default" | "destructive";
372
+ interface WorkbenchHostCloseDialogRequest {
373
+ cancelLabel: string;
374
+ confirmLabel: string;
375
+ description: string;
376
+ details?: string | null;
377
+ scope: WorkbenchHostCloseDialogScope;
378
+ title: string;
379
+ variant?: WorkbenchHostCloseDialogVariant;
380
+ }
381
+ interface WorkbenchHostCloseEffect {
382
+ description?: string | null;
383
+ nodeId: string;
384
+ title: string;
385
+ typeId: string;
386
+ }
387
+ interface WorkbenchHostNodeCloseRequest {
388
+ instanceId: string;
389
+ instanceKey?: string | null;
390
+ isProjected: boolean;
391
+ nodeId: string;
392
+ subject?: WorkbenchHostProjectedNodeSubject | null;
393
+ typeId: string;
394
+ workspaceId: string;
395
+ }
396
+ type WorkbenchHostLaunchReason = "command" | "dock" | "host" | "launchpad" | "shortcut";
397
+ interface WorkbenchHostLaunchInput {
398
+ dockEntryId?: string;
399
+ launchSource?: string;
400
+ payload?: unknown;
401
+ reason: WorkbenchHostLaunchReason;
402
+ typeId: string;
403
+ }
404
+ interface WorkbenchHostLaunchRequest extends WorkbenchHostLaunchInput {
405
+ workspaceId: string;
406
+ }
407
+ type WorkbenchHostLaunchFramePolicy = "absolute" | "cascade" | "cascade-same-type-centered";
408
+ interface WorkbenchHostLaunchResult {
409
+ activation?: {
410
+ payload?: unknown;
411
+ type: string;
412
+ } | null;
413
+ defaultFrame?: WorkbenchFrame;
414
+ displayMode?: WorkbenchDisplayMode;
415
+ dockEntryId?: string;
416
+ framePolicy: WorkbenchHostLaunchFramePolicy;
417
+ instanceId: string;
418
+ instanceKey?: string | null;
419
+ launchSource?: string | null;
420
+ reuseDockEntryNode?: boolean;
421
+ sizeConstraints?: WorkbenchNodeSizeConstraints | null;
422
+ title?: string;
423
+ typeId: string;
424
+ }
425
+ type WorkbenchHostDockEntryVisibility = "always" | "when-open" | "never";
426
+ type WorkbenchHostDockEntryLaunchBehavior = "enabled" | "disabled";
427
+ type WorkbenchHostDockEntryStateKind = "enabled" | "disabled" | "loading" | "unavailable";
428
+ interface WorkbenchHostDockEntryState {
429
+ kind: WorkbenchHostDockEntryStateKind;
430
+ reason?: string;
431
+ }
432
+ type WorkbenchHostDockEntryBadge = {
433
+ kind: "count";
434
+ value: number;
435
+ } | {
436
+ kind: "status";
437
+ status: "running" | "completed" | "failed" | "warning";
438
+ } | {
439
+ content: ReactNode;
440
+ kind: "custom";
441
+ };
442
+ interface WorkbenchHostDockEntryAction {
443
+ disabled?: boolean;
444
+ id: string;
445
+ label: string;
446
+ pendingLabel?: string;
447
+ }
448
+ interface WorkbenchHostDockPopupItemInput {
449
+ externalNodeState?: unknown;
450
+ isFocused: boolean;
451
+ isMinimized: boolean;
452
+ node: WorkbenchNode<WorkbenchHostNodeData>;
453
+ }
454
+ type WorkbenchHostNodePreviewCapture = (input: WorkbenchHostDockPopupItemInput) => Promise<string | null> | string | null;
455
+ interface WorkbenchHostDockPopupItemDescriptor {
456
+ previewImageUrl?: string | null;
457
+ subtitle?: string | null;
458
+ title?: string | null;
459
+ }
460
+ type WorkbenchHostDockPopupCardLabelMode = "hidden" | "hover-overlay";
461
+ interface WorkbenchHostDockEntry {
462
+ anchorKey?: string;
463
+ attentionToken?: number | string | null;
464
+ badge?: WorkbenchHostDockEntryBadge;
465
+ capturePopupItemPreview?: WorkbenchHostNodePreviewCapture;
466
+ clickActionId?: string;
467
+ hoverActions?: readonly WorkbenchHostDockEntryAction[];
468
+ icon: ReactNode;
469
+ iconSize?: "default" | "large";
470
+ id: string;
471
+ label: string;
472
+ instanceMode?: WorkbenchHostNodeInstanceStrategy["mode"];
473
+ launchBehavior?: WorkbenchHostDockEntryLaunchBehavior;
474
+ launchPayload?: unknown;
475
+ matchNode?: (node: WorkbenchNode<WorkbenchHostNodeData>) => boolean;
476
+ order?: number;
477
+ popupCardLabelMode?: WorkbenchHostDockPopupCardLabelMode;
478
+ resolvePopupItem?: (input: WorkbenchHostDockPopupItemInput) => WorkbenchHostDockPopupItemDescriptor;
479
+ separatorAfter?: boolean;
480
+ sectionId?: string;
481
+ state?: WorkbenchHostDockEntryState;
482
+ typeId: string;
483
+ visibility?: WorkbenchHostDockEntryVisibility;
484
+ }
485
+ type WorkbenchHostDockEntryDynamicState = Partial<Pick<WorkbenchHostDockEntry, "attentionToken" | "badge" | "hoverActions" | "launchBehavior" | "order" | "state" | "visibility">>;
486
+ interface WorkbenchHostDockEntryStateSource {
487
+ getEntryState(entryId: string): WorkbenchHostDockEntryDynamicState | null | undefined;
488
+ subscribe(listener: () => void): () => void;
489
+ }
490
+ interface WorkbenchHostNodeWindowCapabilities {
491
+ closable?: boolean;
492
+ defaultOpen?: boolean;
493
+ fullscreenHeaderMode?: "persistent" | "reveal";
494
+ fullscreenable?: boolean;
495
+ keepMountedWhenMinimized?: boolean | ((node: WorkbenchNode<WorkbenchHostNodeData>) => boolean);
496
+ minimizable?: boolean;
497
+ minimizedDock?: WorkbenchHostNodeMinimizedDockCapability;
498
+ persists?: boolean;
499
+ restoreOnLoad?: boolean;
500
+ }
501
+ interface WorkbenchHostNodeMinimizedDockCapability {
502
+ capturePreview?: WorkbenchHostNodePreviewCapture;
503
+ kind: "snapshot";
504
+ }
505
+ interface WorkbenchHostSingleInstanceStrategy {
506
+ mode?: "single";
507
+ }
508
+ interface WorkbenchHostMultiInstanceStrategy {
509
+ mode: "multi";
510
+ }
511
+ type WorkbenchHostNodeInstanceStrategy = WorkbenchHostSingleInstanceStrategy | WorkbenchHostMultiInstanceStrategy;
512
+ interface WorkbenchHostNodeBodyContext<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> {
513
+ activation: WorkbenchHostActivation | null;
514
+ displayMode: WorkbenchNode<WorkbenchHostNodeData>["displayMode"];
515
+ externalNodeState: TExternalNodeState;
516
+ externalWorkspaceState: TExternalWorkspaceState;
517
+ focus(): void;
518
+ host: WorkbenchHostHandle;
519
+ instanceId: string;
520
+ instanceKey?: string | null;
521
+ isFocused: boolean;
522
+ node: WorkbenchNode<WorkbenchHostNodeData>;
523
+ setNodeRuntimeState(state: unknown): void;
524
+ setSnapshotNodeState(state: unknown): void;
525
+ }
526
+ interface WorkbenchHostWindowCloseEffectContext<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> {
527
+ externalNodeState: TExternalNodeState;
528
+ externalWorkspaceState: TExternalWorkspaceState;
529
+ instanceId: string;
530
+ instanceKey?: string | null;
531
+ node: WorkbenchNode<WorkbenchHostNodeData>;
532
+ workspaceId: string;
533
+ }
534
+ interface WorkbenchHostNodeLeaseHandle {
535
+ release(): void;
536
+ }
537
+ interface WorkbenchHostNodeLeaseContext {
538
+ node: WorkbenchNode<WorkbenchHostNodeData>;
539
+ workspaceId: string;
540
+ }
541
+ interface WorkbenchHostNodeHeaderWindowActions {
542
+ applyQuickLayout(target: WorkbenchQuickLayoutTarget): void;
543
+ close(): void;
544
+ focus(): void;
545
+ minimize(): void;
546
+ resize(frame: WorkbenchFrame): void;
547
+ toggleDisplayMode(): void;
548
+ }
549
+ interface WorkbenchHostNodeHeaderContext<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> {
550
+ activation: WorkbenchHostActivation | null;
551
+ defaultActions: ReactNode;
552
+ displayMode: WorkbenchNode<WorkbenchHostNodeData>["displayMode"];
553
+ dragHandleProps: WorkbenchWindowHeaderDragHandleProps;
554
+ externalNodeState: TExternalNodeState;
555
+ externalWorkspaceState: TExternalWorkspaceState;
556
+ instanceId: string;
557
+ instanceKey?: string | null;
558
+ isFocused: boolean;
559
+ node: WorkbenchNode<WorkbenchHostNodeData>;
560
+ surfaceSize: WorkbenchSize;
561
+ windowActions: WorkbenchHostNodeHeaderWindowActions;
562
+ }
563
+ type WorkbenchHostMissionControlMode = WorkbenchMissionControlMode;
564
+ type WorkbenchHostBodyRenderer<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
565
+ bivarianceHack(context: WorkbenchHostNodeBodyContext<TExternalNodeState, TExternalWorkspaceState>): ReactNode;
566
+ }["bivarianceHack"];
567
+ type WorkbenchHostHeaderRenderer<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
568
+ bivarianceHack(context: WorkbenchHostNodeHeaderContext<TExternalNodeState, TExternalWorkspaceState>): ReactNode;
569
+ }["bivarianceHack"];
570
+ type WorkbenchHostWindowCloseEffectResolver<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
571
+ bivarianceHack(context: WorkbenchHostWindowCloseEffectContext<TExternalNodeState, TExternalWorkspaceState>): Promise<WorkbenchHostCloseEffect | null | void> | WorkbenchHostCloseEffect | null | void;
572
+ }["bivarianceHack"];
573
+ interface WorkbenchHostNodeDefinition<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> {
574
+ createLease?: (context: WorkbenchHostNodeLeaseContext) => WorkbenchHostNodeLeaseHandle | null | void;
575
+ description?: string;
576
+ frame: WorkbenchFrame;
577
+ getWindowCloseEffect?: WorkbenchHostWindowCloseEffectResolver<TExternalNodeState, TExternalWorkspaceState>;
578
+ instance?: WorkbenchHostNodeInstanceStrategy;
579
+ renderBody: WorkbenchHostBodyRenderer<TExternalNodeState, TExternalWorkspaceState>;
580
+ renderHeader?: WorkbenchHostHeaderRenderer<TExternalNodeState, TExternalWorkspaceState>;
581
+ sizeConstraints?: WorkbenchNodeSizeConstraints | null;
582
+ title: string;
583
+ typeId: string;
584
+ window?: WorkbenchHostNodeWindowCapabilities;
585
+ }
586
+ interface WorkbenchHostSnapshotRepository {
587
+ hasLoaded?(workspaceId: string): boolean;
588
+ load(workspaceId: string): Promise<WorkbenchSnapshot | null>;
589
+ readCached?(workspaceId: string): WorkbenchSnapshot | null;
590
+ save(workspaceId: string, snapshot: WorkbenchSnapshot): Promise<WorkbenchSnapshot> | WorkbenchSnapshot;
591
+ }
592
+ type WorkbenchHostActivationTarget = {
593
+ nodeId: string;
594
+ } | {
595
+ instanceId?: string;
596
+ typeId: string;
597
+ };
598
+ interface WorkbenchHostHandle {
599
+ activateNode(target: WorkbenchHostActivationTarget, activation: {
600
+ payload?: unknown;
601
+ type: string;
602
+ }): void;
603
+ clearNodeActivation?(nodeId: string, sequence: number): void;
604
+ closeNode(nodeId: string): void;
605
+ collectWindowCloseEffects(): Promise<readonly WorkbenchHostCloseEffect[]>;
606
+ dispose(): void;
607
+ exitFullscreenNode(nodeId: string): void;
608
+ focusNode(nodeId: string): void;
609
+ getSnapshot(): WorkbenchState<WorkbenchHostNodeData>;
610
+ isHydrating?(): boolean;
611
+ launchNode(input: WorkbenchHostLaunchInput): Promise<string | null>;
612
+ load(): Promise<void>;
613
+ requestNodeClose(nodeId: string): void;
614
+ reconcileProjectedNodes(projectedNodes: readonly WorkbenchHostProjectedNode[]): void;
615
+ setNodeRuntimeState(nodeId: string, state: unknown): void;
616
+ setNodeSizeConstraints(nodeId: string, sizeConstraints: WorkbenchNodeSizeConstraints | null): void;
617
+ setSnapshotNodeState(nodeId: string, state: unknown): void;
618
+ setNodeTitle(nodeId: string, title: string): void;
619
+ }
620
+ interface WorkbenchHostChromeRenderContext {
621
+ controller: WorkbenchController<WorkbenchHostNodeData>;
622
+ activateNode: WorkbenchHostHandle["activateNode"];
623
+ focusNode: WorkbenchHostHandle["focusNode"];
624
+ launchNode: WorkbenchHostHandle["launchNode"];
625
+ }
626
+ interface WorkbenchHostMissionControlProps {
627
+ mode: WorkbenchMissionControlMode | null;
628
+ onRequestClose: () => void;
629
+ }
630
+ interface WorkbenchHostClosePreparationContext {
631
+ host: WorkbenchHostHandle;
632
+ workspaceId: string;
633
+ }
634
+ type WorkbenchHostClosePreparer = (context: WorkbenchHostClosePreparationContext) => Promise<boolean> | boolean;
635
+ interface WorkbenchContribution {
636
+ dockEntries?: readonly WorkbenchHostDockEntry[];
637
+ externalStateSource?: WorkbenchHostExternalStateSource;
638
+ id: string;
639
+ nodes?: readonly WorkbenchHostNodeDefinition[];
640
+ onLaunchRequest?: (request: WorkbenchHostLaunchRequest) => Promise<WorkbenchHostLaunchResult | null | void> | WorkbenchHostLaunchResult | null | void;
641
+ onNodeCloseRequest?: (request: WorkbenchHostNodeCloseRequest) => Promise<WorkbenchHostNodeCloseDecision | void> | WorkbenchHostNodeCloseDecision | void;
642
+ prepareHostClose?: WorkbenchHostClosePreparer;
643
+ }
644
+ interface WorkbenchHostProps {
645
+ className?: string;
646
+ contributions?: readonly WorkbenchContribution[];
647
+ debugDiagnostics?: WorkbenchDebugDiagnostics;
648
+ dockPreviewCache?: WorkbenchDockPreviewCache;
649
+ dockPlacement?: WorkbenchDockPlacement;
650
+ dockEntries?: readonly WorkbenchHostDockEntry[];
651
+ dockStateSource?: WorkbenchHostDockEntryStateSource;
652
+ externalStateSource?: WorkbenchHostExternalStateSource;
653
+ i18n?: I18nRuntime<string>;
654
+ layoutConstraints?: WorkbenchLayoutConstraintsInput;
655
+ missionControl?: WorkbenchHostMissionControlProps;
656
+ nodes?: readonly WorkbenchHostNodeDefinition[];
657
+ onDockEntryAction?: (input: {
658
+ actionId: string;
659
+ entryId: string;
660
+ host: WorkbenchHostHandle;
661
+ }) => Promise<void> | void;
662
+ onDockEntryClick?: (input: {
663
+ entryId: string;
664
+ host: WorkbenchHostHandle;
665
+ nodeId?: string;
666
+ }) => Promise<void> | void;
667
+ onLaunchRequest?: (request: WorkbenchHostLaunchRequest) => Promise<WorkbenchHostLaunchResult | null | void> | WorkbenchHostLaunchResult | null | void;
668
+ onMissionControlAdapterReady?: (adapter: WorkbenchMissionControlAdapter<WorkbenchHostNodeData> | null) => void;
669
+ onNodeCloseRequest?: (request: WorkbenchHostNodeCloseRequest) => Promise<WorkbenchHostNodeCloseDecision | void> | WorkbenchHostNodeCloseDecision | void;
670
+ onHandleReady?: (handle: WorkbenchHostHandle | null) => void;
671
+ projectedNodes?: readonly WorkbenchHostProjectedNode[];
672
+ renderBottomChrome?: (context: WorkbenchHostChromeRenderContext) => ReactNode;
673
+ renderTopChrome?: (context: WorkbenchHostChromeRenderContext) => ReactNode;
674
+ snapshotRepository: WorkbenchHostSnapshotRepository;
675
+ shortcutsEnabled?: boolean;
676
+ wallpaper?: WorkbenchSurfaceWallpaper;
677
+ workspaceId: string;
678
+ }
679
+
680
+ declare function WorkbenchHost({ className, contributions, debugDiagnostics, dockPreviewCache, dockPlacement, dockEntries, dockStateSource, externalStateSource, i18n, layoutConstraints, missionControl, nodes, onDockEntryAction, onDockEntryClick, onHandleReady, onLaunchRequest, onMissionControlAdapterReady, onNodeCloseRequest, projectedNodes, renderBottomChrome, renderTopChrome, snapshotRepository, shortcutsEnabled, wallpaper, workspaceId }: WorkbenchHostProps): react_jsx_runtime.JSX.Element;
681
+
682
+ declare function resolveWorkbenchHostPrepareClose(contributions: readonly WorkbenchContribution[]): WorkbenchHostClosePreparer | undefined;
683
+
684
+ declare const workbenchFocusInputActivationType = "focus-input";
685
+
686
+ interface CreateWorkbenchNodeInput<TData = unknown> {
687
+ data: TData;
688
+ displayMode?: WorkbenchNode<TData>["displayMode"];
689
+ frame: WorkbenchNode<TData>["frame"];
690
+ id: string;
691
+ isMinimized?: boolean;
692
+ kind: string;
693
+ minimizedAtUnixMs?: WorkbenchNode<TData>["minimizedAtUnixMs"];
694
+ restoreFrame?: WorkbenchNode<TData>["restoreFrame"];
695
+ sizeConstraints?: WorkbenchNode<TData>["sizeConstraints"];
696
+ title: string;
697
+ }
698
+ interface CreateWorkbenchSnapshotFromStateOptions {
699
+ activeSpaceId?: WorkbenchSnapshot["activeSpaceId"];
700
+ metadata?: WorkbenchSnapshot["metadata"];
701
+ spaces?: WorkbenchSnapshot["spaces"];
702
+ }
703
+ declare function createWorkbenchNode<TData = unknown>(input: CreateWorkbenchNodeInput<TData>): WorkbenchNode<TData>;
704
+ declare function createWorkbenchNodeFromSnapshot<TData = unknown>(snapshotNode: WorkbenchSnapshotNode): WorkbenchNode<TData>;
705
+ declare function createWorkbenchStateFromSnapshot<TData = unknown>(snapshot: WorkbenchSnapshot): Pick<WorkbenchState<TData>, "nodeStack" | "nodes">;
706
+ declare function createWorkbenchSnapshotFromState<TData = unknown>(state: Pick<WorkbenchState<TData>, "nodeStack" | "nodes">, options?: CreateWorkbenchSnapshotFromStateOptions): WorkbenchSnapshot;
707
+
708
+ interface WorkbenchHostNodeIdentityInput {
709
+ instanceId: string;
710
+ typeId: string;
711
+ }
712
+ declare function createWorkbenchHostProjectedNodeId(input: WorkbenchHostNodeIdentityInput): string;
713
+ declare function createWorkbenchHostLaunchedNodeId(input: WorkbenchHostNodeIdentityInput): string;
714
+
715
+ declare function useWorkbenchSelector<TData, TResult>(selector: (state: WorkbenchState<TData>) => TResult): TResult;
716
+
717
+ export { type CreateWorkbenchNodeInput, type CreateWorkbenchSnapshotFromStateOptions, type WorkbenchContribution, type WorkbenchController, type WorkbenchDebugDiagnostics, type WorkbenchDisplayMode, type WorkbenchDockContext, type WorkbenchDockPlacement, type WorkbenchDockPreviewCache, type WorkbenchDockPreviewCacheKey, type WorkbenchDockPreviewCacheKeyResolver, type WorkbenchFrame, type WorkbenchFullscreenHeaderMode, WorkbenchHost, type WorkbenchHostActivation, type WorkbenchHostActivationTarget, type WorkbenchHostChromeRenderContext, type WorkbenchHostCloseDialogRequest, type WorkbenchHostCloseDialogScope, type WorkbenchHostCloseDialogVariant, type WorkbenchHostCloseEffect, type WorkbenchHostClosePreparationContext, type WorkbenchHostClosePreparer, type WorkbenchHostDockEntry, type WorkbenchHostDockEntryAction, type WorkbenchHostDockEntryBadge, type WorkbenchHostDockEntryDynamicState, type WorkbenchHostDockEntryLaunchBehavior, type WorkbenchHostDockEntryState, type WorkbenchHostDockEntryStateKind, type WorkbenchHostDockEntryStateSource, type WorkbenchHostDockEntryVisibility, type WorkbenchHostDockPopupItemDescriptor, type WorkbenchHostDockPopupItemInput, type WorkbenchHostExternalStateLookupInput, type WorkbenchHostExternalStateSource, type WorkbenchHostHandle, type WorkbenchHostLaunchFramePolicy, type WorkbenchHostLaunchInput, type WorkbenchHostLaunchReason, type WorkbenchHostLaunchRequest, type WorkbenchHostLaunchResult, type WorkbenchHostMissionControlMode, type WorkbenchHostMissionControlProps, type WorkbenchHostMultiInstanceStrategy, type WorkbenchHostNodeBodyContext, type WorkbenchHostNodeCloseDecision, type WorkbenchHostNodeCloseRequest, type WorkbenchHostNodeData, type WorkbenchHostNodeDefinition, type WorkbenchHostNodeHeaderContext, type WorkbenchHostNodeHeaderWindowActions, type WorkbenchHostNodeIdentityInput, type WorkbenchHostNodeInstanceStrategy, type WorkbenchHostNodeMinimizedDockCapability, type WorkbenchHostNodeWindowCapabilities, type WorkbenchHostProjectedNode, type WorkbenchHostProjectedNodeSubject, type WorkbenchHostProps, type WorkbenchHostSingleInstanceStrategy, type WorkbenchHostSnapshotRepository, type WorkbenchHostWindowCloseEffectContext, type WorkbenchLayoutConstraints, type WorkbenchLayoutConstraintsInput, type WorkbenchLayoutPreset, type WorkbenchMissionControlAdapter, type WorkbenchMissionControlMode, type WorkbenchMissionControlSnapshot, type WorkbenchNode, type WorkbenchNodeRenderFrame, type WorkbenchNodeSizeConstraints, type WorkbenchQuickLayoutTarget, type WorkbenchRenderNode, type WorkbenchRenderNodeContext, type WorkbenchRenderWindowActions, type WorkbenchRenderWindowHeader, type WorkbenchResolveFullscreenHeaderMode, type WorkbenchResolveWindowChromeMode, type WorkbenchResolveWindowChromeModeContext, type WorkbenchSafeArea, type WorkbenchSize, type WorkbenchState, WorkbenchSurface, type WorkbenchSurfacePresentation, type WorkbenchSurfaceProps, type WorkbenchSurfaceWallpaper, type WorkbenchSurfaceWallpaperFit, type WorkbenchWindowActionContext, WorkbenchWindowChromeI18nRuntime, type WorkbenchWindowChromeMode, type WorkbenchWindowHeaderContext, createWorkbenchController, createWorkbenchHostLaunchedNodeId, createWorkbenchHostProjectedNodeId, createWorkbenchNode, createWorkbenchNodeFromSnapshot, createWorkbenchSnapshotFromState, createWorkbenchStateFromSnapshot, resolveWorkbenchHostPrepareClose, useWorkbenchSelector, workbenchFocusInputActivationType };