@agent-native/toolkit 0.11.2 → 0.12.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.
Files changed (75) hide show
  1. package/README.md +19 -0
  2. package/agent-native.eject.json +38 -0
  3. package/dist/canvas-annotations/CanvasCommentPins.d.ts +68 -0
  4. package/dist/canvas-annotations/CanvasCommentPins.d.ts.map +1 -0
  5. package/dist/canvas-annotations/CanvasCommentPins.js +513 -0
  6. package/dist/canvas-annotations/CanvasCommentPins.js.map +1 -0
  7. package/dist/canvas-annotations/DrawOverlay.d.ts +108 -0
  8. package/dist/canvas-annotations/DrawOverlay.d.ts.map +1 -0
  9. package/dist/canvas-annotations/DrawOverlay.js +746 -0
  10. package/dist/canvas-annotations/DrawOverlay.js.map +1 -0
  11. package/dist/canvas-annotations/DrawOverlay.spec.d.ts +2 -0
  12. package/dist/canvas-annotations/DrawOverlay.spec.d.ts.map +1 -0
  13. package/dist/canvas-annotations/DrawOverlay.spec.js +111 -0
  14. package/dist/canvas-annotations/DrawOverlay.spec.js.map +1 -0
  15. package/dist/canvas-annotations/index.d.ts +4 -0
  16. package/dist/canvas-annotations/index.d.ts.map +1 -0
  17. package/dist/canvas-annotations/index.js +3 -0
  18. package/dist/canvas-annotations/index.js.map +1 -0
  19. package/dist/canvas-annotations/types.d.ts +8 -0
  20. package/dist/canvas-annotations/types.d.ts.map +1 -0
  21. package/dist/canvas-annotations/types.js +2 -0
  22. package/dist/canvas-annotations/types.js.map +1 -0
  23. package/dist/canvas-interactions/canvas-interactions.d.ts +334 -0
  24. package/dist/canvas-interactions/canvas-interactions.d.ts.map +1 -0
  25. package/dist/canvas-interactions/canvas-interactions.js +451 -0
  26. package/dist/canvas-interactions/canvas-interactions.js.map +1 -0
  27. package/dist/canvas-interactions/canvas-interactions.spec.d.ts +2 -0
  28. package/dist/canvas-interactions/canvas-interactions.spec.d.ts.map +1 -0
  29. package/dist/canvas-interactions/canvas-interactions.spec.js +538 -0
  30. package/dist/canvas-interactions/canvas-interactions.spec.js.map +1 -0
  31. package/dist/canvas-interactions/index.d.ts +2 -0
  32. package/dist/canvas-interactions/index.d.ts.map +1 -0
  33. package/dist/canvas-interactions/index.js +2 -0
  34. package/dist/canvas-interactions/index.js.map +1 -0
  35. package/dist/composer/runtime-adapters.d.ts.map +1 -1
  36. package/dist/composer/runtime-adapters.js +13 -10
  37. package/dist/composer/runtime-adapters.js.map +1 -1
  38. package/dist/composer/runtime-adapters.spec.d.ts +2 -0
  39. package/dist/composer/runtime-adapters.spec.d.ts.map +1 -0
  40. package/dist/composer/runtime-adapters.spec.js +54 -0
  41. package/dist/composer/runtime-adapters.spec.js.map +1 -0
  42. package/dist/design-tweaks/scrub-input-utils.d.ts +61 -0
  43. package/dist/design-tweaks/scrub-input-utils.d.ts.map +1 -0
  44. package/dist/design-tweaks/scrub-input-utils.js +235 -0
  45. package/dist/design-tweaks/scrub-input-utils.js.map +1 -0
  46. package/dist/design-tweaks/scrub-input.d.ts +66 -0
  47. package/dist/design-tweaks/scrub-input.d.ts.map +1 -0
  48. package/dist/design-tweaks/scrub-input.js +313 -0
  49. package/dist/design-tweaks/scrub-input.js.map +1 -0
  50. package/dist/design-tweaks/visual-style-controls.d.ts +2 -12
  51. package/dist/design-tweaks/visual-style-controls.d.ts.map +1 -1
  52. package/dist/design-tweaks/visual-style-controls.js +3 -107
  53. package/dist/design-tweaks/visual-style-controls.js.map +1 -1
  54. package/dist/design-tweaks/visual-style-controls.spec.js +26 -0
  55. package/dist/design-tweaks/visual-style-controls.spec.js.map +1 -1
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1 -0
  59. package/dist/index.js.map +1 -1
  60. package/package.json +29 -1
  61. package/src/canvas-annotations/CanvasCommentPins.tsx +861 -0
  62. package/src/canvas-annotations/DrawOverlay.spec.tsx +145 -0
  63. package/src/canvas-annotations/DrawOverlay.tsx +1233 -0
  64. package/src/canvas-annotations/index.ts +15 -0
  65. package/src/canvas-annotations/types.ts +14 -0
  66. package/src/canvas-interactions/canvas-interactions.spec.ts +688 -0
  67. package/src/canvas-interactions/canvas-interactions.ts +933 -0
  68. package/src/canvas-interactions/index.ts +67 -0
  69. package/src/composer/runtime-adapters.spec.tsx +83 -0
  70. package/src/composer/runtime-adapters.tsx +16 -11
  71. package/src/design-tweaks/scrub-input-utils.ts +311 -0
  72. package/src/design-tweaks/scrub-input.tsx +491 -0
  73. package/src/design-tweaks/visual-style-controls.spec.tsx +60 -0
  74. package/src/design-tweaks/visual-style-controls.tsx +23 -168
  75. package/src/index.ts +1 -0
