Skip to content

组合式函数 ​

组件库将许多交互逻辑和无障碍底层能力,封装成了易于复用的 Vue 3 组合式函数(Composables)。通用函数可以直接从包根统一引入:

ts
import { useClipboard, useControllableState } from '@astryx-vue/core'

注意:包内没有 @astryx-vue/core/composables 这种子路径。所有在 packages/core/src/composables/index.ts 中导出的通用函数如下表所示,具体参数签名以 TypeScript 类型定义为准:

函数名称主要用途
useControllableState统一管理受控与非受控状态。常用于封装兼容 v-model 的自定义输入控件。
useAnnounce触发屏幕阅读器读屏语音播报,帮助视障用户获取动态操作反馈。
useClipboard将指定文本写入系统剪贴板,并在短时间内提供响应式的 isCopied 状态。
useHotkeys注册页面全局快捷键。支持 mod+k 等直观写法,其中 mod 在 macOS 上对应 ⌘ 键。
useMediaQuery响应式监听 CSS 媒体查询(Media Query),将其转化为响应式 Ref。
useDismiss统一处理浮层的外部点击(Click Outside)与按下 Escape 键退出,内置撤销栈确保内层弹层优先响应。
useFocusTrap在模态弹窗或抽屉容器内循环限制键盘 Tab 焦点,防止焦点跑出容器。
useRestoreFocus弹窗打开时自动记住触发源,弹窗关闭后将焦点智能送回原来的按钮。
useScrollLock带有引用计数的背景滚动锁定。即使打开多个嵌套弹窗,关闭时也能准确恢复页面滚动。
useListFocus处理一维垂直或水平列表的键盘上下左右键导航,默认查找 [role="menuitem"] 元素。
useClickableContainer让整块卡片区域都能点击,且点击卡片内部的按钮、输入框或超链接时,不会误触发外层容器的点击。
useGridRovingFocus二维卡片网格的键盘方向键流转导航(Roving tabindex)。
useTypeahead支持输入首字母在列表中快速定位匹配条目,不强行移动焦点,而是把匹配结果传递给 onMatch 回调。
useCombobox封装可筛选、带联想搜索的下拉选择框状态与当前选中值。
useNumberField封装支持最大值、最小值、步进(step)的数值微调输入逻辑。
useAsyncSource、createStaticSource支持可取消的异步搜索数据源,以及本地纯前端静态数据集管理。
useOverflow、computeOverflow当容器宽度不够时,智能计算哪些菜单项需要折叠收录到「更多」下拉菜单中。
useLongPress移动端与桌面端的长按触发手势。若手指滑动超过阈值会自动取消长按。
useStreamingText处理 AI 打字机流式输出的平滑文本呈现,支持自然停顿(natural)、快速(fast)与瞬间显示(instant)。
snapToGraphemeBoundary将字符串截断偏移智能对齐到文字的「字素边界」(避免生硬切断 Emoji 或复合字符)。
useChatStreamScroll智能跟随 AI 聊天对话流滚动。用户向上翻阅时保持原位,生成结束或位于底部时平滑吸底。
useChatNewMessages当读者未贴合在对话流底部时,在页面上浮动提示有未读的新消息产生。
useKeyboardHint当用户第一次通过键盘方向键切入一组控件时,在当前焦点项旁边短暂弹出操作提示气泡。
useImageMode自动采样图片亮度,智能推断上层该使用深色还是浅色的前景文字;若采样失败则采用安全回退值。
useContainerReveal仅在鼠标悬停或键盘聚焦到容器时,才显示操作按钮,返回对应的样式类名。
useMenuPress在菜单项按下后,吸收吞掉浏览器可能冗余触发的随后那次点击事件,防止误触。

别名提示:useClipboard 拥有一个兼容旧版的名字 useCopyToClipboard,从包根或 @astryx-vue/core/Code 均可引入,底层完全等价。

随特定组件绑定的组合式函数 ​

部分与特定组件深度绑定的函数,既可以从该组件的专用子路径引入,也可以直接从包根引入:

函数名称对应组件入口
useToast@astryx-vue/core/Toast
useImperativeDialog@astryx-vue/core/Dialog
useImperativeAlertDialog@astryx-vue/core/AlertDialog
useOverlay@astryx-vue/core/Overlay
useContextMenu、useContextMenuSize@astryx-vue/core/ContextMenu
useDropdownMenuContext@astryx-vue/core/DropdownMenu
useSideNavCollapse@astryx-vue/core/SideNav
useListContext、useItemDescriptionId@astryx-vue/core/List
useTheme、useMediaTheme@astryx-vue/core/Theme
useIndicator@astryx-vue/core/Indicator
useSemanticIcon@astryx-vue/core/Icon
useSyntaxTheme@astryx-vue/core/Code
useChatComposerContext、useChatComposerTokens、useChatPasteAsToken、useChatDictation、useSpeechRecognition@astryx-vue/core/Chat

多语言与国际化相关的 provideAstryxLocale 和 useAstryxMessages,请参阅 国际化。