import { SelectionActionItem, SelectionActionsEmits, SelectionActionsProps, SelectionActionState, SelectionPayload } from './src/types';
import { ResolveSelectionInput, UseSelectionAnchorOptions, UseSelectionAnchorReturn, resolveSelectionPayload, useSelectionAnchor } from './src/use-selection-anchor';
import { default as TxSelectionActions } from './src/TxSelectionActions.vue';
/**
* TxSelectionActions — a floating bar that hands the highlighted passage to an
* agent.
*
* The component is presentation only: pair it with `useSelectionAnchor` for
* ordinary document text, or feed `selection` yourself from a contenteditable
* or virtualised surface.
*
* Adapted from Beautiful UI (https://www.beautifului.dev), © 2026 Shane Levine, MIT.
*
* @example
* ```ts
* import { TxSelectionActions, useSelectionAnchor } from '@talex-touch/tuffex'
*
* const { selection, clear } = useSelectionAnchor({ root: articleRef })
*
* // Use in template
*
* ```
*
* @public
*/
declare const SelectionActions: {
new (...args: any[]): import('vue').CreateComponentPublicInstanceWithMixins & Readonly<{
onSubmit?: ((payload: {
prompt: string;
selection: SelectionPayload;
}) => any) | undefined;
onRetry?: (() => any) | undefined;
onAction?: ((payload: {
id: string;
action: SelectionActionItem;
selection: SelectionPayload;
}) => any) | undefined;
"onUpdate:expanded"?: ((expanded: boolean) => any) | undefined;
onDiscard?: (() => any) | undefined;
onKeep?: (() => any) | undefined;
"onUpdate:prompt"?: ((prompt: string) => any) | undefined;
}>, {
updatePosition: () => void;
focusInput: () => void | undefined;
el: import('vue').Ref;
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
submit: (payload: {
prompt: string;
selection: SelectionPayload;
}) => any;
retry: () => any;
action: (payload: {
id: string;
action: SelectionActionItem;
selection: SelectionPayload;
}) => any;
"update:expanded": (expanded: boolean) => any;
discard: () => any;
keep: () => any;
"update:prompt": (prompt: string) => any;
}, import('vue').PublicProps, {
state: SelectionActionState;
ariaLabel: string;
selection: SelectionPayload | null;
placeholder: string;
offset: number;
retryLabel: string;
expanded: boolean;
sendLabel: string;
actions: SelectionActionItem[];
expandLabel: string;
collapseLabel: string;
prompt: string;
activeActionId: string;
hidePrompt: boolean;
keepLabel: string;
discardLabel: string;
busyLabel: string;
}, false, {}, {}, Record, Record, string, {
anchorRef: ({
$: import('vue').ComponentInternalInstance;
$data: {};
$props: {
readonly modelValue?: boolean | undefined;
readonly disabled?: boolean | undefined;
readonly eager?: boolean | undefined;
readonly placement?: import('..').BaseAnchorPlacement | undefined;
readonly offset?: number | undefined;
readonly width?: number | undefined;
readonly minWidth?: number | undefined;
readonly maxWidth?: number | undefined;
readonly maxHeight?: number | undefined;
readonly unlimitedHeight?: boolean | undefined;
readonly matchReferenceWidth?: boolean | undefined;
readonly referenceClass?: import('..').BaseAnchorClassValue | undefined;
readonly virtualReference?: import('..').BaseAnchorVirtualReference | undefined;
readonly disableFlip?: boolean | undefined;
readonly animation?: import('..').BaseAnchorAnimationOptions | undefined;
readonly useCard?: boolean | undefined;
readonly panelVariant?: "solid" | "dashed" | "plain" | undefined;
readonly panelBackground?: "pure" | "mask" | "blur" | "glass" | "refraction" | "acrylic" | "mica" | "flat" | "plain" | undefined;
readonly panelShadow?: "none" | "soft" | "medium" | undefined;
readonly panelRadius?: number | undefined;
readonly panelPadding?: number | undefined;
readonly panelCard?: import('..').BaseAnchorPanelCardProps | undefined;
readonly surfaceMotionAdaptation?: import('..').BaseAnchorSurfaceMotionAdaptation | undefined;
readonly showArrow?: boolean | undefined;
readonly arrowSize?: number | undefined;
readonly keepAliveContent?: boolean | undefined;
readonly closeOnClickOutside?: boolean | undefined;
readonly closeOnEsc?: boolean | undefined;
readonly toggleOnReferenceClick?: boolean | undefined;
readonly hoverBridge?: boolean | undefined;
readonly delayNode?: (import('../packages/tuffex/packages/utils/index').AnchorDelayNode | null) | undefined;
readonly onOpen?: (() => any) | undefined;
readonly onClose?: (() => any) | undefined;
readonly "onUpdate:modelValue"?: ((v: boolean) => any) | undefined;
readonly "onFloating-enter"?: ((event: MouseEvent) => any) | undefined;
readonly "onFloating-leave"?: ((event: MouseEvent) => any) | undefined;
} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
$attrs: import('vue').Attrs;
$refs: {
[x: string]: unknown;
} & {
referenceRef: HTMLDivElement;
floatingRef: HTMLDivElement;
liquidStageRef: HTMLDivElement;
liquidShadowRef: HTMLDivElement;
liquidPanelShapeRef: SVGRectElement;
clipRef: HTMLDivElement;
contentRef: HTMLDivElement;
arrowRef: HTMLSpanElement;
};
$slots: Readonly<{
[name: string]: import('vue').Slot | undefined;
}>;
$root: import('vue').ComponentPublicInstance | null;
$parent: import('vue').ComponentPublicInstance | null;
$host: Element | null;
$emit: ((event: "open") => void) & ((event: "close") => void) & ((event: "update:modelValue", v: boolean) => void) & ((event: "floating-enter", payload: MouseEvent) => void) & ((event: "floating-leave", payload: MouseEvent) => void);
$el: any;
$options: import('vue').ComponentOptionsBase & Readonly<{
onOpen?: (() => any) | undefined;
onClose?: (() => any) | undefined;
"onUpdate:modelValue"?: ((v: boolean) => any) | undefined;
"onFloating-enter"?: ((event: MouseEvent) => any) | undefined;
"onFloating-leave"?: ((event: MouseEvent) => any) | undefined;
}>, {
close: () => void;
toggle: () => void;
updatePosition: () => void;
getPanelRect: () => DOMRect | null;
containsFloating: (target: Node) => boolean;
getSide: () => "left" | "top" | "right" | "bottom";
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
open: () => any;
close: () => any;
"update:modelValue": (v: boolean) => any;
"floating-enter": (event: MouseEvent) => any;
"floating-leave": (event: MouseEvent) => any;
}, string, {
width: number;
disabled: boolean;
offset: number;
animation: import('..').BaseAnchorAnimationOptions;
modelValue: boolean;
eager: boolean;
placement: import('..').BaseAnchorPlacement;
minWidth: number;
maxWidth: number;
maxHeight: number;
unlimitedHeight: boolean;
matchReferenceWidth: boolean;
virtualReference: import('..').BaseAnchorVirtualReference;
disableFlip: boolean;
useCard: boolean;
panelVariant: "solid" | "dashed" | "plain";
panelBackground: "pure" | "mask" | "blur" | "glass" | "refraction" | "acrylic" | "mica" | "flat" | "plain";
panelShadow: "none" | "soft" | "medium";
panelRadius: number;
panelPadding: number;
surfaceMotionAdaptation: import('..').BaseAnchorSurfaceMotionAdaptation;
showArrow: boolean;
arrowSize: number;
keepAliveContent: boolean;
closeOnClickOutside: boolean;
closeOnEsc: boolean;
toggleOnReferenceClick: boolean;
hoverBridge: boolean;
delayNode: import('../packages/tuffex/packages/utils/index').AnchorDelayNode | null;
}, {}, string, {}, Record, Record, string, import('vue').ComponentProvideOptions> & {
beforeCreate?: (() => void) | (() => void)[];
created?: (() => void) | (() => void)[];
beforeMount?: (() => void) | (() => void)[];
mounted?: (() => void) | (() => void)[];
beforeUpdate?: (() => void) | (() => void)[];
updated?: (() => void) | (() => void)[];
activated?: (() => void) | (() => void)[];
deactivated?: (() => void) | (() => void)[];
beforeDestroy?: (() => void) | (() => void)[];
beforeUnmount?: (() => void) | (() => void)[];
destroyed?: (() => void) | (() => void)[];
unmounted?: (() => void) | (() => void)[];
renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
};
$forceUpdate: () => void;
$nextTick: typeof import('vue').nextTick;
$watch any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
} & Readonly<{
width: number;
disabled: boolean;
offset: number;
animation: import('..').BaseAnchorAnimationOptions;
modelValue: boolean;
eager: boolean;
placement: import('..').BaseAnchorPlacement;
minWidth: number;
maxWidth: number;
maxHeight: number;
unlimitedHeight: boolean;
matchReferenceWidth: boolean;
virtualReference: import('..').BaseAnchorVirtualReference;
disableFlip: boolean;
useCard: boolean;
panelVariant: "solid" | "dashed" | "plain";
panelBackground: "pure" | "mask" | "blur" | "glass" | "refraction" | "acrylic" | "mica" | "flat" | "plain";
panelShadow: "none" | "soft" | "medium";
panelRadius: number;
panelPadding: number;
surfaceMotionAdaptation: import('..').BaseAnchorSurfaceMotionAdaptation;
showArrow: boolean;
arrowSize: number;
keepAliveContent: boolean;
closeOnClickOutside: boolean;
closeOnEsc: boolean;
toggleOnReferenceClick: boolean;
hoverBridge: boolean;
delayNode: import('../packages/tuffex/packages/utils/index').AnchorDelayNode | null;
}> & Omit & Readonly<{
onOpen?: (() => any) | undefined;
onClose?: (() => any) | undefined;
"onUpdate:modelValue"?: ((v: boolean) => any) | undefined;
"onFloating-enter"?: ((event: MouseEvent) => any) | undefined;
"onFloating-leave"?: ((event: MouseEvent) => any) | undefined;
}>, "toggle" | "close" | "updatePosition" | "getPanelRect" | "containsFloating" | "getSide" | ("width" | "disabled" | "offset" | "animation" | "modelValue" | "eager" | "placement" | "minWidth" | "maxWidth" | "maxHeight" | "unlimitedHeight" | "matchReferenceWidth" | "virtualReference" | "disableFlip" | "useCard" | "panelVariant" | "panelBackground" | "panelShadow" | "panelRadius" | "panelPadding" | "surfaceMotionAdaptation" | "showArrow" | "arrowSize" | "keepAliveContent" | "closeOnClickOutside" | "closeOnEsc" | "toggleOnReferenceClick" | "hoverBridge" | "delayNode")> & {
close: () => void;
toggle: () => void;
updatePosition: () => void;
getPanelRect: () => DOMRect | null;
containsFloating: (target: Node) => boolean;
getSide: () => "left" | "top" | "right" | "bottom";
} & {} & import('vue').ComponentCustomProperties & {} & {
$slots: {
reference?(_: {}): any;
default?(_: {
side: "left" | "top" | "right" | "bottom";
}): any;
default?(_: {
side: "left" | "top" | "right" | "bottom";
}): any;
default?(_: {
side: "left" | "top" | "right" | "bottom";
}): any;
};
}) | null;
barRef: HTMLDivElement;
contentRef: HTMLDivElement;
inputRef: HTMLInputElement;
}, any, import('vue').ComponentProvideOptions, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, Readonly & Readonly<{
onSubmit?: ((payload: {
prompt: string;
selection: SelectionPayload;
}) => any) | undefined;
onRetry?: (() => any) | undefined;
onAction?: ((payload: {
id: string;
action: SelectionActionItem;
selection: SelectionPayload;
}) => any) | undefined;
"onUpdate:expanded"?: ((expanded: boolean) => any) | undefined;
onDiscard?: (() => any) | undefined;
onKeep?: (() => any) | undefined;
"onUpdate:prompt"?: ((prompt: string) => any) | undefined;
}>, {
updatePosition: () => void;
focusInput: () => void | undefined;
el: import('vue').Ref;
}, {}, {}, {}, {
state: SelectionActionState;
ariaLabel: string;
selection: SelectionPayload | null;
placeholder: string;
offset: number;
retryLabel: string;
expanded: boolean;
sendLabel: string;
actions: SelectionActionItem[];
expandLabel: string;
collapseLabel: string;
prompt: string;
activeActionId: string;
hidePrompt: boolean;
keepLabel: string;
discardLabel: string;
busyLabel: string;
}>;
__isFragment?: never;
__isTeleport?: never;
__isSuspense?: never;
} & import('vue').ComponentOptionsBase & Readonly<{
onSubmit?: ((payload: {
prompt: string;
selection: SelectionPayload;
}) => any) | undefined;
onRetry?: (() => any) | undefined;
onAction?: ((payload: {
id: string;
action: SelectionActionItem;
selection: SelectionPayload;
}) => any) | undefined;
"onUpdate:expanded"?: ((expanded: boolean) => any) | undefined;
onDiscard?: (() => any) | undefined;
onKeep?: (() => any) | undefined;
"onUpdate:prompt"?: ((prompt: string) => any) | undefined;
}>, {
updatePosition: () => void;
focusInput: () => void | undefined;
el: import('vue').Ref;
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
submit: (payload: {
prompt: string;
selection: SelectionPayload;
}) => any;
retry: () => any;
action: (payload: {
id: string;
action: SelectionActionItem;
selection: SelectionPayload;
}) => any;
"update:expanded": (expanded: boolean) => any;
discard: () => any;
keep: () => any;
"update:prompt": (prompt: string) => any;
}, string, {
state: SelectionActionState;
ariaLabel: string;
selection: SelectionPayload | null;
placeholder: string;
offset: number;
retryLabel: string;
expanded: boolean;
sendLabel: string;
actions: SelectionActionItem[];
expandLabel: string;
collapseLabel: string;
prompt: string;
activeActionId: string;
hidePrompt: boolean;
keepLabel: string;
discardLabel: string;
busyLabel: string;
}, {}, string, {}, Record, Record, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & (new () => {
$slots: Readonly<{
'action-icon'?: (props: {
action: SelectionActionItem;
}) => any;
busy?: (props: {
label: string;
}) => any;
result?: () => any;
}> & {
'action-icon'?: (props: {
action: SelectionActionItem;
}) => any;
busy?: (props: {
label: string;
}) => any;
result?: () => any;
};
}) & import('vue').Plugin;
export { resolveSelectionPayload, SelectionActions, TxSelectionActions, useSelectionAnchor };
export type { ResolveSelectionInput, SelectionActionItem, SelectionActionsEmits, SelectionActionsProps, SelectionActionState, SelectionPayload, UseSelectionAnchorOptions, UseSelectionAnchorReturn, };
export type TxSelectionActionsInstance = InstanceType;
export default SelectionActions;