UNPKG

@assistant-ui/react

Version:

Open-source TypeScript/React library for building production-grade AI chat experiences

89 lines (88 loc) • 2.96 kB
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime"; import { useEffectEvent, useRef } from "@assistant-ui/tap/react-shim"; import { resource } from "@assistant-ui/tap"; // src/primitives/composer/trigger/triggerSelectionResource.ts /** Owns composer text mutation + behavior dispatch on item selection. */ const useTriggerSelectionResource = (t0) => { const $ = c(15); const { behavior, trigger, aui, setCursorPosition, onSelected } = t0; const selectItemOverrideRef = useRef(null); let t1; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t1 = (fn) => { selectItemOverrideRef.current = fn; return () => { if (selectItemOverrideRef.current === fn) selectItemOverrideRef.current = null; }; }; $[0] = t1; } else t1 = $[0]; const registerSelectItemOverride = useEffectEvent(t1); let t2; if ($[1] !== aui || $[2] !== behavior || $[3] !== onSelected || $[4] !== setCursorPosition || $[5] !== trigger) { t2 = (item) => { if (!trigger || !behavior) return; const reportInserted = () => { if (behavior.kind === "directive") behavior.onInserted?.(item); }; if (selectItemOverrideRef.current?.(item, reportInserted)) { onSelected(); return; } const currentText = aui.composer.getState().text; const before = currentText.slice(0, trigger.offset); const after = currentText.slice(trigger.endOffset); const insertDirective = () => { const directive = behavior.formatter.serialize(item); aui.composer.setText(before + directive + (after.startsWith(" ") ? after : ` ${after}`), { origin: "user" }); setCursorPosition(before.length + directive.length + 1); }; if (behavior.kind === "directive") { insertDirective(); behavior.onInserted?.(item); } else { if (behavior.removeOnExecute) { aui.composer.setText(before + (after.startsWith(" ") ? after.slice(1) : after), { origin: "user" }); setCursorPosition(before.length); } else insertDirective(); behavior.onExecute(item); } onSelected(); }; $[1] = aui; $[2] = behavior; $[3] = onSelected; $[4] = setCursorPosition; $[5] = trigger; $[6] = t2; } else t2 = $[6]; const selectItem = useEffectEvent(t2); let t3; if ($[7] !== onSelected || $[8] !== setCursorPosition || $[9] !== trigger) { t3 = () => { onSelected(); if (trigger) setCursorPosition(trigger.offset); }; $[7] = onSelected; $[8] = setCursorPosition; $[9] = trigger; $[10] = t3; } else t3 = $[10]; const close = useEffectEvent(t3); let t4; if ($[11] !== close || $[12] !== registerSelectItemOverride || $[13] !== selectItem) { t4 = { selectItem, close, registerSelectItemOverride }; $[11] = close; $[12] = registerSelectItemOverride; $[13] = selectItem; $[14] = t4; } else t4 = $[14]; return t4; }; const TriggerSelectionResource = resource(useTriggerSelectionResource); export { TriggerSelectionResource }; //# sourceMappingURL=triggerSelectionResource.js.map