reflet-sdk 0.6.5 → 0.6.6

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 (59) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +100 -2
  3. package/dist/{client-DAdWdIFY.js → client-oFFfRxAM.js} +135 -59
  4. package/dist/client-oFFfRxAM.js.map +1 -0
  5. package/dist/client-transport-B7BdVU7J.d.ts +150 -0
  6. package/dist/client-transport-B7BdVU7J.d.ts.map +1 -0
  7. package/dist/{devtools-layer-CEjzYGBB.js → devtools-layer-B91EVgqg.js} +417 -916
  8. package/dist/devtools-layer-B91EVgqg.js.map +1 -0
  9. package/dist/devtools-next.js +1 -1
  10. package/dist/devtools-vite.js +2 -2
  11. package/dist/feedback.d.ts +7 -1
  12. package/dist/feedback.d.ts.map +1 -1
  13. package/dist/feedback.js +105 -57
  14. package/dist/feedback.js.map +1 -1
  15. package/dist/{handler-BSNmdHXv.js → handler-yA_knIf3.js} +4 -4
  16. package/dist/{handler-BSNmdHXv.js.map → handler-yA_knIf3.js.map} +1 -1
  17. package/dist/index-Buum9tIY.d.ts +230 -0
  18. package/dist/index-Buum9tIY.d.ts.map +1 -0
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +1 -1
  21. package/dist/options-CIBazDPp.d.ts.map +1 -1
  22. package/dist/protocol-vJhQHTcB.js +390 -0
  23. package/dist/protocol-vJhQHTcB.js.map +1 -0
  24. package/dist/{react-context-Caq1fodf.js → react-context-Kazo_JCz.js} +3 -14
  25. package/dist/react-context-Kazo_JCz.js.map +1 -0
  26. package/dist/react.d.ts +43 -3
  27. package/dist/react.d.ts.map +1 -1
  28. package/dist/react.js +389 -3
  29. package/dist/react.js.map +1 -1
  30. package/dist/selection-outline-NzAAAZXR.js +51 -0
  31. package/dist/selection-outline-NzAAAZXR.js.map +1 -0
  32. package/dist/server.js +1 -1
  33. package/dist/server.js.map +1 -1
  34. package/dist/sessions-panel-DVyWzZ3C.js +6011 -0
  35. package/dist/sessions-panel-DVyWzZ3C.js.map +1 -0
  36. package/dist/{submit-MvVjNdYc.js → submit-DYGZQVdG.js} +44 -70
  37. package/dist/submit-DYGZQVdG.js.map +1 -0
  38. package/dist/surveys.d.ts +3 -0
  39. package/dist/surveys.js +2 -0
  40. package/dist/team-activation-DCqh71bl.js +24 -0
  41. package/dist/team-activation-DCqh71bl.js.map +1 -0
  42. package/dist/team-layer-F-9BE4hc.js +423 -0
  43. package/dist/team-layer-F-9BE4hc.js.map +1 -0
  44. package/dist/{types-DnaDEN9Y.d.ts → types-B3XiHPqy.d.ts} +4 -9
  45. package/dist/types-B3XiHPqy.d.ts.map +1 -0
  46. package/dist/use-survey-session-LK6sN1Fg.js +1247 -0
  47. package/dist/use-survey-session-LK6sN1Fg.js.map +1 -0
  48. package/dist/z-index-CwokqVq_.js +15 -0
  49. package/dist/z-index-CwokqVq_.js.map +1 -0
  50. package/package.json +6 -2
  51. package/dist/client-DAdWdIFY.js.map +0 -1
  52. package/dist/client-DF1fdsSC.d.ts +0 -131
  53. package/dist/client-DF1fdsSC.d.ts.map +0 -1
  54. package/dist/devtools-layer-CEjzYGBB.js.map +0 -1
  55. package/dist/protocol-ClqTFzwR.js +0 -35
  56. package/dist/protocol-ClqTFzwR.js.map +0 -1
  57. package/dist/react-context-Caq1fodf.js.map +0 -1
  58. package/dist/submit-MvVjNdYc.js.map +0 -1
  59. package/dist/types-DnaDEN9Y.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { A as SubscribeResponse, C as RefletNotFoundError, D as RoadmapItem, E as Roadmap, M as VoteResponse, O as RoadmapLane, S as RefletError, T as RefletValidationError, _ as OrganizationConfig, a as CommentReply, b as RefletAuthError, d as FeedbackDetail, f as FeedbackItem, g as FeedbackTag, h as FeedbackStatus, i as Comment, j as UnsubscribeResponse, l as FeedbackAuthor, m as FeedbackListResponse, n as AddCommentResponse, o as CreateFeedbackParams, p as FeedbackListParams, r as ChangelogEntry, s as CreateFeedbackResponse, t as AddCommentParams, v as OrganizationSettings, w as RefletUser, x as RefletConfig, y as OrganizationStatus } from "./types-DnaDEN9Y.js";
2
- import { t as Reflet } from "./client-DF1fdsSC.js";
3
- export { type AddCommentParams, type AddCommentResponse, type ChangelogEntry, type Comment, type CommentReply, type CreateFeedbackParams, type CreateFeedbackResponse, type FeedbackAuthor, type FeedbackDetail, type FeedbackItem, type FeedbackListParams, type FeedbackListResponse, type FeedbackStatus, type FeedbackTag, type OrganizationConfig, type OrganizationSettings, type OrganizationStatus, Reflet, RefletAuthError, type RefletConfig, RefletError, RefletNotFoundError, type RefletUser, RefletValidationError, type Roadmap, type RoadmapItem, type RoadmapLane, type SubscribeResponse, type UnsubscribeResponse, type VoteResponse };
1
+ import { A as SubscribeResponse, C as RefletNotFoundError, D as RoadmapItem, E as Roadmap, M as VoteResponse, O as RoadmapLane, S as RefletError, T as RefletValidationError, _ as OrganizationConfig, a as CommentReply, b as RefletAuthError, d as FeedbackDetail, f as FeedbackItem, g as FeedbackTag, h as FeedbackStatus, i as Comment, j as UnsubscribeResponse, l as FeedbackAuthor, m as FeedbackListResponse, n as AddCommentResponse, o as CreateFeedbackParams, p as FeedbackListParams, r as ChangelogEntry, s as CreateFeedbackResponse, t as AddCommentParams, v as OrganizationSettings, w as RefletUser, x as RefletConfig, y as OrganizationStatus } from "./types-B3XiHPqy.js";
2
+ import { S as TriggerType, _ as SurveyDisplay, a as SubmitSurveyAnswerParams, b as SurveyQuestion, d as LogicOperator, f as LogicRule, g as RatingStyle, h as QuestionType, i as StartSurveyResponseResult, l as DisplayFrequency, m as QuestionConfig, n as CompleteSurveyResponseResult, o as SubmitSurveyAnswerResult, p as PublicSurvey, r as StartSurveyResponseParams, s as AnswerValue, t as Reflet, u as FlowTarget, v as SurveyEnding, x as TriggerConfig, y as SurveyPosition } from "./index-Buum9tIY.js";
3
+ export { type AddCommentParams, type AddCommentResponse, type AnswerValue, type ChangelogEntry, type Comment, type CommentReply, type CompleteSurveyResponseResult, type CreateFeedbackParams, type CreateFeedbackResponse, type DisplayFrequency, type FeedbackAuthor, type FeedbackDetail, type FeedbackItem, type FeedbackListParams, type FeedbackListResponse, type FeedbackStatus, type FeedbackTag, type FlowTarget, type LogicOperator, type LogicRule, type OrganizationConfig, type OrganizationSettings, type OrganizationStatus, type PublicSurvey, type QuestionConfig, type QuestionType, type RatingStyle, Reflet, RefletAuthError, type RefletConfig, RefletError, RefletNotFoundError, type RefletUser, RefletValidationError, type Roadmap, type RoadmapItem, type RoadmapLane, type StartSurveyResponseParams, type StartSurveyResponseResult, type SubmitSurveyAnswerParams, type SubmitSurveyAnswerResult, type SubscribeResponse, type SurveyDisplay, type SurveyEnding, type SurveyPosition, type SurveyQuestion, type TriggerConfig, type TriggerType, type UnsubscribeResponse, type VoteResponse };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as RefletNotFoundError, i as RefletError, n as Reflet, o as RefletValidationError, r as RefletAuthError } from "./client-DAdWdIFY.js";
1
+ import { a as RefletAuthError, c as RefletValidationError, n as Reflet, o as RefletError, s as RefletNotFoundError } from "./client-oFFfRxAM.js";
2
2
  export { Reflet, RefletAuthError, RefletError, RefletNotFoundError, RefletValidationError };
