@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.
Files changed (48) hide show
  1. package/dist/index.js +146 -35
  2. package/dist/index.prod.js +3 -3
  3. package/es/chat/src/ChatParts/ChatAttachment.d.ts +6 -5
  4. package/es/chat/src/ChatParts/ChatAttachment.js +3 -3
  5. package/es/data-table/src/DataTable.d.ts +2 -0
  6. package/es/data-table/src/DataTable.js +1 -0
  7. package/es/data-table/src/TableParts/Body.d.ts +1 -0
  8. package/es/data-table/src/TableParts/Body.js +3 -2
  9. package/es/data-table/src/TableParts/Cell.d.ts +2 -0
  10. package/es/data-table/src/TableParts/Cell.js +62 -9
  11. package/es/data-table/src/interface.d.ts +2 -0
  12. package/es/data-table/src/interface.js +1 -1
  13. package/es/header/src/Header.d.ts +24 -6
  14. package/es/header/src/Header.js +36 -11
  15. package/es/header/src/HeaderActions.d.ts +54 -42
  16. package/es/header/src/HeaderActions.js +67 -38
  17. package/es/header/src/HeaderNavigation.d.ts +3 -1
  18. package/es/header/src/HeaderNavigation.js +6 -4
  19. package/es/header/src/interface.d.ts +24 -1
  20. package/es/header/src/utils.d.ts +1 -1
  21. package/es/header/src/utils.js +1 -1
  22. package/es/version.d.ts +1 -1
  23. package/es/version.js +1 -1
  24. package/lib/chat/src/ChatParts/ChatAttachment.d.ts +6 -5
  25. package/lib/chat/src/ChatParts/ChatAttachment.js +3 -3
  26. package/lib/data-table/src/DataTable.d.ts +2 -0
  27. package/lib/data-table/src/DataTable.js +1 -0
  28. package/lib/data-table/src/TableParts/Body.d.ts +1 -0
  29. package/lib/data-table/src/TableParts/Body.js +3 -2
  30. package/lib/data-table/src/TableParts/Cell.d.ts +2 -0
  31. package/lib/data-table/src/TableParts/Cell.js +62 -9
  32. package/lib/data-table/src/interface.d.ts +2 -0
  33. package/lib/data-table/src/interface.js +1 -1
  34. package/lib/header/src/Header.d.ts +24 -6
  35. package/lib/header/src/Header.js +35 -10
  36. package/lib/header/src/HeaderActions.d.ts +54 -42
  37. package/lib/header/src/HeaderActions.js +67 -38
  38. package/lib/header/src/HeaderNavigation.d.ts +3 -1
  39. package/lib/header/src/HeaderNavigation.js +6 -4
  40. package/lib/header/src/interface.d.ts +24 -1
  41. package/lib/header/src/utils.d.ts +1 -1
  42. package/lib/header/src/utils.js +1 -1
  43. package/lib/version.d.ts +1 -1
  44. package/lib/version.js +1 -1
  45. package/package.json +1 -1
  46. package/volar.d.ts +22 -22
  47. package/web-types.json +80 -12
  48. 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 (mask && cellValue !== null && cellValue !== undefined) {
47
- if (typeof cellValue === 'string' || typeof cellValue === 'number') {
48
- cellValue = (0, use_mask_1.processMaskedValue)(cellValue, mask);
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
- cell = cellValue;
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
- cell = String(cellValue);
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 (mask && cellValue !== null && cellValue !== undefined) {
176
- cellValue = (0, use_mask_1.processMaskedValue)(cellValue, mask);
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 | (() => import("vue").VNodeChild);
419
+ label: string | (() => VNodeChild);
410
420
  key: string | number;
411
- icon?: (() => import("vue").VNodeChild) | undefined;
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
- menuPaneClass: ComputedRef<string>;
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;
@@ -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
- }, onSearch: Function, 'onUpdate:menuValue': [Function, Array], onUpdateMenuValue: [Function, Array] });
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
- menuPaneClass,
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.activeMenuKey, onUpdateMenuValue: this.handleMenuValueUpdate }));
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 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, { 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 }, {
334
- mobile: () => mobileNode
335
- }));
336
- const searchNode = this.responsive && this.isMobile && this.searchVisible
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
- searchNode
382
+ searchMobileNode
358
383
  ]);
359
384
  }
