Skip to content

Commit a995a34

Browse files
committed
Merge branch 'main' into issue-5794/sr-only
2 parents 81e9c6f + 0aecff1 commit a995a34

File tree

12 files changed

+687
-181
lines changed

12 files changed

+687
-181
lines changed

.github/workflows/security.yml

Lines changed: 0 additions & 22 deletions
This file was deleted.

docs-site/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424
"@eslint/js": "^9.33.0",
2525
"@types/react": "^19.1.10",
2626
"@types/react-dom": "^19.1.7",
27-
"@vitejs/plugin-react": "^5.0.0",
27+
"@vitejs/plugin-react": "^5.0.1",
2828
"eslint": "^9.33.0",
2929
"eslint-plugin-react": "^7.37.5",
3030
"eslint-plugin-react-hooks": "^6.0.0",
3131
"eslint-plugin-react-refresh": "^0.4.20",
3232
"globals": "^16.3.0",
3333
"sass": "^1.90.0",
34-
"vite": "^7.1.2"
34+
"vite": "^7.1.3"
3535
},
3636
"packageManager": "[email protected]"
3737
}

docs-site/yarn.lock

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ __metadata:
8181
languageName: node
8282
linkType: hard
8383

84-
"@babel/core@npm:^7.28.0":
84+
"@babel/core@npm:^7.28.3":
8585
version: 7.28.3
8686
resolution: "@babel/core@npm:7.28.3"
8787
dependencies:
@@ -1295,10 +1295,10 @@ __metadata:
12951295
languageName: node
12961296
linkType: hard
12971297

1298-
"@rolldown/pluginutils@npm:1.0.0-beta.30":
1299-
version: 1.0.0-beta.30
1300-
resolution: "@rolldown/pluginutils@npm:1.0.0-beta.30"
1301-
checksum: 10c0/aff8b532cb9d82d94c9a4101fa12ecb10620ad47d52dbb9135a5c65bde1ad19895b41026b821f4d607083699239a5d0010198401b6a6a54ab6a10d0015302768
1298+
"@rolldown/pluginutils@npm:1.0.0-beta.32":
1299+
version: 1.0.0-beta.32
1300+
resolution: "@rolldown/pluginutils@npm:1.0.0-beta.32"
1301+
checksum: 10c0/ba3582fc3c35c8eb57b0df2d22d0733b1be83d37edcc258203364773f094f58fc0cb7a056d604603573a69dd0105a466506cad467f59074e1e53d0dc26191f06
13021302
languageName: node
13031303
linkType: hard
13041304

@@ -1529,19 +1529,19 @@ __metadata:
15291529
languageName: node
15301530
linkType: hard
15311531

1532-
"@vitejs/plugin-react@npm:^5.0.0":
1533-
version: 5.0.0
1534-
resolution: "@vitejs/plugin-react@npm:5.0.0"
1532+
"@vitejs/plugin-react@npm:^5.0.1":
1533+
version: 5.0.1
1534+
resolution: "@vitejs/plugin-react@npm:5.0.1"
15351535
dependencies:
1536-
"@babel/core": "npm:^7.28.0"
1536+
"@babel/core": "npm:^7.28.3"
15371537
"@babel/plugin-transform-react-jsx-self": "npm:^7.27.1"
15381538
"@babel/plugin-transform-react-jsx-source": "npm:^7.27.1"
1539-
"@rolldown/pluginutils": "npm:1.0.0-beta.30"
1539+
"@rolldown/pluginutils": "npm:1.0.0-beta.32"
15401540
"@types/babel__core": "npm:^7.20.5"
15411541
react-refresh: "npm:^0.17.0"
15421542
peerDependencies:
15431543
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
1544-
checksum: 10c0/e5813839d319ab5dc1b90cab40b6c08388f26e456166ba9df10ffc3c3f4ecc594cec06715b5c93390bba56140ca5f68a18f2233f7d275d77e5bbfeb979e4fd9b
1544+
checksum: 10c0/2641171beedfc38edc5671abb47706906f9af2a79a6dfff4e946106c9550de4f83ccae41c164f3ee26a3edf07127ecc0e415fe5cddbf7abc71fbb2540016c27d
15451545
languageName: node
15461546
linkType: hard
15471547

@@ -2785,7 +2785,7 @@ __metadata:
27852785
languageName: node
27862786
linkType: hard
27872787

