@solhun/feedback-kit-web 0.7.0 → 0.9.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.
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { ElementInfo, FeedbackPin, FeedbackScreenshot, FeedbackHint, FeedbackReport, SubmitOutcome, QueueStatus, ReportParts, ScreenshotCapture, ScreenshotReencode, WidgetControllerOpts, HintProvider, WidgetController, FeedbackStorage, ContextProviders } from '@solhun/feedback-kit-core';
1
+ import { ElementInfo, FeedbackPin, FeedbackScreenshot, FeedbackHint, FeedbackReport, SubmitOutcome, QueueStatus, ReportParts, ScreenshotCapture, ScreenshotReencode, RouteWatcher, WidgetControllerOpts, HintProvider, WidgetController, FeedbackStorage, ContextProviders, DiagnosticsInstallOpts, RouteTrailStore } from '@solhun/feedback-kit-core';
2
2
  export { COMMENT_MAX_CHARS, COMMENT_REQUIRED_MESSAGE, COMMENT_TOO_LONG_MESSAGE, ElementInfo, ElementLike, FLOATING_BUTTON_ID, FeedbackAdapter, FeedbackConfig, FeedbackContext, FeedbackHint, FeedbackPin, FeedbackReport, FeedbackStorage, FeedbackUser, HintCatalog, HintElementRule, HintPlatform, HintProvider, HintRankInput, HintScope, MODAL_ACTION_HINT_TOGGLE, MODAL_ACTION_PICK, ModalSubmitStatus, ReportModalController, ReportModalState, ResolvedConfig, SCREENSHOT_FAILED_MESSAGE, SOURCE_ATTR, SUBMIT_DONE_MESSAGE, SUBMIT_PENDING_MESSAGE, ScreenshotStatus, SubmitResult, Visibility, VisibilityEnv, VisibilityFn, WidgetController, WidgetPosition, WidgetScreen, WidgetState, denormalizePin, normalizePin, parseSourceAttr, rankHints, resolveConfig, shouldShowWidget, sourceFromElement } from '@solhun/feedback-kit-core';
3
3
  import * as react from 'react';
4
4
 
@@ -163,6 +163,12 @@ interface ElementPickingOpts {
163
163
  * `rankHints` 한 결과를 돌려준다. 없으면(힌트 기능이 꺼져 있으면) 팝업에 칩이 안 뜬다.
164
164
  */
165
165
  rankHintsFor?: ((element: ElementInfo | null) => readonly FeedbackHint[]) | null;
166
+ /**
167
+ * 화면 이동 감시자. 기본은 웹 공용 감시자(`webRouteWatcher`) — **진단의 화면 이동 궤적과
168
+ * 같은 것**이다. 여기만 따로 구현하면 한쪽이 이동을 놓쳤을 때 원인을 가릴 수 없다.
169
+ * `null` 을 주면 감시하지 않는다(테스트에서 `syncPath()` 를 직접 부를 때).
170
+ */
171
+ watchRoutes?: RouteWatcher | null;
166
172
  }
