@drewpayment/mink 0.5.1 → 0.6.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 (126) hide show
  1. package/README.md +35 -0
  2. package/dashboard/out/404.html +1 -1
  3. package/dashboard/out/_next/static/FiL3S_40BA764FL66DRZV/_buildManifest.js +1 -0
  4. package/dashboard/out/_next/static/chunks/189-fe789442321eb5eb.js +1 -0
  5. package/dashboard/out/_next/static/chunks/255-6b79f309a27fb98b.js +1 -0
  6. package/dashboard/out/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +1 -0
  7. package/dashboard/out/_next/static/chunks/738-11c31dcbdbb98d77.js +1 -0
  8. package/dashboard/out/_next/static/chunks/926-6421b9e9b03abc7b.js +1 -0
  9. package/dashboard/out/_next/static/chunks/app/(panels)/action-log/page-1f507b433af52d16.js +1 -0
  10. package/dashboard/out/_next/static/chunks/app/(panels)/activity/page-096a97ba539d5323.js +1 -0
  11. package/dashboard/out/_next/static/chunks/app/(panels)/bugs/page-449d31c133432458.js +1 -0
  12. package/dashboard/out/_next/static/chunks/app/(panels)/capture/page-c6617aa0a8a7333e.js +1 -0
  13. package/dashboard/out/_next/static/chunks/app/(panels)/config/page-aa0a0623b3fdd0d8.js +1 -0
  14. package/dashboard/out/_next/static/chunks/app/(panels)/daemon/page-7cd3fac2f5d87a0d.js +1 -0
  15. package/dashboard/out/_next/static/chunks/app/(panels)/design/page-5304675c96b6793b.js +1 -0
  16. package/dashboard/out/_next/static/chunks/app/(panels)/discord/page-9940dde80ba2a69e.js +1 -0
  17. package/dashboard/out/_next/static/chunks/app/(panels)/file-index/page-ecd8a753614e981e.js +1 -0
  18. package/dashboard/out/_next/static/chunks/app/(panels)/insights/page-7909d8beb8d8ef7a.js +1 -0
  19. package/dashboard/out/_next/static/chunks/app/(panels)/learning/page-b766adc79099adb4.js +1 -0
  20. package/dashboard/out/_next/static/chunks/app/(panels)/overview/page-7a9e86dcde67d6a9.js +1 -0
  21. package/dashboard/out/_next/static/chunks/app/(panels)/scheduler/page-a88f93204c9742a1.js +1 -0
  22. package/dashboard/out/_next/static/chunks/app/(panels)/sync/page-8a9ad4c36aa6cb65.js +1 -0
  23. package/dashboard/out/_next/static/chunks/app/(panels)/tokens/page-8dac7d50d4db2756.js +1 -0
  24. package/dashboard/out/_next/static/chunks/app/(panels)/waste/page-bcf56144faf7d133.js +1 -0
  25. package/dashboard/out/_next/static/chunks/app/(panels)/wiki/page-a32fdbd0bf58b30b.js +1 -0
  26. package/dashboard/out/_next/static/chunks/app/_not-found/page-dc2312ec30d73c4e.js +1 -0
  27. package/dashboard/out/_next/static/chunks/app/layout-782cd26e0ccc4514.js +1 -0
  28. package/dashboard/out/_next/static/chunks/app/page-6aca8457abc5d313.js +1 -0
  29. package/dashboard/out/_next/static/chunks/framework-050c1f32293f7182.js +1 -0
  30. package/dashboard/out/_next/static/chunks/main-app-c2dc0acf542ec1c6.js +1 -0
  31. package/dashboard/out/_next/static/chunks/main-ed79d05490604b83.js +1 -0
  32. package/dashboard/out/_next/static/chunks/pages/_app-7d307437aca18ad4.js +1 -0
  33. package/dashboard/out/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +1 -0
  34. package/dashboard/out/_next/static/chunks/webpack-4e3139a490df1cfe.js +1 -0
  35. package/dashboard/out/_next/static/css/5e43917ea49c5b3e.css +1 -0
  36. package/dashboard/out/_next/static/media/0aa834ed78bf6d07-s.woff2 +0 -0
  37. package/dashboard/out/_next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  38. package/dashboard/out/_next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  39. package/dashboard/out/_next/static/media/67957d42bae0796d-s.woff2 +0 -0
  40. package/dashboard/out/_next/static/media/886030b0b59bc5a7-s.woff2 +0 -0
  41. package/dashboard/out/_next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  42. package/dashboard/out/_next/static/media/939c4f875ee75fbb-s.woff2 +0 -0
  43. package/dashboard/out/_next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  44. package/dashboard/out/_next/static/media/bb3ef058b751a6ad-s.p.woff2 +0 -0
  45. package/dashboard/out/_next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  46. package/dashboard/out/_next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  47. package/dashboard/out/_next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  48. package/dashboard/out/_next/static/media/f911b923c6adde36-s.woff2 +0 -0
  49. package/dashboard/out/action-log.html +1 -1
  50. package/dashboard/out/action-log.txt +23 -22
  51. package/dashboard/out/activity.html +1 -1
  52. package/dashboard/out/activity.txt +23 -22
  53. package/dashboard/out/bugs.html +1 -1
  54. package/dashboard/out/bugs.txt +23 -22
  55. package/dashboard/out/capture.html +1 -0
  56. package/dashboard/out/capture.txt +24 -0
  57. package/dashboard/out/config.html +1 -0
  58. package/dashboard/out/config.txt +24 -0
  59. package/dashboard/out/daemon.html +1 -0
  60. package/dashboard/out/daemon.txt +24 -0
  61. package/dashboard/out/design.html +1 -1
  62. package/dashboard/out/design.txt +23 -22
  63. package/dashboard/out/discord.html +1 -0
  64. package/dashboard/out/discord.txt +24 -0
  65. package/dashboard/out/file-index.html +1 -1
  66. package/dashboard/out/file-index.txt +23 -22
  67. package/dashboard/out/index.html +1 -1
  68. package/dashboard/out/index.txt +23 -22
  69. package/dashboard/out/insights.html +1 -1
  70. package/dashboard/out/insights.txt +23 -22
  71. package/dashboard/out/learning.html +1 -1
  72. package/dashboard/out/learning.txt +23 -22
  73. package/dashboard/out/overview.html +1 -1
  74. package/dashboard/out/overview.txt +23 -22
  75. package/dashboard/out/scheduler.html +1 -1
  76. package/dashboard/out/scheduler.txt +23 -22
  77. package/dashboard/out/sync.html +1 -0
  78. package/dashboard/out/sync.txt +24 -0
  79. package/dashboard/out/tokens.html +1 -1
  80. package/dashboard/out/tokens.txt +23 -22
  81. package/dashboard/out/waste.html +1 -0
  82. package/dashboard/out/waste.txt +24 -0
  83. package/dashboard/out/wiki.html +1 -0
  84. package/dashboard/out/wiki.txt +24 -0
  85. package/dist/cli.js +1705 -892
  86. package/package.json +1 -1
  87. package/src/commands/skill.ts +16 -1
  88. package/src/core/daemon.ts +5 -3
  89. package/src/core/dashboard-api.ts +764 -1
  90. package/src/core/dashboard-server.ts +270 -0
  91. package/src/core/runtime.ts +7 -4
  92. package/src/core/vault.ts +4 -4
  93. package/src/types/config.ts +9 -1
  94. package/src/types/dashboard.ts +84 -1
  95. package/dashboard/out/_next/static/1wsj8DdMTS0IF2Rk9fkxV/_buildManifest.js +0 -1
  96. package/dashboard/out/_next/static/chunks/160-3e240a3c66269b3f.js +0 -1
  97. package/dashboard/out/_next/static/chunks/212-0f603e7affd3ee2a.js +0 -4
  98. package/dashboard/out/_next/static/chunks/255-b047925426c4e4ba.js +0 -1
  99. package/dashboard/out/_next/static/chunks/4bd1b696-409494caf8c83275.js +0 -1
  100. package/dashboard/out/_next/static/chunks/55-079130502e972d37.js +0 -1
  101. package/dashboard/out/_next/static/chunks/692-9c8d44014aa1813d.js +0 -1
  102. package/dashboard/out/_next/static/chunks/717-3d920b69f8c31178.js +0 -1
  103. package/dashboard/out/_next/static/chunks/752-8a8e79b1a2a3b489.js +0 -1
  104. package/dashboard/out/_next/static/chunks/83-ddf005b52ec7bd16.js +0 -1
  105. package/dashboard/out/_next/static/chunks/845-bed7bdd2fed7ff76.js +0 -1
  106. package/dashboard/out/_next/static/chunks/app/(panels)/action-log/page-c52cf3851d9d92d5.js +0 -1
  107. package/dashboard/out/_next/static/chunks/app/(panels)/activity/page-25a84ac9ddbbc077.js +0 -1
  108. package/dashboard/out/_next/static/chunks/app/(panels)/bugs/page-7de0b71150a91377.js +0 -1
  109. package/dashboard/out/_next/static/chunks/app/(panels)/design/page-a2153b4f18533187.js +0 -1
  110. package/dashboard/out/_next/static/chunks/app/(panels)/file-index/page-b37bdd2344d3f81c.js +0 -1
  111. package/dashboard/out/_next/static/chunks/app/(panels)/insights/page-b9cea601167e83d1.js +0 -1
  112. package/dashboard/out/_next/static/chunks/app/(panels)/learning/page-faa4afcf1473c9e5.js +0 -1
  113. package/dashboard/out/_next/static/chunks/app/(panels)/overview/page-354f274bc72789a8.js +0 -1
  114. package/dashboard/out/_next/static/chunks/app/(panels)/scheduler/page-fc11b7fbbd04a4d7.js +0 -1
  115. package/dashboard/out/_next/static/chunks/app/(panels)/tokens/page-c08c102aa883500a.js +0 -1
  116. package/dashboard/out/_next/static/chunks/app/_not-found/page-88217a29323e3700.js +0 -1
  117. package/dashboard/out/_next/static/chunks/app/layout-93083f9f140da937.js +0 -1
  118. package/dashboard/out/_next/static/chunks/app/page-0e7a5cffcfa1d064.js +0 -1
  119. package/dashboard/out/_next/static/chunks/framework-1a308e28e19f1a97.js +0 -1
  120. package/dashboard/out/_next/static/chunks/main-7c6d83fa0f7c5e5b.js +0 -1
  121. package/dashboard/out/_next/static/chunks/main-app-2f83d483d67187ef.js +0 -1
  122. package/dashboard/out/_next/static/chunks/pages/_app-5addca2b3b969fde.js +0 -1
  123. package/dashboard/out/_next/static/chunks/pages/_error-022e4ac7bbb9914f.js +0 -1
  124. package/dashboard/out/_next/static/chunks/webpack-ee71d9ae9be3609d.js +0 -1
  125. package/dashboard/out/_next/static/css/cfd58816f9a2afb9.css +0 -1
  126. /package/dashboard/out/_next/static/{1wsj8DdMTS0IF2Rk9fkxV → FiL3S_40BA764FL66DRZV}/_ssgManifest.js +0 -0
