@tutti-os/workbench-surface 0.0.168 → 0.0.170

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/README.md CHANGED
@@ -43,12 +43,20 @@ When a node body or header needs host-owned business state, pass an
43
43
  `externalNodeState` and `externalWorkspaceState`. If the source exposes
44
44
  `subscribe(...)`, the host re-renders when that subscription notifies.
45
45
 
46
- Node body context also exposes `isDragging` and `isResizing`. The Workbench
46
+ Node body and header contexts expose `isDragging` and `isResizing`. The Workbench
47
47
  shell continues applying live frame geometry during direct manipulation, while
48
48
  an expensive body adapter may use these flags to suppress frame-only renders
49
49
  until the interaction settles. The adapter must still observe both interaction
50
50
  transitions so the final committed frame reaches responsive body layout.
51
51
 
52
+ Headers keep live frame renders by default. A definition may provide
53
+ `getHeaderFrameRenderKey(context)` when several intermediate frames produce the
54
+ same visible header layout. During drag or resize, equal primitive keys skip
55
+ `renderHeader`; changes to node data, external state, focus, or interaction
56
+ state still render. Call `context.windowActions.getFrame()` inside actions that
57
+ need execution-time geometry instead of closing over a frame omitted from the
58
+ key.
59
+
52
60
  Host-owned business instances are represented with `projectedNodes`. A
53
61
  projected node tells the workbench that a shell should currently exist for a
54
62
  host-owned instance; the workbench reconciles that presence with snapshot
package/dist/index.d.ts CHANGED
@@ -326,11 +326,16 @@ interface WorkbenchWindowHeaderContext<TData = unknown> {
326
326
  node: WorkbenchNode<TData>;
327
327
  controller: WorkbenchController<TData>;
328
328
  surfaceSize: WorkbenchSize;
329
+ isDragging: boolean;
330
+ isFocused: boolean;
331
+ isResizing: boolean;
329
332
  genie: {
330
333
  minimizeNodeToAnchor(nodeID: string, minimize?: () => void): void;
331
334
  };
332
335
  defaultActions: ReactNode;
333
336
  dragHandleProps: WorkbenchWindowHeaderDragHandleProps;
337
+ /** Stable while the non-node inputs used to build header chrome are unchanged. */
338
+ renderRevision: object;
334
339
  }
335
340
  type WorkbenchRenderNode<TData = unknown> = (context: WorkbenchRenderNodeContext<TData>) => ReactNode;
336
341
  type WorkbenchRenderWindowActions<TData = unknown> = (context: WorkbenchWindowActionContext<TData>) => ReactNode;
@@ -707,6 +712,7 @@ interface WorkbenchHostNodeHeaderWindowActions {
707
712
  applyQuickLayout(target: WorkbenchQuickLayoutTarget): void;
708
713
  close(): void;
709
714
  focus(): void;
715
+ getFrame(): WorkbenchFrame;
710
716
  minimize(): void;
711
717
  resize(frame: WorkbenchFrame): void;
712
718
  toggleDisplayMode(): void;
@@ -720,7 +726,9 @@ interface WorkbenchHostNodeHeaderContext<TExternalNodeState = unknown, TExternal
720
726
  externalWorkspaceState: TExternalWorkspaceState;
721
727
  instanceId: string;
722
728
  instanceKey?: string | null;
729
+ isDragging: boolean;
723
730
  isFocused: boolean;
731
+ isResizing: boolean;
724
732
  node: WorkbenchNode<WorkbenchHostNodeData>;
725
733
  surfaceSize: WorkbenchSize;
726
734
  windowActions: WorkbenchHostNodeHeaderWindowActions;
@@ -732,6 +740,10 @@ type WorkbenchHostBodyRenderer<TExternalNodeState = unknown, TExternalWorkspaceS
732
740
  type WorkbenchHostHeaderRenderer<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
733
741
  bivarianceHack(context: WorkbenchHostNodeHeaderContext<TExternalNodeState, TExternalWorkspaceState>): ReactNode;
734
742
  }["bivarianceHack"];
