@@ -3,24 +3,29 @@ import {Ordering, type Order} from './order'
3
3
4
4
type Politeness = 'polite' | 'assertive'
5
5
6
- type AnnounceOptions = {
7
- /**
8
- * A delay in milliseconds to wait before announcing a message.
9
- */
10
- delayMs ?: number
11
-
12
- /**
13
- * The politeness level for a message.
14
- *
15
- * Note: a politeness level of `assertive` should only be used for
16
- * time-sensistive or critical notifications that absolutely require the
17
- * user's immediate attention
18
- *
19
- * @see https://www.w3.org/TR/wai-aria/#aria-live
20
- * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions
21
- */
22
- politeness ?: Politeness
23
- }
6
+ type AnnounceOptions =
7
+ | {
8
+ /**
9
+ * The politeness level for a message.
10
+ *
11
+ * Note: a politeness level of `assertive` should only be used for
12
+ * time-sensistive or critical notifications that absolutely require the
13
+ * user's immediate attention
14
+ *
15
+ * @see https://www.w3.org/TR/wai-aria/#aria-live
16
+ * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions
17
+ */
18
+ politeness ?: 'assertive'
19
+
20
+ /**
21
+ * A delay in milliseconds to wait before announcing a message.
22
+ */
23
+ delayMs ?: never
24
+ }
25
+ | {
26
+ politeness ?: 'polite'
27
+ delayMs ?: number
28
+ }
24
29
25
30
type Message = {
26
31
contents : string
@@ -262,33 +267,14 @@ export function compareMessages(a: Message, b: Message): Order {
262
267
return Ordering . Greater
263
268
}
264
269
265
- // Only prioritize assertive messages if they are scheduled at the same time,
266
- // or before
270
+ // Assertive messages have no delay and should always have priority over
271
+ // non-assertive messages
267
272
if ( a . politeness === 'assertive' && b . politeness !== 'assertive' ) {
268
- if ( a . scheduled === b . scheduled ) {
269
- return Ordering . Less
270
- }
271
-
272
- if ( a . scheduled < b . scheduled ) {
273
- return Ordering . Less
274
- }
275
-
276
- return Ordering . Greater
273
+ return Ordering . Less
277
274
}
278
275
279
276
if ( a . politeness !== 'assertive' && b . politeness === 'assertive' ) {
280
- // Schedule a after b
281
- if ( a . scheduled === b . scheduled ) {
282
- return Ordering . Greater
283
- }
284
-
285
- // Schedule a after b
286
- if ( a . scheduled > b . scheduled ) {
287
- return Ordering . Greater
288
- }
289
-
290
- // Schedule a before b
291
- return Ordering . Less
277
+ return Ordering . Greater
292
278
}
293
279
294
280
return Ordering . Equal
0 commit comments