167
173
  declare class ElementPickingController {
168
174
  private readonly queue;
@@ -186,10 +192,14 @@ declare class ElementPickingController {
186
192
  */
187
193
  private paused;
188
194
  private attached;
195
+ /** 같은 요소 위 mousemove 마다 React 경로·선택자를 다시 만들지 않기 위한 캐시. */
196
+ private hoveredTarget;
189
197
  private hovered;
190
198
  private popup;
191
199
  private markers;
192
- private pathWatch;
200
+ private readonly watchRoutes;
201
+ /** 경로 감시 해제. 감시 중이 아니면 null. */
202
+ private unwatchRoutes;
193
203
  private lastPathname;
194
204
  private saving;
195
205
  /** 늦게 끝난 캡처가 다음 주석의 그림을 덮지 못하게 하는 세대 번호. */
@@ -203,6 +213,7 @@ declare class ElementPickingController {
203
213
  private userToggledHints;
204
214
  private readonly onClick;
205
215
  private readonly onMouseOver;
216
+ private readonly onMouseMove;
206
217
  constructor(opts: ElementPickingOpts);
207
218
  getState(): PickingState;
208
219
  get isActive(): boolean;
@@ -228,6 +239,17 @@ declare class ElementPickingController {
228
239
  * @returns 되살아났으면 true.
229
240
  */
230
241
  restore(): boolean;
242
+ /**
243
+ * 이 화면에 쌓인 마커 표시를 지운다.
244
+ *
245
+ * 지워지는 건 **화면 표시뿐**이다. 제보는 이미 큐를 거쳐 수집처로 갔으므로 없어지지 않는다.
246
+ * 마커는 `localStorage` 에 남아 새로고침에도 살아남는데(그게 원래 목적이다) 정작 치울
247
+ * 수단이 없어서, 한 번 보낸 [완료] 배지가 그 화면을 볼 때마다 계속 따라다녔다.
248
+ *
249
+ * 화면에 보이는 목록의 기준은 `lastPathname` 이다(`reconcileMarkerOutcomes` 와 같다).
250
+ * 이동 직후 아직 `syncPath` 가 안 돈 순간에도 "지금 눈에 보이는 것"이 지워져야 한다.
251
+ */
252
+ clearMarkers(): void;
231
253
  /** 경로가 바뀌었을 때 그 경로의 마커로 갈아 끼운다. */
232
254
  syncPath(): readonly StoredMarker[];
233
255
  dispose(): void;
@@ -332,6 +354,27 @@ interface WebWidgetOpts extends Omit<WidgetControllerOpts, "platform" | "initial
332
354
  };
333
355
  /** 요소를 고른 뒤 띄울 UI. 기본은 `popup`. */
334
356
  pickTarget?: PickTarget;
357
+ /**
358
+ * 플로팅 버튼을 눌렀을 때 무엇이 열리는가. **웹 기본은 `"pick"`(요소 지목)** 이다.
359
+ *
360
+ * 웹 제보는 대개 "이 요소요" 라서, 지목을 매번 켜게 하면 그 한 단계가 계속 남는다. 0.8.0
361
+ * 까지는 모달이 기본이었으므로, 그 동작을 유지하려면 `"report"` 를 준다.
362
+ *
363
+ * 앱에는 지목이 없어 이 설정이 없다(앱은 언제나 모달이다) — 없는 기능을 켤 수는 없다.
364
+ */
365
+ defaultMode?: "pick" | "report";
366
+ /**
367
+ * 개발용 모드. 제보를 **수집처로 보내지 않고 클립보드에 복사**한다.
368
+ *
369
+ * 개발자가 로컬에서 고치는 중일 때 라쏘런 왕복(보내고·트리아지하고·이슈가 되고)이 오히려
370
+ * 느리다. 정작 고칠 사람은 지금 그 화면을 보고 있는 본인이다.
371
+ *
372
+ * **기본은 꺼짐이고 마운트 시점에 고정한다** — 도는 중에 바뀌면 "지금 보낸 건 어디로 갔나"가
373
+ * 생긴다. 켜져 있는 동안은 그 사실이 화면에 계속 보여야 한다(조용한 유실을 막는 유일한 방어).
374
+ *
375
+ * 웹 전용이다. 앱에는 DOM 이 없어 선택자·컴포넌트 경로·소스 경로가 성립하지 않는다.
376
+ */
377
+ devMode?: boolean;
335
378
  /**
336
379
  * 정적 힌트 목록(설정으로 직접 넘김). 주면 서버에서 받아오지 않는다 — 도입 초기·오프라인
337
380
  * 데모·테스트용이다. 서버 목록과 합치지 않는다(둘을 섞으면 무엇이 보이는지 설명이 안 된다).
@@ -375,5 +418,58 @@ declare function createWebStorage(backing?: SyncStorage): FeedbackStorage;
375
418
  * 서버 렌더 단계에서 실행될 수 있기 때문이다.
376
419
  */
377
420
  declare function webContextProviders(): ContextProviders;
421
+ /**
422
+ * 웹 진단 수집의 기본 배선.
423
+ *
424
+ * `sharedDiagnostics.install(webDiagnosticsOptions({ ... }))` 로 쓴다. 넘긴 값이 기본값을
425
+ * 덮으므로 감시자·저장소를 직접 갈아 끼울 수도 있다.
426
+ *
427
+ * 왜 패키지가 주나: 감시자를 호스트가 깜빡하면 **궤적만 조용히 빈다.** 네트워크·로그는
428
+ * 그대로 모이니 화면상 아무 문제가 없어 보이고, "이 제보엔 이동이 없었나 보다"로 읽힌다 —
429
+ * 빠진 것과 없는 것이 구분되지 않는 실패다.
430
+ *
431
+ * 진단을 끄면(`captureDiagnostics: false`) install 자체가 안 불리므로 궤적도 같이 꺼진다.
432
+ * 궤적만 따로 켜고 끄는 스위치는 만들지 않는다.
433
+ */
434
+ declare function webDiagnosticsOptions(opts?: DiagnosticsInstallOpts): DiagnosticsInstallOpts;
435
+
436
+ /** 감시자가 들여다보는 전역. 테스트에서는 가짜를 넣는다. */
437
+ interface RouteWatchTarget {
438
+ location?: {
439
+ pathname?: string;
440
+ } | null;
441
+ history?: {
442
+ pushState?: (...args: unknown[]) => unknown;
443
+ replaceState?: (...args: unknown[]) => unknown;
444
+ } | null;
445
+ addEventListener?: (type: string, listener: () => void) => void;
446
+ removeEventListener?: (type: string, listener: () => void) => void;
447
+ }
448
+ /**
449
+ * 경로 감시자 하나를 만든다.
450
+ *
451
+ * 돌려주는 것은 **구독 함수**다. 구독하면 현재 경로를 한 번 흘리고(마운트 시점의 화면이
452
+ * 궤적의 첫 줄이 된다), 이후 이동마다 새 경로를 흘린다. 해제 함수를 부르면 구독이 끊긴다.
453
+ *
454
+ * `history` 패치는 **첫 구독자가 생길 때 걸고 마지막이 나가면 푼다.** 구독자가 없는데 패치가
455
+ * 남아 있으면, 위젯을 떼어낸 뒤에도 호스트의 모든 화면 이동이 우리 코드를 거친다.
456
+ */
457
+ declare function createRouteWatcher(target?: RouteWatchTarget | null): RouteWatcher;
458
+ /**
459
+ * 웹 기본 감시자. **모듈 스코프에 하나**라서 궤적과 지목이 같은 인스턴스를 물려 쓴다.
460
+ * 각자 `createRouteWatcher()` 를 부르면 `history` 가 두 겹으로 패치돼, 해제 순서가 엇갈릴 때
461
+ * 원본이 복구되지 않는다.
462
+ */
463
+ declare const webRouteWatcher: RouteWatcher;
464
+ /**
465
+ * 궤적을 남길 탭 단위 저장소(`sessionStorage`).
466
+ *
467
+ * `localStorage` 가 아닌 이유: 궤적은 **이 탭에서 지금 지나온 길**이다. 탭을 나눠 쓰면
468
+ * 다른 탭의 이동이 섞여 재현 절차가 거짓이 된다.
469
+ *
470
+ * 프라이빗 모드·차단 설정에서는 접근 자체가 던진다. 그때는 `null` 을 돌려주고 궤적은
471
+ * 메모리로 떨어진다 — 저장을 못 한다고 제보를 막지 않는다.
472
+ */
473
+ declare function webRouteStorage(): RouteTrailStore | null;
378
474
 
379
- export { type AnnotationPopupState, ELEMENT_TEXT_MAX_CHARS, ElementPickingController, type ElementPickingOpts, FeedbackKit, type FeedbackKitProps, MARKER_KEY_PREFIX, MAX_MARKERS_PER_PATH, type MarkerStatus, MarkerStore, OWN_UI_ATTR, PICKING_MODE_KEY, type PickingListener, type PickingQueueLike, type PickingState, SELECTOR_MAX_DEPTH, type StorageLike, type StoredMarker, type WebWidget, type WebWidgetOpts, captureWebScreenshot, createWebStorage, createWebWidget, cssSelectorPath, describeElement, isOwnUi, reactComponentPath, reactComponentSummary, reencodeWebScreenshot, visibleText, webContextProviders };
475
+ export { type AnnotationPopupState, ELEMENT_TEXT_MAX_CHARS, ElementPickingController, type ElementPickingOpts, FeedbackKit, type FeedbackKitProps, MARKER_KEY_PREFIX, MAX_MARKERS_PER_PATH, type MarkerStatus, MarkerStore, OWN_UI_ATTR, PICKING_MODE_KEY, type PickingListener, type PickingQueueLike, type PickingState, type RouteWatchTarget, SELECTOR_MAX_DEPTH, type StorageLike, type StoredMarker, type WebWidget, type WebWidgetOpts, captureWebScreenshot, createRouteWatcher, createWebStorage, createWebWidget, cssSelectorPath, describeElement, isOwnUi, reactComponentPath, reactComponentSummary, reencodeWebScreenshot, visibleText, webContextProviders, webDiagnosticsOptions, webRouteStorage, webRouteWatcher };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ElementInfo, FeedbackPin, FeedbackScreenshot, FeedbackHint, FeedbackReport, SubmitOutcome, QueueStatus, ReportParts, ScreenshotCapture, ScreenshotReencode, WidgetControllerOpts, HintProvider, WidgetController, FeedbackStorage, ContextProviders } from '@solhun/feedback-kit-core';
1
+ import { ElementInfo, FeedbackPin, FeedbackScreenshot, FeedbackHint, FeedbackReport, SubmitOutcome, QueueStatus, ReportParts, ScreenshotCapture, ScreenshotReencode, RouteWatcher, WidgetControllerOpts, HintProvider, WidgetController, FeedbackStorage, ContextProviders, DiagnosticsInstallOpts, RouteTrailStore } from '@solhun/feedback-kit-core';
2
2
  export { COMMENT_MAX_CHARS, COMMENT_REQUIRED_MESSAGE, COMMENT_TOO_LONG_MESSAGE, ElementInfo, ElementLike, FLOATING_BUTTON_ID, FeedbackAdapter, FeedbackConfig, FeedbackContext, FeedbackHint, FeedbackPin, FeedbackReport, FeedbackStorage, FeedbackUser, HintCatalog, HintElementRule, HintPlatform, HintProvider, HintRankInput, HintScope, MODAL_ACTION_HINT_TOGGLE, MODAL_ACTION_PICK, ModalSubmitStatus, ReportModalController, ReportModalState, ResolvedConfig, SCREENSHOT_FAILED_MESSAGE, SOURCE_ATTR, SUBMIT_DONE_MESSAGE, SUBMIT_PENDING_MESSAGE, ScreenshotStatus, SubmitResult, Visibility, VisibilityEnv, VisibilityFn, WidgetController, WidgetPosition, WidgetScreen, WidgetState, denormalizePin, normalizePin, parseSourceAttr, rankHints, resolveConfig, shouldShowWidget, sourceFromElement } from '@solhun/feedback-kit-core';
3
3
  import * as react from 'react';
4
4
 
@@ -163,6 +163,12 @@ interface ElementPickingOpts {
163
163
  * `rankHints` 한 결과를 돌려준다. 없으면(힌트 기능이 꺼져 있으면) 팝업에 칩이 안 뜬다.
164
164
  */
165
165
  rankHintsFor?: ((element: ElementInfo | null) => readonly FeedbackHint[]) | null;
166
+ /**
167
+ * 화면 이동 감시자. 기본은 웹 공용 감시자(`webRouteWatcher`) — **진단의 화면 이동 궤적과
168
+ * 같은 것**이다. 여기만 따로 구현하면 한쪽이 이동을 놓쳤을 때 원인을 가릴 수 없다.
169
+ * `null` 을 주면 감시하지 않는다(테스트에서 `syncPath()` 를 직접 부를 때).
170
+ */
171
+ watchRoutes?: RouteWatcher | null;
166
172
  }
167
173
  declare class ElementPickingController {
168
174
  private readonly queue;
@@ -186,10 +192,14 @@ declare class ElementPickingController {
186
192
  */
187
193
  private paused;
188
194
  private attached;
195
+ /** 같은 요소 위 mousemove 마다 React 경로·선택자를 다시 만들지 않기 위한 캐시. */
196
+ private hoveredTarget;
189
197
  private hovered;
190
198
  private popup;
191
199
  private markers;
192
- private pathWatch;
200
+ private readonly watchRoutes;
201
+ /** 경로 감시 해제. 감시 중이 아니면 null. */
202
+ private unwatchRoutes;
193
203
  private lastPathname;
194
204
  private saving;
195
205
  /** 늦게 끝난 캡처가 다음 주석의 그림을 덮지 못하게 하는 세대 번호. */
@@ -203,6 +213,7 @@ declare class ElementPickingController {
203
213
  private userToggledHints;
204
214
  private readonly onClick;
205
215
  private readonly onMouseOver;
216
+ private readonly onMouseMove;
206
217
  constructor(opts: ElementPickingOpts);
207
218
  getState(): PickingState;
208
219
  get isActive(): boolean;
@@ -228,6 +239,17 @@ declare class ElementPickingController {
228
239
  * @returns 되살아났으면 true.
229
240
  */
230
241
  restore(): boolean;
242
+ /**
243
+ * 이 화면에 쌓인 마커 표시를 지운다.
244
+ *
245
+ * 지워지는 건 **화면 표시뿐**이다. 제보는 이미 큐를 거쳐 수집처로 갔으므로 없어지지 않는다.
246
+ * 마커는 `localStorage` 에 남아 새로고침에도 살아남는데(그게 원래 목적이다) 정작 치울
247
+ * 수단이 없어서, 한 번 보낸 [완료] 배지가 그 화면을 볼 때마다 계속 따라다녔다.
248
+ *
249
+ * 화면에 보이는 목록의 기준은 `lastPathname` 이다(`reconcileMarkerOutcomes` 와 같다).
250
+ * 이동 직후 아직 `syncPath` 가 안 돈 순간에도 "지금 눈에 보이는 것"이 지워져야 한다.
251
+ */
252
+ clearMarkers(): void;
231
253
  /** 경로가 바뀌었을 때 그 경로의 마커로 갈아 끼운다. */
232
254
  syncPath(): readonly StoredMarker[];
233
255
  dispose(): void;
@@ -332,6 +354,27 @@ interface WebWidgetOpts extends Omit<WidgetControllerOpts, "platform" | "initial
332
354
  };
333
355
  /** 요소를 고른 뒤 띄울 UI. 기본은 `popup`. */
334
356
  pickTarget?: PickTarget;
357
+ /**
358
+ * 플로팅 버튼을 눌렀을 때 무엇이 열리는가. **웹 기본은 `"pick"`(요소 지목)** 이다.
359
+ *
360
+ * 웹 제보는 대개 "이 요소요" 라서, 지목을 매번 켜게 하면 그 한 단계가 계속 남는다. 0.8.0
361
+ * 까지는 모달이 기본이었으므로, 그 동작을 유지하려면 `"report"` 를 준다.
362
+ *
363
+ * 앱에는 지목이 없어 이 설정이 없다(앱은 언제나 모달이다) — 없는 기능을 켤 수는 없다.
364
+ */
365
+ defaultMode?: "pick" | "report";
366
+ /**
367
+ * 개발용 모드. 제보를 **수집처로 보내지 않고 클립보드에 복사**한다.
368
+ *
369
+ * 개발자가 로컬에서 고치는 중일 때 라쏘런 왕복(보내고·트리아지하고·이슈가 되고)이 오히려
370
+ * 느리다. 정작 고칠 사람은 지금 그 화면을 보고 있는 본인이다.
371
+ *
372
+ * **기본은 꺼짐이고 마운트 시점에 고정한다** — 도는 중에 바뀌면 "지금 보낸 건 어디로 갔나"가
373
+ * 생긴다. 켜져 있는 동안은 그 사실이 화면에 계속 보여야 한다(조용한 유실을 막는 유일한 방어).
374
+ *
375
+ * 웹 전용이다. 앱에는 DOM 이 없어 선택자·컴포넌트 경로·소스 경로가 성립하지 않는다.
376
+ */
377
+ devMode?: boolean;
335
378
  /**
336
379
  * 정적 힌트 목록(설정으로 직접 넘김). 주면 서버에서 받아오지 않는다 — 도입 초기·오프라인
337
380
  * 데모·테스트용이다. 서버 목록과 합치지 않는다(둘을 섞으면 무엇이 보이는지 설명이 안 된다).
@@ -375,5 +418,58 @@ declare function createWebStorage(backing?: SyncStorage): FeedbackStorage;
375
418
  * 서버 렌더 단계에서 실행될 수 있기 때문이다.
376
419
  */
377
420
  declare function webContextProviders(): ContextProviders;
421
+ /**
422
+ * 웹 진단 수집의 기본 배선.
423
+ *
424
+ * `sharedDiagnostics.install(webDiagnosticsOptions({ ... }))` 로 쓴다. 넘긴 값이 기본값을
425
+ * 덮으므로 감시자·저장소를 직접 갈아 끼울 수도 있다.
426
+ *
427
+ * 왜 패키지가 주나: 감시자를 호스트가 깜빡하면 **궤적만 조용히 빈다.** 네트워크·로그는
428
+ * 그대로 모이니 화면상 아무 문제가 없어 보이고, "이 제보엔 이동이 없었나 보다"로 읽힌다 —
429
+ * 빠진 것과 없는 것이 구분되지 않는 실패다.
430
+ *
431
+ * 진단을 끄면(`captureDiagnostics: false`) install 자체가 안 불리므로 궤적도 같이 꺼진다.
432
+ * 궤적만 따로 켜고 끄는 스위치는 만들지 않는다.
433
+ */
434
+ declare function webDiagnosticsOptions(opts?: DiagnosticsInstallOpts): DiagnosticsInstallOpts;
435
+
436
+ /** 감시자가 들여다보는 전역. 테스트에서는 가짜를 넣는다. */
437
+ interface RouteWatchTarget {
438
+ location?: {
439
+ pathname?: string;
440
+ } | null;
441
+ history?: {
442
+ pushState?: (...args: unknown[]) => unknown;
443
+ replaceState?: (...args: unknown[]) => unknown;
444
+ } | null;
445
+ addEventListener?: (type: string, listener: () => void) => void;
446
+ removeEventListener?: (type: string, listener: () => void) => void;
447
+ }
448
+ /**
449
+ * 경로 감시자 하나를 만든다.
450
+ *
451
+ * 돌려주는 것은 **구독 함수**다. 구독하면 현재 경로를 한 번 흘리고(마운트 시점의 화면이
452
+ * 궤적의 첫 줄이 된다), 이후 이동마다 새 경로를 흘린다. 해제 함수를 부르면 구독이 끊긴다.
453
+ *
454
+ * `history` 패치는 **첫 구독자가 생길 때 걸고 마지막이 나가면 푼다.** 구독자가 없는데 패치가
455
+ * 남아 있으면, 위젯을 떼어낸 뒤에도 호스트의 모든 화면 이동이 우리 코드를 거친다.
456
+ */
457
+ declare function createRouteWatcher(target?: RouteWatchTarget | null): RouteWatcher;
458
+ /**
459
+ * 웹 기본 감시자. **모듈 스코프에 하나**라서 궤적과 지목이 같은 인스턴스를 물려 쓴다.
460
+ * 각자 `createRouteWatcher()` 를 부르면 `history` 가 두 겹으로 패치돼, 해제 순서가 엇갈릴 때
461
+ * 원본이 복구되지 않는다.
462
+ */
463
+ declare const webRouteWatcher: RouteWatcher;
464
+ /**
465
+ * 궤적을 남길 탭 단위 저장소(`sessionStorage`).
466
+ *
467
+ * `localStorage` 가 아닌 이유: 궤적은 **이 탭에서 지금 지나온 길**이다. 탭을 나눠 쓰면
468
+ * 다른 탭의 이동이 섞여 재현 절차가 거짓이 된다.
469
+ *
470
+ * 프라이빗 모드·차단 설정에서는 접근 자체가 던진다. 그때는 `null` 을 돌려주고 궤적은
471
+ * 메모리로 떨어진다 — 저장을 못 한다고 제보를 막지 않는다.
472
+ */
473
+ declare function webRouteStorage(): RouteTrailStore | null;
378
474
 
379
- export { type AnnotationPopupState, ELEMENT_TEXT_MAX_CHARS, ElementPickingController, type ElementPickingOpts, FeedbackKit, type FeedbackKitProps, MARKER_KEY_PREFIX, MAX_MARKERS_PER_PATH, type MarkerStatus, MarkerStore, OWN_UI_ATTR, PICKING_MODE_KEY, type PickingListener, type PickingQueueLike, type PickingState, SELECTOR_MAX_DEPTH, type StorageLike, type StoredMarker, type WebWidget, type WebWidgetOpts, captureWebScreenshot, createWebStorage, createWebWidget, cssSelectorPath, describeElement, isOwnUi, reactComponentPath, reactComponentSummary, reencodeWebScreenshot, visibleText, webContextProviders };
475
+ export { type AnnotationPopupState, ELEMENT_TEXT_MAX_CHARS, ElementPickingController, type ElementPickingOpts, FeedbackKit, type FeedbackKitProps, MARKER_KEY_PREFIX, MAX_MARKERS_PER_PATH, type MarkerStatus, MarkerStore, OWN_UI_ATTR, PICKING_MODE_KEY, type PickingListener, type PickingQueueLike, type PickingState, type RouteWatchTarget, SELECTOR_MAX_DEPTH, type StorageLike, type StoredMarker, type WebWidget, type WebWidgetOpts, captureWebScreenshot, createRouteWatcher, createWebStorage, createWebWidget, cssSelectorPath, describeElement, isOwnUi, reactComponentPath, reactComponentSummary, reencodeWebScreenshot, visibleText, webContextProviders, webDiagnosticsOptions, webRouteStorage, webRouteWatcher };