@designfever/web-review-kit 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/react-shell.cjs +724 -436
- package/dist/react-shell.cjs.map +1 -1
- package/dist/react-shell.d.cts +1 -0
- package/dist/react-shell.d.ts +1 -0
- package/dist/react-shell.js +590 -298
- package/dist/react-shell.js.map +1 -1
- package/docs/README.md +1 -0
- package/docs/installation.md +23 -0
- package/docs/release-notes-0.8.1.md +23 -0
- package/package.json +1 -1
package/dist/react-shell.cjs
CHANGED
|
@@ -40,7 +40,7 @@ __export(react_shell_exports, {
|
|
|
40
40
|
mountReviewShell: () => mountReviewShell
|
|
41
41
|
});
|
|
42
42
|
module.exports = __toCommonJS(react_shell_exports);
|
|
43
|
-
var
|
|
43
|
+
var import_react58 = __toESM(require("react"), 1);
|
|
44
44
|
var import_client2 = require("react-dom/client");
|
|
45
45
|
|
|
46
46
|
// src/core/typography.tokens.ts
|
|
@@ -2485,7 +2485,9 @@ var reviewShellQaPanelStyle = `
|
|
|
2485
2485
|
.df-review-status-toggle-row {
|
|
2486
2486
|
display: flex;
|
|
2487
2487
|
align-items: center;
|
|
2488
|
+
justify-content: space-between;
|
|
2488
2489
|
gap: 6px;
|
|
2490
|
+
width: 100%;
|
|
2489
2491
|
min-width: 0;
|
|
2490
2492
|
overflow-x: auto;
|
|
2491
2493
|
overflow-y: hidden;
|
|
@@ -2529,10 +2531,31 @@ var reviewShellQaPanelStyle = `
|
|
|
2529
2531
|
opacity: 0.72;
|
|
2530
2532
|
}
|
|
2531
2533
|
|
|
2534
|
+
.df-review-status-preset-toggle {
|
|
2535
|
+
width: 34px;
|
|
2536
|
+
min-width: 34px;
|
|
2537
|
+
padding: 0;
|
|
2538
|
+
}
|
|
2539
|
+
|
|
2540
|
+
.df-review-status-preset-toggle svg {
|
|
2541
|
+
width: 14px;
|
|
2542
|
+
height: 14px;
|
|
2543
|
+
}
|
|
2544
|
+
|
|
2532
2545
|
.df-review-status-toggle.is-active {
|
|
2533
2546
|
color: var(--df-review-text);
|
|
2534
2547
|
}
|
|
2535
2548
|
|
|
2549
|
+
.df-review-status-preset-toggle.is-active {
|
|
2550
|
+
border-color: var(--df-review-line);
|
|
2551
|
+
color: var(--df-review-muted);
|
|
2552
|
+
background: var(--df-review-line-soft);
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
.df-review-status-toggle.is-status-todo {
|
|
2556
|
+
flex: 1 1 auto;
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2536
2559
|
.df-review-status-toggle.is-status-todo.is-active {
|
|
2537
2560
|
border-color: var(--df-review-line);
|
|
2538
2561
|
color: var(--df-review-muted);
|
|
@@ -2557,10 +2580,15 @@ var reviewShellQaPanelStyle = `
|
|
|
2557
2580
|
background: var(--df-review-purple-soft);
|
|
2558
2581
|
}
|
|
2559
2582
|
|
|
2583
|
+
.df-review-status-toggle.is-status-done {
|
|
2584
|
+
margin-right: var(--df-review-space-2);
|
|
2585
|
+
color: var(--df-review-muted);
|
|
2586
|
+
}
|
|
2587
|
+
|
|
2560
2588
|
.df-review-status-toggle.is-status-done.is-active {
|
|
2561
|
-
border-color:
|
|
2562
|
-
color: var(--df-review-
|
|
2563
|
-
background: var(--df-review-
|
|
2589
|
+
border-color: var(--df-review-line);
|
|
2590
|
+
color: var(--df-review-muted);
|
|
2591
|
+
background: var(--df-review-line-soft);
|
|
2564
2592
|
}
|
|
2565
2593
|
|
|
2566
2594
|
.df-review-filter-tabs {
|
|
@@ -2714,7 +2742,8 @@ var reviewShellQaPanelStyle = `
|
|
|
2714
2742
|
box-shadow: inset 0 0 0 1px var(--df-review-accent-hover), 0 0 0 3px rgba(124, 199, 255, 0.12);
|
|
2715
2743
|
}
|
|
2716
2744
|
|
|
2717
|
-
.df-review-item-card.is-overlay-hidden .df-review-item-main
|
|
2745
|
+
.df-review-item-card.is-overlay-hidden .df-review-item-main,
|
|
2746
|
+
.df-review-item-card.is-overlay-hidden .df-review-item-body {
|
|
2718
2747
|
opacity: 0.68;
|
|
2719
2748
|
}
|
|
2720
2749
|
|
|
@@ -2726,7 +2755,8 @@ var reviewShellQaPanelStyle = `
|
|
|
2726
2755
|
min-width: 0;
|
|
2727
2756
|
}
|
|
2728
2757
|
|
|
2729
|
-
.df-review-item-main
|
|
2758
|
+
.df-review-item-main,
|
|
2759
|
+
.df-review-item-body {
|
|
2730
2760
|
display: grid;
|
|
2731
2761
|
gap: 4px;
|
|
2732
2762
|
min-width: 0;
|
|
@@ -2738,7 +2768,7 @@ var reviewShellQaPanelStyle = `
|
|
|
2738
2768
|
}
|
|
2739
2769
|
|
|
2740
2770
|
.df-review-item-main strong,
|
|
2741
|
-
.df-review-item-
|
|
2771
|
+
.df-review-item-body p {
|
|
2742
2772
|
margin: 0;
|
|
2743
2773
|
}
|
|
2744
2774
|
|
|
@@ -2762,6 +2792,73 @@ var reviewShellQaPanelStyle = `
|
|
|
2762
2792
|
white-space: pre-wrap;
|
|
2763
2793
|
}
|
|
2764
2794
|
|
|
2795
|
+
.df-review-item-comment-shell {
|
|
2796
|
+
display: grid;
|
|
2797
|
+
gap: 2px;
|
|
2798
|
+
min-width: 0;
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
.df-review-item-comment-more {
|
|
2802
|
+
display: flex;
|
|
2803
|
+
align-items: center;
|
|
2804
|
+
justify-content: center;
|
|
2805
|
+
gap: 5px;
|
|
2806
|
+
width: 100%;
|
|
2807
|
+
min-width: 0;
|
|
2808
|
+
min-height: 37px;
|
|
2809
|
+
border: 0;
|
|
2810
|
+
padding: 10px 0 7px;
|
|
2811
|
+
color: var(--df-review-muted);
|
|
2812
|
+
background: transparent;
|
|
2813
|
+
cursor: pointer;
|
|
2814
|
+
font-size: var(--df-review-font-size-xs);
|
|
2815
|
+
font-weight: var(--df-review-font-weight-normal);
|
|
2816
|
+
line-height: 1;
|
|
2817
|
+
transition: color 140ms ease;
|
|
2818
|
+
}
|
|
2819
|
+
|
|
2820
|
+
.df-review-item-comment-more::before,
|
|
2821
|
+
.df-review-item-comment-more::after {
|
|
2822
|
+
content: '';
|
|
2823
|
+
flex: 1 1 auto;
|
|
2824
|
+
height: 1px;
|
|
2825
|
+
border-radius: var(--df-review-radius-pill);
|
|
2826
|
+
background: var(--df-review-line-soft);
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
.df-review-item-comment-more span {
|
|
2830
|
+
flex: 0 0 auto;
|
|
2831
|
+
}
|
|
2832
|
+
|
|
2833
|
+
.df-review-item-comment-more:hover,
|
|
2834
|
+
.df-review-item-comment-more:focus-visible {
|
|
2835
|
+
color: var(--df-review-accent);
|
|
2836
|
+
outline: none;
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2839
|
+
.df-review-item-comment-more svg {
|
|
2840
|
+
flex: 0 0 auto;
|
|
2841
|
+
width: 14px;
|
|
2842
|
+
height: 14px;
|
|
2843
|
+
fill: none;
|
|
2844
|
+
stroke: currentColor;
|
|
2845
|
+
stroke-linecap: round;
|
|
2846
|
+
stroke-linejoin: round;
|
|
2847
|
+
stroke-width: 2;
|
|
2848
|
+
}
|
|
2849
|
+
|
|
2850
|
+
.df-review-item-comment.is-collapsed {
|
|
2851
|
+
max-height: 140px;
|
|
2852
|
+
overflow-x: hidden;
|
|
2853
|
+
overflow-y: auto;
|
|
2854
|
+
scrollbar-width: thin;
|
|
2855
|
+
}
|
|
2856
|
+
|
|
2857
|
+
.df-review-item-comment.is-expanded {
|
|
2858
|
+
max-height: none;
|
|
2859
|
+
overflow: visible;
|
|
2860
|
+
}
|
|
2861
|
+
|
|
2765
2862
|
.df-review-item-comment.is-primary {
|
|
2766
2863
|
padding: 5px 0;
|
|
2767
2864
|
color: var(--df-review-text);
|
|
@@ -2823,7 +2920,7 @@ var reviewShellQaPanelStyle = `
|
|
|
2823
2920
|
white-space: nowrap;
|
|
2824
2921
|
}
|
|
2825
2922
|
|
|
2826
|
-
.df-review-item-
|
|
2923
|
+
.df-review-item-body small {
|
|
2827
2924
|
color: var(--df-review-subtle);
|
|
2828
2925
|
font-size: var(--df-review-font-size-xs);
|
|
2829
2926
|
}
|
|
@@ -4174,11 +4271,17 @@ var reviewShellStageStyle = `
|
|
|
4174
4271
|
|
|
4175
4272
|
.df-review-outside-marker {
|
|
4176
4273
|
--df-review-outside-marker-color: #7cc7ff;
|
|
4274
|
+
--df-review-outside-marker-connector-top: 10px;
|
|
4275
|
+
--df-review-outside-marker-connector-stem-top: 10px;
|
|
4276
|
+
--df-review-outside-marker-connector-stem-height: 0px;
|
|
4277
|
+
--df-review-outside-marker-z-index: 1;
|
|
4177
4278
|
position: absolute;
|
|
4178
4279
|
right: 10px;
|
|
4280
|
+
z-index: var(--df-review-outside-marker-z-index);
|
|
4179
4281
|
display: inline-flex;
|
|
4180
4282
|
align-items: center;
|
|
4181
4283
|
justify-content: center;
|
|
4284
|
+
width: max-content;
|
|
4182
4285
|
min-width: 28px;
|
|
4183
4286
|
height: 22px;
|
|
4184
4287
|
padding: 0 6px;
|
|
@@ -4190,21 +4293,33 @@ var reviewShellStageStyle = `
|
|
|
4190
4293
|
font-size: var(--df-review-font-size-2xs);
|
|
4191
4294
|
font-weight: var(--df-review-font-weight-emphasis);
|
|
4192
4295
|
line-height: 1;
|
|
4296
|
+
white-space: nowrap;
|
|
4193
4297
|
pointer-events: auto;
|
|
4194
4298
|
}
|
|
4195
4299
|
|
|
4300
|
+
.df-review-outside-marker::before,
|
|
4196
4301
|
.df-review-outside-marker::after {
|
|
4197
4302
|
content: "";
|
|
4198
4303
|
position: absolute;
|
|
4199
|
-
left: 100%;
|
|
4200
|
-
top: 10px;
|
|
4201
|
-
width: 10px;
|
|
4202
|
-
height: 1px;
|
|
4203
4304
|
background: var(--df-review-outside-marker-color);
|
|
4204
4305
|
opacity: 0.72;
|
|
4205
4306
|
pointer-events: none;
|
|
4206
4307
|
}
|
|
4207
4308
|
|
|
4309
|
+
.df-review-outside-marker::before {
|
|
4310
|
+
left: 100%;
|
|
4311
|
+
top: var(--df-review-outside-marker-connector-stem-top);
|
|
4312
|
+
width: 1px;
|
|
4313
|
+
height: var(--df-review-outside-marker-connector-stem-height);
|
|
4314
|
+
}
|
|
4315
|
+
|
|
4316
|
+
.df-review-outside-marker::after {
|
|
4317
|
+
left: 100%;
|
|
4318
|
+
top: var(--df-review-outside-marker-connector-top);
|
|
4319
|
+
width: 10px;
|
|
4320
|
+
height: 1px;
|
|
4321
|
+
}
|
|
4322
|
+
|
|
4208
4323
|
.df-review-outside-marker.is-scope-tablet {
|
|
4209
4324
|
--df-review-outside-marker-color: #63d7c7;
|
|
4210
4325
|
}
|
|
@@ -5241,7 +5356,7 @@ function ensureReviewShellStyle() {
|
|
|
5241
5356
|
}
|
|
5242
5357
|
|
|
5243
5358
|
// src/react-shell/review/shell.tsx
|
|
5244
|
-
var
|
|
5359
|
+
var import_react56 = require("react");
|
|
5245
5360
|
|
|
5246
5361
|
// src/react-shell/store/store.context.tsx
|
|
5247
5362
|
var import_react = require("react");
|
|
@@ -5391,69 +5506,80 @@ var __iconNode = [
|
|
|
5391
5506
|
];
|
|
5392
5507
|
var Bot = createLucideIcon("bot", __iconNode);
|
|
5393
5508
|
|
|
5509
|
+
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/check-check.mjs
|
|
5510
|
+
var __iconNode2 = [
|
|
5511
|
+
["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
|
|
5512
|
+
["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
|
|
5513
|
+
];
|
|
5514
|
+
var CheckCheck = createLucideIcon("check-check", __iconNode2);
|
|
5515
|
+
|
|
5394
5516
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs
|
|
5395
|
-
var
|
|
5396
|
-
var ChevronDown = createLucideIcon("chevron-down",
|
|
5517
|
+
var __iconNode3 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
5518
|
+
var ChevronDown = createLucideIcon("chevron-down", __iconNode3);
|
|
5397
5519
|
|
|
5398
5520
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-right.mjs
|
|
5399
|
-
var
|
|
5400
|
-
var ChevronRight = createLucideIcon("chevron-right",
|
|
5521
|
+
var __iconNode4 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
5522
|
+
var ChevronRight = createLucideIcon("chevron-right", __iconNode4);
|
|
5523
|
+
|
|
5524
|
+
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/chevron-up.mjs
|
|
5525
|
+
var __iconNode5 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
5526
|
+
var ChevronUp = createLucideIcon("chevron-up", __iconNode5);
|
|
5401
5527
|
|
|
5402
5528
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/circle-question-mark.mjs
|
|
5403
|
-
var
|
|
5529
|
+
var __iconNode6 = [
|
|
5404
5530
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
5405
5531
|
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
5406
5532
|
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
5407
5533
|
];
|
|
5408
|
-
var CircleQuestionMark = createLucideIcon("circle-question-mark",
|
|
5534
|
+
var CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode6);
|
|
5409
5535
|
|
|
5410
5536
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/code-xml.mjs
|
|
5411
|
-
var
|
|
5537
|
+
var __iconNode7 = [
|
|
5412
5538
|
["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
|
|
5413
5539
|
["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
|
|
5414
5540
|
["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
|
|
5415
5541
|
];
|
|
5416
|
-
var CodeXml = createLucideIcon("code-xml",
|
|
5542
|
+
var CodeXml = createLucideIcon("code-xml", __iconNode7);
|
|
5417
5543
|
|
|
5418
5544
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/contrast.mjs
|
|
5419
|
-
var
|
|
5545
|
+
var __iconNode8 = [
|
|
5420
5546
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
5421
5547
|
["path", { d: "M12 18a6 6 0 0 0 0-12v12z", key: "j4l70d" }]
|
|
5422
5548
|
];
|
|
5423
|
-
var Contrast = createLucideIcon("contrast",
|
|
5549
|
+
var Contrast = createLucideIcon("contrast", __iconNode8);
|
|
5424
5550
|
|
|
5425
5551
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/copy.mjs
|
|
5426
|
-
var
|
|
5552
|
+
var __iconNode9 = [
|
|
5427
5553
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
5428
5554
|
["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
|
|
5429
5555
|
];
|
|
5430
|
-
var Copy = createLucideIcon("copy",
|
|
5556
|
+
var Copy = createLucideIcon("copy", __iconNode9);
|
|
5431
5557
|
|
|
5432
5558
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/corner-up-right.mjs
|
|
5433
|
-
var
|
|
5559
|
+
var __iconNode10 = [
|
|
5434
5560
|
["path", { d: "m15 14 5-5-5-5", key: "12vg1m" }],
|
|
5435
5561
|
["path", { d: "M4 20v-7a4 4 0 0 1 4-4h12", key: "1lu4f8" }]
|
|
5436
5562
|
];
|
|
5437
|
-
var CornerUpRight = createLucideIcon("corner-up-right",
|
|
5563
|
+
var CornerUpRight = createLucideIcon("corner-up-right", __iconNode10);
|
|
5438
5564
|
|
|
5439
5565
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/database.mjs
|
|
5440
|
-
var
|
|
5566
|
+
var __iconNode11 = [
|
|
5441
5567
|
["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
|
|
5442
5568
|
["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
|
|
5443
5569
|
["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
|
|
5444
5570
|
];
|
|
5445
|
-
var Database = createLucideIcon("database",
|
|
5571
|
+
var Database = createLucideIcon("database", __iconNode11);
|
|
5446
5572
|
|
|
5447
5573
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/external-link.mjs
|
|
5448
|
-
var
|
|
5574
|
+
var __iconNode12 = [
|
|
5449
5575
|
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
5450
5576
|
["path", { d: "M10 14 21 3", key: "gplh6r" }],
|
|
5451
5577
|
["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
|
|
5452
5578
|
];
|
|
5453
|
-
var ExternalLink = createLucideIcon("external-link",
|
|
5579
|
+
var ExternalLink = createLucideIcon("external-link", __iconNode12);
|
|
5454
5580
|
|
|
5455
5581
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye-off.mjs
|
|
5456
|
-
var
|
|
5582
|
+
var __iconNode13 = [
|
|
5457
5583
|
[
|
|
5458
5584
|
"path",
|
|
5459
5585
|
{
|
|
@@ -5471,10 +5597,10 @@ var __iconNode11 = [
|
|
|
5471
5597
|
],
|
|
5472
5598
|
["path", { d: "m2 2 20 20", key: "1ooewy" }]
|
|
5473
5599
|
];
|
|
5474
|
-
var EyeOff = createLucideIcon("eye-off",
|
|
5600
|
+
var EyeOff = createLucideIcon("eye-off", __iconNode13);
|
|
5475
5601
|
|
|
5476
5602
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye.mjs
|
|
5477
|
-
var
|
|
5603
|
+
var __iconNode14 = [
|
|
5478
5604
|
[
|
|
5479
5605
|
"path",
|
|
5480
5606
|
{
|
|
@@ -5484,59 +5610,59 @@ var __iconNode12 = [
|
|
|
5484
5610
|
],
|
|
5485
5611
|
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
5486
5612
|
];
|
|
5487
|
-
var Eye = createLucideIcon("eye",
|
|
5613
|
+
var Eye = createLucideIcon("eye", __iconNode14);
|
|
5488
5614
|
|
|
5489
5615
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/image.mjs
|
|
5490
|
-
var
|
|
5616
|
+
var __iconNode15 = [
|
|
5491
5617
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2", key: "1m3agn" }],
|
|
5492
5618
|
["circle", { cx: "9", cy: "9", r: "2", key: "af1f0g" }],
|
|
5493
5619
|
["path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21", key: "1xmnt7" }]
|
|
5494
5620
|
];
|
|
5495
|
-
var Image2 = createLucideIcon("image",
|
|
5621
|
+
var Image2 = createLucideIcon("image", __iconNode15);
|
|
5496
5622
|
|
|
5497
5623
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/layout-grid.mjs
|
|
5498
|
-
var
|
|
5624
|
+
var __iconNode16 = [
|
|
5499
5625
|
["rect", { width: "7", height: "7", x: "3", y: "3", rx: "1", key: "1g98yp" }],
|
|
5500
5626
|
["rect", { width: "7", height: "7", x: "14", y: "3", rx: "1", key: "6d4xhi" }],
|
|
5501
5627
|
["rect", { width: "7", height: "7", x: "14", y: "14", rx: "1", key: "nxv5o0" }],
|
|
5502
5628
|
["rect", { width: "7", height: "7", x: "3", y: "14", rx: "1", key: "1bb6yr" }]
|
|
5503
5629
|
];
|
|
5504
|
-
var LayoutGrid = createLucideIcon("layout-grid",
|
|
5630
|
+
var LayoutGrid = createLucideIcon("layout-grid", __iconNode16);
|
|
5505
5631
|
|
|
5506
5632
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/link-2.mjs
|
|
5507
|
-
var
|
|
5633
|
+
var __iconNode17 = [
|
|
5508
5634
|
["path", { d: "M9 17H7A5 5 0 0 1 7 7h2", key: "8i5ue5" }],
|
|
5509
5635
|
["path", { d: "M15 7h2a5 5 0 1 1 0 10h-2", key: "1b9ql8" }],
|
|
5510
5636
|
["line", { x1: "8", x2: "16", y1: "12", y2: "12", key: "1jonct" }]
|
|
5511
5637
|
];
|
|
5512
|
-
var Link2 = createLucideIcon("link-2",
|
|
5638
|
+
var Link2 = createLucideIcon("link-2", __iconNode17);
|
|
5513
5639
|
|
|
5514
5640
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/list-checks.mjs
|
|
5515
|
-
var
|
|
5641
|
+
var __iconNode18 = [
|
|
5516
5642
|
["path", { d: "M13 5h8", key: "a7qcls" }],
|
|
5517
5643
|
["path", { d: "M13 12h8", key: "h98zly" }],
|
|
5518
5644
|
["path", { d: "M13 19h8", key: "c3s6r1" }],
|
|
5519
5645
|
["path", { d: "m3 17 2 2 4-4", key: "1jhpwq" }],
|
|
5520
5646
|
["path", { d: "m3 7 2 2 4-4", key: "1obspn" }]
|
|
5521
5647
|
];
|
|
5522
|
-
var ListChecks = createLucideIcon("list-checks",
|
|
5648
|
+
var ListChecks = createLucideIcon("list-checks", __iconNode18);
|
|
5523
5649
|
|
|
5524
5650
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/lock-open.mjs
|
|
5525
|
-
var
|
|
5651
|
+
var __iconNode19 = [
|
|
5526
5652
|
["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2", key: "1w4ew1" }],
|
|
5527
5653
|
["path", { d: "M7 11V7a5 5 0 0 1 9.9-1", key: "1mm8w8" }]
|
|
5528
5654
|
];
|
|
5529
|
-
var LockOpen = createLucideIcon("lock-open",
|
|
5655
|
+
var LockOpen = createLucideIcon("lock-open", __iconNode19);
|
|
5530
5656
|
|
|
5531
5657
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/lock.mjs
|
|
5532
|
-
var
|
|
5658
|
+
var __iconNode20 = [
|
|
5533
5659
|
["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2", key: "1w4ew1" }],
|
|
5534
5660
|
["path", { d: "M7 11V7a5 5 0 0 1 10 0v4", key: "fwvmzm" }]
|
|
5535
5661
|
];
|
|
5536
|
-
var Lock = createLucideIcon("lock",
|
|
5662
|
+
var Lock = createLucideIcon("lock", __iconNode20);
|
|
5537
5663
|
|
|
5538
5664
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/map.mjs
|
|
5539
|
-
var
|
|
5665
|
+
var __iconNode21 = [
|
|
5540
5666
|
[
|
|
5541
5667
|
"path",
|
|
5542
5668
|
{
|
|
@@ -5547,27 +5673,27 @@ var __iconNode19 = [
|
|
|
5547
5673
|
["path", { d: "M15 5.764v15", key: "1pn4in" }],
|
|
5548
5674
|
["path", { d: "M9 3.236v15", key: "1uimfh" }]
|
|
5549
5675
|
];
|
|
5550
|
-
var Map2 = createLucideIcon("map",
|
|
5676
|
+
var Map2 = createLucideIcon("map", __iconNode21);
|
|
5551
5677
|
|
|
5552
5678
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/maximize-2.mjs
|
|
5553
|
-
var
|
|
5679
|
+
var __iconNode22 = [
|
|
5554
5680
|
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
5555
5681
|
["path", { d: "m21 3-7 7", key: "1l2asr" }],
|
|
5556
5682
|
["path", { d: "m3 21 7-7", key: "tjx5ai" }],
|
|
5557
5683
|
["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
|
|
5558
5684
|
];
|
|
5559
|
-
var Maximize2 = createLucideIcon("maximize-2",
|
|
5685
|
+
var Maximize2 = createLucideIcon("maximize-2", __iconNode22);
|
|
5560
5686
|
|
|
5561
5687
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/monitor.mjs
|
|
5562
|
-
var
|
|
5688
|
+
var __iconNode23 = [
|
|
5563
5689
|
["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
|
|
5564
5690
|
["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
|
|
5565
5691
|
["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
|
|
5566
5692
|
];
|
|
5567
|
-
var Monitor = createLucideIcon("monitor",
|
|
5693
|
+
var Monitor = createLucideIcon("monitor", __iconNode23);
|
|
5568
5694
|
|
|
5569
5695
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/moon.mjs
|
|
5570
|
-
var
|
|
5696
|
+
var __iconNode24 = [
|
|
5571
5697
|
[
|
|
5572
5698
|
"path",
|
|
5573
5699
|
{
|
|
@@ -5576,28 +5702,28 @@ var __iconNode22 = [
|
|
|
5576
5702
|
}
|
|
5577
5703
|
]
|
|
5578
5704
|
];
|
|
5579
|
-
var Moon = createLucideIcon("moon",
|
|
5705
|
+
var Moon = createLucideIcon("moon", __iconNode24);
|
|
5580
5706
|
|
|
5581
5707
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/move-vertical.mjs
|
|
5582
|
-
var
|
|
5708
|
+
var __iconNode25 = [
|
|
5583
5709
|
["path", { d: "M12 2v20", key: "t6zp3m" }],
|
|
5584
5710
|
["path", { d: "m8 18 4 4 4-4", key: "bh5tu3" }],
|
|
5585
5711
|
["path", { d: "m8 6 4-4 4 4", key: "ybng9g" }]
|
|
5586
5712
|
];
|
|
5587
|
-
var MoveVertical = createLucideIcon("move-vertical",
|
|
5713
|
+
var MoveVertical = createLucideIcon("move-vertical", __iconNode25);
|
|
5588
5714
|
|
|
5589
5715
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/network.mjs
|
|
5590
|
-
var
|
|
5716
|
+
var __iconNode26 = [
|
|
5591
5717
|
["rect", { x: "16", y: "16", width: "6", height: "6", rx: "1", key: "4q2zg0" }],
|
|
5592
5718
|
["rect", { x: "2", y: "16", width: "6", height: "6", rx: "1", key: "8cvhb9" }],
|
|
5593
5719
|
["rect", { x: "9", y: "2", width: "6", height: "6", rx: "1", key: "1egb70" }],
|
|
5594
5720
|
["path", { d: "M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3", key: "1jsf9p" }],
|
|
5595
5721
|
["path", { d: "M12 12V8", key: "2874zd" }]
|
|
5596
5722
|
];
|
|
5597
|
-
var Network = createLucideIcon("network",
|
|
5723
|
+
var Network = createLucideIcon("network", __iconNode26);
|
|
5598
5724
|
|
|
5599
5725
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/pencil.mjs
|
|
5600
|
-
var
|
|
5726
|
+
var __iconNode27 = [
|
|
5601
5727
|
[
|
|
5602
5728
|
"path",
|
|
5603
5729
|
{
|
|
@@ -5607,32 +5733,32 @@ var __iconNode25 = [
|
|
|
5607
5733
|
],
|
|
5608
5734
|
["path", { d: "m15 5 4 4", key: "1mk7zo" }]
|
|
5609
5735
|
];
|
|
5610
|
-
var Pencil = createLucideIcon("pencil",
|
|
5736
|
+
var Pencil = createLucideIcon("pencil", __iconNode27);
|
|
5611
5737
|
|
|
5612
5738
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/plus.mjs
|
|
5613
|
-
var
|
|
5739
|
+
var __iconNode28 = [
|
|
5614
5740
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
5615
5741
|
["path", { d: "M12 5v14", key: "s699le" }]
|
|
5616
5742
|
];
|
|
5617
|
-
var Plus = createLucideIcon("plus",
|
|
5743
|
+
var Plus = createLucideIcon("plus", __iconNode28);
|
|
5618
5744
|
|
|
5619
5745
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/rectangle-horizontal.mjs
|
|
5620
|
-
var
|
|
5746
|
+
var __iconNode29 = [
|
|
5621
5747
|
["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }]
|
|
5622
5748
|
];
|
|
5623
|
-
var RectangleHorizontal = createLucideIcon("rectangle-horizontal",
|
|
5749
|
+
var RectangleHorizontal = createLucideIcon("rectangle-horizontal", __iconNode29);
|
|
5624
5750
|
|
|
5625
5751
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs
|
|
5626
|
-
var
|
|
5752
|
+
var __iconNode30 = [
|
|
5627
5753
|
["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
|
|
5628
5754
|
["path", { d: "M21 3v5h-5", key: "1q7to0" }],
|
|
5629
5755
|
["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
|
|
5630
5756
|
["path", { d: "M8 16H3v5", key: "1cv678" }]
|
|
5631
5757
|
];
|
|
5632
|
-
var RefreshCw = createLucideIcon("refresh-cw",
|
|
5758
|
+
var RefreshCw = createLucideIcon("refresh-cw", __iconNode30);
|
|
5633
5759
|
|
|
5634
5760
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/ruler.mjs
|
|
5635
|
-
var
|
|
5761
|
+
var __iconNode31 = [
|
|
5636
5762
|
[
|
|
5637
5763
|
"path",
|
|
5638
5764
|
{
|
|
@@ -5645,26 +5771,26 @@ var __iconNode29 = [
|
|
|
5645
5771
|
["path", { d: "m8.5 6.5 2-2", key: "vc6u1g" }],
|
|
5646
5772
|
["path", { d: "m17.5 15.5 2-2", key: "wo5hmg" }]
|
|
5647
5773
|
];
|
|
5648
|
-
var Ruler = createLucideIcon("ruler",
|
|
5774
|
+
var Ruler = createLucideIcon("ruler", __iconNode31);
|
|
5649
5775
|
|
|
5650
5776
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/scan.mjs
|
|
5651
|
-
var
|
|
5777
|
+
var __iconNode32 = [
|
|
5652
5778
|
["path", { d: "M3 7V5a2 2 0 0 1 2-2h2", key: "aa7l1z" }],
|
|
5653
5779
|
["path", { d: "M17 3h2a2 2 0 0 1 2 2v2", key: "4qcy5o" }],
|
|
5654
5780
|
["path", { d: "M21 17v2a2 2 0 0 1-2 2h-2", key: "6vwrx8" }],
|
|
5655
5781
|
["path", { d: "M7 21H5a2 2 0 0 1-2-2v-2", key: "ioqczr" }]
|
|
5656
5782
|
];
|
|
5657
|
-
var Scan = createLucideIcon("scan",
|
|
5783
|
+
var Scan = createLucideIcon("scan", __iconNode32);
|
|
5658
5784
|
|
|
5659
5785
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/search.mjs
|
|
5660
|
-
var
|
|
5786
|
+
var __iconNode33 = [
|
|
5661
5787
|
["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
|
|
5662
5788
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
|
|
5663
5789
|
];
|
|
5664
|
-
var Search = createLucideIcon("search",
|
|
5790
|
+
var Search = createLucideIcon("search", __iconNode33);
|
|
5665
5791
|
|
|
5666
5792
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/settings.mjs
|
|
5667
|
-
var
|
|
5793
|
+
var __iconNode34 = [
|
|
5668
5794
|
[
|
|
5669
5795
|
"path",
|
|
5670
5796
|
{
|
|
@@ -5674,17 +5800,17 @@ var __iconNode32 = [
|
|
|
5674
5800
|
],
|
|
5675
5801
|
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
5676
5802
|
];
|
|
5677
|
-
var Settings = createLucideIcon("settings",
|
|
5803
|
+
var Settings = createLucideIcon("settings", __iconNode34);
|
|
5678
5804
|
|
|
5679
5805
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/smartphone.mjs
|
|
5680
|
-
var
|
|
5806
|
+
var __iconNode35 = [
|
|
5681
5807
|
["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2", key: "1yt0o3" }],
|
|
5682
5808
|
["path", { d: "M12 18h.01", key: "mhygvu" }]
|
|
5683
5809
|
];
|
|
5684
|
-
var Smartphone = createLucideIcon("smartphone",
|
|
5810
|
+
var Smartphone = createLucideIcon("smartphone", __iconNode35);
|
|
5685
5811
|
|
|
5686
5812
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/square-mouse-pointer.mjs
|
|
5687
|
-
var
|
|
5813
|
+
var __iconNode36 = [
|
|
5688
5814
|
[
|
|
5689
5815
|
"path",
|
|
5690
5816
|
{
|
|
@@ -5694,10 +5820,10 @@ var __iconNode34 = [
|
|
|
5694
5820
|
],
|
|
5695
5821
|
["path", { d: "M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6", key: "14rsvq" }]
|
|
5696
5822
|
];
|
|
5697
|
-
var SquareMousePointer = createLucideIcon("square-mouse-pointer",
|
|
5823
|
+
var SquareMousePointer = createLucideIcon("square-mouse-pointer", __iconNode36);
|
|
5698
5824
|
|
|
5699
5825
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/sun.mjs
|
|
5700
|
-
var
|
|
5826
|
+
var __iconNode37 = [
|
|
5701
5827
|
["circle", { cx: "12", cy: "12", r: "4", key: "4exip2" }],
|
|
5702
5828
|
["path", { d: "M12 2v2", key: "tus03m" }],
|
|
5703
5829
|
["path", { d: "M12 20v2", key: "1lh1kg" }],
|
|
@@ -5708,40 +5834,40 @@ var __iconNode35 = [
|
|
|
5708
5834
|
["path", { d: "m6.34 17.66-1.41 1.41", key: "1m8zz5" }],
|
|
5709
5835
|
["path", { d: "m19.07 4.93-1.41 1.41", key: "1shlcs" }]
|
|
5710
5836
|
];
|
|
5711
|
-
var Sun = createLucideIcon("sun",
|
|
5837
|
+
var Sun = createLucideIcon("sun", __iconNode37);
|
|
5712
5838
|
|
|
5713
5839
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/trash-2.mjs
|
|
5714
|
-
var
|
|
5840
|
+
var __iconNode38 = [
|
|
5715
5841
|
["path", { d: "M10 11v6", key: "nco0om" }],
|
|
5716
5842
|
["path", { d: "M14 11v6", key: "outv1u" }],
|
|
5717
5843
|
["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
|
|
5718
5844
|
["path", { d: "M3 6h18", key: "d0wm0j" }],
|
|
5719
5845
|
["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
|
|
5720
5846
|
];
|
|
5721
|
-
var Trash2 = createLucideIcon("trash-2",
|
|
5847
|
+
var Trash2 = createLucideIcon("trash-2", __iconNode38);
|
|
5722
5848
|
|
|
5723
5849
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/type.mjs
|
|
5724
|
-
var
|
|
5850
|
+
var __iconNode39 = [
|
|
5725
5851
|
["path", { d: "M12 4v16", key: "1654pz" }],
|
|
5726
5852
|
["path", { d: "M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2", key: "e0r10z" }],
|
|
5727
5853
|
["path", { d: "M9 20h6", key: "s66wpe" }]
|
|
5728
5854
|
];
|
|
5729
|
-
var Type = createLucideIcon("type",
|
|
5855
|
+
var Type = createLucideIcon("type", __iconNode39);
|
|
5730
5856
|
|
|
5731
5857
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/upload.mjs
|
|
5732
|
-
var
|
|
5858
|
+
var __iconNode40 = [
|
|
5733
5859
|
["path", { d: "M12 3v12", key: "1x0j5s" }],
|
|
5734
5860
|
["path", { d: "m17 8-5-5-5 5", key: "7q97r8" }],
|
|
5735
5861
|
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }]
|
|
5736
5862
|
];
|
|
5737
|
-
var Upload = createLucideIcon("upload",
|
|
5863
|
+
var Upload = createLucideIcon("upload", __iconNode40);
|
|
5738
5864
|
|
|
5739
5865
|
// node_modules/.pnpm/lucide-react@1.20.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/x.mjs
|
|
5740
|
-
var
|
|
5866
|
+
var __iconNode41 = [
|
|
5741
5867
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
5742
5868
|
["path", { d: "m6 6 12 12", key: "d8bk6v" }]
|
|
5743
5869
|
];
|
|
5744
|
-
var X = createLucideIcon("x",
|
|
5870
|
+
var X = createLucideIcon("x", __iconNode41);
|
|
5745
5871
|
|
|
5746
5872
|
// src/react-shell/figma/image.overlay.controller.ts
|
|
5747
5873
|
var import_react7 = require("react");
|
|
@@ -6657,6 +6783,7 @@ var FigmaImageLayerStateButtons = ({
|
|
|
6657
6783
|
"aria-pressed": overlayState.isVisible,
|
|
6658
6784
|
className: `df-review-figma-image-state-button${overlayState.isVisible ? " is-active" : ""}`,
|
|
6659
6785
|
"data-review-tooltip": overlayState.isVisible ? "Hide overlay" : "Show overlay",
|
|
6786
|
+
"data-review-tooltip-placement": "left",
|
|
6660
6787
|
title: overlayState.isVisible ? "Hide overlay" : "Show overlay",
|
|
6661
6788
|
type: "button",
|
|
6662
6789
|
onClick: (event) => {
|
|
@@ -6673,6 +6800,7 @@ var FigmaImageLayerStateButtons = ({
|
|
|
6673
6800
|
"aria-pressed": overlayState.isLocked,
|
|
6674
6801
|
className: `df-review-figma-image-state-button${overlayState.isLocked ? " is-active" : ""}`,
|
|
6675
6802
|
"data-review-tooltip": overlayState.isLocked ? "Unlock" : "Lock",
|
|
6803
|
+
"data-review-tooltip-placement": "left",
|
|
6676
6804
|
title: overlayState.isLocked ? "Unlock" : "Lock",
|
|
6677
6805
|
type: "button",
|
|
6678
6806
|
onClick: (event) => {
|
|
@@ -6689,6 +6817,7 @@ var FigmaImageLayerStateButtons = ({
|
|
|
6689
6817
|
"aria-pressed": overlayState.mode === "invert",
|
|
6690
6818
|
className: `df-review-figma-image-state-button${overlayState.mode === "invert" ? " is-active" : ""}`,
|
|
6691
6819
|
"data-review-tooltip": "Invert",
|
|
6820
|
+
"data-review-tooltip-placement": "left",
|
|
6692
6821
|
title: "Invert",
|
|
6693
6822
|
type: "button",
|
|
6694
6823
|
onClick: (event) => {
|
|
@@ -7558,9 +7687,10 @@ var formatPromptSourceHint = (item) => {
|
|
|
7558
7687
|
`Section id: ${source.sectionId ?? "(none)"}`
|
|
7559
7688
|
].join("\n");
|
|
7560
7689
|
};
|
|
7561
|
-
var buildReviewItemPrompt = (numberedItem, reviewPathPrefix) => {
|
|
7690
|
+
var buildReviewItemPrompt = (numberedItem, reviewPathPrefix, qaPrompt = "") => {
|
|
7562
7691
|
const { item } = numberedItem;
|
|
7563
7692
|
const anchor = item.anchor;
|
|
7693
|
+
const qaPromptText = qaPrompt.trim();
|
|
7564
7694
|
const candidates = getPromptAnchorCandidates(item);
|
|
7565
7695
|
const candidateLines = candidates.length > 0 ? candidates.map((candidate, index) => {
|
|
7566
7696
|
const confidence = typeof candidate.confidence === "number" ? `, confidence=${Math.round(candidate.confidence * 100)}%` : "";
|
|
@@ -7568,6 +7698,7 @@ var buildReviewItemPrompt = (numberedItem, reviewPathPrefix) => {
|
|
|
7568
7698
|
return `${index + 1}. ${candidate.selector} (${candidate.strategy}${confidence}${fingerprint})`;
|
|
7569
7699
|
}).join("\n") : "(none)";
|
|
7570
7700
|
return [
|
|
7701
|
+
...qaPromptText ? [qaPromptText, ""] : [],
|
|
7571
7702
|
"Fix this df-web-review-kit QA issue.",
|
|
7572
7703
|
"",
|
|
7573
7704
|
`Page: ${getItemTarget(item, reviewPathPrefix)}`,
|
|
@@ -7879,6 +8010,7 @@ var createReviewShellConfig = ({
|
|
|
7879
8010
|
pages,
|
|
7880
8011
|
adapters,
|
|
7881
8012
|
initialPrompt = DEFAULT_INITIAL_REVIEW_PROMPT,
|
|
8013
|
+
qaPrompt = "",
|
|
7882
8014
|
presets = DEFAULT_REVIEW_VIEWPORT_PRESETS,
|
|
7883
8015
|
reviewPathPrefix = DEFAULT_REVIEW_PATH_PREFIX,
|
|
7884
8016
|
sourceInspector,
|
|
@@ -7895,6 +8027,7 @@ var createReviewShellConfig = ({
|
|
|
7895
8027
|
const isSourceInspectorEnabled = resolvedSourceInspector?.enabled !== false && Boolean(resolvedSourceRoot?.trim());
|
|
7896
8028
|
return {
|
|
7897
8029
|
initialPrompt,
|
|
8030
|
+
qaPrompt,
|
|
7898
8031
|
projectId,
|
|
7899
8032
|
pages,
|
|
7900
8033
|
reviewPathPrefix,
|
|
@@ -8259,7 +8392,7 @@ function useReviewItemActions({
|
|
|
8259
8392
|
onClearSelectedItem,
|
|
8260
8393
|
onRefreshReviewData
|
|
8261
8394
|
}) {
|
|
8262
|
-
const { reviewPathPrefix, viewportPresets } = useReviewShellConfig();
|
|
8395
|
+
const { qaPrompt, reviewPathPrefix, viewportPresets } = useReviewShellConfig();
|
|
8263
8396
|
const {
|
|
8264
8397
|
activeAdapterEntry,
|
|
8265
8398
|
isRemoteSource,
|
|
@@ -8388,7 +8521,7 @@ function useReviewItemActions({
|
|
|
8388
8521
|
onToast: showToast
|
|
8389
8522
|
});
|
|
8390
8523
|
const copyItemPrompt = (numberedItem) => copyPrompt(
|
|
8391
|
-
buildReviewItemPrompt(numberedItem, reviewPathPrefix),
|
|
8524
|
+
buildReviewItemPrompt(numberedItem, reviewPathPrefix, qaPrompt),
|
|
8392
8525
|
`qa:${numberedItem.item.id}`,
|
|
8393
8526
|
"QA prompt copied"
|
|
8394
8527
|
);
|
|
@@ -8611,6 +8744,9 @@ var QaItemEditModal = ({
|
|
|
8611
8744
|
};
|
|
8612
8745
|
|
|
8613
8746
|
// src/react-shell/qa/panel.tsx
|
|
8747
|
+
var import_react15 = require("react");
|
|
8748
|
+
|
|
8749
|
+
// src/react-shell/qa/item.card.tsx
|
|
8614
8750
|
var import_react14 = require("react");
|
|
8615
8751
|
|
|
8616
8752
|
// src/react-shell/qa/item.assignee.actions.tsx
|
|
@@ -9061,6 +9197,30 @@ var QaItemCard = ({
|
|
|
9061
9197
|
const canEditItem = activeAdapterEntry.canUpdate && !isSubmitting && !isMutating;
|
|
9062
9198
|
const itemTitle = fields.title ? item.title?.trim() : "";
|
|
9063
9199
|
const itemMeta = [formatItemCardDate(item.createdAt), itemAuthor].filter(Boolean).join(" | ");
|
|
9200
|
+
const commentRef = (0, import_react14.useRef)(null);
|
|
9201
|
+
const [isCommentExpanded, setIsCommentExpanded] = (0, import_react14.useState)(false);
|
|
9202
|
+
const [isCommentOverflowing, setIsCommentOverflowing] = (0, import_react14.useState)(false);
|
|
9203
|
+
const showCommentToggle = isCommentExpanded || isCommentOverflowing;
|
|
9204
|
+
(0, import_react14.useEffect)(() => {
|
|
9205
|
+
setIsCommentExpanded(false);
|
|
9206
|
+
setIsCommentOverflowing(false);
|
|
9207
|
+
}, [item.id, itemComment]);
|
|
9208
|
+
(0, import_react14.useEffect)(() => {
|
|
9209
|
+
if (isCommentExpanded) return void 0;
|
|
9210
|
+
const element = commentRef.current;
|
|
9211
|
+
if (!element) return void 0;
|
|
9212
|
+
const updateCommentOverflow = () => {
|
|
9213
|
+
setIsCommentOverflowing(
|
|
9214
|
+
element.scrollHeight > element.clientHeight + 1
|
|
9215
|
+
);
|
|
9216
|
+
};
|
|
9217
|
+
updateCommentOverflow();
|
|
9218
|
+
const ResizeObserverClass = element.ownerDocument.defaultView?.ResizeObserver;
|
|
9219
|
+
if (!ResizeObserverClass) return void 0;
|
|
9220
|
+
const observer = new ResizeObserverClass(updateCommentOverflow);
|
|
9221
|
+
observer.observe(element);
|
|
9222
|
+
return () => observer.disconnect();
|
|
9223
|
+
}, [isCommentExpanded, itemComment]);
|
|
9064
9224
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
9065
9225
|
"article",
|
|
9066
9226
|
{
|
|
@@ -9109,22 +9269,7 @@ var QaItemCard = ({
|
|
|
9109
9269
|
itemMode
|
|
9110
9270
|
] })
|
|
9111
9271
|
] }),
|
|
9112
|
-
itemTitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { className: "df-review-item-title", children: itemTitle })
|
|
9113
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
9114
|
-
"p",
|
|
9115
|
-
{
|
|
9116
|
-
className: `df-review-item-comment${itemTitle ? "" : " is-primary"}`,
|
|
9117
|
-
children: itemComment
|
|
9118
|
-
}
|
|
9119
|
-
),
|
|
9120
|
-
item.attachments && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(QaItemAttachments, { attachments: item.attachments }),
|
|
9121
|
-
!isRemoteSource && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(QaItemExternalLinks, { item }),
|
|
9122
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("small", { className: "df-review-item-meta", children: itemMeta }),
|
|
9123
|
-
isMutating && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("small", { className: "df-review-item-saving", "aria-live": "polite", children: [
|
|
9124
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "df-review-spinner", "aria-hidden": "true" }),
|
|
9125
|
-
"Saving QA..."
|
|
9126
|
-
] }),
|
|
9127
|
-
item.submitError && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("small", { className: "df-review-item-error", children: item.submitError })
|
|
9272
|
+
itemTitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("strong", { className: "df-review-item-title", children: itemTitle })
|
|
9128
9273
|
] }),
|
|
9129
9274
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
9130
9275
|
"div",
|
|
@@ -9182,6 +9327,50 @@ var QaItemCard = ({
|
|
|
9182
9327
|
}
|
|
9183
9328
|
)
|
|
9184
9329
|
] }),
|
|
9330
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "df-review-item-body", children: [
|
|
9331
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
9332
|
+
"div",
|
|
9333
|
+
{
|
|
9334
|
+
className: `df-review-item-comment-shell${showCommentToggle ? " has-toggle" : ""}${isCommentExpanded ? " is-expanded" : " is-collapsed"}`,
|
|
9335
|
+
children: [
|
|
9336
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
9337
|
+
"p",
|
|
9338
|
+
{
|
|
9339
|
+
className: `df-review-item-comment${itemTitle ? "" : " is-primary"}${isCommentExpanded ? " is-expanded" : " is-collapsed"}`,
|
|
9340
|
+
ref: commentRef,
|
|
9341
|
+
children: itemComment
|
|
9342
|
+
}
|
|
9343
|
+
),
|
|
9344
|
+
showCommentToggle && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
9345
|
+
"button",
|
|
9346
|
+
{
|
|
9347
|
+
"aria-expanded": isCommentExpanded,
|
|
9348
|
+
"aria-label": isCommentExpanded ? "Collapse QA content" : "Expand QA content",
|
|
9349
|
+
className: "df-review-item-comment-more",
|
|
9350
|
+
title: isCommentExpanded ? "Collapse QA content" : "Expand QA content",
|
|
9351
|
+
type: "button",
|
|
9352
|
+
onClick: (event) => {
|
|
9353
|
+
event.stopPropagation();
|
|
9354
|
+
setIsCommentExpanded((current) => !current);
|
|
9355
|
+
},
|
|
9356
|
+
children: [
|
|
9357
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { children: isCommentExpanded ? "Less" : "More" }),
|
|
9358
|
+
isCommentExpanded ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChevronUp, { "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChevronDown, { "aria-hidden": "true" })
|
|
9359
|
+
]
|
|
9360
|
+
}
|
|
9361
|
+
)
|
|
9362
|
+
]
|
|
9363
|
+
}
|
|
9364
|
+
),
|
|
9365
|
+
item.attachments && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(QaItemAttachments, { attachments: item.attachments }),
|
|
9366
|
+
!isRemoteSource && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(QaItemExternalLinks, { item }),
|
|
9367
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("small", { className: "df-review-item-meta", children: itemMeta }),
|
|
9368
|
+
isMutating && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("small", { className: "df-review-item-saving", "aria-live": "polite", children: [
|
|
9369
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "df-review-spinner", "aria-hidden": "true" }),
|
|
9370
|
+
"Saving QA..."
|
|
9371
|
+
] }),
|
|
9372
|
+
item.submitError && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("small", { className: "df-review-item-error", children: item.submitError })
|
|
9373
|
+
] }),
|
|
9185
9374
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "df-review-item-actions", children: [
|
|
9186
9375
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "df-review-item-workflow-actions", children: [
|
|
9187
9376
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
@@ -9288,6 +9477,7 @@ var QaPanelHeader = ({
|
|
|
9288
9477
|
sourceEntries,
|
|
9289
9478
|
statusOptions,
|
|
9290
9479
|
onChangeReviewSource,
|
|
9480
|
+
onEnableActiveQaStatusFilters,
|
|
9291
9481
|
onQaStatusFilterToggle,
|
|
9292
9482
|
onRefreshReviewData
|
|
9293
9483
|
}) => {
|
|
@@ -9331,30 +9521,45 @@ var QaPanelHeader = ({
|
|
|
9331
9521
|
)
|
|
9332
9522
|
] })
|
|
9333
9523
|
] }),
|
|
9334
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.
|
|
9524
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
9335
9525
|
"div",
|
|
9336
9526
|
{
|
|
9337
9527
|
className: "df-review-status-toggle-row",
|
|
9338
9528
|
"aria-label": "QA status filters",
|
|
9339
|
-
children:
|
|
9340
|
-
|
|
9341
|
-
const count = qaStatusFilterCounts.get(statusOption.value) ?? 0;
|
|
9342
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
9529
|
+
children: [
|
|
9530
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
9343
9531
|
"button",
|
|
9344
9532
|
{
|
|
9345
|
-
"aria-label":
|
|
9346
|
-
"aria-pressed":
|
|
9347
|
-
className: `df-review-status-toggle
|
|
9533
|
+
"aria-label": "Show all non-done QA",
|
|
9534
|
+
"aria-pressed": !hasActiveFilter,
|
|
9535
|
+
className: `df-review-status-toggle df-review-status-preset-toggle${!hasActiveFilter ? " is-active" : ""}`,
|
|
9536
|
+
"data-review-tooltip": "Show all non-done QA",
|
|
9537
|
+
title: "Show all non-done QA",
|
|
9348
9538
|
type: "button",
|
|
9349
|
-
onClick:
|
|
9350
|
-
children:
|
|
9351
|
-
|
|
9352
|
-
|
|
9353
|
-
|
|
9354
|
-
|
|
9355
|
-
statusOption.value
|
|
9356
|
-
|
|
9357
|
-
|
|
9539
|
+
onClick: onEnableActiveQaStatusFilters,
|
|
9540
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(CheckCheck, { "aria-hidden": "true" })
|
|
9541
|
+
}
|
|
9542
|
+
),
|
|
9543
|
+
statusFilterOptions.map((statusOption) => {
|
|
9544
|
+
const isActive = qaStatusFilters.includes(statusOption.value);
|
|
9545
|
+
const count = qaStatusFilterCounts.get(statusOption.value) ?? 0;
|
|
9546
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
9547
|
+
"button",
|
|
9548
|
+
{
|
|
9549
|
+
"aria-label": `${statusOption.label} QA (${count})`,
|
|
9550
|
+
"aria-pressed": isActive,
|
|
9551
|
+
className: `df-review-status-toggle is-status-${statusOption.value}${isActive ? " is-active" : ""}`,
|
|
9552
|
+
type: "button",
|
|
9553
|
+
onClick: () => onQaStatusFilterToggle(statusOption.value),
|
|
9554
|
+
children: [
|
|
9555
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: statusOption.label }),
|
|
9556
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("strong", { children: count })
|
|
9557
|
+
]
|
|
9558
|
+
},
|
|
9559
|
+
statusOption.value
|
|
9560
|
+
);
|
|
9561
|
+
})
|
|
9562
|
+
]
|
|
9358
9563
|
}
|
|
9359
9564
|
)
|
|
9360
9565
|
] });
|
|
@@ -9412,6 +9617,7 @@ var ReviewQaPanel = ({
|
|
|
9412
9617
|
onCopyItemPrompt,
|
|
9413
9618
|
onCopyRemoteIssuePath,
|
|
9414
9619
|
onEditItem,
|
|
9620
|
+
onEnableActiveQaStatusFilters,
|
|
9415
9621
|
onQaStatusFilterToggle,
|
|
9416
9622
|
onRefreshReviewData,
|
|
9417
9623
|
onRemoveItem,
|
|
@@ -9419,9 +9625,9 @@ var ReviewQaPanel = ({
|
|
|
9419
9625
|
onSubmitItem,
|
|
9420
9626
|
onToggleItemOverlayVisibility
|
|
9421
9627
|
}) => {
|
|
9422
|
-
const listRef = (0,
|
|
9628
|
+
const listRef = (0, import_react15.useRef)(null);
|
|
9423
9629
|
const emptyMessage = isAllQaVisible ? `No ${activeAdapterEntry.label} QA.` : isRemoteSource ? `No ${activeAdapterEntry.label} QA on this page.` : "No QA on this page.";
|
|
9424
|
-
(0,
|
|
9630
|
+
(0, import_react15.useEffect)(() => {
|
|
9425
9631
|
if (!isListVisible || !selectedItemId) return;
|
|
9426
9632
|
const selectedCard = Array.from(
|
|
9427
9633
|
listRef.current?.querySelectorAll(
|
|
@@ -9451,6 +9657,7 @@ var ReviewQaPanel = ({
|
|
|
9451
9657
|
sourceEntries,
|
|
9452
9658
|
statusOptions: activeAdapterEntry.statusOptions,
|
|
9453
9659
|
onChangeReviewSource,
|
|
9660
|
+
onEnableActiveQaStatusFilters,
|
|
9454
9661
|
onQaStatusFilterToggle,
|
|
9455
9662
|
onRefreshReviewData
|
|
9456
9663
|
}
|
|
@@ -9519,7 +9726,7 @@ var ReviewQaPanel = ({
|
|
|
9519
9726
|
};
|
|
9520
9727
|
|
|
9521
9728
|
// src/react-shell/qa/use.review.qa.panel.data.ts
|
|
9522
|
-
var
|
|
9729
|
+
var import_react16 = require("react");
|
|
9523
9730
|
|
|
9524
9731
|
// src/core/review/scope.ts
|
|
9525
9732
|
var DEFAULT_REVIEW_VIEWPORTS = [
|
|
@@ -9910,11 +10117,11 @@ var useReviewQaPanelData = () => {
|
|
|
9910
10117
|
(state) => state.setQaStatusFilters
|
|
9911
10118
|
);
|
|
9912
10119
|
const { isRemoteSource } = useReviewShellAdapterState();
|
|
9913
|
-
const sitemapSourceItems = (0,
|
|
10120
|
+
const sitemapSourceItems = (0, import_react16.useMemo)(
|
|
9914
10121
|
() => isRemoteSource ? sitemapItems.remote : sitemapItems.local,
|
|
9915
10122
|
[isRemoteSource, sitemapItems]
|
|
9916
10123
|
);
|
|
9917
|
-
const activeItems = (0,
|
|
10124
|
+
const activeItems = (0, import_react16.useMemo)(
|
|
9918
10125
|
() => getActiveReviewItems({
|
|
9919
10126
|
activeRoute,
|
|
9920
10127
|
isAllQaVisible,
|
|
@@ -9924,23 +10131,23 @@ var useReviewQaPanelData = () => {
|
|
|
9924
10131
|
}),
|
|
9925
10132
|
[activeRoute, isAllQaVisible, items, reviewPathPrefix, sitemapSourceItems]
|
|
9926
10133
|
);
|
|
9927
|
-
const numberedActiveItems = (0,
|
|
10134
|
+
const numberedActiveItems = (0, import_react16.useMemo)(
|
|
9928
10135
|
() => getNumberedReviewItems(activeItems, reviewViewportPresets),
|
|
9929
10136
|
[activeItems, reviewViewportPresets]
|
|
9930
10137
|
);
|
|
9931
|
-
const scopeFilteredNumberedActiveItems = (0,
|
|
10138
|
+
const scopeFilteredNumberedActiveItems = (0, import_react16.useMemo)(
|
|
9932
10139
|
() => qaFilter === "all" ? numberedActiveItems : numberedActiveItems.filter(
|
|
9933
10140
|
(numberedItem) => numberedItem.scope === qaFilter
|
|
9934
10141
|
),
|
|
9935
10142
|
[numberedActiveItems, qaFilter]
|
|
9936
10143
|
);
|
|
9937
|
-
const filteredNumberedActiveItems = (0,
|
|
10144
|
+
const filteredNumberedActiveItems = (0, import_react16.useMemo)(
|
|
9938
10145
|
() => scopeFilteredNumberedActiveItems.filter(
|
|
9939
10146
|
(numberedItem) => matchesReviewQaStatusFilters(numberedItem.item.status, qaStatusFilters)
|
|
9940
10147
|
),
|
|
9941
10148
|
[qaStatusFilters, scopeFilteredNumberedActiveItems]
|
|
9942
10149
|
);
|
|
9943
|
-
const qaStatusFilterCounts = (0,
|
|
10150
|
+
const qaStatusFilterCounts = (0, import_react16.useMemo)(() => {
|
|
9944
10151
|
const counts = /* @__PURE__ */ new Map();
|
|
9945
10152
|
scopeFilteredNumberedActiveItems.forEach((numberedItem) => {
|
|
9946
10153
|
const status = normalizeReviewItemStatus(numberedItem.item.status);
|
|
@@ -9948,13 +10155,13 @@ var useReviewQaPanelData = () => {
|
|
|
9948
10155
|
});
|
|
9949
10156
|
return counts;
|
|
9950
10157
|
}, [scopeFilteredNumberedActiveItems]);
|
|
9951
|
-
const activeRemainingItemCount = (0,
|
|
10158
|
+
const activeRemainingItemCount = (0, import_react16.useMemo)(
|
|
9952
10159
|
() => activeItems.filter(
|
|
9953
10160
|
(item) => normalizeReviewItemStatus(item.status) !== SITEMAP_STATUS_DONE
|
|
9954
10161
|
).length,
|
|
9955
10162
|
[activeItems]
|
|
9956
10163
|
);
|
|
9957
|
-
const getItemPresetScope = (0,
|
|
10164
|
+
const getItemPresetScope = (0, import_react16.useCallback)(
|
|
9958
10165
|
(item) => getViewportPresetKind(
|
|
9959
10166
|
findViewportPreset(
|
|
9960
10167
|
viewportPresets,
|
|
@@ -9964,7 +10171,7 @@ var useReviewQaPanelData = () => {
|
|
|
9964
10171
|
),
|
|
9965
10172
|
[viewportPresets]
|
|
9966
10173
|
);
|
|
9967
|
-
const toggleQaStatusFilter = (0,
|
|
10174
|
+
const toggleQaStatusFilter = (0, import_react16.useCallback)(
|
|
9968
10175
|
(filter) => {
|
|
9969
10176
|
const normalizedFilters = normalizeReviewQaStatusFilters(qaStatusFilters);
|
|
9970
10177
|
const nextFilters = normalizedFilters.includes(filter) ? normalizedFilters.filter((item) => item !== filter) : [...normalizedFilters, filter];
|
|
@@ -9975,6 +10182,11 @@ var useReviewQaPanelData = () => {
|
|
|
9975
10182
|
},
|
|
9976
10183
|
[qaStatusFilters, setQaStatusFiltersState]
|
|
9977
10184
|
);
|
|
10185
|
+
const showActiveQaStatusFilters = (0, import_react16.useCallback)(() => {
|
|
10186
|
+
const defaultFilters = getDefaultReviewQaStatusFilters();
|
|
10187
|
+
setQaStatusFiltersState(defaultFilters);
|
|
10188
|
+
writeStoredReviewQaStatusFilters(defaultFilters);
|
|
10189
|
+
}, [setQaStatusFiltersState]);
|
|
9978
10190
|
const currentPresetScope = getViewportPresetKind(size);
|
|
9979
10191
|
return {
|
|
9980
10192
|
activeItems,
|
|
@@ -9983,6 +10195,7 @@ var useReviewQaPanelData = () => {
|
|
|
9983
10195
|
filteredNumberedActiveItems,
|
|
9984
10196
|
getItemPresetScope,
|
|
9985
10197
|
qaStatusFilterCounts,
|
|
10198
|
+
showActiveQaStatusFilters,
|
|
9986
10199
|
toggleQaStatusFilter
|
|
9987
10200
|
};
|
|
9988
10201
|
};
|
|
@@ -10027,6 +10240,7 @@ var QaPanelContainer = () => {
|
|
|
10027
10240
|
filteredNumberedActiveItems,
|
|
10028
10241
|
getItemPresetScope,
|
|
10029
10242
|
qaStatusFilterCounts,
|
|
10243
|
+
showActiveQaStatusFilters,
|
|
10030
10244
|
toggleQaStatusFilter
|
|
10031
10245
|
} = useReviewQaPanelData();
|
|
10032
10246
|
const {
|
|
@@ -10091,6 +10305,7 @@ var QaPanelContainer = () => {
|
|
|
10091
10305
|
onCopyItemPrompt: (numberedItem) => void copyItemPrompt(numberedItem),
|
|
10092
10306
|
onCopyRemoteIssuePath: copyRemoteIssuePath,
|
|
10093
10307
|
onEditItem: setEditingItem,
|
|
10308
|
+
onEnableActiveQaStatusFilters: showActiveQaStatusFilters,
|
|
10094
10309
|
onQaStatusFilterToggle: toggleQaStatusFilter,
|
|
10095
10310
|
onRefreshReviewData: refreshReviewData2,
|
|
10096
10311
|
onRemoveItem: removeItem,
|
|
@@ -10103,7 +10318,7 @@ var QaPanelContainer = () => {
|
|
|
10103
10318
|
};
|
|
10104
10319
|
|
|
10105
10320
|
// src/react-shell/hooks/use.review.section.outline.ts
|
|
10106
|
-
var
|
|
10321
|
+
var import_react18 = require("react");
|
|
10107
10322
|
|
|
10108
10323
|
// src/core/geometry.ts
|
|
10109
10324
|
function rectanglesIntersect(a, b) {
|
|
@@ -11095,7 +11310,7 @@ function encodePathForFileScheme(path) {
|
|
|
11095
11310
|
}
|
|
11096
11311
|
|
|
11097
11312
|
// src/react-shell/store/shell.refs.tsx
|
|
11098
|
-
var
|
|
11313
|
+
var import_react17 = require("react");
|
|
11099
11314
|
var createReviewShellRefs = () => ({
|
|
11100
11315
|
cleanupTargetRef: { current: null },
|
|
11101
11316
|
controllerRef: { current: null },
|
|
@@ -11104,10 +11319,10 @@ var createReviewShellRefs = () => ({
|
|
|
11104
11319
|
pendingInitialItemIdRef: { current: getInitialItemId() },
|
|
11105
11320
|
pendingRestoreRef: { current: null }
|
|
11106
11321
|
});
|
|
11107
|
-
var ReviewShellRefsContext = (0,
|
|
11322
|
+
var ReviewShellRefsContext = (0, import_react17.createContext)(null);
|
|
11108
11323
|
var ReviewShellRefsProvider = ReviewShellRefsContext.Provider;
|
|
11109
11324
|
var useReviewShellRefs = () => {
|
|
11110
|
-
const refs = (0,
|
|
11325
|
+
const refs = (0, import_react17.useContext)(ReviewShellRefsContext);
|
|
11111
11326
|
if (!refs) {
|
|
11112
11327
|
throw new Error(
|
|
11113
11328
|
"useReviewShellRefs must be used within a ReviewShell provider"
|
|
@@ -11135,19 +11350,19 @@ function useReviewSectionOutline({
|
|
|
11135
11350
|
const setMode = useReviewShellStore((state) => state.setMode);
|
|
11136
11351
|
const showToast = useReviewToast();
|
|
11137
11352
|
const isPanelVisible = isListVisible && sidePanel === "source";
|
|
11138
|
-
const targetSrc = (0,
|
|
11139
|
-
const sectionOutlineCountRef = (0,
|
|
11140
|
-
const [sectionOutline, setSectionOutline] = (0,
|
|
11141
|
-
const [sectionOutlineFilter, setSectionOutlineFilter] = (0,
|
|
11353
|
+
const targetSrc = (0, import_react18.useMemo)(() => buildTargetSrc(target), [target]);
|
|
11354
|
+
const sectionOutlineCountRef = (0, import_react18.useRef)(0);
|
|
11355
|
+
const [sectionOutline, setSectionOutline] = (0, import_react18.useState)(null);
|
|
11356
|
+
const [sectionOutlineFilter, setSectionOutlineFilter] = (0, import_react18.useState)(
|
|
11142
11357
|
() => getStoredSourceTreeFilter()
|
|
11143
11358
|
);
|
|
11144
|
-
const [sectionOutlineMetaVisibility, setSectionOutlineMetaVisibility] = (0,
|
|
11145
|
-
const [collapsedSectionOutlineIds, setCollapsedSectionOutlineIds] = (0,
|
|
11146
|
-
const updateSectionOutlineFilter = (0,
|
|
11359
|
+
const [sectionOutlineMetaVisibility, setSectionOutlineMetaVisibility] = (0, import_react18.useState)(() => getStoredSourceTreeMetaVisibility());
|
|
11360
|
+
const [collapsedSectionOutlineIds, setCollapsedSectionOutlineIds] = (0, import_react18.useState)(() => /* @__PURE__ */ new Set());
|
|
11361
|
+
const updateSectionOutlineFilter = (0, import_react18.useCallback)((nextFilter) => {
|
|
11147
11362
|
setSectionOutlineFilter(nextFilter);
|
|
11148
11363
|
writeStoredSourceTreeFilter(nextFilter);
|
|
11149
11364
|
}, []);
|
|
11150
|
-
const updateSectionOutlineMetaVisibility = (0,
|
|
11365
|
+
const updateSectionOutlineMetaVisibility = (0, import_react18.useCallback)(
|
|
11151
11366
|
(key) => {
|
|
11152
11367
|
setSectionOutlineMetaVisibility((current) => {
|
|
11153
11368
|
const next = { ...current, [key]: !current[key] };
|
|
@@ -11157,32 +11372,32 @@ function useReviewSectionOutline({
|
|
|
11157
11372
|
},
|
|
11158
11373
|
[]
|
|
11159
11374
|
);
|
|
11160
|
-
const sectionOutlineFilterTerms = (0,
|
|
11375
|
+
const sectionOutlineFilterTerms = (0, import_react18.useMemo)(
|
|
11161
11376
|
() => getSectionOutlineFilterTerms(sectionOutlineFilter),
|
|
11162
11377
|
[sectionOutlineFilter]
|
|
11163
11378
|
);
|
|
11164
|
-
const filteredSectionOutline = (0,
|
|
11379
|
+
const filteredSectionOutline = (0, import_react18.useMemo)(
|
|
11165
11380
|
() => sectionOutline ? filterSectionOutlineEntries(sectionOutline, sectionOutlineFilterTerms) : [],
|
|
11166
11381
|
[sectionOutline, sectionOutlineFilterTerms]
|
|
11167
11382
|
);
|
|
11168
|
-
const sectionOutlineTotalCount = (0,
|
|
11383
|
+
const sectionOutlineTotalCount = (0, import_react18.useMemo)(
|
|
11169
11384
|
() => getSectionOutlineEntryCount(sectionOutline ?? []),
|
|
11170
11385
|
[sectionOutline]
|
|
11171
11386
|
);
|
|
11172
|
-
const filteredSectionOutlineCount = (0,
|
|
11387
|
+
const filteredSectionOutlineCount = (0, import_react18.useMemo)(
|
|
11173
11388
|
() => getSectionOutlineEntryCount(filteredSectionOutline),
|
|
11174
11389
|
[filteredSectionOutline]
|
|
11175
11390
|
);
|
|
11176
11391
|
const isSectionOutlineFiltering = sectionOutlineFilterTerms.length > 0;
|
|
11177
|
-
(0,
|
|
11392
|
+
(0, import_react18.useEffect)(() => {
|
|
11178
11393
|
sectionOutlineCountRef.current = sectionOutlineTotalCount;
|
|
11179
11394
|
}, [sectionOutlineTotalCount]);
|
|
11180
|
-
(0,
|
|
11395
|
+
(0, import_react18.useEffect)(() => {
|
|
11181
11396
|
onClearSourceInspector();
|
|
11182
11397
|
setCollapsedSectionOutlineIds(/* @__PURE__ */ new Set());
|
|
11183
11398
|
setSectionOutline(null);
|
|
11184
11399
|
}, [onClearSourceInspector, targetSrc]);
|
|
11185
|
-
const getCurrentSectionOutline = (0,
|
|
11400
|
+
const getCurrentSectionOutline = (0, import_react18.useCallback)(
|
|
11186
11401
|
() => {
|
|
11187
11402
|
let frameDocument = null;
|
|
11188
11403
|
try {
|
|
@@ -11197,7 +11412,7 @@ function useReviewSectionOutline({
|
|
|
11197
11412
|
},
|
|
11198
11413
|
[iframeRef, sectionOutlineOptions]
|
|
11199
11414
|
);
|
|
11200
|
-
const refreshCurrentSectionOutline = (0,
|
|
11415
|
+
const refreshCurrentSectionOutline = (0, import_react18.useCallback)(
|
|
11201
11416
|
(resetCollapse = false) => {
|
|
11202
11417
|
const nextSectionOutline = getCurrentSectionOutline();
|
|
11203
11418
|
if (!nextSectionOutline) return false;
|
|
@@ -11214,7 +11429,7 @@ function useReviewSectionOutline({
|
|
|
11214
11429
|
},
|
|
11215
11430
|
[getCurrentSectionOutline]
|
|
11216
11431
|
);
|
|
11217
|
-
(0,
|
|
11432
|
+
(0, import_react18.useEffect)(() => {
|
|
11218
11433
|
if (!isPanelVisible) return void 0;
|
|
11219
11434
|
const refreshSectionOutline = () => {
|
|
11220
11435
|
refreshCurrentSectionOutline(true);
|
|
@@ -11235,7 +11450,7 @@ function useReviewSectionOutline({
|
|
|
11235
11450
|
targetFrameLoadVersion,
|
|
11236
11451
|
targetSrc
|
|
11237
11452
|
]);
|
|
11238
|
-
(0,
|
|
11453
|
+
(0, import_react18.useEffect)(() => {
|
|
11239
11454
|
if (!isPanelVisible) return void 0;
|
|
11240
11455
|
const frameDocument = iframeRef.current?.contentDocument;
|
|
11241
11456
|
const body = frameDocument?.body;
|
|
@@ -11262,7 +11477,7 @@ function useReviewSectionOutline({
|
|
|
11262
11477
|
targetFrameLoadVersion,
|
|
11263
11478
|
targetSrc
|
|
11264
11479
|
]);
|
|
11265
|
-
const toggleSectionOutlineEntry = (0,
|
|
11480
|
+
const toggleSectionOutlineEntry = (0, import_react18.useCallback)((entryId) => {
|
|
11266
11481
|
setCollapsedSectionOutlineIds((current) => {
|
|
11267
11482
|
const next = new Set(current);
|
|
11268
11483
|
if (next.has(entryId)) {
|
|
@@ -11273,7 +11488,7 @@ function useReviewSectionOutline({
|
|
|
11273
11488
|
return next;
|
|
11274
11489
|
});
|
|
11275
11490
|
}, []);
|
|
11276
|
-
const scrollToSection = (0,
|
|
11491
|
+
const scrollToSection = (0, import_react18.useCallback)((entry) => {
|
|
11277
11492
|
scrollElementInTarget(entry.element, "start");
|
|
11278
11493
|
centerFrameScrollOnElement(
|
|
11279
11494
|
frameScrollRef.current,
|
|
@@ -11281,7 +11496,7 @@ function useReviewSectionOutline({
|
|
|
11281
11496
|
entry.element
|
|
11282
11497
|
);
|
|
11283
11498
|
}, [frameScrollRef, iframeRef]);
|
|
11284
|
-
const openSectionSource = (0,
|
|
11499
|
+
const openSectionSource = (0, import_react18.useCallback)(
|
|
11285
11500
|
(entry) => {
|
|
11286
11501
|
const didOpen = openSourceInEditor(entry.source, {
|
|
11287
11502
|
...sourceOpenOptions,
|
|
@@ -11291,7 +11506,7 @@ function useReviewSectionOutline({
|
|
|
11291
11506
|
},
|
|
11292
11507
|
[showToast, sourceOpenOptions]
|
|
11293
11508
|
);
|
|
11294
|
-
const openSectionUsageSource = (0,
|
|
11509
|
+
const openSectionUsageSource = (0, import_react18.useCallback)(
|
|
11295
11510
|
(entry) => {
|
|
11296
11511
|
const didOpen = openSourceInEditor(
|
|
11297
11512
|
entry.metadata.usage?.source,
|
|
@@ -11301,14 +11516,14 @@ function useReviewSectionOutline({
|
|
|
11301
11516
|
},
|
|
11302
11517
|
[showToast, sourceOpenOptions]
|
|
11303
11518
|
);
|
|
11304
|
-
const openSectionData = (0,
|
|
11519
|
+
const openSectionData = (0, import_react18.useCallback)(
|
|
11305
11520
|
(entry) => {
|
|
11306
11521
|
const didOpen = openSourceInEditor(entry.data, sourceOpenOptions);
|
|
11307
11522
|
showToast(didOpen ? "Data opened" : "Data hint not found");
|
|
11308
11523
|
},
|
|
11309
11524
|
[showToast, sourceOpenOptions]
|
|
11310
11525
|
);
|
|
11311
|
-
const startSectionDomReview = (0,
|
|
11526
|
+
const startSectionDomReview = (0, import_react18.useCallback)(
|
|
11312
11527
|
(entry) => {
|
|
11313
11528
|
if (!canWriteDom) {
|
|
11314
11529
|
showToast("DOM QA unavailable");
|
|
@@ -11824,11 +12039,11 @@ var SectionOutlineContainer = () => {
|
|
|
11824
12039
|
};
|
|
11825
12040
|
|
|
11826
12041
|
// src/react-shell/presence/presence.context.tsx
|
|
11827
|
-
var
|
|
11828
|
-
var ReviewPresenceContext = (0,
|
|
12042
|
+
var import_react19 = require("react");
|
|
12043
|
+
var ReviewPresenceContext = (0, import_react19.createContext)(null);
|
|
11829
12044
|
var ReviewPresenceProvider = ReviewPresenceContext.Provider;
|
|
11830
12045
|
var useReviewPresenceState = () => {
|
|
11831
|
-
const state = (0,
|
|
12046
|
+
const state = (0, import_react19.useContext)(ReviewPresenceContext);
|
|
11832
12047
|
if (!state) {
|
|
11833
12048
|
throw new Error(
|
|
11834
12049
|
"useReviewPresenceState must be used within a ReviewPresence provider"
|
|
@@ -11873,7 +12088,7 @@ function FigmaRailIcon() {
|
|
|
11873
12088
|
}
|
|
11874
12089
|
|
|
11875
12090
|
// src/react-shell/presence/overlay.tsx
|
|
11876
|
-
var
|
|
12091
|
+
var import_react20 = require("react");
|
|
11877
12092
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
11878
12093
|
var getPresenceName = (user) => user.displayName || user.userId;
|
|
11879
12094
|
var PresenceUserIcon = () => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("svg", { "aria-hidden": "true", viewBox: "0 0 30 30", children: [
|
|
@@ -11902,7 +12117,7 @@ var PresenceOverlay = ({
|
|
|
11902
12117
|
presenceSessionId,
|
|
11903
12118
|
users
|
|
11904
12119
|
}) => {
|
|
11905
|
-
const [isExpanded, setIsExpanded] = (0,
|
|
12120
|
+
const [isExpanded, setIsExpanded] = (0, import_react20.useState)(false);
|
|
11906
12121
|
if (users.length === 0) return null;
|
|
11907
12122
|
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
11908
12123
|
"div",
|
|
@@ -12134,7 +12349,7 @@ var ReviewSideRailContainer = () => {
|
|
|
12134
12349
|
};
|
|
12135
12350
|
|
|
12136
12351
|
// src/react-shell/review/shell.frame.tsx
|
|
12137
|
-
var
|
|
12352
|
+
var import_react21 = require("react");
|
|
12138
12353
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
12139
12354
|
var getTooltipElements = (root) => Array.from(root.querySelectorAll("[data-review-tooltip]"));
|
|
12140
12355
|
var restoreNativeTooltipTitles = (root) => {
|
|
@@ -12168,8 +12383,8 @@ var ReviewShellFrame = ({
|
|
|
12168
12383
|
isListVisible,
|
|
12169
12384
|
slots
|
|
12170
12385
|
}) => {
|
|
12171
|
-
const rootRef = (0,
|
|
12172
|
-
(0,
|
|
12386
|
+
const rootRef = (0, import_react21.useRef)(null);
|
|
12387
|
+
(0, import_react21.useEffect)(() => {
|
|
12173
12388
|
const root = rootRef.current;
|
|
12174
12389
|
if (!root) return void 0;
|
|
12175
12390
|
syncNativeTooltipTitles(root, areTooltipsEnabled);
|
|
@@ -12208,11 +12423,11 @@ var ReviewShellFrame = ({
|
|
|
12208
12423
|
};
|
|
12209
12424
|
|
|
12210
12425
|
// src/react-shell/review/settings.context.tsx
|
|
12211
|
-
var
|
|
12212
|
-
var ReviewSettingsContext = (0,
|
|
12426
|
+
var import_react22 = require("react");
|
|
12427
|
+
var ReviewSettingsContext = (0, import_react22.createContext)(null);
|
|
12213
12428
|
var ReviewSettingsProvider = ReviewSettingsContext.Provider;
|
|
12214
12429
|
var useReviewSettingsState = () => {
|
|
12215
|
-
const state = (0,
|
|
12430
|
+
const state = (0, import_react22.useContext)(ReviewSettingsContext);
|
|
12216
12431
|
if (!state) {
|
|
12217
12432
|
throw new Error(
|
|
12218
12433
|
"useReviewSettingsState must be used within a ReviewSettings provider"
|
|
@@ -12240,7 +12455,7 @@ var ReviewShellFrameContainer = ({
|
|
|
12240
12455
|
};
|
|
12241
12456
|
|
|
12242
12457
|
// src/react-shell/review/shell.modals.container.tsx
|
|
12243
|
-
var
|
|
12458
|
+
var import_react25 = require("react");
|
|
12244
12459
|
|
|
12245
12460
|
// src/react-shell/review/modal.tsx
|
|
12246
12461
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
@@ -12643,7 +12858,7 @@ var ReviewSettingsModal = ({
|
|
|
12643
12858
|
};
|
|
12644
12859
|
|
|
12645
12860
|
// src/react-shell/sitemap/modal.tsx
|
|
12646
|
-
var
|
|
12861
|
+
var import_react23 = require("react");
|
|
12647
12862
|
|
|
12648
12863
|
// src/react-shell/sitemap/tree.ts
|
|
12649
12864
|
var WORKFLOW_STATUSES = [
|
|
@@ -12931,16 +13146,16 @@ var SitemapModal = ({
|
|
|
12931
13146
|
onSelectAllQa,
|
|
12932
13147
|
onSelectPage
|
|
12933
13148
|
}) => {
|
|
12934
|
-
const [sort, setSort] = (0,
|
|
13149
|
+
const [sort, setSort] = (0, import_react23.useState)({
|
|
12935
13150
|
key: "page",
|
|
12936
13151
|
direction: "asc"
|
|
12937
13152
|
});
|
|
12938
|
-
const [collapsedFolderHrefs, setCollapsedFolderHrefs] = (0,
|
|
13153
|
+
const [collapsedFolderHrefs, setCollapsedFolderHrefs] = (0, import_react23.useState)(
|
|
12939
13154
|
() => /* @__PURE__ */ new Set()
|
|
12940
13155
|
);
|
|
12941
|
-
const [searchQuery, setSearchQuery] = (0,
|
|
13156
|
+
const [searchQuery, setSearchQuery] = (0, import_react23.useState)("");
|
|
12942
13157
|
const trimmedSearchQuery = searchQuery.trim();
|
|
12943
|
-
const allQaUsers = (0,
|
|
13158
|
+
const allQaUsers = (0, import_react23.useMemo)(
|
|
12944
13159
|
() => mergePresenceUsers(Array.from(pagePresenceUsers.values()).flat()),
|
|
12945
13160
|
[pagePresenceUsers]
|
|
12946
13161
|
);
|
|
@@ -13195,7 +13410,7 @@ var SitemapRowContent = ({
|
|
|
13195
13410
|
] });
|
|
13196
13411
|
|
|
13197
13412
|
// src/react-shell/hooks/use.review.shell.data.ts
|
|
13198
|
-
var
|
|
13413
|
+
var import_react24 = require("react");
|
|
13199
13414
|
var SITEMAP_STATUS_DONE2 = "done";
|
|
13200
13415
|
var useReviewShellData = () => {
|
|
13201
13416
|
const { pages, reviewPathPrefix, reviewViewportPresets, viewportPresets } = useReviewShellConfig();
|
|
@@ -13210,18 +13425,18 @@ var useReviewShellData = () => {
|
|
|
13210
13425
|
const qaStatusFilters = useReviewShellStore((state) => state.qaStatusFilters);
|
|
13211
13426
|
const selectedItemId = useReviewShellStore((state) => state.selectedItemId);
|
|
13212
13427
|
const isAllQaVisible = useReviewShellStore((state) => state.isAllQaVisible);
|
|
13213
|
-
const targetSrc = (0,
|
|
13214
|
-
const pageTargets = (0,
|
|
13428
|
+
const targetSrc = (0, import_react24.useMemo)(() => buildTargetSrc(target), [target]);
|
|
13429
|
+
const pageTargets = (0, import_react24.useMemo)(
|
|
13215
13430
|
() => new Set(
|
|
13216
13431
|
pages.map((page) => normalizeTarget(page.href, reviewPathPrefix))
|
|
13217
13432
|
),
|
|
13218
13433
|
[pages, reviewPathPrefix]
|
|
13219
13434
|
);
|
|
13220
|
-
const sitemapSourceItems = (0,
|
|
13435
|
+
const sitemapSourceItems = (0, import_react24.useMemo)(
|
|
13221
13436
|
() => isRemoteSource ? sitemapItems.remote : sitemapItems.local,
|
|
13222
13437
|
[isRemoteSource, sitemapItems]
|
|
13223
13438
|
);
|
|
13224
|
-
const activeItems = (0,
|
|
13439
|
+
const activeItems = (0, import_react24.useMemo)(
|
|
13225
13440
|
() => getActiveReviewItems({
|
|
13226
13441
|
activeRoute,
|
|
13227
13442
|
isAllQaVisible,
|
|
@@ -13231,11 +13446,11 @@ var useReviewShellData = () => {
|
|
|
13231
13446
|
}),
|
|
13232
13447
|
[activeRoute, isAllQaVisible, items, reviewPathPrefix, sitemapSourceItems]
|
|
13233
13448
|
);
|
|
13234
|
-
const numberedActiveItems = (0,
|
|
13449
|
+
const numberedActiveItems = (0, import_react24.useMemo)(
|
|
13235
13450
|
() => getNumberedReviewItems(activeItems, reviewViewportPresets),
|
|
13236
13451
|
[activeItems, reviewViewportPresets]
|
|
13237
13452
|
);
|
|
13238
|
-
const hiddenOverlayItemIdList = (0,
|
|
13453
|
+
const hiddenOverlayItemIdList = (0, import_react24.useMemo)(
|
|
13239
13454
|
() => {
|
|
13240
13455
|
const nextHiddenItemIds = new Set(hiddenOverlayItemIds);
|
|
13241
13456
|
activeItems.forEach((item) => {
|
|
@@ -13247,7 +13462,7 @@ var useReviewShellData = () => {
|
|
|
13247
13462
|
},
|
|
13248
13463
|
[activeItems, hiddenOverlayItemIds, qaStatusFilters]
|
|
13249
13464
|
);
|
|
13250
|
-
const getItemPreset = (0,
|
|
13465
|
+
const getItemPreset = (0, import_react24.useCallback)(
|
|
13251
13466
|
(item) => findViewportPreset(
|
|
13252
13467
|
viewportPresets,
|
|
13253
13468
|
item.viewport?.width ?? 0,
|
|
@@ -13255,11 +13470,11 @@ var useReviewShellData = () => {
|
|
|
13255
13470
|
),
|
|
13256
13471
|
[viewportPresets]
|
|
13257
13472
|
);
|
|
13258
|
-
const getItemPresetScope = (0,
|
|
13473
|
+
const getItemPresetScope = (0, import_react24.useCallback)(
|
|
13259
13474
|
(item) => getViewportPresetKind(getItemPreset(item)),
|
|
13260
13475
|
[getItemPreset]
|
|
13261
13476
|
);
|
|
13262
|
-
const getItemPresetColumn = (0,
|
|
13477
|
+
const getItemPresetColumn = (0, import_react24.useCallback)(
|
|
13263
13478
|
(item) => {
|
|
13264
13479
|
const preset = getItemPreset(item);
|
|
13265
13480
|
const presetIndex = Math.max(0, viewportPresets.indexOf(preset));
|
|
@@ -13267,19 +13482,20 @@ var useReviewShellData = () => {
|
|
|
13267
13482
|
},
|
|
13268
13483
|
[getItemPreset, viewportPresets]
|
|
13269
13484
|
);
|
|
13270
|
-
const getItemCountScope = (0,
|
|
13485
|
+
const getItemCountScope = (0, import_react24.useCallback)(
|
|
13271
13486
|
(item) => item.scope === "dom" ? "dom" : getItemPresetScope(item),
|
|
13272
13487
|
[getItemPresetScope]
|
|
13273
13488
|
);
|
|
13274
|
-
const presetScopeCounts = (0,
|
|
13489
|
+
const presetScopeCounts = (0, import_react24.useMemo)(() => {
|
|
13275
13490
|
const counts = /* @__PURE__ */ new Map();
|
|
13276
13491
|
activeItems.forEach((item) => {
|
|
13492
|
+
if (normalizeReviewItemStatus(item.status) === SITEMAP_STATUS_DONE2) return;
|
|
13277
13493
|
const scope = getItemPresetScope(item);
|
|
13278
13494
|
counts.set(scope, (counts.get(scope) ?? 0) + 1);
|
|
13279
13495
|
});
|
|
13280
13496
|
return counts;
|
|
13281
13497
|
}, [activeItems, getItemPresetScope]);
|
|
13282
|
-
const pageQaCounts = (0,
|
|
13498
|
+
const pageQaCounts = (0, import_react24.useMemo)(() => {
|
|
13283
13499
|
const counts = /* @__PURE__ */ new Map();
|
|
13284
13500
|
const addItems = (sourceKey, sourceItems) => {
|
|
13285
13501
|
sourceItems.forEach((item) => {
|
|
@@ -13321,14 +13537,14 @@ var useReviewShellData = () => {
|
|
|
13321
13537
|
addItems("remote", sitemapItems.remote);
|
|
13322
13538
|
return counts;
|
|
13323
13539
|
}, [getItemCountScope, getItemPresetColumn, reviewPathPrefix, sitemapItems]);
|
|
13324
|
-
const allQaCount = (0,
|
|
13540
|
+
const allQaCount = (0, import_react24.useMemo)(
|
|
13325
13541
|
() => Array.from(pageQaCounts.values()).reduce(
|
|
13326
13542
|
addSitemapQaCounts,
|
|
13327
13543
|
createEmptySitemapQaCount()
|
|
13328
13544
|
),
|
|
13329
13545
|
[pageQaCounts]
|
|
13330
13546
|
);
|
|
13331
|
-
const selectedNumberedItem = (0,
|
|
13547
|
+
const selectedNumberedItem = (0, import_react24.useMemo)(
|
|
13332
13548
|
() => selectedItemId ? numberedActiveItems.find(
|
|
13333
13549
|
(numberedItem) => numberedItem.item.id === selectedItemId
|
|
13334
13550
|
) : void 0,
|
|
@@ -13406,7 +13622,7 @@ var ReviewShellModalsContainer = () => {
|
|
|
13406
13622
|
);
|
|
13407
13623
|
const showToast = useReviewToast();
|
|
13408
13624
|
const initialPromptText = initialPrompt.trim();
|
|
13409
|
-
const copyInitialPrompt = (0,
|
|
13625
|
+
const copyInitialPrompt = (0, import_react25.useCallback)(
|
|
13410
13626
|
(value, key) => copyReviewPrompt({
|
|
13411
13627
|
key,
|
|
13412
13628
|
value,
|
|
@@ -13466,11 +13682,11 @@ var ReviewShellModalsContainer = () => {
|
|
|
13466
13682
|
};
|
|
13467
13683
|
|
|
13468
13684
|
// src/react-shell/store/figma.overlay.context.tsx
|
|
13469
|
-
var
|
|
13470
|
-
var ReviewFigmaOverlayContext = (0,
|
|
13685
|
+
var import_react26 = require("react");
|
|
13686
|
+
var ReviewFigmaOverlayContext = (0, import_react26.createContext)(null);
|
|
13471
13687
|
var ReviewFigmaOverlayProvider = ReviewFigmaOverlayContext.Provider;
|
|
13472
13688
|
var useReviewFigmaOverlayState = () => {
|
|
13473
|
-
const state = (0,
|
|
13689
|
+
const state = (0, import_react26.useContext)(ReviewFigmaOverlayContext);
|
|
13474
13690
|
if (!state) {
|
|
13475
13691
|
throw new Error(
|
|
13476
13692
|
"useReviewFigmaOverlayState must be used within a ReviewFigmaOverlay provider"
|
|
@@ -13480,11 +13696,11 @@ var useReviewFigmaOverlayState = () => {
|
|
|
13480
13696
|
};
|
|
13481
13697
|
|
|
13482
13698
|
// src/react-shell/store/ruler.context.tsx
|
|
13483
|
-
var
|
|
13484
|
-
var ReviewRulerContext = (0,
|
|
13699
|
+
var import_react27 = require("react");
|
|
13700
|
+
var ReviewRulerContext = (0, import_react27.createContext)(null);
|
|
13485
13701
|
var ReviewRulerProvider = ReviewRulerContext.Provider;
|
|
13486
13702
|
var useReviewRulerState = () => {
|
|
13487
|
-
const state = (0,
|
|
13703
|
+
const state = (0, import_react27.useContext)(ReviewRulerContext);
|
|
13488
13704
|
if (!state) {
|
|
13489
13705
|
throw new Error(
|
|
13490
13706
|
"useReviewRulerState must be used within a ReviewRuler provider"
|
|
@@ -13494,11 +13710,11 @@ var useReviewRulerState = () => {
|
|
|
13494
13710
|
};
|
|
13495
13711
|
|
|
13496
13712
|
// src/react-shell/review/source.inspector.context.tsx
|
|
13497
|
-
var
|
|
13498
|
-
var ReviewSourceInspectorContext = (0,
|
|
13713
|
+
var import_react28 = require("react");
|
|
13714
|
+
var ReviewSourceInspectorContext = (0, import_react28.createContext)(null);
|
|
13499
13715
|
var ReviewSourceInspectorProvider = ReviewSourceInspectorContext.Provider;
|
|
13500
13716
|
var useReviewSourceInspectorState = () => {
|
|
13501
|
-
const state = (0,
|
|
13717
|
+
const state = (0, import_react28.useContext)(ReviewSourceInspectorContext);
|
|
13502
13718
|
if (!state) {
|
|
13503
13719
|
throw new Error(
|
|
13504
13720
|
"useReviewSourceInspectorState must be used within a ReviewSourceInspector provider"
|
|
@@ -13617,7 +13833,7 @@ var SourceInspectorOverlayContainer = () => {
|
|
|
13617
13833
|
};
|
|
13618
13834
|
|
|
13619
13835
|
// src/react-shell/target/frame.tsx
|
|
13620
|
-
var
|
|
13836
|
+
var import_react31 = require("react");
|
|
13621
13837
|
|
|
13622
13838
|
// src/react-shell/review/mode.toolbar.tsx
|
|
13623
13839
|
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
@@ -13796,7 +14012,7 @@ var RulerOverlay = () => {
|
|
|
13796
14012
|
};
|
|
13797
14013
|
|
|
13798
14014
|
// src/react-shell/target/figma.image.overlay.ts
|
|
13799
|
-
var
|
|
14015
|
+
var import_react29 = require("react");
|
|
13800
14016
|
|
|
13801
14017
|
// src/react-shell/target/target.ts
|
|
13802
14018
|
var HIDE_SCROLLBAR_STYLE_ID = "df-review-hide-scrollbar";
|
|
@@ -13986,11 +14202,11 @@ var useTargetFigmaImageOverlays = ({
|
|
|
13986
14202
|
size,
|
|
13987
14203
|
targetSrc
|
|
13988
14204
|
}) => {
|
|
13989
|
-
const targetDocumentRef = (0,
|
|
14205
|
+
const targetDocumentRef = (0, import_react29.useRef)(null);
|
|
13990
14206
|
const overlaySignature = createTargetFigmaImageOverlaySignature(
|
|
13991
14207
|
figmaImageOverlays
|
|
13992
14208
|
);
|
|
13993
|
-
const syncTargetFigmaImageOverlays = (0,
|
|
14209
|
+
const syncTargetFigmaImageOverlays = (0, import_react29.useCallback)(() => {
|
|
13994
14210
|
let targetDocument;
|
|
13995
14211
|
try {
|
|
13996
14212
|
targetDocument = iframeRef.current?.contentDocument;
|
|
@@ -14015,10 +14231,10 @@ var useTargetFigmaImageOverlays = ({
|
|
|
14015
14231
|
size,
|
|
14016
14232
|
targetSrc
|
|
14017
14233
|
]);
|
|
14018
|
-
(0,
|
|
14234
|
+
(0, import_react29.useEffect)(() => {
|
|
14019
14235
|
syncTargetFigmaImageOverlays();
|
|
14020
14236
|
}, [syncTargetFigmaImageOverlays]);
|
|
14021
|
-
(0,
|
|
14237
|
+
(0, import_react29.useEffect)(() => {
|
|
14022
14238
|
return () => {
|
|
14023
14239
|
if (!targetDocumentRef.current) return;
|
|
14024
14240
|
removeTargetFigmaImageOverlays(targetDocumentRef.current);
|
|
@@ -14228,7 +14444,7 @@ function normalizeTargetFigmaImageOffsetY(value) {
|
|
|
14228
14444
|
}
|
|
14229
14445
|
|
|
14230
14446
|
// src/react-shell/target/outside.markers.tsx
|
|
14231
|
-
var
|
|
14447
|
+
var import_react30 = require("react");
|
|
14232
14448
|
|
|
14233
14449
|
// src/core/dom.anchor.ts
|
|
14234
14450
|
var COMMON_ANCHOR_ATTRIBUTES = [
|
|
@@ -14958,6 +15174,66 @@ function isDomReviewItem(item) {
|
|
|
14958
15174
|
// src/react-shell/target/outside.markers.tsx
|
|
14959
15175
|
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
14960
15176
|
var OUTSIDE_MARKER_HEIGHT = 22;
|
|
15177
|
+
var OUTSIDE_MARKER_CONNECTOR_TOP = 10;
|
|
15178
|
+
var OUTSIDE_MARKER_GAP = 6;
|
|
15179
|
+
var OUTSIDE_MARKER_SPACING = OUTSIDE_MARKER_HEIGHT + OUTSIDE_MARKER_GAP;
|
|
15180
|
+
var clampMarkerTop = (top, maxTop) => Math.max(0, Math.min(maxTop, top));
|
|
15181
|
+
var toMarkerPixel = (value) => Math.round(value * 100) / 100;
|
|
15182
|
+
var arrangeOutsideMarkerLayout = (markers, viewportHeight) => {
|
|
15183
|
+
if (markers.length === 0) return [];
|
|
15184
|
+
const maxTop = Math.max(0, viewportHeight - OUTSIDE_MARKER_HEIGHT);
|
|
15185
|
+
const sorted = markers.map((marker, index) => ({
|
|
15186
|
+
marker,
|
|
15187
|
+
index,
|
|
15188
|
+
anchorTop: clampMarkerTop(marker.anchorTop, maxTop),
|
|
15189
|
+
top: clampMarkerTop(marker.anchorTop, maxTop)
|
|
15190
|
+
})).sort(
|
|
15191
|
+
(a, b) => a.anchorTop - b.anchorTop || a.index - b.index
|
|
15192
|
+
);
|
|
15193
|
+
for (let index = 1; index < sorted.length; index += 1) {
|
|
15194
|
+
sorted[index].top = Math.max(
|
|
15195
|
+
sorted[index].top,
|
|
15196
|
+
sorted[index - 1].top + OUTSIDE_MARKER_SPACING
|
|
15197
|
+
);
|
|
15198
|
+
}
|
|
15199
|
+
if (sorted[sorted.length - 1].top > maxTop) {
|
|
15200
|
+
sorted[sorted.length - 1].top = maxTop;
|
|
15201
|
+
for (let index = sorted.length - 2; index >= 0; index -= 1) {
|
|
15202
|
+
sorted[index].top = Math.min(
|
|
15203
|
+
sorted[index].top,
|
|
15204
|
+
sorted[index + 1].top - OUTSIDE_MARKER_SPACING
|
|
15205
|
+
);
|
|
15206
|
+
}
|
|
15207
|
+
}
|
|
15208
|
+
if (sorted[0].top < 0) {
|
|
15209
|
+
const spacing = sorted.length > 1 ? maxTop / (sorted.length - 1) : 0;
|
|
15210
|
+
sorted.forEach((marker, index) => {
|
|
15211
|
+
marker.top = index * spacing;
|
|
15212
|
+
});
|
|
15213
|
+
}
|
|
15214
|
+
return sorted.map(({ marker, index, anchorTop, top }) => {
|
|
15215
|
+
const safeTop = clampMarkerTop(top, maxTop);
|
|
15216
|
+
const connectorTop = anchorTop - safeTop + OUTSIDE_MARKER_CONNECTOR_TOP;
|
|
15217
|
+
const connectorStemTop = Math.min(
|
|
15218
|
+
OUTSIDE_MARKER_CONNECTOR_TOP,
|
|
15219
|
+
connectorTop
|
|
15220
|
+
);
|
|
15221
|
+
const connectorStemHeight = Math.abs(
|
|
15222
|
+
connectorTop - OUTSIDE_MARKER_CONNECTOR_TOP
|
|
15223
|
+
);
|
|
15224
|
+
return {
|
|
15225
|
+
index,
|
|
15226
|
+
marker: {
|
|
15227
|
+
...marker,
|
|
15228
|
+
anchorTop: toMarkerPixel(anchorTop),
|
|
15229
|
+
top: toMarkerPixel(safeTop),
|
|
15230
|
+
connectorTop: toMarkerPixel(connectorTop),
|
|
15231
|
+
connectorStemTop: toMarkerPixel(connectorStemTop),
|
|
15232
|
+
connectorStemHeight: toMarkerPixel(connectorStemHeight)
|
|
15233
|
+
}
|
|
15234
|
+
};
|
|
15235
|
+
}).sort((a, b) => a.index - b.index).map(({ marker }) => marker);
|
|
15236
|
+
};
|
|
14961
15237
|
var createTargetEnvironment = (iframe) => {
|
|
14962
15238
|
const targetWindow = iframe?.contentWindow;
|
|
14963
15239
|
const targetDocument = iframe?.contentDocument;
|
|
@@ -15010,9 +15286,9 @@ var ReviewOutsideMarkers = () => {
|
|
|
15010
15286
|
(state) => state.setIsListVisible
|
|
15011
15287
|
);
|
|
15012
15288
|
const setSidePanel = useReviewShellStore((state) => state.setSidePanel);
|
|
15013
|
-
const [layoutVersion, setLayoutVersion] = (0,
|
|
15014
|
-
const frameUpdateRef = (0,
|
|
15015
|
-
(0,
|
|
15289
|
+
const [layoutVersion, setLayoutVersion] = (0, import_react30.useState)(0);
|
|
15290
|
+
const frameUpdateRef = (0, import_react30.useRef)(null);
|
|
15291
|
+
(0, import_react30.useEffect)(() => {
|
|
15016
15292
|
const targetWindow = iframeRef.current?.contentWindow;
|
|
15017
15293
|
const frameScroll = frameScrollRef.current;
|
|
15018
15294
|
if (!targetWindow) return void 0;
|
|
@@ -15039,32 +15315,31 @@ var ReviewOutsideMarkers = () => {
|
|
|
15039
15315
|
frameScroll?.removeEventListener("scroll", scheduleUpdate);
|
|
15040
15316
|
};
|
|
15041
15317
|
}, [frameScrollRef, iframeRef, targetFrameLoadVersion]);
|
|
15042
|
-
const markers = (0,
|
|
15318
|
+
const markers = (0, import_react30.useMemo)(() => {
|
|
15043
15319
|
const environment = createTargetEnvironment(iframeRef.current);
|
|
15044
15320
|
if (!environment) return [];
|
|
15045
15321
|
const hiddenItemIds = new Set(hiddenOverlayItemIdList);
|
|
15046
15322
|
const currentScope = getReviewViewportScope(size, reviewViewportPresets);
|
|
15047
|
-
|
|
15048
|
-
|
|
15049
|
-
|
|
15050
|
-
|
|
15051
|
-
|
|
15052
|
-
|
|
15053
|
-
|
|
15054
|
-
|
|
15055
|
-
|
|
15056
|
-
|
|
15057
|
-
|
|
15058
|
-
|
|
15059
|
-
|
|
15060
|
-
|
|
15061
|
-
|
|
15062
|
-
|
|
15063
|
-
|
|
15064
|
-
|
|
15065
|
-
|
|
15066
|
-
|
|
15067
|
-
}
|
|
15323
|
+
const rawMarkers = getNumberedReviewItems(
|
|
15324
|
+
activeItems,
|
|
15325
|
+
reviewViewportPresets
|
|
15326
|
+
).flatMap((numberedItem) => {
|
|
15327
|
+
const { item, scope, displayLabel } = numberedItem;
|
|
15328
|
+
if (hiddenItemIds.has(item.id)) return [];
|
|
15329
|
+
if (!shouldShowMarkerForScope(scope, currentScope)) return [];
|
|
15330
|
+
const top = getOutsideMarkerTop(item, environment);
|
|
15331
|
+
if (typeof top !== "number") return [];
|
|
15332
|
+
const hostTop = toHostPoint({ x: 0, y: top }, environment).y;
|
|
15333
|
+
return {
|
|
15334
|
+
item,
|
|
15335
|
+
label: displayLabel,
|
|
15336
|
+
scope,
|
|
15337
|
+
anchorTop: hostTop
|
|
15338
|
+
};
|
|
15339
|
+
});
|
|
15340
|
+
return arrangeOutsideMarkerLayout(
|
|
15341
|
+
rawMarkers,
|
|
15342
|
+
environment.viewportRect.height
|
|
15068
15343
|
);
|
|
15069
15344
|
}, [
|
|
15070
15345
|
activeItems,
|
|
@@ -15075,24 +15350,34 @@ var ReviewOutsideMarkers = () => {
|
|
|
15075
15350
|
size
|
|
15076
15351
|
]);
|
|
15077
15352
|
if (markers.length === 0) return null;
|
|
15078
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "df-review-outside-marker-layer", "aria-label": "QA markers", children: markers.map((marker) =>
|
|
15079
|
-
|
|
15080
|
-
{
|
|
15081
|
-
|
|
15082
|
-
|
|
15083
|
-
|
|
15084
|
-
|
|
15085
|
-
|
|
15086
|
-
|
|
15087
|
-
|
|
15088
|
-
|
|
15089
|
-
|
|
15090
|
-
|
|
15353
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "df-review-outside-marker-layer", "aria-label": "QA markers", children: markers.map((marker) => {
|
|
15354
|
+
const isActive = marker.item.id === selectedItemId;
|
|
15355
|
+
const style = {
|
|
15356
|
+
top: `${marker.top}px`,
|
|
15357
|
+
"--df-review-outside-marker-connector-top": `${marker.connectorTop}px`,
|
|
15358
|
+
"--df-review-outside-marker-connector-stem-top": `${marker.connectorStemTop}px`,
|
|
15359
|
+
"--df-review-outside-marker-connector-stem-height": `${marker.connectorStemHeight}px`,
|
|
15360
|
+
"--df-review-outside-marker-z-index": isActive ? 2 : 1
|
|
15361
|
+
};
|
|
15362
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
15363
|
+
"button",
|
|
15364
|
+
{
|
|
15365
|
+
"aria-label": `Focus ${marker.label}`,
|
|
15366
|
+
className: `df-review-outside-marker is-scope-${marker.scope}${isActive ? " is-active" : ""}`,
|
|
15367
|
+
style,
|
|
15368
|
+
type: "button",
|
|
15369
|
+
onClick: (event) => {
|
|
15370
|
+
event.preventDefault();
|
|
15371
|
+
event.stopPropagation();
|
|
15372
|
+
setSidePanel("qa");
|
|
15373
|
+
setIsListVisible(true);
|
|
15374
|
+
restoreReviewItem(marker.item);
|
|
15375
|
+
},
|
|
15376
|
+
children: marker.label
|
|
15091
15377
|
},
|
|
15092
|
-
|
|
15093
|
-
|
|
15094
|
-
|
|
15095
|
-
)) });
|
|
15378
|
+
marker.item.id
|
|
15379
|
+
);
|
|
15380
|
+
}) });
|
|
15096
15381
|
};
|
|
15097
15382
|
|
|
15098
15383
|
// src/react-shell/target/frame.tsx
|
|
@@ -15109,7 +15394,7 @@ var ReviewTargetFrame = () => {
|
|
|
15109
15394
|
const mode = useReviewShellStore((state) => state.mode);
|
|
15110
15395
|
const size = useReviewShellStore((state) => state.size);
|
|
15111
15396
|
const target = useReviewShellStore((state) => state.target);
|
|
15112
|
-
const targetSrc = (0,
|
|
15397
|
+
const targetSrc = (0, import_react31.useMemo)(() => buildTargetSrc(target), [target]);
|
|
15113
15398
|
const showRuler = isRulerVisible && isRulerAvailable;
|
|
15114
15399
|
const syncTargetFigmaImageOverlays = useTargetFigmaImageOverlays({
|
|
15115
15400
|
figmaImageOverlays,
|
|
@@ -15174,7 +15459,7 @@ var ReviewTargetFrame = () => {
|
|
|
15174
15459
|
};
|
|
15175
15460
|
|
|
15176
15461
|
// src/react-shell/topbar.container.tsx
|
|
15177
|
-
var
|
|
15462
|
+
var import_react32 = require("react");
|
|
15178
15463
|
|
|
15179
15464
|
// src/react-shell/topbar.tsx
|
|
15180
15465
|
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
@@ -15417,7 +15702,7 @@ var TopbarContainer = () => {
|
|
|
15417
15702
|
(state) => state.setIsSitemapOpen
|
|
15418
15703
|
);
|
|
15419
15704
|
const setSize = useReviewShellStore((state) => state.setSize);
|
|
15420
|
-
const [copyLabel, setCopyLabel] = (0,
|
|
15705
|
+
const [copyLabel, setCopyLabel] = (0, import_react32.useState)("Copy URL");
|
|
15421
15706
|
const copyCurrentUrl = () => copyCurrentReviewUrl({
|
|
15422
15707
|
onCopyLabelChange: setCopyLabel
|
|
15423
15708
|
});
|
|
@@ -15456,10 +15741,10 @@ var ReviewToastContainer = () => {
|
|
|
15456
15741
|
};
|
|
15457
15742
|
|
|
15458
15743
|
// src/react-shell/hooks/use.review.shell.runtime.ts
|
|
15459
|
-
var
|
|
15744
|
+
var import_react55 = require("react");
|
|
15460
15745
|
|
|
15461
15746
|
// src/react-shell/hooks/use.review.command.key.ts
|
|
15462
|
-
var
|
|
15747
|
+
var import_react33 = require("react");
|
|
15463
15748
|
var isCommandModifierKeyEvent = (event) => event.key === "Meta" || event.code === "MetaLeft" || event.code === "MetaRight";
|
|
15464
15749
|
var isCommandKeyDownEvent = (event) => isCommandModifierKeyEvent(event) || event.metaKey;
|
|
15465
15750
|
function useReviewCommandKey({
|
|
@@ -15467,8 +15752,8 @@ function useReviewCommandKey({
|
|
|
15467
15752
|
targetFrameLoadVersion,
|
|
15468
15753
|
targetSrc
|
|
15469
15754
|
}) {
|
|
15470
|
-
const [isCommandKeyPressed, setIsCommandKeyPressed] = (0,
|
|
15471
|
-
(0,
|
|
15755
|
+
const [isCommandKeyPressed, setIsCommandKeyPressed] = (0, import_react33.useState)(false);
|
|
15756
|
+
(0, import_react33.useEffect)(() => {
|
|
15472
15757
|
const targetDocument = iframeRef.current?.contentDocument;
|
|
15473
15758
|
const targetWindow = iframeRef.current?.contentWindow;
|
|
15474
15759
|
const setCommandKeyPressed = (pressed) => {
|
|
@@ -15510,10 +15795,10 @@ function useReviewCommandKey({
|
|
|
15510
15795
|
}
|
|
15511
15796
|
|
|
15512
15797
|
// src/react-shell/hooks/use.review.controller.ts
|
|
15513
|
-
var
|
|
15798
|
+
var import_react38 = require("react");
|
|
15514
15799
|
|
|
15515
15800
|
// src/react-shell/hooks/use.review.item.restore.ts
|
|
15516
|
-
var
|
|
15801
|
+
var import_react34 = require("react");
|
|
15517
15802
|
function runWithAutoScrollBehavior2(targetDocument, callback) {
|
|
15518
15803
|
const elements = [
|
|
15519
15804
|
targetDocument?.documentElement,
|
|
@@ -15593,7 +15878,7 @@ var useReviewItemRestore = ({
|
|
|
15593
15878
|
onTargetChange
|
|
15594
15879
|
}) => {
|
|
15595
15880
|
const storeApi = useReviewShellStoreApi();
|
|
15596
|
-
const clearSelectedItem = (0,
|
|
15881
|
+
const clearSelectedItem = (0, import_react34.useCallback)(() => {
|
|
15597
15882
|
pendingRestoreRef.current = null;
|
|
15598
15883
|
onSelectedItemIdChange(null);
|
|
15599
15884
|
controllerRef.current?.highlightItem(void 0);
|
|
@@ -15602,7 +15887,7 @@ var useReviewItemRestore = ({
|
|
|
15602
15887
|
onSelectedItemIdChange,
|
|
15603
15888
|
pendingRestoreRef
|
|
15604
15889
|
]);
|
|
15605
|
-
const applyItemScroll = (0,
|
|
15890
|
+
const applyItemScroll = (0, import_react34.useCallback)(
|
|
15606
15891
|
async (item) => {
|
|
15607
15892
|
if (storeApi.getState().selectedItemId !== item.id) return false;
|
|
15608
15893
|
const targetWindow = iframeRef.current?.contentWindow;
|
|
@@ -15650,7 +15935,7 @@ var useReviewItemRestore = ({
|
|
|
15650
15935
|
},
|
|
15651
15936
|
[controllerRef, iframeRef, onSyncTargetViewport, storeApi]
|
|
15652
15937
|
);
|
|
15653
|
-
const applyPendingRestore = (0,
|
|
15938
|
+
const applyPendingRestore = (0, import_react34.useCallback)(() => {
|
|
15654
15939
|
const item = pendingRestoreRef.current;
|
|
15655
15940
|
if (!item) return;
|
|
15656
15941
|
void applyItemScroll(item).then((didApply) => {
|
|
@@ -15659,7 +15944,7 @@ var useReviewItemRestore = ({
|
|
|
15659
15944
|
}
|
|
15660
15945
|
});
|
|
15661
15946
|
}, [applyItemScroll, pendingRestoreRef]);
|
|
15662
|
-
const restoreReviewItem = (0,
|
|
15947
|
+
const restoreReviewItem = (0, import_react34.useCallback)(
|
|
15663
15948
|
(item) => {
|
|
15664
15949
|
const nextRoute = getItemTarget(item, reviewPathPrefix);
|
|
15665
15950
|
const nextTarget = getItemFrameTarget(item, reviewPathPrefix);
|
|
@@ -15692,7 +15977,7 @@ var useReviewItemRestore = ({
|
|
|
15692
15977
|
viewportPresets
|
|
15693
15978
|
]
|
|
15694
15979
|
);
|
|
15695
|
-
const restoreInitialItem = (0,
|
|
15980
|
+
const restoreInitialItem = (0, import_react34.useCallback)(async () => {
|
|
15696
15981
|
const itemId = pendingInitialItemIdRef.current;
|
|
15697
15982
|
if (!itemId) return;
|
|
15698
15983
|
try {
|
|
@@ -15724,7 +16009,7 @@ function highlightControllerItem(item, controller, isCurrent) {
|
|
|
15724
16009
|
}
|
|
15725
16010
|
|
|
15726
16011
|
// src/react-shell/hooks/use.review.kit.lifecycle.ts
|
|
15727
|
-
var
|
|
16012
|
+
var import_react35 = require("react");
|
|
15728
16013
|
|
|
15729
16014
|
// src/route.ts
|
|
15730
16015
|
function getItemRouteKey(item) {
|
|
@@ -20489,14 +20774,14 @@ var useReviewKitLifecycle = ({
|
|
|
20489
20774
|
onSyncTargetViewport
|
|
20490
20775
|
}) => {
|
|
20491
20776
|
const storeApi = useReviewShellStoreApi();
|
|
20492
|
-
const hiddenOverlayItemIdListRef = (0,
|
|
20493
|
-
const destroyReviewKit = (0,
|
|
20777
|
+
const hiddenOverlayItemIdListRef = (0, import_react35.useRef)(hiddenOverlayItemIdList);
|
|
20778
|
+
const destroyReviewKit = (0, import_react35.useCallback)(() => {
|
|
20494
20779
|
cleanupTargetRef.current?.();
|
|
20495
20780
|
cleanupTargetRef.current = null;
|
|
20496
20781
|
controllerRef.current?.destroy();
|
|
20497
20782
|
controllerRef.current = null;
|
|
20498
20783
|
}, [cleanupTargetRef, controllerRef]);
|
|
20499
|
-
const initReviewKit = (0,
|
|
20784
|
+
const initReviewKit = (0, import_react35.useCallback)(() => {
|
|
20500
20785
|
destroyReviewKit();
|
|
20501
20786
|
const iframe = iframeRef.current;
|
|
20502
20787
|
const targetWindow = iframe?.contentWindow;
|
|
@@ -20589,23 +20874,23 @@ var useReviewKitLifecycle = ({
|
|
|
20589
20874
|
adjustmentLabel,
|
|
20590
20875
|
storeApi
|
|
20591
20876
|
]);
|
|
20592
|
-
const reloadReviewKit = (0,
|
|
20877
|
+
const reloadReviewKit = (0, import_react35.useCallback)(async () => {
|
|
20593
20878
|
await controllerRef.current?.reload();
|
|
20594
20879
|
}, [controllerRef]);
|
|
20595
|
-
const setControllerReviewMode = (0,
|
|
20880
|
+
const setControllerReviewMode = (0, import_react35.useCallback)(
|
|
20596
20881
|
(nextMode) => {
|
|
20597
20882
|
controllerRef.current?.setMode(nextMode);
|
|
20598
20883
|
onModeChange(controllerRef.current?.getMode() ?? "idle");
|
|
20599
20884
|
},
|
|
20600
20885
|
[controllerRef, onModeChange]
|
|
20601
20886
|
);
|
|
20602
|
-
(0,
|
|
20603
|
-
(0,
|
|
20887
|
+
(0, import_react35.useEffect)(() => destroyReviewKit, [destroyReviewKit]);
|
|
20888
|
+
(0, import_react35.useEffect)(() => {
|
|
20604
20889
|
const frameDocument = iframeRef.current?.contentDocument;
|
|
20605
20890
|
if (!frameDocument || frameDocument.readyState !== "complete") return;
|
|
20606
20891
|
initReviewKit();
|
|
20607
20892
|
}, [iframeRef, initReviewKit]);
|
|
20608
|
-
(0,
|
|
20893
|
+
(0, import_react35.useEffect)(() => {
|
|
20609
20894
|
hiddenOverlayItemIdListRef.current = hiddenOverlayItemIdList;
|
|
20610
20895
|
controllerRef.current?.setHiddenItemIds(hiddenOverlayItemIdList);
|
|
20611
20896
|
}, [controllerRef, hiddenOverlayItemIdList]);
|
|
@@ -20618,7 +20903,7 @@ var useReviewKitLifecycle = ({
|
|
|
20618
20903
|
};
|
|
20619
20904
|
|
|
20620
20905
|
// src/react-shell/hooks/use.review.target.overlay.ts
|
|
20621
|
-
var
|
|
20906
|
+
var import_react36 = require("react");
|
|
20622
20907
|
var TARGET_OVERLAY_REFRESH_DELAYS = [80, 240, 600];
|
|
20623
20908
|
var useReviewTargetOverlay = ({
|
|
20624
20909
|
iframeRef,
|
|
@@ -20626,26 +20911,26 @@ var useReviewTargetOverlay = ({
|
|
|
20626
20911
|
targetOverlayState,
|
|
20627
20912
|
onTargetOverlayStateChange
|
|
20628
20913
|
}) => {
|
|
20629
|
-
const refreshTimersRef = (0,
|
|
20630
|
-
const clearRefreshTimers = (0,
|
|
20914
|
+
const refreshTimersRef = (0, import_react36.useRef)([]);
|
|
20915
|
+
const clearRefreshTimers = (0, import_react36.useCallback)(() => {
|
|
20631
20916
|
refreshTimersRef.current.forEach((timer) => window.clearTimeout(timer));
|
|
20632
20917
|
refreshTimersRef.current = [];
|
|
20633
20918
|
}, []);
|
|
20634
|
-
const updateTargetOverlayState = (0,
|
|
20919
|
+
const updateTargetOverlayState = (0, import_react36.useCallback)(() => {
|
|
20635
20920
|
const targetDocument = iframeRef.current?.contentDocument ?? void 0;
|
|
20636
20921
|
ensureTargetOverlayStackingStyle(targetDocument);
|
|
20637
20922
|
const state = getTargetOverlayState(targetDocument);
|
|
20638
20923
|
onTargetOverlayStateChange(state);
|
|
20639
20924
|
return state;
|
|
20640
20925
|
}, [iframeRef, onTargetOverlayStateChange]);
|
|
20641
|
-
const refreshTargetOverlayState = (0,
|
|
20926
|
+
const refreshTargetOverlayState = (0, import_react36.useCallback)(() => {
|
|
20642
20927
|
clearRefreshTimers();
|
|
20643
20928
|
updateTargetOverlayState();
|
|
20644
20929
|
refreshTimersRef.current = TARGET_OVERLAY_REFRESH_DELAYS.map(
|
|
20645
20930
|
(delay) => window.setTimeout(updateTargetOverlayState, delay)
|
|
20646
20931
|
);
|
|
20647
20932
|
}, [clearRefreshTimers, updateTargetOverlayState]);
|
|
20648
|
-
const dispatchTargetOverlayHotkey = (0,
|
|
20933
|
+
const dispatchTargetOverlayHotkey = (0, import_react36.useCallback)(
|
|
20649
20934
|
(overlay) => {
|
|
20650
20935
|
const targetWindow = iframeRef.current?.contentWindow;
|
|
20651
20936
|
if (!targetWindow) return false;
|
|
@@ -20667,7 +20952,7 @@ var useReviewTargetOverlay = ({
|
|
|
20667
20952
|
},
|
|
20668
20953
|
[iframeRef, refreshTargetOverlayState]
|
|
20669
20954
|
);
|
|
20670
|
-
const toggleTargetOverlay = (0,
|
|
20955
|
+
const toggleTargetOverlay = (0, import_react36.useCallback)(
|
|
20671
20956
|
(overlay) => {
|
|
20672
20957
|
if (overlay === "figma" && !isFigmaOverlayAvailable) {
|
|
20673
20958
|
refreshTargetOverlayState();
|
|
@@ -20681,7 +20966,7 @@ var useReviewTargetOverlay = ({
|
|
|
20681
20966
|
refreshTargetOverlayState
|
|
20682
20967
|
]
|
|
20683
20968
|
);
|
|
20684
|
-
const closeTargetOverlay = (0,
|
|
20969
|
+
const closeTargetOverlay = (0, import_react36.useCallback)(
|
|
20685
20970
|
(overlay) => {
|
|
20686
20971
|
const currentState = updateTargetOverlayState();
|
|
20687
20972
|
if (!currentState[overlay]) return false;
|
|
@@ -20689,11 +20974,11 @@ var useReviewTargetOverlay = ({
|
|
|
20689
20974
|
},
|
|
20690
20975
|
[dispatchTargetOverlayHotkey, updateTargetOverlayState]
|
|
20691
20976
|
);
|
|
20692
|
-
(0,
|
|
20977
|
+
(0, import_react36.useEffect)(() => {
|
|
20693
20978
|
if (isFigmaOverlayAvailable || !targetOverlayState.figma) return;
|
|
20694
20979
|
closeTargetOverlay("figma");
|
|
20695
20980
|
}, [closeTargetOverlay, isFigmaOverlayAvailable, targetOverlayState.figma]);
|
|
20696
|
-
(0,
|
|
20981
|
+
(0, import_react36.useEffect)(() => clearRefreshTimers, [clearRefreshTimers]);
|
|
20697
20982
|
return {
|
|
20698
20983
|
closeTargetOverlay,
|
|
20699
20984
|
refreshTargetOverlayState,
|
|
@@ -20702,7 +20987,7 @@ var useReviewTargetOverlay = ({
|
|
|
20702
20987
|
};
|
|
20703
20988
|
|
|
20704
20989
|
// src/react-shell/hooks/use.review.target.sync.ts
|
|
20705
|
-
var
|
|
20990
|
+
var import_react37 = require("react");
|
|
20706
20991
|
var useReviewTargetSync = ({
|
|
20707
20992
|
iframeRef,
|
|
20708
20993
|
reviewPathPrefix,
|
|
@@ -20716,7 +21001,7 @@ var useReviewTargetSync = ({
|
|
|
20716
21001
|
onTargetChange
|
|
20717
21002
|
}) => {
|
|
20718
21003
|
const storeApi = useReviewShellStoreApi();
|
|
20719
|
-
const syncShellTarget = (0,
|
|
21004
|
+
const syncShellTarget = (0, import_react37.useCallback)(
|
|
20720
21005
|
(nextTarget) => {
|
|
20721
21006
|
const normalizedTarget = normalizeTarget(nextTarget, reviewPathPrefix);
|
|
20722
21007
|
const nextRouteKey = getTargetRouteKey(
|
|
@@ -20751,10 +21036,10 @@ var useReviewTargetSync = ({
|
|
|
20751
21036
|
storeApi
|
|
20752
21037
|
]
|
|
20753
21038
|
);
|
|
20754
|
-
(0,
|
|
21039
|
+
(0, import_react37.useEffect)(() => {
|
|
20755
21040
|
onActiveRouteChange(getTargetRouteKey(target, reviewPathPrefix));
|
|
20756
21041
|
}, [onActiveRouteChange, reviewPathPrefix, target]);
|
|
20757
|
-
(0,
|
|
21042
|
+
(0, import_react37.useEffect)(() => {
|
|
20758
21043
|
const { target: currentTarget, selectedItemId } = storeApi.getState();
|
|
20759
21044
|
if (selectedItemId) {
|
|
20760
21045
|
updateShellUrlForItem(currentTarget, size, selectedItemId, source);
|
|
@@ -20825,10 +21110,10 @@ var useReviewController = ({
|
|
|
20825
21110
|
const setTargetOverlayState = useReviewShellStore(
|
|
20826
21111
|
(state) => state.setTargetOverlayState
|
|
20827
21112
|
);
|
|
20828
|
-
const syncTargetViewport = (0,
|
|
21113
|
+
const syncTargetViewport = (0, import_react38.useCallback)(() => {
|
|
20829
21114
|
window.dispatchEvent(new Event("resize"));
|
|
20830
21115
|
}, []);
|
|
20831
|
-
const pageTargets = (0,
|
|
21116
|
+
const pageTargets = (0, import_react38.useMemo)(
|
|
20832
21117
|
() => new Set(
|
|
20833
21118
|
pages.map((page) => normalizeTarget(page.href, reviewPathPrefix))
|
|
20834
21119
|
),
|
|
@@ -20923,10 +21208,10 @@ var useReviewController = ({
|
|
|
20923
21208
|
};
|
|
20924
21209
|
|
|
20925
21210
|
// src/react-shell/hooks/use.review.ruler.ts
|
|
20926
|
-
var
|
|
21211
|
+
var import_react40 = require("react");
|
|
20927
21212
|
|
|
20928
21213
|
// src/react-shell/hooks/use.review.ruler.drag.ts
|
|
20929
|
-
var
|
|
21214
|
+
var import_react39 = require("react");
|
|
20930
21215
|
|
|
20931
21216
|
// src/react-shell/ruler/ruler.ts
|
|
20932
21217
|
var getRulerPointFromRect = (clientX, clientY, rect) => {
|
|
@@ -20955,19 +21240,19 @@ var useReviewRulerDrag = ({
|
|
|
20955
21240
|
size,
|
|
20956
21241
|
targetSrc
|
|
20957
21242
|
}) => {
|
|
20958
|
-
const rulerOverlayRef = (0,
|
|
20959
|
-
const rulerDragRectRef = (0,
|
|
20960
|
-
const isRulerDraggingRef = (0,
|
|
20961
|
-
const sizeRef = (0,
|
|
20962
|
-
const [rulerStart, setRulerStart] = (0,
|
|
20963
|
-
const [rulerPoint, setRulerPoint] = (0,
|
|
20964
|
-
const [rulerHover, setRulerHover] = (0,
|
|
20965
|
-
const [isRulerDragging, setIsRulerDragging] = (0,
|
|
20966
|
-
const rulerMeasure = (0,
|
|
21243
|
+
const rulerOverlayRef = (0, import_react39.useRef)(null);
|
|
21244
|
+
const rulerDragRectRef = (0, import_react39.useRef)(null);
|
|
21245
|
+
const isRulerDraggingRef = (0, import_react39.useRef)(false);
|
|
21246
|
+
const sizeRef = (0, import_react39.useRef)(size);
|
|
21247
|
+
const [rulerStart, setRulerStart] = (0, import_react39.useState)(null);
|
|
21248
|
+
const [rulerPoint, setRulerPoint] = (0, import_react39.useState)(null);
|
|
21249
|
+
const [rulerHover, setRulerHover] = (0, import_react39.useState)(null);
|
|
21250
|
+
const [isRulerDragging, setIsRulerDragging] = (0, import_react39.useState)(false);
|
|
21251
|
+
const rulerMeasure = (0, import_react39.useMemo)(
|
|
20967
21252
|
() => getRulerMeasure(rulerStart, rulerPoint),
|
|
20968
21253
|
[rulerPoint, rulerStart]
|
|
20969
21254
|
);
|
|
20970
|
-
const clearRulerMeasure = (0,
|
|
21255
|
+
const clearRulerMeasure = (0, import_react39.useCallback)(() => {
|
|
20971
21256
|
rulerDragRectRef.current = null;
|
|
20972
21257
|
isRulerDraggingRef.current = false;
|
|
20973
21258
|
setRulerStart(null);
|
|
@@ -20975,7 +21260,7 @@ var useReviewRulerDrag = ({
|
|
|
20975
21260
|
setRulerHover(null);
|
|
20976
21261
|
setIsRulerDragging(false);
|
|
20977
21262
|
}, []);
|
|
20978
|
-
const finishRulerDrag = (0,
|
|
21263
|
+
const finishRulerDrag = (0, import_react39.useCallback)((point) => {
|
|
20979
21264
|
if (point) {
|
|
20980
21265
|
setRulerPoint(point);
|
|
20981
21266
|
}
|
|
@@ -20983,7 +21268,7 @@ var useReviewRulerDrag = ({
|
|
|
20983
21268
|
isRulerDraggingRef.current = false;
|
|
20984
21269
|
setIsRulerDragging(false);
|
|
20985
21270
|
}, []);
|
|
20986
|
-
const startRulerDrag = (0,
|
|
21271
|
+
const startRulerDrag = (0, import_react39.useCallback)(
|
|
20987
21272
|
(clientX, clientY, rect) => {
|
|
20988
21273
|
const point = getRulerPointFromRect(clientX, clientY, rect);
|
|
20989
21274
|
rulerDragRectRef.current = rect;
|
|
@@ -20994,10 +21279,10 @@ var useReviewRulerDrag = ({
|
|
|
20994
21279
|
},
|
|
20995
21280
|
[]
|
|
20996
21281
|
);
|
|
20997
|
-
(0,
|
|
21282
|
+
(0, import_react39.useEffect)(() => {
|
|
20998
21283
|
sizeRef.current = size;
|
|
20999
21284
|
}, [size]);
|
|
21000
|
-
(0,
|
|
21285
|
+
(0, import_react39.useEffect)(() => {
|
|
21001
21286
|
if (!isRulerVisible || !isRulerAvailable) return void 0;
|
|
21002
21287
|
const getRulerEventClientPoint = (event) => {
|
|
21003
21288
|
const frame2 = iframeRef.current;
|
|
@@ -21111,7 +21396,7 @@ var useReviewRulerDrag = ({
|
|
|
21111
21396
|
isRulerVisible,
|
|
21112
21397
|
startRulerDrag
|
|
21113
21398
|
]);
|
|
21114
|
-
(0,
|
|
21399
|
+
(0, import_react39.useEffect)(() => {
|
|
21115
21400
|
clearRulerMeasure();
|
|
21116
21401
|
}, [clearRulerMeasure, size.height, size.width, targetSrc]);
|
|
21117
21402
|
return {
|
|
@@ -21132,7 +21417,7 @@ var useReviewRuler = ({
|
|
|
21132
21417
|
onCancelReviewMode,
|
|
21133
21418
|
onCloseTransientPanels
|
|
21134
21419
|
}) => {
|
|
21135
|
-
const [isRulerVisible, setIsRulerVisible] = (0,
|
|
21420
|
+
const [isRulerVisible, setIsRulerVisible] = (0, import_react40.useState)(false);
|
|
21136
21421
|
const isRulerAvailable = ruler?.enabled !== false && typeof size.designWidth === "number" && size.designWidth > 0;
|
|
21137
21422
|
const rulerUnit = ruler?.unit ?? "px";
|
|
21138
21423
|
const rulerScaleX = isRulerAvailable && size.designWidth ? size.width / size.designWidth : 1;
|
|
@@ -21153,13 +21438,13 @@ var useReviewRuler = ({
|
|
|
21153
21438
|
const rulerMeasureLabel = rulerMeasure ? `${Math.round(rulerMeasure.width / rulerScaleX)} \xD7 ${Math.round(
|
|
21154
21439
|
rulerMeasure.height / rulerScaleY
|
|
21155
21440
|
)} ${rulerUnit}` : "";
|
|
21156
|
-
const closeRuler = (0,
|
|
21441
|
+
const closeRuler = (0, import_react40.useCallback)(() => {
|
|
21157
21442
|
if (!isRulerVisible) return false;
|
|
21158
21443
|
setIsRulerVisible(false);
|
|
21159
21444
|
clearRulerMeasure();
|
|
21160
21445
|
return true;
|
|
21161
21446
|
}, [clearRulerMeasure, isRulerVisible]);
|
|
21162
|
-
const toggleRuler = (0,
|
|
21447
|
+
const toggleRuler = (0, import_react40.useCallback)(() => {
|
|
21163
21448
|
if (!isRulerAvailable) return;
|
|
21164
21449
|
onCancelReviewMode();
|
|
21165
21450
|
onCloseTransientPanels();
|
|
@@ -21171,7 +21456,7 @@ var useReviewRuler = ({
|
|
|
21171
21456
|
onCancelReviewMode,
|
|
21172
21457
|
onCloseTransientPanels
|
|
21173
21458
|
]);
|
|
21174
|
-
(0,
|
|
21459
|
+
(0, import_react40.useEffect)(() => {
|
|
21175
21460
|
if (!isRulerVisible || isRulerAvailable) return;
|
|
21176
21461
|
closeRuler();
|
|
21177
21462
|
}, [closeRuler, isRulerAvailable, isRulerVisible]);
|
|
@@ -21192,7 +21477,7 @@ var useReviewRuler = ({
|
|
|
21192
21477
|
};
|
|
21193
21478
|
|
|
21194
21479
|
// src/react-shell/hooks/use.review.shell.actions.value.ts
|
|
21195
|
-
var
|
|
21480
|
+
var import_react41 = require("react");
|
|
21196
21481
|
var useReviewShellActionsValue = ({
|
|
21197
21482
|
applyTarget,
|
|
21198
21483
|
changeReviewSource,
|
|
@@ -21215,7 +21500,7 @@ var useReviewShellActionsValue = ({
|
|
|
21215
21500
|
toggleQaPanel,
|
|
21216
21501
|
toggleSourceTreePanel,
|
|
21217
21502
|
toggleTargetOverlay
|
|
21218
|
-
}) => (0,
|
|
21503
|
+
}) => (0, import_react41.useMemo)(
|
|
21219
21504
|
() => ({
|
|
21220
21505
|
applyTarget: () => {
|
|
21221
21506
|
void applyTarget();
|
|
@@ -21267,7 +21552,7 @@ var useReviewShellActionsValue = ({
|
|
|
21267
21552
|
);
|
|
21268
21553
|
|
|
21269
21554
|
// src/react-shell/hooks/use.review.shell.effects.ts
|
|
21270
|
-
var
|
|
21555
|
+
var import_react42 = require("react");
|
|
21271
21556
|
var useReviewShellEffects = ({
|
|
21272
21557
|
frameScrollRef,
|
|
21273
21558
|
iframeRef,
|
|
@@ -21280,7 +21565,7 @@ var useReviewShellEffects = ({
|
|
|
21280
21565
|
syncTargetViewport,
|
|
21281
21566
|
targetSrc
|
|
21282
21567
|
}) => {
|
|
21283
|
-
(0,
|
|
21568
|
+
(0, import_react42.useEffect)(() => {
|
|
21284
21569
|
const itemId = pendingInitialItemIdRef.current;
|
|
21285
21570
|
if (!itemId) return;
|
|
21286
21571
|
const item = items.find(
|
|
@@ -21289,7 +21574,7 @@ var useReviewShellEffects = ({
|
|
|
21289
21574
|
if (!item) return;
|
|
21290
21575
|
restoreReviewItem(item);
|
|
21291
21576
|
}, [items, pendingInitialItemIdRef, restoreReviewItem]);
|
|
21292
|
-
(0,
|
|
21577
|
+
(0, import_react42.useEffect)(() => {
|
|
21293
21578
|
const frameScroll = frameScrollRef.current;
|
|
21294
21579
|
if (!frameScroll) return void 0;
|
|
21295
21580
|
const centerFrameScroll = () => {
|
|
@@ -21314,7 +21599,7 @@ var useReviewShellEffects = ({
|
|
|
21314
21599
|
syncTargetViewport,
|
|
21315
21600
|
targetSrc
|
|
21316
21601
|
]);
|
|
21317
|
-
(0,
|
|
21602
|
+
(0, import_react42.useEffect)(() => {
|
|
21318
21603
|
const targetDocument = iframeRef.current?.contentDocument;
|
|
21319
21604
|
setTargetFigmaOverlayLocked(targetDocument, mode === "element");
|
|
21320
21605
|
return () => {
|
|
@@ -21348,7 +21633,7 @@ function normalizeFigmaNodeValue(value) {
|
|
|
21348
21633
|
}
|
|
21349
21634
|
|
|
21350
21635
|
// src/react-shell/hooks/use.review.figma.images.ts
|
|
21351
|
-
var
|
|
21636
|
+
var import_react43 = require("react");
|
|
21352
21637
|
var useReviewFigmaImages = ({
|
|
21353
21638
|
imageFormat = DEFAULT_REVIEW_FIGMA_IMAGE_FORMAT,
|
|
21354
21639
|
pageUrl,
|
|
@@ -21356,7 +21641,7 @@ var useReviewFigmaImages = ({
|
|
|
21356
21641
|
store,
|
|
21357
21642
|
viewport
|
|
21358
21643
|
}) => {
|
|
21359
|
-
const target = (0,
|
|
21644
|
+
const target = (0, import_react43.useMemo)(
|
|
21360
21645
|
() => createReviewFigmaRouteTarget({
|
|
21361
21646
|
pageUrl,
|
|
21362
21647
|
projectId,
|
|
@@ -21419,7 +21704,7 @@ var useReviewFigmaImages = ({
|
|
|
21419
21704
|
isLoading,
|
|
21420
21705
|
target
|
|
21421
21706
|
});
|
|
21422
|
-
const addImage = (0,
|
|
21707
|
+
const addImage = (0, import_react43.useCallback)(
|
|
21423
21708
|
async (figmaUrl, label) => {
|
|
21424
21709
|
const image = await addStoreImage(figmaUrl, label);
|
|
21425
21710
|
if (image) showImage(image.id);
|
|
@@ -21500,14 +21785,14 @@ var useReviewShellFigmaImages = ({
|
|
|
21500
21785
|
};
|
|
21501
21786
|
|
|
21502
21787
|
// src/react-shell/hooks/use.review.shell.figma.overlay.ts
|
|
21503
|
-
var
|
|
21788
|
+
var import_react44 = require("react");
|
|
21504
21789
|
var useReviewShellFigmaOverlay = ({
|
|
21505
21790
|
figmaImagesController,
|
|
21506
21791
|
isFigmaImageManagementEnabled,
|
|
21507
21792
|
isFigmaOverlayAvailable,
|
|
21508
21793
|
isTargetFigmaOverlayActive,
|
|
21509
21794
|
onToggleTargetOverlay
|
|
21510
|
-
}) => (0,
|
|
21795
|
+
}) => (0, import_react44.useMemo)(
|
|
21511
21796
|
() => ({
|
|
21512
21797
|
figmaOverlayUnavailableMessage: isFigmaImageManagementEnabled ? "No Figma images on this viewport." : void 0,
|
|
21513
21798
|
isFigmaOverlayActive: isFigmaImageManagementEnabled ? figmaImagesController.isAnyImageOverlayVisible : isTargetFigmaOverlayActive,
|
|
@@ -21526,10 +21811,10 @@ var useReviewShellFigmaOverlay = ({
|
|
|
21526
21811
|
);
|
|
21527
21812
|
|
|
21528
21813
|
// src/react-shell/hooks/use.review.shell.presence.state.ts
|
|
21529
|
-
var
|
|
21814
|
+
var import_react46 = require("react");
|
|
21530
21815
|
|
|
21531
21816
|
// src/react-shell/hooks/use.review.presence.ts
|
|
21532
|
-
var
|
|
21817
|
+
var import_react45 = require("react");
|
|
21533
21818
|
|
|
21534
21819
|
// src/react-shell/presence/presence.ts
|
|
21535
21820
|
var REVIEW_PRESENCE_SESSION_KEY = "df-review-presence-session-id";
|
|
@@ -21744,10 +22029,10 @@ var useReviewPresence = ({
|
|
|
21744
22029
|
size,
|
|
21745
22030
|
source
|
|
21746
22031
|
}) => {
|
|
21747
|
-
const presenceSessionRef = (0,
|
|
21748
|
-
const [presenceUsers, setPresenceUsers] = (0,
|
|
21749
|
-
const [presenceSessionVersion, setPresenceSessionVersion] = (0,
|
|
21750
|
-
const presenceSessionId = (0,
|
|
22032
|
+
const presenceSessionRef = (0, import_react45.useRef)(null);
|
|
22033
|
+
const [presenceUsers, setPresenceUsers] = (0, import_react45.useState)([]);
|
|
22034
|
+
const [presenceSessionVersion, setPresenceSessionVersion] = (0, import_react45.useState)(0);
|
|
22035
|
+
const presenceSessionId = (0, import_react45.useMemo)(getReviewPresenceSessionId, []);
|
|
21751
22036
|
const normalizedReviewUserId = reviewUserId.trim();
|
|
21752
22037
|
const presenceDisplayName = getReviewPresenceDisplayName(
|
|
21753
22038
|
normalizedReviewUserId
|
|
@@ -21755,7 +22040,7 @@ var useReviewPresence = ({
|
|
|
21755
22040
|
const presenceColor = getReviewPresenceColor(
|
|
21756
22041
|
normalizedReviewUserId || presenceSessionId
|
|
21757
22042
|
);
|
|
21758
|
-
const presenceViewport = (0,
|
|
22043
|
+
const presenceViewport = (0, import_react45.useMemo)(
|
|
21759
22044
|
() => ({
|
|
21760
22045
|
label: size.label,
|
|
21761
22046
|
width: size.width,
|
|
@@ -21765,7 +22050,7 @@ var useReviewPresence = ({
|
|
|
21765
22050
|
[size]
|
|
21766
22051
|
);
|
|
21767
22052
|
const presenceStatus = mode === "idle" ? "reviewing" : "editing";
|
|
21768
|
-
const visiblePresenceUsers = (0,
|
|
22053
|
+
const visiblePresenceUsers = (0, import_react45.useMemo)(
|
|
21769
22054
|
() => {
|
|
21770
22055
|
const projectPresenceUsers = presenceUsers.filter(
|
|
21771
22056
|
(user) => user.projectId === projectId && user.userId.trim()
|
|
@@ -21777,14 +22062,14 @@ var useReviewPresence = ({
|
|
|
21777
22062
|
},
|
|
21778
22063
|
[presenceUsers, projectId, reviewPathPrefix]
|
|
21779
22064
|
);
|
|
21780
|
-
const currentPagePresenceUsers = (0,
|
|
22065
|
+
const currentPagePresenceUsers = (0, import_react45.useMemo)(
|
|
21781
22066
|
() => visiblePresenceUsers.filter((user) => {
|
|
21782
22067
|
const userTarget = getPresenceUserTarget(user, reviewPathPrefix);
|
|
21783
22068
|
return userTarget === activeRoute;
|
|
21784
22069
|
}),
|
|
21785
22070
|
[activeRoute, reviewPathPrefix, visiblePresenceUsers]
|
|
21786
22071
|
);
|
|
21787
|
-
const pagePresenceUsers = (0,
|
|
22072
|
+
const pagePresenceUsers = (0, import_react45.useMemo)(() => {
|
|
21788
22073
|
const usersByTarget = /* @__PURE__ */ new Map();
|
|
21789
22074
|
visiblePresenceUsers.forEach((user) => {
|
|
21790
22075
|
const userTarget = getPresenceUserTarget(user, reviewPathPrefix);
|
|
@@ -21794,7 +22079,7 @@ var useReviewPresence = ({
|
|
|
21794
22079
|
});
|
|
21795
22080
|
return usersByTarget;
|
|
21796
22081
|
}, [reviewPathPrefix, visiblePresenceUsers]);
|
|
21797
|
-
const getCurrentPresenceState = (0,
|
|
22082
|
+
const getCurrentPresenceState = (0, import_react45.useCallback)(
|
|
21798
22083
|
() => ({
|
|
21799
22084
|
projectId,
|
|
21800
22085
|
sessionId: presenceSessionId,
|
|
@@ -21825,9 +22110,9 @@ var useReviewPresence = ({
|
|
|
21825
22110
|
source
|
|
21826
22111
|
]
|
|
21827
22112
|
);
|
|
21828
|
-
const getCurrentPresenceStateRef = (0,
|
|
22113
|
+
const getCurrentPresenceStateRef = (0, import_react45.useRef)(getCurrentPresenceState);
|
|
21829
22114
|
getCurrentPresenceStateRef.current = getCurrentPresenceState;
|
|
21830
|
-
(0,
|
|
22115
|
+
(0, import_react45.useEffect)(() => {
|
|
21831
22116
|
if (!presence || !normalizedReviewUserId) {
|
|
21832
22117
|
const session = presenceSessionRef.current;
|
|
21833
22118
|
presenceSessionRef.current = null;
|
|
@@ -21877,7 +22162,7 @@ var useReviewPresence = ({
|
|
|
21877
22162
|
presenceSessionId,
|
|
21878
22163
|
projectId
|
|
21879
22164
|
]);
|
|
21880
|
-
(0,
|
|
22165
|
+
(0, import_react45.useEffect)(() => {
|
|
21881
22166
|
const session = presenceSessionRef.current;
|
|
21882
22167
|
if (!session || !normalizedReviewUserId) return;
|
|
21883
22168
|
void session.update(getCurrentPresenceState());
|
|
@@ -21920,7 +22205,7 @@ var useReviewShellPresenceState = ({
|
|
|
21920
22205
|
size,
|
|
21921
22206
|
source
|
|
21922
22207
|
});
|
|
21923
|
-
return (0,
|
|
22208
|
+
return (0, import_react46.useMemo)(
|
|
21924
22209
|
() => ({
|
|
21925
22210
|
currentPagePresenceUsers,
|
|
21926
22211
|
pagePresenceUsers,
|
|
@@ -21935,7 +22220,7 @@ var useReviewShellPresenceState = ({
|
|
|
21935
22220
|
};
|
|
21936
22221
|
|
|
21937
22222
|
// src/react-shell/hooks/use.review.settings.ts
|
|
21938
|
-
var
|
|
22223
|
+
var import_react47 = require("react");
|
|
21939
22224
|
var useReviewSettings = ({
|
|
21940
22225
|
defaultReviewUserId = "",
|
|
21941
22226
|
onCancelReviewMode,
|
|
@@ -21943,34 +22228,34 @@ var useReviewSettings = ({
|
|
|
21943
22228
|
onCloseSitemap,
|
|
21944
22229
|
onReloadTargetFrame
|
|
21945
22230
|
}) => {
|
|
21946
|
-
const [figmaTokenDraft, setFigmaTokenDraft] = (0,
|
|
21947
|
-
const [reviewUserId, setReviewUserId] = (0,
|
|
22231
|
+
const [figmaTokenDraft, setFigmaTokenDraft] = (0, import_react47.useState)(getStoredFigmaToken);
|
|
22232
|
+
const [reviewUserId, setReviewUserId] = (0, import_react47.useState)(
|
|
21948
22233
|
() => getStoredReviewUserId(defaultReviewUserId)
|
|
21949
22234
|
);
|
|
21950
|
-
const [reviewUserIdDraft, setReviewUserIdDraft] = (0,
|
|
22235
|
+
const [reviewUserIdDraft, setReviewUserIdDraft] = (0, import_react47.useState)(
|
|
21951
22236
|
() => getStoredReviewUserId(defaultReviewUserId)
|
|
21952
22237
|
);
|
|
21953
|
-
const [reviewTheme, setReviewTheme] = (0,
|
|
21954
|
-
const [reviewThemeDraft, setReviewThemeDraft] = (0,
|
|
21955
|
-
const [areTooltipsEnabled, setAreTooltipsEnabled] = (0,
|
|
22238
|
+
const [reviewTheme, setReviewTheme] = (0, import_react47.useState)(getStoredReviewTheme);
|
|
22239
|
+
const [reviewThemeDraft, setReviewThemeDraft] = (0, import_react47.useState)(getStoredReviewTheme);
|
|
22240
|
+
const [areTooltipsEnabled, setAreTooltipsEnabled] = (0, import_react47.useState)(
|
|
21956
22241
|
getStoredReviewTooltipsEnabled
|
|
21957
22242
|
);
|
|
21958
|
-
const [areTooltipsEnabledDraft, setAreTooltipsEnabledDraft] = (0,
|
|
22243
|
+
const [areTooltipsEnabledDraft, setAreTooltipsEnabledDraft] = (0, import_react47.useState)(
|
|
21959
22244
|
getStoredReviewTooltipsEnabled
|
|
21960
22245
|
);
|
|
21961
|
-
const [systemReviewTheme, setSystemReviewTheme] = (0,
|
|
21962
|
-
const [figmaSettingsStatus, setFigmaSettingsStatus] = (0,
|
|
21963
|
-
const [isFigmaSettingsOpen, setIsFigmaSettingsOpen] = (0,
|
|
21964
|
-
const [isFigmaTokenVisible, setIsFigmaTokenVisible] = (0,
|
|
21965
|
-
const [isFigmaTokenGuideOpen, setIsFigmaTokenGuideOpen] = (0,
|
|
22246
|
+
const [systemReviewTheme, setSystemReviewTheme] = (0, import_react47.useState)(getSystemReviewTheme);
|
|
22247
|
+
const [figmaSettingsStatus, setFigmaSettingsStatus] = (0, import_react47.useState)("");
|
|
22248
|
+
const [isFigmaSettingsOpen, setIsFigmaSettingsOpen] = (0, import_react47.useState)(false);
|
|
22249
|
+
const [isFigmaTokenVisible, setIsFigmaTokenVisible] = (0, import_react47.useState)(false);
|
|
22250
|
+
const [isFigmaTokenGuideOpen, setIsFigmaTokenGuideOpen] = (0, import_react47.useState)(false);
|
|
21966
22251
|
const effectiveReviewTheme = reviewTheme === "system" ? systemReviewTheme : reviewTheme;
|
|
21967
|
-
const closeFigmaSettings = (0,
|
|
22252
|
+
const closeFigmaSettings = (0, import_react47.useCallback)(() => {
|
|
21968
22253
|
setIsFigmaSettingsOpen(false);
|
|
21969
22254
|
setFigmaSettingsStatus("");
|
|
21970
22255
|
setIsFigmaTokenVisible(false);
|
|
21971
22256
|
setIsFigmaTokenGuideOpen(false);
|
|
21972
22257
|
}, []);
|
|
21973
|
-
const openFigmaSettings = (0,
|
|
22258
|
+
const openFigmaSettings = (0, import_react47.useCallback)(() => {
|
|
21974
22259
|
onCancelReviewMode();
|
|
21975
22260
|
onCloseSitemap();
|
|
21976
22261
|
onCloseInitialPrompt();
|
|
@@ -21990,7 +22275,7 @@ var useReviewSettings = ({
|
|
|
21990
22275
|
areTooltipsEnabled,
|
|
21991
22276
|
reviewTheme
|
|
21992
22277
|
]);
|
|
21993
|
-
const saveReviewSettings = (0,
|
|
22278
|
+
const saveReviewSettings = (0, import_react47.useCallback)(
|
|
21994
22279
|
(token, userId, theme, tooltipsEnabled) => {
|
|
21995
22280
|
const nextToken = token.trim();
|
|
21996
22281
|
const nextUserId = userId.trim();
|
|
@@ -22017,13 +22302,13 @@ var useReviewSettings = ({
|
|
|
22017
22302
|
},
|
|
22018
22303
|
[closeFigmaSettings, onReloadTargetFrame]
|
|
22019
22304
|
);
|
|
22020
|
-
(0,
|
|
22305
|
+
(0, import_react47.useEffect)(() => {
|
|
22021
22306
|
if (getStoredReviewUserId()) return;
|
|
22022
22307
|
const nextDefaultUserId = defaultReviewUserId.trim();
|
|
22023
22308
|
setReviewUserId(nextDefaultUserId);
|
|
22024
22309
|
setReviewUserIdDraft(nextDefaultUserId);
|
|
22025
22310
|
}, [defaultReviewUserId]);
|
|
22026
|
-
(0,
|
|
22311
|
+
(0, import_react47.useEffect)(() => {
|
|
22027
22312
|
if (typeof window === "undefined" || !window.matchMedia) return void 0;
|
|
22028
22313
|
const query = window.matchMedia("(prefers-color-scheme: light)");
|
|
22029
22314
|
const syncSystemTheme = () => {
|
|
@@ -22037,7 +22322,7 @@ var useReviewSettings = ({
|
|
|
22037
22322
|
query.addListener(syncSystemTheme);
|
|
22038
22323
|
return () => query.removeListener(syncSystemTheme);
|
|
22039
22324
|
}, []);
|
|
22040
|
-
(0,
|
|
22325
|
+
(0, import_react47.useEffect)(() => {
|
|
22041
22326
|
document.body.classList.toggle(
|
|
22042
22327
|
"df-review-theme-light",
|
|
22043
22328
|
effectiveReviewTheme === "light"
|
|
@@ -22079,7 +22364,7 @@ var useReviewSettings = ({
|
|
|
22079
22364
|
};
|
|
22080
22365
|
|
|
22081
22366
|
// src/react-shell/hooks/use.review.shell.runtime.actions.ts
|
|
22082
|
-
var
|
|
22367
|
+
var import_react48 = require("react");
|
|
22083
22368
|
var useReviewShellTransientActions = ({
|
|
22084
22369
|
controllerRef,
|
|
22085
22370
|
iframeRef,
|
|
@@ -22087,20 +22372,20 @@ var useReviewShellTransientActions = ({
|
|
|
22087
22372
|
setIsSitemapOpen,
|
|
22088
22373
|
setMode
|
|
22089
22374
|
}) => {
|
|
22090
|
-
const cancelReviewMode = (0,
|
|
22375
|
+
const cancelReviewMode = (0, import_react48.useCallback)(() => {
|
|
22091
22376
|
const controller = controllerRef.current;
|
|
22092
22377
|
if (!controller || controller.getMode() === "idle") return false;
|
|
22093
22378
|
controller.setMode("idle");
|
|
22094
22379
|
setMode(controller.getMode());
|
|
22095
22380
|
return true;
|
|
22096
22381
|
}, [controllerRef, setMode]);
|
|
22097
|
-
const closePromptModal = (0,
|
|
22382
|
+
const closePromptModal = (0, import_react48.useCallback)(() => {
|
|
22098
22383
|
setIsInitialPromptOpen(false);
|
|
22099
22384
|
}, [setIsInitialPromptOpen]);
|
|
22100
|
-
const closeSitemap = (0,
|
|
22385
|
+
const closeSitemap = (0, import_react48.useCallback)(() => {
|
|
22101
22386
|
setIsSitemapOpen(false);
|
|
22102
22387
|
}, [setIsSitemapOpen]);
|
|
22103
|
-
const reloadTargetFrame = (0,
|
|
22388
|
+
const reloadTargetFrame = (0, import_react48.useCallback)(() => {
|
|
22104
22389
|
try {
|
|
22105
22390
|
iframeRef.current?.contentWindow?.location.reload();
|
|
22106
22391
|
} catch {
|
|
@@ -22119,14 +22404,14 @@ var useReviewShellPanelActions = ({
|
|
|
22119
22404
|
isSourceInspectorEnabled,
|
|
22120
22405
|
toggleSidePanel
|
|
22121
22406
|
}) => {
|
|
22122
|
-
const toggleQaPanel = (0,
|
|
22407
|
+
const toggleQaPanel = (0, import_react48.useCallback)(() => {
|
|
22123
22408
|
toggleSidePanel("qa");
|
|
22124
22409
|
}, [toggleSidePanel]);
|
|
22125
|
-
const toggleSourceTreePanel = (0,
|
|
22410
|
+
const toggleSourceTreePanel = (0, import_react48.useCallback)(() => {
|
|
22126
22411
|
if (!isSourceInspectorEnabled) return;
|
|
22127
22412
|
toggleSidePanel("source");
|
|
22128
22413
|
}, [isSourceInspectorEnabled, toggleSidePanel]);
|
|
22129
|
-
const toggleFigmaImagesPanel = (0,
|
|
22414
|
+
const toggleFigmaImagesPanel = (0, import_react48.useCallback)(() => {
|
|
22130
22415
|
if (!isFigmaImageManagementEnabled) return;
|
|
22131
22416
|
toggleSidePanel("figma-images");
|
|
22132
22417
|
}, [
|
|
@@ -22145,7 +22430,7 @@ var useReviewShellModeSetter = ({
|
|
|
22145
22430
|
openSidePanel,
|
|
22146
22431
|
setControllerReviewMode,
|
|
22147
22432
|
writeModes
|
|
22148
|
-
}) => (0,
|
|
22433
|
+
}) => (0, import_react48.useCallback)(
|
|
22149
22434
|
(nextMode) => {
|
|
22150
22435
|
const writeMode = getReviewModeWriteMode(nextMode);
|
|
22151
22436
|
if (writeMode && !writeModes.includes(writeMode)) return;
|
|
@@ -22170,7 +22455,7 @@ var useReviewShellLoadTargetFrame = ({
|
|
|
22170
22455
|
initReviewKit,
|
|
22171
22456
|
mode,
|
|
22172
22457
|
refreshTargetFigmaConfig
|
|
22173
|
-
}) => (0,
|
|
22458
|
+
}) => (0, import_react48.useCallback)(() => {
|
|
22174
22459
|
bumpTargetFrameLoadVersion();
|
|
22175
22460
|
initReviewKit();
|
|
22176
22461
|
refreshTargetFigmaConfig();
|
|
@@ -22189,7 +22474,7 @@ var useReviewShellLoadTargetFrame = ({
|
|
|
22189
22474
|
]);
|
|
22190
22475
|
|
|
22191
22476
|
// src/react-shell/hooks/use.review.shell.hotkeys.ts
|
|
22192
|
-
var
|
|
22477
|
+
var import_react49 = require("react");
|
|
22193
22478
|
var useReviewShellHotkeys = ({
|
|
22194
22479
|
isRailHotkeyBlocked,
|
|
22195
22480
|
isFigmaSettingsOpen,
|
|
@@ -22218,7 +22503,7 @@ var useReviewShellHotkeys = ({
|
|
|
22218
22503
|
const setIsSitemapOpen = useReviewShellStore(
|
|
22219
22504
|
(state) => state.setIsSitemapOpen
|
|
22220
22505
|
);
|
|
22221
|
-
(0,
|
|
22506
|
+
(0, import_react49.useEffect)(() => {
|
|
22222
22507
|
if (mode === "idle" && !isRulerVisible && !isInitialPromptOpen && !isSitemapOpen && !isFigmaSettingsOpen) {
|
|
22223
22508
|
return;
|
|
22224
22509
|
}
|
|
@@ -22262,7 +22547,7 @@ var useReviewShellHotkeys = ({
|
|
|
22262
22547
|
setIsInitialPromptOpen,
|
|
22263
22548
|
setIsSitemapOpen
|
|
22264
22549
|
]);
|
|
22265
|
-
(0,
|
|
22550
|
+
(0, import_react49.useEffect)(() => {
|
|
22266
22551
|
const handleHotkey = (event) => {
|
|
22267
22552
|
if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
|
|
22268
22553
|
return;
|
|
@@ -22295,7 +22580,7 @@ var useReviewShellHotkeys = ({
|
|
|
22295
22580
|
onToggleRuler,
|
|
22296
22581
|
onToggleTargetOverlay
|
|
22297
22582
|
]);
|
|
22298
|
-
(0,
|
|
22583
|
+
(0, import_react49.useEffect)(() => {
|
|
22299
22584
|
const handleRailHotkey = (event) => {
|
|
22300
22585
|
if (isRailHotkeyBlocked || isEditableEventTarget(event)) return;
|
|
22301
22586
|
const actions = [
|
|
@@ -22320,7 +22605,7 @@ var useReviewShellHotkeys = ({
|
|
|
22320
22605
|
};
|
|
22321
22606
|
|
|
22322
22607
|
// src/react-shell/hooks/use.review.shell.refresh.ts
|
|
22323
|
-
var
|
|
22608
|
+
var import_react50 = require("react");
|
|
22324
22609
|
var useReviewShellRefresh = ({
|
|
22325
22610
|
activeAdapterEntry,
|
|
22326
22611
|
activeRoute,
|
|
@@ -22332,8 +22617,8 @@ var useReviewShellRefresh = ({
|
|
|
22332
22617
|
remoteAdapterEntry,
|
|
22333
22618
|
storeApi
|
|
22334
22619
|
}) => {
|
|
22335
|
-
const itemRefreshIdRef = (0,
|
|
22336
|
-
const refreshItems = (0,
|
|
22620
|
+
const itemRefreshIdRef = (0, import_react50.useRef)(0);
|
|
22621
|
+
const refreshItems = (0, import_react50.useCallback)(
|
|
22337
22622
|
async () => {
|
|
22338
22623
|
const requestId = ++itemRefreshIdRef.current;
|
|
22339
22624
|
storeApi.getState().setIsItemsLoading(true);
|
|
@@ -22361,7 +22646,7 @@ var useReviewShellRefresh = ({
|
|
|
22361
22646
|
storeApi
|
|
22362
22647
|
]
|
|
22363
22648
|
);
|
|
22364
|
-
const refreshSitemapItems = (0,
|
|
22649
|
+
const refreshSitemapItems = (0, import_react50.useCallback)(
|
|
22365
22650
|
() => refreshSitemapReviewItems({
|
|
22366
22651
|
localAdapterEntry,
|
|
22367
22652
|
projectId,
|
|
@@ -22370,13 +22655,13 @@ var useReviewShellRefresh = ({
|
|
|
22370
22655
|
}),
|
|
22371
22656
|
[localAdapterEntry, projectId, remoteAdapterEntry, storeApi]
|
|
22372
22657
|
);
|
|
22373
|
-
(0,
|
|
22658
|
+
(0, import_react50.useEffect)(() => {
|
|
22374
22659
|
void refreshItems();
|
|
22375
22660
|
}, [refreshItems]);
|
|
22376
|
-
(0,
|
|
22661
|
+
(0, import_react50.useEffect)(() => {
|
|
22377
22662
|
void refreshSitemapItems();
|
|
22378
22663
|
}, [refreshSitemapItems]);
|
|
22379
|
-
(0,
|
|
22664
|
+
(0, import_react50.useEffect)(() => {
|
|
22380
22665
|
if (!isSitemapOpen) return;
|
|
22381
22666
|
void refreshSitemapItems();
|
|
22382
22667
|
}, [isSitemapOpen, refreshSitemapItems]);
|
|
@@ -22475,17 +22760,17 @@ var useReviewShellState = () => {
|
|
|
22475
22760
|
};
|
|
22476
22761
|
|
|
22477
22762
|
// src/react-shell/hooks/use.review.shell.target.figma.ts
|
|
22478
|
-
var
|
|
22763
|
+
var import_react51 = require("react");
|
|
22479
22764
|
var useReviewShellTargetFigma = ({
|
|
22480
22765
|
iframeRef,
|
|
22481
22766
|
isFigmaImageManagementEnabled,
|
|
22482
22767
|
isViewportFigmaOverlayAvailable,
|
|
22483
22768
|
targetSrc
|
|
22484
22769
|
}) => {
|
|
22485
|
-
const [targetFigmaState, setTargetFigmaState] = (0,
|
|
22770
|
+
const [targetFigmaState, setTargetFigmaState] = (0, import_react51.useState)(null);
|
|
22486
22771
|
const targetFigmaConfig = targetFigmaState?.targetSrc === targetSrc ? targetFigmaState.config : null;
|
|
22487
22772
|
const isFigmaOverlayAvailable = !isFigmaImageManagementEnabled && isViewportFigmaOverlayAvailable && Boolean(targetFigmaConfig);
|
|
22488
|
-
const refreshTargetFigmaConfig = (0,
|
|
22773
|
+
const refreshTargetFigmaConfig = (0, import_react51.useCallback)(() => {
|
|
22489
22774
|
const config = getTargetFigmaFrameConfig(
|
|
22490
22775
|
iframeRef.current?.contentWindow
|
|
22491
22776
|
);
|
|
@@ -22498,7 +22783,7 @@ var useReviewShellTargetFigma = ({
|
|
|
22498
22783
|
};
|
|
22499
22784
|
|
|
22500
22785
|
// src/react-shell/hooks/use.review.side.panel.ts
|
|
22501
|
-
var
|
|
22786
|
+
var import_react52 = require("react");
|
|
22502
22787
|
var getAvailableSidePanel = (sidePanel, {
|
|
22503
22788
|
isFigmaImageManagementEnabled,
|
|
22504
22789
|
isSourceInspectorEnabled
|
|
@@ -22523,7 +22808,7 @@ var useReviewSidePanel = ({
|
|
|
22523
22808
|
const isQaPanelVisible = isListVisible && sidePanel === "qa";
|
|
22524
22809
|
const isSourceTreePanelVisible = isSourceInspectorEnabled && isListVisible && sidePanel === "source";
|
|
22525
22810
|
const isFigmaImagesPanelVisible = isFigmaImageManagementEnabled && isListVisible && sidePanel === "figma-images";
|
|
22526
|
-
(0,
|
|
22811
|
+
(0, import_react52.useEffect)(() => {
|
|
22527
22812
|
const state = storeApi.getState();
|
|
22528
22813
|
const availableSidePanel = getAvailableSidePanel(state.sidePanel, {
|
|
22529
22814
|
isFigmaImageManagementEnabled,
|
|
@@ -22533,13 +22818,13 @@ var useReviewSidePanel = ({
|
|
|
22533
22818
|
state.setSidePanel(availableSidePanel);
|
|
22534
22819
|
}
|
|
22535
22820
|
}, [isFigmaImageManagementEnabled, isSourceInspectorEnabled, storeApi]);
|
|
22536
|
-
(0,
|
|
22821
|
+
(0, import_react52.useEffect)(() => {
|
|
22537
22822
|
writeStoredReviewSidePanel(sidePanel);
|
|
22538
22823
|
}, [sidePanel]);
|
|
22539
|
-
(0,
|
|
22824
|
+
(0, import_react52.useEffect)(() => {
|
|
22540
22825
|
writeStoredReviewSidePanelVisible(isListVisible);
|
|
22541
22826
|
}, [isListVisible]);
|
|
22542
|
-
const openSidePanel = (0,
|
|
22827
|
+
const openSidePanel = (0, import_react52.useCallback)(
|
|
22543
22828
|
(nextSidePanel) => {
|
|
22544
22829
|
const state = storeApi.getState();
|
|
22545
22830
|
state.setSidePanel(
|
|
@@ -22552,7 +22837,7 @@ var useReviewSidePanel = ({
|
|
|
22552
22837
|
},
|
|
22553
22838
|
[isFigmaImageManagementEnabled, isSourceInspectorEnabled, storeApi]
|
|
22554
22839
|
);
|
|
22555
|
-
const toggleSidePanel = (0,
|
|
22840
|
+
const toggleSidePanel = (0, import_react52.useCallback)(
|
|
22556
22841
|
(nextSidePanel) => {
|
|
22557
22842
|
const state = storeApi.getState();
|
|
22558
22843
|
const currentSidePanel = getAvailableSidePanel(state.sidePanel, {
|
|
@@ -22582,7 +22867,7 @@ var useReviewSidePanel = ({
|
|
|
22582
22867
|
};
|
|
22583
22868
|
|
|
22584
22869
|
// src/react-shell/hooks/use.review.source.inspector.ts
|
|
22585
|
-
var
|
|
22870
|
+
var import_react53 = require("react");
|
|
22586
22871
|
|
|
22587
22872
|
// src/react-shell/review/source.shortcut.style.ts
|
|
22588
22873
|
function createSourceShortcutStyle(optionAttribute, fontOverlayAttribute) {
|
|
@@ -22668,14 +22953,14 @@ function useReviewSourceInspector({
|
|
|
22668
22953
|
onCancelReviewMode
|
|
22669
22954
|
}) {
|
|
22670
22955
|
const showToast = useReviewToast();
|
|
22671
|
-
const sourceShortcutCleanupRef = (0,
|
|
22672
|
-
const sourceInspectorInteractionRef = (0,
|
|
22673
|
-
const [sourceInspectorState, setSourceInspectorState] = (0,
|
|
22674
|
-
const clearSourceInspector = (0,
|
|
22956
|
+
const sourceShortcutCleanupRef = (0, import_react53.useRef)(null);
|
|
22957
|
+
const sourceInspectorInteractionRef = (0, import_react53.useRef)(false);
|
|
22958
|
+
const [sourceInspectorState, setSourceInspectorState] = (0, import_react53.useState)(null);
|
|
22959
|
+
const clearSourceInspector = (0, import_react53.useCallback)(() => {
|
|
22675
22960
|
sourceInspectorInteractionRef.current = false;
|
|
22676
22961
|
setSourceInspectorState(null);
|
|
22677
22962
|
}, []);
|
|
22678
|
-
const getSourceInspectorRect = (0,
|
|
22963
|
+
const getSourceInspectorRect = (0, import_react53.useCallback)(
|
|
22679
22964
|
(element) => {
|
|
22680
22965
|
const frame = iframeRef.current;
|
|
22681
22966
|
if (!frame) return null;
|
|
@@ -22700,7 +22985,7 @@ function useReviewSourceInspector({
|
|
|
22700
22985
|
},
|
|
22701
22986
|
[iframeRef]
|
|
22702
22987
|
);
|
|
22703
|
-
const getSourceInspectorPanelPosition = (0,
|
|
22988
|
+
const getSourceInspectorPanelPosition = (0, import_react53.useCallback)(
|
|
22704
22989
|
(rect) => {
|
|
22705
22990
|
const margin = 12;
|
|
22706
22991
|
const gap = 10;
|
|
@@ -22726,7 +23011,7 @@ function useReviewSourceInspector({
|
|
|
22726
23011
|
},
|
|
22727
23012
|
[]
|
|
22728
23013
|
);
|
|
22729
|
-
const showSourceInspectorForTarget = (0,
|
|
23014
|
+
const showSourceInspectorForTarget = (0, import_react53.useCallback)(
|
|
22730
23015
|
(target, isPinned = false) => {
|
|
22731
23016
|
const candidates = getSourceCandidates(target, sourceCandidateOptions).map(
|
|
22732
23017
|
(candidate) => ({
|
|
@@ -22762,7 +23047,7 @@ function useReviewSourceInspector({
|
|
|
22762
23047
|
sourceOpenOptions
|
|
22763
23048
|
]
|
|
22764
23049
|
);
|
|
22765
|
-
const showSourceOutlineForTarget = (0,
|
|
23050
|
+
const showSourceOutlineForTarget = (0, import_react53.useCallback)(
|
|
22766
23051
|
(target) => {
|
|
22767
23052
|
const firstCandidate = getSourceCandidates(
|
|
22768
23053
|
target,
|
|
@@ -22786,7 +23071,7 @@ function useReviewSourceInspector({
|
|
|
22786
23071
|
},
|
|
22787
23072
|
[getSourceInspectorRect, sourceCandidateOptions]
|
|
22788
23073
|
);
|
|
22789
|
-
const showSourceOutlineForElement = (0,
|
|
23074
|
+
const showSourceOutlineForElement = (0, import_react53.useCallback)(
|
|
22790
23075
|
(element) => {
|
|
22791
23076
|
if (!isSourceTreeHoverOutlineEnabled) return;
|
|
22792
23077
|
const rect = getSourceInspectorRect(element);
|
|
@@ -22810,10 +23095,10 @@ function useReviewSourceInspector({
|
|
|
22810
23095
|
},
|
|
22811
23096
|
[getSourceInspectorRect, isSourceTreeHoverOutlineEnabled]
|
|
22812
23097
|
);
|
|
22813
|
-
const clearSourceOutlineHover = (0,
|
|
23098
|
+
const clearSourceOutlineHover = (0, import_react53.useCallback)(() => {
|
|
22814
23099
|
setSourceInspectorState((current) => current?.isPinned ? current : null);
|
|
22815
23100
|
}, []);
|
|
22816
|
-
const openSourceCandidate = (0,
|
|
23101
|
+
const openSourceCandidate = (0, import_react53.useCallback)(
|
|
22817
23102
|
(candidate) => {
|
|
22818
23103
|
const didOpen = openSourceInEditor(candidate.source, {
|
|
22819
23104
|
...sourceOpenOptions,
|
|
@@ -22824,11 +23109,11 @@ function useReviewSourceInspector({
|
|
|
22824
23109
|
},
|
|
22825
23110
|
[clearSourceInspector, showToast, sourceOpenOptions]
|
|
22826
23111
|
);
|
|
22827
|
-
const cleanupSourceOpenShortcut = (0,
|
|
23112
|
+
const cleanupSourceOpenShortcut = (0, import_react53.useCallback)(() => {
|
|
22828
23113
|
sourceShortcutCleanupRef.current?.();
|
|
22829
23114
|
sourceShortcutCleanupRef.current = null;
|
|
22830
23115
|
}, []);
|
|
22831
|
-
const bindSourceOpenShortcut = (0,
|
|
23116
|
+
const bindSourceOpenShortcut = (0, import_react53.useCallback)(() => {
|
|
22832
23117
|
cleanupSourceOpenShortcut();
|
|
22833
23118
|
let frameDocument = null;
|
|
22834
23119
|
try {
|
|
@@ -23019,10 +23304,10 @@ function useReviewSourceInspector({
|
|
|
23019
23304
|
showSourceOutlineForTarget,
|
|
23020
23305
|
showSourceInspectorForTarget
|
|
23021
23306
|
]);
|
|
23022
|
-
(0,
|
|
23307
|
+
(0, import_react53.useEffect)(() => {
|
|
23023
23308
|
return cleanupSourceOpenShortcut;
|
|
23024
23309
|
}, [cleanupSourceOpenShortcut]);
|
|
23025
|
-
(0,
|
|
23310
|
+
(0, import_react53.useEffect)(() => {
|
|
23026
23311
|
const frame = window.requestAnimationFrame(bindSourceOpenShortcut);
|
|
23027
23312
|
return () => window.cancelAnimationFrame(frame);
|
|
23028
23313
|
}, [bindSourceOpenShortcut, targetSrc]);
|
|
@@ -23038,7 +23323,7 @@ function useReviewSourceInspector({
|
|
|
23038
23323
|
}
|
|
23039
23324
|
|
|
23040
23325
|
// src/react-shell/hooks/use.review.target.navigation.ts
|
|
23041
|
-
var
|
|
23326
|
+
var import_react54 = require("react");
|
|
23042
23327
|
var useReviewTargetNavigation = ({
|
|
23043
23328
|
onCancelReviewMode,
|
|
23044
23329
|
onClearSelectedItem,
|
|
@@ -23048,11 +23333,11 @@ var useReviewTargetNavigation = ({
|
|
|
23048
23333
|
const { reviewPathPrefix, viewportPresets } = useReviewShellConfig();
|
|
23049
23334
|
const { activeAdapterEntry, source, sourceEntries } = useReviewShellAdapterState();
|
|
23050
23335
|
const storeApi = useReviewShellStoreApi();
|
|
23051
|
-
const getPageTarget = (0,
|
|
23336
|
+
const getPageTarget = (0, import_react54.useCallback)(
|
|
23052
23337
|
(href) => normalizeTarget(href, reviewPathPrefix),
|
|
23053
23338
|
[reviewPathPrefix]
|
|
23054
23339
|
);
|
|
23055
|
-
const applyTarget = (0,
|
|
23340
|
+
const applyTarget = (0, import_react54.useCallback)(async () => {
|
|
23056
23341
|
const state = storeApi.getState();
|
|
23057
23342
|
const parsedInput = parseReviewAddressInput(
|
|
23058
23343
|
state.draftTarget,
|
|
@@ -23101,7 +23386,7 @@ var useReviewTargetNavigation = ({
|
|
|
23101
23386
|
storeApi,
|
|
23102
23387
|
viewportPresets
|
|
23103
23388
|
]);
|
|
23104
|
-
const selectPage = (0,
|
|
23389
|
+
const selectPage = (0, import_react54.useCallback)(
|
|
23105
23390
|
(href) => {
|
|
23106
23391
|
const normalizedTarget = getPageTarget(href);
|
|
23107
23392
|
const normalizedRoute = getTargetRouteKey(
|
|
@@ -23125,17 +23410,17 @@ var useReviewTargetNavigation = ({
|
|
|
23125
23410
|
storeApi
|
|
23126
23411
|
]
|
|
23127
23412
|
);
|
|
23128
|
-
const selectAllQa = (0,
|
|
23413
|
+
const selectAllQa = (0, import_react54.useCallback)(() => {
|
|
23129
23414
|
const state = storeApi.getState();
|
|
23130
23415
|
state.setIsAllQaVisible(true);
|
|
23131
23416
|
state.setIsSitemapOpen(false);
|
|
23132
23417
|
}, [storeApi]);
|
|
23133
|
-
const clearSelectedReviewItem = (0,
|
|
23418
|
+
const clearSelectedReviewItem = (0, import_react54.useCallback)(() => {
|
|
23134
23419
|
onClearSelectedItem();
|
|
23135
23420
|
const state = storeApi.getState();
|
|
23136
23421
|
updateShellUrl(state.target, state.size, source);
|
|
23137
23422
|
}, [onClearSelectedItem, source, storeApi]);
|
|
23138
|
-
const changeReviewSource = (0,
|
|
23423
|
+
const changeReviewSource = (0, import_react54.useCallback)(
|
|
23139
23424
|
(nextSource) => {
|
|
23140
23425
|
if (!sourceEntries.some((entry) => entry.label === nextSource)) return;
|
|
23141
23426
|
onCancelReviewMode();
|
|
@@ -23233,7 +23518,7 @@ var useReviewShellRuntime = ({
|
|
|
23233
23518
|
targetFrameLoadVersion,
|
|
23234
23519
|
targetSrc
|
|
23235
23520
|
});
|
|
23236
|
-
const effectiveHiddenOverlayItemIdList = (0,
|
|
23521
|
+
const effectiveHiddenOverlayItemIdList = (0, import_react55.useMemo)(() => {
|
|
23237
23522
|
if (!isCommandKeyPressed) return hiddenOverlayItemIdList;
|
|
23238
23523
|
const itemIds = new Set(hiddenOverlayItemIdList);
|
|
23239
23524
|
activeItems.forEach((item) => itemIds.add(item.id));
|
|
@@ -23284,7 +23569,7 @@ var useReviewShellRuntime = ({
|
|
|
23284
23569
|
size,
|
|
23285
23570
|
source
|
|
23286
23571
|
});
|
|
23287
|
-
const closeRulerPanels = (0,
|
|
23572
|
+
const closeRulerPanels = (0, import_react55.useCallback)(() => {
|
|
23288
23573
|
closeSitemap();
|
|
23289
23574
|
closeFigmaSettings();
|
|
23290
23575
|
}, [closeFigmaSettings, closeSitemap]);
|
|
@@ -23334,7 +23619,7 @@ var useReviewShellRuntime = ({
|
|
|
23334
23619
|
onCloseRuler: closeRuler,
|
|
23335
23620
|
onItemsRefresh: refreshItems
|
|
23336
23621
|
});
|
|
23337
|
-
const refreshReviewData2 = (0,
|
|
23622
|
+
const refreshReviewData2 = (0, import_react55.useCallback)(() => {
|
|
23338
23623
|
return refreshReviewData({
|
|
23339
23624
|
onRefreshItems: refreshItems,
|
|
23340
23625
|
onRefreshSitemapItems: refreshSitemapItems,
|
|
@@ -23598,11 +23883,12 @@ var createReviewShellStore = (init) => (0, import_zustand2.createStore)()((...ar
|
|
|
23598
23883
|
// src/react-shell/review/shell.tsx
|
|
23599
23884
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
23600
23885
|
var ReviewShell = (props) => {
|
|
23601
|
-
const config = (0,
|
|
23886
|
+
const config = (0, import_react56.useMemo)(
|
|
23602
23887
|
() => createReviewShellConfig(props),
|
|
23603
23888
|
[
|
|
23604
23889
|
props.adapters,
|
|
23605
23890
|
props.initialPrompt,
|
|
23891
|
+
props.qaPrompt,
|
|
23606
23892
|
props.pages,
|
|
23607
23893
|
props.presets,
|
|
23608
23894
|
props.projectId,
|
|
@@ -23611,10 +23897,10 @@ var ReviewShell = (props) => {
|
|
|
23611
23897
|
props.sourceRoot
|
|
23612
23898
|
]
|
|
23613
23899
|
);
|
|
23614
|
-
const [store] = (0,
|
|
23900
|
+
const [store] = (0, import_react56.useState)(
|
|
23615
23901
|
() => createReviewShellStore({ target: getInitialTargetSliceState(config) })
|
|
23616
23902
|
);
|
|
23617
|
-
const [refs] = (0,
|
|
23903
|
+
const [refs] = (0, import_react56.useState)(createReviewShellRefs);
|
|
23618
23904
|
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ReviewShellConfigProvider, { value: config, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ReviewShellStoreProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ReviewShellRefsProvider, { value: refs, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ReviewShellContent, { ...props }) }) }) });
|
|
23619
23905
|
};
|
|
23620
23906
|
var ReviewShellContent = (props) => {
|
|
@@ -23638,7 +23924,7 @@ var ReviewShellContent = (props) => {
|
|
|
23638
23924
|
};
|
|
23639
23925
|
|
|
23640
23926
|
// src/react-shell/figma/dev-overlay.tsx
|
|
23641
|
-
var
|
|
23927
|
+
var import_react57 = __toESM(require("react"), 1);
|
|
23642
23928
|
var import_client = require("react-dom/client");
|
|
23643
23929
|
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
23644
23930
|
var FIGMA_DEV_OVERLAY_ROOT_ID = "df-review-figma-dev-overlay-root";
|
|
@@ -23661,7 +23947,7 @@ var mountFigmaDevOverlay = (options) => {
|
|
|
23661
23947
|
document.body.appendChild(host);
|
|
23662
23948
|
const root = (0, import_client.createRoot)(mountNode);
|
|
23663
23949
|
root.render(
|
|
23664
|
-
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
23950
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react57.default.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(FigmaDevOverlayWidget, { ...options }) })
|
|
23665
23951
|
);
|
|
23666
23952
|
return {
|
|
23667
23953
|
destroy() {
|
|
@@ -23681,11 +23967,11 @@ var FigmaDevOverlayWidget = ({
|
|
|
23681
23967
|
const figmaImageStore = getReviewFigmaImageStore(figmaImages);
|
|
23682
23968
|
const viewport = useCurrentViewport();
|
|
23683
23969
|
const currentPageUrl = useCurrentPageUrl(pageUrl, reviewPathPrefix);
|
|
23684
|
-
const viewportBoundaries = (0,
|
|
23970
|
+
const viewportBoundaries = (0, import_react57.useMemo)(
|
|
23685
23971
|
() => getFigmaDevViewportBoundaries(presets),
|
|
23686
23972
|
[presets]
|
|
23687
23973
|
);
|
|
23688
|
-
const matchedViewportMatch = (0,
|
|
23974
|
+
const matchedViewportMatch = (0, import_react57.useMemo)(
|
|
23689
23975
|
() => findBoundaryFigmaDevViewportMatch(presets, viewport.width),
|
|
23690
23976
|
[presets, viewport.width]
|
|
23691
23977
|
);
|
|
@@ -23711,23 +23997,23 @@ var FigmaDevOverlayWidget = ({
|
|
|
23711
23997
|
store: matchedViewport ? figmaImageStore : null,
|
|
23712
23998
|
viewport: activeViewport
|
|
23713
23999
|
});
|
|
23714
|
-
const [isPanelOpen, setIsPanelOpen] = (0,
|
|
23715
|
-
const [isWidgetVisible, setIsWidgetVisible] = (0,
|
|
23716
|
-
const [offsetYDraftByImageId, setOffsetYDraftByImageId] = (0,
|
|
24000
|
+
const [isPanelOpen, setIsPanelOpen] = (0, import_react57.useState)(false);
|
|
24001
|
+
const [isWidgetVisible, setIsWidgetVisible] = (0, import_react57.useState)(false);
|
|
24002
|
+
const [offsetYDraftByImageId, setOffsetYDraftByImageId] = (0, import_react57.useState)({});
|
|
23717
24003
|
const selectedImage = selectedImageId ? images.find((image) => image.id === selectedImageId) ?? null : null;
|
|
23718
24004
|
const selectedImageIndex = selectedImage ? images.indexOf(selectedImage) : -1;
|
|
23719
24005
|
const selectedImageLabel = selectedImage ? getFigmaImageLabel(selectedImage, selectedImageIndex) : "Figma layer";
|
|
23720
24006
|
const selectedOverlayState = selectedImage ? imageOverlayStates[selectedImage.id] ?? DEFAULT_FIGMA_IMAGE_LAYER_STATE : DEFAULT_FIGMA_IMAGE_LAYER_STATE;
|
|
23721
24007
|
const selectedOpacityPercent = selectedImage ? getSnappedOpacityPercent(selectedOverlayState.opacity) : 0;
|
|
23722
24008
|
const selectedOffsetYDraft = selectedImage ? offsetYDraftByImageId[selectedImage.id] ?? String(selectedOverlayState.offsetY) : "";
|
|
23723
|
-
const figmaImageOverlays = (0,
|
|
24009
|
+
const figmaImageOverlays = (0, import_react57.useMemo)(
|
|
23724
24010
|
() => createReviewTargetFigmaImageOverlays({
|
|
23725
24011
|
imageOverlayStates,
|
|
23726
24012
|
images
|
|
23727
24013
|
}),
|
|
23728
24014
|
[imageOverlayStates, images]
|
|
23729
24015
|
);
|
|
23730
|
-
(0,
|
|
24016
|
+
(0, import_react57.useEffect)(() => {
|
|
23731
24017
|
if (!isWidgetVisible || !matchedViewport) {
|
|
23732
24018
|
removeTargetFigmaImageOverlays(document);
|
|
23733
24019
|
return;
|
|
@@ -23744,13 +24030,13 @@ var FigmaDevOverlayWidget = ({
|
|
|
23744
24030
|
matchedViewport,
|
|
23745
24031
|
setImageOverlayOffsetY
|
|
23746
24032
|
]);
|
|
23747
|
-
(0,
|
|
24033
|
+
(0, import_react57.useEffect)(
|
|
23748
24034
|
() => () => {
|
|
23749
24035
|
removeTargetFigmaImageOverlays(document);
|
|
23750
24036
|
},
|
|
23751
24037
|
[]
|
|
23752
24038
|
);
|
|
23753
|
-
(0,
|
|
24039
|
+
(0, import_react57.useEffect)(() => {
|
|
23754
24040
|
const handleKeyDown = (event) => {
|
|
23755
24041
|
if (!isHotkey(event, "Shift+F") || isEditableFigmaDevOverlayEventTarget(event)) {
|
|
23756
24042
|
return;
|
|
@@ -23897,10 +24183,10 @@ var FigmaDevOverlayWidget = ({
|
|
|
23897
24183
|
);
|
|
23898
24184
|
};
|
|
23899
24185
|
function useCurrentPageUrl(pageUrl, reviewPathPrefix) {
|
|
23900
|
-
const [currentPageUrl, setCurrentPageUrl] = (0,
|
|
24186
|
+
const [currentPageUrl, setCurrentPageUrl] = (0, import_react57.useState)(
|
|
23901
24187
|
() => getFigmaDevOverlayPageUrl(pageUrl, reviewPathPrefix)
|
|
23902
24188
|
);
|
|
23903
|
-
(0,
|
|
24189
|
+
(0, import_react57.useEffect)(() => {
|
|
23904
24190
|
const updatePageUrl = () => {
|
|
23905
24191
|
setCurrentPageUrl(getFigmaDevOverlayPageUrl(pageUrl, reviewPathPrefix));
|
|
23906
24192
|
};
|
|
@@ -23921,8 +24207,8 @@ function isEditableFigmaDevOverlayEventTarget(event) {
|
|
|
23921
24207
|
return tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT" || element.isContentEditable === true;
|
|
23922
24208
|
}
|
|
23923
24209
|
function useCurrentViewport() {
|
|
23924
|
-
const [viewport, setViewport] = (0,
|
|
23925
|
-
(0,
|
|
24210
|
+
const [viewport, setViewport] = (0, import_react57.useState)(getCurrentViewportSize);
|
|
24211
|
+
(0, import_react57.useEffect)(() => {
|
|
23926
24212
|
const updateViewport = () => setViewport(getCurrentViewportSize());
|
|
23927
24213
|
window.addEventListener("resize", updateViewport);
|
|
23928
24214
|
window.addEventListener("orientationchange", updateViewport);
|
|
@@ -24490,7 +24776,7 @@ var mountReviewShell = (options) => {
|
|
|
24490
24776
|
root.style.height = "100%";
|
|
24491
24777
|
root.style.margin = "0";
|
|
24492
24778
|
(0, import_client2.createRoot)(root).render(
|
|
24493
|
-
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
24779
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react58.default.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ReviewShell, { ...shellProps }) })
|
|
24494
24780
|
);
|
|
24495
24781
|
};
|
|
24496
24782
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -24516,8 +24802,10 @@ lucide-react/dist/esm/context.mjs:
|
|
|
24516
24802
|
lucide-react/dist/esm/Icon.mjs:
|
|
24517
24803
|
lucide-react/dist/esm/createLucideIcon.mjs:
|
|
24518
24804
|
lucide-react/dist/esm/icons/bot.mjs:
|
|
24805
|
+
lucide-react/dist/esm/icons/check-check.mjs:
|
|
24519
24806
|
lucide-react/dist/esm/icons/chevron-down.mjs:
|
|
24520
24807
|
lucide-react/dist/esm/icons/chevron-right.mjs:
|
|
24808
|
+
lucide-react/dist/esm/icons/chevron-up.mjs:
|
|
24521
24809
|
lucide-react/dist/esm/icons/circle-question-mark.mjs:
|
|
24522
24810
|
lucide-react/dist/esm/icons/code-xml.mjs:
|
|
24523
24811
|
lucide-react/dist/esm/icons/contrast.mjs:
|