2788-
"fdir@npm:^6.4.6":
2788+
"fdir@npm:^6.5.0":
27892789
version: 6.5.0
27902790
resolution: "fdir@npm:6.5.0"
27912791
peerDependencies:
@@ -4569,7 +4569,7 @@ __metadata:
45694569
"@eslint/js": "npm:^9.33.0"
45704570
"@types/react": "npm:^19.1.10"
45714571
"@types/react-dom": "npm:^19.1.7"
4572-
"@vitejs/plugin-react": "npm:^5.0.0"
4572+
"@vitejs/plugin-react": "npm:^5.0.1"
45734573
date-fns: "npm:^4.1.0"
45744574
eslint: "npm:^9.33.0"
45754575
eslint-plugin-react: "npm:^7.37.5"
@@ -4585,7 +4585,7 @@ __metadata:
45854585
react-live: "npm:^4.1.8"
45864586
sass: "npm:^1.90.0"
45874587
slugify: "npm:^1.6.6"
4588-
vite: "npm:^7.1.2"
4588+
vite: "npm:^7.1.3"
45894589
languageName: unknown
45904590
linkType: soft
45914591

@@ -5493,12 +5493,12 @@ __metadata:
54935493
languageName: node
54945494
linkType: hard
54955495

5496-
"vite@npm:^7.1.2":
5497-
version: 7.1.2
5498-
resolution: "vite@npm:7.1.2"
5496+
"vite@npm:^7.1.3":
5497+
version: 7.1.3
5498+
resolution: "vite@npm:7.1.3"
54995499
dependencies:
55005500
esbuild: "npm:^0.25.0"
5501-
fdir: "npm:^6.4.6"
5501+
fdir: "npm:^6.5.0"
55025502
fsevents: "npm:~2.3.3"
55035503
picomatch: "npm:^4.0.3"
55045504
postcss: "npm:^8.5.6"
@@ -5544,7 +5544,7 @@ __metadata:
55445544
optional: true
55455545
bin:
55465546
vite: bin/vite.js
5547-
checksum: 10c0/4ed825b20bc0f49db99cd382de9506b2721ccd47dcebd4a68e0ef65e3cdd2347fded52b306c34178308e0fd7fe78fd5ff517623002cb00710182ad3012c92ced
5547+
checksum: 10c0/a0aa418beab80673dc9a3e9d1fa49472955d6ef9d41a4c9c6bd402953f411346f612864dae267adfb2bb8ceeb894482369316ffae5816c84fd45990e352b727d
55485548
languageName: node
55495549
linkType: hard
55505550

package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@
5555
"@testing-library/user-event": "14.6.1",
5656
"@types/eslint": "^9.6.1",
5757
"@types/jest": "^30.0.0",
58+
"@types/jest-axe": "^3.5.9",
5859
"@types/node": "22.15.30",
59-
"@types/react": "^19.1.0",
60-
"@types/react-dom": "^19.1.2",
60+
"@types/react": "^19.1.10",
61+
"@types/react-dom": "^19.1.7",
6162
"@typescript-eslint/eslint-plugin": "^8.22.0",
6263
"@typescript-eslint/parser": "^8.22.0",
6364
"axe-core": "^4.10.2",
@@ -73,13 +74,14 @@
7374
"eslint-plugin-unused-imports": "^4.1.4",
7475
"husky": "9.1.7",
7576
"jest": "^30.0.5",
77+
"jest-axe": "^10.0.0",
7678
"jest-canvas-mock": "^2.5.2",
7779
"jest-environment-jsdom": "^29.7.0",
7880
"lint-staged": "^16.0.0",
7981
"lodash": "^4.17.21",
8082
"prettier": "^3.4.2",
81-
"react": "^19.1.0",
82-
"react-dom": "^19.1.0",
83+
"react": "^19.1.1",
84+
"react-dom": "^19.1.1",
8385
"rollup": "^4.32.1",
8486
"rollup-plugin-filesize": "^10.0.0",
8587
"sass": "1.90.0",

src/calendar.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,12 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
839839
);
840840
};
841841

