@fivepixels-js/react 0.2.8 → 0.2.10
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/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/components/icons/Icons.d.ts +6 -0
- package/dist/components/icons/Icons.d.ts.map +1 -1
- package/dist/components/icons/Icons.js +7 -0
- package/dist/components/icons/Icons.js.map +1 -1
- package/dist/components/overlay/DeviceFrameArtwork.d.ts +10 -0
- package/dist/components/overlay/DeviceFrameArtwork.d.ts.map +1 -0
- package/dist/components/overlay/DeviceFrameArtwork.js +112 -0
- package/dist/components/overlay/DeviceFrameArtwork.js.map +1 -0
- package/dist/components/overlay/DevicePreviewChrome.d.ts +2 -0
- package/dist/components/overlay/DevicePreviewChrome.d.ts.map +1 -0
- package/dist/components/overlay/DevicePreviewChrome.js +475 -0
- package/dist/components/overlay/DevicePreviewChrome.js.map +1 -0
- package/dist/components/overlay/DevicePreviewQrCard.d.ts +18 -0
- package/dist/components/overlay/DevicePreviewQrCard.d.ts.map +1 -0
- package/dist/components/overlay/DevicePreviewQrCard.js +94 -0
- package/dist/components/overlay/DevicePreviewQrCard.js.map +1 -0
- package/dist/components/overlay/DeviceStatusBar.d.ts +13 -0
- package/dist/components/overlay/DeviceStatusBar.d.ts.map +1 -0
- package/dist/components/overlay/DeviceStatusBar.js +168 -0
- package/dist/components/overlay/DeviceStatusBar.js.map +1 -0
- package/dist/components/overlay/FloatingPinRail.d.ts.map +1 -1
- package/dist/components/overlay/FloatingPinRail.js +44 -23
- package/dist/components/overlay/FloatingPinRail.js.map +1 -1
- package/dist/components/panel/ReportControlPanel.d.ts.map +1 -1
- package/dist/components/panel/ReportControlPanel.js +13 -6
- package/dist/components/panel/ReportControlPanel.js.map +1 -1
- package/dist/components/report/FivePixels.d.ts.map +1 -1
- package/dist/components/report/FivePixels.js +5 -0
- package/dist/components/report/FivePixels.js.map +1 -1
- package/dist/components/report/ReportView.d.ts +1 -1
- package/dist/components/report/ReportView.d.ts.map +1 -1
- package/dist/components/report/ReportView.js +19 -3
- package/dist/components/report/ReportView.js.map +1 -1
- package/dist/components/ui/FloatingWindow.d.ts +47 -0
- package/dist/components/ui/FloatingWindow.d.ts.map +1 -0
- package/dist/components/ui/FloatingWindow.js +259 -0
- package/dist/components/ui/FloatingWindow.js.map +1 -0
- package/dist/constants/devicePreview.d.ts +137 -0
- package/dist/constants/devicePreview.d.ts.map +1 -0
- package/dist/constants/devicePreview.js +501 -0
- package/dist/constants/devicePreview.js.map +1 -0
- package/dist/constants/motionClasses.d.ts +2 -0
- package/dist/constants/motionClasses.d.ts.map +1 -1
- package/dist/constants/motionClasses.js +2 -0
- package/dist/constants/motionClasses.js.map +1 -1
- package/dist/constants/overlayChrome.d.ts +13 -0
- package/dist/constants/overlayChrome.d.ts.map +1 -0
- package/dist/constants/overlayChrome.js +13 -0
- package/dist/constants/overlayChrome.js.map +1 -0
- package/dist/hooks/report/assembleReportContextValue.d.ts +15 -0
- package/dist/hooks/report/assembleReportContextValue.d.ts.map +1 -1
- package/dist/hooks/report/assembleReportContextValue.js +15 -0
- package/dist/hooks/report/assembleReportContextValue.js.map +1 -1
- package/dist/hooks/report/useReportDraftSession.d.ts.map +1 -1
- package/dist/hooks/report/useReportDraftSession.js +11 -6
- package/dist/hooks/report/useReportDraftSession.js.map +1 -1
- package/dist/hooks/report/useReportMarkers.d.ts.map +1 -1
- package/dist/hooks/report/useReportMarkers.js +19 -18
- package/dist/hooks/report/useReportMarkers.js.map +1 -1
- package/dist/hooks/report/useReportPanelShell.d.ts +15 -0
- package/dist/hooks/report/useReportPanelShell.d.ts.map +1 -1
- package/dist/hooks/report/useReportPanelShell.js +18 -1
- package/dist/hooks/report/useReportPanelShell.js.map +1 -1
- package/dist/hooks/report/useReportState.d.ts +15 -0
- package/dist/hooks/report/useReportState.d.ts.map +1 -1
- package/dist/hooks/useCurrentPathname.d.ts.map +1 -1
- package/dist/hooks/useCurrentPathname.js +10 -1
- package/dist/hooks/useCurrentPathname.js.map +1 -1
- package/dist/hooks/useDevicePreviewPreference.d.ts +17 -0
- package/dist/hooks/useDevicePreviewPreference.d.ts.map +1 -0
- package/dist/hooks/useDevicePreviewPreference.js +127 -0
- package/dist/hooks/useDevicePreviewPreference.js.map +1 -0
- package/dist/hooks/useOverlayChrome.d.ts +16 -0
- package/dist/hooks/useOverlayChrome.d.ts.map +1 -0
- package/dist/hooks/useOverlayChrome.js +131 -0
- package/dist/hooks/useOverlayChrome.js.map +1 -0
- package/dist/hooks/usePanelAutoRefresh.d.ts +1 -1
- package/dist/hooks/usePanelDock.d.ts +2 -0
- package/dist/hooks/usePanelDock.d.ts.map +1 -1
- package/dist/hooks/usePanelDock.js +22 -0
- package/dist/hooks/usePanelDock.js.map +1 -1
- package/dist/hooks/usePinnedFeedbackPreference.d.ts +3 -1
- package/dist/hooks/usePinnedFeedbackPreference.d.ts.map +1 -1
- package/dist/hooks/usePinnedFeedbackPreference.js +11 -1
- package/dist/hooks/usePinnedFeedbackPreference.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +44 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +44 -0
- package/dist/i18n/ko.js.map +1 -1
- package/dist/i18n/types.d.ts +44 -0
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/providers/reportContext.d.ts +76 -1
- package/dist/providers/reportContext.d.ts.map +1 -1
- package/dist/providers/reportContextPartitions.d.ts +1 -1
- package/dist/providers/reportContextPartitions.d.ts.map +1 -1
- package/dist/providers/reportContextPartitions.js +15 -0
- package/dist/providers/reportContextPartitions.js.map +1 -1
- package/dist/styles/reportStylesheet.d.ts +1 -1
- package/dist/styles/reportStylesheet.d.ts.map +1 -1
- package/dist/styles/reportStylesheet.js +1 -1
- package/dist/styles/reportStylesheet.js.map +1 -1
- package/dist/types/pinnedFeedback.d.ts +7 -0
- package/dist/types/pinnedFeedback.d.ts.map +1 -1
- package/dist/types/pinnedFeedback.js.map +1 -1
- package/dist/utils/marker/coordinates.d.ts.map +1 -1
- package/dist/utils/marker/coordinates.js +41 -23
- package/dist/utils/marker/coordinates.js.map +1 -1
- package/dist/utils/marker/locateFeedback.d.ts.map +1 -1
- package/dist/utils/marker/locateFeedback.js +6 -3
- package/dist/utils/marker/locateFeedback.js.map +1 -1
- package/dist/utils/marker/targetSelector.d.ts.map +1 -1
- package/dist/utils/marker/targetSelector.js +6 -10
- package/dist/utils/marker/targetSelector.js.map +1 -1
- package/dist/utils/mention/elementMentions.d.ts.map +1 -1
- package/dist/utils/mention/elementMentions.js +9 -16
- package/dist/utils/mention/elementMentions.js.map +1 -1
- package/dist/utils/overlay/devicePreviewCapture.d.ts +52 -0
- package/dist/utils/overlay/devicePreviewCapture.d.ts.map +1 -0
- package/dist/utils/overlay/devicePreviewCapture.js +167 -0
- package/dist/utils/overlay/devicePreviewCapture.js.map +1 -0
- package/dist/utils/overlay/devicePreviewFrame.d.ts +31 -0
- package/dist/utils/overlay/devicePreviewFrame.d.ts.map +1 -0
- package/dist/utils/overlay/devicePreviewFrame.js +149 -0
- package/dist/utils/overlay/devicePreviewFrame.js.map +1 -0
- package/dist/utils/overlay/edgeDock.d.ts +47 -0
- package/dist/utils/overlay/edgeDock.d.ts.map +1 -0
- package/dist/utils/overlay/edgeDock.js +144 -0
- package/dist/utils/overlay/edgeDock.js.map +1 -0
- package/dist/utils/overlay/floatingWindowStack.d.ts +6 -0
- package/dist/utils/overlay/floatingWindowStack.d.ts.map +1 -0
- package/dist/utils/overlay/floatingWindowStack.js +17 -0
- package/dist/utils/overlay/floatingWindowStack.js.map +1 -0
- package/dist/utils/overlay/pageDocumentBridge.d.ts +43 -0
- package/dist/utils/overlay/pageDocumentBridge.d.ts.map +1 -0
- package/dist/utils/overlay/pageDocumentBridge.js +208 -0
- package/dist/utils/overlay/pageDocumentBridge.js.map +1 -0
- package/dist/utils/pinned/pinnedFeedback.d.ts.map +1 -1
- package/dist/utils/pinned/pinnedFeedback.js +5 -2
- package/dist/utils/pinned/pinnedFeedback.js.map +1 -1
- package/dist/utils/probe/pickProbeSession.d.ts.map +1 -1
- package/dist/utils/probe/pickProbeSession.js +3 -1
- package/dist/utils/probe/pickProbeSession.js.map +1 -1
- package/dist/utils/qr/devicePreviewShareUrl.d.ts +13 -0
- package/dist/utils/qr/devicePreviewShareUrl.d.ts.map +1 -0
- package/dist/utils/qr/devicePreviewShareUrl.js +53 -0
- package/dist/utils/qr/devicePreviewShareUrl.js.map +1 -0
- package/dist/utils/qr/encodeQrSvg.d.ts +13 -0
- package/dist/utils/qr/encodeQrSvg.d.ts.map +1 -0
- package/dist/utils/qr/encodeQrSvg.js +31 -0
- package/dist/utils/qr/encodeQrSvg.js.map +1 -0
- package/dist/utils/shared/dom.d.ts.map +1 -1
- package/dist/utils/shared/dom.js +34 -29
- package/dist/utils/shared/dom.js.map +1 -1
- package/dist/utils/shared/pathname.d.ts.map +1 -1
- package/dist/utils/shared/pathname.js +13 -0
- package/dist/utils/shared/pathname.js.map +1 -1
- package/dist/vendor/nayuki/qrcodegen.d.ts +94 -0
- package/dist/vendor/nayuki/qrcodegen.d.ts.map +1 -0
- package/dist/vendor/nayuki/qrcodegen.js +836 -0
- package/dist/vendor/nayuki/qrcodegen.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { FIVEPIXELS_HOST_ID } from "../../constants/overlayChrome.js";
|
|
2
|
+
export const DEVICE_PREVIEW_BUTTON_OUTSET = 3;
|
|
3
|
+
export function shouldCaptureDevicePreviewNode(node) {
|
|
4
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
const element = node;
|
|
8
|
+
if (element.hasAttribute("data-fivepixels-skip-capture")) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return element.id !== FIVEPIXELS_HOST_ID;
|
|
12
|
+
}
|
|
13
|
+
function sanitizeFilenamePart(value) {
|
|
14
|
+
return value.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "device";
|
|
15
|
+
}
|
|
16
|
+
function formatCaptureStamp(now) {
|
|
17
|
+
const year = String(now.getFullYear());
|
|
18
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
19
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
20
|
+
const hours = String(now.getHours()).padStart(2, "0");
|
|
21
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
22
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
23
|
+
return `${year}${month}${day}-${hours}${minutes}${seconds}`;
|
|
24
|
+
}
|
|
25
|
+
export function getDevicePreviewCaptureLayout(args) {
|
|
26
|
+
const screenWidth = Math.max(1, Math.round(args.screenWidth));
|
|
27
|
+
const screenHeight = Math.max(1, Math.round(args.screenHeight));
|
|
28
|
+
const bezel = args.deviceImageEnabled
|
|
29
|
+
? {
|
|
30
|
+
top: Math.max(0, Math.round(args.bezel.top)),
|
|
31
|
+
right: Math.max(0, Math.round(args.bezel.right)),
|
|
32
|
+
bottom: Math.max(0, Math.round(args.bezel.bottom)),
|
|
33
|
+
left: Math.max(0, Math.round(args.bezel.left)),
|
|
34
|
+
}
|
|
35
|
+
: { top: 0, right: 0, bottom: 0, left: 0 };
|
|
36
|
+
const frameWidth = screenWidth + bezel.left + bezel.right;
|
|
37
|
+
const frameHeight = screenHeight + bezel.top + bezel.bottom;
|
|
38
|
+
const outset = args.deviceImageEnabled ? DEVICE_PREVIEW_BUTTON_OUTSET : 0;
|
|
39
|
+
return {
|
|
40
|
+
canvasWidth: frameWidth + outset * 2,
|
|
41
|
+
canvasHeight: frameHeight + outset * 2,
|
|
42
|
+
frameWidth,
|
|
43
|
+
frameHeight,
|
|
44
|
+
screenX: outset + bezel.left,
|
|
45
|
+
screenY: outset + bezel.top,
|
|
46
|
+
screenWidth,
|
|
47
|
+
screenHeight,
|
|
48
|
+
outset,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function buildDevicePreviewCaptureFilename(args) {
|
|
52
|
+
const deviceId = sanitizeFilenamePart(args.deviceId);
|
|
53
|
+
const width = Math.max(1, Math.round(args.width));
|
|
54
|
+
const height = Math.max(1, Math.round(args.height));
|
|
55
|
+
const stamp = formatCaptureStamp(args.now ?? new Date());
|
|
56
|
+
return `fivepixels-preview-${deviceId}-${width}x${height}-${stamp}.png`;
|
|
57
|
+
}
|
|
58
|
+
function cropCanvas(source, sx, sy, width, height) {
|
|
59
|
+
const output = document.createElement("canvas");
|
|
60
|
+
output.width = width;
|
|
61
|
+
output.height = height;
|
|
62
|
+
const context = output.getContext("2d");
|
|
63
|
+
if (!context) {
|
|
64
|
+
throw new Error("Canvas 2D context is unavailable.");
|
|
65
|
+
}
|
|
66
|
+
const safeX = Math.max(0, Math.min(Math.round(sx), Math.max(0, source.width - width)));
|
|
67
|
+
const safeY = Math.max(0, Math.min(Math.round(sy), Math.max(0, source.height - height)));
|
|
68
|
+
context.drawImage(source, safeX, safeY, width, height, 0, 0, width, height);
|
|
69
|
+
return output;
|
|
70
|
+
}
|
|
71
|
+
export async function defaultRasterizeElement(element, options) {
|
|
72
|
+
const { toCanvas } = await import("html-to-image");
|
|
73
|
+
const captureHeight = options.cropToViewport ? Math.max(options.height, Math.round(element.scrollHeight) || options.height) : options.height;
|
|
74
|
+
const canvas = await toCanvas(element, {
|
|
75
|
+
width: options.width,
|
|
76
|
+
height: captureHeight,
|
|
77
|
+
pixelRatio: 1,
|
|
78
|
+
skipAutoScale: true,
|
|
79
|
+
backgroundColor: options.backgroundColor ?? undefined,
|
|
80
|
+
skipFonts: true,
|
|
81
|
+
style: {
|
|
82
|
+
transform: "none",
|
|
83
|
+
transformOrigin: "top left",
|
|
84
|
+
margin: "0px",
|
|
85
|
+
marginLeft: "0px",
|
|
86
|
+
marginTop: "0px",
|
|
87
|
+
marginRight: "0px",
|
|
88
|
+
marginBottom: "0px",
|
|
89
|
+
left: "0px",
|
|
90
|
+
top: "0px",
|
|
91
|
+
right: "auto",
|
|
92
|
+
bottom: "auto",
|
|
93
|
+
position: "relative",
|
|
94
|
+
overflow: options.cropToViewport ? "visible" : "hidden",
|
|
95
|
+
width: `${options.width}px`,
|
|
96
|
+
height: `${captureHeight}px`,
|
|
97
|
+
},
|
|
98
|
+
filter: shouldCaptureDevicePreviewNode,
|
|
99
|
+
});
|
|
100
|
+
if (!options.cropToViewport || (canvas.width === options.width && canvas.height === options.height && element.scrollTop <= 0 && element.scrollLeft <= 0)) {
|
|
101
|
+
return canvas;
|
|
102
|
+
}
|
|
103
|
+
return cropCanvas(canvas, element.scrollLeft, element.scrollTop, options.width, options.height);
|
|
104
|
+
}
|
|
105
|
+
export async function captureDevicePreview(args) {
|
|
106
|
+
const rasterize = args.rasterize ?? defaultRasterizeElement;
|
|
107
|
+
const { layout } = args;
|
|
108
|
+
const output = document.createElement("canvas");
|
|
109
|
+
output.width = layout.canvasWidth;
|
|
110
|
+
output.height = layout.canvasHeight;
|
|
111
|
+
const context = output.getContext("2d");
|
|
112
|
+
if (!context) {
|
|
113
|
+
throw new Error("Canvas 2D context is unavailable.");
|
|
114
|
+
}
|
|
115
|
+
context.clearRect(0, 0, output.width, output.height);
|
|
116
|
+
context.fillStyle = args.background;
|
|
117
|
+
context.fillRect(layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
|
|
118
|
+
const contentCanvas = await rasterize(args.contentRoot, {
|
|
119
|
+
width: layout.screenWidth,
|
|
120
|
+
height: layout.screenHeight,
|
|
121
|
+
backgroundColor: args.background,
|
|
122
|
+
cropToViewport: true,
|
|
123
|
+
});
|
|
124
|
+
context.drawImage(contentCanvas, layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
|
|
125
|
+
if (args.deviceImageEnabled) {
|
|
126
|
+
if (!args.chromeStage) {
|
|
127
|
+
throw new Error("Device preview chrome is missing.");
|
|
128
|
+
}
|
|
129
|
+
const chromeCanvas = await rasterize(args.chromeStage, {
|
|
130
|
+
width: layout.frameWidth,
|
|
131
|
+
height: layout.frameHeight,
|
|
132
|
+
backgroundColor: null,
|
|
133
|
+
});
|
|
134
|
+
context.drawImage(chromeCanvas, layout.outset, layout.outset, layout.frameWidth, layout.frameHeight);
|
|
135
|
+
return output;
|
|
136
|
+
}
|
|
137
|
+
if (args.statusBarEnabled && args.statusBarLayer) {
|
|
138
|
+
const statusBarCanvas = await rasterize(args.statusBarLayer, {
|
|
139
|
+
width: layout.screenWidth,
|
|
140
|
+
height: layout.screenHeight,
|
|
141
|
+
backgroundColor: null,
|
|
142
|
+
});
|
|
143
|
+
context.drawImage(statusBarCanvas, layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
|
|
144
|
+
}
|
|
145
|
+
return output;
|
|
146
|
+
}
|
|
147
|
+
export function downloadCanvasPng(canvas, filename) {
|
|
148
|
+
return new Promise((resolve, reject) => {
|
|
149
|
+
canvas.toBlob((blob) => {
|
|
150
|
+
if (!blob) {
|
|
151
|
+
reject(new Error("Failed to encode the preview PNG."));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const url = URL.createObjectURL(blob);
|
|
155
|
+
const anchor = document.createElement("a");
|
|
156
|
+
anchor.href = url;
|
|
157
|
+
anchor.download = filename;
|
|
158
|
+
anchor.rel = "noopener";
|
|
159
|
+
document.body.append(anchor);
|
|
160
|
+
anchor.click();
|
|
161
|
+
anchor.remove();
|
|
162
|
+
URL.revokeObjectURL(url);
|
|
163
|
+
resolve();
|
|
164
|
+
}, "image/png");
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=devicePreviewCapture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devicePreviewCapture.js","sourceRoot":"","sources":["../../../src/utils/overlay/devicePreviewCapture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const DEVICE_PREVIEW_FRAME_ATTR = "data-fivepixels-device-preview-frame";
|
|
2
|
+
export declare const DEVICE_PREVIEW_FRAME_NAME = "fivepixels-device-preview-guest";
|
|
3
|
+
export declare const DEVICE_PREVIEW_GUEST_STYLE_ID = "fivepixels-device-preview-guest-style";
|
|
4
|
+
export declare const HTML_DEVICE_PREVIEW_ACTIVE_CLASS = "fivepixels-device-preview-active";
|
|
5
|
+
export declare const DEVICE_PREVIEW_HOST_STYLE_ID = "fivepixels-device-preview-host-style";
|
|
6
|
+
export type DevicePreviewContentMetrics = {
|
|
7
|
+
scrollY: number;
|
|
8
|
+
scrollHeight: number;
|
|
9
|
+
clientHeight: number;
|
|
10
|
+
left: number;
|
|
11
|
+
top: number;
|
|
12
|
+
width: number;
|
|
13
|
+
viewportWidth: number;
|
|
14
|
+
viewportHeight: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function isInsideDevicePreviewFrame(): boolean;
|
|
17
|
+
export declare function getGuestWindow(iframe: HTMLIFrameElement | null): Window | null;
|
|
18
|
+
export declare function getGuestDocument(iframe: HTMLIFrameElement | null): Document | null;
|
|
19
|
+
export declare function getGuestCaptureRoot(iframe: HTMLIFrameElement | null): HTMLElement | null;
|
|
20
|
+
export declare function isGuestDocumentReady(iframe: HTMLIFrameElement | null): boolean;
|
|
21
|
+
export declare function readGuestContentMetrics(iframe: HTMLIFrameElement | null, fallbackWidth: number): DevicePreviewContentMetrics;
|
|
22
|
+
export declare function buildDevicePreviewHostStyle(args: {
|
|
23
|
+
background: string;
|
|
24
|
+
line: string;
|
|
25
|
+
gridSize: number;
|
|
26
|
+
}): string;
|
|
27
|
+
export declare function syncGuestStatusBarStyle(doc: Document | null, statusBarHeight: number): void;
|
|
28
|
+
export declare function clearGuestStatusBarStyle(doc: Document | null): void;
|
|
29
|
+
export declare function readGuestPageHref(iframe: HTMLIFrameElement | null): string | null;
|
|
30
|
+
export declare function closeDevicePreviewAndSyncGuestUrl(iframe: HTMLIFrameElement | null, close: () => void): void;
|
|
31
|
+
//# sourceMappingURL=devicePreviewFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devicePreviewFrame.d.ts","sourceRoot":"","sources":["../../../src/utils/overlay/devicePreviewFrame.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,yCAAyC,CAAC;AAChF,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,6BAA6B,0CAA0C,CAAC;AACrF,eAAO,MAAM,gCAAgC,qCAAqC,CAAC;AACnF,eAAO,MAAM,4BAA4B,yCAAyC,CAAC;AAEnF,MAAM,MAAM,2BAA2B,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,OAAO,CAepD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAU9E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAUlF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAWxF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAG9E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,2BAA2B,CAgB5H;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA+BhH;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,QAyBpF;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,QAE5D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAWjF;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,QAOpG"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { FIVEPIXELS_HOST_ID } from "../../constants/overlayChrome.js";
|
|
2
|
+
export const DEVICE_PREVIEW_FRAME_ATTR = "data-fivepixels-device-preview-frame";
|
|
3
|
+
export const DEVICE_PREVIEW_FRAME_NAME = "fivepixels-device-preview-guest";
|
|
4
|
+
export const DEVICE_PREVIEW_GUEST_STYLE_ID = "fivepixels-device-preview-guest-style";
|
|
5
|
+
export const HTML_DEVICE_PREVIEW_ACTIVE_CLASS = "fivepixels-device-preview-active";
|
|
6
|
+
export const DEVICE_PREVIEW_HOST_STYLE_ID = "fivepixels-device-preview-host-style";
|
|
7
|
+
export function isInsideDevicePreviewFrame() {
|
|
8
|
+
if (typeof window === "undefined") {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
if (window.name === DEVICE_PREVIEW_FRAME_NAME) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
const frame = window.frameElement;
|
|
16
|
+
return frame instanceof HTMLIFrameElement && frame.hasAttribute(DEVICE_PREVIEW_FRAME_ATTR);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return window.name === DEVICE_PREVIEW_FRAME_NAME;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function getGuestWindow(iframe) {
|
|
23
|
+
if (!iframe) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
return iframe.contentWindow;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function getGuestDocument(iframe) {
|
|
34
|
+
if (!iframe) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
return iframe.contentDocument;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function getGuestCaptureRoot(iframe) {
|
|
45
|
+
const doc = getGuestDocument(iframe);
|
|
46
|
+
if (!doc) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (doc.body) {
|
|
50
|
+
return doc.body;
|
|
51
|
+
}
|
|
52
|
+
return doc.documentElement;
|
|
53
|
+
}
|
|
54
|
+
export function isGuestDocumentReady(iframe) {
|
|
55
|
+
const doc = getGuestDocument(iframe);
|
|
56
|
+
return Boolean(doc?.documentElement);
|
|
57
|
+
}
|
|
58
|
+
export function readGuestContentMetrics(iframe, fallbackWidth) {
|
|
59
|
+
const guestWindow = getGuestWindow(iframe);
|
|
60
|
+
const guestDocument = getGuestDocument(iframe);
|
|
61
|
+
const scrolling = guestDocument?.scrollingElement ?? guestDocument?.documentElement;
|
|
62
|
+
const rect = iframe?.getBoundingClientRect();
|
|
63
|
+
return {
|
|
64
|
+
scrollY: Math.round(guestWindow?.scrollY ?? scrolling?.scrollTop ?? 0),
|
|
65
|
+
scrollHeight: Math.round(scrolling?.scrollHeight ?? 0),
|
|
66
|
+
clientHeight: Math.round(guestWindow?.innerHeight ?? scrolling?.clientHeight ?? 0),
|
|
67
|
+
left: Math.round(rect?.left ?? 0),
|
|
68
|
+
top: Math.round(rect?.top ?? 0),
|
|
69
|
+
width: Math.round(rect?.width ?? fallbackWidth),
|
|
70
|
+
viewportWidth: typeof window !== "undefined" && window.innerWidth > 0 ? window.innerWidth : 1280,
|
|
71
|
+
viewportHeight: typeof window !== "undefined" && window.innerHeight > 0 ? window.innerHeight : 800,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function buildDevicePreviewHostStyle(args) {
|
|
75
|
+
const { background, line, gridSize } = args;
|
|
76
|
+
const active = `html.${HTML_DEVICE_PREVIEW_ACTIVE_CLASS}`;
|
|
77
|
+
return `
|
|
78
|
+
${active},
|
|
79
|
+
${active} body {
|
|
80
|
+
height: 100% !important;
|
|
81
|
+
max-height: 100% !important;
|
|
82
|
+
overflow: hidden !important;
|
|
83
|
+
background-color: ${background} !important;
|
|
84
|
+
background-image: linear-gradient(${line} 1px, transparent 1px), linear-gradient(90deg, ${line} 1px, transparent 1px) !important;
|
|
85
|
+
background-size: ${gridSize}px ${gridSize}px !important;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
${active} body > :not(#${FIVEPIXELS_HOST_ID}) {
|
|
89
|
+
display: none !important;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
${active} #${FIVEPIXELS_HOST_ID} {
|
|
93
|
+
position: fixed !important;
|
|
94
|
+
inset: 0 !important;
|
|
95
|
+
width: 100vw !important;
|
|
96
|
+
height: 100vh !important;
|
|
97
|
+
max-width: none !important;
|
|
98
|
+
max-height: none !important;
|
|
99
|
+
margin: 0 !important;
|
|
100
|
+
pointer-events: none !important;
|
|
101
|
+
z-index: 2147483646 !important;
|
|
102
|
+
}
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
export function syncGuestStatusBarStyle(doc, statusBarHeight) {
|
|
106
|
+
if (!doc) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const safeHeight = Math.max(0, Math.round(statusBarHeight));
|
|
110
|
+
if (safeHeight <= 0) {
|
|
111
|
+
doc.getElementById(DEVICE_PREVIEW_GUEST_STYLE_ID)?.remove();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let style = doc.getElementById(DEVICE_PREVIEW_GUEST_STYLE_ID);
|
|
115
|
+
if (!style) {
|
|
116
|
+
style = doc.createElement("style");
|
|
117
|
+
style.id = DEVICE_PREVIEW_GUEST_STYLE_ID;
|
|
118
|
+
doc.documentElement.append(style);
|
|
119
|
+
}
|
|
120
|
+
style.textContent = `
|
|
121
|
+
html {
|
|
122
|
+
padding-top: ${safeHeight}px !important;
|
|
123
|
+
box-sizing: border-box !important;
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
export function clearGuestStatusBarStyle(doc) {
|
|
128
|
+
doc?.getElementById(DEVICE_PREVIEW_GUEST_STYLE_ID)?.remove();
|
|
129
|
+
}
|
|
130
|
+
export function readGuestPageHref(iframe) {
|
|
131
|
+
try {
|
|
132
|
+
const href = iframe?.contentWindow?.location.href;
|
|
133
|
+
if (!href || href.startsWith("about:")) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
return href;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function closeDevicePreviewAndSyncGuestUrl(iframe, close) {
|
|
143
|
+
const guestHref = readGuestPageHref(iframe);
|
|
144
|
+
close();
|
|
145
|
+
if (guestHref && guestHref !== window.location.href) {
|
|
146
|
+
window.location.replace(guestHref);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=devicePreviewFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devicePreviewFrame.js","sourceRoot":"","sources":["../../../src/utils/overlay/devicePreviewFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,CAAC,MAAM,yBAAyB,GAAG,sCAAsC,CAAC;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iCAAiC,CAAC;AAC3E,MAAM,CAAC,MAAM,6BAA6B,GAAG,uCAAuC,CAAC;AACrF,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAAkC,CAAC;AACnF,MAAM,CAAC,MAAM,4BAA4B,GAAG,sCAAsC,CAAC;AAanF,MAAM,UAAU,0BAA0B;IACtC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,OAAO,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,IAAI,KAAK,yBAAyB,CAAC;IACrD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAgC;IAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,OAAO,MAAM,CAAC,aAAa,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAgC;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,OAAO,MAAM,CAAC,eAAe,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAgC;IAChE,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC,eAAe,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAgC,EAAE,aAAqB;IAC3F,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,EAAE,gBAAgB,IAAI,aAAa,EAAE,eAAe,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAE7C,OAAO;QACH,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,IAAI,SAAS,EAAE,SAAS,IAAI,CAAC,CAAC;QACtE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,IAAI,CAAC,CAAC;QACtD,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,IAAI,SAAS,EAAE,YAAY,IAAI,CAAC,CAAC;QAClF,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QACjC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,aAAa,CAAC;QAC/C,aAAa,EAAE,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QAChG,cAAc,EAAE,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG;KACrG,CAAC;AACN,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAA4D;IACpG,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,gCAAgC,EAAE,CAAC;IAE1D,OAAO;EACT,MAAM;EACN,MAAM;;;;sBAIc,UAAU;sCACM,IAAI,kDAAkD,IAAI;qBAC3E,QAAQ,MAAM,QAAQ;;;EAGzC,MAAM,iBAAiB,kBAAkB;;;;EAIzC,MAAM,KAAK,kBAAkB;;;;;;;;;;;CAW9B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAoB,EAAE,eAAuB;IACjF,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5D,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QAClB,GAAG,CAAC,cAAc,CAAC,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC,6BAA6B,CAA4B,CAAC;IACzF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,GAAG,6BAA6B,CAAC;QACzC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,WAAW,GAAG;;iBAEP,UAAU;;;CAG1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAoB;IACzD,GAAG,EAAE,cAAc,CAAC,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAgC;IAC9D,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,MAAgC,EAAE,KAAiB;IACjG,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,EAAE,CAAC;IAER,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { DockEdge, PinRailPlacement } from "../../types/pinnedFeedback.js";
|
|
3
|
+
export type { DockEdge, PinRailPlacement };
|
|
4
|
+
/** Shared left/right edge dock helpers (legacy migration + panel collision). */
|
|
5
|
+
export type EdgeDockPlacement = {
|
|
6
|
+
edge: DockEdge;
|
|
7
|
+
/** 0 = near top, 1 = near bottom within the usable vertical band. */
|
|
8
|
+
offsetRatio: number;
|
|
9
|
+
};
|
|
10
|
+
export declare const DEFAULT_EDGE_DOCK_PLACEMENT: EdgeDockPlacement;
|
|
11
|
+
/** Default free-floating pin window position. */
|
|
12
|
+
export declare const DEFAULT_PIN_RAIL_PLACEMENT: PinRailPlacement;
|
|
13
|
+
export declare function clampOffsetRatio(ratio: number, fallback?: number): number;
|
|
14
|
+
export declare function isDockEdge(value: unknown): value is DockEdge;
|
|
15
|
+
export declare function isEdgeDockPlacement(value: unknown): value is EdgeDockPlacement;
|
|
16
|
+
export declare function isFreePinRailPlacement(value: unknown): value is PinRailPlacement;
|
|
17
|
+
export declare function sanitizeEdgeDockPlacement(value: unknown, fallback?: EdgeDockPlacement): EdgeDockPlacement;
|
|
18
|
+
export declare function edgeTopFromPlacement(placement: EdgeDockPlacement, height: number, viewportHeight?: number): number;
|
|
19
|
+
export declare function sanitizePinRailPlacement(value: unknown): PinRailPlacement;
|
|
20
|
+
/** Map a pointer to the nearest left/right edge (center drops are forced to an edge). */
|
|
21
|
+
export declare function projectPointerToEdgePlacement(clientX: number, clientY: number, options?: {
|
|
22
|
+
height?: number;
|
|
23
|
+
viewportWidth?: number;
|
|
24
|
+
viewportHeight?: number;
|
|
25
|
+
fallback?: EdgeDockPlacement;
|
|
26
|
+
}): EdgeDockPlacement;
|
|
27
|
+
/** Free-floating pin position from a pointer (centered on the pointer). */
|
|
28
|
+
export declare function projectPointerToPinPlacement(clientX: number, clientY: number, options?: {
|
|
29
|
+
width?: number;
|
|
30
|
+
height?: number;
|
|
31
|
+
viewportWidth?: number;
|
|
32
|
+
viewportHeight?: number;
|
|
33
|
+
}): PinRailPlacement;
|
|
34
|
+
/** Push two same-edge docks apart when their vertical ratios collide. */
|
|
35
|
+
export declare function resolvePlacementAwayFromOther(placement: EdgeDockPlacement, other: EdgeDockPlacement | null | undefined, separation?: number): EdgeDockPlacement;
|
|
36
|
+
/**
|
|
37
|
+
* Free pin windows no longer snap away from the panel; keep the stored position.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolvePinPlacementAwayFromPanel(placement: PinRailPlacement): PinRailPlacement;
|
|
40
|
+
type PinStyleOptions = {
|
|
41
|
+
isDragging?: boolean;
|
|
42
|
+
dragLeft?: number | null;
|
|
43
|
+
dragTop?: number | null;
|
|
44
|
+
width: number;
|
|
45
|
+
};
|
|
46
|
+
export declare function pinPlacementToStyle(placement: PinRailPlacement, options: PinStyleOptions): CSSProperties;
|
|
47
|
+
//# sourceMappingURL=edgeDock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edgeDock.d.ts","sourceRoot":"","sources":["../../../src/utils/overlay/edgeDock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG5E,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAE3C,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,iBAGzC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,0BAA0B,EAAE,gBAGxC,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAA0C,GAAG,MAAM,CAM1G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAQ9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAQhF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,iBAA+C,GAAG,iBAAiB,CAStI;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlH;AAWD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAazE;AAED,yFAAyF;AACzF,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAC7G,iBAAiB,CAanB;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/F,gBAAgB,CASlB;AAED,yEAAyE;AACzE,wBAAgB,6BAA6B,CACzC,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC3C,UAAU,SAA2B,GACtC,iBAAiB,CA2BnB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,CAE9F;AAED,KAAK,eAAe,GAAG;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,CAuBxG"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { OVERLAY_EDGE_MARGIN, PIN_RAIL_BUBBLE_SIZE, PIN_RAIL_EXPANDED_WIDTH } from "../../constants/overlayChrome.js";
|
|
2
|
+
export const DEFAULT_EDGE_DOCK_PLACEMENT = {
|
|
3
|
+
edge: "right",
|
|
4
|
+
offsetRatio: 0.2,
|
|
5
|
+
};
|
|
6
|
+
/** Default free-floating pin window position. */
|
|
7
|
+
export const DEFAULT_PIN_RAIL_PLACEMENT = {
|
|
8
|
+
left: OVERLAY_EDGE_MARGIN,
|
|
9
|
+
top: OVERLAY_EDGE_MARGIN,
|
|
10
|
+
};
|
|
11
|
+
const MIN_SAME_EDGE_SEPARATION = 0.22;
|
|
12
|
+
export function clampOffsetRatio(ratio, fallback = DEFAULT_EDGE_DOCK_PLACEMENT.offsetRatio) {
|
|
13
|
+
if (!Number.isFinite(ratio)) {
|
|
14
|
+
return fallback;
|
|
15
|
+
}
|
|
16
|
+
return Math.min(1, Math.max(0, ratio));
|
|
17
|
+
}
|
|
18
|
+
export function isDockEdge(value) {
|
|
19
|
+
return value === "left" || value === "right";
|
|
20
|
+
}
|
|
21
|
+
export function isEdgeDockPlacement(value) {
|
|
22
|
+
if (!value || typeof value !== "object") {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const placement = value;
|
|
26
|
+
return isDockEdge(placement.edge) && typeof placement.offsetRatio === "number" && Number.isFinite(placement.offsetRatio);
|
|
27
|
+
}
|
|
28
|
+
export function isFreePinRailPlacement(value) {
|
|
29
|
+
if (!value || typeof value !== "object") {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const placement = value;
|
|
33
|
+
return typeof placement.left === "number" && Number.isFinite(placement.left) && typeof placement.top === "number" && Number.isFinite(placement.top);
|
|
34
|
+
}
|
|
35
|
+
export function sanitizeEdgeDockPlacement(value, fallback = DEFAULT_EDGE_DOCK_PLACEMENT) {
|
|
36
|
+
if (!isEdgeDockPlacement(value)) {
|
|
37
|
+
return { ...fallback };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
edge: value.edge,
|
|
41
|
+
offsetRatio: clampOffsetRatio(value.offsetRatio, fallback.offsetRatio),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function edgeTopFromPlacement(placement, height, viewportHeight) {
|
|
45
|
+
const vh = viewportHeight ?? (typeof window !== "undefined" ? window.innerHeight : 720);
|
|
46
|
+
const usable = Math.max(0, vh - OVERLAY_EDGE_MARGIN * 2 - height);
|
|
47
|
+
return OVERLAY_EDGE_MARGIN + usable * clampOffsetRatio(placement.offsetRatio);
|
|
48
|
+
}
|
|
49
|
+
function edgePlacementToFreePosition(placement) {
|
|
50
|
+
const viewportWidth = typeof window !== "undefined" ? window.innerWidth : 1280;
|
|
51
|
+
const top = edgeTopFromPlacement(placement, PIN_RAIL_BUBBLE_SIZE);
|
|
52
|
+
const left = placement.edge === "left" ? OVERLAY_EDGE_MARGIN : Math.max(OVERLAY_EDGE_MARGIN, viewportWidth - PIN_RAIL_EXPANDED_WIDTH - OVERLAY_EDGE_MARGIN);
|
|
53
|
+
return { left, top };
|
|
54
|
+
}
|
|
55
|
+
export function sanitizePinRailPlacement(value) {
|
|
56
|
+
if (isFreePinRailPlacement(value)) {
|
|
57
|
+
return {
|
|
58
|
+
left: value.left,
|
|
59
|
+
top: Math.max(0, value.top),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (isEdgeDockPlacement(value)) {
|
|
63
|
+
return edgePlacementToFreePosition(sanitizeEdgeDockPlacement(value));
|
|
64
|
+
}
|
|
65
|
+
return { ...DEFAULT_PIN_RAIL_PLACEMENT };
|
|
66
|
+
}
|
|
67
|
+
/** Map a pointer to the nearest left/right edge (center drops are forced to an edge). */
|
|
68
|
+
export function projectPointerToEdgePlacement(clientX, clientY, options) {
|
|
69
|
+
const fallback = options?.fallback ?? DEFAULT_EDGE_DOCK_PLACEMENT;
|
|
70
|
+
const viewportWidth = options?.viewportWidth ?? (typeof window !== "undefined" ? window.innerWidth : 1280);
|
|
71
|
+
const viewportHeight = options?.viewportHeight ?? (typeof window !== "undefined" ? window.innerHeight : 720);
|
|
72
|
+
const height = Math.max(1, options?.height ?? PIN_RAIL_BUBBLE_SIZE);
|
|
73
|
+
const edge = clientX < viewportWidth / 2 ? "left" : "right";
|
|
74
|
+
const usable = Math.max(1, viewportHeight - OVERLAY_EDGE_MARGIN * 2 - height);
|
|
75
|
+
const top = Math.min(Math.max(clientY - height / 2, OVERLAY_EDGE_MARGIN), OVERLAY_EDGE_MARGIN + usable);
|
|
76
|
+
return {
|
|
77
|
+
edge,
|
|
78
|
+
offsetRatio: clampOffsetRatio((top - OVERLAY_EDGE_MARGIN) / usable, fallback.offsetRatio),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Free-floating pin position from a pointer (centered on the pointer). */
|
|
82
|
+
export function projectPointerToPinPlacement(clientX, clientY, options) {
|
|
83
|
+
const width = Math.max(1, options?.width ?? PIN_RAIL_EXPANDED_WIDTH);
|
|
84
|
+
const height = Math.max(1, options?.height ?? PIN_RAIL_BUBBLE_SIZE);
|
|
85
|
+
const viewportWidth = options?.viewportWidth ?? (typeof window !== "undefined" ? window.innerWidth : 1280);
|
|
86
|
+
const viewportHeight = options?.viewportHeight ?? (typeof window !== "undefined" ? window.innerHeight : 720);
|
|
87
|
+
const left = Math.min(Math.max(clientX - width / 2, OVERLAY_EDGE_MARGIN - width + 40), viewportWidth - 40);
|
|
88
|
+
const top = Math.min(Math.max(clientY - height / 2, OVERLAY_EDGE_MARGIN), Math.max(OVERLAY_EDGE_MARGIN, viewportHeight - 40));
|
|
89
|
+
return { left, top };
|
|
90
|
+
}
|
|
91
|
+
/** Push two same-edge docks apart when their vertical ratios collide. */
|
|
92
|
+
export function resolvePlacementAwayFromOther(placement, other, separation = MIN_SAME_EDGE_SEPARATION) {
|
|
93
|
+
const self = sanitizeEdgeDockPlacement(placement);
|
|
94
|
+
if (!other || other.edge !== self.edge) {
|
|
95
|
+
return self;
|
|
96
|
+
}
|
|
97
|
+
const otherRatio = clampOffsetRatio(other.offsetRatio);
|
|
98
|
+
let offsetRatio = clampOffsetRatio(self.offsetRatio);
|
|
99
|
+
if (Math.abs(offsetRatio - otherRatio) >= separation) {
|
|
100
|
+
return self;
|
|
101
|
+
}
|
|
102
|
+
if (offsetRatio <= otherRatio) {
|
|
103
|
+
offsetRatio = Math.max(0, otherRatio - separation);
|
|
104
|
+
if (Math.abs(offsetRatio - otherRatio) < separation) {
|
|
105
|
+
offsetRatio = Math.min(1, otherRatio + separation);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
offsetRatio = Math.min(1, otherRatio + separation);
|
|
110
|
+
if (Math.abs(offsetRatio - otherRatio) < separation) {
|
|
111
|
+
offsetRatio = Math.max(0, otherRatio - separation);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { edge: self.edge, offsetRatio };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Free pin windows no longer snap away from the panel; keep the stored position.
|
|
118
|
+
*/
|
|
119
|
+
export function resolvePinPlacementAwayFromPanel(placement) {
|
|
120
|
+
return sanitizePinRailPlacement(placement);
|
|
121
|
+
}
|
|
122
|
+
export function pinPlacementToStyle(placement, options) {
|
|
123
|
+
const { isDragging, dragLeft, dragTop, width } = options;
|
|
124
|
+
const resolved = sanitizePinRailPlacement(placement);
|
|
125
|
+
if (isDragging && typeof dragLeft === "number" && typeof dragTop === "number") {
|
|
126
|
+
return {
|
|
127
|
+
position: "fixed",
|
|
128
|
+
top: dragTop,
|
|
129
|
+
left: dragLeft,
|
|
130
|
+
right: "auto",
|
|
131
|
+
bottom: "auto",
|
|
132
|
+
width,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
position: "fixed",
|
|
137
|
+
top: resolved.top,
|
|
138
|
+
left: resolved.left,
|
|
139
|
+
right: "auto",
|
|
140
|
+
bottom: "auto",
|
|
141
|
+
width,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=edgeDock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edgeDock.js","sourceRoot":"","sources":["../../../src/utils/overlay/edgeDock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAWlH,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC1D,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,GAAG;CACnB,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IACxD,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,mBAAmB;CAC3B,CAAC;AAEF,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,QAAQ,GAAG,2BAA2B,CAAC,WAAW;IAC9F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,KAAmC,CAAC;IAEtD,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,KAAkC,CAAC;IAErD,OAAO,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACxJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,WAA8B,2BAA2B;IAC/G,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACH,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;KACzE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAA4B,EAAE,MAAc,EAAE,cAAuB;IACtG,MAAM,EAAE,GAAG,cAAc,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAElE,OAAO,mBAAmB,GAAG,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,2BAA2B,CAAC,SAA4B;IAC7D,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAClE,MAAM,IAAI,GACN,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,aAAa,GAAG,uBAAuB,GAAG,mBAAmB,CAAC,CAAC;IAEnJ,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACnD,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACH,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;SAC9B,CAAC;IACN,CAAC;IAED,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,2BAA2B,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,GAAG,0BAA0B,EAAE,CAAC;AAC7C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,6BAA6B,CACzC,OAAe,EACf,OAAe,EACf,OAA4G;IAE5G,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,2BAA2B,CAAC;IAClE,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3G,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB,CAAC,CAAC;IACpE,MAAM,IAAI,GAAa,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,CAAC;IAExG,OAAO;QACH,IAAI;QACJ,WAAW,EAAE,gBAAgB,CAAC,CAAC,GAAG,GAAG,mBAAmB,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC;KAC5F,CAAC;AACN,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,4BAA4B,CACxC,OAAe,EACf,OAAe,EACf,OAA8F;IAE9F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,uBAAuB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3G,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,mBAAmB,GAAG,KAAK,GAAG,EAAE,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;IAC3G,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC;IAE9H,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,6BAA6B,CACzC,SAA4B,EAC5B,KAA2C,EAC3C,UAAU,GAAG,wBAAwB;IAErC,MAAM,IAAI,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;QAC5B,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,UAAU,EAAE,CAAC;YAClD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,UAAU,EAAE,CAAC;YAClD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAAC,SAA2B;IACxE,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AASD,MAAM,UAAU,mBAAmB,CAAC,SAA2B,EAAE,OAAwB;IACrF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,UAAU,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO;YACH,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,KAAK;SACR,CAAC;IACN,CAAC;IAED,OAAO;QACH,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,KAAK;KACR,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Always above floating pin/device windows so the control panel is never covered. */
|
|
2
|
+
export declare const PANEL_LAYER_Z_INDEX = 1001000;
|
|
3
|
+
/** Bump global layer so the latest focused floating window sits above peers. */
|
|
4
|
+
export declare function claimFloatingWindowZIndex(base?: number): number;
|
|
5
|
+
export declare function getFloatingWindowZBase(): number;
|
|
6
|
+
//# sourceMappingURL=floatingWindowStack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floatingWindowStack.d.ts","sourceRoot":"","sources":["../../../src/utils/overlay/floatingWindowStack.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,UAAY,CAAC;AAI7C,gFAAgF;AAChF,wBAAgB,yBAAyB,CAAC,IAAI,SAAyB,GAAG,MAAM,CAQ/E;AAED,wBAAgB,sBAAsB,WAErC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const FLOATING_WINDOW_Z_BASE = 1000002;
|
|
2
|
+
const FLOATING_WINDOW_Z_CEILING = 1000900;
|
|
3
|
+
/** Always above floating pin/device windows so the control panel is never covered. */
|
|
4
|
+
export const PANEL_LAYER_Z_INDEX = 1001000;
|
|
5
|
+
let nextFloatingWindowZIndex = FLOATING_WINDOW_Z_BASE;
|
|
6
|
+
/** Bump global layer so the latest focused floating window sits above peers. */
|
|
7
|
+
export function claimFloatingWindowZIndex(base = FLOATING_WINDOW_Z_BASE) {
|
|
8
|
+
nextFloatingWindowZIndex += 1;
|
|
9
|
+
if (nextFloatingWindowZIndex > FLOATING_WINDOW_Z_CEILING) {
|
|
10
|
+
nextFloatingWindowZIndex = base + 1;
|
|
11
|
+
}
|
|
12
|
+
return Math.max(base, nextFloatingWindowZIndex);
|
|
13
|
+
}
|
|
14
|
+
export function getFloatingWindowZBase() {
|
|
15
|
+
return FLOATING_WINDOW_Z_BASE;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=floatingWindowStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floatingWindowStack.js","sourceRoot":"","sources":["../../../src/utils/overlay/floatingWindowStack.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,OAAS,CAAC;AACzC,MAAM,yBAAyB,GAAG,OAAS,CAAC;AAE5C,sFAAsF;AACtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAS,CAAC;AAE7C,IAAI,wBAAwB,GAAG,sBAAsB,CAAC;AAEtD,gFAAgF;AAChF,MAAM,UAAU,yBAAyB,CAAC,IAAI,GAAG,sBAAsB;IACnE,wBAAwB,IAAI,CAAC,CAAC;IAE9B,IAAI,wBAAwB,GAAG,yBAAyB,EAAE,CAAC;QACvD,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB;IAClC,OAAO,sBAAsB,CAAC;AAClC,CAAC"}
|