@kine-design/core 0.0.1-beta.11 → 0.0.1-beta.12

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 (60) hide show
  1. package/components/base/tooltip/api.ts +3 -2
  2. package/components/base/tooltip/index.ts +3 -2
  3. package/components/base/tooltip/props.d.ts +12 -6
  4. package/components/base/tooltip/useTooltip.ts +175 -56
  5. package/compositions/commandPalette/index.ts +11 -0
  6. package/compositions/commandPalette/types.ts +29 -0
  7. package/compositions/commandPalette/useCommandPalette.ts +135 -0
  8. package/compositions/contextMenu/index.ts +10 -0
  9. package/compositions/contextMenu/types.ts +21 -0
  10. package/compositions/contextMenu/useContextMenu.ts +101 -0
  11. package/compositions/editor/index.ts +18 -0
  12. package/compositions/editor/types.ts +147 -0
  13. package/compositions/editor/useEditor.ts +224 -0
  14. package/compositions/index.ts +15 -0
  15. package/compositions/overlay/index.ts +14 -0
  16. package/compositions/overlay/useOverlayStack.ts +146 -0
  17. package/compositions/peekView/index.ts +10 -0
  18. package/compositions/peekView/usePeekView.ts +99 -0
  19. package/compositions/theme/index.ts +17 -0
  20. package/compositions/theme/presets/compact.ts +117 -0
  21. package/compositions/theme/presets/dark.ts +113 -0
  22. package/compositions/theme/presets/index.ts +11 -0
  23. package/compositions/theme/presets/light.ts +113 -0
  24. package/compositions/theme/types.ts +46 -0
  25. package/compositions/theme/useTheme.ts +269 -0
  26. package/compositions/toast/index.ts +10 -0
  27. package/compositions/toast/useToast.ts +176 -0
  28. package/compositions/tooltip/index.ts +9 -0
  29. package/compositions/tooltip/useTooltip.ts +10 -0
  30. package/dist/components/base/tooltip/index.d.ts +1 -0
  31. package/dist/components/base/tooltip/useTooltip.d.ts +20 -17
  32. package/dist/compositions/commandPalette/index.d.ts +11 -0
  33. package/dist/compositions/commandPalette/types.d.ts +20 -0
  34. package/dist/compositions/commandPalette/useCommandPalette.d.ts +32 -0
  35. package/dist/compositions/contextMenu/index.d.ts +10 -0
  36. package/dist/compositions/contextMenu/types.d.ts +12 -0
  37. package/dist/compositions/contextMenu/useContextMenu.d.ts +52 -0
  38. package/dist/compositions/editor/index.d.ts +10 -0
  39. package/dist/compositions/editor/types.d.ts +132 -0
  40. package/dist/compositions/editor/useEditor.d.ts +13 -0
  41. package/dist/compositions/index.d.ts +15 -0
  42. package/dist/compositions/overlay/index.d.ts +10 -0
  43. package/dist/compositions/overlay/useOverlayStack.d.ts +188 -0
  44. package/dist/compositions/peekView/index.d.ts +10 -0
  45. package/dist/compositions/peekView/usePeekView.d.ts +16 -0
  46. package/dist/compositions/theme/index.d.ts +11 -0
  47. package/dist/compositions/theme/presets/compact.d.ts +6 -0
  48. package/dist/compositions/theme/presets/dark.d.ts +2 -0
  49. package/dist/compositions/theme/presets/index.d.ts +11 -0
  50. package/dist/compositions/theme/presets/light.d.ts +2 -0
  51. package/dist/compositions/theme/types.d.ts +41 -0
  52. package/dist/compositions/theme/useTheme.d.ts +167 -0
  53. package/dist/compositions/toast/index.d.ts +10 -0
  54. package/dist/compositions/toast/useToast.d.ts +71 -0
  55. package/dist/compositions/tooltip/index.d.ts +9 -0
  56. package/dist/compositions/tooltip/useTooltip.d.ts +10 -0
  57. package/dist/core.js +811 -48
  58. package/dist/index.d.ts +1 -0
  59. package/index.ts +2 -0
  60. package/package.json +13 -2