842+
renderDayNamesHeader = (monthDate: Date) => (
843+
<div className="react-datepicker__day-names" role="row">
844+
{this.header(monthDate)}
845+
</div>
846+
);
847+
842848
renderDefaultHeader = ({ monthDate, i }: { monthDate: Date; i: number }) => (
843849
<div
844850
className={`react-datepicker__header ${
@@ -856,9 +862,6 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
856862
{this.renderMonthYearDropdown(i !== 0)}
857863
{this.renderYearDropdown(i !== 0)}
858864
</div>
859-
<div className="react-datepicker__day-names" role="row">
860-
{this.header(monthDate)}
861-
</div>
862865
</div>
863866
);
864867

@@ -906,11 +909,6 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
906909
this.props,
907910
);
908911

909-
const showDayNames =
910-
!this.props.showMonthYearPicker &&
911-
!this.props.showQuarterYearPicker &&
912-
!this.props.showYearPicker;
913-
914912
return (
915913
<div
916914
className="react-datepicker__header react-datepicker__header--custom"
@@ -932,11 +930,6 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
932930
prevYearButtonDisabled,
933931
nextYearButtonDisabled,
934932
})}
935-
{showDayNames && (
936-
<div className="react-datepicker__day-names">
937-
{this.header(monthDate)}
938-
</div>
939-
)}
940933
</div>
941934
);
942935
};
@@ -1030,6 +1023,7 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
10301023
selectingDate={this.state.selectingDate}
10311024
monthShowsDuplicateDaysEnd={monthShowsDuplicateDaysEnd}
10321025
monthShowsDuplicateDaysStart={monthShowsDuplicateDaysStart}
1026+
dayNamesHeader={this.renderDayNamesHeader(monthDate)}
10331027
/>
10341028
</div>,
10351029
);

src/day.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ export default class Day extends Component<DayProps> {
597597
}
598598
tabIndex={this.getTabIndex()}
599599
aria-label={this.getAriaLabel()}
600-
role="option"
600+
role="gridcell"
601601
title={this.getTitle()}
602602
aria-disabled={this.isDisabled()}
603603
aria-current={this.isCurrentDay() ? "date" : undefined}

src/month.tsx

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ interface MonthProps
140140
weekAriaLabelPrefix?: WeekProps["ariaLabelPrefix"];
141141
chooseDayAriaLabelPrefix?: WeekProps["chooseDayAriaLabelPrefix"];
142142
disabledDayAriaLabelPrefix?: WeekProps["disabledDayAriaLabelPrefix"];
143+
dayNamesHeader?: React.ReactNode;
143144
}
144145

145146
/**
@@ -1101,23 +1102,45 @@ export default class Month extends Component<MonthProps> {
11011102
? ariaLabelPrefix.trim() + " "
11021103
: "";
11031104

1105+
const shouldUseListboxRole = showMonthYearPicker || showQuarterYearPicker;
1106+
1107+
if (shouldUseListboxRole) {
1108+
return (
1109+
<div
1110+
className={this.getClassNames()}
1111+
onMouseLeave={
1112+
!this.props.usePointerEvent ? this.handleMouseLeave : undefined
1113+
}
1114+
onPointerLeave={
1115+
this.props.usePointerEvent ? this.handleMouseLeave : undefined
1116+
}
1117+
aria-label={`${formattedAriaLabelPrefix}${formatDate(day, "MMMM, yyyy", this.props.locale)}`}
1118+
role="listbox"
1119+
>
1120+
{showMonthYearPicker ? this.renderMonths() : this.renderQuarters()}
1121+
</div>
1122+
);
1123+
}
1124+
1125+
// For regular calendar view, use table structure
11041126
return (
1105-
<div
1106-
className={this.getClassNames()}
1107-
onMouseLeave={
1108-
!this.props.usePointerEvent ? this.handleMouseLeave : undefined
1109-
}
1110-
onPointerLeave={
1111-
this.props.usePointerEvent ? this.handleMouseLeave : undefined
1112-
}
1113-
aria-label={`${formattedAriaLabelPrefix}${formatDate(day, "MMMM, yyyy", this.props.locale)}`}
1114-
role="listbox"
1115-
>
1116-
{showMonthYearPicker
1117-
? this.renderMonths()
1118-
: showQuarterYearPicker
1119-
? this.renderQuarters()
1120-
: this.renderWeeks()}
1127+
<div role="table">
1128+
{this.props.dayNamesHeader && (
1129+
<div role="rowgroup">{this.props.dayNamesHeader}</div>
1130+
)}
1131+
<div
1132+
className={this.getClassNames()}
1133+
onMouseLeave={
1134+
!this.props.usePointerEvent ? this.handleMouseLeave : undefined
1135+
}
1136+
onPointerLeave={
1137+
this.props.usePointerEvent ? this.handleMouseLeave : undefined
1138+
}
1139+
aria-label={`${formattedAriaLabelPrefix}${formatDate(day, "MMMM, yyyy", this.props.locale)}`}
1140+
role="rowgroup"
1141+
>
1142+
{this.renderWeeks()}
1143+
</div>
11211144
</div>
11221145
);
11231146
}

0 commit comments

Comments
 (0)