@uzum-tech/ui 1.12.21 → 1.13.0

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 (95) hide show
  1. package/dist/index.js +2789 -510
  2. package/dist/index.prod.js +4 -4
  3. package/es/_styles/common/dark.js +1 -1
  4. package/es/_styles/common/light.d.ts +1 -0
  5. package/es/_styles/common/light.js +1 -1
  6. package/es/chat/src/ChatMessages.js +6 -1
  7. package/es/chat/src/styles/index.cssr.js +5 -1
  8. package/es/components.d.ts +1 -0
  9. package/es/components.js +1 -0
  10. package/es/config-provider/src/internal-interface.d.ts +3 -0
  11. package/es/date-picker-v2/index.d.ts +5 -0
  12. package/es/date-picker-v2/index.js +2 -0
  13. package/es/date-picker-v2/src/DatePickerV2.d.ts +4765 -0
  14. package/es/date-picker-v2/src/DatePickerV2.js +750 -0
  15. package/es/date-picker-v2/src/composables/useCalendarScroll.d.ts +1133 -0
  16. package/es/date-picker-v2/src/composables/useCalendarScroll.js +61 -0
  17. package/es/date-picker-v2/src/config.d.ts +14 -0
  18. package/es/date-picker-v2/src/config.js +34 -0
  19. package/es/date-picker-v2/src/interface.d.ts +42 -0
  20. package/es/date-picker-v2/src/interface.js +1 -0
  21. package/es/date-picker-v2/src/panel/CalendarPanel.d.ts +1222 -0
  22. package/es/date-picker-v2/src/panel/CalendarPanel.js +186 -0
  23. package/es/date-picker-v2/src/panel/CalendarRangePanel.d.ts +1246 -0
  24. package/es/date-picker-v2/src/panel/CalendarRangePanel.js +205 -0
  25. package/es/date-picker-v2/src/styles/index.cssr.d.ts +2 -0
  26. package/es/date-picker-v2/src/styles/index.cssr.js +190 -0
  27. package/es/date-picker-v2/src/utils.d.ts +12 -0
  28. package/es/date-picker-v2/src/utils.js +92 -0
  29. package/es/date-picker-v2/styles/dark.d.ts +447 -0
  30. package/es/date-picker-v2/styles/dark.js +19 -0
  31. package/es/date-picker-v2/styles/index.d.ts +3 -0
  32. package/es/date-picker-v2/styles/index.js +2 -0
  33. package/es/date-picker-v2/styles/light.d.ts +477 -0
  34. package/es/date-picker-v2/styles/light.js +56 -0
  35. package/es/dialog/src/DialogProvider.d.ts +2 -0
  36. package/es/header/src/Header.js +4 -1
  37. package/es/header/src/HeaderSearchDesktop.d.ts +12 -0
  38. package/es/header/src/HeaderSearchDesktop.js +21 -4
  39. package/es/header/src/HeaderSearchMobile.d.ts +12 -0
  40. package/es/header/src/HeaderSearchMobile.js +8 -2
  41. package/es/header/src/mobile/HeaderMobile.js +18 -3
  42. package/es/locales/common/enUS.js +1 -1
  43. package/es/theme-editor/src/ThemeEditor.d.ts +1 -0
  44. package/es/themes/dark.js +2 -0
  45. package/es/themes/light.js +2 -0
  46. package/es/version.d.ts +1 -1
  47. package/es/version.js +1 -1
  48. package/lib/_styles/common/dark.js +1 -1
  49. package/lib/_styles/common/light.d.ts +1 -0
  50. package/lib/_styles/common/light.js +1 -1
  51. package/lib/chat/src/ChatMessages.js +6 -1
  52. package/lib/chat/src/styles/index.cssr.js +5 -1
  53. package/lib/components.d.ts +1 -0
  54. package/lib/components.js +1 -0
  55. package/lib/config-provider/src/internal-interface.d.ts +3 -0
  56. package/lib/date-picker-v2/index.d.ts +5 -0
  57. package/lib/date-picker-v2/index.js +11 -0
  58. package/lib/date-picker-v2/src/DatePickerV2.d.ts +4765 -0
  59. package/lib/date-picker-v2/src/DatePickerV2.js +756 -0
  60. package/lib/date-picker-v2/src/composables/useCalendarScroll.d.ts +1133 -0
  61. package/lib/date-picker-v2/src/composables/useCalendarScroll.js +64 -0
  62. package/lib/date-picker-v2/src/config.d.ts +14 -0
  63. package/lib/date-picker-v2/src/config.js +37 -0
  64. package/lib/date-picker-v2/src/interface.d.ts +42 -0
  65. package/lib/date-picker-v2/src/interface.js +4 -0
  66. package/lib/date-picker-v2/src/panel/CalendarPanel.d.ts +1222 -0
  67. package/lib/date-picker-v2/src/panel/CalendarPanel.js +188 -0
  68. package/lib/date-picker-v2/src/panel/CalendarRangePanel.d.ts +1246 -0
  69. package/lib/date-picker-v2/src/panel/CalendarRangePanel.js +207 -0
  70. package/lib/date-picker-v2/src/styles/index.cssr.d.ts +2 -0
  71. package/lib/date-picker-v2/src/styles/index.cssr.js +195 -0
  72. package/lib/date-picker-v2/src/utils.d.ts +12 -0
  73. package/lib/date-picker-v2/src/utils.js +101 -0
  74. package/lib/date-picker-v2/styles/dark.d.ts +447 -0
  75. package/lib/date-picker-v2/styles/dark.js +21 -0
  76. package/lib/date-picker-v2/styles/index.d.ts +3 -0
  77. package/lib/date-picker-v2/styles/index.js +10 -0
  78. package/lib/date-picker-v2/styles/light.d.ts +477 -0
  79. package/lib/date-picker-v2/styles/light.js +60 -0
  80. package/lib/dialog/src/DialogProvider.d.ts +2 -0
  81. package/lib/header/src/Header.js +4 -1
  82. package/lib/header/src/HeaderSearchDesktop.d.ts +12 -0
  83. package/lib/header/src/HeaderSearchDesktop.js +20 -3
  84. package/lib/header/src/HeaderSearchMobile.d.ts +12 -0
  85. package/lib/header/src/HeaderSearchMobile.js +7 -1
  86. package/lib/header/src/mobile/HeaderMobile.js +18 -3
  87. package/lib/locales/common/enUS.js +1 -1
  88. package/lib/theme-editor/src/ThemeEditor.d.ts +1 -0
  89. package/lib/themes/dark.js +2 -0
  90. package/lib/themes/light.js +2 -0
  91. package/lib/version.d.ts +1 -1
  92. package/lib/version.js +1 -1
  93. package/package.json +1 -1
  94. package/volar.d.ts +1 -0
  95. package/web-types.json +161 -1
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vue_1 = require("vue");
4
+ const _internal_1 = require("../../../_internal");
5
+ const icons_1 = require("../../../_internal/icons");
6
+ const utils_1 = require("../utils");
7
+ const interface_1 = require("../interface");
8
+ const config_1 = require("../config");
9
+ const useCalendarScroll_1 = require("../composables/useCalendarScroll");
10
+ exports.default = (0, vue_1.defineComponent)({
11
+ name: 'CalendarRangePanel',
12
+ props: {
13
+ value: {
14
+ type: [Array, null],
15
+ default: null
16
+ },
17
+ displayYear: {
18
+ type: Number,
19
+ required: true
20
+ },
21
+ displayMonth: {
22
+ type: Number,
23
+ required: true
24
+ },
25
+ showYearDropdown: {
26
+ type: Boolean,
27
+ required: true
28
+ },
29
+ isSelecting: {
30
+ type: Boolean,
31
+ required: true
32
+ },
33
+ isDateDisabled: Function,
34
+ onDateClick: {
35
+ type: Function,
36
+ required: true
37
+ },
38
+ onDateMouseEnter: {
39
+ type: Function,
40
+ required: true
41
+ },
42
+ onMonthSelect: {
43
+ type: Function,
44
+ required: true
45
+ },
46
+ onYearSelect: {
47
+ type: Function,
48
+ required: true
49
+ },
50
+ onToggleYearDropdown: {
51
+ type: Function,
52
+ required: true
53
+ },
54
+ onMonthScroll: {
55
+ type: Function,
56
+ required: true
57
+ },
58
+ style: [Object, String],
59
+ themeClass: String
60
+ },
61
+ setup(props, { expose }) {
62
+ const injection = (0, vue_1.inject)(interface_1.datePickerV2InjectionKey);
63
+ const mergedClsPrefix = (injection === null || injection === void 0 ? void 0 : injection.mergedClsPrefixRef.value) || 'u';
64
+ const dateLocaleRef = injection === null || injection === void 0 ? void 0 : injection.dateLocaleRef;
65
+ const localeRef = injection === null || injection === void 0 ? void 0 : injection.localeRef;
66
+ const dateFnsOptions = (0, vue_1.computed)(() => {
67
+ var _a;
68
+ const loc = (_a = dateLocaleRef === null || dateLocaleRef === void 0 ? void 0 : dateLocaleRef.value) === null || _a === void 0 ? void 0 : _a.locale;
69
+ return loc ? { locale: loc } : undefined;
70
+ });
71
+ const now = Date.now();
72
+ // Используем composable для скролла
73
+ const { monthScrollbarRef, yearScrollbarRef, calendarScrollbarRef, scrollToMonthInMonthList, scrollToYear, scrollToMonthInCalendar: scrollToMonthInCalendarRaw } = (0, useCalendarScroll_1.useCalendarScroll)();
74
+ // Все месяцы для навигации (с локализацией)
75
+ const monthFormat = (0, vue_1.computed)(() => { var _a, _b; return (_b = (_a = localeRef === null || localeRef === void 0 ? void 0 : localeRef.value) === null || _a === void 0 ? void 0 : _a.monthFormat) !== null && _b !== void 0 ? _b : 'MMM'; });
76
+ const allMonthsRef = (0, vue_1.computed)(() => (0, utils_1.generateAllMonths)(config_1.START_YEAR, config_1.END_YEAR, dateFnsOptions.value, monthFormat.value));
77
+ // Названия дней недели (с локализацией)
78
+ const dayFormat = (0, vue_1.computed)(() => { var _a, _b; return (_b = (_a = localeRef === null || localeRef === void 0 ? void 0 : localeRef.value) === null || _a === void 0 ? void 0 : _a.dayFormat) !== null && _b !== void 0 ? _b : 'eeeeee'; });
79
+ const weekdayNamesRef = (0, vue_1.computed)(() => (0, utils_1.getWeekdayNames)(dateFnsOptions.value, dayFormat.value));
80
+ // Все годы для dropdown
81
+ const yearsRef = (0, vue_1.computed)(() => (0, utils_1.generateYears)());
82
+ // Группировка месяцев по годам для отображения с заголовками
83
+ const groupedMonthsRef = (0, vue_1.computed)(() => {
84
+ const months = allMonthsRef.value;
85
+ const groups = [];
86
+ let currentYear = -1;
87
+ let currentGroup = [];
88
+ for (const month of months) {
89
+ if (month.year !== currentYear) {
90
+ if (currentGroup.length > 0) {
91
+ groups.push({ year: currentYear, months: currentGroup });
92
+ }
93
+ currentYear = month.year;
94
+ currentGroup = [];
95
+ }
96
+ currentGroup.push(month);
97
+ }
98
+ if (currentGroup.length > 0) {
99
+ groups.push({ year: currentYear, months: currentGroup });
100
+ }
101
+ return groups;
102
+ });
103
+ // Все месяцы текущего года с их днями для скролла
104
+ const yearMonthsWithDatesRef = (0, vue_1.computed)(() => {
105
+ const year = props.displayYear;
106
+ const months = [];
107
+ for (let month = 0; month < 12; month++) {
108
+ months.push({
109
+ year,
110
+ month,
111
+ label: (0, utils_1.getMonthLabel)(month, dateFnsOptions.value),
112
+ dates: (0, utils_1.generateDatesForMonth)(year, month, null, // single value не используется для range
113
+ props.value, now, props.isDateDisabled)
114
+ });
115
+ }
116
+ return months;
117
+ });
118
+ function scrollToMonthInCalendar(month) {
119
+ const monthRows = yearMonthsWithDatesRef.value.map((item) => Math.ceil(item.dates.length / 7));
120
+ scrollToMonthInCalendarRaw(month, monthRows);
121
+ }
122
+ // Экспортируем методы для родительского компонента
123
+ expose({
124
+ scrollToMonthInMonthList,
125
+ scrollToYear,
126
+ scrollToMonthInCalendar
127
+ });
128
+ return {
129
+ mergedClsPrefix,
130
+ allMonthsRef,
131
+ groupedMonthsRef,
132
+ yearsRef,
133
+ yearMonthsWithDatesRef,
134
+ weekdayNamesRef,
135
+ monthScrollbarRef,
136
+ yearScrollbarRef,
137
+ calendarScrollbarRef,
138
+ now
139
+ };
140
+ },
141
+ render() {
142
+ const { mergedClsPrefix, displayYear, displayMonth, showYearDropdown, groupedMonthsRef, yearsRef, yearMonthsWithDatesRef, weekdayNamesRef } = this;
143
+ return ((0, vue_1.h)("div", { class: [`${mergedClsPrefix}-date-picker-v2-panel`, this.themeClass], style: this.style },
144
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__left` },
145
+ (0, vue_1.h)("div", { class: [
146
+ `${mergedClsPrefix}-date-picker-v2-panel__year-trigger`,
147
+ showYearDropdown &&
148
+ `${mergedClsPrefix}-date-picker-v2-panel__year-trigger--active`
149
+ ], onClick: this.onToggleYearDropdown },
150
+ (0, vue_1.h)("span", null, displayYear),
151
+ (0, vue_1.h)(_internal_1.UBaseIcon, { clsPrefix: mergedClsPrefix }, { default: () => (0, vue_1.h)(icons_1.ChevronDownIcon, null) })),
152
+ showYearDropdown ? ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__year-dropdown` },
153
+ (0, vue_1.h)(_internal_1.UScrollbar, { ref: "yearScrollbarRef", style: { maxHeight: '320px' } },
154
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__year-list` }, yearsRef.map((item) => ((0, vue_1.h)("div", { key: item.year, class: [
155
+ `${mergedClsPrefix}-date-picker-v2-panel__year-item`,
156
+ item.year === displayYear &&
157
+ `${mergedClsPrefix}-date-picker-v2-panel__year-item--selected`
158
+ ], onClick: () => {
159
+ this.onYearSelect(item.year);
160
+ } }, item.year))))))) : ((0, vue_1.h)(_internal_1.UScrollbar, { ref: "monthScrollbarRef", style: { flex: 1 }, onScroll: (e) => {
161
+ const target = e.target;
162
+ const scrollTop = target.scrollTop;
163
+ // Определяем год по позиции скролла
164
+ const yearIndex = Math.floor(scrollTop / config_1.YEAR_GROUP_HEIGHT);
165
+ const year = config_1.START_YEAR + yearIndex;
166
+ this.onMonthScroll(year);
167
+ } },
168
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__month-list` }, groupedMonthsRef.map((group) => ((0, vue_1.h)("div", { key: group.year, class: `${mergedClsPrefix}-date-picker-v2-panel__year-group` },
169
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__year-header` }, group.year),
170
+ group.months.map((item) => ((0, vue_1.h)("div", { key: String(item.year) + '-' + String(item.month), class: [
171
+ `${mergedClsPrefix}-date-picker-v2-panel__month-item`,
172
+ item.year === displayYear &&
173
+ item.month === displayMonth &&
174
+ `${mergedClsPrefix}-date-picker-v2-panel__month-item--selected`
175
+ ], onClick: () => {
176
+ this.onMonthSelect(item.year, item.month);
177
+ } }, item.label)))))))))),
178
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__right` },
179
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__weekdays` }, weekdayNamesRef.map((day, i) => ((0, vue_1.h)("div", { key: day, class: [
180
+ `${mergedClsPrefix}-date-picker-v2-panel__weekday`,
181
+ i >= 5 &&
182
+ `${mergedClsPrefix}-date-picker-v2-panel__weekday--weekend`
183
+ ] }, day)))),
184
+ (0, vue_1.h)(_internal_1.UScrollbar, { ref: "calendarScrollbarRef", style: { flex: 1 } },
185
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__calendar-scroll` }, yearMonthsWithDatesRef.map((monthData) => ((0, vue_1.h)("div", { key: `${monthData.year}-${monthData.month}`, class: `${mergedClsPrefix}-date-picker-v2-panel__month-section` },
186
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__month-title` }, monthData.label),
187
+ (0, vue_1.h)("div", { class: `${mergedClsPrefix}-date-picker-v2-panel__dates` }, monthData.dates.map((dateItem) => dateItem.isCurrentMonth ? ((0, vue_1.h)("div", { key: dateItem.ts, class: [
188
+ `${mergedClsPrefix}-date-picker-v2-panel__date`,
189
+ dateItem.isCurrentDate &&
190
+ `${mergedClsPrefix}-date-picker-v2-panel__date--current`,
191
+ dateItem.selected &&
192
+ `${mergedClsPrefix}-date-picker-v2-panel__date--selected`,
193
+ dateItem.inRange &&
194
+ `${mergedClsPrefix}-date-picker-v2-panel__date--in-range`,
195
+ dateItem.isRangeStart &&
196
+ `${mergedClsPrefix}-date-picker-v2-panel__date--range-start`,
197
+ dateItem.isRangeEnd &&
198
+ `${mergedClsPrefix}-date-picker-v2-panel__date--range-end`,
199
+ dateItem.disabled &&
200
+ `${mergedClsPrefix}-date-picker-v2-panel__date--disabled`
201
+ ], onClick: () => {
202
+ this.onDateClick(dateItem.ts);
203
+ }, onMouseenter: () => {
204
+ this.onDateMouseEnter(dateItem.ts);
205
+ } }, dateItem.date)) : ((0, vue_1.h)("div", { key: dateItem.ts, class: `${mergedClsPrefix}-date-picker-v2-panel__date ${mergedClsPrefix}-date-picker-v2-panel__date--empty` }))))))))))));
206
+ }
207
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("css-render").CNode;
2
+ export default _default;
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ const cssr_1 = require("../../../_utils/cssr");
7
+ const fade_in_scale_up_cssr_1 = require("../../../_styles/transitions/fade-in-scale-up.cssr");
8
+ exports.default = (0, cssr_1.c)([(0, cssr_1.cB)('date-picker-v2', `
9
+ position: relative;
10
+ z-index: auto;
11
+ `, [(0, cssr_1.cB)('date-picker-v2-icon', `
12
+ color: var(--u-icon-color);
13
+ transition: color .3s var(--u-bezier);
14
+ `), (0, cssr_1.cE)('separator', `
15
+ color: var(--u-panel-text-color);
16
+ font-size: 14px;
17
+ user-select: none;
18
+ `), (0, cssr_1.cM)('disabled', [(0, cssr_1.cB)('date-picker-v2-icon', `
19
+ color: var(--u-icon-color-disabled);
20
+ `)])]), (0, cssr_1.cB)('date-picker-v2-panel', `
21
+ display: flex;
22
+ width: max-content;
23
+ height: 410px;
24
+ background-color: var(--u-panel-color);
25
+ border-radius: var(--u-panel-border-radius);
26
+ box-shadow: var(--u-panel-box-shadow);
27
+ overflow: hidden;
28
+ outline: none;
29
+ margin: 6px 0;
30
+ `, [(0, fade_in_scale_up_cssr_1.fadeInScaleUpTransition)(), (0, cssr_1.cE)('left', `
31
+ width: 138px;
32
+ border-right: 1px solid var(--u-divider-color);
33
+ display: flex;
34
+ flex-direction: column;
35
+ overflow: hidden;
36
+ `), (0, cssr_1.cE)('year-trigger', `
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: space-between;
40
+ padding: 11px 24px;
41
+ height: 42px;
42
+ box-sizing: border-box;
43
+ background-color: var(--u-year-trigger-color);
44
+ border-bottom: 1px solid var(--u-divider-color);
45
+ cursor: pointer;
46
+ font-size: 14px;
47
+ font-weight: 500;
48
+ color: var(--u-year-trigger-text-color);
49
+ transition: background-color .2s var(--u-bezier);
50
+ `, [(0, cssr_1.c)('&:hover', `
51
+ background-color: var(--u-year-trigger-color-hover);
52
+ `), (0, cssr_1.cM)('active', `
53
+ background-color: var(--u-year-trigger-color-hover);
54
+ `, [(0, cssr_1.c)('.u-icon', `
55
+ transform: rotate(180deg);
56
+ `)]), (0, cssr_1.c)('.u-icon', `
57
+ width: 20px;
58
+ height: 20px;
59
+ transition: transform .2s var(--u-bezier);
60
+ `)]), (0, cssr_1.cE)('year-dropdown', `
61
+ flex: 1;
62
+ overflow: hidden;
63
+ `), (0, cssr_1.cE)('year-list', `
64
+ padding: 8px 0;
65
+ `), (0, cssr_1.cE)('year-item', `
66
+ padding: 12px 24px;
67
+ font-size: 14px;
68
+ font-weight: 500;
69
+ color: var(--u-panel-text-color);
70
+ cursor: pointer;
71
+ transition: background-color .2s var(--u-bezier);
72
+ `, [(0, cssr_1.c)('&:hover', `
73
+ background-color: var(--u-month-item-color-hover);
74
+ `), (0, cssr_1.cM)('selected', `
75
+ color: var(--u-month-item-text-color-active);
76
+ background-color: var(--u-month-item-color-active);
77
+ `)]), (0, cssr_1.cE)('month-list', `
78
+ padding: 0;
79
+ `), (0, cssr_1.cE)('year-group', `
80
+ position: relative;
81
+ `), (0, cssr_1.cE)('year-header', `
82
+ z-index: 1;
83
+ padding: 11px 24px;
84
+ height: 42px;
85
+ box-sizing: border-box;
86
+ background-color: var(--u-year-trigger-color);
87
+ font-size: 14px;
88
+ font-weight: 500;
89
+ color: var(--u-year-trigger-text-color);
90
+ `), (0, cssr_1.cE)('month-item', `
91
+ padding: 14px 24px;
92
+ height: var(--u-month-item-height);
93
+ box-sizing: border-box;
94
+ font-size: 16px;
95
+ font-weight: 500;
96
+ color: var(--u-panel-text-color);
97
+ cursor: pointer;
98
+ transition: background-color .2s var(--u-bezier), color .2s var(--u-bezier);
99
+ `, [(0, cssr_1.c)('&:hover', `
100
+ background-color: var(--u-month-item-color-hover);
101
+ `), (0, cssr_1.cM)('selected', `
102
+ color: var(--u-month-item-text-color-active);
103
+ background-color: var(--u-month-item-color-active);
104
+ `)]), (0, cssr_1.cE)('right', `
105
+ flex: 1;
106
+ display: flex;
107
+ flex-direction: column;
108
+ overflow: hidden;
109
+ `), (0, cssr_1.cE)('weekdays', `
110
+ display: grid;
111
+ grid-template-columns: repeat(7, 1fr);
112
+ padding: 0 12px;
113
+ height: 42px;
114
+ align-items: center;
115
+ border-bottom: 1px solid var(--u-divider-color);
116
+ background-color: var(--u-panel-color);
117
+ position: sticky;
118
+ top: 0;
119
+ z-index: 1;
120
+ `), (0, cssr_1.cE)('weekday', `
121
+ text-align: center;
122
+ font-size: 14px;
123
+ font-weight: 500;
124
+ color: var(--u-weekday-text-color);
125
+ `, [(0, cssr_1.cM)('weekend', `
126
+ color: var(--u-weekend-text-color);
127
+ `)]), (0, cssr_1.cE)('calendar-scroll', `
128
+ padding: 0;
129
+ `), (0, cssr_1.cE)('month-section', `
130
+ margin-bottom: 16px;
131
+ `), (0, cssr_1.cE)('month-title', `
132
+ padding: 12px 12px 8px;
133
+ font-size: 14px;
134
+ font-weight: 600;
135
+ color: var(--u-panel-text-color);
136
+ `), (0, cssr_1.cE)('dates', `
137
+ display: grid;
138
+ grid-template-columns: repeat(7, 1fr);
139
+ gap: 4px;
140
+ padding: 0 12px;
141
+ `), (0, cssr_1.cE)('date', `
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ width: 42px;
146
+ height: 42px;
147
+ font-size: 14px;
148
+ font-weight: 500;
149
+ color: var(--u-item-text-color);
150
+ border-radius: var(--u-item-border-radius);
151
+ cursor: pointer;
152
+ position: relative;
153
+ transition:
154
+ background-color .2s var(--u-bezier),
155
+ color .2s var(--u-bezier);
156
+ `, [(0, cssr_1.c)('&:hover', `
157
+ background-color: var(--u-item-color-hover);
158
+ `), (0, cssr_1.cM)('other-month', `
159
+ color: var(--u-item-text-color-other-month);
160
+ `), (0, cssr_1.cM)('empty', `
161
+ pointer-events: none;
162
+ cursor: default;
163
+ `, [(0, cssr_1.c)('&:hover', `
164
+ background-color: transparent;
165
+ `)]), (0, cssr_1.cM)('current', `
166
+ color: var(--u-item-text-color);
167
+ `, [(0, cssr_1.c)('&::before', `
168
+ content: '';
169
+ position: absolute;
170
+ bottom: 8px;
171
+ left: 50%;
172
+ transform: translateX(-50%);
173
+ width: 4px;
174
+ height: 2px;
175
+ border-radius: 1px;
176
+ background-color: var(--u-current-date-indicator-color);
177
+ `)]), (0, cssr_1.cM)('selected', `
178
+ background-color: var(--u-item-color-active);
179
+ color: var(--u-item-text-color-active);
180
+ `, [(0, cssr_1.c)('&:hover', `
181
+ background-color: var(--u-item-color-active);
182
+ `)]), (0, cssr_1.cM)('in-range', `
183
+ background-color: var(--u-item-color-included);
184
+ `), (0, cssr_1.cM)('range-start', `
185
+ background-color: var(--u-item-color-active);
186
+ color: var(--u-item-text-color-active);
187
+ `), (0, cssr_1.cM)('range-end', `
188
+ background-color: var(--u-item-color-active);
189
+ color: var(--u-item-text-color-active);
190
+ `), (0, cssr_1.cM)('disabled', `
191
+ color: var(--u-item-text-color-disabled);
192
+ cursor: not-allowed;
193
+ `, [(0, cssr_1.c)('&:hover', `
194
+ background-color: transparent;
195
+ `)])])])]);
@@ -0,0 +1,12 @@
1
+ import type { Locale } from 'date-fns';
2
+ import type { DateItem, MonthItem, YearItem } from './interface';
3
+ export interface DateFnsOptions {
4
+ locale: Locale;
5
+ }
6
+ export declare function generateDatesForMonth(year: number, month: number, value: number | null, rangeValue: [number, number] | null, now: number, isDateDisabled?: (ts: number) => boolean): DateItem[];
7
+ export declare function getMonthLabel(month: number, options?: DateFnsOptions): string;
8
+ export declare function getWeekdayNames(options?: DateFnsOptions, dayFormat?: string): string[];
9
+ export declare function generateMonthsForYear(year: number, options?: DateFnsOptions, monthFormat?: string): MonthItem[];
10
+ export declare function generateAllMonths(startYear?: number, endYear?: number, options?: DateFnsOptions, monthFormat?: string): MonthItem[];
11
+ export declare function generateYears(startYear?: number, endYear?: number): YearItem[];
12
+ export declare function formatDate(ts: number, formatStr?: string, options?: DateFnsOptions): string;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateDatesForMonth = generateDatesForMonth;
4
+ exports.getMonthLabel = getMonthLabel;
5
+ exports.getWeekdayNames = getWeekdayNames;
6
+ exports.generateMonthsForYear = generateMonthsForYear;
7
+ exports.generateAllMonths = generateAllMonths;
8
+ exports.generateYears = generateYears;
9
+ exports.formatDate = formatDate;
10
+ const date_fns_1 = require("date-fns");
11
+ const config_1 = require("./config");
12
+ function generateDatesForMonth(year, month, value, rangeValue, now, isDateDisabled) {
13
+ const date = new Date(year, month, 1);
14
+ const monthStart = (0, date_fns_1.startOfMonth)(date);
15
+ const monthEnd = (0, date_fns_1.endOfMonth)(date);
16
+ const calendarStart = (0, date_fns_1.startOfWeek)(monthStart, { weekStartsOn: 1 });
17
+ const calendarEnd = (0, date_fns_1.endOfWeek)(monthEnd, { weekStartsOn: 1 });
18
+ const days = (0, date_fns_1.eachDayOfInterval)({ start: calendarStart, end: calendarEnd });
19
+ return days.map((day) => {
20
+ const ts = (0, date_fns_1.getTime)(day);
21
+ const dayYear = (0, date_fns_1.getYear)(day);
22
+ const dayMonth = (0, date_fns_1.getMonth)(day);
23
+ const dayDate = (0, date_fns_1.getDate)(day);
24
+ let selected = false;
25
+ let inRange = false;
26
+ let isRangeStart = false;
27
+ let isRangeEnd = false;
28
+ if (value !== null) {
29
+ selected = (0, date_fns_1.isSameDay)(day, value);
30
+ }
31
+ if (rangeValue !== null) {
32
+ const [start, end] = rangeValue;
33
+ isRangeStart = (0, date_fns_1.isSameDay)(day, start);
34
+ isRangeEnd = (0, date_fns_1.isSameDay)(day, end);
35
+ if (start && end) {
36
+ inRange = (0, date_fns_1.isWithinInterval)(day, {
37
+ start: new Date(Math.min(start, end)),
38
+ end: new Date(Math.max(start, end))
39
+ });
40
+ }
41
+ selected = isRangeStart || isRangeEnd;
42
+ }
43
+ return {
44
+ year: dayYear,
45
+ month: dayMonth,
46
+ date: dayDate,
47
+ ts,
48
+ isCurrentDate: (0, date_fns_1.isSameDay)(day, now),
49
+ isCurrentMonth: (0, date_fns_1.isSameMonth)(day, date),
50
+ selected,
51
+ inRange,
52
+ isRangeStart,
53
+ isRangeEnd,
54
+ disabled: isDateDisabled ? isDateDisabled(ts) : false
55
+ };
56
+ });
57
+ }
58
+ function getMonthLabel(month, options) {
59
+ if (options === null || options === void 0 ? void 0 : options.locale) {
60
+ return (0, date_fns_1.format)(new Date(2024, month, 1), 'MMM', options);
61
+ }
62
+ return config_1.MONTH_NAMES[month];
63
+ }
64
+ function getWeekdayNames(options, dayFormat = 'eeeeee') {
65
+ if (options === null || options === void 0 ? void 0 : options.locale) {
66
+ const base = new Date(2024, 0, 1);
67
+ return Array.from({ length: 7 }, (_, i) => (0, date_fns_1.format)((0, date_fns_1.addDays)(base, i), dayFormat, options));
68
+ }
69
+ return ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
70
+ }
71
+ function generateMonthsForYear(year, options, monthFormat = 'MMM') {
72
+ const getLabel = (index) => (options === null || options === void 0 ? void 0 : options.locale)
73
+ ? (0, date_fns_1.format)(new Date(year, index, 1), monthFormat, options)
74
+ : config_1.MONTH_NAMES[index];
75
+ return Array.from({ length: 12 }, (_, index) => ({
76
+ year,
77
+ month: index,
78
+ label: getLabel(index),
79
+ ts: (0, date_fns_1.getTime)(new Date(year, index, 1))
80
+ }));
81
+ }
82
+ function generateAllMonths(startYear = config_1.START_YEAR, endYear = config_1.END_YEAR, options, monthFormat = 'MMM') {
83
+ const months = [];
84
+ for (let year = startYear; year <= endYear; year++) {
85
+ months.push(...generateMonthsForYear(year, options, monthFormat));
86
+ }
87
+ return months;
88
+ }
89
+ function generateYears(startYear = config_1.START_YEAR, endYear = config_1.END_YEAR) {
90
+ const years = [];
91
+ for (let year = startYear; year <= endYear; year++) {
92
+ years.push({
93
+ year,
94
+ ts: (0, date_fns_1.getTime)(new Date(year, 0, 1))
95
+ });
96
+ }
97
+ return years;
98
+ }
99
+ function formatDate(ts, formatStr = 'dd.MM.yyyy', options) {
100
+ return (0, date_fns_1.format)(ts, formatStr, options !== null && options !== void 0 ? options : {});
101
+ }