@tutti-os/workbench-surface 0.0.154 → 0.0.155

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
@@ -61,6 +61,15 @@ Entries may also provide host-owned popup metadata through
61
61
  `resolvePopupItem(...)` and `capturePopupItemPreview(...)`, plus custom badge
62
62
  content when the default count or status shapes are not enough.
63
63
 
64
+ Component-based dock previews should render their host-owned body through
65
+ `WorkbenchDockComponentPreviewFrame`. The frame owns source-to-viewport
66
+ scaling, clipping, centering, and the non-interactive preview boundary. Preview
67
+ children are decorative and never participate in pointer hit testing; the Dock
68
+ button remains the only interaction owner even if frozen preview markup is
69
+ replaced between pointer events. Popup preview providers receive the canonical
70
+ target size through `item.previewViewport`; use that value instead of duplicating
71
+ Dock card dimensions in a consuming host.
72
+
64
73
  Presentation-only changes to merged Dock entries belong in
65
74
  `dockEntryPresentationOverrides`. `WorkbenchHost` applies these overrides by
66
75
  entry id after contributions and explicit entries are merged, preserving Dock
package/dist/index.d.ts CHANGED
@@ -893,10 +893,17 @@ interface WorkbenchHostNodeIdentityInput {
893
893
  declare function createWorkbenchHostProjectedNodeId(input: WorkbenchHostNodeIdentityInput): string;
894
894
  declare function createWorkbenchHostLaunchedNodeId(input: WorkbenchHostNodeIdentityInput): string;
895
895
 
896
+ interface WorkbenchDockComponentPreviewFrameProps {
897
+ children?: ReactNode;
898
+ sourceSize: WorkbenchSize;
899
+ viewport: WorkbenchSize;
900
+ }
901
+ declare function WorkbenchDockComponentPreviewFrame({ children, sourceSize, viewport }: WorkbenchDockComponentPreviewFrameProps): ReactNode;
902
+
896
903
  declare function useWorkbenchSelector<TData, TResult>(selector: (state: WorkbenchState<TData>) => TResult): TResult;
897
904
 
898
905
  declare function getWorkbenchLayoutFrame(surfaceSize: WorkbenchSize, constraints?: WorkbenchLayoutConstraints): WorkbenchFrame;
899
906
 
900
907
  declare function selectFocusedWorkbenchNode<TData>(state: WorkbenchState<TData>): WorkbenchNode<TData> | null;
901
908
 
902
- export { type CreateWorkbenchNodeInput, type CreateWorkbenchSnapshotFromStateOptions, type WorkbenchContribution, type WorkbenchController, type WorkbenchDebugDiagnostics, type WorkbenchDisplayMode, 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 };
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 };
package/dist/index.js CHANGED
@@ -9213,6 +9213,12 @@ function resolveDockPopupVerticalClampOffsetPx(input) {
9213
9213
  // src/host/WorkbenchHostDockPopup.tsx
9214
9214
  import { Fragment as Fragment5, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
9215
9215
  var dockPopupCardWidthPx = 165;
9216
+ var dockPopupCardHeightPx = 103;
9217
+ var dockPopupPreviewInsetPx = 4;
9218
+ var workbenchHostDockPopupPreviewViewport = Object.freeze({
9219
+ height: dockPopupCardHeightPx - dockPopupPreviewInsetPx * 2,
9220
+ width: dockPopupCardWidthPx - dockPopupPreviewInsetPx * 2
9221
+ });
9216
9222
  var dockPopupGridGapPx = 8;
9217
9223
  var dockPopupPanelPaddingInlinePx = 12;
9218
9224
  var dockPopupPanelBorderInlinePx = 2;
@@ -12137,7 +12143,8 @@ function WorkbenchHostDock({
12137
12143
  host,
12138
12144
  isFocused: context.focusedNodeId === node.id,
12139
12145
  isMinimized: minimizedNodeIDs.has(node.id),
12140
- node
12146
+ node,
12147
+ previewViewport: workbenchHostDockPopupPreviewViewport
12141
12148
  };
12142
12149
  const descriptor = popupEntry.entry.resolvePopupItem?.(item) ?? {};
12143
12150
  const descriptorPreview = descriptor.preview ?? popupEntry.entry.providePopupItemPreview?.(item) ?? null;
@@ -14159,7 +14166,63 @@ function WorkbenchHost({
14159
14166
  }
14160
14167
  );
14161
14168
  }
14169
+
14170
+ // src/react/WorkbenchDockComponentPreviewFrame.tsx
14171
+ import { jsx as jsx16 } from "react/jsx-runtime";
14172
+ function WorkbenchDockComponentPreviewFrame({
14173
+ children,
14174
+ sourceSize,
14175
+ viewport
14176
+ }) {
14177
+ const sourceHeight = Math.max(1, sourceSize.height);
14178
+ const sourceWidth = Math.max(1, sourceSize.width);
14179
+ const viewportHeight = Math.max(1, viewport.height);
14180
+ const viewportWidth = Math.max(1, viewport.width);
14181
+ const scale = Math.min(
14182
+ viewportWidth / sourceWidth,
14183
+ viewportHeight / sourceHeight
14184
+ );
14185
+ const frameStyle = {
14186
+ background: "transparent",
14187
+ borderRadius: "0.375rem",
14188
+ display: "block",
14189
+ height: `${viewportHeight}px`,
14190
+ overflow: "hidden",
14191
+ pointerEvents: "none",
14192
+ position: "relative",
14193
+ width: `${viewportWidth}px`
14194
+ };
14195
+ const contentStyle = {
14196
+ display: "block",
14197
+ height: `${sourceHeight}px`,
14198
+ left: "50%",
14199
+ overflow: "hidden",
14200
+ pointerEvents: "none",
14201
+ position: "absolute",
14202
+ top: "50%",
14203
+ transform: `translate(-50%, -50%) scale(${scale})`,
14204
+ transformOrigin: "center",
14205
+ width: `${sourceWidth}px`
14206
+ };
14207
+ return /* @__PURE__ */ jsx16(
14208
+ "span",
14209
+ {
14210
+ "aria-hidden": "true",
14211
+ "data-workbench-dock-component-preview-frame": "true",
14212
+ style: frameStyle,
14213
+ children: /* @__PURE__ */ jsx16(
14214
+ "span",
14215
+ {
14216
+ "data-workbench-dock-component-preview-content": "true",
14217
+ style: contentStyle,
14218
+ children
14219
+ }
14220
+ )
14221
+ }
14222
+ );
14223
+ }
14162
14224
  export {
14225
+ WorkbenchDockComponentPreviewFrame,
14163
14226
  WorkbenchHost,
14164
14227
  WorkbenchSurface,
14165
14228
  createWorkbenchController,