@salt-ds/core 1.47.4 → 1.48.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 +51 -0
- package/css/salt-core.css +202 -24
- package/dist-cjs/aria-announcer/AriaAnnounce.js.map +1 -1
- package/dist-cjs/avatar/Avatar.js +5 -2
- package/dist-cjs/avatar/Avatar.js.map +1 -1
- package/dist-cjs/banner/Banner.css.js +1 -1
- package/dist-cjs/breakpoints/BreakpointProvider.js +10 -7
- package/dist-cjs/breakpoints/BreakpointProvider.js.map +1 -1
- package/dist-cjs/button/useButton.js +3 -3
- package/dist-cjs/button/useButton.js.map +1 -1
- package/dist-cjs/checkbox/Checkbox.css.js +1 -1
- package/dist-cjs/checkbox/CheckboxIcon.css.js +1 -1
- package/dist-cjs/collapsible/Collapsible.js +52 -0
- package/dist-cjs/collapsible/Collapsible.js.map +1 -0
- package/dist-cjs/collapsible/CollapsibleContext.js +29 -0
- package/dist-cjs/collapsible/CollapsibleContext.js.map +1 -0
- package/dist-cjs/collapsible/CollapsiblePanel.css.js +6 -0
- package/dist-cjs/collapsible/CollapsiblePanel.css.js.map +1 -0
- package/dist-cjs/collapsible/CollapsiblePanel.js +46 -0
- package/dist-cjs/collapsible/CollapsiblePanel.js.map +1 -0
- package/dist-cjs/collapsible/CollapsibleTrigger.js +40 -0
- package/dist-cjs/collapsible/CollapsibleTrigger.js.map +1 -0
- package/dist-cjs/dialog/Dialog.js +1 -1
- package/dist-cjs/dialog/Dialog.js.map +1 -1
- package/dist-cjs/dialog/DialogContent.css.js +1 -1
- package/dist-cjs/dialog/DialogHeader.css.js +1 -1
- package/dist-cjs/divider/Divider.js.map +1 -1
- package/dist-cjs/index.js +21 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/input/Input.css.js +1 -1
- package/dist-cjs/interactable-card/InteractableCard.js +29 -26
- package/dist-cjs/interactable-card/InteractableCard.js.map +1 -1
- package/dist-cjs/interactable-card/InteractableCardGroup.js +3 -3
- package/dist-cjs/interactable-card/InteractableCardGroup.js.map +1 -1
- package/dist-cjs/multiline-input/MultilineInput.css.js +1 -1
- package/dist-cjs/multiline-input/MultilineInput.js.map +1 -1
- package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-cjs/pagination/PageButton.css.js +1 -1
- package/dist-cjs/pill/Pill.js +1 -1
- package/dist-cjs/pill/Pill.js.map +1 -1
- package/dist-cjs/pill-input/PillInput.css.js +1 -1
- package/dist-cjs/pill-input/useTruncatePills.js +2 -1
- package/dist-cjs/pill-input/useTruncatePills.js.map +1 -1
- package/dist-cjs/radio-button/RadioButton.css.js +1 -1
- package/dist-cjs/radio-button/RadioButtonIcon.css.js +1 -1
- package/dist-cjs/salt-provider/SaltProvider.js +2 -2
- package/dist-cjs/salt-provider/SaltProvider.js.map +1 -1
- package/dist-cjs/spinner/Spinner.js +3 -4
- package/dist-cjs/spinner/Spinner.js.map +1 -1
- package/dist-cjs/stepper/Step.js +1 -1
- package/dist-cjs/stepper/Step.js.map +1 -1
- package/dist-cjs/stepper/internal/StepText.css.js +1 -1
- package/dist-cjs/stepper/internal/StepText.js +0 -1
- package/dist-cjs/stepper/internal/StepText.js.map +1 -1
- package/dist-cjs/switch/Switch.js.map +1 -1
- package/dist-cjs/text/Text.css.js +1 -1
- package/dist-cjs/toggle-button-group/ToggleButtonGroup.js +3 -3
- package/dist-cjs/toggle-button-group/ToggleButtonGroup.js.map +1 -1
- package/dist-cjs/tooltip/Tooltip.js +1 -1
- package/dist-cjs/tooltip/Tooltip.js.map +1 -1
- package/dist-cjs/tooltip/useTooltip.js +1 -1
- package/dist-cjs/tooltip/useTooltip.js.map +1 -1
- package/dist-cjs/utils/mergeProps.js +2 -2
- package/dist-cjs/utils/mergeProps.js.map +1 -1
- package/dist-cjs/utils/useControlled.js +1 -1
- package/dist-cjs/utils/useControlled.js.map +1 -1
- package/dist-cjs/utils/useFloatingUI/useFloatingUI.js +2 -2
- package/dist-cjs/utils/useFloatingUI/useFloatingUI.js.map +1 -1
- package/dist-cjs/utils/useIsFocusVisible.js +1 -1
- package/dist-cjs/utils/useIsFocusVisible.js.map +1 -1
- package/dist-cjs/utils/usePreventScroll.js.map +1 -1
- package/dist-cjs/utils/usePrevious.js.map +1 -1
- package/dist-cjs/vertical-navigation/SubMenuContext.js +39 -0
- package/dist-cjs/vertical-navigation/SubMenuContext.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigation.css.js +6 -0
- package/dist-cjs/vertical-navigation/VerticalNavigation.css.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigation.js +38 -0
- package/dist-cjs/vertical-navigation/VerticalNavigation.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItem.js +53 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItem.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js +6 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.js +88 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemExpansionIcon.js +35 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemExpansionIcon.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.css.js +6 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.css.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.js +28 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.css.js +6 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.css.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.js +74 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js +6 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js.map +1 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.js +39 -0
- package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.js.map +1 -0
- package/dist-es/aria-announcer/AriaAnnounce.js.map +1 -1
- package/dist-es/avatar/Avatar.js +5 -2
- package/dist-es/avatar/Avatar.js.map +1 -1
- package/dist-es/banner/Banner.css.js +1 -1
- package/dist-es/breakpoints/BreakpointProvider.js +11 -8
- package/dist-es/breakpoints/BreakpointProvider.js.map +1 -1
- package/dist-es/button/useButton.js +3 -3
- package/dist-es/button/useButton.js.map +1 -1
- package/dist-es/checkbox/Checkbox.css.js +1 -1
- package/dist-es/checkbox/CheckboxIcon.css.js +1 -1
- package/dist-es/collapsible/Collapsible.js +50 -0
- package/dist-es/collapsible/Collapsible.js.map +1 -0
- package/dist-es/collapsible/CollapsibleContext.js +26 -0
- package/dist-es/collapsible/CollapsibleContext.js.map +1 -0
- package/dist-es/collapsible/CollapsiblePanel.css.js +4 -0
- package/dist-es/collapsible/CollapsiblePanel.css.js.map +1 -0
- package/dist-es/collapsible/CollapsiblePanel.js +44 -0
- package/dist-es/collapsible/CollapsiblePanel.js.map +1 -0
- package/dist-es/collapsible/CollapsibleTrigger.js +38 -0
- package/dist-es/collapsible/CollapsibleTrigger.js.map +1 -0
- package/dist-es/dialog/Dialog.js +1 -1
- package/dist-es/dialog/Dialog.js.map +1 -1
- package/dist-es/dialog/DialogContent.css.js +1 -1
- package/dist-es/dialog/DialogHeader.css.js +1 -1
- package/dist-es/divider/Divider.js.map +1 -1
- package/dist-es/index.js +10 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/input/Input.css.js +1 -1
- package/dist-es/interactable-card/InteractableCard.js +29 -26
- package/dist-es/interactable-card/InteractableCard.js.map +1 -1
- package/dist-es/interactable-card/InteractableCardGroup.js +3 -3
- package/dist-es/interactable-card/InteractableCardGroup.js.map +1 -1
- package/dist-es/multiline-input/MultilineInput.css.js +1 -1
- package/dist-es/multiline-input/MultilineInput.js.map +1 -1
- package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-es/pagination/PageButton.css.js +1 -1
- package/dist-es/pill/Pill.js +1 -1
- package/dist-es/pill/Pill.js.map +1 -1
- package/dist-es/pill-input/PillInput.css.js +1 -1
- package/dist-es/pill-input/useTruncatePills.js +2 -1
- package/dist-es/pill-input/useTruncatePills.js.map +1 -1
- package/dist-es/radio-button/RadioButton.css.js +1 -1
- package/dist-es/radio-button/RadioButtonIcon.css.js +1 -1
- package/dist-es/salt-provider/SaltProvider.js +2 -2
- package/dist-es/salt-provider/SaltProvider.js.map +1 -1
- package/dist-es/spinner/Spinner.js +3 -4
- package/dist-es/spinner/Spinner.js.map +1 -1
- package/dist-es/stepper/Step.js +1 -1
- package/dist-es/stepper/Step.js.map +1 -1
- package/dist-es/stepper/internal/StepText.css.js +1 -1
- package/dist-es/stepper/internal/StepText.js +0 -1
- package/dist-es/stepper/internal/StepText.js.map +1 -1
- package/dist-es/switch/Switch.js.map +1 -1
- package/dist-es/text/Text.css.js +1 -1
- package/dist-es/toggle-button-group/ToggleButtonGroup.js +3 -3
- package/dist-es/toggle-button-group/ToggleButtonGroup.js.map +1 -1
- package/dist-es/tooltip/Tooltip.js +1 -1
- package/dist-es/tooltip/Tooltip.js.map +1 -1
- package/dist-es/tooltip/useTooltip.js +1 -1
- package/dist-es/tooltip/useTooltip.js.map +1 -1
- package/dist-es/utils/mergeProps.js +2 -2
- package/dist-es/utils/mergeProps.js.map +1 -1
- package/dist-es/utils/useControlled.js +1 -1
- package/dist-es/utils/useControlled.js.map +1 -1
- package/dist-es/utils/useFloatingUI/useFloatingUI.js +2 -2
- package/dist-es/utils/useFloatingUI/useFloatingUI.js.map +1 -1
- package/dist-es/utils/useIsFocusVisible.js +1 -1
- package/dist-es/utils/useIsFocusVisible.js.map +1 -1
- package/dist-es/utils/usePreventScroll.js.map +1 -1
- package/dist-es/utils/usePrevious.js.map +1 -1
- package/dist-es/vertical-navigation/SubMenuContext.js +35 -0
- package/dist-es/vertical-navigation/SubMenuContext.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigation.css.js +4 -0
- package/dist-es/vertical-navigation/VerticalNavigation.css.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigation.js +36 -0
- package/dist-es/vertical-navigation/VerticalNavigation.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItem.js +50 -0
- package/dist-es/vertical-navigation/VerticalNavigationItem.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js +4 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemContent.js +86 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemContent.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemExpansionIcon.js +33 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemExpansionIcon.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemLabel.css.js +4 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemLabel.css.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemLabel.js +26 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemLabel.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.css.js +4 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.css.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.js +72 -0
- package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js +4 -0
- package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js.map +1 -0
- package/dist-es/vertical-navigation/VerticalNavigationSubMenu.js +37 -0
- package/dist-es/vertical-navigation/VerticalNavigationSubMenu.js.map +1 -0
- package/dist-types/collapsible/Collapsible.d.ts +16 -0
- package/dist-types/collapsible/CollapsibleContext.d.ts +9 -0
- package/dist-types/collapsible/CollapsiblePanel.d.ts +4 -0
- package/dist-types/collapsible/CollapsibleTrigger.d.ts +5 -0
- package/dist-types/collapsible/index.d.ts +3 -0
- package/dist-types/index.d.ts +2 -0
- package/dist-types/vertical-navigation/SubMenuContext.d.ts +14 -0
- package/dist-types/vertical-navigation/VerticalNavigation.d.ts +8 -0
- package/dist-types/vertical-navigation/VerticalNavigationItem.d.ts +12 -0
- package/dist-types/vertical-navigation/VerticalNavigationItemContent.d.ts +4 -0
- package/dist-types/vertical-navigation/VerticalNavigationItemExpansionIcon.d.ts +2 -0
- package/dist-types/vertical-navigation/VerticalNavigationItemLabel.d.ts +4 -0
- package/dist-types/vertical-navigation/VerticalNavigationItemTrigger.d.ts +6 -0
- package/dist-types/vertical-navigation/VerticalNavigationSubMenu.d.ts +4 -0
- package/dist-types/vertical-navigation/index.d.ts +7 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# @salt-ds/core
|
|
2
2
|
|
|
3
|
+
## 1.48.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- f1dc9fc: Added `VerticalNavigation` and related components.
|
|
8
|
+
|
|
9
|
+
`VerticalNavigation` has been introduced to replace the existing `NavigationItem` component for vertical navigation. The new component provides a more structured and flexible way to create vertical navigation. For now you can continue to use the `NavigationItem` component, but we recommend migrating to the new `VerticalNavigation` component as the `NavigationItem` component will be deprecated in a future release and removed in the future major release.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
<VerticalNavigation aria-label="Basic sidebar" appearance="indicator">
|
|
13
|
+
<VerticalNavigationItem active>
|
|
14
|
+
<VerticalNavigationItemContent>
|
|
15
|
+
<VerticalNavigationItemTrigger>
|
|
16
|
+
<VerticalNavigationItemLabel>Item 1</VerticalNavigationItemLabel>
|
|
17
|
+
</VerticalNavigationItemTrigger>
|
|
18
|
+
</VerticalNavigationItemContent>
|
|
19
|
+
</VerticalNavigationItem>
|
|
20
|
+
</VerticalNavigation>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- f1dc9fc: Added `Collapsible` and related components.
|
|
24
|
+
|
|
25
|
+
`Collapsible` enables content to be either collapsed (hidden) or expanded (visible). It has two elements: a trigger and a panel whose visibility is controlled by the button.
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
<Collapsible>
|
|
29
|
+
<CollapsibleTrigger>
|
|
30
|
+
<Button>Click</Button>
|
|
31
|
+
</CollapsibleTrigger>
|
|
32
|
+
<CollapsiblePanel>
|
|
33
|
+
<p>Content</p>
|
|
34
|
+
</CollapsiblePanel>
|
|
35
|
+
</Collapsible>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- 9560539: Fixed foreground color not being applied explicitly to Banner.
|
|
41
|
+
|
|
42
|
+
## 1.47.5
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- 846d975: Fixed Pagination active border color.
|
|
47
|
+
- 8538730: Removed text selection background color override.
|
|
48
|
+
- 8261887: Fixed Tooltip showing when content is null.
|
|
49
|
+
- e6445dc: Fixed Stepper using incorrect font styles in steps.
|
|
50
|
+
- ff646e2: Fixed Dialog having an unnecessary scrollbar.
|
|
51
|
+
- 9a25824: Updated `DialogHeader`'s responsive behaviour to meet WCAG 2.1 Reflow success criterion.
|
|
52
|
+
- 64ef723: Updated read-only style for RadioButton and Checkbox to meet color contrast requirements.
|
|
53
|
+
|
|
3
54
|
## 1.47.4
|
|
4
55
|
|
|
5
56
|
### Patch Changes
|
package/css/salt-core.css
CHANGED
|
@@ -299,6 +299,7 @@
|
|
|
299
299
|
font-size: var(--salt-text-fontSize);
|
|
300
300
|
font-weight: var(--salt-text-fontWeight);
|
|
301
301
|
line-height: var(--salt-text-lineHeight);
|
|
302
|
+
color: var(--salt-content-primary-foreground);
|
|
302
303
|
}
|
|
303
304
|
.saltBanner-icon.saltIcon {
|
|
304
305
|
min-height: var(--salt-size-base);
|
|
@@ -860,7 +861,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
860
861
|
box-sizing: border-box;
|
|
861
862
|
}
|
|
862
863
|
.saltCheckbox-input:focus-visible + .saltCheckboxIcon {
|
|
863
|
-
outline-offset: var(--salt-
|
|
864
|
+
outline-offset: var(--salt-spacing-fixed-100);
|
|
864
865
|
outline: var(--saltCheckbox-outline, var(--salt-focused-outline));
|
|
865
866
|
border-color: var(--salt-selectable-borderColor-hover);
|
|
866
867
|
color: var(--salt-selectable-foreground-hover);
|
|
@@ -983,8 +984,10 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
983
984
|
outline-color: var(--salt-status-warning-foreground-decorative);
|
|
984
985
|
}
|
|
985
986
|
.saltCheckboxIcon-readOnly,
|
|
986
|
-
.saltCheckbox:hover .saltCheckboxIcon-readOnly
|
|
987
|
+
.saltCheckbox:hover .saltCheckboxIcon-readOnly,
|
|
988
|
+
.saltCheckbox-input:focus-visible + .saltCheckboxIcon-readOnly {
|
|
987
989
|
border-color: var(--salt-selectable-borderColor-readonly);
|
|
990
|
+
border-style: var(--salt-borderStyle-dashed);
|
|
988
991
|
color: var(--salt-content-primary-foreground);
|
|
989
992
|
}
|
|
990
993
|
.saltCheckboxIcon > svg {
|
|
@@ -992,6 +995,28 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
992
995
|
transform: scale(1.01);
|
|
993
996
|
}
|
|
994
997
|
|
|
998
|
+
/* src/collapsible/CollapsiblePanel.css */
|
|
999
|
+
.saltCollapsiblePanel {
|
|
1000
|
+
display: grid;
|
|
1001
|
+
transition:
|
|
1002
|
+
grid-template-rows var(--salt-duration-perceptible) ease-in-out,
|
|
1003
|
+
opacity var(--salt-duration-perceptible) ease-in-out,
|
|
1004
|
+
visibility var(--salt-duration-perceptible) ease-in-out;
|
|
1005
|
+
}
|
|
1006
|
+
.saltCollapsiblePanel[aria-hidden=true] {
|
|
1007
|
+
grid-template-rows: 0fr;
|
|
1008
|
+
opacity: 0;
|
|
1009
|
+
visibility: hidden;
|
|
1010
|
+
}
|
|
1011
|
+
.saltCollapsiblePanel {
|
|
1012
|
+
grid-template-rows: 1fr;
|
|
1013
|
+
opacity: 1;
|
|
1014
|
+
visibility: visible;
|
|
1015
|
+
}
|
|
1016
|
+
.saltCollapsiblePanel-inner {
|
|
1017
|
+
overflow: hidden;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
995
1020
|
/* src/combo-box/ComboBox.css */
|
|
996
1021
|
.saltComboBox-focused {
|
|
997
1022
|
outline: var(--saltPillInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--pillInput-outlineColor));
|
|
@@ -1124,6 +1149,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
1124
1149
|
flex: 1 1 auto;
|
|
1125
1150
|
position: relative;
|
|
1126
1151
|
display: flex;
|
|
1152
|
+
box-sizing: border-box;
|
|
1127
1153
|
}
|
|
1128
1154
|
.saltDialogContent-inner {
|
|
1129
1155
|
overflow-y: auto;
|
|
@@ -1131,6 +1157,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
1131
1157
|
border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;
|
|
1132
1158
|
max-height: inherit;
|
|
1133
1159
|
flex: 1;
|
|
1160
|
+
box-sizing: border-box;
|
|
1134
1161
|
}
|
|
1135
1162
|
.saltDialogContent-overflow {
|
|
1136
1163
|
padding-right: var(--salt-spacing-100);
|
|
@@ -1141,6 +1168,11 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
1141
1168
|
.saltDialogContent-scrollBottom.saltDialogContent-inner {
|
|
1142
1169
|
border-bottom-color: var(--salt-separable-tertiary-borderColor);
|
|
1143
1170
|
}
|
|
1171
|
+
@supports selector(:has(*)) {
|
|
1172
|
+
.saltDialogContent:has(.saltDialogContent-overflow) {
|
|
1173
|
+
min-height: calc(var(--salt-text-lineHeight) * 4);
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1144
1176
|
|
|
1145
1177
|
/* src/dialog/DialogHeader.css */
|
|
1146
1178
|
.saltDialogHeader {
|
|
@@ -1163,6 +1195,8 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
1163
1195
|
gap: var(--salt-spacing-50);
|
|
1164
1196
|
padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);
|
|
1165
1197
|
align-items: flex-start;
|
|
1198
|
+
min-width: 0;
|
|
1199
|
+
word-break: break-word;
|
|
1166
1200
|
}
|
|
1167
1201
|
.saltDialogHeader-header > .saltText {
|
|
1168
1202
|
margin: 0;
|
|
@@ -1922,9 +1956,6 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
1922
1956
|
.saltInput-input:focus {
|
|
1923
1957
|
outline: none;
|
|
1924
1958
|
}
|
|
1925
|
-
.saltInput-input::selection {
|
|
1926
|
-
background: var(--salt-content-foreground-highlight);
|
|
1927
|
-
}
|
|
1928
1959
|
.saltInput-input::placeholder {
|
|
1929
1960
|
color: var(--salt-content-secondary-foreground);
|
|
1930
1961
|
font-weight: var(--salt-text-fontWeight-small);
|
|
@@ -2565,9 +2596,6 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
2565
2596
|
.saltMultilineInput-textarea:focus {
|
|
2566
2597
|
outline: none;
|
|
2567
2598
|
}
|
|
2568
|
-
.saltMultilineInput-textarea::selection {
|
|
2569
|
-
background: var(--salt-content-foreground-highlight);
|
|
2570
|
-
}
|
|
2571
2599
|
.saltMultilineInput-disabled .saltMultilineInput-textarea::selection {
|
|
2572
2600
|
background: none;
|
|
2573
2601
|
}
|
|
@@ -2903,7 +2931,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
2903
2931
|
line-height: var(--salt-text-lineHeight);
|
|
2904
2932
|
letter-spacing: var(--salt-text-letterSpacing);
|
|
2905
2933
|
cursor: var(--salt-cursor-hover);
|
|
2906
|
-
border-radius: var(--salt-palette-corner-weak
|
|
2934
|
+
border-radius: var(--salt-palette-corner-weak);
|
|
2907
2935
|
}
|
|
2908
2936
|
.saltPageButton:hover,
|
|
2909
2937
|
.saltPageButton:focus-visible {
|
|
@@ -2921,7 +2949,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
2921
2949
|
cursor: var(--salt-cursor-readonly);
|
|
2922
2950
|
}
|
|
2923
2951
|
.saltPageButton[aria-current=page] {
|
|
2924
|
-
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor);
|
|
2952
|
+
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);
|
|
2925
2953
|
background: var(--salt-selectable-background-selected);
|
|
2926
2954
|
}
|
|
2927
2955
|
.saltPageButton-fixed {
|
|
@@ -3318,9 +3346,6 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
3318
3346
|
.saltPillInput-input:focus {
|
|
3319
3347
|
outline: none;
|
|
3320
3348
|
}
|
|
3321
|
-
.saltPillInput-input::selection {
|
|
3322
|
-
background: var(--salt-content-foreground-highlight);
|
|
3323
|
-
}
|
|
3324
3349
|
.saltPillInput-disabled .saltPillInput-input::selection {
|
|
3325
3350
|
background: none;
|
|
3326
3351
|
}
|
|
@@ -3365,7 +3390,7 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
3365
3390
|
}
|
|
3366
3391
|
.saltRadioButton-input:focus-visible + .saltRadioButtonIcon {
|
|
3367
3392
|
outline: var(--saltRadioButton-outline, var(--salt-focused-outline));
|
|
3368
|
-
outline-offset: var(--salt-
|
|
3393
|
+
outline-offset: var(--salt-spacing-fixed-100);
|
|
3369
3394
|
border-color: var(--salt-selectable-borderColor-hover);
|
|
3370
3395
|
color: var(--salt-selectable-foreground-hover);
|
|
3371
3396
|
clip-path: unset;
|
|
@@ -3463,8 +3488,10 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
3463
3488
|
outline-color: var(--salt-status-warning-foreground-decorative);
|
|
3464
3489
|
}
|
|
3465
3490
|
.saltRadioButtonIcon-readOnly,
|
|
3466
|
-
.saltRadioButton:hover .saltRadioButtonIcon-readOnly
|
|
3491
|
+
.saltRadioButton:hover .saltRadioButtonIcon-readOnly,
|
|
3492
|
+
.saltRadioButton-input:focus-visible + .saltRadioButtonIcon-readOnly {
|
|
3467
3493
|
border-color: var(--salt-selectable-borderColor-readonly);
|
|
3494
|
+
border-style: var(--salt-borderStyle-dashed);
|
|
3468
3495
|
color: var(--salt-content-primary-foreground);
|
|
3469
3496
|
}
|
|
3470
3497
|
.saltRadioButtonIcon > svg {
|
|
@@ -4073,9 +4100,6 @@ a:focus .saltCard-interactable.saltCard-disabled {
|
|
|
4073
4100
|
font-weight: var(--saltText-fontWeight, var(--salt-text-fontWeight));
|
|
4074
4101
|
letter-spacing: var(--salt-text-letterSpacing);
|
|
4075
4102
|
}
|
|
4076
|
-
.saltText::selection {
|
|
4077
|
-
background: var(--saltText-highlight, var(--salt-content-foreground-highlight));
|
|
4078
|
-
}
|
|
4079
4103
|
.saltText-lineClamp {
|
|
4080
4104
|
display: -webkit-box;
|
|
4081
4105
|
-webkit-box-orient: vertical;
|
|
@@ -4733,6 +4757,153 @@ label.saltText small,
|
|
|
4733
4757
|
--tooltip-status-borderColor: var(--salt-status-success-borderColor);
|
|
4734
4758
|
}
|
|
4735
4759
|
|
|
4760
|
+
/* src/vertical-navigation/VerticalNavigation.css */
|
|
4761
|
+
.saltVerticalNavigation ol {
|
|
4762
|
+
display: flex;
|
|
4763
|
+
flex-direction: column;
|
|
4764
|
+
gap: var(--salt-spacing-fixed-100);
|
|
4765
|
+
list-style: none;
|
|
4766
|
+
padding: 0;
|
|
4767
|
+
margin: 0;
|
|
4768
|
+
position: relative;
|
|
4769
|
+
}
|
|
4770
|
+
.saltVerticalNavigationSubMenu > .saltDivider-horizontal,
|
|
4771
|
+
.saltVerticalNavigationItem > .saltDivider-horizontal,
|
|
4772
|
+
.saltVerticalNavigation ol > .saltDivider-horizontal {
|
|
4773
|
+
margin-bottom: calc(var(--salt-size-fixed-100) * -1);
|
|
4774
|
+
}
|
|
4775
|
+
.saltVerticalNavigation [data-has-direct-icons=false] .saltCollapsiblePanel-inner {
|
|
4776
|
+
margin-bottom: calc(var(--salt-size-fixed-100) * -1);
|
|
4777
|
+
}
|
|
4778
|
+
.saltVerticalNavigation [data-has-direct-icons=false] .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu {
|
|
4779
|
+
border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);
|
|
4780
|
+
}
|
|
4781
|
+
.saltVerticalNavigation .saltCollapsiblePanel-inner .saltCollapsiblePanel-inner,
|
|
4782
|
+
.saltVerticalNavigation .saltCollapsiblePanel[aria-hidden=true] .saltCollapsiblePanel-inner {
|
|
4783
|
+
margin-bottom: 0;
|
|
4784
|
+
}
|
|
4785
|
+
.saltVerticalNavigation .saltCollapsiblePanel-inner .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu,
|
|
4786
|
+
.saltVerticalNavigation .saltCollapsiblePanel[aria-hidden=true] .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu {
|
|
4787
|
+
border-bottom: none;
|
|
4788
|
+
}
|
|
4789
|
+
|
|
4790
|
+
/* src/vertical-navigation/VerticalNavigationItemContent.css */
|
|
4791
|
+
.saltVerticalNavigationItemContent {
|
|
4792
|
+
--verticalNavigationItem-iconPadding: calc(var(--saltVerticalNavigationItem-iconPaddingMultiplier, 0) * (var(--salt-size-icon) + var(--salt-spacing-100)));
|
|
4793
|
+
--verticalNavigationItem-depthPadding: calc(var(--salt-spacing-100) * max(0, calc(var(--verticalNavigationItem-depth, 0) - 1)));
|
|
4794
|
+
}
|
|
4795
|
+
.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent {
|
|
4796
|
+
--verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-150) + var(--salt-size-indicator) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));
|
|
4797
|
+
--verticalNavigationItem-paddingBlock: var(--salt-spacing-50);
|
|
4798
|
+
}
|
|
4799
|
+
.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {
|
|
4800
|
+
--verticalNavigationItem-paddingLeft: calc(var(--salt-spacing-100) + var(--verticalNavigationItem-depthPadding) + var(--verticalNavigationItem-iconPadding));
|
|
4801
|
+
--verticalNavigationItem-paddingBlock: calc(var(--salt-spacing-50) - var(--salt-size-fixed-100));
|
|
4802
|
+
}
|
|
4803
|
+
.saltVerticalNavigationItemContent {
|
|
4804
|
+
display: flex;
|
|
4805
|
+
flex-direction: row;
|
|
4806
|
+
gap: var(--salt-spacing-100);
|
|
4807
|
+
appearance: none;
|
|
4808
|
+
-webkit-appearance: none;
|
|
4809
|
+
min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));
|
|
4810
|
+
min-width: 4em;
|
|
4811
|
+
padding: var(--verticalNavigationItem-paddingBlock) var(--salt-spacing-100) var(--verticalNavigationItem-paddingBlock) var(--verticalNavigationItem-paddingLeft);
|
|
4812
|
+
position: relative;
|
|
4813
|
+
flex-shrink: 0;
|
|
4814
|
+
box-sizing: border-box;
|
|
4815
|
+
border-radius: var(--salt-palette-corner-weak, 0);
|
|
4816
|
+
overflow: hidden;
|
|
4817
|
+
cursor: var(--salt-cursor-hover);
|
|
4818
|
+
color: var(--salt-content-primary-foreground);
|
|
4819
|
+
font-weight: var(--salt-text-h4-fontWeight);
|
|
4820
|
+
font-family: var(--salt-text-h4-fontFamily);
|
|
4821
|
+
text-align: var(--salt-text-textAlign);
|
|
4822
|
+
letter-spacing: var(--salt-text-letterSpacing);
|
|
4823
|
+
line-height: var(--salt-text-h4-lineHeight);
|
|
4824
|
+
font-size: var(--salt-text-h4-fontSize);
|
|
4825
|
+
}
|
|
4826
|
+
.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active,
|
|
4827
|
+
.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active:hover {
|
|
4828
|
+
background: var(--salt-navigable-accent-background-active);
|
|
4829
|
+
}
|
|
4830
|
+
.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent::before {
|
|
4831
|
+
left: var(--salt-spacing-50);
|
|
4832
|
+
content: "";
|
|
4833
|
+
position: absolute;
|
|
4834
|
+
height: var(--salt-size-base);
|
|
4835
|
+
border-radius: var(--salt-palette-corner-strongest);
|
|
4836
|
+
width: var(--salt-size-indicator);
|
|
4837
|
+
}
|
|
4838
|
+
.saltVerticalNavigation-indicator .saltVerticalNavigationItemContent-active::before {
|
|
4839
|
+
background: var(--salt-navigable-accent-indicator-active);
|
|
4840
|
+
}
|
|
4841
|
+
.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent {
|
|
4842
|
+
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;
|
|
4843
|
+
}
|
|
4844
|
+
.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active,
|
|
4845
|
+
.saltVerticalNavigation-bordered .saltVerticalNavigationItemContent-active:hover {
|
|
4846
|
+
background: var(--salt-navigable-accent-background-active);
|
|
4847
|
+
border-color: var(--salt-navigable-accent-borderColor-active);
|
|
4848
|
+
}
|
|
4849
|
+
.saltVerticalNavigationItemContent .saltIcon,
|
|
4850
|
+
.saltVerticalNavigationItemContent .saltBadge {
|
|
4851
|
+
min-height: var(--salt-text-lineHeight);
|
|
4852
|
+
}
|
|
4853
|
+
.saltVerticalNavigationItemContent-focused {
|
|
4854
|
+
outline: var(--salt-focused-outline);
|
|
4855
|
+
outline-offset: calc(var(--salt-size-fixed-100) * -2);
|
|
4856
|
+
z-index: 1;
|
|
4857
|
+
}
|
|
4858
|
+
.saltVerticalNavigationItemContent:hover {
|
|
4859
|
+
background: var(--salt-overlayable-background-hover);
|
|
4860
|
+
}
|
|
4861
|
+
.saltVerticalNavigation .saltVerticalNavigationItemContent-active,
|
|
4862
|
+
.saltVerticalNavigation .saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent-active {
|
|
4863
|
+
font-weight: var(--salt-text-h4-fontWeight);
|
|
4864
|
+
}
|
|
4865
|
+
@supports selector(:has(*)) {
|
|
4866
|
+
.saltVerticalNavigationItemContent-active:hover:has(.saltVerticalNavigationItemTrigger[aria-controls]) {
|
|
4867
|
+
background: linear-gradient(var(--salt-overlayable-background-hover), var(--salt-overlayable-background-hover)) var(--salt-navigable-accent-background-active);
|
|
4868
|
+
}
|
|
4869
|
+
}
|
|
4870
|
+
|
|
4871
|
+
/* src/vertical-navigation/VerticalNavigationItemLabel.css */
|
|
4872
|
+
.saltVerticalNavigationItemLabel {
|
|
4873
|
+
flex: 1;
|
|
4874
|
+
}
|
|
4875
|
+
|
|
4876
|
+
/* src/vertical-navigation/VerticalNavigationItemTrigger.css */
|
|
4877
|
+
.saltVerticalNavigationItemTrigger {
|
|
4878
|
+
all: unset;
|
|
4879
|
+
padding: var(--salt-spacing-75) 0;
|
|
4880
|
+
display: flex;
|
|
4881
|
+
gap: var(--salt-spacing-100);
|
|
4882
|
+
width: 100%;
|
|
4883
|
+
}
|
|
4884
|
+
.saltVerticalNavigationItemTrigger::before {
|
|
4885
|
+
content: "";
|
|
4886
|
+
display: block;
|
|
4887
|
+
width: 100%;
|
|
4888
|
+
position: absolute;
|
|
4889
|
+
height: 100%;
|
|
4890
|
+
left: 0;
|
|
4891
|
+
top: 0;
|
|
4892
|
+
}
|
|
4893
|
+
|
|
4894
|
+
/* src/vertical-navigation/VerticalNavigationSubMenu.css */
|
|
4895
|
+
.saltVerticalNavigationSubMenu {
|
|
4896
|
+
display: flex;
|
|
4897
|
+
flex-direction: column;
|
|
4898
|
+
gap: var(--salt-spacing-fixed-100);
|
|
4899
|
+
list-style: none;
|
|
4900
|
+
padding: var(--salt-spacing-fixed-100) 0 0;
|
|
4901
|
+
margin: 0;
|
|
4902
|
+
}
|
|
4903
|
+
.saltVerticalNavigationSubMenu .saltVerticalNavigationItemContent {
|
|
4904
|
+
font-weight: var(--salt-text-h4-fontWeight-small);
|
|
4905
|
+
}
|
|
4906
|
+
|
|
4736
4907
|
/* src/progress/CircularProgress/CircularProgress.css */
|
|
4737
4908
|
.saltCircularProgress {
|
|
4738
4909
|
color: var(--salt-content-primary-foreground);
|
|
@@ -5247,6 +5418,11 @@ label.saltText small,
|
|
|
5247
5418
|
/* src/stepper/internal/StepText.css */
|
|
5248
5419
|
.saltStepText-label {
|
|
5249
5420
|
grid-area: label;
|
|
5421
|
+
font-size: var(--salt-text-fontSize);
|
|
5422
|
+
line-height: var(--salt-text-lineHeight);
|
|
5423
|
+
font-family: var(--salt-text-fontFamily);
|
|
5424
|
+
color: var(--salt-content-primary-foreground);
|
|
5425
|
+
font-weight: var(--salt-text-fontWeight);
|
|
5250
5426
|
}
|
|
5251
5427
|
.saltStepper-horizontal .saltStepText-label {
|
|
5252
5428
|
margin-top: var(--salt-spacing-50);
|
|
@@ -5254,10 +5430,7 @@ label.saltText small,
|
|
|
5254
5430
|
.saltStepper-vertical .saltStepText-label {
|
|
5255
5431
|
padding-top: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
|
|
5256
5432
|
padding-bottom: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
|
|
5257
|
-
padding-left: calc(
|
|
5258
|
-
}
|
|
5259
|
-
.saltStep-depth-0 > .saltText.saltStepText-label {
|
|
5260
|
-
font-weight: var(--salt-text-fontWeight-strong);
|
|
5433
|
+
padding-left: calc(var(--step-depth) * var(--salt-spacing-100));
|
|
5261
5434
|
}
|
|
5262
5435
|
.saltStep-depth-0 > .saltText.saltStepText-label {
|
|
5263
5436
|
font-weight: var(--salt-text-fontWeight-strong);
|
|
@@ -5265,10 +5438,15 @@ label.saltText small,
|
|
|
5265
5438
|
.saltStepText-description {
|
|
5266
5439
|
grid-area: description;
|
|
5267
5440
|
color: var(--salt-content-secondary-foreground);
|
|
5441
|
+
font-size: var(--salt-text-label-fontSize);
|
|
5442
|
+
font-weight: var(--salt-text-label-fontWeight-strong);
|
|
5443
|
+
font-family: var(--salt-text-label-fontFamily);
|
|
5444
|
+
line-height: var(--salt-text-label-lineHeight);
|
|
5445
|
+
letter-spacing: var(--salt-text-letterSpacing);
|
|
5268
5446
|
}
|
|
5269
5447
|
.saltStepper-vertical .saltStepText-description {
|
|
5270
5448
|
padding-bottom: var(--salt-spacing-300);
|
|
5271
|
-
padding-left: calc(
|
|
5449
|
+
padding-left: calc(var(--step-depth) * var(--salt-spacing-100));
|
|
5272
5450
|
}
|
|
5273
5451
|
.saltStep-status-warning > .saltStepText-description {
|
|
5274
5452
|
color: var(--salt-status-warning-foreground-informative);
|
|
@@ -5277,4 +5455,4 @@ label.saltText small,
|
|
|
5277
5455
|
color: var(--salt-status-error-foreground-informative);
|
|
5278
5456
|
}
|
|
5279
5457
|
|
|
5280
|
-
/* src/
|
|
5458
|
+
/* src/a3c9275d-f674-46ac-ba4b-1442197b5a6e.css */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AriaAnnounce.js","sources":["../src/aria-announcer/AriaAnnounce.tsx"],"sourcesContent":["import { type ComponentType, useEffect } from \"react\";\n\nimport { useAriaAnnouncer } from \"./useAriaAnnouncer\";\n\nexport interface AriaAnnounceProps {\n /**\n * String which will be announced by screen readers on change\n */\n announcement?: string;\n}\n\nexport const AriaAnnounce: ComponentType<AriaAnnounceProps> = ({\n announcement,\n}) => {\n const { announce } = useAriaAnnouncer();\n\n useEffect(() => {\n if (announcement) {\n announce(announcement);\n }\n }, [announce, announcement]);\n\n // If we return null here, react-docgen wouldn't be able to locate the component
|
|
1
|
+
{"version":3,"file":"AriaAnnounce.js","sources":["../src/aria-announcer/AriaAnnounce.tsx"],"sourcesContent":["import { type ComponentType, useEffect } from \"react\";\n\nimport { useAriaAnnouncer } from \"./useAriaAnnouncer\";\n\nexport interface AriaAnnounceProps {\n /**\n * String which will be announced by screen readers on change\n */\n announcement?: string;\n}\n\nexport const AriaAnnounce: ComponentType<AriaAnnounceProps> = ({\n announcement,\n}) => {\n const { announce } = useAriaAnnouncer();\n\n useEffect(() => {\n if (announcement) {\n announce(announcement);\n }\n }, [announce, announcement]);\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":";;;;;;AAWO,MAAM,eAAiD,CAAC;AAAA,EAC7D;AACF,CAAM,KAAA;AACJ,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIA,iCAAiB,EAAA;AAEtC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,QAAA,CAAS,YAAY,CAAA;AAAA;AACvB,GACC,EAAA,CAAC,QAAU,EAAA,YAAY,CAAC,CAAA;AAG3B,EAAA,uBAASC,cAAA,CAAAC,mBAAA,EAAA,EAAA,CAAA;AACX;;;;"}
|
|
@@ -50,6 +50,10 @@ const Avatar = React.forwardRef(function Avatar2({
|
|
|
50
50
|
children = childrenProp;
|
|
51
51
|
}
|
|
52
52
|
const avatarInitials = nameToInitials(name);
|
|
53
|
+
const ariaProps = name ? {
|
|
54
|
+
role: "img",
|
|
55
|
+
"aria-label": name
|
|
56
|
+
} : {};
|
|
53
57
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
58
|
"div",
|
|
55
59
|
{
|
|
@@ -63,8 +67,7 @@ const Avatar = React.forwardRef(function Avatar2({
|
|
|
63
67
|
},
|
|
64
68
|
className
|
|
65
69
|
),
|
|
66
|
-
|
|
67
|
-
"aria-label": name,
|
|
70
|
+
...ariaProps,
|
|
68
71
|
...rest,
|
|
69
72
|
children: children || avatarInitials || fallbackIcon
|
|
70
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../src/avatar/Avatar.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer } from \"../utils\";\nimport avatarCss from \"./Avatar.css\";\nimport { useAvatarImage } from \"./useAvatarImage\";\n\nexport type NameToInitials = (name?: string) => string;\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The name that Avatar represents.\n */\n name?: string;\n /**\n * Defines the function that gets initials. Default is capital first letter of each separate word in name.\n * If a function is not passed or returns undefined, Avatar will default to Icon.\n */\n nameToInitials?: NameToInitials;\n /**\n * Image src of Avatar.\n */\n src?: string;\n /**\n * Multiplier for the base avatar.\n */\n size?: number;\n /**\n * Icon to be used as a default item. Defaults to `UserIcon`.\n */\n fallbackIcon?: ReactNode;\n /**\n * Changes Avatar's color.\n */\n color?:\n | \"accent\"\n | \"category-1\"\n | \"category-2\"\n | \"category-3\"\n | \"category-4\"\n | \"category-5\"\n | \"category-6\"\n | \"category-7\"\n | \"category-8\"\n | \"category-9\"\n | \"category-10\"\n | \"category-11\"\n | \"category-12\"\n | \"category-13\"\n | \"category-14\"\n | \"category-15\"\n | \"category-16\"\n | \"category-17\"\n | \"category-18\"\n | \"category-19\"\n | \"category-20\";\n}\n\nconst withBaseName = makePrefixer(\"saltAvatar\");\nconst DEFAULT_AVATAR_SIZE = 2; // medium\n\nconst defaultNameToInitials = (name?: string) =>\n name\n ?.split(\" \")\n .slice(0, 2)\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase();\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n className,\n children: childrenProp,\n color = \"accent\",\n name,\n nameToInitials = defaultNameToInitials,\n src,\n size = DEFAULT_AVATAR_SIZE,\n style: styleProp,\n fallbackIcon: fallbackIconProp,\n ...rest\n },\n ref,\n) {\n const targetWindow = useWindow();\n const { UserIcon } = useIcon();\n\n const fallbackIcon =\n fallbackIconProp === undefined ? (\n <UserIcon aria-hidden />\n ) : (\n fallbackIconProp\n );\n\n useComponentCssInjection({\n testId: \"salt-avatar\",\n css: avatarCss,\n window: targetWindow,\n });\n\n let children: ReactNode;\n\n const style = {\n ...styleProp,\n \"--saltAvatar-size-multiplier\": `${size}`,\n };\n\n const status = useAvatarImage({ src });\n const hasImgNotFailing = status === \"loaded\";\n if (hasImgNotFailing) {\n children = <img alt=\"\" src={src} />;\n } else if (childrenProp != null) {\n children = childrenProp;\n }\n\n const avatarInitials = nameToInitials(name);\n\n return (\n <div\n ref={ref}\n style={style}\n className={clsx(\n withBaseName(),\n withBaseName(color),\n {\n [withBaseName(\"withImage\")]: hasImgNotFailing,\n },\n className,\n )}\n
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../src/avatar/Avatar.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer } from \"../utils\";\nimport avatarCss from \"./Avatar.css\";\nimport { useAvatarImage } from \"./useAvatarImage\";\n\nexport type NameToInitials = (name?: string) => string;\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The name that Avatar represents.\n */\n name?: string;\n /**\n * Defines the function that gets initials. Default is capital first letter of each separate word in name.\n * If a function is not passed or returns undefined, Avatar will default to Icon.\n */\n nameToInitials?: NameToInitials;\n /**\n * Image src of Avatar.\n */\n src?: string;\n /**\n * Multiplier for the base avatar.\n */\n size?: number;\n /**\n * Icon to be used as a default item. Defaults to `UserIcon`.\n */\n fallbackIcon?: ReactNode;\n /**\n * Changes Avatar's color.\n */\n color?:\n | \"accent\"\n | \"category-1\"\n | \"category-2\"\n | \"category-3\"\n | \"category-4\"\n | \"category-5\"\n | \"category-6\"\n | \"category-7\"\n | \"category-8\"\n | \"category-9\"\n | \"category-10\"\n | \"category-11\"\n | \"category-12\"\n | \"category-13\"\n | \"category-14\"\n | \"category-15\"\n | \"category-16\"\n | \"category-17\"\n | \"category-18\"\n | \"category-19\"\n | \"category-20\";\n}\n\nconst withBaseName = makePrefixer(\"saltAvatar\");\nconst DEFAULT_AVATAR_SIZE = 2; // medium\n\nconst defaultNameToInitials = (name?: string) =>\n name\n ?.split(\" \")\n .slice(0, 2)\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase();\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n className,\n children: childrenProp,\n color = \"accent\",\n name,\n nameToInitials = defaultNameToInitials,\n src,\n size = DEFAULT_AVATAR_SIZE,\n style: styleProp,\n fallbackIcon: fallbackIconProp,\n ...rest\n },\n ref,\n) {\n const targetWindow = useWindow();\n const { UserIcon } = useIcon();\n\n const fallbackIcon =\n fallbackIconProp === undefined ? (\n <UserIcon aria-hidden />\n ) : (\n fallbackIconProp\n );\n\n useComponentCssInjection({\n testId: \"salt-avatar\",\n css: avatarCss,\n window: targetWindow,\n });\n\n let children: ReactNode;\n\n const style = {\n ...styleProp,\n \"--saltAvatar-size-multiplier\": `${size}`,\n };\n\n const status = useAvatarImage({ src });\n const hasImgNotFailing = status === \"loaded\";\n if (hasImgNotFailing) {\n children = <img alt=\"\" src={src} />;\n } else if (childrenProp != null) {\n children = childrenProp;\n }\n\n const avatarInitials = nameToInitials(name);\n\n const ariaProps = name\n ? {\n role: \"img\",\n \"aria-label\": name,\n }\n : {};\n\n return (\n <div\n ref={ref}\n style={style}\n className={clsx(\n withBaseName(),\n withBaseName(color),\n {\n [withBaseName(\"withImage\")]: hasImgNotFailing,\n },\n className,\n )}\n {...ariaProps}\n {...rest}\n >\n {children || avatarInitials || fallbackIcon}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","Avatar","useWindow","useIcon","useComponentCssInjection","avatarCss","useAvatarImage","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;AA4DA,MAAM,YAAA,GAAeA,0BAAa,YAAY,CAAA;AAC9C,MAAM,mBAAsB,GAAA,CAAA;AAE5B,MAAM,wBAAwB,CAAC,IAAA,KAC7B,IACI,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAM,KACP,KAAM,CAAA,CAAA,EAAG,CACT,CAAA,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CACd,KAAK,EACL,CAAA,CAAA,WAAA,EAAA;AAEQ,MAAA,MAAA,GAASC,gBAAwC,CAAA,SAASC,OACrE,CAAA;AAAA,EACE,SAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,KAAQ,GAAA,QAAA;AAAA,EACR,IAAA;AAAA,EACA,cAAiB,GAAA,qBAAA;AAAA,EACjB,GAAA;AAAA,EACA,IAAO,GAAA,mBAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EACP,YAAc,EAAA,gBAAA;AAAA,EACd,GAAG;AACL,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,4BAAQ,EAAA;AAE7B,EAAA,MAAM,eACJ,gBAAqB,KAAA,MAAA,kCAClB,QAAS,EAAA,EAAA,aAAA,EAAW,MAAC,CAEtB,GAAA,gBAAA;AAGJ,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,aAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAI,IAAA,QAAA;AAEJ,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,8BAAA,EAAgC,GAAG,IAAI,CAAA;AAAA,GACzC;AAEA,EAAA,MAAM,MAAS,GAAAC,6BAAA,CAAe,EAAE,GAAA,EAAK,CAAA;AACrC,EAAA,MAAM,mBAAmB,MAAW,KAAA,QAAA;AACpC,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,QAAA,mBAAYC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAI,EAAA,EAAA,EAAG,GAAU,EAAA,CAAA;AAAA,GACnC,MAAA,IAAW,gBAAgB,IAAM,EAAA;AAC/B,IAAW,QAAA,GAAA,YAAA;AAAA;AAGb,EAAM,MAAA,cAAA,GAAiB,eAAe,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAY,IACd,GAAA;AAAA,IACE,IAAM,EAAA,KAAA;AAAA,IACN,YAAc,EAAA;AAAA,MAEhB,EAAC;AAEL,EACE,uBAAAA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAW,EAAAC,SAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,KAAK,CAAA;AAAA,QAClB;AAAA,UACE,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG;AAAA,SAC/B;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,SAAA;AAAA,MACH,GAAG,IAAA;AAAA,MAEH,sBAAY,cAAkB,IAAA;AAAA;AAAA,GACjC;AAEJ,CAAC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--salt-container-primary-background);\n\n background: var(--saltBanner-background, var(--banner-background));\n border-color: var(--saltBanner-borderColor, var(--banner-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--saltBanner-borderStyle, var(--salt-borderStyle-solid));\n border-radius: var(--saltBanner-borderRadius, var(--salt-palette-corner, 0));\n box-sizing: border-box;\n display: inline-flex;\n gap: var(--salt-spacing-75);\n padding: var(--saltBanner-padding, var(--salt-spacing-50) var(--salt-spacing-100));\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n\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}\n\n/* Styles applied to icon */\n.saltBanner-icon.saltIcon {\n min-height: var(--salt-size-base);\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-borderColor: var(--salt-status-success-borderColor);\n}\n\n.saltBanner-secondary.saltBanner-info {\n --banner-background: var(--salt-status-info-background);\n}\n\n.saltBanner-secondary.saltBanner-error {\n --banner-background: var(--salt-status-error-background);\n}\n\n.saltBanner-secondary.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background);\n}\n\n.saltBanner-secondary.saltBanner-success {\n --banner-background: var(--salt-status-success-background);\n}\n";
|
|
3
|
+
var css_248z = "/* Styles applied to root component */\n.saltBanner {\n --banner-background: var(--salt-container-primary-background);\n\n background: var(--saltBanner-background, var(--banner-background));\n border-color: var(--saltBanner-borderColor, var(--banner-borderColor));\n border-width: var(--saltBanner-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--saltBanner-borderStyle, var(--salt-borderStyle-solid));\n border-radius: var(--saltBanner-borderRadius, var(--salt-palette-corner, 0));\n box-sizing: border-box;\n display: inline-flex;\n gap: var(--salt-spacing-75);\n padding: var(--saltBanner-padding, var(--salt-spacing-50) var(--salt-spacing-100));\n width: 100%;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n\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 color: var(--salt-content-primary-foreground);\n}\n\n/* Styles applied to icon */\n.saltBanner-icon.saltIcon {\n min-height: var(--salt-size-base);\n}\n\n/* Styles applied when state = \"info\" */\n.saltBanner-info {\n --banner-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when state = \"error\" */\n.saltBanner-error {\n --banner-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when state = \"warning\" */\n.saltBanner-warning {\n --banner-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when state = \"success\" */\n.saltBanner-success {\n --banner-borderColor: var(--salt-status-success-borderColor);\n}\n\n.saltBanner-secondary.saltBanner-info {\n --banner-background: var(--salt-status-info-background);\n}\n\n.saltBanner-secondary.saltBanner-error {\n --banner-background: var(--salt-status-error-background);\n}\n\n.saltBanner-secondary.saltBanner-warning {\n --banner-background: var(--salt-status-warning-background);\n}\n\n.saltBanner-secondary.saltBanner-success {\n --banner-background: var(--salt-status-success-background);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=Banner.css.js.map
|
|
@@ -13,14 +13,17 @@ function BreakpointProvider(props) {
|
|
|
13
13
|
return /* @__PURE__ */ jsxRuntime.jsx(Context.Provider, { value: { matchedBreakpoints }, children });
|
|
14
14
|
}
|
|
15
15
|
function useMatchedBreakpoints(breakpoints) {
|
|
16
|
-
const entries =
|
|
17
|
-
|
|
16
|
+
const entries = React.useMemo(
|
|
17
|
+
() => Object.entries(breakpoints).sort(([, a], [, b]) => b - a),
|
|
18
|
+
[breakpoints]
|
|
19
|
+
);
|
|
18
20
|
const supportsMatchMedia = typeof window !== "undefined" && typeof window.matchMedia === "function";
|
|
19
21
|
const [matchedBreakpoints, setMatchedBreakpoints] = React.useState(Object.fromEntries(entries.map(([bp]) => [bp, false])));
|
|
20
22
|
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
21
23
|
if (!supportsMatchMedia) {
|
|
22
24
|
return;
|
|
23
25
|
}
|
|
26
|
+
const queries = entries.map(([, value]) => `(min-width: ${value}px)`);
|
|
24
27
|
const matchers = queries.map((query, index) => {
|
|
25
28
|
const mq = window.matchMedia(query);
|
|
26
29
|
const bp = entries[index][0];
|
|
@@ -36,16 +39,16 @@ function useMatchedBreakpoints(breakpoints) {
|
|
|
36
39
|
}
|
|
37
40
|
};
|
|
38
41
|
});
|
|
39
|
-
|
|
42
|
+
for (const { mq, handler } of matchers) {
|
|
40
43
|
handler();
|
|
41
44
|
mq.addEventListener("change", handler);
|
|
42
|
-
}
|
|
45
|
+
}
|
|
43
46
|
return () => {
|
|
44
|
-
|
|
47
|
+
for (const { mq, handler } of matchers) {
|
|
45
48
|
mq.removeEventListener("change", handler);
|
|
46
|
-
}
|
|
49
|
+
}
|
|
47
50
|
};
|
|
48
|
-
}, [supportsMatchMedia]);
|
|
51
|
+
}, [supportsMatchMedia, entries]);
|
|
49
52
|
return Object.keys(matchedBreakpoints).filter(
|
|
50
53
|
(bp) => matchedBreakpoints[bp]
|
|
51
54
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreakpointProvider.js","sources":["../src/breakpoints/BreakpointProvider.tsx"],"sourcesContent":["import { type ReactNode, useContext, useState } from \"react\";\nimport { createContext } from \"../utils/createContext\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type { Breakpoints } from \"./Breakpoints\";\n\ntype Breakpoint = keyof Breakpoints;\n\ninterface BreakpointContext {\n matchedBreakpoints: Breakpoint[];\n}\n\nconst Context = createContext<BreakpointContext>(\"BreakpointContext\", {\n matchedBreakpoints: [],\n});\n\ninterface BreakpointProviderProps {\n children?: ReactNode;\n matchedBreakpoints: Breakpoint[];\n}\n\nexport function BreakpointProvider(props: BreakpointProviderProps) {\n const { children, matchedBreakpoints } = props;\n\n return (\n <Context.Provider value={{ matchedBreakpoints }}>\n {children}\n </Context.Provider>\n );\n}\n\nexport function useMatchedBreakpoints(breakpoints: Breakpoints): Breakpoint[] {\n const entries = Object.entries(breakpoints).sort(([, a], [, b]) => b - a)
|
|
1
|
+
{"version":3,"file":"BreakpointProvider.js","sources":["../src/breakpoints/BreakpointProvider.tsx"],"sourcesContent":["import { type ReactNode, useContext, useMemo, useState } from \"react\";\nimport { createContext } from \"../utils/createContext\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type { Breakpoints } from \"./Breakpoints\";\n\ntype Breakpoint = keyof Breakpoints;\n\ninterface BreakpointContext {\n matchedBreakpoints: Breakpoint[];\n}\n\nconst Context = createContext<BreakpointContext>(\"BreakpointContext\", {\n matchedBreakpoints: [],\n});\n\ninterface BreakpointProviderProps {\n children?: ReactNode;\n matchedBreakpoints: Breakpoint[];\n}\n\nexport function BreakpointProvider(props: BreakpointProviderProps) {\n const { children, matchedBreakpoints } = props;\n\n return (\n <Context.Provider value={{ matchedBreakpoints }}>\n {children}\n </Context.Provider>\n );\n}\n\nexport function useMatchedBreakpoints(breakpoints: Breakpoints): Breakpoint[] {\n const entries = useMemo(\n () => Object.entries(breakpoints).sort(([, a], [, b]) => b - a),\n [breakpoints],\n );\n\n const supportsMatchMedia =\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\";\n\n const [matchedBreakpoints, setMatchedBreakpoints] = useState<\n Partial<Record<Breakpoint, boolean>>\n >(Object.fromEntries(entries.map(([bp]) => [bp as Breakpoint, false])));\n\n useIsomorphicLayoutEffect(() => {\n if (!supportsMatchMedia) {\n return;\n }\n\n const queries = entries.map(([, value]) => `(min-width: ${value}px)`);\n\n const matchers = queries.map((query, index) => {\n const mq = window.matchMedia(query);\n const bp = entries[index][0] as Breakpoint;\n\n return {\n mq,\n handler: () => {\n setMatchedBreakpoints((prev) => {\n return {\n ...prev,\n [bp]: mq.matches,\n };\n });\n },\n };\n });\n\n for (const { mq, handler } of matchers) {\n handler();\n mq.addEventListener(\"change\", handler);\n }\n\n return () => {\n for (const { mq, handler } of matchers) {\n mq.removeEventListener(\"change\", handler);\n }\n };\n }, [supportsMatchMedia, entries]);\n\n return Object.keys(matchedBreakpoints).filter(\n (bp) => matchedBreakpoints[bp as Breakpoint],\n ) as Breakpoint[];\n}\n\nexport function useBreakpoint(): BreakpointContext & {\n breakpoint: Breakpoint | null;\n} {\n const { matchedBreakpoints } = useContext(Context);\n\n return {\n matchedBreakpoints,\n breakpoint: matchedBreakpoints[0] ?? null,\n };\n}\n"],"names":["createContext","jsx","useMemo","useState","useIsomorphicLayoutEffect","useContext"],"mappings":";;;;;;;AAWA,MAAM,OAAA,GAAUA,4BAAiC,mBAAqB,EAAA;AAAA,EACpE,oBAAoB;AACtB,CAAC,CAAA;AAOM,SAAS,mBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAU,EAAA,kBAAA,EAAuB,GAAA,KAAA;AAEzC,EACE,uBAAAC,cAAA,CAAC,QAAQ,QAAR,EAAA,EAAiB,OAAO,EAAE,kBAAA,IACxB,QACH,EAAA,CAAA;AAEJ;AAEO,SAAS,sBAAsB,WAAwC,EAAA;AAC5E,EAAA,MAAM,OAAU,GAAAC,aAAA;AAAA,IACd,MAAM,MAAO,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,IAC9D,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,qBACJ,OAAO,MAAA,KAAW,WAAe,IAAA,OAAO,OAAO,UAAe,KAAA,UAAA;AAEhE,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAqB,IAAIC,cAElD,CAAA,MAAA,CAAO,YAAY,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAC,EAAE,CAAM,KAAA,CAAC,IAAkB,KAAK,CAAC,CAAC,CAAC,CAAA;AAEtE,EAAAC,mDAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,MAAA;AAAA;AAGF,IAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAA,KAAM,CAAe,YAAA,EAAA,KAAK,CAAK,GAAA,CAAA,CAAA;AAEpE,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,OAAO,KAAU,KAAA;AAC7C,MAAM,MAAA,EAAA,GAAK,MAAO,CAAA,UAAA,CAAW,KAAK,CAAA;AAClC,MAAA,MAAM,EAAK,GAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAC,CAAA;AAE3B,MAAO,OAAA;AAAA,QACL,EAAA;AAAA,QACA,SAAS,MAAM;AACb,UAAA,qBAAA,CAAsB,CAAC,IAAS,KAAA;AAC9B,YAAO,OAAA;AAAA,cACL,GAAG,IAAA;AAAA,cACH,CAAC,EAAE,GAAG,EAAG,CAAA;AAAA,aACX;AAAA,WACD,CAAA;AAAA;AACH,OACF;AAAA,KACD,CAAA;AAED,IAAA,KAAA,MAAW,EAAE,EAAA,EAAI,OAAQ,EAAA,IAAK,QAAU,EAAA;AACtC,MAAQ,OAAA,EAAA;AACR,MAAG,EAAA,CAAA,gBAAA,CAAiB,UAAU,OAAO,CAAA;AAAA;AAGvC,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,EAAE,EAAA,EAAI,OAAQ,EAAA,IAAK,QAAU,EAAA;AACtC,QAAG,EAAA,CAAA,mBAAA,CAAoB,UAAU,OAAO,CAAA;AAAA;AAC1C,KACF;AAAA,GACC,EAAA,CAAC,kBAAoB,EAAA,OAAO,CAAC,CAAA;AAEhC,EAAO,OAAA,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAE,CAAA,MAAA;AAAA,IACrC,CAAC,EAAO,KAAA,kBAAA,CAAmB,EAAgB;AAAA,GAC7C;AACF;AAEO,SAAS,aAEd,GAAA;AACA,EAAA,MAAM,EAAE,kBAAA,EAAuB,GAAAC,gBAAA,CAAW,OAAO,CAAA;AAEjD,EAAO,OAAA;AAAA,IACL,kBAAA;AAAA,IACA,UAAA,EAAY,kBAAmB,CAAA,CAAC,CAAK,IAAA;AAAA,GACvC;AACF;;;;;;"}
|
|
@@ -11,7 +11,7 @@ const useButton = ({
|
|
|
11
11
|
onClick,
|
|
12
12
|
onBlur
|
|
13
13
|
}) => {
|
|
14
|
-
const [keyIsDown,
|
|
14
|
+
const [keyIsDown, setKeyIsDown] = React.useState("");
|
|
15
15
|
const [active, setActive] = React.useState(false);
|
|
16
16
|
const enter = "Enter";
|
|
17
17
|
const space = " ";
|
|
@@ -26,7 +26,7 @@ const useButton = ({
|
|
|
26
26
|
};
|
|
27
27
|
}, [active, keyIsDown]);
|
|
28
28
|
const handleKeyUp = (event) => {
|
|
29
|
-
|
|
29
|
+
setKeyIsDown("");
|
|
30
30
|
setActive(false);
|
|
31
31
|
onKeyUp == null ? void 0 : onKeyUp(event);
|
|
32
32
|
};
|
|
@@ -40,7 +40,7 @@ const useButton = ({
|
|
|
40
40
|
};
|
|
41
41
|
const handleKeyDown = (event) => {
|
|
42
42
|
if (event.key === enter || event.key === space) {
|
|
43
|
-
|
|
43
|
+
setKeyIsDown(event.key);
|
|
44
44
|
setActive(true);
|
|
45
45
|
}
|
|
46
46
|
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useButton.js","sources":["../src/button/useButton.ts"],"sourcesContent":["import {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n useEffect,\n useState,\n} from \"react\";\n\nexport interface ButtonHookProps<T extends Element> {\n loading?: boolean;\n disabled?: boolean;\n focusableWhenDisabled?: boolean;\n onKeyUp?: (event: KeyboardEvent<T>) => void;\n onKeyDown?: (event: KeyboardEvent<T>) => void;\n onClick?: (event: MouseEvent<T>) => void;\n onBlur?: (event: FocusEvent<T>) => void;\n}\n\nexport interface ButtonHookResult<T extends Element> {\n active: boolean;\n buttonProps: {\n \"aria-disabled\"?: boolean;\n \"data-loading\"?: boolean;\n disabled?: boolean;\n tabIndex: number;\n onBlur: (event: FocusEvent<T>) => void;\n onClick?: (event: MouseEvent<T>) => void;\n onKeyDown: (event: KeyboardEvent<T>) => void;\n onKeyUp: (event: KeyboardEvent<T>) => void;\n };\n}\n\nexport const useButton = <T extends Element>({\n loading,\n disabled,\n focusableWhenDisabled,\n onKeyUp,\n onKeyDown,\n onClick,\n onBlur,\n}: ButtonHookProps<T>): ButtonHookResult<T> => {\n const [keyIsDown,
|
|
1
|
+
{"version":3,"file":"useButton.js","sources":["../src/button/useButton.ts"],"sourcesContent":["import {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n useEffect,\n useState,\n} from \"react\";\n\nexport interface ButtonHookProps<T extends Element> {\n loading?: boolean;\n disabled?: boolean;\n focusableWhenDisabled?: boolean;\n onKeyUp?: (event: KeyboardEvent<T>) => void;\n onKeyDown?: (event: KeyboardEvent<T>) => void;\n onClick?: (event: MouseEvent<T>) => void;\n onBlur?: (event: FocusEvent<T>) => void;\n}\n\nexport interface ButtonHookResult<T extends Element> {\n active: boolean;\n buttonProps: {\n \"aria-disabled\"?: boolean;\n \"data-loading\"?: boolean;\n disabled?: boolean;\n tabIndex: number;\n onBlur: (event: FocusEvent<T>) => void;\n onClick?: (event: MouseEvent<T>) => void;\n onKeyDown: (event: KeyboardEvent<T>) => void;\n onKeyUp: (event: KeyboardEvent<T>) => void;\n };\n}\n\nexport const useButton = <T extends Element>({\n loading,\n disabled,\n focusableWhenDisabled,\n onKeyUp,\n onKeyDown,\n onClick,\n onBlur,\n}: ButtonHookProps<T>): ButtonHookResult<T> => {\n const [keyIsDown, setKeyIsDown] = useState(\"\");\n const [active, setActive] = useState(false);\n\n const enter = \"Enter\";\n const space = \" \";\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: active is needed to remove the active styling on mouse up\n useEffect(() => {\n const t = setTimeout(() => {\n // This key state check is to stop continual visual state change when using Enter Key, which the browser treats as both key and click events on a Button\n // This key state check also fixes Firefox Button where Space key is pressed but button fails to be in active state\n if (keyIsDown !== enter && keyIsDown !== space) {\n setActive(false);\n }\n }, 0);\n\n return () => {\n clearTimeout(t);\n };\n }, [active, keyIsDown]);\n\n const handleKeyUp = (event: KeyboardEvent<T>) => {\n setKeyIsDown(\"\");\n setActive(false);\n onKeyUp?.(event);\n };\n\n const handleClick = (event: MouseEvent<T>) => {\n setActive(true);\n onClick?.(event);\n };\n\n const handleBlur = (event: FocusEvent<T>) => {\n setActive(false);\n onBlur?.(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<T>) => {\n if (event.key === enter || event.key === space) {\n setKeyIsDown(event.key);\n setActive(true);\n }\n\n onKeyDown?.(event);\n };\n\n const buttonProps = {\n \"aria-disabled\": disabled && focusableWhenDisabled ? true : undefined,\n \"data-loading\": loading,\n disabled: disabled && !focusableWhenDisabled,\n tabIndex: disabled && !focusableWhenDisabled ? -1 : 0,\n onBlur: handleBlur,\n onClick: !loading && !disabled ? handleClick : undefined,\n onKeyDown: handleKeyDown,\n onKeyUp: handleKeyUp,\n };\n\n return {\n active,\n buttonProps,\n };\n};\n"],"names":["useState","useEffect"],"mappings":";;;;AAgCO,MAAM,YAAY,CAAoB;AAAA,EAC3C,OAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA+C,KAAA;AAC7C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,KAAQ,GAAA,OAAA;AACd,EAAA,MAAM,KAAQ,GAAA,GAAA;AAGd,EAAAC,eAAA,CAAU,MAAM;AACd,IAAM,MAAA,CAAA,GAAI,WAAW,MAAM;AAGzB,MAAI,IAAA,SAAA,KAAc,KAAS,IAAA,SAAA,KAAc,KAAO,EAAA;AAC9C,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,OACC,CAAC,CAAA;AAEJ,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,CAAC,CAAA;AAAA,KAChB;AAAA,GACC,EAAA,CAAC,MAAQ,EAAA,SAAS,CAAC,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAc,CAAC,KAA4B,KAAA;AAC/C,IAAA,YAAA,CAAa,EAAE,CAAA;AACf,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA;AAAA,GACZ;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAAyB,KAAA;AAC5C,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA;AAAA,GACZ;AAEA,EAAM,MAAA,UAAA,GAAa,CAAC,KAAyB,KAAA;AAC3C,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAS,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,KAAA,CAAA;AAAA,GACX;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,KAA4B,KAAA;AACjD,IAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,KAAS,IAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AAC9C,MAAA,YAAA,CAAa,MAAM,GAAG,CAAA;AACtB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA;AAGhB,IAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA;AAAA,GACd;AAEA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,eAAA,EAAiB,QAAY,IAAA,qBAAA,GAAwB,IAAO,GAAA,MAAA;AAAA,IAC5D,cAAgB,EAAA,OAAA;AAAA,IAChB,QAAA,EAAU,YAAY,CAAC,qBAAA;AAAA,IACvB,QAAU,EAAA,QAAA,IAAY,CAAC,qBAAA,GAAwB,EAAK,GAAA,CAAA;AAAA,IACpD,MAAQ,EAAA,UAAA;AAAA,IACR,OAAS,EAAA,CAAC,OAAW,IAAA,CAAC,WAAW,WAAc,GAAA,MAAA;AAAA,IAC/C,SAAW,EAAA,aAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Styles applied to root component */\n.saltCheckbox {\n display: inline-flex;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltCheckbox-disabled {\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n\n/* Styles applied to root component if `readOnly={true}` */\n.saltCheckbox-readOnly {\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltCheckbox-input,\n.saltCheckboxIcon {\n margin: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2) 0;\n box-sizing: border-box;\n}\n\n/* Styles applied to the icon component if focused */\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-offset: var(--salt-
|
|
3
|
+
var css_248z = "/* Styles applied to root component */\n.saltCheckbox {\n display: inline-flex;\n gap: var(--salt-spacing-100);\n position: relative;\n cursor: var(--salt-cursor-hover);\n\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltCheckbox-disabled {\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n\n/* Styles applied to root component if `readOnly={true}` */\n.saltCheckbox-readOnly {\n color: var(--salt-content-primary-foreground);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltCheckbox-input,\n.saltCheckboxIcon {\n margin: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2) 0;\n box-sizing: border-box;\n}\n\n/* Styles applied to the icon component if focused */\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-offset: var(--salt-spacing-fixed-100);\n outline: var(--saltCheckbox-outline, var(--salt-focused-outline));\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n clip-path: unset;\n}\n\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox-error .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckbox-warning .saltCheckbox-input:focus-visible + .saltCheckboxIcon {\n outline-color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n color: var(--salt-status-warning-foreground-decorative);\n}\n\n/* Styles applied to input element */\n.saltCheckbox-input {\n cursor: inherit;\n opacity: 0;\n padding: 0;\n position: absolute;\n z-index: var(--salt-zIndex-default);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=Checkbox.css.js.map
|