@@ -1 +1 @@
1
- {"version":3,"file":"options-CIBazDPp.d.ts","names":[],"sources":["../src/devtools/protocol.ts","../src/devtools/server/options.ts"],"mappings":";cA0Ba;KAQD,mBAAmB;;;UC9Bd;;EAEf;;EAEA;;EAEA;;EAEA,SAAS;;EAET;;EAEA"}
1
+ {"version":3,"file":"options-CIBazDPp.d.ts","names":[],"sources":["../src/devtools/protocol.ts","../src/devtools/server/options.ts"],"mappings":";cA6Ba;KAQD,mBAAmB;;;UCjCd;;EAEf;;EAEA;;EAEA;;EAEA,SAAS;;EAET;;EAEA"}
@@ -0,0 +1,390 @@
1
+ import { z } from "zod";
2
+ //#region src/sessions/protocol.ts
3
+ const SESSION_API_PATHS = [
4
+ "/api/v1/sessions/analyze",
5
+ "/api/v1/sessions/collection",
6
+ "/api/v1/sessions/delete",
7
+ "/api/v1/sessions/detail",
8
+ "/api/v1/sessions/events",
9
+ "/api/v1/sessions/evidence",
10
+ "/api/v1/sessions/handoffs",
11
+ "/api/v1/sessions/handoffs/delivered",
12
+ "/api/v1/sessions/identity",
13
+ "/api/v1/sessions/list",
14
+ "/api/v1/sessions/proposals/clarify",
15
+ "/api/v1/sessions/proposals/create",
16
+ "/api/v1/sessions/proposals/decide",
17
+ "/api/v1/sessions/proposals/edit",
18
+ "/api/v1/sessions/proposals/feedback",
19
+ "/api/v1/sessions/proposals/merge",
20
+ "/api/v1/sessions/proposals/separate",
21
+ "/api/v1/sessions/proposals/verify",
22
+ "/api/v1/sessions/segments",
23
+ "/api/v1/sessions/segments/correct",
24
+ "/api/v1/sessions/segments/retry",
25
+ "/api/v1/sessions/start",
26
+ "/api/v1/sessions/update",
27
+ "/api/v1/sessions/upload-url"
28
+ ];
29
+ const SESSION_SURFACES = ["devtools", "app"];
30
+ const SESSION_GAP_REASONS = [
31
+ "paused",
32
+ "hidden",
33
+ "interrupted",
34
+ "limit"
35
+ ];
36
+ const SESSION_LIMIT_KINDS = [
37
+ "duration",
38
+ "segments",
39
+ "events",
40
+ "evidence",
41
+ "bytes"
42
+ ];
43
+ const PROPOSAL_DECISIONS = [
44
+ "pending",
45
+ "kept",
46
+ "later",
47
+ "dismissed"
48
+ ];
49
+ const EVIDENCE_TRIGGERS = [
50
+ "start",
51
+ "mark",
52
+ "navigation",
53
+ "select",
54
+ "manual"
55
+ ];
56
+ const sessionLimitsSchema = z.object({
57
+ audioRetentionMs: z.number(),
58
+ maxDurationMs: z.number(),
59
+ maxEvents: z.number(),
60
+ maxEventsPerBatch: z.number(),
61
+ maxEvidence: z.number(),
62
+ maxImageBytes: z.number(),
63
+ maxLocalBufferBytes: z.number(),
64
+ maxSegmentBytes: z.number(),
65
+ maxSegmentMs: z.number(),
66
+ maxSegments: z.number(),
67
+ minAutoCaptureIntervalMs: z.number(),
68
+ warnBeforeLimitMs: z.number()
69
+ });
70
+ const sessionIdentitySchema = z.object({
71
+ analysisConfigured: z.boolean(),
72
+ limits: sessionLimitsSchema,
73
+ organizationId: z.string(),
74
+ organizationName: z.string(),
75
+ transcriptionConfigured: z.boolean(),
76
+ user: z.object({
77
+ email: z.string().nullable(),
78
+ id: z.string(),
79
+ name: z.string().nullable()
80
+ })
81
+ });
82
+ const analysisStatusSchema = z.object({
83
+ analyzedRevision: z.number().nullable(),
84
+ error: z.string().nullable(),
85
+ proposalCount: z.number().nullable(),
86
+ state: z.enum([
87
+ "idle",
88
+ "waiting",
89
+ "running",
90
+ "succeeded",
91
+ "failed"
92
+ ]),
93
+ transcriptRevision: z.number(),
94
+ updatedAt: z.number().nullable()
95
+ });
96
+ const sessionSummarySchema = z.object({
97
+ analysis: analysisStatusSchema,
98
+ authorName: z.string().nullable(),
99
+ collection: z.enum([
100
+ "recording",
101
+ "paused",
102
+ "ended"
103
+ ]),
104
+ counts: z.object({
105
+ evidence: z.number(),
106
+ failedSegments: z.number(),
107
+ handoffs: z.number(),
108
+ kept: z.number(),
109
+ pendingSegments: z.number(),
110
+ proposals: z.number(),
111
+ segments: z.number()
112
+ }),
113
+ durationMs: z.number(),
114
+ endedAt: z.number().nullable(),
115
+ id: z.string(),
116
+ isMine: z.boolean(),
117
+ startedAt: z.number(),
118
+ surface: z.enum(SESSION_SURFACES),
119
+ title: z.string(),
120
+ visibility: z.enum(["private", "team"])
121
+ });
122
+ const rectSchema = z.object({
123
+ height: z.number(),
124
+ width: z.number(),
125
+ x: z.number(),
126
+ y: z.number()
127
+ });
128
+ const elementRefSchema = z.object({
129
+ component: z.string().nullable(),
130
+ label: z.string(),
131
+ rect: rectSchema,
132
+ role: z.string().nullable(),
133
+ selector: z.string(),
134
+ source: z.string().nullable()
135
+ });
136
+ const frameSchema = z.object({
137
+ devicePixelRatio: z.number(),
138
+ scrollX: z.number(),
139
+ scrollY: z.number(),
140
+ title: z.string().nullable(),
141
+ url: z.string(),
142
+ viewportHeight: z.number(),
143
+ viewportWidth: z.number()
144
+ });
145
+ const pointerSchema = z.object({
146
+ x: z.number(),
147
+ y: z.number()
148
+ });
149
+ z.discriminatedUnion("kind", [
150
+ z.object({
151
+ atMs: z.number(),
152
+ frame: frameSchema,
153
+ kind: z.literal("navigation")
154
+ }),
155
+ z.object({
156
+ atMs: z.number(),
157
+ element: elementRefSchema,
158
+ frame: frameSchema,
159
+ kind: z.literal("click"),
160
+ pointer: pointerSchema
161
+ }),
162
+ z.object({
163
+ atMs: z.number(),
164
+ durationMs: z.number(),
165
+ element: elementRefSchema,
166
+ frame: frameSchema,
167
+ kind: z.literal("dwell"),
168
+ pointer: pointerSchema
169
+ }),
170
+ z.object({
171
+ atMs: z.number(),
172
+ kind: z.literal("scroll"),
173
+ scrollX: z.number(),
174
+ scrollY: z.number()
175
+ }),
176
+ z.object({
177
+ atMs: z.number(),
178
+ devicePixelRatio: z.number(),
179
+ kind: z.literal("viewport"),
180
+ viewportHeight: z.number(),
181
+ viewportWidth: z.number()
182
+ }),
183
+ z.object({
184
+ atMs: z.number(),
185
+ element: elementRefSchema.nullable(),
186
+ evidenceClientKey: z.string().nullable(),
187
+ frame: frameSchema,
188
+ kind: z.literal("mark"),
189
+ note: z.string().nullable()
190
+ }),
191
+ z.object({
192
+ atMs: z.number(),
193
+ element: elementRefSchema,
194
+ evidenceClientKey: z.string().nullable(),
195
+ frame: frameSchema,
196
+ kind: z.literal("select"),
197
+ note: z.string().nullable()
198
+ })
199
+ ]);
200
+ const sessionGapSchema = z.object({
201
+ endMs: z.number().nullable(),
202
+ reason: z.enum(SESSION_GAP_REASONS),
203
+ startMs: z.number()
204
+ });
205
+ const segmentContextSchema = z.object({
206
+ atMs: z.number(),
207
+ evidenceId: z.string().nullable(),
208
+ kind: z.enum([
209
+ "mark",
210
+ "select",
211
+ "click",
212
+ "dwell",
213
+ "navigation"
214
+ ]),
215
+ label: z.string(),
216
+ url: z.string().nullable()
217
+ });
218
+ const sessionSegmentSchema = z.object({
219
+ audioExpiresAt: z.number().nullable(),
220
+ context: z.array(segmentContextSchema),
221
+ contextAmbiguous: z.boolean(),
222
+ endMs: z.number(),
223
+ hasAudio: z.boolean(),
224
+ id: z.string(),
225
+ language: z.string().nullable(),
226
+ revision: z.number(),
227
+ source: z.enum(["voice", "typed"]),
228
+ startMs: z.number(),
229
+ text: z.string(),
230
+ textOrigin: z.enum(["transcription", "human"]),
231
+ transcription: z.object({
232
+ attempts: z.number(),
233
+ error: z.string().nullable(),
234
+ state: z.enum([
235
+ "pending",
236
+ "running",
237
+ "done",
238
+ "empty",
239
+ "failed",
240
+ "expired"
241
+ ])
242
+ })
243
+ });
244
+ const evidenceLinkSchema = z.object({
245
+ access: z.string(),
246
+ label: z.string(),
247
+ url: z.string()
248
+ });
249
+ const sessionEvidenceSchema = z.object({
250
+ atMs: z.number(),
251
+ element: elementRefSchema.nullable(),
252
+ frame: frameSchema.nullable(),
253
+ id: z.string(),
254
+ image: z.object({
255
+ height: z.number(),
256
+ url: z.string().nullable(),
257
+ width: z.number()
258
+ }).nullable(),
259
+ kind: z.enum(["screenshot", "link"]),
260
+ link: evidenceLinkSchema.nullable(),
261
+ missingReason: z.string().nullable(),
262
+ note: z.string().nullable(),
263
+ status: z.enum(["available", "missing"]),
264
+ trigger: z.enum(EVIDENCE_TRIGGERS)
265
+ });
266
+ const sessionProposalSchema = z.object({
267
+ certainty: z.enum(["clear", "uncertain"]),
268
+ clarifications: z.array(z.object({
269
+ at: z.number(),
270
+ text: z.string()
271
+ })),
272
+ decision: z.enum(PROPOSAL_DECISIONS),
273
+ evidenceIds: z.array(z.string()),
274
+ feedbackId: z.string().nullable(),
275
+ handedOffRevision: z.number().nullable(),
276
+ id: z.string(),
277
+ mergedIntoId: z.string().nullable(),
278
+ mergeSuggestion: z.object({
279
+ reason: z.string(),
280
+ withIds: z.array(z.string())
281
+ }).nullable(),
282
+ need: z.string(),
283
+ needsReview: z.boolean(),
284
+ observed: z.string(),
285
+ origin: z.enum(["ai", "human"]),
286
+ question: z.string().nullable(),
287
+ refinement: z.object({
288
+ error: z.string().nullable(),
289
+ state: z.enum([
290
+ "running",
291
+ "failed",
292
+ "outdated"
293
+ ])
294
+ }).nullable(),
295
+ response: z.string().nullable(),
296
+ revision: z.number(),
297
+ segmentIds: z.array(z.string()),
298
+ setAside: z.array(z.string()),
299
+ unknowns: z.array(z.string()),
300
+ updatedAt: z.number(),
301
+ verification: z.object({
302
+ at: z.number(),
303
+ note: z.string().nullable(),
304
+ status: z.enum(["works", "needs_work"])
305
+ }).nullable()
306
+ });
307
+ const sessionHandoffSchema = z.object({
308
+ brief: z.string(),
309
+ createdAt: z.number(),
310
+ deliveries: z.array(z.object({
311
+ at: z.number(),
312
+ kind: z.enum(["copied", "exported"])
313
+ })),
314
+ evidenceIds: z.array(z.string()),
315
+ id: z.string(),
316
+ proposals: z.array(z.object({
317
+ id: z.string(),
318
+ need: z.string(),
319
+ revision: z.number()
320
+ }))
321
+ });
322
+ const sessionMarkSchema = z.object({
323
+ atMs: z.number(),
324
+ kind: z.enum([
325
+ "mark",
326
+ "select",
327
+ "navigation"
328
+ ]),
329
+ label: z.string(),
330
+ note: z.string().nullable(),
331
+ url: z.string().nullable()
332
+ });
333
+ const sessionDetailSchema = z.object({
334
+ evidence: z.array(sessionEvidenceSchema),
335
+ handoffs: z.array(sessionHandoffSchema),
336
+ marks: z.array(sessionMarkSchema),
337
+ proposals: z.array(sessionProposalSchema),
338
+ segments: z.array(sessionSegmentSchema),
339
+ session: sessionSummarySchema.extend({
340
+ canEdit: z.boolean(),
341
+ gaps: z.array(sessionGapSchema),
342
+ startUrl: z.string().nullable()
343
+ })
344
+ });
345
+ const handoffFileSchema = z.object({
346
+ evidenceId: z.string(),
347
+ name: z.string(),
348
+ url: z.string()
349
+ });
350
+ const sessionApiErrorSchema = z.object({
351
+ error: z.string(),
352
+ limit: z.enum(SESSION_LIMIT_KINDS).optional()
353
+ });
354
+ //#endregion
355
+ //#region src/devtools/protocol.ts
356
+ const DEVTOOLS_ROUTE_BASE = "/api/reflet-devtools";
357
+ /**
358
+ * Sent on every devtools request. A custom header forces a CORS preflight, so
359
+ * a page on another origin cannot drive the route from the developer's browser.
360
+ */
361
+ const DEVTOOLS_REQUEST_HEADER = "x-reflet-devtools";
362
+ const DEVTOOLS_ENDPOINTS = {
363
+ connectCallback: "/connect/callback",
364
+ connectStart: "/connect/start",
365
+ disconnect: "/connect/disconnect",
366
+ proxy: "/proxy",
367
+ search: "/search",
368
+ source: "/source",
369
+ status: "/status"
370
+ };
371
+ const PROXIED_API_PATHS = [
372
+ "/api/v1/feedback/create",
373
+ "/api/v1/feedback/item",
374
+ "/api/v1/feedback/list",
375
+ "/api/v1/feedback/screenshot/save",
376
+ "/api/v1/feedback/screenshot/upload-url",
377
+ ...SESSION_API_PATHS
378
+ ];
379
+ const EDITORS = [
380
+ "cursor",
381
+ "vscode",
382
+ "webstorm",
383
+ "windsurf",
384
+ "zed"
385
+ ];
386
+ const DEVTOOLS_STATUS_MARKER = "reflet-devtools";
387
+ //#endregion
388
+ export { EDITORS as a, handoffFileSchema as c, sessionEvidenceSchema as d, sessionHandoffSchema as f, sessionSummarySchema as g, sessionSegmentSchema as h, DEVTOOLS_STATUS_MARKER as i, sessionApiErrorSchema as l, sessionProposalSchema as m, DEVTOOLS_REQUEST_HEADER as n, PROXIED_API_PATHS as o, sessionIdentitySchema as p, DEVTOOLS_ROUTE_BASE as r, analysisStatusSchema as s, DEVTOOLS_ENDPOINTS as t, sessionDetailSchema as u };
389
+
390
+ //# sourceMappingURL=protocol-vJhQHTcB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-vJhQHTcB.js","names":[],"sources":["../src/sessions/protocol.ts","../src/devtools/protocol.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const SESSION_API_PATHS = [\n \"/api/v1/sessions/analyze\",\n \"/api/v1/sessions/collection\",\n \"/api/v1/sessions/delete\",\n \"/api/v1/sessions/detail\",\n \"/api/v1/sessions/events\",\n \"/api/v1/sessions/evidence\",\n \"/api/v1/sessions/handoffs\",\n \"/api/v1/sessions/handoffs/delivered\",\n \"/api/v1/sessions/identity\",\n \"/api/v1/sessions/list\",\n \"/api/v1/sessions/proposals/clarify\",\n \"/api/v1/sessions/proposals/create\",\n \"/api/v1/sessions/proposals/decide\",\n \"/api/v1/sessions/proposals/edit\",\n \"/api/v1/sessions/proposals/feedback\",\n \"/api/v1/sessions/proposals/merge\",\n \"/api/v1/sessions/proposals/separate\",\n \"/api/v1/sessions/proposals/verify\",\n \"/api/v1/sessions/segments\",\n \"/api/v1/sessions/segments/correct\",\n \"/api/v1/sessions/segments/retry\",\n \"/api/v1/sessions/start\",\n \"/api/v1/sessions/update\",\n \"/api/v1/sessions/upload-url\",\n] as const;\n\nexport type SessionApiPath = (typeof SESSION_API_PATHS)[number];\n\nexport const SESSION_SURFACES = [\"devtools\", \"app\"] as const;\nexport type SessionSurface = (typeof SESSION_SURFACES)[number];\n\nexport const SESSION_GAP_REASONS = [\n \"paused\",\n \"hidden\",\n \"interrupted\",\n \"limit\",\n] as const;\nexport type SessionGapReason = (typeof SESSION_GAP_REASONS)[number];\n\nexport const SESSION_LIMIT_KINDS = [\n \"duration\",\n \"segments\",\n \"events\",\n \"evidence\",\n \"bytes\",\n] as const;\nexport type SessionLimitKind = (typeof SESSION_LIMIT_KINDS)[number];\n\nexport const PROPOSAL_DECISIONS = [\n \"pending\",\n \"kept\",\n \"later\",\n \"dismissed\",\n] as const;\nexport type ProposalDecision = (typeof PROPOSAL_DECISIONS)[number];\n\nexport const EVIDENCE_TRIGGERS = [\n \"start\",\n \"mark\",\n \"navigation\",\n \"select\",\n \"manual\",\n] as const;\nexport type EvidenceTrigger = (typeof EVIDENCE_TRIGGERS)[number];\n\nexport const sessionLimitsSchema = z.object({\n audioRetentionMs: z.number(),\n maxDurationMs: z.number(),\n maxEvents: z.number(),\n maxEventsPerBatch: z.number(),\n maxEvidence: z.number(),\n maxImageBytes: z.number(),\n maxLocalBufferBytes: z.number(),\n maxSegmentBytes: z.number(),\n maxSegmentMs: z.number(),\n maxSegments: z.number(),\n minAutoCaptureIntervalMs: z.number(),\n warnBeforeLimitMs: z.number(),\n});\nexport type SessionLimits = z.infer<typeof sessionLimitsSchema>;\n\nexport const sessionIdentitySchema = z.object({\n analysisConfigured: z.boolean(),\n limits: sessionLimitsSchema,\n organizationId: z.string(),\n organizationName: z.string(),\n transcriptionConfigured: z.boolean(),\n user: z.object({\n email: z.string().nullable(),\n id: z.string(),\n name: z.string().nullable(),\n }),\n});\nexport type SessionIdentity = z.infer<typeof sessionIdentitySchema>;\n\nexport const analysisStatusSchema = z.object({\n analyzedRevision: z.number().nullable(),\n error: z.string().nullable(),\n proposalCount: z.number().nullable(),\n state: z.enum([\"idle\", \"waiting\", \"running\", \"succeeded\", \"failed\"]),\n transcriptRevision: z.number(),\n updatedAt: z.number().nullable(),\n});\nexport type AnalysisStatus = z.infer<typeof analysisStatusSchema>;\n\nexport const sessionSummarySchema = z.object({\n analysis: analysisStatusSchema,\n authorName: z.string().nullable(),\n collection: z.enum([\"recording\", \"paused\", \"ended\"]),\n counts: z.object({\n evidence: z.number(),\n failedSegments: z.number(),\n handoffs: z.number(),\n kept: z.number(),\n pendingSegments: z.number(),\n proposals: z.number(),\n segments: z.number(),\n }),\n durationMs: z.number(),\n endedAt: z.number().nullable(),\n id: z.string(),\n isMine: z.boolean(),\n startedAt: z.number(),\n surface: z.enum(SESSION_SURFACES),\n title: z.string(),\n visibility: z.enum([\"private\", \"team\"]),\n});\nexport type SessionSummary = z.infer<typeof sessionSummarySchema>;\n\nconst rectSchema = z.object({\n height: z.number(),\n width: z.number(),\n x: z.number(),\n y: z.number(),\n});\n\nexport const elementRefSchema = z.object({\n component: z.string().nullable(),\n label: z.string(),\n rect: rectSchema,\n role: z.string().nullable(),\n selector: z.string(),\n source: z.string().nullable(),\n});\nexport type ElementRef = z.infer<typeof elementRefSchema>;\n\nexport const frameSchema = z.object({\n devicePixelRatio: z.number(),\n scrollX: z.number(),\n scrollY: z.number(),\n title: z.string().nullable(),\n url: z.string(),\n viewportHeight: z.number(),\n viewportWidth: z.number(),\n});\nexport type Frame = z.infer<typeof frameSchema>;\n\nconst pointerSchema = z.object({ x: z.number(), y: z.number() });\n\nexport const sessionEventSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n atMs: z.number(),\n frame: frameSchema,\n kind: z.literal(\"navigation\"),\n }),\n z.object({\n atMs: z.number(),\n element: elementRefSchema,\n frame: frameSchema,\n kind: z.literal(\"click\"),\n pointer: pointerSchema,\n }),\n z.object({\n atMs: z.number(),\n durationMs: z.number(),\n element: elementRefSchema,\n frame: frameSchema,\n kind: z.literal(\"dwell\"),\n pointer: pointerSchema,\n }),\n z.object({\n atMs: z.number(),\n kind: z.literal(\"scroll\"),\n scrollX: z.number(),\n scrollY: z.number(),\n }),\n z.object({\n atMs: z.number(),\n devicePixelRatio: z.number(),\n kind: z.literal(\"viewport\"),\n viewportHeight: z.number(),\n viewportWidth: z.number(),\n }),\n z.object({\n atMs: z.number(),\n element: elementRefSchema.nullable(),\n evidenceClientKey: z.string().nullable(),\n frame: frameSchema,\n kind: z.literal(\"mark\"),\n note: z.string().nullable(),\n }),\n z.object({\n atMs: z.number(),\n element: elementRefSchema,\n evidenceClientKey: z.string().nullable(),\n frame: frameSchema,\n kind: z.literal(\"select\"),\n note: z.string().nullable(),\n }),\n]);\nexport type SessionEvent = z.infer<typeof sessionEventSchema>;\n\nexport const sessionGapSchema = z.object({\n endMs: z.number().nullable(),\n reason: z.enum(SESSION_GAP_REASONS),\n startMs: z.number(),\n});\nexport type SessionGap = z.infer<typeof sessionGapSchema>;\n\nexport const segmentContextSchema = z.object({\n atMs: z.number(),\n evidenceId: z.string().nullable(),\n kind: z.enum([\"mark\", \"select\", \"click\", \"dwell\", \"navigation\"]),\n label: z.string(),\n url: z.string().nullable(),\n});\nexport type SegmentContext = z.infer<typeof segmentContextSchema>;\n\nexport const sessionSegmentSchema = z.object({\n audioExpiresAt: z.number().nullable(),\n context: z.array(segmentContextSchema),\n contextAmbiguous: z.boolean(),\n endMs: z.number(),\n hasAudio: z.boolean(),\n id: z.string(),\n language: z.string().nullable(),\n revision: z.number(),\n source: z.enum([\"voice\", \"typed\"]),\n startMs: z.number(),\n text: z.string(),\n textOrigin: z.enum([\"transcription\", \"human\"]),\n transcription: z.object({\n attempts: z.number(),\n error: z.string().nullable(),\n state: z.enum([\"pending\", \"running\", \"done\", \"empty\", \"failed\", \"expired\"]),\n }),\n});\nexport type SessionSegment = z.infer<typeof sessionSegmentSchema>;\n\nexport const evidenceLinkSchema = z.object({\n access: z.string(),\n label: z.string(),\n url: z.string(),\n});\nexport type EvidenceLink = z.infer<typeof evidenceLinkSchema>;\n\nexport const sessionEvidenceSchema = z.object({\n atMs: z.number(),\n element: elementRefSchema.nullable(),\n frame: frameSchema.nullable(),\n id: z.string(),\n image: z\n .object({\n height: z.number(),\n url: z.string().nullable(),\n width: z.number(),\n })\n .nullable(),\n kind: z.enum([\"screenshot\", \"link\"]),\n link: evidenceLinkSchema.nullable(),\n missingReason: z.string().nullable(),\n note: z.string().nullable(),\n status: z.enum([\"available\", \"missing\"]),\n trigger: z.enum(EVIDENCE_TRIGGERS),\n});\nexport type SessionEvidence = z.infer<typeof sessionEvidenceSchema>;\n\nexport const sessionProposalSchema = z.object({\n certainty: z.enum([\"clear\", \"uncertain\"]),\n clarifications: z.array(z.object({ at: z.number(), text: z.string() })),\n decision: z.enum(PROPOSAL_DECISIONS),\n evidenceIds: z.array(z.string()),\n feedbackId: z.string().nullable(),\n handedOffRevision: z.number().nullable(),\n id: z.string(),\n mergedIntoId: z.string().nullable(),\n mergeSuggestion: z\n .object({ reason: z.string(), withIds: z.array(z.string()) })\n .nullable(),\n need: z.string(),\n needsReview: z.boolean(),\n observed: z.string(),\n origin: z.enum([\"ai\", \"human\"]),\n question: z.string().nullable(),\n refinement: z\n .object({\n error: z.string().nullable(),\n state: z.enum([\"running\", \"failed\", \"outdated\"]),\n })\n .nullable(),\n response: z.string().nullable(),\n revision: z.number(),\n segmentIds: z.array(z.string()),\n setAside: z.array(z.string()),\n unknowns: z.array(z.string()),\n updatedAt: z.number(),\n verification: z\n .object({\n at: z.number(),\n note: z.string().nullable(),\n status: z.enum([\"works\", \"needs_work\"]),\n })\n .nullable(),\n});\nexport type SessionProposal = z.infer<typeof sessionProposalSchema>;\n\nexport const sessionHandoffSchema = z.object({\n brief: z.string(),\n createdAt: z.number(),\n deliveries: z.array(\n z.object({ at: z.number(), kind: z.enum([\"copied\", \"exported\"]) })\n ),\n evidenceIds: z.array(z.string()),\n id: z.string(),\n proposals: z.array(\n z.object({ id: z.string(), need: z.string(), revision: z.number() })\n ),\n});\nexport type SessionHandoff = z.infer<typeof sessionHandoffSchema>;\n\nexport const sessionMarkSchema = z.object({\n atMs: z.number(),\n kind: z.enum([\"mark\", \"select\", \"navigation\"]),\n label: z.string(),\n note: z.string().nullable(),\n url: z.string().nullable(),\n});\nexport type SessionMark = z.infer<typeof sessionMarkSchema>;\n\nexport const sessionDetailSchema = z.object({\n evidence: z.array(sessionEvidenceSchema),\n handoffs: z.array(sessionHandoffSchema),\n marks: z.array(sessionMarkSchema),\n proposals: z.array(sessionProposalSchema),\n segments: z.array(sessionSegmentSchema),\n session: sessionSummarySchema.extend({\n canEdit: z.boolean(),\n gaps: z.array(sessionGapSchema),\n startUrl: z.string().nullable(),\n }),\n});\nexport type SessionDetail = z.infer<typeof sessionDetailSchema>;\n\nexport const handoffFileSchema = z.object({\n evidenceId: z.string(),\n name: z.string(),\n url: z.string(),\n});\nexport type HandoffFile = z.infer<typeof handoffFileSchema>;\n\nexport const sessionApiErrorSchema = z.object({\n error: z.string(),\n limit: z.enum(SESSION_LIMIT_KINDS).optional(),\n});\n","import { SESSION_API_PATHS } from \"../sessions/protocol\";\n\nexport const DEVTOOLS_ROUTE_BASE = \"/api/reflet-devtools\";\n\n/**\n * Sent on every devtools request. A custom header forces a CORS preflight, so\n * a page on another origin cannot drive the route from the developer's browser.\n */\nexport const DEVTOOLS_REQUEST_HEADER = \"x-reflet-devtools\";\n\nexport const DEVTOOLS_ENDPOINTS = {\n connectCallback: \"/connect/callback\",\n connectStart: \"/connect/start\",\n disconnect: \"/connect/disconnect\",\n proxy: \"/proxy\",\n search: \"/search\",\n source: \"/source\",\n status: \"/status\",\n} as const;\n\nexport const PROXIED_API_PATHS = [\n \"/api/v1/feedback/create\",\n \"/api/v1/feedback/item\",\n \"/api/v1/feedback/list\",\n \"/api/v1/feedback/screenshot/save\",\n \"/api/v1/feedback/screenshot/upload-url\",\n ...SESSION_API_PATHS,\n] as const;\n\nexport const EDITORS = [\n \"cursor\",\n \"vscode\",\n \"webstorm\",\n \"windsurf\",\n \"zed\",\n] as const;\n\nexport type EditorId = (typeof EDITORS)[number];\n\nexport const DEVTOOLS_STATUS_MARKER = \"reflet-devtools\";\n\nexport type BoardAccess =\n | { kind: \"secretKey\" }\n | { kind: \"connected\"; organizationName: string }\n | { canConnect: boolean; kind: \"disconnected\" };\n\nexport interface DevtoolsStatus {\n board: BoardAccess;\n editor: EditorId;\n marker: typeof DEVTOOLS_STATUS_MARKER;\n}\n\nexport interface ConnectStartResponse {\n authorizeUrl: string;\n}\n\nexport interface DisconnectResponse {\n revoked: boolean;\n}\n\nexport interface LineRange {\n end: number;\n start: number;\n}\n\nexport interface SourceFile {\n absolutePath: string;\n code: string;\n /** 0-based, like React's frames; null when the map only knows the line. */\n column: number | null;\n /** Lines spanned by the JSX element the frame points at, 1-based. */\n elementLines: LineRange | null;\n line: number | null;\n /** Relative to the repository root, for display. */\n path: string;\n}\n\nexport interface CodeMatch {\n absolutePath: string;\n line: number;\n path: string;\n preview: string;\n}\n\nexport interface CodeSearchResult {\n matches: CodeMatch[];\n}\n\nexport interface DevtoolsErrorBody {\n error: string;\n}\n"],"mappings":"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"}
@@ -1,17 +1,6 @@
1
- import { n as Reflet } from "./client-DAdWdIFY.js";
1
+ import { n as Reflet } from "./client-oFFfRxAM.js";
2
2
  import { createContext, useContext, useEffect, useMemo, useState, useSyncExternalStore } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
