@salt-ds/core 1.47.5 → 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.
Files changed (96) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/css/salt-core.css +171 -1
  3. package/dist-cjs/banner/Banner.css.js +1 -1
  4. package/dist-cjs/collapsible/Collapsible.js +52 -0
  5. package/dist-cjs/collapsible/Collapsible.js.map +1 -0
  6. package/dist-cjs/collapsible/CollapsibleContext.js +29 -0
  7. package/dist-cjs/collapsible/CollapsibleContext.js.map +1 -0
  8. package/dist-cjs/collapsible/CollapsiblePanel.css.js +6 -0
  9. package/dist-cjs/collapsible/CollapsiblePanel.css.js.map +1 -0
  10. package/dist-cjs/collapsible/CollapsiblePanel.js +46 -0
  11. package/dist-cjs/collapsible/CollapsiblePanel.js.map +1 -0
  12. package/dist-cjs/collapsible/CollapsibleTrigger.js +40 -0
  13. package/dist-cjs/collapsible/CollapsibleTrigger.js.map +1 -0
  14. package/dist-cjs/index.js +21 -0
  15. package/dist-cjs/index.js.map +1 -1
  16. package/dist-cjs/vertical-navigation/SubMenuContext.js +39 -0
  17. package/dist-cjs/vertical-navigation/SubMenuContext.js.map +1 -0
  18. package/dist-cjs/vertical-navigation/VerticalNavigation.css.js +6 -0
  19. package/dist-cjs/vertical-navigation/VerticalNavigation.css.js.map +1 -0
  20. package/dist-cjs/vertical-navigation/VerticalNavigation.js +38 -0
  21. package/dist-cjs/vertical-navigation/VerticalNavigation.js.map +1 -0
  22. package/dist-cjs/vertical-navigation/VerticalNavigationItem.js +53 -0
  23. package/dist-cjs/vertical-navigation/VerticalNavigationItem.js.map +1 -0
  24. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js +6 -0
  25. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.css.js.map +1 -0
  26. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.js +88 -0
  27. package/dist-cjs/vertical-navigation/VerticalNavigationItemContent.js.map +1 -0
  28. package/dist-cjs/vertical-navigation/VerticalNavigationItemExpansionIcon.js +35 -0
  29. package/dist-cjs/vertical-navigation/VerticalNavigationItemExpansionIcon.js.map +1 -0
  30. package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.css.js +6 -0
  31. package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.css.js.map +1 -0
  32. package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.js +28 -0
  33. package/dist-cjs/vertical-navigation/VerticalNavigationItemLabel.js.map +1 -0
  34. package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.css.js +6 -0
  35. package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.css.js.map +1 -0
  36. package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.js +74 -0
  37. package/dist-cjs/vertical-navigation/VerticalNavigationItemTrigger.js.map +1 -0
  38. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js +6 -0
  39. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js.map +1 -0
  40. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.js +39 -0
  41. package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.js.map +1 -0
  42. package/dist-es/banner/Banner.css.js +1 -1
  43. package/dist-es/collapsible/Collapsible.js +50 -0
  44. package/dist-es/collapsible/Collapsible.js.map +1 -0
  45. package/dist-es/collapsible/CollapsibleContext.js +26 -0
  46. package/dist-es/collapsible/CollapsibleContext.js.map +1 -0
  47. package/dist-es/collapsible/CollapsiblePanel.css.js +4 -0
  48. package/dist-es/collapsible/CollapsiblePanel.css.js.map +1 -0
  49. package/dist-es/collapsible/CollapsiblePanel.js +44 -0
  50. package/dist-es/collapsible/CollapsiblePanel.js.map +1 -0
  51. package/dist-es/collapsible/CollapsibleTrigger.js +38 -0
  52. package/dist-es/collapsible/CollapsibleTrigger.js.map +1 -0
  53. package/dist-es/index.js +10 -0
  54. package/dist-es/index.js.map +1 -1
  55. package/dist-es/vertical-navigation/SubMenuContext.js +35 -0
  56. package/dist-es/vertical-navigation/SubMenuContext.js.map +1 -0
  57. package/dist-es/vertical-navigation/VerticalNavigation.css.js +4 -0
  58. package/dist-es/vertical-navigation/VerticalNavigation.css.js.map +1 -0
  59. package/dist-es/vertical-navigation/VerticalNavigation.js +36 -0
  60. package/dist-es/vertical-navigation/VerticalNavigation.js.map +1 -0
  61. package/dist-es/vertical-navigation/VerticalNavigationItem.js +50 -0
  62. package/dist-es/vertical-navigation/VerticalNavigationItem.js.map +1 -0
  63. package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js +4 -0
  64. package/dist-es/vertical-navigation/VerticalNavigationItemContent.css.js.map +1 -0
  65. package/dist-es/vertical-navigation/VerticalNavigationItemContent.js +86 -0
  66. package/dist-es/vertical-navigation/VerticalNavigationItemContent.js.map +1 -0
  67. package/dist-es/vertical-navigation/VerticalNavigationItemExpansionIcon.js +33 -0
  68. package/dist-es/vertical-navigation/VerticalNavigationItemExpansionIcon.js.map +1 -0
  69. package/dist-es/vertical-navigation/VerticalNavigationItemLabel.css.js +4 -0
  70. package/dist-es/vertical-navigation/VerticalNavigationItemLabel.css.js.map +1 -0
  71. package/dist-es/vertical-navigation/VerticalNavigationItemLabel.js +26 -0
  72. package/dist-es/vertical-navigation/VerticalNavigationItemLabel.js.map +1 -0
  73. package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.css.js +4 -0
  74. package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.css.js.map +1 -0
  75. package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.js +72 -0
  76. package/dist-es/vertical-navigation/VerticalNavigationItemTrigger.js.map +1 -0
  77. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js +4 -0
  78. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js.map +1 -0
  79. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.js +37 -0
  80. package/dist-es/vertical-navigation/VerticalNavigationSubMenu.js.map +1 -0
  81. package/dist-types/collapsible/Collapsible.d.ts +16 -0
  82. package/dist-types/collapsible/CollapsibleContext.d.ts +9 -0
  83. package/dist-types/collapsible/CollapsiblePanel.d.ts +4 -0
  84. package/dist-types/collapsible/CollapsibleTrigger.d.ts +5 -0
  85. package/dist-types/collapsible/index.d.ts +3 -0
  86. package/dist-types/index.d.ts +2 -0
  87. package/dist-types/vertical-navigation/SubMenuContext.d.ts +14 -0
  88. package/dist-types/vertical-navigation/VerticalNavigation.d.ts +8 -0
  89. package/dist-types/vertical-navigation/VerticalNavigationItem.d.ts +12 -0
  90. package/dist-types/vertical-navigation/VerticalNavigationItemContent.d.ts +4 -0
  91. package/dist-types/vertical-navigation/VerticalNavigationItemExpansionIcon.d.ts +2 -0
  92. package/dist-types/vertical-navigation/VerticalNavigationItemLabel.d.ts +4 -0
  93. package/dist-types/vertical-navigation/VerticalNavigationItemTrigger.d.ts +6 -0
  94. package/dist-types/vertical-navigation/VerticalNavigationSubMenu.d.ts +4 -0
  95. package/dist-types/vertical-navigation/index.d.ts +7 -0
  96. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
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
+
3
42
  ## 1.47.5