@@ -14,6 +14,25 @@ import {
14
14
  triggerTask,
15
15
  triggerDeadLetterRetry,
16
16
  triggerRescan,
17
+ triggerDaemonStart,
18
+ triggerDaemonStop,
19
+ triggerDaemonRestart,
20
+ loadConfigPanel,
21
+ triggerConfigSet,
22
+ triggerConfigReset,
23
+ loadSyncPanel,
24
+ triggerSyncPull,
25
+ triggerSyncPush,
26
+ triggerSyncDisconnect,
27
+ loadChannelPanel,
28
+ triggerChannelStart,
29
+ triggerChannelStop,
30
+ triggerChannelRestart,
31
+ loadWikiPanel,
32
+ loadWikiNote,
33
+ triggerCreateNote,
34
+ triggerAppendDaily,
35
+ triggerIngestFile,
17
36
  } from "./dashboard-api";
18
37
  import { listRegisteredProjects, getProjectMeta } from "./project-registry";
19
38
  import { generateProjectId } from "./project-id";
@@ -410,6 +429,82 @@ export async function startDashboardServer(
410
429
  return jsonResponse(getProjectsList(cwd, activeCwd));
411
430
  }
412
431
 
432
+ // GET /api/config — global config (no project scoping)
433
+ if (pathname === "/api/config") {
434
+ try {
435
+ return jsonResponse(loadConfigPanel());
436
+ } catch (err) {
437
+ return jsonResponse(
438
+ { error: err instanceof Error ? err.message : String(err) },
439
+ 500,
440
+ );
441
+ }
442
+ }
443
+
444
+ // GET /api/sync — global sync status (no project scoping)
445
+ if (pathname === "/api/sync") {
446
+ try {
447
+ return jsonResponse(loadSyncPanel());
448
+ } catch (err) {
449
+ return jsonResponse(
450
+ { error: err instanceof Error ? err.message : String(err) },
451
+ 500,
452
+ );
453
+ }
454
+ }
455
+
456
+ // GET /api/channel — global channel status + logs (no project scoping)
457
+ if (pathname === "/api/channel") {
458
+ try {
459
+ return jsonResponse(loadChannelPanel());
460
+ } catch (err) {
461
+ return jsonResponse(
462
+ { error: err instanceof Error ? err.message : String(err) },
463
+ 500,
464
+ );
465
+ }
466
+ }
467
+
468
+ // GET /api/wiki — global wiki vault summary (no project scoping)
469
+ if (pathname === "/api/wiki") {
470
+ try {
471
+ const limitRaw = url.searchParams.get("limit");
472
+ const categoryRaw = url.searchParams.get("category");
473
+ const limit = limitRaw ? Number(limitRaw) : undefined;
474
+ return jsonResponse(
475
+ loadWikiPanel({
476
+ limit: Number.isFinite(limit) ? limit : undefined,
477
+ category: (categoryRaw as "all" | undefined) ?? undefined,
478
+ }),
479
+ );
480
+ } catch (err) {
481
+ return jsonResponse(
482
+ { error: err instanceof Error ? err.message : String(err) },
483
+ 500,
484
+ );
485
+ }
486
+ }
487
+
488
+ // GET /api/wiki/note — single note body with backlinks
489
+ if (pathname === "/api/wiki/note") {
490
+ try {
491
+ const notePath = url.searchParams.get("path");
492
+ if (!notePath) {
493
+ return jsonResponse({ error: "Missing path parameter" }, 400);
494
+ }
495
+ const note = loadWikiNote(notePath);
496
+ if (!note) {
497
+ return jsonResponse({ error: "Note not found" }, 404);
498
+ }
499
+ return jsonResponse(note);
500
+ } catch (err) {
501
+ return jsonResponse(
502
+ { error: err instanceof Error ? err.message : String(err) },
503
+ 500,
504
+ );
505
+ }
506
+ }
507
+
413
508
  // Resolve project cwd from ?project=<id> query param
414
509
  const resolvedCwd = resolveProjectCwd(url, activeCwd);
415
510
  if (resolvedCwd === null) {
@@ -492,6 +587,181 @@ export async function startDashboardServer(
492
587
  }
493
588
  }
494
589
 
590
+ // POST /api/config/set — write a config value
591
+ if (pathname === "/api/config/set") {
592
+ try {
593
+ const body = (await req.json()) as {
594
+ key?: string;
595
+ value?: string;
596
+ };
597
+ if (!body.key || typeof body.value !== "string") {
598
+ return jsonResponse(
599
+ { success: false, error: "Missing key or value" },
600
+ 400,
601
+ );
602
+ }
603
+ const result = await triggerConfigSet(body.key, body.value);
604
+ if (result.success) {
605
+ sseManager.broadcast({
606
+ fileId: "config-changed" as StateFileId,
607
+ timestamp: new Date().toISOString(),
608
+ });
609
+ }
610
+ return jsonResponse(result, result.success ? 200 : 500);
611
+ } catch (err) {
612
+ return jsonResponse(
613
+ { success: false, error: err instanceof Error ? err.message : String(err) },
614
+ 500,
615
+ );
616
+ }
617
+ }
618
+
619
+ // POST /api/config/reset — clear one key (or all)
620
+ if (pathname === "/api/config/reset") {
621
+ try {
622
+ const body = (await req.json()) as { key?: string; all?: boolean };
623
+ const result = await triggerConfigReset(body.key, body.all);
624
+ if (result.success) {
625
+ sseManager.broadcast({
626
+ fileId: "config-changed" as StateFileId,
627
+ timestamp: new Date().toISOString(),
628
+ });
629
+ }
630
+ return jsonResponse(result, result.success ? 200 : 500);
631
+ } catch (err) {
632
+ return jsonResponse(
633
+ { success: false, error: err instanceof Error ? err.message : String(err) },
634
+ 500,
635
+ );
636
+ }
637
+ }
638
+
639
+ // Wiki writes — global (single user-level vault).
640
+ if (
641
+ pathname === "/api/wiki/notes" ||
642
+ pathname === "/api/wiki/daily" ||
643
+ pathname === "/api/wiki/ingest"
644
+ ) {
645
+ const dedupKey = req.headers.get("X-Mink-Dedup-Key") ?? undefined;
646
+ try {
647
+ const body = (await req.json()) as Record<string, unknown>;
648
+
649
+ let action: Promise<
650
+ { success: boolean; error?: string; filePath?: string }
651
+ >;
652
+
653
+ if (pathname === "/api/wiki/notes") {
654
+ const mode = body.mode === "structured" ? "structured" : "quick";
655
+ action = triggerCreateNote({
656
+ mode,
657
+ title: typeof body.title === "string" ? body.title : undefined,
658
+ category: typeof body.category === "string" ? body.category : undefined,
659
+ body: typeof body.body === "string" ? body.body : "",
660
+ tags: Array.isArray(body.tags) ? (body.tags as string[]) : undefined,
661
+ dedupKey,
662
+ });
663
+ } else if (pathname === "/api/wiki/daily") {
664
+ action = triggerAppendDaily(
665
+ typeof body.content === "string" ? body.content : "",
666
+ dedupKey,
667
+ );
668
+ } else {
669
+ action = triggerIngestFile(
670
+ typeof body.sourcePath === "string" ? body.sourcePath : "",
671
+ typeof body.category === "string" ? body.category : "inbox",
672
+ Array.isArray(body.tags) ? (body.tags as string[]) : undefined,
673
+ dedupKey,
674
+ );
675
+ }
676
+
677
+ return action.then((result) => {
678
+ if (result.success) {
679
+ sseManager.broadcast({
680
+ fileId: "vault-index" as StateFileId,
681
+ timestamp: new Date().toISOString(),
682
+ });
683
+ }
684
+ return jsonResponse(result, result.success ? 200 : 500);
685
+ });
686
+ } catch (err) {
687
+ return jsonResponse(
688
+ { success: false, error: err instanceof Error ? err.message : String(err) },
689
+ 500,
690
+ );
691
+ }
692
+ }
693
+
694
+ // Channel controls — global (screen session is per-vault, not per-project).
695
+ if (
696
+ pathname === "/api/channel/start" ||
697
+ pathname === "/api/channel/stop" ||
698
+ pathname === "/api/channel/restart"
699
+ ) {
700
+ const action =
701
+ pathname === "/api/channel/start"
702
+ ? triggerChannelStart()
703
+ : pathname === "/api/channel/stop"
704
+ ? triggerChannelStop()
705
+ : triggerChannelRestart();
706
+ return action.then((result) => {
707
+ if (result.success) {
708
+ sseManager.broadcast({
709
+ fileId: "channel-status" as StateFileId,
710
+ timestamp: new Date().toISOString(),
711
+ });
712
+ }
713
+ return jsonResponse(result, result.success ? 200 : 500);
714
+ });
715
+ }
716
+
717
+ // Sync controls — global (operate on ~/.mink/.git, not a project).
718
+ if (
719
+ pathname === "/api/sync/pull" ||
720
+ pathname === "/api/sync/push" ||
721
+ pathname === "/api/sync/disconnect"
722
+ ) {
723
+ const action =
724
+ pathname === "/api/sync/pull"
725
+ ? triggerSyncPull()
726
+ : pathname === "/api/sync/push"
727
+ ? triggerSyncPush()
728
+ : triggerSyncDisconnect();
729
+ return action.then((result) => {
730
+ if (result.success) {
731
+ sseManager.broadcast({
732
+ fileId: "sync-status" as StateFileId,
733
+ timestamp: new Date().toISOString(),
734
+ });
735
+ }
736
+ return jsonResponse(result, result.success ? 200 : 500);
737
+ });
738
+ }
739
+
740
+ // Daemon controls — global (operate on ~/.mink/ PID file, not a
741
+ // project state directory). Use activeCwd so the spawned daemon
742
+ // inherits the currently-active project.
743
+ if (
744
+ pathname === "/api/daemon/start" ||
745
+ pathname === "/api/daemon/stop" ||
746
+ pathname === "/api/daemon/restart"
747
+ ) {
748
+ const action =
749
+ pathname === "/api/daemon/start"
750
+ ? triggerDaemonStart(activeCwd)
751
+ : pathname === "/api/daemon/stop"
752
+ ? triggerDaemonStop()
753
+ : triggerDaemonRestart(activeCwd);
754
+ return action.then((result) => {
755
+ if (result.success) {
756
+ sseManager.broadcast({
757
+ fileId: "daemon-status" as StateFileId,
758
+ timestamp: new Date().toISOString(),
759
+ });
760
+ }
761
+ return jsonResponse(result, result.success ? 200 : 500);
762
+ });
763
+ }
764
+
495
765
  // Resolve project cwd for POST actions
