@uzum-tech/ui 1.12.12 → 1.12.14

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.
@@ -101,7 +101,6 @@ exports.default = (0, vue_1.defineComponent)({
101
101
  };
102
102
  });
103
103
  const themeClassHandle = (0, _mixins_1.useThemeClass)('chat-messages', (0, vue_1.computed)(() => ''), cssVarsRef, props);
104
- const mergedTypingTextRef = (0, vue_1.computed)(() => { var _a; return (_a = props.typingText) !== null && _a !== void 0 ? _a : localeRef.value.typingText; });
105
104
  const mergedRetryTextRef = (0, vue_1.computed)(() => { var _a; return (_a = props.retryText) !== null && _a !== void 0 ? _a : localeRef.value.retryText; });
106
105
  const mergedUnreadNotificationTextRef = (0, vue_1.computed)(() => { var _a; return (_a = props.unreadNotificationText) !== null && _a !== void 0 ? _a : localeRef.value.unreadNotificationText; });
107
106
  const unreadMessagesCount = (0, vue_1.computed)(() => {
@@ -266,23 +265,6 @@ exports.default = (0, vue_1.defineComponent)({
266
265
  ], theme: themeRef.value.peers.StatusIcon, themeOverrides: themeRef.value.peerOverrides.StatusIcon }))))))))));
267
266
  return messageContent;
268
267
  };
