@uzum-tech/ui 1.12.17 → 1.12.19
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.js +146 -35
- package/dist/index.prod.js +3 -3
- package/es/chat/src/ChatParts/ChatAttachment.d.ts +6 -5
- package/es/chat/src/ChatParts/ChatAttachment.js +3 -3
- package/es/data-table/src/DataTable.d.ts +2 -0
- package/es/data-table/src/DataTable.js +1 -0
- package/es/data-table/src/TableParts/Body.d.ts +1 -0
- package/es/data-table/src/TableParts/Body.js +3 -2
- package/es/data-table/src/TableParts/Cell.d.ts +2 -0
- package/es/data-table/src/TableParts/Cell.js +62 -9
- package/es/data-table/src/interface.d.ts +2 -0
- package/es/data-table/src/interface.js +1 -1
- package/es/header/src/Header.d.ts +24 -6
- package/es/header/src/Header.js +36 -11
- package/es/header/src/HeaderActions.d.ts +54 -42
- package/es/header/src/HeaderActions.js +67 -38
- package/es/header/src/HeaderNavigation.d.ts +3 -1
- package/es/header/src/HeaderNavigation.js +6 -4
- package/es/header/src/interface.d.ts +24 -1
- package/es/header/src/utils.d.ts +1 -1
- package/es/header/src/utils.js +1 -1
- package/es/version.d.ts +1 -1
- package/es/version.js +1 -1
- package/lib/chat/src/ChatParts/ChatAttachment.d.ts +6 -5
- package/lib/chat/src/ChatParts/ChatAttachment.js +3 -3
- package/lib/data-table/src/DataTable.d.ts +2 -0
- package/lib/data-table/src/DataTable.js +1 -0
- package/lib/data-table/src/TableParts/Body.d.ts +1 -0
- package/lib/data-table/src/TableParts/Body.js +3 -2
- package/lib/data-table/src/TableParts/Cell.d.ts +2 -0
- package/lib/data-table/src/TableParts/Cell.js +62 -9
- package/lib/data-table/src/interface.d.ts +2 -0
- package/lib/data-table/src/interface.js +1 -1
- package/lib/header/src/Header.d.ts +24 -6
- package/lib/header/src/Header.js +35 -10
- package/lib/header/src/HeaderActions.d.ts +54 -42
- package/lib/header/src/HeaderActions.js +67 -38
- package/lib/header/src/HeaderNavigation.d.ts +3 -1
- package/lib/header/src/HeaderNavigation.js +6 -4
- package/lib/header/src/interface.d.ts +24 -1
- package/lib/header/src/utils.d.ts +1 -1
- package/lib/header/src/utils.js +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/volar.d.ts +22 -22
- package/web-types.json +80 -12
- package/README.md +0 -73
|
@@ -30,7 +30,8 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
30
30
|
type: Object,
|
|
31
31
|
required: true
|
|
32
32
|
},
|
|
33
|
-
renderCell: Function
|
|
33
|
+
renderCell: Function,
|
|
34
|
+
defaultEmptyValue: [String, Function]
|
|
34
35
|
},
|
|
35
36
|
render() {
|
|
36
37
|
var _a;
|
|
@@ -43,12 +44,28 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
43
44
|
const isEditable = typeof editable === 'function' ? editable(row) : editable;
|
|
44
45
|
if (render && !isSummary) {
|
|
45
46
|
let cellValue = render(row, this.index);
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if (cellValue == null || cellValue === false) {
|
|
48
|
+
const { defaultEmptyValue } = this;
|
|
49
|
+
if (defaultEmptyValue !== undefined) {
|
|
50
|
+
if (typeof defaultEmptyValue === 'function') {
|
|
51
|
+
cell = defaultEmptyValue();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
cell = defaultEmptyValue;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
cell = '';
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
|
-
|
|
61
|
+
else {
|
|
62
|
+
if (mask && cellValue !== null && cellValue !== undefined) {
|
|
63
|
+
if (typeof cellValue === 'string' || typeof cellValue === 'number') {
|
|
64
|
+
cellValue = (0, use_mask_1.processMaskedValue)(cellValue, mask);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
cell = cellValue;
|
|
68
|
+
}
|
|
52
69
|
}
|
|
53
70
|
else if (isEditable && !isSummary) {
|
|
54
71
|
const { placeholder } = column;
|
|
@@ -162,7 +179,25 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
162
179
|
if (mask && cellValue !== null && cellValue !== undefined) {
|
|
163
180
|
cellValue = (0, use_mask_1.processMaskedValue)(String(cellValue), mask);
|
|
164
181
|
}
|
|
165
|
-
|
|
182
|
+
if (cellValue === null ||
|
|
183
|
+
cellValue === undefined ||
|
|
184
|
+
cellValue === false) {
|
|
185
|
+
const { defaultEmptyValue } = this;
|
|
186
|
+
if (defaultEmptyValue !== undefined) {
|
|
187
|
+
if (typeof defaultEmptyValue === 'function') {
|
|
188
|
+
cell = defaultEmptyValue();
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
cell = defaultEmptyValue;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
cell = '';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
cell = String(cellValue);
|
|
200
|
+
}
|
|
166
201
|
}
|
|
167
202
|
else {
|
|
168
203
|
let cellValue = renderCell
|
|
@@ -172,10 +207,28 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
172
207
|
cell = cellValue;
|
|
173
208
|
}
|
|
174
209
|
else {
|
|
175
|
-
if (
|
|
176
|
-
cellValue
|
|
210
|
+
if (cellValue === null ||
|
|
211
|
+
cellValue === undefined ||
|
|
212
|
+
cellValue === false) {
|
|
213
|
+
const { defaultEmptyValue } = this;
|
|
214
|
+
if (defaultEmptyValue !== undefined) {
|
|
215
|
+
if (typeof defaultEmptyValue === 'function') {
|
|
216
|
+
cell = defaultEmptyValue();
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
cell = defaultEmptyValue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
cell = '';
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
if (mask && cellValue !== null && cellValue !== undefined) {
|
|
228
|
+
cellValue = (0, use_mask_1.processMaskedValue)(cellValue, mask);
|
|
229
|
+
}
|
|
230
|
+
cell = String(cellValue);
|
|
177
231
|
}
|
|
178
|
-
cell = String(cellValue);
|
|
179
232
|
}
|
|
180
233
|
}
|
|
181
234
|
}
|
|
@@ -97,6 +97,7 @@ export declare const dataTableProps: {
|
|
|
97
97
|
};
|
|
98
98
|
readonly scrollbarProps: PropType<ScrollbarProps>;
|
|
99
99
|
readonly renderCell: PropType<(value: any, rowData: object, column: TableBaseColumn) => VNodeChild>;
|
|
100
|
+
readonly defaultEmptyValue: PropType<string | (() => VNodeChild) | undefined>;
|
|
100
101
|
readonly renderExpandIcon: PropType<RenderExpandIcon>;
|
|
101
102
|
readonly spinProps: {
|
|
102
103
|
readonly type: PropType<BaseLoadingExposedProps>;
|
|
@@ -3175,6 +3176,7 @@ export interface DataTableInjection {
|
|
|
3175
3176
|
syncScrollState: (deltaX?: number, deltaY?: number) => void;
|
|
3176
3177
|
setHeaderScrollLeft: (scrollLeft: number) => void;
|
|
3177
3178
|
renderCell: Ref<undefined | ((value: any, rowData: object, column: TableBaseColumn) => VNodeChild)>;
|
|
3179
|
+
defaultEmptyValueRef: Ref<string | (() => VNodeChild) | undefined>;
|
|
3178
3180
|
emptyPropsRef: Ref<Partial<EmptyProps> | undefined>;
|
|
3179
3181
|
handleEdit: (value: any, row: any, key: string) => void;
|
|
3180
3182
|
}
|
|
@@ -53,7 +53,7 @@ exports.dataTableProps = Object.assign(Object.assign({}, _mixins_1.useTheme.prop
|
|
|
53
53
|
}, paginationBehaviorOnFilter: {
|
|
54
54
|
type: String,
|
|
55
55
|
default: 'current'
|
|
56
|
-
}, scrollbarProps: Object, renderCell: Function, renderExpandIcon: Function, spinProps: { type: Object, default: {} }, emptyProps: Object, onLoad: Function, 'onUpdate:page': [Function, Array], onUpdatePage: [Function, Array], 'onUpdate:pageSize': [Function, Array], onUpdatePageSize: [Function, Array], 'onUpdate:sorter': [Function, Array], onUpdateSorter: [Function, Array], 'onUpdate:filters': [Function, Array], onUpdateFilters: [Function, Array], 'onUpdate:checkedRowKeys': [Function, Array], onUpdateCheckedRowKeys: [Function, Array], 'onUpdate:expandedRowKeys': [Function, Array], onUpdateExpandedRowKeys: [Function, Array], onScroll: Function,
|
|
56
|
+
}, scrollbarProps: Object, renderCell: Function, defaultEmptyValue: [String, Function], renderExpandIcon: Function, spinProps: { type: Object, default: {} }, emptyProps: Object, onLoad: Function, 'onUpdate:page': [Function, Array], onUpdatePage: [Function, Array], 'onUpdate:pageSize': [Function, Array], onUpdatePageSize: [Function, Array], 'onUpdate:sorter': [Function, Array], onUpdateSorter: [Function, Array], 'onUpdate:filters': [Function, Array], onUpdateFilters: [Function, Array], 'onUpdate:checkedRowKeys': [Function, Array], onUpdateCheckedRowKeys: [Function, Array], 'onUpdate:expandedRowKeys': [Function, Array], onUpdateExpandedRowKeys: [Function, Array], onScroll: Function,
|
|
57
57
|
// deprecated
|
|
58
58
|
onPageChange: [Function, Array], onPageSizeChange: [Function, Array], onSorterChange: [Function, Array], onFiltersChange: [Function, Array], onCheckedRowKeysChange: [Function, Array] });
|
|
59
59
|
exports.dataTableInjectionKey = (0, _utils_1.createInjectionKey)('u-data-table');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PropType, type ExtractPropTypes, ComputedRef } from 'vue';
|
|
1
|
+
import { type PropType, type ExtractPropTypes, ComputedRef, VNodeChild } from 'vue';
|
|
2
2
|
import { type MaybeArray } from '../../_utils';
|
|
3
3
|
import type { HeaderProps as HeaderPropsInterface, HeaderMenuOption, LangOption, HeaderSearchResult } from './interface';
|
|
4
4
|
export type HeaderSetupProps = ExtractPropTypes<typeof headerProps>;
|
|
@@ -78,9 +78,14 @@ export declare const headerProps: {
|
|
|
78
78
|
type: PropType<HeaderPropsInterface["mobileShowHeaderActions"]>;
|
|
79
79
|
default: boolean;
|
|
80
80
|
};
|
|
81
|
+
actionsProps: {
|
|
82
|
+
type: PropType<HeaderPropsInterface["actionsProps"]>;
|
|
83
|
+
};
|
|
81
84
|
onSearch: PropType<HeaderPropsInterface["onSearch"]>;
|
|
82
85
|
'onUpdate:menuValue': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
83
86
|
onUpdateMenuValue: PropType<MaybeArray<HeaderPropsInterface["onUpdateMenuValue"]>>;
|
|
87
|
+
'onUpdate:activeMenuKey': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
88
|
+
onUpdateActiveMenuKey: PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
84
89
|
theme: PropType<import("../../_mixins").Theme<"Header", {
|
|
85
90
|
fontSize: string;
|
|
86
91
|
fontBodyLarge: string;
|
|
@@ -259,9 +264,14 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
259
264
|
type: PropType<HeaderPropsInterface["mobileShowHeaderActions"]>;
|
|
260
265
|
default: boolean;
|
|
261
266
|
};
|
|
267
|
+
actionsProps: {
|
|
268
|
+
type: PropType<HeaderPropsInterface["actionsProps"]>;
|
|
269
|
+
};
|
|
262
270
|
onSearch: PropType<HeaderPropsInterface["onSearch"]>;
|
|
263
271
|
'onUpdate:menuValue': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
264
272
|
onUpdateMenuValue: PropType<MaybeArray<HeaderPropsInterface["onUpdateMenuValue"]>>;
|
|
273
|
+
'onUpdate:activeMenuKey': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
274
|
+
onUpdateActiveMenuKey: PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
265
275
|
theme: PropType<import("../../_mixins").Theme<"Header", {
|
|
266
276
|
fontSize: string;
|
|
267
277
|
fontBodyLarge: string;
|
|
@@ -406,13 +416,16 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
406
416
|
}[] | undefined>;
|
|
407
417
|
mergedMenuValue: ComputedRef<string | number | null>;
|
|
408
418
|
currentLang: import("vue").Ref<{
|
|
409
|
-
label: string | (() =>
|
|
419
|
+
label: string | (() => VNodeChild);
|
|
410
420
|
key: string | number;
|
|
411
|
-
icon?: (() =>
|
|
421
|
+
icon?: (() => VNodeChild) | undefined;
|
|
412
422
|
}>;
|
|
413
423
|
isMobile: import("vue").Ref<boolean | undefined>;
|
|
414
424
|
mobileMenuVisible: import("vue").Ref<boolean>;
|
|
415
425
|
searchVisible: import("vue").Ref<boolean>;
|
|
426
|
+
menuPaneClass: ComputedRef<string>;
|
|
427
|
+
menuPaneWrapperClass: ComputedRef<string>;
|
|
428
|
+
mergedActiveMenuKey: ComputedRef<string | number | null>;
|
|
416
429
|
handleSelectLang: (key: string | number) => void;
|
|
417
430
|
handleMenuValueUpdate: (value: string | number | null) => void;
|
|
418
431
|
handleSearchClick: () => void;
|
|
@@ -427,10 +440,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
427
440
|
handleMobileMenuItemClick: (option: HeaderMenuOption) => void;
|
|
428
441
|
handleMobilePrimaryAction: () => void;
|
|
429
442
|
handleMobileSecondaryAction: () => void;
|
|
430
|
-
|
|
431
|
-
menuPaneWrapperClass: ComputedRef<string>;
|
|
443
|
+
handleUpdateActiveMenuKey: (value: string | number | null) => void;
|
|
432
444
|
onRender: () => void;
|
|
433
|
-
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ["search", "search-result-select", "preview", "logout", "language-select", "logo-click", "mobile-primary-action", "mobile-secondary-action"], "search" | "logout" | "preview" | "search-result-select" | "language-select" | "logo-click" | "mobile-primary-action" | "mobile-secondary-action", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
445
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ["search", "search-result-select", "preview", "logout", "language-select", "logo-click", "mobile-primary-action", "mobile-secondary-action", "update:activeMenuKey"], "search" | "logout" | "preview" | "search-result-select" | "language-select" | "logo-click" | "mobile-primary-action" | "mobile-secondary-action" | "update:activeMenuKey", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
434
446
|
menuOptions: {
|
|
435
447
|
type: PropType<HeaderPropsInterface["menuOptions"]>;
|
|
436
448
|
default: () => never[];
|
|
@@ -505,9 +517,14 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
505
517
|
type: PropType<HeaderPropsInterface["mobileShowHeaderActions"]>;
|
|
506
518
|
default: boolean;
|
|
507
519
|
};
|
|
520
|
+
actionsProps: {
|
|
521
|
+
type: PropType<HeaderPropsInterface["actionsProps"]>;
|
|
522
|
+
};
|
|
508
523
|
onSearch: PropType<HeaderPropsInterface["onSearch"]>;
|
|
509
524
|
'onUpdate:menuValue': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
510
525
|
onUpdateMenuValue: PropType<MaybeArray<HeaderPropsInterface["onUpdateMenuValue"]>>;
|
|
526
|
+
'onUpdate:activeMenuKey': PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
527
|
+
onUpdateActiveMenuKey: PropType<MaybeArray<(value: string | number | null) => void>>;
|
|
511
528
|
theme: PropType<import("../../_mixins").Theme<"Header", {
|
|
512
529
|
fontSize: string;
|
|
513
530
|
fontBodyLarge: string;
|
|
@@ -614,6 +631,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
614
631
|
onSearch?: ((...args: any[]) => any) | undefined;
|
|
615
632
|
onPreview?: ((...args: any[]) => any) | undefined;
|
|
616
633
|
onLogout?: ((...args: any[]) => any) | undefined;
|
|
634
|
+
"onUpdate:activeMenuKey"?: ((...args: any[]) => any) | undefined;
|
|
617
635
|
"onSearch-result-select"?: ((...args: any[]) => any) | undefined;
|
|
618
636
|
"onLanguage-select"?: ((...args: any[]) => any) | undefined;
|
|
619
637
|
"onLogo-click"?: ((...args: any[]) => any) | undefined;
|
package/lib/header/src/Header.js
CHANGED
|
@@ -123,7 +123,9 @@ exports.headerProps = Object.assign(Object.assign({}, _mixins_1.useTheme.props),
|
|
|
123
123
|
}, mobileShowHeaderActions: {
|
|
124
124
|
type: Boolean,
|
|
125
125
|
default: true
|
|
126
|
-
},
|
|
126
|
+
}, actionsProps: {
|
|
127
|
+
type: Object
|
|
128
|
+
}, onSearch: Function, 'onUpdate:menuValue': [Function, Array], onUpdateMenuValue: [Function, Array], 'onUpdate:activeMenuKey': [Function, Array], onUpdateActiveMenuKey: [Function, Array] });
|
|
127
129
|
exports.default = (0, vue_1.defineComponent)({
|
|
128
130
|
name: 'Header',
|
|
129
131
|
props: exports.headerProps,
|
|
@@ -135,7 +137,8 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
135
137
|
'language-select',
|
|
136
138
|
'logo-click',
|
|
137
139
|
'mobile-primary-action',
|
|
138
|
-
'mobile-secondary-action'
|
|
140
|
+
'mobile-secondary-action',
|
|
141
|
+
'update:activeMenuKey'
|
|
139
142
|
],
|
|
140
143
|
setup(props, { emit }) {
|
|
141
144
|
var _a, _b;
|
|
@@ -144,6 +147,9 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
144
147
|
const isMobileRef = (0, vue_1.toRef)(props, 'isMobile');
|
|
145
148
|
const mobileMenuVisibleRef = (0, vue_1.ref)(false);
|
|
146
149
|
const searchVisibleRef = (0, vue_1.ref)(false);
|
|
150
|
+
const controlledActiveMenuKeyRef = (0, vue_1.toRef)(props, 'activeMenuKey');
|
|
151
|
+
const uncontrolledActiveMenuKeyRef = (0, vue_1.ref)(null);
|
|
152
|
+
const mergedActiveMenuKeyRef = (0, vooks_1.useMergedState)(controlledActiveMenuKeyRef, uncontrolledActiveMenuKeyRef);
|
|
147
153
|
(0, vue_1.onBeforeMount)(() => {
|
|
148
154
|
index_cssr_1.headerMobileMenuStyle.mount({
|
|
149
155
|
id: `${mergedClsPrefixRef.value}-header-mobile-menu`,
|
|
@@ -283,6 +289,16 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
283
289
|
function handleLogoClick() {
|
|
284
290
|
emit('logo-click');
|
|
285
291
|
}
|
|
292
|
+
function handleUpdateActiveMenuKey(value) {
|
|
293
|
+
uncontrolledActiveMenuKeyRef.value = value;
|
|
294
|
+
emit('update:activeMenuKey', value);
|
|
295
|
+
const { onUpdateActiveMenuKey } = props;
|
|
296
|
+
const { 'onUpdate:activeMenuKey': _onUpdateActiveMenuKey } = props;
|
|
297
|
+
if (onUpdateActiveMenuKey)
|
|
298
|
+
(0, _utils_1.call)(onUpdateActiveMenuKey, value);
|
|
299
|
+
if (_onUpdateActiveMenuKey)
|
|
300
|
+
(0, _utils_1.call)(_onUpdateActiveMenuKey, value);
|
|
301
|
+
}
|
|
286
302
|
return {
|
|
287
303
|
mergedClsPrefix: mergedClsPrefixRef,
|
|
288
304
|
cssVars: cssVarsRef,
|
|
@@ -293,6 +309,9 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
293
309
|
isMobile: isMobileRef,
|
|
294
310
|
mobileMenuVisible: mobileMenuVisibleRef,
|
|
295
311
|
searchVisible: searchVisibleRef,
|
|
312
|
+
menuPaneClass,
|
|
313
|
+
menuPaneWrapperClass,
|
|
314
|
+
mergedActiveMenuKey: mergedActiveMenuKeyRef,
|
|
296
315
|
handleSelectLang,
|
|
297
316
|
handleMenuValueUpdate,
|
|
298
317
|
handleSearchClick,
|
|
@@ -307,8 +326,7 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
307
326
|
handleMobileMenuItemClick,
|
|
308
327
|
handleMobilePrimaryAction,
|
|
309
328
|
handleMobileSecondaryAction,
|
|
310
|
-
|
|
311
|
-
menuPaneWrapperClass,
|
|
329
|
+
handleUpdateActiveMenuKey,
|
|
312
330
|
onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender
|
|
313
331
|
};
|
|
314
332
|
},
|
|
@@ -325,15 +343,22 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
325
343
|
this.logoSrc && `${blockClass}__logo--clickable`
|
|
326
344
|
].filter(Boolean), onClick: this.handleLogoClick },
|
|
327
345
|
(0, vue_1.h)("img", { src: this.logoSrc, alt: this.logoAlt })));
|
|
328
|
-
const navigationNode = (0, _utils_1.resolveWrappedSlot)($slots.navigation, (children) => children !== null && children !== void 0 ? children : null) || ((0, vue_1.h)(HeaderNavigation_1.default, { menuOptions: this.menuOptions, menuPlacement: this.menuPlacement, menuTrigger: this.menuTrigger, menuValue: this.mergedMenuValue, menuTabsProps: this.menuTabsProps, menuCardMinColumnWidth: this.menuCardMinColumnWidth, mergedClsPrefix: mergedClsPrefix, menuPaneClass: this.menuPaneClass, menuPaneWrapperClass: this.menuPaneWrapperClass, activeMenuKey: this.
|
|
346
|
+
const navigationNode = (0, _utils_1.resolveWrappedSlot)($slots.navigation, (children) => children !== null && children !== void 0 ? children : null) || ((0, vue_1.h)(HeaderNavigation_1.default, { menuOptions: this.menuOptions, menuPlacement: this.menuPlacement, menuTrigger: this.menuTrigger, menuValue: this.mergedMenuValue, menuTabsProps: this.menuTabsProps, menuCardMinColumnWidth: this.menuCardMinColumnWidth, mergedClsPrefix: mergedClsPrefix, menuPaneClass: this.menuPaneClass, menuPaneWrapperClass: this.menuPaneWrapperClass, activeMenuKey: this.mergedActiveMenuKey, onUpdateMenuValue: this.handleMenuValueUpdate, onUpdateActiveMenuKey: this.handleUpdateActiveMenuKey }));
|
|
329
347
|
const mobileNode = this.responsive && this.isMobile ? ((0, vue_1.h)(HeaderMobile_1.default, { visible: this.mobileMenuVisible, menuOptions: this.normalizedMenuItems, activeMenuValue: this.mergedMenuValue, langOptions: this.langOptions || defaultLangOptions, currentLang: this.currentLang, mergedClsPrefix: mergedClsPrefix, cssVars: this.cssVars, menuType: this.mobileMenuType, showFooterActions: this.mobileShowFooterActions, showHeaderActions: this.mobileShowHeaderActions, primaryActionText: this.mobilePrimaryActionText, secondaryActionText: this.mobileSecondaryActionText, onToggle: this.toggleMobileMenu, onClose: this.closeMobileMenu, onMenuItemClick: this.handleMobileMenuItemClick, onLanguageSelect: this.handleSelectLang, onPrimaryAction: this.handleMobilePrimaryAction, onSecondaryAction: this.handleMobileSecondaryAction, onSearchClick: this.handleSearchClick, onPreview: this.handlePreviewClick, onLogout: this.handleLogoutClick }, {
|
|
330
348
|
actions: $slots['mobile-actions'],
|
|
331
349
|
footer: $slots['mobile-footer']
|
|
332
350
|
})) : null;
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
const
|
|
351
|
+
const langNode = (0, _utils_1.resolveWrappedSlot)($slots.lang, (children) => children);
|
|
352
|
+
const searchNode = (0, _utils_1.resolveWrappedSlot)($slots.search, (children) => children);
|
|
353
|
+
const accessibilityNode = (0, _utils_1.resolveWrappedSlot)($slots.accessibility, (children) => children !== null && children !== void 0 ? children : null);
|
|
354
|
+
const logoutNode = (0, _utils_1.resolveWrappedSlot)($slots.logout, (children) => children);
|
|
355
|
+
const resolveActionSlots = () => {
|
|
356
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({}, ($slots.lang ? { lang: () => langNode } : {})), ($slots.search ? { search: () => searchNode } : {})), ($slots.accessibility
|
|
357
|
+
? { accessibility: () => accessibilityNode }
|
|
358
|
+
: {})), ($slots.logout ? { logout: () => logoutNode } : {}));
|
|
359
|
+
};
|
|
360
|
+
const actionsNode = (0, _utils_1.resolveWrappedSlot)($slots.action, (children) => children ? (0, vue_1.h)("div", { class: `${blockClass}__actions` }, children) : null) || ((0, vue_1.h)(HeaderActions_1.default, Object.assign({ langOptions: this.langOptions || defaultLangOptions, currentLang: this.currentLang, mergedClsPrefix: mergedClsPrefix, responsive: this.responsive, isMobile: this.isMobile, mobileActionsCollapse: this.mobileActionsCollapse, cssVars: this.cssVars, onSearch: this.handleSearch, onSearchResultSelect: this.handleSearchResultSelect, onPreview: this.handlePreviewClick, onLogout: this.handleLogoutClick, onLanguageSelect: this.handleSelectLang }, (0, vue_1.mergeProps)(this.$attrs, this.actionsProps)), Object.assign({ mobile: () => mobileNode }, resolveActionSlots())));
|
|
361
|
+
const searchMobileNode = this.responsive && this.isMobile && this.searchVisible
|
|
337
362
|
? (0, vue_1.h)(HeaderSearchMobile_1.default, {
|
|
338
363
|
mergedClsPrefix,
|
|
339
364
|
show: this.searchVisible,
|
|
@@ -354,7 +379,7 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
354
379
|
navigation: () => null,
|
|
355
380
|
actions: () => actionsNode
|
|
356
381
|
}),
|
|
357
|
-
|
|
382
|
+
searchMobileNode
|
|
358
383
|
]);
|
|
359
384
|
}
|
|
360
385
|
return (0, vue_1.h)(HeaderDesktopLayout_1.default, {
|
|
@@ -1,68 +1,76 @@
|
|
|
1
|
-
import { type PropType,
|
|
2
|
-
import type {
|
|
1
|
+
import { type PropType, VNodeChild } from 'vue';
|
|
2
|
+
import type { HeaderSearchResult, HeaderActionsProps } from './interface';
|
|
3
3
|
export declare const headerActionsProps: {
|
|
4
4
|
readonly langOptions: {
|
|
5
|
-
readonly type: PropType<
|
|
5
|
+
readonly type: PropType<HeaderActionsProps["langOptions"]>;
|
|
6
6
|
readonly required: true;
|
|
7
7
|
};
|
|
8
8
|
readonly currentLang: {
|
|
9
|
-
readonly type: PropType<
|
|
9
|
+
readonly type: PropType<HeaderActionsProps["currentLang"]>;
|
|
10
10
|
readonly required: true;
|
|
11
11
|
};
|
|
12
12
|
readonly mergedClsPrefix: {
|
|
13
|
-
readonly type:
|
|
13
|
+
readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
|
|
14
14
|
readonly required: true;
|
|
15
15
|
};
|
|
16
16
|
readonly responsive: {
|
|
17
|
-
readonly type:
|
|
17
|
+
readonly type: PropType<HeaderActionsProps["responsive"]>;
|
|
18
18
|
readonly default: false;
|
|
19
19
|
};
|
|
20
20
|
readonly isMobile: {
|
|
21
|
-
readonly type:
|
|
21
|
+
readonly type: PropType<HeaderActionsProps["isMobile"]>;
|
|
22
22
|
readonly default: false;
|
|
23
23
|
};
|
|
24
24
|
readonly mobileActionsCollapse: {
|
|
25
|
-
readonly type:
|
|
25
|
+
readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
|
|
26
26
|
readonly default: true;
|
|
27
27
|
};
|
|
28
|
-
readonly
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
readonly
|
|
33
|
-
readonly
|
|
28
|
+
readonly actionsVisibility: {
|
|
29
|
+
readonly type: PropType<HeaderActionsProps["actionsVisibility"]>;
|
|
30
|
+
readonly required: false;
|
|
31
|
+
};
|
|
32
|
+
readonly cssVars: PropType<HeaderActionsProps["cssVars"]>;
|
|
33
|
+
readonly onSearch: PropType<HeaderActionsProps["onSearch"]>;
|
|
34
|
+
readonly onPreview: PropType<HeaderActionsProps["onPreview"]>;
|
|
35
|
+
readonly onLogout: PropType<HeaderActionsProps["onLogout"]>;
|
|
36
|
+
readonly onLanguageSelect: PropType<HeaderActionsProps["onLanguageSelect"]>;
|
|
37
|
+
readonly onSearchResultSelect: PropType<HeaderActionsProps["onSearchResultSelect"]>;
|
|
34
38
|
};
|
|
35
39
|
declare const _default: import("vue").DefineComponent<{
|
|
36
40
|
readonly langOptions: {
|
|
37
|
-
readonly type: PropType<
|
|
41
|
+
readonly type: PropType<HeaderActionsProps["langOptions"]>;
|
|
38
42
|
readonly required: true;
|
|
39
43
|
};
|
|
40
44
|
readonly currentLang: {
|
|
41
|
-
readonly type: PropType<
|
|
45
|
+
readonly type: PropType<HeaderActionsProps["currentLang"]>;
|
|
42
46
|
readonly required: true;
|
|
43
47
|
};
|
|
44
48
|
readonly mergedClsPrefix: {
|
|
45
|
-
readonly type:
|
|
49
|
+
readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
|
|
46
50
|
readonly required: true;
|
|
47
51
|
};
|
|
48
52
|
readonly responsive: {
|
|
49
|
-
readonly type:
|
|
53
|
+
readonly type: PropType<HeaderActionsProps["responsive"]>;
|
|
50
54
|
readonly default: false;
|
|
51
55
|
};
|
|
52
56
|
readonly isMobile: {
|
|
53
|
-
readonly type:
|
|
57
|
+
readonly type: PropType<HeaderActionsProps["isMobile"]>;
|
|
54
58
|
readonly default: false;
|
|
55
59
|
};
|
|
56
60
|
readonly mobileActionsCollapse: {
|
|
57
|
-
readonly type:
|
|
61
|
+
readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
|
|
58
62
|
readonly default: true;
|
|
59
63
|
};
|
|
60
|
-
readonly
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
readonly
|
|
65
|
-
readonly
|
|
64
|
+
readonly actionsVisibility: {
|
|
65
|
+
readonly type: PropType<HeaderActionsProps["actionsVisibility"]>;
|
|
66
|
+
readonly required: false;
|
|
67
|
+
};
|
|
68
|
+
readonly cssVars: PropType<HeaderActionsProps["cssVars"]>;
|
|
69
|
+
readonly onSearch: PropType<HeaderActionsProps["onSearch"]>;
|
|
70
|
+
readonly onPreview: PropType<HeaderActionsProps["onPreview"]>;
|
|
71
|
+
readonly onLogout: PropType<HeaderActionsProps["onLogout"]>;
|
|
72
|
+
readonly onLanguageSelect: PropType<HeaderActionsProps["onLanguageSelect"]>;
|
|
73
|
+
readonly onSearchResultSelect: PropType<HeaderActionsProps["onSearchResultSelect"]>;
|
|
66
74
|
}, {
|
|
67
75
|
searchVisible: import("vue").Ref<boolean>;
|
|
68
76
|
searchValue: import("vue").Ref<string>;
|
|
@@ -70,7 +78,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
70
78
|
key: string | number;
|
|
71
79
|
label: string;
|
|
72
80
|
description?: string | undefined;
|
|
73
|
-
icon?: (() =>
|
|
81
|
+
icon?: (() => VNodeChild) | undefined;
|
|
74
82
|
extra?: string | undefined;
|
|
75
83
|
onClick?: (() => void) | undefined;
|
|
76
84
|
disabled?: boolean | undefined;
|
|
@@ -83,38 +91,42 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
83
91
|
handleResultSelect: (result: HeaderSearchResult) => void;
|
|
84
92
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
85
93
|
readonly langOptions: {
|
|
86
|
-
readonly type: PropType<
|
|
94
|
+
readonly type: PropType<HeaderActionsProps["langOptions"]>;
|
|
87
95
|
readonly required: true;
|
|
88
96
|
};
|
|
89
97
|
readonly currentLang: {
|
|
90
|
-
readonly type: PropType<
|
|
98
|
+
readonly type: PropType<HeaderActionsProps["currentLang"]>;
|
|
91
99
|
readonly required: true;
|
|
92
100
|
};
|
|
93
101
|
readonly mergedClsPrefix: {
|
|
94
|
-
readonly type:
|
|
102
|
+
readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
|
|
95
103
|
readonly required: true;
|
|
96
104
|
};
|
|
97
105
|
readonly responsive: {
|
|
98
|
-
readonly type:
|
|
106
|
+
readonly type: PropType<HeaderActionsProps["responsive"]>;
|
|
99
107
|
readonly default: false;
|
|
100
108
|
};
|
|
101
109
|
readonly isMobile: {
|
|
102
|
-
readonly type:
|
|
110
|
+
readonly type: PropType<HeaderActionsProps["isMobile"]>;
|
|
103
111
|
readonly default: false;
|
|
104
112
|
};
|
|
105
113
|
readonly mobileActionsCollapse: {
|
|
106
|
-
readonly type:
|
|
114
|
+
readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
|
|
107
115
|
readonly default: true;
|
|
108
116
|
};
|
|
109
|
-
readonly
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
readonly
|
|
114
|
-
readonly
|
|
117
|
+
readonly actionsVisibility: {
|
|
118
|
+
readonly type: PropType<HeaderActionsProps["actionsVisibility"]>;
|
|
119
|
+
readonly required: false;
|
|
120
|
+
};
|
|
121
|
+
readonly cssVars: PropType<HeaderActionsProps["cssVars"]>;
|
|
122
|
+
readonly onSearch: PropType<HeaderActionsProps["onSearch"]>;
|
|
123
|
+
readonly onPreview: PropType<HeaderActionsProps["onPreview"]>;
|
|
124
|
+
readonly onLogout: PropType<HeaderActionsProps["onLogout"]>;
|
|
125
|
+
readonly onLanguageSelect: PropType<HeaderActionsProps["onLanguageSelect"]>;
|
|
126
|
+
readonly onSearchResultSelect: PropType<HeaderActionsProps["onSearchResultSelect"]>;
|
|
115
127
|
}>>, {
|
|
116
|
-
readonly responsive: boolean;
|
|
117
|
-
readonly isMobile: boolean;
|
|
118
|
-
readonly mobileActionsCollapse: boolean;
|
|
128
|
+
readonly responsive: boolean | undefined;
|
|
129
|
+
readonly isMobile: boolean | undefined;
|
|
130
|
+
readonly mobileActionsCollapse: boolean | undefined;
|
|
119
131
|
}, {}>;
|
|
120
132
|
export default _default;
|
|
@@ -46,6 +46,10 @@ exports.headerActionsProps = {
|
|
|
46
46
|
type: Boolean,
|
|
47
47
|
default: true
|
|
48
48
|
},
|
|
49
|
+
actionsVisibility: {
|
|
50
|
+
type: Object,
|
|
51
|
+
required: false
|
|
52
|
+
},
|
|
49
53
|
cssVars: Object,
|
|
50
54
|
onSearch: Function,
|
|
51
55
|
onPreview: Function,
|
|
@@ -122,51 +126,76 @@ exports.default = (0, vue_1.defineComponent)({
|
|
|
122
126
|
};
|
|
123
127
|
},
|
|
124
128
|
render() {
|
|
129
|
+
const { $slots } = this;
|
|
125
130
|
const blockClass = `${this.mergedClsPrefix}-header`;
|
|
126
131
|
if (this.responsive && this.isMobile && this.mobileActionsCollapse) {
|
|
127
132
|
return ((0, vue_1.h)("div", { class: `${blockClass}__actions` },
|
|
128
|
-
(0, vue_1.h)(flex_1.UFlex, { size: 32 }, { default: () => { var _a
|
|
133
|
+
(0, vue_1.h)(flex_1.UFlex, { size: 32 }, { default: () => { var _a; return (_a = $slots.mobile) === null || _a === void 0 ? void 0 : _a.call($slots); } })));
|
|
129
134
|
}
|
|
135
|
+
const langNode = () => {
|
|
136
|
+
var _a;
|
|
137
|
+
if (((_a = this.actionsVisibility) === null || _a === void 0 ? void 0 : _a.lang) === false)
|
|
138
|
+
return null;
|
|
139
|
+
return $slots.lang ? ($slots.lang()) : ((0, vue_1.h)(dropdown_1.UDropdown, { options: this.langOptions, onSelect: this.onLanguageSelect }, {
|
|
140
|
+
default: () => ((0, vue_1.h)(button_1.UButton, { "icon-placement": "right", text: true, renderIcon: () => ((0, vue_1.h)(icon_1.UIcon, null, { default: () => (0, vue_1.h)(icons_1.ChevronDownOutline, null) })) }, {
|
|
141
|
+
default: () => {
|
|
142
|
+
var _a, _b, _c;
|
|
143
|
+
return ((0, vue_1.h)("span", { class: `${blockClass}__lang-trigger` },
|
|
144
|
+
(0, vue_1.h)("span", { class: `${blockClass}__lang-icon` }, (_b = (_a = this.currentLang) === null || _a === void 0 ? void 0 : _a.icon) === null || _b === void 0 ? void 0 : _b.call(_a)),
|
|
145
|
+
(0, vue_1.h)("span", null, (_c = this.currentLang) === null || _c === void 0 ? void 0 : _c.label)));
|
|
146
|
+
}
|
|
147
|
+
}))
|
|
148
|
+
}));
|
|
149
|
+
};
|
|
150
|
+
const searchNode = () => {
|
|
151
|
+
var _a;
|
|
152
|
+
if (((_a = this.actionsVisibility) === null || _a === void 0 ? void 0 : _a.search) === false)
|
|
153
|
+
return null;
|
|
154
|
+
return $slots.search ? ($slots.search()) : ((0, vue_1.h)("div", { class: `${blockClass}__search-wrapper` },
|
|
155
|
+
(0, vue_1.h)(button_1.UButton, { text: true, onClick: this.handleSearchClick }, {
|
|
156
|
+
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.SearchIcon, null) }))
|
|
157
|
+
}),
|
|
158
|
+
(0, vue_1.h)(vue_1.Transition, { name: "fade-in-scale-up" }, {
|
|
159
|
+
default: () => this.searchVisible
|
|
160
|
+
? (0, vue_1.h)(HeaderSearchDesktop_1.default, {
|
|
161
|
+
searchValue: this.searchValue,
|
|
162
|
+
searchResults: this.searchResults,
|
|
163
|
+
searchLoading: this.searchLoading,
|
|
164
|
+
mergedClsPrefix: this.mergedClsPrefix,
|
|
165
|
+
cssVars: this.cssVars,
|
|
166
|
+
onSearchInput: this.handleSearchInput,
|
|
167
|
+
onSearchClose: this.handleSearchClose,
|
|
168
|
+
onSearchSubmit: () => {
|
|
169
|
+
void this.handleSearch();
|
|
170
|
+
},
|
|
171
|
+
onResultSelect: this.handleResultSelect
|
|
172
|
+
})
|
|
173
|
+
: null
|
|
174
|
+
})));
|
|
175
|
+
};
|
|
176
|
+
const accessibilityNode = () => {
|
|
177
|
+
var _a;
|
|
178
|
+
if (((_a = this.actionsVisibility) === null || _a === void 0 ? void 0 : _a.accessibility) === false)
|
|
179
|
+
return null;
|
|
180
|
+
return $slots.accessibility ? ($slots.accessibility()) : ((0, vue_1.h)(button_1.UButton, { text: true, onClick: this.onPreview }, {
|
|
181
|
+
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.EyeIcon, null) }))
|
|
182
|
+
}));
|
|
183
|
+
};
|
|
184
|
+
const logoutNode = () => {
|
|
185
|
+
var _a;
|
|
186
|
+
if (((_a = this.actionsVisibility) === null || _a === void 0 ? void 0 : _a.logout) === false)
|
|
187
|
+
return null;
|
|
188
|
+
return $slots.logout ? ($slots.logout()) : ((0, vue_1.h)(button_1.UButton, { text: true, onClick: this.onLogout }, {
|
|
189
|
+
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.LogoutIcon, null) }))
|
|
190
|
+
}));
|
|
191
|
+
};
|
|
130
192
|
return ((0, vue_1.h)("div", { class: `${blockClass}__actions` },
|
|
131
193
|
(0, vue_1.h)(flex_1.UFlex, { class: `${blockClass}__actions-block`, size: 32 }, {
|
|
132
194
|
default: () => ((0, vue_1.h)(vue_1.Fragment, null,
|
|
133
|
-
(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return ((0, vue_1.h)("span", { class: `${blockClass}__lang-trigger` },
|
|
138
|
-
(0, vue_1.h)("span", { class: `${blockClass}__lang-icon` }, (_b = (_a = this.currentLang) === null || _a === void 0 ? void 0 : _a.icon) === null || _b === void 0 ? void 0 : _b.call(_a)),
|
|
139
|
-
(0, vue_1.h)("span", null, (_c = this.currentLang) === null || _c === void 0 ? void 0 : _c.label)));
|
|
140
|
-
}
|
|
141
|
-
}))
|
|
142
|
-
}),
|
|
143
|
-
(0, vue_1.h)("div", { class: `${blockClass}__search-wrapper` },
|
|
144
|
-
(0, vue_1.h)(button_1.UButton, { text: true, onClick: this.handleSearchClick }, {
|
|
145
|
-
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.SearchIcon, null) }))
|
|
146
|
-
}),
|
|
147
|
-
(0, vue_1.h)(vue_1.Transition, { name: "fade-in-scale-up" }, {
|
|
148
|
-
default: () => this.searchVisible
|
|
149
|
-
? (0, vue_1.h)(HeaderSearchDesktop_1.default, {
|
|
150
|
-
searchValue: this.searchValue,
|
|
151
|
-
searchResults: this.searchResults,
|
|
152
|
-
searchLoading: this.searchLoading,
|
|
153
|
-
mergedClsPrefix: this.mergedClsPrefix,
|
|
154
|
-
cssVars: this.cssVars,
|
|
155
|
-
onSearchInput: this.handleSearchInput,
|
|
156
|
-
onSearchClose: this.handleSearchClose,
|
|
157
|
-
onSearchSubmit: () => {
|
|
158
|
-
void this.handleSearch();
|
|
159
|
-
},
|
|
160
|
-
onResultSelect: this.handleResultSelect
|
|
161
|
-
})
|
|
162
|
-
: null
|
|
163
|
-
})),
|
|
164
|
-
(0, vue_1.h)(button_1.UButton, { text: true, onClick: this.onPreview }, {
|
|
165
|
-
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.EyeIcon, null) }))
|
|
166
|
-
}),
|
|
167
|
-
(0, vue_1.h)(button_1.UButton, { text: true, onClick: this.onLogout }, {
|
|
168
|
-
default: () => ((0, vue_1.h)(icon_1.UIcon, { size: 24 }, { default: () => (0, vue_1.h)(icons_1.LogoutIcon, null) }))
|
|
169
|
-
})))
|
|
195
|
+
langNode(),
|
|
196
|
+
searchNode(),
|
|
197
|
+
accessibilityNode(),
|
|
198
|
+
logoutNode()))
|
|
170
199
|
})));
|
|
171
200
|
}
|
|
172
201
|
});
|