@opentiny/tiny-robot 0.2.0-alpha.0 → 0.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/action-group/ActionGroup.vue.d.ts +26 -0
  2. package/dist/action-group/ActionGroupItem.vue.d.ts +18 -0
  3. package/dist/action-group/index.d.ts +12 -0
  4. package/dist/action-group/index.type.d.ts +16 -0
  5. package/dist/feedback/components/SourceList.vue.d.ts +11 -0
  6. package/dist/feedback/components/index.d.ts +1 -0
  7. package/dist/feedback/index.d.ts +7 -0
  8. package/dist/feedback/index.type.d.ts +25 -0
  9. package/dist/feedback/index.vue.d.ts +13 -0
  10. package/dist/history/components/index.d.ts +2 -0
  11. package/dist/history/components/item-tag.vue.d.ts +5 -0
  12. package/dist/history/components/search-empty.vue.d.ts +7 -0
  13. package/dist/history/composables/index.d.ts +1 -0
  14. package/dist/history/composables/useEditItemTitle.d.ts +12 -0
  15. package/dist/history/index.d.ts +6 -0
  16. package/dist/history/index.type.d.ts +43 -0
  17. package/dist/history/index.vue.d.ts +2 -0
  18. package/dist/icon-button/index.d.ts +7 -0
  19. package/dist/icon-button/index.type.d.ts +7 -0
  20. package/dist/icon-button/index.vue.d.ts +6 -0
  21. package/dist/index.d.ts +10 -1
  22. package/dist/index.js +57 -27
  23. package/dist/node_modules/.pnpm/@opentiny_utils@3.22.0/node_modules/@opentiny/utils/dist/index.es.js +1335 -884
  24. package/dist/node_modules/.pnpm/@opentiny_vue-common@3.22.0/node_modules/@opentiny/vue-common/lib/index.js +660 -144
  25. package/dist/node_modules/.pnpm/@opentiny_vue-hooks@3.22.0/node_modules/@opentiny/vue-hooks/dist/src/vue-popper.js +85 -0
  26. package/dist/node_modules/.pnpm/@opentiny_vue-locale@3.22.0/node_modules/@opentiny/vue-locale/lib/index.js +1783 -0
  27. package/dist/node_modules/.pnpm/@opentiny_vue-renderless@3.22.0/node_modules/@opentiny/vue-renderless/tooltip/index.js +77 -0
  28. package/dist/node_modules/.pnpm/@opentiny_vue-renderless@3.22.0/node_modules/@opentiny/vue-renderless/tooltip/vue.js +90 -0
  29. package/dist/node_modules/.pnpm/@opentiny_vue-tooltip@3.22.0/node_modules/@opentiny/vue-tooltip/lib/index.js +176 -0
  30. package/dist/node_modules/.pnpm/@opentiny_vue-tooltip@3.22.0/node_modules/@opentiny/vue-tooltip/lib/pc.js +248 -0
  31. package/dist/node_modules/.pnpm/@vueuse_core@13.1.0_vue@3.5.13/node_modules/@vueuse/core/index.js +190 -0
  32. package/dist/node_modules/.pnpm/@vueuse_shared@13.1.0_vue@3.5.13/node_modules/@vueuse/shared/index.js +53 -0
  33. package/dist/packages/components/src/action-group/ActionGroup.vue.js +7 -0
  34. package/dist/packages/components/src/action-group/ActionGroup.vue2.js +97 -0
  35. package/dist/packages/components/src/action-group/ActionGroupItem.vue.js +14 -0
  36. package/dist/packages/components/src/action-group/ActionGroupItem.vue2.js +4 -0
  37. package/dist/packages/components/src/action-group/index.js +17 -0
  38. package/dist/packages/components/src/bubble/bubble.vue.js +2 -2
  39. package/dist/packages/components/src/bubble/bubble.vue2.js +46 -46
  40. package/dist/packages/components/src/container/index.vue.js +1 -1
  41. package/dist/packages/components/src/container/index.vue2.js +17 -17
  42. package/dist/packages/components/src/feedback/components/SourceList.vue.js +7 -0
  43. package/dist/packages/components/src/feedback/components/SourceList.vue2.js +52 -0
  44. package/dist/packages/components/src/feedback/index.js +9 -0
  45. package/dist/packages/components/src/feedback/index.vue.js +7 -0
  46. package/dist/packages/components/src/feedback/index.vue2.js +142 -0
  47. package/dist/packages/components/src/history/components/item-tag.vue.js +7 -0
  48. package/dist/packages/components/src/history/components/item-tag.vue2.js +21 -0
  49. package/dist/packages/components/src/history/components/search-empty.vue.js +7 -0
  50. package/dist/packages/components/src/history/components/search-empty.vue2.js +20 -0
  51. package/dist/packages/components/src/history/composables/useEditItemTitle.js +43 -0
  52. package/dist/packages/components/src/history/index.js +11 -0
  53. package/dist/packages/components/src/history/index.vue.js +7 -0
  54. package/dist/packages/components/src/history/index.vue2.js +130 -0
  55. package/dist/packages/components/src/icon-button/index.js +9 -0
  56. package/dist/packages/components/src/icon-button/index.vue.js +7 -0
  57. package/dist/packages/components/src/icon-button/index.vue2.js +40 -0
  58. package/dist/packages/components/src/prompts/prompt.vue.js +2 -2
  59. package/dist/packages/components/src/prompts/prompt.vue2.js +17 -15
  60. package/dist/packages/components/src/question/components/HotQuestions.vue.js +23 -23
  61. package/dist/packages/components/src/question/index.vue.js +18 -18
  62. package/dist/packages/components/src/sender/components/TemplateEditor.vue.js +7 -0
  63. package/dist/packages/components/src/sender/components/TemplateEditor.vue2.js +121 -0
  64. package/dist/packages/components/src/sender/index.vue.js +149 -128
  65. package/dist/packages/components/src/suggestion/components/CategoryNav.vue.js +38 -0
  66. package/dist/packages/components/src/suggestion/components/CategoryNav.vue2.js +4 -0
  67. package/dist/packages/components/src/suggestion/components/SuggestionCapsule.vue.js +107 -0
  68. package/dist/packages/components/src/suggestion/components/SuggestionCapsule.vue2.js +4 -0
  69. package/dist/packages/components/src/suggestion/components/SuggestionPanel.vue.js +123 -0
  70. package/dist/packages/components/src/suggestion/components/SuggestionPanel.vue2.js +4 -0
  71. package/dist/packages/components/src/suggestion/composables/useKeyboardNavigation.js +45 -0
  72. package/dist/packages/components/src/suggestion/composables/useTriggerDetection.js +17 -0
  73. package/dist/packages/components/src/suggestion/index.js +9 -0
  74. package/dist/packages/components/src/suggestion/index.vue.js +179 -0
  75. package/dist/packages/components/src/suggestion/index.vue2.js +4 -0
  76. package/dist/packages/components/src/suggestion/utils/dom.js +18 -0
  77. package/dist/packages/svgs/dist/tiny-robot-svgs.js +306 -90
  78. package/dist/question/components/HotQuestions.vue.d.ts +2 -2
  79. package/dist/sender/components/TemplateEditor.vue.d.ts +18 -0
  80. package/dist/sender/index.type.d.ts +47 -0
  81. package/dist/sender/index.vue.d.ts +68 -3
  82. package/dist/style.css +1 -1
  83. package/dist/suggestion/components/CategoryNav.vue.d.ts +45 -0
  84. package/dist/suggestion/components/SuggestionCapsule.vue.d.ts +32 -0
  85. package/dist/suggestion/components/SuggestionPanel.vue.d.ts +84 -0
  86. package/dist/suggestion/composables/useKeyboardNavigation.d.ts +18 -0
  87. package/dist/suggestion/composables/useSuggestionFilter.d.ts +10 -0
  88. package/dist/suggestion/composables/useTriggerDetection.d.ts +11 -0
  89. package/dist/suggestion/index.d.ts +7 -0
  90. package/dist/suggestion/index.type.d.ts +94 -0
  91. package/dist/suggestion/index.vue.d.ts +343 -0
  92. package/dist/suggestion/utils/dom.d.ts +20 -0
  93. package/package.json +4 -3
  94. package/src/action-group/ActionGroup.vue +232 -0
  95. package/src/action-group/ActionGroupItem.vue +9 -0
  96. package/src/action-group/index.ts +25 -0
  97. package/src/action-group/index.type.ts +20 -0
  98. package/src/bubble/bubble.vue +4 -14
  99. package/src/container/index.vue +1 -2
  100. package/src/feedback/components/SourceList.vue +112 -0
  101. package/src/feedback/components/index.ts +1 -0
  102. package/src/feedback/index.ts +12 -0
  103. package/src/feedback/index.type.ts +27 -0
  104. package/src/feedback/index.vue +166 -0
  105. package/src/history/components/index.ts +2 -0
  106. package/src/history/components/item-tag.vue +49 -0
  107. package/src/history/components/search-empty.vue +38 -0
  108. package/src/history/composables/index.ts +1 -0
  109. package/src/history/composables/useEditItemTitle.ts +75 -0
  110. package/src/history/index.ts +12 -0
  111. package/src/history/index.type.ts +50 -0
  112. package/src/history/index.vue +292 -0
  113. package/src/icon-button/index.ts +12 -0
  114. package/src/icon-button/index.type.ts +8 -0
  115. package/src/icon-button/index.vue +52 -0
  116. package/src/index.ts +33 -1
  117. package/src/prompts/prompt.vue +7 -21
  118. package/src/question/components/HotQuestions.vue +1 -1
  119. package/src/question/index.less +9 -10
  120. package/src/sender/components/TemplateEditor.vue +274 -0
  121. package/src/sender/index.less +17 -7
  122. package/src/sender/index.type.ts +51 -0
  123. package/src/sender/index.vue +56 -8
  124. package/src/sender/vars.less +3 -3
  125. package/src/suggestion/components/CategoryNav.vue +38 -0
  126. package/src/suggestion/components/SuggestionCapsule.vue +183 -0
  127. package/src/suggestion/components/SuggestionPanel.vue +147 -0
  128. package/src/suggestion/composables/useKeyboardNavigation.ts +101 -0
  129. package/src/suggestion/composables/useSuggestionFilter.ts +34 -0
  130. package/src/suggestion/composables/useTriggerDetection.ts +46 -0
  131. package/src/suggestion/index.less +497 -0
  132. package/src/suggestion/index.ts +12 -0
  133. package/src/suggestion/index.type.ts +101 -0
  134. package/src/suggestion/index.vue +338 -0
  135. package/src/suggestion/utils/dom.ts +66 -0
  136. package/src/suggestion/vars.less +141 -0