@@ -0,0 +1,145 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import { act, type ReactNode } from "react";
4
+ import { createRoot, type Root } from "react-dom/client";
5
+ import { toast } from "sonner";
6
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
7
+
8
+ import { DrawOverlay } from "./DrawOverlay.js";
9
+
10
+ vi.mock("../ui/tooltip.js", () => ({
11
+ Tooltip: ({ children }: { children: ReactNode }) => children,
12
+ TooltipContent: () => null,
13
+ TooltipProvider: ({ children }: { children: ReactNode }) => children,
14
+ TooltipTrigger: ({ children }: { children: ReactNode }) => children,
15
+ }));
16
+
17
+ vi.mock("sonner", () => ({ toast: vi.fn() }));
18
+
19
+ const CANVAS_RECT = {
20
+ x: 0,
21
+ y: 0,
22
+ left: 0,
23
+ top: 0,
24
+ right: 200,
25
+ bottom: 100,
26
+ width: 200,
27
+ height: 100,
28
+ toJSON: () => ({}),
29
+ } as DOMRect;
30
+
31
+ function pointerEvent(type: string, clientX: number, clientY: number) {
32
+ return new PointerEvent(type, {
33
+ bubbles: true,
34
+ cancelable: true,
35
+ button: 0,
36
+ clientX,
37
+ clientY,
38
+ isPrimary: true,
39
+ pointerId: 1,
40
+ pointerType: "mouse",
41
+ });
42
+ }
43
+
44
+ describe("DrawOverlay clear undo", () => {
45
+ let container: HTMLDivElement;
46
+ let root: Root;
47
+ let canvas: HTMLCanvasElement;
48
+ const onSend = vi.fn();
49
+
50
+ const render = async (scopeKey: string) => {
51
+ await act(async () => {
52
+ root.render(
53
+ <DrawOverlay
54
+ translate={(key) => key}
55
+ visible
56
+ scopeKey={scopeKey}
57
+ onClose={vi.fn()}
58
+ onSend={onSend}
59
+ />,
60
+ );
61
+ });
62
+ };
63
+
64
+ beforeEach(async () => {
65
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
66
+ vi.stubGlobal(
67
+ "requestAnimationFrame",
68
+ vi.fn(() => 1),
69
+ );
70
+ vi.stubGlobal("cancelAnimationFrame", vi.fn());
71
+ vi.stubGlobal(
72
+ "ResizeObserver",
73
+ class {
74
+ observe() {}
75
+ disconnect() {}
76
+ },
77
+ );
78
+ Object.defineProperty(HTMLCanvasElement.prototype, "getContext", {
79
+ configurable: true,
80
+ value: () => ({
81
+ beginPath: vi.fn(),
82
+ clearRect: vi.fn(),
83
+ lineTo: vi.fn(),
84
+ moveTo: vi.fn(),
85
+ scale: vi.fn(),
86
+ stroke: vi.fn(),
87
+ }),
88
+ });
89
+
90
+ container = document.createElement("div");
91
+ document.body.append(container);
92
+ root = createRoot(container);
93
+ await render("screen-a");
94
+
95
+ const renderedCanvas =
96
+ container.querySelector<HTMLCanvasElement>("[data-draw-canvas]");
97
+ if (!renderedCanvas) throw new Error("Draw canvas did not render");
98
+ canvas = renderedCanvas;
99
+ Object.defineProperty(canvas, "getBoundingClientRect", {
100
+ configurable: true,
101
+ value: () => CANVAS_RECT,
102
+ });
103
+ Object.defineProperties(canvas, {
104
+ setPointerCapture: { configurable: true, value: vi.fn() },
105
+ hasPointerCapture: { configurable: true, value: () => false },
106
+ releasePointerCapture: { configurable: true, value: vi.fn() },
107
+ });
108
+ });
109
+
110
+ afterEach(() => {
111
+ act(() => root.unmount());
112
+ container.remove();
113
+ vi.restoreAllMocks();
114
+ vi.unstubAllGlobals();
115
+ });
116
+
117
+ it("does not restore a cleared batch after the canvas scope changes", async () => {
118
+ await act(async () => {
119
+ canvas.dispatchEvent(pointerEvent("pointerdown", 20, 20));
120
+ canvas.dispatchEvent(pointerEvent("pointerup", 60, 40));
121
+ });
122
+ const clear = document.querySelector<HTMLButtonElement>(
123
+ '[data-testid="draw-clear-all"]',
124
+ );
125
+ expect(clear?.disabled).toBe(false);
126
+ await act(async () => {
127
+ clear?.click();
128
+ });
129
+
130
+ const clearToastOptions = vi.mocked(toast).mock.calls.at(-1)?.[1] as
131
+ | { action?: { onClick?: () => void } }
132
+ | undefined;
133
+ expect(clearToastOptions?.action?.onClick).toBeTypeOf("function");
134
+
135
+ await render("screen-b");
136
+ await act(async () => clearToastOptions?.action?.onClick?.());
137
+
138
+ const send = document.querySelector<HTMLButtonElement>(
139
+ '[data-testid="draw-send"]',
140
+ );
141
+ expect(send?.disabled).toBe(true);
142
+ await act(async () => send?.click());
143
+ expect(onSend).not.toHaveBeenCalled();
144
+ });
145
+ });