743
+ type WorkbenchHostNodeHeaderFrameRenderKey = boolean | number | string | null;
744
+ type WorkbenchHostHeaderFrameRenderKeyResolver<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
745
+ bivarianceHack(context: WorkbenchHostNodeHeaderContext<TExternalNodeState, TExternalWorkspaceState>): WorkbenchHostNodeHeaderFrameRenderKey;
746
+ }["bivarianceHack"];
735
747
  type WorkbenchHostWindowCloseEffectResolver<TExternalNodeState = unknown, TExternalWorkspaceState = unknown> = {
736
748
  bivarianceHack(context: WorkbenchHostWindowCloseEffectContext<TExternalNodeState, TExternalWorkspaceState>): Promise<WorkbenchHostCloseEffect | null | void> | WorkbenchHostCloseEffect | null | void;
737
749
  }["bivarianceHack"];
@@ -740,6 +752,11 @@ interface WorkbenchHostNodeDefinition<TExternalNodeState = unknown, TExternalWor
740
752
  description?: string;
741
753
  frame: WorkbenchFrame;
742
754
  getWindowCloseEffect?: WorkbenchHostWindowCloseEffectResolver<TExternalNodeState, TExternalWorkspaceState>;
755
+ /**
756
+ * Projects frame-derived header presentation during direct manipulation.
757
+ * Equal keys skip renderHeader; omitted definitions keep live frame renders.
758
+ */
759
+ getHeaderFrameRenderKey?: WorkbenchHostHeaderFrameRenderKeyResolver<TExternalNodeState, TExternalWorkspaceState>;
743
760
  instance?: WorkbenchHostNodeInstanceStrategy;
744
761
  onBodyRenderErrorChange?: (input: {
745
762
  hasError: boolean;
@@ -906,4 +923,4 @@ declare function getWorkbenchLayoutFrame(surfaceSize: WorkbenchSize, constraints
906
923
 
907
924
  declare function selectFocusedWorkbenchNode<TData>(state: WorkbenchState<TData>): WorkbenchNode<TData> | null;
908
925
 
909
- export { type CreateWorkbenchNodeInput, type CreateWorkbenchSnapshotFromStateOptions, type WorkbenchContribution, type WorkbenchController, type WorkbenchDebugDiagnostics, type WorkbenchDisplayMode, WorkbenchDockComponentPreviewFrame, type WorkbenchDockComponentPreviewFrameProps, type WorkbenchDockContext, type WorkbenchDockPlacement, type WorkbenchDockPreviewCache, type WorkbenchDockPreviewCacheKey, type WorkbenchDockPreviewCacheKeyResolver, type WorkbenchDockPreviewContent, 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 WorkbenchHostDockEntryPresentationOverride, type WorkbenchHostDockEntryPresentationOverrides, 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, type WorkbenchWindowManagementConfig, createWorkbenchController, createWorkbenchHostLaunchedNodeId, createWorkbenchHostProjectedNodeId, createWorkbenchNode, createWorkbenchNodeFromSnapshot, createWorkbenchSnapshotFromState, createWorkbenchStateFromSnapshot, getWorkbenchLayoutFrame, isEditableShortcutTarget, resolveWorkbenchHostPrepareClose, selectFocusedWorkbenchNode, useWorkbenchSelector, workbenchFocusInputActivationType };
926
+ export { type CreateWorkbenchNodeInput, type CreateWorkbenchSnapshotFromStateOptions, type WorkbenchContribution, type WorkbenchController, type WorkbenchDebugDiagnostics, type WorkbenchDisplayMode, WorkbenchDockComponentPreviewFrame, type WorkbenchDockComponentPreviewFrameProps, type WorkbenchDockContext, type WorkbenchDockPlacement, type WorkbenchDockPreviewCache, type WorkbenchDockPreviewCacheKey, type WorkbenchDockPreviewCacheKeyResolver, type WorkbenchDockPreviewContent, 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 WorkbenchHostDockEntryPresentationOverride, type WorkbenchHostDockEntryPresentationOverrides, 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 WorkbenchHostNodeHeaderFrameRenderKey, 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, type WorkbenchWindowManagementConfig, createWorkbenchController, createWorkbenchHostLaunchedNodeId, createWorkbenchHostProjectedNodeId, createWorkbenchNode, createWorkbenchNodeFromSnapshot, createWorkbenchSnapshotFromState, createWorkbenchStateFromSnapshot, getWorkbenchLayoutFrame, isEditableShortcutTarget, resolveWorkbenchHostPrepareClose, selectFocusedWorkbenchNode, useWorkbenchSelector, workbenchFocusInputActivationType };