87 | >(({ className, ...props }, ref) => (
88 | [role=checkbox]]:translate-y-[2px]",
92 | className
93 | )}
94 | {...props}
95 | />
96 | ))
97 | TableCell.displayName = "TableCell"
98 |
99 | const TableCaption = React.forwardRef<
100 | HTMLTableCaptionElement,
101 | React.HTMLAttributes
102 | >(({ className, ...props }, ref) => (
103 |
108 | ))
109 | TableCaption.displayName = "TableCaption"
110 |
111 | export {
112 | Table,
113 | TableHeader,
114 | TableBody,
115 | TableFooter,
116 | TableHead,
117 | TableRow,
118 | TableCell,
119 | TableCaption,
120 | }
121 |
--------------------------------------------------------------------------------
/src/data/data.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | ArrowDown,
3 | ArrowRight,
4 | ArrowUp,
5 | CheckCircle,
6 | Circle,
7 | CircleOff,
8 | HelpCircle,
9 | Timer,
10 | } from "lucide-react";
11 |
12 | export const labels = [
13 | {
14 | value: "bug",
15 | label: "Bug",
16 | },
17 | {
18 | value: "feature",
19 | label: "Feature",
20 | },
21 | {
22 | value: "documentation",
23 | label: "Documentation",
24 | },
25 | ];
26 |
27 | export const statuses = [
28 | {
29 | value: "backlog",
30 | label: "Backlog",
31 | icon: HelpCircle,
32 | },
33 | {
34 | value: "todo",
35 | label: "Todo",
36 | icon: Circle,
37 | },
38 | {
39 | value: "in progress",
40 | label: "In Progress",
41 | icon: Timer,
42 | },
43 | {
44 | value: "done",
45 | label: "Done",
46 | icon: CheckCircle,
47 | },
48 | {
49 | value: "canceled",
50 | label: "Canceled",
51 | icon: CircleOff,
52 | },
53 | ];
54 |
55 | export const priorities = [
56 | {
57 | label: "Low",
58 | value: "low",
59 | icon: ArrowDown,
60 | },
61 | {
62 | label: "Medium",
63 | value: "medium",
64 | icon: ArrowRight,
65 | },
66 | {
67 | label: "High",
68 | value: "high",
69 | icon: ArrowUp,
70 | },
71 | ];
72 |
--------------------------------------------------------------------------------
/src/data/schema.ts:
--------------------------------------------------------------------------------
1 | import { z } from "zod";
2 |
3 | export const taskSchema = z.object({
4 | id: z.string(),
5 | title: z.string(),
6 | status: z.string(),
7 | label: z.string(),
8 | priority: z.string(),
9 | });
10 |
11 | export type Task = z.infer;
12 |
--------------------------------------------------------------------------------
/src/data/seed.ts:
--------------------------------------------------------------------------------
1 | import fs from "fs";
2 | import path from "path";
3 | import { faker } from "@faker-js/faker";
4 |
5 | import { labels, priorities, statuses } from "./data";
6 |
7 | const tasks = Array.from({ length: 100 }, () => ({
8 | id: `TASK-${faker.number.int({ min: 1000, max: 9999 })}`,
9 | title: faker.hacker.phrase().replace(/^./, (letter) => letter.toUpperCase()),
10 | status: faker.helpers.arrayElement(statuses).value,
11 | label: faker.helpers.arrayElement(labels).value,
12 | priority: faker.helpers.arrayElement(priorities).value,
13 | }));
14 |
15 | fs.writeFileSync(
16 | path.join(__dirname, "tasks.json"),
17 | JSON.stringify(tasks, null, 2),
18 | );
19 |
20 | console.log("✅ Tasks data generated.");
21 |
--------------------------------------------------------------------------------
/src/data/tasks.ts:
--------------------------------------------------------------------------------
1 | export const tasks = [
2 | {
3 | id: "TASK-8782",
4 | title:
5 | "You can't compress the program without quantifying the open-source SSD pixel!",
6 | status: "in progress",
7 | label: "documentation",
8 | priority: "medium",
9 | },
10 | {
11 | id: "TASK-7878",
12 | title:
13 | "Try to calculate the EXE feed, maybe it will index the multi-byte pixel!",
14 | status: "backlog",
15 | label: "documentation",
16 | priority: "medium",
17 | },
18 | {
19 | id: "TASK-7839",
20 | title: "We need to bypass the neural TCP card!",
21 | status: "todo",
22 | label: "bug",
23 | priority: "high",
24 | },
25 | {
26 | id: "TASK-5562",
27 | title:
28 | "The SAS interface is down, bypass the open-source pixel so we can back up the PNG bandwidth!",
29 | status: "backlog",
30 | label: "feature",
31 | priority: "medium",
32 | },
33 | {
34 | id: "TASK-8686",
35 | title:
36 | "I'll parse the wireless SSL protocol, that should driver the API panel!",
37 | status: "canceled",
38 | label: "feature",
39 | priority: "medium",
40 | },
41 | {
42 | id: "TASK-1280",
43 | title:
44 | "Use the digital TLS panel, then you can transmit the haptic system!",
45 | status: "done",
46 | label: "bug",
47 | priority: "high",
48 | },
49 | {
50 | id: "TASK-7262",
51 | title:
52 | "The UTF8 application is down, parse the neural bandwidth so we can back up the PNG firewall!",
53 | status: "done",
54 | label: "feature",
55 | priority: "high",
56 | },
57 | {
58 | id: "TASK-1138",
59 | title:
60 | "Generating the driver won't do anything, we need to quantify the 1080p SMTP bandwidth!",
61 | status: "in progress",
62 | label: "feature",
63 | priority: "medium",
64 | },
65 | {
66 | id: "TASK-7184",
67 | title: "We need to program the back-end THX pixel!",
68 | status: "todo",
69 | label: "feature",
70 | priority: "low",
71 | },
72 | {
73 | id: "TASK-5160",
74 | title:
75 | "Calculating the bus won't do anything, we need to navigate the back-end JSON protocol!",
76 | status: "in progress",
77 | label: "documentation",
78 | priority: "high",
79 | },
80 | {
81 | id: "TASK-5618",
82 | title:
83 | "Generating the driver won't do anything, we need to index the online SSL application!",
84 | status: "done",
85 | label: "documentation",
86 | priority: "medium",
87 | },
88 | {
89 | id: "TASK-6699",
90 | title:
91 | "I'll transmit the wireless JBOD capacitor, that should hard drive the SSD feed!",
92 | status: "backlog",
93 | label: "documentation",
94 | priority: "medium",
95 | },
96 | {
97 | id: "TASK-2858",
98 | title: "We need to override the online UDP bus!",
99 | status: "backlog",
100 | label: "bug",
101 | priority: "medium",
102 | },
103 | {
104 | id: "TASK-9864",
105 | title:
106 | "I'll reboot the 1080p FTP panel, that should matrix the HEX hard drive!",
107 | status: "done",
108 | label: "bug",
109 | priority: "high",
110 | },
111 | {
112 | id: "TASK-8404",
113 | title: "We need to generate the virtual HEX alarm!",
114 | status: "in progress",
115 | label: "bug",
116 | priority: "low",
117 | },
118 | {
119 | id: "TASK-5365",
120 | title:
121 | "Backing up the pixel won't do anything, we need to transmit the primary IB array!",
122 | status: "in progress",
123 | label: "documentation",
124 | priority: "low",
125 | },
126 | {
127 | id: "TASK-1780",
128 | title:
129 | "The CSS feed is down, index the bluetooth transmitter so we can compress the CLI protocol!",
130 | status: "todo",
131 | label: "documentation",
132 | priority: "high",
133 | },
134 | {
135 | id: "TASK-6938",
136 | title:
137 | "Use the redundant SCSI application, then you can hack the optical alarm!",
138 | status: "todo",
139 | label: "documentation",
140 | priority: "high",
141 | },
142 | {
143 | id: "TASK-9885",
144 | title: "We need to compress the auxiliary VGA driver!",
145 | status: "backlog",
146 | label: "bug",
147 | priority: "high",
148 | },
149 | {
150 | id: "TASK-3216",
151 | title:
152 | "Transmitting the transmitter won't do anything, we need to compress the virtual HDD sensor!",
153 | status: "backlog",
154 | label: "documentation",
155 | priority: "medium",
156 | },
157 | {
158 | id: "TASK-9285",
159 | title:
160 | "The IP monitor is down, copy the haptic alarm so we can generate the HTTP transmitter!",
161 | status: "todo",
162 | label: "bug",
163 | priority: "high",
164 | },
165 | {
166 | id: "TASK-1024",
167 | title:
168 | "Overriding the microchip won't do anything, we need to transmit the digital OCR transmitter!",
169 | status: "in progress",
170 | label: "documentation",
171 | priority: "low",
172 | },
173 | {
174 | id: "TASK-7068",
175 | title:
176 | "You can't generate the capacitor without indexing the wireless HEX pixel!",
177 | status: "canceled",
178 | label: "bug",
179 | priority: "low",
180 | },
181 | {
182 | id: "TASK-6502",
183 | title:
184 | "Navigating the microchip won't do anything, we need to bypass the back-end SQL bus!",
185 | status: "todo",
186 | label: "bug",
187 | priority: "high",
188 | },
189 | {
190 | id: "TASK-5326",
191 | title: "We need to hack the redundant UTF8 transmitter!",
192 | status: "todo",
193 | label: "bug",
194 | priority: "low",
195 | },
196 | {
197 | id: "TASK-6274",
198 | title:
199 | "Use the virtual PCI circuit, then you can parse the bluetooth alarm!",
200 | status: "canceled",
201 | label: "documentation",
202 | priority: "low",
203 | },
204 | {
205 | id: "TASK-1571",
206 | title:
207 | "I'll input the neural DRAM circuit, that should protocol the SMTP interface!",
208 | status: "in progress",
209 | label: "feature",
210 | priority: "medium",
211 | },
212 | {
213 | id: "TASK-9518",
214 | title:
215 | "Compressing the interface won't do anything, we need to compress the online SDD matrix!",
216 | status: "canceled",
217 | label: "documentation",
218 | priority: "medium",
219 | },
220 | {
221 | id: "TASK-5581",
222 | title:
223 | "I'll synthesize the digital COM pixel, that should transmitter the UTF8 protocol!",
224 | status: "backlog",
225 | label: "documentation",
226 | priority: "high",
227 | },
228 | {
229 | id: "TASK-2197",
230 | title:
231 | "Parsing the feed won't do anything, we need to copy the bluetooth DRAM bus!",
232 | status: "todo",
233 | label: "documentation",
234 | priority: "low",
235 | },
236 | {
237 | id: "TASK-8484",
238 | title: "We need to parse the solid state UDP firewall!",
239 | status: "in progress",
240 | label: "bug",
241 | priority: "low",
242 | },
243 | {
244 | id: "TASK-9892",
245 | title:
246 | "If we back up the application, we can get to the UDP application through the multi-byte THX capacitor!",
247 | status: "done",
248 | label: "documentation",
249 | priority: "high",
250 | },
251 | {
252 | id: "TASK-9616",
253 | title: "We need to synthesize the cross-platform ASCII pixel!",
254 | status: "in progress",
255 | label: "feature",
256 | priority: "medium",
257 | },
258 | {
259 | id: "TASK-9744",
260 | title:
261 | "Use the back-end IP card, then you can input the solid state hard drive!",
262 | status: "done",
263 | label: "documentation",
264 | priority: "low",
265 | },
266 | {
267 | id: "TASK-1376",
268 | title:
269 | "Generating the alarm won't do anything, we need to generate the mobile IP capacitor!",
270 | status: "backlog",
271 | label: "documentation",
272 | priority: "low",
273 | },
274 | {
275 | id: "TASK-7382",
276 | title:
277 | "If we back up the firewall, we can get to the RAM alarm through the primary UTF8 pixel!",
278 | status: "todo",
279 | label: "feature",
280 | priority: "low",
281 | },
282 | {
283 | id: "TASK-2290",
284 | title:
285 | "I'll compress the virtual JSON panel, that should application the UTF8 bus!",
286 | status: "canceled",
287 | label: "documentation",
288 | priority: "high",
289 | },
290 | {
291 | id: "TASK-1533",
292 | title:
293 | "You can't input the firewall without overriding the wireless TCP firewall!",
294 | status: "done",
295 | label: "bug",
296 | priority: "high",
297 | },
298 | {
299 | id: "TASK-4920",
300 | title:
301 | "Bypassing the hard drive won't do anything, we need to input the bluetooth JSON program!",
302 | status: "in progress",
303 | label: "bug",
304 | priority: "high",
305 | },
306 | {
307 | id: "TASK-5168",
308 | title:
309 | "If we synthesize the bus, we can get to the IP panel through the virtual TLS array!",
310 | status: "in progress",
311 | label: "feature",
312 | priority: "low",
313 | },
314 | {
315 | id: "TASK-7103",
316 | title: "We need to parse the multi-byte EXE bandwidth!",
317 | status: "canceled",
318 | label: "feature",
319 | priority: "low",
320 | },
321 | {
322 | id: "TASK-4314",
323 | title:
324 | "If we compress the program, we can get to the XML alarm through the multi-byte COM matrix!",
325 | status: "in progress",
326 | label: "bug",
327 | priority: "high",
328 | },
329 | {
330 | id: "TASK-3415",
331 | title:
332 | "Use the cross-platform XML application, then you can quantify the solid state feed!",
333 | status: "todo",
334 | label: "feature",
335 | priority: "high",
336 | },
337 | {
338 | id: "TASK-8339",
339 | title:
340 | "Try to calculate the DNS interface, maybe it will input the bluetooth capacitor!",
341 | status: "in progress",
342 | label: "feature",
343 | priority: "low",
344 | },
345 | {
346 | id: "TASK-6995",
347 | title:
348 | "Try to hack the XSS bandwidth, maybe it will override the bluetooth matrix!",
349 | status: "todo",
350 | label: "feature",
351 | priority: "high",
352 | },
353 | {
354 | id: "TASK-8053",
355 | title:
356 | "If we connect the program, we can get to the UTF8 matrix through the digital UDP protocol!",
357 | status: "todo",
358 | label: "feature",
359 | priority: "medium",
360 | },
361 | {
362 | id: "TASK-4336",
363 | title:
364 | "If we synthesize the microchip, we can get to the SAS sensor through the optical UDP program!",
365 | status: "todo",
366 | label: "documentation",
367 | priority: "low",
368 | },
369 | {
370 | id: "TASK-8790",
371 | title:
372 | "I'll back up the optical COM alarm, that should alarm the RSS capacitor!",
373 | status: "done",
374 | label: "bug",
375 | priority: "medium",
376 | },
377 | {
378 | id: "TASK-8980",
379 | title:
380 | "Try to navigate the SQL transmitter, maybe it will back up the virtual firewall!",
381 | status: "canceled",
382 | label: "bug",
383 | priority: "low",
384 | },
385 | {
386 | id: "TASK-7342",
387 | title: "Use the neural CLI card, then you can parse the online port!",
388 | status: "backlog",
389 | label: "documentation",
390 | priority: "low",
391 | },
392 | {
393 | id: "TASK-5608",
394 | title:
395 | "I'll hack the haptic SSL program, that should bus the UDP transmitter!",
396 | status: "canceled",
397 | label: "documentation",
398 | priority: "low",
399 | },
400 | {
401 | id: "TASK-1606",
402 | title:
403 | "I'll generate the bluetooth PNG firewall, that should pixel the SSL driver!",
404 | status: "done",
405 | label: "feature",
406 | priority: "medium",
407 | },
408 | {
409 | id: "TASK-7872",
410 | title:
411 | "Transmitting the circuit won't do anything, we need to reboot the 1080p RSS monitor!",
412 | status: "canceled",
413 | label: "feature",
414 | priority: "medium",
415 | },
416 | {
417 | id: "TASK-4167",
418 | title:
419 | "Use the cross-platform SMS circuit, then you can synthesize the optical feed!",
420 | status: "canceled",
421 | label: "bug",
422 | priority: "medium",
423 | },
424 | {
425 | id: "TASK-9581",
426 | title:
427 | "You can't index the port without hacking the cross-platform XSS monitor!",
428 | status: "backlog",
429 | label: "documentation",
430 | priority: "low",
431 | },
432 | {
433 | id: "TASK-8806",
434 | title: "We need to bypass the back-end SSL panel!",
435 | status: "done",
436 | label: "bug",
437 | priority: "medium",
438 | },
439 | {
440 | id: "TASK-6542",
441 | title:
442 | "Try to quantify the RSS firewall, maybe it will quantify the open-source system!",
443 | status: "done",
444 | label: "feature",
445 | priority: "low",
446 | },
447 | {
448 | id: "TASK-6806",
449 | title:
450 | "The VGA protocol is down, reboot the back-end matrix so we can parse the CSS panel!",
451 | status: "canceled",
452 | label: "documentation",
453 | priority: "low",
454 | },
455 | {
456 | id: "TASK-9549",
457 | title: "You can't bypass the bus without connecting the neural JBOD bus!",
458 | status: "todo",
459 | label: "feature",
460 | priority: "high",
461 | },
462 | {
463 | id: "TASK-1075",
464 | title:
465 | "Backing up the driver won't do anything, we need to parse the redundant RAM pixel!",
466 | status: "done",
467 | label: "feature",
468 | priority: "medium",
469 | },
470 | {
471 | id: "TASK-1427",
472 | title:
473 | "Use the auxiliary PCI circuit, then you can calculate the cross-platform interface!",
474 | status: "done",
475 | label: "documentation",
476 | priority: "high",
477 | },
478 | {
479 | id: "TASK-1907",
480 | title:
481 | "Hacking the circuit won't do anything, we need to back up the online DRAM system!",
482 | status: "todo",
483 | label: "documentation",
484 | priority: "high",
485 | },
486 | {
487 | id: "TASK-4309",
488 | title:
489 | "If we generate the system, we can get to the TCP sensor through the optical GB pixel!",
490 | status: "backlog",
491 | label: "bug",
492 | priority: "medium",
493 | },
494 | {
495 | id: "TASK-3973",
496 | title:
497 | "I'll parse the back-end ADP array, that should bandwidth the RSS bandwidth!",
498 | status: "todo",
499 | label: "feature",
500 | priority: "medium",
501 | },
502 | {
503 | id: "TASK-7962",
504 | title:
505 | "Use the wireless RAM program, then you can hack the cross-platform feed!",
506 | status: "canceled",
507 | label: "bug",
508 | priority: "low",
509 | },
510 | {
511 | id: "TASK-3360",
512 | title:
513 | "You can't quantify the program without synthesizing the neural OCR interface!",
514 | status: "done",
515 | label: "feature",
516 | priority: "medium",
517 | },
518 | {
519 | id: "TASK-9887",
520 | title:
521 | "Use the auxiliary ASCII sensor, then you can connect the solid state port!",
522 | status: "backlog",
523 | label: "bug",
524 | priority: "medium",
525 | },
526 | {
527 | id: "TASK-3649",
528 | title:
529 | "I'll input the virtual USB system, that should circuit the DNS monitor!",
530 | status: "in progress",
531 | label: "feature",
532 | priority: "medium",
533 | },
534 | {
535 | id: "TASK-3586",
536 | title:
537 | "If we quantify the circuit, we can get to the CLI feed through the mobile SMS hard drive!",
538 | status: "in progress",
539 | label: "bug",
540 | priority: "low",
541 | },
542 | {
543 | id: "TASK-5150",
544 | title:
545 | "I'll hack the wireless XSS port, that should transmitter the IP interface!",
546 | status: "canceled",
547 | label: "feature",
548 | priority: "medium",
549 | },
550 | {
551 | id: "TASK-3652",
552 | title:
553 | "The SQL interface is down, override the optical bus so we can program the ASCII interface!",
554 | status: "backlog",
555 | label: "feature",
556 | priority: "low",
557 | },
558 | {
559 | id: "TASK-6884",
560 | title:
561 | "Use the digital PCI circuit, then you can synthesize the multi-byte microchip!",
562 | status: "canceled",
563 | label: "feature",
564 | priority: "high",
565 | },
566 | {
567 | id: "TASK-1591",
568 | title: "We need to connect the mobile XSS driver!",
569 | status: "in progress",
570 | label: "feature",
571 | priority: "high",
572 | },
573 | {
574 | id: "TASK-3802",
575 | title:
576 | "Try to override the ASCII protocol, maybe it will parse the virtual matrix!",
577 | status: "in progress",
578 | label: "feature",
579 | priority: "low",
580 | },
581 | {
582 | id: "TASK-7253",
583 | title:
584 | "Programming the capacitor won't do anything, we need to bypass the neural IB hard drive!",
585 | status: "backlog",
586 | label: "bug",
587 | priority: "high",
588 | },
589 | {
590 | id: "TASK-9739",
591 | title: "We need to hack the multi-byte HDD bus!",
592 | status: "done",
593 | label: "documentation",
594 | priority: "medium",
595 | },
596 | {
597 | id: "TASK-4424",
598 | title:
599 | "Try to hack the HEX alarm, maybe it will connect the optical pixel!",
600 | status: "in progress",
601 | label: "documentation",
602 | priority: "medium",
603 | },
604 | {
605 | id: "TASK-3922",
606 | title:
607 | "You can't back up the capacitor without generating the wireless PCI program!",
608 | status: "backlog",
609 | label: "bug",
610 | priority: "low",
611 | },
612 | {
613 | id: "TASK-4921",
614 | title:
615 | "I'll index the open-source IP feed, that should system the GB application!",
616 | status: "canceled",
617 | label: "bug",
618 | priority: "low",
619 | },
620 | {
621 | id: "TASK-5814",
622 | title: "We need to calculate the 1080p AGP feed!",
623 | status: "backlog",
624 | label: "bug",
625 | priority: "high",
626 | },
627 | {
628 | id: "TASK-2645",
629 | title:
630 | "Synthesizing the system won't do anything, we need to navigate the multi-byte HDD firewall!",
631 | status: "todo",
632 | label: "documentation",
633 | priority: "medium",
634 | },
635 | {
636 | id: "TASK-4535",
637 | title:
638 | "Try to copy the JSON circuit, maybe it will connect the wireless feed!",
639 | status: "in progress",
640 | label: "feature",
641 | priority: "low",
642 | },
643 | {
644 | id: "TASK-4463",
645 | title: "We need to copy the solid state AGP monitor!",
646 | status: "done",
647 | label: "documentation",
648 | priority: "low",
649 | },
650 | {
651 | id: "TASK-9745",
652 | title:
653 | "If we connect the protocol, we can get to the GB system through the bluetooth PCI microchip!",
654 | status: "canceled",
655 | label: "feature",
656 | priority: "high",
657 | },
658 | {
659 | id: "TASK-2080",
660 | title:
661 | "If we input the bus, we can get to the RAM matrix through the auxiliary RAM card!",
662 | status: "todo",
663 | label: "bug",
664 | priority: "medium",
665 | },
666 | {
667 | id: "TASK-3838",
668 | title:
669 | "I'll bypass the online TCP application, that should panel the AGP system!",
670 | status: "backlog",
671 | label: "bug",
672 | priority: "high",
673 | },
674 | {
675 | id: "TASK-1340",
676 | title: "We need to navigate the virtual PNG circuit!",
677 | status: "todo",
678 | label: "bug",
679 | priority: "medium",
680 | },
681 | {
682 | id: "TASK-6665",
683 | title:
684 | "If we parse the monitor, we can get to the SSD hard drive through the cross-platform AGP alarm!",
685 | status: "canceled",
686 | label: "feature",
687 | priority: "low",
688 | },
689 | {
690 | id: "TASK-7585",
691 | title:
692 | "If we calculate the hard drive, we can get to the SSL program through the multi-byte CSS microchip!",
693 | status: "backlog",
694 | label: "feature",
695 | priority: "low",
696 | },
697 | {
698 | id: "TASK-6319",
699 | title: "We need to copy the multi-byte SCSI program!",
700 | status: "backlog",
701 | label: "bug",
702 | priority: "high",
703 | },
704 | {
705 | id: "TASK-4369",
706 | title: "Try to input the SCSI bus, maybe it will generate the 1080p pixel!",
707 | status: "backlog",
708 | label: "bug",
709 | priority: "high",
710 | },
711 | {
712 | id: "TASK-9035",
713 | title: "We need to override the solid state PNG array!",
714 | status: "canceled",
715 | label: "documentation",
716 | priority: "low",
717 | },
718 | {
719 | id: "TASK-3970",
720 | title:
721 | "You can't index the transmitter without quantifying the haptic ASCII card!",
722 | status: "todo",
723 | label: "documentation",
724 | priority: "medium",
725 | },
726 | {
727 | id: "TASK-4473",
728 | title:
729 | "You can't bypass the protocol without overriding the neural RSS program!",
730 | status: "todo",
731 | label: "documentation",
732 | priority: "low",
733 | },
734 | {
735 | id: "TASK-4136",
736 | title:
737 | "You can't hack the hard drive without hacking the primary JSON program!",
738 | status: "canceled",
739 | label: "bug",
740 | priority: "medium",
741 | },
742 | {
743 | id: "TASK-3939",
744 | title:
745 | "Use the back-end SQL firewall, then you can connect the neural hard drive!",
746 | status: "done",
747 | label: "feature",
748 | priority: "low",
749 | },
750 | {
751 | id: "TASK-2007",
752 | title:
753 | "I'll input the back-end USB protocol, that should bandwidth the PCI system!",
754 | status: "backlog",
755 | label: "bug",
756 | priority: "high",
757 | },
758 | {
759 | id: "TASK-7516",
760 | title:
761 | "Use the primary SQL program, then you can generate the auxiliary transmitter!",
762 | status: "done",
763 | label: "documentation",
764 | priority: "medium",
765 | },
766 | {
767 | id: "TASK-6906",
768 | title:
769 | "Try to back up the DRAM system, maybe it will reboot the online transmitter!",
770 | status: "done",
771 | label: "feature",
772 | priority: "high",
773 | },
774 | {
775 | id: "TASK-5207",
776 | title:
777 | "The SMS interface is down, copy the bluetooth bus so we can quantify the VGA card!",
778 | status: "in progress",
779 | label: "bug",
780 | priority: "low",
781 | },
782 | ];
783 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 240 10% 3.9%;
9 | --card: 0 0% 100%;
10 | --card-foreground: 240 10% 3.9%;
11 | --popover: 0 0% 100%;
12 | --popover-foreground: 240 10% 3.9%;
13 | --primary: 240 5.9% 10%;
14 | --primary-foreground: 0 0% 98%;
15 | --secondary: 240 4.8% 95.9%;
16 | --secondary-foreground: 240 5.9% 10%;
17 | --muted: 240 4.8% 95.9%;
18 | --muted-foreground: 240 3.8% 46.1%;
19 | --accent: 240 4.8% 95.9%;
20 | --accent-foreground: 240 5.9% 10%;
21 | --destructive: 0 84.2% 60.2%;
22 | --destructive-foreground: 0 0% 98%;
23 | --border: 240 5.9% 90%;
24 | --input: 240 5.9% 90%;
25 | --ring: 240 10% 3.9%;
26 | --chart-1: 12 76% 61%;
27 | --chart-2: 173 58% 39%;
28 | --chart-3: 197 37% 24%;
29 | --chart-4: 43 74% 66%;
30 | --chart-5: 27 87% 67%;
31 | --radius: 0.5rem;
32 | }
33 | .dark {
34 | --background: 240 10% 3.9%;
35 | --foreground: 0 0% 98%;
36 | --card: 240 10% 3.9%;
37 | --card-foreground: 0 0% 98%;
38 | --popover: 240 10% 3.9%;
39 | --popover-foreground: 0 0% 98%;
40 | --primary: 0 0% 98%;
41 | --primary-foreground: 240 5.9% 10%;
42 | --secondary: 240 3.7% 15.9%;
43 | --secondary-foreground: 0 0% 98%;
44 | --muted: 240 3.7% 15.9%;
45 | --muted-foreground: 240 5% 64.9%;
46 | --accent: 240 3.7% 15.9%;
47 | --accent-foreground: 0 0% 98%;
48 | --destructive: 0 62.8% 30.6%;
49 | --destructive-foreground: 0 0% 98%;
50 | --border: 240 3.7% 15.9%;
51 | --input: 240 3.7% 15.9%;
52 | --ring: 240 4.9% 83.9%;
53 | --chart-1: 220 70% 50%;
54 | --chart-2: 160 60% 45%;
55 | --chart-3: 30 80% 55%;
56 | --chart-4: 280 65% 60%;
57 | --chart-5: 340 75% 55%;
58 | }
59 | }
60 |
61 | @layer base {
62 | * {
63 | @apply border-border;
64 | }
65 | body {
66 | @apply bg-background text-foreground;
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { clsx, type ClassValue } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from 'react'
2 | import { createRoot } from 'react-dom/client'
3 | import './index.css'
4 | import App from './App.tsx'
5 |
6 | createRoot(document.getElementById('root')!).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: ["./index.html", "./src/**/*.{ts,tsx,js,jsx}"],
5 | theme: {
6 | extend: {
7 | borderRadius: {
8 | lg: 'var(--radius)',
9 | md: 'calc(var(--radius) - 2px)',
10 | sm: 'calc(var(--radius) - 4px)'
11 | },
12 | colors: {
13 | background: 'hsl(var(--background))',
14 | foreground: 'hsl(var(--foreground))',
15 | card: {
16 | DEFAULT: 'hsl(var(--card))',
17 | foreground: 'hsl(var(--card-foreground))'
18 | },
19 | popover: {
20 | DEFAULT: 'hsl(var(--popover))',
21 | foreground: 'hsl(var(--popover-foreground))'
22 | },
23 | primary: {
24 | DEFAULT: 'hsl(var(--primary))',
25 | foreground: 'hsl(var(--primary-foreground))'
26 | },
27 | secondary: {
28 | DEFAULT: 'hsl(var(--secondary))',
29 | foreground: 'hsl(var(--secondary-foreground))'
30 | },
31 | muted: {
32 | DEFAULT: 'hsl(var(--muted))',
33 | foreground: 'hsl(var(--muted-foreground))'
34 | },
35 | accent: {
36 | DEFAULT: 'hsl(var(--accent))',
37 | foreground: 'hsl(var(--accent-foreground))'
38 | },
39 | destructive: {
40 | DEFAULT: 'hsl(var(--destructive))',
41 | foreground: 'hsl(var(--destructive-foreground))'
42 | },
43 | border: 'hsl(var(--border))',
44 | input: 'hsl(var(--input))',
45 | ring: 'hsl(var(--ring))',
46 | chart: {
47 | '1': 'hsl(var(--chart-1))',
48 | '2': 'hsl(var(--chart-2))',
49 | '3': 'hsl(var(--chart-3))',
50 | '4': 'hsl(var(--chart-4))',
51 | '5': 'hsl(var(--chart-5))'
52 | }
53 | }
54 | }
55 | },
56 | plugins: [require("tailwindcss-animate")],
57 | };
58 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4 | "target": "ES2020",
5 | "useDefineForClassFields": true,
6 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
7 | "module": "ESNext",
8 | "skipLibCheck": true,
9 |
10 | /* Bundler mode */
11 | "moduleResolution": "bundler",
12 | "allowImportingTsExtensions": true,
13 | "isolatedModules": true,
14 | "moduleDetection": "force",
15 | "noEmit": true,
16 | "jsx": "react-jsx",
17 |
18 | /* Linting */
19 | "strict": true,
20 | "noUnusedLocals": true,
21 | "noUnusedParameters": true,
22 | "noFallthroughCasesInSwitch": true,
23 | "noUncheckedSideEffectImports": true
24 | },
25 | "include": ["src"]
26 | }
27 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | {
5 | "path": "./tsconfig.app.json"
6 | },
7 | {
8 | "path": "./tsconfig.node.json"
9 | }
10 | ],
11 | "compilerOptions": {
12 | "baseUrl": ".",
13 | "paths": {
14 | "@/*": ["./src/*"]
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4 | "target": "ES2022",
5 | "lib": ["ES2023"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "isolatedModules": true,
13 | "moduleDetection": "force",
14 | "noEmit": true,
15 |
16 | /* Linting */
17 | "strict": true,
18 | "noUnusedLocals": true,
19 | "noUnusedParameters": true,
20 | "noFallthroughCasesInSwitch": true,
21 | "noUncheckedSideEffectImports": true
22 | },
23 | "include": ["vite.config.ts"]
24 | }
25 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react";
3 | import { defineConfig } from "vite";
4 |
5 | export default defineConfig({
6 | plugins: [react()],
7 | resolve: {
8 | alias: {
9 | "@": path.resolve(__dirname, "./src"),
10 | },
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
|