@fivepixels-js/react 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/THIRD_PARTY_NOTICES.md +29 -0
  2. package/dist/components/icons/Icons.d.ts +3 -0
  3. package/dist/components/icons/Icons.d.ts.map +1 -1
  4. package/dist/components/icons/Icons.js +4 -0
  5. package/dist/components/icons/Icons.js.map +1 -1
  6. package/dist/components/overlay/DeviceFrameArtwork.d.ts +10 -0
  7. package/dist/components/overlay/DeviceFrameArtwork.d.ts.map +1 -0
  8. package/dist/components/overlay/DeviceFrameArtwork.js +112 -0
  9. package/dist/components/overlay/DeviceFrameArtwork.js.map +1 -0
  10. package/dist/components/overlay/DevicePreviewChrome.d.ts +2 -0
  11. package/dist/components/overlay/DevicePreviewChrome.d.ts.map +1 -0
  12. package/dist/components/overlay/DevicePreviewChrome.js +523 -0
  13. package/dist/components/overlay/DevicePreviewChrome.js.map +1 -0
  14. package/dist/components/overlay/DevicePreviewQrCard.d.ts +18 -0
  15. package/dist/components/overlay/DevicePreviewQrCard.d.ts.map +1 -0
  16. package/dist/components/overlay/DevicePreviewQrCard.js +94 -0
  17. package/dist/components/overlay/DevicePreviewQrCard.js.map +1 -0
  18. package/dist/components/overlay/DeviceStatusBar.d.ts +13 -0
  19. package/dist/components/overlay/DeviceStatusBar.d.ts.map +1 -0
  20. package/dist/components/overlay/DeviceStatusBar.js +168 -0
  21. package/dist/components/overlay/DeviceStatusBar.js.map +1 -0
  22. package/dist/components/overlay/FloatingPinRail.d.ts.map +1 -1
  23. package/dist/components/overlay/FloatingPinRail.js +43 -23
  24. package/dist/components/overlay/FloatingPinRail.js.map +1 -1
  25. package/dist/components/panel/ReportControlPanel.d.ts.map +1 -1
  26. package/dist/components/panel/ReportControlPanel.js +7 -6
  27. package/dist/components/panel/ReportControlPanel.js.map +1 -1
  28. package/dist/components/report/ReportView.d.ts.map +1 -1
  29. package/dist/components/report/ReportView.js +13 -3
  30. package/dist/components/report/ReportView.js.map +1 -1
  31. package/dist/components/ui/FloatingWindow.d.ts +46 -0
  32. package/dist/components/ui/FloatingWindow.d.ts.map +1 -0
  33. package/dist/components/ui/FloatingWindow.js +183 -0
  34. package/dist/components/ui/FloatingWindow.js.map +1 -0
  35. package/dist/constants/devicePreview.d.ts +137 -0
  36. package/dist/constants/devicePreview.d.ts.map +1 -0
  37. package/dist/constants/devicePreview.js +501 -0
  38. package/dist/constants/devicePreview.js.map +1 -0
  39. package/dist/constants/motionClasses.d.ts +2 -0
  40. package/dist/constants/motionClasses.d.ts.map +1 -1
  41. package/dist/constants/motionClasses.js +2 -0
  42. package/dist/constants/motionClasses.js.map +1 -1
  43. package/dist/constants/overlayChrome.d.ts +13 -0
  44. package/dist/constants/overlayChrome.d.ts.map +1 -0
  45. package/dist/constants/overlayChrome.js +13 -0
  46. package/dist/constants/overlayChrome.js.map +1 -0
  47. package/dist/hooks/report/assembleReportContextValue.d.ts +15 -0
  48. package/dist/hooks/report/assembleReportContextValue.d.ts.map +1 -1
  49. package/dist/hooks/report/assembleReportContextValue.js +15 -0
  50. package/dist/hooks/report/assembleReportContextValue.js.map +1 -1
  51. package/dist/hooks/report/useReportPanelShell.d.ts +15 -0
  52. package/dist/hooks/report/useReportPanelShell.d.ts.map +1 -1
  53. package/dist/hooks/report/useReportPanelShell.js +18 -1
  54. package/dist/hooks/report/useReportPanelShell.js.map +1 -1
  55. package/dist/hooks/report/useReportState.d.ts +15 -0
  56. package/dist/hooks/report/useReportState.d.ts.map +1 -1
  57. package/dist/hooks/useDevicePreviewPreference.d.ts +17 -0
  58. package/dist/hooks/useDevicePreviewPreference.d.ts.map +1 -0
  59. package/dist/hooks/useDevicePreviewPreference.js +123 -0
  60. package/dist/hooks/useDevicePreviewPreference.js.map +1 -0
  61. package/dist/hooks/useOverlayChrome.d.ts +16 -0
  62. package/dist/hooks/useOverlayChrome.d.ts.map +1 -0
  63. package/dist/hooks/useOverlayChrome.js +131 -0
  64. package/dist/hooks/useOverlayChrome.js.map +1 -0
  65. package/dist/hooks/usePanelDock.d.ts +2 -0
  66. package/dist/hooks/usePanelDock.d.ts.map +1 -1
  67. package/dist/hooks/usePanelDock.js +22 -0
  68. package/dist/hooks/usePanelDock.js.map +1 -1
  69. package/dist/hooks/usePinnedFeedbackPreference.d.ts +3 -1
  70. package/dist/hooks/usePinnedFeedbackPreference.d.ts.map +1 -1
  71. package/dist/hooks/usePinnedFeedbackPreference.js +11 -1
  72. package/dist/hooks/usePinnedFeedbackPreference.js.map +1 -1
  73. package/dist/i18n/en.d.ts.map +1 -1
  74. package/dist/i18n/en.js +41 -0
  75. package/dist/i18n/en.js.map +1 -1
  76. package/dist/i18n/ko.d.ts.map +1 -1
  77. package/dist/i18n/ko.js +41 -0
  78. package/dist/i18n/ko.js.map +1 -1
  79. package/dist/i18n/types.d.ts +41 -0
  80. package/dist/i18n/types.d.ts.map +1 -1
  81. package/dist/providers/reportContext.d.ts +76 -1
  82. package/dist/providers/reportContext.d.ts.map +1 -1
  83. package/dist/providers/reportContextPartitions.d.ts +1 -1
  84. package/dist/providers/reportContextPartitions.d.ts.map +1 -1
  85. package/dist/providers/reportContextPartitions.js +15 -0
  86. package/dist/providers/reportContextPartitions.js.map +1 -1
  87. package/dist/styles/reportStylesheet.d.ts +1 -1
  88. package/dist/styles/reportStylesheet.d.ts.map +1 -1
  89. package/dist/styles/reportStylesheet.js +1 -1
  90. package/dist/styles/reportStylesheet.js.map +1 -1
  91. package/dist/types/pinnedFeedback.d.ts +7 -0
  92. package/dist/types/pinnedFeedback.d.ts.map +1 -1
  93. package/dist/types/pinnedFeedback.js.map +1 -1
  94. package/dist/utils/overlay/devicePreviewCapture.d.ts +51 -0
  95. package/dist/utils/overlay/devicePreviewCapture.d.ts.map +1 -0
  96. package/dist/utils/overlay/devicePreviewCapture.js +156 -0
  97. package/dist/utils/overlay/devicePreviewCapture.js.map +1 -0
  98. package/dist/utils/overlay/edgeDock.d.ts +47 -0
  99. package/dist/utils/overlay/edgeDock.d.ts.map +1 -0
  100. package/dist/utils/overlay/edgeDock.js +144 -0
  101. package/dist/utils/overlay/edgeDock.js.map +1 -0
  102. package/dist/utils/overlay/floatingWindowStack.d.ts +6 -0
  103. package/dist/utils/overlay/floatingWindowStack.d.ts.map +1 -0
  104. package/dist/utils/overlay/floatingWindowStack.js +17 -0
  105. package/dist/utils/overlay/floatingWindowStack.js.map +1 -0
  106. package/dist/utils/pinned/pinnedFeedback.d.ts.map +1 -1
  107. package/dist/utils/pinned/pinnedFeedback.js +5 -2
  108. package/dist/utils/pinned/pinnedFeedback.js.map +1 -1
  109. package/dist/utils/qr/devicePreviewShareUrl.d.ts +13 -0
  110. package/dist/utils/qr/devicePreviewShareUrl.d.ts.map +1 -0
  111. package/dist/utils/qr/devicePreviewShareUrl.js +53 -0
  112. package/dist/utils/qr/devicePreviewShareUrl.js.map +1 -0
  113. package/dist/utils/qr/encodeQrSvg.d.ts +13 -0
  114. package/dist/utils/qr/encodeQrSvg.d.ts.map +1 -0
  115. package/dist/utils/qr/encodeQrSvg.js +31 -0
  116. package/dist/utils/qr/encodeQrSvg.js.map +1 -0
  117. package/dist/vendor/nayuki/qrcodegen.d.ts +94 -0
  118. package/dist/vendor/nayuki/qrcodegen.d.ts.map +1 -0
  119. package/dist/vendor/nayuki/qrcodegen.js +836 -0
  120. package/dist/vendor/nayuki/qrcodegen.js.map +1 -0
  121. package/package.json +7 -2