360
385
  return (0, vue_1.h)(HeaderDesktopLayout_1.default, {
@@ -1,68 +1,76 @@
1
- import { type PropType, type CSSProperties } from 'vue';
2
- import type { LangOption, HeaderSearchResult, HeaderSearchHandler } from './interface';
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<LangOption[]>;
5
+ readonly type: PropType<HeaderActionsProps["langOptions"]>;
6
6
  readonly required: true;
7
7
  };
8
8
  readonly currentLang: {
9
- readonly type: PropType<LangOption>;
9
+ readonly type: PropType<HeaderActionsProps["currentLang"]>;
10
10
  readonly required: true;
11
11
  };
12
12
  readonly mergedClsPrefix: {
13
- readonly type: StringConstructor;
13
+ readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
14
14
  readonly required: true;
15
15
  };
16
16
  readonly responsive: {
17
- readonly type: BooleanConstructor;
17
+ readonly type: PropType<HeaderActionsProps["responsive"]>;
18
18
  readonly default: false;
19
19
  };
20
20
  readonly isMobile: {
21
- readonly type: BooleanConstructor;
21
+ readonly type: PropType<HeaderActionsProps["isMobile"]>;
22
22
  readonly default: false;
23
23
  };
24
24
  readonly mobileActionsCollapse: {
25
- readonly type: BooleanConstructor;
25
+ readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
26
26
  readonly default: true;
27
27
  };
28
- readonly cssVars: PropType<CSSProperties>;
29
- readonly onSearch: PropType<HeaderSearchHandler>;
30
- readonly onPreview: PropType<() => void>;
31
- readonly onLogout: PropType<() => void>;
32
- readonly onLanguageSelect: PropType<(key: string | number) => void>;
33
- readonly onSearchResultSelect: PropType<(result: HeaderSearchResult) => void>;
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<LangOption[]>;
41
+ readonly type: PropType<HeaderActionsProps["langOptions"]>;
38
42
  readonly required: true;
39
43
  };
40
44
  readonly currentLang: {
41
- readonly type: PropType<LangOption>;
45
+ readonly type: PropType<HeaderActionsProps["currentLang"]>;
42
46
  readonly required: true;
43
47
  };
44
48
  readonly mergedClsPrefix: {
45
- readonly type: StringConstructor;
49
+ readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
46
50
  readonly required: true;
47
51
  };
48
52
  readonly responsive: {
49
- readonly type: BooleanConstructor;
53
+ readonly type: PropType<HeaderActionsProps["responsive"]>;
50
54
  readonly default: false;
51
55
  };
52
56
  readonly isMobile: {
53
- readonly type: BooleanConstructor;
57
+ readonly type: PropType<HeaderActionsProps["isMobile"]>;
54
58
  readonly default: false;
55
59
  };
56
60
  readonly mobileActionsCollapse: {
57
- readonly type: BooleanConstructor;
61
+ readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
58
62
  readonly default: true;
59
63
  };
60
- readonly cssVars: PropType<CSSProperties>;
61
- readonly onSearch: PropType<HeaderSearchHandler>;
62
- readonly onPreview: PropType<() => void>;
63
- readonly onLogout: PropType<() => void>;
64
- readonly onLanguageSelect: PropType<(key: string | number) => void>;
65
- readonly onSearchResultSelect: PropType<(result: HeaderSearchResult) => void>;
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?: (() => import("vue").VNodeChild) | undefined;
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<LangOption[]>;
94
+ readonly type: PropType<HeaderActionsProps["langOptions"]>;
87
95
  readonly required: true;
88
96
  };
89
97
  readonly currentLang: {
90
- readonly type: PropType<LangOption>;
98
+ readonly type: PropType<HeaderActionsProps["currentLang"]>;
91
99
  readonly required: true;
92
100
  };
93
101
  readonly mergedClsPrefix: {
94
- readonly type: StringConstructor;
102
+ readonly type: PropType<HeaderActionsProps["mergedClsPrefix"]>;
95
103
  readonly required: true;
96
104
  };
97
105
  readonly responsive: {
98
- readonly type: BooleanConstructor;
106
+ readonly type: PropType<HeaderActionsProps["responsive"]>;
99
107
  readonly default: false;
100
108
  };
101
109
  readonly isMobile: {
102
- readonly type: BooleanConstructor;
110
+ readonly type: PropType<HeaderActionsProps["isMobile"]>;
103
111
  readonly default: false;
104
112
  };
105
113
  readonly mobileActionsCollapse: {
106
- readonly type: BooleanConstructor;
114
+ readonly type: PropType<HeaderActionsProps["mobileActionsCollapse"]>;
107
115
  readonly default: true;
108
116
  };
109
- readonly cssVars: PropType<CSSProperties>;
110
- readonly onSearch: PropType<HeaderSearchHandler>;
111
- readonly onPreview: PropType<() => void>;
112
- readonly onLogout: PropType<() => void>;
113
- readonly onLanguageSelect: PropType<(key: string | number) => void>;
114
- readonly onSearchResultSelect: PropType<(result: HeaderSearchResult) => void>;
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, _b; return (_b = (_a = this.$slots).mobile) === null || _b === void 0 ? void 0 : _b.call(_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
- (0, vue_1.h)(dropdown_1.UDropdown, { options: this.langOptions, onSelect: this.onLanguageSelect }, {
134
- 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) })) }, {
135
- default: () => {
136
- var _a, _b, _c;
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
  });