@salt-ds/core 1.57.1 → 1.59.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 (174) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/css/salt-core.css +198 -123
  3. package/dist-cjs/avatar/Avatar.css.js +1 -1
  4. package/dist-cjs/badge/Badge.css.js +1 -1
  5. package/dist-cjs/card/Card.css.js +1 -1
  6. package/dist-cjs/checkbox/Checkbox.css.js +1 -1
  7. package/dist-cjs/checkbox/Checkbox.js +2 -3
  8. package/dist-cjs/checkbox/Checkbox.js.map +1 -1
  9. package/dist-cjs/checkbox/CheckboxIcon.css.js +1 -1
  10. package/dist-cjs/dialog/Dialog.js +10 -3
  11. package/dist-cjs/dialog/Dialog.js.map +1 -1
  12. package/dist-cjs/dialog/DialogContent.js +9 -1
  13. package/dist-cjs/dialog/DialogContent.js.map +1 -1
  14. package/dist-cjs/dialog/DialogContext.js +19 -4
  15. package/dist-cjs/dialog/DialogContext.js.map +1 -1
  16. package/dist-cjs/dialog/DialogHeader.css.js +1 -1
  17. package/dist-cjs/dialog/DialogHeader.js +13 -4
  18. package/dist-cjs/dialog/DialogHeader.js.map +1 -1
  19. package/dist-cjs/dropdown/Dropdown.css.js +1 -1
  20. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  21. package/dist-cjs/index.js +8 -0
  22. package/dist-cjs/index.js.map +1 -1
  23. package/dist-cjs/input/Input.css.js +1 -1
  24. package/dist-cjs/input/Input.js +2 -2
  25. package/dist-cjs/input/Input.js.map +1 -1
  26. package/dist-cjs/interactable-card/InteractableCard.css.js +1 -1
  27. package/dist-cjs/kbd/Kbd.css.js +6 -0
  28. package/dist-cjs/kbd/Kbd.css.js.map +1 -0
  29. package/dist-cjs/kbd/Kbd.js +38 -0
  30. package/dist-cjs/kbd/Kbd.js.map +1 -0
  31. package/dist-cjs/link-card/LinkCard.css.js +1 -1
  32. package/dist-cjs/multiline-input/MultilineInput.css.js +1 -1
  33. package/dist-cjs/multiline-input/MultilineInput.js +2 -2
  34. package/dist-cjs/multiline-input/MultilineInput.js.map +1 -1
  35. package/dist-cjs/number-input/NumberInput.css.js +1 -1
  36. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  37. package/dist-cjs/option/Option.css.js +1 -1
  38. package/dist-cjs/option/Option.js +1 -1
  39. package/dist-cjs/option/Option.js.map +1 -1
  40. package/dist-cjs/overlay/OverlayPanel.js +2 -2
  41. package/dist-cjs/overlay/OverlayPanel.js.map +1 -1
  42. package/dist-cjs/pill-input/PillInput.css.js +1 -1
  43. package/dist-cjs/pill-input/PillInput.js +2 -2
  44. package/dist-cjs/pill-input/PillInput.js.map +1 -1
  45. package/dist-cjs/progress/CircularProgress/CircularProgress.css.js +1 -1
  46. package/dist-cjs/progress/LinearProgress/LinearProgress.css.js +1 -1
  47. package/dist-cjs/radio-button/RadioButton.css.js +1 -1
  48. package/dist-cjs/radio-button/RadioButton.js +0 -1
  49. package/dist-cjs/radio-button/RadioButton.js.map +1 -1
  50. package/dist-cjs/radio-button/RadioButtonIcon.css.js +1 -1
  51. package/dist-cjs/salt-provider/SaltProvider.js +1 -1
  52. package/dist-cjs/salt-provider/SaltProvider.js.map +1 -1
  53. package/dist-cjs/slider/internal/SliderThumb.css.js +1 -1
  54. package/dist-cjs/slider/internal/SliderTrack.css.js +1 -1
  55. package/dist-cjs/slider/internal/SliderTrack.js +0 -2
  56. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -1
  57. package/dist-cjs/spinner/Spinner.css.js +1 -1
  58. package/dist-cjs/spinner/svgSpinners/SpinnerSVG.js +1 -1
  59. package/dist-cjs/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  60. package/dist-cjs/switch/Switch.css.js +1 -1
  61. package/dist-cjs/switch/Switch.js +2 -8
  62. package/dist-cjs/switch/Switch.js.map +1 -1
  63. package/dist-cjs/toggletip/Toggletip.js +71 -0
  64. package/dist-cjs/toggletip/Toggletip.js.map +1 -0
  65. package/dist-cjs/toggletip/ToggletipContext.js +42 -0
  66. package/dist-cjs/toggletip/ToggletipContext.js.map +1 -0
  67. package/dist-cjs/toggletip/ToggletipPanel.css.js +6 -0
  68. package/dist-cjs/toggletip/ToggletipPanel.css.js.map +1 -0
  69. package/dist-cjs/toggletip/ToggletipPanel.js +117 -0
  70. package/dist-cjs/toggletip/ToggletipPanel.js.map +1 -0
  71. package/dist-cjs/toggletip/ToggletipTrigger.css.js +6 -0
  72. package/dist-cjs/toggletip/ToggletipTrigger.css.js.map +1 -0
  73. package/dist-cjs/toggletip/ToggletipTrigger.js +67 -0
  74. package/dist-cjs/toggletip/ToggletipTrigger.js.map +1 -0
  75. package/dist-cjs/tooltip/TooltipBase.js +2 -2
  76. package/dist-cjs/tooltip/TooltipBase.js.map +1 -1
  77. package/dist-cjs/utils/useFloatingUI/useFloatingUI.js.map +1 -1
  78. package/dist-cjs/utils/useForkRef.js.map +1 -1
  79. package/dist-es/avatar/Avatar.css.js +1 -1
  80. package/dist-es/badge/Badge.css.js +1 -1
  81. package/dist-es/card/Card.css.js +1 -1
  82. package/dist-es/checkbox/Checkbox.css.js +1 -1
  83. package/dist-es/checkbox/Checkbox.js +2 -3
  84. package/dist-es/checkbox/Checkbox.js.map +1 -1
  85. package/dist-es/checkbox/CheckboxIcon.css.js +1 -1
  86. package/dist-es/dialog/Dialog.js +10 -3
  87. package/dist-es/dialog/Dialog.js.map +1 -1
  88. package/dist-es/dialog/DialogContent.js +9 -1
  89. package/dist-es/dialog/DialogContent.js.map +1 -1
  90. package/dist-es/dialog/DialogContext.js +20 -5
  91. package/dist-es/dialog/DialogContext.js.map +1 -1
  92. package/dist-es/dialog/DialogHeader.css.js +1 -1
  93. package/dist-es/dialog/DialogHeader.js +14 -5
  94. package/dist-es/dialog/DialogHeader.js.map +1 -1
  95. package/dist-es/dropdown/Dropdown.css.js +1 -1
  96. package/dist-es/dropdown/Dropdown.js.map +1 -1
  97. package/dist-es/index.js +4 -0
  98. package/dist-es/index.js.map +1 -1
  99. package/dist-es/input/Input.css.js +1 -1
  100. package/dist-es/input/Input.js +2 -2
  101. package/dist-es/input/Input.js.map +1 -1
  102. package/dist-es/interactable-card/InteractableCard.css.js +1 -1
  103. package/dist-es/kbd/Kbd.css.js +4 -0
  104. package/dist-es/kbd/Kbd.css.js.map +1 -0
  105. package/dist-es/kbd/Kbd.js +36 -0
  106. package/dist-es/kbd/Kbd.js.map +1 -0
  107. package/dist-es/link-card/LinkCard.css.js +1 -1
  108. package/dist-es/menu/MenuBase.js +1 -1
  109. package/dist-es/multiline-input/MultilineInput.css.js +1 -1
  110. package/dist-es/multiline-input/MultilineInput.js +2 -2
  111. package/dist-es/multiline-input/MultilineInput.js.map +1 -1
  112. package/dist-es/number-input/NumberInput.css.js +1 -1
  113. package/dist-es/number-input/NumberInput.js.map +1 -1
  114. package/dist-es/option/Option.css.js +1 -1
  115. package/dist-es/option/Option.js +1 -1
  116. package/dist-es/option/Option.js.map +1 -1
  117. package/dist-es/overlay/Overlay.js +1 -1
  118. package/dist-es/overlay/OverlayPanel.js +2 -2
  119. package/dist-es/overlay/OverlayPanel.js.map +1 -1
  120. package/dist-es/pill-input/PillInput.css.js +1 -1
  121. package/dist-es/pill-input/PillInput.js +2 -2
  122. package/dist-es/pill-input/PillInput.js.map +1 -1
  123. package/dist-es/progress/CircularProgress/CircularProgress.css.js +1 -1
  124. package/dist-es/progress/LinearProgress/LinearProgress.css.js +1 -1
  125. package/dist-es/radio-button/RadioButton.css.js +1 -1
  126. package/dist-es/radio-button/RadioButton.js +0 -1
  127. package/dist-es/radio-button/RadioButton.js.map +1 -1
  128. package/dist-es/radio-button/RadioButtonIcon.css.js +1 -1
  129. package/dist-es/salt-provider/SaltProvider.js +1 -1
  130. package/dist-es/salt-provider/SaltProvider.js.map +1 -1
  131. package/dist-es/slider/internal/SliderThumb.css.js +1 -1
  132. package/dist-es/slider/internal/SliderTrack.css.js +1 -1
  133. package/dist-es/slider/internal/SliderTrack.js +0 -2
  134. package/dist-es/slider/internal/SliderTrack.js.map +1 -1
  135. package/dist-es/spinner/Spinner.css.js +1 -1
  136. package/dist-es/spinner/svgSpinners/SpinnerSVG.js +1 -1
  137. package/dist-es/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  138. package/dist-es/switch/Switch.css.js +1 -1
  139. package/dist-es/switch/Switch.js +2 -8
  140. package/dist-es/switch/Switch.js.map +1 -1
  141. package/dist-es/toggletip/Toggletip.js +69 -0
  142. package/dist-es/toggletip/Toggletip.js.map +1 -0
  143. package/dist-es/toggletip/ToggletipContext.js +39 -0
  144. package/dist-es/toggletip/ToggletipContext.js.map +1 -0
  145. package/dist-es/toggletip/ToggletipPanel.css.js +4 -0
  146. package/dist-es/toggletip/ToggletipPanel.css.js.map +1 -0
  147. package/dist-es/toggletip/ToggletipPanel.js +115 -0
  148. package/dist-es/toggletip/ToggletipPanel.js.map +1 -0
  149. package/dist-es/toggletip/ToggletipTrigger.css.js +4 -0
  150. package/dist-es/toggletip/ToggletipTrigger.css.js.map +1 -0
  151. package/dist-es/toggletip/ToggletipTrigger.js +65 -0
  152. package/dist-es/toggletip/ToggletipTrigger.js.map +1 -0
  153. package/dist-es/tooltip/TooltipBase.js +2 -2
  154. package/dist-es/tooltip/TooltipBase.js.map +1 -1
  155. package/dist-es/tooltip/useTooltip.js +1 -1
  156. package/dist-es/utils/useFloatingUI/useFloatingUI.js.map +1 -1
  157. package/dist-es/utils/useForkRef.js.map +1 -1
  158. package/dist-types/dialog/Dialog.d.ts +2 -0
  159. package/dist-types/dialog/DialogContext.d.ts +8 -7
  160. package/dist-types/dropdown/Dropdown.d.ts +1 -1
  161. package/dist-types/index.d.ts +2 -0
  162. package/dist-types/input/Input.d.ts +1 -1
  163. package/dist-types/kbd/Kbd.d.ts +8 -0
  164. package/dist-types/kbd/index.d.ts +1 -0
  165. package/dist-types/multiline-input/MultilineInput.d.ts +1 -1
  166. package/dist-types/number-input/NumberInput.d.ts +1 -1
  167. package/dist-types/pill-input/PillInput.d.ts +1 -1
  168. package/dist-types/toggletip/Toggletip.d.ts +14 -0
  169. package/dist-types/toggletip/ToggletipContext.d.ts +17 -0
  170. package/dist-types/toggletip/ToggletipPanel.d.ts +8 -0
  171. package/dist-types/toggletip/ToggletipTrigger.d.ts +5 -0
  172. package/dist-types/toggletip/index.d.ts +3 -0
  173. package/dist-types/utils/useFloatingUI/useFloatingUI.d.ts +1 -1
  174. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--salt-text-notation-fontSize));\n --avatar-container-size: calc(var(--avatar-base-size) * var(--avatar-size-multiplier));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n";