496
766
  const resolvedCwd = resolveProjectCwd(url, activeCwd);
497
767
  if (resolvedCwd === null) {
@@ -46,15 +46,18 @@ export function runtimeFile(path: string): RuntimeFile {
46
46
 
47
47
  // ── Spawn helper ──────────────────────────────────────────────────────────
48
48
 
49
+ export type SpawnStdio = "ignore" | "pipe" | number;
50
+
49
51
  export interface SpawnOptions {
50
52
  cwd?: string;
51
53
  env?: Record<string, string | undefined>;
52
- stdout?: "ignore" | "pipe";
53
- stderr?: "ignore" | "pipe";
54
+ stdout?: SpawnStdio;
55
+ stderr?: SpawnStdio;
54
56
  stdin?: "ignore";
55
57
  }
56
58
 
57
59
  export interface SpawnedProcess {
60
+ pid: number;
58
61
  unref(): void;
59
62
  }
60
63
 
@@ -74,7 +77,7 @@ export function runtimeSpawn(
74
77
  stderr: opts.stderr ?? "ignore",
75
78
  stdin: opts.stdin ?? "ignore",
76
79
  });
77
- return { unref: () => proc.unref() };
80
+ return { pid: proc.pid, unref: () => proc.unref() };
78
81
  }
79
82
 
80
83
  const [bin, ...args] = cmd;
@@ -89,7 +92,7 @@ export function runtimeSpawn(
89
92
  detached: true,
90
93
  });
91
94
  proc.unref();
92
- return { unref: () => {} };
95
+ return { pid: proc.pid ?? -1, unref: () => {} };
93
96
  }
94
97
 
95
98
  // ── HTTP Server ───────────────────────────────────────────────────────────
package/src/core/vault.ts CHANGED
@@ -11,10 +11,10 @@ const DEFAULT_VAULT_PATH = join(homedir(), ".mink", "wiki");
11
11
  export function resolveVaultPath(): string {
12
12
  const resolved = resolveConfigValue("wiki.path");
13
13
  const raw = resolved.value;
14
- if (raw.startsWith("~/")) {
15
- return join(homedir(), raw.slice(2));
16
- }
17
- return raw;
14
+ // Normalize via path.resolve so downstream `slice(root.length + 1)` callers
15
+ // aren't fooled by a trailing slash (e.g. the default "~/.mink/wiki/").
16
+ const expanded = raw.startsWith("~/") ? join(homedir(), raw.slice(2)) : raw;
17
+ return resolve(expanded);
18
18
  }
19
19
 
