convex-feedback 0.2.0-beta.8 → 0.2.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.
Files changed (81) hide show
  1. package/README.md +398 -7
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/client/api.d.ts +49 -9
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/config.d.ts +1 -3
  6. package/dist/client/config.d.ts.map +1 -1
  7. package/dist/client/config.js.map +1 -1
  8. package/dist/client/index.d.ts +707 -15
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +243 -12
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/component/_generated/api.d.ts +2 -0
  13. package/dist/component/_generated/api.d.ts.map +1 -1
  14. package/dist/component/_generated/api.js.map +1 -1
  15. package/dist/component/_generated/component.d.ts +222 -4
  16. package/dist/component/_generated/component.d.ts.map +1 -1
  17. package/dist/component/admin.d.ts +5 -90
  18. package/dist/component/admin.d.ts.map +1 -1
  19. package/dist/component/admin.js +59 -29
  20. package/dist/component/admin.js.map +1 -1
  21. package/dist/component/comments.d.ts +107 -15
  22. package/dist/component/comments.d.ts.map +1 -1
  23. package/dist/component/comments.js +342 -28
  24. package/dist/component/comments.js.map +1 -1
  25. package/dist/component/crons.d.ts.map +1 -1
  26. package/dist/component/crons.js +4 -0
  27. package/dist/component/crons.js.map +1 -1
  28. package/dist/component/entries.d.ts +119 -91
  29. package/dist/component/entries.d.ts.map +1 -1
  30. package/dist/component/entries.js +348 -29
  31. package/dist/component/entries.js.map +1 -1
  32. package/dist/component/helpers.d.ts +32 -1
  33. package/dist/component/helpers.d.ts.map +1 -1
  34. package/dist/component/helpers.js +121 -4
  35. package/dist/component/helpers.js.map +1 -1
  36. package/dist/component/migrations.d.ts +24 -0
  37. package/dist/component/migrations.d.ts.map +1 -1
  38. package/dist/component/migrations.js +318 -0
  39. package/dist/component/migrations.js.map +1 -1
  40. package/dist/component/model.d.ts +455 -120
  41. package/dist/component/model.d.ts.map +1 -1
  42. package/dist/component/model.js +70 -2
  43. package/dist/component/model.js.map +1 -1
  44. package/dist/component/reactions.d.ts +37 -0
  45. package/dist/component/reactions.d.ts.map +1 -0
  46. package/dist/component/reactions.js +52 -0
  47. package/dist/component/reactions.js.map +1 -0
  48. package/dist/component/roadmap.d.ts +10 -46
  49. package/dist/component/roadmap.d.ts.map +1 -1
  50. package/dist/component/roadmap.js +239 -21
  51. package/dist/component/roadmap.js.map +1 -1
  52. package/dist/component/schema.d.ts +33 -5
  53. package/dist/component/schema.d.ts.map +1 -1
  54. package/dist/component/schema.js +40 -4
  55. package/dist/component/schema.js.map +1 -1
  56. package/dist/react/index.d.ts +26 -238
  57. package/dist/react/index.d.ts.map +1 -1
  58. package/dist/react/index.js +65 -2
  59. package/dist/react/index.js.map +1 -1
  60. package/dist/test.d.ts +23 -5
  61. package/dist/test.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/src/client/README.md +6 -1
  64. package/src/client/api.ts +89 -7
  65. package/src/client/config.ts +1 -3
  66. package/src/client/index.ts +1237 -34
  67. package/src/component/README.md +32 -4
  68. package/src/component/_generated/api.ts +2 -0
  69. package/src/component/_generated/component.ts +290 -8
  70. package/src/component/admin.ts +88 -30
  71. package/src/component/comments.ts +405 -26
  72. package/src/component/crons.ts +10 -0
  73. package/src/component/entries.ts +388 -27
  74. package/src/component/helpers.ts +163 -4
  75. package/src/component/migrations.ts +415 -0
  76. package/src/component/model.ts +381 -117
  77. package/src/component/reactions.ts +60 -0
  78. package/src/component/roadmap.ts +357 -35
  79. package/src/component/schema.ts +40 -4
  80. package/src/react/README.md +5 -0
  81. package/src/react/index.ts +90 -3