3
+ var css_248z = "/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--salt-text-notation-fontSize));\n --avatar-container-size: calc(var(--avatar-base-size) * var(--avatar-size-multiplier));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-sentiment-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Avatar.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Style applied to the root element */\n.saltBadge {\n display: inline-flex;\n position: relative;\n flex-shrink: 0;\n vertical-align: middle;\n --badge-size: var(--salt-text-notation-lineHeight);\n}\n\n.saltBadge-badge {\n /* Should this vary according to touch size */\n padding-left: var(--salt-spacing-50);\n padding-right: var(--salt-spacing-50);\n height: var(--badge-size);\n min-width: var(--badge-size);\n border-radius: var(--salt-palette-corner-strongest, 9999px);\n\n white-space: nowrap;\n z-index: var(--salt-zIndex-default);\n box-sizing: border-box;\n\n align-items: center;\n justify-content: center;\n display: inline-flex;\n margin: auto;\n\n font-size: var(--salt-text-notation-fontSize);\n font-weight: var(--salt-text-notation-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-notation-lineHeight);\n background: var(--salt-accent-background);\n color: var(--salt-content-bold-foreground);\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.saltBadge-topRight {\n position: absolute;\n right: var(--salt-spacing-100);\n transform: translateX(100%) translateY(calc(-1 * (var(--badge-size) / 2)));\n}\n\n.saltBadge-dotBadge {\n height: var(--salt-size-adornment);\n min-width: var(--salt-size-adornment);\n padding: 0;\n --badge-size: var(--salt-size-adornment);\n}\n\n.saltBadge-dotBadge.saltBadge-topRight {\n right: calc((var(--salt-size-adornment) / 2));\n}\n";
3
+ var css_248z = "/* Style applied to the root element */\n.saltBadge {\n display: inline-flex;\n position: relative;\n flex-shrink: 0;\n vertical-align: middle;\n --badge-size: var(--salt-text-notation-lineHeight);\n}\n\n.saltBadge-badge {\n /* Should this vary according to touch size */\n padding-left: var(--salt-spacing-50);\n padding-right: var(--salt-spacing-50);\n height: var(--badge-size);\n min-width: var(--badge-size);\n border-radius: var(--salt-palette-corner-strongest, 9999px);\n\n white-space: nowrap;\n z-index: var(--salt-zIndex-default);\n box-sizing: border-box;\n\n align-items: center;\n justify-content: center;\n display: inline-flex;\n margin: auto;\n\n font-size: var(--salt-text-notation-fontSize);\n font-weight: var(--salt-text-notation-fontWeight);\n font-family: var(--salt-text-fontFamily);\n line-height: var(--salt-text-notation-lineHeight);\n background: var(--salt-sentiment-accent-background);\n color: var(--salt-content-bold-foreground);\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.saltBadge-topRight {\n position: absolute;\n right: var(--salt-spacing-100);\n transform: translateX(100%) translateY(calc(-1 * (var(--badge-size) / 2)));\n}\n\n.saltBadge-dotBadge {\n height: var(--salt-size-adornment);\n min-width: var(--salt-size-adornment);\n padding: 0;\n --badge-size: var(--salt-size-adornment);\n}\n\n.saltBadge-dotBadge.saltBadge-topRight {\n right: calc((var(--salt-size-adornment) / 2));\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Badge.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to the root element */\n.saltCard {\n border-width: var(--saltCard-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--salt-borderStyle-solid);\n padding: var(--saltCard-padding, var(--salt-spacing-200));\n position: relative;\n box-shadow: var(--salt-overlayable-shadow);\n transition: box-shadow var(--salt-duration-instant) ease-in-out;\n box-sizing: border-box;\n border-radius: var(--saltCard-borderRadius, var(--salt-palette-corner, 0));\n overflow: hidden;\n --card-accent-color: var(--salt-accent-background);\n}\n\n.saltCard-primary {\n background: var(--saltCard-background, var(--salt-container-primary-background));\n border-color: var(--salt-container-primary-borderColor);\n}\n\n.saltCard-secondary {\n background: var(--saltCard-background, var(--salt-container-secondary-background));\n border-color: var(--salt-container-secondary-borderColor);\n}\n\n.saltCard-tertiary {\n background: var(--saltCard-background, var(--salt-container-tertiary-background));\n border-color: var(--salt-container-tertiary-borderColor);\n}\n\n.saltCard-ghost {\n background: var(--saltCard-background, var(--salt-container-ghost-background));\n border-color: var(--salt-container-ghost-borderColor);\n}\n\n/* Styles applied to create accent */\n.saltCard-accent::after {\n content: \"\";\n position: absolute;\n background-color: var(--saltCard-accent-color, var(--card-accent-color));\n}\n\n/* Styles applied to Card if `accent=\"bottom\"` (default) */\n.saltCard-accentBottom::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n bottom: calc(-1 * var(--salt-size-fixed-100));\n height: var(--salt-size-bar);\n width: calc(100% + var(--salt-size-fixed-200));\n}\n\n/* Styles applied to Card if `accent=\"left\"` */\n.saltCard-accentLeft::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: calc(100% + var(--salt-size-fixed-200));\n width: var(--salt-size-bar);\n}\n\n/* Styles applied to Card if `accent=\"top\"` */\n.saltCard-accentTop::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: var(--salt-size-bar);\n width: calc(100% + var(--salt-size-fixed-200));\n}\n\n/* Styles applied to Card if `accent=\"right\"` */\n.saltCard-accentRight::after {\n right: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: calc(100% + var(--salt-size-fixed-200));\n width: var(--salt-size-bar);\n}\n\n/*\n * **Deprecated:** The following styles are deprecated\n * Use Interactable Card component instead\n * for interactable styling\n */\n\n/* **Deprecated:** Styles applied if `interactable={true}` */\n.saltCard-interactable {\n display: block;\n transition: none;\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` */\na:focus .saltCard-interactable,\n.saltCard-interactable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n cursor: var(--saltCard-cursor-hover, var(--salt-cursor-hover));\n border-color: var(--salt-actionable-accented-borderColor-hover);\n position: relative;\n}\n\n/* Styles applied if `hoverable` is set */\n@media (hover: hover) {\n .saltCard-hoverable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n border-color: var(--salt-actionable-accented-borderColor-hover);\n }\n}\n\n/* **Deprecated:** Styles applied on active state if `interactable={true}` */\n.saltCard-interactable:active {\n border-color: var(--salt-actionable-accented-borderColor-active);\n box-shadow: var(--saltCard-boxShadow-active, var(--salt-overlayable-shadow-hover));\n outline: var(--salt-focused-outline);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` and `disabled={true}` */\na:focus .saltCard-interactable.saltCard-disabled,\n.saltCard-interactable.saltCard-disabled:hover,\n.saltCard-interactable.saltCard-disabled:active {\n box-shadow: var(--saltCard-boxShadow-disabled, var(--salt-overlayable-shadow));\n}\n\n/* **Deprecated:** Styles applied if `disabled={true}` */\n.saltCard-disabled,\n.saltCard-disabled.saltCard-interactable,\na:focus .saltCard-interactable.saltCard-disabled {\n border-color: var(--salt-container-primary-borderColor-disabled);\n color: var(--saltCard-color-disabled, var(--salt-content-primary-foreground-disabled));\n cursor: var(--saltCard-cursor-disabled, var(--salt-cursor-disabled));\n outline: none;\n}\n\n/* **Deprecated:** Styles applied to nested divs if `disabled={true}` */\n.saltCard-disabled div {\n pointer-events: none;\n}\n";
3
+ var css_248z = "/* Styles applied to the root element */\n.saltCard {\n border-width: var(--saltCard-borderWidth, var(--salt-size-fixed-100));\n border-style: var(--salt-borderStyle-solid);\n padding: var(--saltCard-padding, var(--salt-spacing-200));\n position: relative;\n box-shadow: var(--salt-overlayable-shadow);\n transition: box-shadow var(--salt-duration-instant) ease-in-out;\n box-sizing: border-box;\n border-radius: var(--saltCard-borderRadius, var(--salt-palette-corner, 0));\n overflow: hidden;\n --card-accent-color: var(--salt-sentiment-accent-background);\n}\n\n.saltCard-primary {\n background: var(--saltCard-background, var(--salt-container-primary-background));\n border-color: var(--salt-container-primary-borderColor);\n}\n\n.saltCard-secondary {\n background: var(--saltCard-background, var(--salt-container-secondary-background));\n border-color: var(--salt-container-secondary-borderColor);\n}\n\n.saltCard-tertiary {\n background: var(--saltCard-background, var(--salt-container-tertiary-background));\n border-color: var(--salt-container-tertiary-borderColor);\n}\n\n.saltCard-ghost {\n background: var(--saltCard-background, var(--salt-container-ghost-background));\n border-color: var(--salt-container-ghost-borderColor);\n}\n\n/* Styles applied to create accent */\n.saltCard-accent::after {\n content: \"\";\n position: absolute;\n background-color: var(--saltCard-accent-color, var(--card-accent-color));\n}\n\n/* Styles applied to Card if `accent=\"bottom\"` (default) */\n.saltCard-accentBottom::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n bottom: calc(-1 * var(--salt-size-fixed-100));\n height: var(--salt-size-bar);\n width: calc(100% + var(--salt-size-fixed-200));\n}\n\n/* Styles applied to Card if `accent=\"left\"` */\n.saltCard-accentLeft::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: calc(100% + var(--salt-size-fixed-200));\n width: var(--salt-size-bar);\n}\n\n/* Styles applied to Card if `accent=\"top\"` */\n.saltCard-accentTop::after {\n left: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: var(--salt-size-bar);\n width: calc(100% + var(--salt-size-fixed-200));\n}\n\n/* Styles applied to Card if `accent=\"right\"` */\n.saltCard-accentRight::after {\n right: calc(-1 * var(--salt-size-fixed-100));\n top: calc(-1 * var(--salt-size-fixed-100));\n height: calc(100% + var(--salt-size-fixed-200));\n width: var(--salt-size-bar);\n}\n\n/*\n * **Deprecated:** The following styles are deprecated\n * Use Interactable Card component instead\n * for interactable styling\n */\n\n/* **Deprecated:** Styles applied if `interactable={true}` */\n.saltCard-interactable {\n display: block;\n transition: none;\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` */\na:focus .saltCard-interactable,\n.saltCard-interactable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n cursor: var(--saltCard-cursor-hover, var(--salt-cursor-hover));\n border-color: var(--salt-actionable-accented-borderColor-hover);\n position: relative;\n}\n\n/* Styles applied if `hoverable` is set */\n@media (hover: hover) {\n .saltCard-hoverable:hover {\n box-shadow: var(--saltCard-boxShadow-hover, var(--salt-overlayable-shadow-hover));\n border-color: var(--salt-actionable-accented-borderColor-hover);\n }\n}\n\n/* **Deprecated:** Styles applied on active state if `interactable={true}` */\n.saltCard-interactable:active {\n border-color: var(--salt-actionable-accented-borderColor-active);\n box-shadow: var(--saltCard-boxShadow-active, var(--salt-overlayable-shadow-hover));\n outline: var(--salt-focused-outline);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n/* **Deprecated:** Styles applied on hover if `interactable={true}` and `disabled={true}` */\na:focus .saltCard-interactable.saltCard-disabled,\n.saltCard-interactable.saltCard-disabled:hover,\n.saltCard-interactable.saltCard-disabled:active {\n box-shadow: var(--saltCard-boxShadow-disabled, var(--salt-overlayable-shadow));\n}\n\n/* **Deprecated:** Styles applied if `disabled={true}` */\n.saltCard-disabled,\n.saltCard-disabled.saltCard-interactable,\na:focus .saltCard-interactable.saltCard-disabled {\n border-color: var(--salt-container-primary-borderColor-disabled);\n color: var(--saltCard-color-disabled, var(--salt-content-primary-foreground-disabled));\n cursor: var(--saltCard-cursor-disabled, var(--salt-cursor-disabled));\n outline: none;\n}\n\n/* **Deprecated:** Styles applied to nested divs if `disabled={true}` */\n.saltCard-disabled div {\n pointer-events: none;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Card.css.js.map
@@ -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 width: fit-content;\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";
3
+ var css_248z = "/* Styles applied to root component */\n.saltCheckbox {\n display: inline-flex;\n width: fit-content;\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);\n\n cursor: var(--salt-cursor-disabled);\n opacity: 0.4;\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
@@ -111,11 +111,11 @@ const Checkbox = React.forwardRef(
111
111
  "aria-describedby": clsx.clsx(
112
112
  checkboxGroup === void 0 ? formFieldA11yProps == null ? void 0 : formFieldA11yProps["aria-describedby"] : void 0,
113
113
  inputDescribedBy
114
- ),
114
+ ) || void 0,
115
115
  "aria-labelledby": clsx.clsx(
116
116
  checkboxGroup === void 0 ? formFieldA11yProps == null ? void 0 : formFieldA11yProps["aria-labelledby"] : void 0,
117
117
  inputLabelledBy
118
- ),
118
+ ) || void 0,
119
119
  name,