20
20
  export function vaultRoot(): string {
@@ -11,6 +11,7 @@ export interface GlobalConfig {
11
11
  "sync.last-pull"?: string;
12
12
  "channel.discord.bot-token"?: string;
13
13
  "channel.discord.enabled"?: string;
14
+ "channel.discord.allowlist"?: string;
14
15
  "channel.default-platform"?: string;
15
16
  "channel.skip-permissions"?: string;
16
17
  }
@@ -42,7 +43,7 @@ export interface DeviceRegistry {
42
43
  export const CONFIG_KEYS: ConfigKeyMeta[] = [
43
44
  {
44
45
  key: "wiki.path",
45
- default: "~/.mink/wiki/",
46
+ default: "~/.mink/wiki",
46
47
  envVar: "MINK_WIKI_PATH",
47
48
  description: "Wiki vault location",
48
49
  scope: "local",
@@ -124,6 +125,13 @@ export const CONFIG_KEYS: ConfigKeyMeta[] = [
124
125
  description: "Auto-start Discord channel when daemon starts",
125
126
  scope: "local",
126
127
  },
128
+ {
129
+ key: "channel.discord.allowlist",
130
+ default: "",
131
+ envVar: "MINK_CHANNEL_DISCORD_ALLOWLIST",
132
+ description: "Comma-separated list of Discord user IDs permitted to DM the bot",
133
+ scope: "local",
134
+ },
127
135
  {
128
136
  key: "channel.default-platform",
129
137
  default: "discord",
@@ -5,6 +5,7 @@ import type { BugEntry } from "./bug-memory";
5
5
  import type { LearningMemory } from "./learning-memory";
6
6
  import type { ParsedSession } from "./action-log";
7
7
  import type { TaskDefinition, TaskRunRecord, DeadLetterEntry } from "./scheduler";
8
+ import type { VaultIndexEntry } from "./note";
8
9
 
9
10
  // ── State File Identifiers ─────────────────────────────────────────────────
10
11
 
@@ -18,7 +19,13 @@ export type StateFileId =
18
19
  | "session"
19
20
  | "project-meta"
20
21
  | "design-report"
21
- | "project-switched";
22
+ | "project-switched"
23
+ | "daemon-status"
24
+ | "config-changed"
25
+ | "sync-status"
26
+ | "channel-status"
27
+ | "channel-logs"
28
+ | "vault-index";
22
29
 
23
30
  // ── SSE Event ──────────────────────────────────────────────────────────────
24
31
 
@@ -102,3 +109,79 @@ export interface DesignImagePayload {
102
109
  export interface DesignPayload {
103
110
  images: DesignImagePayload[];
104
111
  }
112
+
113
+ export type ConfigValueSource = "default" | "shared" | "local" | "env";
114
+ export type ConfigValueType = "string" | "boolean" | "number";
115
+
116
+ export interface ConfigEntry {
117
+ key: string;
118
+ value: string;
119
+ source: ConfigValueSource;
120
+ type: ConfigValueType;
121
+ group: string;
122
+ scope: "shared" | "local";
123
+ description: string;
124
+ isSecret: boolean;
125
+ }
126
+
127
+ export interface ConfigPanelPayload {
128
+ entries: ConfigEntry[];
129
+ }
130
+
131
+ export interface SyncPendingChange {
132
+ op: "A" | "M" | "D" | "?";
133
+ file: string;
134
+ }
135
+
136
+ export interface SyncPanelPayload {
137
+ initialized: boolean;
138
+ enabled: boolean;
139
+ branch: string;
140
+ remote: string;
141
+ ahead: number;
142
+ behind: number;
143
+ lastPush: string;
144
+ lastPull: string;
145
+ pending: SyncPendingChange[];
146
+ }
147
+
148
+ export interface ChannelLogLine {
149
+ t: string;
150
+ m: string;
151
+ }
152
+
153
+ export interface ChannelPanelPayload {
154
+ status: "running" | "stopped";
155
+ platform: "discord" | "telegram" | null;
156
+ session: string;
157
+ startedAt: string;
158
+ uptimeSec: number;
159
+ autoStart: boolean;
160
+ tokenMasked: string;
161
+ allowlist: string[];
162
+ logs: ChannelLogLine[];
163
+ }
164
+
165
+ export interface WikiTreeNode {
166
+ name: string;
167
+ path: string;
168
+ count: number;
169
+ depth: number;
170
+ }
171
+
172
+ export interface WikiPanelPayload {
173
+ initialized: boolean;
174
+ vaultPath: string;
175
+ totalNotes: number;
176
+ inboxCount: number;
177
+ recent: VaultIndexEntry[];
178
+ tags: Array<[string, number]>;
179
+ tree: WikiTreeNode[];
180
+ }
181
+
182
+ export interface WikiNotePayload {
183
+ path: string;
184
+ frontmatter: Record<string, unknown>;
185
+ body: string;
186
+ backlinks: Array<{ path: string; title: string }>;
187
+ }
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST=function(e,r,t,s){return{__rewrites:{afterFiles:[{has:t,source:"/api/:path*",destination:t}],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:12,errorRate:1e-4,numBits:231,numHashes:14,bitArray:[1,1,0,e,0,e,e,r,r,e,r,e,r,r,r,r,e,r,r,r,r,r,e,r,e,e,r,e,e,r,r,r,e,r,e,r,r,e,r,e,e,e,e,e,e,e,e,e,e,e,e,r,e,r,r,e,r,r,e,e,r,r,r,r,r,r,e,e,e,e,e,e,r,r,e,r,e,e,e,e,r,e,e,r,r,r,e,r,e,r,e,r,r,e,e,e,r,e,e,e,r,r,r,e,r,e,r,r,e,r,r,e,e,r,r,e,e,e,e,e,r,r,r,r,r,r,r,e,r,e,r,e,r,r,e,r,r,e,e,e,e,e,e,e,e,e,e,r,e,r,r,r,r,r,e,e,r,e,e,e,r,e,e,e,r,e,e,e,e,r,e,e,e,e,e,r,r,e,e,e,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,r,r,r,r,e,e,r,r,e,e,r,r,e,e,e,r,e,e,r,r,e,e,e,r,r,r,r,r,r,r,r,e,r,r,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-022e4ac7bbb9914f.js"],sortedPages:["/_app","/_error"]}}(1,0,void 0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[160],{2821:(e,r,o)=>{o.d(r,{$:()=>t});function t(){for(var e,r,o=0,t="",l=arguments.length;o<l;o++)(e=arguments[o])&&(r=function e(r){var o,t,l="";if("string"==typeof r||"number"==typeof r)l+=r;else if("object"==typeof r)if(Array.isArray(r)){var n=r.length;for(o=0;o<n;o++)r[o]&&(t=e(r[o]))&&(l&&(l+=" "),l+=t)}else for(t in r)r[t]&&(l&&(l+=" "),l+=t);return l}(e))&&(t&&(t+=" "),t+=r);return t}},25959:(e,r,o)=>{o.d(r,{v:()=>a});var t=o(12115);let l=e=>{let r,o=new Set,t=(e,t)=>{let l="function"==typeof e?e(r):e;if(!Object.is(l,r)){let e=r;r=(null!=t?t:"object"!=typeof l||null===l)?l:Object.assign({},r,l),o.forEach(o=>o(r,e))}},l=()=>r,n={setState:t,getState:l,getInitialState:()=>a,subscribe:e=>(o.add(e),()=>o.delete(e))},a=r=e(t,l,n);return n},n=e=>{let r=(e=>e?l(e):l)(e),o=e=>(function(e,r=e=>e){let o=t.useSyncExternalStore(e.subscribe,t.useCallback(()=>r(e.getState()),[e,r]),t.useCallback(()=>r(e.getInitialState()),[e,r]));return t.useDebugValue(o),o})(r,e);return Object.assign(o,r),o},a=e=>e?n(e):n},70814:(e,r,o)=>{o.d(r,{A:()=>d});var t=o(12115);let l=function(){for(var e=arguments.length,r=Array(e),o=0;o<e;o++)r[o]=arguments[o];return r.filter((e,r,o)=>!!e&&""!==e.trim()&&o.indexOf(e)===r).join(" ").trim()},n=e=>{let r=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,r,o)=>o?o.toUpperCase():r.toLowerCase());return r.charAt(0).toUpperCase()+r.slice(1)};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let s=(0,t.createContext)({}),i=(0,t.forwardRef)((e,r)=>{var o,n,i;let{color:d,size:c,strokeWidth:m,absoluteStrokeWidth:p,className:b="",children:u,iconNode:f,...g}=e,{size:h=24,strokeWidth:k=2,absoluteStrokeWidth:w=!1,color:x="currentColor",className:v=""}=null!=(o=(0,t.useContext)(s))?o:{},y=(null!=p?p:w)?24*Number(null!=m?m:k)/Number(null!=c?c:h):null!=m?m:k;return(0,t.createElement)("svg",{ref:r,...a,width:null!=(n=null!=c?c:h)?n:a.width,height:null!=(i=null!=c?c:h)?i:a.height,stroke:null!=d?d:x,strokeWidth:y,className:l("lucide",v,b),...!u&&!(e=>{for(let r in e)if(r.startsWith("aria-")||"role"===r||"title"===r)return!0;return!1})(g)&&{"aria-hidden":"true"},...g},[...f.map(e=>{let[r,o]=e;return(0,t.createElement)(r,o)}),...Array.isArray(u)?u:[u]])}),d=(e,r)=>{let o=(0,t.forwardRef)((o,a)=>{let{className:s,...d}=o;return(0,t.createElement)(i,{ref:a,iconNode:r,className:l("lucide-".concat(n(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...d})});return o.displayName=n(e),o}},75889:(e,r,o)=>{o.d(r,{QP:()=>ep});let t=(e=new Map,r=null,o)=>({nextPart:e,validators:r,classGroupId:o}),l=[],n=(e,r,o)=>{if(0==e.length-r)return o.classGroupId;let t=e[r],l=o.nextPart.get(t);if(l){let o=n(e,r+1,l);if(o)return o}let a=o.validators;if(null===a)return;let s=0===r?e.join("-"):e.slice(r).join("-"),i=a.length;for(let e=0;e<i;e++){let r=a[e];if(r.validator(s))return r.classGroupId}},a=(e,r)=>{let o=t();for(let t in e)s(e[t],o,t,r);return o},s=(e,r,o,t)=>{let l=e.length;for(let n=0;n<l;n++)i(e[n],r,o,t)},i=(e,r,o,t)=>"string"==typeof e?void d(e,r,o):"function"==typeof e?void c(e,r,o,t):void m(e,r,o,t),d=(e,r,o)=>{(""===e?r:p(r,e)).classGroupId=o},c=(e,r,o,t)=>{if(b(e))return void s(e(t),r,o,t);null===r.validators&&(r.validators=[]),r.validators.push({classGroupId:o,validator:e})},m=(e,r,o,t)=>{let l=Object.entries(e),n=l.length;for(let e=0;e<n;e++){let[n,a]=l[e];s(a,p(r,n),o,t)}},p=(e,r)=>{let o=e,l=r.split("-"),n=l.length;for(let e=0;e<n;e++){let r=l[e],n=o.nextPart.get(r);n||(n=t(),o.nextPart.set(r,n)),o=n}return o},b=e=>"isThemeGetter"in e&&!0===e.isThemeGetter,u=[],f=(e,r,o,t,l)=>({modifiers:e,hasImportantModifier:r,baseClassName:o,maybePostfixModifierPosition:t,isExternal:l}),g=/\s+/,h=e=>{let r;if("string"==typeof e)return e;let o="";for(let t=0;t<e.length;t++)e[t]&&(r=h(e[t]))&&(o&&(o+=" "),o+=r);return o},k=[],w=e=>{let r=r=>r[e]||k;return r.isThemeGetter=!0,r},x=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,v=/^\((?:(\w[\w-]*):)?(.+)\)$/i,y=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,z=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,j=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,C=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,N=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,S=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,G=e=>y.test(e),O=e=>!!e&&!Number.isNaN(Number(e)),W=e=>!!e&&Number.isInteger(Number(e)),A=e=>e.endsWith("%")&&O(e.slice(0,-1)),$=e=>z.test(e),I=()=>!0,E=e=>j.test(e)&&!C.test(e),_=()=>!1,M=e=>N.test(e),L=e=>S.test(e),P=e=>!q(e)&&!F(e),T=e=>eo(e,ea,_),q=e=>x.test(e),R=e=>eo(e,es,E),U=e=>eo(e,ei,O),Z=e=>eo(e,ec,I),B=e=>eo(e,ed,_),D=e=>eo(e,el,_),Q=e=>eo(e,en,L),V=e=>eo(e,em,M),F=e=>v.test(e),H=e=>et(e,es),J=e=>et(e,ed),K=e=>et(e,el),X=e=>et(e,ea),Y=e=>et(e,en),ee=e=>et(e,em,!0),er=e=>et(e,ec,!0),eo=(e,r,o)=>{let t=x.exec(e);return!!t&&(t[1]?r(t[1]):o(t[2]))},et=(e,r,o=!1)=>{let t=v.exec(e);return!!t&&(t[1]?r(t[1]):o)},el=e=>"position"===e||"percentage"===e,en=e=>"image"===e||"url"===e,ea=e=>"length"===e||"size"===e||"bg-size"===e,es=e=>"length"===e,ei=e=>"number"===e,ed=e=>"family-name"===e,ec=e=>"number"===e||"weight"===e,em=e=>"shadow"===e;Symbol.toStringTag;let ep=((e,...r)=>{let o,t,s,i,d=e=>{let r=t(e);if(r)return r;let l=((e,r)=>{let{parseClassName:o,getClassGroupId:t,getConflictingClassGroupIds:l,sortModifiers:n}=r,a=[],s=e.trim().split(g),i="";for(let e=s.length-1;e>=0;e-=1){let r=s[e],{isExternal:d,modifiers:c,hasImportantModifier:m,baseClassName:p,maybePostfixModifierPosition:b}=o(r);if(d){i=r+(i.length>0?" "+i:i);continue}let u=!!b,f=t(u?p.substring(0,b):p);if(!f){if(!u||!(f=t(p))){i=r+(i.length>0?" "+i:i);continue}u=!1}let g=0===c.length?"":1===c.length?c[0]:n(c).join(":"),h=m?g+"!":g,k=h+f;if(a.indexOf(k)>-1)continue;a.push(k);let w=l(f,u);for(let e=0;e<w.length;++e){let r=w[e];a.push(h+r)}i=r+(i.length>0?" "+i:i)}return i})(e,o);return s(e,l),l};return i=c=>(t=(o=(e=>({cache:(e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let r=0,o=Object.create(null),t=Object.create(null),l=(l,n)=>{o[l]=n,++r>e&&(r=0,t=o,o=Object.create(null))};return{get(e){let r=o[e];return void 0!==r?r:void 0!==(r=t[e])?(l(e,r),r):void 0},set(e,r){e in o?o[e]=r:l(e,r)}}})(e.cacheSize),parseClassName:(e=>{let{prefix:r,experimentalParseClassName:o}=e,t=e=>{let r,o=[],t=0,l=0,n=0,a=e.length;for(let s=0;s<a;s++){let a=e[s];if(0===t&&0===l){if(":"===a){o.push(e.slice(n,s)),n=s+1;continue}if("/"===a){r=s;continue}}"["===a?t++:"]"===a?t--:"("===a?l++:")"===a&&l--}let s=0===o.length?e:e.slice(n),i=s,d=!1;return s.endsWith("!")?(i=s.slice(0,-1),d=!0):s.startsWith("!")&&(i=s.slice(1),d=!0),f(o,d,i,r&&r>n?r-n:void 0)};if(r){let e=r+":",o=t;t=r=>r.startsWith(e)?o(r.slice(e.length)):f(u,!1,r,void 0,!0)}if(o){let e=t;t=r=>o({className:r,parseClassName:e})}return t})(e),sortModifiers:(e=>{let r=new Map;return e.orderSensitiveModifiers.forEach((e,o)=>{r.set(e,1e6+o)}),e=>{let o=[],t=[];for(let l=0;l<e.length;l++){let n=e[l],a="["===n[0],s=r.has(n);a||s?(t.length>0&&(t.sort(),o.push(...t),t=[]),o.push(n)):t.push(n)}return t.length>0&&(t.sort(),o.push(...t)),o}})(e),...(e=>{let r=(e=>{let{theme:r,classGroups:o}=e;return a(o,r)})(e),{conflictingClassGroups:o,conflictingClassGroupModifiers:t}=e;return{getClassGroupId:e=>{if(e.startsWith("[")&&e.endsWith("]"))return(e=>-1===e.slice(1,-1).indexOf(":")?void 0:(()=>{let r=e.slice(1,-1),o=r.indexOf(":"),t=r.slice(0,o);return t?"arbitrary.."+t:void 0})())(e);let o=e.split("-"),t=+(""===o[0]&&o.length>1);return n(o,t,r)},getConflictingClassGroupIds:(e,r)=>{if(r){let r=t[e],n=o[e];return r?n?((e,r)=>{let o=Array(e.length+r.length);for(let r=0;r<e.length;r++)o[r]=e[r];for(let t=0;t<r.length;t++)o[e.length+t]=r[t];return o})(n,r):r:n||l}return o[e]||l}}})(e)}))(r.reduce((e,r)=>r(e),e()))).cache.get,s=o.cache.set,i=d,d(c)),(...e)=>i(((...e)=>{let r,o,t=0,l="";for(;t<e.length;)(r=e[t++])&&(o=h(r))&&(l&&(l+=" "),l+=o);return l})(...e))})(()=>{let e=w("color"),r=w("font"),o=w("text"),t=w("font-weight"),l=w("tracking"),n=w("leading"),a=w("breakpoint"),s=w("container"),i=w("spacing"),d=w("radius"),c=w("shadow"),m=w("inset-shadow"),p=w("text-shadow"),b=w("drop-shadow"),u=w("blur"),f=w("perspective"),g=w("aspect"),h=w("ease"),k=w("animate"),x=()=>["auto","avoid","all","avoid-page","page","left","right","column"],v=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],y=()=>[...v(),F,q],z=()=>["auto","hidden","clip","visible","scroll"],j=()=>["auto","contain","none"],C=()=>[F,q,i],N=()=>[G,"full","auto",...C()],S=()=>[W,"none","subgrid",F,q],E=()=>["auto",{span:["full",W,F,q]},W,F,q],_=()=>[W,"auto",F,q],M=()=>["auto","min","max","fr",F,q],L=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],eo=()=>["start","end","center","stretch","center-safe","end-safe"],et=()=>["auto",...C()],el=()=>[G,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...C()],en=()=>[G,"screen","full","dvw","lvw","svw","min","max","fit",...C()],ea=()=>[G,"screen","full","lh","dvh","lvh","svh","min","max","fit",...C()],es=()=>[e,F,q],ei=()=>[...v(),K,D,{position:[F,q]}],ed=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ec=()=>["auto","cover","contain",X,T,{size:[F,q]}],em=()=>[A,H,R],ep=()=>["","none","full",d,F,q],eb=()=>["",O,H,R],eu=()=>["solid","dashed","dotted","double"],ef=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],eg=()=>[O,A,K,D],eh=()=>["","none",u,F,q],ek=()=>["none",O,F,q],ew=()=>["none",O,F,q],ex=()=>[O,F,q],ev=()=>[G,"full",...C()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[$],breakpoint:[$],color:[I],container:[$],"drop-shadow":[$],ease:["in","out","in-out"],font:[P],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[$],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[$],shadow:[$],spacing:["px",O],text:[$],"text-shadow":[$],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",G,q,F,g]}],container:["container"],columns:[{columns:[O,q,F,s]}],"break-after":[{"break-after":x()}],"break-before":[{"break-before":x()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:y()}],overflow:[{overflow:z()}],"overflow-x":[{"overflow-x":z()}],"overflow-y":[{"overflow-y":z()}],overscroll:[{overscroll:j()}],"overscroll-x":[{"overscroll-x":j()}],"overscroll-y":[{"overscroll-y":j()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:N()}],"inset-x":[{"inset-x":N()}],"inset-y":[{"inset-y":N()}],start:[{"inset-s":N(),start:N()}],end:[{"inset-e":N(),end:N()}],"inset-bs":[{"inset-bs":N()}],"inset-be":[{"inset-be":N()}],top:[{top:N()}],right:[{right:N()}],bottom:[{bottom:N()}],left:[{left:N()}],visibility:["visible","invisible","collapse"],z:[{z:[W,"auto",F,q]}],basis:[{basis:[G,"full","auto",s,...C()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[O,G,"auto","initial","none",q]}],grow:[{grow:["",O,F,q]}],shrink:[{shrink:["",O,F,q]}],order:[{order:[W,"first","last","none",F,q]}],"grid-cols":[{"grid-cols":S()}],"col-start-end":[{col:E()}],"col-start":[{"col-start":_()}],"col-end":[{"col-end":_()}],"grid-rows":[{"grid-rows":S()}],"row-start-end":[{row:E()}],"row-start":[{"row-start":_()}],"row-end":[{"row-end":_()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":M()}],"auto-rows":[{"auto-rows":M()}],gap:[{gap:C()}],"gap-x":[{"gap-x":C()}],"gap-y":[{"gap-y":C()}],"justify-content":[{justify:[...L(),"normal"]}],"justify-items":[{"justify-items":[...eo(),"normal"]}],"justify-self":[{"justify-self":["auto",...eo()]}],"align-content":[{content:["normal",...L()]}],"align-items":[{items:[...eo(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...eo(),{baseline:["","last"]}]}],"place-content":[{"place-content":L()}],"place-items":[{"place-items":[...eo(),"baseline"]}],"place-self":[{"place-self":["auto",...eo()]}],p:[{p:C()}],px:[{px:C()}],py:[{py:C()}],ps:[{ps:C()}],pe:[{pe:C()}],pbs:[{pbs:C()}],pbe:[{pbe:C()}],pt:[{pt:C()}],pr:[{pr:C()}],pb:[{pb:C()}],pl:[{pl:C()}],m:[{m:et()}],mx:[{mx:et()}],my:[{my:et()}],ms:[{ms:et()}],me:[{me:et()}],mbs:[{mbs:et()}],mbe:[{mbe:et()}],mt:[{mt:et()}],mr:[{mr:et()}],mb:[{mb:et()}],ml:[{ml:et()}],"space-x":[{"space-x":C()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":C()}],"space-y-reverse":["space-y-reverse"],size:[{size:el()}],"inline-size":[{inline:["auto",...en()]}],"min-inline-size":[{"min-inline":["auto",...en()]}],"max-inline-size":[{"max-inline":["none",...en()]}],"block-size":[{block:["auto",...ea()]}],"min-block-size":[{"min-block":["auto",...ea()]}],"max-block-size":[{"max-block":["none",...ea()]}],w:[{w:[s,"screen",...el()]}],"min-w":[{"min-w":[s,"screen","none",...el()]}],"max-w":[{"max-w":[s,"screen","none","prose",{screen:[a]},...el()]}],h:[{h:["screen","lh",...el()]}],"min-h":[{"min-h":["screen","lh","none",...el()]}],"max-h":[{"max-h":["screen","lh",...el()]}],"font-size":[{text:["base",o,H,R]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[t,er,Z]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",A,q]}],"font-family":[{font:[J,B,r]}],"font-features":[{"font-features":[q]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[l,F,q]}],"line-clamp":[{"line-clamp":[O,"none",F,U]}],leading:[{leading:[n,...C()]}],"list-image":[{"list-image":["none",F,q]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",F,q]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:es()}],"text-color":[{text:es()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...eu(),"wavy"]}],"text-decoration-thickness":[{decoration:[O,"from-font","auto",F,R]}],"text-decoration-color":[{decoration:es()}],"underline-offset":[{"underline-offset":[O,"auto",F,q]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:C()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",F,q]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",F,q]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ei()}],"bg-repeat":[{bg:ed()}],"bg-size":[{bg:ec()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},W,F,q],radial:["",F,q],conic:[W,F,q]},Y,Q]}],"bg-color":[{bg:es()}],"gradient-from-pos":[{from:em()}],"gradient-via-pos":[{via:em()}],"gradient-to-pos":[{to:em()}],"gradient-from":[{from:es()}],"gradient-via":[{via:es()}],"gradient-to":[{to:es()}],rounded:[{rounded:ep()}],"rounded-s":[{"rounded-s":ep()}],"rounded-e":[{"rounded-e":ep()}],"rounded-t":[{"rounded-t":ep()}],"rounded-r":[{"rounded-r":ep()}],"rounded-b":[{"rounded-b":ep()}],"rounded-l":[{"rounded-l":ep()}],"rounded-ss":[{"rounded-ss":ep()}],"rounded-se":[{"rounded-se":ep()}],"rounded-ee":[{"rounded-ee":ep()}],"rounded-es":[{"rounded-es":ep()}],"rounded-tl":[{"rounded-tl":ep()}],"rounded-tr":[{"rounded-tr":ep()}],"rounded-br":[{"rounded-br":ep()}],"rounded-bl":[{"rounded-bl":ep()}],"border-w":[{border:eb()}],"border-w-x":[{"border-x":eb()}],"border-w-y":[{"border-y":eb()}],"border-w-s":[{"border-s":eb()}],"border-w-e":[{"border-e":eb()}],"border-w-bs":[{"border-bs":eb()}],"border-w-be":[{"border-be":eb()}],"border-w-t":[{"border-t":eb()}],"border-w-r":[{"border-r":eb()}],"border-w-b":[{"border-b":eb()}],"border-w-l":[{"border-l":eb()}],"divide-x":[{"divide-x":eb()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":eb()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...eu(),"hidden","none"]}],"divide-style":[{divide:[...eu(),"hidden","none"]}],"border-color":[{border:es()}],"border-color-x":[{"border-x":es()}],"border-color-y":[{"border-y":es()}],"border-color-s":[{"border-s":es()}],"border-color-e":[{"border-e":es()}],"border-color-bs":[{"border-bs":es()}],"border-color-be":[{"border-be":es()}],"border-color-t":[{"border-t":es()}],"border-color-r":[{"border-r":es()}],"border-color-b":[{"border-b":es()}],"border-color-l":[{"border-l":es()}],"divide-color":[{divide:es()}],"outline-style":[{outline:[...eu(),"none","hidden"]}],"outline-offset":[{"outline-offset":[O,F,q]}],"outline-w":[{outline:["",O,H,R]}],"outline-color":[{outline:es()}],shadow:[{shadow:["","none",c,ee,V]}],"shadow-color":[{shadow:es()}],"inset-shadow":[{"inset-shadow":["none",m,ee,V]}],"inset-shadow-color":[{"inset-shadow":es()}],"ring-w":[{ring:eb()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:es()}],"ring-offset-w":[{"ring-offset":[O,R]}],"ring-offset-color":[{"ring-offset":es()}],"inset-ring-w":[{"inset-ring":eb()}],"inset-ring-color":[{"inset-ring":es()}],"text-shadow":[{"text-shadow":["none",p,ee,V]}],"text-shadow-color":[{"text-shadow":es()}],opacity:[{opacity:[O,F,q]}],"mix-blend":[{"mix-blend":[...ef(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ef()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[O]}],"mask-image-linear-from-pos":[{"mask-linear-from":eg()}],"mask-image-linear-to-pos":[{"mask-linear-to":eg()}],"mask-image-linear-from-color":[{"mask-linear-from":es()}],"mask-image-linear-to-color":[{"mask-linear-to":es()}],"mask-image-t-from-pos":[{"mask-t-from":eg()}],"mask-image-t-to-pos":[{"mask-t-to":eg()}],"mask-image-t-from-color":[{"mask-t-from":es()}],"mask-image-t-to-color":[{"mask-t-to":es()}],"mask-image-r-from-pos":[{"mask-r-from":eg()}],"mask-image-r-to-pos":[{"mask-r-to":eg()}],"mask-image-r-from-color":[{"mask-r-from":es()}],"mask-image-r-to-color":[{"mask-r-to":es()}],"mask-image-b-from-pos":[{"mask-b-from":eg()}],"mask-image-b-to-pos":[{"mask-b-to":eg()}],"mask-image-b-from-color":[{"mask-b-from":es()}],"mask-image-b-to-color":[{"mask-b-to":es()}],"mask-image-l-from-pos":[{"mask-l-from":eg()}],"mask-image-l-to-pos":[{"mask-l-to":eg()}],"mask-image-l-from-color":[{"mask-l-from":es()}],"mask-image-l-to-color":[{"mask-l-to":es()}],"mask-image-x-from-pos":[{"mask-x-from":eg()}],"mask-image-x-to-pos":[{"mask-x-to":eg()}],"mask-image-x-from-color":[{"mask-x-from":es()}],"mask-image-x-to-color":[{"mask-x-to":es()}],"mask-image-y-from-pos":[{"mask-y-from":eg()}],"mask-image-y-to-pos":[{"mask-y-to":eg()}],"mask-image-y-from-color":[{"mask-y-from":es()}],"mask-image-y-to-color":[{"mask-y-to":es()}],"mask-image-radial":[{"mask-radial":[F,q]}],"mask-image-radial-from-pos":[{"mask-radial-from":eg()}],"mask-image-radial-to-pos":[{"mask-radial-to":eg()}],"mask-image-radial-from-color":[{"mask-radial-from":es()}],"mask-image-radial-to-color":[{"mask-radial-to":es()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":v()}],"mask-image-conic-pos":[{"mask-conic":[O]}],"mask-image-conic-from-pos":[{"mask-conic-from":eg()}],"mask-image-conic-to-pos":[{"mask-conic-to":eg()}],"mask-image-conic-from-color":[{"mask-conic-from":es()}],"mask-image-conic-to-color":[{"mask-conic-to":es()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ei()}],"mask-repeat":[{mask:ed()}],"mask-size":[{mask:ec()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",F,q]}],filter:[{filter:["","none",F,q]}],blur:[{blur:eh()}],brightness:[{brightness:[O,F,q]}],contrast:[{contrast:[O,F,q]}],"drop-shadow":[{"drop-shadow":["","none",b,ee,V]}],"drop-shadow-color":[{"drop-shadow":es()}],grayscale:[{grayscale:["",O,F,q]}],"hue-rotate":[{"hue-rotate":[O,F,q]}],invert:[{invert:["",O,F,q]}],saturate:[{saturate:[O,F,q]}],sepia:[{sepia:["",O,F,q]}],"backdrop-filter":[{"backdrop-filter":["","none",F,q]}],"backdrop-blur":[{"backdrop-blur":eh()}],"backdrop-brightness":[{"backdrop-brightness":[O,F,q]}],"backdrop-contrast":[{"backdrop-contrast":[O,F,q]}],"backdrop-grayscale":[{"backdrop-grayscale":["",O,F,q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[O,F,q]}],"backdrop-invert":[{"backdrop-invert":["",O,F,q]}],"backdrop-opacity":[{"backdrop-opacity":[O,F,q]}],"backdrop-saturate":[{"backdrop-saturate":[O,F,q]}],"backdrop-sepia":[{"backdrop-sepia":["",O,F,q]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":C()}],"border-spacing-x":[{"border-spacing-x":C()}],"border-spacing-y":[{"border-spacing-y":C()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",F,q]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[O,"initial",F,q]}],ease:[{ease:["linear","initial",h,F,q]}],delay:[{delay:[O,F,q]}],animate:[{animate:["none",k,F,q]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[f,F,q]}],"perspective-origin":[{"perspective-origin":y()}],rotate:[{rotate:ek()}],"rotate-x":[{"rotate-x":ek()}],"rotate-y":[{"rotate-y":ek()}],"rotate-z":[{"rotate-z":ek()}],scale:[{scale:ew()}],"scale-x":[{"scale-x":ew()}],"scale-y":[{"scale-y":ew()}],"scale-z":[{"scale-z":ew()}],"scale-3d":["scale-3d"],skew:[{skew:ex()}],"skew-x":[{"skew-x":ex()}],"skew-y":[{"skew-y":ex()}],transform:[{transform:[F,q,"","none","gpu","cpu"]}],"transform-origin":[{origin:y()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:ev()}],"translate-x":[{"translate-x":ev()}],"translate-y":[{"translate-y":ev()}],"translate-z":[{"translate-z":ev()}],"translate-none":["translate-none"],accent:[{accent:es()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:es()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",F,q]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":C()}],"scroll-mx":[{"scroll-mx":C()}],"scroll-my":[{"scroll-my":C()}],"scroll-ms":[{"scroll-ms":C()}],"scroll-me":[{"scroll-me":C()}],"scroll-mbs":[{"scroll-mbs":C()}],"scroll-mbe":[{"scroll-mbe":C()}],"scroll-mt":[{"scroll-mt":C()}],"scroll-mr":[{"scroll-mr":C()}],"scroll-mb":[{"scroll-mb":C()}],"scroll-ml":[{"scroll-ml":C()}],"scroll-p":[{"scroll-p":C()}],"scroll-px":[{"scroll-px":C()}],"scroll-py":[{"scroll-py":C()}],"scroll-ps":[{"scroll-ps":C()}],"scroll-pe":[{"scroll-pe":C()}],"scroll-pbs":[{"scroll-pbs":C()}],"scroll-pbe":[{"scroll-pbe":C()}],"scroll-pt":[{"scroll-pt":C()}],"scroll-pr":[{"scroll-pr":C()}],"scroll-pb":[{"scroll-pb":C()}],"scroll-pl":[{"scroll-pl":C()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",F,q]}],fill:[{fill:["none",...es()]}],"stroke-w":[{stroke:[O,H,R,U]}],stroke:[{stroke:["none",...es()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}})}}]);
@@ -1,4 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[212],{32467:(e,t,s)=>{s.d(t,{TL:()=>r,bL:()=>o});var i=s(12115),n=s(94446),l=s(95155);function r(e){let t=function(e){let t=i.forwardRef((e,t)=>{let{children:s,...l}=e;if(i.isValidElement(s)){var r;let e,o,a=(r=s,(o=(e=Object.getOwnPropertyDescriptor(r.props,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?r.ref:(o=(e=Object.getOwnPropertyDescriptor(r,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?r.props.ref:r.props.ref||r.ref),h=function(e,t){let s={...t};for(let i in t){let n=e[i],l=t[i];/^on[A-Z]/.test(i)?n&&l?s[i]=(...e)=>{let t=l(...e);return n(...e),t}:n&&(s[i]=n):"style"===i?s[i]={...n,...l}:"className"===i&&(s[i]=[n,l].filter(Boolean).join(" "))}return{...e,...s}}(l,s.props);return s.type!==i.Fragment&&(h.ref=t?(0,n.t)(t,a):a),i.cloneElement(s,h)}return i.Children.count(s)>1?i.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}(e),s=i.forwardRef((e,s)=>{let{children:n,...r}=e,o=i.Children.toArray(n),a=o.find(h);if(a){let e=a.props.children,n=o.map(t=>t!==a?t:i.Children.count(e)>1?i.Children.only(null):i.isValidElement(e)?e.props.children:null);return(0,l.jsx)(t,{...r,ref:s,children:i.isValidElement(e)?i.cloneElement(e,void 0,n):null})}return(0,l.jsx)(t,{...r,ref:s,children:n})});return s.displayName=`${e}.Slot`,s}var o=r("Slot"),a=Symbol("radix.slottable");function h(e){return i.isValidElement(e)&&"function"==typeof e.type&&"__radixId"in e.type&&e.type.__radixId===a}},46074:(e,t,s)=>{s.d(t,{Te:()=>b});var i=s(12115),n=s(47650);function l(e,t,s){let i,n=s.initialDeps??[],l=!0;function r(){var r,o,a;let h,u;s.key&&(null==(r=s.debug)?void 0:r.call(s))&&(h=Date.now());let c=e();if(!(c.length!==n.length||c.some((e,t)=>n[t]!==e)))return i;if(n=c,s.key&&(null==(o=s.debug)?void 0:o.call(s))&&(u=Date.now()),i=t(...c),s.key&&(null==(a=s.debug)?void 0:a.call(s))){let e=Math.round((Date.now()-h)*100)/100,t=Math.round((Date.now()-u)*100)/100,i=t/16,n=(e,t)=>{for(e=String(e);e.length<t;)e=" "+e;return e};console.info(`%c⏱ ${n(t,5)} /${n(e,5)} ms`,`
2
- font-size: .6rem;
3
- font-weight: bold;
4
- color: hsl(${Math.max(0,Math.min(120-120*i,120))}deg 100% 31%);`,null==s?void 0:s.key)}return(null==s?void 0:s.onChange)&&!(l&&s.skipInitialOnChange)&&s.onChange(i),l=!1,i}return r.updateDeps=e=>{n=e},r}function r(e,t){if(void 0!==e)return e;throw Error(`Unexpected undefined${t?`: ${t}`:""}`)}let o=e=>{let{offsetWidth:t,offsetHeight:s}=e;return{width:t,height:s}},a=e=>e,h=e=>{let t=Math.max(e.startIndex-e.overscan,0),s=Math.min(e.endIndex+e.overscan,e.count-1),i=[];for(let e=t;e<=s;e++)i.push(e);return i},u=(e,t)=>{let s=e.scrollElement;if(!s)return;let i=e.targetWindow;if(!i)return;let n=e=>{let{width:s,height:i}=e;t({width:Math.round(s),height:Math.round(i)})};if(n(o(s)),!i.ResizeObserver)return()=>{};let l=new i.ResizeObserver(t=>{let i=()=>{let e=t[0];if(null==e?void 0:e.borderBoxSize){let t=e.borderBoxSize[0];if(t)return void n({width:t.inlineSize,height:t.blockSize})}n(o(s))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(i):i()});return l.observe(s,{box:"border-box"}),()=>{l.unobserve(s)}},c={passive:!0},d="undefined"==typeof window||"onscrollend"in window,f=(e,t)=>{let s=e.scrollElement;if(!s)return;let i=e.targetWindow;if(!i)return;let n=0,l=e.options.useScrollendEvent&&d?()=>void 0:((e,t,s)=>{let i;return function(...n){e.clearTimeout(i),i=e.setTimeout(()=>t.apply(this,n),s)}})(i,()=>{t(n,!1)},e.options.isScrollingResetDelay),r=i=>()=>{let{horizontal:r,isRtl:o}=e.options;n=r?s.scrollLeft*(o&&-1||1):s.scrollTop,l(),t(n,i)},o=r(!0),a=r(!1);s.addEventListener("scroll",o,c);let h=e.options.useScrollendEvent&&d;return h&&s.addEventListener("scrollend",a,c),()=>{s.removeEventListener("scroll",o),h&&s.removeEventListener("scrollend",a)}},g=(e,t,s)=>{if(null==t?void 0:t.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[s.options.horizontal?"inlineSize":"blockSize"])}return e[s.options.horizontal?"offsetWidth":"offsetHeight"]},m=(e,{adjustments:t=0,behavior:s},i)=>{var n,l;null==(l=null==(n=i.scrollElement)?void 0:n.scrollTo)||l.call(n,{[i.options.horizontal?"left":"top"]:e+t,behavior:s})};class p{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var e,t,s;return(null==(s=null==(t=null==(e=this.targetWindow)?void 0:e.performance)?void 0:t.now)?void 0:s.call(t))??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(this.targetWindow&&this.targetWindow.ResizeObserver?e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,s=this.indexFromElement(t);if(!t.isConnected)return void this.observer.unobserve(t);this.shouldMeasureDuringScroll(s)&&this.resizeItem(s,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}):null);return{disconnect:()=>{var s;null==(s=t())||s.disconnect(),e=null},observe:e=>{var s;return null==(s=t())?void 0:s.observe(e,{box:"border-box"})},unobserve:e=>{var s;return null==(s=t())?void 0:s.unobserve(e)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach(([t,s])=>{void 0===s&&delete e[t]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:a,rangeExtractor:h,onChange:()=>{},measureElement:g,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...e}},this.notify=e=>{var t,s;null==(s=(t=this.options).onChange)||s.call(t,this,e)},this.maybeNotify=l(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),null!=this.rafId&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var e;let t=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==t){if(this.cleanup(),!t)return void this.maybeNotify();this.scrollElement=t,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=(null==(e=this.scrollElement)?void 0:e.window)??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?"forward":"backward":null,this.scrollOffset=e,this.isScrolling=t,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??("function"==typeof this.options.initialOffset?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let s=new Map,i=new Map;for(let n=t-1;n>=0;n--){let t=e[n];if(s.has(t.lane))continue;let l=i.get(t.lane);if(null==l||t.end>l.end?i.set(t.lane,t):t.end<l.end&&s.set(t.lane,!0),s.size===this.options.lanes)break}return i.size===this.options.lanes?Array.from(i.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=l(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(e,t,s,i,n,l)=>(void 0!==this.prevLanes&&this.prevLanes!==l&&(this.lanesChangedFlag=!0),this.prevLanes=l,this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:s,getItemKey:i,enabled:n,lanes:l}),{key:!1}),this.getMeasurements=l(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:e,paddingStart:t,scrollMargin:s,getItemKey:i,enabled:n,lanes:l},r)=>{if(!n)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),0!==this.measurementsCache.length||this.lanesSettling||(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let o=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1);let a=this.measurementsCache.slice(0,o),h=Array(l).fill(void 0);for(let e=0;e<o;e++){let t=a[e];t&&(h[t.lane]=e)}for(let n=o;n<e;n++){let e,l,o=i(n),u=this.laneAssignments.get(n);if(void 0!==u&&this.options.lanes>1){let i=h[e=u],n=void 0!==i?a[i]:void 0;l=n?n.end+this.options.gap:t+s}else{let i=1===this.options.lanes?a[n-1]:this.getFurthestMeasurement(a,n);l=i?i.end+this.options.gap:t+s,e=i?i.lane:n%this.options.lanes,this.options.lanes>1&&this.laneAssignments.set(n,e)}let c=r.get(o),d="number"==typeof c?c:this.options.estimateSize(n),f=l+d;a[n]={index:n,start:l,size:d,end:f,key:o,lane:e},h[e]=n}return this.measurementsCache=a,a},{key:!1,debug:()=>this.options.debug}),this.calculateRange=l(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,s,i)=>this.range=e.length>0&&t>0?function({measurements:e,outerSize:t,scrollOffset:s,lanes:i}){let n=e.length-1;if(e.length<=i)return{startIndex:0,endIndex:n};let l=v(0,n,t=>e[t].start,s),r=l;if(1===i)for(;r<n&&e[r].end<s+t;)r++;else if(i>1){let o=Array(i).fill(0);for(;r<n&&o.some(e=>e<s+t);){let t=e[r];o[t.lane]=t.end,r++}let a=Array(i).fill(s+t);for(;l>=0&&a.some(e=>e>=s);){let t=e[l];a[t.lane]=t.start,l--}l=Math.max(0,l-l%i),r=Math.min(n,r+(i-1-r%i))}return{startIndex:l,endIndex:r}}({measurements:e,outerSize:t,scrollOffset:s,lanes:i}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=l(()=>{let e=null,t=null,s=this.calculateRange();return s&&(e=s.startIndex,t=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,s,i,n)=>null===i||null===n?[]:e({startIndex:i,endIndex:n,overscan:t,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,s=e.getAttribute(t);return s?parseInt(s,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{var t;if(!this.scrollState||"smooth"!==this.scrollState.behavior)return!0;let s=this.scrollState.index??(null==(t=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))?void 0:t.index);if(void 0!==s&&this.range){let t=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),i=Math.max(0,s-t),n=Math.min(this.options.count-1,s+t);return e>=i&&e<=n}return!0},this.measureElement=e=>{if(!e)return void this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});let t=this.indexFromElement(e),s=this.options.getItemKey(t),i=this.elementsCache.get(s);i!==e&&(i&&this.observer.unobserve(i),this.observer.observe(e),this.elementsCache.set(s,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{var s;let i=this.measurementsCache[e];if(!i)return;let n=t-(this.itemSizeCache.get(i.key)??i.size);0!==n&&((null==(s=this.scrollState)?void 0:s.behavior)!=="smooth"&&(void 0!==this.shouldAdjustScrollPositionOnItemSizeChange?this.shouldAdjustScrollPositionOnItemSizeChange(i,n,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=n,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,t)),this.notify(!1))},this.getVirtualItems=l(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let s=[];for(let i=0,n=e.length;i<n;i++){let n=t[e[i]];s.push(n)}return s},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(0!==t.length)return r(t[v(0,t.length-1,e=>r(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(e,t,s=0)=>{if(!this.scrollElement)return 0;let i=this.getSize(),n=this.getScrollOffset();return"auto"===t&&(t=e>=n+i?"end":"start"),"center"===t?e+=(s-i)/2:"end"===t&&(e-=i),Math.max(Math.min(this.getMaxScrollOffset(),e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));let s=this.getSize(),i=this.getScrollOffset(),n=this.measurementsCache[e];if(!n)return;if("auto"===t)if(n.end>=i+s-this.options.scrollPaddingEnd)t="end";else{if(!(n.start<=i+this.options.scrollPaddingStart))return[i,t];t="start"}if("end"===t&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let l="end"===t?n.end+this.options.scrollPaddingEnd:n.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(l,t,n.size),t]},this.scrollToOffset=(e,{align:t="start",behavior:s="auto"}={})=>{let i=this.getOffsetForAlignment(e,t),n=this.now();this.scrollState={index:null,align:t,behavior:s,startedAt:n,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t="auto",behavior:s="auto"}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let i=this.getOffsetForIndex(e,t);if(!i)return;let[n,l]=i,r=this.now();this.scrollState={index:e,align:l,behavior:s,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t="auto"}={})=>{let s=this.getScrollOffset()+e,i=this.now();this.scrollState={index:null,align:"start",behavior:t,startedAt:i,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var e;let t,s=this.getMeasurements();if(0===s.length)t=this.options.paddingStart;else if(1===this.options.lanes)t=(null==(e=s[s.length-1])?void 0:e.end)??0;else{let e=Array(this.options.lanes).fill(null),i=s.length-1;for(;i>=0&&e.some(e=>null===e);){let t=s[i];null===e[t.lane]&&(e[t.lane]=t.end),i--}t=Math.max(...e.filter(e=>null!==e))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(e,{adjustments:t,behavior:s})=>{this.options.scrollToFn(e,{behavior:s,adjustments:t},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(e)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}null==this.rafId&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=null!=this.scrollState.index?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,t=e?e[0]:this.scrollState.lastTargetOffset,s=t!==this.scrollState.lastTargetOffset;if(!s&&1.01>Math.abs(t-this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.scrollState=null;return}}else this.scrollState.stableFrames=0,s&&(this.scrollState.lastTargetOffset=t,this.scrollState.behavior="auto",this._scrollToOffset(t,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}let v=(e,t,s,i)=>{for(;e<=t;){let n=(e+t)/2|0,l=s(n);if(l<i)e=n+1;else{if(!(l>i))return n;t=n-1}}return e>0?e-1:0},S="undefined"!=typeof document?i.useLayoutEffect:i.useEffect;function b(e){return function({useFlushSync:e=!0,...t}){let s=i.useReducer(()=>({}),{})[1],l={...t,onChange:(i,l)=>{var r;e&&l?(0,n.flushSync)(s):s(),null==(r=t.onChange)||r.call(t,i,l)}},[r]=i.useState(()=>new p(l));return r.setOptions(l),S(()=>r._didMount(),[]),S(()=>r._willUpdate()),r}({observeElementRect:u,observeElementOffset:f,scrollToFn:m,...e})}},83101:(e,t,s)=>{s.d(t,{F:()=>r});var i=s(2821);let n=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,l=i.$,r=(e,t)=>s=>{var i;if((null==t?void 0:t.variants)==null)return l(e,null==s?void 0:s.class,null==s?void 0:s.className);let{variants:r,defaultVariants:o}=t,a=Object.keys(r).map(e=>{let t=null==s?void 0:s[e],i=null==o?void 0:o[e];if(null===t)return null;let l=n(t)||n(i);return r[e][l]}),h=s&&Object.entries(s).reduce((e,t)=>{let[s,i]=t;return void 0===i||(e[s]=i),e},{});return l(e,a,null==t||null==(i=t.compoundVariants)?void 0:i.reduce((e,t)=>{let{class:s,className:i,...n}=t;return Object.entries(n).every(e=>{let[t,s]=e;return Array.isArray(s)?s.includes({...o,...h}[t]):({...o,...h})[t]===s})?[...e,s,i]:e},[]),null==s?void 0:s.class,null==s?void 0:s.className)}},86651:(e,t,s)=>{s.d(t,{A:()=>i});let i=(0,s(70814).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])},94446:(e,t,s)=>{s.d(t,{s:()=>r,t:()=>l});var i=s(12115);function n(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function l(...e){return t=>{let s=!1,i=e.map(e=>{let i=n(e,t);return s||"function"!=typeof i||(s=!0),i});if(s)return()=>{for(let t=0;t<i.length;t++){let s=i[t];"function"==typeof s?s():n(e[t],null)}}}}function r(...e){return i.useCallback(l(...e),e)}}}]);