issue-sticker 0.10.0 → 0.12.0

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.
@@ -27689,8 +27689,8 @@ function registerThree(handle) {
27689
27689
  }
27690
27690
  installThreeAutoDetect();
27691
27691
  export {
27692
- Root2 as A,
27693
- Anchor as B,
27692
+ Anchor as A,
27693
+ Root2 as B,
27694
27694
  CANVAS_INTERACTION_TAG as C,
27695
27695
  DismissableLayer as D,
27696
27696
  Arrow as E,
@@ -27709,15 +27709,15 @@ export {
27709
27709
  createLucideIcon as c,
27710
27710
  usePortalContainer as d,
27711
27711
  OVERLAY_LAYER as e,
27712
- Primitive as f,
27713
- composeEventHandlers as g,
27714
- useDismissableLayerSurface as h,
27715
- useComposedRefs as i,
27716
- Portal as j,
27717
- createContextScope as k,
27718
- createSlot as l,
27719
- useControllableState as m,
27720
- useId as n,
27712
+ useControllableState as f,
27713
+ useId as g,
27714
+ Primitive as h,
27715
+ composeEventHandlers as i,
27716
+ useDismissableLayerSurface as j,
27717
+ useComposedRefs as k,
27718
+ Portal as l,
27719
+ createContextScope as m,
27720
+ createSlot as n,
27721
27721
  useLayoutEffect2 as o,
27722
27722
  useCallbackRef as p,
27723
27723
  PortalContainerProvider as q,
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
- import { P as Presence, j as Portal$1, E as Arrow, D as DismissableLayer, y as Content, G as Root, i as useComposedRefs, z as createPopperScope, k as createContextScope, H as createSlottable, n as useId, m as useControllableState, A as Root2, B as Anchor, f as Primitive, g as composeEventHandlers, d as usePortalContainer, a as cn, e as OVERLAY_LAYER, s as stopEscapePropagation } from "./three-_bdgDAmI.js";
3
+ import { P as Presence, l as Portal$1, E as Arrow, D as DismissableLayer, y as Content, G as Root, k as useComposedRefs, z as createPopperScope, m as createContextScope, H as createSlottable, g as useId, f as useControllableState, B as Root2, A as Anchor, h as Primitive, i as composeEventHandlers, d as usePortalContainer, a as cn, e as OVERLAY_LAYER, s as stopEscapePropagation } from "./three-B228j4M6.js";
4
4
  var [createTooltipContext] = createContextScope("Tooltip", [
5
5
  createPopperScope
6
6
  ]);
package/headless.d.ts CHANGED
@@ -19,6 +19,28 @@ export interface IssuePosition {
19
19
  width: number;
20
20
  height: number;
21
21
  };
22
+ /** 대상 요소를 다시 찾기 위한 의미 지문. 캡처가 채운다. */
23
+ locator?: {
24
+ v: number;
25
+ tag: string;
26
+ role?: string;
27
+ name?: string;
28
+ text?: string;
29
+ attrs?: Record<string, string>;
30
+ classes?: string[];
31
+ context?: {
32
+ container?: { role: string; name?: string };
33
+ heading?: string;
34
+ landmark?: string;
35
+ rowText?: string;
36
+ };
37
+ roleIndex?: number;
38
+ };
39
+ /** 대상 요소를 그린 UI 컴포넌트 경로(바깥→안쪽). 수집하지 못하면 없다. */
40
+ component?: {
41
+ framework: string;
42
+ path: string[];
43
+ };
22
44
  }
23
45
 
24
46
  export interface NetworkLog {
@@ -79,6 +101,21 @@ export interface IssueStickerSummary {
79
101
  readonly color: string;
80
102
  readonly label: string | null;
81
103
  } | null;
104
+ /** 영상 URL. 업로드 중이거나 영상이 없으면 `null` 입니다. */
105
+ video?: string | null;
106
+ /**
107
+ * 영상 업로드 상태. `submitDraft()` 직후에는 `'uploading'` 이고, 업로드가 끝나면
108
+ * `snapshot.issues` 의 같은 이슈가 `'ready'` 로 바뀝니다. 영상 URL 은 `openIssue()` 로 연
109
+ * `snapshot.activeIssue.video` 에서 확인합니다. 업로드를 끝내 포기하면 `'failed'` 입니다.
110
+ * 영상이 없으면 `null`.
111
+ */
112
+ video_status?: 'uploading' | 'ready' | 'failed' | null;
113
+ /**
114
+ * 세션 리플레이 업로드 상태. 리플레이가 있는 이슈는 `submitDraft()`·`createIssue()` 직후
115
+ * `'uploading'` 이고, 업로드가 끝나면 `snapshot.issues` 의 같은 이슈가 `'ready'` 로 바뀝니다.
116
+ * 업로드를 끝내 포기하면 `'failed'` 이고 그 이슈에는 리플레이가 없습니다. 리플레이가 없으면 `null`.
117
+ */
118
+ replay_status?: 'uploading' | 'ready' | 'failed' | null;
82
119
  }
83
120
 
84
121
  /** 상세 조회한 이슈. */
@@ -235,6 +272,28 @@ export interface HeadlessSessionReplayState {
235
272
  readonly error: string | null;
236
273
  }
237
274
 
275
+ /** 뒤에서 올리는 영상 하나의 상태. 업로드가 끝나면 목록에서 빠집니다. */
276
+ export interface HeadlessVideoUpload {
277
+ readonly issueId: string;
278
+ /** `failed` 는 네트워크 재시도를 모두 쓴 상태입니다. `retryVideoUpload()` 로 이어 올립니다. */
279
+ readonly status: 'queued' | 'uploading' | 'failed';
280
+ /** 0~1 */
281
+ readonly progress: number;
282
+ }
283
+
284
+ /** 뒤에서 올리는 세션 리플레이·웹소켓 로그 하나의 상태. 업로드가 끝나면 목록에서 빠집니다. */
285
+ export interface HeadlessAttachmentUpload {
286
+ readonly issueId: string;
287
+ readonly kind: 'replay' | 'socket';
288
+ /**
289
+ * `failed` 는 네트워크 재시도를 모두 쓴 상태입니다. 연결이 돌아오거나 다음에 초기화할 때,
290
+ * 또는 `retryVideoUpload(issueId)` 를 부르면 다시 올립니다.
291
+ */
292
+ readonly status: 'queued' | 'uploading' | 'failed';
293
+ /** 0~1 */
294
+ readonly progress: number;
295
+ }
296
+
238
297
  export interface HeadlessSnapshot {
239
298
  readonly phase: HeadlessPhase;
240
299
  readonly auth: HeadlessAuthState;
@@ -243,6 +302,8 @@ export interface HeadlessSnapshot {
243
302
  readonly draft: HeadlessIssueDraft | null;
244
303
  readonly videoCapture: HeadlessVideoCaptureState;
245
304
  readonly sessionReplay: HeadlessSessionReplayState;
305
+ readonly videoUploads: readonly HeadlessVideoUpload[];
306
+ readonly attachmentUploads: readonly HeadlessAttachmentUpload[];
246
307
  readonly formSchema: IssueFormSchema | null;
247
308
  readonly filterSchema: IssueFilterSchema | null;
248
309
  readonly error: IssueStickerHeadlessError | null;
@@ -307,7 +368,13 @@ export interface HeadlessClient {
307
368
  stopVideoCapture(): Promise<void>;
308
369
  setSessionReplayEnabled(enabled: boolean): void;
309
370
  cancelIssueCapture(): void;
371
+ /**
372
+ * 이슈를 생성하고 바로 돌려줍니다. 녹화 영상·세션 리플레이·웹소켓 로그는 이슈가 생성된 뒤
373
+ * 따로 업로드되며, 진행은 `snapshot.videoUploads`·`snapshot.attachmentUploads` 로 확인합니다.
374
+ */
310
375
  submitDraft(input: SubmitDraftInput): Promise<Issue>;
376
+ /** 이슈의 실패한 업로드(영상·세션 리플레이·웹소켓 로그)를 다시 올립니다. */
377
+ retryVideoUpload(issueId: string): void;
311
378
  /**
312
379
  * 유저 액션 없이 코드에서 이슈를 만듭니다. 캡처 단계를 거치지 않으므로 `phase`와
313
380
  * `draft`를 건드리지 않고, 사용자가 이슈를 작성하는 중에도 호출할 수 있습니다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "issue-sticker",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "IssueSticker SDK - Visual bug tracking widget for web applications",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -75,6 +75,7 @@
75
75
  "@tanstack/react-query": "^5.90.12",
76
76
  "class-variance-authority": "^0.7.1",
77
77
  "clsx": "^2.1.1",
78
+ "dom-accessibility-api": "^0.7.1",
78
79
  "es-toolkit": "^1.49.0",
79
80
  "framer-motion": "^12.29.2",
80
81
  "lucide-react": "^0.562.0",