From 14cc99071622156785bbec2e8b062c2ce895e154 Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Wed, 17 Sep 2025 10:36:03 +1000 Subject: [PATCH 1/3] fix: first day of week bcp 47 parsing in middle of other extensions --- packages/@internationalized/date/src/queries.ts | 4 +++- packages/@internationalized/date/tests/queries.test.js | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/@internationalized/date/src/queries.ts b/packages/@internationalized/date/src/queries.ts index 732594d729d..151f1bc2731 100644 --- a/packages/@internationalized/date/src/queries.ts +++ b/packages/@internationalized/date/src/queries.ts @@ -268,7 +268,9 @@ function getWeekStart(locale: string): number { } let region = getRegion(locale); if (locale.includes('-fw-')) { - let day = locale.split('-fw-')[1]; + // pull the value for the attribute fw from strings such as en-US-u-ca-iso8601-fw-tue or en-US-u-ca-iso8601-fw-mon-nu-thai + // where the fw attribute could be followed by another unicode locale extension or not + let day = locale.split('-fw-')[1].split('-')[0]; if (day === 'mon') { weekInfo = {firstDay: 1}; } else if (day === 'tue') { diff --git a/packages/@internationalized/date/tests/queries.test.js b/packages/@internationalized/date/tests/queries.test.js index 8ae3f8c3a54..229f2a337df 100644 --- a/packages/@internationalized/date/tests/queries.test.js +++ b/packages/@internationalized/date/tests/queries.test.js @@ -281,6 +281,9 @@ describe('queries', function () { // override first day of week expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue')).toEqual(new CalendarDate(2021, 8, 3)); + + // override applied if extension appears in the middle of other extensions + expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue-nu-thai')).toEqual(new CalendarDate(2021, 8, 3)); }); }); From 0815c4a50be8e1318b556606c05490a1abf10152 Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Wed, 17 Sep 2025 10:41:20 +1000 Subject: [PATCH 2/3] add value to story --- packages/react-aria-components/stories/Calendar.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-aria-components/stories/Calendar.stories.tsx b/packages/react-aria-components/stories/Calendar.stories.tsx index 0703be28137..4caa40f4229 100644 --- a/packages/react-aria-components/stories/Calendar.stories.tsx +++ b/packages/react-aria-components/stories/Calendar.stories.tsx @@ -161,7 +161,7 @@ export const CalendarFirstDayOfWeekExample: StoryObj Date: Thu, 18 Sep 2025 08:30:21 +1000 Subject: [PATCH 3/3] fix iso8601 case --- packages/@internationalized/date/src/queries.ts | 2 +- packages/@internationalized/date/tests/queries.test.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@internationalized/date/src/queries.ts b/packages/@internationalized/date/src/queries.ts index 151f1bc2731..ce48d95d75c 100644 --- a/packages/@internationalized/date/src/queries.ts +++ b/packages/@internationalized/date/src/queries.ts @@ -286,7 +286,7 @@ function getWeekStart(locale: string): number { } else { weekInfo = {firstDay: 0}; } - } else if (locale.includes('u-ca-iso8601')) { + } else if (locale.includes('-ca-iso8601')) { weekInfo = {firstDay: 1}; } else { weekInfo = {firstDay: region ? weekStartData[region] || 0 : 0}; diff --git a/packages/@internationalized/date/tests/queries.test.js b/packages/@internationalized/date/tests/queries.test.js index 229f2a337df..40fceb3494e 100644 --- a/packages/@internationalized/date/tests/queries.test.js +++ b/packages/@internationalized/date/tests/queries.test.js @@ -283,6 +283,8 @@ describe('queries', function () { expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue')).toEqual(new CalendarDate(2021, 8, 3)); // override applied if extension appears in the middle of other extensions + expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-nu-thai-ca-iso8601')).toEqual(new CalendarDate(2021, 8, 2)); + expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-nu-thai-ca-iso8601-fw-tue')).toEqual(new CalendarDate(2021, 8, 3)); expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue-nu-thai')).toEqual(new CalendarDate(2021, 8, 3)); }); });