im-ui-mobile 0.1.30 → 0.1.31

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 (45) hide show
  1. package/components/im-cell/im-cell.vue +1 -1
  2. package/package.json +1 -1
  3. package/types/components/avatar.d.ts +7 -1
  4. package/types/components/badge.d.ts +20 -8
  5. package/types/components/button.d.ts +8 -1
  6. package/types/components/card.d.ts +9 -5
  7. package/types/components/cell-group.d.ts +7 -1
  8. package/types/components/cell-switch.d.ts +13 -6
  9. package/types/components/cell.d.ts +8 -1
  10. package/types/components/chat-item.d.ts +8 -1
  11. package/types/components/checkbox-group.d.ts +11 -10
  12. package/types/components/checkbox.d.ts +21 -14
  13. package/types/components/col.d.ts +10 -4
  14. package/types/components/context-menu.d.ts +9 -1
  15. package/types/components/dialog.d.ts +21 -20
  16. package/types/components/double-tap-view.d.ts +12 -6
  17. package/types/components/emoji-picker.d.ts +31 -22
  18. package/types/components/friend-item.d.ts +2 -0
  19. package/types/components/group-item.d.ts +8 -1
  20. package/types/components/group-member-selector.d.ts +9 -1
  21. package/types/components/group-rtc-join.d.ts +9 -1
  22. package/types/components/icon.d.ts +28 -12
  23. package/types/components/information.d.ts +21 -0
  24. package/types/components/input.d.ts +20 -16
  25. package/types/components/link.d.ts +7 -1
  26. package/types/components/loading.d.ts +8 -1
  27. package/types/components/mention-picker.d.ts +8 -1
  28. package/types/components/message-action.d.ts +21 -11
  29. package/types/components/message-item.d.ts +8 -1
  30. package/types/components/message-list.d.ts +10 -3
  31. package/types/components/modal.d.ts +20 -19
  32. package/types/components/nav-bar.d.ts +9 -2
  33. package/types/components/parse.d.ts +9 -4
  34. package/types/components/popup.d.ts +23 -16
  35. package/types/components/read-receipt.d.ts +9 -1
  36. package/types/components/row.d.ts +9 -3
  37. package/types/components/search.d.ts +12 -6
  38. package/types/components/select.d.ts +5 -4
  39. package/types/components/sku.d.ts +25 -21
  40. package/types/components/stepper.d.ts +11 -7
  41. package/types/components/tabs-tab-pane.d.ts +9 -6
  42. package/types/components/tabs.d.ts +13 -9
  43. package/types/components/upload.d.ts +19 -20
  44. package/types/components/voice-input.d.ts +7 -1
  45. package/types/components/sample.d.ts +0 -18
@@ -96,7 +96,7 @@
96
96
  </template>
97
97
 
98
98
  <script setup lang="ts">
99
- import { ref, computed, watch, nextTick, useSlots } from 'vue'
99
+ import { computed, useSlots } from 'vue'
100
100
 
101
101
  // 定义类型
102
102
  type CellType = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "im-ui-mobile",
3
- "version": "0.1.30",
3
+ "version": "0.1.31",
4
4
  "description": "A Vue3.0 + Typescript instant messaging component library for Uniapp",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -15,4 +15,10 @@ declare interface _Avatar {
15
15
  }
16
16
  }
17
17
 
18
- export declare const Avatar: _Avatar
18
+ export declare const Avatar: _Avatar
19
+
20
+ export default Avatar
21
+
22
+ export type {
23
+ AvatarProps
24
+ }
@@ -27,16 +27,28 @@ declare interface BadgeProps {
27
27
  showZero?: boolean
28
28
  }
29
29
 
30
+ declare interface BadgeEmits {
31
+ (e: 'click', event: TouchEvent): void
32
+ }
33
+
34
+ declare interface BadgeMethods {
35
+ /** 获取当前值 */
36
+ getValue: () => string | number
37
+ }
38
+
30
39
  declare interface _Badge {
31
40
  new(): {
32
41
  $props: AllowedComponentProps & VNodeProps & BadgeProps
33
- $emit: {
34
- /** 点击事件 */
35
- click: (event: MouseEvent) => void
36
- }
37
- }
38
- /** 获取当前值 */
39
- getValue: () => string | number
42
+ $emit: BadgeEmits
43
+ } & BadgeMethods
40
44
  }