- //#region src/z-index.ts
5
- const REFLET_Z_INDEX = {
6
- annotatorOverlay: 2147483001,
7
- captureHalo: 2147482999,
8
- devtoolsBar: 2147483647,
9
- dialogContent: 2147482991,
10
- dialogOverlay: 2147482990,
11
- elementPicker: 2147483647,
12
- widgetRoot: 2147483e3
13
- };
14
- //#endregion
15
4
  //#region src/react-context.tsx
16
5
  const RefletContext = createContext(null);
17
6
  function subscribeToNothing() {
@@ -91,6 +80,6 @@ function useRefletClient() {
91
80
  return client;
92
81
  }
93
82
  //#endregion
94
- export { REFLET_Z_INDEX as a, useRefletContext as i, RefletProvider as n, useRefletClient as r, RefletContext as t };
83
+ export { useRefletContext as i, RefletProvider as n, useRefletClient as r, RefletContext as t };
95
84
 
96
- //# sourceMappingURL=react-context-Caq1fodf.js.map
85
+ //# sourceMappingURL=react-context-Kazo_JCz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-context-Kazo_JCz.js","names":[],"sources":["../src/react-context.tsx"],"sourcesContent":["import {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { Reflet } from \"./client\";\nimport type { RefletConfig, RefletUser } from \"./types\";\n\n// ============================================\n// Context Types\n// ============================================\n\nexport interface RefletContextValue {\n baseUrl?: string;\n client: Reflet;\n isReady: boolean;\n publicKey: string;\n setUser: (user: RefletUser | undefined) => void;\n user: RefletUser | undefined;\n userToken: string | undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nexport const RefletContext = createContext<RefletContextValue | null>(null);\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface RefletProviderProps {\n /** API base URL (optional, defaults to Reflet production API) */\n baseUrl?: string;\n /** Children */\n children: ReactNode;\n /** Your organization's public API key */\n publicKey: string;\n /** Initial user identification */\n user?: RefletUser;\n /** Pre-signed user token (alternative to user) */\n userToken?: string;\n}\n\nfunction subscribeToNothing(): () => void {\n return () => undefined;\n}\n\n/**\n * Provider component for Reflet SDK\n *\n * @example\n * ```tsx\n * import { RefletProvider } from 'reflet-sdk/react';\n *\n * function App() {\n * return (\n * <RefletProvider\n * publicKey=\"fb_pub_xxx\"\n * user={{ id: 'user_123', email: 'user@example.com', name: 'John' }}\n * >\n * <YourApp />\n * </RefletProvider>\n * );\n * }\n * ```\n */\nexport function RefletProvider({\n publicKey,\n baseUrl,\n user: initialUser,\n userToken,\n children,\n}: RefletProviderProps) {\n const [user, setUser] = useState<RefletUser | undefined>(initialUser);\n const isReady = useSyncExternalStore(\n subscribeToNothing,\n () => true,\n () => false\n );\n\n const client = useMemo(() => {\n const config: RefletConfig = {\n baseUrl,\n publicKey,\n user,\n userToken,\n };\n return new Reflet(config);\n }, [publicKey, baseUrl, user, userToken]);\n\n // Update client when user changes\n useEffect(() => {\n if (userToken) {\n client.setUserToken(userToken);\n } else {\n client.setUser(user);\n }\n }, [client, user, userToken]);\n\n const value = useMemo(\n () => ({\n baseUrl,\n client,\n isReady,\n publicKey,\n setUser,\n user,\n userToken,\n }),\n [client, publicKey, baseUrl, isReady, user, userToken]\n );\n\n return (\n <RefletContext.Provider value={value}>{children}</RefletContext.Provider>\n );\n}\n\n// ============================================\n// Hook to access context\n// ============================================\n\nexport function useRefletContext(): RefletContextValue {\n const context = useContext(RefletContext);\n if (!context) {\n throw new Error(\"useRefletContext must be used within a RefletProvider\");\n }\n return context;\n}\n\nexport function useRefletClient(): Reflet {\n const { client } = useRefletContext();\n return client;\n}\n"],"mappings":";;;;AA8BA,MAAa,gBAAgB,cAAyC,IAAI;AAmB1E,SAAS,qBAAiC;CACxC,aAAa,KAAA;AACf;;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,eAAe,EAC7B,WACA,SACA,MAAM,aACN,WACA,YACsB;CACtB,MAAM,CAAC,MAAM,WAAW,SAAiC,WAAW;CACpE,MAAM,UAAU,qBACd,0BACM,YACA,KACR;CAEA,MAAM,SAAS,cAAc;EAO3B,OAAO,IAAI,OAAO;GALhB;GACA;GACA;GACA;EAEqB,CAAC;CAC1B,GAAG;EAAC;EAAW;EAAS;EAAM;CAAS,CAAC;CAGxC,gBAAgB;EACd,IAAI,WACF,OAAO,aAAa,SAAS;OAE7B,OAAO,QAAQ,IAAI;CAEvB,GAAG;EAAC;EAAQ;EAAM;CAAS,CAAC;CAE5B,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EAAC;EAAQ;EAAW;EAAS;EAAS;EAAM;CAAS,CACvD;CAEA,OACE,oBAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AAE5E;AAMA,SAAgB,mBAAuC;CACrD,MAAM,UAAU,WAAW,aAAa;CACxC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,uDAAuD;CAEzE,OAAO;AACT;AAEA,SAAgB,kBAA0B;CACxC,MAAM,EAAE,WAAW,iBAAiB;CACpC,OAAO;AACT"}
package/dist/react.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { D as RoadmapItem, E as Roadmap, O as RoadmapLane, _ as OrganizationConfig, d as FeedbackDetail, f as FeedbackItem, g as FeedbackTag, h as FeedbackStatus, i as Comment, o as CreateFeedbackParams, p as FeedbackListParams, r as ChangelogEntry, s as CreateFeedbackResponse, t as AddCommentParams, v as OrganizationSettings, w as RefletUser, x as RefletConfig, y as OrganizationStatus } from "./types-DnaDEN9Y.js";
2
- import { t as Reflet } from "./client-DF1fdsSC.js";
1
+ import { D as RoadmapItem, E as Roadmap, O as RoadmapLane, _ as OrganizationConfig, d as FeedbackDetail, f as FeedbackItem, g as FeedbackTag, h as FeedbackStatus, i as Comment, o as CreateFeedbackParams, p as FeedbackListParams, r as ChangelogEntry, s as CreateFeedbackResponse, t as AddCommentParams, v as OrganizationSettings, w as RefletUser, x as RefletConfig, y as OrganizationStatus } from "./types-B3XiHPqy.js";
2
+ import { b as SurveyQuestion, p as PublicSurvey, s as AnswerValue, t as Reflet, v as SurveyEnding, y as SurveyPosition } from "./index-Buum9tIY.js";
3
+ import { a as SurveyTheme, d as SurveySessionCallbacks, h as previewTransport, i as SurveyCardVariant, l as useSurveySession, m as SurveyTransport, n as SurveyCard, o as SurveySessionHandle, p as SurveySessionSnapshot, r as SurveyCardProps, s as UseSurveySessionOptions, t as createRefletSurveyTransport, u as SurveySession } from "./client-transport-B7BdVU7J.js";
3
4
  import { ReactNode } from "react";
4
5
  //#region src/react-changelog-widget.d.ts
5
6
  interface ChangelogWidgetProps {
@@ -262,5 +263,44 @@ export declare function useUnreadChangelogCount(publicKey: string): {
262
263
  markAsRead: () => void;
263
264
  };
264
265
  //#endregion
265
- export { type AddCommentParams, type ChangelogEntry, type Comment, type CreateFeedbackParams, type FeedbackButtonProps, type FeedbackDetail, type FeedbackDialogLabels, type FeedbackDialogProps, type FeedbackItem, type FeedbackListParams, type FeedbackStatus, type FeedbackTag, type OrganizationConfig, type OrganizationSettings, type OrganizationStatus, Reflet, type RefletConfig, type RefletContextValue, type RefletProviderProps, type RefletUser, type Roadmap, type RoadmapItem, type RoadmapLane, type UseFeedbackListOptions };
266
+ //#region src/surveys/controller.d.ts
267
+ interface RefletSurveysCallbacks {
268
+ onSurveyAnswer?: SurveySessionCallbacks["onAnswer"];
269
+ onSurveyComplete?: SurveySessionCallbacks["onComplete"];
270
+ onSurveyDismiss?: SurveySessionCallbacks["onDismiss"];
271
+ onSurveyStart?: SurveySessionCallbacks["onStart"];
272
+ }
273
+ //#endregion
274
+ //#region src/surveys/reflet-surveys.d.ts
275
+ interface RefletSurveysProps extends RefletSurveysCallbacks {
276
+ /** Turn delivery off without unmounting, e.g. on pages where surveys would interrupt. */
277
+ enabled?: boolean;
278
+ /** Defaults to your organization's brand color. */
279
+ primaryColor?: string;
280
+ theme?: SurveyTheme;
281
+ }
282
+ /**
283
+ * In-app survey delivery. Mount once inside `RefletProvider`: it loads the
284
+ * surveys this visitor is eligible for, arms their triggers and shows one at a time.
285
+ */
286
+ export declare function RefletSurveys({ enabled, onSurveyAnswer, onSurveyComplete, onSurveyDismiss, onSurveyStart, primaryColor, theme }: RefletSurveysProps): import("react").JSX.Element | null;
287
+ //#endregion
288
+ //#region src/surveys/use-reflet-surveys.d.ts
289
+ interface RefletSurveysApi {
290
+ /** Survey on screen, or null. */
291
+ activeSurveyId: string | null;
292
+ /** Closes the survey on screen; an unfinished response is marked abandoned. */
293
+ dismissSurvey: () => void;
294
+ /** Shows an eligible survey now, whatever its trigger (use for `manual` surveys). */
295
+ showSurvey: (surveyId: string) => void;
296
+ /** Fires surveys triggered by this custom event. */
297
+ track: (eventName: string) => void;
298
+ }
299
+ /**
300
+ * Drives `<RefletSurveys />` from anywhere inside `RefletProvider`. Calls made
301
+ * before surveys load are queued and replayed once they do.
302
+ */
303
+ export declare function useRefletSurveys(): RefletSurveysApi;
304
+ //#endregion
305
+ export { type AddCommentParams, type AnswerValue, type ChangelogEntry, type Comment, type CreateFeedbackParams, type FeedbackButtonProps, type FeedbackDetail, type FeedbackDialogLabels, type FeedbackDialogProps, type FeedbackItem, type FeedbackListParams, type FeedbackStatus, type FeedbackTag, type OrganizationConfig, type OrganizationSettings, type OrganizationStatus, type PublicSurvey, Reflet, type RefletConfig, type RefletContextValue, type RefletProviderProps, type RefletSurveysApi, type RefletSurveysCallbacks, type RefletSurveysProps, type RefletUser, type Roadmap, type RoadmapItem, type RoadmapLane, SurveyCard, type SurveyCardProps, type SurveyCardVariant, type SurveyEnding, type SurveyPosition, type SurveyQuestion, SurveySession, type SurveySessionCallbacks, type SurveySessionHandle, type SurveySessionSnapshot, type SurveyTheme, type SurveyTransport, type UseFeedbackListOptions, type UseSurveySessionOptions, createRefletSurveyTransport, previewTransport, useSurveySession };
266
306
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","names":[],"sources":["../src/react-changelog-widget.tsx","../src/react-context.tsx","../src/react-feedback-dialog-types.ts","../src/react-feedback-dialog.tsx","../src/react-feedback-button.tsx","../src/react-hooks-types.ts","../src/react-mutation-hooks.ts","../src/react-query-hooks.ts"],"mappings":";;;;UAGU;EACR;EACA;EACA;EACA;EACA;EACA,gBAAgB,OAAO;EACvB;EACA;EACA;EACA;EACA;EACA;;UAGQ;EACR;EACA;EACA;EACA,YAAY;EACZ;EACA;;QAGM;YACI;IACR,6BACE,QAAQ,yBACL;;;;;;;;;;;;;;;;;wBAkBO,kBACd,WACA,MACA,UACA,OACA,cACA,YACA,iBACA,gBACA,QACA,QACA,SACA,gBACC;;;UC9Cc;EACf;EACA,QAAQ;EACR;EACA;EACA,UAAU,MAAM;EAChB,MAAM;EACN;;qBAOW,+BAAa,QAAA;UAMT;;EAEf;;EAEA,UAAU;;EAEV;;EAEA,OAAO;;EAEP;;;;;;;;;;;;;;;;;;;;;wBA0Bc,iBACd,WACA,SACA,MAAM,aACN,WACA,YACC,sCAAmB,IAAA;wBAiDN,oBAAoB;wBAQpB,mBAAmB;;;UCrIlB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;;EAEf;;EAEA,SAAS;;EAET;;EAEA;;EAEA,eAAe;;EAEf,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;;;wBChCc,iBACd,MACA,cACA,WACA,SACA,MACA,WACA,OACA,cACA,QAAQ,YACR,UACA,QACA,WACC,sCAAmB,IAAA;;;UCFL;;;;;EAKf;;EAEA;;EAEA,WAAW;;EAEX;;EAEA,SAAS;IAAyB;;;EAElC;;EAEA;;EAEA,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;wBA6Bc,iBACd,WACA,SACA,MACA,WACA,OACA,cACA,QACA,UACA,QACA,SACA,WACA,SACA,YACC,sCAAmB,IAAA;;;UC3FL,eAAe;EAC9B,MAAM;EACN,OAAO;EACP;EACA,eAAe;;UAGA,kBAAkB,OAAO;EACxC,MAAM;EACN,OAAO;EACP;EACA,SAAS,WAAW,eAAe,QAAQ;EAC3C;;;;;;;;;;;;;;;;;wBCiDc,qBAAqB;EACjC;EAAoB;GACtB;;;;;;;;;;;;;wBA0Bc,WAAW;EACvB;EAAgB;;EAChB;EAAoB;;;;;wBAuBR,iBAAiB;EAC7B;GACF;;;;wBAiBc;EACd,YAAY,uBAAuB;IAAU;;EAC7C,cAAc,uBAAuB;IAAU;;EAC/C;EACA,OAAO;;;;wBChFO,yBAAyB,eAAe;UAUvC,+BAA+B;EAC9C;;wBAGc,gBACd,UAAS,yBACR;EAAiB,OAAO;EAAgB;EAAe;;wBAyB1C,YACd,iCACC,eAAe;wBAiBF,YACd,gCACA,+BACC,eAAe;wBAiBF,cAAc,eAAe;wBAU7B,aAAa,iBAAiB,eAAe;wBA6B7C,wBAAwB;EACtC;EACA"}
1
+ {"version":3,"file":"react.d.ts","names":[],"sources":["../src/react-changelog-widget.tsx","../src/react-context.tsx","../src/react-feedback-dialog-types.ts","../src/react-feedback-dialog.tsx","../src/react-feedback-button.tsx","../src/react-hooks-types.ts","../src/react-mutation-hooks.ts","../src/react-query-hooks.ts","../src/surveys/controller.ts","../src/surveys/reflet-surveys.tsx","../src/surveys/use-reflet-surveys.ts"],"mappings":";;;;;UAGU;EACR;EACA;EACA;EACA;EACA;EACA,gBAAgB,OAAO;EACvB;EACA;EACA;EACA;EACA;EACA;;UAGQ;EACR;EACA;EACA;EACA,YAAY;EACZ;EACA;;QAGM;YACI;IACR,6BACE,QAAQ,yBACL;;;;;;;;;;;;;;;;;wBAkBO,kBACd,WACA,MACA,UACA,OACA,cACA,YACA,iBACA,gBACA,QACA,QACA,SACA,gBACC;;;UC9Cc;EACf;EACA,QAAQ;EACR;EACA;EACA,UAAU,MAAM;EAChB,MAAM;EACN;;qBAOW,+BAAa,QAAA;UAMT;;EAEf;;EAEA,UAAU;;EAEV;;EAEA,OAAO;;EAEP;;;;;;;;;;;;;;;;;;;;;wBA0Bc,iBACd,WACA,SACA,MAAM,aACN,WACA,YACC,sCAAmB,IAAA;wBAiDN,oBAAoB;wBAQpB,mBAAmB;;;UCrIlB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;;EAEf;;EAEA,SAAS;;EAET;;EAEA;;EAEA,eAAe;;EAEf,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;;;wBChCc,iBACd,MACA,cACA,WACA,SACA,MACA,WACA,OACA,cACA,QAAQ,YACR,UACA,QACA,WACC,sCAAmB,IAAA;;;UCFL;;;;;EAKf;;EAEA;;EAEA,WAAW;;EAEX;;EAEA,SAAS;IAAyB;;;EAElC;;EAEA;;EAEA,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;wBA6Bc,iBACd,WACA,SACA,MACA,WACA,OACA,cACA,QACA,UACA,QACA,SACA,WACA,SACA,YACC,sCAAmB,IAAA;;;UC3FL,eAAe;EAC9B,MAAM;EACN,OAAO;EACP;EACA,eAAe;;UAGA,kBAAkB,OAAO;EACxC,MAAM;EACN,OAAO;EACP;EACA,SAAS,WAAW,eAAe,QAAQ;EAC3C;;;;;;;;;;;;;;;;;wBCiDc,qBAAqB;EACjC;EAAoB;GACtB;;;;;;;;;;;;;wBA0Bc,WAAW;EACvB;EAAgB;;EAChB;EAAoB;;;;;wBAuBR,iBAAiB;EAC7B;GACF;;;;wBAiBc;EACd,YAAY,uBAAuB;IAAU;;EAC7C,cAAc,uBAAuB;IAAU;;EAC/C;EACA,OAAO;;;;wBChFO,yBAAyB,eAAe;UAUvC,+BAA+B;EAC9C;;wBAGc,gBACd,UAAS,yBACR;EAAiB,OAAO;EAAgB;EAAe;;wBAyB1C,YACd,iCACC,eAAe;wBAiBF,YACd,gCACA,+BACC,eAAe;wBAiBF,cAAc,eAAe;wBAU7B,aAAa,iBAAiB,eAAe;wBA6B7C,wBAAwB;EACtC;EACA;;;;UClKe;EACf,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;;;;UCRD,2BAA2B;;EAE1C;;EAEA;EACA,QAAQ;;;;;;wBA4EM,gBACd,SACA,gBACA,kBACA,iBACA,eACA,cACA,SACC,qCAAkB,IAAA;;;UCjGJ;;EAEf;;EAEA;;EAEA,aAAa;;EAEb,QAAQ;;;;;;wBAOM,oBAAoB"}