120
120
  value,
121
121
  checked,
@@ -136,7 +136,6 @@ const Checkbox = React.forwardRef(
136
136
  CheckboxIcon.CheckboxIcon,
137
137
  {
138
138
  checked,
139
- disabled,
140
139
  readOnly,
141
140
  indeterminate,
142
141
  validationStatus,
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../src/checkbox/Checkbox.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n useRef,\n} from \"react\";\nimport { useFormFieldProps } from \"../form-field-context\";\nimport type { AdornmentValidationStatus } from \"../status-adornment\";\nimport type { DataAttributes } from \"../types\";\nimport {\n makePrefixer,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\nimport checkboxCss from \"./Checkbox.css\";\nimport { CheckboxIcon } from \"./CheckboxIcon\";\nimport { useCheckboxGroup } from \"./internal/useCheckboxGroup\";\n\nconst withBaseName = makePrefixer(\"saltCheckbox\");\nexport interface CheckboxProps\n extends Omit<\n InputHTMLAttributes<HTMLLabelElement>,\n \"onChange\" | \"onBlur\" | \"onFocus\"\n > {\n /**\n * If `true`, the checkbox will be checked.\n */\n checked?: boolean;\n /**\n * Whether the checkbox component is checked by default\n * This will be disregarded if checked is already set.\n */\n defaultChecked?: boolean;\n /**\n * If `true`, the checkbox will be disabled.\n */\n disabled?: boolean;\n /**\n * **Deprecated**: Use validationStatus instead\n * If `true`, the checkbox will be in the error state.\n */\n error?: boolean;\n /**\n * If true, the checkbox appears indeterminate. A data-indeterminate attribute is set on the input.\n */\n indeterminate?: boolean;\n /**\n * Properties applied to the input element.\n */\n inputProps?: Partial<InputHTMLAttributes<HTMLInputElement>> & DataAttributes;\n /**\n * Used to access the hidden `<input>` element.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * The label to be shown next to the checkbox.\n */\n label?: ReactNode;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * Callback when checkbox loses focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Callback when checked state is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Callback when checkbox gains focus.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * The value of the checkbox.\n */\n value?: string;\n /**\n * Validation status, one of \"warning\" | \"error\" | \"success\"\n *\n * Checkbox has styling variants for \"error\" and \"warning\".\n * No visual styling will be applied on \"success\" variant.\n */\n validationStatus?: AdornmentValidationStatus;\n}\n\nexport const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n function Checkbox(\n {\n checked: checkedProp,\n className,\n defaultChecked,\n disabled: disabledProp,\n error,\n indeterminate,\n inputProps = {},\n inputRef: inputRefProp,\n label,\n name,\n onBlur,\n onChange,\n onFocus,\n value,\n validationStatus: validationStatusProp,\n readOnly: readOnlyProp,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox\",\n css: checkboxCss,\n window: targetWindow,\n });\n const checkboxGroup = useCheckboxGroup();\n\n const {\n \"aria-describedby\": inputDescribedBy,\n \"aria-labelledby\": inputLabelledBy,\n className: inputClassName,\n onChange: inputOnChange,\n ...restInputProps\n } = inputProps;\n\n const checkboxGroupChecked =\n checkedProp ??\n (checkboxGroup?.checkedValues && value\n ? checkboxGroup.checkedValues.includes(value)\n : checkedProp);\n\n const [checked, setChecked] = useControlled({\n controlled: checkboxGroupChecked,\n default: Boolean(defaultChecked),\n name: \"Checkbox\",\n state: \"checked\",\n });\n\n const {\n a11yProps: formFieldA11yProps,\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const disabled =\n checkboxGroup?.disabled || formFieldDisabled || disabledProp;\n const readOnly =\n checkboxGroup?.readOnly || formFieldReadOnly || readOnlyProp;\n const validationStatus = !disabled\n ? (checkboxGroup?.validationStatus ??\n formFieldValidationStatus ??\n validationStatusProp)\n : undefined;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef(inputRefProp, inputRef);\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n // Workaround for https://github.com/facebook/react/issues/9023\n if (event.nativeEvent.defaultPrevented || readOnly) {\n return;\n }\n\n const value = event.target.checked;\n setChecked(value);\n onChange?.(event);\n inputOnChange?.(event);\n checkboxGroup?.onChange?.(event);\n };\n\n useIsomorphicLayoutEffect(() => {\n if (inputRef.current != null) {\n inputRef.current.indeterminate = indeterminate ?? false;\n }\n }, [indeterminate]);\n\n return (\n <label\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"readOnly\")]: readOnly,\n [withBaseName(\"error\")]: error /* **Deprecated** */,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <input\n aria-readonly={readOnly || undefined}\n aria-describedby={clsx(\n checkboxGroup === undefined\n ? formFieldA11yProps?.[\"aria-describedby\"]\n : undefined,\n inputDescribedBy,\n )}\n aria-labelledby={clsx(\n checkboxGroup === undefined\n ? formFieldA11yProps?.[\"aria-labelledby\"]\n : undefined,\n inputLabelledBy,\n )}\n name={name}\n value={value}\n checked={checked}\n className={clsx(withBaseName(\"input\"), inputClassName)}\n data-indeterminate={indeterminate}\n defaultChecked={defaultChecked}\n disabled={disabled}\n readOnly={readOnly}\n onBlur={onBlur}\n onChange={handleChange}\n onFocus={onFocus}\n type=\"checkbox\"\n ref={handleInputRef}\n {...restInputProps}\n />\n <CheckboxIcon\n checked={checked}\n disabled={disabled}\n readOnly={readOnly}\n indeterminate={indeterminate}\n validationStatus={validationStatus}\n error={error}\n />\n {label}\n </label>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Checkbox","useWindow","useComponentCssInjection","checkboxCss","useCheckboxGroup","useControlled","useFormFieldProps","useRef","useForkRef","value","useIsomorphicLayoutEffect","jsxs","clsx","jsx","CheckboxIcon"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../src/checkbox/Checkbox.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n useRef,\n} from \"react\";\nimport { useFormFieldProps } from \"../form-field-context\";\nimport type { AdornmentValidationStatus } from \"../status-adornment\";\nimport type { DataAttributes } from \"../types\";\nimport {\n makePrefixer,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\nimport checkboxCss from \"./Checkbox.css\";\nimport { CheckboxIcon } from \"./CheckboxIcon\";\nimport { useCheckboxGroup } from \"./internal/useCheckboxGroup\";\n\nconst withBaseName = makePrefixer(\"saltCheckbox\");\nexport interface CheckboxProps\n extends Omit<\n InputHTMLAttributes<HTMLLabelElement>,\n \"onChange\" | \"onBlur\" | \"onFocus\"\n > {\n /**\n * If `true`, the checkbox will be checked.\n */\n checked?: boolean;\n /**\n * Whether the checkbox component is checked by default\n * This will be disregarded if checked is already set.\n */\n defaultChecked?: boolean;\n /**\n * If `true`, the checkbox will be disabled.\n */\n disabled?: boolean;\n /**\n * **Deprecated**: Use validationStatus instead\n * If `true`, the checkbox will be in the error state.\n */\n error?: boolean;\n /**\n * If true, the checkbox appears indeterminate. A data-indeterminate attribute is set on the input.\n */\n indeterminate?: boolean;\n /**\n * Properties applied to the input element.\n */\n inputProps?: Partial<InputHTMLAttributes<HTMLInputElement>> & DataAttributes;\n /**\n * Used to access the hidden `<input>` element.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * The label to be shown next to the checkbox.\n */\n label?: ReactNode;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * Callback when checkbox loses focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Callback when checked state is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Callback when checkbox gains focus.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * The value of the checkbox.\n */\n value?: string;\n /**\n * Validation status, one of \"warning\" | \"error\" | \"success\"\n *\n * Checkbox has styling variants for \"error\" and \"warning\".\n * No visual styling will be applied on \"success\" variant.\n */\n validationStatus?: AdornmentValidationStatus;\n}\n\nexport const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n function Checkbox(\n {\n checked: checkedProp,\n className,\n defaultChecked,\n disabled: disabledProp,\n error,\n indeterminate,\n inputProps = {},\n inputRef: inputRefProp,\n label,\n name,\n onBlur,\n onChange,\n onFocus,\n value,\n validationStatus: validationStatusProp,\n readOnly: readOnlyProp,\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox\",\n css: checkboxCss,\n window: targetWindow,\n });\n const checkboxGroup = useCheckboxGroup();\n\n const {\n \"aria-describedby\": inputDescribedBy,\n \"aria-labelledby\": inputLabelledBy,\n className: inputClassName,\n onChange: inputOnChange,\n ...restInputProps\n } = inputProps;\n\n const checkboxGroupChecked =\n checkedProp ??\n (checkboxGroup?.checkedValues && value\n ? checkboxGroup.checkedValues.includes(value)\n : checkedProp);\n\n const [checked, setChecked] = useControlled({\n controlled: checkboxGroupChecked,\n default: Boolean(defaultChecked),\n name: \"Checkbox\",\n state: \"checked\",\n });\n\n const {\n a11yProps: formFieldA11yProps,\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const disabled =\n checkboxGroup?.disabled || formFieldDisabled || disabledProp;\n const readOnly =\n checkboxGroup?.readOnly || formFieldReadOnly || readOnlyProp;\n const validationStatus = !disabled\n ? (checkboxGroup?.validationStatus ??\n formFieldValidationStatus ??\n validationStatusProp)\n : undefined;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef(inputRefProp, inputRef);\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n // Workaround for https://github.com/facebook/react/issues/9023\n if (event.nativeEvent.defaultPrevented || readOnly) {\n return;\n }\n\n const value = event.target.checked;\n setChecked(value);\n onChange?.(event);\n inputOnChange?.(event);\n checkboxGroup?.onChange?.(event);\n };\n\n useIsomorphicLayoutEffect(() => {\n if (inputRef.current != null) {\n inputRef.current.indeterminate = indeterminate ?? false;\n }\n }, [indeterminate]);\n\n return (\n <label\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"readOnly\")]: readOnly,\n [withBaseName(\"error\")]: error /* **Deprecated** */,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <input\n aria-readonly={readOnly || undefined}\n aria-describedby={\n clsx(\n checkboxGroup === undefined\n ? formFieldA11yProps?.[\"aria-describedby\"]\n : undefined,\n inputDescribedBy,\n ) || undefined\n }\n aria-labelledby={\n clsx(\n checkboxGroup === undefined\n ? formFieldA11yProps?.[\"aria-labelledby\"]\n : undefined,\n inputLabelledBy,\n ) || undefined\n }\n name={name}\n value={value}\n checked={checked}\n className={clsx(withBaseName(\"input\"), inputClassName)}\n data-indeterminate={indeterminate}\n defaultChecked={defaultChecked}\n disabled={disabled}\n readOnly={readOnly}\n onBlur={onBlur}\n onChange={handleChange}\n onFocus={onFocus}\n type=\"checkbox\"\n ref={handleInputRef}\n {...restInputProps}\n />\n <CheckboxIcon\n checked={checked}\n readOnly={readOnly}\n indeterminate={indeterminate}\n validationStatus={validationStatus}\n error={error}\n />\n {label}\n </label>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Checkbox","useWindow","useComponentCssInjection","checkboxCss","useCheckboxGroup","useControlled","useFormFieldProps","useRef","useForkRef","value","useIsomorphicLayoutEffect","jsxs","clsx","jsx","CheckboxIcon"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltCheckboxIcon {\n --checkbox-size: var(--salt-size-selectable);\n width: var(--checkbox-size);\n min-width: var(--checkbox-size);\n height: var(--checkbox-size);\n min-height: var(--checkbox-size);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor);\n border-radius: var(--salt-palette-corner-weaker, 0);\n color: var(--salt-selectable-foreground);\n background: var(--salt-container-primary-background);\n position: relative;\n --saltIcon-size: 100%;\n display: flex;\n /* Using overflow:hidden here causes a thin white line */\n clip-path: border-box;\n box-sizing: border-box;\n}\n\n.saltCheckboxIcon-checked,\n.saltCheckbox:hover .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox:hover .saltCheckboxIcon,\n.saltCheckbox:hover .saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-disabled,\n.saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate,\n.saltCheckbox:hover .saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor-disabled);\n background: var(--salt-container-primary-background-disabled);\n color: var(--salt-selectable-foreground-disabled);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-checked.saltCheckboxIcon-disabled {\n border-color: var(--salt-selectable-borderColor-selectedDisabled);\n color: var(--salt-selectable-foreground-selectedDisabled);\n}\n\n.saltCheckboxIcon-indeterminate::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: calc(var(--checkbox-size) - 6px);\n height: 2px;\n background: currentColor;\n transform: translate(-50%, -50%);\n}\n\n.saltCheckboxIcon-error,\n.saltCheckbox:hover .saltCheckboxIcon-error {\n color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n outline-color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckboxIcon-warning,\n.saltCheckbox:hover .saltCheckboxIcon-warning {\n color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n outline-color: var(--salt-status-warning-foreground-decorative);\n}\n\n.saltCheckboxIcon-readOnly,\n.saltCheckbox:hover .saltCheckboxIcon-readOnly,\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-readOnly {\n border-color: var(--salt-selectable-borderColor-readonly);\n border-style: var(--salt-borderStyle-dashed);\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCheckboxIcon > svg {\n position: absolute;\n /* Ensure a gap doesn't appear when device scaling is used */\n transform: scale(1.01);\n}\n";
3
+ var css_248z = ".saltCheckboxIcon {\n --checkbox-size: var(--salt-size-selectable);\n width: var(--checkbox-size);\n min-width: var(--checkbox-size);\n height: var(--checkbox-size);\n min-height: var(--checkbox-size);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor);\n border-radius: var(--salt-palette-corner-weaker, 0);\n color: var(--salt-selectable-foreground);\n background: var(--salt-container-primary-background);\n position: relative;\n --saltIcon-size: 100%;\n display: flex;\n /* Using overflow:hidden here causes a thin white line */\n clip-path: border-box;\n box-sizing: border-box;\n}\n\n.saltCheckboxIcon-checked,\n.saltCheckbox:hover .saltCheckboxIcon-checked {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckbox:hover .saltCheckboxIcon,\n.saltCheckbox:hover .saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor-hover);\n color: var(--salt-selectable-foreground-hover);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-indeterminate {\n border-color: var(--salt-selectable-borderColor);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-disabled,\n.saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate,\n.saltCheckbox:hover .saltCheckboxIcon-disabled.saltCheckboxIcon-indeterminate {\n opacity: 0.4;\n\n border-color: var(--salt-selectable-borderColor);\n background: var(--salt-container-primary-background);\n color: var(--salt-selectable-foreground);\n}\n\n.saltCheckboxIcon-checked.saltCheckboxIcon-disabled,\n.saltCheckbox:hover .saltCheckboxIcon-checked.saltCheckboxIcon-disabled {\n border-color: var(--salt-selectable-borderColor-selected);\n color: var(--salt-selectable-foreground-selected);\n}\n\n.saltCheckboxIcon-indeterminate::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: calc(var(--checkbox-size) - 6px);\n height: 2px;\n background: currentColor;\n transform: translate(-50%, -50%);\n}\n\n.saltCheckboxIcon-error,\n.saltCheckbox:hover .saltCheckboxIcon-error {\n color: var(--salt-status-error-foreground-decorative);\n border-color: var(--salt-status-error-borderColor);\n outline-color: var(--salt-status-error-foreground-decorative);\n}\n\n.saltCheckboxIcon-warning,\n.saltCheckbox:hover .saltCheckboxIcon-warning {\n color: var(--salt-status-warning-foreground-decorative);\n border-color: var(--salt-status-warning-borderColor);\n outline-color: var(--salt-status-warning-foreground-decorative);\n}\n\n.saltCheckboxIcon-readOnly,\n.saltCheckbox:hover .saltCheckboxIcon-readOnly,\n.saltCheckbox-input:focus-visible + .saltCheckboxIcon-readOnly {\n border-color: var(--salt-selectable-borderColor-readonly);\n border-style: var(--salt-borderStyle-dashed);\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCheckboxIcon > svg {\n position: absolute;\n /* Ensure a gap doesn't appear when device scaling is used */\n transform: scale(1.01);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=CheckboxIcon.css.js.map
@@ -39,6 +39,8 @@ const Dialog = React.forwardRef(
39
39
  disableScrim,
40
40
  idProp,
41
41
  initialFocus,
42
+ id,
43
+ "aria-labelledby": ariaLabelledBy,
42
44
  ...rest
43
45
  } = props;
44
46
  const targetWindow = window.useWindow();
@@ -47,9 +49,10 @@ const Dialog = React.forwardRef(
47
49
  css: Dialog$1,
48
50
  window: targetWindow
49
51
  });
50
- const id = useId.useId(idProp);
52
+ const dialogId = useId.useId(id);
51
53
  const currentBreakpoint = useResponsiveProp.useCurrentBreakpoint();
52
54
  const [showComponent, setShowComponent] = React.useState(false);
55
+ const [headerId, setHeaderId] = React.useState(idProp);
53
56
  const { context, floating, elements } = useFloatingUI.useFloatingUI({
54
57
  open: showComponent,
55
58
  onOpenChange
@@ -71,14 +74,18 @@ const Dialog = React.forwardRef(
71
74
  return () => clearTimeout(animate);
72
75
  }
73
76
  }, [open, showComponent]);
74
- const contextValue = React.useMemo(() => ({ status, id }), [status, id]);
77
+ const contextValue = React.useMemo(
78
+ () => ({ status, id: headerId, setId: setHeaderId, dialogId }),
79
+ [status, headerId, dialogId]
80
+ );
75
81
  return /* @__PURE__ */ jsxRuntime.jsx(DialogContext.DialogContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(ConditionalScrimWrapper, { condition: showComponent && !disableScrim, children: /* @__PURE__ */ jsxRuntime.jsx(
76
82
  FloatingComponent,
77
83
  {
84
+ id: dialogId,
78
85
  open: showComponent,
79
86
  role: "dialog",
80
87
  "aria-modal": "true",
81
- "aria-labelledby": id,
88
+ "aria-labelledby": clsx.clsx(ariaLabelledBy, headerId) || void 0,
82
89
  ref: floatingRef,
83
90
  width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
84
91
  height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","sources":["../src/dialog/Dialog.tsx"],"sourcesContent":["import {\n type FloatingFocusManager,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentProps,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Scrim } from \"../scrim\";\nimport type { ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n useCurrentBreakpoint,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n} from \"../utils\";\nimport dialogCss from \"./Dialog.css\";\nimport { DialogContext } from \"./DialogContext\";\n\ninterface ConditionalScrimWrapperProps {\n children?: ReactNode;\n condition: boolean;\n}\n\nexport const ConditionalScrimWrapper = ({\n condition,\n children,\n}: ConditionalScrimWrapperProps) => {\n return condition ? <Scrim fixed>{children}</Scrim> : <>{children} </>;\n};\n\nexport interface DialogProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The status of the Dialog\n * */\n status?: ValidationStatus;\n /**\n * Which element to initially focus. Can be either a number (tabbable index as specified by the order) or a ref.\n * Default value is 0 (first tabbable element).\n * */\n initialFocus?: ComponentProps<typeof FloatingFocusManager>[\"initialFocus\"];\n /**\n * Size of the Dialog\n * */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Prevent the dialog closing on click away\n * */\n disableDismiss?: boolean;\n /**\n * Prevent Scrim from rendering\n * */\n disableScrim?: boolean;\n /**\n * Optional id prop\n * Used for accessibility purposes to announce the title and subtitle when using a screen reader\n * */\n idProp?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltDialog\");\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n function Dialog(props, ref) {\n const {\n children,\n className,\n open = false,\n onOpenChange,\n status,\n disableDismiss,\n size = \"medium\",\n disableScrim,\n idProp,\n initialFocus,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog\",\n css: dialogCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n\n const currentBreakpoint = useCurrentBreakpoint();\n\n const [showComponent, setShowComponent] = useState(false);\n\n const { context, floating, elements } = useFloatingUI({\n open: showComponent,\n onOpenChange,\n });\n\n const { getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { enabled: !disableDismiss }),\n ]);\n\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const floatingRef = useForkRef<HTMLDivElement>(floating, ref);\n\n useEffect(() => {\n if (open && !showComponent) {\n setShowComponent(true);\n }\n\n if (!open && showComponent) {\n const animate = setTimeout(() => {\n setShowComponent(false);\n }, 300); // var(--salt-duration-perceptible)\n return () => clearTimeout(animate);\n }\n }, [open, showComponent]);\n\n const contextValue = useMemo(() => ({ status, id }), [status, id]);\n\n return (\n <DialogContext.Provider value={contextValue}>\n <ConditionalScrimWrapper condition={showComponent && !disableScrim}>\n <FloatingComponent\n open={showComponent}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={id}\n ref={floatingRef}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n lockScroll\n focusManagerProps={{\n context: context,\n initialFocus,\n }}\n className={clsx(\n withBaseName(),\n withBaseName(size, currentBreakpoint),\n {\n [withBaseName(\"enterAnimation\")]: open,\n [withBaseName(\"exitAnimation\")]: !open,\n [withBaseName(status as string)]: status,\n },\n className,\n )}\n onAnimationEnd={() => {\n if (!open && showComponent) {\n setShowComponent(false);\n }\n }}\n {...getFloatingProps()}\n {...rest}\n >\n {children}\n </FloatingComponent>\n </ConditionalScrimWrapper>\n </DialogContext.Provider>\n );\n },\n);\n"],"names":["jsx","Scrim","jsxs","Fragment","makePrefixer","forwardRef","Dialog","useWindow","useComponentCssInjection","dialogCss","useId","useCurrentBreakpoint","useState","useFloatingUI","useInteractions","useClick","useDismiss","useFloatingComponent","useForkRef","useEffect","useMemo","DialogContext","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","sources":["../src/dialog/Dialog.tsx"],"sourcesContent":["import {\n type FloatingFocusManager,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentProps,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Scrim } from \"../scrim\";\nimport type { ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n useCurrentBreakpoint,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n} from \"../utils\";\nimport dialogCss from \"./Dialog.css\";\nimport { DialogContext } from \"./DialogContext\";\n\ninterface ConditionalScrimWrapperProps {\n children?: ReactNode;\n condition: boolean;\n}\n\nexport const ConditionalScrimWrapper = ({\n condition,\n children,\n}: ConditionalScrimWrapperProps) => {\n return condition ? <Scrim fixed>{children}</Scrim> : <>{children} </>;\n};\n\nexport interface DialogProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The status of the Dialog\n * */\n status?: ValidationStatus;\n /**\n * Which element to initially focus. Can be either a number (tabbable index as specified by the order) or a ref.\n * Default value is 0 (first tabbable element).\n * */\n initialFocus?: ComponentProps<typeof FloatingFocusManager>[\"initialFocus\"];\n /**\n * Size of the Dialog\n * */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Prevent the dialog closing on click away\n * */\n disableDismiss?: boolean;\n /**\n * Prevent Scrim from rendering\n * */\n disableScrim?: boolean;\n /**\n * @deprecated IDs are now auto-generated internally for proper ARIA labeling.\n *\n * Optional id prop\n * Used for accessibility purposes to announce the title and subtitle when using a screen reader\n * */\n idProp?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltDialog\");\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n function Dialog(props, ref) {\n const {\n children,\n className,\n open = false,\n onOpenChange,\n status,\n disableDismiss,\n size = \"medium\",\n disableScrim,\n idProp,\n initialFocus,\n id,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog\",\n css: dialogCss,\n window: targetWindow,\n });\n\n const dialogId = useId(id);\n const currentBreakpoint = useCurrentBreakpoint();\n\n const [showComponent, setShowComponent] = useState(false);\n const [headerId, setHeaderId] = useState(idProp);\n\n const { context, floating, elements } = useFloatingUI({\n open: showComponent,\n onOpenChange,\n });\n\n const { getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { enabled: !disableDismiss }),\n ]);\n\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const floatingRef = useForkRef<HTMLDivElement>(floating, ref);\n\n useEffect(() => {\n if (open && !showComponent) {\n setShowComponent(true);\n }\n\n if (!open && showComponent) {\n const animate = setTimeout(() => {\n setShowComponent(false);\n }, 300); // var(--salt-duration-perceptible)\n return () => clearTimeout(animate);\n }\n }, [open, showComponent]);\n\n const contextValue = useMemo(\n () => ({ status, id: headerId, setId: setHeaderId, dialogId }),\n [status, headerId, dialogId],\n );\n\n return (\n <DialogContext.Provider value={contextValue}>\n <ConditionalScrimWrapper condition={showComponent && !disableScrim}>\n <FloatingComponent\n id={dialogId}\n open={showComponent}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={clsx(ariaLabelledBy, headerId) || undefined}\n ref={floatingRef}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n lockScroll\n focusManagerProps={{\n context: context,\n initialFocus,\n }}\n className={clsx(\n withBaseName(),\n withBaseName(size, currentBreakpoint),\n {\n [withBaseName(\"enterAnimation\")]: open,\n [withBaseName(\"exitAnimation\")]: !open,\n [withBaseName(status as string)]: status,\n },\n className,\n )}\n onAnimationEnd={() => {\n if (!open && showComponent) {\n setShowComponent(false);\n }\n }}\n {...getFloatingProps()}\n {...rest}\n >\n {children}\n </FloatingComponent>\n </ConditionalScrimWrapper>\n </DialogContext.Provider>\n );\n },\n);\n"],"names":["jsx","Scrim","jsxs","Fragment","makePrefixer","forwardRef","Dialog","useWindow","useComponentCssInjection","dialogCss","useId","useCurrentBreakpoint","useState","useFloatingUI","useInteractions","useClick","useDismiss","useFloatingComponent","useForkRef","useEffect","useMemo","DialogContext","clsx"],"mappings":"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"}
@@ -13,6 +13,7 @@ var useResizeObserver = require('../utils/useResizeObserver.js');
13
13
  require('../salt-provider/SaltProvider.js');
14
14
  require('../viewport/ViewportProvider.js');
15
15
  var DialogContent$1 = require('./DialogContent.css.js');
16
+ var DialogContext = require('./DialogContext.js');
16
17
 
17
18
  const withBaseName = makePrefixer.makePrefixer("saltDialogContent");
18
19
  const DialogContent = React.forwardRef(
@@ -41,13 +42,19 @@ const DialogContent = React.forwardRef(
41
42
  const checkOverflow = React.useCallback(() => {
42
43
  if (!divRef.current) return;
43
44
  setIsOverflowing(
44
- divRef.current.scrollHeight > divRef.current.offsetHeight
45
+ divRef.current.scrollWidth > divRef.current.offsetWidth || divRef.current.scrollHeight > divRef.current.offsetHeight
45
46
  );
46
47
  }, []);
47
48
  useResizeObserver.useResizeObserver({ ref: divRef, onResize: checkOverflow });
48
49
  useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
49
50
  checkOverflow();
50
51
  }, [checkOverflow]);
52
+ const { dialogId, id: headerId } = DialogContext.useDialogContext();
53
+ const overflowProps = isOverflowing ? {
54
+ role: "region",
55
+ tabIndex: 0,
56
+ "aria-labelledby": headerId ?? dialogId
57
+ } : {};
51
58
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(withBaseName(), className), ...rest, ref, children: /* @__PURE__ */ jsxRuntime.jsx(
52
59
  "div",
53
60
  {
@@ -58,6 +65,7 @@ const DialogContent = React.forwardRef(
58
65
  [withBaseName("scrollTop")]: isOverflowing && canScrollUp,
59
66
  [withBaseName("scrollBottom")]: isOverflowing && canScrollDown
60
67
  }),
68
+ ...overflowProps,
61
69
  children
62
70
  }
63
71
  ) });
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContent.js","sources":["../src/dialog/DialogContent.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n makePrefixer,\n useIsomorphicLayoutEffect,\n useResizeObserver,\n} from \"../utils\";\n\nimport dialogContentCss from \"./DialogContent.css\";\n\nconst withBaseName = makePrefixer(\"saltDialogContent\");\n\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of Dialog Content\n */\n children?: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(props, ref) {\n const { children, className, ...rest } = props;\n const [canScrollUp, setCanScrollUp] = useState(false);\n const [canScrollDown, setCanScrollDown] = useState(true);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const divRef = useRef<HTMLDivElement>(null);\n\n const handleScroll = () => {\n targetWindow?.requestAnimationFrame(() => {\n const container = divRef.current;\n if (!container) return;\n setCanScrollUp(container.scrollTop > 0);\n setCanScrollDown(\n container.scrollHeight -\n container.scrollTop -\n container.clientHeight >\n 1,\n );\n });\n };\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog-content\",\n css: dialogContentCss,\n window: targetWindow,\n });\n\n const checkOverflow = useCallback(() => {\n if (!divRef.current) return;\n setIsOverflowing(\n divRef.current.scrollHeight > divRef.current.offsetHeight,\n );\n }, []);\n\n useResizeObserver({ ref: divRef, onResize: checkOverflow });\n\n useIsomorphicLayoutEffect(() => {\n checkOverflow();\n }, [checkOverflow]);\n\n return (\n <div className={clsx(withBaseName(), className)} {...rest} ref={ref}>\n <div\n onScrollCapture={handleScroll}\n ref={divRef}\n className={clsx(withBaseName(\"inner\"), {\n [withBaseName(\"overflow\")]: isOverflowing,\n [withBaseName(\"scrollTop\")]: isOverflowing && canScrollUp,\n [withBaseName(\"scrollBottom\")]: isOverflowing && canScrollDown,\n })}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DialogContent","useState","useRef","useWindow","useComponentCssInjection","dialogContentCss","useCallback","useResizeObserver","useIsomorphicLayoutEffect","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,YAAA,GAAeA,0BAAa,mBAAmB,CAAA;AAS9C,MAAM,aAAA,GAAgBC,gBAAA;AAAA,EAC3B,SAASC,cAAAA,CAAc,KAAA,EAAO,GAAA,EAAK;AACjC,IAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AACzC,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,KAAK,CAAA;AACpD,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,IAAI,CAAA;AACvD,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAExD,IAAA,MAAM,MAAA,GAASC,aAAuB,IAAI,CAAA;AAE1C,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,sBAAsB,MAAM;AACxC,QAAA,MAAM,YAAY,MAAA,CAAO,OAAA;AACzB,QAAA,IAAI,CAAC,SAAA,EAAW;AAChB,QAAA,cAAA,CAAe,SAAA,CAAU,YAAY,CAAC,CAAA;AACtC,QAAA,gBAAA;AAAA,UACE,SAAA,CAAU,YAAA,GACR,SAAA,CAAU,SAAA,GACV,UAAU,YAAA,GACV;AAAA,SACJ;AAAA,MACF,CAAA,CAAA;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAKC,eAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,aAAA,GAAgBC,kBAAY,MAAM;AACtC,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACrB,MAAA,gBAAA;AAAA,QACE,MAAA,CAAO,OAAA,CAAQ,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ;AAAA,OAC/C;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAAC,mCAAA,CAAkB,EAAE,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,eAAe,CAAA;AAE1D,IAAAC,mDAAA,CAA0B,MAAM;AAC9B,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,SAAA,CAAK,YAAA,IAAgB,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,GAAA,EACzD,QAAA,kBAAAD,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,eAAA,EAAiB,YAAA;AAAA,QACjB,GAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAWC,SAAA,CAAK,YAAA,CAAa,OAAO,CAAA,EAAG;AAAA,UACrC,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,aAAA;AAAA,UAC5B,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG,aAAA,IAAiB,WAAA;AAAA,UAC9C,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,aAAA,IAAiB;AAAA,SAClD,CAAA;AAAA,QAEA;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"DialogContent.js","sources":["../src/dialog/DialogContent.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n makePrefixer,\n useIsomorphicLayoutEffect,\n useResizeObserver,\n} from \"../utils\";\nimport dialogContentCss from \"./DialogContent.css\";\nimport { useDialogContext } from \"./DialogContext\";\n\nconst withBaseName = makePrefixer(\"saltDialogContent\");\n\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The content of Dialog Content\n */\n children?: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(props, ref) {\n const { children, className, ...rest } = props;\n const [canScrollUp, setCanScrollUp] = useState(false);\n const [canScrollDown, setCanScrollDown] = useState(true);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n const divRef = useRef<HTMLDivElement>(null);\n\n const handleScroll = () => {\n targetWindow?.requestAnimationFrame(() => {\n const container = divRef.current;\n if (!container) return;\n setCanScrollUp(container.scrollTop > 0);\n setCanScrollDown(\n container.scrollHeight -\n container.scrollTop -\n container.clientHeight >\n 1,\n );\n });\n };\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog-content\",\n css: dialogContentCss,\n window: targetWindow,\n });\n\n const checkOverflow = useCallback(() => {\n if (!divRef.current) return;\n setIsOverflowing(\n divRef.current.scrollWidth > divRef.current.offsetWidth ||\n divRef.current.scrollHeight > divRef.current.offsetHeight,\n );\n }, []);\n\n useResizeObserver({ ref: divRef, onResize: checkOverflow });\n\n useIsomorphicLayoutEffect(() => {\n checkOverflow();\n }, [checkOverflow]);\n\n const { dialogId, id: headerId } = useDialogContext();\n\n const overflowProps = isOverflowing\n ? {\n role: \"region\",\n tabIndex: 0,\n \"aria-labelledby\": headerId ?? dialogId,\n }\n : {};\n\n return (\n <div className={clsx(withBaseName(), className)} {...rest} ref={ref}>\n <div\n onScrollCapture={handleScroll}\n ref={divRef}\n className={clsx(withBaseName(\"inner\"), {\n [withBaseName(\"overflow\")]: isOverflowing,\n [withBaseName(\"scrollTop\")]: isOverflowing && canScrollUp,\n [withBaseName(\"scrollBottom\")]: isOverflowing && canScrollDown,\n })}\n {...overflowProps}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DialogContent","useState","useRef","useWindow","useComponentCssInjection","dialogContentCss","useCallback","useResizeObserver","useIsomorphicLayoutEffect","useDialogContext","jsx","clsx"],"mappings":"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"}
@@ -1,11 +1,26 @@
1
1
  'use strict';
