convex-feedback 0.1.5 → 0.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +70 -27
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/client/api.d.ts +76 -1
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/config.d.ts +1 -1
  6. package/dist/client/index.d.ts +9 -5
  7. package/dist/client/index.d.ts.map +1 -1
  8. package/dist/client/index.js +253 -8
  9. package/dist/client/index.js.map +1 -1
  10. package/dist/component/_generated/api.d.ts +4 -0
  11. package/dist/component/_generated/api.d.ts.map +1 -1
  12. package/dist/component/_generated/api.js.map +1 -1
  13. package/dist/component/_generated/component.d.ts +293 -5
  14. package/dist/component/_generated/component.d.ts.map +1 -1
  15. package/dist/component/admin.d.ts +130 -0
  16. package/dist/component/admin.d.ts.map +1 -0
  17. package/dist/component/admin.js +125 -0
  18. package/dist/component/admin.js.map +1 -0
  19. package/dist/component/comments.d.ts +7 -5
  20. package/dist/component/comments.d.ts.map +1 -1
  21. package/dist/component/comments.js +3 -3
  22. package/dist/component/comments.js.map +1 -1
  23. package/dist/component/entries.d.ts +29 -18
  24. package/dist/component/entries.d.ts.map +1 -1
  25. package/dist/component/entries.js +27 -6
  26. package/dist/component/entries.js.map +1 -1
  27. package/dist/component/helpers.d.ts +3 -1
  28. package/dist/component/helpers.d.ts.map +1 -1
  29. package/dist/component/helpers.js +28 -0
  30. package/dist/component/helpers.js.map +1 -1
  31. package/dist/component/model.d.ts +140 -24
  32. package/dist/component/model.d.ts.map +1 -1
  33. package/dist/component/model.js +30 -1
  34. package/dist/component/model.js.map +1 -1
  35. package/dist/component/roadmap.d.ts +166 -0
  36. package/dist/component/roadmap.d.ts.map +1 -0
  37. package/dist/component/roadmap.js +534 -0
  38. package/dist/component/roadmap.js.map +1 -0
  39. package/dist/component/schema.d.ts +61 -5
  40. package/dist/component/schema.d.ts.map +1 -1
  41. package/dist/component/schema.js +48 -2
  42. package/dist/component/schema.js.map +1 -1
  43. package/dist/react/index.d.ts +169 -12
  44. package/dist/react/index.d.ts.map +1 -1
  45. package/dist/react/index.js +72 -1
  46. package/dist/react/index.js.map +1 -1
  47. package/dist/test.d.ts +61 -5
  48. package/dist/test.d.ts.map +1 -1
  49. package/package.json +3 -2
  50. package/src/client/README.md +1 -1
  51. package/src/client/api.ts +176 -0
  52. package/src/client/config.ts +1 -1
  53. package/src/client/index.ts +330 -13
  54. package/src/component/README.md +1 -1
  55. package/src/component/_generated/api.ts +4 -0
  56. package/src/component/_generated/component.ts +371 -9
  57. package/src/component/admin.ts +180 -0
  58. package/src/component/comments.ts +3 -2
  59. package/src/component/entries.ts +29 -5
  60. package/src/component/helpers.ts +44 -1
  61. package/src/component/model.ts +65 -4
  62. package/src/component/roadmap.ts +627 -0
  63. package/src/component/schema.ts +51 -1
  64. package/src/react/README.md +2 -2
  65. package/src/react/index.ts +139 -4
@@ -3,14 +3,48 @@ export declare const entryKindValidator: import("convex/values").VUnion<"feedbac
3
3
  export declare const entryStatusValidator: 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>;
4
4
  export declare const entryStatusFilterValidator: import("convex/values").VUnion<"open" | "closed", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
5
5
  export declare const entrySortValidator: import("convex/values").VUnion<"top" | "newest", [import("convex/values").VLiteral<"top", "required">, import("convex/values").VLiteral<"newest", "required">], "required", never>;
6
+ export declare const entryPriorityValidator: import("convex/values").VUnion<"low" | "medium" | "high", [import("convex/values").VLiteral<"low", "required">, import("convex/values").VLiteral<"medium", "required">, import("convex/values").VLiteral<"high", "required">], "required", never>;
7
+ export declare const roadmapStatusValidator: 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>;
6
8
  export declare const commentSortValidator: import("convex/values").VUnion<"top" | "newest" | "oldest", [import("convex/values").VLiteral<"top", "required">, import("convex/values").VLiteral<"newest", "required">, import("convex/values").VLiteral<"oldest", "required">], "required", never>;
