@payfit/unity-components
Version:
83 lines (82 loc) • 2.8 kB
JavaScript
import { useAIComposerContext as e } from "../AIComposer.context.js";
import { forwardRef as t, useCallback as n, useLayoutEffect as r, useRef as i, useState as a } from "react";
import { uyTv as o } from "@payfit/unity-themes";
import { jsx as s, jsxs as c } from "react/jsx-runtime";
import { useResizeObserver as l } from "usehooks-ts";
import { TextArea as u } from "react-aria-components/TextArea";
//#region src/modules/ai-kit/components/ai-composer/parts/AIComposerTextArea.tsx
var d = o({ slots: {
wrapper: "uy:relative uy:group/textarea uy:flex uy:min-h-0 uy:flex-1",
base: [
"uy:field-sizing-content uy:min-h-10 uy:max-h-[240px] uy:flex-1 uy:resize-none uy:overflow-y-auto uy:p-0",
"uy:typography-body uy:text-content-neutral uy:placeholder:text-content-neutral-lowest",
"uy:disabled:cursor-not-allowed uy:disabled:text-content-neutral-disabled",
"uy:disabled:placeholder:text-content-neutral-low-disabled",
"uy:outline-none"
],
fade: [
"uy:pointer-events-none uy:absolute uy:inset-x-0 uy:bottom-0 uy:h-300",
"uy:bg-gradient-to-t uy:from-surface-neutral uy:to-transparent",
"uy:opacity-0 uy:group-data-[scrollable-down=true]/textarea:opacity-100"
]
} }), f = t((t, o) => {
let { enterKeyBehavior: f, hasValue: p, requestSubmit: m, setHasValue: h, state: g } = e(), _ = i(null), [v, y] = a(!1), { base: b, fade: x, wrapper: S } = d(), { onChange: C, onKeyDown: w, onScroll: T, value: E, ...D } = t, O = n((e) => {
h(!!e?.value.trim());
}, [h]), k = n((e) => {
let t = e ?? _.current;
t && y(t.scrollTop < t.scrollHeight - t.clientHeight - 1);
}, []), A = n((e) => {
requestAnimationFrame(() => {
k(e);
});
}, [k]);
r(() => {
O(_.current ?? void 0), A();
}, [
A,
O,
E
]), l({
ref: _,
onResize: () => {
A();
}
});
let j = n((e) => {
_.current = e, typeof o == "function" ? o(e) : o && (o.current = e), O(e ?? void 0), e && A(e);
}, [
o,
A,
O
]), M = (e) => {
O(e.target), C?.(e), A(e.target);
}, N = (e) => {
k(e.currentTarget), T?.(e);
}, P = (e) => {
w?.(e);
let t = e.key === "Enter" && !e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey;
e.defaultPrevented || !t || e.nativeEvent.isComposing || f !== "submit" || !p || g !== "enabled" || (e.preventDefault(), m());
};
return /* @__PURE__ */ c("div", {
className: S(),
"data-scrollable-down": v || void 0,
"data-unity-slot": "ai.composer.textarea-wrapper",
children: [/* @__PURE__ */ s(u, {
...D,
value: E,
ref: j,
disabled: g === "disabled",
className: b(),
"data-unity-slot": "ai.composer.textarea",
onChange: M,
onKeyDown: P,
onScroll: N
}), /* @__PURE__ */ s("span", {
"aria-hidden": "true",
className: x()
})]
});
});
f.displayName = "AIComposerTextArea";
//#endregion
export { f as AIComposerTextArea };