@ekanos/ui 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vastly
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # @ekanos/ui
2
+
3
+ Fusion-styled UI primitives for building Ekanos integrations **outside** the
4
+ monorepo. This is the published companion to `@ekanos/sdk`: a curated slice of
5
+ the internal `@kit/ui` library, chosen from what the SDK's re-exported
6
+ components and the example integration packages actually import.
7
+
8
+ Inside the monorepo, keep importing `@kit/ui/*` directly — this package exists
9
+ for partners who can't.
10
+
11
+ ## What's exported
12
+
13
+ One subpath per component, mirroring the `@kit/ui` names:
14
+
15
+ | Subpath | Contents |
16
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
17
+ | `@ekanos/ui/button` | `Button`, `ButtonProps`, `buttonVariants` |
18
+ | `@ekanos/ui/card` | `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`, … |
19
+ | `@ekanos/ui/badge` | `Badge`, `badgeVariants` |
20
+ | `@ekanos/ui/tooltip` | `Tooltip`, `TooltipTrigger`, `TooltipContent`, `TooltipProvider` |
21
+ | `@ekanos/ui/select` | `Select`, `SelectTrigger`, `SelectValue`, `SelectContent`, `SelectItem`, … |
22
+ | `@ekanos/ui/form` | `Form`, `FormField`, `FormItem`, `FormLabel`, `FormControl`, `FormDescription`, `FormMessage`, `useFormField` |
23
+ | `@ekanos/ui/input` | `Input` |
24
+ | `@ekanos/ui/dropdown-menu` | `DropdownMenu`, `DropdownMenuTrigger`, `DropdownMenuContent`, `DropdownMenuItem`, … |
25
+ | `@ekanos/ui/label` | `Label` |
26
+ | `@ekanos/ui/skeleton` | `Skeleton` |
27
+ | `@ekanos/ui/icon` | `Icon`, `renderIcon`, `resolveIcon`, Font Awesome helpers |
28
+ | `@ekanos/ui/utils` | `cn()`, `isRouteActive()`, `checkIfRouteIsActive()` |
29
+ | `@ekanos/ui/if` | `If` conditional renderer |
30
+ | `@ekanos/ui/trans` | `Trans` (react-i18next) |
31
+ | `@ekanos/ui/spinner` | `Spinner` |
32
+ | `@ekanos/ui/ai-prompt-input` | `PromptInput` compound components for AI ask surfaces |
33
+
34
+ Most source files are a thin `export * from '@kit/ui/<name>'` — for those,
35
+ `@kit/ui` stays the single source of truth. At build time the `@kit/ui` code is
36
+ inlined into `dist/` so the published artifact has no workspace dependencies
37
+ (`scripts/pack-test.mjs` fails the build if any `@kit/` specifier leaks).
38
+
39
+ Three subpaths — `if`, `trans`, and `spinner` — are instead implemented
40
+ natively in `src/_impl/`. Their `@kit/ui` counterparts live in
41
+ `packages/ui/src/makerkit/`, which is Makerkit-authored code from the
42
+ commercial Turbo starter this monorepo was built on; publishing it under this
43
+ package's MIT license would purport to grant reuse rights we do not hold. The
44
+ implementations here are original, and `pack:test` fails the build if any
45
+ `packages/ui/src/makerkit` source is ever inlined into `dist/`. Inside the
46
+ monorepo, first-party code keeps using `@kit/ui` as before.
47
+
48
+ ## Styling: this package ships NO CSS
49
+
50
+ Components emit Tailwind class strings referencing Fusion's **semantic design
51
+ tokens** (`bg-primary`, `text-muted-foreground`, `border-border`, …). They
52
+ render correctly only inside a host that owns that CSS — the Fusion app or the
53
+ integration dev harness. Nothing here reads or requires the host's
54
+ `theme-tokens.ts` runtime; the contract is purely "the host page loads
55
+ Fusion's stylesheet".
56
+
57
+ Two host-provided assets to know about:
58
+
59
+ - **Tailwind tokens**: the host defines the semantic token variables and
60
+ utilities. Without them the components render unstyled HTML.
61
+ - **Icons are Font Awesome**: `Icon` renders `<i class="fa-solid fa-house">`
62
+ styled by the Font Awesome Pro web-font CSS the host loads. Legacy PascalCase
63
+ Lucide names are translated to FA equivalents via a bundled map; there is no
64
+ `lucide-react` at runtime.
65
+
66
+ ## Runtime notes
67
+
68
+ - **Primitives are Base UI, not Radix.** Everything popup-shaped is built on
69
+ `@base-ui/react` (declared dependency). No `asChild` — polymorphic parts take
70
+ a `render` prop: `<DropdownMenuTrigger render={<Button />}>Menu</DropdownMenuTrigger>`.
71
+ - **`Trans` degrades sanely without i18n.** It builds on react-i18next's
72
+ `TransWithoutContext`. With no i18next instance available (none passed via
73
+ the `i18n` prop and none registered through `initReactI18next`), it logs a
74
+ one-time console warning (`NO_I18NEXT_INSTANCE`) and **returns its children
75
+ unmodified** — it does not throw. The Fusion host and the dev harness both
76
+ provide an instance; translation only happens there.
77
+
78
+ Note the fallback is **children, not `defaults`**:
79
+ `<Trans i18nKey="a.b" defaults="Continue" />` has no children, so on a host
80
+ with no i18next instance it renders nothing. Pass children when a string has
81
+ to survive an unconfigured host:
82
+ `<Trans i18nKey="a.b" defaults="Continue">Continue</Trans>`.
83
+
84
+ - **`Spinner` is self-contained.** It draws an inline SVG rather than a Font
85
+ Awesome glyph, so unlike `Icon` it needs no icon web font — only the Tailwind
86
+ utilities it emits (`animate-spin`, `size-*`, `text-*`). It honours
87
+ `prefers-reduced-motion` via `motion-reduce:animate-none`, freezing the arc
88
+ into a static busy glyph.
89
+
90
+ - **`'use client'` is preserved.** Client entries (`icon`, `form`, `tooltip`,
91
+ `label`, `select`, `dropdown-menu`, `ai-prompt-input`, `dialog`, `separator`)
92
+ ship with the directive at the top of their bundle. `utils`, `if`, `trans`,
93
+ and `spinner` are server-safe and carry no directive, so `cn()` etc. remain
94
+ usable from server components.
95
+ - **`ai` is a types-only dependency.** `@ekanos/ui/ai-prompt-input` uses
96
+ `ChatStatus` / `FileUIPart` types from the `ai` package in its public props;
97
+ no `ai` code is imported at runtime.
98
+ - **Base UI patch divergence (minor).** The monorepo patches
99
+ `@base-ui/react@1.6.0` to widen a trigger drag-boundary offset
100
+ (`BOUNDARY_OFFSET` 2 → 24 in menu/select/combobox triggers). The published
101
+ artifact resolves the unpatched package from npm, so partner-side menus keep
102
+ upstream's slightly tighter press-and-drag selection boundary. Cosmetic only.
103
+
104
+ ## Peer dependencies
105
+
106
+ You provide: `react` / `react-dom` (^19), `react-hook-form` and
107
+ `@hookform/resolvers` (for form usage). Everything else the components need at
108
+ runtime is a declared dependency of this package.
109
+
110
+ ## Building / verifying
111
+
112
+ ```bash
113
+ pnpm --filter @ekanos/ui build # tsup → dist/ (ESM + .d.ts per subpath)
114
+ pnpm --filter @ekanos/ui pack:test # clean-room publish gate (see scripts/pack-test.mjs)
115
+ ```
116
+
117
+ `pack:test` packs the tarball, asserts dist-only contents, fails on any
118
+ `@kit/` leak, asserts `'use client'` preservation, then installs the tarball
119
+ into a temp project outside the workspace and typechecks
120
+ (`skipLibCheck: false`) + esbuild-bundles a consumer importing every subpath.
121
+
122
+ The package is `private: true` until the owner flips it for the first publish;
123
+ `prepack` runs the build so a publish can never ship a stale or missing
124
+ `dist/`.
@@ -0,0 +1,187 @@
1
+ import * as React from 'react';
2
+ import { RefObject, HTMLAttributes, FormEvent, ComponentProps, ReactNode, PropsWithChildren } from 'react';
3
+ import { FileUIPart, SourceDocumentUIPart, ChatStatus } from 'ai';
4
+ import { Command as Command$1 } from 'cmdk';
5
+ import { DropdownMenuItem, DropdownMenu, DropdownMenuContent } from './dropdown-menu.js';
6
+ import { PreviewCard } from '@base-ui/react/preview-card';
7
+ import * as class_variance_authority_types from 'class-variance-authority/types';
8
+ import { VariantProps } from 'class-variance-authority';
9
+ import { Button as Button$1 } from '@base-ui/react/button';
10
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './select.js';
11
+ import { TooltipContent } from './tooltip.js';
12
+ import '@base-ui/react/menu';
13
+ import '@base-ui/react/select';
14
+ import '@base-ui/react/tooltip';
15
+
16
+ declare function Command({ className, ...props }: React.ComponentProps<typeof Command$1>): React.JSX.Element;
17
+ declare function CommandInput({ className, ...props }: React.ComponentProps<typeof Command$1.Input>): React.JSX.Element;
18
+ declare function CommandList({ className, ...props }: React.ComponentProps<typeof Command$1.List>): React.JSX.Element;
19
+ declare function CommandEmpty({ ...props }: React.ComponentProps<typeof Command$1.Empty>): React.JSX.Element;
20
+ declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof Command$1.Group>): React.JSX.Element;
21
+ declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof Command$1.Separator>): React.JSX.Element;
22
+ declare function CommandItem({ className, ...props }: React.ComponentProps<typeof Command$1.Item>): React.JSX.Element;
23
+
24
+ interface HoverCardDelays {
25
+ openDelay?: number;
26
+ closeDelay?: number;
27
+ }
28
+ declare function HoverCard({ openDelay, closeDelay, ...props }: PreviewCard.Root.Props & HoverCardDelays): React.JSX.Element;
29
+ declare function HoverCardTrigger({ delay, closeDelay, ...props }: PreviewCard.Trigger.Props): React.JSX.Element;
30
+ declare function HoverCardContent({ className, align, alignOffset, side, sideOffset, ...props }: PreviewCard.Popup.Props & Pick<PreviewCard.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>): React.JSX.Element;
31
+
32
+ declare const buttonVariants: (props?: ({
33
+ variant?: "link" | "default" | "destructive" | "outline" | "success" | "secondary" | "ghost" | null | undefined;
34
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
35
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
36
+ type ButtonProps = Button$1.Props & VariantProps<typeof buttonVariants>;
37
+ declare function Button({ className, variant, size, ...props }: ButtonProps): React.JSX.Element;
38
+
39
+ declare const inputGroupAddonVariants: (props?: ({
40
+ align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
41
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
42
+ declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>): React.JSX.Element;
43
+ declare const inputGroupButtonVariants: (props?: ({
44
+ size?: "xs" | "sm" | "icon-xs" | "icon-sm" | null | undefined;
45
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
46
+ declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>): React.JSX.Element;
47
+ declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>): React.JSX.Element;
48
+
49
+ interface AttachmentsContext {
50
+ files: (FileUIPart & {
51
+ id: string;
52
+ })[];
53
+ add: (files: File[] | FileList) => void;
54
+ remove: (id: string) => void;
55
+ clear: () => void;
56
+ openFileDialog: () => void;
57
+ fileInputRef: RefObject<HTMLInputElement | null>;
58
+ }
59
+ interface TextInputContext {
60
+ value: string;
61
+ setInput: (v: string) => void;
62
+ clear: () => void;
63
+ }
64
+ interface PromptInputControllerProps {
65
+ textInput: TextInputContext;
66
+ attachments: AttachmentsContext;
67
+ __registerFileInput: (ref: RefObject<HTMLInputElement | null>, open: () => void) => void;
68
+ }
69
+ declare const usePromptInputController: () => PromptInputControllerProps;
70
+ declare const useProviderAttachments: () => AttachmentsContext;
71
+ type PromptInputProviderProps = PropsWithChildren<{
72
+ initialInput?: string;
73
+ }>;
74
+ declare const PromptInputProvider: ({ initialInput: initialTextInput, children, }: PromptInputProviderProps) => React.JSX.Element;
75
+ declare const usePromptInputAttachments: () => AttachmentsContext;
76
+ interface ReferencedSourcesContext {
77
+ sources: (SourceDocumentUIPart & {
78
+ id: string;
79
+ })[];
80
+ add: (sources: SourceDocumentUIPart[] | SourceDocumentUIPart) => void;
81
+ remove: (id: string) => void;
82
+ clear: () => void;
83
+ }
84
+ declare const LocalReferencedSourcesContext: React.Context<ReferencedSourcesContext | null>;
85
+ declare const usePromptInputReferencedSources: () => ReferencedSourcesContext;
86
+ type PromptInputActionAddAttachmentsProps = ComponentProps<typeof DropdownMenuItem> & {
87
+ label?: string;
88
+ };
89
+ declare const PromptInputActionAddAttachments: ({ label, ...props }: PromptInputActionAddAttachmentsProps) => React.JSX.Element;
90
+ type PromptInputActionAddScreenshotProps = ComponentProps<typeof DropdownMenuItem> & {
91
+ label?: string;
92
+ };
93
+ declare const PromptInputActionAddScreenshot: ({ label, onClick, ...props }: PromptInputActionAddScreenshotProps) => React.JSX.Element;
94
+ interface PromptInputMessage {
95
+ text: string;
96
+ files: FileUIPart[];
97
+ }
98
+ type PromptInputProps = Omit<HTMLAttributes<HTMLFormElement>, 'onSubmit' | 'onError'> & {
99
+ accept?: string;
100
+ multiple?: boolean;
101
+ globalDrop?: boolean;
102
+ syncHiddenInput?: boolean;
103
+ maxFiles?: number;
104
+ maxFileSize?: number;
105
+ /** Extra classes for the inner InputGroup surface (e.g. `bg-card`). */
106
+ inputGroupClassName?: string;
107
+ onError?: (err: {
108
+ code: 'max_files' | 'max_file_size' | 'accept';
109
+ message: string;
110
+ }) => void;
111
+ onSubmit: (message: PromptInputMessage, event: FormEvent<HTMLFormElement>) => void | Promise<void>;
112
+ };
113
+ declare const PromptInput: ({ className, accept, multiple, globalDrop, syncHiddenInput, maxFiles, maxFileSize, inputGroupClassName, onError, onSubmit, children, ...props }: PromptInputProps) => React.JSX.Element;
114
+ type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;
115
+ declare const PromptInputBody: ({ className, ...props }: PromptInputBodyProps) => React.JSX.Element;
116
+ type PromptInputTextareaProps = ComponentProps<typeof InputGroupTextarea>;
117
+ declare const PromptInputTextarea: ({ onChange, onKeyDown, className, placeholder, ...props }: PromptInputTextareaProps) => React.JSX.Element;
118
+ type PromptInputHeaderProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;
119
+ declare const PromptInputHeader: ({ className, ...props }: PromptInputHeaderProps) => React.JSX.Element;
120
+ type PromptInputFooterProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;
121
+ declare const PromptInputFooter: ({ className, ...props }: PromptInputFooterProps) => React.JSX.Element;
122
+ type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;
123
+ declare const PromptInputTools: ({ className, ...props }: PromptInputToolsProps) => React.JSX.Element;
124
+ type PromptInputButtonTooltip = string | {
125
+ content: ReactNode;
126
+ shortcut?: string;
127
+ side?: ComponentProps<typeof TooltipContent>['side'];
128
+ };
129
+ type PromptInputButtonProps = ComponentProps<typeof InputGroupButton> & {
130
+ tooltip?: PromptInputButtonTooltip;
131
+ };
132
+ declare const PromptInputButton: ({ variant, className, size, tooltip, ...props }: PromptInputButtonProps) => React.JSX.Element;
133
+ type PromptInputActionMenuProps = ComponentProps<typeof DropdownMenu>;
134
+ declare const PromptInputActionMenu: (props: PromptInputActionMenuProps) => React.JSX.Element;
135
+ type PromptInputActionMenuTriggerProps = PromptInputButtonProps;
136
+ declare const PromptInputActionMenuTrigger: ({ className, children, ...props }: PromptInputActionMenuTriggerProps) => React.JSX.Element;
137
+ type PromptInputActionMenuContentProps = ComponentProps<typeof DropdownMenuContent>;
138
+ declare const PromptInputActionMenuContent: ({ className, ...props }: PromptInputActionMenuContentProps) => React.JSX.Element;
139
+ type PromptInputActionMenuItemProps = ComponentProps<typeof DropdownMenuItem>;
140
+ declare const PromptInputActionMenuItem: ({ className, ...props }: PromptInputActionMenuItemProps) => React.JSX.Element;
141
+ type PromptInputSubmitProps = ComponentProps<typeof InputGroupButton> & {
142
+ status?: ChatStatus;
143
+ onStop?: () => void;
144
+ };
145
+ declare const PromptInputSubmit: ({ className, variant, size, status, onStop, onClick, children, ...props }: PromptInputSubmitProps) => React.JSX.Element;
146
+ type PromptInputSelectProps = ComponentProps<typeof Select>;
147
+ declare const PromptInputSelect: (props: PromptInputSelectProps) => React.JSX.Element;
148
+ type PromptInputSelectTriggerProps = ComponentProps<typeof SelectTrigger>;
149
+ declare const PromptInputSelectTrigger: ({ className, ...props }: PromptInputSelectTriggerProps) => React.JSX.Element;
150
+ type PromptInputSelectContentProps = ComponentProps<typeof SelectContent>;
151
+ declare const PromptInputSelectContent: ({ className, ...props }: PromptInputSelectContentProps) => React.JSX.Element;
152
+ type PromptInputSelectItemProps = ComponentProps<typeof SelectItem>;
153
+ declare const PromptInputSelectItem: ({ className, ...props }: PromptInputSelectItemProps) => React.JSX.Element;
154
+ type PromptInputSelectValueProps = ComponentProps<typeof SelectValue>;
155
+ declare const PromptInputSelectValue: ({ className, ...props }: PromptInputSelectValueProps) => React.JSX.Element;
156
+ type PromptInputHoverCardProps = ComponentProps<typeof HoverCard>;
157
+ declare const PromptInputHoverCard: ({ openDelay, closeDelay, ...props }: PromptInputHoverCardProps) => React.JSX.Element;
158
+ type PromptInputHoverCardTriggerProps = ComponentProps<typeof HoverCardTrigger>;
159
+ declare const PromptInputHoverCardTrigger: (props: PromptInputHoverCardTriggerProps) => React.JSX.Element;
160
+ type PromptInputHoverCardContentProps = ComponentProps<typeof HoverCardContent>;
161
+ declare const PromptInputHoverCardContent: ({ align, ...props }: PromptInputHoverCardContentProps) => React.JSX.Element;
162
+ type PromptInputTabsListProps = HTMLAttributes<HTMLDivElement>;
163
+ declare const PromptInputTabsList: ({ className, ...props }: PromptInputTabsListProps) => React.JSX.Element;
164
+ type PromptInputTabProps = HTMLAttributes<HTMLDivElement>;
165
+ declare const PromptInputTab: ({ className, ...props }: PromptInputTabProps) => React.JSX.Element;
166
+ type PromptInputTabLabelProps = HTMLAttributes<HTMLHeadingElement>;
167
+ declare const PromptInputTabLabel: ({ className, ...props }: PromptInputTabLabelProps) => React.JSX.Element;
168
+ type PromptInputTabBodyProps = HTMLAttributes<HTMLDivElement>;
169
+ declare const PromptInputTabBody: ({ className, ...props }: PromptInputTabBodyProps) => React.JSX.Element;
170
+ type PromptInputTabItemProps = HTMLAttributes<HTMLDivElement>;
171
+ declare const PromptInputTabItem: ({ className, ...props }: PromptInputTabItemProps) => React.JSX.Element;
172
+ type PromptInputCommandProps = ComponentProps<typeof Command>;
173
+ declare const PromptInputCommand: ({ className, ...props }: PromptInputCommandProps) => React.JSX.Element;
174
+ type PromptInputCommandInputProps = ComponentProps<typeof CommandInput>;
175
+ declare const PromptInputCommandInput: ({ className, ...props }: PromptInputCommandInputProps) => React.JSX.Element;
176
+ type PromptInputCommandListProps = ComponentProps<typeof CommandList>;
177
+ declare const PromptInputCommandList: ({ className, ...props }: PromptInputCommandListProps) => React.JSX.Element;
178
+ type PromptInputCommandEmptyProps = ComponentProps<typeof CommandEmpty>;
179
+ declare const PromptInputCommandEmpty: ({ className, ...props }: PromptInputCommandEmptyProps) => React.JSX.Element;
180
+ type PromptInputCommandGroupProps = ComponentProps<typeof CommandGroup>;
181
+ declare const PromptInputCommandGroup: ({ className, ...props }: PromptInputCommandGroupProps) => React.JSX.Element;
182
+ type PromptInputCommandItemProps = ComponentProps<typeof CommandItem>;
183
+ declare const PromptInputCommandItem: ({ className, ...props }: PromptInputCommandItemProps) => React.JSX.Element;
184
+ type PromptInputCommandSeparatorProps = ComponentProps<typeof CommandSeparator>;
185
+ declare const PromptInputCommandSeparator: ({ className, ...props }: PromptInputCommandSeparatorProps) => React.JSX.Element;
186
+
187
+ export { type AttachmentsContext, LocalReferencedSourcesContext, PromptInput, PromptInputActionAddAttachments, type PromptInputActionAddAttachmentsProps, PromptInputActionAddScreenshot, type PromptInputActionAddScreenshotProps, PromptInputActionMenu, PromptInputActionMenuContent, type PromptInputActionMenuContentProps, PromptInputActionMenuItem, type PromptInputActionMenuItemProps, type PromptInputActionMenuProps, PromptInputActionMenuTrigger, type PromptInputActionMenuTriggerProps, PromptInputBody, type PromptInputBodyProps, PromptInputButton, type PromptInputButtonProps, type PromptInputButtonTooltip, PromptInputCommand, PromptInputCommandEmpty, type PromptInputCommandEmptyProps, PromptInputCommandGroup, type PromptInputCommandGroupProps, PromptInputCommandInput, type PromptInputCommandInputProps, PromptInputCommandItem, type PromptInputCommandItemProps, PromptInputCommandList, type PromptInputCommandListProps, type PromptInputCommandProps, PromptInputCommandSeparator, type PromptInputCommandSeparatorProps, type PromptInputControllerProps, PromptInputFooter, type PromptInputFooterProps, PromptInputHeader, type PromptInputHeaderProps, PromptInputHoverCard, PromptInputHoverCardContent, type PromptInputHoverCardContentProps, type PromptInputHoverCardProps, PromptInputHoverCardTrigger, type PromptInputHoverCardTriggerProps, type PromptInputMessage, type PromptInputProps, PromptInputProvider, type PromptInputProviderProps, PromptInputSelect, PromptInputSelectContent, type PromptInputSelectContentProps, PromptInputSelectItem, type PromptInputSelectItemProps, type PromptInputSelectProps, PromptInputSelectTrigger, type PromptInputSelectTriggerProps, PromptInputSelectValue, type PromptInputSelectValueProps, PromptInputSubmit, type PromptInputSubmitProps, PromptInputTab, PromptInputTabBody, type PromptInputTabBodyProps, PromptInputTabItem, type PromptInputTabItemProps, PromptInputTabLabel, type PromptInputTabLabelProps, type PromptInputTabProps, PromptInputTabsList, type PromptInputTabsListProps, PromptInputTextarea, type PromptInputTextareaProps, PromptInputTools, type PromptInputToolsProps, type ReferencedSourcesContext, type TextInputContext, usePromptInputAttachments, usePromptInputController, usePromptInputReferencedSources, useProviderAttachments };