41
45
 
42
- export declare const Badge: _Badge
46
+ export declare const Badge: _Badge
47
+
48
+ export default Badge
49
+
50
+ export type {
51
+ BadgeProps,
52
+ BadgeEmits,
53
+ BadgeMethods
54
+ }
@@ -84,4 +84,11 @@ declare interface _Button {
84
84
  }
85
85
  }
86
86
 
87
- export declare const Button: _Button
87
+ export declare const Button: _Button
88
+
89
+ export default Button
90
+
91
+ export type {
92
+ ButtonProps,
93
+ ButtonEmits
94
+ }
@@ -118,8 +118,12 @@ declare interface _Card {
118
118
  // 导出卡片组件
119
119
  export declare const Card: _Card
120
120
 
121
- // 导出类型(用于单独使用)
122
- export declare type CardPropsType = CardProps
123
- export declare type CardActionType = CardAction
124
- export declare type CardEventsType = CardEvents
125
- export declare type CardSlotsType = CardSlots
121
+ export default Card
122
+
123
+ // 导出类型
124
+ export type {
125
+ CardProps,
126
+ CardAction,
127
+ CardEvents,
128
+ CardSlots
129
+ }
@@ -11,4 +11,10 @@ declare interface _CellGroup {
11
11
  }
12
12
  }
13
13
 
14
- export declare const CellGroup: _CellGroup
14
+ export declare const CellGroup: _CellGroup
15
+
16
+ export default CellGroup
17
+
18
+ export type {
19
+ CellGroupSlots
20
+ }
@@ -1,7 +1,7 @@
1
1
  import { AllowedComponentProps, VNodeProps } from 'vue'
2
2
  import { ImCellProps } from './im-cell'
3
3
 