269
- const renderTypingIndicator = () => {
270
- return ((0, vue_1.h)("div", { class: [
271
- `${mergedClsPrefixRef.value}-chat-main__message`,
272
- `${mergedClsPrefixRef.value}-chat-main__message--other`
273
- ] },
274
- (0, vue_1.h)("div", { class: `${mergedClsPrefixRef.value}-chat-main__message-wrapper` },
275
- (0, vue_1.h)("div", { class: [
276
- `${mergedClsPrefixRef.value}-chat-main__message-bubble`,
277
- `${mergedClsPrefixRef.value}-chat-main__message-bubble--other`,
278
- `${mergedClsPrefixRef.value}-chat-main__message-bubble--typing`
279
- ] }),
280
- (0, vue_1.h)("div", { class: [
281
- `${mergedClsPrefixRef.value}-chat-main__message-meta`,
282
- `${mergedClsPrefixRef.value}-chat-main__message-meta--other`
283
- ] },
284
- (0, vue_1.h)("span", { class: `${mergedClsPrefixRef.value}-chat-main__message-time` }, mergedTypingTextRef.value)))));
285
- };
286
268
  const renderSkeletonMessage = (isOwn, index) => {
287
269
  return ((0, vue_1.h)("div", { key: `skeleton-${index}`, class: [
288
270
  `${mergedClsPrefixRef.value}-chat-main__message`,
@@ -312,7 +294,6 @@ exports.default = (0, vue_1.defineComponent)({
312
294
  mergedTheme: themeRef,
313
295
  renderMessage,
314
296
  renderMarkMessage,
315
- renderTypingIndicator,
316
297
  renderSkeletonMessage,
317
298
  renderDateSeparator,
318
299
  renderUnreadNotification,
@@ -326,9 +307,9 @@ exports.default = (0, vue_1.defineComponent)({
326
307
  };
327
308
  },
328
309
  render() {
329
- var _a, _b, _c;
310
+ var _a, _b;
330
311
  (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);
331
- const { mergedClsPrefixRef, renderMessage, renderMarkMessage, renderTypingIndicator, renderSkeletonMessage, renderDateSeparator, renderUnreadNotification } = this;
312
+ const { mergedClsPrefixRef, renderMessage, renderMarkMessage, renderSkeletonMessage, renderDateSeparator, renderUnreadNotification } = this;
332
313
  if (this.loading) {
333
314
  return ((0, vue_1.h)("div", { class: [`${mergedClsPrefixRef}-chat`, this.themeClass], style: this.cssVars },
334
315
  (0, vue_1.h)("div", { class: `${mergedClsPrefixRef}-chat-main`, style: {
@@ -389,7 +370,6 @@ exports.default = (0, vue_1.defineComponent)({
389
370
  id: 'unread-notification'
390
371
  });
391
372
  }
392
- const isTyping = this.selectedChatId && ((_c = this.typingChatIds) === null || _c === void 0 ? void 0 : _c.includes(this.selectedChatId));
393
373
  return ((0, vue_1.h)("div", { class: [`${mergedClsPrefixRef}-chat`, this.themeClass], style: this.cssVars },
394
374
  (0, vue_1.h)("div", { class: `${mergedClsPrefixRef}-chat-main`, style: {
395
375
  border: 'none',
@@ -404,21 +384,19 @@ exports.default = (0, vue_1.defineComponent)({
404
384
  event.preventDefault();
405
385
  this.contextMenuShow = false;
406
386
  }
407
- } },
408
- messagesWithDates.map((item) => {
409
- var _a;
410
- if (item.type === 'date-separator') {
411
- return renderDateSeparator((_a = item.date) !== null && _a !== void 0 ? _a : '');
412
- }
413
- if (item.type === 'unread-notification') {
414
- return renderUnreadNotification();
415
- }
416
- const message = item;
417
- if (message.type === interface_1.ChatMessageType.MARK) {
418
- return renderMarkMessage(message);
419
- }
420
- return renderMessage(message);
421
- }),
422
- isTyping && renderTypingIndicator()))));
387
+ } }, messagesWithDates.map((item) => {
388
+ var _a;
389
+ if (item.type === 'date-separator') {
390
+ return renderDateSeparator((_a = item.date) !== null && _a !== void 0 ? _a : '');
391
+ }
392
+ if (item.type === 'unread-notification') {
393
+ return renderUnreadNotification();
394
+ }
395
+ const message = item;
396
+ if (message.type === interface_1.ChatMessageType.MARK) {
397
+ return renderMarkMessage(message);
398
+ }
399
+ return renderMessage(message);
400
+ })))));
423
401
  }
424
402
  });
@@ -49,6 +49,11 @@ exports.default = (0, vue_1.defineComponent)({
49
49
  return 0;
50
50
  return messagesRef.value.filter((msg) => !msg.isOwn && msg.status === interface_1.MessageStatus.UNREAD).length;
51
51
  });
52
+ const isTyping = (0, vue_1.computed)(() => {
53
+ if (!selectedChatRef.value || !typingChatIdsRef.value)
54
+ return false;
55
+ return typingChatIdsRef.value.includes(selectedChatRef.value.id);
56
+ });
52
57
  const showNotificationManually = (0, vue_1.ref)(false);
53
58
  const hasUnreadMessages = (0, vue_1.ref)(false);
54
59
  const unreadCountOnOpen = (0, vue_1.ref)(0);
@@ -188,9 +193,16 @@ exports.default = (0, vue_1.defineComponent)({
188
193
  const keyId = toKeyString(chat === null || chat === void 0 ? void 0 : chat.id);
189
194
  const keyTitle = toKeyString(chat === null || chat === void 0 ? void 0 : chat.title);
190
195
  return ((0, vue_1.h)(vue_1.Fragment, null,
191
- (0, vue_1.h)(typography_1.UText, { key: `${keyId}-${keyTitle}`, variant: "heading-s-bold", class: `${mergedClsPrefixRef.value}-chat-main__header-title`, theme: mergedThemeRef.value.peers.Typography, themeOverrides: mergedThemeRef.value.peerOverrides.Typography }, {
192
- default: () => { var _a, _b; return (_b = (_a = selectedChatRef.value) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : ''; }
193
- }),
196
+ (0, vue_1.h)(flex_1.UFlex, { vertical: true, size: [0, 0], justify: 'flex-start"' },
197
+ (0, vue_1.h)(typography_1.UText, { key: `${keyId}-${keyTitle}`, variant: "heading-s-bold", class: `${mergedClsPrefixRef.value}-chat-main__header-title`, theme: mergedThemeRef.value.peers.Typography, themeOverrides: mergedThemeRef.value.peerOverrides.Typography }, {
198
+ default: () => { var _a, _b; return (_b = (_a = selectedChatRef.value) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : ''; }
199
+ }),
200
+ isTyping.value && ((0, vue_1.h)(typography_1.UText, { class: [
201
+ `${mergedClsPrefixRef.value}-chat-main__header-subtitle`,
202
+ 'typing'
203
+ ], variant: "body-m-medium" }, {
204
+ default: () => { var _a; return (_a = typingTextRef.value) !== null && _a !== void 0 ? _a : ''; }
205
+ }))),
194
206
  (0, vue_1.h)(flex_1.UFlex, { align: "center", size: "small", class: `${mergedClsPrefixRef.value}-chat-main__header-actions` }, {
195
207
  default: () => (0, _utils_1.resolveSlot)(slots.headerActions, () => {
196
208
  const shareButtonProps = Object.assign(Object.assign({}, headerButtonPropsRef.value), headerShareButtonPropsRef.value);
@@ -77,53 +77,28 @@ exports.default = (0, cssr_1.cB)('chat', `
77
77
  background-color: var(--u-sidebar-item-background-color-selected);
78
78
  `, [(0, cssr_1.c)('&:hover', `
79
79
  background-color: var(--u-sidebar-item-background-color-selected);
80
- `)]), (0, cssr_1.cM)('typing', `
81
- .u-list-item__description {
82
- color: var(--u-color-primary) !important;
83
- font-style: italic;
84
- }
85
- `), (0, cssr_1.c)('&:hover', `
80
+ `)]), (0, cssr_1.c)('&:hover', `
86
81
  background-color: var(--u-sidebar-item-background-color-hover);
87
82
  `, [(0, cssr_1.cM)('selected', `
88
83
  background-color: var(--u-sidebar-item-background-color-selected);
89
84
  `)])]), (0, cssr_1.cE)('item-title', `
90
- font-weight: 500;
91
- font-size: 14px;
92
- line-height: 20px;
93
85
  color: var(--u-sidebar-item-text-color);
94
86
  overflow: hidden;
95
87
  text-overflow: ellipsis;
96
88
  white-space: nowrap;
89
+ margin-bottom: 0;
97
90
  `), (0, cssr_1.cE)('item-subtitle', `
98
- font-size: 12px;
99
- line-height: 16px;
91
+ display: block;
100
92
  color: var(--u-sidebar-item-subtitle-color);
101
93
  overflow: hidden;
102
94
  text-overflow: ellipsis;
103
95
  white-space: nowrap;
104
- `, [(0, cssr_1.cM)('typing', `
105
- color: var(--u-color-primary);
106
- font-style: italic;
107
- `)]), (0, cssr_1.cE)('item-main', `
96
+ minWidth: 0;
97
+ maxWidth: 100%;
98
+ `), (0, cssr_1.cE)('item-main', `
108
99
  flex: 1;
109
100
  min-width: 0;
110
101
  margin-right: 12px;
111
- `), (0, cssr_1.cE)('item-title', `
112
- font-weight: 500;
113
- font-size: 14px;
114
- line-height: 20px;
115
- color: var(--u-text-color-base);
116
- margin-bottom: 2px;
117
- overflow: hidden;
118
- text-overflow: ellipsis;
119
- white-space: nowrap;
120
- `), (0, cssr_1.cE)('item-subtitle', `
121
- font-size: 12px;
122
- line-height: 16px;
123
- color: var(--u-text-color-disabled);
124
- overflow: hidden;
125
- text-overflow: ellipsis;
126
- white-space: nowrap;
127
102
  `), (0, cssr_1.cE)('item-indicators', `
128
103
  display: flex;
129
104
  flex-direction: column;
@@ -162,10 +137,9 @@ exports.default = (0, cssr_1.cB)('chat', `
162
137
  `, [(0, cssr_1.cE)('header', `
163
138
  border-bottom: 1px solid var(--u-border-color);
164
139
  width: 100%;
165
- padding: 24px 20px 8px 24px;
140
+ padding: 24px 20px 10px 24px;
166
141
  flex-shrink: 0;
167
142
  `), (0, cssr_1.cE)('header-title', `
168
- margin-top: 9px;
169
143
  color: var(--u-header-title-color);
170
144
  flex: 1;
171
145
  min-width: 0;
@@ -174,6 +148,14 @@ exports.default = (0, cssr_1.cB)('chat', `
174
148
  white-space: nowrap;
175
149
  display: block;
176
150
  margin-right: 16px;
151
+ `), (0, cssr_1.cE)('header-subtitle', `
152
+ display: block;
153
+ color: var(--u-sidebar-item-subtitle-color);
154
+ overflow: hidden;
155
+ text-overflow: ellipsis;
156
+ white-space: nowrap;
157
+ minWidth: 0;
158
+ maxWidth: 100%;
177
159
  `), (0, cssr_1.cE)('header-actions', `
178
160
  padding: 4px;
179
161
  flex-shrink: 0;
@@ -1,8 +1,8 @@
1
- import { type PropType, type ComputedRef, type ExtractPropTypes } from 'vue';
1
+ import { type PropType, type ExtractPropTypes } from 'vue';
2
2
  import { type Hljs } from '../../_mixins';
3
3
  import type { UDateLocale, ULocale } from '../../locales';
4
4
  import type { GlobalTheme, GlobalThemeOverrides, GlobalComponentConfig, GlobalIconConfig } from './interface';
5
- import type { RtlProp, Breakpoints, BreakpointProps, BreakpointThemeOverrides } from './internal-interface';
5
+ import type { RtlProp, Breakpoints, BreakpointProps, BreakpointThemeOverrides, BreakpointMode } from './internal-interface';
6
6
  import type { Katex } from './katex';
7
7
  export declare const configProviderProps: {
8
8
  readonly abstract: BooleanConstructor;
@@ -31,6 +31,10 @@ export declare const configProviderProps: {
31
31
  readonly breakpoints: PropType<Breakpoints>;
32
32
  readonly breakpointProps: PropType<BreakpointProps>;
33
33
  readonly breakpointThemeOverrides: PropType<BreakpointThemeOverrides>;
34
+ readonly breakpointMode: {
35
+ readonly type: PropType<BreakpointMode>;
36
+ readonly default: "desktop-first";
37
+ };
34
38
  readonly preflightStyleDisabled: BooleanConstructor;
35
39
  readonly inlineThemeDisabled: {
36
40
  readonly type: BooleanConstructor;
@@ -70,6 +74,10 @@ declare const _default: import("vue").DefineComponent<{
70
74
  readonly breakpoints: PropType<Breakpoints>;
71
75
  readonly breakpointProps: PropType<BreakpointProps>;
72
76
  readonly breakpointThemeOverrides: PropType<BreakpointThemeOverrides>;
77
+ readonly breakpointMode: {
78
+ readonly type: PropType<BreakpointMode>;
79
+ readonly default: "desktop-first";
80
+ };
73
81
  readonly preflightStyleDisabled: BooleanConstructor;
74
82
  readonly inlineThemeDisabled: {
75
83
  readonly type: BooleanConstructor;
@@ -81,11 +89,11 @@ declare const _default: import("vue").DefineComponent<{
81
89
  readonly default: undefined;
82
90
  };
83
91
  }, {
84
- mergedClsPrefix: ComputedRef<string>;
85
- mergedBordered: ComputedRef<boolean | undefined>;
86
- mergedNamespace: ComputedRef<string | undefined>;
87
- mergedTheme: ComputedRef<GlobalTheme | undefined>;
88
- mergedThemeOverrides: ComputedRef<GlobalThemeOverrides | undefined>;
92
+ mergedClsPrefix: import("vue").ComputedRef<string>;
93
+ mergedBordered: import("vue").ComputedRef<boolean | undefined>;
94
+ mergedNamespace: import("vue").ComputedRef<string | undefined>;
95
+ mergedTheme: import("vue").ComputedRef<GlobalTheme | undefined>;
96
+ mergedThemeOverrides: import("vue").ComputedRef<GlobalThemeOverrides | undefined>;
89
97
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
90
98
  readonly abstract: BooleanConstructor;
91
99
  readonly bordered: {
@@ -113,6 +121,10 @@ declare const _default: import("vue").DefineComponent<{
113
121
  readonly breakpoints: PropType<Breakpoints>;
114
122
  readonly breakpointProps: PropType<BreakpointProps>;
115
123
  readonly breakpointThemeOverrides: PropType<BreakpointThemeOverrides>;
124
+ readonly breakpointMode: {
125
+ readonly type: PropType<BreakpointMode>;
126
+ readonly default: "desktop-first";
127
+ };
116
128
  readonly preflightStyleDisabled: BooleanConstructor;
117
129
  readonly inlineThemeDisabled: {
118
130
  readonly type: BooleanConstructor;
@@ -128,6 +140,7 @@ declare const _default: import("vue").DefineComponent<{
128
140
  readonly bordered: boolean | undefined;
129
141
  readonly clsPrefix: string;
130
142
  readonly tag: string;
143
+ readonly breakpointMode: BreakpointMode;
131
144
  readonly preflightStyleDisabled: boolean;
132
145
  readonly inlineThemeDisabled: boolean;
133
146
  readonly as: string | undefined;
@@ -32,6 +32,10 @@ exports.configProviderProps = {
32
32
  breakpoints: Object,
33
33
  breakpointProps: Object,
34
34
  breakpointThemeOverrides: Object,
35
+ breakpointMode: {
36
+ type: String,
37
+ default: 'desktop-first'
38
+ },
35
39
  preflightStyleDisabled: Boolean,
36
40
  inlineThemeDisabled: {
37
41
  type: Boolean,
@@ -56,7 +60,7 @@ exports.default = (0, vue_1.defineComponent)({
56
60
  const mergedThemeRef = (0, vue_1.computed)(() => {
57
61
  const { theme } = props;
58
62
  if (theme === null)
59
- return undefined;
63
+ return;
60
64
  const inheritedTheme = UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedThemeRef.value;
61
65
  return theme === undefined
62
66
  ? inheritedTheme
@@ -64,30 +68,64 @@ exports.default = (0, vue_1.defineComponent)({
64
68
  ? theme
65
69
  : Object.assign({}, inheritedTheme, theme);
66
70
  });
67
- const getActiveBreakpointValue = (breakpointMap) => {
68
- if (!breakpointMap || !_utils_1.isBrowser) {
69
- return undefined;
70
- }
71
- const currentWidth = windowWidthRef.value;
71
+ const mergedBreakpointModeRef = (0, vue_1.computed)(() => {
72
+ const { breakpointMode } = props;
73
+ return (breakpointMode ||
74
+ (UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedBreakpointModeRef.value) ||
75
+ 'desktop-first');
76
+ });
77
+ const getMergedBreakpointValues = (breakpointMap) => {
78
+ if (!breakpointMap)
79
+ return;
72
80
  const breakpointWidths = Object.keys(breakpointMap)
73
81
  .map(Number)
74
- .filter((width) => width <= currentWidth)
75
- .sort((a, b) => b - a);
76
- if (breakpointWidths.length === 0) {
77
- return undefined;
82
+ .sort((leftWidth, rightWidth) => leftWidth - rightWidth);
83
+ const mergedMap = {};
84
+ let previousValue;
85
+ for (const width of breakpointWidths) {
86
+ if (previousValue !== undefined) {
87
+ mergedMap[width] = (0, lodash_1.merge)({}, previousValue, breakpointMap[width]);
88
+ }
89
+ else {
90
+ mergedMap[width] = breakpointMap[width];
91
+ }
92
+ previousValue = mergedMap[width];
93
+ }
94
+ return mergedMap;
95
+ };
96
+ const getActiveBreakpointValue = (breakpointMap, mode = 'desktop-first') => {
97
+ if (!breakpointMap || !_utils_1.isBrowser)
98
+ return;
99
+ const mergedMap = getMergedBreakpointValues(breakpointMap);
100
+ if (!mergedMap)
101
+ return;
102
+ const currentWidth = windowWidthRef.value;
103
+ const breakpointWidths = Object.keys(mergedMap).map(Number);
104
+ let matchingBreakpoints;
105
+ if (mode === 'mobile-first') {
106
+ matchingBreakpoints = breakpointWidths
107
+ .filter((width) => width >= currentWidth)
108
+ .sort((leftWidth, rightWidth) => leftWidth - rightWidth);
109
+ }
110
+ else {
111
+ matchingBreakpoints = breakpointWidths
112
+ .filter((width) => width <= currentWidth)
113
+ .sort((leftWidth, rightWidth) => rightWidth - leftWidth);
78
114
  }
79
- const activeBreakpoint = breakpointWidths[0];
80
- return breakpointMap[activeBreakpoint];
115
+ if (matchingBreakpoints.length === 0)
116
+ return;
117
+ const activeBreakpoint = matchingBreakpoints[0];
118
+ return mergedMap[activeBreakpoint];
81
119
  };
82
- const activeBreakPointThemeOverridesRef = (0, vue_1.computed)(() => {
120
+ const activeBreakpointThemeOverridesRef = (0, vue_1.computed)(() => {
83
121
  const { breakpointThemeOverrides } = props;
84
122
  const breakpointThemeOverridesToUse = breakpointThemeOverrides !== null && breakpointThemeOverrides !== void 0 ? breakpointThemeOverrides : UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedBreakpointThemeOverridesRef.value;
85
- return getActiveBreakpointValue(breakpointThemeOverridesToUse);
123
+ return getActiveBreakpointValue(breakpointThemeOverridesToUse, mergedBreakpointModeRef.value);
86
124
  });
87
125
  const mergedThemeOverridesRef = (0, vue_1.computed)(() => {
88
126
  const { themeOverrides } = props;
89
127
  if (themeOverrides === null)
90
- return undefined;
128
+ return;
91
129
  let baseThemeOverrides;
92
130
  if (themeOverrides === undefined) {
93
131
  baseThemeOverrides = UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedThemeOverridesRef.value;
@@ -101,14 +139,14 @@ exports.default = (0, vue_1.defineComponent)({
101
139
  baseThemeOverrides = (0, lodash_1.merge)({}, inheritedThemeOverrides, themeOverrides);
102
140
  }
103
141
  }
104
- const activeBreakPointThemeOverrides = activeBreakPointThemeOverridesRef.value;
105
- if (!activeBreakPointThemeOverrides) {
142
+ const activeBreakpointThemeOverrides = activeBreakpointThemeOverridesRef.value;
143
+ if (!activeBreakpointThemeOverrides) {
106
144
  return baseThemeOverrides;
107
145
  }
108
146
  if (!baseThemeOverrides) {
109
- return activeBreakPointThemeOverrides;
147
+ return activeBreakpointThemeOverrides;
110
148
  }
111
- return (0, lodash_1.merge)({}, baseThemeOverrides, activeBreakPointThemeOverrides);
149
+ return (0, lodash_1.merge)({}, baseThemeOverrides, activeBreakpointThemeOverrides);
112
150
  });
113
151
  const mergedNamespaceRef = (0, vooks_1.useMemo)(() => {
114
152
  const { namespace } = props;
@@ -143,24 +181,24 @@ exports.default = (0, vue_1.defineComponent)({
143
181
  window.removeEventListener('resize', updateWindowWidth);
144
182
  }
145
183
  });
146
- const activeBreakPointPropsRef = (0, vue_1.computed)(() => {
184
+ const activeBreakpointPropsRef = (0, vue_1.computed)(() => {
147
185
  const { breakpointProps } = props;
148
186
  const breakpointPropsToUse = breakpointProps !== null && breakpointProps !== void 0 ? breakpointProps : UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedBreakpointPropsRef.value;
149
- return getActiveBreakpointValue(breakpointPropsToUse);
187
+ return getActiveBreakpointValue(breakpointPropsToUse, mergedBreakpointModeRef.value);
150
188
  });
151
189
  const mergedComponentPropsRef = (0, vue_1.computed)(() => {
152
190
  const { componentOptions } = props;
153
191
  const baseComponentOptions = componentOptions !== undefined
154
192
  ? componentOptions
155
193
  : UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedComponentPropsRef.value;
156
- const activeBreakPointProps = activeBreakPointPropsRef.value;
157
- if (!activeBreakPointProps) {
194
+ const activeBreakpointProps = activeBreakpointPropsRef.value;
195
+ if (!activeBreakpointProps) {
158
196
  return baseComponentOptions;
159
197
  }
160
198
  if (!baseComponentOptions) {
161
- return activeBreakPointProps;
199
+ return activeBreakpointProps;
162
200
  }
163
- return (0, lodash_1.merge)({}, baseComponentOptions, activeBreakPointProps);
201
+ return (0, lodash_1.merge)({}, baseComponentOptions, activeBreakpointProps);
164
202
  });
165
203
  const mergedClsPrefixRef = (0, vue_1.computed)(() => {
166
204
  const { clsPrefix } = props;
@@ -230,13 +268,16 @@ exports.default = (0, vue_1.defineComponent)({
230
268
  mergedComponentPropsRef,
231
269
  mergedBreakpointPropsRef,
232
270
  mergedBreakpointThemeOverridesRef,
271
+ mergedBreakpointModeRef,
272
+ activeBreakpointPropsRef,
273
+ activeBreakpointThemeOverridesRef,
233
274
  mergedBorderedRef,
234
275
  mergedNamespaceRef,
235
276
  mergedClsPrefixRef,
236
277
  mergedLocaleRef: (0, vue_1.computed)(() => {
237
278
  const { locale } = props;
238
279
  if (locale === null)
239
- return undefined;
280
+ return;
240
281
  return locale === undefined
241
282
  ? UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedLocaleRef.value
242
283
  : locale;
@@ -244,7 +285,7 @@ exports.default = (0, vue_1.defineComponent)({
244
285
  mergedDateLocaleRef: (0, vue_1.computed)(() => {
245
286
  const { dateLocale } = props;
246
287
  if (dateLocale === null)
247
- return undefined;
288
+ return;
248
289
  return dateLocale === undefined
249
290
  ? UConfigProvider === null || UConfigProvider === void 0 ? void 0 : UConfigProvider.mergedDateLocaleRef.value
250
291
  : dateLocale;
@@ -13,4 +13,4 @@ export type GlobalThemeOverrides = {
13
13
  } & {
14
14
  [key in keyof GlobalThemeWithoutCommon]?: ExtractThemeOverrides<GlobalThemeWithoutCommon[key]>;
15
15
  };
16
- export type { GlobalIconConfig, GlobalComponentConfig, BreakpointProps, BreakpointThemeOverrides } from './internal-interface';
16
+ export type { GlobalIconConfig, GlobalComponentConfig, BreakpointProps, BreakpointThemeOverrides, BreakpointMode } from './internal-interface';
@@ -429,6 +429,7 @@ export type RtlEnabledState = Partial<Record<keyof GlobalThemeWithoutCommon, Rtl
429
429
  export type Breakpoints = Record<string, number> | undefined;
430
430
  export type BreakpointProps = Record<number, GlobalComponentConfig> | undefined;
431
431
  export type BreakpointThemeOverrides = Record<number, GlobalThemeOverrides> | undefined;
432
+ export type BreakpointMode = 'mobile-first' | 'desktop-first';
432
433
  export interface ConfigProviderInjection {
433
434
  mergedBreakpointsRef: Ref<Breakpoints | undefined>;
434
435
  mergedClsPrefixRef: Ref<string>;
@@ -446,6 +447,9 @@ export interface ConfigProviderInjection {
446
447
  mergedThemeHashRef: Ref<string>;
447
448
  mergedBreakpointPropsRef: Ref<BreakpointProps | undefined>;
448
449
  mergedBreakpointThemeOverridesRef: Ref<BreakpointThemeOverrides | undefined>;
450
+ mergedBreakpointModeRef: Ref<BreakpointMode>;
451
+ activeBreakpointPropsRef: Ref<GlobalComponentConfig | undefined>;
452
+ activeBreakpointThemeOverridesRef: Ref<GlobalThemeOverrides | undefined>;
449
453
  inlineThemeDisabled: boolean;
450
454
  preflightStyleDisabled: boolean;
451
455
  }
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "1.12.12";
1
+ declare const _default: "1.12.14";
2
2
  export default _default;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '1.12.12';
3
+ exports.default = '1.12.14';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uzum-tech/ui",
3
- "version": "1.12.12",
3
+ "version": "1.12.14",
4
4
  "description": "A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
package/web-types.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "framework": "vue",
4
4
  "name": "@uzum-tech/ui",
5
- "version": "1.12.12",
5
+ "version": "1.12.14",
6
6
  "js-types-syntax": "typescript",
7
7
  "contributions": {
8
8
  "html": {
@@ -3701,6 +3701,13 @@
3701
3701
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/config-provider",
3702
3702
  "type": "object"
3703
3703
  },
3704
+ {
3705
+ "name": "breakpoint-mode",
3706
+ "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/config-provider",
3707
+ "type": "'mobile-first' | 'desktop-first'",
3708
+ "description": "Controls how breakpoints are applied. In `desktop-first` mode (default), applies the largest breakpoint ≤ current width. In `mobile-first` mode, applies the smallest breakpoint ≥ current width.",
3709
+ "default": "'desktop-first'"
3710
+ },
3704
3711
  {
3705
3712
  "name": "preflight-style-disabled",
3706
3713
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/config-provider",
@@ -3730,14 +3737,14 @@
3730
3737
  "name": "break-point-props",
3731
3738
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/config-provider",
3732
3739
  "type": "{ [width: number]: GlobalComponentConfig }",
3733
- "description": "Component props configuration based on screen width. When screen width is less than or equal to the specified width, the corresponding component props will be applied. Useful for responsive design (e.g., smaller button size on mobile).",
3740
+ "description": "Component props configuration based on screen width. The behavior depends on `breakpoint-mode`. Values from previous breakpoints are inherited by default unless explicitly overridden.",
3734
3741
  "default": "undefined"
3735
3742
  },
3736
3743
  {
3737
3744
  "name": "break-point-theme-overrides",
3738
3745
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/config-provider",
3739
3746
  "type": "{ [width: number]: GlobalThemeOverrides }",
3740
- "description": "Theme variables configuration based on screen width. When screen width is less than or equal to the specified width, the corresponding theme overrides will be applied. Useful for responsive theming (e.g., different colors on mobile vs desktop).",
3747
+ "description": "Theme variables configuration based on screen width. The behavior depends on `breakpoint-mode`. Values from previous breakpoints are inherited by default unless explicitly overridden.",
3741
3748
  "default": "undefined"
3742
3749
  },
3743
3750
  {