@schemavaults/ui 0.85.4 → 0.86.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ui/index.d.ts +2 -0
- package/dist/components/ui/index.js +1 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/prompt-input/index.d.ts +4 -0
- package/dist/components/ui/prompt-input/index.js +3 -0
- package/dist/components/ui/prompt-input/index.js.map +1 -0
- package/dist/components/ui/prompt-input/prompt-input-variants.d.ts +20 -0
- package/dist/components/ui/prompt-input/prompt-input-variants.js +38 -0
- package/dist/components/ui/prompt-input/prompt-input-variants.js.map +1 -0
- package/dist/components/ui/prompt-input/prompt-input.d.ts +152 -0
- package/dist/components/ui/prompt-input/prompt-input.js +193 -0
- package/dist/components/ui/prompt-input/prompt-input.js.map +1 -0
- package/package.json +1 -1
|
@@ -72,6 +72,8 @@ export * from "./checkbox";
|
|
|
72
72
|
export type * from "./checkbox";
|
|
73
73
|
export * from "./textarea";
|
|
74
74
|
export type * from "./textarea";
|
|
75
|
+
export * from "./prompt-input";
|
|
76
|
+
export type * from "./prompt-input";
|
|
75
77
|
export * from "./hover-card";
|
|
76
78
|
export type * from "./hover-card";
|
|
77
79
|
export * from "./radio-group";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC;AAG9B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAG1B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,eAAe,CAAC;AAG9B,cAAc,QAAQ,CAAC;AAGvB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { PromptInput, PromptInputTextarea, PromptInputToolbar, PromptInputActions, PromptInputAction, PromptInputSubmit, PromptInputCharCount, PromptInputHint, usePromptInput, promptInputSizeIds, promptInputVariantIds, } from "./prompt-input";
|
|
2
|
+
export type * from "./prompt-input";
|
|
3
|
+
export type * from "./prompt-input-variants";
|
|
4
|
+
export { PromptInput as default } from "./prompt-input";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { PromptInput, PromptInputTextarea, PromptInputToolbar, PromptInputActions, PromptInputAction, PromptInputSubmit, PromptInputCharCount, PromptInputHint, usePromptInput, promptInputSizeIds, promptInputVariantIds, } from "./prompt-input";
|
|
2
|
+
export { PromptInput as default } from "./prompt-input";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/prompt-input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
export declare const promptInputVariantIds: readonly ["default", "elevated", "filled", "ghost"];
|
|
3
|
+
export type PromptInputVariant = (typeof promptInputVariantIds)[number];
|
|
4
|
+
export declare const promptInputSizeIds: readonly ["sm", "default", "lg"];
|
|
5
|
+
export type PromptInputSize = (typeof promptInputSizeIds)[number];
|
|
6
|
+
export declare const promptInputVariants: (props?: ({
|
|
7
|
+
variant?: "default" | "filled" | "ghost" | "elevated" | null | undefined;
|
|
8
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
export type PromptInputVariantProps = VariantProps<typeof promptInputVariants>;
|
|
11
|
+
export declare const promptInputTextareaSizeClass: {
|
|
12
|
+
sm: string;
|
|
13
|
+
default: string;
|
|
14
|
+
lg: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const promptInputToolbarSizeClass: {
|
|
17
|
+
sm: string;
|
|
18
|
+
default: string;
|
|
19
|
+
lg: string;
|
|
20
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
export const promptInputVariantIds = [
|
|
3
|
+
"default",
|
|
4
|
+
"elevated",
|
|
5
|
+
"filled",
|
|
6
|
+
"ghost",
|
|
7
|
+
];
|
|
8
|
+
export const promptInputSizeIds = ["sm", "default", "lg"];
|
|
9
|
+
export const promptInputVariants = cva("group/prompt-input relative flex w-full flex-col overflow-hidden ring-offset-background transition-colors focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-60", {
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "rounded-md border border-input bg-background",
|
|
13
|
+
elevated: "rounded-2xl border border-input bg-background shadow-md",
|
|
14
|
+
filled: "rounded-md border border-transparent bg-muted",
|
|
15
|
+
ghost: "rounded-md border border-transparent bg-transparent focus-within:ring-offset-0",
|
|
16
|
+
},
|
|
17
|
+
size: {
|
|
18
|
+
sm: "text-sm",
|
|
19
|
+
default: "text-sm",
|
|
20
|
+
lg: "text-base",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
variant: "default",
|
|
25
|
+
size: "default",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
export const promptInputTextareaSizeClass = {
|
|
29
|
+
sm: "min-h-[44px] px-3 pt-2.5 pb-1 text-sm",
|
|
30
|
+
default: "min-h-[56px] px-3.5 pt-3 pb-1.5 text-sm",
|
|
31
|
+
lg: "min-h-[72px] px-4 pt-4 pb-2 text-base",
|
|
32
|
+
};
|
|
33
|
+
export const promptInputToolbarSizeClass = {
|
|
34
|
+
sm: "px-2 pb-1.5 pt-1 gap-1",
|
|
35
|
+
default: "px-2.5 pb-2 pt-1 gap-2",
|
|
36
|
+
lg: "px-3 pb-2.5 pt-1.5 gap-2",
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=prompt-input-variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-input-variants.js","sourceRoot":"","sources":["../../../../src/components/ui/prompt-input/prompt-input-variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;CAC6B,CAAC;AAGvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAsC,CAAC;AAG/F,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CACpC,yPAAyP,EACzP;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,8CAA8C;YACvD,QAAQ,EACN,yDAAyD;YAC3D,MAAM,EACJ,+CAA+C;YACjD,KAAK,EACH,gFAAgF;SACtC;QAC9C,IAAI,EAAE;YACJ,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,SAAS;YAClB,EAAE,EAAE,WAAW;SAC0B;KAC5C;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAIF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,EAAE,EAAE,uCAAuC;IAC3C,OAAO,EAAE,yCAAyC;IAClD,EAAE,EAAE,uCAAuC;CACF,CAAC;AAE5C,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,EAAE,EAAE,wBAAwB;IAC5B,OAAO,EAAE,wBAAwB;IACjC,EAAE,EAAE,0BAA0B;CACW,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { type ButtonHTMLAttributes, type FormHTMLAttributes, type HTMLAttributes, type ReactElement, type ReactNode, type Ref, type RefObject, type TextareaHTMLAttributes } from "react";
|
|
2
|
+
import { type ButtonProps } from "../button/button";
|
|
3
|
+
import { promptInputSizeIds, promptInputVariantIds, type PromptInputSize, type PromptInputVariant } from "./prompt-input-variants";
|
|
4
|
+
interface PromptInputContextValue {
|
|
5
|
+
value: string;
|
|
6
|
+
setValue: (next: string) => void;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
maxLength?: number;
|
|
10
|
+
size: PromptInputSize;
|
|
11
|
+
variant: PromptInputVariant;
|
|
12
|
+
submit: () => void;
|
|
13
|
+
stop: () => void;
|
|
14
|
+
textareaRef: RefObject<HTMLTextAreaElement | null>;
|
|
15
|
+
}
|
|
16
|
+
export interface PromptInputProps extends Omit<FormHTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange" | "children"> {
|
|
17
|
+
/** Controlled value. Omit to use uncontrolled mode with `defaultValue`. */
|
|
18
|
+
value?: string;
|
|
19
|
+
/** Uncontrolled initial value. */
|
|
20
|
+
defaultValue?: string;
|
|
21
|
+
/** Fires on every keystroke. */
|
|
22
|
+
onValueChange?: (next: string) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Fires when the user presses Enter (without Shift) or clicks the submit
|
|
25
|
+
* button. Receives the trimmed current value.
|
|
26
|
+
*/
|
|
27
|
+
onSubmit?: (value: string) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Fires when the user clicks the submit slot while `isLoading` is true —
|
|
30
|
+
* i.e. the button is showing its Stop state.
|
|
31
|
+
*/
|
|
32
|
+
onStop?: () => void;
|
|
33
|
+
/** Marks the whole surface as loading. Submit swaps to a Stop button. */
|
|
34
|
+
isLoading?: boolean;
|
|
35
|
+
/** Disables the whole surface. */
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
/** Optional hard character cap. Enter+submit are blocked when exceeded. */
|
|
38
|
+
maxLength?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Trim whitespace before dispatching `onSubmit` and validating "is empty".
|
|
41
|
+
* Default: true.
|
|
42
|
+
*/
|
|
43
|
+
trimOnSubmit?: boolean;
|
|
44
|
+
/** Visual style. */
|
|
45
|
+
variant?: PromptInputVariant;
|
|
46
|
+
/** Overall spacing / typography scale. */
|
|
47
|
+
size?: PromptInputSize;
|
|
48
|
+
children?: ReactNode;
|
|
49
|
+
ref?: Ref<HTMLFormElement>;
|
|
50
|
+
}
|
|
51
|
+
declare function PromptInput({ value: controlledValue, defaultValue, onValueChange, onSubmit, onStop, isLoading, disabled, maxLength, trimOnSubmit, variant, size, className, children, ref, ...formProps }: PromptInputProps): ReactElement;
|
|
52
|
+
declare namespace PromptInput {
|
|
53
|
+
var displayName: string;
|
|
54
|
+
}
|
|
55
|
+
export interface PromptInputTextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "value" | "defaultValue" | "onChange"> {
|
|
56
|
+
/**
|
|
57
|
+
* Enable Enter-to-submit. Shift+Enter still inserts a newline.
|
|
58
|
+
* Default: true.
|
|
59
|
+
*/
|
|
60
|
+
submitOnEnter?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Maximum height (in pixels) that auto-resize will grow to before the
|
|
63
|
+
* textarea starts scrolling internally. Default: 240.
|
|
64
|
+
*/
|
|
65
|
+
maxHeightPx?: number;
|
|
66
|
+
}
|
|
67
|
+
declare function PromptInputTextarea({ className, submitOnEnter, maxHeightPx, onKeyDown, rows, ref: forwardedRef, ...props }: PromptInputTextareaProps & {
|
|
68
|
+
ref?: Ref<HTMLTextAreaElement>;
|
|
69
|
+
}): ReactElement;
|
|
70
|
+
declare namespace PromptInputTextarea {
|
|
71
|
+
var displayName: string;
|
|
72
|
+
}
|
|
73
|
+
export interface PromptInputToolbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
74
|
+
ref?: Ref<HTMLDivElement>;
|
|
75
|
+
}
|
|
76
|
+
declare function PromptInputToolbar({ className, ref, ...props }: PromptInputToolbarProps): ReactElement;
|
|
77
|
+
declare namespace PromptInputToolbar {
|
|
78
|
+
var displayName: string;
|
|
79
|
+
}
|
|
80
|
+
export interface PromptInputActionsProps extends HTMLAttributes<HTMLDivElement> {
|
|
81
|
+
ref?: Ref<HTMLDivElement>;
|
|
82
|
+
}
|
|
83
|
+
declare function PromptInputActions({ className, ref, ...props }: PromptInputActionsProps): ReactElement;
|
|
84
|
+
declare namespace PromptInputActions {
|
|
85
|
+
var displayName: string;
|
|
86
|
+
}
|
|
87
|
+
export interface PromptInputActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
88
|
+
/** Required accessible label — actions are icon-only by default. */
|
|
89
|
+
"aria-label": string;
|
|
90
|
+
}
|
|
91
|
+
declare function PromptInputAction({ className, type, disabled, ref, ...props }: PromptInputActionProps & {
|
|
92
|
+
ref?: Ref<HTMLButtonElement>;
|
|
93
|
+
}): ReactElement;
|
|
94
|
+
declare namespace PromptInputAction {
|
|
95
|
+
var displayName: string;
|
|
96
|
+
}
|
|
97
|
+
export interface PromptInputSubmitProps extends Omit<ButtonProps, "type" | "children"> {
|
|
98
|
+
/** Content shown when the input is idle. Default: an up-arrow icon. */
|
|
99
|
+
children?: ReactNode;
|
|
100
|
+
/** Content shown when `isLoading` is true. Default: a stop-square icon. */
|
|
101
|
+
loadingChildren?: ReactNode;
|
|
102
|
+
/**
|
|
103
|
+
* Accessible label used when the button is in its idle send state.
|
|
104
|
+
* Default: "Send message".
|
|
105
|
+
*/
|
|
106
|
+
sendLabel?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Accessible label used when the button is in its loading (stop) state.
|
|
109
|
+
* Default: "Stop generating".
|
|
110
|
+
*/
|
|
111
|
+
stopLabel?: string;
|
|
112
|
+
}
|
|
113
|
+
declare function PromptInputSubmit({ className, variant, size, children, loadingChildren, disabled, sendLabel, stopLabel, ...props }: PromptInputSubmitProps): ReactElement;
|
|
114
|
+
declare namespace PromptInputSubmit {
|
|
115
|
+
var displayName: string;
|
|
116
|
+
}
|
|
117
|
+
export interface PromptInputCharCountProps extends HTMLAttributes<HTMLSpanElement> {
|
|
118
|
+
/**
|
|
119
|
+
* Percentage (0-100) at which the count starts warning. Default: 90.
|
|
120
|
+
*/
|
|
121
|
+
warnAtPercent?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Render prop to fully customise the display. Called with the raw and
|
|
124
|
+
* derived state — return the node to display inside the span.
|
|
125
|
+
*/
|
|
126
|
+
render?: (state: {
|
|
127
|
+
length: number;
|
|
128
|
+
maxLength: number | undefined;
|
|
129
|
+
remaining: number | undefined;
|
|
130
|
+
isOverLimit: boolean;
|
|
131
|
+
isNearLimit: boolean;
|
|
132
|
+
}) => ReactNode;
|
|
133
|
+
ref?: Ref<HTMLSpanElement>;
|
|
134
|
+
}
|
|
135
|
+
declare function PromptInputCharCount({ className, warnAtPercent, render, ref, ...props }: PromptInputCharCountProps): ReactElement | null;
|
|
136
|
+
declare namespace PromptInputCharCount {
|
|
137
|
+
var displayName: string;
|
|
138
|
+
}
|
|
139
|
+
export interface PromptInputHintProps extends HTMLAttributes<HTMLSpanElement> {
|
|
140
|
+
ref?: Ref<HTMLSpanElement>;
|
|
141
|
+
}
|
|
142
|
+
declare function PromptInputHint({ className, ref, ...props }: PromptInputHintProps): ReactElement;
|
|
143
|
+
declare namespace PromptInputHint {
|
|
144
|
+
var displayName: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Read the current `<PromptInput>` state from inside a custom child.
|
|
148
|
+
* Only callable inside a `<PromptInput>` tree.
|
|
149
|
+
*/
|
|
150
|
+
declare function usePromptInput(): PromptInputContextValue;
|
|
151
|
+
export { PromptInput, PromptInputTextarea, PromptInputToolbar, PromptInputActions, PromptInputAction, PromptInputSubmit, PromptInputCharCount, PromptInputHint, usePromptInput, promptInputSizeIds, promptInputVariantIds, };
|
|
152
|
+
export type { PromptInputSize, PromptInputVariant };
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { ArrowUp, Square } from "lucide-react";
|
|
5
|
+
import { cn } from "../../../lib/utils";
|
|
6
|
+
import { Button } from "../button/button";
|
|
7
|
+
import { promptInputSizeIds, promptInputTextareaSizeClass, promptInputToolbarSizeClass, promptInputVariantIds, promptInputVariants, } from "./prompt-input-variants";
|
|
8
|
+
const PromptInputContext = createContext(null);
|
|
9
|
+
function usePromptInputContext(component) {
|
|
10
|
+
const ctx = useContext(PromptInputContext);
|
|
11
|
+
if (ctx === null) {
|
|
12
|
+
throw new Error(`<${component}> must be rendered inside a <PromptInput> parent.`);
|
|
13
|
+
}
|
|
14
|
+
return ctx;
|
|
15
|
+
}
|
|
16
|
+
function PromptInput({ value: controlledValue, defaultValue, onValueChange, onSubmit, onStop, isLoading = false, disabled = false, maxLength, trimOnSubmit = true, variant = "default", size = "default", className, children, ref, ...formProps }) {
|
|
17
|
+
const isControlled = controlledValue !== undefined;
|
|
18
|
+
const [internalValue, setInternalValue] = useState(defaultValue ?? "");
|
|
19
|
+
const value = isControlled ? controlledValue : internalValue;
|
|
20
|
+
const setValue = useCallback((next) => {
|
|
21
|
+
if (!isControlled)
|
|
22
|
+
setInternalValue(next);
|
|
23
|
+
onValueChange?.(next);
|
|
24
|
+
}, [isControlled, onValueChange]);
|
|
25
|
+
const textareaRef = useRef(null);
|
|
26
|
+
const submit = useCallback(() => {
|
|
27
|
+
if (disabled)
|
|
28
|
+
return;
|
|
29
|
+
const outgoing = trimOnSubmit ? value.trim() : value;
|
|
30
|
+
if (outgoing.length === 0)
|
|
31
|
+
return;
|
|
32
|
+
if (maxLength !== undefined && outgoing.length > maxLength)
|
|
33
|
+
return;
|
|
34
|
+
onSubmit?.(outgoing);
|
|
35
|
+
}, [disabled, maxLength, onSubmit, trimOnSubmit, value]);
|
|
36
|
+
const stop = useCallback(() => {
|
|
37
|
+
onStop?.();
|
|
38
|
+
}, [onStop]);
|
|
39
|
+
const handleFormSubmit = useCallback((event) => {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
if (isLoading) {
|
|
42
|
+
stop();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
submit();
|
|
46
|
+
}, [isLoading, stop, submit]);
|
|
47
|
+
const contextValue = useMemo(() => ({
|
|
48
|
+
value,
|
|
49
|
+
setValue,
|
|
50
|
+
disabled,
|
|
51
|
+
isLoading,
|
|
52
|
+
maxLength,
|
|
53
|
+
size,
|
|
54
|
+
variant,
|
|
55
|
+
submit,
|
|
56
|
+
stop,
|
|
57
|
+
textareaRef,
|
|
58
|
+
}), [
|
|
59
|
+
value,
|
|
60
|
+
setValue,
|
|
61
|
+
disabled,
|
|
62
|
+
isLoading,
|
|
63
|
+
maxLength,
|
|
64
|
+
size,
|
|
65
|
+
variant,
|
|
66
|
+
submit,
|
|
67
|
+
stop,
|
|
68
|
+
]);
|
|
69
|
+
return (_jsx(PromptInputContext.Provider, { value: contextValue, children: _jsx("form", { ref: ref, "data-slot": "prompt-input", "data-variant": variant, "data-size": size, "data-loading": isLoading ? "true" : "false", "data-disabled": disabled ? "true" : "false", onSubmit: handleFormSubmit, className: cn(promptInputVariants({ variant, size }), className), ...formProps, children: children }) }));
|
|
70
|
+
}
|
|
71
|
+
PromptInput.displayName = "PromptInput";
|
|
72
|
+
function PromptInputTextarea({ className, submitOnEnter = true, maxHeightPx = 240, onKeyDown, rows = 1, ref: forwardedRef, ...props }) {
|
|
73
|
+
const ctx = usePromptInputContext("PromptInputTextarea");
|
|
74
|
+
const internalRef = ctx.textareaRef;
|
|
75
|
+
// Merge external ref if the consumer passed one.
|
|
76
|
+
const setRef = useCallback((node) => {
|
|
77
|
+
internalRef.current = node;
|
|
78
|
+
if (typeof forwardedRef === "function") {
|
|
79
|
+
forwardedRef(node);
|
|
80
|
+
}
|
|
81
|
+
else if (forwardedRef && typeof forwardedRef === "object") {
|
|
82
|
+
forwardedRef.current =
|
|
83
|
+
node;
|
|
84
|
+
}
|
|
85
|
+
}, [forwardedRef, internalRef]);
|
|
86
|
+
// Auto-resize: recompute height whenever the value changes.
|
|
87
|
+
useLayoutEffect(() => {
|
|
88
|
+
const el = internalRef.current;
|
|
89
|
+
if (el === null)
|
|
90
|
+
return;
|
|
91
|
+
el.style.height = "0px";
|
|
92
|
+
const nextHeight = Math.min(el.scrollHeight, maxHeightPx);
|
|
93
|
+
el.style.height = `${nextHeight}px`;
|
|
94
|
+
el.style.overflowY = el.scrollHeight > maxHeightPx ? "auto" : "hidden";
|
|
95
|
+
}, [ctx.value, maxHeightPx, internalRef]);
|
|
96
|
+
const handleChange = useCallback((event) => {
|
|
97
|
+
ctx.setValue(event.target.value);
|
|
98
|
+
}, [ctx]);
|
|
99
|
+
const handleKeyDown = useCallback((event) => {
|
|
100
|
+
onKeyDown?.(event);
|
|
101
|
+
if (event.defaultPrevented)
|
|
102
|
+
return;
|
|
103
|
+
if (!submitOnEnter)
|
|
104
|
+
return;
|
|
105
|
+
if (event.key !== "Enter")
|
|
106
|
+
return;
|
|
107
|
+
if (event.shiftKey || event.altKey || event.nativeEvent.isComposing) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
event.preventDefault();
|
|
111
|
+
if (ctx.isLoading) {
|
|
112
|
+
ctx.stop();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
ctx.submit();
|
|
116
|
+
}
|
|
117
|
+
}, [ctx, onKeyDown, submitOnEnter]);
|
|
118
|
+
return (_jsx("textarea", { ref: setRef, "data-slot": "prompt-input-textarea", value: ctx.value, onChange: handleChange, onKeyDown: handleKeyDown, disabled: ctx.disabled, rows: rows, maxLength: ctx.maxLength, className: cn("w-full resize-none bg-transparent text-foreground placeholder:text-muted-foreground focus:outline-none disabled:cursor-not-allowed", promptInputTextareaSizeClass[ctx.size], className), ...props }));
|
|
119
|
+
}
|
|
120
|
+
PromptInputTextarea.displayName = "PromptInputTextarea";
|
|
121
|
+
function PromptInputToolbar({ className, ref, ...props }) {
|
|
122
|
+
const ctx = usePromptInputContext("PromptInputToolbar");
|
|
123
|
+
return (_jsx("div", { ref: ref, "data-slot": "prompt-input-toolbar", className: cn("flex items-center justify-between", promptInputToolbarSizeClass[ctx.size], className), ...props }));
|
|
124
|
+
}
|
|
125
|
+
PromptInputToolbar.displayName = "PromptInputToolbar";
|
|
126
|
+
function PromptInputActions({ className, ref, ...props }) {
|
|
127
|
+
return (_jsx("div", { ref: ref, "data-slot": "prompt-input-actions", className: cn("flex items-center gap-1", className), ...props }));
|
|
128
|
+
}
|
|
129
|
+
PromptInputActions.displayName = "PromptInputActions";
|
|
130
|
+
function PromptInputAction({ className, type = "button", disabled, ref, ...props }) {
|
|
131
|
+
const ctx = usePromptInputContext("PromptInputAction");
|
|
132
|
+
const resolvedDisabled = disabled ?? ctx.disabled;
|
|
133
|
+
return (_jsx("button", { ref: ref, type: type, "data-slot": "prompt-input-action", disabled: resolvedDisabled, className: cn("inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground 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 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50", className), ...props }));
|
|
134
|
+
}
|
|
135
|
+
PromptInputAction.displayName = "PromptInputAction";
|
|
136
|
+
function PromptInputSubmit({ className, variant, size, children, loadingChildren, disabled, sendLabel = "Send message", stopLabel = "Stop generating", ...props }) {
|
|
137
|
+
const ctx = usePromptInputContext("PromptInputSubmit");
|
|
138
|
+
const isEmpty = ctx.value.trim().length === 0 ||
|
|
139
|
+
(ctx.maxLength !== undefined && ctx.value.length > ctx.maxLength);
|
|
140
|
+
const idleDisabled = ctx.disabled || isEmpty;
|
|
141
|
+
const resolvedDisabled = ctx.isLoading
|
|
142
|
+
? ctx.disabled
|
|
143
|
+
: (disabled ?? idleDisabled);
|
|
144
|
+
const iconSizeClass = ctx.size === "lg" ? "h-4 w-4" : ctx.size === "sm" ? "h-3.5 w-3.5" : "h-4 w-4";
|
|
145
|
+
// When the caller passes custom idle or loading content (e.g. text like
|
|
146
|
+
// "Generate"), the icon-only "icon" size becomes a fixed 40x40 square that
|
|
147
|
+
// clips the label. Widen to a text-friendly size in that case; the container
|
|
148
|
+
// size (sm/default/lg) controls the exact button height.
|
|
149
|
+
const hasCustomContent = children !== undefined || loadingChildren !== undefined;
|
|
150
|
+
const defaultButtonSize = hasCustomContent
|
|
151
|
+
? ctx.size === "sm"
|
|
152
|
+
? "sm"
|
|
153
|
+
: ctx.size === "lg"
|
|
154
|
+
? "lg"
|
|
155
|
+
: "default"
|
|
156
|
+
: "icon";
|
|
157
|
+
return (_jsx(Button, { type: "submit", "data-slot": "prompt-input-submit", "data-state": ctx.isLoading ? "loading" : "idle", "aria-label": ctx.isLoading ? stopLabel : sendLabel, variant: variant ?? (ctx.isLoading ? "secondary" : "default"), size: size ?? defaultButtonSize, disabled: resolvedDisabled, className: cn("shrink-0", className), ...props, children: ctx.isLoading
|
|
158
|
+
? (loadingChildren ?? (_jsx(Square, { "aria-hidden": "true", className: cn(iconSizeClass, "fill-current") })))
|
|
159
|
+
: (children ?? (_jsx(ArrowUp, { "aria-hidden": "true", className: iconSizeClass }))) }));
|
|
160
|
+
}
|
|
161
|
+
PromptInputSubmit.displayName = "PromptInputSubmit";
|
|
162
|
+
function PromptInputCharCount({ className, warnAtPercent = 90, render, ref, ...props }) {
|
|
163
|
+
const ctx = usePromptInputContext("PromptInputCharCount");
|
|
164
|
+
const length = ctx.value.length;
|
|
165
|
+
const maxLength = ctx.maxLength;
|
|
166
|
+
const remaining = maxLength !== undefined ? maxLength - length : undefined;
|
|
167
|
+
const isOverLimit = maxLength !== undefined && length > maxLength;
|
|
168
|
+
const isNearLimit = maxLength !== undefined && length >= (maxLength * warnAtPercent) / 100;
|
|
169
|
+
if (maxLength === undefined && render === undefined) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const content = render !== undefined
|
|
173
|
+
? render({ length, maxLength, remaining, isOverLimit, isNearLimit })
|
|
174
|
+
: `${length}/${maxLength}`;
|
|
175
|
+
return (_jsx("span", { ref: ref, "data-slot": "prompt-input-char-count", "data-over-limit": isOverLimit ? "true" : "false", "data-near-limit": isNearLimit ? "true" : "false", "aria-live": "polite", className: cn("tabular-nums text-xs text-muted-foreground", isNearLimit && !isOverLimit && "text-amber-600 dark:text-amber-400", isOverLimit && "text-destructive", className), ...props, children: content }));
|
|
176
|
+
}
|
|
177
|
+
PromptInputCharCount.displayName = "PromptInputCharCount";
|
|
178
|
+
function PromptInputHint({ className, ref, ...props }) {
|
|
179
|
+
return (_jsx("span", { ref: ref, "data-slot": "prompt-input-hint", className: cn("text-xs text-muted-foreground", className), ...props }));
|
|
180
|
+
}
|
|
181
|
+
PromptInputHint.displayName = "PromptInputHint";
|
|
182
|
+
/* ------------------------------------------------------------------ */
|
|
183
|
+
/* Utility hook: consumers who want to reach into the parent state */
|
|
184
|
+
/* ------------------------------------------------------------------ */
|
|
185
|
+
/**
|
|
186
|
+
* Read the current `<PromptInput>` state from inside a custom child.
|
|
187
|
+
* Only callable inside a `<PromptInput>` tree.
|
|
188
|
+
*/
|
|
189
|
+
function usePromptInput() {
|
|
190
|
+
return usePromptInputContext("usePromptInput");
|
|
191
|
+
}
|
|
192
|
+
export { PromptInput, PromptInputTextarea, PromptInputToolbar, PromptInputActions, PromptInputAction, PromptInputSubmit, PromptInputCharCount, PromptInputHint, usePromptInput, promptInputSizeIds, promptInputVariantIds, };
|
|
193
|
+
//# sourceMappingURL=prompt-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-input.js","sourceRoot":"","sources":["../../../../src/components/ui/prompt-input/prompt-input.tsx"],"names":[],"mappings":"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"}
|