4
43
 
5
44
  ### 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);
@@ -994,6 +995,28 @@ a:focus .saltCard-interactable.saltCard-disabled {
994
995
  transform: scale(1.01);
995
996
  }
996
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
+
997
1020
  /* src/combo-box/ComboBox.css */
998
1021
  .saltComboBox-focused {
999
1022
  outline: var(--saltPillInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--pillInput-outlineColor));
@@ -4734,6 +4757,153 @@ label.saltText small,
4734
4757
  --tooltip-status-borderColor: var(--salt-status-success-borderColor);
4735
4758
  }
4736
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
+
4737
4907
  /* src/progress/CircularProgress/CircularProgress.css */
4738
4908
  .saltCircularProgress {
4739
4909
  color: var(--salt-content-primary-foreground);
@@ -5285,4 +5455,4 @@ label.saltText small,
5285
5455
  color: var(--salt-status-error-foreground-informative);
5286
5456
  }
5287
5457
 
5288
- /* src/4a0f5cbc-a0a0-42f9-8be1-8d5615fbd745.css */
5458
+ /* src/a3c9275d-f674-46ac-ba4b-1442197b5a6e.css */
@@ -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
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var clsx = require('clsx');
5
+ var React = require('react');
6
+ var makePrefixer = require('../utils/makePrefixer.js');
7
+ var useControlled = require('../utils/useControlled.js');
8
+ require('../utils/useFloatingUI/useFloatingUI.js');
9
+ require('../utils/useId.js');
10
+ require('../salt-provider/SaltProvider.js');
11
+ require('../viewport/ViewportProvider.js');
12
+ var CollapsibleContext = require('./CollapsibleContext.js');
13
+
14
+ const withBaseName = makePrefixer.makePrefixer("saltCollapsible");
15
+ const Collapsible = React.forwardRef(
16
+ function Collapsible2(props, ref) {
17
+ const {
18
+ className,
19
+ open: openProp,
20
+ defaultOpen,
21
+ onOpenChange,
22
+ ...rest
23
+ } = props;
24
+ const [open, setOpenState] = useControlled.useControlled({
25
+ default: Boolean(defaultOpen),
26
+ controlled: openProp,
27
+ name: "Collapsible",
28
+ state: "open"
29
+ });
30
+ const [panelId, setPanelId] = React.useState(void 0);
31
+ const setOpen = React.useCallback(
32
+ (event, newOpen) => {
33
+ setOpenState(newOpen);
34
+ onOpenChange == null ? void 0 : onOpenChange(event, newOpen);
35
+ },
36
+ [onOpenChange]
37
+ );
38
+ const contextValue = React.useMemo(
39
+ () => ({
40
+ open,
41
+ setOpen,
42
+ panelId,
43
+ setPanelId
44
+ }),
45
+ [open, setOpen, panelId]
46
+ );
47
+ return /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContext.CollapsibleContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(withBaseName(), className), ref, ...rest }) });
48
+ }
49
+ );
50
+
51
+ exports.Collapsible = Collapsible;
52
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sources":["../src/collapsible/Collapsible.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type SyntheticEvent,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { makePrefixer, useControlled } from \"../utils\";\nimport { CollapsibleContext } from \"./CollapsibleContext\";\n\nexport interface CollapsibleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onToggle\"> {\n /**\n * Whether the accordion is open.\n */\n open?: boolean;\n /**\n * Whether the accordion is open by default.\n */\n defaultOpen?: boolean;\n /**\n * Callback fired when the accordion is opened or closed.\n */\n onOpenChange?: (\n event: SyntheticEvent<HTMLButtonElement>,\n open: boolean,\n ) => void;\n}\n\nconst withBaseName = makePrefixer(\"saltCollapsible\");\n\nexport const Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(\n function Collapsible(props, ref) {\n const {\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...rest\n } = props;\n\n const [open, setOpenState] = useControlled({\n default: Boolean(defaultOpen),\n controlled: openProp,\n name: \"Collapsible\",\n state: \"open\",\n });\n\n const [panelId, setPanelId] = useState<string | undefined>(undefined);\n\n const setOpen = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newOpen: boolean) => {\n setOpenState(newOpen);\n onOpenChange?.(event, newOpen);\n },\n [onOpenChange],\n );\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen,\n panelId,\n setPanelId,\n }),\n [open, setOpen, panelId],\n );\n\n return (\n <CollapsibleContext.Provider value={contextValue}>\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest} />\n </CollapsibleContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Collapsible","useControlled","useState","useCallback","useMemo","CollapsibleContext","jsx","clsx"],"mappings":";;;;;;;;;;;;;AA+BA,MAAM,YAAA,GAAeA,0BAAa,iBAAiB,CAAA;AAE5C,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,SAASC,YAAY,CAAA,KAAA,EAAO,GAAK,EAAA;AAC/B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MACN,WAAA;AAAA,MACA,YAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,CAAC,IAAA,EAAM,YAAY,CAAA,GAAIC,2BAAc,CAAA;AAAA,MACzC,OAAA,EAAS,QAAQ,WAAW,CAAA;AAAA,MAC5B,UAAY,EAAA,QAAA;AAAA,MACZ,IAAM,EAAA,aAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACR,CAAA;AAED,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAA6B,MAAS,CAAA;AAEpE,IAAA,MAAM,OAAU,GAAAC,iBAAA;AAAA,MACd,CAAC,OAA0C,OAAqB,KAAA;AAC9D,QAAA,YAAA,CAAa,OAAO,CAAA;AACpB,QAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,KAAO,EAAA,OAAA,CAAA;AAAA,OACxB;AAAA,MACA,CAAC,YAAY;AAAA,KACf;AAEA,IAAA,MAAM,YAAe,GAAAC,aAAA;AAAA,MACnB,OAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF,CAAA;AAAA,MACA,CAAC,IAAM,EAAA,OAAA,EAAS,OAAO;AAAA,KACzB;AAEA,IAAA,sCACGC,qCAAmB,CAAA,QAAA,EAAnB,EAA4B,KAAA,EAAO,cAClC,QAAC,kBAAAC,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAAC,SAAA,CAAK,cAAgB,EAAA,SAAS,GAAG,GAAW,EAAA,GAAG,MAAM,CACvE,EAAA,CAAA;AAAA;AAGN;;;;"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var createContext = require('../utils/createContext.js');
5
+ require('clsx');
6
+ require('react/jsx-runtime');
7
+ require('../utils/useFloatingUI/useFloatingUI.js');
8
+ require('../utils/useId.js');
9
+ require('../salt-provider/SaltProvider.js');
10
+ require('../viewport/ViewportProvider.js');
11
+
12
+ const CollapsibleContext = createContext.createContext(
13
+ "CollapsibleContext",
14
+ {
15
+ open: false,
16
+ setOpen: () => {
17
+ },
18
+ panelId: void 0,
19
+ setPanelId: () => {
20
+ }
21
+ }
22
+ );
23
+ function useCollapsibleContext() {
24
+ return React.useContext(CollapsibleContext);
25
+ }
26
+
27
+ exports.CollapsibleContext = CollapsibleContext;
28
+ exports.useCollapsibleContext = useCollapsibleContext;
29
+ //# sourceMappingURL=CollapsibleContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleContext.js","sources":["../src/collapsible/CollapsibleContext.ts"],"sourcesContent":["import { type SyntheticEvent, useContext } from \"react\";\nimport { createContext } from \"../utils\";\n\nexport type CollapsibleContextValue = {\n open: boolean;\n setOpen: (event: SyntheticEvent<HTMLButtonElement>, open: boolean) => void;\n panelId?: string;\n setPanelId?: (panelId: string) => void;\n};\n\nexport const CollapsibleContext = createContext<CollapsibleContextValue>(\n \"CollapsibleContext\",\n {\n open: false,\n setOpen: () => {},\n panelId: undefined,\n setPanelId: () => {},\n },\n);\n\nexport function useCollapsibleContext() {\n return useContext(CollapsibleContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAUO,MAAM,kBAAqB,GAAAA,2BAAA;AAAA,EAChC,oBAAA;AAAA,EACA;AAAA,IACE,IAAM,EAAA,KAAA;AAAA,IACN,SAAS,MAAM;AAAA,KAAC;AAAA,IAChB,OAAS,EAAA,MAAA;AAAA,IACT,YAAY,MAAM;AAAA;AAAC;AAEvB;AAEO,SAAS,qBAAwB,GAAA;AACtC,EAAA,OAAOC,iBAAW,kBAAkB,CAAA;AACtC;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCollapsiblePanel {\n display: grid;\n transition:\n grid-template-rows var(--salt-duration-perceptible) ease-in-out,\n opacity var(--salt-duration-perceptible) ease-in-out,\n visibility var(--salt-duration-perceptible) ease-in-out;\n}\n\n.saltCollapsiblePanel[aria-hidden=\"true\"] {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.saltCollapsiblePanel {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n}\n\n.saltCollapsiblePanel-inner {\n overflow: hidden;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CollapsiblePanel.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsiblePanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,46 @@
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
+ var makePrefixer = require('../utils/makePrefixer.js');
9
+ require('../utils/useFloatingUI/useFloatingUI.js');
10
+ var useId = require('../utils/useId.js');
11
+ require('../salt-provider/SaltProvider.js');
12
+ require('../viewport/ViewportProvider.js');
13
+ var CollapsibleContext = require('./CollapsibleContext.js');
14
+ var CollapsiblePanel$1 = require('./CollapsiblePanel.css.js');
15
+
16
+ const withBaseName = makePrefixer.makePrefixer("saltCollapsiblePanel");
17
+ const CollapsiblePanel = (props) => {
18
+ const { children, className, id: idProp, ...rest } = props;
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "salt-collapsible-panel",
22
+ css: CollapsiblePanel$1,
23
+ window: targetWindow
24
+ });
25
+ const id = useId.useId(idProp);
26
+ const { open, setPanelId } = CollapsibleContext.useCollapsibleContext();
27
+ React.useEffect(() => {
28
+ if (id) {
29
+ setPanelId == null ? void 0 : setPanelId(id);
30
+ }
31
+ }, [id, setPanelId]);
32
+ return /* @__PURE__ */ jsxRuntime.jsx(
33
+ "div",
34
+ {
35
+ className: clsx.clsx(withBaseName(), className),
36
+ id,
37
+ "aria-hidden": !open ? "true" : void 0,
38
+ hidden: !open,
39
+ ...rest,
40
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("inner"), children })
41
+ }
42
+ );
43
+ };
44
+
45
+ exports.CollapsiblePanel = CollapsiblePanel;
46
+ //# sourceMappingURL=CollapsiblePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsiblePanel.js","sources":["../src/collapsible/CollapsiblePanel.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, useEffect } from \"react\";\nimport { makePrefixer, useId } from \"../utils\";\n\nimport { useCollapsibleContext } from \"./CollapsibleContext\";\nimport collapsiblePanelCss from \"./CollapsiblePanel.css\";\n\nexport interface CollapsiblePanelProps\n extends ComponentPropsWithoutRef<\"div\"> {}\n\nconst withBaseName = makePrefixer(\"saltCollapsiblePanel\");\n\nexport const CollapsiblePanel = (props: CollapsiblePanelProps) => {\n const { children, className, id: idProp, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-collapsible-panel\",\n css: collapsiblePanelCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n const { open, setPanelId } = useCollapsibleContext();\n\n useEffect(() => {\n if (id) {\n setPanelId?.(id);\n }\n }, [id, setPanelId]);\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n id={id}\n aria-hidden={!open ? \"true\" : undefined}\n hidden={!open}\n {...rest}\n >\n <div className={withBaseName(\"inner\")}>{children}</div>\n </div>\n );\n};\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","collapsiblePanelCss","useId","useCollapsibleContext","useEffect","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,0BAAa,sBAAsB,CAAA;AAE3C,MAAA,gBAAA,GAAmB,CAAC,KAAiC,KAAA;AAChE,EAAA,MAAM,EAAE,QAAU,EAAA,SAAA,EAAW,IAAI,MAAQ,EAAA,GAAG,MAAS,GAAA,KAAA;AAErD,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,kBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAA,GAAKC,YAAM,MAAM,CAAA;AACvB,EAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAIC,wCAAsB,EAAA;AAEnD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,EAAI,EAAA;AACN,MAAa,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,EAAA,CAAA;AAAA;AACf,GACC,EAAA,CAAC,EAAI,EAAA,UAAU,CAAC,CAAA;AAEnB,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,EAAA;AAAA,MACA,aAAA,EAAa,CAAC,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MAC9B,QAAQ,CAAC,IAAA;AAAA,MACR,GAAG,IAAA;AAAA,MAEJ,yCAAC,KAAI,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,OAAO,GAAI,QAAS,EAAA;AAAA;AAAA,GACnD;AAEJ;;;;"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var clsx = require('clsx');
5
+ var React = require('react');
6
+ var makePrefixer = require('../utils/makePrefixer.js');
7
+ var mergeProps = require('../utils/mergeProps.js');
8
+ require('../utils/useFloatingUI/useFloatingUI.js');
9
+ require('../utils/useId.js');
10
+ require('../salt-provider/SaltProvider.js');
11
+ require('../viewport/ViewportProvider.js');
12
+ var CollapsibleContext = require('./CollapsibleContext.js');
13
+
14
+ const withBaseName = makePrefixer.makePrefixer("saltCollapsibleTrigger");
15
+ const CollapsibleTrigger = React.forwardRef(function CollapsibleTrigger2(props, ref) {
16
+ const { children, className, onClick } = props;
17
+ const { open, setOpen, panelId } = CollapsibleContext.useCollapsibleContext();
18
+ const handleClick = (event) => {
19
+ setOpen(event, !open);
20
+ onClick == null ? void 0 : onClick(event);
21
+ };
22
+ if (!children || !React.isValidElement(children)) {
23
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
24
+ }
25
+ return React.cloneElement(children, {
26
+ ...mergeProps.mergeProps(
27
+ {
28
+ className: clsx.clsx(withBaseName(), className),
29
+ "aria-expanded": open,
30
+ "aria-controls": panelId,
31
+ onClick: handleClick
32
+ },
33
+ children.props
34
+ ),
35
+ ref
36
+ });
37
+ });
38
+
39
+ exports.CollapsibleTrigger = CollapsibleTrigger;
40
+ //# sourceMappingURL=CollapsibleTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleTrigger.js","sources":["../src/collapsible/CollapsibleTrigger.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n cloneElement,\n forwardRef,\n isValidElement,\n type MouseEvent,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { makePrefixer, mergeProps } from \"../utils\";\nimport { useCollapsibleContext } from \"./CollapsibleContext\";\n\nexport interface CollapsibleTriggerProps\n extends Pick<ComponentPropsWithoutRef<\"button\">, \"className\" | \"onClick\"> {\n children: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltCollapsibleTrigger\");\n\nexport const CollapsibleTrigger = forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(function CollapsibleTrigger(props, ref) {\n const { children, className, onClick } = props;\n\n const { open, setOpen, panelId } = useCollapsibleContext();\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setOpen(event, !open);\n onClick?.(event);\n };\n\n if (!children || !isValidElement<{ ref?: Ref<unknown> }>(children)) {\n // Should we log or throw error?\n return <>{children}</>;\n }\n\n return cloneElement(children, {\n ...mergeProps(\n {\n className: clsx(withBaseName(), className),\n \"aria-expanded\": open,\n \"aria-controls\": panelId,\n onClick: handleClick,\n },\n children.props,\n ),\n ref,\n });\n});\n"],"names":["makePrefixer","forwardRef","CollapsibleTrigger","useCollapsibleContext","isValidElement","cloneElement","mergeProps","clsx"],"mappings":";;;;;;;;;;;;;AAkBA,MAAM,YAAA,GAAeA,0BAAa,wBAAwB,CAAA;AAEnD,MAAM,kBAAqB,GAAAC,gBAAA,CAGhC,SAASC,mBAAAA,CAAmB,OAAO,GAAK,EAAA;AACxC,EAAA,MAAM,EAAE,QAAA,EAAU,SAAW,EAAA,OAAA,EAAY,GAAA,KAAA;AAEzC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAS,EAAA,OAAA,KAAYC,wCAAsB,EAAA;AAEzD,EAAM,MAAA,WAAA,GAAc,CAAC,KAAyC,KAAA;AAC5D,IAAQ,OAAA,CAAA,KAAA,EAAO,CAAC,IAAI,CAAA;AACpB,IAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA;AAAA,GACZ;AAEA,EAAA,IAAI,CAAC,QAAA,IAAY,CAACC,oBAAA,CAAuC,QAAQ,CAAG,EAAA;AAElE,IAAA,6DAAU,QAAS,EAAA,CAAA;AAAA;AAGrB,EAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,IAC5B,GAAGC,qBAAA;AAAA,MACD;AAAA,QACE,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,eAAiB,EAAA,IAAA;AAAA,QACjB,eAAiB,EAAA,OAAA;AAAA,QACjB,OAAS,EAAA;AAAA,OACX;AAAA,MACA,QAAS,CAAA;AAAA,KACX;AAAA,IACA;AAAA,GACD,CAAA;AACH,CAAC;;;;"}
package/dist-cjs/index.js CHANGED
@@ -24,6 +24,9 @@ var Card = require('./card/Card.js');
24
24
  var Checkbox = require('./checkbox/Checkbox.js');
