@vkontakte/vkui 4.29.1 → 4.30.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.
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +11 -9
- package/.cache/ts/src/components/Calendar/Calendar.d.ts +10 -1
- package/.cache/ts/src/components/CalendarHeader/CalendarHeader.d.ts +6 -0
- package/.cache/ts/src/components/DateInput/DateInput.d.ts +1 -1
- package/.cache/ts/src/hooks/useCalendar.d.ts +4 -3
- package/dist/cjs/components/Calendar/Calendar.d.ts +10 -1
- package/dist/cjs/components/Calendar/Calendar.js +11 -4
- package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
- package/dist/cjs/components/CalendarHeader/CalendarHeader.d.ts +6 -0
- package/dist/cjs/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cjs/components/DateInput/DateInput.d.ts +1 -1
- package/dist/cjs/components/DateInput/DateInput.js +10 -2
- package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
- package/dist/cjs/components/PanelHeader/PanelHeader.js +3 -3
- package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cjs/hooks/useCalendar.d.ts +4 -3
- package/dist/cjs/hooks/useCalendar.js +15 -6
- package/dist/cjs/hooks/useCalendar.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +10 -1
- package/dist/components/Calendar/Calendar.js +11 -4
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.d.ts +6 -0
- package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts +1 -1
- package/dist/components/DateInput/DateInput.js +10 -2
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.js +3 -3
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.d.ts +10 -1
- package/dist/cssm/components/Calendar/Calendar.js +11 -4
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.d.ts +6 -0
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.d.ts +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +10 -2
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.css +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.js +3 -3
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/hooks/useCalendar.d.ts +4 -3
- package/dist/cssm/hooks/useCalendar.js +15 -6
- package/dist/cssm/hooks/useCalendar.js.map +1 -1
- package/dist/cssm/styles/components.css +1 -1
- package/dist/hooks/useCalendar.d.ts +4 -3
- package/dist/hooks/useCalendar.js +15 -6
- package/dist/hooks/useCalendar.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/Calendar/Calendar.tsx +26 -3
- package/src/components/CalendarHeader/CalendarHeader.tsx +6 -0
- package/src/components/DateInput/DateInput.tsx +12 -0
- package/src/components/PanelHeader/PanelHeader.css +13 -5
- package/src/components/PanelHeader/PanelHeader.tsx +3 -3
- package/src/components/Switch/Readme.md +12 -36
- package/src/hooks/useCalendar.ts +25 -9
package/package.json
CHANGED
|
@@ -28,6 +28,8 @@ export interface CalendarProps
|
|
|
28
28
|
| "nextMonthAriaLabel"
|
|
29
29
|
| "changeMonthAriaLabel"
|
|
30
30
|
| "changeYearAriaLabel"
|
|
31
|
+
| "onNextMonth"
|
|
32
|
+
| "onPrevMonth"
|
|
31
33
|
>,
|
|
32
34
|
HasRootRef<HTMLDivElement> {
|
|
33
35
|
value?: Date;
|
|
@@ -43,6 +45,15 @@ export interface CalendarProps
|
|
|
43
45
|
onChange?(value?: Date): void;
|
|
44
46
|
shouldDisableDate?(value: Date): boolean;
|
|
45
47
|
onClose?(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Дата отображаемого месяца.
|
|
50
|
+
* При использовании обновление даты должно происходить вне компонента.
|
|
51
|
+
*/
|
|
52
|
+
viewDate?: Date;
|
|
53
|
+
/**
|
|
54
|
+
* Изменение даты в шапке календаря.
|
|
55
|
+
*/
|
|
56
|
+
onHeaderChange?(value: Date): void;
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
const warn = warnOnce("Calendar");
|
|
@@ -68,6 +79,10 @@ export const Calendar: React.FC<CalendarProps> = ({
|
|
|
68
79
|
showNeighboringMonth,
|
|
69
80
|
changeDayAriaLabel = "Изменить день",
|
|
70
81
|
size = "m",
|
|
82
|
+
viewDate: externalViewDate,
|
|
83
|
+
onHeaderChange,
|
|
84
|
+
onNextMonth,
|
|
85
|
+
onPrevMonth,
|
|
71
86
|
...props
|
|
72
87
|
}) => {
|
|
73
88
|
const {
|
|
@@ -80,7 +95,15 @@ export const Calendar: React.FC<CalendarProps> = ({
|
|
|
80
95
|
isDayFocused,
|
|
81
96
|
isDayDisabled,
|
|
82
97
|
resetSelectedDay,
|
|
83
|
-
} = useCalendar({
|
|
98
|
+
} = useCalendar({
|
|
99
|
+
value,
|
|
100
|
+
disableFuture,
|
|
101
|
+
disablePast,
|
|
102
|
+
shouldDisableDate,
|
|
103
|
+
onHeaderChange,
|
|
104
|
+
onNextMonth,
|
|
105
|
+
onPrevMonth,
|
|
106
|
+
});
|
|
84
107
|
|
|
85
108
|
useIsomorphicLayoutEffect(() => {
|
|
86
109
|
if (value) {
|
|
@@ -140,7 +163,7 @@ export const Calendar: React.FC<CalendarProps> = ({
|
|
|
140
163
|
vkuiClass={classNames("Calendar", `Calendar--size-${size}`)}
|
|
141
164
|
>
|
|
142
165
|
<CalendarHeader
|
|
143
|
-
viewDate={viewDate}
|
|
166
|
+
viewDate={externalViewDate || viewDate}
|
|
144
167
|
onChange={setViewDate}
|
|
145
168
|
onNextMonth={setNextMonth}
|
|
146
169
|
onPrevMonth={setPrevMonth}
|
|
@@ -152,7 +175,7 @@ export const Calendar: React.FC<CalendarProps> = ({
|
|
|
152
175
|
changeYearAriaLabel={changeYearAriaLabel}
|
|
153
176
|
/>
|
|
154
177
|
<CalendarDays
|
|
155
|
-
viewDate={viewDate}
|
|
178
|
+
viewDate={externalViewDate || viewDate}
|
|
156
179
|
value={value}
|
|
157
180
|
weekStartsOn={weekStartsOn}
|
|
158
181
|
isDayFocused={isDayFocused}
|
|
@@ -30,7 +30,13 @@ export interface CalendarHeaderProps
|
|
|
30
30
|
changeMonthAriaLabel?: string;
|
|
31
31
|
changeYearAriaLabel?: string;
|
|
32
32
|
onChange(viewDate: Date): void;
|
|
33
|
+
/**
|
|
34
|
+
* Нажатие на кнопку переключения на следующий месяц.
|
|
35
|
+
*/
|
|
33
36
|
onNextMonth?(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Нажатие на кнопку переключения на предыдущий месяц.
|
|
39
|
+
*/
|
|
34
40
|
onPrevMonth?(): void;
|
|
35
41
|
}
|
|
36
42
|
|
|
@@ -40,6 +40,10 @@ export interface DateInputProps
|
|
|
40
40
|
| "changeDayAriaLabel"
|
|
41
41
|
| "showNeighboringMonth"
|
|
42
42
|
| "size"
|
|
43
|
+
| "viewDate"
|
|
44
|
+
| "onHeaderChange"
|
|
45
|
+
| "onNextMonth"
|
|
46
|
+
| "onPrevMonth"
|
|
43
47
|
>,
|
|
44
48
|
HasRootRef<HTMLDivElement> {
|
|
45
49
|
calendarPlacement?: Placement;
|
|
@@ -118,6 +122,10 @@ export const DateInput: React.FC<DateInputProps> = ({
|
|
|
118
122
|
changeMinutesAriaLabel = "Изменить минуту",
|
|
119
123
|
clearFieldAriaLabel = "Очистить поле",
|
|
120
124
|
showCalendarAriaLabel = "Показать календарь",
|
|
125
|
+
viewDate,
|
|
126
|
+
onHeaderChange,
|
|
127
|
+
onNextMonth,
|
|
128
|
+
onPrevMonth,
|
|
121
129
|
...props
|
|
122
130
|
}) => {
|
|
123
131
|
const daysRef = React.useRef<HTMLSpanElement>(null);
|
|
@@ -309,6 +317,10 @@ export const DateInput: React.FC<DateInputProps> = ({
|
|
|
309
317
|
changeDayAriaLabel={changeDayAriaLabel}
|
|
310
318
|
showNeighboringMonth={showNeighboringMonth}
|
|
311
319
|
size={size}
|
|
320
|
+
viewDate={viewDate}
|
|
321
|
+
onHeaderChange={onCalendarChange}
|
|
322
|
+
onNextMonth={onNextMonth}
|
|
323
|
+
onPrevMonth={onPrevMonth}
|
|
312
324
|
/>
|
|
313
325
|
</Popper>
|
|
314
326
|
)}
|
|
@@ -66,10 +66,6 @@
|
|
|
66
66
|
min-width: 90px;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
.PanelHeader--sizeX-compact .PanelHeader__separator {
|
|
70
|
-
padding-top: 4px;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
69
|
/**
|
|
74
70
|
* iOS
|
|
75
71
|
*/
|
|
@@ -234,13 +230,25 @@
|
|
|
234
230
|
top: calc(var(--panelheader_height_vkcom) + var(--safe-area-inset-top));
|
|
235
231
|
}
|
|
236
232
|
|
|
237
|
-
.
|
|
233
|
+
/* TODO: v5.0.0 новая адаптивность */
|
|
234
|
+
.PanelHeader--vkcom.PanelHeader--sizeX-regular:not(.ModalPageHeader__in)
|
|
235
|
+
.PanelHeader__in {
|
|
238
236
|
border-top-left-radius: 8px;
|
|
239
237
|
border-top-right-radius: 8px;
|
|
240
238
|
box-shadow: 0 0 0 var(--thin-border) var(--input_border) inset;
|
|
241
239
|
border-bottom: none;
|
|
242
240
|
}
|
|
243
241
|
|
|
242
|
+
.PanelHeader--vkcom.PanelHeader--sizeX-regular:not(.ModalPageHeader__in)::after {
|
|
243
|
+
position: absolute;
|
|
244
|
+
left: var(--thin-border);
|
|
245
|
+
right: var(--thin-border);
|
|
246
|
+
bottom: 0;
|
|
247
|
+
height: var(--thin-border);
|
|
248
|
+
background-color: var(--header_background);
|
|
249
|
+
content: "";
|
|
250
|
+
}
|
|
251
|
+
|
|
244
252
|
.PanelHeader--vkcom .PanelHeader__content {
|
|
245
253
|
text-align: center;
|
|
246
254
|
}
|
|
@@ -120,10 +120,10 @@ const PanelHeader: React.FC<PanelHeaderProps> = (props: PanelHeaderProps) => {
|
|
|
120
120
|
) : (
|
|
121
121
|
<PanelHeaderIn {...props} />
|
|
122
122
|
)}
|
|
123
|
-
{separator && visor &&
|
|
123
|
+
{separator && visor && (
|
|
124
124
|
<Separator
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
expanded={sizeX === SizeType.REGULAR && platform !== VKCOM}
|
|
126
|
+
wide={platform === VKCOM}
|
|
127
127
|
/>
|
|
128
128
|
)}
|
|
129
129
|
</div>
|
|
@@ -5,51 +5,27 @@
|
|
|
5
5
|
<Panel id="switch">
|
|
6
6
|
<PanelHeader>Switch</PanelHeader>
|
|
7
7
|
<Group>
|
|
8
|
-
<
|
|
9
|
-
role={null}
|
|
10
|
-
disabled
|
|
11
|
-
after={<Switch aria-label="Комментарии к записям" />}
|
|
12
|
-
>
|
|
8
|
+
<SimpleCell Component="label" after={<Switch />}>
|
|
13
9
|
Комментарии к записям
|
|
14
|
-
</
|
|
15
|
-
<
|
|
16
|
-
role={null}
|
|
17
|
-
disabled
|
|
18
|
-
after={<Switch defaultChecked aria-label="Ссылки" />}
|
|
19
|
-
>
|
|
10
|
+
</SimpleCell>
|
|
11
|
+
<SimpleCell Component="label" after={<Switch defaultChecked />}>
|
|
20
12
|
Ссылки
|
|
21
|
-
</
|
|
22
|
-
<
|
|
23
|
-
role={null}
|
|
24
|
-
disabled
|
|
25
|
-
after={<Switch disabled aria-label="Фотоальбомы" />}
|
|
26
|
-
>
|
|
13
|
+
</SimpleCell>
|
|
14
|
+
<SimpleCell Component="label" disabled after={<Switch disabled />}>
|
|
27
15
|
Фотоальбомы
|
|
28
|
-
</
|
|
16
|
+
</SimpleCell>
|
|
29
17
|
</Group>
|
|
30
18
|
<Group header={<Header mode="secondary">Компактный вид</Header>}>
|
|
31
19
|
<AdaptivityProvider sizeY="compact">
|
|
32
|
-
<
|
|
33
|
-
role={null}
|
|
34
|
-
disabled
|
|
35
|
-
after={<Switch aria-label="Комментарии к записям" />}
|
|
36
|
-
>
|
|
20
|
+
<SimpleCell Component="label" after={<Switch />}>
|
|
37
21
|
Комментарии к записям
|
|
38
|
-
</
|
|
39
|
-
<
|
|
40
|
-
role={null}
|
|
41
|
-
disabled
|
|
42
|
-
after={<Switch defaultChecked aria-label="Ссылки" />}
|
|
43
|
-
>
|
|
22
|
+
</SimpleCell>
|
|
23
|
+
<SimpleCell Component="label" after={<Switch defaultChecked />}>
|
|
44
24
|
Ссылки
|
|
45
|
-
</
|
|
46
|
-
<
|
|
47
|
-
role={null}
|
|
48
|
-
disabled
|
|
49
|
-
after={<Switch disabled aria-label="Фотоальбомы" />}
|
|
50
|
-
>
|
|
25
|
+
</SimpleCell>
|
|
26
|
+
<SimpleCell Component="label" disabled after={<Switch disabled />}>
|
|
51
27
|
Фотоальбомы
|
|
52
|
-
</
|
|
28
|
+
</SimpleCell>
|
|
53
29
|
</AdaptivityProvider>
|
|
54
30
|
</Group>
|
|
55
31
|
</Panel>
|
package/src/hooks/useCalendar.ts
CHANGED
|
@@ -8,8 +8,13 @@ import {
|
|
|
8
8
|
isAfter,
|
|
9
9
|
startOfDay,
|
|
10
10
|
} from "../lib/date";
|
|
11
|
+
import { CalendarProps } from "../components/Calendar/Calendar";
|
|
11
12
|
|
|
12
|
-
export interface UseCalendarDependencies
|
|
13
|
+
export interface UseCalendarDependencies
|
|
14
|
+
extends Pick<
|
|
15
|
+
CalendarProps,
|
|
16
|
+
"onHeaderChange" | "onNextMonth" | "onPrevMonth"
|
|
17
|
+
> {
|
|
13
18
|
value?: Array<Date | null> | Date;
|
|
14
19
|
disablePast?: boolean;
|
|
15
20
|
disableFuture?: boolean;
|
|
@@ -21,19 +26,30 @@ export function useCalendar({
|
|
|
21
26
|
disablePast,
|
|
22
27
|
disableFuture,
|
|
23
28
|
shouldDisableDate,
|
|
29
|
+
onHeaderChange,
|
|
30
|
+
onNextMonth,
|
|
31
|
+
onPrevMonth,
|
|
24
32
|
}: UseCalendarDependencies) {
|
|
25
33
|
const [viewDate, setViewDate] = React.useState(
|
|
26
34
|
(Array.isArray(value) ? value[0] : value) ?? new Date()
|
|
27
35
|
);
|
|
28
36
|
const [focusedDay, setFocusedDay] = React.useState<Date>();
|
|
29
37
|
|
|
30
|
-
const setPrevMonth = React.useCallback(
|
|
31
|
-
()
|
|
32
|
-
|
|
33
|
-
);
|
|
34
|
-
const setNextMonth = React.useCallback(
|
|
35
|
-
()
|
|
36
|
-
|
|
38
|
+
const setPrevMonth = React.useCallback(() => {
|
|
39
|
+
onPrevMonth?.();
|
|
40
|
+
setViewDate(subMonths(viewDate, 1));
|
|
41
|
+
}, [viewDate, onPrevMonth]);
|
|
42
|
+
const setNextMonth = React.useCallback(() => {
|
|
43
|
+
onNextMonth?.();
|
|
44
|
+
setViewDate(addMonths(viewDate, 1));
|
|
45
|
+
}, [viewDate, onNextMonth]);
|
|
46
|
+
|
|
47
|
+
const handleSetViewDate = React.useCallback(
|
|
48
|
+
(value: Date) => {
|
|
49
|
+
onHeaderChange?.(value);
|
|
50
|
+
setViewDate(value);
|
|
51
|
+
},
|
|
52
|
+
[onHeaderChange]
|
|
37
53
|
);
|
|
38
54
|
|
|
39
55
|
const isDayFocused = React.useCallback(
|
|
@@ -66,7 +82,7 @@ export function useCalendar({
|
|
|
66
82
|
|
|
67
83
|
return {
|
|
68
84
|
viewDate,
|
|
69
|
-
setViewDate,
|
|
85
|
+
setViewDate: handleSetViewDate,
|
|
70
86
|
setPrevMonth,
|
|
71
87
|
setNextMonth,
|
|
72
88
|
focusedDay,
|