@ccn-ui-kit/rich-editor 0.1.2
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/dist/index.cjs +1 -0
- package/dist/index.js +195 -0
- package/dist/packages/components/__tests__/loading.spec.d.ts +1 -0
- package/dist/packages/components/badge/index.d.ts +10 -0
- package/dist/packages/components/badge/src/badge.d.ts +25 -0
- package/dist/packages/components/breadcrumb/index.d.ts +12 -0
- package/dist/packages/components/breadcrumb/src/breadcrumb-item.d.ts +13 -0
- package/dist/packages/components/breadcrumb/src/breadcrumb.d.ts +10 -0
- package/dist/packages/components/button/index.d.ts +10 -0
- package/dist/packages/components/button/src/button.d.ts +25 -0
- package/dist/packages/components/date-picker/index.d.ts +10 -0
- package/dist/packages/components/date-picker/src/date-picker.d.ts +20 -0
- package/dist/packages/components/descriptions/index.d.ts +12 -0
- package/dist/packages/components/descriptions/src/descriptions-item.d.ts +13 -0
- package/dist/packages/components/descriptions/src/descriptions.d.ts +17 -0
- package/dist/packages/components/divider/index.d.ts +10 -0
- package/dist/packages/components/divider/src/divider.d.ts +20 -0
- package/dist/packages/components/dropdown/index.d.ts +12 -0
- package/dist/packages/components/dropdown/src/dropdown-item.d.ts +20 -0
- package/dist/packages/components/dropdown/src/dropdown.d.ts +46 -0
- package/dist/packages/components/form/index.d.ts +12 -0
- package/dist/packages/components/form/src/form-item.d.ts +45 -0
- package/dist/packages/components/form/src/form.d.ts +96 -0
- package/dist/packages/components/icon/index.d.ts +11 -0
- package/dist/packages/components/icon/src/icon.d.ts +18 -0
- package/dist/packages/components/icon/src/icons.d.ts +50 -0
- package/dist/packages/components/input/index.d.ts +10 -0
- package/dist/packages/components/input/src/input.d.ts +25 -0
- package/dist/packages/components/link/index.d.ts +10 -0
- package/dist/packages/components/link/src/link.d.ts +25 -0
- package/dist/packages/components/loading/index.d.ts +10 -0
- package/dist/packages/components/loading/src/loading.d.ts +15 -0
- package/dist/packages/components/menu/index.d.ts +14 -0
- package/dist/packages/components/menu/src/menu-item.d.ts +12 -0
- package/dist/packages/components/menu/src/menu.d.ts +40 -0
- package/dist/packages/components/menu/src/sub-menu.d.ts +12 -0
- package/dist/packages/components/message/index.d.ts +12 -0
- package/dist/packages/components/message/src/manager.d.ts +14 -0
- package/dist/packages/components/message/src/message.d.ts +28 -0
- package/dist/packages/components/modal/index.d.ts +10 -0
- package/dist/packages/components/modal/src/modal.d.ts +46 -0
- package/dist/packages/components/notification/index.d.ts +12 -0
- package/dist/packages/components/notification/src/manager.d.ts +14 -0
- package/dist/packages/components/notification/src/notification.d.ts +44 -0
- package/dist/packages/components/pagination/index.d.ts +10 -0
- package/dist/packages/components/pagination/src/pagination.d.ts +30 -0
- package/dist/packages/components/popconfirm/index.d.ts +10 -0
- package/dist/packages/components/popconfirm/src/popconfirm.d.ts +56 -0
- package/dist/packages/components/rich-editor/index.d.ts +10 -0
- package/dist/packages/components/rich-editor/src/rich-editor.d.ts +36 -0
- package/dist/packages/components/rich-editor/src/rich-editor.vue.d.ts +56 -0
- package/dist/packages/components/select/index.d.ts +10 -0
- package/dist/packages/components/select/src/select.d.ts +45 -0
- package/dist/packages/components/space/index.d.ts +10 -0
- package/dist/packages/components/space/src/space.d.ts +33 -0
- package/dist/packages/components/steps/index.d.ts +12 -0
- package/dist/packages/components/steps/src/step.d.ts +28 -0
- package/dist/packages/components/steps/src/steps.d.ts +46 -0
- package/dist/packages/components/table/index.d.ts +10 -0
- package/dist/packages/components/table/src/table.d.ts +56 -0
- package/dist/packages/components/tabs/index.d.ts +12 -0
- package/dist/packages/components/tabs/src/tab-pane.d.ts +22 -0
- package/dist/packages/components/tabs/src/tabs.d.ts +43 -0
- package/dist/packages/components/tree/index.d.ts +10 -0
- package/dist/packages/components/tree/src/tree.d.ts +134 -0
- package/dist/packages/components/upload/index.d.ts +10 -0
- package/dist/packages/components/upload/src/upload.d.ts +103 -0
- package/dist/packages/directives/index.d.ts +2 -0
- package/dist/packages/directives/loading/index.d.ts +11 -0
- package/dist/packages/directives/permission/index.d.ts +3 -0
- package/dist/packages/ui-kit/index.d.ts +34 -0
- package/dist/packages/utils/dom.d.ts +5 -0
- package/dist/packages/utils/index.d.ts +3 -0
- package/dist/packages/utils/types.d.ts +7 -0
- package/dist/packages/utils/vue-helper.d.ts +9 -0
- package/dist/play/main.d.ts +1 -0
- package/dist/play/vite.config.d.ts +2 -0
- package/package.json +27 -0
- package/style/index.scss +104 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ExtractPropTypes, PropType } from 'vue';
|
|
2
|
+
|
|
3
|
+
/** 文件上传状态 */
|
|
4
|
+
export type UploadStatus = 'ready' | 'uploading' | 'success' | 'fail';
|
|
5
|
+
/** 文件列表展示类型 */
|
|
6
|
+
export type UploadListType = 'text' | 'picture' | 'picture-card';
|
|
7
|
+
/** 列表中的单个文件 */
|
|
8
|
+
export interface UploadFile {
|
|
9
|
+
/** 组件内唯一标识(新增时自增生成) */
|
|
10
|
+
uid: number;
|
|
11
|
+
/** 文件名 */
|
|
12
|
+
name: string;
|
|
13
|
+
/** 文件大小(字节) */
|
|
14
|
+
size: number;
|
|
15
|
+
/** MIME 类型 */
|
|
16
|
+
type: string;
|
|
17
|
+
/** 当前上传状态 */
|
|
18
|
+
status: UploadStatus;
|
|
19
|
+
/** 上传进度 0-100 */
|
|
20
|
+
percentage: number;
|
|
21
|
+
/** 原始 File 对象 */
|
|
22
|
+
raw: File;
|
|
23
|
+
/** 本地预览地址(仅图片,blob: URL) */
|
|
24
|
+
url?: string;
|
|
25
|
+
/** 上传成功/失败后的响应 */
|
|
26
|
+
response?: unknown;
|
|
27
|
+
}
|
|
28
|
+
export declare const uploadProps: {
|
|
29
|
+
/** 上传请求的 URL;留空时不发起请求,文件直接标记为成功(便于无后端演示) */
|
|
30
|
+
readonly action: {
|
|
31
|
+
readonly type: StringConstructor;
|
|
32
|
+
readonly default: "";
|
|
33
|
+
};
|
|
34
|
+
/** FormData 中文件字段的 key */
|
|
35
|
+
readonly name: {
|
|
36
|
+
readonly type: StringConstructor;
|
|
37
|
+
readonly default: "file";
|
|
38
|
+
};
|
|
39
|
+
/** 是否允许多选 */
|
|
40
|
+
readonly multiple: BooleanConstructor;
|
|
41
|
+
/** 原生 input 的 accept,如 'image/*'、'.zip,.rar' */
|
|
42
|
+
readonly accept: {
|
|
43
|
+
readonly type: StringConstructor;
|
|
44
|
+
readonly default: "";
|
|
45
|
+
};
|
|
46
|
+
/** 禁用上传 */
|
|
47
|
+
readonly disabled: BooleanConstructor;
|
|
48
|
+
/** 最大文件数,0 表示不限制 */
|
|
49
|
+
readonly limit: {
|
|
50
|
+
readonly type: NumberConstructor;
|
|
51
|
+
readonly default: 0;
|
|
52
|
+
};
|
|
53
|
+
/** 自定义请求头 */
|
|
54
|
+
readonly headers: {
|
|
55
|
+
readonly type: PropType<Record<string, string>>;
|
|
56
|
+
readonly default: () => {};
|
|
57
|
+
};
|
|
58
|
+
/** 附加的 FormData 字段 */
|
|
59
|
+
readonly data: {
|
|
60
|
+
readonly type: PropType<Record<string, unknown>>;
|
|
61
|
+
readonly default: () => {};
|
|
62
|
+
};
|
|
63
|
+
/** 跨域时是否携带 cookie */
|
|
64
|
+
readonly withCredentials: BooleanConstructor;
|
|
65
|
+
/** 是否支持拖拽上传(将触发器区域变成拖拽区) */
|
|
66
|
+
readonly drag: BooleanConstructor;
|
|
67
|
+
/** 选择文件后是否立即上传;false 时仅加入列表,等待手动触发 */
|
|
68
|
+
readonly autoUpload: {
|
|
69
|
+
readonly type: BooleanConstructor;
|
|
70
|
+
readonly default: true;
|
|
71
|
+
};
|
|
72
|
+
/** 是否展示文件列表 */
|
|
73
|
+
readonly showFileList: {
|
|
74
|
+
readonly type: BooleanConstructor;
|
|
75
|
+
readonly default: true;
|
|
76
|
+
};
|
|
77
|
+
/** 列表展示类型 */
|
|
78
|
+
readonly listType: {
|
|
79
|
+
readonly type: PropType<UploadListType>;
|
|
80
|
+
readonly default: "text";
|
|
81
|
+
};
|
|
82
|
+
/** 受控文件列表(配合 v-model:file-list 使用) */
|
|
83
|
+
readonly fileList: {
|
|
84
|
+
readonly type: PropType<UploadFile[]>;
|
|
85
|
+
readonly default: () => never[];
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export declare const uploadEmits: {
|
|
89
|
+
readonly 'update:file-list': (files: UploadFile[]) => boolean;
|
|
90
|
+
/** 文件列表变化(新增 / 移除) */
|
|
91
|
+
readonly change: (files: UploadFile[]) => boolean;
|
|
92
|
+
/** 上传成功 */
|
|
93
|
+
readonly success: (file: UploadFile, response?: unknown) => boolean;
|
|
94
|
+
/** 上传失败 */
|
|
95
|
+
readonly error: (file: UploadFile, error: unknown) => boolean;
|
|
96
|
+
/** 上传进度 */
|
|
97
|
+
readonly progress: (file: UploadFile, percent: number) => boolean;
|
|
98
|
+
/** 移除文件 */
|
|
99
|
+
readonly remove: (file: UploadFile) => boolean;
|
|
100
|
+
/** 超出 limit 限制 */
|
|
101
|
+
readonly exceed: (files: File[], limit: number) => boolean;
|
|
102
|
+
};
|
|
103
|
+
export type UploadProps = ExtractPropTypes<typeof uploadProps>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { App } from 'vue';
|
|
2
|
+
|
|
3
|
+
export declare function install(app: App): void;
|
|
4
|
+
declare const _default: {
|
|
5
|
+
install: typeof install;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
export * from '../components/button';
|
|
9
|
+
export * from '../components/input';
|
|
10
|
+
export * from '../components/badge';
|
|
11
|
+
export * from '../components/breadcrumb';
|
|
12
|
+
export * from '../components/date-picker';
|
|
13
|
+
export * from '../components/descriptions';
|
|
14
|
+
export * from '../components/divider';
|
|
15
|
+
export * from '../components/dropdown';
|
|
16
|
+
export * from '../components/icon';
|
|
17
|
+
export * from '../components/link';
|
|
18
|
+
export * from '../components/loading';
|
|
19
|
+
export * from '../components/menu';
|
|
20
|
+
export * from '../components/message';
|
|
21
|
+
export * from '../components/modal';
|
|
22
|
+
export * from '../components/notification';
|
|
23
|
+
export * from '../components/pagination';
|
|
24
|
+
export * from '../components/popconfirm';
|
|
25
|
+
export * from '../components/form';
|
|
26
|
+
export * from '../components/table';
|
|
27
|
+
export * from '../components/tree';
|
|
28
|
+
export * from '../components/tabs';
|
|
29
|
+
export * from '../components/rich-editor';
|
|
30
|
+
export * from '../components/select';
|
|
31
|
+
export * from '../components/space';
|
|
32
|
+
export * from '../components/steps';
|
|
33
|
+
export * from '../components/upload';
|
|
34
|
+
export * from '../directives';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function addClass(el: HTMLElement, cls: string): void;
|
|
2
|
+
export declare function removeClass(el: HTMLElement, cls: string): void;
|
|
3
|
+
export declare function hasClass(el: HTMLElement, cls: string): boolean;
|
|
4
|
+
export declare function getScrollTop(el?: Element | Window): number;
|
|
5
|
+
export declare function isServer(): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ccn-ui-kit/rich-editor",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.cjs",
|
|
6
|
+
"module": "dist/index.js",
|
|
7
|
+
"types": "dist/packages/components/rich-editor/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"style"
|
|
11
|
+
],
|
|
12
|
+
"sideEffects": [
|
|
13
|
+
"**/*.scss"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/packages/components/rich-editor/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"require": "./dist/index.cjs"
|
|
20
|
+
},
|
|
21
|
+
"./style": "./style/index.scss",
|
|
22
|
+
"./package.json": "./package.json"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"vue": "^3.4.0"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/style/index.scss
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// 富文本编辑器:工具栏 + contenteditable 编辑区
|
|
2
|
+
.ui-rich-editor {
|
|
3
|
+
--ui-rich-editor-border: #dcdfe6;
|
|
4
|
+
font-size: var(--ui-font-size-base);
|
|
5
|
+
color: #303133;
|
|
6
|
+
border: 1px solid var(--ui-rich-editor-border);
|
|
7
|
+
border-radius: var(--ui-border-radius-base);
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
transition: border-color 0.2s;
|
|
10
|
+
|
|
11
|
+
&:focus-within {
|
|
12
|
+
border-color: var(--ui-color-primary);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&.is-disabled {
|
|
16
|
+
background: #f5f7fa;
|
|
17
|
+
|
|
18
|
+
.ui-rich-editor__content {
|
|
19
|
+
cursor: not-allowed;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ui-rich-editor__toolbar {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-wrap: wrap;
|
|
27
|
+
align-items: center;
|
|
28
|
+
gap: 4px;
|
|
29
|
+
padding: 6px 8px;
|
|
30
|
+
background: #f5f7fa;
|
|
31
|
+
border-bottom: 1px solid var(--ui-rich-editor-border);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.ui-rich-editor__divider {
|
|
35
|
+
width: 1px;
|
|
36
|
+
height: 16px;
|
|
37
|
+
margin: 0 4px;
|
|
38
|
+
background: var(--ui-rich-editor-border);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.ui-rich-editor__tool {
|
|
42
|
+
min-width: 28px;
|
|
43
|
+
padding: 3px 6px;
|
|
44
|
+
font-size: 12px;
|
|
45
|
+
line-height: 1.5;
|
|
46
|
+
color: #606266;
|
|
47
|
+
background: transparent;
|
|
48
|
+
border: 1px solid transparent;
|
|
49
|
+
border-radius: var(--ui-border-radius-base);
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
user-select: none;
|
|
52
|
+
transition: color 0.2s, background-color 0.2s, border-color 0.2s;
|
|
53
|
+
|
|
54
|
+
&:hover:not(:disabled) {
|
|
55
|
+
color: var(--ui-color-primary);
|
|
56
|
+
background-color: #ecf5ff;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&.is-active {
|
|
60
|
+
color: var(--ui-color-primary);
|
|
61
|
+
background-color: #ecf5ff;
|
|
62
|
+
border-color: #b3d8ff;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
&:disabled {
|
|
66
|
+
color: #c0c4cc;
|
|
67
|
+
cursor: not-allowed;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ui-rich-editor__content {
|
|
72
|
+
padding: 10px 12px;
|
|
73
|
+
min-height: 120px;
|
|
74
|
+
outline: none;
|
|
75
|
+
line-height: 1.6;
|
|
76
|
+
overflow-y: auto;
|
|
77
|
+
word-break: break-word;
|
|
78
|
+
|
|
79
|
+
// 空内容时的占位文案(isEmpty 由 JS 维护,比 :empty 更可靠)
|
|
80
|
+
&.is-empty::before {
|
|
81
|
+
content: attr(data-placeholder);
|
|
82
|
+
color: #a8abb2;
|
|
83
|
+
pointer-events: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 编辑内容的基础排版
|
|
87
|
+
p {
|
|
88
|
+
margin: 0 0 8px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
ul,
|
|
92
|
+
ol {
|
|
93
|
+
margin: 0 0 8px;
|
|
94
|
+
padding-left: 20px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
img {
|
|
98
|
+
max-width: 100%;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
a {
|
|
102
|
+
color: var(--ui-color-primary);
|
|
103
|
+
}
|
|
104
|
+
}
|