25
25
  var CheckboxGroup = require('./checkbox/CheckboxGroup.js');
26
26
  var CheckboxIcon = require('./checkbox/CheckboxIcon.js');
27
+ var Collapsible = require('./collapsible/Collapsible.js');
28
+ var CollapsiblePanel = require('./collapsible/CollapsiblePanel.js');
29
+ var CollapsibleTrigger = require('./collapsible/CollapsibleTrigger.js');
27
30
  var ComboBox = require('./combo-box/ComboBox.js');
28
31
  var Dialog = require('./dialog/Dialog.js');
29
32
  var DialogActions = require('./dialog/DialogActions.js');
@@ -145,6 +148,13 @@ var usePrevious = require('./utils/usePrevious.js');
145
148
  var useResizeObserver = require('./utils/useResizeObserver.js');
146
149
  var useResponsiveProp = require('./utils/useResponsiveProp.js');
147
150
  var useValueEffect = require('./utils/useValueEffect.js');
151
+ var VerticalNavigation = require('./vertical-navigation/VerticalNavigation.js');
152
+ var VerticalNavigationItem = require('./vertical-navigation/VerticalNavigationItem.js');
153
+ var VerticalNavigationItemContent = require('./vertical-navigation/VerticalNavigationItemContent.js');
154
+ var VerticalNavigationItemExpansionIcon = require('./vertical-navigation/VerticalNavigationItemExpansionIcon.js');
155
+ var VerticalNavigationItemLabel = require('./vertical-navigation/VerticalNavigationItemLabel.js');
156
+ var VerticalNavigationItemTrigger = require('./vertical-navigation/VerticalNavigationItemTrigger.js');
157
+ var VerticalNavigationSubMenu = require('./vertical-navigation/VerticalNavigationSubMenu.js');
148
158
  var ViewportProvider = require('./viewport/ViewportProvider.js');
