@kine-design/core 0.0.1-beta.11 → 0.0.1-beta.13
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.
- package/components/base/image/__tests__/useImage.test.ts +61 -0
- package/components/base/image/api.ts +2 -2
- package/components/base/image/index.ts +2 -2
- package/components/base/image/props.d.ts +15 -4
- package/components/base/image/useImage.ts +27 -16
- package/components/base/tooltip/api.ts +3 -2
- package/components/base/tooltip/index.ts +3 -2
- package/components/base/tooltip/props.d.ts +12 -6
- package/components/base/tooltip/useTooltip.ts +175 -56
- package/compositions/commandPalette/index.ts +11 -0
- package/compositions/commandPalette/types.ts +29 -0
- package/compositions/commandPalette/useCommandPalette.ts +135 -0
- package/compositions/contextMenu/index.ts +10 -0
- package/compositions/contextMenu/types.ts +21 -0
- package/compositions/contextMenu/useContextMenu.ts +101 -0
- package/compositions/editor/index.ts +18 -0
- package/compositions/editor/types.ts +147 -0
- package/compositions/editor/useEditor.ts +224 -0
- package/compositions/index.ts +15 -0
- package/compositions/overlay/index.ts +14 -0
- package/compositions/overlay/useOverlayStack.ts +146 -0
- package/compositions/peekView/index.ts +10 -0
- package/compositions/peekView/usePeekView.ts +99 -0
- package/compositions/theme/index.ts +17 -0
- package/compositions/theme/presets/compact.ts +117 -0
- package/compositions/theme/presets/dark.ts +113 -0
- package/compositions/theme/presets/index.ts +11 -0
- package/compositions/theme/presets/light.ts +113 -0
- package/compositions/theme/types.ts +46 -0
- package/compositions/theme/useTheme.ts +269 -0
- package/compositions/toast/index.ts +10 -0
- package/compositions/toast/useToast.ts +176 -0
- package/compositions/tooltip/index.ts +9 -0
- package/compositions/tooltip/useTooltip.ts +10 -0
- package/dist/components/base/image/index.d.ts +2 -2
- package/dist/components/base/image/useImage.d.ts +7 -0
- package/dist/components/base/tooltip/index.d.ts +1 -0
- package/dist/components/base/tooltip/useTooltip.d.ts +20 -17
- package/dist/compositions/commandPalette/index.d.ts +11 -0
- package/dist/compositions/commandPalette/types.d.ts +20 -0
- package/dist/compositions/commandPalette/useCommandPalette.d.ts +32 -0
- package/dist/compositions/contextMenu/index.d.ts +10 -0
- package/dist/compositions/contextMenu/types.d.ts +12 -0
- package/dist/compositions/contextMenu/useContextMenu.d.ts +52 -0
- package/dist/compositions/editor/index.d.ts +10 -0
- package/dist/compositions/editor/types.d.ts +132 -0
- package/dist/compositions/editor/useEditor.d.ts +13 -0
- package/dist/compositions/index.d.ts +15 -0
- package/dist/compositions/overlay/index.d.ts +10 -0
- package/dist/compositions/overlay/useOverlayStack.d.ts +188 -0
- package/dist/compositions/peekView/index.d.ts +10 -0
- package/dist/compositions/peekView/usePeekView.d.ts +16 -0
- package/dist/compositions/theme/index.d.ts +11 -0
- package/dist/compositions/theme/presets/compact.d.ts +6 -0
- package/dist/compositions/theme/presets/dark.d.ts +2 -0
- package/dist/compositions/theme/presets/index.d.ts +11 -0
- package/dist/compositions/theme/presets/light.d.ts +2 -0
- package/dist/compositions/theme/types.d.ts +41 -0
- package/dist/compositions/theme/useTheme.d.ts +167 -0
- package/dist/compositions/toast/index.d.ts +10 -0
- package/dist/compositions/toast/useToast.d.ts +71 -0
- package/dist/compositions/tooltip/index.d.ts +9 -0
- package/dist/compositions/tooltip/useTooltip.d.ts +10 -0
- package/dist/core.js +836 -56
- package/dist/index.d.ts +1 -0
- package/index.ts +2 -0
- package/package.json +13 -2
|
@@ -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';
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
export type OverlayType = 'popover' | 'alert-dialog' | 'context-menu' | 'command-palette';
|
|
2
|
+
export interface OverlayItem {
|
|
3
|
+
id: string;
|
|
4
|
+
type: OverlayType;
|
|
5
|
+
close: () => void;
|
|
6
|
+
zIndex: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const useOverlayStackStore: import('pinia').StoreDefinition<"overlayStack", Pick<{
|
|
9
|
+
overlayStack: import('vue').Ref<{
|
|
10
|
+
id: string;
|
|
11
|
+
type: OverlayType;
|
|
12
|
+
close: () => void;
|
|
13
|
+
zIndex: number;
|
|
14
|
+
}[], OverlayItem[] | {
|
|
15
|
+
id: string;
|
|
16
|
+
type: OverlayType;
|
|
17
|
+
close: () => void;
|
|
18
|
+
zIndex: number;
|
|
19
|
+
}[]>;
|
|
20
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
21
|
+
topItem: import('vue').ComputedRef<{
|
|
22
|
+
id: string;
|
|
23
|
+
type: OverlayType;
|
|
24
|
+
close: () => void;
|
|
25
|
+
zIndex: number;
|
|
26
|
+
} | undefined>;
|
|
27
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
28
|
+
pop: () => {
|
|
29
|
+
id: string;
|
|
30
|
+
type: OverlayType;
|
|
31
|
+
close: () => void;
|
|
32
|
+
zIndex: number;
|
|
33
|
+
} | undefined;
|
|
34
|
+
remove: (id: string) => void;
|
|
35
|
+
attachEscListener: () => void;
|
|
36
|
+
detachEscListener: () => void;
|
|
37
|
+
}, "overlayStack">, Pick<{
|
|
38
|
+
overlayStack: import('vue').Ref<{
|
|
39
|
+
id: string;
|
|
40
|
+
type: OverlayType;
|
|
41
|
+
close: () => void;
|
|
42
|
+
zIndex: number;
|
|
43
|
+
}[], OverlayItem[] | {
|
|
44
|
+
id: string;
|
|
45
|
+
type: OverlayType;
|
|
46
|
+
close: () => void;
|
|
47
|
+
zIndex: number;
|
|
48
|
+
}[]>;
|
|
49
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
50
|
+
topItem: import('vue').ComputedRef<{
|
|
51
|
+
id: string;
|
|
52
|
+
type: OverlayType;
|
|
53
|
+
close: () => void;
|
|
54
|
+
zIndex: number;
|
|
55
|
+
} | undefined>;
|
|
56
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
57
|
+
pop: () => {
|
|
58
|
+
id: string;
|
|
59
|
+
type: OverlayType;
|
|
60
|
+
close: () => void;
|
|
61
|
+
zIndex: number;
|
|
62
|
+
} | undefined;
|
|
63
|
+
remove: (id: string) => void;
|
|
64
|
+
attachEscListener: () => void;
|
|
65
|
+
detachEscListener: () => void;
|
|
66
|
+
}, "isEmpty" | "topItem">, Pick<{
|
|
67
|
+
overlayStack: import('vue').Ref<{
|
|
68
|
+
id: string;
|
|
69
|
+
type: OverlayType;
|
|
70
|
+
close: () => void;
|
|
71
|
+
zIndex: number;
|
|
72
|
+
}[], OverlayItem[] | {
|
|
73
|
+
id: string;
|
|
74
|
+
type: OverlayType;
|
|
75
|
+
close: () => void;
|
|
76
|
+
zIndex: number;
|
|
77
|
+
}[]>;
|
|
78
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
79
|
+
topItem: import('vue').ComputedRef<{
|
|
80
|
+
id: string;
|
|
81
|
+
type: OverlayType;
|
|
82
|
+
close: () => void;
|
|
83
|
+
zIndex: number;
|
|
84
|
+
} | undefined>;
|
|
85
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
86
|
+
pop: () => {
|
|
87
|
+
id: string;
|
|
88
|
+
type: OverlayType;
|
|
89
|
+
close: () => void;
|
|
90
|
+
zIndex: number;
|
|
91
|
+
} | undefined;
|
|
92
|
+
remove: (id: string) => void;
|
|
93
|
+
attachEscListener: () => void;
|
|
94
|
+
detachEscListener: () => void;
|
|
95
|
+
}, "pop" | "push" | "remove" | "attachEscListener" | "detachEscListener">>;
|
|
96
|
+
export declare function useOverlayStack(): import('pinia').Store<"overlayStack", Pick<{
|
|
97
|
+
overlayStack: import('vue').Ref<{
|
|
98
|
+
id: string;
|
|
99
|
+
type: OverlayType;
|
|
100
|
+
close: () => void;
|
|
101
|
+
zIndex: number;
|
|
102
|
+
}[], OverlayItem[] | {
|
|
103
|
+
id: string;
|
|
104
|
+
type: OverlayType;
|
|
105
|
+
close: () => void;
|
|
106
|
+
zIndex: number;
|
|
107
|
+
}[]>;
|
|
108
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
109
|
+
topItem: import('vue').ComputedRef<{
|
|
110
|
+
id: string;
|
|
111
|
+
type: OverlayType;
|
|
112
|
+
close: () => void;
|
|
113
|
+
zIndex: number;
|
|
114
|
+
} | undefined>;
|
|
115
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
116
|
+
pop: () => {
|
|
117
|
+
id: string;
|
|
118
|
+
type: OverlayType;
|
|
119
|
+
close: () => void;
|
|
120
|
+
zIndex: number;
|
|
121
|
+
} | undefined;
|
|
122
|
+
remove: (id: string) => void;
|
|
123
|
+
attachEscListener: () => void;
|
|
124
|
+
detachEscListener: () => void;
|
|
125
|
+
}, "overlayStack">, Pick<{
|
|
126
|
+
overlayStack: import('vue').Ref<{
|
|
127
|
+
id: string;
|
|
128
|
+
type: OverlayType;
|
|
129
|
+
close: () => void;
|
|
130
|
+
zIndex: number;
|
|
131
|
+
}[], OverlayItem[] | {
|
|
132
|
+
id: string;
|
|
133
|
+
type: OverlayType;
|
|
134
|
+
close: () => void;
|
|
135
|
+
zIndex: number;
|
|
136
|
+
}[]>;
|
|
137
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
138
|
+
topItem: import('vue').ComputedRef<{
|
|
139
|
+
id: string;
|
|
140
|
+
type: OverlayType;
|
|
141
|
+
close: () => void;
|
|
142
|
+
zIndex: number;
|
|
143
|
+
} | undefined>;
|
|
144
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
145
|
+
pop: () => {
|
|
146
|
+
id: string;
|
|
147
|
+
type: OverlayType;
|
|
148
|
+
close: () => void;
|
|
149
|
+
zIndex: number;
|
|
150
|
+
} | undefined;
|
|
151
|
+
remove: (id: string) => void;
|
|
152
|
+
attachEscListener: () => void;
|
|
153
|
+
detachEscListener: () => void;
|
|
154
|
+
}, "isEmpty" | "topItem">, Pick<{
|
|
155
|
+
overlayStack: import('vue').Ref<{
|
|
156
|
+
id: string;
|
|
157
|
+
type: OverlayType;
|
|
158
|
+
close: () => void;
|
|
159
|
+
zIndex: number;
|
|
160
|
+
}[], OverlayItem[] | {
|
|
161
|
+
id: string;
|
|
162
|
+
type: OverlayType;
|
|
163
|
+
close: () => void;
|
|
164
|
+
zIndex: number;
|
|
165
|
+
}[]>;
|
|
166
|
+
isEmpty: import('vue').ComputedRef<boolean>;
|
|
167
|
+
topItem: import('vue').ComputedRef<{
|
|
168
|
+
id: string;
|
|
169
|
+
type: OverlayType;
|
|
170
|
+
close: () => void;
|
|
171
|
+
zIndex: number;
|
|
172
|
+
} | undefined>;
|
|
173
|
+
push: (item: Omit<OverlayItem, "zIndex">) => OverlayItem;
|
|
174
|
+
pop: () => {
|
|
175
|
+
id: string;
|
|
176
|
+
type: OverlayType;
|
|
177
|
+
close: () => void;
|
|
178
|
+
zIndex: number;
|
|
179
|
+
} | undefined;
|
|
180
|
+
remove: (id: string) => void;
|
|
181
|
+
attachEscListener: () => void;
|
|
182
|
+
detachEscListener: () => void;
|
|
183
|
+
}, "pop" | "push" | "remove" | "attachEscListener" | "detachEscListener">>;
|
|
184
|
+
export declare function useOverlayItem(type: OverlayType): {
|
|
185
|
+
register: (closeFn: () => void) => OverlayItem;
|
|
186
|
+
unregister: () => void;
|
|
187
|
+
currentZIndex: import('vue').ComputedRef<number | undefined>;
|
|
188
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description peekView composables barrel export
|
|
3
|
+
* @author kine-design
|
|
4
|
+
* @date 2026/5/22
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
export { usePeekView } from './usePeekView';
|
|
10
|
+
export type { PeekViewMode, UsePeekViewOptions } from './usePeekView';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type PeekViewMode = 'side' | 'modal' | 'full';
|
|
2
|
+
export interface UsePeekViewOptions {
|
|
3
|
+
/** Default mode when opening without explicit mode */
|
|
4
|
+
defaultMode?: PeekViewMode;
|
|
5
|
+
/** Enable URL query param sync (?peek=<id>) */
|
|
6
|
+
urlSync?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function usePeekView(options?: UsePeekViewOptions): {
|
|
9
|
+
isOpen: import('vue').Ref<boolean, boolean>;
|
|
10
|
+
mode: import('vue').Ref<PeekViewMode, PeekViewMode>;
|
|
11
|
+
peekId: import('vue').Ref<string | undefined, string | undefined>;
|
|
12
|
+
open: (id: string, openMode?: PeekViewMode) => void;
|
|
13
|
+
close: () => void;
|
|
14
|
+
setMode: (newMode: PeekViewMode) => void;
|
|
15
|
+
handleOutsideClick: (event: MouseEvent, panelEl: HTMLElement | null) => void;
|
|
16
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description theme composables barrel export
|
|
3
|
+
* @author kine-design
|
|
4
|
+
* @date 2026/5/22
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
export { useThemeStore } from './useTheme';
|
|
10
|
+
export type { ThemeDefinition, ThemeTokens, ThemeTokenCategory, ThemeOverrides, PersistedThemeState, } from './types';
|
|
11
|
+
export { lightTheme, darkTheme, compactTheme } from './presets';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description built-in theme presets barrel export
|
|
3
|
+
* @author kine-design
|
|
4
|
+
* @date 2026/5/22
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
export { lightTheme } from './light';
|
|
10
|
+
export { darkTheme } from './dark';
|
|
11
|
+
export { compactTheme } from './compact';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description theme system type definitions
|
|
3
|
+
* @author kine-design
|
|
4
|
+
* @date 2026/5/22
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
/** Token category map: flat key-value pairs per category */
|
|
10
|
+
export interface ThemeTokens {
|
|
11
|
+
/** e.g. 'bg-primary': '#f5f5f5', 'neutral-3': '#d4d4d4', 'accent-light': '#e8f5ef' */
|
|
12
|
+
color: Record<string, string>;
|
|
13
|
+
/** e.g. '1': '2px', '2': '4px' */
|
|
14
|
+
spacing: Record<string, string>;
|
|
15
|
+
/** e.g. 'xs': '2px', 'sm': '6px' */
|
|
16
|
+
radius: Record<string, string>;
|
|
17
|
+
/** e.g. 'size-sm': '12px', 'family-system': 'system-ui, ...' */
|
|
18
|
+
font: Record<string, string>;
|
|
19
|
+
/** e.g. 'sm': '0px 1px 2px ...', 'glow-radius': '8px' */
|
|
20
|
+
shadow: Record<string, string>;
|
|
21
|
+
/** e.g. 'duration-fast': '200ms', 'easing-default': 'ease-in-out' */
|
|
22
|
+
motion: Record<string, string>;
|
|
23
|
+
/** e.g. 'hover-intensity': '15%', 'transition-duration': '150ms' */
|
|
24
|
+
interaction: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
/** All supported token category names */
|
|
27
|
+
export type ThemeTokenCategory = keyof ThemeTokens;
|
|
28
|
+
/** A registered theme definition */
|
|
29
|
+
export interface ThemeDefinition {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
tokens: Partial<ThemeTokens>;
|
|
34
|
+
}
|
|
35
|
+
/** User-level per-token overrides (sparse) */
|
|
36
|
+
export type ThemeOverrides = Partial<ThemeTokens>;
|
|
37
|
+
/** Serialized state persisted to localStorage */
|
|
38
|
+
export interface PersistedThemeState {
|
|
39
|
+
currentTheme: string;
|
|
40
|
+
overrides: ThemeOverrides;
|
|
41
|
+
}
|