7
9
  export declare const actorValidator: import("convex/values").VObject<{
10
+ isAdmin?: boolean | undefined;
11
+ isModerator?: boolean | undefined;
8
12
  id: string;
9
- isModerator: boolean;
10
13
  }, {
11
14
  id: import("convex/values").VString<string, "required">;
12
- isModerator: import("convex/values").VBoolean<boolean, "required">;
13
- }, "required", "id" | "isModerator">;
15
+ isAdmin: import("convex/values").VBoolean<boolean | undefined, "optional">;
16
+ /** @deprecated Use `isAdmin`. */
17
+ isModerator: import("convex/values").VBoolean<boolean | undefined, "optional">;
18
+ }, "required", "id" | "isAdmin" | "isModerator">;
19
+ /**
20
+ * Resolves the current admin flag while keeping the pre-`isAdmin` actor shape
21
+ * working for existing hosts. The new field wins when both are present.
22
+ */
23
+ export declare function actorIsAdmin(actor: {
24
+ isAdmin?: boolean;
25
+ isModerator?: boolean;
26
+ }): boolean;
27
+ export declare const roadmapItemValidator: import("convex/values").VObject<{
28
+ description?: string | undefined;
29
+ id: string;
30
+ creationTime: number;
31
+ title: string;
32
+ status: "planned" | "in_progress" | "shipped";
33
+ position: number;
34
+ createdAt: number;
35
+ updatedAt: number;
36
+ feedbackCount: number;
37
+ }, {
38
+ id: import("convex/values").VString<string, "required">;
39
+ creationTime: import("convex/values").VFloat64<number, "required">;
40
+ title: import("convex/values").VString<string, "required">;
41
+ description: import("convex/values").VString<string | undefined, "optional">;
42
+ 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>;
43
+ position: import("convex/values").VFloat64<number, "required">;
44
+ createdAt: import("convex/values").VFloat64<number, "required">;
45
+ updatedAt: import("convex/values").VFloat64<number, "required">;
46
+ feedbackCount: import("convex/values").VFloat64<number, "required">;
47
+ }, "required", "id" | "creationTime" | "title" | "description" | "status" | "position" | "createdAt" | "updatedAt" | "feedbackCount">;
14
48
  export declare const feedbackMetadataValueValidator: 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>;
15
49
  export declare const feedbackMetadataRecordValidator: import("convex/values").VRecord<Record<string, string | number | boolean>, 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>, "required", string>;
16
50
  export declare const feedbackMetadataValidator: import("convex/values").VObject<{
@@ -28,10 +62,10 @@ export declare const publicEntryValidator: import("convex/values").VObject<{
28
62
  } | undefined;
29
63
  id: string;
30
64
  creationTime: number;
65
+ title: string;
66
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
31
67
  actorId: string;
32
68
  kind: "feedback" | "feature_request" | "bug_report";
33
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
34
- title: string;
35
69
  body: string;
36
70
  upvoteCount: number;
37
71
  commentCount: number;
@@ -55,7 +89,7 @@ export declare const publicEntryValidator: import("convex/values").VObject<{
55
89
  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>;
56
90
  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>;
57
91
  }, "optional", "standard" | "additional" | `standard.${string}` | `additional.${string}`>;
58
- }, "required", "id" | "creationTime" | "actorId" | "kind" | "status" | "title" | "body" | "upvoteCount" | "commentCount" | "updatedAt" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>;
92
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>;
59
93
  export declare const publicCommentValidator: import("convex/values").VObject<{
60
94
  updatedAt?: number | undefined;
61
95
  parentCommentId?: string | undefined;
@@ -82,7 +116,7 @@ export declare const publicCommentValidator: import("convex/values").VObject<{
82
116
  updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
83
117
  deletedAt: import("convex/values").VFloat64<number | undefined, "optional">;
84
118
  viewerHasLiked: import("convex/values").VBoolean<boolean, "required">;
85
- }, "required", "id" | "creationTime" | "actorId" | "body" | "updatedAt" | "entryId" | "parentCommentId" | "depth" | "likeCount" | "replyCount" | "deletedAt" | "viewerHasLiked">;
119
+ }, "required", "id" | "creationTime" | "updatedAt" | "actorId" | "body" | "entryId" | "parentCommentId" | "depth" | "likeCount" | "replyCount" | "deletedAt" | "viewerHasLiked">;
86
120
  export declare const similarEntriesValidator: import("convex/values").VObject<{
87
121
  exact: {
88
122
  updatedAt?: number | undefined;
@@ -92,10 +126,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
92
126
  } | undefined;
93
127
  id: string;
94
128
  creationTime: number;
129
+ title: string;
130
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
95
131
  actorId: string;
96
132
  kind: "feedback" | "feature_request" | "bug_report";
97
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
98
- title: string;
99
133
  body: string;
100
134
  upvoteCount: number;
101
135
  commentCount: number;
@@ -109,10 +143,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
109
143
  } | undefined;
