@salt-ds/core 1.59.1 → 1.61.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/CHANGELOG.md +64 -0
- package/css/salt-core.css +366 -1
- package/dist-cjs/aria-announcer/AriaAnnounce.js +15 -3
- package/dist-cjs/aria-announcer/AriaAnnounce.js.map +1 -1
- package/dist-cjs/aria-announcer/AriaAnnouncerContext.js.map +1 -1
- package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js +65 -43
- package/dist-cjs/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
- package/dist-cjs/aria-announcer/announcementRegistry.js +31 -0
- package/dist-cjs/aria-announcer/announcementRegistry.js.map +1 -0
- package/dist-cjs/aria-announcer/useAriaAnnouncer.js +44 -16
- package/dist-cjs/aria-announcer/useAriaAnnouncer.js.map +1 -1
- package/dist-cjs/index.js +17 -1
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/navigation-item/NavigationItem.js +2 -0
- package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
- package/dist-cjs/pagination/Pagination.js +1 -0
- package/dist-cjs/pagination/Pagination.js.map +1 -1
- package/dist-cjs/rating/Rating.css.js +6 -0
- package/dist-cjs/rating/Rating.css.js.map +1 -0
- package/dist-cjs/rating/Rating.js +140 -0
- package/dist-cjs/rating/Rating.js.map +1 -0
- package/dist-cjs/rating/RatingItem.css.js +6 -0
- package/dist-cjs/rating/RatingItem.css.js.map +1 -0
- package/dist-cjs/rating/RatingItem.js +75 -0
- package/dist-cjs/rating/RatingItem.js.map +1 -0
- package/dist-cjs/salt-provider/SaltProvider.js +3 -1
- package/dist-cjs/salt-provider/SaltProvider.js.map +1 -1
- package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js +22 -20
- package/dist-cjs/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
- package/dist-cjs/spinner/Spinner.js +1 -0
- package/dist-cjs/spinner/Spinner.js.map +1 -1
- package/dist-cjs/tabs/Tab.css.js +6 -0
- package/dist-cjs/tabs/Tab.css.js.map +1 -0
- package/dist-cjs/tabs/Tab.js +211 -0
- package/dist-cjs/tabs/Tab.js.map +1 -0
- package/dist-cjs/tabs/TabAction.js +63 -0
- package/dist-cjs/tabs/TabAction.js.map +1 -0
- package/dist-cjs/tabs/TabBar.css.js +6 -0
- package/dist-cjs/tabs/TabBar.css.js.map +1 -0
- package/dist-cjs/tabs/TabBar.js +45 -0
- package/dist-cjs/tabs/TabBar.js.map +1 -0
- package/dist-cjs/tabs/TabList.css.js +6 -0
- package/dist-cjs/tabs/TabList.css.js.map +1 -0
- package/dist-cjs/tabs/TabList.js +281 -0
- package/dist-cjs/tabs/TabList.js.map +1 -0
- package/dist-cjs/tabs/TabPanel.css.js +6 -0
- package/dist-cjs/tabs/TabPanel.css.js.map +1 -0
- package/dist-cjs/tabs/TabPanel.js +98 -0
- package/dist-cjs/tabs/TabPanel.js.map +1 -0
- package/dist-cjs/tabs/TabTrigger.css.js +6 -0
- package/dist-cjs/tabs/TabTrigger.css.js.map +1 -0
- package/dist-cjs/tabs/TabTrigger.js +188 -0
- package/dist-cjs/tabs/TabTrigger.js.map +1 -0
- package/dist-cjs/tabs/Tabs.css.js +6 -0
- package/dist-cjs/tabs/Tabs.css.js.map +1 -0
- package/dist-cjs/tabs/Tabs.js +200 -0
- package/dist-cjs/tabs/Tabs.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabContext.js +26 -0
- package/dist-cjs/tabs/internal/contexts/TabContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js +19 -0
- package/dist-cjs/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js +22 -0
- package/dist-cjs/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
- package/dist-cjs/tabs/internal/contexts/TabsContext.js +50 -0
- package/dist-cjs/tabs/internal/contexts/TabsContext.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js +64 -0
- package/dist-cjs/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js +76 -0
- package/dist-cjs/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js +165 -0
- package/dist-cjs/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
- package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js +87 -0
- package/dist-cjs/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js +6 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.js +245 -0
- package/dist-cjs/tabs/internal/overflow/TabOverflowList.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/TabSlot.js +30 -0
- package/dist-cjs/tabs/internal/overflow/TabSlot.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/overflowMath.js +86 -0
- package/dist-cjs/tabs/internal/overflow/overflowMath.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflow.js +273 -0
- package/dist-cjs/tabs/internal/overflow/useOverflow.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js +99 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js +68 -0
- package/dist-cjs/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js +92 -0
- package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
- package/dist-cjs/tabs/internal/overflow/widthMeasurement.js +42 -0
- package/dist-cjs/tabs/internal/overflow/widthMeasurement.js.map +1 -0
- package/dist-cjs/tabs/internal/registry/useCollection.js +197 -0
- package/dist-cjs/tabs/internal/registry/useCollection.js.map +1 -0
- package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js +206 -0
- package/dist-cjs/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
- package/dist-cjs/tabs/internal/utils/domUtils.js +13 -0
- package/dist-cjs/tabs/internal/utils/domUtils.js.map +1 -0
- package/dist-cjs/tooltip/useAriaAnnounce.js +1 -0
- package/dist-cjs/tooltip/useAriaAnnounce.js.map +1 -1
- package/dist-es/aria-announcer/AriaAnnounce.js +15 -3
- package/dist-es/aria-announcer/AriaAnnounce.js.map +1 -1
- package/dist-es/aria-announcer/AriaAnnouncerContext.js.map +1 -1
- package/dist-es/aria-announcer/AriaAnnouncerProvider.js +67 -45
- package/dist-es/aria-announcer/AriaAnnouncerProvider.js.map +1 -1
- package/dist-es/aria-announcer/announcementRegistry.js +28 -0
- package/dist-es/aria-announcer/announcementRegistry.js.map +1 -0
- package/dist-es/aria-announcer/useAriaAnnouncer.js +45 -17
- package/dist-es/aria-announcer/useAriaAnnouncer.js.map +1 -1
- package/dist-es/index.js +9 -1
- package/dist-es/index.js.map +1 -1
- package/dist-es/navigation-item/NavigationItem.js +2 -0
- package/dist-es/navigation-item/NavigationItem.js.map +1 -1
- package/dist-es/pagination/Pagination.js +1 -0
- package/dist-es/pagination/Pagination.js.map +1 -1
- package/dist-es/rating/Rating.css.js +4 -0
- package/dist-es/rating/Rating.css.js.map +1 -0
- package/dist-es/rating/Rating.js +138 -0
- package/dist-es/rating/Rating.js.map +1 -0
- package/dist-es/rating/RatingItem.css.js +4 -0
- package/dist-es/rating/RatingItem.css.js.map +1 -0
- package/dist-es/rating/RatingItem.js +73 -0
- package/dist-es/rating/RatingItem.js.map +1 -0
- package/dist-es/salt-provider/SaltProvider.js +3 -1
- package/dist-es/salt-provider/SaltProvider.js.map +1 -1
- package/dist-es/semantic-icon-provider/SemanticIconProvider.js +23 -21
- package/dist-es/semantic-icon-provider/SemanticIconProvider.js.map +1 -1
- package/dist-es/spinner/Spinner.js +1 -0
- package/dist-es/spinner/Spinner.js.map +1 -1
- package/dist-es/tabs/Tab.css.js +4 -0
- package/dist-es/tabs/Tab.css.js.map +1 -0
- package/dist-es/tabs/Tab.js +209 -0
- package/dist-es/tabs/Tab.js.map +1 -0
- package/dist-es/tabs/TabAction.js +61 -0
- package/dist-es/tabs/TabAction.js.map +1 -0
- package/dist-es/tabs/TabBar.css.js +4 -0
- package/dist-es/tabs/TabBar.css.js.map +1 -0
- package/dist-es/tabs/TabBar.js +43 -0
- package/dist-es/tabs/TabBar.js.map +1 -0
- package/dist-es/tabs/TabList.css.js +4 -0
- package/dist-es/tabs/TabList.css.js.map +1 -0
- package/dist-es/tabs/TabList.js +279 -0
- package/dist-es/tabs/TabList.js.map +1 -0
- package/dist-es/tabs/TabPanel.css.js +4 -0
- package/dist-es/tabs/TabPanel.css.js.map +1 -0
- package/dist-es/tabs/TabPanel.js +96 -0
- package/dist-es/tabs/TabPanel.js.map +1 -0
- package/dist-es/tabs/TabTrigger.css.js +4 -0
- package/dist-es/tabs/TabTrigger.css.js.map +1 -0
- package/dist-es/tabs/TabTrigger.js +186 -0
- package/dist-es/tabs/TabTrigger.js.map +1 -0
- package/dist-es/tabs/Tabs.css.js +4 -0
- package/dist-es/tabs/Tabs.css.js.map +1 -0
- package/dist-es/tabs/Tabs.js +198 -0
- package/dist-es/tabs/Tabs.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabContext.js +23 -0
- package/dist-es/tabs/internal/contexts/TabContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabListLayoutContext.js +16 -0
- package/dist-es/tabs/internal/contexts/TabListLayoutContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js +19 -0
- package/dist-es/tabs/internal/contexts/TabSlotRegistryContext.js.map +1 -0
- package/dist-es/tabs/internal/contexts/TabsContext.js +47 -0
- package/dist-es/tabs/internal/contexts/TabsContext.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useFocusWithRetry.js +62 -0
- package/dist-es/tabs/internal/hooks/useFocusWithRetry.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabListRecovery.js +74 -0
- package/dist-es/tabs/internal/hooks/useTabListRecovery.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js +163 -0
- package/dist-es/tabs/internal/hooks/useTabRemovalHandler.js.map +1 -0
- package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js +85 -0
- package/dist-es/tabs/internal/hooks/useTabSelectionFocus.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.css.js +4 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.css.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.js +243 -0
- package/dist-es/tabs/internal/overflow/TabOverflowList.js.map +1 -0
- package/dist-es/tabs/internal/overflow/TabSlot.js +28 -0
- package/dist-es/tabs/internal/overflow/TabSlot.js.map +1 -0
- package/dist-es/tabs/internal/overflow/overflowMath.js +82 -0
- package/dist-es/tabs/internal/overflow/overflowMath.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflow.js +271 -0
- package/dist-es/tabs/internal/overflow/useOverflow.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js +97 -0
- package/dist-es/tabs/internal/overflow/useOverflowLayoutState.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js +66 -0
- package/dist-es/tabs/internal/overflow/useOverflowSelectionState.js.map +1 -0
- package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js +90 -0
- package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -0
- package/dist-es/tabs/internal/overflow/widthMeasurement.js +36 -0
- package/dist-es/tabs/internal/overflow/widthMeasurement.js.map +1 -0
- package/dist-es/tabs/internal/registry/useCollection.js +195 -0
- package/dist-es/tabs/internal/registry/useCollection.js.map +1 -0
- package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js +204 -0
- package/dist-es/tabs/internal/registry/useRenderedTabsRegistry.js.map +1 -0
- package/dist-es/tabs/internal/utils/domUtils.js +11 -0
- package/dist-es/tabs/internal/utils/domUtils.js.map +1 -0
- package/dist-es/tooltip/useAriaAnnounce.js +1 -0
- package/dist-es/tooltip/useAriaAnnounce.js.map +1 -1
- package/dist-types/aria-announcer/AriaAnnounce.d.ts +9 -2
- package/dist-types/aria-announcer/AriaAnnouncerContext.d.ts +26 -2
- package/dist-types/aria-announcer/AriaAnnouncerProvider.d.ts +6 -7
- package/dist-types/aria-announcer/announcementRegistry.d.ts +5 -0
- package/dist-types/index.d.ts +2 -0
- package/dist-types/rating/Rating.d.ts +48 -0
- package/dist-types/rating/RatingItem.d.ts +47 -0
- package/dist-types/rating/index.d.ts +1 -0
- package/dist-types/semantic-icon-provider/SemanticIconProvider.d.ts +21 -19
- package/dist-types/tabs/Tab.d.ts +12 -0
- package/dist-types/tabs/TabAction.d.ts +4 -0
- package/dist-types/tabs/TabBar.d.ts +12 -0
- package/dist-types/tabs/TabList.d.ts +12 -0
- package/dist-types/tabs/TabPanel.d.ts +9 -0
- package/dist-types/tabs/TabTrigger.d.ts +4 -0
- package/dist-types/tabs/Tabs.d.ts +20 -0
- package/dist-types/tabs/index.d.ts +7 -0
- package/dist-types/tabs/internal/contexts/TabContext.d.ts +12 -0
- package/dist-types/tabs/internal/contexts/TabListLayoutContext.d.ts +9 -0
- package/dist-types/tabs/internal/contexts/TabSlotRegistryContext.d.ts +5 -0
- package/dist-types/tabs/internal/contexts/TabsContext.d.ts +43 -0
- package/dist-types/tabs/internal/hooks/useFocusWithRetry.d.ts +9 -0
- package/dist-types/tabs/internal/hooks/useTabListRecovery.d.ts +12 -0
- package/dist-types/tabs/internal/hooks/useTabRemovalHandler.d.ts +32 -0
- package/dist-types/tabs/internal/hooks/useTabSelectionFocus.d.ts +15 -0
- package/dist-types/tabs/internal/overflow/TabOverflowList.d.ts +10 -0
- package/dist-types/tabs/internal/overflow/TabSlot.d.ts +6 -0
- package/dist-types/tabs/internal/overflow/overflowMath.d.ts +18 -0
- package/dist-types/tabs/internal/overflow/useOverflow.d.ts +11 -0
- package/dist-types/tabs/internal/overflow/useOverflowLayoutState.d.ts +13 -0
- package/dist-types/tabs/internal/overflow/useOverflowSelectionState.d.ts +13 -0
- package/dist-types/tabs/internal/overflow/useRenderedTabWidth.d.ts +12 -0
- package/dist-types/tabs/internal/overflow/widthMeasurement.d.ts +5 -0
- package/dist-types/tabs/internal/registry/useCollection.d.ts +30 -0
- package/dist-types/tabs/internal/registry/useRenderedTabsRegistry.d.ts +12 -0
- package/dist-types/tabs/internal/utils/domUtils.d.ts +1 -0
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# @salt-ds/core
|
|
2
2
|
|
|
3
|
+
## 1.61.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2db14be: Added `Rating`.
|
|
8
|
+
|
|
9
|
+
`Rating` component allows users to submit feedback and view average scores on a defined scale, reflecting your product, service or experience.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
<Rating aria-label="Rating" defaultValue={3} />
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- 7ffd0fd: Added `Tab`, `TabAction`, `TabBar`, `TabList`, `TabPanel`, `Tabs`, `TabTrigger`.
|
|
16
|
+
|
|
17
|
+
`Tabs` allow users to move between different views of related content without leave the current page.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<Tabs defaultValue="Home">
|
|
21
|
+
<TabBar>
|
|
22
|
+
<TabList aria-label="Example tablist">
|
|
23
|
+
<Tab value="Home">
|
|
24
|
+
<TabTrigger>Home</TabTrigger>
|
|
25
|
+
</Tab>
|
|
26
|
+
<Tab value="Transactions">
|
|
27
|
+
<TabTrigger>Transactions</TabTrigger>
|
|
28
|
+
</Tab>
|
|
29
|
+
<Tab value="Checks">
|
|
30
|
+
<TabTrigger>Checks</TabTrigger>
|
|
31
|
+
</Tab>
|
|
32
|
+
</TabList>
|
|
33
|
+
</TabBar>
|
|
34
|
+
</Tabs>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- e74d4d8: Fixed `aria-controls` on `NavigationItem` being applied to the outer wrapper element instead of the interactive trigger element.
|
|
40
|
+
|
|
41
|
+
## 1.60.0
|
|
42
|
+
|
|
43
|
+
### Minor Changes
|
|
44
|
+
|
|
45
|
+
- 5d4de6f: `AriaAnnouncer` prop `delay` is deprecated in favour of an `options` prop.
|
|
46
|
+
|
|
47
|
+
The `options` prop provides `ariaLive` which can be set to either `polite` or `assertive` depending on the use case.
|
|
48
|
+
It also provides `target`, which routes announcements to a specific `AriaAnnouncerProvider` target (useful for nested contexts such as dialogs/modals).
|
|
49
|
+
|
|
50
|
+
```diff
|
|
51
|
+
const { announce } = useAriaAnnouncer();
|
|
52
|
+
- announce("message", 500)
|
|
53
|
+
+ announce("message", { ariaLive: "polite" });
|
|
54
|
+
+ announce("message", { target: "date-picker-overlay", ariaLive: "polite" });
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The `delay` is replaced by two DOM elements that are used to announce messages.
|
|
58
|
+
The first element is used for `assertive` messages and the second for `polite` messages.
|
|
59
|
+
Messages are queued and remain in the DOM for 300 msecs before being removed, negating the need for a delay.
|
|
60
|
+
|
|
61
|
+
By default using the options prop will default to `polite` announcements.
|
|
62
|
+
|
|
63
|
+
In addition `Spinner`, `Pagination` and `ContentStatus` have been updated to default to `polite` announcements, to meet firmwide accessibility standards.
|
|
64
|
+
|
|
65
|
+
As part of the refactor, fixed announcements triggered during component unmount/cleanup (e.g. `Spinner` `completionAnnouncement`) being blocked.
|
|
66
|
+
|
|
3
67
|
## 1.59.1
|
|
4
68
|
|
|
5
69
|
### Patch Changes
|
package/css/salt-core.css
CHANGED
|
@@ -3685,6 +3685,118 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
3685
3685
|
transform: scale(1.01);
|
|
3686
3686
|
}
|
|
3687
3687
|
|
|
3688
|
+
/* src/rating/Rating.css */
|
|
3689
|
+
.saltRating {
|
|
3690
|
+
display: inline-flex;
|
|
3691
|
+
box-sizing: border-box;
|
|
3692
|
+
}
|
|
3693
|
+
.saltFormField .saltRating-container {
|
|
3694
|
+
height: var(--salt-size-base);
|
|
3695
|
+
padding-top: calc(var(--salt-spacing-100) + var(--salt-spacing-fixed-100));
|
|
3696
|
+
}
|
|
3697
|
+
.saltFormField .saltRating-label {
|
|
3698
|
+
min-height: var(--salt-size-base);
|
|
3699
|
+
padding-top: var(--salt-spacing-100);
|
|
3700
|
+
}
|
|
3701
|
+
.saltRating-labelBottom {
|
|
3702
|
+
flex-direction: column;
|
|
3703
|
+
align-items: flex-start;
|
|
3704
|
+
gap: var(--salt-spacing-75);
|
|
3705
|
+
}
|
|
3706
|
+
.saltRating-labelRight {
|
|
3707
|
+
flex-direction: row;
|
|
3708
|
+
gap: var(--salt-spacing-150);
|
|
3709
|
+
}
|
|
3710
|
+
.saltRating-container {
|
|
3711
|
+
display: flex;
|
|
3712
|
+
flex-direction: row;
|
|
3713
|
+
gap: var(--salt-spacing-150);
|
|
3714
|
+
flex-wrap: nowrap;
|
|
3715
|
+
justify-content: flex-start;
|
|
3716
|
+
padding-top: var(--salt-spacing-fixed-100);
|
|
3717
|
+
padding-bottom: var(--salt-spacing-fixed-100);
|
|
3718
|
+
box-sizing: border-box;
|
|
3719
|
+
}
|
|
3720
|
+
.saltRating-label {
|
|
3721
|
+
color: var(--salt-content-primary-foreground);
|
|
3722
|
+
font-family: var(--salt-text-fontFamily);
|
|
3723
|
+
font-size: var(--salt-text-fontSize);
|
|
3724
|
+
font-weight: var(--salt-text-fontWeight);
|
|
3725
|
+
line-height: var(--salt-text-lineHeight);
|
|
3726
|
+
box-sizing: border-box;
|
|
3727
|
+
}
|
|
3728
|
+
|
|
3729
|
+
/* src/rating/RatingItem.css */
|
|
3730
|
+
.saltRatingItem {
|
|
3731
|
+
height: var(--salt-size-icon);
|
|
3732
|
+
width: var(--salt-size-icon);
|
|
3733
|
+
display: flex;
|
|
3734
|
+
position: relative;
|
|
3735
|
+
align-items: center;
|
|
3736
|
+
justify-content: center;
|
|
3737
|
+
cursor: var(--salt-cursor-hover);
|
|
3738
|
+
}
|
|
3739
|
+
.saltRatingItem-disabled,
|
|
3740
|
+
.saltRatingItem-readOnly {
|
|
3741
|
+
cursor: default;
|
|
3742
|
+
}
|
|
3743
|
+
.saltRatingItem-input {
|
|
3744
|
+
position: absolute;
|
|
3745
|
+
opacity: 0;
|
|
3746
|
+
width: 100%;
|
|
3747
|
+
height: 100%;
|
|
3748
|
+
margin: 0;
|
|
3749
|
+
cursor: inherit;
|
|
3750
|
+
z-index: 1;
|
|
3751
|
+
}
|
|
3752
|
+
.saltRatingItem-input::before {
|
|
3753
|
+
content: "";
|
|
3754
|
+
position: absolute;
|
|
3755
|
+
width: 100%;
|
|
3756
|
+
height: 100%;
|
|
3757
|
+
padding: var(--salt-spacing-fixed-600);
|
|
3758
|
+
transform: translate(-50%, -50%);
|
|
3759
|
+
top: 50%;
|
|
3760
|
+
left: 50%;
|
|
3761
|
+
box-sizing: content-box;
|
|
3762
|
+
}
|
|
3763
|
+
.saltRatingItem-icon {
|
|
3764
|
+
pointer-events: none;
|
|
3765
|
+
display: flex;
|
|
3766
|
+
align-items: center;
|
|
3767
|
+
justify-content: center;
|
|
3768
|
+
color: var(--salt-sentiment-neutral-dataviz);
|
|
3769
|
+
}
|
|
3770
|
+
.saltRatingItem-icon .saltIcon {
|
|
3771
|
+
--saltIcon-size: var(--salt-size-icon);
|
|
3772
|
+
}
|
|
3773
|
+
.saltRatingItem-input:focus-visible ~ .saltRatingItem-icon::after {
|
|
3774
|
+
content: "";
|
|
3775
|
+
position: absolute;
|
|
3776
|
+
width: 100%;
|
|
3777
|
+
height: 100%;
|
|
3778
|
+
padding: var(--salt-spacing-fixed-600);
|
|
3779
|
+
transform: translate(-50%, -50%);
|
|
3780
|
+
top: 50%;
|
|
3781
|
+
left: 50%;
|
|
3782
|
+
box-sizing: content-box;
|
|
3783
|
+
border-radius: var(--salt-palette-corner-strongest);
|
|
3784
|
+
outline: var(--salt-focused-outline);
|
|
3785
|
+
outline-offset: calc(-1 * var(--salt-spacing-fixed-200));
|
|
3786
|
+
}
|
|
3787
|
+
.saltRatingItem-disabled {
|
|
3788
|
+
cursor: var(--salt-cursor-disabled);
|
|
3789
|
+
opacity: 0.4;
|
|
3790
|
+
}
|
|
3791
|
+
.saltRatingItem-disabled .saltRatingItem-input {
|
|
3792
|
+
cursor: var(--salt-cursor-disabled);
|
|
3793
|
+
}
|
|
3794
|
+
.saltRatingItem-selected .saltRatingItem-icon,
|
|
3795
|
+
.saltRatingItem-hovered .saltRatingItem-icon,
|
|
3796
|
+
.saltRatingItem-unselecting .saltRatingItem-icon {
|
|
3797
|
+
color: var(--salt-sentiment-accent-dataviz);
|
|
3798
|
+
}
|
|
3799
|
+
|
|
3688
3800
|
/* src/salt-provider/SaltProvider.css */
|
|
3689
3801
|
.salt-provider {
|
|
3690
3802
|
display: contents;
|
|
@@ -4308,6 +4420,188 @@ table.saltTable td.saltTable-td-align-right {
|
|
|
4308
4420
|
overflow: auto;
|
|
4309
4421
|
}
|
|
4310
4422
|
|
|
4423
|
+
/* src/tabs/Tab.css */
|
|
4424
|
+
.saltTab {
|
|
4425
|
+
display: inline-flex;
|
|
4426
|
+
align-items: center;
|
|
4427
|
+
justify-content: center;
|
|
4428
|
+
appearance: none;
|
|
4429
|
+
-webkit-appearance: none;
|
|
4430
|
+
gap: var(--salt-spacing-100);
|
|
4431
|
+
border: none;
|
|
4432
|
+
border-left: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;
|
|
4433
|
+
border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;
|
|
4434
|
+
white-space: pre;
|
|
4435
|
+
min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));
|
|
4436
|
+
min-width: 4em;
|
|
4437
|
+
padding: var(--salt-spacing-50) var(--salt-spacing-100);
|
|
4438
|
+
position: relative;
|
|
4439
|
+
flex-shrink: 0;
|
|
4440
|
+
box-sizing: border-box;
|
|
4441
|
+
overflow: hidden;
|
|
4442
|
+
cursor: var(--salt-cursor-hover);
|
|
4443
|
+
color: var(--salt-content-primary-foreground);
|
|
4444
|
+
font-weight: var(--salt-text-fontWeight);
|
|
4445
|
+
font-family: var(--salt-text-fontFamily);
|
|
4446
|
+
text-align: var(--salt-text-textAlign);
|
|
4447
|
+
letter-spacing: var(--salt-text-letterSpacing);
|
|
4448
|
+
line-height: var(--salt-text-lineHeight);
|
|
4449
|
+
font-size: var(--salt-text-fontSize);
|
|
4450
|
+
max-width: 100%;
|
|
4451
|
+
}
|
|
4452
|
+
@supports selector(:has(*)) {
|
|
4453
|
+
.saltTabList:has([data-overflowbutton]) .saltTab {
|
|
4454
|
+
max-width: calc(100% - var(--salt-spacing-100) - var(--salt-size-base));
|
|
4455
|
+
}
|
|
4456
|
+
}
|
|
4457
|
+
.saltTab::after {
|
|
4458
|
+
content: "";
|
|
4459
|
+
position: absolute;
|
|
4460
|
+
left: calc(var(--salt-size-fixed-100) * -1);
|
|
4461
|
+
right: calc(var(--salt-size-fixed-100) * -1);
|
|
4462
|
+
height: var(--salt-size-indicator);
|
|
4463
|
+
}
|
|
4464
|
+
.saltTabList-bordered .saltTab::after {
|
|
4465
|
+
top: 0;
|
|
4466
|
+
}
|
|
4467
|
+
.saltTabList-transparent .saltTab::after {
|
|
4468
|
+
bottom: 0;
|
|
4469
|
+
}
|
|
4470
|
+
.saltTab:hover::after,
|
|
4471
|
+
.saltTab-focusVisible::after {
|
|
4472
|
+
background: var(--salt-navigable-indicator-hover);
|
|
4473
|
+
}
|
|
4474
|
+
.saltTab-disabled:hover::after,
|
|
4475
|
+
.saltTab-disabled.saltTab-focusVisible::after {
|
|
4476
|
+
background: none;
|
|
4477
|
+
}
|
|
4478
|
+
.saltTab-focusVisible {
|
|
4479
|
+
outline: var(--salt-focused-outline);
|
|
4480
|
+
}
|
|
4481
|
+
.saltTabList-bordered .saltTab.saltTab-selected {
|
|
4482
|
+
background: var(--saltTabList-activeColor);
|
|
4483
|
+
border-left: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);
|
|
4484
|
+
border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);
|
|
4485
|
+
}
|
|
4486
|
+
.saltTab.saltTab-selected::after {
|
|
4487
|
+
background: var(--salt-navigable-accent-indicator-active);
|
|
4488
|
+
}
|
|
4489
|
+
.saltTab.saltTab-disabled {
|
|
4490
|
+
cursor: var(--salt-cursor-disabled);
|
|
4491
|
+
color: var(--salt-content-primary-foreground-disabled);
|
|
4492
|
+
}
|
|
4493
|
+
|
|
4494
|
+
/* src/tabs/TabBar.css */
|
|
4495
|
+
.saltTabBar {
|
|
4496
|
+
display: flex;
|
|
4497
|
+
align-items: center;
|
|
4498
|
+
flex-direction: row;
|
|
4499
|
+
position: relative;
|
|
4500
|
+
box-sizing: border-box;
|
|
4501
|
+
min-width: 0;
|
|
4502
|
+
max-width: 100%;
|
|
4503
|
+
}
|
|
4504
|
+
.saltTabBar-strip {
|
|
4505
|
+
display: flex;
|
|
4506
|
+
align-items: center;
|
|
4507
|
+
flex-direction: row;
|
|
4508
|
+
flex: 1 1 auto;
|
|
4509
|
+
gap: var(--salt-spacing-100);
|
|
4510
|
+
box-sizing: border-box;
|
|
4511
|
+
min-width: 0;
|
|
4512
|
+
max-width: 100%;
|
|
4513
|
+
}
|
|
4514
|
+
.saltTabBar-divider::before {
|
|
4515
|
+
content: "";
|
|
4516
|
+
position: absolute;
|
|
4517
|
+
inset: auto 0 0 0;
|
|
4518
|
+
height: var(--salt-size-fixed-100);
|
|
4519
|
+
border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);
|
|
4520
|
+
}
|
|
4521
|
+
.saltTabBar-inset {
|
|
4522
|
+
padding-left: var(--salt-spacing-300);
|
|
4523
|
+
padding-right: var(--salt-spacing-300);
|
|
4524
|
+
}
|
|
4525
|
+
|
|
4526
|
+
/* src/tabs/TabList.css */
|
|
4527
|
+
.saltTabList {
|
|
4528
|
+
display: flex;
|
|
4529
|
+
flex-wrap: nowrap;
|
|
4530
|
+
justify-content: flex-start;
|
|
4531
|
+
align-items: center;
|
|
4532
|
+
position: relative;
|
|
4533
|
+
background: transparent;
|
|
4534
|
+
min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));
|
|
4535
|
+
gap: var(--salt-spacing-100);
|
|
4536
|
+
max-width: 100%;
|
|
4537
|
+
min-width: 0;
|
|
4538
|
+
flex: 0 1 auto;
|
|
4539
|
+
}
|
|
4540
|
+
.saltTabList-center {
|
|
4541
|
+
justify-content: center;
|
|
4542
|
+
}
|
|
4543
|
+
.saltTabList-right {
|
|
4544
|
+
justify-content: flex-end;
|
|
4545
|
+
}
|
|
4546
|
+
.saltTabList-activeColorPrimary {
|
|
4547
|
+
--saltTabList-activeColor: var(--salt-container-primary-background);
|
|
4548
|
+
}
|
|
4549
|
+
.saltTabList-activeColorSecondary {
|
|
4550
|
+
--saltTabList-activeColor: var(--salt-container-secondary-background);
|
|
4551
|
+
}
|
|
4552
|
+
.saltTabList-activeColorTertiary {
|
|
4553
|
+
--saltTabList-activeColor: var(--salt-container-tertiary-background);
|
|
4554
|
+
}
|
|
4555
|
+
.saltTabList-measureContainer {
|
|
4556
|
+
position: absolute;
|
|
4557
|
+
top: 0;
|
|
4558
|
+
left: 0;
|
|
4559
|
+
height: 0;
|
|
4560
|
+
overflow: hidden;
|
|
4561
|
+
pointer-events: none;
|
|
4562
|
+
visibility: hidden;
|
|
4563
|
+
white-space: nowrap;
|
|
4564
|
+
}
|
|
4565
|
+
|
|
4566
|
+
/* src/tabs/TabPanel.css */
|
|
4567
|
+
.saltTabPanel {
|
|
4568
|
+
height: 100%;
|
|
4569
|
+
width: 100%;
|
|
4570
|
+
}
|
|
4571
|
+
.saltTabPanel[hidden] {
|
|
4572
|
+
display: none;
|
|
4573
|
+
}
|
|
4574
|
+
.saltTabPanel:focus-visible {
|
|
4575
|
+
outline: var(--salt-focused-outline);
|
|
4576
|
+
}
|
|
4577
|
+
|
|
4578
|
+
/* src/tabs/TabTrigger.css */
|
|
4579
|
+
.saltTabTrigger {
|
|
4580
|
+
all: unset;
|
|
4581
|
+
display: flex;
|
|
4582
|
+
gap: var(--salt-spacing-100);
|
|
4583
|
+
align-items: center;
|
|
4584
|
+
justify-content: center;
|
|
4585
|
+
flex: 1;
|
|
4586
|
+
overflow: hidden;
|
|
4587
|
+
}
|
|
4588
|
+
.saltTabTrigger::before {
|
|
4589
|
+
content: "";
|
|
4590
|
+
position: absolute;
|
|
4591
|
+
width: 100%;
|
|
4592
|
+
height: 100%;
|
|
4593
|
+
left: 0;
|
|
4594
|
+
top: 0;
|
|
4595
|
+
}
|
|
4596
|
+
.saltTabTrigger:focus-visible {
|
|
4597
|
+
outline: none;
|
|
4598
|
+
}
|
|
4599
|
+
|
|
4600
|
+
/* src/tabs/Tabs.css */
|
|
4601
|
+
.saltTabs {
|
|
4602
|
+
min-width: 0;
|
|
4603
|
+
}
|
|
4604
|
+
|
|
4311
4605
|
/* src/tag/Tag.css */
|
|
4312
4606
|
.saltTag {
|
|
4313
4607
|
height: calc(var(--salt-size-base) - var(--salt-spacing-100));
|
|
@@ -5838,4 +6132,75 @@ label.saltText small,
|
|
|
5838
6132
|
color: var(--salt-status-error-foreground-informative);
|
|
5839
6133
|
}
|
|
5840
6134
|
|
|
5841
|
-
/* src/
|
|
6135
|
+
/* src/tabs/internal/overflow/TabOverflowList.css */
|
|
6136
|
+
.saltTabOverflowList {
|
|
6137
|
+
position: relative;
|
|
6138
|
+
}
|
|
6139
|
+
.saltTabOverflowList-list {
|
|
6140
|
+
background: var(--salt-container-primary-background);
|
|
6141
|
+
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);
|
|
6142
|
+
overflow: hidden;
|
|
6143
|
+
overflow-y: auto;
|
|
6144
|
+
position: absolute;
|
|
6145
|
+
box-shadow: var(--salt-overlayable-shadow-popout);
|
|
6146
|
+
box-sizing: border-box;
|
|
6147
|
+
border-radius: var(--salt-palette-corner, 0);
|
|
6148
|
+
z-index: var(--salt-zIndex-flyover);
|
|
6149
|
+
}
|
|
6150
|
+
.saltTabOverflowList-listContainer {
|
|
6151
|
+
display: flex;
|
|
6152
|
+
flex-direction: column;
|
|
6153
|
+
gap: var(--salt-spacing-fixed-100);
|
|
6154
|
+
max-height: inherit;
|
|
6155
|
+
min-height: inherit;
|
|
6156
|
+
}
|
|
6157
|
+
.saltTabOverflowList-list .saltTab {
|
|
6158
|
+
color: var(--salt-content-primary-foreground);
|
|
6159
|
+
background: var(--salt-selectable-background);
|
|
6160
|
+
font-size: var(--salt-text-fontSize);
|
|
6161
|
+
font-weight: var(--salt-text-fontWeight);
|
|
6162
|
+
min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));
|
|
6163
|
+
padding-left: var(--salt-spacing-100);
|
|
6164
|
+
padding-right: var(--salt-spacing-100);
|
|
6165
|
+
display: flex;
|
|
6166
|
+
gap: var(--salt-spacing-100);
|
|
6167
|
+
position: relative;
|
|
6168
|
+
align-items: center;
|
|
6169
|
+
cursor: var(--salt-cursor-hover);
|
|
6170
|
+
box-sizing: border-box;
|
|
6171
|
+
flex-shrink: 0;
|
|
6172
|
+
justify-content: flex-start;
|
|
6173
|
+
}
|
|
6174
|
+
@supports selector(:has(*)) {
|
|
6175
|
+
.saltTabList:has([data-overflowbutton]) .saltTabOverflowList-list .saltTab {
|
|
6176
|
+
max-width: unset;
|
|
6177
|
+
}
|
|
6178
|
+
}
|
|
6179
|
+
.saltTabOverflowList-list .saltTab .saltTabTrigger {
|
|
6180
|
+
justify-content: start;
|
|
6181
|
+
}
|
|
6182
|
+
.saltTabOverflowList-list .saltTab::after {
|
|
6183
|
+
display: none;
|
|
6184
|
+
}
|
|
6185
|
+
.saltTabOverflowList-list .saltTab-focusVisible {
|
|
6186
|
+
outline: var(--salt-focused-outline);
|
|
6187
|
+
outline-offset: calc(var(--salt-size-fixed-100) * -2);
|
|
6188
|
+
}
|
|
6189
|
+
.saltTabOverflowList-list .saltTab:hover {
|
|
6190
|
+
background: var(--salt-selectable-background-hover);
|
|
6191
|
+
}
|
|
6192
|
+
.saltTabOverflowList-list .saltTab-disabled {
|
|
6193
|
+
color: var(--salt-content-primary-foreground-disabled);
|
|
6194
|
+
cursor: var(--salt-cursor-disabled);
|
|
6195
|
+
}
|
|
6196
|
+
.saltTabOverflowList-list .saltTab-disabled:hover,
|
|
6197
|
+
.saltTabOverflowList-list .saltTab-disabled:active {
|
|
6198
|
+
background: var(--salt-selectable-background);
|
|
6199
|
+
box-shadow: none;
|
|
6200
|
+
}
|
|
6201
|
+
.saltTabOverflowList-list .saltTab:active {
|
|
6202
|
+
background: var(--salt-selectable-background-selected);
|
|
6203
|
+
box-shadow: 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);
|
|
6204
|
+
}
|
|
6205
|
+
|
|
6206
|
+
/* src/79885058-087e-4d2c-b20a-41af8dda6a7e.css */
|
|
@@ -5,14 +5,26 @@ var React = require('react');
|
|
|
5
5
|
var useAriaAnnouncer = require('./useAriaAnnouncer.js');
|
|
6
6
|
|
|
7
7
|
const AriaAnnounce = ({
|
|
8
|
-
announcement
|
|
8
|
+
announcement,
|
|
9
|
+
delay,
|
|
10
|
+
ariaLive,
|
|
11
|
+
duration,
|
|
12
|
+
target
|
|
9
13
|
}) => {
|
|
10
14
|
const { announce } = useAriaAnnouncer.useAriaAnnouncer();
|
|
11
15
|
React.useEffect(() => {
|
|
12
16
|
if (announcement) {
|
|
13
|
-
|
|
17
|
+
if (delay !== void 0) {
|
|
18
|
+
announce(announcement, delay);
|
|
19
|
+
} else {
|
|
20
|
+
announce(announcement, {
|
|
21
|
+
...ariaLive ? { ariaLive } : {},
|
|
22
|
+
...duration !== void 0 ? { duration } : {},
|
|
23
|
+
...target ? { target } : {}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
14
26
|
}
|
|
15
|
-
}, [announce, announcement]);
|
|
27
|
+
}, [announce, announcement, ariaLive, delay, duration, target]);
|
|
16
28
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
17
29
|
};
|
|
18
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AriaAnnounce.js","sources":["../src/aria-announcer/AriaAnnounce.tsx"],"sourcesContent":["import { type ComponentType, useEffect } from \"react\";\
|
|
1
|
+
{"version":3,"file":"AriaAnnounce.js","sources":["../src/aria-announcer/AriaAnnounce.tsx"],"sourcesContent":["import { type ComponentType, useEffect } from \"react\";\nimport type { AnnounceFnOptions } from \"./AriaAnnouncerContext\";\nimport { useAriaAnnouncer } from \"./useAriaAnnouncer\";\n\nexport interface AriaAnnounceProps extends AnnounceFnOptions {\n /**\n * String to be announced by screenreader.\n */\n announcement?: string;\n /**\n * Legacy option, precede the announcement with a delay.\n * @deprecated\n * useAriaAnnouncer `delay` arg is deprecated, use your own `setTimeout` or consider using `duration` through `AnnounceFnOptions` instead.\n */\n delay?: number;\n}\n\nexport const AriaAnnounce: ComponentType<AriaAnnounceProps> = ({\n announcement,\n delay,\n ariaLive,\n duration,\n target,\n}) => {\n const { announce } = useAriaAnnouncer();\n\n useEffect(() => {\n if (announcement) {\n if (delay !== undefined) {\n announce(announcement, delay);\n } else {\n announce(announcement, {\n ...(ariaLive ? { ariaLive } : {}),\n ...(duration !== undefined ? { duration } : {}),\n ...(target ? { target } : {}),\n });\n }\n }\n }, [announce, announcement, ariaLive, delay, duration, target]);\n\n // biome-ignore lint/complexity/noUselessFragments: If we return null here, react-docgen wouldn't be able to locate the component.\n return <></>;\n};\n"],"names":["useAriaAnnouncer","useEffect","jsx","Fragment"],"mappings":";;;;;;AAiBO,MAAM,eAAiD,CAAC;AAAA,EAC7D,YAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIA,iCAAA,EAAiB;AAEtC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,QAAA,CAAS,cAAc,KAAK,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,YAAA,EAAc;AAAA,UACrB,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,UAC/B,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,UAC7C,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,SAC5B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,YAAA,EAAc,UAAU,KAAA,EAAO,QAAA,EAAU,MAAM,CAAC,CAAA;AAG9D,EAAA,uBAAOC,cAAA,CAAAC,mBAAA,EAAA,EAAE,CAAA;AACX;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AriaAnnouncerContext.js","sources":["../src/aria-announcer/AriaAnnouncerContext.ts"],"sourcesContent":["import { createContext } from \"react\";\n\nexport type
|
|
1
|
+
{"version":3,"file":"AriaAnnouncerContext.js","sources":["../src/aria-announcer/AriaAnnouncerContext.ts"],"sourcesContent":["import { type AriaAttributes, createContext } from \"react\";\n\nexport type AnnounceFnOptions = {\n /**\n * Assertiveness\n */\n ariaLive?: Exclude<AriaAttributes[\"aria-live\"], \"off\">;\n /**\n * How long (ms) the announcement should remain in the DOM before being removed.\n * Defaults to the provider's ANNOUNCEMENT_TIME_IN_DOM.\n */\n duration?: number;\n /**\n * Optional named target live region.\n * When set, announcements can be routed to a provider registered with the same target.\n */\n target?: string;\n};\n\nexport type AriaAnnouncer = {\n /**\n * TODO remove legacy `delay` arg (number) in favour of `options` (AnnounceFnOptions) as a breaking change\n */\n /**\n * Announcer function\n * @param announcement - announcement to queue for screenreader.\n * @param legacyDelayOrOptions, deprecated `delay` or `options` for announcement\n */\n announce: (\n announcement: string,\n legacyDelayOrOptions?: number | AnnounceFnOptions,\n ) => void;\n};\n\nexport const AriaAnnouncerContext = createContext<AriaAnnouncer | undefined>(\n undefined,\n);\n"],"names":["createContext"],"mappings":";;;;AAkCO,MAAM,oBAAA,GAAuBA,mBAAA;AAAA,EAClC;AACF;;;;"}
|
|
@@ -2,57 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
|
+
var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
|
|
5
6
|
var AriaAnnouncerContext = require('./AriaAnnouncerContext.js');
|
|
7
|
+
var announcementRegistry = require('./announcementRegistry.js');
|
|
6
8
|
|
|
7
|
-
const
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const mountedRef = React.useRef(true);
|
|
16
|
-
const announceAll = React.useCallback(() => {
|
|
17
|
-
isAnnouncingRef.current = true;
|
|
18
|
-
if (mountedRef.current) {
|
|
19
|
-
setCurrentAnnouncement("");
|
|
20
|
-
requestAnimationFrame(() => {
|
|
21
|
-
if (mountedRef.current && announcementsRef.current.length) {
|
|
22
|
-
const announcement = announcementsRef.current.shift();
|
|
23
|
-
setCurrentAnnouncement(announcement);
|
|
24
|
-
setTimeout(() => {
|
|
25
|
-
announceAll();
|
|
26
|
-
}, ARIA_ANNOUNCE_DELAY);
|
|
27
|
-
} else {
|
|
28
|
-
isAnnouncingRef.current = false;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
9
|
+
const ANNOUNCEMENT_TIME_IN_DOM = 300;
|
|
10
|
+
const AnnouncementRegion = React.forwardRef(function AnnouncementRegion2(props, ref) {
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12
|
+
"div",
|
|
13
|
+
{
|
|
14
|
+
"aria-atomic": false,
|
|
15
|
+
ref,
|
|
16
|
+
...props
|
|
31
17
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
const AriaAnnouncerProvider = React.forwardRef(function AriaAnnouncerProvider2({ children, style, target, ...rest }, ref) {
|
|
21
|
+
const [politeAnnouncements, setPoliteAnnouncements] = React.useState([]);
|
|
22
|
+
const [assertiveAnnouncements, setAssertiveAnnouncements] = React.useState([]);
|
|
23
|
+
const idCounterRef = React.useRef(0);
|
|
24
|
+
const makeAnnouncement = React.useCallback(
|
|
25
|
+
(message, assertiveness = "polite", duration = ANNOUNCEMENT_TIME_IN_DOM) => {
|
|
26
|
+
idCounterRef.current += 1;
|
|
27
|
+
const id = `announce-${assertiveness}-${Date.now()}-${idCounterRef.current}`;
|
|
28
|
+
if (assertiveness === "polite") {
|
|
29
|
+
setPoliteAnnouncements((previous) => {
|
|
30
|
+
return previous.concat({ id, message });
|
|
31
|
+
});
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
setPoliteAnnouncements(
|
|
34
|
+
(previous) => previous.filter((announcement) => announcement.id !== id)
|
|
35
|
+
);
|
|
36
|
+
}, duration);
|
|
37
|
+
} else {
|
|
38
|
+
setAssertiveAnnouncements((previous) => {
|
|
39
|
+
return previous.concat({ id, message });
|
|
40
|
+
});
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
setAssertiveAnnouncements(
|
|
43
|
+
(previous) => previous.filter((announcement) => announcement.id !== id)
|
|
44
|
+
);
|
|
45
|
+
}, duration);
|
|
38
46
|
}
|
|
39
47
|
},
|
|
40
|
-
[
|
|
48
|
+
[]
|
|
49
|
+
);
|
|
50
|
+
const announce = React.useCallback(
|
|
51
|
+
(announcement, legacyDelayOrOptions = {}) => {
|
|
52
|
+
const options = typeof legacyDelayOrOptions === "object" && legacyDelayOrOptions ? legacyDelayOrOptions : {};
|
|
53
|
+
makeAnnouncement(
|
|
54
|
+
announcement,
|
|
55
|
+
options.ariaLive,
|
|
56
|
+
options.duration ?? ANNOUNCEMENT_TIME_IN_DOM
|
|
57
|
+
);
|
|
58
|
+
},
|
|
59
|
+
[makeAnnouncement]
|
|
41
60
|
);
|
|
42
|
-
React.useEffect(() => {
|
|
43
|
-
mountedRef.current = true;
|
|
44
|
-
return () => {
|
|
45
|
-
mountedRef.current = false;
|
|
46
|
-
};
|
|
47
|
-
}, []);
|
|
48
61
|
const value = React.useMemo(() => ({ announce }), [announce]);
|
|
62
|
+
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
63
|
+
if (!target) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
return announcementRegistry.registerAnnouncementTarget(target, announce);
|
|
67
|
+
}, [announce, target]);
|
|
49
68
|
return /* @__PURE__ */ jsxRuntime.jsxs(AriaAnnouncerContext.AriaAnnouncerContext.Provider, { value, children: [
|
|
50
69
|
children,
|
|
51
|
-
/* @__PURE__ */ jsxRuntime.
|
|
70
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
52
71
|
"div",
|
|
53
72
|
{
|
|
54
|
-
"aria-atomic": "true",
|
|
55
|
-
"aria-live": "assertive",
|
|
56
73
|
style: {
|
|
57
74
|
position: "absolute",
|
|
58
75
|
height: 1,
|
|
@@ -65,12 +82,17 @@ function AriaAnnouncerProvider({
|
|
|
65
82
|
borderWidth: 0,
|
|
66
83
|
...style
|
|
67
84
|
},
|
|
68
|
-
|
|
85
|
+
...rest,
|
|
86
|
+
ref,
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(AnnouncementRegion, { "aria-live": "polite", children: politeAnnouncements.map((announcement) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: announcement.message }, `polite-${announcement.id}`)) }),
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(AnnouncementRegion, { "aria-live": "assertive", children: assertiveAnnouncements.map((announcement) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: announcement.message }, `assertive-${announcement.id}`)) })
|
|
90
|
+
]
|
|
69
91
|
}
|
|
70
92
|
)
|
|
71
93
|
] });
|
|
72
|
-
}
|
|
94
|
+
});
|
|
73
95
|
|
|
74
|
-
exports.
|
|
96
|
+
exports.ANNOUNCEMENT_TIME_IN_DOM = ANNOUNCEMENT_TIME_IN_DOM;
|
|
75
97
|
exports.AriaAnnouncerProvider = AriaAnnouncerProvider;
|
|
76
98
|
//# sourceMappingURL=AriaAnnouncerProvider.js.map
|