@salt-ds/core 1.60.0 → 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 +38 -0
- package/css/salt-core.css +366 -1
- package/dist-cjs/index.js +16 -0
- 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/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/semantic-icon-provider/SemanticIconProvider.js +22 -20
- package/dist-cjs/semantic-icon-provider/SemanticIconProvider.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-es/index.js +8 -0
- 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/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/semantic-icon-provider/SemanticIconProvider.js +23 -21
- package/dist-es/semantic-icon-provider/SemanticIconProvider.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-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,43 @@
|
|
|
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
|
+
|
|
3
41
|
## 1.60.0
|
|
4
42
|
|
|
5
43
|
### Minor 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 */
|
package/dist-cjs/index.js
CHANGED
|
@@ -90,6 +90,7 @@ var LinearProgress = require('./progress/LinearProgress/LinearProgress.js');
|
|
|
90
90
|
var RadioButton = require('./radio-button/RadioButton.js');
|
|
91
91
|
var RadioButtonGroup = require('./radio-button/RadioButtonGroup.js');
|
|
92
92
|
var RadioButtonIcon = require('./radio-button/RadioButtonIcon.js');
|
|
93
|
+
var Rating = require('./rating/Rating.js');
|
|
93
94
|
var SaltProvider = require('./salt-provider/SaltProvider.js');
|
|
94
95
|
var Scrim = require('./scrim/Scrim.js');
|
|
95
96
|
var SegmentedButtonGroup = require('./segmented-button-group/SegmentedButtonGroup.js');
|
|
@@ -114,6 +115,13 @@ var TFoot = require('./table/TFoot.js');
|
|
|
114
115
|
var TH = require('./table/TH.js');
|
|
115
116
|
var THead = require('./table/THead.js');
|
|
116
117
|
var TR = require('./table/TR.js');
|
|
118
|
+
var Tab = require('./tabs/Tab.js');
|
|
119
|
+
var TabAction = require('./tabs/TabAction.js');
|
|
120
|
+
var TabBar = require('./tabs/TabBar.js');
|
|
121
|
+
var TabList = require('./tabs/TabList.js');
|
|
122
|
+
var TabPanel = require('./tabs/TabPanel.js');
|
|
123
|
+
var Tabs = require('./tabs/Tabs.js');
|
|
124
|
+
var TabTrigger = require('./tabs/TabTrigger.js');
|
|
117
125
|
var Tag = require('./tag/Tag.js');
|
|
118
126
|
var Code = require('./text/Code.js');
|
|
119
127
|
var Display = require('./text/Display.js');
|
|
@@ -276,6 +284,7 @@ exports.LinearProgress = LinearProgress.LinearProgress;
|
|
|
276
284
|
exports.RadioButton = RadioButton.RadioButton;
|
|
277
285
|
exports.RadioButtonGroup = RadioButtonGroup.RadioButtonGroup;
|
|
278
286
|
exports.RadioButtonIcon = RadioButtonIcon.RadioButtonIcon;
|
|
287
|
+
exports.Rating = Rating.Rating;
|
|
279
288
|
exports.BreakpointContext = SaltProvider.BreakpointContext;
|
|
280
289
|
exports.DEFAULT_DENSITY = SaltProvider.DEFAULT_DENSITY;
|
|
281
290
|
exports.DensityContext = SaltProvider.DensityContext;
|
|
@@ -312,6 +321,13 @@ exports.TFoot = TFoot.TFoot;
|
|
|
312
321
|
exports.TH = TH.TH;
|
|
313
322
|
exports.THead = THead.THead;
|
|
314
323
|
exports.TR = TR.TR;
|
|
324
|
+
exports.Tab = Tab.Tab;
|
|
325
|
+
exports.TabAction = TabAction.TabAction;
|
|
326
|
+
exports.TabBar = TabBar.TabBar;
|
|
327
|
+
exports.TabList = TabList.TabList;
|
|
328
|
+
exports.TabPanel = TabPanel.TabPanel;
|
|
329
|
+
exports.Tabs = Tabs.Tabs;
|
|
330
|
+
exports.TabTrigger = TabTrigger.TabTrigger;
|
|
315
331
|
exports.Tag = Tag.Tag;
|
|
316
332
|
exports.Code = Code.Code;
|
|
317
333
|
exports.Display1 = Display.Display1;
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -30,6 +30,7 @@ const NavigationItem = React.forwardRef(
|
|
|
30
30
|
level = 0,
|
|
31
31
|
onExpand,
|
|
32
32
|
style: styleProp,
|
|
33
|
+
"aria-controls": ariaControls,
|
|
33
34
|
...rest
|
|
34
35
|
} = props;
|
|
35
36
|
const targetWindow = window.useWindow();
|
|
@@ -67,6 +68,7 @@ const NavigationItem = React.forwardRef(
|
|
|
67
68
|
),
|
|
68
69
|
render: render ?? (isLink ? void 0 : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" })),
|
|
69
70
|
"aria-expanded": isLink ? void 0 : expanded,
|
|
71
|
+
"aria-controls": ariaControls,
|
|
70
72
|
onClick: handleClick,
|
|
71
73
|
"aria-current": isLink && active ? "page" : void 0,
|
|
72
74
|
href,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEvent,\n type MouseEventHandler,\n} from \"react\";\nimport type { RenderPropsType } from \"../utils\";\nimport { makePrefixer } from \"../utils\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { NavigationItemAction } from \"./NavigationItemAction\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Render prop to enable customisation of navigation item element.\n */\n render?: RenderPropsType[\"render\"];\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n render,\n children,\n className,\n expanded = false,\n href,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n style: styleProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n const isLink = href !== undefined;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onExpand?.(event);\n };\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n style={style}\n {...rest}\n >\n <NavigationItemAction\n className={clsx(\n withBaseName(\"wrapper\"),\n {\n [withBaseName(\"active\")]: active || blurActive,\n [withBaseName(\"blurActive\")]: blurActive,\n [withBaseName(\"rootItem\")]: level === 0,\n },\n withBaseName(orientation),\n )}\n render={render ?? (isLink ? undefined : <button type=\"button\" />)}\n aria-expanded={isLink ? undefined : expanded}\n onClick={handleClick}\n aria-current={isLink && active ? \"page\" : undefined}\n href={href}\n >\n <span className={withBaseName(\"label\")}>{children}</span>\n {parent ? (\n <ExpansionIcon expanded={expanded} orientation={orientation} />\n ) : null}\n </NavigationItemAction>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","NavigationItem","useWindow","useComponentCssInjection","navigationItemCss","jsx","clsx","jsxs","NavigationItemAction","ExpansionIcon"],"mappings":";;;;;;;;;;;;;;;;AAsDA,MAAM,YAAA,GAAeA,0BAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAA,GAAiBC,gBAAA;AAAA,EAC5B,SAASC,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,GAAW,KAAA;AAAA,MACX,IAAA;AAAA,MACA,WAAA,GAAc,YAAA;AAAA,MACd,MAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,QAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,gBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,4BAAA,EAA8B,GAAG,KAAK,CAAA;AAAA,KACxC;AAEA,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyC;AAC5D,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAC,eAAA;AAAA,UAACC,yCAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWF,SAAA;AAAA,cACT,aAAa,SAAS,CAAA;AAAA,cACtB;AAAA,gBACE,CAAC,YAAA,CAAa,QAAQ,CAAC,GAAG,MAAA,IAAU,UAAA;AAAA,gBACpC,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,gBAC9B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,KAAA,KAAU;AAAA,eACxC;AAAA,cACA,aAAa,WAAW;AAAA,aAC1B;AAAA,YACA,QAAQ,MAAA,KAAW,MAAA,GAAS,yBAAYD,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,CAAA,CAAA;AAAA,YAC9D,eAAA,EAAe,SAAS,MAAA,GAAY,QAAA;AAAA,YACpC,OAAA,EAAS,WAAA;AAAA,YACT,cAAA,EAAc,MAAA,IAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,YAC1C,IAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,OAAO,GAAI,QAAA,EAAS,CAAA;AAAA,cACjD,MAAA,mBACCA,cAAA,CAACI,2BAAA,EAAA,EAAc,QAAA,EAAoB,aAA0B,CAAA,GAC3D;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEvent,\n type MouseEventHandler,\n} from \"react\";\nimport type { RenderPropsType } from \"../utils\";\nimport { makePrefixer } from \"../utils\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { NavigationItemAction } from \"./NavigationItemAction\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Render prop to enable customisation of navigation item element.\n */\n render?: RenderPropsType[\"render\"];\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n render,\n children,\n className,\n expanded = false,\n href,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n style: styleProp,\n \"aria-controls\": ariaControls,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n const isLink = href !== undefined;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onExpand?.(event);\n };\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n style={style}\n {...rest}\n >\n <NavigationItemAction\n className={clsx(\n withBaseName(\"wrapper\"),\n {\n [withBaseName(\"active\")]: active || blurActive,\n [withBaseName(\"blurActive\")]: blurActive,\n [withBaseName(\"rootItem\")]: level === 0,\n },\n withBaseName(orientation),\n )}\n render={render ?? (isLink ? undefined : <button type=\"button\" />)}\n aria-expanded={isLink ? undefined : expanded}\n aria-controls={ariaControls}\n onClick={handleClick}\n aria-current={isLink && active ? \"page\" : undefined}\n href={href}\n >\n <span className={withBaseName(\"label\")}>{children}</span>\n {parent ? (\n <ExpansionIcon expanded={expanded} orientation={orientation} />\n ) : null}\n </NavigationItemAction>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","NavigationItem","useWindow","useComponentCssInjection","navigationItemCss","jsx","clsx","jsxs","NavigationItemAction","ExpansionIcon"],"mappings":";;;;;;;;;;;;;;;;AAsDA,MAAM,YAAA,GAAeA,0BAAa,oBAAoB,CAAA;AAE/C,MAAM,cAAA,GAAiBC,gBAAA;AAAA,EAC5B,SAASC,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,GAAW,KAAA;AAAA,MACX,IAAA;AAAA,MACA,WAAA,GAAc,YAAA;AAAA,MACd,MAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,QAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,eAAA,EAAiB,YAAA;AAAA,MACjB,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,gBAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,4BAAA,EAA8B,GAAG,KAAK,CAAA;AAAA,KACxC;AAEA,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyC;AAC5D,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,KAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAC,eAAA;AAAA,UAACC,yCAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWF,SAAA;AAAA,cACT,aAAa,SAAS,CAAA;AAAA,cACtB;AAAA,gBACE,CAAC,YAAA,CAAa,QAAQ,CAAC,GAAG,MAAA,IAAU,UAAA;AAAA,gBACpC,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,gBAC9B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,KAAA,KAAU;AAAA,eACxC;AAAA,cACA,aAAa,WAAW;AAAA,aAC1B;AAAA,YACA,QAAQ,MAAA,KAAW,MAAA,GAAS,yBAAYD,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,CAAA,CAAA;AAAA,YAC9D,eAAA,EAAe,SAAS,MAAA,GAAY,QAAA;AAAA,YACpC,eAAA,EAAe,YAAA;AAAA,YACf,OAAA,EAAS,WAAA;AAAA,YACT,cAAA,EAAc,MAAA,IAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,YAC1C,IAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,OAAO,GAAI,QAAA,EAAS,CAAA;AAAA,cACjD,MAAA,mBACCA,cAAA,CAACI,2BAAA,EAAA,EAAc,QAAA,EAAoB,aAA0B,CAAA,GAC3D;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltRating {\n display: inline-flex;\n box-sizing: border-box;\n}\n\n.saltFormField .saltRating-container {\n height: var(--salt-size-base);\n padding-top: calc(var(--salt-spacing-100) + var(--salt-spacing-fixed-100));\n}\n\n.saltFormField .saltRating-label {\n min-height: var(--salt-size-base);\n padding-top: var(--salt-spacing-100);\n}\n\n.saltRating-labelBottom {\n flex-direction: column;\n align-items: flex-start;\n gap: var(--salt-spacing-75);\n}\n\n.saltRating-labelRight {\n flex-direction: row;\n gap: var(--salt-spacing-150);\n}\n\n.saltRating-container {\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-150);\n flex-wrap: nowrap;\n justify-content: flex-start;\n padding-top: var(--salt-spacing-fixed-100);\n padding-bottom: var(--salt-spacing-fixed-100);\n box-sizing: border-box;\n}\n\n.saltRating-label {\n color: var(--salt-content-primary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n box-sizing: border-box;\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=Rating.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rating.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var clsx = require('clsx');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
require('../form-field-context/FormFieldContext.js');
|
|
9
|
+
var useFormFieldProps = require('../form-field-context/useFormFieldProps.js');
|
|
10
|
+
var capitalize = require('../utils/capitalize.js');
|
|
11
|
+
var makePrefixer = require('../utils/makePrefixer.js');
|
|
12
|
+
var useControlled = require('../utils/useControlled.js');
|
|
13
|
+
require('../utils/useFloatingUI/useFloatingUI.js');
|
|
14
|
+
var useId = require('../utils/useId.js');
|
|
15
|
+
require('../salt-provider/SaltProvider.js');
|
|
16
|
+
require('../viewport/ViewportProvider.js');
|
|
17
|
+
var Rating$1 = require('./Rating.css.js');
|
|
18
|
+
var RatingItem = require('./RatingItem.js');
|
|
19
|
+
|
|
20
|
+
const withBaseName = makePrefixer.makePrefixer("saltRating");
|
|
21
|
+
const defaultGetLabel = (value) => `${value} Star${value > 1 ? "s" : ""}`;
|
|
22
|
+
const Rating = React.forwardRef(function Rating2({
|
|
23
|
+
value: valueProp,
|
|
24
|
+
defaultValue = 0,
|
|
25
|
+
name: nameProp,
|
|
26
|
+
onChange,
|
|
27
|
+
className,
|
|
28
|
+
readOnly: readOnlyProp,
|
|
29
|
+
disabled: disabledProp,
|
|
30
|
+
max = 5,
|
|
31
|
+
getLabel = defaultGetLabel,
|
|
32
|
+
getVisibleLabel,
|
|
33
|
+
labelPlacement = "right",
|
|
34
|
+
"aria-label": ariaLabel,
|
|
35
|
+
"aria-labelledby": ariaLabelledBy,
|
|
36
|
+
"aria-describedby": ariaDescribedBy,
|
|
37
|
+
...restProps
|
|
38
|
+
}, ref) {
|
|
39
|
+
const targetWindow = window.useWindow();
|
|
40
|
+
styles.useComponentCssInjection({
|
|
41
|
+
testId: "salt-rating",
|
|
42
|
+
css: Rating$1,
|
|
43
|
+
window: targetWindow
|
|
44
|
+
});
|
|
45
|
+
const {
|
|
46
|
+
disabled: formFieldDisabled,
|
|
47
|
+
readOnly: formFieldReadOnly,
|
|
48
|
+
a11yProps: {
|
|
49
|
+
"aria-describedby": formFieldDescribedBy,
|
|
50
|
+
"aria-labelledby": formFieldLabelledBy
|
|
51
|
+
} = {}
|
|
52
|
+
} = useFormFieldProps.useFormFieldProps();
|
|
53
|
+
const disabled = formFieldDisabled || disabledProp;
|
|
54
|
+
const readOnly = formFieldReadOnly || readOnlyProp;
|
|
55
|
+
const [hoveredValue, setHoveredValue] = React.useState(0);
|
|
56
|
+
const [selected, setSelected] = useControlled.useControlled({
|
|
57
|
+
controlled: valueProp,
|
|
58
|
+
default: defaultValue,
|
|
59
|
+
name: "Rating",
|
|
60
|
+
state: "value"
|
|
61
|
+
});
|
|
62
|
+
const name = useId.useId(nameProp);
|
|
63
|
+
const handleMouseEnter = (event) => {
|
|
64
|
+
if (readOnly || disabled) return;
|
|
65
|
+
const itemValue = Number.parseInt(event.currentTarget.value, 10);
|
|
66
|
+
setHoveredValue(itemValue);
|
|
67
|
+
};
|
|
68
|
+
const handleChange = (event) => {
|
|
69
|
+
if (readOnly) {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const itemValue = Number.parseInt(event.currentTarget.value, 10);
|
|
74
|
+
setSelected(itemValue);
|
|
75
|
+
onChange == null ? void 0 : onChange(event, itemValue);
|
|
76
|
+
};
|
|
77
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
78
|
+
"div",
|
|
79
|
+
{
|
|
80
|
+
ref,
|
|
81
|
+
className: clsx.clsx(
|
|
82
|
+
withBaseName(),
|
|
83
|
+
withBaseName(`label${capitalize.capitalize(labelPlacement)}`),
|
|
84
|
+
className
|
|
85
|
+
),
|
|
86
|
+
...restProps,
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
role: "radiogroup",
|
|
92
|
+
className: withBaseName("container"),
|
|
93
|
+
"aria-readonly": readOnly || void 0,
|
|
94
|
+
"aria-label": ariaLabel,
|
|
95
|
+
"aria-labelledby": clsx.clsx(formFieldLabelledBy, ariaLabelledBy) || void 0,
|
|
96
|
+
"aria-describedby": clsx.clsx(formFieldDescribedBy, ariaDescribedBy) || void 0,
|
|
97
|
+
onMouseLeave: () => setHoveredValue(0),
|
|
98
|
+
children: Array.from({ length: max }, (_, index) => {
|
|
99
|
+
const itemValue = index + 1;
|
|
100
|
+
const isHovered = hoveredValue > 0 && itemValue <= hoveredValue;
|
|
101
|
+
const isSelected = hoveredValue === 0 && itemValue <= selected;
|
|
102
|
+
const isUnselecting = hoveredValue > 0 && itemValue > hoveredValue && itemValue <= selected;
|
|
103
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
104
|
+
RatingItem.RatingItem,
|
|
105
|
+
{
|
|
106
|
+
currentRating: selected,
|
|
107
|
+
isHovered,
|
|
108
|
+
isSelected,
|
|
109
|
+
isUnselecting,
|
|
110
|
+
onMouseEnter: handleMouseEnter,
|
|
111
|
+
onChange: handleChange,
|
|
112
|
+
value: itemValue,
|
|
113
|
+
readOnly,
|
|
114
|
+
disabled,
|
|
115
|
+
name,
|
|
116
|
+
"aria-label": getLabel == null ? void 0 : getLabel(itemValue)
|
|
117
|
+
},
|
|
118
|
+
itemValue
|
|
119
|
+
);
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
getVisibleLabel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
className: clsx.clsx(
|
|
127
|
+
withBaseName("label"),
|
|
128
|
+
withBaseName(`label-${labelPlacement}`)
|
|
129
|
+
),
|
|
130
|
+
"aria-hidden": true,
|
|
131
|
+
children: getVisibleLabel(hoveredValue || selected, max)
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
exports.Rating = Rating;
|
|
140
|
+
//# sourceMappingURL=Rating.js.map
|