110
144
  id: string;
111
145
  creationTime: number;
146
+ title: string;
147
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
112
148
  actorId: string;
113
149
  kind: "feedback" | "feature_request" | "bug_report";
114
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
115
- title: string;
116
150
  body: string;
117
151
  upvoteCount: number;
118
152
  commentCount: number;
@@ -127,10 +161,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
127
161
  } | undefined;
128
162
  id: string;
129
163
  creationTime: number;
164
+ title: string;
165
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
130
166
  actorId: string;
131
167
  kind: "feedback" | "feature_request" | "bug_report";
132
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
133
- title: string;
134
168
  body: string;
135
169
  upvoteCount: number;
136
170
  commentCount: number;
@@ -143,10 +177,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
143
177
  } | undefined;
144
178
  id: string;
145
179
  creationTime: number;
180
+ title: string;
181
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
146
182
  actorId: string;
147
183
  kind: "feedback" | "feature_request" | "bug_report";
148
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
149
- title: string;
150
184
  body: string;
151
185
  upvoteCount: number;
152
186
  commentCount: number;
@@ -170,7 +204,7 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
170
204
  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>;
171
205
  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>;
172
206
  }, "optional", "standard" | "additional" | `standard.${string}` | `additional.${string}`>;
173
- }, "required", "id" | "creationTime" | "actorId" | "kind" | "status" | "title" | "body" | "upvoteCount" | "commentCount" | "updatedAt" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>, "required">;
207
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>, "required">;
174
208
  similar: import("convex/values").VArray<{
175
209
  updatedAt?: number | undefined;
176
210
  metadata?: {
@@ -179,10 +213,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
179
213
  } | undefined;
180
214
  id: string;
181
215
  creationTime: number;
216
+ title: string;
217
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
182
218
  actorId: string;
183
219
  kind: "feedback" | "feature_request" | "bug_report";
184
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
185
- title: string;
186
220
  body: string;
187
221
  upvoteCount: number;
188
222
  commentCount: number;
@@ -195,10 +229,10 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
195
229
  } | undefined;
196
230
  id: string;
197
231
  creationTime: number;
232
+ title: string;
233
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
198
234
  actorId: string;
199
235
  kind: "feedback" | "feature_request" | "bug_report";
200
- status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
201
- title: string;
202
236
  body: string;
203
237
  upvoteCount: number;
204
238
  commentCount: number;
@@ -222,8 +256,78 @@ export declare const similarEntriesValidator: import("convex/values").VObject<{
222
256
  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>;
223
257
  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>;
224
258
  }, "optional", "standard" | "additional" | `standard.${string}` | `additional.${string}`>;
225
- }, "required", "id" | "creationTime" | "actorId" | "kind" | "status" | "title" | "body" | "upvoteCount" | "commentCount" | "updatedAt" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>, "required">;
259
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "viewerHasUpvoted" | "metadata" | "metadata.standard" | "metadata.additional" | `metadata.standard.${string}` | `metadata.additional.${string}`>, "required">;
226
260
  }, "required", "exact" | "similar">;