@@ -0,0 +1,45 @@
1
+ import { PropType } from 'vue';
2
+ import { Category } from '../index.type';
3
+ declare function __VLS_template(): {
4
+ attrs: Partial<{}>;
5
+ slots: {
6
+ 'category-label'?(_: {
7
+ category: Category;
8
+ }): any;
9
+ };
10
+ refs: {};
11
+ rootEl: HTMLDivElement;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
15
+ categories: {
16
+ type: PropType<Category[]>;
17
+ required: true;
18
+ };
19
+ activeCategory: {
20
+ type: StringConstructor;
21
+ default: string;
22
+ };
23
+ }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
24
+ "category-select": (...args: any[]) => void;
25
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
26
+ categories: {
27
+ type: PropType<Category[]>;
28
+ required: true;
29
+ };
30
+ activeCategory: {
31
+ type: StringConstructor;
32
+ default: string;
33
+ };
34
+ }>> & Readonly<{
35
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
36
+ }>, {
37
+ activeCategory: string;
38
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
39
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
40
+ export default _default;
41
+ type __VLS_WithTemplateSlots<T, S> = T & {
42
+ new (): {
43
+ $slots: S;
44
+ };
45
+ };
@@ -0,0 +1,32 @@
1
+ import { PropType } from 'vue';
2
+ import { SuggestionItem } from '../index.type';
3
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
4
+ suggestions: {
5
+ type: PropType<SuggestionItem[]>;
6
+ required: true;
7
+ };
8
+ isExpanded: {
9
+ type: BooleanConstructor;
10
+ default: boolean;
11
+ };
12
+ }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
13
+ "show-expand-button": (...args: any[]) => void;
14
+ "suggestion-click": (...args: any[]) => void;
15
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
16
+ suggestions: {
17
+ type: PropType<SuggestionItem[]>;
18
+ required: true;
19
+ };
20
+ isExpanded: {
21
+ type: BooleanConstructor;
22
+ default: boolean;
23
+ };
24
+ }>> & Readonly<{
25
+ "onShow-expand-button"?: ((...args: any[]) => any) | undefined;
26
+ "onSuggestion-click"?: ((...args: any[]) => any) | undefined;
27
+ }>, {
28
+ isExpanded: boolean;
29
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
30
+ capsuleRef: HTMLDivElement;
31
+ }, any>;
32
+ export default _default;
@@ -0,0 +1,84 @@
1
+ import { PropType } from 'vue';
2
+ import { SuggestionItem, Category } from '../index.type';
3
+ declare function __VLS_template(): {
4
+ attrs: Partial<{}>;
5
+ slots: {
6
+ 'title-icon'?(_: {}): any;
7
+ 'loading-indicator'?(_: {}): any;
8
+ item?(_: {
9
+ item: SuggestionItem;
10
+ active: boolean;
11
+ }): any;
12
+ empty?(_: {}): any;
13
+ };
14
+ refs: {};
15
+ rootEl: HTMLDivElement;
16
+ };
17
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
18
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
19
+ items: {
20
+ type: PropType<SuggestionItem[]>;
21
+ required: true;
22
+ };
23
+ categories: {
24
+ type: PropType<Category[]>;
25
+ default: () => never[];
26
+ };
27
+ loading: {
28
+ type: BooleanConstructor;
29
+ default: boolean;
30
+ };
31
+ title: {
32
+ type: StringConstructor;
33
+ default: string;
34
+ };
35
+ maxVisibleItems: {
36
+ type: NumberConstructor;
37
+ default: number;
38
+ };
39
+ }>, {
40
+ handleKeyDown: (e: KeyboardEvent) => void;
41
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
42
+ select: (...args: any[]) => void;
43
+ close: (...args: any[]) => void;
44
+ "category-select": (...args: any[]) => void;
45
+ "item-hover": (...args: any[]) => void;
46
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
47
+ items: {
48
+ type: PropType<SuggestionItem[]>;
49
+ required: true;
50
+ };
51
+ categories: {
52
+ type: PropType<Category[]>;
53
+ default: () => never[];
54
+ };
55
+ loading: {
56
+ type: BooleanConstructor;
57
+ default: boolean;
58
+ };
59
+ title: {
60
+ type: StringConstructor;
61
+ default: string;
62
+ };
63
+ maxVisibleItems: {
64
+ type: NumberConstructor;
65
+ default: number;
66
+ };
67
+ }>> & Readonly<{
68
+ onSelect?: ((...args: any[]) => any) | undefined;
69
+ onClose?: ((...args: any[]) => any) | undefined;
70
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
71
+ "onItem-hover"?: ((...args: any[]) => any) | undefined;
72
+ }>, {
73
+ loading: boolean;
74
+ title: string;
75
+ categories: Category[];
76
+ maxVisibleItems: number;
77
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
78
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
79
+ export default _default;
80
+ type __VLS_WithTemplateSlots<T, S> = T & {
81
+ new (): {
82
+ $slots: S;
83
+ };
84
+ };
@@ -0,0 +1,18 @@
1
+ import { Ref } from 'vue';
2
+ import { SuggestionItem } from '../index.type';
3
+ export interface KeyboardNavigationOptions {
4
+ onSelect?: (item: SuggestionItem) => void;
5
+ onClose?: () => void;
6
+ initialIndex?: number;
7
+ }
8
+ /**
9
+ * 处理指令列表的键盘导航
10
+ * @param items 当前可见的指令项列表
11
+ * @param options 配置选项
12
+ */
13
+ export declare function useKeyboardNavigation(items: Ref<SuggestionItem[]>, options?: KeyboardNavigationOptions): {
14
+ activeIndex: Ref<number, number>;
15
+ handleKeyDown: (e: KeyboardEvent) => void;
16
+ scrollToActive: () => void;
17
+ setActiveIndex: (index: number) => void;
18
+ };
@@ -0,0 +1,10 @@
1
+ import { Ref } from 'vue';
2
+ import { SuggestionItem } from '../index.type';
3
+ /**
4
+ * 过滤和搜索指令项列表
5
+ * @param items 原始指令项列表
6
+ * @param searchTerm 搜索关键词
7
+ */
8
+ export declare function useSuggestionFilter(items: Ref<SuggestionItem[]>, searchTerm: Ref<string>): {
9
+ filteredItems: import('vue').ComputedRef<SuggestionItem[]>;
10
+ };
@@ -0,0 +1,11 @@
1
+ import { SuggestionProps } from '../index.type';
2
+ /**
3
+ * 使用hook处理快捷键触发和命令过滤逻辑
4
+ */
5
+ export declare const useTriggerDetection: (props: SuggestionProps) => {
6
+ isTriggerKey: (char: string) => boolean;
7
+ detectTrigger: (event: Event, text: string) => {
8
+ text: string;
9
+ position: number;
10
+ } | null;
11
+ };
@@ -0,0 +1,7 @@
1
+ import { App } from 'vue';
2
+ import { default as Suggestion } from './index.vue';
3
+ declare const install: <T>(app: App<T>) => void;
4
+ declare const _default: typeof Suggestion & {
5
+ install: typeof install;
6
+ };
7
+ export default _default;
@@ -0,0 +1,94 @@
1
+ import { VNode } from 'vue';
2
+ /**
3
+ * 分类定义
4
+ */
5
+ export interface Category {
6
+ /** 唯一标识 */
7
+ id: string;
8
+ /** 显示名称 */
9
+ label: string;
10
+ /** 可选图标 */
11
+ icon?: VNode;
12
+ /** 该分类下的指令项 */
13
+ items: SuggestionItem[];
14
+ }
15
+ /**
16
+ * 指令项定义
17
+ */
18
+ export interface SuggestionItem {
19
+ /** 唯一标识 */
20
+ id: string;
21
+ /** 显示文本 */
22
+ text: string;
23
+ /** 指令值 */
24
+ value: string;
25
+ /** 图标 */
26
+ icon?: VNode;
27
+ /** 关键词,用于搜索和过滤 */
28
+ keywords?: string[];
29
+ /** 描述文本 */
30
+ description?: string;
31
+ /** 指令模板,用于在输入框中显示可编辑的模板 */
32
+ template?: string;
33
+ }
34
+ /**
35
+ * 触发位置信息
36
+ */
37
+ export interface TriggerContext {
38
+ /** 触发的文本 */
39
+ text: string;
40
+ /** 触发的位置 */
41
+ position: number;
42
+ }
43
+ /**
44
+ * 组件属性
45
+ */
46
+ export interface SuggestionProps {
47
+ /** 触发快捷键列表 */
48
+ triggerKeys?: string[];
49
+ /** 指令项列表 */
50
+ items: SuggestionItem[];
51
+ /** 分类列表 */
52
+ categories?: Category[];
53
+ /** 是否显示面板 (支持v-model) */
54
+ open?: boolean;
55
+ /** 自定义类名 */
56
+ className?: string;
57
+ /** 主题,light或dark */
58
+ theme?: 'light' | 'dark';
59
+ /** 是否显示加载状态 */
60
+ loading?: boolean;
61
+ /** 是否点击外部关闭面板 */
62
+ closeOnOutsideClick?: boolean;
63
+ /** 面板标题 */
64
+ title?: string;
65
+ /** 最大显示条目数 */
66
+ maxVisibleItems?: number;
67
+ /** 默认是否展开完整指令列表 */
68
+ defaultExpanded?: boolean;
69
+ }
70
+ /** 触发信息类型 */
71
+ export type TriggerInfo = TriggerContext | false;
72
+ /** 触发处理函数类型 */
73
+ export type TriggerHandler = (info: TriggerInfo) => void;
74
+ /**
75
+ * 组件事件
76
+ */
77
+ export interface SuggestionEmits {
78
+ /** 双向绑定打开状态 (v-model) */
79
+ (e: 'update:open', value: boolean): void;
80
+ /** 选中指令项 */
81
+ (e: 'select', value: string, context?: TriggerContext): void;
82
+ /** 关闭面板 */
83
+ (e: 'close'): void;
84
+ /** 触发回调 */
85
+ (e: 'trigger', handler: TriggerHandler): void;
86
+ /** 选择分类 */
87
+ (e: 'category-select', category: Category): void;
88
+ /** 点击胶囊指令 */
89
+ (e: 'suggestion-select', item: SuggestionItem): void;
90
+ /** 展开/收起状态变化 */
91
+ (e: 'update:expanded', expanded: boolean): void;
92
+ /** 填充模板到输入框 */
93
+ (e: 'fill-template', template: string): void;
94
+ }
@@ -0,0 +1,343 @@
1
+ import { SuggestionItem, SuggestionProps, TriggerHandler, TriggerContext, Category } from './index.type';
2
+ declare function __VLS_template(): {
3
+ attrs: Partial<{}>;
4
+ slots: {
5
+ 'capsule-icon'?(_: {
6
+ suggestion: any;
7
+ }): any;
8
+ trigger?(_: {
9
+ onTrigger: TriggerHandler;
10
+ onKeyDown: (e: KeyboardEvent) => void;
11
+ onInput: (event: Event, text: string) => boolean;
12
+ }): any;
13
+ 'title-icon'?(_: {}): any;
14
+ 'category-label'?(_: {
15
+ category: any;
16
+ }): any;
17
+ item?(_: {
18
+ item: SuggestionItem;
19
+ active: boolean;
20
+ }): any;
21
+ 'loading-indicator'?(_: {}): any;
22
+ empty?(_: {}): any;
23
+ };
24
+ refs: {
25
+ rootRef: HTMLDivElement;
26
+ panelRef: ({
27
+ $: import('vue').ComponentInternalInstance;
28
+ $data: {};
29
+ $props: Partial<{
30
+ loading: boolean;
31
+ title: string;
32
+ categories: Category[];
33
+ maxVisibleItems: number;
34
+ }> & Omit<{
35
+ readonly loading: boolean;
36
+ readonly title: string;
37
+ readonly items: SuggestionItem[];
38
+ readonly categories: Category[];
39
+ readonly maxVisibleItems: number;
40
+ readonly onSelect?: ((...args: any[]) => any) | undefined;
41
+ readonly onClose?: ((...args: any[]) => any) | undefined;
42
+ readonly "onCategory-select"?: ((...args: any[]) => any) | undefined;
43
+ readonly "onItem-hover"?: ((...args: any[]) => any) | undefined;
44
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "loading" | "title" | "categories" | "maxVisibleItems">;
45
+ $attrs: {
46
+ [x: string]: unknown;
47
+ };
48
+ $refs: {
49
+ [x: string]: unknown;
50
+ };
51
+ $slots: Readonly<{
52
+ [name: string]: import('vue').Slot<any> | undefined;
53
+ }>;
54
+ $root: import('vue').ComponentPublicInstance | null;
55
+ $parent: import('vue').ComponentPublicInstance | null;
56
+ $host: Element | null;
57
+ $emit: ((event: "select", ...args: any[]) => void) & ((event: "close", ...args: any[]) => void) & ((event: "category-select", ...args: any[]) => void) & ((event: "item-hover", ...args: any[]) => void);
58
+ $el: HTMLDivElement;
59
+ $options: import('vue').ComponentOptionsBase<Readonly<import('vue').ExtractPropTypes<{
60
+ items: {
61
+ type: import('vue').PropType<SuggestionItem[]>;
62
+ required: true;
63
+ };
64
+ categories: {
65
+ type: import('vue').PropType<Category[]>;
66
+ default: () => never[];
67
+ };
68
+ loading: {
69
+ type: BooleanConstructor;
70
+ default: boolean;
71
+ };
72
+ title: {
73
+ type: StringConstructor;
74
+ default: string;
75
+ };
76
+ maxVisibleItems: {
77
+ type: NumberConstructor;
78
+ default: number;
79
+ };
80
+ }>> & Readonly<{
81
+ onSelect?: ((...args: any[]) => any) | undefined;
82
+ onClose?: ((...args: any[]) => any) | undefined;
83
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
84
+ "onItem-hover"?: ((...args: any[]) => any) | undefined;
85
+ }>, {
86
+ handleKeyDown: (e: KeyboardEvent) => void;
87
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
88
+ select: (...args: any[]) => void;
89
+ close: (...args: any[]) => void;
90
+ "category-select": (...args: any[]) => void;
91
+ "item-hover": (...args: any[]) => void;
92
+ }, string, {
93
+ loading: boolean;
94
+ title: string;
95
+ categories: Category[];
96
+ maxVisibleItems: number;
97
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
98
+ beforeCreate?: (() => void) | (() => void)[];
99
+ created?: (() => void) | (() => void)[];
100
+ beforeMount?: (() => void) | (() => void)[];
101
+ mounted?: (() => void) | (() => void)[];
102
+ beforeUpdate?: (() => void) | (() => void)[];
103
+ updated?: (() => void) | (() => void)[];
104
+ activated?: (() => void) | (() => void)[];
105
+ deactivated?: (() => void) | (() => void)[];
106
+ beforeDestroy?: (() => void) | (() => void)[];
107
+ beforeUnmount?: (() => void) | (() => void)[];
108
+ destroyed?: (() => void) | (() => void)[];
109
+ unmounted?: (() => void) | (() => void)[];
110
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
111
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
112
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
113
+ };
114
+ $forceUpdate: () => void;
115
+ $nextTick: typeof import('vue').nextTick;
116
+ $watch<T extends string | ((...args: any) => 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;
117
+ } & Readonly<{
118
+ loading: boolean;
119
+ title: string;
120
+ categories: Category[];
121
+ maxVisibleItems: number;
122
+ }> & Omit<Readonly<import('vue').ExtractPropTypes<{
123
+ items: {
124
+ type: import('vue').PropType<SuggestionItem[]>;
125
+ required: true;
126
+ };
127
+ categories: {
128
+ type: import('vue').PropType<Category[]>;
129
+ default: () => never[];
130
+ };
131
+ loading: {
132
+ type: BooleanConstructor;
133
+ default: boolean;
134
+ };
135
+ title: {
136
+ type: StringConstructor;
137
+ default: string;
138
+ };
139
+ maxVisibleItems: {
140
+ type: NumberConstructor;
141
+ default: number;
142
+ };
143
+ }>> & Readonly<{
144
+ onSelect?: ((...args: any[]) => any) | undefined;
145
+ onClose?: ((...args: any[]) => any) | undefined;
146
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
147
+ "onItem-hover"?: ((...args: any[]) => any) | undefined;
148
+ }>, "handleKeyDown" | ("loading" | "title" | "categories" | "maxVisibleItems")> & import('vue').ShallowUnwrapRef<{
149
+ handleKeyDown: (e: KeyboardEvent) => void;
150
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
151
+ $slots: {
152
+ 'title-icon'?(_: {}): any;
153
+ 'loading-indicator'?(_: {}): any;
154
+ item?(_: {
155
+ item: SuggestionItem;
156
+ active: boolean;
157
+ }): any;
158
+ empty?(_: {}): any;
159
+ };
160
+ }) | null;
161
+ };
162
+ rootEl: HTMLDivElement;
163
+ };
164
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
165
+ declare const __VLS_component: import('vue').DefineComponent<SuggestionProps, {
166
+ trigger: TriggerHandler;
167
+ keyDown: (e: KeyboardEvent) => void;
168
+ input: (event: Event, text: string) => boolean;
169
+ toggleExpand: () => void;
170
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
171
+ select: (value: string, context?: TriggerContext | undefined) => any;
172
+ close: () => any;
173
+ "suggestion-select": (item: SuggestionItem) => any;
174
+ "update:open": (value: boolean) => any;
175
+ trigger: (handler: TriggerHandler) => any;
176
+ "category-select": (category: Category) => any;
177
+ "update:expanded": (expanded: boolean) => any;
178
+ "fill-template": (template: string) => any;
179
+ }, string, import('vue').PublicProps, Readonly<SuggestionProps> & Readonly<{
180
+ onSelect?: ((value: string, context?: TriggerContext | undefined) => any) | undefined;
181
+ onClose?: (() => any) | undefined;
182
+ "onSuggestion-select"?: ((item: SuggestionItem) => any) | undefined;
183
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
184
+ onTrigger?: ((handler: TriggerHandler) => any) | undefined;
185
+ "onCategory-select"?: ((category: Category) => any) | undefined;
186
+ "onUpdate:expanded"?: ((expanded: boolean) => any) | undefined;
187
+ "onFill-template"?: ((template: string) => any) | undefined;
188
+ }>, {
189
+ loading: boolean;
190
+ title: string;
191
+ items: SuggestionItem[];
192
+ categories: Category[];
193
+ theme: "light" | "dark";
194
+ maxVisibleItems: number;
195
+ triggerKeys: string[];
196
+ open: boolean;
197
+ closeOnOutsideClick: boolean;
198
+ defaultExpanded: boolean;
199
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
200
+ rootRef: HTMLDivElement;
201
+ panelRef: ({
202
+ $: import('vue').ComponentInternalInstance;
203
+ $data: {};
204
+ $props: Partial<{
205
+ loading: boolean;
206
+ title: string;
207
+ categories: Category[];
208
+ maxVisibleItems: number;
209
+ }> & Omit<{
210
+ readonly loading: boolean;
211
+ readonly title: string;
212
+ readonly items: SuggestionItem[];
213
+ readonly categories: Category[];
214
+ readonly maxVisibleItems: number;
215
+ readonly onSelect?: ((...args: any[]) => any) | undefined;
216
+ readonly onClose?: ((...args: any[]) => any) | undefined;
217
+ readonly "onCategory-select"?: ((...args: any[]) => any) | undefined;
218
+ readonly "onItem-hover"?: ((...args: any[]) => any) | undefined;
219
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "loading" | "title" | "categories" | "maxVisibleItems">;
220
+ $attrs: {
221
+ [x: string]: unknown;
222
+ };
223
+ $refs: {
224
+ [x: string]: unknown;
225
+ };
226
+ $slots: Readonly<{
227
+ [name: string]: import('vue').Slot<any> | undefined;
228
+ }>;
229
+ $root: import('vue').ComponentPublicInstance | null;
230
+ $parent: import('vue').ComponentPublicInstance | null;
231
+ $host: Element | null;
232
+ $emit: ((event: "select", ...args: any[]) => void) & ((event: "close", ...args: any[]) => void) & ((event: "category-select", ...args: any[]) => void) & ((event: "item-hover", ...args: any[]) => void);
233
+ $el: HTMLDivElement;
234
+ $options: import('vue').ComponentOptionsBase<Readonly<import('vue').ExtractPropTypes<{
235
+ items: {
236
+ type: import('vue').PropType<SuggestionItem[]>;
237
+ required: true;
238
+ };
239
+ categories: {
240
+ type: import('vue').PropType<Category[]>;
241
+ default: () => never[];
242
+ };
243
+ loading: {
244
+ type: BooleanConstructor;
245
+ default: boolean;
246
+ };
247
+ title: {
248
+ type: StringConstructor;
249
+ default: string;
250
+ };
251
+ maxVisibleItems: {
252
+ type: NumberConstructor;
253
+ default: number;
254
+ };
255
+ }>> & Readonly<{
256
+ onSelect?: ((...args: any[]) => any) | undefined;
257
+ onClose?: ((...args: any[]) => any) | undefined;
258
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
259
+ "onItem-hover"?: ((...args: any[]) => any) | undefined;
260
+ }>, {
261
+ handleKeyDown: (e: KeyboardEvent) => void;
262
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
263
+ select: (...args: any[]) => void;
264
+ close: (...args: any[]) => void;
265
+ "category-select": (...args: any[]) => void;
266
+ "item-hover": (...args: any[]) => void;
267
+ }, string, {
268
+ loading: boolean;
269
+ title: string;
270
+ categories: Category[];
271
+ maxVisibleItems: number;
272
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
273
+ beforeCreate?: (() => void) | (() => void)[];
274
+ created?: (() => void) | (() => void)[];
275
+ beforeMount?: (() => void) | (() => void)[];
276
+ mounted?: (() => void) | (() => void)[];
277
+ beforeUpdate?: (() => void) | (() => void)[];
278
+ updated?: (() => void) | (() => void)[];
279
+ activated?: (() => void) | (() => void)[];
280
+ deactivated?: (() => void) | (() => void)[];
281
+ beforeDestroy?: (() => void) | (() => void)[];
282
+ beforeUnmount?: (() => void) | (() => void)[];
283
+ destroyed?: (() => void) | (() => void)[];
284
+ unmounted?: (() => void) | (() => void)[];
285
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
286
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
287
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
288
+ };
289
+ $forceUpdate: () => void;
290
+ $nextTick: typeof import('vue').nextTick;
291
+ $watch<T extends string | ((...args: any) => 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;
292
+ } & Readonly<{
293
+ loading: boolean;
294
+ title: string;
295
+ categories: Category[];
296
+ maxVisibleItems: number;
297
+ }> & Omit<Readonly<import('vue').ExtractPropTypes<{
298
+ items: {
299
+ type: import('vue').PropType<SuggestionItem[]>;
300
+ required: true;
301
+ };
302
+ categories: {
303
+ type: import('vue').PropType<Category[]>;
304
+ default: () => never[];
305
+ };
306
+ loading: {
307
+ type: BooleanConstructor;
308
+ default: boolean;
309
+ };
310
+ title: {
311
+ type: StringConstructor;
312
+ default: string;
313
+ };
314
+ maxVisibleItems: {
315
+ type: NumberConstructor;
316
+ default: number;
317
+ };
318
+ }>> & Readonly<{
319
+ onSelect?: ((...args: any[]) => any) | undefined;
320
+ onClose?: ((...args: any[]) => any) | undefined;
321
+ "onCategory-select"?: ((...args: any[]) => any) | undefined;
322
+ "onItem-hover"?: ((...args: any[]) => any) | undefined;
323
+ }>, "handleKeyDown" | ("loading" | "title" | "categories" | "maxVisibleItems")> & import('vue').ShallowUnwrapRef<{
324
+ handleKeyDown: (e: KeyboardEvent) => void;
325
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
326
+ $slots: {
327
+ 'title-icon'?(_: {}): any;
328
+ 'loading-indicator'?(_: {}): any;
329
+ item?(_: {
330
+ item: SuggestionItem;
331
+ active: boolean;
332
+ }): any;
333
+ empty?(_: {}): any;
334
+ };
335
+ }) | null;
336
+ }, HTMLDivElement>;
337
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
338
+ export default _default;
339
+ type __VLS_WithTemplateSlots<T, S> = T & {
340
+ new (): {
341
+ $slots: S;
342
+ };
343
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 测量元素文本宽度
3
+ * @param text 要测量的文本
4
+ * @param className 应用的样式类名
5
+ * @returns 测量后的宽度
6
+ */
7
+ export declare function measureTextWidth(text: string, className?: string): number;
8
+ /**
9
+ * 确保元素在容器中可见
10
+ * @param container 容器元素
11
+ * @param element 需要显示的元素
12
+ */
13
+ export declare function ensureElementVisible(container: HTMLElement, element: HTMLElement): void;
14
+ /**
15
+ * 带缓存的文本宽度测量
16
+ * @param text 要测量的文本
17
+ * @param className 样式类名
18
+ * @returns 测量后的宽度
19
+ */
20
+ export declare function getCachedTextWidth(text: string, className?: string): number;