cnhis-design-vue 3.3.3-release.7 → 3.3.3-release.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 +87 -87
- package/es/components/audio-sdk/index.d.ts +5 -5
- package/es/components/audio-sdk/src/Index.vue.d.ts +5 -5
- package/es/components/audio-sdk/src/Index.vue2.js +4 -1
- package/es/components/audio-sdk/src/components/recording-modal.vue.d.ts +5 -5
- package/es/components/audio-sdk/src/components/recording.vue.d.ts +5 -5
- package/es/components/classification/src/components/table-modal/index.vue.d.ts +3 -0
- package/es/components/field-set/src/FieldColor.vue.d.ts +5 -3
- package/es/components/field-set/src/FieldFilter.vue.d.ts +5 -3
- package/es/components/field-set/src/FieldSet.vue.d.ts +7 -4
- package/es/components/field-set/src/FieldSet.vue2.js +6 -4
- package/es/components/field-set/src/components/table-row.vue.d.ts +3 -3
- package/es/components/field-set/src/types/index.d.ts +1 -0
- package/es/components/iho-chat/index.d.ts +3 -0
- package/es/components/iho-chat/src/Index.vue.d.ts +3 -0
- package/es/components/iho-chat/src/components/ChatFooter.vue.d.ts +3 -0
- package/es/components/iho-chat/src/components/ChatFooter.vue2.js +32 -5
- package/es/components/iho-chat/src/components/PersonProfile.vue2.js +1 -1
- package/es/components/iho-chat/src/hooks/useDraggable.js +12 -3
- package/es/env.d.ts +25 -25
- package/es/shared/package.json.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
@@ -1,87 +1,87 @@
|
|
1
|
-
# 安装
|
2
|
-
|
3
|
-
```shell
|
4
|
-
npm i cnhis-design-vue@[版本号]
|
5
|
-
# or
|
6
|
-
yarn add cnhis-design-vue@[版本号] #推荐
|
7
|
-
```
|
8
|
-
|
9
|
-
## 1.全局引入
|
10
|
-
|
11
|
-
```typescript
|
12
|
-
// main.ts
|
13
|
-
import { createApp } from 'vue';
|
14
|
-
import App from './App.vue';
|
15
|
-
import 'cnhis-design-vue/es/packages/index.css';
|
16
|
-
import cui from 'cnhis-design-vue';
|
17
|
-
|
18
|
-
const app = createApp(App);
|
19
|
-
app.use(cui).mount('#app');
|
20
|
-
```
|
21
|
-
|
22
|
-
## 2. 按需引入
|
23
|
-
|
24
|
-
组件现在支持了自动按需引入, 但是样式文件需要额外的处理
|
25
|
-
|
26
|
-
### 2.1 样式处理方式1 (按需引入样式)
|
27
|
-
|
28
|
-
```shell
|
29
|
-
# 安装自动导入样式的插件
|
30
|
-
npm i -d vite-plugin-style-import
|
31
|
-
```
|
32
|
-
|
33
|
-
```typescript
|
34
|
-
// vite.config.ts
|
35
|
-
import { defineConfig } from 'vite';
|
36
|
-
import { createStyleImportPlugin } from 'vite-plugin-style-import';
|
37
|
-
|
38
|
-
export default defineConfig({
|
39
|
-
plugins: [
|
40
|
-
// ...otherPlugins
|
41
|
-
createStyleImportPlugin({
|
42
|
-
libs: [
|
43
|
-
{
|
44
|
-
libraryName: 'cnhis-design-vue',
|
45
|
-
esModule: true,
|
46
|
-
ensureStyleFile: true,
|
47
|
-
resolveStyle: name => {
|
48
|
-
return `cnhis-design-vue/es/components/${ name.slice(2) }/style/index.css`;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
]
|
52
|
-
})
|
53
|
-
]
|
54
|
-
});
|
55
|
-
```
|
56
|
-
|
57
|
-
### 2.2 样式处理方式2 (全局引入样式)
|
58
|
-
|
59
|
-
```typescript
|
60
|
-
// main.ts
|
61
|
-
import 'cnhis-design-vue/es/components/index.css';
|
62
|
-
```
|
63
|
-
|
64
|
-
## 3.FAQ
|
65
|
-
|
66
|
-
### 3.1 项目打包后样式丢失
|
67
|
-
|
68
|
-
处理方法, 将 cnhis-design-vue 从 vendor 包中移除 (没有出现此问题则不需要)
|
69
|
-
|
70
|
-
```typescript
|
71
|
-
// vite.config.ts
|
72
|
-
import { defineConfig } from 'vite';
|
73
|
-
|
74
|
-
export default defineConfig({
|
75
|
-
build: {
|
76
|
-
rollupOptions: {
|
77
|
-
// ..otherOptions
|
78
|
-
output: {
|
79
|
-
dir: './dist',
|
80
|
-
manualChunks: {
|
81
|
-
'cnhis-vendor': ['cnhis-design-vue']
|
82
|
-
}
|
83
|
-
}
|
84
|
-
}
|
85
|
-
}
|
86
|
-
});
|
87
|
-
```
|
1
|
+
# 安装
|
2
|
+
|
3
|
+
```shell
|
4
|
+
npm i cnhis-design-vue@[版本号]
|
5
|
+
# or
|
6
|
+
yarn add cnhis-design-vue@[版本号] #推荐
|
7
|
+
```
|
8
|
+
|
9
|
+
## 1.全局引入
|
10
|
+
|
11
|
+
```typescript
|
12
|
+
// main.ts
|
13
|
+
import { createApp } from 'vue';
|
14
|
+
import App from './App.vue';
|
15
|
+
import 'cnhis-design-vue/es/packages/index.css';
|
16
|
+
import cui from 'cnhis-design-vue';
|
17
|
+
|
18
|
+
const app = createApp(App);
|
19
|
+
app.use(cui).mount('#app');
|
20
|
+
```
|
21
|
+
|
22
|
+
## 2. 按需引入
|
23
|
+
|
24
|
+
组件现在支持了自动按需引入, 但是样式文件需要额外的处理
|
25
|
+
|
26
|
+
### 2.1 样式处理方式1 (按需引入样式)
|
27
|
+
|
28
|
+
```shell
|
29
|
+
# 安装自动导入样式的插件
|
30
|
+
npm i -d vite-plugin-style-import
|
31
|
+
```
|
32
|
+
|
33
|
+
```typescript
|
34
|
+
// vite.config.ts
|
35
|
+
import { defineConfig } from 'vite';
|
36
|
+
import { createStyleImportPlugin } from 'vite-plugin-style-import';
|
37
|
+
|
38
|
+
export default defineConfig({
|
39
|
+
plugins: [
|
40
|
+
// ...otherPlugins
|
41
|
+
createStyleImportPlugin({
|
42
|
+
libs: [
|
43
|
+
{
|
44
|
+
libraryName: 'cnhis-design-vue',
|
45
|
+
esModule: true,
|
46
|
+
ensureStyleFile: true,
|
47
|
+
resolveStyle: name => {
|
48
|
+
return `cnhis-design-vue/es/components/${ name.slice(2) }/style/index.css`;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
]
|
52
|
+
})
|
53
|
+
]
|
54
|
+
});
|
55
|
+
```
|
56
|
+
|
57
|
+
### 2.2 样式处理方式2 (全局引入样式)
|
58
|
+
|
59
|
+
```typescript
|
60
|
+
// main.ts
|
61
|
+
import 'cnhis-design-vue/es/components/index.css';
|
62
|
+
```
|
63
|
+
|
64
|
+
## 3.FAQ
|
65
|
+
|
66
|
+
### 3.1 项目打包后样式丢失
|
67
|
+
|
68
|
+
处理方法, 将 cnhis-design-vue 从 vendor 包中移除 (没有出现此问题则不需要)
|
69
|
+
|
70
|
+
```typescript
|
71
|
+
// vite.config.ts
|
72
|
+
import { defineConfig } from 'vite';
|
73
|
+
|
74
|
+
export default defineConfig({
|
75
|
+
build: {
|
76
|
+
rollupOptions: {
|
77
|
+
// ..otherOptions
|
78
|
+
output: {
|
79
|
+
dir: './dist',
|
80
|
+
manualChunks: {
|
81
|
+
'cnhis-vendor': ['cnhis-design-vue']
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
});
|
87
|
+
```
|
@@ -143,7 +143,7 @@ declare const AudioSdk: SFCWithInstall<import("vue").DefineComponent<{
|
|
143
143
|
type: import("vue").PropType<import("../../shared/types").AnyFn>;
|
144
144
|
};
|
145
145
|
recorderStatus: {
|
146
|
-
type:
|
146
|
+
type: StringConstructor;
|
147
147
|
default: string;
|
148
148
|
};
|
149
149
|
}, {
|
@@ -185,7 +185,7 @@ declare const AudioSdk: SFCWithInstall<import("vue").DefineComponent<{
|
|
185
185
|
type: import("vue").PropType<import("../../shared/types").AnyFn>;
|
186
186
|
};
|
187
187
|
recorderStatus: {
|
188
|
-
type:
|
188
|
+
type: StringConstructor;
|
189
189
|
default: string;
|
190
190
|
};
|
191
191
|
}>> & {
|
@@ -203,7 +203,7 @@ declare const AudioSdk: SFCWithInstall<import("vue").DefineComponent<{
|
|
203
203
|
data: string;
|
204
204
|
}>;
|
205
205
|
wsConnected: import("vue").Ref<boolean>;
|
206
|
-
recorderStatus: import("vue").Ref<
|
206
|
+
recorderStatus: import("vue").Ref<string>;
|
207
207
|
audioChartRef: import("vue").Ref<HTMLDivElement | undefined>;
|
208
208
|
audioChartSamllRef: import("vue").Ref<HTMLDivElement | undefined>;
|
209
209
|
contentScrollRef: import("vue").Ref<HTMLDivElement | undefined>;
|
@@ -319,7 +319,7 @@ declare const AudioSdk: SFCWithInstall<import("vue").DefineComponent<{
|
|
319
319
|
type: import("vue").PropType<import("../../shared/types").AnyFn>;
|
320
320
|
};
|
321
321
|
recorderStatus: {
|
322
|
-
type:
|
322
|
+
type: StringConstructor;
|
323
323
|
default: string;
|
324
324
|
};
|
325
325
|
}>> & {
|
@@ -339,7 +339,7 @@ declare const AudioSdk: SFCWithInstall<import("vue").DefineComponent<{
|
|
339
339
|
showBtn: boolean;
|
340
340
|
wsConnected: boolean;
|
341
341
|
fromSdk: boolean;
|
342
|
-
recorderStatus:
|
342
|
+
recorderStatus: string;
|
343
343
|
}>;
|
344
344
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("close" | "success" | "fail" | "recordingHeightChange")[], "close" | "success" | "fail" | "recordingHeightChange", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
345
345
|
timed: {
|
@@ -141,7 +141,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
141
141
|
type: PropType<import("../../../shared/types").AnyFn>;
|
142
142
|
};
|
143
143
|
recorderStatus: {
|
144
|
-
type:
|
144
|
+
type: StringConstructor;
|
145
145
|
default: string;
|
146
146
|
};
|
147
147
|
}, {
|
@@ -183,7 +183,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
183
183
|
type: PropType<import("../../../shared/types").AnyFn>;
|
184
184
|
};
|
185
185
|
recorderStatus: {
|
186
|
-
type:
|
186
|
+
type: StringConstructor;
|
187
187
|
default: string;
|
188
188
|
};
|
189
189
|
}>> & {
|
@@ -201,7 +201,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
201
201
|
data: string;
|
202
202
|
}>;
|
203
203
|
wsConnected: import("vue").Ref<boolean>;
|
204
|
-
recorderStatus: import("vue").Ref<
|
204
|
+
recorderStatus: import("vue").Ref<string>;
|
205
205
|
audioChartRef: import("vue").Ref<HTMLDivElement | undefined>;
|
206
206
|
audioChartSamllRef: import("vue").Ref<HTMLDivElement | undefined>;
|
207
207
|
contentScrollRef: import("vue").Ref<HTMLDivElement | undefined>;
|
@@ -317,7 +317,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
317
317
|
type: PropType<import("../../../shared/types").AnyFn>;
|
318
318
|
};
|
319
319
|
recorderStatus: {
|
320
|
-
type:
|
320
|
+
type: StringConstructor;
|
321
321
|
default: string;
|
322
322
|
};
|
323
323
|
}>> & {
|
@@ -337,7 +337,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
337
337
|
showBtn: boolean;
|
338
338
|
wsConnected: boolean;
|
339
339
|
fromSdk: boolean;
|
340
|
-
recorderStatus:
|
340
|
+
recorderStatus: string;
|
341
341
|
}>;
|
342
342
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("close" | "success" | "fail" | "recordingHeightChange")[], "close" | "success" | "fail" | "recordingHeightChange", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
343
343
|
timed: {
|
@@ -141,7 +141,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
141
141
|
taskId: 1,
|
142
142
|
audioText: props.textPrefix + audioText,
|
143
143
|
intentionCode: props.intentionCode,
|
144
|
-
configs: props.configs || {}
|
144
|
+
configs: props.configs || {},
|
145
|
+
...props.appCode ? {
|
146
|
+
appCode: props.appCode
|
147
|
+
} : {}
|
145
148
|
}, {
|
146
149
|
headers: {
|
147
150
|
Authorization: `bearer ${props.token}`
|
@@ -50,7 +50,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
50
50
|
type: import("vue").PropType<import("../../../../shared/types").AnyFn>;
|
51
51
|
};
|
52
52
|
recorderStatus: {
|
53
|
-
type:
|
53
|
+
type: StringConstructor;
|
54
54
|
default: string;
|
55
55
|
};
|
56
56
|
}, {
|
@@ -92,7 +92,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
92
92
|
type: import("vue").PropType<import("../../../../shared/types").AnyFn>;
|
93
93
|
};
|
94
94
|
recorderStatus: {
|
95
|
-
type:
|
95
|
+
type: StringConstructor;
|
96
96
|
default: string;
|
97
97
|
};
|
98
98
|
}>> & {
|
@@ -110,7 +110,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
110
110
|
data: string;
|
111
111
|
}>;
|
112
112
|
wsConnected: import("vue").Ref<boolean>;
|
113
|
-
recorderStatus: import("vue").Ref<
|
113
|
+
recorderStatus: import("vue").Ref<string>;
|
114
114
|
audioChartRef: import("vue").Ref<HTMLDivElement | undefined>;
|
115
115
|
audioChartSamllRef: import("vue").Ref<HTMLDivElement | undefined>;
|
116
116
|
contentScrollRef: import("vue").Ref<HTMLDivElement | undefined>;
|
@@ -226,7 +226,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
226
226
|
type: import("vue").PropType<import("../../../../shared/types").AnyFn>;
|
227
227
|
};
|
228
228
|
recorderStatus: {
|
229
|
-
type:
|
229
|
+
type: StringConstructor;
|
230
230
|
default: string;
|
231
231
|
};
|
232
232
|
}>> & {
|
@@ -246,7 +246,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
246
246
|
showBtn: boolean;
|
247
247
|
wsConnected: boolean;
|
248
248
|
fromSdk: boolean;
|
249
|
-
recorderStatus:
|
249
|
+
recorderStatus: string;
|
250
250
|
}>;
|
251
251
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
252
252
|
content: {
|
@@ -38,7 +38,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
38
38
|
type: PropType<AnyFn>;
|
39
39
|
};
|
40
40
|
recorderStatus: {
|
41
|
-
type:
|
41
|
+
type: StringConstructor;
|
42
42
|
default: string;
|
43
43
|
};
|
44
44
|
}, {
|
@@ -80,7 +80,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
80
80
|
type: PropType<AnyFn>;
|
81
81
|
};
|
82
82
|
recorderStatus: {
|
83
|
-
type:
|
83
|
+
type: StringConstructor;
|
84
84
|
default: string;
|
85
85
|
};
|
86
86
|
}>> & {
|
@@ -98,7 +98,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
98
98
|
data: string;
|
99
99
|
}>;
|
100
100
|
wsConnected: import("vue").Ref<boolean>;
|
101
|
-
recorderStatus: import("vue").Ref<
|
101
|
+
recorderStatus: import("vue").Ref<string>;
|
102
102
|
audioChartRef: import("vue").Ref<HTMLDivElement | undefined>;
|
103
103
|
audioChartSamllRef: import("vue").Ref<HTMLDivElement | undefined>;
|
104
104
|
contentScrollRef: import("vue").Ref<HTMLDivElement | undefined>;
|
@@ -214,7 +214,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
214
214
|
type: PropType<AnyFn>;
|
215
215
|
};
|
216
216
|
recorderStatus: {
|
217
|
-
type:
|
217
|
+
type: StringConstructor;
|
218
218
|
default: string;
|
219
219
|
};
|
220
220
|
}>> & {
|
@@ -234,6 +234,6 @@ declare const _default: import("vue").DefineComponent<{
|
|
234
234
|
showBtn: boolean;
|
235
235
|
wsConnected: boolean;
|
236
236
|
fromSdk: boolean;
|
237
|
-
recorderStatus:
|
237
|
+
recorderStatus: string;
|
238
238
|
}>;
|
239
239
|
export default _default;
|
@@ -49,6 +49,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
49
49
|
isHeadCheckHide?: boolean | undefined;
|
50
50
|
isShow?: boolean | undefined;
|
51
51
|
contentRender?: ((column: AnyObject, row: AnyObject) => import("vue").VNodeChild) | undefined;
|
52
|
+
titleRender?: ((column: AnyObject) => import("vue").VNodeChild) | undefined;
|
52
53
|
hide?: boolean | undefined;
|
53
54
|
positionField?: string | undefined;
|
54
55
|
}[]>;
|
@@ -63,6 +64,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
63
64
|
isHeadCheckHide?: boolean | undefined;
|
64
65
|
isShow?: boolean | undefined;
|
65
66
|
contentRender?: ((column: AnyObject, row: AnyObject) => import("vue").VNodeChild) | undefined;
|
67
|
+
titleRender?: ((column: AnyObject) => import("vue").VNodeChild) | undefined;
|
66
68
|
hide?: boolean | undefined;
|
67
69
|
positionField?: string | undefined;
|
68
70
|
}[];
|
@@ -534,12 +536,12 @@ declare const _default: import("vue").DefineComponent<{
|
|
534
536
|
}>;
|
535
537
|
developMode: boolean;
|
536
538
|
draggable: boolean;
|
539
|
+
fieldDescribeMode: "column" | "tooltip";
|
540
|
+
isFieldSet: boolean;
|
541
|
+
hideExpressionOption: AnyObject[];
|
537
542
|
idx: number;
|
538
543
|
isHighlight: boolean;
|
539
544
|
isHighlightRow: boolean;
|
540
|
-
isFieldSet: boolean;
|
541
|
-
fieldDescribeMode: "column" | "tooltip";
|
542
|
-
hideExpressionOption: AnyObject[];
|
543
545
|
}>;
|
544
546
|
EditDialog: import("vue").DefineComponent<{
|
545
547
|
visible: {
|
@@ -45,6 +45,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
45
45
|
isHeadCheckHide?: boolean | undefined;
|
46
46
|
isShow?: boolean | undefined;
|
47
47
|
contentRender?: ((column: AnyObject, row: AnyObject) => import("vue").VNodeChild) | undefined;
|
48
|
+
titleRender?: ((column: AnyObject) => import("vue").VNodeChild) | undefined;
|
48
49
|
hide?: boolean | undefined;
|
49
50
|
positionField?: string | undefined;
|
50
51
|
}[]>;
|
@@ -72,6 +73,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
72
73
|
isHeadCheckHide?: boolean | undefined;
|
73
74
|
isShow?: boolean | undefined;
|
74
75
|
contentRender?: ((column: AnyObject, row: AnyObject) => import("vue").VNodeChild) | undefined;
|
76
|
+
titleRender?: ((column: AnyObject) => import("vue").VNodeChild) | undefined;
|
75
77
|
hide?: boolean | undefined;
|
76
78
|
positionField?: string | undefined;
|
77
79
|
}[];
|
@@ -563,12 +565,12 @@ declare const _default: import("vue").DefineComponent<{
|
|
563
565
|
}>;
|
564
566
|
developMode: boolean;
|
565
567
|
draggable: boolean;
|
568
|
+
fieldDescribeMode: "column" | "tooltip";
|
569
|
+
isFieldSet: boolean;
|
570
|
+
hideExpressionOption: AnyObject[];
|
566
571
|
idx: number;
|
567
572
|
isHighlight: boolean;
|
568
573
|
isHighlightRow: boolean;
|
569
|
-
isFieldSet: boolean;
|
570
|
-
fieldDescribeMode: "column" | "tooltip";
|
571
|
-
hideExpressionOption: AnyObject[];
|
572
574
|
}>;
|
573
575
|
setStyle: typeof setStyle;
|
574
576
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("close" | "save" | "reset")[], "close" | "save" | "reset", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
@@ -229,6 +229,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
229
229
|
isHeadCheckHide?: boolean | undefined;
|
230
230
|
isShow?: boolean | undefined;
|
231
231
|
contentRender?: ((column: AnyObject, row: AnyObject) => VNodeChild) | undefined;
|
232
|
+
titleRender?: ((column: AnyObject) => VNodeChild) | undefined;
|
232
233
|
hide?: boolean | undefined;
|
233
234
|
positionField?: string | undefined;
|
234
235
|
}[]>;
|
@@ -247,6 +248,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
247
248
|
isHeadCheckHide?: boolean | undefined;
|
248
249
|
isShow?: boolean | undefined;
|
249
250
|
contentRender?: ((column: AnyObject, row: AnyObject) => VNodeChild) | undefined;
|
251
|
+
titleRender?: ((column: AnyObject) => VNodeChild) | undefined;
|
250
252
|
hide?: boolean | undefined;
|
251
253
|
positionField?: string | undefined;
|
252
254
|
}[];
|
@@ -754,17 +756,18 @@ declare const _default: import("vue").DefineComponent<{
|
|
754
756
|
}>;
|
755
757
|
developMode: boolean;
|
756
758
|
draggable: boolean;
|
759
|
+
fieldDescribeMode: "column" | "tooltip";
|
760
|
+
isFieldSet: boolean;
|
761
|
+
hideExpressionOption: AnyObject[];
|
757
762
|
idx: number;
|
758
763
|
isHighlight: boolean;
|
759
764
|
isHighlightRow: boolean;
|
760
|
-
isFieldSet: boolean;
|
761
|
-
fieldDescribeMode: "column" | "tooltip";
|
762
|
-
hideExpressionOption: AnyObject[];
|
763
765
|
}>;
|
764
766
|
isArray: {
|
765
767
|
(value?: any): value is any[];
|
766
768
|
<T>(value?: any): value is any[];
|
767
769
|
};
|
770
|
+
isFunction: (value: any) => value is (...args: any[]) => any;
|
768
771
|
setStyle: typeof setStyle;
|
769
772
|
isDraggableItem: typeof isDraggableItem;
|
770
773
|
HelpCircleSharp: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
@@ -898,9 +901,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
898
901
|
showSeq: boolean;
|
899
902
|
developMode: boolean;
|
900
903
|
footerFlag: boolean;
|
901
|
-
fieldDescribeMode: "column" | "tooltip";
|
902
904
|
customColumns: FieldSetColumnItem[];
|
903
905
|
showSortPriority: boolean;
|
904
906
|
showHeadFilter: boolean;
|
907
|
+
fieldDescribeMode: "column" | "tooltip";
|
905
908
|
}>;
|
906
909
|
export default _default;
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { createElementVNode, defineComponent, ref, computed, reactive, toRef, watch, openBlock, createElementBlock, createBlock, unref, withKeys, withModifiers, createCommentVNode, Fragment, renderList, normalizeStyle, withCtx, createTextVNode, toDisplayString, createVNode, normalizeClass, mergeProps, renderSlot } from 'vue';
|
1
|
+
import { createElementVNode, defineComponent, ref, computed, reactive, toRef, watch, openBlock, createElementBlock, createBlock, unref, withKeys, withModifiers, createCommentVNode, Fragment, renderList, normalizeStyle, withCtx, createTextVNode, toDisplayString, resolveDynamicComponent, createVNode, normalizeClass, mergeProps, renderSlot } from 'vue';
|
2
2
|
import { NInput, NCheckbox, NTooltip, NIcon, NSelect, NPopconfirm, NButton } from 'naive-ui';
|
3
3
|
import draggableComponent from '../../../shared/components/VueDraggable/src/vuedraggable.js';
|
4
4
|
import Row from './components/table-row.vue.js';
|
5
|
-
import { isArray, cloneDeep, isString, omit } from 'lodash-es';
|
5
|
+
import { isFunction, isArray, cloneDeep, isString, omit } from 'lodash-es';
|
6
6
|
import { isDisable, setStyle, isDraggableItem, isDraggable, getGroupTree } from './utils/index.js';
|
7
7
|
import { uuidGenerator } from '../../../shared/utils/index.js';
|
8
8
|
import { HelpCircleSharp } from '@vicons/ionicons5';
|
@@ -652,10 +652,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
652
652
|
}, {
|
653
653
|
default: withCtx(() => [createTextVNode(toDisplayString(column.title), 1)]),
|
654
654
|
_: 2
|
655
|
-
}, 1032, ["checked", "onUpdate:checked", "disabled"])) : (openBlock(),
|
655
|
+
}, 1032, ["checked", "onUpdate:checked", "disabled"])) : unref(isFunction)(column.titleRender) ? (openBlock(), createBlock(resolveDynamicComponent(() => column.titleRender(column)), {
|
656
656
|
key: 1
|
657
|
+
})) : (openBlock(), createElementBlock(Fragment, {
|
658
|
+
key: 2
|
657
659
|
}, [createTextVNode(toDisplayString(getTitle(column)), 1)], 64)), column.field === "sortPriority" ? (openBlock(), createBlock(unref(NTooltip), {
|
658
|
-
key:
|
660
|
+
key: 3,
|
659
661
|
trigger: "hover"
|
660
662
|
}, {
|
661
663
|
trigger: withCtx(() => [createVNode(unref(NIcon), {
|
@@ -383,11 +383,11 @@ declare const _default: import("vue").DefineComponent<{
|
|
383
383
|
}>;
|
384
384
|
developMode: boolean;
|
385
385
|
draggable: boolean;
|
386
|
+
fieldDescribeMode: "column" | "tooltip";
|
387
|
+
isFieldSet: boolean;
|
388
|
+
hideExpressionOption: AnyObject[];
|
386
389
|
idx: number;
|
387
390
|
isHighlight: boolean;
|
388
391
|
isHighlightRow: boolean;
|
389
|
-
isFieldSet: boolean;
|
390
|
-
fieldDescribeMode: "column" | "tooltip";
|
391
|
-
hideExpressionOption: AnyObject[];
|
392
392
|
}>;
|
393
393
|
export default _default;
|
@@ -28,6 +28,7 @@ export type FieldSetColumnItem = {
|
|
28
28
|
isHeadCheckHide?: boolean;
|
29
29
|
isShow?: boolean;
|
30
30
|
contentRender?: (column: AnyObject, row: AnyObject) => VNodeChild;
|
31
|
+
titleRender?: (column: AnyObject) => VNodeChild;
|
31
32
|
hide?: boolean;
|
32
33
|
positionField?: string;
|
33
34
|
[key: string]: any;
|
@@ -2281,6 +2281,7 @@ declare const IhoChat: SFCWithInstall<import("vue").DefineComponent<{
|
|
2281
2281
|
HappyOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
2282
2282
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
2283
2283
|
ChatFooter: import("vue").DefineComponent<{}, {
|
2284
|
+
SPACE_PLACEHOLDER: string;
|
2284
2285
|
inputRef: import("vue").Ref<HTMLDivElement | undefined>;
|
2285
2286
|
state: {
|
2286
2287
|
orgId: string | number;
|
@@ -2338,9 +2339,11 @@ declare const IhoChat: SFCWithInstall<import("vue").DefineComponent<{
|
|
2338
2339
|
isWrap: (event: KeyboardEvent) => boolean;
|
2339
2340
|
handleInput: () => void;
|
2340
2341
|
selectEmoji: (name: string) => void;
|
2342
|
+
insertSpace: () => void;
|
2341
2343
|
doUpdateFile: (file: File) => Promise<string>;
|
2342
2344
|
fileChange: (options: import("./src/types").FileOptions, chatMessageType: import("./src/constants").MESSAGE_TYPE) => Promise<void>;
|
2343
2345
|
handleMsgSend: () => Promise<void>;
|
2346
|
+
removeSpace: () => void;
|
2344
2347
|
doSendMessage: (contentInfo: import("../../shared/types").AnyObject) => Promise<void>;
|
2345
2348
|
clearInput: () => void;
|
2346
2349
|
handleRelay: ({ checkedIds, remark }: {
|
@@ -2282,6 +2282,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
2282
2282
|
HappyOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
2283
2283
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
2284
2284
|
ChatFooter: import("vue").DefineComponent<{}, {
|
2285
|
+
SPACE_PLACEHOLDER: string;
|
2285
2286
|
inputRef: import("vue").Ref<HTMLDivElement | undefined>;
|
2286
2287
|
state: {
|
2287
2288
|
orgId: string | number;
|
@@ -2339,9 +2340,11 @@ declare const _default: import("vue").DefineComponent<{
|
|
2339
2340
|
isWrap: (event: KeyboardEvent) => boolean;
|
2340
2341
|
handleInput: () => void;
|
2341
2342
|
selectEmoji: (name: string) => void;
|
2343
|
+
insertSpace: () => void;
|
2342
2344
|
doUpdateFile: (file: File) => Promise<string>;
|
2343
2345
|
fileChange: (options: import("./types").FileOptions, chatMessageType: import("./constants").MESSAGE_TYPE) => Promise<void>;
|
2344
2346
|
handleMsgSend: () => Promise<void>;
|
2347
|
+
removeSpace: () => void;
|
2345
2348
|
doSendMessage: (contentInfo: AnyObject) => Promise<void>;
|
2346
2349
|
clearInput: () => void;
|
2347
2350
|
handleRelay: ({ checkedIds, remark }: {
|
@@ -4,6 +4,7 @@ import { MESSAGE_TYPE } from '../constants';
|
|
4
4
|
import { simplifyMessage } from '../utils';
|
5
5
|
import { FileOptions } from '../types';
|
6
6
|
declare const _default: import("vue").DefineComponent<{}, {
|
7
|
+
SPACE_PLACEHOLDER: string;
|
7
8
|
inputRef: Ref<HTMLDivElement | undefined>;
|
8
9
|
state: {
|
9
10
|
orgId: string | number;
|
@@ -61,9 +62,11 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
61
62
|
isWrap: (event: KeyboardEvent) => boolean;
|
62
63
|
handleInput: () => void;
|
63
64
|
selectEmoji: (name: string) => void;
|
65
|
+
insertSpace: () => void;
|
64
66
|
doUpdateFile: (file: File) => Promise<string>;
|
65
67
|
fileChange: (options: FileOptions, chatMessageType: MESSAGE_TYPE) => Promise<void>;
|
66
68
|
handleMsgSend: () => Promise<void>;
|
69
|
+
removeSpace: () => void;
|
67
70
|
doSendMessage: (contentInfo: AnyObject) => Promise<void>;
|
68
71
|
clearInput: () => void;
|
69
72
|
handleRelay: ({ checkedIds, remark }: {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { createElementVNode, defineComponent, ref, computed, watch, withDirectives, openBlock, createElementBlock, normalizeStyle, unref, createVNode, withCtx, Fragment, toDisplayString, createCommentVNode, renderList, createBlock, createTextVNode, mergeProps, renderSlot, vShow } from 'vue';
|
1
|
+
import { createElementVNode, defineComponent, ref, computed, onMounted, watch, withDirectives, openBlock, createElementBlock, normalizeStyle, unref, createVNode, withCtx, Fragment, toDisplayString, createCommentVNode, renderList, createBlock, createTextVNode, mergeProps, renderSlot, vShow } from 'vue';
|
2
2
|
import { NButton, NIcon, NTooltip, NPopover, NUpload, NUploadTrigger } from 'naive-ui';
|
3
3
|
import ChatAdd from './ChatAdd.vue.js';
|
4
4
|
import { useData } from '../hooks/useData.js';
|
@@ -92,6 +92,7 @@ const _hoisted_24 = /* @__PURE__ */ createElementVNode("span", {
|
|
92
92
|
var _sfc_main = /* @__PURE__ */ defineComponent({
|
93
93
|
__name: "ChatFooter",
|
94
94
|
setup(__props) {
|
95
|
+
const SPACE_PLACEHOLDER = '<span style="display: inline-block;width: 1px;user-select: none;" data-space="true"></span>';
|
95
96
|
const inputRef = ref();
|
96
97
|
const {
|
97
98
|
state,
|
@@ -109,7 +110,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
109
110
|
defaultValue: [state.userInfo]
|
110
111
|
};
|
111
112
|
});
|
112
|
-
const sendBtnDisabled = computed(() => !content.value.replace(/( |\s|<br>)+/g, ""));
|
113
|
+
const sendBtnDisabled = computed(() => !content.value.replace(/( |\s|<br>|<span[^>]*data-space="true"[^>]*>[\s\S]*?<\/span>)+/g, ""));
|
113
114
|
const isForwardDisabled = computed(() => !state.msgList.some((msgItem) => msgItem.checked));
|
114
115
|
const callBtnDisabled = computed(() => state.showVideo || state.showMultipleVideo);
|
115
116
|
function handleCall(chatMessageType, checkedIds = []) {
|
@@ -154,15 +155,29 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
154
155
|
}
|
155
156
|
function handleInput() {
|
156
157
|
var _a;
|
158
|
+
if (!inputRef.value)
|
159
|
+
return;
|
157
160
|
content.value = ((_a = inputRef.value) == null ? void 0 : _a.innerHTML) || "";
|
161
|
+
insertSpace();
|
158
162
|
}
|
159
163
|
function selectEmoji(name) {
|
160
164
|
var _a;
|
161
165
|
commonEmoticons.value.unshift(name);
|
162
166
|
commonEmoticons.value = uniq(commonEmoticons.value).slice(0, 26);
|
167
|
+
if (!inputRef.value)
|
168
|
+
return;
|
163
169
|
(_a = inputRef.value) == null ? void 0 : _a.focus();
|
170
|
+
insertSpace();
|
164
171
|
document.execCommand("insertHTML", false, `<img data-msg=${name} data-type=${MESSAGE_TYPE.EMOJI} class="emoji--min" src=${emojis.findEmoji(name)} />`);
|
165
172
|
}
|
173
|
+
function insertSpace() {
|
174
|
+
if (!inputRef.value)
|
175
|
+
return;
|
176
|
+
if (!inputRef.value.innerHTML || inputRef.value.innerHTML === "<br>") {
|
177
|
+
Array.from(inputRef.value.childNodes).forEach((child) => child.remove());
|
178
|
+
document.execCommand("insertHTML", false, SPACE_PLACEHOLDER);
|
179
|
+
}
|
180
|
+
}
|
166
181
|
async function doUpdateFile(file) {
|
167
182
|
const formData = new FormData();
|
168
183
|
formData.append("sender", state.userInfo.id);
|
@@ -191,13 +206,14 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
191
206
|
});
|
192
207
|
}
|
193
208
|
async function handleMsgSend() {
|
209
|
+
if (sendBtnDisabled.value)
|
210
|
+
return console.log("\u8BF7\u8F93\u5165\u5185\u5BB9");
|
211
|
+
removeSpace();
|
194
212
|
const {
|
195
213
|
innerHTML = "",
|
196
214
|
innerText = "",
|
197
215
|
outerText = ""
|
198
216
|
} = inputRef.value || {};
|
199
|
-
if (sendBtnDisabled.value)
|
200
|
-
return console.log("\u8BF7\u8F93\u5165\u5185\u5BB9");
|
201
217
|
let chatMessageType = MESSAGE_TYPE.TEXT;
|
202
218
|
let msg = "";
|
203
219
|
if (innerHTML) {
|
@@ -259,6 +275,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
259
275
|
origin: "btn"
|
260
276
|
});
|
261
277
|
}
|
278
|
+
function removeSpace() {
|
279
|
+
if (!inputRef.value)
|
280
|
+
return;
|
281
|
+
const spaceHolders = inputRef.value.querySelectorAll('[data-space="true"]');
|
282
|
+
spaceHolders.forEach((space) => space.remove());
|
283
|
+
}
|
262
284
|
async function doSendMessage(contentInfo) {
|
263
285
|
const {
|
264
286
|
chatMessageType = MESSAGE_TYPE.TEXT,
|
@@ -288,7 +310,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
288
310
|
}
|
289
311
|
function clearInput() {
|
290
312
|
if (inputRef.value) {
|
291
|
-
inputRef.value.innerHTML =
|
313
|
+
inputRef.value.innerHTML = SPACE_PLACEHOLDER;
|
292
314
|
}
|
293
315
|
content.value = "";
|
294
316
|
}
|
@@ -323,6 +345,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
323
345
|
});
|
324
346
|
state.isForward = false;
|
325
347
|
}
|
348
|
+
onMounted(() => {
|
349
|
+
if (inputRef.value) {
|
350
|
+
inputRef.value.innerHTML = SPACE_PLACEHOLDER;
|
351
|
+
}
|
352
|
+
});
|
326
353
|
watch(() => [state.currentReferenceMsg, state.currentReEditMsg], ([currentReferenceMsg, currentReEditMsg]) => {
|
327
354
|
var _a;
|
328
355
|
if (currentReferenceMsg || currentReEditMsg) {
|
@@ -225,7 +225,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
225
225
|
round: "",
|
226
226
|
size: 100,
|
227
227
|
onClickCapture: _cache[0] || (_cache[0] = ($event) => showLargeAvatar.value = true)
|
228
|
-
}, null, 8, ["src"]), createCommentVNode(' <n-upload abstract accept="image/*" @change="onChange">\n <n-upload-trigger #="{ handleClick }" abstract>\n <n-button\n circle\n secondary\n class="edit-avatar"\n v-show="userDetail.id === state.userInfo.id"\n @click="handleClick"\n >\n <template #icon>\n <n-icon size="16" color="#666666" :component="Camera" />\n </template>\n </n-button>\n </n-upload-trigger>\n </n-upload> '), createElementVNode("div", _hoisted_4, [createElementVNode("h4", null, [createElementVNode("label", _hoisted_5, toDisplayString(userDetail.name), 1), withDirectives(createElementVNode("label", {
|
228
|
+
}, null, 8, ["src"]), createCommentVNode(' <n-upload abstract accept="image/*" @change="onChange">\r\n <n-upload-trigger #="{ handleClick }" abstract>\r\n <n-button\r\n circle\r\n secondary\r\n class="edit-avatar"\r\n v-show="userDetail.id === state.userInfo.id"\r\n @click="handleClick"\r\n >\r\n <template #icon>\r\n <n-icon size="16" color="#666666" :component="Camera" />\r\n </template>\r\n </n-button>\r\n </n-upload-trigger>\r\n </n-upload> '), createElementVNode("div", _hoisted_4, [createElementVNode("h4", null, [createElementVNode("label", _hoisted_5, toDisplayString(userDetail.name), 1), withDirectives(createElementVNode("label", {
|
229
229
|
class: normalizeClass(["iho-chatRole", unref(isDoctorRole)(userDetail.roleInfo) ? "isDoctor" : ""])
|
230
230
|
}, toDisplayString(unref(getRoleName)(userDetail.roleInfo)), 3), [[vShow, unref(getRoleName)(userDetail.roleInfo)]])]), createElementVNode("p", null, toDisplayString(userDetail.orgName), 1)]), createVNode(unref(NButton), {
|
231
231
|
strong: "",
|
@@ -65,6 +65,7 @@ function useDraggable(target, options = {}) {
|
|
65
65
|
topRightElement();
|
66
66
|
}
|
67
67
|
};
|
68
|
+
const clamp = (val, min, max) => Math.max(min, Math.min(val, max));
|
68
69
|
const onMouseDown = (e) => {
|
69
70
|
var _a;
|
70
71
|
if (!target.value)
|
@@ -87,12 +88,20 @@ function useDraggable(target, options = {}) {
|
|
87
88
|
};
|
88
89
|
const onMouseMove = (e) => {
|
89
90
|
var _a;
|
90
|
-
if (!isDragging.value)
|
91
|
+
if (!isDragging.value || !target.value)
|
91
92
|
return;
|
92
93
|
const dx = e.clientX - startMousePos.value.x;
|
93
94
|
const dy = e.clientY - startMousePos.value.y;
|
94
|
-
|
95
|
-
|
95
|
+
const {
|
96
|
+
width,
|
97
|
+
height
|
98
|
+
} = target.value.getBoundingClientRect();
|
99
|
+
const minX = 0;
|
100
|
+
const minY = 0;
|
101
|
+
const maxX = window.innerWidth - width;
|
102
|
+
const maxY = window.innerHeight - height;
|
103
|
+
x.value = clamp(startPos.value.x + dx, minX, maxX);
|
104
|
+
y.value = clamp(startPos.value.y + dy, minY, maxY);
|
96
105
|
updatePosition();
|
97
106
|
(_a = options.onDrag) == null ? void 0 : _a.call(options, {
|
98
107
|
x: x.value,
|
package/es/env.d.ts
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
/// <reference types="vite/client" />
|
2
|
-
|
3
|
-
interface ImportMetaEnv {
|
4
|
-
readonly VITE_APP_TYPE: string;
|
5
|
-
// 更多环境变量...
|
6
|
-
}
|
7
|
-
|
8
|
-
interface ImportMeta {
|
9
|
-
readonly env: ImportMetaEnv;
|
10
|
-
}
|
11
|
-
|
12
|
-
declare module '*.vue' {
|
13
|
-
// @ts-ignore
|
14
|
-
import type { App, defineComponent } from 'vue';
|
15
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
16
|
-
// // const component: DefineComponent<{}, {}, any>
|
17
|
-
const component: ReturnType<typeof defineComponent> & {
|
18
|
-
install(app: App): void;
|
19
|
-
};
|
20
|
-
// @ts-ignore
|
21
|
-
export default component;
|
22
|
-
}
|
23
|
-
|
24
|
-
declare module '*.js';
|
25
|
-
|
1
|
+
/// <reference types="vite/client" />
|
2
|
+
|
3
|
+
interface ImportMetaEnv {
|
4
|
+
readonly VITE_APP_TYPE: string;
|
5
|
+
// 更多环境变量...
|
6
|
+
}
|
7
|
+
|
8
|
+
interface ImportMeta {
|
9
|
+
readonly env: ImportMetaEnv;
|
10
|
+
}
|
11
|
+
|
12
|
+
declare module '*.vue' {
|
13
|
+
// @ts-ignore
|
14
|
+
import type { App, defineComponent } from 'vue';
|
15
|
+
// // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
16
|
+
// // const component: DefineComponent<{}, {}, any>
|
17
|
+
const component: ReturnType<typeof defineComponent> & {
|
18
|
+
install(app: App): void;
|
19
|
+
};
|
20
|
+
// @ts-ignore
|
21
|
+
export default component;
|
22
|
+
}
|
23
|
+
|
24
|
+
declare module '*.js';
|
25
|
+
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "cnhis-design-vue",
|
3
|
-
"version": "3.3.3-release.
|
3
|
+
"version": "3.3.3-release.8",
|
4
4
|
"license": "ISC",
|
5
5
|
"module": "./es/components/index.js",
|
6
6
|
"main": "./es/components/index.js",
|
@@ -73,5 +73,5 @@
|
|
73
73
|
"iOS 7",
|
74
74
|
"last 3 iOS versions"
|
75
75
|
],
|
76
|
-
"gitHead": "
|
76
|
+
"gitHead": "1c27f8a457305e58e69469ef213671114ea1dbde"
|
77
77
|
}
|