261
+ export declare const adminEntryValidator: import("convex/values").VObject<{
262
+ updatedAt?: number | undefined;
263
+ metadata?: {
264
+ standard?: Record<string, string | number | boolean> | undefined;
265
+ additional?: Record<string, string | number | boolean> | undefined;
266
+ } | undefined;
267
+ id: string;
268
+ creationTime: number;
269
+ title: string;
270
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
271
+ actorId: string;
272
+ kind: "feedback" | "feature_request" | "bug_report";
273
+ body: string;
274
+ upvoteCount: number;
275
+ commentCount: number;
276
+ viewerHasUpvoted: boolean;
277
+ priority?: "low" | "medium" | "high" | undefined;
278
+ roadmap?: {
279
+ description?: string | undefined;
280
+ id: string;
281
+ creationTime: number;
282
+ title: string;
283
+ status: "planned" | "in_progress" | "shipped";
284
+ position: number;
285
+ createdAt: number;
286
+ updatedAt: number;
287
+ feedbackCount: number;
288
+ } | undefined;
289
+ }, {
290
+ id: import("convex/values").VString<string, "required">;
291
+ creationTime: import("convex/values").VFloat64<number, "required">;
292
+ actorId: import("convex/values").VString<string, "required">;
293
+ 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>;
294
+ 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>;
295
+ title: import("convex/values").VString<string, "required">;
296
+ body: import("convex/values").VString<string, "required">;
297
+ upvoteCount: import("convex/values").VFloat64<number, "required">;
298
+ commentCount: import("convex/values").VFloat64<number, "required">;
299
+ updatedAt: import("convex/values").VFloat64<number | undefined, "optional">;
300
+ viewerHasUpvoted: import("convex/values").VBoolean<boolean, "required">;
301
+ metadata: import("convex/values").VObject<{
302
+ standard?: Record<string, string | number | boolean> | undefined;
303
+ additional?: Record<string, string | number | boolean> | undefined;
304
+ } | undefined, {
305
+ 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>;
306
+ 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>;
307
+ }, "optional", "standard" | "additional" | `standard.${string}` | `additional.${string}`>;
308
+ 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>;
309
+ roadmap: import("convex/values").VObject<{
310
+ description?: string | undefined;
311
+ id: string;
312
+ creationTime: number;
313
+ title: string;
314
+ status: "planned" | "in_progress" | "shipped";
315
+ position: number;
316
+ createdAt: number;
317
+ updatedAt: number;
318
+ feedbackCount: number;
319
+ } | undefined, {
320
+ id: import("convex/values").VString<string, "required">;
321
+ creationTime: import("convex/values").VFloat64<number, "required">;
322
+ title: import("convex/values").VString<string, "required">;
323
+ description: import("convex/values").VString<string | undefined, "optional">;
324
+ 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>;
325
+ position: import("convex/values").VFloat64<number, "required">;
326
+ createdAt: import("convex/values").VFloat64<number, "required">;
327
+ updatedAt: import("convex/values").VFloat64<number, "required">;
328
+ feedbackCount: import("convex/values").VFloat64<number, "required">;
329
+ }, "optional", "id" | "creationTime" | "title" | "description" | "status" | "position" | "createdAt" | "updatedAt" | "feedbackCount">;
330
+ }, "required", "id" | "creationTime" | "title" | "status" | "updatedAt" | "actorId" | "kind" | "body" | "upvoteCount" | "commentCount" | "viewerHasUpvoted" | "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">;
227
331
  /**
228
332
  * Category of feedback represented by an entry.
229
333
  *
@@ -250,6 +354,12 @@ export declare function entryStatusFilterForStatus(status: EntryStatus): EntrySt
250
354
  * - `"newest"` — newest entries first.
251
355
  */
252
356
  export type EntrySort = Infer<typeof entrySortValidator>;
357
+ /** Internal triage priority visible only through the admin API. */
358
+ export type EntryPriority = Infer<typeof entryPriorityValidator>;
359
+ /** Workflow stage for an admin roadmap item. */
360
+ export type RoadmapStatus = Infer<typeof roadmapStatusValidator>;
361
+ /** Admin-managed roadmap item and its current attached-feedback count. */
362
+ export type RoadmapItem = Infer<typeof roadmapItemValidator>;
253
363
  /**
254
364
  * Server-side ordering strategy for comments and replies.
255
365
  *
@@ -270,9 +380,13 @@ export type CommentSort = Infer<typeof commentSortValidator>;
270
380
  * application user ID, anonymous installation ID, or another stable
271
381
  * host-controlled identifier.
272
382
  *
383
+ * @property isAdmin
384
+ * Whether the actor can perform admin-only actions such as changing entry
385
+ * status or modifying content they do not own. When omitted, the deprecated
386
+ * `isModerator` field is used.
387
+ *
273
388
  * @property isModerator
274
- * Whether the actor can perform moderator-only actions such as changing entry
275
- * status or modifying content they do not own.
389
+ * @deprecated Use `isAdmin`.
276
390
  */