149
159
 
150
160
 
@@ -178,6 +188,9 @@ exports.Card = Card.Card;
178
188
  exports.Checkbox = Checkbox.Checkbox;
179
189
  exports.CheckboxGroup = CheckboxGroup.CheckboxGroup;
180
190
  exports.CheckboxIcon = CheckboxIcon.CheckboxIcon;
191
+ exports.Collapsible = Collapsible.Collapsible;
192
+ exports.CollapsiblePanel = CollapsiblePanel.CollapsiblePanel;
193
+ exports.CollapsibleTrigger = CollapsibleTrigger.CollapsibleTrigger;
181
194
  exports.ComboBox = ComboBox.ComboBox;
182
195
  exports.ConditionalScrimWrapper = Dialog.ConditionalScrimWrapper;
183
196
  exports.Dialog = Dialog.Dialog;
@@ -338,6 +351,14 @@ exports.useCurrentBreakpoint = useResponsiveProp.useCurrentBreakpoint;
338
351
  exports.useOrderedBreakpoints = useResponsiveProp.useOrderedBreakpoints;
339
352
  exports.useResponsiveProp = useResponsiveProp.useResponsiveProp;
340
353
  exports.useValueEffect = useValueEffect.useValueEffect;
354
+ exports.VerticalNavigation = VerticalNavigation.VerticalNavigation;
355
+ exports.VerticalNavigationItem = VerticalNavigationItem.VerticalNavigationItem;
356
+ exports.useVerticalNavigationItem = VerticalNavigationItem.useVerticalNavigationItem;
357
+ exports.VerticalNavigationItemContent = VerticalNavigationItemContent.VerticalNavigationItemContent;
358
+ exports.VerticalNavigationItemExpansionIcon = VerticalNavigationItemExpansionIcon.VerticalNavigationItemExpansionIcon;
359
+ exports.VerticalNavigationItemLabel = VerticalNavigationItemLabel.VerticalNavigationItemLabel;
360
+ exports.VerticalNavigationItemTrigger = VerticalNavigationItemTrigger.VerticalNavigationItemTrigger;
361
+ exports.VerticalNavigationSubMenu = VerticalNavigationSubMenu.VerticalNavigationSubMenu;
341
362
  exports.ViewportContext = ViewportProvider.ViewportContext;
