UNPKG

@payfit/unity-components

Version:

83 lines (82 loc) • 2.8 kB
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 };