@yeepay/yee-boss-ui 0.1.6 → 0.1.8
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/README.md +54 -0
- package/dist/components/ellipsis-text/YeeEllipsisText.vue.d.ts +40 -0
- package/dist/components/ellipsis-text/index.d.ts +2 -0
- package/dist/components/ellipsis-text/types.d.ts +31 -0
- package/dist/components/file-preview/YeeFilePreview.vue.d.ts +23 -0
- package/dist/components/file-preview/index.d.ts +2 -0
- package/dist/components/file-preview/source.d.ts +8 -0
- package/dist/components/file-preview/types.d.ts +32 -0
- package/dist/components/file-preview/useFilePreview.d.ts +31 -0
- package/dist/docx-preview.min-lCFRKxYn.js +4852 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1392 -640
- package/dist/marked.esm-DaHdfxOj.js +1563 -0
- package/dist/postal-mime-CPJ2QXsD.js +3219 -0
- package/dist/purify.es-HJ4qIUVZ.js +869 -0
- package/dist/style.css +1 -1
- package/dist/utils/platform-message.d.ts +5 -0
- package/dist/xlsx-CF422ARu.js +24728 -0
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
- `YeeForm` Schema 查询表单。
|
|
16
16
|
- `useYeeGrid` 与 `gridApi/formApi`。
|
|
17
17
|
- `YeeDescriptions` 配置驱动的详情展示。
|
|
18
|
+
- `YeeEllipsisText` 单行/多行省略文本与按需完整提示。
|
|
18
19
|
- `YeeFileUpload` 业务无关的文件选择与上传生命周期。
|
|
19
20
|
- `YeeModal` 统一的 Modal / Drawer 容器。
|
|
20
21
|
- `YeeSelect` 带完整文案提示的选择器。
|
|
@@ -89,6 +90,27 @@ export default {
|
|
|
89
90
|
|
|
90
91
|
## 通用业务组件
|
|
91
92
|
|
|
93
|
+
### YeeEllipsisText
|
|
94
|
+
|
|
95
|
+
通过 `line` 和 `maxWidth` 控制单行或多行省略;`tooltipWhenEllipsis` 开启后,仅在文本实际被截断时显示 Tooltip。`expand` 支持鼠标、Enter 和 Space 展开/收起,并通过 `expandChange` 通知状态变化。
|
|
96
|
+
|
|
97
|
+
```vue
|
|
98
|
+
<YeeEllipsisText
|
|
99
|
+
:line="2"
|
|
100
|
+
:max-width="360"
|
|
101
|
+
expand
|
|
102
|
+
tooltip-when-ellipsis
|
|
103
|
+
@expand-change="handleExpandChange"
|
|
104
|
+
>
|
|
105
|
+
{{ remark }}
|
|
106
|
+
<template #tooltip>
|
|
107
|
+
完整备注:{{ remark }}
|
|
108
|
+
</template>
|
|
109
|
+
</YeeEllipsisText>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`placement` 支持 `top`、`right`、`bottom`、`left`;`ellipsisThreshold` 默认是 `3px`。还可使用 `tooltipMaxWidth`、`tooltipOverlayStyle`、`tooltipBackgroundColor`、`tooltipColor` 和 `tooltipFontSize` 调整提示内容。默认背景、文字和字号消费 Yee 的 `popover`、`popoverForeground` 与 `fontSize` Theme Tokens;未使用 `PlatformConfigProvider` 时回退到对应的 `--yee-*` CSS Variables。
|
|
113
|
+
|
|
92
114
|
### YeeDescriptions
|
|
93
115
|
|
|
94
116
|
配置项使用稳定的 `name` 时,可通过 `content-${name}` 覆盖内容。`copyable` 仅复制展示值,`info` 用于补充说明。
|
|
@@ -115,6 +137,38 @@ export default {
|
|
|
115
137
|
/>
|
|
116
138
|
```
|
|
117
139
|
|
|
140
|
+
### YeeFilePreview
|
|
141
|
+
|
|
142
|
+
`YeeFilePreview` 不依赖业务请求层,支持传入文件地址、`Blob`、`File` 或 `ArrayBuffer`。解析器由组件库统一提供,并按文件类型动态加载;消费者不需要额外安装 `xlsx`、`docx-preview`、`postal-mime` 等解析依赖。
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<script setup lang="ts">
|
|
146
|
+
import { ref } from 'vue'
|
|
147
|
+
import { YeeFilePreview } from '@yeepay/yee-boss-ui'
|
|
148
|
+
|
|
149
|
+
const source = ref<string | Blob>('https://example.com/report.pdf')
|
|
150
|
+
|
|
151
|
+
function handlePreviewError(error: { message: string }): void {
|
|
152
|
+
console.error(error.message)
|
|
153
|
+
}
|
|
154
|
+
</script>
|
|
155
|
+
|
|
156
|
+
<template>
|
|
157
|
+
<YeeFilePreview
|
|
158
|
+
:source="source"
|
|
159
|
+
:max-file-size="50 * 1024 * 1024"
|
|
160
|
+
height="640"
|
|
161
|
+
@error="handlePreviewError"
|
|
162
|
+
/>
|
|
163
|
+
</template>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`source` 也可以直接传入 `Blob`、`File` 或 `ArrayBuffer`;需要兼容只提供地址的调用方时,可以使用 `url`。通常组件会根据文件名或 MIME 类型识别格式,也可以通过 `file-name`、`file-type` 显式指定。
|
|
167
|
+
|
|
168
|
+
当前支持图片、PDF、文本、JSON、XML、CSV、Markdown、HTML、音视频、DOCX、XLS/XLSX 和 EML。EML 会解析正文及 `cid:` 内嵌图片;DOCX 和 Excel 属于基础预览,不保证还原原始复杂排版。PPT/PPTX、DOC 等暂不支持在线解析,会提供下载回退。
|
|
169
|
+
|
|
170
|
+
远程地址的解析型文件需要服务端允许 CORS;图片、PDF、音视频仍由浏览器原生能力加载。远程下载会先读取为 Blob 再触发下载,不会主动打开新窗口。解析默认限制 50 MB、表格 200 行和 50 列,可通过 `max-file-size`、`max-rows`、`max-columns` 调整。
|
|
171
|
+
|
|
118
172
|
### YeeModal
|
|
119
173
|
|
|
120
174
|
使用标准 `v-model:open`。Modal 默认在 header 右侧显示全屏切换按钮,可通过 `v-model:fullscreen` 控制状态,或通过 `:fullscreen-button="false"` 隐藏。`type="drawer"` 适合长详情或复杂表单,不显示全屏按钮;`confirm` 只通知父组件,不会主动关闭,便于父组件在异步提交成功后再更新 `open`。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CSSProperties } from 'vue';
|
|
2
|
+
import { YeeEllipsisTextProps } from './types';
|
|
3
|
+
declare function __VLS_template(): {
|
|
4
|
+
attrs: Partial<{}>;
|
|
5
|
+
slots: Readonly<{
|
|
6
|
+
default?(): unknown;
|
|
7
|
+
tooltip?(): unknown;
|
|
8
|
+
}> & {
|
|
9
|
+
default?(): unknown;
|
|
10
|
+
tooltip?(): unknown;
|
|
11
|
+
};
|
|
12
|
+
refs: {
|
|
13
|
+
text: HTMLDivElement;
|
|
14
|
+
};
|
|
15
|
+
rootEl: any;
|
|
16
|
+
};
|
|
17
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
18
|
+
declare const __VLS_component: import('vue').DefineComponent<YeeEllipsisTextProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
19
|
+
expandChange: (expanded: boolean) => any;
|
|
20
|
+
}, string, import('vue').PublicProps, Readonly<YeeEllipsisTextProps> & Readonly<{
|
|
21
|
+
onExpandChange?: (expanded: boolean) => any;
|
|
22
|
+
}>, {
|
|
23
|
+
line: number;
|
|
24
|
+
placement: import('./types').YeeEllipsisTextPlacement;
|
|
25
|
+
expand: boolean;
|
|
26
|
+
ellipsisThreshold: number;
|
|
27
|
+
maxWidth: number | string;
|
|
28
|
+
tooltip: boolean;
|
|
29
|
+
tooltipOverlayStyle: CSSProperties;
|
|
30
|
+
tooltipWhenEllipsis: boolean;
|
|
31
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
32
|
+
text: HTMLDivElement;
|
|
33
|
+
}, any>;
|
|
34
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
35
|
+
export default _default;
|
|
36
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
37
|
+
new (): {
|
|
38
|
+
$slots: S;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CSSProperties } from 'vue';
|
|
2
|
+
export type YeeEllipsisTextPlacement = 'bottom' | 'left' | 'right' | 'top';
|
|
3
|
+
export interface YeeEllipsisTextProps {
|
|
4
|
+
/** 是否允许点击文本展开全部内容。 */
|
|
5
|
+
expand?: boolean;
|
|
6
|
+
/** 判定文本截断时允许的像素误差。 */
|
|
7
|
+
ellipsisThreshold?: number;
|
|
8
|
+
/** 折叠状态下最多展示的行数。 */
|
|
9
|
+
line?: number;
|
|
10
|
+
/** 文本区域最大宽度,数字按 px 处理。 */
|
|
11
|
+
maxWidth?: number | string;
|
|
12
|
+
/** Tooltip 展示位置。 */
|
|
13
|
+
placement?: YeeEllipsisTextPlacement;
|
|
14
|
+
/** 是否启用 Tooltip。 */
|
|
15
|
+
tooltip?: boolean;
|
|
16
|
+
/** Tooltip 背景色。 */
|
|
17
|
+
tooltipBackgroundColor?: string;
|
|
18
|
+
/** Tooltip 文字颜色。 */
|
|
19
|
+
tooltipColor?: string;
|
|
20
|
+
/** Tooltip 字号,单位 px。 */
|
|
21
|
+
tooltipFontSize?: number;
|
|
22
|
+
/** Tooltip 最大宽度,单位 px。 */
|
|
23
|
+
tooltipMaxWidth?: number;
|
|
24
|
+
/** Tooltip 内容区域样式。 */
|
|
25
|
+
tooltipOverlayStyle?: CSSProperties;
|
|
26
|
+
/** 是否仅在文本实际被截断时启用 Tooltip。 */
|
|
27
|
+
tooltipWhenEllipsis?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface YeeEllipsisTextEmits {
|
|
30
|
+
expandChange: [expanded: boolean];
|
|
31
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { YeeFilePreviewError, YeeFilePreviewLoadResult, YeeFilePreviewProps } from './types';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<YeeFilePreviewProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
3
|
+
error: (error: YeeFilePreviewError) => any;
|
|
4
|
+
unsupported: (error: YeeFilePreviewError) => any;
|
|
5
|
+
load: (result: YeeFilePreviewLoadResult) => any;
|
|
6
|
+
download: () => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<YeeFilePreviewProps> & Readonly<{
|
|
8
|
+
onError?: (error: YeeFilePreviewError) => any;
|
|
9
|
+
onUnsupported?: (error: YeeFilePreviewError) => any;
|
|
10
|
+
onLoad?: (result: YeeFilePreviewLoadResult) => any;
|
|
11
|
+
onDownload?: () => any;
|
|
12
|
+
}>, {
|
|
13
|
+
maxFileSize: number | undefined;
|
|
14
|
+
maxRows: number | undefined;
|
|
15
|
+
maxColumns: number | undefined;
|
|
16
|
+
showHeader: boolean | undefined;
|
|
17
|
+
showDownload: boolean | undefined;
|
|
18
|
+
alt: string | undefined;
|
|
19
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
20
|
+
previewContainer: HTMLElement;
|
|
21
|
+
docxContainer: HTMLDivElement;
|
|
22
|
+
}, HTMLElement>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { YeeFilePreviewKind, YeeFilePreviewSource } from './types';
|
|
2
|
+
export declare function extensionFromName(name: string | undefined): string;
|
|
3
|
+
export declare function fileNameFromSource(source: YeeFilePreviewSource | undefined): string;
|
|
4
|
+
export declare function kindFromType(type: string | undefined): YeeFilePreviewKind | undefined;
|
|
5
|
+
export declare function resolveFileKind(source: YeeFilePreviewSource | undefined, fileName: string | undefined, fileType: string | undefined): YeeFilePreviewKind;
|
|
6
|
+
export declare function supportedFileExtensions(): readonly string[];
|
|
7
|
+
export declare function isBlobLike(source: YeeFilePreviewSource | undefined): source is Blob | File | ArrayBuffer;
|
|
8
|
+
export declare function sourceToBlob(source: Blob | File | ArrayBuffer): Blob;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type YeeFilePreviewSource = string | Blob | File | ArrayBuffer;
|
|
2
|
+
export type YeeFilePreviewKind = 'image' | 'pdf' | 'text' | 'json' | 'xml' | 'csv' | 'markdown' | 'html' | 'video' | 'audio' | 'docx' | 'spreadsheet' | 'eml' | 'unsupported';
|
|
3
|
+
export type YeeFilePreviewStatus = 'idle' | 'loading' | 'ready' | 'error' | 'unsupported';
|
|
4
|
+
export interface YeeFilePreviewProps {
|
|
5
|
+
source?: YeeFilePreviewSource | undefined;
|
|
6
|
+
url?: string | undefined;
|
|
7
|
+
fileName?: string | undefined;
|
|
8
|
+
fileType?: string | undefined;
|
|
9
|
+
height?: string | number | undefined;
|
|
10
|
+
maxFileSize?: number | undefined;
|
|
11
|
+
maxRows?: number | undefined;
|
|
12
|
+
maxColumns?: number | undefined;
|
|
13
|
+
showHeader?: boolean | undefined;
|
|
14
|
+
showDownload?: boolean | undefined;
|
|
15
|
+
alt?: string | undefined;
|
|
16
|
+
}
|
|
17
|
+
export interface YeeFilePreviewTableRow {
|
|
18
|
+
cells: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface YeeFilePreviewError {
|
|
21
|
+
kind: YeeFilePreviewKind;
|
|
22
|
+
message: string;
|
|
23
|
+
cause?: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface YeeFilePreviewLoadResult {
|
|
26
|
+
kind: YeeFilePreviewKind;
|
|
27
|
+
fileName: string;
|
|
28
|
+
}
|
|
29
|
+
export interface YeeFilePreviewEmailMeta {
|
|
30
|
+
label: string;
|
|
31
|
+
value: string;
|
|
32
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
import { YeeFilePreviewEmailMeta, YeeFilePreviewError, YeeFilePreviewKind, YeeFilePreviewLoadResult, YeeFilePreviewProps, YeeFilePreviewStatus, YeeFilePreviewTableRow } from './types';
|
|
3
|
+
interface PreviewTargets {
|
|
4
|
+
docxContainer: Readonly<Ref<HTMLElement | null>>;
|
|
5
|
+
}
|
|
6
|
+
interface PreviewEmit {
|
|
7
|
+
(event: 'load', result: YeeFilePreviewLoadResult): void;
|
|
8
|
+
(event: 'error', error: YeeFilePreviewError): void;
|
|
9
|
+
(event: 'unsupported', error: YeeFilePreviewError): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function useFilePreview(props: Readonly<YeeFilePreviewProps>, targets: PreviewTargets, emit: PreviewEmit): {
|
|
12
|
+
displayUrl: import('vue').ShallowRef<string, string>;
|
|
13
|
+
emailHtml: import('vue').ShallowRef<string, string>;
|
|
14
|
+
emailMeta: import('vue').ShallowRef<YeeFilePreviewEmailMeta[], YeeFilePreviewEmailMeta[]>;
|
|
15
|
+
emailText: import('vue').ShallowRef<string, string>;
|
|
16
|
+
errorMessage: import('vue').ShallowRef<string, string>;
|
|
17
|
+
fileName: import('vue').ComputedRef<string>;
|
|
18
|
+
htmlContent: import('vue').ShallowRef<string, string>;
|
|
19
|
+
isError: import('vue').ComputedRef<boolean>;
|
|
20
|
+
isLoading: import('vue').ComputedRef<boolean>;
|
|
21
|
+
isReady: import('vue').ComputedRef<boolean>;
|
|
22
|
+
isUnsupported: import('vue').ComputedRef<boolean>;
|
|
23
|
+
kind: import('vue').ComputedRef<YeeFilePreviewKind>;
|
|
24
|
+
load: () => Promise<void>;
|
|
25
|
+
markdownHtml: import('vue').ShallowRef<string, string>;
|
|
26
|
+
status: import('vue').ShallowRef<YeeFilePreviewStatus, YeeFilePreviewStatus>;
|
|
27
|
+
tableRows: import('vue').ShallowRef<YeeFilePreviewTableRow[], YeeFilePreviewTableRow[]>;
|
|
28
|
+
textContent: import('vue').ShallowRef<string, string>;
|
|
29
|
+
truncated: import('vue').ShallowRef<boolean, boolean>;
|
|
30
|
+
};
|
|
31
|
+
export {};
|