@@ -0,0 +1,176 @@
1
+ /**
2
+ * @description toast 队列 composable — Promise-based 通知系统
3
+ * @author 阿怪
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ import { ref } from 'vue';
10
+
11
+ /**
12
+ * Toast 类型
13
+ */
14
+ export type ToastType = 'success' | 'error' | 'warning' | 'info' | 'loading';
15
+
16
+ /**
17
+ * Toast 队列中每一条 toast 的内部结构
18
+ */
19
+ export interface ToastItem {
20
+ id: number;
21
+ type: ToastType;
22
+ title: string;
23
+ message?: string;
24
+ duration: number;
25
+ createdAt: number;
26
+ }
27
+
28
+ /**
29
+ * 创建 toast 时的配置参数
30
+ */
31
+ export interface ToastShowOptions {
32
+ type?: ToastType;
33
+ title: string;
34
+ message?: string;
35
+ duration?: number;
36
+ }
37
+
38
+ /**
39
+ * promise() 方法的三阶段配置
40
+ */
41
+ export interface ToastPromiseOptions<T> {
42
+ loading: string | { title: string; message?: string };
43
+ success: string | { title: string; message?: string } | ((data: T) => string | { title: string; message?: string });
44
+ error: string | { title: string; message?: string } | ((err: unknown) => string | { title: string; message?: string });
45
+ }
46
+
47
+ /** 各类型默认自动关闭时间(毫秒) */
48
+ const DEFAULT_DURATIONS: Record<ToastType, number> = {
49
+ success: 3000,
50
+ error: 5000,
51
+ warning: 4000,
52
+ info: 3000,
53
+ loading: 0, // loading never auto-dismiss
54
+ };
55
+
56
+ /** 最大可见 toast 数量 */
57
+ const MAX_VISIBLE = 3;
58
+
59
+ let nextId = 0;
60
+
61
+ /**
62
+ * Toast 队列 composable
63
+ * 管理 toast 的增删、自动关闭定时器与 Promise 模式
64
+ */
65
+ export function useToast() {
66
+ const toasts = ref<ToastItem[]>([]);
67
+ const timers = new Map<number, ReturnType<typeof setTimeout>>();
68
+
69
+ /**
70
+ * 展示一条 toast,返回 id
71
+ */
72
+ const show = (options: ToastShowOptions): number => {
73
+ const id = nextId++;
74
+ const type = options.type ?? 'info';
75
+ const duration = options.duration ?? DEFAULT_DURATIONS[type];
76
+
77
+ const item: ToastItem = {
78
+ id,
79
+ type,
80
+ title: options.title,
81
+ message: options.message,
82
+ duration,
83
+ createdAt: Date.now(),
84
+ };
85
+
86
+ toasts.value.push(item);
87
+
88
+ // enforce max visible — remove oldest (non-loading) if exceeding limit
89
+ while (toasts.value.length > MAX_VISIBLE) {
90
+ const oldest = toasts.value.find(t => t.type !== 'loading');
91
+ if (oldest) {
92
+ dismiss(oldest.id);
93
+ } else {
94
+ // all are loading, remove the very first
95
+ dismiss(toasts.value[0].id);
96
+ }
97
+ }
98
+
99
+ if (duration > 0) {
100
+ const timer = setTimeout(() => dismiss(id), duration);
101
+ timers.set(id, timer);
102
+ }
103
+
104
+ return id;
105
+ };
106
+
107
+ /**
108
+ * 按 id 移除一条 toast
109
+ */
110
+ const dismiss = (id: number): void => {
111
+ const idx = toasts.value.findIndex(t => t.id === id);
112
+ if (idx !== -1) {
113
+ toasts.value.splice(idx, 1);
114
+ }
115
+ const timer = timers.get(id);
116
+ if (timer) {
117
+ clearTimeout(timer);
118
+ timers.delete(id);
119
+ }
120
+ };
121
+
122
+ /**
123
+ * 将 stage 配置标准化为 { title, message }
124
+ */
125
+ function normalizeStage(stage: string | { title: string; message?: string }): { title: string; message?: string } {
126
+ if (typeof stage === 'string') {
127
+ return { title: stage };
128
+ }
129
+ return stage;
130
+ }
131
+
132
+ /**
133
+ * Promise toast pattern:
134
+ * - 立即展示 loading toast
135
+ * - resolve → 替换为 success toast
136
+ * - reject → 替换为 error toast
137
+ */
138
+ const promise = <T>(
139
+ p: Promise<T>,
140
+ options: ToastPromiseOptions<T>,
141
+ ): Promise<T> => {
142
+ const loadingStage = normalizeStage(options.loading);
143
+ const loadingId = show({
144
+ type: 'loading',
145
+ title: loadingStage.title,
146
+ message: loadingStage.message,
147
+ });
148
+
149
+ return p.then(
150
+ (data) => {
151
+ dismiss(loadingId);
152
+ const raw = typeof options.success === 'function' ? options.success(data) : options.success;
153
+ const successStage = normalizeStage(raw);
154
+ show({
155
+ type: 'success',
156
+ title: successStage.title,
157
+ message: successStage.message,
158
+ });
159
+ return data;
160
+ },
161
+ (err: unknown) => {
162
+ dismiss(loadingId);
163
+ const raw = typeof options.error === 'function' ? options.error(err) : options.error;
164
+ const errorStage = normalizeStage(raw);
165
+ show({
166
+ type: 'error',
167
+ title: errorStage.title,
168
+ message: errorStage.message,
169
+ });
170
+ throw err;
171
+ },
172
+ );
173
+ };
174
+
175
+ return { toasts, show, dismiss, promise };
176
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description tooltip compositions barrel export
3
+ * @author 阿怪
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export { useTooltip, type TooltipPlacement, type TooltipPositionData } from './useTooltip';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description tooltip composable re-export from component layer
3
+ * @author 阿怪
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export { useTooltip } from '../../components/base/tooltip/useTooltip';
10
+ export type { TooltipPlacement, TooltipPositionData } from '../../components/base/tooltip/useTooltip';
@@ -4,3 +4,4 @@ export declare const TooltipCore: {
4
4
  useTooltip: typeof useTooltip;
5
5
  };
6
6
  export type { TooltipProps } from './props';
7
+ export type { TooltipPlacement, TooltipPositionData } from './useTooltip';
@@ -1,25 +1,28 @@
1
+ import { Placement } from '../../../compositions/popper/usePopper';
1
2
  import { TooltipProps } from './props';
2
- export type TooltipStyle = {
3
- position: string;
4
- left: string;
5
- top: string;
6
- zIndex: string;
3
+ export type TooltipPlacement = Placement;
4
+ export type TooltipPositionData = {
5
+ style: Record<string, string>;
6
+ arrowStyle: Record<string, string>;
7
+ placement: Placement;
7
8
  };
8
9
  export declare function useTooltip(props: Required<TooltipProps>): {
9
10
  visible: import('vue').Ref<boolean, boolean>;
10
- tooltipStyle: import('vue').Ref<Record<string, never> | {
11
- position: string;
12
- left: string;
13
- top: string;
14
- zIndex: string;
15
- }, TooltipStyle | Record<string, never> | {
16
- position: string;
17
- left: string;
18
- top: string;
19
- zIndex: string;
20
- }>;
11
+ positionData: import('vue').Ref<{
12
+ style: Record<string, string>;
13
+ arrowStyle: Record<string, string>;
14
+ placement: Placement;
15
+ } | null, TooltipPositionData | {
16
+ style: Record<string, string>;
17
+ arrowStyle: Record<string, string>;
18
+ placement: Placement;
19
+ } | null>;
21
20
  triggerRef: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
22
21
  tooltipRef: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
23
- show: () => Promise<void>;
22
+ arrowRef: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
23
+ tooltipId: string;
24
+ show: () => void;
24
25
  hide: () => void;
26
+ hideImmediate: () => void;
27
+ initPopper: () => void;
25
28
  };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @description commandPalette composition barrel export
3
+ * @author kine-design
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export { useCommandPalette } from './useCommandPalette';
10
+ export type { UseCommandPaletteReturn } from './useCommandPalette';
11
+ export type { Command } from './types';
@@ -0,0 +1,20 @@
1
+ import { VNode } from 'vue';
2
+ /**
3
+ * A single command registered in the palette.
4
+ */
5
+ export interface Command {
6
+ /** Unique identifier */
7
+ id: string;
8
+ /** Display label (also used for search) */
9
+ label: string;
10
+ /** Optional icon render function */
11
+ icon?: () => VNode;
12
+ /** Additional search terms beyond the label */
13
+ keywords?: string[];
14
+ /** Grouping category (e.g. "Navigation", "Actions") */
15
+ group?: string;
16
+ /** Shortcut hint text displayed on the right side of the item */
17
+ shortcut?: string;
18
+ /** Callback executed when the command is selected */
19
+ action: () => void;
20
+ }
@@ -0,0 +1,32 @@
1
+ import { Ref, ComputedRef } from 'vue';
2
+ import { Command } from './types';
3
+ export interface UseCommandPaletteReturn {
4
+ /** Whether the palette is open */
5
+ isOpen: Ref<boolean>;
6
+ /** Current search query */
7
+ query: Ref<string>;
8
+ /** Index of the currently highlighted item */
9
+ activeIndex: Ref<number>;
10
+ /** All registered commands */
11
+ commands: Ref<Command[]>;
12
+ /** Filtered commands based on query */
13
+ filtered: ComputedRef<Command[]>;
14
+ /** Open the palette */
15
+ open: () => void;
16
+ /** Close the palette */
17
+ close: () => void;
18
+ /** Toggle open/close */
19
+ toggle: () => void;
20
+ /** Register a command */
21
+ registerCommand: (cmd: Command) => void;
22
+ /** Unregister a command by id */
23
+ unregisterCommand: (id: string) => void;
24
+ /** Execute the command at a given index in the filtered list, then close */
25
+ execute: (index: number) => void;
26
+ }
27
+ /**
28
+ * CommandPalette composable
29
+ *
30
+ * Provides reactive state for opening, searching, and executing commands.
31
+ */
32
+ export declare function useCommandPalette(): UseCommandPaletteReturn;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description context menu composables barrel export
3
+ * @author kine-design
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export { useContextMenu } from './useContextMenu';
10
+ export type { MenuItem } from './types';
@@ -0,0 +1,12 @@
1
+ import { VNode } from 'vue';
2
+ export interface MenuItem {
3
+ key: string;
4
+ label: string;
5
+ icon?: () => VNode;
6
+ action: () => void;
7
+ visible?: boolean;
8
+ disabled?: boolean;
9
+ danger?: boolean;
10
+ children?: MenuItem[];
11
+ separator?: boolean;
12
+ }
@@ -0,0 +1,52 @@
1
+ import { MenuItem } from './types';
2
+ export declare function useContextMenu(): {
3
+ isOpen: import('vue').Ref<boolean, boolean>;
4
+ position: import('vue').Ref<{
5
+ x: number;
6
+ y: number;
7
+ }, {
8
+ x: number;
9
+ y: number;
10
+ } | {
11
+ x: number;
12
+ y: number;
13
+ }>;
14
+ items: import('vue').Ref<{
15
+ key: string;
16
+ label: string;
17
+ icon?: (() => import('vue').VNode) | undefined;
18
+ action: () => void;
19
+ visible?: boolean | undefined;
20
+ disabled?: boolean | undefined;
21
+ danger?: boolean | undefined;
22
+ children?: /*elided*/ any[] | undefined;
23
+ separator?: boolean | undefined;
24
+ }[], MenuItem[] | {
25
+ key: string;
26
+ label: string;
27
+ icon?: (() => import('vue').VNode) | undefined;
28
+ action: () => void;
29
+ visible?: boolean | undefined;
30
+ disabled?: boolean | undefined;
31
+ danger?: boolean | undefined;
32
+ children?: /*elided*/ any[] | undefined;
33
+ separator?: boolean | undefined;
34
+ }[]>;
35
+ activeIndex: import('vue').Ref<number, number>;
36
+ visibleItems: import('vue').ComputedRef<{
37
+ key: string;
38
+ label: string;
39
+ icon?: (() => import('vue').VNode) | undefined;
40
+ action: () => void;
41
+ visible?: boolean | undefined;
42
+ disabled?: boolean | undefined;
43
+ danger?: boolean | undefined;
44
+ children?: /*elided*/ any[] | undefined;
45
+ separator?: boolean | undefined;
46
+ }[]>;
47
+ open: (event: MouseEvent, menuItems: MenuItem[]) => void;
48
+ close: () => void;
49
+ moveUp: () => void;
50
+ moveDown: () => void;
51
+ executeCurrent: () => void;
52
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description Editor composition barrel export
3
+ * @author kine-design
4
+ * @date 2026/5/22
5
+ * @version v1.0.0
6
+ *
7
+ * Headless editor composable — provides logic, no rendering.
8
+ */
9
+ export { useEditor } from './useEditor';
10
+ export type { UseEditorOptions, EditorConfig, EditorToolbarConfig, EditorExtensionConfig, EditorToolbarActions, EditorActiveState, UseEditorReturn, } from './types';
@@ -0,0 +1,132 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import { ShallowRef, Ref, ComputedRef } from 'vue';
3
+ /**
4
+ * Toolbar feature toggle. Each key controls visibility of a toolbar group.
5
+ * All default to true when omitted.
6
+ */
7
+ export interface EditorToolbarConfig {
8
+ bold?: boolean;
9
+ italic?: boolean;
10
+ strike?: boolean;
11
+ code?: boolean;
12
+ heading?: boolean;
13
+ bulletList?: boolean;
14
+ orderedList?: boolean;
15
+ blockquote?: boolean;
16
+ codeBlock?: boolean;
17
+ link?: boolean;
18
+ image?: boolean;
19
+ textAlign?: boolean;
20
+ undo?: boolean;
21
+ }
22
+ /**
23
+ * Extension-level configuration that is forwarded to individual tiptap extensions.
24
+ */
25
+ export interface EditorExtensionConfig {
26
+ link?: {
27
+ openOnClick?: boolean;
28
+ HTMLAttributes?: Record<string, string>;
29
+ };
30
+ image?: {
31
+ allowBase64?: boolean;
32
+ HTMLAttributes?: Record<string, string>;
33
+ };
34
+ placeholder?: {
35
+ text?: string;
36
+ };
37
+ }
38
+ /**
39
+ * Top-level editor configuration passed via props.
40
+ */
41
+ export interface EditorConfig {
42
+ toolbar?: EditorToolbarConfig;
43
+ extensions?: EditorExtensionConfig;
44
+ }
45
+ /**
46
+ * Options accepted by the useEditor composable.
47
+ */
48
+ export interface UseEditorOptions {
49
+ /** Initial HTML or plain-text content */
50
+ content?: string;
51
+ /** When true the editor is not editable */
52
+ readonly?: boolean;
53
+ /** Placeholder text shown when the editor is empty */
54
+ placeholder?: string;
55
+ /** Feature configuration */
56
+ config?: EditorConfig;
57
+ /** Callback fired when content changes (HTML string) */
58
+ onUpdate?: (html: string) => void;
59
+ /** Callback fired when the editor is ready */
60
+ onReady?: () => void;
61
+ /** Callback fired on focus */
62
+ onFocus?: () => void;
63
+ /** Callback fired on blur */
64
+ onBlur?: () => void;
65
+ }
66
+ /**
67
+ * Toolbar action functions returned by the composable.
68
+ */
69
+ export interface EditorToolbarActions {
70
+ toggleBold: () => void;
71
+ toggleItalic: () => void;
72
+ toggleStrike: () => void;
73
+ toggleCode: () => void;
74
+ setParagraph: () => void;
75
+ setHeading: (level: 1 | 2 | 3) => void;
76
+ toggleBulletList: () => void;
77
+ toggleOrderedList: () => void;
78
+ toggleBlockquote: () => void;
79
+ toggleCodeBlock: () => void;
80
+ setLink: (href: string) => void;
81
+ unsetLink: () => void;
82
+ setImage: (src: string, alt?: string) => void;
83
+ setTextAlign: (alignment: 'left' | 'center' | 'right') => void;
84
+ undo: () => void;
85
+ redo: () => void;
86
+ focus: () => void;
87
+ blur: () => void;
88
+ clear: () => void;
89
+ }
90
+ /**
91
+ * Active-state flags for toolbar highlighting.
92
+ */
93
+ export interface EditorActiveState {
94
+ bold: boolean;
95
+ italic: boolean;
96
+ strike: boolean;
97
+ code: boolean;
98
+ paragraph: boolean;
99
+ heading1: boolean;
100
+ heading2: boolean;
101
+ heading3: boolean;
102
+ bulletList: boolean;
103
+ orderedList: boolean;
104
+ blockquote: boolean;
105
+ codeBlock: boolean;
106
+ link: boolean;
107
+ }
108
+ /**
109
+ * Return type of the useEditor composable.
110
+ */
111
+ export interface UseEditorReturn {
112
+ /** The raw tiptap Editor instance (may be null before creation) */
113
+ editor: ShallowRef<Editor | undefined>;
114
+ /** Whether the editor has been created and is ready */
115
+ isReady: Ref<boolean>;
116
+ /** Toolbar action methods */
117
+ actions: ComputedRef<EditorToolbarActions | null>;
118
+ /** Active formatting state */
119
+ activeState: ComputedRef<EditorActiveState>;
120
+ /** Update editor content programmatically */
121
+ setContent: (html: string) => void;
122
+ /** Toggle the editable state */
123
+ setEditable: (editable: boolean) => void;
124
+ /** Get current content as HTML */
125
+ getHTML: () => string;
126
+ /** Get current content as plain text */
127
+ getText: () => string;
128
+ /** Whether undo is available */
129
+ canUndo: ComputedRef<boolean>;
130
+ /** Whether redo is available */
131
+ canRedo: ComputedRef<boolean>;
132
+ }
@@ -0,0 +1,13 @@
1
+ import { UseEditorOptions, EditorToolbarActions, EditorActiveState } from './types';
2
+ export declare function useEditor(options?: UseEditorOptions): {
3
+ editor: import('vue').ShallowRef<import('@tiptap/vue-3').Editor | undefined, import('@tiptap/vue-3').Editor | undefined>;
4
+ isReady: import('vue').Ref<boolean, boolean>;
5
+ actions: import('vue').ComputedRef<EditorToolbarActions | null>;
6
+ activeState: import('vue').ComputedRef<EditorActiveState>;
7
+ setContent: (html: string) => void;
8
+ setEditable: (editable: boolean) => void;
9
+ getHTML: () => string;
10
+ getText: () => string;
11
+ canUndo: import('vue').ComputedRef<boolean>;
12
+ canRedo: import('vue').ComputedRef<boolean>;
13
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @description compositions barrel export
3
+ * @author kine-design
4
+ * @date 2026/5/22 00:00
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export * from './overlay';
10
+ export * from './contextMenu';
11
+ export * from './peekView';
12
+ export * from './commandPalette';
13
+ export * from './tooltip';
14
+ export * from './editor';
15
+ export * from './theme';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description overlay composables barrel export
3
+ * @author kine-design
4
+ * @date 2026/5/22 00:00
5
+ * @version v1.0.0
6
+ *
7
+ * 江湖的业务千篇一律,复杂的代码好几百行。
8
+ */
9
+ export { useOverlayStackStore, useOverlayStack, useOverlayItem, } from './useOverlayStack';
10
+ export type { OverlayItem, OverlayType } from './useOverlayStack';