deepspace 0.4.0 → 0.4.2

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.
package/dist/index.js CHANGED
@@ -892,7 +892,35 @@ function AuthOverlay({
892
892
  }
893
893
  )
894
894
  ] }),
895
- /* @__PURE__ */ jsxs2("div", { className: "mt-5 flex items-center justify-center gap-1.5 text-[11px] text-muted-foreground", children: [
895
+ /* @__PURE__ */ jsxs2("p", { className: "mt-5 text-xs leading-snug text-muted-foreground", children: [
896
+ "By continuing, you agree to the DeepSpace",
897
+ " ",
898
+ /* @__PURE__ */ jsx2(
899
+ "a",
900
+ {
901
+ href: "https://deep.space/terms",
902
+ target: "_blank",
903
+ rel: "noopener noreferrer",
904
+ className: "underline hover:text-foreground",
905
+ children: "Terms of Service"
906
+ }
907
+ ),
908
+ " ",
909
+ "and",
910
+ " ",
911
+ /* @__PURE__ */ jsx2(
912
+ "a",
913
+ {
914
+ href: "https://deep.space/privacy",
915
+ target: "_blank",
916
+ rel: "noopener noreferrer",
917
+ className: "underline hover:text-foreground",
918
+ children: "Privacy Policy"
919
+ }
920
+ ),
921
+ "."
922
+ ] }),
923
+ /* @__PURE__ */ jsxs2("div", { className: "mt-4 flex items-center justify-center gap-1.5 text-[11px] text-muted-foreground", children: [
896
924
  /* @__PURE__ */ jsx2("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", opacity: "0.5", "aria-hidden": true, children: /* @__PURE__ */ jsx2("circle", { cx: "12", cy: "12", r: "10" }) }),
897
925
  "Powered by DeepSpace"
898
926
  ] })
@@ -3407,11 +3435,12 @@ function resolveFile(fileOrKey) {
3407
3435
  }
3408
3436
  function useR2Files(options) {
3409
3437
  const [isUploading, setIsUploading] = useState13(false);
3438
+ const scope = options?.scope ?? "self";
3410
3439
  const scopeParams = useMemo10(() => {
3411
3440
  const params = new URLSearchParams();
3412
- params.set("scope", "self");
3441
+ params.set("scope", scope);
3413
3442
  return params.toString();
3414
- }, []);
3443
+ }, [scope]);
3415
3444
  const authHeaders = useCallback15(async () => {
3416
3445
  const token = await getAuthToken();
3417
3446
  if (token) {
@@ -6243,9 +6272,109 @@ function ToastItem({ toast, onDismiss }) {
6243
6272
  );
6244
6273
  }
6245
6274
 
6275
+ // src/ui/ErrorBoundary.tsx
6276
+ import { AlertTriangle, RefreshCw } from "lucide-react";
6277
+ import { jsx as jsx29, jsxs as jsxs11 } from "react/jsx-runtime";
6278
+ var REACT_ERROR_TABLE = {
6279
+ 300: {
6280
+ title: "A component changed how many hooks it runs",
6281
+ explanation: "This component called fewer hooks than it did on its previous render.",
6282
+ hint: "Almost always an early return placed above a hook. Move every hook (useState, useEffect, useQuery, \u2026) above any conditional return so the same hooks run in the same order on every render."
6283
+ },
6284
+ 310: {
6285
+ title: "A component changed how many hooks it runs",
6286
+ explanation: "This component called more hooks than it did on its previous render.",
6287
+ hint: "Almost always an early return placed above a hook. Move every hook (useState, useEffect, useQuery, \u2026) above any conditional return so the same hooks run in the same order on every render."
6288
+ },
6289
+ 301: {
6290
+ title: "Too many re-renders",
6291
+ explanation: "React hit its render limit because the component updated state while rendering, which triggers an infinite render loop.",
6292
+ hint: "Don\u2019t call setState (or a mutation) directly in the render body. Move it into an event handler or an effect with the right dependencies."
6293
+ },
6294
+ 321: {
6295
+ title: "A hook was called in an invalid place",
6296
+ explanation: "Hooks can only be called at the top level of a function component or another hook.",
6297
+ hint: "Move the hook out of any condition, loop, callback, or plain (non-component) function. This can also mean two copies of React are installed."
6298
+ }
6299
+ };
6300
+ function extractReactErrorCode(message) {
6301
+ const patterns = [/react\.dev\/errors\/(\d+)/, /invariant=(\d+)/, /Minified React error #(\d+)/];
6302
+ for (const re of patterns) {
6303
+ const match = message.match(re);
6304
+ if (match) return Number(match[1]);
6305
+ }
6306
+ return null;
6307
+ }
6308
+ function errorMessage(error) {
6309
+ if (typeof error === "string") return error;
6310
+ if (error instanceof Error) return error.message;
6311
+ return null;
6312
+ }
6313
+ function decodeReactError(error) {
6314
+ const message = errorMessage(error);
6315
+ if (!message) return null;
6316
+ const code = extractReactErrorCode(message);
6317
+ if (code == null) return null;
6318
+ const known = REACT_ERROR_TABLE[code];
6319
+ return {
6320
+ code,
6321
+ docsUrl: `https://react.dev/errors/${code}`,
6322
+ title: known?.title ?? `React error #${code}`,
6323
+ explanation: known?.explanation ?? "React stopped rendering because of an error.",
6324
+ hint: known?.hint ?? "Run the app in development (npm run dev) to see the full, unminified message and the component that failed."
6325
+ };
6326
+ }
6327
+ function ErrorScreen({ error, onReset }) {
6328
+ const decoded = decodeReactError(error);
6329
+ const rawMessage = error instanceof Error ? error.message : typeof error === "string" ? error : "";
6330
+ const stack = error instanceof Error ? error.stack : void 0;
6331
+ const reset = onReset ?? (() => window.location.reload());
6332
+ return /* @__PURE__ */ jsx29(
6333
+ "div",
6334
+ {
6335
+ "data-testid": "ds-error-boundary",
6336
+ className: "flex h-full min-h-[60vh] flex-col items-center justify-center bg-background px-4 py-10 text-foreground",
6337
+ children: /* @__PURE__ */ jsxs11("div", { className: "w-full max-w-lg text-center", children: [
6338
+ /* @__PURE__ */ jsx29("div", { className: "mb-4 flex justify-center", children: /* @__PURE__ */ jsx29("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-full bg-destructive/10 text-destructive", children: /* @__PURE__ */ jsx29(AlertTriangle, { className: "h-6 w-6", "aria-hidden": true }) }) }),
6339
+ /* @__PURE__ */ jsx29("h1", { className: "text-lg font-semibold tracking-tight", children: decoded?.title ?? "Something went wrong" }),
6340
+ decoded?.explanation && /* @__PURE__ */ jsx29("p", { className: "mt-1.5 text-sm text-muted-foreground", children: decoded.explanation }),
6341
+ decoded?.hint && /* @__PURE__ */ jsxs11(Alert, { variant: "warning", className: "mt-4 text-left", children: [
6342
+ /* @__PURE__ */ jsx29(AlertTitle, { children: "How to fix" }),
6343
+ /* @__PURE__ */ jsx29(AlertDescription, { children: decoded.hint })
6344
+ ] }),
6345
+ rawMessage && /* @__PURE__ */ jsx29("pre", { className: "mt-4 overflow-x-auto rounded-lg border bg-muted/40 px-3 py-2 text-left text-xs text-muted-foreground", children: rawMessage }),
6346
+ stack && /* @__PURE__ */ jsxs11("details", { className: "mt-2 text-left", children: [
6347
+ /* @__PURE__ */ jsx29("summary", { className: "cursor-pointer text-xs text-muted-foreground", children: "Show stack trace" }),
6348
+ /* @__PURE__ */ jsx29("pre", { className: "mt-1 max-h-60 overflow-auto rounded-lg border bg-muted/40 px-3 py-2 text-xs text-muted-foreground", children: stack })
6349
+ ] }),
6350
+ /* @__PURE__ */ jsxs11("div", { className: "mt-6 flex items-center justify-center gap-3", children: [
6351
+ /* @__PURE__ */ jsxs11(Button, { onClick: reset, children: [
6352
+ /* @__PURE__ */ jsx29(RefreshCw, { className: "h-4 w-4", "aria-hidden": true }),
6353
+ "Reload"
6354
+ ] }),
6355
+ decoded && /* @__PURE__ */ jsxs11(
6356
+ "a",
6357
+ {
6358
+ href: decoded.docsUrl,
6359
+ target: "_blank",
6360
+ rel: "noreferrer",
6361
+ className: "text-sm text-muted-foreground underline-offset-4 hover:underline",
6362
+ children: [
6363
+ "React error #",
6364
+ decoded.code,
6365
+ " reference"
6366
+ ]
6367
+ }
6368
+ )
6369
+ ] })
6370
+ ] })
6371
+ }
6372
+ );
6373
+ }
6374
+
6246
6375
  // src/ui/EmptyState.tsx
6247
6376
  import { FileText, Search, Inbox, Plus, FolderOpen, Users, AlertCircle } from "lucide-react";
6248
- import { jsx as jsx29, jsxs as jsxs11 } from "react/jsx-runtime";
6377
+ import { jsx as jsx30, jsxs as jsxs12 } from "react/jsx-runtime";
6249
6378
  function EmptyState({
6250
6379
  icon,
6251
6380
  title,
@@ -6255,23 +6384,23 @@ function EmptyState({
6255
6384
  className = "",
6256
6385
  ...rest
6257
6386
  }) {
6258
- return /* @__PURE__ */ jsxs11("div", { className: cn("flex flex-col items-center justify-center py-16 px-4 text-center", className), ...rest, children: [
6259
- icon && /* @__PURE__ */ jsx29("div", { className: "w-16 h-16 rounded-2xl bg-muted/50 border border-border flex items-center justify-center mb-5", children: /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: icon }) }),
6260
- /* @__PURE__ */ jsx29("h3", { className: "text-lg font-semibold text-foreground mb-2", children: title }),
6261
- description && /* @__PURE__ */ jsx29("p", { className: "text-muted-foreground text-sm max-w-sm mb-6", children: description }),
6262
- (action || secondaryAction) && /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-3", children: [
6263
- action && /* @__PURE__ */ jsxs11(
6387
+ return /* @__PURE__ */ jsxs12("div", { className: cn("flex flex-col items-center justify-center py-16 px-4 text-center", className), ...rest, children: [
6388
+ icon && /* @__PURE__ */ jsx30("div", { className: "w-16 h-16 rounded-2xl bg-muted/50 border border-border flex items-center justify-center mb-5", children: /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: icon }) }),
6389
+ /* @__PURE__ */ jsx30("h3", { className: "text-lg font-semibold text-foreground mb-2", children: title }),
6390
+ description && /* @__PURE__ */ jsx30("p", { className: "text-muted-foreground text-sm max-w-sm mb-6", children: description }),
6391
+ (action || secondaryAction) && /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-3", children: [
6392
+ action && /* @__PURE__ */ jsxs12(
6264
6393
  "button",
6265
6394
  {
6266
6395
  onClick: action.onClick,
6267
6396
  className: "inline-flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-lg font-medium text-sm hover:bg-primary/90 shadow-lg shadow-primary/25 transition-all",
6268
6397
  children: [
6269
- /* @__PURE__ */ jsx29(Plus, { className: "w-4 h-4" }),
6398
+ /* @__PURE__ */ jsx30(Plus, { className: "w-4 h-4" }),
6270
6399
  action.label
6271
6400
  ]
6272
6401
  }
6273
6402
  ),
6274
- secondaryAction && /* @__PURE__ */ jsx29(
6403
+ secondaryAction && /* @__PURE__ */ jsx30(
6275
6404
  "button",
6276
6405
  {
6277
6406
  onClick: secondaryAction.onClick,
@@ -6283,10 +6412,10 @@ function EmptyState({
6283
6412
  ] });
6284
6413
  }
6285
6414
  function EmptyItems({ action, className }) {
6286
- return /* @__PURE__ */ jsx29(
6415
+ return /* @__PURE__ */ jsx30(
6287
6416
  EmptyState,
6288
6417
  {
6289
- icon: /* @__PURE__ */ jsx29(Inbox, { className: "w-8 h-8" }),
6418
+ icon: /* @__PURE__ */ jsx30(Inbox, { className: "w-8 h-8" }),
6290
6419
  title: "No items yet",
6291
6420
  description: "Get started by creating your first item.",
6292
6421
  action: action ? { label: action.label, onClick: action.onClick } : void 0,
@@ -6295,10 +6424,10 @@ function EmptyItems({ action, className }) {
6295
6424
  );
6296
6425
  }
6297
6426
  function EmptySearch({ query, onClear, className }) {
6298
- return /* @__PURE__ */ jsx29(
6427
+ return /* @__PURE__ */ jsx30(
6299
6428
  EmptyState,
6300
6429
  {
6301
- icon: /* @__PURE__ */ jsx29(Search, { className: "w-8 h-8" }),
6430
+ icon: /* @__PURE__ */ jsx30(Search, { className: "w-8 h-8" }),
6302
6431
  title: "No results found",
6303
6432
  description: query ? `No results for "${query}". Try a different search term.` : "Try adjusting your search or filters.",
6304
6433
  secondaryAction: onClear ? { label: "Clear search", onClick: onClear } : void 0,
@@ -6307,10 +6436,10 @@ function EmptySearch({ query, onClear, className }) {
6307
6436
  );
6308
6437
  }
6309
6438
  function EmptyDocuments({ action, className }) {
6310
- return /* @__PURE__ */ jsx29(
6439
+ return /* @__PURE__ */ jsx30(
6311
6440
  EmptyState,
6312
6441
  {
6313
- icon: /* @__PURE__ */ jsx29(FileText, { className: "w-8 h-8" }),
6442
+ icon: /* @__PURE__ */ jsx30(FileText, { className: "w-8 h-8" }),
6314
6443
  title: "No documents",
6315
6444
  description: "Create a document to start writing.",
6316
6445
  action: action ? { label: action.label, onClick: action.onClick } : void 0,
@@ -6319,10 +6448,10 @@ function EmptyDocuments({ action, className }) {
6319
6448
  );
6320
6449
  }
6321
6450
  function EmptyProjects({ action, className }) {
6322
- return /* @__PURE__ */ jsx29(
6451
+ return /* @__PURE__ */ jsx30(
6323
6452
  EmptyState,
6324
6453
  {
6325
- icon: /* @__PURE__ */ jsx29(FolderOpen, { className: "w-8 h-8" }),
6454
+ icon: /* @__PURE__ */ jsx30(FolderOpen, { className: "w-8 h-8" }),
6326
6455
  title: "No projects",
6327
6456
  description: "Create a project to organize your work.",
6328
6457
  action: action ? { label: action.label, onClick: action.onClick } : void 0,
@@ -6331,10 +6460,10 @@ function EmptyProjects({ action, className }) {
6331
6460
  );
6332
6461
  }
6333
6462
  function EmptyTeam({ action, className }) {
6334
- return /* @__PURE__ */ jsx29(
6463
+ return /* @__PURE__ */ jsx30(
6335
6464
  EmptyState,
6336
6465
  {
6337
- icon: /* @__PURE__ */ jsx29(Users, { className: "w-8 h-8" }),
6466
+ icon: /* @__PURE__ */ jsx30(Users, { className: "w-8 h-8" }),
6338
6467
  title: "No team members",
6339
6468
  description: "Invite people to collaborate with you.",
6340
6469
  action: action ? { label: action.label, onClick: action.onClick } : void 0,
@@ -6343,10 +6472,10 @@ function EmptyTeam({ action, className }) {
6343
6472
  );
6344
6473
  }
6345
6474
  function EmptyError({ error, onRetry, className }) {
6346
- return /* @__PURE__ */ jsx29(
6475
+ return /* @__PURE__ */ jsx30(
6347
6476
  EmptyState,
6348
6477
  {
6349
- icon: /* @__PURE__ */ jsx29(AlertCircle, { className: "w-8 h-8 text-destructive" }),
6478
+ icon: /* @__PURE__ */ jsx30(AlertCircle, { className: "w-8 h-8 text-destructive" }),
6350
6479
  title: "Something went wrong",
6351
6480
  description: error || "An error occurred. Please try again.",
6352
6481
  action: onRetry ? { label: "Try again", onClick: onRetry } : void 0,
@@ -6359,12 +6488,12 @@ function EmptyError({ error, onRetry, className }) {
6359
6488
  import * as React22 from "react";
6360
6489
  import * as DialogPrimitive from "@radix-ui/react-dialog";
6361
6490
  import { X } from "lucide-react";
6362
- import { jsx as jsx30, jsxs as jsxs12 } from "react/jsx-runtime";
6491
+ import { jsx as jsx31, jsxs as jsxs13 } from "react/jsx-runtime";
6363
6492
  var Dialog = DialogPrimitive.Root;
6364
6493
  var DialogTrigger = DialogPrimitive.Trigger;
6365
6494
  var DialogPortal = DialogPrimitive.Portal;
6366
6495
  var DialogClose = DialogPrimitive.Close;
6367
- var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
6496
+ var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
6368
6497
  DialogPrimitive.Overlay,
6369
6498
  {
6370
6499
  ref,
@@ -6376,9 +6505,9 @@ var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__P
6376
6505
  }
6377
6506
  ));
6378
6507
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
6379
- var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs12(DialogPortal, { children: [
6380
- /* @__PURE__ */ jsx30(DialogOverlay, {}),
6381
- /* @__PURE__ */ jsxs12(
6508
+ var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(DialogPortal, { children: [
6509
+ /* @__PURE__ */ jsx31(DialogOverlay, {}),
6510
+ /* @__PURE__ */ jsxs13(
6382
6511
  DialogPrimitive.Content,
6383
6512
  {
6384
6513
  ref,
@@ -6389,9 +6518,9 @@ var DialogContent = React22.forwardRef(({ className, children, ...props }, ref)
6389
6518
  ...props,
6390
6519
  children: [
6391
6520
  children,
6392
- /* @__PURE__ */ jsxs12(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
6393
- /* @__PURE__ */ jsx30(X, { className: "h-4 w-4" }),
6394
- /* @__PURE__ */ jsx30("span", { className: "sr-only", children: "Close" })
6521
+ /* @__PURE__ */ jsxs13(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
6522
+ /* @__PURE__ */ jsx31(X, { className: "h-4 w-4" }),
6523
+ /* @__PURE__ */ jsx31("span", { className: "sr-only", children: "Close" })
6395
6524
  ] })
6396
6525
  ]
6397
6526
  }
@@ -6401,7 +6530,7 @@ DialogContent.displayName = DialogPrimitive.Content.displayName;
6401
6530
  var DialogHeader = ({
6402
6531
  className,
6403
6532
  ...props
6404
- }) => /* @__PURE__ */ jsx30(
6533
+ }) => /* @__PURE__ */ jsx31(
6405
6534
  "div",
6406
6535
  {
6407
6536
  className: cn(
@@ -6415,7 +6544,7 @@ DialogHeader.displayName = "DialogHeader";
6415
6544
  var DialogFooter = ({
6416
6545
  className,
6417
6546
  ...props
6418
- }) => /* @__PURE__ */ jsx30(
6547
+ }) => /* @__PURE__ */ jsx31(
6419
6548
  "div",
6420
6549
  {
6421
6550
  className: cn(
@@ -6426,7 +6555,7 @@ var DialogFooter = ({
6426
6555
  }
6427
6556
  );
6428
6557
  DialogFooter.displayName = "DialogFooter";
6429
- var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
6558
+ var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
6430
6559
  DialogPrimitive.Title,
6431
6560
  {
6432
6561
  ref,
@@ -6438,7 +6567,7 @@ var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PUR
6438
6567
  }
6439
6568
  ));
6440
6569
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
6441
- var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
6570
+ var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
6442
6571
  DialogPrimitive.Description,
6443
6572
  {
6444
6573
  ref,
@@ -6452,14 +6581,14 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
6452
6581
  import * as React23 from "react";
6453
6582
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
6454
6583
  import { Check as Check3, ChevronRight, Circle } from "lucide-react";
6455
- import { jsx as jsx31, jsxs as jsxs13 } from "react/jsx-runtime";
6584
+ import { jsx as jsx32, jsxs as jsxs14 } from "react/jsx-runtime";
6456
6585
  var DropdownMenu = DropdownMenuPrimitive.Root;
6457
6586
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
6458
6587
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
6459
6588
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
6460
6589
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
6461
6590
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
6462
- var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
6591
+ var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
6463
6592
  DropdownMenuPrimitive.SubTrigger,
6464
6593
  {
6465
6594
  ref,
@@ -6471,12 +6600,12 @@ var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, .
6471
6600
  ...props,
6472
6601
  children: [
6473
6602
  children,
6474
- /* @__PURE__ */ jsx31(ChevronRight, { className: "ml-auto" })
6603
+ /* @__PURE__ */ jsx32(ChevronRight, { className: "ml-auto" })
6475
6604
  ]
6476
6605
  }
6477
6606
  ));
6478
6607
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
6479
- var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
6608
+ var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
6480
6609
  DropdownMenuPrimitive.SubContent,
6481
6610
  {
6482
6611
  ref,
@@ -6488,7 +6617,7 @@ var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) =
6488
6617
  }
6489
6618
  ));
6490
6619
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
6491
- var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx31(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx31(
6620
+ var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx32(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx32(
6492
6621
  DropdownMenuPrimitive.Content,
6493
6622
  {
6494
6623
  ref,
@@ -6502,7 +6631,7 @@ var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...pr
6502
6631
  }
6503
6632
  ) }));
6504
6633
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
6505
- var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx31(
6634
+ var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx32(
6506
6635
  DropdownMenuPrimitive.Item,
6507
6636
  {
6508
6637
  ref,
@@ -6515,7 +6644,7 @@ var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref)
6515
6644
  }
6516
6645
  ));
6517
6646
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
6518
- var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs13(
6647
+ var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs14(
6519
6648
  DropdownMenuPrimitive.CheckboxItem,
6520
6649
  {
6521
6650
  ref,
@@ -6526,13 +6655,13 @@ var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checke
6526
6655
  checked,
6527
6656
  ...props,
6528
6657
  children: [
6529
- /* @__PURE__ */ jsx31("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx31(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx31(Check3, { className: "h-4 w-4" }) }) }),
6658
+ /* @__PURE__ */ jsx32("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx32(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx32(Check3, { className: "h-4 w-4" }) }) }),
6530
6659
  children
6531
6660
  ]
6532
6661
  }
6533
6662
  ));
6534
6663
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
6535
- var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(
6664
+ var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
6536
6665
  DropdownMenuPrimitive.RadioItem,
6537
6666
  {
6538
6667
  ref,
@@ -6542,13 +6671,13 @@ var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props
6542
6671
  ),
6543
6672
  ...props,
6544
6673
  children: [
6545
- /* @__PURE__ */ jsx31("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx31(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx31(Circle, { className: "h-2 w-2 fill-current" }) }) }),
6674
+ /* @__PURE__ */ jsx32("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx32(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx32(Circle, { className: "h-2 w-2 fill-current" }) }) }),
6546
6675
  children
6547
6676
  ]
6548
6677
  }
6549
6678
  ));
6550
6679
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
6551
- var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx31(
6680
+ var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx32(
6552
6681
  DropdownMenuPrimitive.Label,
6553
6682
  {
6554
6683
  ref,
@@ -6561,7 +6690,7 @@ var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref)
6561
6690
  }
6562
6691
  ));
6563
6692
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
6564
- var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
6693
+ var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
6565
6694
  DropdownMenuPrimitive.Separator,
6566
6695
  {
6567
6696
  ref,
@@ -6574,7 +6703,7 @@ var DropdownMenuShortcut = ({
6574
6703
  className,
6575
6704
  ...props
6576
6705
  }) => {
6577
- return /* @__PURE__ */ jsx31(
6706
+ return /* @__PURE__ */ jsx32(
6578
6707
  "span",
6579
6708
  {
6580
6709
  className: cn("ml-auto text-xs tracking-widest opacity-60", className),
@@ -6587,11 +6716,11 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
6587
6716
  // src/ui/Tooltip.tsx
6588
6717
  import * as React24 from "react";
6589
6718
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
6590
- import { jsx as jsx32 } from "react/jsx-runtime";
6719
+ import { jsx as jsx33 } from "react/jsx-runtime";
6591
6720
  var TooltipProvider = TooltipPrimitive.Provider;
6592
6721
  var Tooltip = TooltipPrimitive.Root;
6593
6722
  var TooltipTrigger = TooltipPrimitive.Trigger;
6594
- var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx32(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx32(
6723
+ var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx33(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx33(
6595
6724
  TooltipPrimitive.Content,
6596
6725
  {
6597
6726
  ref,
@@ -6606,7 +6735,7 @@ var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }
6606
6735
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
6607
6736
 
6608
6737
  // src/ui/Modal.tsx
6609
- import { jsx as jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
6738
+ import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
6610
6739
  function Modal({
6611
6740
  open,
6612
6741
  onClose,
@@ -6620,24 +6749,24 @@ function Modal({
6620
6749
  lg: "max-w-[calc(100vw-2rem)] sm:max-w-2xl",
6621
6750
  xl: "max-w-[calc(100vw-2rem)] sm:max-w-4xl"
6622
6751
  };
6623
- return /* @__PURE__ */ jsx33(Dialog, { open, onOpenChange: (v) => {
6752
+ return /* @__PURE__ */ jsx34(Dialog, { open, onOpenChange: (v) => {
6624
6753
  if (!v) onClose();
6625
- }, children: /* @__PURE__ */ jsx33(DialogContent, { "aria-describedby": void 0, className: cn(sizes[size], "flex flex-col max-h-[85vh]", className), children }) });
6754
+ }, children: /* @__PURE__ */ jsx34(DialogContent, { "aria-describedby": void 0, className: cn(sizes[size], "flex flex-col max-h-[85vh]", className), children }) });
6626
6755
  }
6627
6756
  function ModalHeader({ children, className = "" }) {
6628
- return /* @__PURE__ */ jsx33(DialogHeader, { className, children });
6757
+ return /* @__PURE__ */ jsx34(DialogHeader, { className, children });
6629
6758
  }
6630
6759
  function ModalTitle({ children, className = "" }) {
6631
- return /* @__PURE__ */ jsx33(DialogTitle, { className, children });
6760
+ return /* @__PURE__ */ jsx34(DialogTitle, { className, children });
6632
6761
  }
6633
6762
  function ModalDescription({ children, className = "" }) {
6634
- return /* @__PURE__ */ jsx33(DialogDescription, { className, children });
6763
+ return /* @__PURE__ */ jsx34(DialogDescription, { className, children });
6635
6764
  }
6636
6765
  function ModalBody({ children, className = "" }) {
6637
- return /* @__PURE__ */ jsx33("div", { className: cn("flex-1 overflow-y-auto py-4", className), children });
6766
+ return /* @__PURE__ */ jsx34("div", { className: cn("flex-1 overflow-y-auto py-4", className), children });
6638
6767
  }
6639
6768
  function ModalFooter({ children, className = "" }) {
6640
- return /* @__PURE__ */ jsx33(DialogFooter, { className, children });
6769
+ return /* @__PURE__ */ jsx34(DialogFooter, { className, children });
6641
6770
  }
6642
6771
  function ConfirmModal({
6643
6772
  open,
@@ -6650,14 +6779,14 @@ function ConfirmModal({
6650
6779
  variant = "destructive",
6651
6780
  loading = false
6652
6781
  }) {
6653
- return /* @__PURE__ */ jsxs14(Modal, { open, onClose, size: "sm", children: [
6654
- /* @__PURE__ */ jsxs14(Modal.Header, { children: [
6655
- /* @__PURE__ */ jsx33(Modal.Title, { children: title }),
6656
- description && /* @__PURE__ */ jsx33(Modal.Description, { children: description })
6782
+ return /* @__PURE__ */ jsxs15(Modal, { open, onClose, size: "sm", children: [
6783
+ /* @__PURE__ */ jsxs15(Modal.Header, { children: [
6784
+ /* @__PURE__ */ jsx34(Modal.Title, { children: title }),
6785
+ description && /* @__PURE__ */ jsx34(Modal.Description, { children: description })
6657
6786
  ] }),
6658
- /* @__PURE__ */ jsxs14(Modal.Footer, { children: [
6659
- /* @__PURE__ */ jsx33(Button, { variant: "ghost", onClick: onClose, disabled: loading, children: cancelText }),
6660
- /* @__PURE__ */ jsx33(Button, { variant, onClick: onConfirm, loading, children: confirmText })
6787
+ /* @__PURE__ */ jsxs15(Modal.Footer, { children: [
6788
+ /* @__PURE__ */ jsx34(Button, { variant: "ghost", onClick: onClose, disabled: loading, children: cancelText }),
6789
+ /* @__PURE__ */ jsx34(Button, { variant, onClick: onConfirm, loading, children: confirmText })
6661
6790
  ] })
6662
6791
  ] });
6663
6792
  }
@@ -6670,12 +6799,12 @@ Modal.Footer = ModalFooter;
6670
6799
  // src/ui/SearchInput.tsx
6671
6800
  import * as React25 from "react";
6672
6801
  import { Search as Search2, X as X2 } from "lucide-react";
6673
- import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
6802
+ import { jsx as jsx35, jsxs as jsxs16 } from "react/jsx-runtime";
6674
6803
  var SearchInput = React25.forwardRef(
6675
6804
  ({ className, onClear, value, ...props }, ref) => {
6676
- return /* @__PURE__ */ jsxs15("div", { className: "relative", children: [
6677
- /* @__PURE__ */ jsx34(Search2, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
6678
- /* @__PURE__ */ jsx34(
6805
+ return /* @__PURE__ */ jsxs16("div", { className: "relative", children: [
6806
+ /* @__PURE__ */ jsx35(Search2, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
6807
+ /* @__PURE__ */ jsx35(
6679
6808
  Input,
6680
6809
  {
6681
6810
  ref,
@@ -6685,13 +6814,13 @@ var SearchInput = React25.forwardRef(
6685
6814
  ...props
6686
6815
  }
6687
6816
  ),
6688
- value && onClear && /* @__PURE__ */ jsx34(
6817
+ value && onClear && /* @__PURE__ */ jsx35(
6689
6818
  "button",
6690
6819
  {
6691
6820
  type: "button",
6692
6821
  onClick: onClear,
6693
6822
  className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground hover:text-foreground transition-colors",
6694
- children: /* @__PURE__ */ jsx34(X2, { className: "h-4 w-4" })
6823
+ children: /* @__PURE__ */ jsx35(X2, { className: "h-4 w-4" })
6695
6824
  }
6696
6825
  )
6697
6826
  ] });
@@ -6756,6 +6885,7 @@ export {
6756
6885
  EmptySearch,
6757
6886
  EmptyState,
6758
6887
  EmptyTeam,
6888
+ ErrorScreen,
6759
6889
  GridCard,
6760
6890
  GuestBanner,
6761
6891
  Input,
@@ -6832,6 +6962,7 @@ export {
6832
6962
  createDecoder,
6833
6963
  createEncoder,
6834
6964
  decodeAiStreamChunk,
6965
+ decodeReactError,
6835
6966
  detectEnvironment,
6836
6967
  dispatch,
6837
6968
  encode,