better-cmdk 0.0.20 → 0.0.22
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/README.md +43 -24
- package/dist/index.d.ts +25 -27
- package/dist/index.js +1 -1
- package/dist/nextjs/AGENTS.md +140 -71
- package/dist/remix/AGENTS.md +139 -70
- package/dist/tanstack-start/AGENTS.md +139 -70
- package/dist/vite/AGENTS.md +141 -70
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,45 +52,49 @@ Styles are isolated under `.bcmdk-root`. Override only the command menu tokens:
|
|
|
52
52
|
|
|
53
53
|
## Usage
|
|
54
54
|
|
|
55
|
-
The recommended way to use better-cmdk is with the declarative `
|
|
55
|
+
The recommended way to use better-cmdk is with the declarative `actions` prop.
|
|
56
56
|
|
|
57
57
|
```tsx
|
|
58
58
|
"use client";
|
|
59
59
|
|
|
60
60
|
import { useState, useEffect } from "react";
|
|
61
61
|
import { CalendarIcon, SearchIcon, UserIcon, SettingsIcon } from "lucide-react";
|
|
62
|
-
import { CommandMenu, type
|
|
62
|
+
import { CommandMenu, type CommandAction } from "better-cmdk";
|
|
63
63
|
|
|
64
|
-
const
|
|
64
|
+
const actions: CommandAction[] = [
|
|
65
65
|
{
|
|
66
66
|
name: "calendar",
|
|
67
67
|
label: "Calendar",
|
|
68
|
+
description: "Open calendar view",
|
|
68
69
|
icon: <CalendarIcon className="size-4" />,
|
|
69
70
|
group: "Suggestions",
|
|
70
|
-
|
|
71
|
+
execute: () => console.log("Calendar selected"),
|
|
71
72
|
},
|
|
72
73
|
{
|
|
73
74
|
name: "search",
|
|
74
75
|
label: "Search",
|
|
76
|
+
description: "Open search view",
|
|
75
77
|
icon: <SearchIcon className="size-4" />,
|
|
76
78
|
group: "Suggestions",
|
|
77
|
-
|
|
79
|
+
execute: () => console.log("Search selected"),
|
|
78
80
|
},
|
|
79
81
|
{
|
|
80
82
|
name: "profile",
|
|
81
83
|
label: "Profile",
|
|
84
|
+
description: "Open profile settings",
|
|
82
85
|
icon: <UserIcon className="size-4" />,
|
|
83
86
|
group: "Settings",
|
|
84
87
|
shortcut: "⌘P",
|
|
85
|
-
|
|
88
|
+
execute: () => console.log("Profile selected"),
|
|
86
89
|
},
|
|
87
90
|
{
|
|
88
91
|
name: "settings",
|
|
89
92
|
label: "Settings",
|
|
93
|
+
description: "Open settings page",
|
|
90
94
|
icon: <SettingsIcon className="size-4" />,
|
|
91
95
|
group: "Settings",
|
|
92
96
|
shortcut: "⌘S",
|
|
93
|
-
|
|
97
|
+
execute: () => console.log("Settings selected"),
|
|
94
98
|
},
|
|
95
99
|
];
|
|
96
100
|
|
|
@@ -113,40 +117,50 @@ export function CommandPalette() {
|
|
|
113
117
|
<CommandMenu
|
|
114
118
|
open={open}
|
|
115
119
|
onOpenChange={setOpen}
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
actions={actions}
|
|
121
|
+
actionsPlaceholder="Search or ask AI..."
|
|
118
122
|
/>
|
|
119
123
|
);
|
|
120
124
|
}
|
|
121
125
|
```
|
|
122
126
|
|
|
123
|
-
###
|
|
127
|
+
### CommandAction
|
|
124
128
|
|
|
125
|
-
Each
|
|
129
|
+
Each action in the `actions` array supports:
|
|
126
130
|
|
|
127
131
|
| Property | Type | Description |
|
|
128
132
|
|----------|------|-------------|
|
|
129
133
|
| `name` | `string` | **Required.** Unique key used for search matching |
|
|
130
134
|
| `label` | `string` | Display text (falls back to `name`) |
|
|
131
|
-
| `
|
|
135
|
+
| `description` | `string` | **Required.** Action description used by AI/tooling |
|
|
136
|
+
| `group` | `string` | Group heading — actions with the same group appear together |
|
|
132
137
|
| `icon` | `ReactNode` | Icon rendered before the label |
|
|
133
138
|
| `shortcut` | `string` | Keyboard shortcut hint (right-aligned) |
|
|
134
139
|
| `keywords` | `string[]` | Extra search terms |
|
|
140
|
+
| `semanticKey` | `string` | Optional operation identity for overlap detection |
|
|
141
|
+
| `inputSchema` | `Record<string, { type; description?; required? }>` | Optional argument schema for AI-routed actions |
|
|
142
|
+
| `approvalRequired` | `boolean` | Optional approval flag (used by external providers) |
|
|
135
143
|
| `disabled` | `boolean` | Grayed out, not selectable |
|
|
136
|
-
| `
|
|
144
|
+
| `execute` | `(options: Record<string, unknown>) => void` | **Required.** Execution handler |
|
|
145
|
+
| `onSelect` | `() => void` | Optional direct-selection override (ignored by modifywithai) |
|
|
146
|
+
|
|
147
|
+
When sharing one action array across libraries, each library ignores fields it does not use.
|
|
148
|
+
better-cmdk is command-focused and should primarily define no-argument actions (no `inputSchema`).
|
|
149
|
+
If modifywithai is also used, keep argument-requiring actions (`inputSchema`) in the same shared array.
|
|
150
|
+
If a shared standard `actions` array already exists, extend it in place instead of creating a second list.
|
|
137
151
|
|
|
138
152
|
### CommandMenu Props
|
|
139
153
|
|
|
140
154
|
| Prop | Type | Default | Description |
|
|
141
155
|
|------|------|---------|-------------|
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
156
|
+
| `actions` | `readonly CommandAction[]` | — | Declarative action definitions |
|
|
157
|
+
| `actionsPlaceholder` | `string` | `"Search or ask AI..."` | Input placeholder |
|
|
158
|
+
| `actionsAskAILabel` | `string` | `"Ask AI"` | Label for the AI trigger |
|
|
145
159
|
| `open` | `boolean` | — | Controlled open state |
|
|
146
160
|
| `onOpenChange` | `(open: boolean) => void` | — | Open state callback |
|
|
147
161
|
| `corners` | `"none" \| "sm" \| "md" \| "lg" \| "xl"` | `"xl"` | Border radius |
|
|
148
162
|
| `borderColor` | `string` | — | Custom ring color |
|
|
149
|
-
| `chatEndpoint` | `string` |
|
|
163
|
+
| `chatEndpoint` | `string \| null` | `"https://better-cmdk.com/api/chat"` | Built-in AI chat endpoint. Default is a developer trial service (10 requests per 10 minutes); set your own URL for production or `null` to disable. |
|
|
150
164
|
| `chat` | `ExternalChat` | — | External chat integration |
|
|
151
165
|
| `onModeChange` | `(mode: CommandMenuMode) => void` | — | Fires when switching between command/chat |
|
|
152
166
|
| `historyStorageKey` | `string` | — | localStorage key for chat history |
|
|
@@ -166,7 +180,7 @@ Each command in the `commands` array supports:
|
|
|
166
180
|
<CommandMenu
|
|
167
181
|
open={open}
|
|
168
182
|
onOpenChange={setOpen}
|
|
169
|
-
|
|
183
|
+
actions={actions}
|
|
170
184
|
mobile={{
|
|
171
185
|
enabled: true,
|
|
172
186
|
layout: "keyboard-last",
|
|
@@ -182,12 +196,17 @@ Each command in the `commands` array supports:
|
|
|
182
196
|
|
|
183
197
|
### AI Chat
|
|
184
198
|
|
|
185
|
-
|
|
199
|
+
By default, `CommandMenu` uses `https://better-cmdk.com/api/chat` as a developer trial service. It is free, requires no signup, and is rate-limited to 10 requests per 10 minutes.
|
|
200
|
+
|
|
201
|
+
For production, set `chatEndpoint` to your own chat URL, or pass an external `chat` object (for example via modifywithai when you need agentic action execution). You can disable built-in chat with `chatEndpoint={null}`.
|
|
186
202
|
|
|
187
203
|
```tsx
|
|
188
|
-
//
|
|
204
|
+
// Hosted developer-trial chat (default)
|
|
205
|
+
<CommandMenu actions={actions} open={open} onOpenChange={setOpen} />
|
|
206
|
+
|
|
207
|
+
// Custom built-in chat endpoint
|
|
189
208
|
<CommandMenu
|
|
190
|
-
|
|
209
|
+
actions={actions}
|
|
191
210
|
chatEndpoint="/api/chat"
|
|
192
211
|
open={open}
|
|
193
212
|
onOpenChange={setOpen}
|
|
@@ -195,7 +214,7 @@ Enable the built-in AI chat by providing either a `chatEndpoint` or an external
|
|
|
195
214
|
|
|
196
215
|
// External chat integration (e.g. Vercel AI SDK useChat)
|
|
197
216
|
<CommandMenu
|
|
198
|
-
|
|
217
|
+
actions={actions}
|
|
199
218
|
chat={externalChat}
|
|
200
219
|
open={open}
|
|
201
220
|
onOpenChange={setOpen}
|
|
@@ -210,9 +229,9 @@ When you connect an external chat provider like [modifywithai](https://modifywit
|
|
|
210
229
|
|
|
211
230
|
## Advanced: Custom Children
|
|
212
231
|
|
|
213
|
-
For full control over the command list rendering, you can pass children instead of `
|
|
232
|
+
For full control over the command list rendering, you can pass children instead of `actions`. This approach is compatible with shadcn/ui patterns if you're migrating from an existing setup.
|
|
214
233
|
|
|
215
|
-
> **Note:** When both `
|
|
234
|
+
> **Note:** When both `actions` and `children` are provided, `actions` takes precedence.
|
|
216
235
|
|
|
217
236
|
```tsx
|
|
218
237
|
"use client";
|
package/dist/index.d.ts
CHANGED
|
@@ -375,7 +375,7 @@ interface ExternalChat {
|
|
|
375
375
|
id: string;
|
|
376
376
|
approved: boolean;
|
|
377
377
|
}) => void;
|
|
378
|
-
|
|
378
|
+
actions?: readonly CommandAction[];
|
|
379
379
|
}
|
|
380
380
|
interface CommandMenuContextValue {
|
|
381
381
|
mode: CommandMenuMode;
|
|
@@ -395,7 +395,7 @@ interface CommandMenuContextValue {
|
|
|
395
395
|
id: string;
|
|
396
396
|
approved: boolean;
|
|
397
397
|
}) => void;
|
|
398
|
-
|
|
398
|
+
actions?: readonly CommandAction[];
|
|
399
399
|
requestClose?: () => void;
|
|
400
400
|
conversations: ChatConversation[];
|
|
401
401
|
currentConversationId: string | null;
|
|
@@ -462,12 +462,12 @@ interface CommandMenuProps extends Omit<React$2.ComponentProps<typeof Dialog>, "
|
|
|
462
462
|
maxConversations?: number;
|
|
463
463
|
/** Mobile-specific interaction + layout settings. */
|
|
464
464
|
mobile?: CommandMenuMobileOptions;
|
|
465
|
-
/** Declarative
|
|
466
|
-
|
|
467
|
-
/** Placeholder for the command input when using `
|
|
468
|
-
|
|
469
|
-
/** Label for the "Ask AI" trigger when using `
|
|
470
|
-
|
|
465
|
+
/** Declarative action definitions. Mutually exclusive with children. */
|
|
466
|
+
actions?: readonly CommandAction[];
|
|
467
|
+
/** Placeholder for the command input when using `actions` prop. */
|
|
468
|
+
actionsPlaceholder?: string;
|
|
469
|
+
/** Label for the "Ask AI" trigger when using `actions` prop. */
|
|
470
|
+
actionsAskAILabel?: string;
|
|
471
471
|
children?: React$2.ReactNode | ((context: {
|
|
472
472
|
mode: CommandMenuMode;
|
|
473
473
|
messages: UIMessage[];
|
|
@@ -499,9 +499,9 @@ declare function CommandMenu({
|
|
|
499
499
|
onOpenChange,
|
|
500
500
|
historyStorageKey,
|
|
501
501
|
maxConversations,
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
502
|
+
actions,
|
|
503
|
+
actionsPlaceholder,
|
|
504
|
+
actionsAskAILabel,
|
|
505
505
|
mobile,
|
|
506
506
|
...props
|
|
507
507
|
}: CommandMenuProps): react_jsx_runtime0.JSX.Element;
|
|
@@ -538,26 +538,17 @@ type CommandActionExecuteHandler<TOptions> = {
|
|
|
538
538
|
bivarianceHack(options: TOptions): void;
|
|
539
539
|
}["bivarianceHack"];
|
|
540
540
|
/**
|
|
541
|
-
*
|
|
542
|
-
*
|
|
543
|
-
* `execute` is kept for compatibility but is not invoked by better-cmdk.
|
|
541
|
+
* Unified action interface used by both declarative menu actions and external
|
|
542
|
+
* provider actions.
|
|
544
543
|
*/
|
|
545
544
|
interface CommandAction {
|
|
546
|
-
name: string;
|
|
547
|
-
label?: string;
|
|
548
|
-
options?: Partial<Record<string, CommandActionOption>>;
|
|
549
|
-
execute?: CommandActionExecuteHandler<Record<string, unknown>>;
|
|
550
|
-
}
|
|
551
|
-
/**
|
|
552
|
-
* Declarative command definition for the `commands` prop.
|
|
553
|
-
* Named CommandDefinition to avoid collision with cmdk's Command component.
|
|
554
|
-
*/
|
|
555
|
-
interface CommandDefinition {
|
|
556
545
|
/** Unique key used as cmdk value */
|
|
557
546
|
name: string;
|
|
558
547
|
/** Display text (falls back to name) */
|
|
559
548
|
label?: string;
|
|
560
|
-
/**
|
|
549
|
+
/** Action description used by AI/tooling. */
|
|
550
|
+
description: string;
|
|
551
|
+
/** Group heading — actions with the same string appear in the same group */
|
|
561
552
|
group?: string;
|
|
562
553
|
/** Icon rendered before the label */
|
|
563
554
|
icon?: React$2.ReactNode;
|
|
@@ -565,10 +556,17 @@ interface CommandDefinition {
|
|
|
565
556
|
shortcut?: string;
|
|
566
557
|
/** Extra cmdk search terms */
|
|
567
558
|
keywords?: string[];
|
|
559
|
+
/**
|
|
560
|
+
* Optional operation identity used to prevent overlapping actions.
|
|
561
|
+
* When omitted, `name` is used.
|
|
562
|
+
*/
|
|
563
|
+
semanticKey?: string;
|
|
568
564
|
/** Grayed out, not selectable */
|
|
569
565
|
disabled?: boolean;
|
|
570
|
-
/** Called when the
|
|
566
|
+
/** Called when the action is selected directly */
|
|
571
567
|
onSelect?: () => void;
|
|
568
|
+
/** Action execution callback. */
|
|
569
|
+
execute: CommandActionExecuteHandler<Record<string, unknown>>;
|
|
572
570
|
}
|
|
573
571
|
interface CommandListProps extends React$2.ComponentProps<typeof pkg.List> {
|
|
574
572
|
/** Actions to render as CommandItems. Compatible with ActionDefinition[]. */
|
|
@@ -720,4 +718,4 @@ declare function TaskContent({
|
|
|
720
718
|
...props
|
|
721
719
|
}: TaskContentProps): react_jsx_runtime0.JSX.Element;
|
|
722
720
|
//#endregion
|
|
723
|
-
export { AssistantFormRenderer, type AssistantFormRendererProps, AssistantMessages, type AssistantMessagesProps, Button, type ChatConversation, ChatEmpty, type ChatEmptyProps, ChatLoading, type ChatLoadingProps, ChatMessageList, type ChatMessageListProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, type CommandAction, type CommandActionOption, CommandContent,
|
|
721
|
+
export { AssistantFormRenderer, type AssistantFormRendererProps, AssistantMessages, type AssistantMessagesProps, Button, type ChatConversation, ChatEmpty, type ChatEmptyProps, ChatLoading, type ChatLoadingProps, ChatMessageList, type ChatMessageListProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, type CommandAction, type CommandActionOption, CommandContent, CommandMenu as CommandDialog, CommandMenu, CommandDialogContent, CommandEmpty, type CommandEmptyProps, CommandGroup, CommandInput, type CommandInputProps, CommandItem, CommandList, type CommandListProps, CommandMenuContext, type CommandMenuContextValue, type CommandMenuCorners, type CommandMenuMobileGesture, type CommandMenuMobileLayout, type CommandMenuMobileOptions, type CommandMenuMode, type CommandMenuProps, CommandMenuProvider, type CommandMenuProviderProps, type CommandMenuStatus, CommandSeparator, CommandShortcut, Confirmation, ConfirmationAccepted, type ConfirmationAcceptedProps, ConfirmationAction, type ConfirmationActionProps, ConfirmationActions, type ConfirmationActionsProps, type ConfirmationProps, ConfirmationRejected, type ConfirmationRejectedProps, ConfirmationRequest, type ConfirmationRequestProps, ConfirmationTitle, type ConfirmationTitleProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type ExternalChat, Kbd, KbdGroup, Message, MessageContent, type MessageContentProps, type MessageProps, MessageResponse, type MessageResponseProps, Task, TaskContent, type TaskContentProps, TaskItem, TaskItemFile, type TaskItemFileProps, type TaskItemProps, type TaskProps, TaskTrigger, type TaskTriggerProps, type ToolUIPartApproval, type UseChatHistoryOptions, type UseChatHistoryReturn, buttonVariants, cn, defaultFormRegistry, useChatHistory, useCommandMenuContext };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cn as e}from"./lib/utils.js";import{JSONUIProvider as t,Renderer as n,flatToTree as r}from"@json-render/react";import*as i from"react";import{createContext as a,memo as o,useCallback as s,useContext as c,useEffect as l,useMemo as u,useRef as d,useState as f}from"react";import{z as p}from"zod";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";import{Streamdown as _}from"streamdown";import{ArrowUpIcon as v,ChevronDownIcon as y,KeyboardIcon as b,LoaderIcon as x,MessageCircleIcon as S,SearchIcon as C,XIcon as w}from"lucide-react";import*as T from"@radix-ui/react-collapsible";import{cva as E}from"class-variance-authority";import{Dialog as D,Slot as O}from"radix-ui";import*as k from"@radix-ui/react-dialog";import{Primitive as A}from"@radix-ui/react-primitive";import{useId as j}from"@radix-ui/react-id";import{composeRefs as M}from"@radix-ui/react-compose-refs";import{useChat as N}from"@ai-sdk/react";import{DefaultChatTransport as ee}from"ai";import{BrowserClient as P,Scope as F,dedupeIntegration as I,defaultStackParser as L,linkedErrorsIntegration as te,makeFetchTransport as ne}from"@sentry/browser";import{motion as re}from"motion/react";const R=a(null);function z(){let e=c(R);if(!e)throw Error(`Confirmation components must be used within Confirmation`);return e}function ie({approval:t,state:n,style:r,...i}){return!t||n===`input-streaming`||n===`input-available`?null:h(R.Provider,{value:{approval:t,state:n},children:h(`div`,{"data-slot":`confirmation`,"data-state":n,"data-approved":t?.approved,role:`alertdialog`,"aria-labelledby":`confirmation-title`,style:{borderRadius:`var(--cmdk-radius, 0.5rem)`,...r},className:e(`flex flex-col gap-2 border p-4`,`data-[state=approval-requested]:border-amber-500/50 data-[state=approval-requested]:bg-amber-50/50 dark:data-[state=approval-requested]:bg-amber-950/20`,`data-[approved=true]:border-green-500/50 data-[approved=true]:bg-green-50/50 dark:data-[approved=true]:bg-green-950/20`,`data-[approved=false]:border-red-500/50 data-[approved=false]:bg-red-50/50 dark:data-[approved=false]:bg-red-950/20`),...i})})}function ae(e){return h(`p`,{id:`confirmation-title`,"data-slot":`confirmation-title`,className:`text-sm font-medium`,...e})}function oe({children:e}){let{state:t}=z();return t===`approval-requested`?h(`div`,{"data-slot":`confirmation-request`,children:e}):null}function se({children:e}){let{approval:t,state:n}=z();return!t?.approved||n!==`approval-responded`&&n!==`output-denied`&&n!==`output-available`?null:h(`div`,{"data-slot":`confirmation-accepted`,children:e})}function ce({children:e}){let{approval:t,state:n}=z();return t?.approved!==!1||n!==`approval-responded`&&n!==`output-denied`&&n!==`output-available`?null:h(`div`,{"data-slot":`confirmation-rejected`,children:e})}function le(e){let{state:t}=z();return t===`approval-requested`?h(`div`,{"data-slot":`confirmation-actions`,className:`flex items-center justify-end gap-2 self-end`,...e}):null}function ue({variant:t=`default`,style:n,...r}){return h(`button`,{"data-slot":`confirmation-action`,"data-variant":t,type:`button`,className:e(`inline-flex h-8 items-center justify-center gap-2 whitespace-nowrap px-3 text-sm font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`,t===`default`&&`bg-primary text-primary-foreground shadow hover:bg-primary/90`,t===`outline`&&`border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground`,t===`destructive`&&`bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90`),style:{borderRadius:`var(--cmdk-radius, 0.375rem)`,...n},...r})}function B(e){e.stopPropagation()}function de({element:t,children:n,onAction:r}){let{id:i=`form`,title:a,submitLabel:o=`Submit`}=t.props??{},s=e=>{e.preventDefault();let t=new FormData(e.currentTarget),n={};t.forEach((e,t)=>{typeof e==`string`&&(n[t]=e)}),r?.({name:`submit`,params:{formId:i,data:n}})};return g(`div`,{"data-slot":`form-card`,className:e(`w-full rounded-lg border bg-card text-card-foreground shadow-sm`),children:[a&&h(`div`,{className:`flex flex-col space-y-1.5 p-4 pb-3`,children:h(`h3`,{className:`text-base font-semibold leading-none tracking-tight`,children:a})}),h(`div`,{className:e(`p-4`,a?``:`pt-4`),children:g(`form`,{onSubmit:s,className:`space-y-4`,children:[n,g(`div`,{className:`flex justify-end gap-2 pt-2`,children:[h(`button`,{type:`button`,className:e(`inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium shadow-sm transition-colors`,`hover:bg-accent hover:text-accent-foreground`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`),onClick:()=>r?.({name:`cancel`,params:{formId:i}}),children:`Cancel`}),h(`button`,{type:`submit`,className:e(`inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow transition-colors`,`hover:bg-primary/90`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`),children:o})]})]})})]})}function fe({element:t}){let{name:n=`field`,label:r=`Field`,placeholder:i,required:a,defaultValue:o}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,a&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`input`,{id:n,name:n,type:`text`,placeholder:i,required:a,defaultValue:o,autoComplete:`off`,onKeyDown:B,onKeyUp:B,className:e(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}function pe({element:t}){let{name:n=`field`,label:r=`Field`,placeholder:i,required:a,defaultValue:o,rows:s=3}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,a&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`textarea`,{id:n,name:n,placeholder:i,required:a,defaultValue:o,rows:s,onKeyDown:B,onKeyUp:B,className:e(`flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}function me({element:t}){let{name:n=`date`,label:r=`Date`,required:i,defaultValue:a,min:o,max:s}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,i&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`input`,{type:`date`,id:n,name:n,required:i,defaultValue:a,min:o,max:s,onKeyDown:B,onKeyUp:B,className:e(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}const he={Form:de,TextField:fe,TextArea:pe,DateField:me},ge=p.object({formId:p.string(),data:p.record(p.string(),p.string())}),_e=p.object({formId:p.string()});function ve({ui:e,context:r,onSubmit:i,onCancel:a,registry:o=he}){let c=s(e=>{let t=ge.safeParse(e);t.success?i(t.data.formId,t.data.data):console.warn(`Form submit: Invalid params`,t.error.flatten())},[i]),l=s(e=>{let t=_e.safeParse(e);t.success?a?.(t.data.formId):console.warn(`Form cancel: Invalid params`,t.error.flatten())},[a]);return h(t,{registry:o,initialData:r,actionHandlers:u(()=>({submit:c,cancel:l}),[c,l]),children:h(n,{tree:e,registry:o})})}function ye({from:t,...n}){return h(`div`,{"data-slot":`message`,"data-from":t,className:e(`group flex w-full max-w-[95%] flex-col gap-2`,t===`user`?`is-user ml-auto justify-end`:`is-assistant`),...n})}function be({children:t,style:n,...r}){return h(`div`,{"data-slot":`message-content`,className:e(`flex w-fit min-w-0 max-w-full flex-col gap-2 overflow-hidden text-sm`,`group-[.is-user]:ml-auto group-[.is-user]:bg-secondary group-[.is-user]:px-4 group-[.is-user]:py-3 group-[.is-user]:text-foreground`,`group-[.is-assistant]:text-foreground`),style:{borderRadius:`var(--cmdk-radius, 0.5rem)`,...n},...r,children:t})}const xe=o(function(e){return h(_,{"data-slot":`message-response`,className:`size-full [&>*:first-child]:mt-0 [&>*:last-child]:mb-0`,...e})},(e,t)=>e.children===t.children);function Se({...e}){return h(T.Root,{"data-slot":`collapsible`,...e})}function Ce({...e}){return h(T.CollapsibleTrigger,{"data-slot":`collapsible-trigger`,...e})}function we({...e}){return h(T.CollapsibleContent,{"data-slot":`collapsible-content`,...e})}function Te({children:e,...t}){return h(`div`,{"data-slot":`task-item-file`,className:`inline-flex items-center gap-1 rounded-md border bg-secondary px-1.5 py-0.5 text-xs text-foreground`,...t,children:e})}function Ee({children:e,...t}){return h(`div`,{"data-slot":`task-item`,className:`text-sm text-muted-foreground`,...t,children:e})}function De({defaultOpen:e=!0,...t}){return h(Se,{"data-slot":`task`,defaultOpen:e,...t})}function Oe({children:e,title:t,icon:n,...r}){return h(Ce,{asChild:!0,className:`group`,...r,children:e??g(`div`,{className:`flex w-full cursor-pointer items-center gap-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:[n??h(C,{className:`size-4`}),h(`p`,{className:`text-sm`,children:t}),h(y,{className:`size-4 transition-transform group-data-[state=open]:rotate-180`})]})})}function ke({children:t,...n}){return h(we,{"data-slot":`task-content`,className:e(`text-popover-foreground outline-none`,`data-[state=closed]:animate-out data-[state=open]:animate-in`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2`),...n,children:h(`div`,{className:`mt-4 space-y-2 border-l-2 border-muted pl-4`,children:t})})}const Ae=p.object({name:p.string(),options:p.record(p.string(),p.unknown()).optional()}),je=p.object({actions:p.array(Ae).optional()}),Me=p.object({id:p.string(),approved:p.boolean().optional()}),Ne=p.object({type:p.string(),props:p.record(p.string(),p.unknown()).default({}),children:p.array(p.string()).optional(),parentKey:p.string().nullable().optional()}),Pe=p.object({ui:p.object({elements:p.record(p.string(),Ne)}),context:p.record(p.string(),p.unknown()).optional()});function Fe(e){return e.name}function Ie({messages:e,sendMessage:t,addToolApprovalResponse:n,getActionDescription:r=Fe}){let i=e.filter(e=>e.role===`user`||e.role===`assistant`);return h(m,{children:i.map((e,a)=>{let o=a===i.length-1;return h(ye,{from:e.role,children:h(be,{children:e.parts.map((i,a)=>h(Le,{part:i,messageId:e.id,partIndex:a,isLastMessage:o,sendMessage:t,addToolApprovalResponse:n,getActionDescription:r},`${e.id}-${a}`))})},e.id)})})}function Le({part:e,messageId:t,partIndex:n,isLastMessage:r,sendMessage:i,addToolApprovalResponse:a,getActionDescription:o}){if(e.type===`text`)return h(xe,{children:e.text});if(e.type===`tool-performActions`){let r=`input`in e?e.input:void 0,i=je.safeParse(r),s=i.success?i.data.actions??[]:[];if(s.length===0)return null;let c=s.length,l=`state`in e?e.state:void 0,u=`approval`in e?e.approval:void 0,d=Me.safeParse(u),f=d.success?d.data:void 0;return f&&l?g(ie,{state:l,approval:f,children:[h(ae,{children:c===1?`Confirm action`:`Confirm ${c} actions`}),h(oe,{children:h(`ul`,{className:`list-disc list-inside text-sm text-muted-foreground mt-2`,children:s.map((e,r)=>h(`li`,{children:o(e)},`${t}-${n}-${r}`))})}),h(se,{children:h(`span`,{className:`text-sm text-muted-foreground`,children:c===1?`Action approved`:`${c} actions approved`})}),h(ce,{children:h(`span`,{className:`text-sm text-muted-foreground`,children:c===1?`Action cancelled`:`${c} actions cancelled`})}),g(le,{children:[h(ue,{variant:`outline`,onClick:()=>a({id:f.id,approved:!1}),children:`Deny`}),h(ue,{onClick:()=>a({id:f.id,approved:!0}),children:`Approve`})]})]}):g(De,{defaultOpen:!1,children:[h(Oe,{title:c===1?`Performing 1 action`:`Performing ${c} actions`}),h(ke,{children:s.map((e,r)=>h(Ee,{children:o(e)},`${t}-${n}-${r}`))})]})}return e.type===`tool-renderUI`&&r&&(`state`in e?e.state:void 0)===`output-available`&&`output`in e?h(Re,{output:e.output,sendMessage:i}):null}function Re({output:e,sendMessage:t}){let n=i.useMemo(()=>{let t=Pe.safeParse(e);return t.success?{ui:r(Object.entries(t.data.ui.elements).map(([e,t])=>({...t,key:e}))),context:t.data.context}:null},[e]),a=i.useCallback((e,n)=>{t({text:`[Form:${e}] ${JSON.stringify(n)}`})},[t]),o=i.useCallback(e=>{t({text:`[Form:${e}] cancelled`})},[t]);return n?h(ve,{ui:n.ui,context:n.context,onSubmit:a,onCancel:o}):null}const ze=E(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function Be({className:t,variant:n=`default`,size:r=`default`,asChild:i=!1,...a}){return h(i?O.Root:`button`,{"data-slot":`button`,"data-variant":n,"data-size":r,className:e(ze({variant:n,size:r,className:t})),...a})}function Ve({children:t,className:n,...r}){let a=i.useRef(null);return i.useEffect(()=>{a.current&&(a.current.scrollTop=a.current.scrollHeight)},[t]),h(`div`,{ref:a,"data-slot":`chat-message-list`,className:e(`flex flex-col overflow-y-auto scroll-smooth`,n),...r,children:t})}function He({text:t=`AI is thinking...`,className:n,...r}){return g(`div`,{"data-slot":`chat-loading`,className:e(`flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground`,n),...r,children:[h(x,{className:`size-4 animate-spin`}),h(`span`,{children:t})]})}function Ue({title:t=`Start a conversation`,description:n=`Ask a question or describe what you need help with.`,className:r,...i}){return h(`div`,{"data-slot":`chat-empty`,className:e(`flex flex-col items-center justify-center gap-2 py-8 text-center`,r),...i,children:g(`div`,{className:`space-y-1`,children:[h(`h3`,{className:`text-sm font-medium`,children:t}),h(`p`,{className:`text-xs text-muted-foreground`,children:n})]})})}var We=1,Ge=.9,Ke=.8,qe=.17,Je=.1,Ye=.999,Xe=.9999,Ze=.99,Qe=/[\\\/_+.#"@\[\(\{&]/,$e=/[\\\/_+.#"@\[\(\{&]/g,et=/[\s-]/,tt=/[\s-]/g;function nt(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?We:Ze;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=nt(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=We:Qe.test(e.charAt(l-1))?(d*=Ke,p=e.slice(i,l-1).match($e),p&&i>0&&(d*=Ye**+p.length)):et.test(e.charAt(l-1))?(d*=Ge,m=e.slice(i,l-1).match(tt),m&&i>0&&(d*=Ye**+m.length)):(d*=qe,i>0&&(d*=Ye**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=Xe)),(d<Je&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=nt(e,t,n,r,l+1,a+2,o),f*Je>d&&(d=f*Je)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function rt(e){return e.toLowerCase().replace(tt,` `)}function it(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,nt(e,t,rt(e),rt(t),0,0,{})}const V=`[cmdk-group=""]`,at=`[cmdk-group-items=""]`,ot=`[cmdk-item=""]`,st=`${ot}:not([aria-disabled="true"])`,ct=`cmdk-item-select`,H=`data-value`,lt=(e,t,n)=>it(e,t,n),ut=i.createContext(void 0),U=()=>{let e=i.useContext(ut);if(!e)throw Error(`CommandContext is missing a provider`);return e},dt=i.createContext(void 0),ft=()=>{let e=i.useContext(dt);if(!e)throw Error(`StoreContext is missing a provider`);return e},pt=i.createContext(void 0),mt=i.forwardRef((e,t)=>{let n=K(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=K(()=>new Set),a=K(()=>new Map),o=K(()=>new Map),s=K(()=>new Set),c=Tt(e),{label:l,children:u,value:d,onValueChange:f,filter:p,shouldFilter:m,loop:_,disablePointerSelection:v=!1,vimBindings:y=!0,...b}=e,x=j(),S=j(),C=j(),w=i.useRef(null),T=Dt();G(()=>{if(d!==void 0){let e=d.trim();n.current.value=e,E.emit()}},[d]),G(()=>{T(6,ee)},[]);let E=i.useMemo(()=>({subscribe:e=>(s.current.add(e),()=>s.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)N(),k(),T(1,M);else if(e===`value`){let e=document.activeElement;if(e instanceof HTMLElement&&(e.hasAttribute(`cmdk-input`)||e.hasAttribute(`cmdk-root`))){let e=document.getElementById(C);e?e.focus():document.getElementById(x)?.focus()}if(T(7,()=>{n.current.selectedItemId=P()?.id,E.emit()}),r||T(5,ee),c.current?.value!==void 0){let e=t??``;c.current.onValueChange?.(e);return}}E.emit()}},emit:()=>{s.current.forEach(e=>e())}}),[]),D=i.useMemo(()=>({value:(e,t,r)=>{t!==o.current.get(e)?.value&&(o.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,O(t,r)),T(2,()=>{k(),E.emit()}))},item:(e,t)=>{if(r.current.add(e),t)if(!a.current.has(t))a.current.set(t,new Set([e]));else{let n=a.current.get(t);n?n.add(e):a.current.set(t,new Set([e]))}return T(3,()=>{N(),k(),n.current.value||M(),E.emit()}),()=>{o.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=P();T(4,()=>{N(),t?.getAttribute(`id`)===e&&M(),E.emit()})}},group:e=>(a.current.has(e)||a.current.set(e,new Set),()=>{o.current.delete(e),a.current.delete(e)}),filter:()=>c.current.shouldFilter!==!1,label:l||e[`aria-label`]||`Command Menu`,getDisablePointerSelection:()=>!!c.current.disablePointerSelection,listId:x,inputId:C,labelId:S,listInnerRef:w}),[]);function O(e,t){let r=c.current?.filter??lt;return e?r(e,n.current.search,t):0}function k(){if(!n.current.search||c.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=a.current.get(n);if(!r){t.push([n,0]);return}let i=0;r.forEach(t=>{let n=e.get(t)??0;i=Math.max(n,i)}),t.push([n,i])});let r=w.current;F().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i??``)??0)-(e.get(r??``)??0)}).forEach(e=>{let t=e.closest(at);if(t){let n=e.parentElement===t?e:e.closest(`${at} > *`);n&&t.appendChild(n)}else{if(!r)return;let t=e.parentElement===r?e:e.closest(`${at} > *`);t&&r.appendChild(t)}}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=w.current?.querySelector(`${V}[cmdk-group-id="${e[0]}"]`);t?.parentElement&&t.parentElement.appendChild(t)});let i=new Set(t.map(e=>e[0]));w.current?.querySelectorAll(`${V}[cmdk-group-id]`)?.forEach(e=>{let t=e.getAttribute(`cmdk-group-id`);t&&!i.has(t)&&e.parentElement?.appendChild(e)});let o=w.current?.closest(`[cmdk-list]`);o&&(o.scrollTop=0)}function M(){let e=F().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(H);E.setState(`value`,e??``)}function N(){if(!n.current.search||c.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=O(o.current.get(t)?.value??``,o.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of a.current)for(let r of t)if((n.current.filtered.items.get(r)??0)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function ee(){let e=P();e&&(e.parentElement?.firstChild===e&&e.closest(V)?.querySelector(`[cmdk-group-heading=""]`)?.scrollIntoView({block:`nearest`}),e.scrollIntoView({block:`nearest`}))}function P(){return w.current?.querySelector(`${ot}[aria-selected="true"]`)}function F(){return Array.from(w.current?.querySelectorAll(st)||[])}function I(e){let t=F()[e];t&&E.setState(`value`,t.getAttribute(H)??``)}function L(e){let t=P(),n=F(),r=n.findIndex(e=>e===t),i=n[r+e];c.current?.loop&&(i=r+e<0?n[n.length-1]:r+e===n.length?n[0]:n[r+e]),i&&E.setState(`value`,i.getAttribute(H)??``)}function te(e){let t=P()?.closest(V),n;for(;t&&!n;)t=e>0?Ct(t,V):wt(t,V),n=t?.querySelector(st);n?E.setState(`value`,n.getAttribute(H)??``):L(e)}let ne=()=>I(F().length-1),re=e=>{e.preventDefault(),e.metaKey?ne():e.altKey?te(1):L(1)},R=e=>{e.preventDefault(),e.metaKey?I(0):e.altKey?te(-1):L(-1)};return g(A.div,{ref:t,tabIndex:-1,...b,"cmdk-root":``,onKeyDown:e=>{b.onKeyDown?.(e);let t=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||t))switch(e.key){case`n`:case`j`:y&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:y&&e.ctrlKey&&R(e);break;case`ArrowUp`:R(e);break;case`Home`:e.preventDefault(),I(0);break;case`End`:e.preventDefault(),ne();break;case`Enter`:{e.preventDefault();let t=P();if(t){let e=new Event(ct);t.dispatchEvent(e)}}}},children:[h(`label`,{"cmdk-label":``,htmlFor:D.inputId,id:D.labelId,style:At,children:l}),kt(e,e=>h(dt.Provider,{value:E,children:h(ut.Provider,{value:D,children:e})}))]})}),ht=i.forwardRef((e,t)=>{let n=j(),r=i.useRef(null),a=i.useContext(pt),o=U(),s=Tt(e),c=s.current?.forceMount??a?.forceMount;G(()=>o.item(n,a?.id),[c]);let l=Et(n,r,[e.value,e.children,r],e.keywords),u=ft(),d=q(e=>e.value&&e.value===l.current),f=q(e=>c||o.filter()===!1?!0:e.search?(e.filtered.items.get(n)??0)>0:!0);i.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(ct,p),()=>t.removeEventListener(ct,p)},[f,e.onSelect,e.disabled]);function p(){m(),s.current.onSelect?.(l.current)}function m(){u.setState(`value`,l.current,!0)}if(!f)return null;let{disabled:g,value:_,onSelect:v,forceMount:y,keywords:b,...x}=e;return h(A.div,{ref:M(r,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!g,"aria-selected":!!d,"data-disabled":!!g,"data-selected":!!d,onPointerMove:g||o.getDisablePointerSelection()?void 0:m,onClick:g?void 0:p,children:e.children})}),gt=i.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:a,...o}=e,s=j(),c=i.useRef(null),l=i.useRef(null),u=j(),d=U(),f=q(e=>a||d.filter()===!1?!0:e.search?e.filtered.groups.has(s):!0);G(()=>d.group(s),[]),Et(s,c,[e.value,e.heading,l]);let p=i.useMemo(()=>({id:s,forceMount:a}),[a]);return g(A.div,{ref:M(c,t),...o,"cmdk-group":``,"cmdk-group-id":s,role:`presentation`,hidden:f?void 0:!0,children:[n&&h(`div`,{ref:l,"cmdk-group-heading":``,"aria-hidden":!0,id:u,children:n}),kt(e,e=>h(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?u:void 0,children:h(pt.Provider,{value:p,children:e})}))]})}),_t=i.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,a=i.useRef(null),o=q(e=>!e.search);return!n&&!o?null:h(A.div,{ref:M(a,t),...r,"cmdk-separator":``,role:`separator`})}),vt=i.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,a=e.value!=null,o=ft(),s=q(e=>e.search),c=q(e=>e.selectedItemId),l=U();return i.useEffect(()=>{e.value!=null&&o.setState(`search`,e.value)},[e.value]),h(A.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":l.listId,"aria-labelledby":l.labelId,"aria-activedescendant":c,id:l.inputId,type:`text`,value:a?e.value:s,onChange:e=>{a||o.setState(`search`,e.target.value),n?.(e.target.value)}})}),yt=i.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...a}=e,o=i.useRef(null),s=i.useRef(null),c=q(e=>e.selectedItemId),l=U();return i.useEffect(()=>{if(s.current&&o.current){let e=s.current,t=o.current,n=null,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.unobserve(e)}}},[]),h(A.div,{ref:M(o,t),...a,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":c,"aria-label":r,id:l.listId,children:kt(e,e=>h(`div`,{ref:M(s,l.listInnerRef),"cmdk-list-sizer":``,children:e}))})}),bt=i.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return h(k.Root,{open:n,onOpenChange:r,children:g(k.Portal,{container:o,children:[h(k.Overlay,{"cmdk-overlay":``,className:i}),h(k.Content,{"aria-label":e.label,"cmdk-dialog":``,className:a,children:h(mt,{ref:t,...s})})]})})}),xt=i.forwardRef((e,t)=>q(e=>e.filtered.count===0)?h(A.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),St=i.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return h(A.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i,children:kt(e,e=>h(`div`,{"aria-hidden":!0,children:e}))})}),W=Object.assign(mt,{List:yt,Item:ht,Input:vt,Group:gt,Separator:_t,Dialog:bt,Empty:xt,Loading:St});function Ct(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function wt(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Tt(e){let t=i.useRef(e);return G(()=>{t.current=e}),t}const G=typeof window>`u`?i.useEffect:i.useLayoutEffect;function K(e){let t=i.useRef(void 0);return t.current===void 0&&(t.current=e()),t}function q(e){let t=ft(),n=()=>e(t.snapshot());return i.useSyncExternalStore(t.subscribe,n,n)}function Et(e,t,n,r=[]){let a=i.useRef(``),o=U();return G(()=>{let i=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&e&&`current`in e)return e.current?e.current.textContent?.trim():a.current}})()??``,s=r.map(e=>e.trim());o.value(e,i,s),t.current?.setAttribute(H,i),a.current=i}),a}const Dt=()=>{let[e,t]=i.useState(),n=K(()=>new Map);return G(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Ot(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function kt({asChild:e,children:t},n){if(e&&i.isValidElement(t)){let e=t;return i.cloneElement(Ot(e),{ref:e.ref},n(e.props.children))}return n(t)}const At={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`};function jt(){return crypto.randomUUID()}function Mt(e){let t=e.find(e=>e.role===`user`);if(!t)return`New conversation`;let n=t.parts?.filter(e=>e.type===`text`).map(e=>e.text).join(` `)||`New conversation`;return n.length>50?n.slice(0,50)+`...`:n}function Nt(e){return typeof e!=`object`||!e||!(`version`in e)||e.version!==1||!(`conversations`in e)||!Array.isArray(e.conversations)?null:e}function Pt({storageKey:e=`cmdk-chat-history`,maxConversations:t=50,messages:n,setMessages:r}){let[i,a]=f([]),[o,c]=f(null),[p,m]=f(!1),h=d(n);h.current=n;let g=d(r);g.current=r;let _=d(i);_.current=i;let v=d(o);v.current=o,l(()=>{try{let t=localStorage.getItem(e);if(t){let n=Nt(JSON.parse(t));n?a(n.conversations):(console.warn(`Chat history: stored data failed validation. Discarding.`),localStorage.removeItem(e))}}catch(e){console.error(`Failed to load chat history:`,e)}finally{m(!0)}},[e]),l(()=>{if(p)try{let t={version:1,conversations:i};localStorage.setItem(e,JSON.stringify(t))}catch(e){console.error(`Failed to save chat history:`,e)}},[i,e,p]);let y=s(()=>{let e=h.current,n=v.current;!n||e.length===0||a(r=>{let i=Date.now();return r.find(e=>e.id===n)?r.map(t=>t.id===n?{...t,messages:e,title:Mt(e),updatedAt:i}:t):[{id:n,title:Mt(e),messages:e,createdAt:i,updatedAt:i},...r].slice(0,t)})},[t]),b=s(()=>{v.current&&h.current.length>0&&y(),g.current?.([]),c(jt())},[y]),x=s(e=>{v.current&&h.current.length>0&&y();let t=_.current.find(t=>t.id===e);t&&(g.current?.(t.messages),c(e))},[y]);return u(()=>({conversations:i,currentConversationId:o,startNewChat:b,loadConversation:x,saveCurrentConversation:y}),[i,o,b,x,y])}let J=null,Y=null;function Ft(){try{return typeof process<`u`&&process.env?.BETTER_CMDK_TELEMETRY_DISABLED===`1`}catch{return!1}}function It(e,t){return delete e.user,delete e.server_name,e.request&&(delete e.request.cookies,delete e.request.headers,delete e.request.env,delete e.request.data),e.breadcrumbs=[],e}function Lt(){typeof window>`u`||J===null&&(Ft()||(J=new P({dsn:`https://7d9fc7e14e8769805297d46569e33c05@o4510706172755968.ingest.us.sentry.io/4510846832017408`,transport:ne,stackParser:L,integrations:[I(),te()],beforeSend:It,sendDefaultPii:!1,tracesSampleRate:1}),Y=new F,Y.setClient(J),J.init()))}function Rt(e,t){!Y||!J||(t?Y.captureException(e,{captureContext:e=>(e.setExtras(t),e)}):Y.captureException(e))}function zt(e){try{let t=new Uint8Array(e/2);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}catch{let t=``;for(let n=0;n<e;n++)t+=Math.floor(Math.random()*16).toString(16);return t}}function Bt(e,t,n){if(!Y||!J)return n();let r=Date.now()/1e3,i=zt(32),a=zt(16),o=`ok`,s=()=>{let n=Date.now()/1e3;Y.captureEvent({type:`transaction`,transaction:e,start_timestamp:r,timestamp:n,contexts:{trace:{trace_id:i,span_id:a,op:t,status:o}}})};try{let e=n();return e instanceof Promise?e.then(e=>(s(),e),e=>{throw o=`internal_error`,s(),e}):(s(),e)}catch(e){throw o=`internal_error`,s(),e}}const Vt=i.createContext(null),Ht=[];function Ut({children:e,chatEndpoint:t=null,chat:n,onModeChange:r,onOpenChange:a,historyStorageKey:o,maxConversations:s}){let[c,l]=i.useState(`command`),[u,d]=i.useState(``),[f,p]=i.useState(`idle`),[m,g]=i.useState(null),_=i.useRef(n);_.current=n;let v=!!n;i.useEffect(()=>{Lt()},[]);let y=i.useMemo(()=>{if(!(v||!t))return new ee({api:t})},[t,v]),b=N(i.useMemo(()=>y?{transport:y,onError:e=>{Rt(e,{source:`internalChat.onError`}),p(`error`),g(e)}}:{},[y])),x=n?.status,S=n?.error??null;i.useEffect(()=>{if(v)x===`ready`?p(`idle`):x===`streaming`?p(`streaming`):x===`submitted`?p(`submitted`):x===`error`&&p(`error`),g(S);else{let e=b.status;e===`streaming`?p(`streaming`):e===`submitted`?p(`submitted`):e===`error`?p(`error`):e===`ready`&&p(`idle`)}},[x,S,b.status,v]);let C=i.useCallback(e=>{l(e),r?.(e)},[r]),w=!!(n||t),T=i.useCallback(e=>{w&&Bt(`switchToChat`,`ui.action`,()=>{C(`chat`),e&&d(e)})},[w,C]),E=i.useCallback(()=>{C(`command`),d(``),p(`idle`),g(null)},[C]),D=i.useCallback(async e=>{e.trim()&&await Bt(`sendMessage`,`function`,async()=>{try{let t=_.current;if(t){d(``),t.sendMessage({text:e.trim()});return}if(!y)return;p(`submitted`),d(``),await b.sendMessage({text:e.trim()})}catch(e){throw Rt(e,{source:`sendMessage`}),e}})},[b,y]),O=f===`submitted`||f===`streaming`,k=n?n.messages:b.messages??Ht,A=n?.setMessages??b.setMessages,j=n?.addToolApprovalResponse,M=n?.agenticActions,P=Pt({storageKey:o,maxConversations:s,messages:k,setMessages:A}),F=i.useCallback(e=>{P.loadConversation(e),C(`chat`)},[P.loadConversation,C]),I=i.useRef(f);i.useEffect(()=>{let e=I.current;I.current=f,(e===`streaming`||e===`submitted`)&&f===`idle`&&k.length>0&&P.saveCurrentConversation()},[f,k.length,P.saveCurrentConversation]);let L=i.useCallback(()=>{a?.(!1)},[a]),te=i.useMemo(()=>({mode:c,setMode:C,inputValue:u,setInputValue:d,chatEndpoint:t,status:f,error:m,switchToChat:T,switchToCommand:E,messages:k,sendMessage:D,isLoading:O,isEnabled:w,addToolApprovalResponse:j,agenticActions:M,requestClose:L,conversations:P.conversations,currentConversationId:P.currentConversationId,startNewChat:P.startNewChat,loadConversation:F}),[c,C,u,t,f,m,T,E,k,D,O,w,j,M,L,P.conversations,P.currentConversationId,P.startNewChat,F]);return h(Vt.Provider,{value:te,children:e})}function X(){let e=i.useContext(Vt);if(!e)throw Error(`useCommandMenuContext must be used within a CommandMenuProvider`);return e}function Wt({...e}){return h(D.Root,{"data-slot":`dialog`,...e})}function Gt({...e}){return h(D.Trigger,{"data-slot":`dialog-trigger`,...e})}function Kt({...e}){return h(D.Portal,{"data-slot":`dialog-portal`,...e})}function qt({...e}){return h(D.Close,{"data-slot":`dialog-close`,...e})}function Jt({className:t,style:n,...r}){return h(D.Overlay,{"data-slot":`dialog-overlay`,className:e(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50`,t),style:{position:`fixed`,inset:0,zIndex:50,backgroundColor:`rgb(0 0 0 / 0.5)`,...n},...r})}function Yt({className:t,children:n,showCloseButton:r=!0,...i}){return h(Kt,{"data-slot":`dialog-portal`,children:g(`div`,{className:`bcmdk-root`,children:[h(Jt,{}),g(D.Content,{"data-slot":`dialog-content`,className:e(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg`,t),...i,children:[n,r&&g(D.Close,{"data-slot":`dialog-close`,className:`ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,children:[h(w,{}),h(`span`,{className:`sr-only`,children:`Close`})]})]})]})})}function Xt({className:t,...n}){return h(`div`,{"data-slot":`dialog-header`,className:e(`flex flex-col gap-2 text-center sm:text-left`,t),...n})}function Zt({className:t,showCloseButton:n=!1,children:r,...i}){return g(`div`,{"data-slot":`dialog-footer`,className:e(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t),...i,children:[r,n&&h(D.Close,{asChild:!0,children:h(Be,{variant:`outline`,children:`Close`})})]})}function Qt({className:t,...n}){return h(D.Title,{"data-slot":`dialog-title`,className:e(`text-lg leading-none font-semibold`,t),...n})}function $t({className:t,...n}){return h(D.Description,{"data-slot":`dialog-description`,className:e(`text-muted-foreground text-sm`,t),...n})}function en({className:t,...n}){return h(`kbd`,{"data-slot":`kbd`,className:e(`bg-muted text-muted-foreground pointer-events-none inline-grid w-fit min-w-5 place-items-center gap-1 rounded px-1.5 py-0.5 font-sans text-xs font-medium select-none leading-[1]`,`[&_svg:not([class*='size-'])]:size-3`,`[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10`,t),...n})}function tn({className:t,...n}){return h(`kbd`,{"data-slot":`kbd-group`,className:e(`inline-flex items-center gap-1`,t),...n})}function nn({className:t,...n}){return h(W,{"data-slot":`command`,className:e(`bcmdk-root text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md`,t),...n})}function rn({className:t,children:n,...r}){return h(Kt,{"data-slot":`dialog-portal`,children:h(`div`,{className:`bcmdk-root`,children:h(D.Content,{"data-slot":`dialog-content`,className:e(`backdrop-blur-xl fixed top-1/3 left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] overflow-hidden rounded-xl border-none p-2 shadow-2xl ring-0 duration-200 outline-none sm:max-w-lg`,t),style:{backgroundColor:`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`},...r,children:n})})})}function an({className:t,...n}){return h(W.Empty,{"data-slot":`command-empty`,className:e(`text-muted-foreground py-6 text-center text-sm`,t),...n})}function Z({className:t,ref:n,...r}){let a=i.useCallback(e=>{if(e){let t=e.querySelector(`[cmdk-group-heading]`);t instanceof HTMLElement&&(t.style.position=`sticky`,t.style.top=`0`,t.style.zIndex=`10`,t.style.width=`fit-content`,t.style.backdropFilter=`blur(24px)`,t.style.setProperty(`-webkit-backdrop-filter`,`blur(24px)`),t.style.backgroundColor=`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`,t.style.borderRadius=`6px`,t.style.setProperty(`padding-top`,`4px`,`important`),t.style.setProperty(`padding-bottom`,`4px`,`important`))}typeof n==`function`?n(e):n&&(n.current=e)},[n]);return h(W.Group,{ref:a,"data-slot":`command-group`,className:e(`text-foreground !p-0 [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:scroll-mt-16 [&_[cmdk-group-heading]]:pt-0! [&_[cmdk-group-heading]]:!p-3 [&_[cmdk-group-heading]]:!pb-1 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium`,t),...r})}function on({className:t,...n}){return h(W.Separator,{"data-slot":`command-separator`,className:e(`bg-border -mx-1 h-px`,t),...n})}function sn({className:t,style:n,onSelect:r,closeOnSelect:a=!0,...o}){let s=i.useContext(Vt),c=i.useCallback(e=>{r?.(e),a&&s?.requestClose?.()},[r,a,s]);return h(W.Item,{"data-slot":`command-item`,className:e(`data-[selected=true]:border-input data-[selected=true]:bg-input/50 [&_svg:not([class*='text-'])]:text-muted-foreground relative flex h-[var(--cmdk-item-height,2.25rem)] cursor-default items-center gap-2 border border-transparent px-3 text-sm font-medium outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),style:{borderRadius:`var(--cmdk-radius, 0.375rem)`,...n},onSelect:c,...o})}function cn({className:t,children:n,...r}){let i=typeof n==`string`?[...n]:null;return h(`span`,{"data-slot":`command-shortcut`,className:e(`ml-auto flex items-center gap-1`,t),...r,children:i?i.map((e,t)=>h(en,{children:e},t)):n})}var ln=class extends i.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){Rt(e,{componentStack:t.componentStack??void 0})}render(){return this.state.hasError?null:this.props.children}};function un(e){return e instanceof Element?!!e.closest(`input, textarea, select, button, a, [contenteditable='true'], [contenteditable=''], [data-cmdk-mobile-gesture-ignore]`):!1}function dn(e,t,n,r,i,a){let o=window.innerWidth,s=window.innerHeight,c=o*n,l=o-a,u=Math.max(0,l-c),d=s*(1-r),f=s-i;return e>=u&&e<=l&&t>=d&&t<=f}function fn({enabled:e,open:t,holdMs:n,swipeUpPx:r,onTrigger:a,movementTolerancePx:o=10,horizontalCancelPx:s=24,activationZoneWidthPercent:c=.4,activationZoneHeightPercent:l=.4,bottomExclusionPx:u=8,rightExclusionPx:d=0}){let[f,p]=i.useState(!1),m=i.useRef(null),h=i.useRef(0),g=i.useRef(a),_=i.useRef({applied:!1,touchCallout:``,webkitUserSelect:``,userSelect:``});i.useEffect(()=>{g.current=a},[a]);let v=i.useCallback(()=>{if(typeof document>`u`||_.current.applied)return;let{style:e}=document.documentElement;_.current={applied:!0,touchCallout:e.getPropertyValue(`-webkit-touch-callout`),webkitUserSelect:e.getPropertyValue(`-webkit-user-select`),userSelect:e.getPropertyValue(`user-select`)},e.setProperty(`-webkit-touch-callout`,`none`),e.setProperty(`-webkit-user-select`,`none`),e.setProperty(`user-select`,`none`)},[]),y=i.useCallback(()=>{if(typeof document>`u`)return;let e=_.current;if(!e.applied)return;let{style:t}=document.documentElement;e.touchCallout?t.setProperty(`-webkit-touch-callout`,e.touchCallout):t.removeProperty(`-webkit-touch-callout`),e.webkitUserSelect?t.setProperty(`-webkit-user-select`,e.webkitUserSelect):t.removeProperty(`-webkit-user-select`),e.userSelect?t.setProperty(`user-select`,e.userSelect):t.removeProperty(`user-select`),_.current={applied:!1,touchCallout:``,webkitUserSelect:``,userSelect:``}},[]),b=i.useCallback(()=>{let e=m.current;e?.timer!=null&&window.clearTimeout(e.timer),m.current=null,p(!1),y()},[y]);return i.useEffect(()=>{if(!e||t||typeof window>`u`){b();return}let i=e=>{if(e.touches.length!==1||un(e.target))return;let t=e.touches[0];if(!t||!dn(t.clientX,t.clientY,c,l,u,d))return;h.current=Date.now(),v();let r=window.setTimeout(()=>{let e=m.current;e&&(e.armed=!0,p(!0),typeof navigator<`u`&&`vibrate`in navigator&&navigator.vibrate(6))},n);m.current={startX:t.clientX,startY:t.clientY,armed:!1,timer:r}},a=e=>{if(e.touches.length!==1){b();return}let t=m.current;if(!t)return;let n=e.touches[0];if(!n)return;let i=n.clientX-t.startX,a=n.clientY-t.startY;if(!t.armed){Math.hypot(i,a)>o&&b();return}if(e.cancelable&&e.preventDefault(),Math.abs(i)>s){b();return}a<=-r&&(b(),typeof navigator<`u`&&`vibrate`in navigator&&navigator.vibrate(14),g.current())},f=()=>{b()},_=()=>{b()},y=e=>{let t=m.current!==null,r=Date.now()-h.current<n+1200,i=dn(e.clientX,e.clientY,c,l,u,d);if(t||r&&i){if(!t&&un(e.target))return;e.preventDefault(),e.stopPropagation()}};return document.addEventListener(`touchstart`,i,{passive:!1}),document.addEventListener(`touchmove`,a,{passive:!1}),document.addEventListener(`touchend`,f,{passive:!0}),document.addEventListener(`touchcancel`,_,{passive:!0}),document.addEventListener(`contextmenu`,y,!0),()=>{document.removeEventListener(`touchstart`,i),document.removeEventListener(`touchmove`,a),document.removeEventListener(`touchend`,f),document.removeEventListener(`touchcancel`,_),document.removeEventListener(`contextmenu`,y,!0),b()}},[e,t,n,r,o,s,c,l,u,d,b,v]),{showHint:f}}function pn(e){let[t,n]=i.useState(0);return i.useEffect(()=>{if(!e||typeof window>`u`){n(0);return}let t=window.visualViewport;if(!t){n(0);return}let r=()=>{let e=Math.max(0,Math.round(window.innerHeight-t.height-t.offsetTop));n(t=>t===e?t:e)};return r(),t.addEventListener(`resize`,r),t.addEventListener(`scroll`,r),window.addEventListener(`orientationchange`,r),()=>{t.removeEventListener(`resize`,r),t.removeEventListener(`scroll`,r),window.removeEventListener(`orientationchange`,r)}},[e]),t}const mn=e=>{},hn={none:`rounded-none`,sm:`rounded-sm`,md:`rounded-md`,lg:`rounded-lg`,xl:`rounded-xl`},gn={none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`},_n=i.createContext({isMobile:!1,layout:`keyboard-last`,keyboardInset:0,showQuickActions:!1,quickActionsCount:4});function Q(){return i.useContext(_n)}function vn(e){let t=e?.gesture!==!1,n=e?.gesture===!1?void 0:e?.gesture;return{enabled:e?.enabled??!0,breakpoint:e?.breakpoint??900,layout:e?.layout??`keyboard-last`,gesture:{enabled:t?n?.enabled??!0:!1,holdMs:t?n?.holdMs??350:350,swipeUpPx:t?n?.swipeUpPx??56:56},showQuickActions:e?.showQuickActions??!0,quickActionsCount:e?.quickActionsCount??4}}function yn(e,t){let[n,r]=i.useState(!1);return i.useEffect(()=>{if(!t||typeof window>`u`){r(!1);return}let n=window.matchMedia(`(max-width: ${e}px)`),i=window.matchMedia(`(pointer: coarse)`),a=()=>{r(n.matches||i.matches)};return a(),n.addEventListener(`change`,a),i.addEventListener(`change`,a),window.addEventListener(`orientationchange`,a),()=>{n.removeEventListener(`change`,a),i.removeEventListener(`change`,a),window.removeEventListener(`orientationchange`,a)}},[e,t]),n}function bn(e){let t=Date.now()-e,n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function xn({className:t,children:n,corners:r=`xl`,borderColor:a,isMobile:o,keyboardInset:s,onRequestClose:c,onInteractOutside:l,...u}){let d=i.useRef(null),f=i.useCallback(()=>{if(typeof document>`u`)return;let e=document.activeElement;if(e instanceof HTMLElement&&e.hasAttribute(`cmdk-input`)){e.blur();return}c?.()},[c]),p=e=>{if(e.touches.length!==1)return;let t=e.touches[0];t&&(d.current={x:t.clientX,y:t.clientY})},m=e=>{let t=d.current;if(d.current=null,!t||e.changedTouches.length===0)return;let n=e.changedTouches[0];if(!n)return;let r=n.clientX-t.x;n.clientY-t.y>56&&Math.abs(r)<42&&f()},_=e=>{if(l?.(e),e.defaultPrevented)return;let t=e.target;t instanceof HTMLElement&&t.closest(`[data-cmdk-powered-link]`)&&e.preventDefault()};return h(Kt,{"data-slot":`dialog-portal`,children:g(`div`,{className:`bcmdk-root`,children:[o&&h(D.Overlay,{className:`fixed inset-0 z-40 bg-black/35 backdrop-blur-[1px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,style:{position:`fixed`,inset:0,zIndex:40,backgroundColor:`rgb(0 0 0 / 0.35)`,backdropFilter:`blur(1px)`,WebkitBackdropFilter:`blur(1px)`}}),g(`div`,{className:e(`fixed z-50 w-full max-w-[calc(100%-2rem)]`,o?`inset-x-0 bottom-0 max-w-none px-0`:`top-1/3 left-[50%] translate-x-[-50%] translate-y-[-50%]`),style:o?{left:0,right:0,bottom:0,maxWidth:`none`,paddingLeft:0,paddingRight:0}:{maxWidth:`45vw`},children:[g(D.Content,{"data-slot":`dialog-content`,className:e(`backdrop-blur-xl flex flex-col w-full overflow-hidden border border-input p-0 ring-0 outline-none`,o?`border-x-0 border-b-0 will-change-transform data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-bottom-8 data-[state=open]:slide-in-from-bottom-8 data-[state=open]:duration-300 data-[state=closed]:duration-200`:hn[r],t),style:{"--cmdk-radius":gn[r],"--cmdk-mobile-keyboard-inset":`${s??0}px`,"--cmdk-mobile-sheet-top-inset":`max(11rem, calc(env(safe-area-inset-top) + 8rem))`,maxHeight:o?`calc(100dvh - var(--cmdk-mobile-sheet-top-inset))`:`45vh`,height:o?`calc(100dvh - var(--cmdk-mobile-sheet-top-inset))`:void 0,...o?{borderTopLeftRadius:gn[r],borderTopRightRadius:gn[r],borderBottomLeftRadius:`0px`,borderBottomRightRadius:`0px`}:{},backgroundColor:`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`,boxShadow:`4px 4px 12px -2px rgba(0,0,0,0.12), -4px 4px 12px -2px rgba(0,0,0,0.12), 0 8px 16px -4px rgba(0,0,0,0.1)`,...a?{"--tw-ring-color":a}:{}},...u,onInteractOutside:_,children:[o&&h(`div`,{className:`flex justify-center py-2`,"data-cmdk-mobile-gesture-ignore":!0,onTouchStart:p,onTouchEnd:m,children:h(`div`,{className:`h-1.5 w-11 rounded-full bg-muted-foreground/35`})}),n]}),h(`div`,{className:e(`flex justify-end select-none pointer-events-auto`,o&&`hidden`),children:h(`a`,{"data-cmdk-powered-link":!0,href:`https://better-cmdk.com`,target:`_blank`,rel:`noopener noreferrer`,className:`pointer-events-auto inline-flex items-center border-2 border-input bg-background px-2 py-0.5 font-mono text-[11px] font-bold uppercase tracking-[0.14em] text-foreground no-underline transition-colors hover:bg-foreground hover:text-background hover:no-underline`,style:{borderRadius:`0 0 0.25rem 0.25rem`,marginRight:`1rem`},children:`BETTER-CMDK`})})]})]})})}const Sn=g(m,{children:[h(Tn,{placeholder:`Search for commands or ask AI...`,showSendButton:!0}),h(On,{children:h($,{})})]});function Cn({title:t=`Command Palette`,description:n=`Search for a command to run...`,children:r,className:a,corners:o=`xl`,borderColor:s,commands:c,commandsPlaceholder:l=`Search for commands or ask AI...`,commandsAskAILabel:u=`Ask AI`,mobile:d,...f}){let{mode:p,status:_,switchToCommand:y,messages:b,isEnabled:x,setInputValue:S,inputValue:C}=X(),w=i.useMemo(()=>vn(d),[d]),T=yn(w.breakpoint,w.enabled),E=w.enabled&&T,D=pn(E&&!!f.open),O=i.useCallback(e=>{e&&S(``),f.onOpenChange?.(e)},[f.onOpenChange,S]),k=i.useCallback(()=>{O(!0)},[O]),A=fn({enabled:E&&!f.open&&!!f.onOpenChange&&w.gesture.enabled,open:!!f.open,holdMs:w.gesture.holdMs,swipeUpPx:w.gesture.swipeUpPx,onTrigger:k}),j=i.useMemo(()=>({isMobile:E,layout:w.layout,keyboardInset:D,showQuickActions:w.showQuickActions,quickActionsCount:w.quickActionsCount}),[E,w.layout,D,w.showQuickActions,w.quickActionsCount]),M=()=>c&&c.length>0?h(Dn,{commands:c,placeholder:l,askAILabel:u}):typeof r==`function`?r({mode:p,messages:b,status:_,isEnabled:x}):r??Sn,N=e=>{p===`chat`&&(e.preventDefault(),y())};return i.useEffect(()=>{let e=e=>{e.key===`k`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),O(!1))};if(f.open)return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[f.open,O]),g(m,{children:[h(Wt,{...f,onOpenChange:O,children:g(xn,{className:a,corners:o,borderColor:s,isMobile:E,keyboardInset:D,onRequestClose:()=>O(!1),onEscapeKeyDown:N,onOpenAutoFocus:e=>{E&&w.layout===`keyboard-last`&&e.preventDefault()},children:[g(Xt,{className:`sr-only`,children:[h(Qt,{children:t}),h($t,{children:n})]}),h(_n.Provider,{value:j,children:h(W,{"data-slot":`command`,className:e(`bcmdk-root **:data-[slot=command-input-wrapper]:bg-transparent rounded-none bg-transparent **:data-[slot=command-input]:!h-11 **:data-[slot=command-input]:py-0 **:data-[slot=command-input-wrapper]:mb-0`,E?`**:data-[slot=command-input-wrapper]:!h-[var(--cmdk-input-row-height)] pb-[env(safe-area-inset-bottom)]`:`**:data-[slot=command-input-wrapper]:!h-11`,`text-popover-foreground flex h-full min-h-0 w-full flex-col overflow-hidden`),style:{borderRadius:`var(--cmdk-radius, 0.75rem)`,"--cmdk-item-height":E?`3.125rem`:`2.25rem`,"--cmdk-input-row-height":E?`3.5rem`:`2.75rem`},children:M()})})]})}),A.showHint&&g(`div`,{className:`fixed left-1/2 z-50 flex -translate-x-1/2 items-center gap-2 rounded-full border border-input bg-background/95 px-3 py-1.5 text-xs font-medium text-foreground shadow-sm backdrop-blur-md`,style:{bottom:`calc(env(safe-area-inset-bottom) + 2rem)`},"data-cmdk-mobile-gesture-ignore":!0,children:[h(v,{className:`size-3.5`}),`Swipe up for Command Menu`]})]})}function wn({chatEndpoint:e=null,chat:t,onModeChange:n,onOpenChange:r,historyStorageKey:i,maxConversations:a,commands:o,commandsPlaceholder:s,commandsAskAILabel:c,mobile:l,...u}){return h(Ut,{chatEndpoint:e,chat:t,onModeChange:n,onOpenChange:r,historyStorageKey:i,maxConversations:a,children:h(ln,{children:h(Cn,{onOpenChange:r,commands:o,commandsPlaceholder:s,commandsAskAILabel:c,mobile:l,...u})})})}function Tn({className:t,showSendButton:n=!1,...r}){let{mode:a,inputValue:o,setInputValue:s,sendMessage:c,isLoading:l,switchToChat:u,startNewChat:d}=X(),{isMobile:f,layout:p,keyboardInset:m}=Q(),[_,y]=i.useState(!1),x=i.useRef(null),S=()=>{o.trim()&&a===`chat`&&c(o)},C=e=>{if((e.metaKey||e.ctrlKey)&&e.key===`Enter`){e.preventDefault(),a===`command`&&o.trim()?(d(),u(),c(o)):a===`chat`&&o.trim()&&c(o);return}if(a===`chat`&&e.key===`Enter`&&!e.shiftKey){e.preventDefault(),o.trim()&&c(o);return}},w=a===`chat`||o.length>0||f&&p===`keyboard-last`,T=f&&p===`keyboard-last`&&!_&&a===`command`,E=e=>{y(!0),r.onFocus?.(e)},D=e=>{y(!1),r.onBlur?.(e)},O=f?{marginBottom:m>0?`${m}px`:void 0}:void 0,k={...r,onFocus:E,onBlur:D};return g(`div`,{"data-slot":`command-input-wrapper`,className:e(`order-2 flex h-[var(--cmdk-input-row-height,2.75rem)] items-center gap-2 px-6 transition-[margin,border-color] duration-200`,f&&`px-4`,w?`border-t border-input mt-0`:`border-t border-transparent mt-0`),style:O,children:[h(W.Input,{"data-slot":`command-input`,ref:x,value:o,onValueChange:s,onKeyDown:C,className:e(`placeholder:text-muted-foreground flex h-10 w-full appearance-none border-0 bg-transparent py-3 text-sm shadow-none outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,t),...k,placeholder:a===`chat`?`Ask AI...`:r.placeholder}),T&&h(`button`,{type:`button`,onClick:()=>x.current?.focus(),className:`flex items-center justify-center size-7 shrink-0 border border-input bg-background text-muted-foreground hover:text-foreground transition-colors`,style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},"aria-label":`Type a command`,"data-cmdk-mobile-gesture-ignore":!0,children:h(b,{className:`size-4`})}),n&&a===`chat`&&h(`button`,{type:`button`,onClick:S,disabled:!o.trim()||l,className:`flex items-center justify-center size-6 shrink-0 bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors`,style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},children:h(v,{className:`size-3`})})]})}function $({label:t=`Ask AI`,className:n,...r}){let{inputValue:i,setInputValue:a,switchToChat:o,sendMessage:s,isEnabled:c,startNewChat:l}=X(),{isMobile:u}=Q(),d=q(e=>e.filtered.count),f=()=>{if(c)if(i.trim()){let e=lt(`ask-ai`,i.trim())>0;d===0&&!e?(l(),o(),s(i)):(o(),a(``))}else o()};return c?h(W.Group,{forceMount:!0,children:g(W.Item,{"data-slot":`command-item`,value:`ask-ai`,onSelect:f,className:e(`data-[selected=true]:border-input data-[selected=true]:bg-input/50 relative flex cursor-default items-center gap-3 border border-transparent px-3 py-2 text-sm outline-hidden select-none`,u&&`min-h-12 py-3`,n),style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},...r,children:[h(S,{className:`size-4 shrink-0 text-primary`}),h(`div`,{className:`flex flex-col items-start gap-0.5`,children:h(`span`,{className:`font-medium`,children:t})}),!u&&g(`span`,{className:`ml-auto flex items-center gap-1`,children:[h(en,{children:`⌘`}),h(en,{children:`↵`})]})]})}):h(W.Empty,{"data-slot":`command-empty`,className:e(`text-muted-foreground py-6 text-center text-sm`,n),children:`No results found.`})}function En(e){let t=[],n=new Map;for(let r of e){let e=r.group,i=n.get(e);i===void 0?(n.set(e,t.length),t.push({heading:e,items:[r]})):t[i].items.push(r)}let r=t.findIndex(e=>e.heading===void 0);if(r>0){let e=t.splice(r,1)[0];t.unshift(e)}return t}function Dn({commands:t,placeholder:n,askAILabel:r}){let{inputValue:a,mode:o}=X(),{isMobile:s,layout:c,showQuickActions:l,quickActionsCount:u}=Q(),d=En(t),f=s&&c===`keyboard-last`&&l&&o===`command`&&a.length===0,p=f?t.filter(e=>!e.disabled).slice(0,u):[],_=new Set(p.map(e=>e.name)),v=t=>{let n=t.label??t.name,r=[...t.keywords??[]];return t.label&&t.label!==t.name&&r.push(t.label),g(sn,{value:t.name,keywords:r.length>0?r:void 0,disabled:t.disabled,onSelect:()=>t.onSelect?.(),className:e(s&&`min-h-12 py-3`),children:[t.icon,n,t.shortcut&&!s&&h(cn,{children:t.shortcut})]},t.name)};return g(m,{children:[h(Tn,{placeholder:n,showSendButton:!0}),g(On,{children:[f&&p.length>0&&h(Z,{heading:`Quick Actions`,children:p.map(e=>v(e))}),d.map((e,t)=>{let n=f?e.items.filter(e=>!_.has(e.name)):e.items;if(n.length===0)return null;let r=n.map(e=>v(e));return e.heading?h(Z,{heading:e.heading,children:r},e.heading):h(i.Fragment,{children:r},`__ungrouped_${t}`)}),h($,{label:r})]})]})}function On({className:t,children:n,actions:r,actionsHeading:a=`Actions`,style:o,...s}){let{mode:c,status:l,messages:u,sendMessage:d,addToolApprovalResponse:f,agenticActions:p,switchToChat:m,startNewChat:_,conversations:v,loadConversation:y,inputValue:b}=X(),{isMobile:x,layout:C,keyboardInset:w}=Q(),T=i.useCallback(e=>d(e.text),[d]),E=f??mn;if(c===`chat`)return h(`div`,{"data-slot":`command-list`,className:e(`order-1 min-h-0 flex-1 overflow-hidden px-3 flex flex-col`,x&&`px-2`,t),children:u.length===0?h(Ue,{}):g(Ve,{style:{flex:`1 1 0%`,minHeight:0},children:[h(`div`,{className:`px-3 py-2 space-y-4`,children:h(Ie,{messages:u,sendMessage:T,addToolApprovalResponse:E})}),l===`streaming`&&h(He,{})]})});let D=i.Children.toArray(n),O=[],k=[];D.forEach(e=>{i.isValidElement(e)&&(e.type===$||e.type.displayName===`CommandEmpty`)?O.push(e):i.isValidElement(e)&&e.type===an||k.push(e)});let A=(r??p)?.filter(e=>e.execute),j=e=>{let t=e.label??e.name;_(),m(),d(t)},M=b.length>0||x&&C===`keyboard-last`,N=x?`calc(100% - var(--cmdk-input-row-height, 3.5rem))`:`calc(45vh - 2.75rem)`,ee={overscrollBehavior:`contain`,paddingBottom:w>0?`${w+8}px`:x?`env(safe-area-inset-bottom)`:void 0,...o};return h(re.div,{initial:!1,animate:{height:M?N:0},transition:{type:`spring`,duration:.25,bounce:0},className:e(`order-1 min-h-0 overflow-hidden px-3`,x&&`px-2`),children:g(W.List,{"data-slot":`command-list`,className:e(`overflow-x-hidden overflow-y-auto overscroll-contain pt-2 h-full`,x&&`pt-1`,t),style:ee,...s,children:[k,v.length>0&&h(Z,{heading:`Recent Chats`,children:v.slice(0,5).map(t=>g(sn,{value:`chat-history-${t.id}`,keywords:[t.title],onSelect:()=>y(t.id),className:e(x&&`min-h-12 py-3`),children:[h(S,{className:`size-4`}),h(`span`,{className:`truncate`,children:t.title}),h(`span`,{className:`ml-auto text-xs text-muted-foreground`,children:bn(t.updatedAt)})]},t.id))}),A&&A.length>0&&h(Z,{heading:a,children:A.map(t=>h(sn,{value:t.label??t.name,onSelect:()=>j(t),className:e(x&&`min-h-12 py-3`),children:t.label??t.name},t.name))}),O]})})}$.displayName=`CommandEmpty`;export{ve as AssistantFormRenderer,Ie as AssistantMessages,Be as Button,Ue as ChatEmpty,He as ChatLoading,Ve as ChatMessageList,Se as Collapsible,we as CollapsibleContent,Ce as CollapsibleTrigger,nn as Command,xn as CommandContent,wn as CommandDialog,wn as CommandMenu,rn as CommandDialogContent,$ as CommandEmpty,Z as CommandGroup,Tn as CommandInput,sn as CommandItem,On as CommandList,Vt as CommandMenuContext,Ut as CommandMenuProvider,on as CommandSeparator,cn as CommandShortcut,ie as Confirmation,se as ConfirmationAccepted,ue as ConfirmationAction,le as ConfirmationActions,ce as ConfirmationRejected,oe as ConfirmationRequest,ae as ConfirmationTitle,Wt as Dialog,qt as DialogClose,Yt as DialogContent,$t as DialogDescription,Zt as DialogFooter,Xt as DialogHeader,Jt as DialogOverlay,Kt as DialogPortal,Qt as DialogTitle,Gt as DialogTrigger,en as Kbd,tn as KbdGroup,ye as Message,be as MessageContent,xe as MessageResponse,De as Task,ke as TaskContent,Ee as TaskItem,Te as TaskItemFile,Oe as TaskTrigger,ze as buttonVariants,e as cn,he as defaultFormRegistry,Pt as useChatHistory,X as useCommandMenuContext};
|
|
1
|
+
import{cn as e}from"./lib/utils.js";import{JSONUIProvider as t,Renderer as n,flatToTree as r}from"@json-render/react";import*as i from"react";import{createContext as a,memo as o,useCallback as s,useContext as c,useEffect as l,useMemo as u,useRef as d,useState as f}from"react";import{z as p}from"zod";import{Fragment as m,jsx as h,jsxs as g}from"react/jsx-runtime";import{Streamdown as _}from"streamdown";import{ArrowUpIcon as v,ChevronDownIcon as y,KeyboardIcon as b,LoaderIcon as x,MessageCircleIcon as S,SearchIcon as C,XIcon as w}from"lucide-react";import*as T from"@radix-ui/react-collapsible";import{cva as E}from"class-variance-authority";import{Dialog as D,Slot as O}from"radix-ui";import*as k from"@radix-ui/react-dialog";import{Primitive as A}from"@radix-ui/react-primitive";import{useId as j}from"@radix-ui/react-id";import{composeRefs as M}from"@radix-ui/react-compose-refs";import{useChat as N}from"@ai-sdk/react";import{DefaultChatTransport as ee}from"ai";import{BrowserClient as P,Scope as F,dedupeIntegration as I,defaultStackParser as L,linkedErrorsIntegration as te,makeFetchTransport as ne}from"@sentry/browser";import{motion as re}from"motion/react";const R=a(null);function z(){let e=c(R);if(!e)throw Error(`Confirmation components must be used within Confirmation`);return e}function ie({approval:t,state:n,style:r,...i}){return!t||n===`input-streaming`||n===`input-available`?null:h(R.Provider,{value:{approval:t,state:n},children:h(`div`,{"data-slot":`confirmation`,"data-state":n,"data-approved":t?.approved,role:`alertdialog`,"aria-labelledby":`confirmation-title`,style:{borderRadius:`var(--cmdk-radius, 0.5rem)`,...r},className:e(`flex flex-col gap-2 border p-4`,`data-[state=approval-requested]:border-amber-500/50 data-[state=approval-requested]:bg-amber-50/50 dark:data-[state=approval-requested]:bg-amber-950/20`,`data-[approved=true]:border-green-500/50 data-[approved=true]:bg-green-50/50 dark:data-[approved=true]:bg-green-950/20`,`data-[approved=false]:border-red-500/50 data-[approved=false]:bg-red-50/50 dark:data-[approved=false]:bg-red-950/20`),...i})})}function ae(e){return h(`p`,{id:`confirmation-title`,"data-slot":`confirmation-title`,className:`text-sm font-medium`,...e})}function oe({children:e}){let{state:t}=z();return t===`approval-requested`?h(`div`,{"data-slot":`confirmation-request`,children:e}):null}function se({children:e}){let{approval:t,state:n}=z();return!t?.approved||n!==`approval-responded`&&n!==`output-denied`&&n!==`output-available`?null:h(`div`,{"data-slot":`confirmation-accepted`,children:e})}function ce({children:e}){let{approval:t,state:n}=z();return t?.approved!==!1||n!==`approval-responded`&&n!==`output-denied`&&n!==`output-available`?null:h(`div`,{"data-slot":`confirmation-rejected`,children:e})}function le(e){let{state:t}=z();return t===`approval-requested`?h(`div`,{"data-slot":`confirmation-actions`,className:`flex items-center justify-end gap-2 self-end`,...e}):null}function ue({variant:t=`default`,style:n,...r}){return h(`button`,{"data-slot":`confirmation-action`,"data-variant":t,type:`button`,className:e(`inline-flex h-8 items-center justify-center gap-2 whitespace-nowrap px-3 text-sm font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`,t===`default`&&`bg-primary text-primary-foreground shadow hover:bg-primary/90`,t===`outline`&&`border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground`,t===`destructive`&&`bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90`),style:{borderRadius:`var(--cmdk-radius, 0.375rem)`,...n},...r})}function B(e){e.stopPropagation()}function de({element:t,children:n,onAction:r}){let{id:i=`form`,title:a,submitLabel:o=`Submit`}=t.props??{},s=e=>{e.preventDefault();let t=new FormData(e.currentTarget),n={};t.forEach((e,t)=>{typeof e==`string`&&(n[t]=e)}),r?.({name:`submit`,params:{formId:i,data:n}})};return g(`div`,{"data-slot":`form-card`,className:e(`w-full rounded-lg border bg-card text-card-foreground shadow-sm`),children:[a&&h(`div`,{className:`flex flex-col space-y-1.5 p-4 pb-3`,children:h(`h3`,{className:`text-base font-semibold leading-none tracking-tight`,children:a})}),h(`div`,{className:e(`p-4`,a?``:`pt-4`),children:g(`form`,{onSubmit:s,className:`space-y-4`,children:[n,g(`div`,{className:`flex justify-end gap-2 pt-2`,children:[h(`button`,{type:`button`,className:e(`inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium shadow-sm transition-colors`,`hover:bg-accent hover:text-accent-foreground`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`),onClick:()=>r?.({name:`cancel`,params:{formId:i}}),children:`Cancel`}),h(`button`,{type:`submit`,className:e(`inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow transition-colors`,`hover:bg-primary/90`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,`disabled:pointer-events-none disabled:opacity-50`),children:o})]})]})})]})}function fe({element:t}){let{name:n=`field`,label:r=`Field`,placeholder:i,required:a,defaultValue:o}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,a&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`input`,{id:n,name:n,type:`text`,placeholder:i,required:a,defaultValue:o,autoComplete:`off`,onKeyDown:B,onKeyUp:B,className:e(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}function pe({element:t}){let{name:n=`field`,label:r=`Field`,placeholder:i,required:a,defaultValue:o,rows:s=3}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,a&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`textarea`,{id:n,name:n,placeholder:i,required:a,defaultValue:o,rows:s,onKeyDown:B,onKeyUp:B,className:e(`flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}function me({element:t}){let{name:n=`date`,label:r=`Date`,required:i,defaultValue:a,min:o,max:s}=t.props??{};return g(`div`,{className:`space-y-1.5`,children:[g(`label`,{htmlFor:n,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,children:[r,i&&h(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),h(`input`,{type:`date`,id:n,name:n,required:i,defaultValue:a,min:o,max:s,onKeyDown:B,onKeyUp:B,className:e(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`)})]})}const he={Form:de,TextField:fe,TextArea:pe,DateField:me},ge=p.object({formId:p.string(),data:p.record(p.string(),p.string())}),_e=p.object({formId:p.string()});function ve({ui:e,context:r,onSubmit:i,onCancel:a,registry:o=he}){let c=s(e=>{let t=ge.safeParse(e);t.success?i(t.data.formId,t.data.data):console.warn(`Form submit: Invalid params`,t.error.flatten())},[i]),l=s(e=>{let t=_e.safeParse(e);t.success?a?.(t.data.formId):console.warn(`Form cancel: Invalid params`,t.error.flatten())},[a]);return h(t,{registry:o,initialData:r,actionHandlers:u(()=>({submit:c,cancel:l}),[c,l]),children:h(n,{tree:e,registry:o})})}function ye({from:t,...n}){return h(`div`,{"data-slot":`message`,"data-from":t,className:e(`group flex w-full max-w-[95%] flex-col gap-2`,t===`user`?`is-user ml-auto justify-end`:`is-assistant`),...n})}function be({children:t,style:n,...r}){return h(`div`,{"data-slot":`message-content`,className:e(`flex w-fit min-w-0 max-w-full flex-col gap-2 overflow-hidden text-sm`,`group-[.is-user]:ml-auto group-[.is-user]:bg-secondary group-[.is-user]:px-4 group-[.is-user]:py-3 group-[.is-user]:text-foreground`,`group-[.is-assistant]:text-foreground`),style:{borderRadius:`var(--cmdk-radius, 0.5rem)`,...n},...r,children:t})}const xe=o(function(e){return h(_,{"data-slot":`message-response`,className:`size-full [&>*:first-child]:mt-0 [&>*:last-child]:mb-0`,...e})},(e,t)=>e.children===t.children);function Se({...e}){return h(T.Root,{"data-slot":`collapsible`,...e})}function Ce({...e}){return h(T.CollapsibleTrigger,{"data-slot":`collapsible-trigger`,...e})}function we({...e}){return h(T.CollapsibleContent,{"data-slot":`collapsible-content`,...e})}function Te({children:e,...t}){return h(`div`,{"data-slot":`task-item-file`,className:`inline-flex items-center gap-1 rounded-md border bg-secondary px-1.5 py-0.5 text-xs text-foreground`,...t,children:e})}function Ee({children:e,...t}){return h(`div`,{"data-slot":`task-item`,className:`text-sm text-muted-foreground`,...t,children:e})}function De({defaultOpen:e=!0,...t}){return h(Se,{"data-slot":`task`,defaultOpen:e,...t})}function Oe({children:e,title:t,icon:n,...r}){return h(Ce,{asChild:!0,className:`group`,...r,children:e??g(`div`,{className:`flex w-full cursor-pointer items-center gap-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:[n??h(C,{className:`size-4`}),h(`p`,{className:`text-sm`,children:t}),h(y,{className:`size-4 transition-transform group-data-[state=open]:rotate-180`})]})})}function ke({children:t,...n}){return h(we,{"data-slot":`task-content`,className:e(`text-popover-foreground outline-none`,`data-[state=closed]:animate-out data-[state=open]:animate-in`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2`),...n,children:h(`div`,{className:`mt-4 space-y-2 border-l-2 border-muted pl-4`,children:t})})}const Ae=p.object({name:p.string(),options:p.record(p.string(),p.unknown()).optional()}),je=p.object({actions:p.array(Ae).optional()}),Me=p.object({id:p.string(),approved:p.boolean().optional()}),Ne=p.object({type:p.string(),props:p.record(p.string(),p.unknown()).default({}),children:p.array(p.string()).optional(),parentKey:p.string().nullable().optional()}),Pe=p.object({ui:p.object({elements:p.record(p.string(),Ne)}),context:p.record(p.string(),p.unknown()).optional()});function Fe(e){return e.name}function Ie({messages:e,sendMessage:t,addToolApprovalResponse:n,getActionDescription:r=Fe}){let i=e.filter(e=>e.role===`user`||e.role===`assistant`);return h(m,{children:i.map((e,a)=>{let o=a===i.length-1;return h(ye,{from:e.role,children:h(be,{children:e.parts.map((i,a)=>h(Le,{part:i,messageId:e.id,partIndex:a,isLastMessage:o,sendMessage:t,addToolApprovalResponse:n,getActionDescription:r},`${e.id}-${a}`))})},e.id)})})}function Le({part:e,messageId:t,partIndex:n,isLastMessage:r,sendMessage:i,addToolApprovalResponse:a,getActionDescription:o}){if(e.type===`text`)return h(xe,{children:e.text});if(e.type===`tool-performActions`){let r=`input`in e?e.input:void 0,i=je.safeParse(r),s=i.success?i.data.actions??[]:[];if(s.length===0)return null;let c=s.length,l=`state`in e?e.state:void 0,u=`approval`in e?e.approval:void 0,d=Me.safeParse(u),f=d.success?d.data:void 0;return f&&l?g(ie,{state:l,approval:f,children:[h(ae,{children:c===1?`Confirm action`:`Confirm ${c} actions`}),h(oe,{children:h(`ul`,{className:`list-disc list-inside text-sm text-muted-foreground mt-2`,children:s.map((e,r)=>h(`li`,{children:o(e)},`${t}-${n}-${r}`))})}),h(se,{children:h(`span`,{className:`text-sm text-muted-foreground`,children:c===1?`Action approved`:`${c} actions approved`})}),h(ce,{children:h(`span`,{className:`text-sm text-muted-foreground`,children:c===1?`Action cancelled`:`${c} actions cancelled`})}),g(le,{children:[h(ue,{variant:`outline`,onClick:()=>a({id:f.id,approved:!1}),children:`Deny`}),h(ue,{onClick:()=>a({id:f.id,approved:!0}),children:`Approve`})]})]}):g(De,{defaultOpen:!1,children:[h(Oe,{title:c===1?`Performing 1 action`:`Performing ${c} actions`}),h(ke,{children:s.map((e,r)=>h(Ee,{children:o(e)},`${t}-${n}-${r}`))})]})}return e.type===`tool-renderUI`&&r&&(`state`in e?e.state:void 0)===`output-available`&&`output`in e?h(Re,{output:e.output,sendMessage:i}):null}function Re({output:e,sendMessage:t}){let n=i.useMemo(()=>{let t=Pe.safeParse(e);return t.success?{ui:r(Object.entries(t.data.ui.elements).map(([e,t])=>({...t,key:e}))),context:t.data.context}:null},[e]),a=i.useCallback((e,n)=>{t({text:`[Form:${e}] ${JSON.stringify(n)}`})},[t]),o=i.useCallback(e=>{t({text:`[Form:${e}] cancelled`})},[t]);return n?h(ve,{ui:n.ui,context:n.context,onSubmit:a,onCancel:o}):null}const ze=E(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function Be({className:t,variant:n=`default`,size:r=`default`,asChild:i=!1,...a}){return h(i?O.Root:`button`,{"data-slot":`button`,"data-variant":n,"data-size":r,className:e(ze({variant:n,size:r,className:t})),...a})}function Ve({children:t,className:n,...r}){let a=i.useRef(null);return i.useEffect(()=>{a.current&&(a.current.scrollTop=a.current.scrollHeight)},[t]),h(`div`,{ref:a,"data-slot":`chat-message-list`,className:e(`flex flex-col overflow-y-auto scroll-smooth`,n),...r,children:t})}function He({text:t=`AI is thinking...`,className:n,...r}){return g(`div`,{"data-slot":`chat-loading`,className:e(`flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground`,n),...r,children:[h(x,{className:`size-4 animate-spin`}),h(`span`,{children:t})]})}function Ue({title:t=`Start a conversation`,description:n=`Ask a question or describe what you need help with.`,className:r,...i}){return h(`div`,{"data-slot":`chat-empty`,className:e(`flex flex-col items-center justify-center gap-2 py-8 text-center`,r),...i,children:g(`div`,{className:`space-y-1`,children:[h(`h3`,{className:`text-sm font-medium`,children:t}),h(`p`,{className:`text-xs text-muted-foreground`,children:n})]})})}var We=1,Ge=.9,Ke=.8,qe=.17,Je=.1,Ye=.999,Xe=.9999,Ze=.99,Qe=/[\\\/_+.#"@\[\(\{&]/,$e=/[\\\/_+.#"@\[\(\{&]/g,et=/[\s-]/,tt=/[\s-]/g;function nt(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?We:Ze;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=nt(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=We:Qe.test(e.charAt(l-1))?(d*=Ke,p=e.slice(i,l-1).match($e),p&&i>0&&(d*=Ye**+p.length)):et.test(e.charAt(l-1))?(d*=Ge,m=e.slice(i,l-1).match(tt),m&&i>0&&(d*=Ye**+m.length)):(d*=qe,i>0&&(d*=Ye**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=Xe)),(d<Je&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=nt(e,t,n,r,l+1,a+2,o),f*Je>d&&(d=f*Je)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function rt(e){return e.toLowerCase().replace(tt,` `)}function it(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,nt(e,t,rt(e),rt(t),0,0,{})}const V=`[cmdk-group=""]`,at=`[cmdk-group-items=""]`,ot=`[cmdk-item=""]`,st=`${ot}:not([aria-disabled="true"])`,ct=`cmdk-item-select`,H=`data-value`,lt=(e,t,n)=>it(e,t,n),ut=i.createContext(void 0),U=()=>{let e=i.useContext(ut);if(!e)throw Error(`CommandContext is missing a provider`);return e},dt=i.createContext(void 0),ft=()=>{let e=i.useContext(dt);if(!e)throw Error(`StoreContext is missing a provider`);return e},pt=i.createContext(void 0),mt=i.forwardRef((e,t)=>{let n=K(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=K(()=>new Set),a=K(()=>new Map),o=K(()=>new Map),s=K(()=>new Set),c=Tt(e),{label:l,children:u,value:d,onValueChange:f,filter:p,shouldFilter:m,loop:_,disablePointerSelection:v=!1,vimBindings:y=!0,...b}=e,x=j(),S=j(),C=j(),w=i.useRef(null),T=Dt();G(()=>{if(d!==void 0){let e=d.trim();n.current.value=e,E.emit()}},[d]),G(()=>{T(6,ee)},[]);let E=i.useMemo(()=>({subscribe:e=>(s.current.add(e),()=>s.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)N(),k(),T(1,M);else if(e===`value`){let e=document.activeElement;if(e instanceof HTMLElement&&(e.hasAttribute(`cmdk-input`)||e.hasAttribute(`cmdk-root`))){let e=document.getElementById(C);e?e.focus():document.getElementById(x)?.focus()}if(T(7,()=>{n.current.selectedItemId=P()?.id,E.emit()}),r||T(5,ee),c.current?.value!==void 0){let e=t??``;c.current.onValueChange?.(e);return}}E.emit()}},emit:()=>{s.current.forEach(e=>e())}}),[]),D=i.useMemo(()=>({value:(e,t,r)=>{t!==o.current.get(e)?.value&&(o.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,O(t,r)),T(2,()=>{k(),E.emit()}))},item:(e,t)=>{if(r.current.add(e),t)if(!a.current.has(t))a.current.set(t,new Set([e]));else{let n=a.current.get(t);n?n.add(e):a.current.set(t,new Set([e]))}return T(3,()=>{N(),k(),n.current.value||M(),E.emit()}),()=>{o.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=P();T(4,()=>{N(),t?.getAttribute(`id`)===e&&M(),E.emit()})}},group:e=>(a.current.has(e)||a.current.set(e,new Set),()=>{o.current.delete(e),a.current.delete(e)}),filter:()=>c.current.shouldFilter!==!1,label:l||e[`aria-label`]||`Command Menu`,getDisablePointerSelection:()=>!!c.current.disablePointerSelection,listId:x,inputId:C,labelId:S,listInnerRef:w}),[]);function O(e,t){let r=c.current?.filter??lt;return e?r(e,n.current.search,t):0}function k(){if(!n.current.search||c.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=a.current.get(n);if(!r){t.push([n,0]);return}let i=0;r.forEach(t=>{let n=e.get(t)??0;i=Math.max(n,i)}),t.push([n,i])});let r=w.current;F().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i??``)??0)-(e.get(r??``)??0)}).forEach(e=>{let t=e.closest(at);if(t){let n=e.parentElement===t?e:e.closest(`${at} > *`);n&&t.appendChild(n)}else{if(!r)return;let t=e.parentElement===r?e:e.closest(`${at} > *`);t&&r.appendChild(t)}}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=w.current?.querySelector(`${V}[cmdk-group-id="${e[0]}"]`);t?.parentElement&&t.parentElement.appendChild(t)});let i=new Set(t.map(e=>e[0]));w.current?.querySelectorAll(`${V}[cmdk-group-id]`)?.forEach(e=>{let t=e.getAttribute(`cmdk-group-id`);t&&!i.has(t)&&e.parentElement?.appendChild(e)});let o=w.current?.closest(`[cmdk-list]`);o&&(o.scrollTop=0)}function M(){let e=F().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(H);E.setState(`value`,e??``)}function N(){if(!n.current.search||c.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=O(o.current.get(t)?.value??``,o.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of a.current)for(let r of t)if((n.current.filtered.items.get(r)??0)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function ee(){let e=P();e&&(e.parentElement?.firstChild===e&&e.closest(V)?.querySelector(`[cmdk-group-heading=""]`)?.scrollIntoView({block:`nearest`}),e.scrollIntoView({block:`nearest`}))}function P(){return w.current?.querySelector(`${ot}[aria-selected="true"]`)}function F(){return Array.from(w.current?.querySelectorAll(st)||[])}function I(e){let t=F()[e];t&&E.setState(`value`,t.getAttribute(H)??``)}function L(e){let t=P(),n=F(),r=n.findIndex(e=>e===t),i=n[r+e];c.current?.loop&&(i=r+e<0?n[n.length-1]:r+e===n.length?n[0]:n[r+e]),i&&E.setState(`value`,i.getAttribute(H)??``)}function te(e){let t=P()?.closest(V),n;for(;t&&!n;)t=e>0?Ct(t,V):wt(t,V),n=t?.querySelector(st);n?E.setState(`value`,n.getAttribute(H)??``):L(e)}let ne=()=>I(F().length-1),re=e=>{e.preventDefault(),e.metaKey?ne():e.altKey?te(1):L(1)},R=e=>{e.preventDefault(),e.metaKey?I(0):e.altKey?te(-1):L(-1)};return g(A.div,{ref:t,tabIndex:-1,...b,"cmdk-root":``,onKeyDown:e=>{b.onKeyDown?.(e);let t=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||t))switch(e.key){case`n`:case`j`:y&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:y&&e.ctrlKey&&R(e);break;case`ArrowUp`:R(e);break;case`Home`:e.preventDefault(),I(0);break;case`End`:e.preventDefault(),ne();break;case`Enter`:{e.preventDefault();let t=P();if(t){let e=new Event(ct);t.dispatchEvent(e)}}}},children:[h(`label`,{"cmdk-label":``,htmlFor:D.inputId,id:D.labelId,style:kt,children:l}),J(e,e=>h(dt.Provider,{value:E,children:h(ut.Provider,{value:D,children:e})}))]})}),ht=i.forwardRef((e,t)=>{let n=j(),r=i.useRef(null),a=i.useContext(pt),o=U(),s=Tt(e),c=s.current?.forceMount??a?.forceMount;G(()=>o.item(n,a?.id),[c]);let l=Et(n,r,[e.value,e.children,r],e.keywords),u=ft(),d=q(e=>e.value&&e.value===l.current),f=q(e=>c||o.filter()===!1?!0:e.search?(e.filtered.items.get(n)??0)>0:!0);i.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(ct,p),()=>t.removeEventListener(ct,p)},[f,e.onSelect,e.disabled]);function p(){m(),s.current.onSelect?.(l.current)}function m(){u.setState(`value`,l.current,!0)}if(!f)return null;let{disabled:g,value:_,onSelect:v,forceMount:y,keywords:b,...x}=e;return h(A.div,{ref:M(r,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!g,"aria-selected":!!d,"data-disabled":!!g,"data-selected":!!d,onPointerMove:g||o.getDisablePointerSelection()?void 0:m,onClick:g?void 0:p,children:e.children})}),gt=i.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:a,...o}=e,s=j(),c=i.useRef(null),l=i.useRef(null),u=j(),d=U(),f=q(e=>a||d.filter()===!1?!0:e.search?e.filtered.groups.has(s):!0);G(()=>d.group(s),[]),Et(s,c,[e.value,e.heading,l]);let p=i.useMemo(()=>({id:s,forceMount:a}),[a]);return g(A.div,{ref:M(c,t),...o,"cmdk-group":``,"cmdk-group-id":s,role:`presentation`,hidden:f?void 0:!0,children:[n&&h(`div`,{ref:l,"cmdk-group-heading":``,"aria-hidden":!0,id:u,children:n}),J(e,e=>h(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?u:void 0,children:h(pt.Provider,{value:p,children:e})}))]})}),_t=i.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,a=i.useRef(null),o=q(e=>!e.search);return!n&&!o?null:h(A.div,{ref:M(a,t),...r,"cmdk-separator":``,role:`separator`})}),vt=i.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,a=e.value!=null,o=ft(),s=q(e=>e.search),c=q(e=>e.selectedItemId),l=U();return i.useEffect(()=>{e.value!=null&&o.setState(`search`,e.value)},[e.value]),h(A.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":l.listId,"aria-labelledby":l.labelId,"aria-activedescendant":c,id:l.inputId,type:`text`,value:a?e.value:s,onChange:e=>{a||o.setState(`search`,e.target.value),n?.(e.target.value)}})}),yt=i.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...a}=e,o=i.useRef(null),s=i.useRef(null),c=q(e=>e.selectedItemId),l=U();return i.useEffect(()=>{if(s.current&&o.current){let e=s.current,t=o.current,n=null,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.unobserve(e)}}},[]),h(A.div,{ref:M(o,t),...a,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":c,"aria-label":r,id:l.listId,children:J(e,e=>h(`div`,{ref:M(s,l.listInnerRef),"cmdk-list-sizer":``,children:e}))})}),bt=i.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return h(k.Root,{open:n,onOpenChange:r,children:g(k.Portal,{container:o,children:[h(k.Overlay,{"cmdk-overlay":``,className:i}),h(k.Content,{"aria-label":e.label,"cmdk-dialog":``,className:a,children:h(mt,{ref:t,...s})})]})})}),xt=i.forwardRef((e,t)=>q(e=>e.filtered.count===0)?h(A.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),St=i.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return h(A.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i,children:J(e,e=>h(`div`,{"aria-hidden":!0,children:e}))})}),W=Object.assign(mt,{List:yt,Item:ht,Input:vt,Group:gt,Separator:_t,Dialog:bt,Empty:xt,Loading:St});function Ct(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function wt(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Tt(e){let t=i.useRef(e);return G(()=>{t.current=e}),t}const G=typeof window>`u`?i.useEffect:i.useLayoutEffect;function K(e){let t=i.useRef(void 0);return t.current===void 0&&(t.current=e()),t}function q(e){let t=ft(),n=()=>e(t.snapshot());return i.useSyncExternalStore(t.subscribe,n,n)}function Et(e,t,n,r=[]){let a=i.useRef(``),o=U();return G(()=>{let i=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&e&&`current`in e)return e.current?e.current.textContent?.trim():a.current}})()??``,s=r.map(e=>e.trim());o.value(e,i,s),t.current?.setAttribute(H,i),a.current=i}),a}const Dt=()=>{let[e,t]=i.useState(),n=K(()=>new Map);return G(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Ot(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function J({asChild:e,children:t},n){if(e&&i.isValidElement(t)){let e=t;return i.cloneElement(Ot(e),{ref:e.ref},n(e.props.children))}return n(t)}const kt={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`};function At(){return crypto.randomUUID()}function jt(e){let t=e.find(e=>e.role===`user`);if(!t)return`New conversation`;let n=t.parts?.filter(e=>e.type===`text`).map(e=>e.text).join(` `)||`New conversation`;return n.length>50?n.slice(0,50)+`...`:n}function Mt(e){return typeof e!=`object`||!e||!(`version`in e)||e.version!==1||!(`conversations`in e)||!Array.isArray(e.conversations)?null:e}function Nt({storageKey:e=`cmdk-chat-history`,maxConversations:t=50,messages:n,setMessages:r}){let[i,a]=f([]),[o,c]=f(null),[p,m]=f(!1),h=d(n);h.current=n;let g=d(r);g.current=r;let _=d(i);_.current=i;let v=d(o);v.current=o,l(()=>{try{let t=localStorage.getItem(e);if(t){let n=Mt(JSON.parse(t));n?a(n.conversations):(console.warn(`Chat history: stored data failed validation. Discarding.`),localStorage.removeItem(e))}}catch(e){console.error(`Failed to load chat history:`,e)}finally{m(!0)}},[e]),l(()=>{if(p)try{let t={version:1,conversations:i};localStorage.setItem(e,JSON.stringify(t))}catch(e){console.error(`Failed to save chat history:`,e)}},[i,e,p]);let y=s(()=>{let e=h.current,n=v.current;!n||e.length===0||a(r=>{let i=Date.now();return r.find(e=>e.id===n)?r.map(t=>t.id===n?{...t,messages:e,title:jt(e),updatedAt:i}:t):[{id:n,title:jt(e),messages:e,createdAt:i,updatedAt:i},...r].slice(0,t)})},[t]),b=s(()=>{v.current&&h.current.length>0&&y(),g.current?.([]),c(At())},[y]),x=s(e=>{v.current&&h.current.length>0&&y();let t=_.current.find(t=>t.id===e);t&&(g.current?.(t.messages),c(e))},[y]);return u(()=>({conversations:i,currentConversationId:o,startNewChat:b,loadConversation:x,saveCurrentConversation:y}),[i,o,b,x,y])}let Y=null,X=null;function Pt(){try{return typeof process<`u`&&process.env?.BETTER_CMDK_TELEMETRY_DISABLED===`1`}catch{return!1}}function Ft(e,t){return delete e.user,delete e.server_name,e.request&&(delete e.request.cookies,delete e.request.headers,delete e.request.env,delete e.request.data),e.breadcrumbs=[],e}function It(){typeof window>`u`||Y===null&&(Pt()||(Y=new P({dsn:`https://7d9fc7e14e8769805297d46569e33c05@o4510706172755968.ingest.us.sentry.io/4510846832017408`,transport:ne,stackParser:L,integrations:[I(),te()],beforeSend:Ft,sendDefaultPii:!1,tracesSampleRate:1}),X=new F,X.setClient(Y),Y.init()))}function Lt(e,t){!X||!Y||(t?X.captureException(e,{captureContext:e=>(e.setExtras(t),e)}):X.captureException(e))}function Rt(e){try{let t=new Uint8Array(e/2);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}catch{let t=``;for(let n=0;n<e;n++)t+=Math.floor(Math.random()*16).toString(16);return t}}function zt(e,t,n){if(!X||!Y)return n();let r=Date.now()/1e3,i=Rt(32),a=Rt(16),o=`ok`,s=()=>{let n=Date.now()/1e3;X.captureEvent({type:`transaction`,transaction:e,start_timestamp:r,timestamp:n,contexts:{trace:{trace_id:i,span_id:a,op:t,status:o}}})};try{let e=n();return e instanceof Promise?e.then(e=>(s(),e),e=>{throw o=`internal_error`,s(),e}):(s(),e)}catch(e){throw o=`internal_error`,s(),e}}const Bt=i.createContext(null),Vt=[],Ht=`https://better-cmdk.com/api/chat`;function Ut({children:e,chatEndpoint:t=Ht,chat:n,onModeChange:r,onOpenChange:a,historyStorageKey:o,maxConversations:s}){let[c,l]=i.useState(`command`),[u,d]=i.useState(``),[f,p]=i.useState(`idle`),[m,g]=i.useState(null),_=i.useRef(n);_.current=n;let v=!!n;i.useEffect(()=>{It()},[]);let y=i.useMemo(()=>{if(!(v||!t))return new ee({api:t})},[t,v]),b=N(i.useMemo(()=>y?{transport:y,onError:e=>{Lt(e,{source:`internalChat.onError`}),p(`error`),g(e)}}:{},[y])),x=n?.status,S=n?.error??null;i.useEffect(()=>{if(v)x===`ready`?p(`idle`):x===`streaming`?p(`streaming`):x===`submitted`?p(`submitted`):x===`error`&&p(`error`),g(S);else{let e=b.status;e===`streaming`?p(`streaming`):e===`submitted`?p(`submitted`):e===`error`?p(`error`):e===`ready`&&p(`idle`)}},[x,S,b.status,v]);let C=i.useCallback(e=>{l(e),r?.(e)},[r]),w=!!(n||t),T=i.useCallback(e=>{w&&zt(`switchToChat`,`ui.action`,()=>{C(`chat`),e&&d(e)})},[w,C]),E=i.useCallback(()=>{C(`command`),d(``),p(`idle`),g(null)},[C]),D=i.useCallback(async e=>{e.trim()&&await zt(`sendMessage`,`function`,async()=>{try{let t=_.current;if(t){d(``),t.sendMessage({text:e.trim()});return}if(!y)return;p(`submitted`),d(``),await b.sendMessage({text:e.trim()})}catch(e){throw Lt(e,{source:`sendMessage`}),e}})},[b,y]),O=f===`submitted`||f===`streaming`,k=n?n.messages:b.messages??Vt,A=n?.setMessages??b.setMessages,j=n?.addToolApprovalResponse,M=n?.actions,P=Nt({storageKey:o,maxConversations:s,messages:k,setMessages:A}),F=i.useCallback(e=>{P.loadConversation(e),C(`chat`)},[P.loadConversation,C]),I=i.useRef(f);i.useEffect(()=>{let e=I.current;I.current=f,(e===`streaming`||e===`submitted`)&&f===`idle`&&k.length>0&&P.saveCurrentConversation()},[f,k.length,P.saveCurrentConversation]);let L=i.useCallback(()=>{a?.(!1)},[a]),te=i.useMemo(()=>({mode:c,setMode:C,inputValue:u,setInputValue:d,chatEndpoint:t,status:f,error:m,switchToChat:T,switchToCommand:E,messages:k,sendMessage:D,isLoading:O,isEnabled:w,addToolApprovalResponse:j,actions:M,requestClose:L,conversations:P.conversations,currentConversationId:P.currentConversationId,startNewChat:P.startNewChat,loadConversation:F}),[c,C,u,t,f,m,T,E,k,D,O,w,j,M,L,P.conversations,P.currentConversationId,P.startNewChat,F]);return h(Bt.Provider,{value:te,children:e})}function Z(){let e=i.useContext(Bt);if(!e)throw Error(`useCommandMenuContext must be used within a CommandMenuProvider`);return e}function Wt({...e}){return h(D.Root,{"data-slot":`dialog`,...e})}function Gt({...e}){return h(D.Trigger,{"data-slot":`dialog-trigger`,...e})}function Kt({...e}){return h(D.Portal,{"data-slot":`dialog-portal`,...e})}function qt({...e}){return h(D.Close,{"data-slot":`dialog-close`,...e})}function Jt({className:t,style:n,...r}){return h(D.Overlay,{"data-slot":`dialog-overlay`,className:e(`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50`,t),style:{position:`fixed`,inset:0,zIndex:50,backgroundColor:`rgb(0 0 0 / 0.5)`,...n},...r})}function Yt({className:t,children:n,showCloseButton:r=!0,...i}){return h(Kt,{"data-slot":`dialog-portal`,children:g(`div`,{className:`bcmdk-root`,children:[h(Jt,{}),g(D.Content,{"data-slot":`dialog-content`,className:e(`bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg`,t),...i,children:[n,r&&g(D.Close,{"data-slot":`dialog-close`,className:`ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,children:[h(w,{}),h(`span`,{className:`sr-only`,children:`Close`})]})]})]})})}function Xt({className:t,...n}){return h(`div`,{"data-slot":`dialog-header`,className:e(`flex flex-col gap-2 text-center sm:text-left`,t),...n})}function Zt({className:t,showCloseButton:n=!1,children:r,...i}){return g(`div`,{"data-slot":`dialog-footer`,className:e(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,t),...i,children:[r,n&&h(D.Close,{asChild:!0,children:h(Be,{variant:`outline`,children:`Close`})})]})}function Qt({className:t,...n}){return h(D.Title,{"data-slot":`dialog-title`,className:e(`text-lg leading-none font-semibold`,t),...n})}function $t({className:t,...n}){return h(D.Description,{"data-slot":`dialog-description`,className:e(`text-muted-foreground text-sm`,t),...n})}function en({className:t,...n}){return h(`kbd`,{"data-slot":`kbd`,className:e(`bg-muted text-muted-foreground pointer-events-none inline-grid w-fit min-w-5 place-items-center gap-1 rounded px-1.5 py-0.5 font-sans text-xs font-medium select-none leading-[1]`,`[&_svg:not([class*='size-'])]:size-3`,`[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10`,t),...n})}function tn({className:t,...n}){return h(`kbd`,{"data-slot":`kbd-group`,className:e(`inline-flex items-center gap-1`,t),...n})}function nn({className:t,...n}){return h(W,{"data-slot":`command`,className:e(`bcmdk-root text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md`,t),...n})}function rn({className:t,children:n,...r}){return h(Kt,{"data-slot":`dialog-portal`,children:h(`div`,{className:`bcmdk-root`,children:h(D.Content,{"data-slot":`dialog-content`,className:e(`backdrop-blur-xl fixed top-1/3 left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] overflow-hidden rounded-xl border-none p-2 shadow-2xl ring-0 duration-200 outline-none sm:max-w-lg`,t),style:{backgroundColor:`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`},...r,children:n})})})}function an({className:t,...n}){return h(W.Empty,{"data-slot":`command-empty`,className:e(`text-muted-foreground py-6 text-center text-sm`,t),...n})}function Q({className:t,ref:n,...r}){let a=i.useCallback(e=>{if(e){let t=e.querySelector(`[cmdk-group-heading]`);t instanceof HTMLElement&&(t.style.position=`sticky`,t.style.top=`0`,t.style.zIndex=`10`,t.style.width=`fit-content`,t.style.backdropFilter=`blur(24px)`,t.style.setProperty(`-webkit-backdrop-filter`,`blur(24px)`),t.style.backgroundColor=`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`,t.style.borderRadius=`6px`,t.style.setProperty(`padding-top`,`4px`,`important`),t.style.setProperty(`padding-bottom`,`4px`,`important`))}typeof n==`function`?n(e):n&&(n.current=e)},[n]);return h(W.Group,{ref:a,"data-slot":`command-group`,className:e(`text-foreground !p-0 [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:scroll-mt-16 [&_[cmdk-group-heading]]:pt-0! [&_[cmdk-group-heading]]:!p-3 [&_[cmdk-group-heading]]:!pb-1 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium`,t),...r})}function on({className:t,...n}){return h(W.Separator,{"data-slot":`command-separator`,className:e(`bg-border -mx-1 h-px`,t),...n})}function sn({className:t,style:n,onSelect:r,closeOnSelect:a=!0,...o}){let s=i.useContext(Bt),c=i.useCallback(e=>{r?.(e),a&&s?.requestClose?.()},[r,a,s]);return h(W.Item,{"data-slot":`command-item`,className:e(`data-[selected=true]:border-input data-[selected=true]:bg-input/50 [&_svg:not([class*='text-'])]:text-muted-foreground relative flex h-[var(--cmdk-item-height,2.25rem)] cursor-default items-center gap-2 border border-transparent px-3 text-sm font-medium outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),style:{borderRadius:`var(--cmdk-radius, 0.375rem)`,...n},onSelect:c,...o})}function cn({className:t,children:n,...r}){let i=typeof n==`string`?[...n]:null;return h(`span`,{"data-slot":`command-shortcut`,className:e(`ml-auto flex items-center gap-1`,t),...r,children:i?i.map((e,t)=>h(en,{children:e},t)):n})}var ln=class extends i.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){Lt(e,{componentStack:t.componentStack??void 0})}render(){return this.state.hasError?null:this.props.children}};function un(e){return e instanceof Element?!!e.closest(`input, textarea, select, button, a, [contenteditable='true'], [contenteditable=''], [data-cmdk-mobile-gesture-ignore]`):!1}function dn(e,t,n,r,i,a){let o=window.innerWidth,s=window.innerHeight,c=o*n,l=o-a,u=Math.max(0,l-c),d=s*(1-r),f=s-i;return e>=u&&e<=l&&t>=d&&t<=f}function fn({enabled:e,open:t,holdMs:n,swipeUpPx:r,onTrigger:a,movementTolerancePx:o=10,horizontalCancelPx:s=24,activationZoneWidthPercent:c=.4,activationZoneHeightPercent:l=.4,bottomExclusionPx:u=8,rightExclusionPx:d=0}){let[f,p]=i.useState(!1),m=i.useRef(null),h=i.useRef(0),g=i.useRef(a),_=i.useRef({applied:!1,touchCallout:``,webkitUserSelect:``,userSelect:``});i.useEffect(()=>{g.current=a},[a]);let v=i.useCallback(()=>{if(typeof document>`u`||_.current.applied)return;let{style:e}=document.documentElement;_.current={applied:!0,touchCallout:e.getPropertyValue(`-webkit-touch-callout`),webkitUserSelect:e.getPropertyValue(`-webkit-user-select`),userSelect:e.getPropertyValue(`user-select`)},e.setProperty(`-webkit-touch-callout`,`none`),e.setProperty(`-webkit-user-select`,`none`),e.setProperty(`user-select`,`none`)},[]),y=i.useCallback(()=>{if(typeof document>`u`)return;let e=_.current;if(!e.applied)return;let{style:t}=document.documentElement;e.touchCallout?t.setProperty(`-webkit-touch-callout`,e.touchCallout):t.removeProperty(`-webkit-touch-callout`),e.webkitUserSelect?t.setProperty(`-webkit-user-select`,e.webkitUserSelect):t.removeProperty(`-webkit-user-select`),e.userSelect?t.setProperty(`user-select`,e.userSelect):t.removeProperty(`user-select`),_.current={applied:!1,touchCallout:``,webkitUserSelect:``,userSelect:``}},[]),b=i.useCallback(()=>{let e=m.current;e?.timer!=null&&window.clearTimeout(e.timer),m.current=null,p(!1),y()},[y]);return i.useEffect(()=>{if(!e||t||typeof window>`u`){b();return}let i=e=>{if(e.touches.length!==1||un(e.target))return;let t=e.touches[0];if(!t||!dn(t.clientX,t.clientY,c,l,u,d))return;h.current=Date.now(),v();let r=window.setTimeout(()=>{let e=m.current;e&&(e.armed=!0,p(!0),typeof navigator<`u`&&`vibrate`in navigator&&navigator.vibrate(6))},n);m.current={startX:t.clientX,startY:t.clientY,armed:!1,timer:r}},a=e=>{if(e.touches.length!==1){b();return}let t=m.current;if(!t)return;let n=e.touches[0];if(!n)return;let i=n.clientX-t.startX,a=n.clientY-t.startY;if(!t.armed){Math.hypot(i,a)>o&&b();return}if(e.cancelable&&e.preventDefault(),Math.abs(i)>s){b();return}a<=-r&&(b(),typeof navigator<`u`&&`vibrate`in navigator&&navigator.vibrate(14),g.current())},f=()=>{b()},_=()=>{b()},y=e=>{let t=m.current!==null,r=Date.now()-h.current<n+1200,i=dn(e.clientX,e.clientY,c,l,u,d);if(t||r&&i){if(!t&&un(e.target))return;e.preventDefault(),e.stopPropagation()}};return document.addEventListener(`touchstart`,i,{passive:!1}),document.addEventListener(`touchmove`,a,{passive:!1}),document.addEventListener(`touchend`,f,{passive:!0}),document.addEventListener(`touchcancel`,_,{passive:!0}),document.addEventListener(`contextmenu`,y,!0),()=>{document.removeEventListener(`touchstart`,i),document.removeEventListener(`touchmove`,a),document.removeEventListener(`touchend`,f),document.removeEventListener(`touchcancel`,_),document.removeEventListener(`contextmenu`,y,!0),b()}},[e,t,n,r,o,s,c,l,u,d,b,v]),{showHint:f}}function pn(e){let[t,n]=i.useState(0);return i.useEffect(()=>{if(!e||typeof window>`u`){n(0);return}let t=window.visualViewport;if(!t){n(0);return}let r=()=>{let e=Math.max(0,Math.round(window.innerHeight-t.height-t.offsetTop));n(t=>t===e?t:e)};return r(),t.addEventListener(`resize`,r),t.addEventListener(`scroll`,r),window.addEventListener(`orientationchange`,r),()=>{t.removeEventListener(`resize`,r),t.removeEventListener(`scroll`,r),window.removeEventListener(`orientationchange`,r)}},[e]),t}const mn=e=>{},hn={none:`rounded-none`,sm:`rounded-sm`,md:`rounded-md`,lg:`rounded-lg`,xl:`rounded-xl`},gn={none:`0px`,sm:`0.125rem`,md:`0.375rem`,lg:`0.5rem`,xl:`0.75rem`},_n=i.createContext({isMobile:!1,layout:`keyboard-last`,keyboardInset:0,showQuickActions:!1,quickActionsCount:4});function vn(){return i.useContext(_n)}function yn(e){let t=e?.gesture!==!1,n=e?.gesture===!1?void 0:e?.gesture;return{enabled:e?.enabled??!0,breakpoint:e?.breakpoint??900,layout:e?.layout??`keyboard-last`,gesture:{enabled:t?n?.enabled??!0:!1,holdMs:t?n?.holdMs??350:350,swipeUpPx:t?n?.swipeUpPx??56:56},showQuickActions:e?.showQuickActions??!0,quickActionsCount:e?.quickActionsCount??4}}function bn(e,t){let[n,r]=i.useState(!1);return i.useEffect(()=>{if(!t||typeof window>`u`){r(!1);return}let n=window.matchMedia(`(max-width: ${e}px)`),i=window.matchMedia(`(pointer: coarse)`),a=()=>{r(n.matches||i.matches)};return a(),n.addEventListener(`change`,a),i.addEventListener(`change`,a),window.addEventListener(`orientationchange`,a),()=>{n.removeEventListener(`change`,a),i.removeEventListener(`change`,a),window.removeEventListener(`orientationchange`,a)}},[e,t]),n}function xn(e){let t=Date.now()-e,n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Sn({className:t,children:n,corners:r=`xl`,borderColor:a,isMobile:o,keyboardInset:s,onRequestClose:c,onInteractOutside:l,...u}){let d=i.useRef(null),f=i.useCallback(()=>{if(typeof document>`u`)return;let e=document.activeElement;if(e instanceof HTMLElement&&e.hasAttribute(`cmdk-input`)){e.blur();return}c?.()},[c]),p=e=>{if(e.touches.length!==1)return;let t=e.touches[0];t&&(d.current={x:t.clientX,y:t.clientY})},m=e=>{let t=d.current;if(d.current=null,!t||e.changedTouches.length===0)return;let n=e.changedTouches[0];if(!n)return;let r=n.clientX-t.x;n.clientY-t.y>56&&Math.abs(r)<42&&f()},_=e=>{if(l?.(e),e.defaultPrevented)return;let t=e.target;t instanceof HTMLElement&&t.closest(`[data-cmdk-powered-link]`)&&e.preventDefault()};return h(Kt,{"data-slot":`dialog-portal`,children:g(`div`,{className:`bcmdk-root`,children:[o&&h(D.Overlay,{className:`fixed inset-0 z-40 bg-black/35 backdrop-blur-[1px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,style:{position:`fixed`,inset:0,zIndex:40,backgroundColor:`rgb(0 0 0 / 0.35)`,backdropFilter:`blur(1px)`,WebkitBackdropFilter:`blur(1px)`}}),g(`div`,{className:e(`fixed z-50 w-full max-w-[calc(100%-2rem)]`,o?`inset-x-0 bottom-0 max-w-none px-0`:`top-1/3 left-[50%] translate-x-[-50%] translate-y-[-50%]`),style:o?{left:0,right:0,bottom:0,maxWidth:`none`,paddingLeft:0,paddingRight:0}:{maxWidth:`45vw`},children:[g(D.Content,{"data-slot":`dialog-content`,className:e(`backdrop-blur-xl flex flex-col w-full overflow-hidden border border-input p-0 ring-0 outline-none`,o?`border-x-0 border-b-0 will-change-transform data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-bottom-8 data-[state=open]:slide-in-from-bottom-8 data-[state=open]:duration-300 data-[state=closed]:duration-200`:hn[r],t),style:{"--cmdk-radius":gn[r],"--cmdk-mobile-keyboard-inset":`${s??0}px`,"--cmdk-mobile-sheet-top-inset":`max(11rem, calc(env(safe-area-inset-top) + 8rem))`,maxHeight:o?`calc(100dvh - var(--cmdk-mobile-sheet-top-inset))`:`45vh`,height:o?`calc(100dvh - var(--cmdk-mobile-sheet-top-inset))`:void 0,...o?{borderTopLeftRadius:gn[r],borderTopRightRadius:gn[r],borderBottomLeftRadius:`0px`,borderBottomRightRadius:`0px`}:{},backgroundColor:`color-mix(in oklch, oklch(var(--bcmdk-background)) 95%, transparent)`,boxShadow:`4px 4px 12px -2px rgba(0,0,0,0.12), -4px 4px 12px -2px rgba(0,0,0,0.12), 0 8px 16px -4px rgba(0,0,0,0.1)`,...a?{"--tw-ring-color":a}:{}},...u,onInteractOutside:_,children:[o&&h(`div`,{className:`flex justify-center py-2`,"data-cmdk-mobile-gesture-ignore":!0,onTouchStart:p,onTouchEnd:m,children:h(`div`,{className:`h-1.5 w-11 rounded-full bg-muted-foreground/35`})}),n]}),h(`div`,{className:e(`flex justify-end select-none pointer-events-auto`,o&&`hidden`),children:h(`a`,{"data-cmdk-powered-link":!0,href:`https://better-cmdk.com`,target:`_blank`,rel:`noopener noreferrer`,className:`pointer-events-auto inline-flex items-center border-2 border-input bg-background px-2 py-0.5 font-mono text-[11px] font-bold uppercase tracking-[0.14em] text-foreground no-underline transition-colors hover:bg-foreground hover:text-background hover:no-underline`,style:{borderRadius:`0 0 0.25rem 0.25rem`,marginRight:`1rem`},children:`BETTER-CMDK`})})]})]})})}const Cn=g(m,{children:[h(En,{placeholder:`Search for actions or ask AI...`,showSendButton:!0}),h(Nn,{children:h($,{})})]});function wn({title:t=`Command Palette`,description:n=`Search for an action to run...`,children:r,className:a,corners:o=`xl`,borderColor:s,actions:c,actionsPlaceholder:l=`Search for actions or ask AI...`,actionsAskAILabel:u=`Ask AI`,mobile:d,...f}){let{mode:p,status:_,switchToCommand:y,messages:b,isEnabled:x,setInputValue:S,inputValue:C}=Z(),w=i.useMemo(()=>yn(d),[d]),T=bn(w.breakpoint,w.enabled),E=w.enabled&&T,D=pn(E&&!!f.open),O=i.useCallback(e=>{e&&S(``),f.onOpenChange?.(e)},[f.onOpenChange,S]),k=i.useCallback(()=>{O(!0)},[O]),A=fn({enabled:E&&!f.open&&!!f.onOpenChange&&w.gesture.enabled,open:!!f.open,holdMs:w.gesture.holdMs,swipeUpPx:w.gesture.swipeUpPx,onTrigger:k}),j=i.useMemo(()=>({isMobile:E,layout:w.layout,keyboardInset:D,showQuickActions:w.showQuickActions,quickActionsCount:w.quickActionsCount}),[E,w.layout,D,w.showQuickActions,w.quickActionsCount]),M=()=>c&&c.length>0?h(Mn,{actions:c,placeholder:l,askAILabel:u}):typeof r==`function`?r({mode:p,messages:b,status:_,isEnabled:x}):r??Cn,N=e=>{p===`chat`&&(e.preventDefault(),y())};return i.useEffect(()=>{let e=e=>{e.key===`k`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),O(!1))};if(f.open)return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[f.open,O]),g(m,{children:[h(Wt,{...f,onOpenChange:O,children:g(Sn,{className:a,corners:o,borderColor:s,isMobile:E,keyboardInset:D,onRequestClose:()=>O(!1),onEscapeKeyDown:N,onOpenAutoFocus:e=>{E&&w.layout===`keyboard-last`&&e.preventDefault()},children:[g(Xt,{className:`sr-only`,children:[h(Qt,{children:t}),h($t,{children:n})]}),h(_n.Provider,{value:j,children:h(W,{"data-slot":`command`,className:e(`bcmdk-root **:data-[slot=command-input-wrapper]:bg-transparent rounded-none bg-transparent **:data-[slot=command-input]:!h-11 **:data-[slot=command-input]:py-0 **:data-[slot=command-input-wrapper]:mb-0`,E?`**:data-[slot=command-input-wrapper]:!h-[var(--cmdk-input-row-height)] pb-[env(safe-area-inset-bottom)]`:`**:data-[slot=command-input-wrapper]:!h-11`,`text-popover-foreground flex h-full min-h-0 w-full flex-col overflow-hidden`),style:{borderRadius:`var(--cmdk-radius, 0.75rem)`,"--cmdk-item-height":E?`3.125rem`:`2.25rem`,"--cmdk-input-row-height":E?`3.5rem`:`2.75rem`},children:M()})})]})}),A.showHint&&g(`div`,{className:`fixed left-1/2 z-50 flex -translate-x-1/2 items-center gap-2 rounded-full border border-input bg-background/95 px-3 py-1.5 text-xs font-medium text-foreground shadow-sm backdrop-blur-md`,style:{bottom:`calc(env(safe-area-inset-bottom) + 2rem)`},"data-cmdk-mobile-gesture-ignore":!0,children:[h(v,{className:`size-3.5`}),`Swipe up for Command Menu`]})]})}function Tn({chatEndpoint:e=Ht,chat:t,onModeChange:n,onOpenChange:r,historyStorageKey:i,maxConversations:a,actions:o,actionsPlaceholder:s,actionsAskAILabel:c,mobile:l,...u}){return h(Ut,{chatEndpoint:e,chat:t,onModeChange:n,onOpenChange:r,historyStorageKey:i,maxConversations:a,children:h(ln,{children:h(wn,{onOpenChange:r,actions:o,actionsPlaceholder:s,actionsAskAILabel:c,mobile:l,...u})})})}function En({className:t,showSendButton:n=!1,...r}){let{mode:a,inputValue:o,setInputValue:s,sendMessage:c,isLoading:l,switchToChat:u,startNewChat:d}=Z(),{isMobile:f,layout:p,keyboardInset:m}=vn(),[_,y]=i.useState(!1),x=i.useRef(null),S=()=>{o.trim()&&a===`chat`&&c(o)},C=e=>{if((e.metaKey||e.ctrlKey)&&e.key===`Enter`){e.preventDefault(),a===`command`&&o.trim()?(d(),u(),c(o)):a===`chat`&&o.trim()&&c(o);return}if(a===`chat`&&e.key===`Enter`&&!e.shiftKey){e.preventDefault(),o.trim()&&c(o);return}},w=a===`chat`||o.length>0||f&&p===`keyboard-last`,T=f&&p===`keyboard-last`&&!_&&a===`command`,E=e=>{y(!0),r.onFocus?.(e)},D=e=>{y(!1),r.onBlur?.(e)},O=f?{marginBottom:m>0?`${m}px`:void 0}:void 0,k={...r,onFocus:E,onBlur:D};return g(`div`,{"data-slot":`command-input-wrapper`,className:e(`order-2 flex h-[var(--cmdk-input-row-height,2.75rem)] items-center gap-2 px-6 transition-[margin,border-color] duration-200`,f&&`px-4`,w?`border-t border-input mt-0`:`border-t border-transparent mt-0`),style:O,children:[h(W.Input,{"data-slot":`command-input`,ref:x,value:o,onValueChange:s,onKeyDown:C,className:e(`placeholder:text-muted-foreground flex h-10 w-full appearance-none border-0 bg-transparent py-3 text-sm shadow-none outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,t),...k,placeholder:a===`chat`?`Ask AI...`:r.placeholder}),T&&h(`button`,{type:`button`,onClick:()=>x.current?.focus(),className:`flex items-center justify-center size-7 shrink-0 border border-input bg-background text-muted-foreground hover:text-foreground transition-colors`,style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},"aria-label":`Type a command`,"data-cmdk-mobile-gesture-ignore":!0,children:h(b,{className:`size-4`})}),n&&a===`chat`&&h(`button`,{type:`button`,onClick:S,disabled:!o.trim()||l,className:`flex items-center justify-center size-6 shrink-0 bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors`,style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},children:h(v,{className:`size-3`})})]})}function $({label:t=`Ask AI`,className:n,...r}){let{inputValue:i,setInputValue:a,switchToChat:o,sendMessage:s,isEnabled:c,startNewChat:l}=Z(),{isMobile:u}=vn(),d=q(e=>e.filtered.count),f=()=>{if(c)if(i.trim()){let e=lt(`ask-ai`,i.trim())>0;d===0&&!e?(l(),o(),s(i)):(o(),a(``))}else o()};return c?h(W.Group,{forceMount:!0,children:g(W.Item,{"data-slot":`command-item`,value:`ask-ai`,onSelect:f,className:e(`data-[selected=true]:border-input data-[selected=true]:bg-input/50 relative flex cursor-default items-center gap-3 border border-transparent px-3 py-2 text-sm outline-hidden select-none`,u&&`min-h-12 py-3`,n),style:{borderRadius:`var(--cmdk-radius, 0.75rem)`},...r,children:[h(S,{className:`size-4 shrink-0 text-primary`}),h(`div`,{className:`flex flex-col items-start gap-0.5`,children:h(`span`,{className:`font-medium`,children:t})}),!u&&g(`span`,{className:`ml-auto flex items-center gap-1`,children:[h(en,{children:`⌘`}),h(en,{children:`↵`})]})]})}):h(W.Empty,{"data-slot":`command-empty`,className:e(`text-muted-foreground py-6 text-center text-sm`,n),children:`No results found.`})}function Dn(e){return!(`inputSchema`in e)}function On(e){return e.label??e.name}function kn(e){let t=[...e.keywords??[]];return e.label&&e.label!==e.name&&t.push(e.label),e.description&&t.push(e.description),t.length>0?t:void 0}function An(){let{sendMessage:e,startNewChat:t,switchToChat:n}=Z();return i.useCallback(r=>{let i=Dn(r),a=()=>{t(),n(),e(On(r))};if(!i){a();return}if(r.onSelect){r.onSelect();return}r.execute({})},[e,t,n])}function jn(e){let t=[],n=new Map;for(let r of e){let e=r.group,i=n.get(e);i===void 0?(n.set(e,t.length),t.push({heading:e,items:[r]})):t[i].items.push(r)}let r=t.findIndex(e=>e.heading===void 0);if(r>0){let e=t.splice(r,1)[0];t.unshift(e)}return t}function Mn({actions:t,placeholder:n,askAILabel:r}){let{inputValue:a,mode:o}=Z(),s=An(),{isMobile:c,layout:l,showQuickActions:u,quickActionsCount:d}=vn(),f=jn(t),p=c&&l===`keyboard-last`&&u&&o===`command`&&a.length===0,_=p?t.filter(e=>Dn(e)&&!e.disabled).slice(0,d):[],v=new Set(_.map(e=>e.name)),y=t=>{let n=On(t),r=Dn(t);return g(sn,{value:t.name,keywords:kn(t),disabled:t.disabled,closeOnSelect:r,onSelect:()=>s(t),className:e(c&&`min-h-12 py-3`),children:[t.icon,n,t.shortcut&&!c&&h(cn,{children:t.shortcut})]},t.name)};return g(m,{children:[h(En,{placeholder:n,showSendButton:!0}),g(Nn,{children:[p&&_.length>0&&h(Q,{heading:`Quick Actions`,children:_.map(e=>y(e))}),f.map((e,t)=>{let n=p?e.items.filter(e=>!v.has(e.name)):e.items;if(n.length===0)return null;let r=n.map(e=>y(e));return e.heading?h(Q,{heading:e.heading,children:r},e.heading):h(i.Fragment,{children:r},`__ungrouped_${t}`)}),h($,{label:r})]})]})}function Nn({className:t,children:n,actions:r,actionsHeading:a=`Actions`,style:o,...s}){let{mode:c,status:l,messages:u,sendMessage:d,addToolApprovalResponse:f,conversations:p,loadConversation:m,inputValue:_}=Z(),{isMobile:v,layout:y,keyboardInset:b}=vn(),x=An(),C=i.useCallback(e=>d(e.text),[d]),w=f??mn;if(c===`chat`)return h(`div`,{"data-slot":`command-list`,className:e(`order-1 min-h-0 flex-1 overflow-hidden px-3 flex flex-col`,v&&`px-2`,t),children:u.length===0?h(Ue,{}):g(Ve,{style:{flex:`1 1 0%`,minHeight:0},children:[h(`div`,{className:`px-3 py-2 space-y-4`,children:h(Ie,{messages:u,sendMessage:C,addToolApprovalResponse:w})}),l===`streaming`&&h(He,{})]})});let T=i.Children.toArray(n),E=[],D=[];T.forEach(e=>{i.isValidElement(e)&&(e.type===$||e.type.displayName===`CommandEmpty`)?E.push(e):i.isValidElement(e)&&e.type===an||D.push(e)});let O=r,k=_.length>0||v&&y===`keyboard-last`,A=v?`calc(100% - var(--cmdk-input-row-height, 3.5rem))`:`calc(45vh - 2.75rem)`,j={overscrollBehavior:`contain`,paddingBottom:b>0?`${b+8}px`:v?`env(safe-area-inset-bottom)`:void 0,...o};return h(re.div,{initial:!1,animate:{height:k?A:0},transition:{type:`spring`,duration:.25,bounce:0},className:e(`order-1 min-h-0 overflow-hidden px-3`,v&&`px-2`),children:g(W.List,{"data-slot":`command-list`,className:e(`overflow-x-hidden overflow-y-auto overscroll-contain pt-2 h-full`,v&&`pt-1`,t),style:j,...s,children:[D,p.length>0&&h(Q,{heading:`Recent Chats`,children:p.slice(0,5).map(t=>g(sn,{value:`chat-history-${t.id}`,keywords:[t.title],onSelect:()=>m(t.id),closeOnSelect:!1,className:e(v&&`min-h-12 py-3`),children:[h(S,{className:`size-4`}),h(`span`,{className:`truncate`,children:t.title}),h(`span`,{className:`ml-auto text-xs text-muted-foreground`,children:xn(t.updatedAt)})]},t.id))}),O&&O.length>0&&h(Q,{heading:a,children:O.map(t=>g(sn,{value:On(t),keywords:kn(t),disabled:t.disabled,closeOnSelect:Dn(t),onSelect:()=>x(t),className:e(v&&`min-h-12 py-3`),children:[t.icon,On(t),t.shortcut&&!v&&h(cn,{children:t.shortcut})]},t.name))}),E]})})}$.displayName=`CommandEmpty`;export{ve as AssistantFormRenderer,Ie as AssistantMessages,Be as Button,Ue as ChatEmpty,He as ChatLoading,Ve as ChatMessageList,Se as Collapsible,we as CollapsibleContent,Ce as CollapsibleTrigger,nn as Command,Sn as CommandContent,Tn as CommandDialog,Tn as CommandMenu,rn as CommandDialogContent,$ as CommandEmpty,Q as CommandGroup,En as CommandInput,sn as CommandItem,Nn as CommandList,Bt as CommandMenuContext,Ut as CommandMenuProvider,on as CommandSeparator,cn as CommandShortcut,ie as Confirmation,se as ConfirmationAccepted,ue as ConfirmationAction,le as ConfirmationActions,ce as ConfirmationRejected,oe as ConfirmationRequest,ae as ConfirmationTitle,Wt as Dialog,qt as DialogClose,Yt as DialogContent,$t as DialogDescription,Zt as DialogFooter,Xt as DialogHeader,Jt as DialogOverlay,Kt as DialogPortal,Qt as DialogTitle,Gt as DialogTrigger,en as Kbd,tn as KbdGroup,ye as Message,be as MessageContent,xe as MessageResponse,De as Task,ke as TaskContent,Ee as TaskItem,Te as TaskItemFile,Oe as TaskTrigger,ze as buttonVariants,e as cn,he as defaultFormRegistry,Nt as useChatHistory,Z as useCommandMenuContext};
|