2
2
 
3
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');
4
11
 
5
- const DialogContext = React.createContext({
6
- status: void 0,
7
- id: ""
8
- });
12
+ const DialogContext = createContext.createContext(
13
+ "DialogContext",
14
+ {
15
+ status: void 0,
16
+ id: void 0,
17
+ setId: () => {
18
+ },
19
+ dialogId: void 0,
20
+ setDialogId: () => {
21
+ }
22
+ }
23
+ );
9
24
  const useDialogContext = () => {
10
25
  return React.useContext(DialogContext);
11
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContext.js","sources":["../src/dialog/DialogContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ValidationStatus } from \"../status-indicator\";\n\nexport const DialogContext = createContext<{\n status?: ValidationStatus;\n id: string | undefined;\n}>({\n status: undefined,\n id: \"\",\n});\n\nexport const useDialogContext = () => {\n return useContext(DialogContext);\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAGO,MAAM,gBAAgBA,mBAAA,CAG1B;AAAA,EACD,MAAA,EAAQ,MAAA;AAAA,EACR,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,mBAAmB,MAAM;AACpC,EAAA,OAAOC,iBAAW,aAAa,CAAA;AACjC;;;;;"}
1
+ {"version":3,"file":"DialogContext.js","sources":["../src/dialog/DialogContext.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport type { ValidationStatus } from \"../status-indicator\";\nimport { createContext } from \"../utils\";\n\nexport interface DialogContextValue {\n status?: ValidationStatus;\n id?: string;\n setId?: (id: string) => void;\n dialogId?: string;\n setDialogId?: (id: string) => void;\n}\n\nexport const DialogContext = createContext<DialogContextValue>(\n \"DialogContext\",\n {\n status: undefined,\n id: undefined,\n setId: () => {},\n dialogId: undefined,\n setDialogId: () => {},\n },\n);\n\nexport const useDialogContext = () => {\n return useContext(DialogContext);\n};\n"],"names":["createContext","useContext"],"mappings":";;;;;;;;;;;AAYO,MAAM,aAAA,GAAgBA,2BAAA;AAAA,EAC3B,eAAA;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,EAAA,EAAI,MAAA;AAAA,IACJ,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,aAAa,MAAM;AAAA,IAAC;AAAA;AAExB;AAEO,MAAM,mBAAmB,MAAM;AACpC,EAAA,OAAOC,iBAAW,aAAa,CAAA;AACjC;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to the root element */\n.saltDialogHeader {\n padding-bottom: var(--salt-spacing-300);\n padding-left: var(--salt-spacing-300);\n padding-right: var(--salt-spacing-300);\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n box-sizing: border-box;\n}\n.saltDialogHeader-header {\n margin: 0;\n}\n\n.saltDialogHeader-container {\n flex-grow: 1;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-50);\n padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);\n align-items: flex-start;\n min-width: 0;\n word-break: break-word;\n}\n\n.saltDialogHeader-header > .saltText {\n margin: 0;\n}\n\n.saltDialogHeader-actionsContainer {\n align-self: flex-start;\n}\n\n/* Styles applied to the status indicator icon overriding its default size */\n.saltDialogHeader .saltStatusIndicator.saltIcon {\n --icon-size: var(--salt-text-h2-lineHeight);\n padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);\n}\n\n/* Styles applied to DialogHeader when accent={true} */\n.saltDialogHeader-withAccent {\n position: relative;\n}\n\n.saltDialogHeader-withAccent::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n bottom: var(--salt-spacing-300);\n width: var(--salt-size-bar);\n background: var(--salt-accent-background);\n}\n";
3
+ var css_248z = "/* Styles applied to the root element */\n.saltDialogHeader {\n padding-bottom: var(--salt-spacing-300);\n padding-left: var(--salt-spacing-300);\n padding-right: var(--salt-spacing-300);\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n box-sizing: border-box;\n}\n.saltDialogHeader-header {\n margin: 0;\n}\n\n.saltDialogHeader-container {\n flex-grow: 1;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-50);\n padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);\n align-items: flex-start;\n min-width: 0;\n word-break: break-word;\n}\n\n.saltDialogHeader-header > .saltText {\n margin: 0;\n}\n\n.saltDialogHeader-actionsContainer {\n align-self: flex-start;\n}\n\n/* Styles applied to the status indicator icon overriding its default size */\n.saltDialogHeader .saltStatusIndicator.saltIcon {\n --icon-size: var(--salt-text-h2-lineHeight);\n padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);\n}\n\n/* Styles applied to DialogHeader when accent={true} */\n.saltDialogHeader-withAccent {\n position: relative;\n}\n\n.saltDialogHeader-withAccent::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n bottom: var(--salt-spacing-300);\n width: var(--salt-size-bar);\n background: var(--salt-sentiment-accent-background);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DialogHeader.css.js.map
@@ -15,7 +15,7 @@ require('../text/TextAction.js');
15
15
  require('../text/TextNotation.js');
16
16
  var makePrefixer = require('../utils/makePrefixer.js');
17
17
  require('../utils/useFloatingUI/useFloatingUI.js');
18
- require('../utils/useId.js');
18
+ var useId = require('../utils/useId.js');
19
19
  require('../salt-provider/SaltProvider.js');
20
20
  require('../viewport/ViewportProvider.js');
21
21
  var DialogContext = require('./DialogContext.js');
@@ -34,7 +34,11 @@ const DialogHeader = React.forwardRef(
34
34
  status: statusProp,
35
35
  ...rest
36
36
  } = props;
37
- const { status: statusContext, id } = DialogContext.useDialogContext();
37
+ const {
38
+ status: statusContext,
39
+ setId: setHeaderId,
40
+ id: contextHeaderId
41
+ } = DialogContext.useDialogContext();
38
42
  const targetWindow = window.useWindow();
39
43
  styles.useComponentCssInjection({
40
44
  testId: "salt-dialog-header",
@@ -42,10 +46,15 @@ const DialogHeader = React.forwardRef(
42
46
  window: targetWindow
43
47
  });
44
48
  const status = statusProp ?? statusContext;
49
+ const headerId = useId.useId(contextHeaderId);
50
+ React.useEffect(() => {
51
+ if (headerId) {
52
+ setHeaderId == null ? void 0 : setHeaderId(headerId);
53
+ }
54
+ }, [headerId, setHeaderId]);
45
55
  return /* @__PURE__ */ jsxRuntime.jsxs(
46
56
  "div",
47
57
  {
48
- id,
49
58
  className: clsx.clsx(
50
59
  withBaseName(),
51
60
  {
@@ -59,7 +68,7 @@ const DialogHeader = React.forwardRef(
59
68
  children: [
60
69
  status && /* @__PURE__ */ jsxRuntime.jsx(StatusIndicator.StatusIndicator, { status }),
61
70
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName("container"), children: [
62
- /* @__PURE__ */ jsxRuntime.jsxs(Headings.H2, { className: withBaseName("header"), children: [
71
+ /* @__PURE__ */ jsxRuntime.jsxs(Headings.H2, { id: headerId, className: withBaseName("header"), children: [
63
72
  preheader && /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { color: "primary", children: preheader }),
64
73
  header
65
74
  ] }),
@@ -1 +1 @@
1
- {"version":3,"file":"DialogHeader.js","sources":["../src/dialog/DialogHeader.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { StatusIndicator, type ValidationStatus } from \"../status-indicator\";\nimport { H2, Text } from \"../text\";\nimport { makePrefixer } from \"../utils\";\nimport { useDialogContext } from \"./DialogContext\";\nimport dialogHeaderCss from \"./DialogHeader.css\";\n\nconst withBaseName = makePrefixer(\"saltDialogHeader\");\n\nexport interface DialogHeaderProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The status of the Dialog\n */\n status?: ValidationStatus | undefined;\n /**\n * Displays the accent bar in the Dialog Title */\n disableAccent?: boolean;\n /**\n * Displays the header at the top of the Dialog\n */\n header: ReactNode;\n /**\n * Displays the preheader just above the header\n **/\n preheader?: ReactNode;\n /**\n * Description text is displayed just below the header\n **/\n description?: ReactNode;\n /**\n * Actions to be displayed in header\n */\n actions?: ReactNode;\n}\n\nexport const DialogHeader = forwardRef<HTMLDivElement, DialogHeaderProps>(\n function DialogHeader(props, ref) {\n const {\n className,\n description,\n disableAccent,\n actions,\n header,\n preheader,\n status: statusProp,\n ...rest\n } = props;\n const { status: statusContext, id } = useDialogContext();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog-header\",\n css: dialogHeaderCss,\n window: targetWindow,\n });\n\n const status = statusProp ?? statusContext;\n\n return (\n <div\n id={id}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"withAccent\")]: !disableAccent && !status,\n [withBaseName(status ?? \"\")]: !!status,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n {status && <StatusIndicator status={status} />}\n <div className={withBaseName(\"container\")}>\n <H2 className={withBaseName(\"header\")}>\n {preheader && <Text color=\"primary\">{preheader}</Text>}\n {header}\n </H2>\n {description && (\n <Text color=\"secondary\" className={withBaseName(\"description\")}>\n {description}\n </Text>\n )}\n </div>\n {actions && (\n <div className={withBaseName(\"actionsContainer\")}>{actions}</div>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DialogHeader","useDialogContext","useWindow","useComponentCssInjection","dialogHeaderCss","jsxs","clsx","jsx","StatusIndicator","H2","Text"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,0BAAa,kBAAkB,CAAA;AA4B7C,MAAM,YAAA,GAAeC,gBAAA;AAAA,EAC1B,SAASC,aAAAA,CAAa,KAAA,EAAO,GAAA,EAAK;AAChC,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,GAAG;AAAA,KACL,GAAI,KAAA;AACJ,IAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAe,EAAA,KAAOC,8BAAA,EAAiB;AAEvD,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAKC,cAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,SAAS,UAAA,IAAc,aAAA;AAE7B,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,SAAA,EAAWC,SAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAA;AAAA,YACjD,CAAC,YAAA,CAAa,MAAA,IAAU,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,WAClC;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA,oBAAUC,cAAA,CAACC,mCAAgB,MAAA,EAAgB,CAAA;AAAA,0BAC5CH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,WAAW,CAAA,EACtC,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAACI,WAAA,EAAA,EAAG,SAAA,EAAW,YAAA,CAAa,QAAQ,CAAA,EACjC,QAAA,EAAA;AAAA,cAAA,SAAA,oBAAaF,cAAA,CAACG,SAAA,EAAA,EAAK,KAAA,EAAM,SAAA,EAAW,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,cAC9C;AAAA,aAAA,EACH,CAAA;AAAA,YACC,WAAA,mCACEA,SAAA,EAAA,EAAK,KAAA,EAAM,aAAY,SAAA,EAAW,YAAA,CAAa,aAAa,CAAA,EAC1D,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EAEJ,CAAA;AAAA,UACC,2BACCH,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,YAAA,CAAa,kBAAkB,GAAI,QAAA,EAAA,OAAA,EAAQ;AAAA;AAAA;AAAA,KAE/D;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"DialogHeader.js","sources":["../src/dialog/DialogHeader.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useEffect,\n} from \"react\";\nimport { StatusIndicator, type ValidationStatus } from \"../status-indicator\";\nimport { H2, Text } from \"../text\";\nimport { makePrefixer, useId } from \"../utils\";\nimport { useDialogContext } from \"./DialogContext\";\nimport dialogHeaderCss from \"./DialogHeader.css\";\n\nconst withBaseName = makePrefixer(\"saltDialogHeader\");\n\nexport interface DialogHeaderProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The status of the Dialog\n */\n status?: ValidationStatus | undefined;\n /**\n * Displays the accent bar in the Dialog Title */\n disableAccent?: boolean;\n /**\n * Displays the header at the top of the Dialog\n */\n header: ReactNode;\n /**\n * Displays the preheader just above the header\n **/\n preheader?: ReactNode;\n /**\n * Description text is displayed just below the header\n **/\n description?: ReactNode;\n /**\n * Actions to be displayed in header\n */\n actions?: ReactNode;\n}\n\nexport const DialogHeader = forwardRef<HTMLDivElement, DialogHeaderProps>(\n function DialogHeader(props, ref) {\n const {\n className,\n description,\n disableAccent,\n actions,\n header,\n preheader,\n status: statusProp,\n ...rest\n } = props;\n const {\n status: statusContext,\n setId: setHeaderId,\n id: contextHeaderId,\n } = useDialogContext();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dialog-header\",\n css: dialogHeaderCss,\n window: targetWindow,\n });\n\n const status = statusProp ?? statusContext;\n const headerId = useId(contextHeaderId);\n\n useEffect(() => {\n if (headerId) {\n setHeaderId?.(headerId);\n }\n }, [headerId, setHeaderId]);\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"withAccent\")]: !disableAccent && !status,\n [withBaseName(status ?? \"\")]: !!status,\n },\n className,\n )}\n ref={ref}\n {...rest}\n >\n {status && <StatusIndicator status={status} />}\n <div className={withBaseName(\"container\")}>\n <H2 id={headerId} className={withBaseName(\"header\")}>\n {preheader && <Text color=\"primary\">{preheader}</Text>}\n {header}\n </H2>\n {description && (\n <Text color=\"secondary\" className={withBaseName(\"description\")}>\n {description}\n </Text>\n )}\n </div>\n {actions && (\n <div className={withBaseName(\"actionsContainer\")}>{actions}</div>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DialogHeader","useDialogContext","useWindow","useComponentCssInjection","dialogHeaderCss","useId","useEffect","jsxs","clsx","jsx","StatusIndicator","H2","Text"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAM,YAAA,GAAeA,0BAAa,kBAAkB,CAAA;AA4B7C,MAAM,YAAA,GAAeC,gBAAA;AAAA,EAC1B,SAASC,aAAAA,CAAa,KAAA,EAAO,GAAA,EAAK;AAChC,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,GAAG;AAAA,KACL,GAAI,KAAA;AACJ,IAAA,MAAM;AAAA,MACJ,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,WAAA;AAAA,MACP,EAAA,EAAI;AAAA,QACFC,8BAAA,EAAiB;AAErB,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,oBAAA;AAAA,MACR,GAAA,EAAKC,cAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,SAAS,UAAA,IAAc,aAAA;AAC7B,IAAA,MAAM,QAAA,GAAWC,YAAM,eAAe,CAAA;AAEtC,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,QAAA,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,EAAG,CAAC,QAAA,EAAU,WAAW,CAAC,CAAA;AAE1B,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,SAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAA;AAAA,YACjD,CAAC,YAAA,CAAa,MAAA,IAAU,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,WAClC;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA,oBAAUC,cAAA,CAACC,mCAAgB,MAAA,EAAgB,CAAA;AAAA,0BAC5CH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,WAAW,CAAA,EACtC,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAACI,eAAG,EAAA,EAAI,QAAA,EAAU,SAAA,EAAW,YAAA,CAAa,QAAQ,CAAA,EAC/C,QAAA,EAAA;AAAA,cAAA,SAAA,oBAAaF,cAAA,CAACG,SAAA,EAAA,EAAK,KAAA,EAAM,SAAA,EAAW,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,cAC9C;AAAA,aAAA,EACH,CAAA;AAAA,YACC,WAAA,mCACEA,SAAA,EAAA,EAAK,KAAA,EAAM,aAAY,SAAA,EAAW,YAAA,CAAa,aAAa,CAAA,EAC1D,QAAA,EAAA,WAAA,EACH;AAAA,WAAA,EAEJ,CAAA;AAAA,UACC,2BACCH,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,YAAA,CAAa,kBAAkB,GAAI,QAAA,EAAA,OAAA,EAAQ;AAAA;AAAA;AAAA,KAE/D;AAAA,EAEJ;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltDropdown {\n all: unset;\n box-sizing: border-box;\n min-width: 4em;\n width: 100%;\n background: var(--dropdown-background);\n min-height: var(--salt-size-base);\n border-radius: var(--salt-palette-corner-weak, 0);\n display: inline-flex;\n align-items: center;\n padding: 0 var(--salt-spacing-100);\n color: var(--dropdown-color);\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 letter-spacing: var(--salt-text-letterSpacing);\n position: relative;\n overflow: hidden;\n}\n\n.saltDropdown:hover {\n background: var(--dropdown-background-hover);\n cursor: var(--salt-cursor-hover);\n}\n\n.saltDropdown-bordered.saltDropdown {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--dropdown-borderColor);\n}\n\n.saltDropdown-bordered.saltDropdown:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--dropdown-borderColor-hover);\n}\n\n/* Style applied if focused or active when `bordered={true}` */\n.saltDropdown-bordered.saltDropdown:focus,\n.saltDropdown-bordered.saltDropdown:focus:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--dropdown-borderColor-active);\n}\n\n/* Styling when focused if `disabled={true}` or `readOnly={true}` when `bordered={true}` */\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"],\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"]:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDropdown-bordered.saltDropdown-disabled,\n.saltDropdown-bordered.saltDropdown-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDropdown-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--dropdown-borderColor);\n}\n\n.saltDropdown:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--dropdown-borderColor-hover);\n}\n\n.saltDropdown:focus .saltDropdown-activationIndicator,\n.saltDropdown:focus:hover .saltDropdown-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--dropdown-borderColor-active);\n}\n\n.saltDropdown[aria-readonly=\"true\"] .saltDropdown-activationIndicator,\n.saltDropdown[aria-readonly=\"true\"]:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDropdown-disabled .saltDropdown-activationIndicator,\n.saltDropdown-disabled:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDropdown-bordered .saltDropdown-activationIndicator,\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"] .saltDropdown-activationIndicator,\n.saltDropdown-bordered.saltDropdown-disabled:hover .saltDropdown-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDropdown-bordered.saltDropdown:focus .saltDropdown-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n.saltDropdown-primary {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-editable-primary-background);\n --dropdown-background-active: var(--salt-editable-primary-background-active);\n --dropdown-background-hover: var(--salt-editable-primary-background-hover);\n --dropdown-background-disabled: var(--salt-editable-primary-background-disabled);\n --dropdown-background-readonly: var(--salt-editable-primary-background-readonly);\n --dropdown-borderColor: var(--salt-editable-borderColor);\n --dropdown-borderColor-active: var(--salt-editable-borderColor-active);\n --dropdown-borderColor-hover: var(--salt-editable-borderColor-hover);\n --dropdown-outlineColor: var(--salt-focused-outlineColor);\n}\n\n.saltDropdown-secondary {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-editable-secondary-background);\n --dropdown-background-active: var(--salt-editable-secondary-background-active);\n --dropdown-background-hover: var(--salt-editable-secondary-background-active);\n --dropdown-background-disabled: var(--salt-editable-secondary-background-disabled);\n --dropdown-background-readonly: var(--salt-editable-secondary-background-readonly);\n --dropdown-borderColor: var(--salt-editable-borderColor);\n --dropdown-borderColor-active: var(--salt-editable-borderColor-active);\n --dropdown-borderColor-hover: var(--salt-editable-borderColor-hover);\n --dropdown-outlineColor: var(--salt-focused-outlineColor);\n}\n\n.saltDropdown-error {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-error-background);\n --dropdown-background-active: var(--salt-status-error-background);\n --dropdown-background-hover: var(--salt-status-error-background);\n --dropdown-background-readonly: var(--salt-status-error-background);\n --dropdown-borderColor: var(--salt-status-error-borderColor);\n --dropdown-borderColor-active: var(--salt-status-error-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-error-borderColor);\n --dropdown-outlineColor: var(--salt-status-error-borderColor);\n}\n\n.saltDropdown-warning {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-warning-background);\n --dropdown-background-active: var(--salt-status-warning-background);\n --dropdown-background-hover: var(--salt-status-warning-background);\n --dropdown-background-readonly: var(--salt-status-warning-background);\n --dropdown-borderColor: var(--salt-status-warning-borderColor);\n --dropdown-borderColor-active: var(--salt-status-warning-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-warning-borderColor);\n --dropdown-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n.saltDropdown-success {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-success-background);\n --dropdown-background-active: var(--salt-status-success-background);\n --dropdown-background-hover: var(--salt-status-success-background);\n --dropdown-background-readonly: var(--salt-status-success-background);\n --dropdown-borderColor: var(--salt-status-success-borderColor);\n --dropdown-borderColor-active: var(--salt-status-success-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-success-borderColor);\n --dropdown-outlineColor: var(--salt-status-success-borderColor);\n}\n\n.saltDropdown:focus,\n.saltDropdown:focus:hover {\n background: var(--dropdown-background-active);\n cursor: var(--salt-cursor-hover);\n outline: var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--dropdown-outlineColor);\n}\n\n.saltDropdown.saltDropdown[aria-readonly=\"true\"] {\n background: var(--dropdown-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltDropdown.saltDropdown:disabled,\n.saltDropdown.saltDropdown:disabled:hover {\n background: var(--dropdown-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--salt-content-primary-foreground-disabled);\n}\n\n.saltDropdown-content {\n flex: 1;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n text-wrap: nowrap;\n}\n\n.saltDropdown-placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n.saltDropdown-startAdornmentContainer {\n margin-right: var(--salt-spacing-100);\n}\n\n.saltDropdown .saltDropdown-toggle {\n margin-left: var(--salt-spacing-100);\n}\n";
3
+ var css_248z = ".saltDropdown {\n all: unset;\n box-sizing: border-box;\n min-width: 4em;\n width: 100%;\n background: var(--dropdown-background);\n min-height: var(--salt-size-base);\n border-radius: var(--salt-palette-corner-weak, 0);\n display: inline-flex;\n align-items: center;\n padding: 0 var(--salt-spacing-100);\n color: var(--dropdown-color);\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 letter-spacing: var(--salt-text-letterSpacing);\n position: relative;\n overflow: hidden;\n}\n\n.saltDropdown:hover {\n cursor: var(--salt-cursor-hover);\n}\n\n.saltDropdown-bordered.saltDropdown {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--dropdown-borderColor);\n}\n\n.saltDropdown-bordered.saltDropdown:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--dropdown-borderColor-hover);\n}\n\n/* Style applied if focused or active when `bordered={true}` */\n.saltDropdown-bordered.saltDropdown:focus,\n.saltDropdown-bordered.saltDropdown:focus:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--dropdown-borderColor-active);\n}\n\n/* Styling when focused if `disabled={true}` or `readOnly={true}` when `bordered={true}` */\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"],\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"]:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDropdown-bordered.saltDropdown-disabled,\n.saltDropdown-bordered.saltDropdown-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDropdown-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--dropdown-borderColor);\n}\n\n.saltDropdown:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--dropdown-borderColor-hover);\n}\n\n.saltDropdown:focus .saltDropdown-activationIndicator,\n.saltDropdown:focus:hover .saltDropdown-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--dropdown-borderColor-active);\n}\n\n.saltDropdown[aria-readonly=\"true\"] .saltDropdown-activationIndicator,\n.saltDropdown[aria-readonly=\"true\"]:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDropdown-disabled .saltDropdown-activationIndicator,\n.saltDropdown-disabled:hover .saltDropdown-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDropdown-bordered .saltDropdown-activationIndicator,\n.saltDropdown-bordered.saltDropdown[aria-readonly=\"true\"] .saltDropdown-activationIndicator,\n.saltDropdown-bordered.saltDropdown-disabled:hover .saltDropdown-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDropdown-bordered.saltDropdown:focus .saltDropdown-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n.saltDropdown-primary {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-editable-primary-background);\n --dropdown-background-disabled: var(--salt-editable-primary-background-disabled);\n --dropdown-background-readonly: var(--salt-editable-background-readonly);\n --dropdown-borderColor: var(--salt-editable-borderColor);\n --dropdown-borderColor-active: var(--salt-editable-borderColor-active);\n --dropdown-borderColor-hover: var(--salt-editable-borderColor-hover);\n --dropdown-outlineColor: var(--salt-focused-outlineColor);\n}\n\n.saltDropdown-secondary {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-editable-secondary-background);\n --dropdown-background-disabled: var(--salt-editable-secondary-background-disabled);\n --dropdown-background-readonly: var(--salt-editable-background-readonly);\n --dropdown-borderColor: var(--salt-editable-borderColor);\n --dropdown-borderColor-active: var(--salt-editable-borderColor-active);\n --dropdown-borderColor-hover: var(--salt-editable-borderColor-hover);\n --dropdown-outlineColor: var(--salt-focused-outlineColor);\n}\n\n.saltDropdown-tertiary {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-editable-tertiary-background);\n --dropdown-background-disabled: var(--salt-editable-tertiary-background-disabled);\n --dropdown-background-readonly: var(--salt-editable-background-readonly);\n --dropdown-borderColor: var(--salt-editable-borderColor);\n --dropdown-borderColor-active: var(--salt-editable-borderColor-active);\n --dropdown-borderColor-hover: var(--salt-editable-borderColor-hover);\n --dropdown-outlineColor: var(--salt-focused-outlineColor);\n}\n\n.saltDropdown-error {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-error-background);\n --dropdown-background-readonly: var(--salt-status-error-background);\n --dropdown-borderColor: var(--salt-status-error-borderColor);\n --dropdown-borderColor-active: var(--salt-status-error-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-error-borderColor);\n --dropdown-outlineColor: var(--salt-status-error-borderColor);\n}\n\n.saltDropdown-warning {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-warning-background);\n --dropdown-background-readonly: var(--salt-status-warning-background);\n --dropdown-borderColor: var(--salt-status-warning-borderColor);\n --dropdown-borderColor-active: var(--salt-status-warning-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-warning-borderColor);\n --dropdown-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n.saltDropdown-success {\n --dropdown-color: var(--salt-content-primary-foreground);\n --dropdown-background: var(--salt-status-success-background);\n --dropdown-background-readonly: var(--salt-status-success-background);\n --dropdown-borderColor: var(--salt-status-success-borderColor);\n --dropdown-borderColor-active: var(--salt-status-success-borderColor);\n --dropdown-borderColor-hover: var(--salt-status-success-borderColor);\n --dropdown-outlineColor: var(--salt-status-success-borderColor);\n}\n\n.saltDropdown:focus,\n.saltDropdown:focus:hover {\n cursor: var(--salt-cursor-hover);\n outline: var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--dropdown-outlineColor);\n}\n\n.saltDropdown.saltDropdown[aria-readonly=\"true\"] {\n background: var(--dropdown-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n.saltDropdown.saltDropdown:disabled,\n.saltDropdown.saltDropdown:disabled:hover {\n background: var(--dropdown-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--salt-content-primary-foreground-disabled);\n}\n\n.saltDropdown-content {\n flex: 1;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n text-wrap: nowrap;\n}\n\n.saltDropdown-placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n.saltDropdown-startAdornmentContainer {\n margin-right: var(--salt-spacing-100);\n}\n\n.saltDropdown .saltDropdown-toggle {\n margin-left: var(--salt-spacing-100);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Dropdown.css.js.map