@@ -0,0 +1,156 @@
1
+ export const DEVICE_PREVIEW_BUTTON_OUTSET = 3;
2
+ function sanitizeFilenamePart(value) {
3
+ return value.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "device";
4
+ }
5
+ function formatCaptureStamp(now) {
6
+ const year = String(now.getFullYear());
7
+ const month = String(now.getMonth() + 1).padStart(2, "0");
8
+ const day = String(now.getDate()).padStart(2, "0");
9
+ const hours = String(now.getHours()).padStart(2, "0");
10
+ const minutes = String(now.getMinutes()).padStart(2, "0");
11
+ const seconds = String(now.getSeconds()).padStart(2, "0");
12
+ return `${year}${month}${day}-${hours}${minutes}${seconds}`;
13
+ }
14
+ export function getDevicePreviewCaptureLayout(args) {
15
+ const screenWidth = Math.max(1, Math.round(args.screenWidth));
16
+ const screenHeight = Math.max(1, Math.round(args.screenHeight));
17
+ const bezel = args.deviceImageEnabled
18
+ ? {
19
+ top: Math.max(0, Math.round(args.bezel.top)),
20
+ right: Math.max(0, Math.round(args.bezel.right)),
21
+ bottom: Math.max(0, Math.round(args.bezel.bottom)),
22
+ left: Math.max(0, Math.round(args.bezel.left)),
23
+ }
24
+ : { top: 0, right: 0, bottom: 0, left: 0 };
25
+ const frameWidth = screenWidth + bezel.left + bezel.right;
26
+ const frameHeight = screenHeight + bezel.top + bezel.bottom;
27
+ const outset = args.deviceImageEnabled ? DEVICE_PREVIEW_BUTTON_OUTSET : 0;
28
+ return {
29
+ canvasWidth: frameWidth + outset * 2,
30
+ canvasHeight: frameHeight + outset * 2,
31
+ frameWidth,
32
+ frameHeight,
33
+ screenX: outset + bezel.left,
34
+ screenY: outset + bezel.top,
35
+ screenWidth,
36
+ screenHeight,
37
+ outset,
38
+ };
39
+ }
40
+ export function buildDevicePreviewCaptureFilename(args) {
41
+ const deviceId = sanitizeFilenamePart(args.deviceId);
42
+ const width = Math.max(1, Math.round(args.width));
43
+ const height = Math.max(1, Math.round(args.height));
44
+ const stamp = formatCaptureStamp(args.now ?? new Date());
45
+ return `fivepixels-preview-${deviceId}-${width}x${height}-${stamp}.png`;
46
+ }
47
+ function cropCanvas(source, sx, sy, width, height) {
48
+ const output = document.createElement("canvas");
49
+ output.width = width;
50
+ output.height = height;
51
+ const context = output.getContext("2d");
52
+ if (!context) {
53
+ throw new Error("Canvas 2D context is unavailable.");
54
+ }
55
+ const safeX = Math.max(0, Math.min(Math.round(sx), Math.max(0, source.width - width)));
56
+ const safeY = Math.max(0, Math.min(Math.round(sy), Math.max(0, source.height - height)));
57
+ context.drawImage(source, safeX, safeY, width, height, 0, 0, width, height);
58
+ return output;
59
+ }
60
+ export async function defaultRasterizeElement(element, options) {
61
+ const { toCanvas } = await import("html-to-image");
62
+ const captureHeight = options.cropToViewport ? Math.max(options.height, Math.round(element.scrollHeight) || options.height) : options.height;
63
+ const canvas = await toCanvas(element, {
64
+ width: options.width,
65
+ height: captureHeight,
66
+ pixelRatio: 1,
67
+ skipAutoScale: true,
68
+ backgroundColor: options.backgroundColor ?? undefined,
69
+ skipFonts: true,
70
+ style: {
71
+ transform: "none",
72
+ transformOrigin: "top left",
73
+ margin: "0px",
74
+ marginLeft: "0px",
75
+ marginTop: "0px",
76
+ marginRight: "0px",
77
+ marginBottom: "0px",
78
+ left: "0px",
79
+ top: "0px",
80
+ right: "auto",
81
+ bottom: "auto",
82
+ position: "relative",
83
+ overflow: options.cropToViewport ? "visible" : "hidden",
84
+ width: `${options.width}px`,
85
+ height: `${captureHeight}px`,
86
+ },
87
+ filter: (node) => !(node instanceof Element) || !node.hasAttribute("data-fivepixels-skip-capture"),
88
+ });
89
+ if (!options.cropToViewport || (canvas.width === options.width && canvas.height === options.height && element.scrollTop <= 0 && element.scrollLeft <= 0)) {
90
+ return canvas;
91
+ }
92
+ return cropCanvas(canvas, element.scrollLeft, element.scrollTop, options.width, options.height);
93
+ }
94
+ export async function captureDevicePreview(args) {
95
+ const rasterize = args.rasterize ?? defaultRasterizeElement;
96
+ const { layout } = args;
97
+ const output = document.createElement("canvas");
98
+ output.width = layout.canvasWidth;
99
+ output.height = layout.canvasHeight;
100
+ const context = output.getContext("2d");
101
+ if (!context) {
102
+ throw new Error("Canvas 2D context is unavailable.");
103
+ }
104
+ context.clearRect(0, 0, output.width, output.height);
105
+ context.fillStyle = args.background;
106
+ context.fillRect(layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
107
+ const contentCanvas = await rasterize(args.contentRoot, {
108
+ width: layout.screenWidth,
109
+ height: layout.screenHeight,
110
+ backgroundColor: args.background,
111
+ cropToViewport: true,
112
+ });
113
+ context.drawImage(contentCanvas, layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
114
+ if (args.deviceImageEnabled) {
115
+ if (!args.chromeStage) {
116
+ throw new Error("Device preview chrome is missing.");
117
+ }
118
+ const chromeCanvas = await rasterize(args.chromeStage, {
119
+ width: layout.frameWidth,
120
+ height: layout.frameHeight,
121
+ backgroundColor: null,
122
+ });
123
+ context.drawImage(chromeCanvas, layout.outset, layout.outset, layout.frameWidth, layout.frameHeight);
124
+ return output;
125
+ }
126
+ if (args.statusBarEnabled && args.statusBarLayer) {
127
+ const statusBarCanvas = await rasterize(args.statusBarLayer, {
128
+ width: layout.screenWidth,
129
+ height: layout.screenHeight,
130
+ backgroundColor: null,
131
+ });
132
+ context.drawImage(statusBarCanvas, layout.screenX, layout.screenY, layout.screenWidth, layout.screenHeight);
133
+ }
134
+ return output;
135
+ }
136
+ export function downloadCanvasPng(canvas, filename) {
137
+ return new Promise((resolve, reject) => {
138
+ canvas.toBlob((blob) => {
139
+ if (!blob) {
140
+ reject(new Error("Failed to encode the preview PNG."));
141
+ return;
142
+ }
143
+ const url = URL.createObjectURL(blob);
144
+ const anchor = document.createElement("a");
145
+ anchor.href = url;
146
+ anchor.download = filename;
147
+ anchor.rel = "noopener";
148
+ document.body.append(anchor);
149
+ anchor.click();
150
+ anchor.remove();
151
+ URL.revokeObjectURL(url);
152
+ resolve();
153
+ }, "image/png");
154
+ });
155
+ }
156
+ //# 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,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":"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"}
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pinnedFeedback.d.ts","sourceRoot":"","sources":["../../../src/utils/pinned/pinnedFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAQxH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,UAElF;AAiCD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAczF;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,0BAA0B,CAUrG;AAED,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACN,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,GACF,kBAAkB,CAiBpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,MAAM,WAE7E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAQxH;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAErF"}
1
+ {"version":3,"file":"pinnedFeedback.d.ts","sourceRoot":"","sources":["../../../src/utils/pinned/pinnedFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAUxH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,UAElF;AAiCD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAezF;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,0BAA0B,CAUrG;AAED,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACN,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,GACF,kBAAkB,CAiBpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,MAAM,WAE7E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAQxH;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAErF"}
@@ -1,8 +1,10 @@
1
1
  import { MAX_PINNED_FEEDBACK } from "../../types/pinnedFeedback.js";
2
2
  import { getCaseById, getIssueSummary } from "../../utils/report/reportCases.js";
3
+ import { DEFAULT_PIN_RAIL_PLACEMENT, sanitizePinRailPlacement } from "../../utils/overlay/edgeDock.js";
3
4
  const EMPTY_PREFERENCE = {
4
5
  items: [],
5
- railCollapsed: false,
6
+ railCollapsed: true,
7
+ placement: { ...DEFAULT_PIN_RAIL_PLACEMENT },
6
8
  };
7
9
  export function getPinnedFeedbackStorageKey(projectId, environment) {
8
10
  return ["fivepixels:pinned-feedback:v1", projectId, environment].filter(Boolean).join(":");
@@ -40,7 +42,8 @@ export function sanitizePinnedFeedbackPreference(value) {
40
42
  : [];
41
43
  return {
42
44
  items,
43
- railCollapsed: Boolean(raw.railCollapsed),
45
+ railCollapsed: raw.railCollapsed === undefined ? true : Boolean(raw.railCollapsed),
46
+ placement: sanitizePinRailPlacement(raw.placement),
44
47
  };
45
48
  }
46
49
  export function getPinnedFeedbackCaseProgress(items) {
@@ -1 +1 @@
1
- {"version":3,"file":"pinnedFeedback.js","sourceRoot":"","sources":["../../../src/utils/pinned/pinnedFeedback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pinnedFeedback.js","sourceRoot":"","sources":["../../../src/utils/pinned/pinnedFeedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function isLoopbackHostname(hostname: string): boolean;
2
+ export declare function isLoopbackPageUrl(href?: string): boolean;
3
+ export declare function getCurrentPageShareUrl(href?: string): string;
4
+ /** Returns a normalized absolute URL, or null if the input is empty / invalid. */
5
+ export declare function normalizeShareUrlInput(raw: string): string | null;
6
+ export declare function resolveDevicePreviewQrUrl(args: {
7
+ pageHref?: string;
8
+ manualUrl?: string;
9
+ }): {
10
+ url: string | null;
11
+ needsManualUrl: boolean;
12
+ };
13
+ //# sourceMappingURL=devicePreviewShareUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devicePreviewShareUrl.d.ts","sourceRoot":"","sources":["../../../src/utils/qr/devicePreviewShareUrl.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,SAA4D,GAAG,OAAO,CAM3G;AAED,wBAAgB,sBAAsB,CAAC,IAAI,SAA4D,GAAG,MAAM,CAM/G;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBjE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAelD"}
@@ -0,0 +1,53 @@
1
+ const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
2
+ export function isLoopbackHostname(hostname) {
3
+ return LOOPBACK_HOSTS.has(hostname.trim().toLowerCase());
4
+ }
5
+ export function isLoopbackPageUrl(href = typeof window !== "undefined" ? window.location.href : "") {
6
+ try {
7
+ return isLoopbackHostname(new URL(href).hostname);
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ export function getCurrentPageShareUrl(href = typeof window !== "undefined" ? window.location.href : "") {
14
+ try {
15
+ return new URL(href).toString();
16
+ }
17
+ catch {
18
+ return href;
19
+ }
20
+ }
21
+ /** Returns a normalized absolute URL, or null if the input is empty / invalid. */
22
+ export function normalizeShareUrlInput(raw) {
23
+ const trimmed = raw.trim();
24
+ if (!trimmed) {
25
+ return null;
26
+ }
27
+ try {
28
+ const withProtocol = /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(trimmed) ? trimmed : `http://${trimmed}`;
29
+ const url = new URL(withProtocol);
30
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
31
+ return null;
32
+ }
33
+ return url.toString();
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ export function resolveDevicePreviewQrUrl(args) {
40
+ const pageHref = args.pageHref ?? (typeof window !== "undefined" ? window.location.href : "");
41
+ const needsManualUrl = isLoopbackPageUrl(pageHref);
42
+ if (!needsManualUrl) {
43
+ return {
44
+ url: getCurrentPageShareUrl(pageHref),
45
+ needsManualUrl: false,
46
+ };
47
+ }
48
+ return {
49
+ url: normalizeShareUrlInput(args.manualUrl ?? ""),
50
+ needsManualUrl: true,
51
+ };
52
+ }
53
+ //# sourceMappingURL=devicePreviewShareUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devicePreviewShareUrl.js","sourceRoot":"","sources":["../../../src/utils/qr/devicePreviewShareUrl.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3E,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAC/C,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IAC9F,IAAI,CAAC;QACD,OAAO,kBAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IACnG,IAAI,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC;QAC/F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAGzC;IACG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO;YACH,GAAG,EAAE,sBAAsB,CAAC,QAAQ,CAAC;YACrC,cAAc,EAAE,KAAK;SACxB,CAAC;IACN,CAAC;IAED,OAAO;QACH,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACjD,cAAc,EAAE,IAAI;KACvB,CAAC;AACN,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { qrcodegen } from "../../vendor/nayuki/qrcodegen.js";
2
+ export type EncodedQr = {
3
+ size: number;
4
+ /** Row-major dark modules (`true` = black). */
5
+ modules: boolean[][];
6
+ };
7
+ export declare function encodeQrModules(text: string, ecl?: qrcodegen.QrCode.Ecc): EncodedQr;
8
+ /** Compact SVG path for dark modules (quiet zone included). */
9
+ export declare function buildQrSvgPath(encoded: EncodedQr, moduleSize?: number, quietZoneModules?: number): {
10
+ path: string;
11
+ dimension: number;
12
+ };
13
+ //# sourceMappingURL=encodeQrSvg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeQrSvg.d.ts","sourceRoot":"","sources":["../../../src/utils/qr/encodeQrSvg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,SAAS,CAAC,MAAM,CAAC,GAAiC,GAAG,SAAS,CAahH;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,SAAI,EAAE,gBAAgB,SAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAiB5H"}
@@ -0,0 +1,31 @@
1
+ import { qrcodegen } from "../../vendor/nayuki/qrcodegen.js";
2
+ export function encodeQrModules(text, ecl = qrcodegen.QrCode.Ecc.MEDIUM) {
3
+ const qr = qrcodegen.QrCode.encodeText(text, ecl);
4
+ const modules = [];
5
+ for (let y = 0; y < qr.size; y += 1) {
6
+ const row = [];
7
+ for (let x = 0; x < qr.size; x += 1) {
8
+ row.push(qr.getModule(x, y));
9
+ }
10
+ modules.push(row);
11
+ }
12
+ return { size: qr.size, modules };
13
+ }
14
+ /** Compact SVG path for dark modules (quiet zone included). */
15
+ export function buildQrSvgPath(encoded, moduleSize = 4, quietZoneModules = 2) {
16
+ const { size, modules } = encoded;
17
+ const dimension = (size + quietZoneModules * 2) * moduleSize;
18
+ const parts = [];
19
+ for (let y = 0; y < size; y += 1) {
20
+ for (let x = 0; x < size; x += 1) {
21
+ if (!modules[y]?.[x]) {
22
+ continue;
23
+ }
24
+ const px = (x + quietZoneModules) * moduleSize;
25
+ const py = (y + quietZoneModules) * moduleSize;
26
+ parts.push(`M${px},${py}h${moduleSize}v${moduleSize}h-${moduleSize}z`);
27
+ }
28
+ }
29
+ return { path: parts.join(""), dimension };
30
+ }
31
+ //# sourceMappingURL=encodeQrSvg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeQrSvg.js","sourceRoot":"","sources":["../../../src/utils/qr/encodeQrSvg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAQzD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAA4B,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;IACjG,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAc,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,OAAkB,EAAE,UAAU,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC;IACnF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,SAAS,GAAG,CAAC,IAAI,GAAG,gBAAgB,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YACD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,UAAU,CAAC;YAC/C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,UAAU,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,UAAU,IAAI,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC"}