@@ -96,11 +96,10 @@ export declare const publicEntryValidator: import("convex/values").VObject<{
96
96
  export declare const publicCommentValidator: import("convex/values").VObject<{
97
97
  updatedAt?: number | undefined;
98
98
  parentCommentId?: string | undefined;
99
- deletedAt?: number | undefined;
100
99
  id: string;
101
100
  creationTime: number;
102
101
  actorId: string;
103
- body: string | null;
102
+ body: string;
104
103
  entryId: string;
105
104
  depth: number;
106
105
  likeCount: number;
@@ -113,13 +112,237 @@ export declare const publicCommentValidator: import("convex/values").VObject<{
113
112
  parentCommentId: import("convex/values").VString<string | undefined, "optional">;
114
113
  actorId: import("convex/values").VString<string, "required">;
115
114
  depth: import("convex/values").VFloat64<number, "required">;
116
- body: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
115
+ body: import("convex/values").VString<string, "required">;
117
116
  likeCount: import("convex/values").VFloat64<number, "required">;
118
117
  replyCount: import("convex/values").VFloat64<number, "required">;
119
118
  updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
120
- deletedAt: import("convex/values").VFloat64<number | undefined, "optional">;
121
119
  viewerHasLiked: import("convex/values").VBoolean<boolean, "required">;
122
- }, "required", "id" | "creationTime" | "updatedAt" | "actorId" | "body" | "entryId" | "parentCommentId" | "depth" | "likeCount" | "replyCount" | "deletedAt" | "viewerHasLiked">;
120
+ }, "required", "id" | "creationTime" | "updatedAt" | "actorId" | "body" | "entryId" | "parentCommentId" | "depth" | "likeCount" | "replyCount" | "viewerHasLiked">;
121
+ /**
122
+ * Entry activity returned by actor-scoped queries.
123
+ *
124
+ * Unlike the ordinary public entry shape, activity entries do not contain
125
+ * viewer-relative reaction state. The actor is already the subject of the
126
+ * query.
127
+ */
128
+ export declare const activityEntryValidator: import("convex/values").VObject<{
129
+ updatedAt?: number | undefined;
130
+ id: string;
131
+ creationTime: number;
132
+ title: string;
133
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
134
+ actorId: string;
135
+ kind: "feedback" | "feature_request" | "bug_report";
136
+ body: string;
137
+ upvoteCount: number;
138
+ commentCount: number;
139
+ }, {
140
+ id: import("convex/values").VString<string, "required">;
141
+ creationTime: import("convex/values").VFloat64<number, "required">;
142
+ actorId: import("convex/values").VString<string, "required">;
143
+ kind: import("convex/values").VUnion<"feedback" | "feature_request" | "bug_report", [import("convex/values").VLiteral<"feedback", "required">, import("convex/values").VLiteral<"feature_request", "required">, import("convex/values").VLiteral<"bug_report", "required">], "required", never>;
144
+ status: import("convex/values").VUnion<"open" | "under_review" | "planned" | "in_progress" | "completed" | "closed", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"under_review", "required">, import("convex/values").VLiteral<"planned", "required">, import("convex/values").VLiteral<"in_progress", "required">, import("convex/values").VLiteral<"completed", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
145
+ title: import("convex/values").VString<string, "required">;
146
+ body: import("convex/values").VString<string, "required">;
147
+ upvoteCount: import("convex/values").VFloat64<number, "required">;
148
+ commentCount: import("convex/values").VFloat64<number, "required">;
149
+ updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
150
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount">;
151
+ /**
152
+ * Component-level activity entry shape with retained diagnostic and triage
153
+ * context. The host wrapper deliberately strips these optional fields from
154
+ * its normal actor-facing API.
155
+ */
156
+ export declare const activityEntryWithContextValidator: import("convex/values").VObject<{
157
+ updatedAt?: number | undefined;
158
+ id: string;
159
+ creationTime: number;
160
+ title: string;
161
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
162
+ actorId: string;
163
+ kind: "feedback" | "feature_request" | "bug_report";
164
+ body: string;
165
+ upvoteCount: number;
166
+ commentCount: number;
167
+ metadata?: {
168
+ standard?: Record<string, string | number | boolean> | undefined;
169
+ additional?: Record<string, string | number | boolean> | undefined;
170
+ } | undefined;
171
+ priority?: "low" | "medium" | "high" | undefined;
172
+ roadmap?: {
173
+ description?: string | undefined;
174
+ id: string;
175
+ creationTime: number;
176
+ title: string;
177
+ status: "planned" | "in_progress" | "shipped";
178
+ position: number;
179
+ createdAt: number;
180
+ updatedAt: number;
181
+ feedbackCount: number;
182
+ } | undefined;
183
+ }, {
184
+ id: import("convex/values").VString<string, "required">;
185
+ creationTime: import("convex/values").VFloat64<number, "required">;
186
+ actorId: import("convex/values").VString<string, "required">;
187
+ kind: import("convex/values").VUnion<"feedback" | "feature_request" | "bug_report", [import("convex/values").VLiteral<"feedback", "required">, import("convex/values").VLiteral<"feature_request", "required">, import("convex/values").VLiteral<"bug_report", "required">], "required", never>;
188
+ status: import("convex/values").VUnion<"open" | "under_review" | "planned" | "in_progress" | "completed" | "closed", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"under_review", "required">, import("convex/values").VLiteral<"planned", "required">, import("convex/values").VLiteral<"in_progress", "required">, import("convex/values").VLiteral<"completed", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
189
+ title: import("convex/values").VString<string, "required">;
190
+ body: import("convex/values").VString<string, "required">;
191
+ upvoteCount: import("convex/values").VFloat64<number, "required">;
192
+ commentCount: import("convex/values").VFloat64<number, "required">;
193
+ updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
194
+ metadata: import("convex/values").VObject<{
195
+ standard?: Record<string, string | number | boolean> | undefined;
196
+ additional?: Record<string, string | number | boolean> | undefined;
197
+ } | undefined, {
198
+ standard: import("convex/values").VRecord<Record<string, string | number | boolean> | undefined, import("convex/values").VString<string, "required">, import("convex/values").VUnion<string | number | boolean, [import("convex/values").VString<string, "required">, import("convex/values").VFloat64<number, "required">, import("convex/values").VBoolean<boolean, "required">], "required", never>, "optional", string>;
199
+ additional: import("convex/values").VRecord<Record<string, string | number | boolean> | undefined, import("convex/values").VString<string, "required">, import("convex/values").VUnion<string | number | boolean, [import("convex/values").VString<string, "required">, import("convex/values").VFloat64<number, "required">, import("convex/values").VBoolean<boolean, "required">], "required", never>, "optional", string>;
200
+ }, "optional", "standard" | "additional" | `standard.${string}` | `additional.${string}`>;
201
+ priority: import("convex/values").VUnion<"low" | "medium" | "high" | undefined, [import("convex/values").VLiteral<"low", "required">, import("convex/values").VLiteral<"medium", "required">, import("convex/values").VLiteral<"high", "required">], "optional", never>;
202
+ roadmap: import("convex/values").VObject<{
203
+ description?: string | undefined;
204
+ id: string;
205
+ creationTime: number;
206
+ title: string;
207
+ status: "planned" | "in_progress" | "shipped";
208
+ position: number;
209
+ createdAt: number;
210
+ updatedAt: number;
211
+ feedbackCount: number;
212
+ } | undefined, {
213
+ id: import("convex/values").VString<string, "required">;
214
+ creationTime: import("convex/values").VFloat64<number, "required">;
215
+ title: import("convex/values").VString<string, "required">;
216
+ description: import("convex/values").VString<string | undefined, "optional">;
217
+ status: import("convex/values").VUnion<"planned" | "in_progress" | "shipped", [import("convex/values").VLiteral<"planned", "required">, import("convex/values").VLiteral<"in_progress", "required">, import("convex/values").VLiteral<"shipped", "required">], "required", never>;
218
+ position: import("convex/values").VFloat64<number, "required">;
219
+ createdAt: import("convex/values").VFloat64<number, "required">;
220
+ updatedAt: import("convex/values").VFloat64<number, "required">;
221
+ feedbackCount: import("convex/values").VFloat64<number, "required">;
222
+ }, "optional", "id" | "creationTime" | "title" | "description" | "status" | "position" | "createdAt" | "updatedAt" | "feedbackCount">;
223
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}` | "priority" | "roadmap" | "roadmap.id" | "roadmap.creationTime" | "roadmap.title" | "roadmap.description" | "roadmap.status" | "roadmap.position" | "roadmap.createdAt" | "roadmap.updatedAt" | "roadmap.feedbackCount">;
224
+ /** Comment activity with the basic entry context needed by an activity UI. */
225
+ export declare const activityCommentValidator: import("convex/values").VObject<{
226
+ updatedAt?: number | undefined;
227
+ parentCommentId?: string | undefined;
228
+ id: string;
229
+ creationTime: number;
230
+ actorId: string;
231
+ body: string;
232
+ entryId: string;
233
+ depth: number;
234
+ likeCount: number;
235
+ replyCount: number;
236
+ entryTitle: string;
237
+ }, {
238
+ id: import("convex/values").VString<string, "required">;
239
+ creationTime: import("convex/values").VFloat64<number, "required">;
240
+ entryId: import("convex/values").VString<string, "required">;
241
+ entryTitle: import("convex/values").VString<string, "required">;
242
+ parentCommentId: import("convex/values").VString<string | undefined, "optional">;
243
+ actorId: import("convex/values").VString<string, "required">;
244
+ depth: import("convex/values").VFloat64<number, "required">;
245
+ body: import("convex/values").VString<string, "required">;
246
+ likeCount: import("convex/values").VFloat64<number, "required">;
247
+ replyCount: import("convex/values").VFloat64<number, "required">;
248
+ updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
249
+ }, "required", "id" | "creationTime" | "updatedAt" | "actorId" | "body" | "entryId" | "parentCommentId" | "depth" | "likeCount" | "replyCount" | "entryTitle">;
250
+ /** Resolved target context for an entry-upvote activity record. */
251
+ export declare const entryReactionTargetValidator: import("convex/values").VObject<{
252
+ id: string;
253
+ title: string;
254
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
255
+ kind: "feedback" | "feature_request" | "bug_report";
256
+ }, {
257
+ id: import("convex/values").VString<string, "required">;
258
+ title: import("convex/values").VString<string, "required">;
259
+ kind: import("convex/values").VUnion<"feedback" | "feature_request" | "bug_report", [import("convex/values").VLiteral<"feedback", "required">, import("convex/values").VLiteral<"feature_request", "required">, import("convex/values").VLiteral<"bug_report", "required">], "required", never>;
260
+ status: import("convex/values").VUnion<"open" | "under_review" | "planned" | "in_progress" | "completed" | "closed", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"under_review", "required">, import("convex/values").VLiteral<"planned", "required">, import("convex/values").VLiteral<"in_progress", "required">, import("convex/values").VLiteral<"completed", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
261
+ }, "required", "id" | "title" | "status" | "kind">;
262
+ /** Resolved target context for a comment-like activity record. */
263
+ export declare const commentReactionTargetValidator: import("convex/values").VObject<{
264
+ id: string;
265
+ body: string;
266
+ entryId: string;
267
+ entryTitle: string;
268
+ }, {
269
+ id: import("convex/values").VString<string, "required">;
270
+ body: import("convex/values").VString<string, "required">;
271
+ entryId: import("convex/values").VString<string, "required">;
272
+ entryTitle: import("convex/values").VString<string, "required">;
273
+ }, "required", "id" | "body" | "entryId" | "entryTitle">;
274
+ /** A reaction activity record with a live, resolved target. */
275
+ export declare const feedbackReactionValidator: import("convex/values").VUnion<{
276
+ type: "entry_upvote";
277
+ id: string;
278
+ creationTime: number;
279
+ entry: {
280
+ id: string;
281
+ title: string;
282
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
283
+ kind: "feedback" | "feature_request" | "bug_report";
284
+ };
285
+ } | {
286
+ type: "comment_like";
287
+ id: string;
288
+ creationTime: number;
289
+ comment: {
290
+ id: string;
291
+ body: string;
292
+ entryId: string;
293
+ entryTitle: string;
294
+ };
295
+ }, [import("convex/values").VObject<{
296
+ type: "entry_upvote";
297
+ id: string;
298
+ creationTime: number;
299
+ entry: {
300
+ id: string;
301
+ title: string;
302
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
303
+ kind: "feedback" | "feature_request" | "bug_report";
304
+ };
305
+ }, {
306
+ type: import("convex/values").VLiteral<"entry_upvote", "required">;
307
+ id: import("convex/values").VString<string, "required">;
308
+ creationTime: import("convex/values").VFloat64<number, "required">;
309
+ entry: import("convex/values").VObject<{
310
+ id: string;
311
+ title: string;
312
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
313
+ kind: "feedback" | "feature_request" | "bug_report";
314
+ }, {
315
+ id: import("convex/values").VString<string, "required">;
316
+ title: import("convex/values").VString<string, "required">;
317
+ kind: import("convex/values").VUnion<"feedback" | "feature_request" | "bug_report", [import("convex/values").VLiteral<"feedback", "required">, import("convex/values").VLiteral<"feature_request", "required">, import("convex/values").VLiteral<"bug_report", "required">], "required", never>;
318
+ status: import("convex/values").VUnion<"open" | "under_review" | "planned" | "in_progress" | "completed" | "closed", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"under_review", "required">, import("convex/values").VLiteral<"planned", "required">, import("convex/values").VLiteral<"in_progress", "required">, import("convex/values").VLiteral<"completed", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
319
+ }, "required", "id" | "title" | "status" | "kind">;
320
+ }, "required", "type" | "id" | "creationTime" | "entry" | "entry.id" | "entry.title" | "entry.status" | "entry.kind">, import("convex/values").VObject<{
321
+ type: "comment_like";
322
+ id: string;
323
+ creationTime: number;
324
+ comment: {
325
+ id: string;
326
+ body: string;
327
+ entryId: string;
328
+ entryTitle: string;
329
+ };
330
+ }, {
331
+ type: import("convex/values").VLiteral<"comment_like", "required">;
332
+ id: import("convex/values").VString<string, "required">;
333
+ creationTime: import("convex/values").VFloat64<number, "required">;
334
+ comment: import("convex/values").VObject<{
335
+ id: string;
336
+ body: string;
337
+ entryId: string;
338
+ entryTitle: string;
339
+ }, {
340
+ id: import("convex/values").VString<string, "required">;
341
+ body: import("convex/values").VString<string, "required">;
342
+ entryId: import("convex/values").VString<string, "required">;
343
+ entryTitle: import("convex/values").VString<string, "required">;
344
+ }, "required", "id" | "body" | "entryId" | "entryTitle">;
345
+ }, "required", "type" | "id" | "creationTime" | "comment" | "comment.id" | "comment.body" | "comment.entryId" | "comment.entryTitle">], "required", "type" | "id" | "creationTime" | "entry" | "entry.id" | "entry.title" | "entry.status" | "entry.kind" | "comment" | "comment.id" | "comment.body" | "comment.entryId" | "comment.entryTitle">;
123
346
  export declare const similarEntriesValidator: import("convex/values").VObject<{
124
347
  exact: {
125
348
  updatedAt?: number | undefined;
@@ -343,6 +566,17 @@ export declare const adminEntryValidator: import("convex/values").VObject<{
343
566
  feedbackCount: import("convex/values").VFloat64<number, "required">;
344
567
  }, "optional", "id" | "creationTime" | "title" | "description" | "status" | "position" | "createdAt" | "updatedAt" | "feedbackCount">;
345
568
  }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "viewerHasUpvoted" | "viewerIsAuthor" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}` | "priority" | "roadmap" | "roadmap.id" | "roadmap.creationTime" | "roadmap.title" | "roadmap.description" | "roadmap.status" | "roadmap.position" | "roadmap.createdAt" | "roadmap.updatedAt" | "roadmap.feedbackCount">;
569
+ type InferredFeedbackActor = Infer<typeof actorValidator>;
570
+ type InferredRoadmapItem = Infer<typeof roadmapItemValidator>;
571
+ type InferredFeedbackMetadata = Infer<typeof feedbackMetadataValidator>;
572
+ type InferredFeedbackEntry = Infer<typeof publicEntryValidator>;
573
+ type InferredAdminFeedbackEntry = Infer<typeof adminEntryValidator>;
574
+ type InferredFeedbackComment = Infer<typeof publicCommentValidator>;
575
+ type InferredActivityEntry = Infer<typeof activityEntryValidator>;
576
+ type InferredActivityEntryWithContext = Infer<typeof activityEntryWithContextValidator>;
577
+ type InferredActivityComment = Infer<typeof activityCommentValidator>;
578
+ type InferredFeedbackReaction = Infer<typeof feedbackReactionValidator>;
579
+ type InferredSimilarEntriesResult = Infer<typeof similarEntriesValidator>;
346
580
  /**
347
581
  * Category of feedback represented by an entry.
348
582
  *
@@ -374,7 +608,26 @@ export type EntryPriority = Infer<typeof entryPriorityValidator>;
374
608
  /** Workflow stage for an admin roadmap item. */
375
609
  export type RoadmapStatus = Infer<typeof roadmapStatusValidator>;
376
610
  /** Admin-managed roadmap item and its current attached-feedback count. */
377
- export type RoadmapItem = Infer<typeof roadmapItemValidator>;
611
+ export interface RoadmapItem {
612
+ /** Public component document identifier. */
613
+ id: InferredRoadmapItem["id"];
614
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
615
+ creationTime: InferredRoadmapItem["creationTime"];
616
+ /** Roadmap item title. */
617
+ title: InferredRoadmapItem["title"];
618
+ /** Optional roadmap item description. */
619
+ description?: InferredRoadmapItem["description"];
620
+ /** Current roadmap workflow stage. */
621
+ status: InferredRoadmapItem["status"];
622
+ /** Relative ordering position among roadmap items. */
623
+ position: InferredRoadmapItem["position"];
624
+ /** Millisecond timestamp at which the roadmap item was created. */
625
+ createdAt: InferredRoadmapItem["createdAt"];
626
+ /** Millisecond timestamp of the latest roadmap item update. */
627
+ updatedAt: InferredRoadmapItem["updatedAt"];
628
+ /** Number of feedback entries currently attached to the roadmap item. */
629
+ feedbackCount: InferredRoadmapItem["feedbackCount"];
630
+ }
378
631
  /**
379
632
  * Server-side ordering strategy for comments and replies.
380
633
  *
@@ -389,124 +642,207 @@ export type CommentSort = Infer<typeof commentSortValidator>;
389
642
  *
390
643
  * The component does not access the host application's authentication system
391
644
  * directly. The host resolves its current user/session into this shape.
392
- *
393
- * @property id
394
- * Stable identifier for the actor. This can be a Clerk ID, Convex Auth ID,
395
- * application user ID, anonymous installation ID, or another stable
396
- * host-controlled identifier.
397
- *
398
- * @property isAdmin
399
- * Whether the actor can perform admin-only actions such as changing entry
400
- * status or modifying content they do not own. When omitted, the deprecated
401
- * `isModerator` field is used.
402
- *
403
- * @property isModerator
404
- * @deprecated Use `isAdmin`.
405
645
  */
406
- export type FeedbackActor = Infer<typeof actorValidator>;
646
+ export interface FeedbackActor {
647
+ /**
648
+ * Stable identifier for the actor. This can be a Clerk ID, Convex Auth ID,
649
+ * application user ID, anonymous installation ID, or another stable
650
+ * host-controlled identifier.
651
+ */
652
+ id: InferredFeedbackActor["id"];
653
+ /**
654
+ * Whether the actor can perform admin-only actions such as changing entry
655
+ * status or modifying content they do not own. When omitted, the deprecated
656
+ * `isModerator` field is used.
657
+ */
658
+ isAdmin?: InferredFeedbackActor["isAdmin"];
659
+ /** @deprecated Use `isAdmin`. */
660
+ isModerator?: InferredFeedbackActor["isModerator"];
661
+ }
407
662
  /** Scalar value accepted in entry diagnostic metadata. */
408
663
  export type FeedbackMetadataValue = Infer<typeof feedbackMetadataValueValidator>;
409
664
  /** Flat metadata values grouped by their source. */
410
- export type FeedbackMetadata = Infer<typeof feedbackMetadataValidator>;
411
- /**
412
- * Public representation of a feedback, feature-request, or bug-report entry.
413
- *
414
- * @property id
415
- * Public component document identifier.
416
- *
417
- * @property creationTime
418
- * Convex document creation timestamp in milliseconds since the Unix epoch.
419
- *
420
- * @property actorId
421
- * Stable identifier of the actor who created the entry.
422
- *
423
- * @property kind
424
- * Entry category.
425
- *
426
- * @property status
427
- * Current workflow status.
428
- *
429
- * @property title
430
- * User-provided entry title.
431
- *
432
- * @property body
433
- * User-provided entry description.
434
- *
435
- * @property upvoteCount
436
- * Denormalized number of actors currently upvoting this entry.
437
- *
438
- * @property commentCount
439
- * Denormalized total number of comments belonging to the entry, including
440
- * nested replies.
441
- *
442
- * @property updatedAt
443
- * Millisecond timestamp of the most recent content update. Absent when the
444
- * entry has never been edited.
445
- *
446
- * @property viewerHasUpvoted
447
- * Whether the actor associated with the current query has upvoted the entry.
448
- * `false` when no viewer actor is available.
449
- *
450
- * @property viewerIsAuthor
451
- * Whether the actor associated with the current query created the entry.
452
- * `false` when no viewer actor is available. This is optional for compatibility
453
- * with hosts that have not yet redeployed the updated wrapper.
454
- *
455
- * @property metadata
456
- * Creation-time diagnostic metadata. Present only when `getEntry` is queried
457
- * by an admin. Ordinary entry lists, searches, and non-admin reads omit
458
- * this property.
459
- */
460
- export type FeedbackEntry = Infer<typeof publicEntryValidator>;
665
+ export interface FeedbackMetadata {
666
+ /** Standard diagnostic metadata collected by the component. */
667
+ standard?: InferredFeedbackMetadata["standard"];
668
+ /** Additional host-provided diagnostic metadata. */
669
+ additional?: InferredFeedbackMetadata["additional"];
670
+ }
671
+ /** Public representation of a feedback, feature-request, or bug-report entry. */
672
+ export interface FeedbackEntry {
673
+ /** Public component document identifier. */
674
+ id: InferredFeedbackEntry["id"];
675
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
676
+ creationTime: InferredFeedbackEntry["creationTime"];
677
+ /** Stable identifier of the actor who created the entry. */
678
+ actorId: InferredFeedbackEntry["actorId"];
679
+ /** Entry category. */
680
+ kind: InferredFeedbackEntry["kind"];
681
+ /** Current workflow status. */
682
+ status: InferredFeedbackEntry["status"];
683
+ /** User-provided entry title. */
684
+ title: InferredFeedbackEntry["title"];
685
+ /** User-provided entry description. */
686
+ body: InferredFeedbackEntry["body"];
687
+ /** Denormalized number of actors currently upvoting this entry. */
688
+ upvoteCount: InferredFeedbackEntry["upvoteCount"];
689
+ /** Denormalized total number of comments belonging to the entry, including nested replies. */
690
+ commentCount: InferredFeedbackEntry["commentCount"];
691
+ /** Millisecond timestamp of the most recent content update. Absent when the entry has never been edited. */
692
+ updatedAt?: InferredFeedbackEntry["updatedAt"];
693
+ /** Whether the actor associated with the current query has upvoted the entry. `false` when no viewer actor is available. */
694
+ viewerHasUpvoted: InferredFeedbackEntry["viewerHasUpvoted"];
695
+ /**
696
+ * Whether the actor associated with the current query created the entry.
697
+ * `false` when no viewer actor is available. This is optional for compatibility
698
+ * with hosts that have not yet redeployed the updated wrapper.
699
+ */
700
+ viewerIsAuthor?: InferredFeedbackEntry["viewerIsAuthor"];
701
+ /**
702
+ * Creation-time diagnostic metadata. Present only when `getEntry` is queried
703
+ * by an admin. Ordinary entry lists, searches, and non-admin reads omit this
704
+ * property.
705
+ */
706
+ metadata?: InferredFeedbackEntry["metadata"];
707
+ }
461
708
  /** Feedback entry enriched with private triage metadata for admin clients. */
462
- export type AdminFeedbackEntry = Infer<typeof adminEntryValidator>;
709
+ export interface AdminFeedbackEntry {
710
+ /** Public component document identifier. */
711
+ id: InferredAdminFeedbackEntry["id"];
712
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
713
+ creationTime: InferredAdminFeedbackEntry["creationTime"];
714
+ /** Stable identifier of the actor who created the entry. */
715
+ actorId: InferredAdminFeedbackEntry["actorId"];
716
+ /** Entry category. */
717
+ kind: InferredAdminFeedbackEntry["kind"];
718
+ /** Current workflow status. */
719
+ status: InferredAdminFeedbackEntry["status"];
720
+ /** User-provided entry title. */
721
+ title: InferredAdminFeedbackEntry["title"];
722
+ /** User-provided entry description. */
723
+ body: InferredAdminFeedbackEntry["body"];
724
+ /** Denormalized number of actors currently upvoting this entry. */
725
+ upvoteCount: InferredAdminFeedbackEntry["upvoteCount"];
726
+ /** Denormalized total number of comments belonging to the entry, including nested replies. */
727
+ commentCount: InferredAdminFeedbackEntry["commentCount"];
728
+ /** Millisecond timestamp of the most recent content update. Absent when the entry has never been edited. */
729
+ updatedAt?: InferredAdminFeedbackEntry["updatedAt"];
730
+ /** Whether the actor associated with the current query has upvoted the entry. `false` when no viewer actor is available. */
731
+ viewerHasUpvoted: InferredAdminFeedbackEntry["viewerHasUpvoted"];
732
+ /** Whether the actor associated with the current query created the entry. */
733
+ viewerIsAuthor?: InferredAdminFeedbackEntry["viewerIsAuthor"];
734
+ /** Creation-time diagnostic metadata returned to admin clients. */
735
+ metadata?: InferredAdminFeedbackEntry["metadata"];
736
+ /** Internal triage priority. */
737
+ priority?: InferredAdminFeedbackEntry["priority"];
738
+ /** Roadmap item attached to the entry, when one exists. */
739
+ roadmap?: InferredAdminFeedbackEntry["roadmap"];
740
+ }
463
741
  /**
464
742
  * Public representation of a comment or reply.
465
743
  *
466
744
  * Comments are returned one level at a time. Child comments are not included
467
745
  * automatically; query them separately using the comment's `id` as
468
746
  * `parentCommentId`.
469
- *
470
- * @property id
471
- * Public component document identifier.
472
- *
473
- * @property creationTime
474
- * Convex document creation timestamp in milliseconds since the Unix epoch.
475
- *
476
- * @property entryId
477
- * Entry this comment belongs to.
478
- *
479
- * @property parentCommentId
480
- * Direct parent comment. Absent for top-level comments.
481
- *
482
- * @property actorId
483
- * Stable identifier of the actor who created the comment.
484
- *
485
- * @property depth
486
- * Zero-based nesting depth. Top-level comments have depth `0`.
487
- *
488
- * @property body
489
- * User-provided comment text. `null` when the comment was soft-deleted so
490
- * nested replies can retain their place in the conversation.
491
- *
492
- * @property likeCount
493
- * Denormalized number of actors currently liking this comment.
494
- *
495
- * @property replyCount
496
- * Number of direct child replies. Descendants below those direct children are
497
- * not included in this count.
498
- *
499
- * @property updatedAt
500
- * Millisecond timestamp of the latest edit, when the comment has been edited.
501
- *
502
- * @property deletedAt
503
- * Millisecond timestamp at which the comment was soft-deleted.
504
- *
505
- * @property viewerHasLiked
506
- * Whether the actor associated with the current query likes this comment.
507
- * `false` when no viewer actor is available.
508
747
  */
509
- export type FeedbackComment = Infer<typeof publicCommentValidator>;
748
+ export interface FeedbackComment {
749
+ /** Public component document identifier. */
750
+ id: InferredFeedbackComment["id"];
751
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
752
+ creationTime: InferredFeedbackComment["creationTime"];
753
+ /** Entry this comment belongs to. */
754
+ entryId: InferredFeedbackComment["entryId"];
755
+ /** Direct parent comment. Absent for top-level comments. */
756
+ parentCommentId?: InferredFeedbackComment["parentCommentId"];
757
+ /** Stable identifier of the actor who created the comment. */
758
+ actorId: InferredFeedbackComment["actorId"];
759
+ /** Zero-based nesting depth. Top-level comments have depth `0`. */
760
+ depth: InferredFeedbackComment["depth"];
761
+ /** User-provided comment text. */
762
+ body: InferredFeedbackComment["body"];
763
+ /** Denormalized number of actors currently liking this comment. */
764
+ likeCount: InferredFeedbackComment["likeCount"];
765
+ /** Number of direct child replies. Descendants below those direct children are not included in this count. */
766
+ replyCount: InferredFeedbackComment["replyCount"];
767
+ /** Millisecond timestamp of the latest edit, when the comment has been edited. */
768
+ updatedAt?: InferredFeedbackComment["updatedAt"];
769
+ /** Whether the actor associated with the current query likes this comment. `false` when no viewer actor is available. */
770
+ viewerHasLiked: InferredFeedbackComment["viewerHasLiked"];
771
+ }
772
+ /** Entry created by the actor used for an actor-scoped activity query. */
773
+ export interface FeedbackActivityEntry {
774
+ /** Public component document identifier. */
775
+ id: InferredActivityEntry["id"];
776
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
777
+ creationTime: InferredActivityEntry["creationTime"];
778
+ /** Stable identifier of the actor who created the entry. */
779
+ actorId: InferredActivityEntry["actorId"];
780
+ /** Entry category. */
781
+ kind: InferredActivityEntry["kind"];
782
+ /** Current workflow status. */
783
+ status: InferredActivityEntry["status"];
784
+ /** User-provided entry title. */
785
+ title: InferredActivityEntry["title"];
786
+ /** User-provided entry description. */
787
+ body: InferredActivityEntry["body"];
788
+ /** Denormalized number of actors currently upvoting this entry. */
789
+ upvoteCount: InferredActivityEntry["upvoteCount"];
790
+ /** Denormalized total number of comments belonging to the entry. */
791
+ commentCount: InferredActivityEntry["commentCount"];
792
+ /** Millisecond timestamp of the most recent content update. */
793
+ updatedAt?: InferredActivityEntry["updatedAt"];
794
+ }
795
+ /**
796
+ * Component-only activity entry shape with retained diagnostic and triage
797
+ * context. It is used by trusted server consumers, not the normal `listUser`
798
+ * wrappers.
799
+ */
800
+ export interface FeedbackActivityEntryWithContext extends FeedbackActivityEntry {
801
+ metadata?: InferredActivityEntryWithContext["metadata"];
802
+ priority?: InferredActivityEntryWithContext["priority"];
803
+ roadmap?: InferredActivityEntryWithContext["roadmap"];
804
+ }
805
+ /** Comment created by the actor used for an actor-scoped activity query. */
806
+ export interface FeedbackActivityComment {
807
+ /** Public component document identifier. */
808
+ id: InferredActivityComment["id"];
809
+ /** Convex document creation timestamp in milliseconds since the Unix epoch. */
810
+ creationTime: InferredActivityComment["creationTime"];
811
+ /** Entry this comment belongs to. */
812
+ entryId: InferredActivityComment["entryId"];
813
+ /** Current entry title. Activity rows with missing entries are removed. */
814
+ entryTitle: InferredActivityComment["entryTitle"];
815
+ /** Direct parent comment. Absent for top-level comments. */
816
+ parentCommentId?: InferredActivityComment["parentCommentId"];
817
+ /** Stable identifier of the actor who created the comment. */
818
+ actorId: InferredActivityComment["actorId"];
819
+ /** Zero-based nesting depth. */
820
+ depth: InferredActivityComment["depth"];
821
+ /** User-provided comment text. */
822
+ body: InferredActivityComment["body"];
823
+ /** Denormalized number of actors currently liking this comment. */
824
+ likeCount: InferredActivityComment["likeCount"];
825
+ /** Number of direct child replies. */
826
+ replyCount: InferredActivityComment["replyCount"];
827
+ /** Millisecond timestamp of the latest edit, when edited. */
828
+ updatedAt?: InferredActivityComment["updatedAt"];
829
+ }
830
+ /** Resolved entry context for an entry-upvote activity record. */
831
+ export interface FeedbackEntryReactionTarget {
832
+ id: InferredActivityEntry["id"];
833
+ title: string;
834
+ kind: EntryKind;
835
+ status: EntryStatus;
836
+ }
837
+ /** Resolved comment context for a comment-like activity record. */
838
+ export interface FeedbackCommentReactionTarget {
839
+ id: InferredActivityComment["id"];
840
+ body: string;
841
+ entryId: InferredActivityComment["entryId"];
842
+ entryTitle: string;
843
+ }
844
+ /** A reaction created by the actor used for an actor-scoped activity query. */
845
+ export type FeedbackReaction = InferredFeedbackReaction;
510
846
  /**
511
847
  * Duplicate-detection result for a proposed entry.
512
848
  *
@@ -522,13 +858,12 @@ export type FeedbackComment = Infer<typeof publicCommentValidator>;
522
858
  * - 0 exact matches → `0 exact + at most 3 similar`
523
859
  *
524
860
  * An entry returned in `exact` is never repeated in `similar`.
525
- *
526
- * @property exact
527
- * Entries whose normalized title exactly matches the proposed title.
528
- *
529
- * @property similar
530
- * Full-text matches ordered by search relevance after exact matches have been
531
- * removed.
532
861
  */
533
- export type SimilarEntriesResult = Infer<typeof similarEntriesValidator>;
862
+ export interface SimilarEntriesResult {
863
+ /** Entries whose normalized title exactly matches the proposed title. */
864
+ exact: InferredSimilarEntriesResult["exact"];
865
+ /** Full-text matches ordered by search relevance after exact matches have been removed. */
866
+ similar: InferredSimilarEntriesResult["similar"];
867
+ }
868
+ export {};
534
869
  //# sourceMappingURL=model.d.ts.map