deepspace 0.4.1 → 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/cli.js +145 -20
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +38 -1
- package/dist/index.js +171 -69
- package/dist/index.js.map +1 -1
- package/dist/testing.d.ts +115 -0
- package/features/file-attachments/feature.json +1 -0
- package/features/file-attachments/src/useFilePreview.ts +1 -1
- package/features/integration-test/src/IntegrationTestPage.tsx +1 -0
- package/features/integration-test/src/integration.spec.ts +14 -5
- package/features/messaging/src/components/chat/MessageList.tsx +1 -1
- package/features/presence-test/src/PresenceTestPage.tsx +1 -1
- package/features/search-bar/feature.json +34 -0
- package/features/search-bar/src/SearchOverlay.tsx +710 -0
- package/features/testing/src/subrequest-burn-action.ts +6 -3
- package/package.json +1 -1
- package/scripts/add-feature.cjs +5 -4
package/dist/index.d.ts
CHANGED
|
@@ -7447,6 +7447,43 @@ interface ToastProviderProps {
|
|
|
7447
7447
|
}
|
|
7448
7448
|
declare function ToastProvider({ children, position, maxToasts, }: ToastProviderProps): React__default.ReactElement;
|
|
7449
7449
|
|
|
7450
|
+
/**
|
|
7451
|
+
* Error decoding + a friendly error screen.
|
|
7452
|
+
*
|
|
7453
|
+
* Production React replaces error text with a numeric code and a docs link
|
|
7454
|
+
* (e.g. `Minified React error #310`), so a developer whose app crashes in a
|
|
7455
|
+
* deployed build sees only the number. `decodeReactError` turns that number
|
|
7456
|
+
* back into a plain-English explanation; `ErrorScreen` renders it. The most
|
|
7457
|
+
* common offenders are the hook-order errors (#300 / #310), which almost
|
|
7458
|
+
* always mean a hook was placed after an early `return`.
|
|
7459
|
+
*/
|
|
7460
|
+
interface DecodedReactError {
|
|
7461
|
+
code: number;
|
|
7462
|
+
title: string;
|
|
7463
|
+
explanation: string;
|
|
7464
|
+
hint: string;
|
|
7465
|
+
docsUrl: string;
|
|
7466
|
+
}
|
|
7467
|
+
/**
|
|
7468
|
+
* Decode a (possibly minified) React error into a friendly explanation, or
|
|
7469
|
+
* `null` if it isn't a recognizable React error — in which case the caller
|
|
7470
|
+
* should just show the raw message.
|
|
7471
|
+
*/
|
|
7472
|
+
declare function decodeReactError(error: unknown): DecodedReactError | null;
|
|
7473
|
+
interface ErrorScreenProps {
|
|
7474
|
+
/** The thrown value, as caught by an error boundary (often non-Error). */
|
|
7475
|
+
error: unknown;
|
|
7476
|
+
/** Recovery action. Defaults to a full page reload. */
|
|
7477
|
+
onReset?: () => void;
|
|
7478
|
+
}
|
|
7479
|
+
/**
|
|
7480
|
+
* A self-contained crash screen. Renders standalone — it replaces the app
|
|
7481
|
+
* shell when used as a root error boundary, so it must not depend on app
|
|
7482
|
+
* providers (toasts, auth, theme context). It reuses only context-free
|
|
7483
|
+
* primitives and reads its colors from the active theme's CSS variables.
|
|
7484
|
+
*/
|
|
7485
|
+
declare function ErrorScreen({ error, onReset }: ErrorScreenProps): react_jsx_runtime.JSX.Element;
|
|
7486
|
+
|
|
7450
7487
|
interface EmptyStateProps extends React__default.HTMLAttributes<HTMLDivElement> {
|
|
7451
7488
|
icon?: ReactNode;
|
|
7452
7489
|
title: string;
|
|
@@ -7595,4 +7632,4 @@ interface SearchInputProps extends Omit<React$1.ComponentProps<'input'>, 'type'>
|
|
|
7595
7632
|
}
|
|
7596
7633
|
declare const SearchInput: React$1.ForwardRefExoticComponent<Omit<SearchInputProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
|
|
7597
7634
|
|
|
7598
|
-
export { type AdHocChargeOpts, type AiStreamAction, type AiStreamChunk, Alert, AlertDescription, AlertTitle, AuthGate, type AuthGateProps, AuthOverlay, Avatar, AvatarFallback, AvatarImage, Awareness, type AwarenessState, type AwarenessStates, Badge, type BadgeProps, type BaseMessage, Button, type ButtonProps, type CanvasShapeClient, Card, CardContent, CardDescription, CardFooter, CardGrid, CardHeader, CardTitle, type Channel, type ChannelInvitation, type ChannelMember, type ChargeOnceOpts, type ChargeOnceResult, Checkbox, type ClientMessage, type CollectionSchema, ConfirmModal, type ConnectionAttachment, type ConnectionStatus, type ContentSegment, type ConversationObject, type CronHistoryEntry, type CronTaskState, DEEPSPACE_THEME_PROPERTIES, DEFAULT_USER_COLORS, DeepSpaceAuthProvider, type DeepSpaceThemeConfig, DeepSpaceThemeProvider, type DeepSpaceThemeProviderProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENV, EmptyDocuments, EmptyError, EmptyItems, EmptyProjects, EmptySearch, EmptyState, EmptyTeam, type Environment, type FetchUserProfile, type FileAttachment, type GamePlayer, GridCard, type GroupedReaction, GuestBanner, type HandlerContext, type InboxEntry, Input, type IntegrationResponse, type JobStatusView, type JobView, Label, type LinkPreviewData, LoadingOverlay, LoadingSpinner, MSG, MSG_AWARENESS, MSG_SYNC, MSG_SYNC_STEP1, MSG_SYNC_STEP2, MSG_SYNC_UPDATE, MSG_YJS_AWARENESS, MSG_YJS_SYNC, type MemberRecord, type Message, type MessageHandlers, type MessageRecord, Modal, type MsgType, type PlanInfo, PlatformContext, type PlatformContextValue, PlatformProvider, type PlatformWSOptions, type PlatformWSResult, type PresencePeerClient, PricingTable, type PricingTablePlan, type PricingTablePrice, type ProductChargeOpts, Progress, type ProtocolMessage, type Purchase, type Query, type R2FileInfo, type R2Scope, type R2UploadResult, ROLES, ROLE_ADMIN, ROLE_ANONYMOUS, ROLE_CONFIG, ROLE_DEFAULT, type Reaction, type ReactionRecord, type ReadCursorRecord, type ReadReceipt, type RecordData, RecordProvider, type RecordProviderProps, RecordScope, type RequestOptions, type Role, type RoomUser, type ScopeEntry, ScopeRegistryProvider, SearchInput, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, type ServerMessage, SignedIn, SignedOut, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonList, SkeletonTable, SkeletonText, type SubscribeOpts, type SubscribeResult, type SubscriptionState, type SubscriptionStatus, Switch, type SyncResult, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ToastProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseCanvasResult, type UseCheckoutOpts, type UseCronMonitorResult, type UseGameRoomResult, type UseJobsResult, type UsePresenceRoomResult, type UseR2FilesReturn, type UseYjsFieldResult, type UseYjsRoomResult, type UseYjsTextResult, type User, type UserCredits, type UserInfo, type UserKarma, type UserProfile, type ViewportClient, applyDeepSpaceTheme, applyUIThemeTokens, authClient, badgeVariants, buttonVariants, clearAuthToken, clearDeepSpaceTheme, clientBuild, cn, createDecoder, createEncoder, decodeAiStreamChunk, detectEnvironment, dispatch, encode, encodeAwarenessMessage, encodeSyncStep1, encodeSyncStep2, encodeUpdate, formatFileSize, formatFullTimestamp, formatMessageTime, getApiUrl, getAuthToken, getAuthUrl, getConversationDisplayName, getConversationParticipantIds, getEnvironmentConfig, getMessageType, getPlatformWorkerUrl, getThreadCounts, getUserColor, groupReactionsForMessage, handleAwarenessMessage, handleSyncMessage, hasContent, integration, isDMConversation, isDarkColor, isImageFile, isLocalDev, isProduction, parseMessageMetadata, parseSseLine, readThemeFromDOM, readVarUint, readVarUint8Array, resetEnvironmentCache, serverBuild, shouldGroupMessages, signIn, signOut, toConnectionStatus, toUint8Array, useAuth, useAuthUser, useCanvas, useChannelMembers, useChannels, useCheckout, useCommunities, useConversation, useConversations, useCronMonitor, useDisplayName, useGameRoom, useInbox, useIsDarkTheme, useJobs, useMessages, useMutations, usePlatform, usePlatformWS, usePosts, usePresence, usePresenceRoom, useQuery, useR2Files, useReactions, useReadReceipts, useRecordContext, useSession, useSubscription, useToast, useUser, useUserLookup, useUsers, useYjsField, useYjsRoom, useYjsText, writeVarUint, writeVarUint8Array };
|
|
7635
|
+
export { type AdHocChargeOpts, type AiStreamAction, type AiStreamChunk, Alert, AlertDescription, AlertTitle, AuthGate, type AuthGateProps, AuthOverlay, Avatar, AvatarFallback, AvatarImage, Awareness, type AwarenessState, type AwarenessStates, Badge, type BadgeProps, type BaseMessage, Button, type ButtonProps, type CanvasShapeClient, Card, CardContent, CardDescription, CardFooter, CardGrid, CardHeader, CardTitle, type Channel, type ChannelInvitation, type ChannelMember, type ChargeOnceOpts, type ChargeOnceResult, Checkbox, type ClientMessage, type CollectionSchema, ConfirmModal, type ConnectionAttachment, type ConnectionStatus, type ContentSegment, type ConversationObject, type CronHistoryEntry, type CronTaskState, DEEPSPACE_THEME_PROPERTIES, DEFAULT_USER_COLORS, type DecodedReactError, DeepSpaceAuthProvider, type DeepSpaceThemeConfig, DeepSpaceThemeProvider, type DeepSpaceThemeProviderProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENV, EmptyDocuments, EmptyError, EmptyItems, EmptyProjects, EmptySearch, EmptyState, EmptyTeam, type Environment, ErrorScreen, type ErrorScreenProps, type FetchUserProfile, type FileAttachment, type GamePlayer, GridCard, type GroupedReaction, GuestBanner, type HandlerContext, type InboxEntry, Input, type IntegrationResponse, type JobStatusView, type JobView, Label, type LinkPreviewData, LoadingOverlay, LoadingSpinner, MSG, MSG_AWARENESS, MSG_SYNC, MSG_SYNC_STEP1, MSG_SYNC_STEP2, MSG_SYNC_UPDATE, MSG_YJS_AWARENESS, MSG_YJS_SYNC, type MemberRecord, type Message, type MessageHandlers, type MessageRecord, Modal, type MsgType, type PlanInfo, PlatformContext, type PlatformContextValue, PlatformProvider, type PlatformWSOptions, type PlatformWSResult, type PresencePeerClient, PricingTable, type PricingTablePlan, type PricingTablePrice, type ProductChargeOpts, Progress, type ProtocolMessage, type Purchase, type Query, type R2FileInfo, type R2Scope, type R2UploadResult, ROLES, ROLE_ADMIN, ROLE_ANONYMOUS, ROLE_CONFIG, ROLE_DEFAULT, type Reaction, type ReactionRecord, type ReadCursorRecord, type ReadReceipt, type RecordData, RecordProvider, type RecordProviderProps, RecordScope, type RequestOptions, type Role, type RoomUser, type ScopeEntry, ScopeRegistryProvider, SearchInput, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, type ServerMessage, SignedIn, SignedOut, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonList, SkeletonTable, SkeletonText, type SubscribeOpts, type SubscribeResult, type SubscriptionState, type SubscriptionStatus, Switch, type SyncResult, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ToastProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type UseCanvasResult, type UseCheckoutOpts, type UseCronMonitorResult, type UseGameRoomResult, type UseJobsResult, type UsePresenceRoomResult, type UseR2FilesReturn, type UseYjsFieldResult, type UseYjsRoomResult, type UseYjsTextResult, type User, type UserCredits, type UserInfo, type UserKarma, type UserProfile, type ViewportClient, applyDeepSpaceTheme, applyUIThemeTokens, authClient, badgeVariants, buttonVariants, clearAuthToken, clearDeepSpaceTheme, clientBuild, cn, createDecoder, createEncoder, decodeAiStreamChunk, decodeReactError, detectEnvironment, dispatch, encode, encodeAwarenessMessage, encodeSyncStep1, encodeSyncStep2, encodeUpdate, formatFileSize, formatFullTimestamp, formatMessageTime, getApiUrl, getAuthToken, getAuthUrl, getConversationDisplayName, getConversationParticipantIds, getEnvironmentConfig, getMessageType, getPlatformWorkerUrl, getThreadCounts, getUserColor, groupReactionsForMessage, handleAwarenessMessage, handleSyncMessage, hasContent, integration, isDMConversation, isDarkColor, isImageFile, isLocalDev, isProduction, parseMessageMetadata, parseSseLine, readThemeFromDOM, readVarUint, readVarUint8Array, resetEnvironmentCache, serverBuild, shouldGroupMessages, signIn, signOut, toConnectionStatus, toUint8Array, useAuth, useAuthUser, useCanvas, useChannelMembers, useChannels, useCheckout, useCommunities, useConversation, useConversations, useCronMonitor, useDisplayName, useGameRoom, useInbox, useIsDarkTheme, useJobs, useMessages, useMutations, usePlatform, usePlatformWS, usePosts, usePresence, usePresenceRoom, useQuery, useR2Files, useReactions, useReadReceipts, useRecordContext, useSession, useSubscription, useToast, useUser, useUserLookup, useUsers, useYjsField, useYjsRoom, useYjsText, writeVarUint, writeVarUint8Array };
|
package/dist/index.js
CHANGED
|
@@ -6272,9 +6272,109 @@ function ToastItem({ toast, onDismiss }) {
|
|
|
6272
6272
|
);
|
|
6273
6273
|
}
|
|
6274
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
|
+
|
|
6275
6375
|
// src/ui/EmptyState.tsx
|
|
6276
6376
|
import { FileText, Search, Inbox, Plus, FolderOpen, Users, AlertCircle } from "lucide-react";
|
|
6277
|
-
import { jsx as
|
|
6377
|
+
import { jsx as jsx30, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
6278
6378
|
function EmptyState({
|
|
6279
6379
|
icon,
|
|
6280
6380
|
title,
|
|
@@ -6284,23 +6384,23 @@ function EmptyState({
|
|
|
6284
6384
|
className = "",
|
|
6285
6385
|
...rest
|
|
6286
6386
|
}) {
|
|
6287
|
-
return /* @__PURE__ */
|
|
6288
|
-
icon && /* @__PURE__ */
|
|
6289
|
-
/* @__PURE__ */
|
|
6290
|
-
description && /* @__PURE__ */
|
|
6291
|
-
(action || secondaryAction) && /* @__PURE__ */
|
|
6292
|
-
action && /* @__PURE__ */
|
|
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(
|
|
6293
6393
|
"button",
|
|
6294
6394
|
{
|
|
6295
6395
|
onClick: action.onClick,
|
|
6296
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",
|
|
6297
6397
|
children: [
|
|
6298
|
-
/* @__PURE__ */
|
|
6398
|
+
/* @__PURE__ */ jsx30(Plus, { className: "w-4 h-4" }),
|
|
6299
6399
|
action.label
|
|
6300
6400
|
]
|
|
6301
6401
|
}
|
|
6302
6402
|
),
|
|
6303
|
-
secondaryAction && /* @__PURE__ */
|
|
6403
|
+
secondaryAction && /* @__PURE__ */ jsx30(
|
|
6304
6404
|
"button",
|
|
6305
6405
|
{
|
|
6306
6406
|
onClick: secondaryAction.onClick,
|
|
@@ -6312,10 +6412,10 @@ function EmptyState({
|
|
|
6312
6412
|
] });
|
|
6313
6413
|
}
|
|
6314
6414
|
function EmptyItems({ action, className }) {
|
|
6315
|
-
return /* @__PURE__ */
|
|
6415
|
+
return /* @__PURE__ */ jsx30(
|
|
6316
6416
|
EmptyState,
|
|
6317
6417
|
{
|
|
6318
|
-
icon: /* @__PURE__ */
|
|
6418
|
+
icon: /* @__PURE__ */ jsx30(Inbox, { className: "w-8 h-8" }),
|
|
6319
6419
|
title: "No items yet",
|
|
6320
6420
|
description: "Get started by creating your first item.",
|
|
6321
6421
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -6324,10 +6424,10 @@ function EmptyItems({ action, className }) {
|
|
|
6324
6424
|
);
|
|
6325
6425
|
}
|
|
6326
6426
|
function EmptySearch({ query, onClear, className }) {
|
|
6327
|
-
return /* @__PURE__ */
|
|
6427
|
+
return /* @__PURE__ */ jsx30(
|
|
6328
6428
|
EmptyState,
|
|
6329
6429
|
{
|
|
6330
|
-
icon: /* @__PURE__ */
|
|
6430
|
+
icon: /* @__PURE__ */ jsx30(Search, { className: "w-8 h-8" }),
|
|
6331
6431
|
title: "No results found",
|
|
6332
6432
|
description: query ? `No results for "${query}". Try a different search term.` : "Try adjusting your search or filters.",
|
|
6333
6433
|
secondaryAction: onClear ? { label: "Clear search", onClick: onClear } : void 0,
|
|
@@ -6336,10 +6436,10 @@ function EmptySearch({ query, onClear, className }) {
|
|
|
6336
6436
|
);
|
|
6337
6437
|
}
|
|
6338
6438
|
function EmptyDocuments({ action, className }) {
|
|
6339
|
-
return /* @__PURE__ */
|
|
6439
|
+
return /* @__PURE__ */ jsx30(
|
|
6340
6440
|
EmptyState,
|
|
6341
6441
|
{
|
|
6342
|
-
icon: /* @__PURE__ */
|
|
6442
|
+
icon: /* @__PURE__ */ jsx30(FileText, { className: "w-8 h-8" }),
|
|
6343
6443
|
title: "No documents",
|
|
6344
6444
|
description: "Create a document to start writing.",
|
|
6345
6445
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -6348,10 +6448,10 @@ function EmptyDocuments({ action, className }) {
|
|
|
6348
6448
|
);
|
|
6349
6449
|
}
|
|
6350
6450
|
function EmptyProjects({ action, className }) {
|
|
6351
|
-
return /* @__PURE__ */
|
|
6451
|
+
return /* @__PURE__ */ jsx30(
|
|
6352
6452
|
EmptyState,
|
|
6353
6453
|
{
|
|
6354
|
-
icon: /* @__PURE__ */
|
|
6454
|
+
icon: /* @__PURE__ */ jsx30(FolderOpen, { className: "w-8 h-8" }),
|
|
6355
6455
|
title: "No projects",
|
|
6356
6456
|
description: "Create a project to organize your work.",
|
|
6357
6457
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -6360,10 +6460,10 @@ function EmptyProjects({ action, className }) {
|
|
|
6360
6460
|
);
|
|
6361
6461
|
}
|
|
6362
6462
|
function EmptyTeam({ action, className }) {
|
|
6363
|
-
return /* @__PURE__ */
|
|
6463
|
+
return /* @__PURE__ */ jsx30(
|
|
6364
6464
|
EmptyState,
|
|
6365
6465
|
{
|
|
6366
|
-
icon: /* @__PURE__ */
|
|
6466
|
+
icon: /* @__PURE__ */ jsx30(Users, { className: "w-8 h-8" }),
|
|
6367
6467
|
title: "No team members",
|
|
6368
6468
|
description: "Invite people to collaborate with you.",
|
|
6369
6469
|
action: action ? { label: action.label, onClick: action.onClick } : void 0,
|
|
@@ -6372,10 +6472,10 @@ function EmptyTeam({ action, className }) {
|
|
|
6372
6472
|
);
|
|
6373
6473
|
}
|
|
6374
6474
|
function EmptyError({ error, onRetry, className }) {
|
|
6375
|
-
return /* @__PURE__ */
|
|
6475
|
+
return /* @__PURE__ */ jsx30(
|
|
6376
6476
|
EmptyState,
|
|
6377
6477
|
{
|
|
6378
|
-
icon: /* @__PURE__ */
|
|
6478
|
+
icon: /* @__PURE__ */ jsx30(AlertCircle, { className: "w-8 h-8 text-destructive" }),
|
|
6379
6479
|
title: "Something went wrong",
|
|
6380
6480
|
description: error || "An error occurred. Please try again.",
|
|
6381
6481
|
action: onRetry ? { label: "Try again", onClick: onRetry } : void 0,
|
|
@@ -6388,12 +6488,12 @@ function EmptyError({ error, onRetry, className }) {
|
|
|
6388
6488
|
import * as React22 from "react";
|
|
6389
6489
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
6390
6490
|
import { X } from "lucide-react";
|
|
6391
|
-
import { jsx as
|
|
6491
|
+
import { jsx as jsx31, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
6392
6492
|
var Dialog = DialogPrimitive.Root;
|
|
6393
6493
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
6394
6494
|
var DialogPortal = DialogPrimitive.Portal;
|
|
6395
6495
|
var DialogClose = DialogPrimitive.Close;
|
|
6396
|
-
var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6496
|
+
var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6397
6497
|
DialogPrimitive.Overlay,
|
|
6398
6498
|
{
|
|
6399
6499
|
ref,
|
|
@@ -6405,9 +6505,9 @@ var DialogOverlay = React22.forwardRef(({ className, ...props }, ref) => /* @__P
|
|
|
6405
6505
|
}
|
|
6406
6506
|
));
|
|
6407
6507
|
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
6408
|
-
var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
6409
|
-
/* @__PURE__ */
|
|
6410
|
-
/* @__PURE__ */
|
|
6508
|
+
var DialogContent = React22.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs13(DialogPortal, { children: [
|
|
6509
|
+
/* @__PURE__ */ jsx31(DialogOverlay, {}),
|
|
6510
|
+
/* @__PURE__ */ jsxs13(
|
|
6411
6511
|
DialogPrimitive.Content,
|
|
6412
6512
|
{
|
|
6413
6513
|
ref,
|
|
@@ -6418,9 +6518,9 @@ var DialogContent = React22.forwardRef(({ className, children, ...props }, ref)
|
|
|
6418
6518
|
...props,
|
|
6419
6519
|
children: [
|
|
6420
6520
|
children,
|
|
6421
|
-
/* @__PURE__ */
|
|
6422
|
-
/* @__PURE__ */
|
|
6423
|
-
/* @__PURE__ */
|
|
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" })
|
|
6424
6524
|
] })
|
|
6425
6525
|
]
|
|
6426
6526
|
}
|
|
@@ -6430,7 +6530,7 @@ DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
|
6430
6530
|
var DialogHeader = ({
|
|
6431
6531
|
className,
|
|
6432
6532
|
...props
|
|
6433
|
-
}) => /* @__PURE__ */
|
|
6533
|
+
}) => /* @__PURE__ */ jsx31(
|
|
6434
6534
|
"div",
|
|
6435
6535
|
{
|
|
6436
6536
|
className: cn(
|
|
@@ -6444,7 +6544,7 @@ DialogHeader.displayName = "DialogHeader";
|
|
|
6444
6544
|
var DialogFooter = ({
|
|
6445
6545
|
className,
|
|
6446
6546
|
...props
|
|
6447
|
-
}) => /* @__PURE__ */
|
|
6547
|
+
}) => /* @__PURE__ */ jsx31(
|
|
6448
6548
|
"div",
|
|
6449
6549
|
{
|
|
6450
6550
|
className: cn(
|
|
@@ -6455,7 +6555,7 @@ var DialogFooter = ({
|
|
|
6455
6555
|
}
|
|
6456
6556
|
);
|
|
6457
6557
|
DialogFooter.displayName = "DialogFooter";
|
|
6458
|
-
var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6558
|
+
var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6459
6559
|
DialogPrimitive.Title,
|
|
6460
6560
|
{
|
|
6461
6561
|
ref,
|
|
@@ -6467,7 +6567,7 @@ var DialogTitle = React22.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
6467
6567
|
}
|
|
6468
6568
|
));
|
|
6469
6569
|
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
6470
|
-
var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6570
|
+
var DialogDescription = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
|
|
6471
6571
|
DialogPrimitive.Description,
|
|
6472
6572
|
{
|
|
6473
6573
|
ref,
|
|
@@ -6481,14 +6581,14 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
|
6481
6581
|
import * as React23 from "react";
|
|
6482
6582
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
6483
6583
|
import { Check as Check3, ChevronRight, Circle } from "lucide-react";
|
|
6484
|
-
import { jsx as
|
|
6584
|
+
import { jsx as jsx32, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
6485
6585
|
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
6486
6586
|
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
6487
6587
|
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
6488
6588
|
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
6489
6589
|
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
6490
6590
|
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
6491
|
-
var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */
|
|
6591
|
+
var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
|
|
6492
6592
|
DropdownMenuPrimitive.SubTrigger,
|
|
6493
6593
|
{
|
|
6494
6594
|
ref,
|
|
@@ -6500,12 +6600,12 @@ var DropdownMenuSubTrigger = React23.forwardRef(({ className, inset, children, .
|
|
|
6500
6600
|
...props,
|
|
6501
6601
|
children: [
|
|
6502
6602
|
children,
|
|
6503
|
-
/* @__PURE__ */
|
|
6603
|
+
/* @__PURE__ */ jsx32(ChevronRight, { className: "ml-auto" })
|
|
6504
6604
|
]
|
|
6505
6605
|
}
|
|
6506
6606
|
));
|
|
6507
6607
|
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
6508
|
-
var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6608
|
+
var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
|
|
6509
6609
|
DropdownMenuPrimitive.SubContent,
|
|
6510
6610
|
{
|
|
6511
6611
|
ref,
|
|
@@ -6517,7 +6617,7 @@ var DropdownMenuSubContent = React23.forwardRef(({ className, ...props }, ref) =
|
|
|
6517
6617
|
}
|
|
6518
6618
|
));
|
|
6519
6619
|
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
6520
|
-
var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */
|
|
6620
|
+
var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx32(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx32(
|
|
6521
6621
|
DropdownMenuPrimitive.Content,
|
|
6522
6622
|
{
|
|
6523
6623
|
ref,
|
|
@@ -6531,7 +6631,7 @@ var DropdownMenuContent = React23.forwardRef(({ className, sideOffset = 4, ...pr
|
|
|
6531
6631
|
}
|
|
6532
6632
|
) }));
|
|
6533
6633
|
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
6534
|
-
var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */
|
|
6634
|
+
var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx32(
|
|
6535
6635
|
DropdownMenuPrimitive.Item,
|
|
6536
6636
|
{
|
|
6537
6637
|
ref,
|
|
@@ -6544,7 +6644,7 @@ var DropdownMenuItem = React23.forwardRef(({ className, inset, ...props }, ref)
|
|
|
6544
6644
|
}
|
|
6545
6645
|
));
|
|
6546
6646
|
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
6547
|
-
var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */
|
|
6647
|
+
var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs14(
|
|
6548
6648
|
DropdownMenuPrimitive.CheckboxItem,
|
|
6549
6649
|
{
|
|
6550
6650
|
ref,
|
|
@@ -6555,13 +6655,13 @@ var DropdownMenuCheckboxItem = React23.forwardRef(({ className, children, checke
|
|
|
6555
6655
|
checked,
|
|
6556
6656
|
...props,
|
|
6557
6657
|
children: [
|
|
6558
|
-
/* @__PURE__ */
|
|
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" }) }) }),
|
|
6559
6659
|
children
|
|
6560
6660
|
]
|
|
6561
6661
|
}
|
|
6562
6662
|
));
|
|
6563
6663
|
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
6564
|
-
var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
6664
|
+
var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs14(
|
|
6565
6665
|
DropdownMenuPrimitive.RadioItem,
|
|
6566
6666
|
{
|
|
6567
6667
|
ref,
|
|
@@ -6571,13 +6671,13 @@ var DropdownMenuRadioItem = React23.forwardRef(({ className, children, ...props
|
|
|
6571
6671
|
),
|
|
6572
6672
|
...props,
|
|
6573
6673
|
children: [
|
|
6574
|
-
/* @__PURE__ */
|
|
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" }) }) }),
|
|
6575
6675
|
children
|
|
6576
6676
|
]
|
|
6577
6677
|
}
|
|
6578
6678
|
));
|
|
6579
6679
|
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
6580
|
-
var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */
|
|
6680
|
+
var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx32(
|
|
6581
6681
|
DropdownMenuPrimitive.Label,
|
|
6582
6682
|
{
|
|
6583
6683
|
ref,
|
|
@@ -6590,7 +6690,7 @@ var DropdownMenuLabel = React23.forwardRef(({ className, inset, ...props }, ref)
|
|
|
6590
6690
|
}
|
|
6591
6691
|
));
|
|
6592
6692
|
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
6593
|
-
var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
6693
|
+
var DropdownMenuSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx32(
|
|
6594
6694
|
DropdownMenuPrimitive.Separator,
|
|
6595
6695
|
{
|
|
6596
6696
|
ref,
|
|
@@ -6603,7 +6703,7 @@ var DropdownMenuShortcut = ({
|
|
|
6603
6703
|
className,
|
|
6604
6704
|
...props
|
|
6605
6705
|
}) => {
|
|
6606
|
-
return /* @__PURE__ */
|
|
6706
|
+
return /* @__PURE__ */ jsx32(
|
|
6607
6707
|
"span",
|
|
6608
6708
|
{
|
|
6609
6709
|
className: cn("ml-auto text-xs tracking-widest opacity-60", className),
|
|
@@ -6616,11 +6716,11 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
|
6616
6716
|
// src/ui/Tooltip.tsx
|
|
6617
6717
|
import * as React24 from "react";
|
|
6618
6718
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
6619
|
-
import { jsx as
|
|
6719
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
6620
6720
|
var TooltipProvider = TooltipPrimitive.Provider;
|
|
6621
6721
|
var Tooltip = TooltipPrimitive.Root;
|
|
6622
6722
|
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
6623
|
-
var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */
|
|
6723
|
+
var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx33(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx33(
|
|
6624
6724
|
TooltipPrimitive.Content,
|
|
6625
6725
|
{
|
|
6626
6726
|
ref,
|
|
@@ -6635,7 +6735,7 @@ var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }
|
|
|
6635
6735
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
6636
6736
|
|
|
6637
6737
|
// src/ui/Modal.tsx
|
|
6638
|
-
import { jsx as
|
|
6738
|
+
import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
6639
6739
|
function Modal({
|
|
6640
6740
|
open,
|
|
6641
6741
|
onClose,
|
|
@@ -6649,24 +6749,24 @@ function Modal({
|
|
|
6649
6749
|
lg: "max-w-[calc(100vw-2rem)] sm:max-w-2xl",
|
|
6650
6750
|
xl: "max-w-[calc(100vw-2rem)] sm:max-w-4xl"
|
|
6651
6751
|
};
|
|
6652
|
-
return /* @__PURE__ */
|
|
6752
|
+
return /* @__PURE__ */ jsx34(Dialog, { open, onOpenChange: (v) => {
|
|
6653
6753
|
if (!v) onClose();
|
|
6654
|
-
}, children: /* @__PURE__ */
|
|
6754
|
+
}, children: /* @__PURE__ */ jsx34(DialogContent, { "aria-describedby": void 0, className: cn(sizes[size], "flex flex-col max-h-[85vh]", className), children }) });
|
|
6655
6755
|
}
|
|
6656
6756
|
function ModalHeader({ children, className = "" }) {
|
|
6657
|
-
return /* @__PURE__ */
|
|
6757
|
+
return /* @__PURE__ */ jsx34(DialogHeader, { className, children });
|
|
6658
6758
|
}
|
|
6659
6759
|
function ModalTitle({ children, className = "" }) {
|
|
6660
|
-
return /* @__PURE__ */
|
|
6760
|
+
return /* @__PURE__ */ jsx34(DialogTitle, { className, children });
|
|
6661
6761
|
}
|
|
6662
6762
|
function ModalDescription({ children, className = "" }) {
|
|
6663
|
-
return /* @__PURE__ */
|
|
6763
|
+
return /* @__PURE__ */ jsx34(DialogDescription, { className, children });
|
|
6664
6764
|
}
|
|
6665
6765
|
function ModalBody({ children, className = "" }) {
|
|
6666
|
-
return /* @__PURE__ */
|
|
6766
|
+
return /* @__PURE__ */ jsx34("div", { className: cn("flex-1 overflow-y-auto py-4", className), children });
|
|
6667
6767
|
}
|
|
6668
6768
|
function ModalFooter({ children, className = "" }) {
|
|
6669
|
-
return /* @__PURE__ */
|
|
6769
|
+
return /* @__PURE__ */ jsx34(DialogFooter, { className, children });
|
|
6670
6770
|
}
|
|
6671
6771
|
function ConfirmModal({
|
|
6672
6772
|
open,
|
|
@@ -6679,14 +6779,14 @@ function ConfirmModal({
|
|
|
6679
6779
|
variant = "destructive",
|
|
6680
6780
|
loading = false
|
|
6681
6781
|
}) {
|
|
6682
|
-
return /* @__PURE__ */
|
|
6683
|
-
/* @__PURE__ */
|
|
6684
|
-
/* @__PURE__ */
|
|
6685
|
-
description && /* @__PURE__ */
|
|
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 })
|
|
6686
6786
|
] }),
|
|
6687
|
-
/* @__PURE__ */
|
|
6688
|
-
/* @__PURE__ */
|
|
6689
|
-
/* @__PURE__ */
|
|
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 })
|
|
6690
6790
|
] })
|
|
6691
6791
|
] });
|
|
6692
6792
|
}
|
|
@@ -6699,12 +6799,12 @@ Modal.Footer = ModalFooter;
|
|
|
6699
6799
|
// src/ui/SearchInput.tsx
|
|
6700
6800
|
import * as React25 from "react";
|
|
6701
6801
|
import { Search as Search2, X as X2 } from "lucide-react";
|
|
6702
|
-
import { jsx as
|
|
6802
|
+
import { jsx as jsx35, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
6703
6803
|
var SearchInput = React25.forwardRef(
|
|
6704
6804
|
({ className, onClear, value, ...props }, ref) => {
|
|
6705
|
-
return /* @__PURE__ */
|
|
6706
|
-
/* @__PURE__ */
|
|
6707
|
-
/* @__PURE__ */
|
|
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(
|
|
6708
6808
|
Input,
|
|
6709
6809
|
{
|
|
6710
6810
|
ref,
|
|
@@ -6714,13 +6814,13 @@ var SearchInput = React25.forwardRef(
|
|
|
6714
6814
|
...props
|
|
6715
6815
|
}
|
|
6716
6816
|
),
|
|
6717
|
-
value && onClear && /* @__PURE__ */
|
|
6817
|
+
value && onClear && /* @__PURE__ */ jsx35(
|
|
6718
6818
|
"button",
|
|
6719
6819
|
{
|
|
6720
6820
|
type: "button",
|
|
6721
6821
|
onClick: onClear,
|
|
6722
6822
|
className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground hover:text-foreground transition-colors",
|
|
6723
|
-
children: /* @__PURE__ */
|
|
6823
|
+
children: /* @__PURE__ */ jsx35(X2, { className: "h-4 w-4" })
|
|
6724
6824
|
}
|
|
6725
6825
|
)
|
|
6726
6826
|
] });
|
|
@@ -6785,6 +6885,7 @@ export {
|
|
|
6785
6885
|
EmptySearch,
|
|
6786
6886
|
EmptyState,
|
|
6787
6887
|
EmptyTeam,
|
|
6888
|
+
ErrorScreen,
|
|
6788
6889
|
GridCard,
|
|
6789
6890
|
GuestBanner,
|
|
6790
6891
|
Input,
|
|
@@ -6861,6 +6962,7 @@ export {
|
|
|
6861
6962
|
createDecoder,
|
|
6862
6963
|
createEncoder,
|
|
6863
6964
|
decodeAiStreamChunk,
|
|
6965
|
+
decodeReactError,
|
|
6864
6966
|
detectEnvironment,
|
|
6865
6967
|
dispatch,
|
|
6866
6968
|
encode,
|