277
391
  export type FeedbackActor = Infer<typeof actorValidator>;
278
392
  /** Scalar value accepted in entry diagnostic metadata. */
@@ -320,10 +434,12 @@ export type FeedbackMetadata = Infer<typeof feedbackMetadataValidator>;
320
434
  *
321
435
  * @property metadata
322
436
  * Creation-time diagnostic metadata. Present only when `getEntry` is queried
323
- * by a moderator. Ordinary entry lists, searches, and non-moderator reads omit
437
+ * by an admin. Ordinary entry lists, searches, and non-admin reads omit
324
438
  * this property.
325
439
  */
326
440
  export type FeedbackEntry = Infer<typeof publicEntryValidator>;
441
+ /** Feedback entry enriched with private triage metadata for admin clients. */
442
+ export type AdminFeedbackEntry = Infer<typeof adminEntryValidator>;
327
443
  /**
328
444
  * Public representation of a comment or reply.
329
445
  *
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/component/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,eAAO,MAAM,kBAAkB,2RAI9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,geAOhC,CAAC;AAEF,eAAO,MAAM,0BAA0B,sLAGtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,oLAG9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,uPAIhC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;oCAGzB,CAAC;AAEH,eAAO,MAAM,8BAA8B,kPAI1C,CAAC;AAEF,eAAO,MAAM,+BAA+B,uYAG3C,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;yFAGpC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yRAa/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;gLAajC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAGlC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7D,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEzE,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,GAClB,iBAAiB,CAEnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEzD,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,KAAK,CACvC,OAAO,8BAA8B,CACtC,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/component/model.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,34 @@ export const entryKindValidator = v.union(v.literal("feedback"), v.literal("feat
3
3
  export const entryStatusValidator = v.union(v.literal("open"), v.literal("under_review"), v.literal("planned"), v.literal("in_progress"), v.literal("completed"), v.literal("closed"));
4
4
  export const entryStatusFilterValidator = v.union(v.literal("open"), v.literal("closed"));
5
5
  export const entrySortValidator = v.union(v.literal("top"), v.literal("newest"));
6
+ export const entryPriorityValidator = v.union(v.literal("low"), v.literal("medium"), v.literal("high"));
7
+ export const roadmapStatusValidator = v.union(v.literal("planned"), v.literal("in_progress"), v.literal("shipped"));
6
8
  export const commentSortValidator = v.union(v.literal("top"), v.literal("newest"), v.literal("oldest"));
7
9
  export const actorValidator = v.object({
8
10
  id: v.string(),
9
- isModerator: v.boolean(),
11
+ isAdmin: v.optional(v.boolean()),
12
+ /** @deprecated Use `isAdmin`. */
13
+ isModerator: v.optional(v.boolean()),
14
+ });
15
+ /**
16
+ * Resolves the current admin flag while keeping the pre-`isAdmin` actor shape
17
+ * working for existing hosts. The new field wins when both are present.
18
+ */
19
+ export function actorIsAdmin(actor) {
20
+ return actor.isAdmin === undefined
21
+ ? actor.isModerator === true
22
+ : actor.isAdmin === true;
23
+ }
24
+ export const roadmapItemValidator = v.object({
25
+ id: v.string(),
26
+ creationTime: v.number(),
27
+ title: v.string(),
28
+ description: v.optional(v.string()),
29
+ status: roadmapStatusValidator,
30
+ position: v.number(),
31
+ createdAt: v.number(),
32
+ updatedAt: v.number(),
33
+ feedbackCount: v.number(),
10
34
  });
11
35
  export const feedbackMetadataValueValidator = v.union(v.string(), v.number(), v.boolean());
12
36
  export const feedbackMetadataRecordValidator = v.record(v.string(), feedbackMetadataValueValidator);
@@ -46,6 +70,11 @@ export const similarEntriesValidator = v.object({
46
70
  exact: v.array(publicEntryValidator),
47
71
  similar: v.array(publicEntryValidator),
48
72
  });
