From b715f1a254ce0fe68812665f44db1a465f5ee3c3 Mon Sep 17 00:00:00 2001 From: Alec Mev Date: Tue, 13 Aug 2024 13:53:32 +0100 Subject: [PATCH 1/5] Fix optional property types --- packages/@internationalized/date/src/DateFormatter.ts | 2 +- packages/@react-types/shared/src/dom.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@internationalized/date/src/DateFormatter.ts b/packages/@internationalized/date/src/DateFormatter.ts index 16d808864d3..7767a2d31b7 100644 --- a/packages/@internationalized/date/src/DateFormatter.ts +++ b/packages/@internationalized/date/src/DateFormatter.ts @@ -13,7 +13,7 @@ let formatterCache = new Map(); interface ResolvedDateTimeFormatOptions extends Intl.ResolvedDateTimeFormatOptions { - hourCycle?: Intl.DateTimeFormatOptions['hourCycle'] + hourCycle?: NonNullable } interface DateRangeFormatPart extends Intl.DateTimeFormatPart { diff --git a/packages/@react-types/shared/src/dom.d.ts b/packages/@react-types/shared/src/dom.d.ts index 88fea2c1c13..d0d3fe03e5e 100644 --- a/packages/@react-types/shared/src/dom.d.ts +++ b/packages/@react-types/shared/src/dom.d.ts @@ -59,7 +59,7 @@ export interface DOMProps { /** * The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). */ - id?: string + id?: string | undefined } export interface FocusableDOMProps extends DOMProps { From de41e1f71cb7d3fbedda4281b96f6c722d26bed9 Mon Sep 17 00:00:00 2001 From: Alec Mev Date: Tue, 27 Aug 2024 15:50:57 +0100 Subject: [PATCH 2/5] Use vanilla Intl.ResolvedDateTimeFormatOptions --- .../@internationalized/date/src/DateFormatter.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/@internationalized/date/src/DateFormatter.ts b/packages/@internationalized/date/src/DateFormatter.ts index 7767a2d31b7..21ab69f310e 100644 --- a/packages/@internationalized/date/src/DateFormatter.ts +++ b/packages/@internationalized/date/src/DateFormatter.ts @@ -12,10 +12,6 @@ let formatterCache = new Map(); -interface ResolvedDateTimeFormatOptions extends Intl.ResolvedDateTimeFormatOptions { - hourCycle?: NonNullable -} - interface DateRangeFormatPart extends Intl.DateTimeFormatPart { source: 'startRange' | 'endRange' | 'shared' } @@ -79,8 +75,8 @@ export class DateFormatter implements Intl.DateTimeFormat { } /** Returns the resolved formatting options based on the values passed to the constructor. */ - resolvedOptions(): ResolvedDateTimeFormatOptions { - let resolvedOptions = this.formatter.resolvedOptions() as ResolvedDateTimeFormatOptions; + resolvedOptions(): Intl.ResolvedDateTimeFormatOptions { + let resolvedOptions = this.formatter.resolvedOptions(); if (hasBuggyResolvedHourCycle()) { if (!this.resolvedHourCycle) { this.resolvedHourCycle = getResolvedHourCycle(resolvedOptions.locale, this.options); @@ -156,10 +152,10 @@ function hasBuggyHour12Behavior() { let _hasBuggyResolvedHourCycle: boolean | null = null; function hasBuggyResolvedHourCycle() { if (_hasBuggyResolvedHourCycle == null) { - _hasBuggyResolvedHourCycle = (new Intl.DateTimeFormat('fr', { + _hasBuggyResolvedHourCycle = new Intl.DateTimeFormat('fr', { hour: 'numeric', hour12: false - }).resolvedOptions() as ResolvedDateTimeFormatOptions).hourCycle === 'h12'; + }).resolvedOptions().hourCycle === 'h12'; } return _hasBuggyResolvedHourCycle; From 0ad564bd57f9386b1e96f1540fd24e50735b2c25 Mon Sep 17 00:00:00 2001 From: Alec Mev Date: Tue, 27 Aug 2024 16:01:30 +0100 Subject: [PATCH 3/5] Define DOMProps via HTMLAttributes --- packages/@react-types/shared/src/dom.d.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/@react-types/shared/src/dom.d.ts b/packages/@react-types/shared/src/dom.d.ts index d0d3fe03e5e..2229e912cc3 100644 --- a/packages/@react-types/shared/src/dom.d.ts +++ b/packages/@react-types/shared/src/dom.d.ts @@ -19,6 +19,7 @@ import { FormEventHandler, HTMLAttributeAnchorTarget, HTMLAttributeReferrerPolicy, + HTMLAttributes, DOMAttributes as ReactDOMAttributes, ReactEventHandler } from 'react'; @@ -55,12 +56,7 @@ export interface AriaValidationProps { // A set of common DOM props that are allowed on any component // Ensure this is synced with DOMPropNames in filterDOMProps -export interface DOMProps { - /** - * The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). - */ - id?: string | undefined -} +export interface DOMProps extends Pick, 'id'> {} export interface FocusableDOMProps extends DOMProps { /** From a9911d12fc8c27a72f34a8c9812f3fab83f2d166 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Fri, 30 Aug 2024 10:39:39 +1000 Subject: [PATCH 4/5] add id back into the docs --- packages/@react-types/shared/src/dom.d.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/@react-types/shared/src/dom.d.ts b/packages/@react-types/shared/src/dom.d.ts index 2229e912cc3..5b1a1d9ec9c 100644 --- a/packages/@react-types/shared/src/dom.d.ts +++ b/packages/@react-types/shared/src/dom.d.ts @@ -56,7 +56,12 @@ export interface AriaValidationProps { // A set of common DOM props that are allowed on any component // Ensure this is synced with DOMPropNames in filterDOMProps -export interface DOMProps extends Pick, 'id'> {} +export interface DOMProps { + /** + * The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). + */ + id?: string | undefined +} export interface FocusableDOMProps extends DOMProps { /** From 4f13f0ac75a490521fa92d3f286b9cb3970ff800 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Fri, 30 Aug 2024 11:18:12 +1000 Subject: [PATCH 5/5] fix lint --- packages/@react-types/shared/src/dom.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/@react-types/shared/src/dom.d.ts b/packages/@react-types/shared/src/dom.d.ts index 5b1a1d9ec9c..d0d3fe03e5e 100644 --- a/packages/@react-types/shared/src/dom.d.ts +++ b/packages/@react-types/shared/src/dom.d.ts @@ -19,7 +19,6 @@ import { FormEventHandler, HTMLAttributeAnchorTarget, HTMLAttributeReferrerPolicy, - HTMLAttributes, DOMAttributes as ReactDOMAttributes, ReactEventHandler } from 'react';