342
363
  exports.ViewportProvider = ViewportProvider.ViewportProvider;
343
364
  exports.useViewport = ViewportProvider.useViewport;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var createContext = require('../utils/createContext.js');
6
+ require('clsx');
7
+ require('../utils/useFloatingUI/useFloatingUI.js');
8
+ require('../utils/useId.js');
9
+ require('../salt-provider/SaltProvider.js');
10
+ require('../viewport/ViewportProvider.js');
11
+
12
+ const SubMenuContext = createContext.createContext(
13
+ "SubMenuContext",
14
+ { depth: -1, iconPaddingCount: 0 }
15
+ );
16
+ const useSubMenuContext = () => {
17
+ return React.useContext(SubMenuContext);
18
+ };
19
+ function SubMenuProvider({
20
+ children,
21
+ directIcons,
22
+ setDirectIcons
23
+ }) {
24
+ const { depth, iconPaddingCount } = useSubMenuContext();
25
+ const context = React.useMemo(
26
+ () => ({
27
+ depth: depth + 1,
28
+ iconPaddingCount: iconPaddingCount + (directIcons.length > 0 ? 1 : 0),
29
+ setDirectIcons
30
+ }),
31
+ [depth, iconPaddingCount, directIcons, setDirectIcons]
32
+ );
33
+ return /* @__PURE__ */ jsxRuntime.jsx(SubMenuContext.Provider, { value: context, children });
34
+ }
35
+
36
+ exports.SubMenuContext = SubMenuContext;
37
+ exports.SubMenuProvider = SubMenuProvider;
38
+ exports.useSubMenuContext = useSubMenuContext;
39
+ //# sourceMappingURL=SubMenuContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubMenuContext.js","sources":["../src/vertical-navigation/SubMenuContext.tsx"],"sourcesContent":["import {\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n useContext,\n useMemo,\n} from \"react\";\nimport { createContext } from \"../utils\";\n\ntype SubMenuContextValue = {\n depth: number;\n iconPaddingCount: number;\n setDirectIcons?: Dispatch<SetStateAction<string[]>>;\n};\n\nexport const SubMenuContext = createContext<SubMenuContextValue>(\n \"SubMenuContext\",\n { depth: -1, iconPaddingCount: 0 },\n);\n\nexport const useSubMenuContext = () => {\n return useContext(SubMenuContext);\n};\n\nexport function SubMenuProvider({\n children,\n directIcons,\n setDirectIcons,\n}: {\n children: ReactNode;\n directIcons: string[];\n setDirectIcons?: Dispatch<SetStateAction<string[]>>;\n}) {\n const { depth, iconPaddingCount } = useSubMenuContext();\n\n const context = useMemo(\n () => ({\n depth: depth + 1,\n iconPaddingCount: iconPaddingCount + (directIcons.length > 0 ? 1 : 0),\n setDirectIcons,\n }),\n [depth, iconPaddingCount, directIcons, setDirectIcons],\n );\n\n return (\n <SubMenuContext.Provider value={context}>\n {children}\n </SubMenuContext.Provider>\n );\n}\n"],"names":["createContext","useContext","useMemo"],"mappings":";;;;;;;;;;;AAeO,MAAM,cAAiB,GAAAA,2BAAA;AAAA,EAC5B,gBAAA;AAAA,EACA,EAAE,KAAA,EAAO,EAAI,EAAA,gBAAA,EAAkB,CAAE;AACnC;AAEO,MAAM,oBAAoB,MAAM;AACrC,EAAA,OAAOC,iBAAW,cAAc,CAAA;AAClC;AAEO,SAAS,eAAgB,CAAA;AAAA,EAC9B,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAA,MAAM,EAAE,KAAA,EAAO,gBAAiB,EAAA,GAAI,iBAAkB,EAAA;AAEtD,EAAA,MAAM,OAAU,GAAAC,aAAA;AAAA,IACd,OAAO;AAAA,MACL,OAAO,KAAQ,GAAA,CAAA;AAAA,MACf,gBAAkB,EAAA,gBAAA,IAAoB,WAAY,CAAA,MAAA,GAAS,IAAI,CAAI,GAAA,CAAA,CAAA;AAAA,MACnE;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,gBAAkB,EAAA,WAAA,EAAa,cAAc;AAAA,GACvD;AAEA,EAAA,sCACG,cAAe,CAAA,QAAA,EAAf,EAAwB,KAAA,EAAO,SAC7B,QACH,EAAA,CAAA;AAEJ;;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltVerticalNavigation ol {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n list-style: none;\n padding: 0;\n margin: 0;\n position: relative;\n}\n\n.saltVerticalNavigationSubMenu > .saltDivider-horizontal,\n.saltVerticalNavigationItem > .saltDivider-horizontal,\n.saltVerticalNavigation ol > .saltDivider-horizontal {\n margin-bottom: calc(var(--salt-size-fixed-100) * -1);\n}\n\n.saltVerticalNavigation [data-has-direct-icons=\"false\"] .saltCollapsiblePanel-inner {\n margin-bottom: calc(var(--salt-size-fixed-100) * -1);\n}\n\n.saltVerticalNavigation [data-has-direct-icons=\"false\"] .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu {\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);\n}\n\n/* Only show border at the top-level */\n\n.saltVerticalNavigation .saltCollapsiblePanel-inner .saltCollapsiblePanel-inner,\n.saltVerticalNavigation .saltCollapsiblePanel[aria-hidden=\"true\"] .saltCollapsiblePanel-inner {\n margin-bottom: 0;\n}\n\n.saltVerticalNavigation .saltCollapsiblePanel-inner .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu,\n.saltVerticalNavigation .saltCollapsiblePanel[aria-hidden=\"true\"] .saltCollapsiblePanel-inner .saltVerticalNavigationSubMenu {\n border-bottom: none;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=VerticalNavigation.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalNavigation.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,38 @@
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
+ var makePrefixer = require('../utils/makePrefixer.js');
9
+ require('../utils/useFloatingUI/useFloatingUI.js');
10
+ require('../utils/useId.js');
11
+ require('../salt-provider/SaltProvider.js');
12
+ require('../viewport/ViewportProvider.js');
13
+ var SubMenuContext = require('./SubMenuContext.js');
14
+ var VerticalNavigation$1 = require('./VerticalNavigation.css.js');
15
+
16
+ const withBaseName = makePrefixer.makePrefixer("saltVerticalNavigation");
17
+ const VerticalNavigation = React.forwardRef(function VerticalNavigation2(props, ref) {
18
+ const { appearance = "bordered", children, className, ...rest } = props;
19
+ const targetWindow = window.useWindow();
20
+ styles.useComponentCssInjection({
21
+ testId: "salt-vertical-navigation",
22
+ css: VerticalNavigation$1,
23
+ window: targetWindow
24
+ });
25
+ const [directIcons, setDirectIcons] = React.useState([]);
26
+ return /* @__PURE__ */ jsxRuntime.jsx(SubMenuContext.SubMenuProvider, { directIcons, setDirectIcons, children: /* @__PURE__ */ jsxRuntime.jsx(
27
+ "nav",
28
+ {
29
+ ref,
30
+ className: clsx.clsx(withBaseName(), withBaseName(appearance), className),
31
+ ...rest,
32
+ children: /* @__PURE__ */ jsxRuntime.jsx("ol", { "data-has-direct-icons": directIcons.length > 0, children })
33
+ }
34
+ ) });
35
+ });
36
+
37
+ exports.VerticalNavigation = VerticalNavigation;
38
+ //# sourceMappingURL=VerticalNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerticalNavigation.js","sources":["../src/vertical-navigation/VerticalNavigation.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef, useState } from \"react\";\nimport { makePrefixer } from \"../utils\";\nimport { SubMenuProvider } from \"./SubMenuContext\";\nimport verticalNavigationCss from \"./VerticalNavigation.css\";\n\nexport interface VerticalNavigationProps\n extends ComponentPropsWithoutRef<\"nav\"> {\n /**\n * The appearance of the tabs. Defaults to \"bordered\".\n */\n appearance?: \"indicator\" | \"bordered\";\n}\n\nconst withBaseName = makePrefixer(\"saltVerticalNavigation\");\n\nexport const VerticalNavigation = forwardRef<\n HTMLElement,\n VerticalNavigationProps\n>(function VerticalNavigation(props, ref) {\n const { appearance = \"bordered\", children, className, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-vertical-navigation\",\n css: verticalNavigationCss,\n window: targetWindow,\n });\n\n const [directIcons, setDirectIcons] = useState<string[]>([]);\n\n return (\n <SubMenuProvider directIcons={directIcons} setDirectIcons={setDirectIcons}>\n <nav\n ref={ref}\n className={clsx(withBaseName(), withBaseName(appearance), className)}\n {...rest}\n >\n <ol data-has-direct-icons={directIcons.length > 0}>{children}</ol>\n </nav>\n </SubMenuProvider>\n );\n});\n"],"names":["makePrefixer","forwardRef","VerticalNavigation","useWindow","useComponentCssInjection","verticalNavigationCss","useState","jsx","SubMenuProvider","clsx"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAM,YAAA,GAAeA,0BAAa,wBAAwB,CAAA;AAEnD,MAAM,kBAAqB,GAAAC,gBAAA,CAGhC,SAASC,mBAAAA,CAAmB,OAAO,GAAK,EAAA;AACxC,EAAA,MAAM,EAAE,UAAa,GAAA,UAAA,EAAY,UAAU,SAAW,EAAA,GAAG,MAAS,GAAA,KAAA;AAElE,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAAC,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAC,cAAA,CAAmB,EAAE,CAAA;AAE3D,EACE,uBAAAC,cAAA,CAACC,8BAAgB,EAAA,EAAA,WAAA,EAA0B,cACzC,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAWE,SAAK,CAAA,YAAA,IAAgB,YAAa,CAAA,UAAU,GAAG,SAAS,CAAA;AAAA,MAClE,GAAG,IAAA;AAAA,MAEJ,yCAAC,IAAG,EAAA,EAAA,uBAAA,EAAuB,WAAY,CAAA,MAAA,GAAS,GAAI,QAAS,EAAA;AAAA;AAAA,GAEjE,EAAA,CAAA;AAEJ,CAAC;;;;"}