73
+ export const adminEntryValidator = publicEntryValidator.extend({
74
+ priority: v.optional(entryPriorityValidator),
75
+ roadmap: v.optional(roadmapItemValidator),
76
+ metadata: v.optional(feedbackMetadataValidator),
77
+ });
49
78
  export function entryStatusFilterForStatus(status) {
50
79
  return status === "closed" ? "closed" : "open";
51
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/component/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/component/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CACvC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAC5B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CACzC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EACzB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EACxB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EACtB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC/C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CACvC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC3C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC3C,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EACxB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CACzC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAChB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,iCAAiC;IACjC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAG5B;IACC,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS;QAChC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI;QAC5B,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,MAAM,EAAE,sBAAsB;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CACnD,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,OAAO,EAAE,CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,MAAM,EAAE,EACV,8BAA8B,CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,oBAAoB;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAChD,CAAC,CAAC;AAsBH,MAAM,UAAU,0BAA0B,CACxC,MAAmB;IAEnB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC"}
@@ -0,0 +1,166 @@
1
+ export declare const list: import("convex/server").RegisteredQuery<"public", {
2
+ status?: "planned" | "in_progress" | "shipped" | undefined;
3
+ paginationOpts: {
4
+ id?: number;
5
+ endCursor?: string | null;
6
+ maximumRowsRead?: number;
7
+ maximumBytesRead?: number;
8
+ numItems: number;
9
+ cursor: string | null;
10
+ };
11
+ }, Promise<{
12
+ page: {
13
+ description?: string | undefined;
14
+ id: string;
15
+ creationTime: number;
16
+ title: string;
17
+ status: "planned" | "in_progress" | "shipped";
18
+ position: number;
19
+ createdAt: number;
20
+ updatedAt: number;
21
+ feedbackCount: number;
22
+ }[];
23
+ isDone: boolean;
24
+ continueCursor: import("convex/server").Cursor;
25
+ splitCursor?: import("convex/server").Cursor | null;
26
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
27
+ }>>;
28
+ export declare const search: import("convex/server").RegisteredQuery<"public", {
29
+ searchQuery: string;
30
+ limit: number;
31
+ }, Promise<{
32
+ description?: string | undefined;
33
+ id: string;
34
+ creationTime: number;
35
+ title: string;
36
+ status: "planned" | "in_progress" | "shipped";
37
+ position: number;
38
+ createdAt: number;
39
+ updatedAt: number;
40
+ feedbackCount: number;
41
+ }[]>>;
42
+ export declare const create: import("convex/server").RegisteredMutation<"public", {
43
+ description?: string | undefined;
44
+ title: string;
45
+ status: "planned" | "in_progress" | "shipped";
46
+ actor: {
47
+ isAdmin?: boolean | undefined;
48
+ isModerator?: boolean | undefined;
49
+ id: string;
50
+ };
51
+ }, Promise<import("convex/values").GenericId<"roadmap">>>;
52
+ export declare const update: import("convex/server").RegisteredMutation<"public", {
53
+ description?: string | undefined;
54
+ title: string;
55
+ roadmapId: import("convex/values").GenericId<"roadmap">;
56
+ actor: {
57
+ isAdmin?: boolean | undefined;
58
+ isModerator?: boolean | undefined;
59
+ id: string;
60
+ };
61
+ }, Promise<null>>;
62
+ export declare const move: import("convex/server").RegisteredMutation<"public", {
63
+ previousItemId?: import("convex/values").GenericId<"roadmap"> | undefined;
64
+ nextItemId?: import("convex/values").GenericId<"roadmap"> | undefined;
65
+ status: "planned" | "in_progress" | "shipped";
66
+ roadmapId: import("convex/values").GenericId<"roadmap">;
67
+ actor: {
68
+ isAdmin?: boolean | undefined;
69
+ isModerator?: boolean | undefined;
70
+ id: string;
71
+ };
72
+ }, Promise<number>>;
73
+ export declare const rebalanceBatch: import("convex/server").RegisteredMutation<"internal", {
74
+ status: "planned" | "in_progress" | "shipped";
75
+ rebalanceId: string;
76
+ paginationOpts: {
77
+ id?: number;
78
+ endCursor?: string | null;
79
+ maximumRowsRead?: number;
80
+ maximumBytesRead?: number;
81
+ numItems: number;
82
+ cursor: string | null;
83
+ };
84
+ phase: "mark" | "rewrite" | "promote";
85
+ offset: number;
86
+ }, Promise<null>>;
87
+ export declare const remove: import("convex/server").RegisteredMutation<"public", {
88
+ roadmapId: import("convex/values").GenericId<"roadmap">;
89
+ actor: {
90
+ isAdmin?: boolean | undefined;
91
+ isModerator?: boolean | undefined;
92
+ id: string;
93
+ };
94
+ }, Promise<null>>;
95
+ export declare const removeBatch: import("convex/server").RegisteredMutation<"internal", {
96
+ roadmapId: import("convex/values").GenericId<"roadmap">;
97
+ }, Promise<{
98
+ processed: number;
99
+ hasMore: boolean;
100
+ }>>;
101
+ export declare const finalizeRemoval: import("convex/server").RegisteredMutation<"internal", {
102
+ roadmapId: import("convex/values").GenericId<"roadmap">;
103
+ }, Promise<null>>;
104
+ export declare const attachFeedback: import("convex/server").RegisteredMutation<"public", {
105
+ entryId: import("convex/values").GenericId<"entries">;
106
+ roadmapId: import("convex/values").GenericId<"roadmap">;
107
+ actor: {
108
+ isAdmin?: boolean | undefined;
109
+ isModerator?: boolean | undefined;
110
+ id: string;
111
+ };
112
+ }, Promise<null>>;
113
+ export declare const createForEntry: import("convex/server").RegisteredMutation<"public", {
114
+ description?: string | undefined;
115
+ title: string;
116
+ status: "planned" | "in_progress" | "shipped";
117
+ entryId: import("convex/values").GenericId<"entries">;
118
+ actor: {
119
+ isAdmin?: boolean | undefined;
120
+ isModerator?: boolean | undefined;
121
+ id: string;
122
+ };
123
+ }, Promise<import("convex/values").GenericId<"roadmap">>>;
124
+ export declare const detachFeedback: import("convex/server").RegisteredMutation<"public", {
125
+ entryId: import("convex/values").GenericId<"entries">;
126
+ actor: {
127
+ isAdmin?: boolean | undefined;
128
+ isModerator?: boolean | undefined;
129
+ id: string;
130
+ };
131
+ }, Promise<null>>;
132
+ export declare const listFeedback: import("convex/server").RegisteredQuery<"public", {
133
+ viewerActorId?: string | undefined;
134
+ roadmapId: import("convex/values").GenericId<"roadmap">;
135
+ paginationOpts: {
136
+ id?: number;
137
+ endCursor?: string | null;
138
+ maximumRowsRead?: number;
139
+ maximumBytesRead?: number;
140
+ numItems: number;
141
+ cursor: string | null;
142
+ };
143
+ }, Promise<{
144
+ page: {
145
+ updatedAt?: number | undefined;
146
+ metadata?: {
147
+ standard?: Record<string, string | number | boolean> | undefined;
148
+ additional?: Record<string, string | number | boolean> | undefined;
149
+ } | undefined;
150
+ id: string;
151
+ creationTime: number;
152
+ title: string;
153
+ status: "open" | "under_review" | "planned" | "in_progress" | "completed" | "closed";
154
+ actorId: string;
155
+ kind: "feedback" | "feature_request" | "bug_report";
156
+ body: string;
157
+ upvoteCount: number;
158
+ commentCount: number;
159
+ viewerHasUpvoted: boolean;
160
+ }[];
161
+ isDone: boolean;
162
+ continueCursor: import("convex/server").Cursor;
163
+ splitCursor?: import("convex/server").Cursor | null;
164
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
165
+ }>>;
166
+ //# sourceMappingURL=roadmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roadmap.d.ts","sourceRoot":"","sources":["../../src/component/roadmap.ts"],"names":[],"mappings":"AA2HA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;GA2Cf,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;KAcjB,CAAC;AAuBH,eAAO,MAAM,MAAM;;;;;;;;;yDAYjB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;iBAwBjB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;mBAyFf,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;iBA+GzB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;iBAgBjB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;GAkCtB,CAAC;AAEH,eAAO,MAAM,eAAe;;iBAS1B,CAAC;AAsCH,eAAO,MAAM,cAAc;;;;;;;;iBAYzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;yDAezB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;iBAqBzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsBvB,CAAC"}