@assistant-ui/react
Version:
Open-source TypeScript/React library for building production-grade AI chat experiences
68 lines (67 loc) • 1.96 kB
JavaScript
"use client";
import { useTriggerBehaviorRegistration } from "./TriggerPopover.js";
import { defaultDirectiveFormatter } from "@assistant-ui/core";
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
import { useEffect, useInsertionEffect, useRef } from "@assistant-ui/tap/react-shim";
// src/primitives/composer/trigger/TriggerPopoverDirective.tsx
/**
* Configures a `<TriggerPopover>` to insert a directive chip when an item is
* selected. Render exactly one behavior sub-primitive per `<TriggerPopover>`.
*
* Exposed as `ComposerPrimitive.TriggerPopover.Directive`.
*
* @example
* ```tsx
* <ComposerPrimitive.TriggerPopover char="@" adapter={mentionAdapter}>
* <ComposerPrimitive.TriggerPopover.Directive
* formatter={defaultDirectiveFormatter}
* onInserted={(item) => track("mention", item.id)}
* />
* </ComposerPrimitive.TriggerPopover>
* ```
*/
const ComposerPrimitiveTriggerPopoverDirective = (t0) => {
const $ = c(7);
const { formatter, onInserted } = t0;
const { register } = useTriggerBehaviorRegistration();
const onInsertedRef = useRef(onInserted);
let t1;
let t2;
if ($[0] !== onInserted) {
t1 = () => {
onInsertedRef.current = onInserted;
};
t2 = [onInserted];
$[0] = onInserted;
$[1] = t1;
$[2] = t2;
} else {
t1 = $[1];
t2 = $[2];
}
useInsertionEffect(t1, t2);
let t3;
let t4;
if ($[3] !== formatter || $[4] !== register) {
t3 = () => {
return register({
kind: "directive",
formatter: formatter ?? defaultDirectiveFormatter,
onInserted: (item) => onInsertedRef.current?.(item)
});
};
t4 = [register, formatter];
$[3] = formatter;
$[4] = register;
$[5] = t3;
$[6] = t4;
} else {
t3 = $[5];
t4 = $[6];
}
useEffect(t3, t4);
return null;
};
ComposerPrimitiveTriggerPopoverDirective.displayName = "ComposerPrimitive.TriggerPopoverDirective";
export { ComposerPrimitiveTriggerPopoverDirective };
//# sourceMappingURL=TriggerPopoverDirective.js.map