@meetploy/cli 1.11.3 → 1.12.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.
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Ploy Dev Dashboard</title>
7
- <script type="module" crossorigin src="/assets/main-X-CWS305.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/main-Bsiap3cJ.css">
7
+ <script type="module" crossorigin src="/assets/main-CYxpKFOS.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/main-BNiZvT9K.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/dist/dev.js CHANGED
@@ -40,6 +40,7 @@ var __filename = fileURLToPath(import.meta.url);
40
40
  var __dirname = dirname(__filename);
41
41
  function findDashboardDistPath() {
42
42
  const possiblePaths = [
43
+ join(__dirname, "dashboard-dist"),
43
44
  join(__dirname, "..", "dashboard-dist"),
44
45
  join(__dirname, "..", "..", "src", "dashboard-dist")
45
46
  ];
@@ -355,7 +356,7 @@ function createDashboardRoutes(app, dbManager2, config) {
355
356
  });
356
357
  });
357
358
  app.get("*", (c) => {
358
- if (c.req.path.startsWith("/api/") || c.req.path.startsWith("/db") || c.req.path.startsWith("/queue") || c.req.path.startsWith("/workflow")) {
359
+ if (c.req.path.startsWith("/api/")) {
359
360
  return c.notFound();
360
361
  }
361
362
  const indexPath = join(dashboardDistPath, "index.html");
@@ -374,8 +375,12 @@ function createDbHandler(getDatabase) {
374
375
  const startTime = Date.now();
375
376
  try {
376
377
  const body = await c.req.json();
377
- const { bindingName, method, query, params, statements } = body;
378
- const db = getDatabase(bindingName);
378
+ const { bindingName, databaseId, method, query, params, statements } = body;
379
+ const dbName = bindingName ?? databaseId;
380
+ if (!dbName) {
381
+ return c.json({ error: "Missing bindingName or databaseId" }, 400);
382
+ }
383
+ const db = getDatabase(dbName);
379
384
  if (method === "prepare" && query) {
380
385
  const stmt = db.prepare(query);
381
386
  const isSelect = query.trim().toUpperCase().startsWith("SELECT");
package/dist/index.js CHANGED
@@ -27,6 +27,71 @@ var __export = (target, all) => {
27
27
  for (var name in all)
28
28
  __defProp(target, name, { get: all[name], enumerable: true });
29
29
  };
30
+ async function detectMonorepo(projectDir) {
31
+ const indicators = [];
32
+ let type;
33
+ const hasPnpmWorkspace = await fileExists(join(projectDir, "pnpm-workspace.yaml"));
34
+ if (hasPnpmWorkspace) {
35
+ indicators.push("pnpm-workspace.yaml");
36
+ type = "pnpm-workspace";
37
+ }
38
+ const packageJsonPath = join(projectDir, "package.json");
39
+ const hasPackageJson = await fileExists(packageJsonPath);
40
+ if (hasPackageJson) {
41
+ try {
42
+ const packageJson = JSON.parse(await readFile(packageJsonPath, "utf-8"));
43
+ if (packageJson.workspaces && (Array.isArray(packageJson.workspaces) || packageJson.workspaces.packages)) {
44
+ indicators.push("package.json workspaces");
45
+ if (!type) {
46
+ const hasYarnLock = await fileExists(join(projectDir, "yarn.lock"));
47
+ type = hasYarnLock ? "yarn-workspace" : "npm-workspace";
48
+ }
49
+ }
50
+ } catch {
51
+ }
52
+ }
53
+ const hasLerna = await fileExists(join(projectDir, "lerna.json"));
54
+ if (hasLerna) {
55
+ indicators.push("lerna.json");
56
+ if (!type) {
57
+ type = "lerna";
58
+ }
59
+ }
60
+ const hasNx = await fileExists(join(projectDir, "nx.json"));
61
+ if (hasNx) {
62
+ indicators.push("nx.json");
63
+ if (!type) {
64
+ type = "nx";
65
+ }
66
+ }
67
+ const hasTurbo = await fileExists(join(projectDir, "turbo.json"));
68
+ if (hasTurbo) {
69
+ indicators.push("turbo.json");
70
+ if (!type) {
71
+ type = "turbo";
72
+ }
73
+ }
74
+ const hasRush = await fileExists(join(projectDir, "rush.json"));
75
+ if (hasRush) {
76
+ indicators.push("rush.json");
77
+ if (!type) {
78
+ type = "rush";
79
+ }
80
+ }
81
+ return {
82
+ isMonorepo: indicators.length > 0,
83
+ type,
84
+ indicators
85
+ };
86
+ }
87
+ async function fileExists(filePath) {
88
+ try {
89
+ await access(filePath);
90
+ return true;
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
30
95
  async function isPnpmWorkspace(projectDir) {
31
96
  try {
32
97
  await access(join(projectDir, "pnpm-workspace.yaml"));
@@ -230,6 +295,7 @@ var cli_exports = {};
230
295
  __export(cli_exports, {
231
296
  DEFAULT_COMPATIBILITY_DATE: () => DEFAULT_COMPATIBILITY_DATE,
232
297
  DEFAULT_COMPATIBILITY_FLAGS: () => DEFAULT_COMPATIBILITY_FLAGS,
298
+ detectMonorepo: () => detectMonorepo,
233
299
  getAddDevDependencyCommand: () => getAddDevDependencyCommand,
234
300
  getCompatibilityDate: () => getCompatibilityDate,
235
301
  getCompatibilityFlags: () => getCompatibilityFlags,
@@ -399,10 +465,12 @@ export function initializeDB(bindingName: string, serviceUrl: string): DBDatabas
399
465
  return {
400
466
  prepare(query) {
401
467
  let boundParams = [];
402
- return {
468
+ const stmt = {
469
+ __db_data: { query, params: boundParams },
403
470
  bind(...values) {
404
471
  boundParams = values;
405
- return this;
472
+ stmt.__db_data = { query, params: boundParams };
473
+ return stmt;
406
474
  },
407
475
  async run() {
408
476
  const response = await fetch(serviceUrl, {
@@ -450,6 +518,7 @@ export function initializeDB(bindingName: string, serviceUrl: string): DBDatabas
450
518
  return arrayRows;
451
519
  },
452
520
  };
521
+ return stmt;
453
522
  },
454
523
  async dump() {
455
524
  const response = await fetch(serviceUrl, {
@@ -528,6 +597,12 @@ var init_trace_event = __esm({
528
597
  }
529
598
  });
530
599
 
600
+ // ../shared/dist/unified-log.js
601
+ var init_unified_log = __esm({
602
+ "../shared/dist/unified-log.js"() {
603
+ }
604
+ });
605
+
531
606
  // ../shared/dist/url-validation.js
532
607
  var init_url_validation = __esm({
533
608
  "../shared/dist/url-validation.js"() {
@@ -541,6 +616,7 @@ var init_dist = __esm({
541
616
  init_error();
542
617
  init_health_check();
543
618
  init_trace_event();
619
+ init_unified_log();
544
620
  init_url_validation();
545
621
  }
546
622
  });
@@ -1047,6 +1123,42 @@ var init_bundler = __esm({
1047
1123
  ];
1048
1124
  }
1049
1125
  });
1126
+
1127
+ // ../emulator/dist/utils/logger.js
1128
+ function timestamp() {
1129
+ return (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour12: false });
1130
+ }
1131
+ function log(message) {
1132
+ console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.cyan}[ploy]${COLORS.reset} ${message}`);
1133
+ }
1134
+ function success(message) {
1135
+ console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.green}[ploy]${COLORS.reset} ${message}`);
1136
+ }
1137
+ function warn(message) {
1138
+ console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.yellow}[ploy]${COLORS.reset} ${message}`);
1139
+ }
1140
+ function error(message) {
1141
+ console.error(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.red}[ploy]${COLORS.reset} ${message}`);
1142
+ }
1143
+ function debug(message, verbose) {
1144
+ if (verbose) {
1145
+ console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.magenta}[ploy:debug]${COLORS.reset} ${message}`);
1146
+ }
1147
+ }
1148
+ var COLORS;
1149
+ var init_logger = __esm({
1150
+ "../emulator/dist/utils/logger.js"() {
1151
+ COLORS = {
1152
+ reset: "\x1B[0m",
1153
+ dim: "\x1B[2m",
1154
+ cyan: "\x1B[36m",
1155
+ green: "\x1B[32m",
1156
+ yellow: "\x1B[33m",
1157
+ red: "\x1B[31m",
1158
+ magenta: "\x1B[35m"
1159
+ };
1160
+ }
1161
+ });
1050
1162
  function createFileWatcher(srcDir, onRebuild) {
1051
1163
  let watcher = null;
1052
1164
  let debounceTimer = null;
@@ -1079,7 +1191,27 @@ function createFileWatcher(srcDir, onRebuild) {
1079
1191
  watcher = watch(srcDir, {
1080
1192
  persistent: true,
1081
1193
  ignoreInitial: true,
1082
- ignored: ["**/node_modules/**", "**/dist/**", "**/.ploy/**", "**/.*"]
1194
+ ignored: [
1195
+ "**/node_modules/**",
1196
+ "**/dist/**",
1197
+ "**/.*",
1198
+ "**/.*/**",
1199
+ "**/coverage/**",
1200
+ "**/build/**",
1201
+ "**/*.log",
1202
+ "**/pnpm-lock.yaml",
1203
+ "**/package-lock.json",
1204
+ "**/yarn.lock"
1205
+ ]
1206
+ });
1207
+ watcher.on("error", (err) => {
1208
+ const error2 = err;
1209
+ if (error2.code === "EMFILE") {
1210
+ warn("Warning: Too many open files. Some file changes may not be detected.");
1211
+ warn("Consider increasing your system's file descriptor limit (ulimit -n).");
1212
+ } else {
1213
+ error(`File watcher error: ${error2.message || String(err)}`);
1214
+ }
1083
1215
  });
1084
1216
  watcher.on("change", (filePath) => {
1085
1217
  if (shouldRebuild(filePath)) {
@@ -1111,6 +1243,7 @@ function createFileWatcher(srcDir, onRebuild) {
1111
1243
  }
1112
1244
  var init_watcher = __esm({
1113
1245
  "../emulator/dist/bundler/watcher.js"() {
1246
+ init_logger();
1114
1247
  }
1115
1248
  });
1116
1249
 
@@ -1185,6 +1318,7 @@ var init_workerd_config = __esm({
1185
1318
  });
1186
1319
  function findDashboardDistPath() {
1187
1320
  const possiblePaths = [
1321
+ join(__dirname, "dashboard-dist"),
1188
1322
  join(__dirname, "..", "dashboard-dist"),
1189
1323
  join(__dirname, "..", "..", "src", "dashboard-dist")
1190
1324
  ];
@@ -1488,7 +1622,7 @@ function createDashboardRoutes(app, dbManager2, config) {
1488
1622
  });
1489
1623
  });
1490
1624
  app.get("*", (c) => {
1491
- if (c.req.path.startsWith("/api/") || c.req.path.startsWith("/db") || c.req.path.startsWith("/queue") || c.req.path.startsWith("/workflow")) {
1625
+ if (c.req.path.startsWith("/api/")) {
1492
1626
  return c.notFound();
1493
1627
  }
1494
1628
  const indexPath = join(dashboardDistPath, "index.html");
@@ -1526,8 +1660,12 @@ function createDbHandler(getDatabase) {
1526
1660
  const startTime = Date.now();
1527
1661
  try {
1528
1662
  const body = await c.req.json();
1529
- const { bindingName, method, query, params, statements } = body;
1530
- const db = getDatabase(bindingName);
1663
+ const { bindingName, databaseId, method, query, params, statements } = body;
1664
+ const dbName = bindingName ?? databaseId;
1665
+ if (!dbName) {
1666
+ return c.json({ error: "Missing bindingName or databaseId" }, 400);
1667
+ }
1668
+ const db = getDatabase(dbName);
1531
1669
  if (method === "prepare" && query) {
1532
1670
  const stmt = db.prepare(query);
1533
1671
  const isSelect = query.trim().toUpperCase().startsWith("SELECT");
@@ -2034,39 +2172,6 @@ var init_mock_server = __esm({
2034
2172
  DEFAULT_MOCK_SERVER_PORT = 4003;
2035
2173
  }
2036
2174
  });
2037
-
2038
- // ../emulator/dist/utils/logger.js
2039
- function timestamp() {
2040
- return (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour12: false });
2041
- }
2042
- function log(message) {
2043
- console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.cyan}[ploy]${COLORS.reset} ${message}`);
2044
- }
2045
- function success(message) {
2046
- console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.green}[ploy]${COLORS.reset} ${message}`);
2047
- }
2048
- function error(message) {
2049
- console.error(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.red}[ploy]${COLORS.reset} ${message}`);
2050
- }
2051
- function debug(message, verbose) {
2052
- if (verbose) {
2053
- console.log(`${COLORS.dim}[${timestamp()}]${COLORS.reset} ${COLORS.magenta}[ploy:debug]${COLORS.reset} ${message}`);
2054
- }
2055
- }
2056
- var COLORS;
2057
- var init_logger = __esm({
2058
- "../emulator/dist/utils/logger.js"() {
2059
- COLORS = {
2060
- reset: "\x1B[0m",
2061
- dim: "\x1B[2m",
2062
- cyan: "\x1B[36m",
2063
- green: "\x1B[32m",
2064
- yellow: "\x1B[33m",
2065
- red: "\x1B[31m",
2066
- magenta: "\x1B[35m"
2067
- };
2068
- }
2069
- });
2070
2175
  function getProjectHash(projectDir) {
2071
2176
  return createHash("sha256").update(projectDir).digest("hex").slice(0, 12);
2072
2177
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meetploy/cli",
3
- "version": "1.11.3",
3
+ "version": "1.12.1",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-700:oklch(50.5% .213 27.518);--color-red-950:oklch(25.8% .092 26.042);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-200:oklch(92.5% .084 155.995);--color-green-500:oklch(72.3% .219 149.579);--color-green-900:oklch(39.3% .095 152.535);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:.625rem;--color-background:oklch(14.5% 0 0);--color-foreground:oklch(98.5% 0 0);--color-card:oklch(14.5% 0 0);--color-primary:oklch(98.5% 0 0);--color-primary-foreground:oklch(20.5% 0 0);--color-muted:oklch(26.9% 0 0);--color-muted-foreground:oklch(70.8% 0 0);--color-destructive:oklch(39.6% .141 25.723);--color-border:oklch(26.9% 0 0);--color-input:oklch(26.9% 0 0);--color-ring:oklch(43.9% 0 0)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border)}body{background-color:var(--color-background);color:var(--color-foreground);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-6{top:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.left-\[9px\]{left:9px}.z-10{z-index:10}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-14{height:calc(var(--spacing)*14)}.h-\[500px\]{height:500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing)*.5)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-64{width:calc(var(--spacing)*64)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[200px\]{max-width:200px}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:var(--radius)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-background{border-color:var(--color-background)}.border-blue-500{border-color:var(--color-blue-500)}.border-destructive\/50{border-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--color-destructive)50%,transparent)}}.border-gray-500{border-color:var(--color-gray-500)}.border-green-500{border-color:var(--color-green-500)}.border-orange-500{border-color:var(--color-orange-500)}.border-red-500{border-color:var(--color-red-500)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--color-background)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-card{background-color:var(--color-card)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--color-muted)}.bg-primary{background-color:var(--color-primary)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-\[3px\]{padding:3px}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-6{padding-top:calc(var(--spacing)*6)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-64{padding-left:calc(var(--spacing)*64)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-blue-500{color:var(--color-blue-500)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-orange-500{color:var(--color-orange-500)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-red-700{color:var(--color-red-700)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing)*0)}@media (hover:hover){.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:#52525280}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-ring)50%,transparent)}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--color-ring)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--color-background)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (min-width:48rem){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-3{grid-column:span 3/span 3}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:64rem){.lg\:block{display:block}.lg\:grid-cols-\[1fr_280px\]{grid-template-columns:1fr 280px}}@media (prefers-color-scheme:dark){.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-green-900{background-color:var(--color-green-900)}.dark\:bg-red-950{background-color:var(--color-red-950)}.dark\:text-muted-foreground{color:var(--color-muted-foreground)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:data-\[state\=active\]\:border-input[data-state=active]{border-color:var(--color-input)}.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]{background-color:#2626264d}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=active\]\:bg-input\/30[data-state=active]{background-color:color-mix(in oklab,var(--color-input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--color-foreground)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}