4
- export interface ImCellSwitchProps extends Omit<ImCellProps, 'arrow'> {
4
+ export interface CellSwitchProps extends Omit<ImCellProps, 'arrow'> {
5
5
  // 必须的属性
6
6
  checked?: boolean
7
7
 
@@ -14,18 +14,25 @@ export interface ImCellSwitchProps extends Omit<ImCellProps, 'arrow'> {
14
14
  beforeChange?: (newValue: boolean) => Promise<boolean> | boolean
15
15
  }
16
16
 
17
- export interface ImCellSwitchEmits {
17
+ export interface CellSwitchEmits {
18
18
  (e: 'update:checked', value: boolean): void
19
19
  (e: 'change', value: boolean): void
20
20
  (e: 'click', event: TouchEvent): void
21
21
  (e: 'longpress', event: TouchEvent): void
22
22
  }
23
23
 
24
- declare interface _ImCellSwitch {
24
+ declare interface _CellSwitch {
25
25
  new(): {
26
- $props: AllowedComponentProps & VNodeProps & ImCellSwitchProps
27
- $emit: ImCellSwitchEmits
26
+ $props: AllowedComponentProps & VNodeProps & CellSwitchProps
27
+ $emit: CellSwitchEmits
28
28
  }
29
29
  }
30
30
 
31
- export declare const ImCellSwitch: _ImCellSwitch
31
+ export declare const CellSwitch: _CellSwitch
32
+
33
+ export default CellSwitch
34
+
35
+ export type {
36
+ CellSwitchProps,
37
+ CellSwitchEmits
38
+ }
@@ -43,4 +43,11 @@ declare interface _Cell {
43
43
  }
44
44
  }
45
45
 
46
- export declare const Cell: _Cell
46
+ export declare const Cell: _Cell
47
+
48
+ export default Cell
49
+
50
+ export type {
51
+ CellProps,
52
+ CellEvents
53
+ }
@@ -18,4 +18,11 @@ declare interface _ChatItem {
18
18
  }
19
19
  }
20
20
 
21
- export declare const ChatItem: _ChatItem
21
+ export declare const ChatItem: _ChatItem
22
+
23
+ export default ChatItem
24
+
25
+ export type {
26
+ ChatItemProps,
27
+ ChatItemEmits
28
+ }
@@ -3,7 +3,7 @@ import { AllowedComponentProps, VNodeProps } from '../common'
3
3
  /**
4
4
  * 复选框组属性接口
5
5
  */
6
- declare interface _CheckboxGroupProps {
6
+ declare interface CheckboxGroupProps {
7
7
  /** 绑定值数组 */
8
8
  modelValue?: Array<string | number>
9
9
  /** 是否禁用整个组 */
@@ -33,7 +33,7 @@ declare interface _CheckboxGroupProps {
33
33
  /**
34
34
  * 复选框组事件接口
35
35
  */
36
- declare interface _CheckboxGroupEmits {
36
+ declare interface CheckboxGroupEmits {
37
37
  (e: 'update:modelValue', value: Array<string | number>): void
38
38
  (e: 'change', value: Array<string | number>): void
39
39
  }
@@ -41,7 +41,7 @@ declare interface _CheckboxGroupEmits {
41
41
  /**
42
42
  * 复选框注入上下文接口
43
43
  */
44
- declare interface _CheckboxGroupContext {
44
+ declare interface CheckboxGroupContext {
45
45
  modelValue: Array<string | number>
46
46
  disabled: boolean
47
47
  size: CheckboxSize
@@ -51,10 +51,10 @@ declare interface _CheckboxGroupContext {
51
51
  unregisterCheckbox?: (value: string | number) => void
52
52
  }
53
53
 
54
- declare interface _CheckboxGroup {
54
+ declare interface CheckboxGroup {
55
55
  new(): {
56
- $props: AllowedComponentProps & VNodeProps & _CheckboxGroupProps
57
- $emit: _CheckboxGroupEmits
56
+ $props: AllowedComponentProps & VNodeProps & CheckboxGroupProps
57
+ $emit: CheckboxGroupEmits
58
58
  }
59
59
  }
60
60
 
@@ -64,7 +64,8 @@ export declare const Checkbox: _Checkbox
64
64
  export default Checkbox
65
65
 
66
66
  // 导出类型
67
-
68
- export declare type CheckboxGroupProps = _CheckboxGroupProps
69
- export declare type CheckboxGroupEmits = _CheckboxGroupEmits
70
- export declare type CheckboxGroupContext = _CheckboxGroupContext
67
+ export type {
68
+ CheckboxGroupProps,
69
+ CheckboxGroupEmits,
70
+ CheckboxGroupContext
71
+ }
@@ -3,32 +3,32 @@ import { AllowedComponentProps, VNodeProps } from '../common'
3
3
  /**
4
4
  * 复选框大小类型
5
5
  */
6
- export type CheckboxSize = 'small' | 'medium' | 'large' | ''
6
+ declare type CheckboxSize = 'small' | 'medium' | 'large' | ''
7
7
 
8
8
  /**
9
9
  * 复选框类型
10
10
  */
11
- export type CheckboxType = 'square' | 'circle' | 'switch' | 'button'
11
+ declare type CheckboxType = 'square' | 'circle' | 'switch' | 'button'
12
12
 
13
13
  /**
14
14
  * 排列方向
15
15
  */
16
- export type CheckboxDirection = 'horizontal' | 'vertical'
16
+ declare type CheckboxDirection = 'horizontal' | 'vertical'
17
17
 
18
18
  /**
19
19
  * 角标位置
20
20
  */
21
- export type BadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'
21
+ declare type BadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'
22
22
 
23
23
  /**
24
24
  * 角标类型
25
25
  */
26
- export type BadgeType = 'dot' | 'number' | 'text'
26
+ declare type BadgeType = 'dot' | 'number' | 'text'
27
27
 
28
28
  /**
29
29
  * 复选框基础属性接口
30
30
  */
31
- declare interface _CheckboxProps {
31
+ declare interface CheckboxProps {
32
32
  /** 绑定值 */
33
33
  modelValue: boolean
34
34
  /** 复选框值 */
@@ -58,7 +58,7 @@ declare interface _CheckboxProps {
58
58
  /** 是否有边框 */
59
59
  bordered?: boolean
60
60
  /** 角标配置 */
61
- badge?: _CheckboxBadgeProps
61
+ badge?: CheckboxBadgeProps
62
62
  /** 是否可点击 */
63
63
  clickable?: boolean
64
64
  /** 自定义样式 */
@@ -68,7 +68,7 @@ declare interface _CheckboxProps {
68
68
  /**
69
69
  * 角标属性接口
70
70
  */
71
- declare interface _CheckboxBadgeProps {
71
+ declare interface CheckboxBadgeProps {
72
72
  /** 角标类型 */
73
73
  type?: BadgeType
74
74
  /** 角标值(用于number/text类型) */
@@ -84,7 +84,7 @@ declare interface _CheckboxBadgeProps {
84
84
  /**
85
85
  * 复选框事件接口
86
86
  */
87
- declare interface _CheckboxEmits {
87
+ declare interface CheckboxEmits {
88
88
  (e: 'update:modelValue', value: boolean | Array<string | number | boolean>): void
89
89
  (e: 'change', value: boolean | Array<string | number | boolean>): void
90
90
  (e: 'click', event: Event): void
@@ -92,8 +92,8 @@ declare interface _CheckboxEmits {
92
92
 
93
93
  declare interface _Checkbox {
94
94
  new(): {
95
- $props: AllowedComponentProps & VNodeProps & _CheckboxProps
96
- $emit: _CheckboxEmits
95
+ $props: AllowedComponentProps & VNodeProps & CheckboxProps
96
+ $emit: CheckboxEmits
97
97
  }
98
98
  }
99
99
 
@@ -103,6 +103,13 @@ export declare const Checkbox: _Checkbox
103
103
  export default Checkbox
104
104
 
105
105
  // 导出类型
106
- export declare type CheckboxProps = _CheckboxProps
107
- export declare type CheckboxBadgeProps = _CheckboxBadgeProps
108
- export declare type CheckboxEmits = _CheckboxEmits
106
+ export type {
107
+ CheckboxSize,
108
+ CheckboxType,
109
+ CheckboxDirection,
110
+ BadgePosition,
111
+ BadgeType,
112
+ CheckboxProps,
113
+ CheckboxBadgeProps,
114
+ CheckboxEmits
115
+ }
@@ -7,14 +7,14 @@ declare interface ColProps {
7
7
  order?: number | string
8
8
  alignSelf?: 'auto' | 'start' | 'end' | 'center' | 'stretch'
9
9
  flex?: string
10
-
10
+
11
11
  // 响应式配置
12
12
  xs?: number | string
13
13
  sm?: number | string
14
14
  md?: number | string
15
15
  lg?: number | string
16
16
  xl?: number | string
17
-
17
+
18
18
  // 样式配置
19
19
  width?: string
20
20
  height?: string
@@ -23,7 +23,7 @@ declare interface ColProps {
23
23
  bgColor?: string
24
24
  borderColor?: string
25
25
  borderRadius?: string
26
-
26
+
27
27
  // 点击事件
28
28
  clickable?: boolean
29
29
  }
@@ -34,4 +34,10 @@ declare interface _Col {
34
34
  }
35
35
  }
36
36
 
37
- export declare const Col: _Col
37
+ export declare const Col: _Col
38
+
39
+ export default Col
40
+
41
+ export type {
42
+ ColProps
43
+ }
@@ -20,4 +20,12 @@ declare interface _ContextMenu {
20
20
  }
21
21
  }
22
22
 
23
- export declare const ContextMenu: _ContextMenu
23
+ export declare const ContextMenu: _ContextMenu
24
+
25
+ export default ContextMenu
26
+
27
+ export type {
28
+ ContextMenuProps,
29
+ ContextMenuEmits,
30
+ ContextMenuSlots
31
+ }
@@ -76,6 +76,21 @@ declare interface DialogProps {
76
76
  defaultValue?: string
77
77
  }
78
78
 
79
+ declare interface DialogEmits {
80
+ (e: 'update:show', value: boolean): void
81
+ (e: 'update:modelValue', value: boolean): void
82
+ (e: 'open'): void
83
+ (e: 'opened'): void
84
+ (e: 'close'): void
85
+ (e: 'closed'): void
86
+ (e: 'click-overlay'): void
87
+ (e: 'confirm', value?: string): void
88
+ (e: 'cancel'): void
89
+ (e: 'input', value: string): void
90
+ (e: 'focus'): void
91
+ (e: 'blur'): void
92
+ }
93
+
79
94
  // 对话框组件方法
80
95
  declare interface DialogMethods {
81
96
  // 打开对话框
@@ -94,32 +109,18 @@ declare interface DialogMethods {
94
109
  declare interface _Dialog {
95
110
  new(): {
96
111
  $props: AllowedComponentProps & VNodeProps & DialogProps
97
-
98
- $emit: {
99
- 'update:show': (value: boolean) => void
100
- 'update:modelValue': (value: boolean) => void
101
- 'open': () => void
102
- 'opened': () => void
103
- 'close': () => void
104
- 'closed': () => void
105
- 'click-overlay': () => void
106
- 'confirm': (value?: string) => void
107
- 'cancel': () => void
108
- 'input': (value: string) => void
109
- 'focus': () => void
110
- 'blur': () => void
111
- }
112
+ $emit: DialogEmits
112
113
  } & DialogMethods
113
114
  }
114
115
 
115
116
  export declare const Dialog: _Dialog
116
117
 
118
+ // 默认导出
119
+ export default Dialog
120
+
117
121
  // 导出类型
118
122
  export type {
119
- DialogType,
120
123
  DialogProps,
124
+ DialogEmits,
121
125
  DialogMethods
122
- }
123
-
124
- // 默认导出
125
- export default Dialog
126
+ }
@@ -16,21 +16,27 @@ declare interface DoubleTapViewExpose {
16
16
  reset: () => void
17
17
  }
18
18
 
19
+ declare interface DoubleTapViewEmits {
20
+ /** 单击事件 */
21
+ 'single-tap': (event: any) => void
22
+ /** 双击事件 */
23
+ 'double-tap': (event: any) => void
24
+ }
25
+
19
26
  declare interface _DoubleTapView {
20
27
  new(): {
21
28
  $props: AllowedComponentProps & VNodeProps & DoubleTapViewProps
22
- $emit: {
23
- /** 单击事件 */
24
- 'single-tap': (event: any) => void
25
- /** 双击事件 */
26
- 'double-tap': (event: any) => void
27
- }
29
+ $emit: DoubleTapViewEmits
28
30
  } & DoubleTapViewExpose
29
31
  }
30
32
 
31
33
  export declare const DoubleTapView: _DoubleTapView
32
34
 
35
+ // 默认导出
36
+ export default DoubleTapView
37
+
33
38
  export type {
34
39
  DoubleTapViewProps,
40
+ DoubleTapViewEmits,
35
41
  DoubleTapViewExpose
36
42
  }
@@ -23,12 +23,12 @@ declare interface EmojiPickerProps {
23
23
  visible?: boolean
24
24
  theme?: 'light' | 'dark' | 'card'
25
25
  size?: 'small' | 'medium' | 'large'
26
-
26
+
27
27
  // 数据源
28
28
  emojis?: Emoji[]
29
29
  categories?: EmojiCategory[]
30
30
  recentEmojis?: Emoji[]
31
-
31
+
32
32
  // 配置选项
33
33
  showRecent?: boolean
34
34
  showTabs?: boolean
@@ -41,30 +41,30 @@ declare interface EmojiPickerProps {
41
41
  showDeleteButton?: boolean
42
42
  showSendButton?: boolean
43
43
  showScrollbar?: boolean
44
-
44
+
45
45
  // 搜索功能
46
46
  enableSearch?: boolean
47
47
  searchPlaceholder?: string
48
48
  searchIconSize?: number
49
49
  searchIconColor?: string
50
50
  autoFocus?: boolean
51
-
51
+
52
52
  // 布局配置
53
53
  columns?: number
54
54
  emojiSize?: string | number
55
55
  spacing?: string | number
56
56
  borderRadius?: string | number
57
-
57
+
58
58
  // 样式控制
59
59
  height?: string | number
60
60
  backgroundColor?: string
61
61
  categoryColor?: string
62
-
62
+
63
63
  // 交互配置
64
64
  maxRecentCount?: number
65
65
  allowMultiple?: boolean
66
66
  selectedEmojis?: Emoji[]
67
-
67
+
68
68
  // 空状态
69
69
  emptyIconSize?: number
70
70
  emptyIconColor?: string
@@ -76,20 +76,20 @@ declare interface EmojiPickerEvents {
76
76
  'update:visible': [visible: boolean]
77
77
  'open': []
78
78
  'close': []
79
-
79
+
80
80
  // 表情事件
81
81
  'select': [emoji: Emoji]
82
82
  'delete': [emoji: Emoji]
83
83
  'send': [emoji: Emoji]
84
84
  'longpress': [emoji: Emoji]
85
-
85
+
86
86
  // 搜索事件
87
87
  'search': [keyword: string]
88
88
  'search-clear': []
89
-
89
+
90
90
  // 最近使用
91
91
  'recent-clear': []
92
-
92
+
93
93
  // 分类切换
94
94
  'tab-change': [tabId: string]
95
95
  }
@@ -99,23 +99,32 @@ declare interface EmojiPickerSlots {
99
99
  footer?: () => any
100
100
  }
101
101
 
102
+ declare interface EmojiPickerExpose {
103
+ open: () => void
104
+ close: () => void
105
+ insertEmoji: (emoji: Emoji) => void
106
+ clearRecentEmojis: () => void
107
+ getRecentEmojis: () => Emoji[]
108
+ searchEmoji: (keyword: string) => Emoji[]
109
+ }
110
+
102
111
  declare interface _EmojiPicker {
103
112
  new(): {
104
113
  $props: AllowedComponentProps & VNodeProps & EmojiPickerProps
105
114
  $emit: EmojiPickerEvents
106
115
  $slots: EmojiPickerSlots
107
- $exposed?: {
108
- open: () => void
109
- close: () => void
110
- insertEmoji: (emoji: Emoji) => void
111
- clearRecentEmojis: () => void
112
- getRecentEmojis: () => Emoji[]
113
- searchEmoji: (keyword: string) => Emoji[]
114
- }
116
+ $exposed?: EmojiPickerExpose
115
117
  }
116
118
  }
117
119
 
118
120
  export declare const EmojiPicker: _EmojiPicker
119
- export declare type EmojiPickerPropsType = EmojiPickerProps
120
- export declare type EmojiType = Emoji
121
- export declare type EmojiCategoryType = EmojiCategory
121
+
122
+ export default ContextMenu
123
+
124
+ export type {
125
+ Emoji,
126
+ EmojiCategory,
127
+ EmojiPickerProps,
128
+ EmojiPickerEvents,
129
+ EmojiPickerSlots
130
+ }
@@ -18,6 +18,8 @@ declare interface _FriendItem {
18
18
 
19
19
  export declare const FriendItem: _FriendItem
20
20
 
21
+ export default FriendItem
22
+
21
23
  export type {
22
24
  FriendItemProps,
23
25
  FriendItemSlots
@@ -15,4 +15,11 @@ declare interface _GroupItem {
15
15
  }
16
16
  }
17
17
 
18
- export declare const GroupItem: _GroupItem
18
+ export declare const GroupItem: _GroupItem
19
+
20
+ export default GroupItem
21
+
22
+ export type {
23
+ GroupItemProps,
24
+ GroupItemEmits
25
+ }
@@ -28,4 +28,12 @@ declare interface _GroupMemberSelector {
28
28
  open: () => void
29
29
  }
30
30
 
31
- export declare const GroupMemberSelector: _GroupMemberSelector
31
+ export declare const GroupMemberSelector: _GroupMemberSelector
32
+
33
+ export default GroupMemberSelector
34
+
35
+ export type {
36
+ Member,
37
+ GroupMemberSelectorProps,
38
+ GroupMemberSelectorEmits
39
+ }
@@ -28,4 +28,12 @@ declare interface _GroupRtcJoin {
28
28
  open: (userInfo: UserInfo, rtcInfo: RtcInfo) => void
29
29
  }
30
30
 
31
- export declare const GroupRtcJoin: _GroupRtcJoin
31
+ export declare const GroupRtcJoin: _GroupRtcJoin
32
+
33
+ export default GroupRtcJoin
34
+
35
+ export type {
36
+ RtcInfo,
37
+ GroupRtcJoinProps,
38
+ GroupRtcJoinEmits
39
+ }