@salt-ds/core 1.4.0 → 1.6.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 (197) hide show
  1. package/dist-cjs/packages/core/src/aria-announcer/useAriaAnnouncer.js +1 -0
  2. package/dist-cjs/packages/core/src/aria-announcer/useAriaAnnouncer.js.map +1 -1
  3. package/dist-cjs/packages/core/src/avatar/Avatar.css.js +1 -1
  4. package/dist-cjs/packages/core/src/avatar/Avatar.js +11 -3
  5. package/dist-cjs/packages/core/src/avatar/Avatar.js.map +1 -1
  6. package/dist-cjs/packages/core/src/avatar/useAvatarImage.js +39 -0
  7. package/dist-cjs/packages/core/src/avatar/useAvatarImage.js.map +1 -0
  8. package/dist-cjs/packages/core/src/card/Card.css.js +1 -1
  9. package/dist-cjs/packages/core/src/card/Card.js +1 -1
  10. package/dist-cjs/packages/core/src/card/Card.js.map +1 -1
  11. package/dist-cjs/packages/core/src/card/InteractableCard.css.js +9 -0
  12. package/dist-cjs/packages/core/src/card/InteractableCard.css.js.map +1 -0
  13. package/dist-cjs/packages/core/src/card/InteractableCard.js +57 -0
  14. package/dist-cjs/packages/core/src/card/InteractableCard.js.map +1 -0
  15. package/dist-cjs/packages/core/src/card/useInteractableCard.js +63 -0
  16. package/dist-cjs/packages/core/src/card/useInteractableCard.js.map +1 -0
  17. package/dist-cjs/packages/core/src/checkbox/Checkbox.css.js +9 -0
  18. package/dist-cjs/packages/core/src/checkbox/Checkbox.css.js.map +1 -0
  19. package/dist-cjs/packages/core/src/checkbox/Checkbox.js +95 -0
  20. package/dist-cjs/packages/core/src/checkbox/Checkbox.js.map +1 -0
  21. package/dist-cjs/packages/core/src/checkbox/CheckboxGroup.css.js +9 -0
  22. package/dist-cjs/packages/core/src/checkbox/CheckboxGroup.css.js.map +1 -0
  23. package/dist-cjs/packages/core/src/checkbox/CheckboxGroup.js +62 -0
  24. package/dist-cjs/packages/core/src/checkbox/CheckboxGroup.js.map +1 -0
  25. package/dist-cjs/packages/core/src/checkbox/CheckboxIcon.css.js +9 -0
  26. package/dist-cjs/packages/core/src/checkbox/CheckboxIcon.css.js.map +1 -0
  27. package/dist-cjs/packages/core/src/checkbox/CheckboxIcon.js +48 -0
  28. package/dist-cjs/packages/core/src/checkbox/CheckboxIcon.js.map +1 -0
  29. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxCheckedIcon.js +33 -0
  30. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxCheckedIcon.js.map +1 -0
  31. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxCheckedIconHD.js +32 -0
  32. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxCheckedIconHD.js.map +1 -0
  33. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxIndeterminateIcon.js +37 -0
  34. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxIndeterminateIcon.js.map +1 -0
  35. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxUncheckedIcon.js +26 -0
  36. package/dist-cjs/packages/core/src/checkbox/assets/CheckboxUncheckedIcon.js.map +1 -0
  37. package/dist-cjs/packages/core/src/checkbox/internal/CheckboxGroupContext.js +13 -0
  38. package/dist-cjs/packages/core/src/checkbox/internal/CheckboxGroupContext.js.map +1 -0
  39. package/dist-cjs/packages/core/src/checkbox/internal/useCheckboxGroup.js +13 -0
  40. package/dist-cjs/packages/core/src/checkbox/internal/useCheckboxGroup.js.map +1 -0
  41. package/dist-cjs/packages/core/src/flex-item/FlexItem.js +1 -1
  42. package/dist-cjs/packages/core/src/index.js +20 -0
  43. package/dist-cjs/packages/core/src/index.js.map +1 -1
  44. package/dist-cjs/packages/core/src/link/Link.css.js +1 -1
  45. package/dist-cjs/packages/core/src/link/Link.js +1 -1
  46. package/dist-cjs/packages/core/src/link/Link.js.map +1 -1
  47. package/dist-cjs/packages/core/src/panel/Panel.css.js +1 -1
  48. package/dist-cjs/packages/core/src/radio-button/RadioButton.css.js +9 -0
  49. package/dist-cjs/packages/core/src/radio-button/RadioButton.css.js.map +1 -0
  50. package/dist-cjs/packages/core/src/radio-button/RadioButton.js +86 -0
  51. package/dist-cjs/packages/core/src/radio-button/RadioButton.js.map +1 -0
  52. package/dist-cjs/packages/core/src/radio-button/RadioButtonGroup.css.js +9 -0
  53. package/dist-cjs/packages/core/src/radio-button/RadioButtonGroup.css.js.map +1 -0
  54. package/dist-cjs/packages/core/src/radio-button/RadioButtonGroup.js +61 -0
  55. package/dist-cjs/packages/core/src/radio-button/RadioButtonGroup.js.map +1 -0
  56. package/dist-cjs/packages/core/src/radio-button/RadioButtonIcon.css.js +9 -0
  57. package/dist-cjs/packages/core/src/radio-button/RadioButtonIcon.css.js.map +1 -0
  58. package/dist-cjs/packages/core/src/radio-button/RadioButtonIcon.js +48 -0
  59. package/dist-cjs/packages/core/src/radio-button/RadioButtonIcon.js.map +1 -0
  60. package/dist-cjs/packages/core/src/radio-button/internal/RadioGroupContext.js +19 -0
  61. package/dist-cjs/packages/core/src/radio-button/internal/RadioGroupContext.js.map +1 -0
  62. package/dist-cjs/packages/core/src/radio-button/internal/useRadioGroup.js +13 -0
  63. package/dist-cjs/packages/core/src/radio-button/internal/useRadioGroup.js.map +1 -0
  64. package/dist-cjs/packages/core/src/spinner/svgSpinners/SpinnerSVG.js +1 -0
  65. package/dist-cjs/packages/core/src/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  66. package/dist-cjs/packages/core/src/text/Text.css.js +1 -1
  67. package/dist-cjs/packages/core/src/tooltip/Tooltip.css.js +1 -1
  68. package/dist-cjs/packages/core/src/tooltip/Tooltip.js +40 -24
  69. package/dist-cjs/packages/core/src/tooltip/Tooltip.js.map +1 -1
  70. package/dist-cjs/packages/core/src/tooltip/useAriaAnnounce.js +1 -0
  71. package/dist-cjs/packages/core/src/tooltip/useAriaAnnounce.js.map +1 -1
  72. package/dist-cjs/packages/core/src/tooltip/useTooltip.js +7 -4
  73. package/dist-cjs/packages/core/src/tooltip/useTooltip.js.map +1 -1
  74. package/dist-cjs/packages/core/src/utils/capitalize.js +10 -0
  75. package/dist-cjs/packages/core/src/utils/capitalize.js.map +1 -0
  76. package/dist-cjs/packages/core/src/utils/mergeProps.js +25 -0
  77. package/dist-cjs/packages/core/src/utils/mergeProps.js.map +1 -0
  78. package/dist-cjs/packages/core/src/utils/useFloatingUI.js.map +1 -1
  79. package/dist-cjs/packages/core/src/viewport/ViewportProvider.js +1 -0
  80. package/dist-cjs/packages/core/src/viewport/ViewportProvider.js.map +1 -1
  81. package/dist-es/packages/core/src/aria-announcer/useAriaAnnouncer.js +1 -0
  82. package/dist-es/packages/core/src/aria-announcer/useAriaAnnouncer.js.map +1 -1
  83. package/dist-es/packages/core/src/avatar/Avatar.css.js +1 -1
  84. package/dist-es/packages/core/src/avatar/Avatar.js +11 -3
  85. package/dist-es/packages/core/src/avatar/Avatar.js.map +1 -1
  86. package/dist-es/packages/core/src/avatar/useAvatarImage.js +35 -0
  87. package/dist-es/packages/core/src/avatar/useAvatarImage.js.map +1 -0
  88. package/dist-es/packages/core/src/card/Card.css.js +1 -1
  89. package/dist-es/packages/core/src/card/Card.js +1 -1
  90. package/dist-es/packages/core/src/card/Card.js.map +1 -1
  91. package/dist-es/packages/core/src/card/InteractableCard.css.js +7 -0
  92. package/dist-es/packages/core/src/card/InteractableCard.css.js.map +1 -0
  93. package/dist-es/packages/core/src/card/InteractableCard.js +53 -0
  94. package/dist-es/packages/core/src/card/InteractableCard.js.map +1 -0
  95. package/dist-es/packages/core/src/card/useInteractableCard.js +59 -0
  96. package/dist-es/packages/core/src/card/useInteractableCard.js.map +1 -0
  97. package/dist-es/packages/core/src/checkbox/Checkbox.css.js +7 -0
  98. package/dist-es/packages/core/src/checkbox/Checkbox.css.js.map +1 -0
  99. package/dist-es/packages/core/src/checkbox/Checkbox.js +91 -0
  100. package/dist-es/packages/core/src/checkbox/Checkbox.js.map +1 -0
  101. package/dist-es/packages/core/src/checkbox/CheckboxGroup.css.js +7 -0
  102. package/dist-es/packages/core/src/checkbox/CheckboxGroup.css.js.map +1 -0
  103. package/dist-es/packages/core/src/checkbox/CheckboxGroup.js +58 -0
  104. package/dist-es/packages/core/src/checkbox/CheckboxGroup.js.map +1 -0
  105. package/dist-es/packages/core/src/checkbox/CheckboxIcon.css.js +7 -0
  106. package/dist-es/packages/core/src/checkbox/CheckboxIcon.css.js.map +1 -0
  107. package/dist-es/packages/core/src/checkbox/CheckboxIcon.js +44 -0
  108. package/dist-es/packages/core/src/checkbox/CheckboxIcon.js.map +1 -0
  109. package/dist-es/packages/core/src/checkbox/assets/CheckboxCheckedIcon.js +29 -0
  110. package/dist-es/packages/core/src/checkbox/assets/CheckboxCheckedIcon.js.map +1 -0
  111. package/dist-es/packages/core/src/checkbox/assets/CheckboxCheckedIconHD.js +28 -0
  112. package/dist-es/packages/core/src/checkbox/assets/CheckboxCheckedIconHD.js.map +1 -0
  113. package/dist-es/packages/core/src/checkbox/assets/CheckboxIndeterminateIcon.js +33 -0
  114. package/dist-es/packages/core/src/checkbox/assets/CheckboxIndeterminateIcon.js.map +1 -0
  115. package/dist-es/packages/core/src/checkbox/assets/CheckboxUncheckedIcon.js +22 -0
  116. package/dist-es/packages/core/src/checkbox/assets/CheckboxUncheckedIcon.js.map +1 -0
  117. package/dist-es/packages/core/src/checkbox/internal/CheckboxGroupContext.js +9 -0
  118. package/dist-es/packages/core/src/checkbox/internal/CheckboxGroupContext.js.map +1 -0
  119. package/dist-es/packages/core/src/checkbox/internal/useCheckboxGroup.js +9 -0
  120. package/dist-es/packages/core/src/checkbox/internal/useCheckboxGroup.js.map +1 -0
  121. package/dist-es/packages/core/src/flex-item/FlexItem.js +1 -1
  122. package/dist-es/packages/core/src/index.js +10 -0
  123. package/dist-es/packages/core/src/index.js.map +1 -1
  124. package/dist-es/packages/core/src/link/Link.css.js +1 -1
  125. package/dist-es/packages/core/src/link/Link.js +1 -1
  126. package/dist-es/packages/core/src/link/Link.js.map +1 -1
  127. package/dist-es/packages/core/src/panel/Panel.css.js +1 -1
  128. package/dist-es/packages/core/src/radio-button/RadioButton.css.js +7 -0
  129. package/dist-es/packages/core/src/radio-button/RadioButton.css.js.map +1 -0
  130. package/dist-es/packages/core/src/radio-button/RadioButton.js +82 -0
  131. package/dist-es/packages/core/src/radio-button/RadioButton.js.map +1 -0
  132. package/dist-es/packages/core/src/radio-button/RadioButtonGroup.css.js +7 -0
  133. package/dist-es/packages/core/src/radio-button/RadioButtonGroup.css.js.map +1 -0
  134. package/dist-es/packages/core/src/radio-button/RadioButtonGroup.js +57 -0
  135. package/dist-es/packages/core/src/radio-button/RadioButtonGroup.js.map +1 -0
  136. package/dist-es/packages/core/src/radio-button/RadioButtonIcon.css.js +7 -0
  137. package/dist-es/packages/core/src/radio-button/RadioButtonIcon.css.js.map +1 -0
  138. package/dist-es/packages/core/src/radio-button/RadioButtonIcon.js +44 -0
  139. package/dist-es/packages/core/src/radio-button/RadioButtonIcon.js.map +1 -0
  140. package/dist-es/packages/core/src/radio-button/internal/RadioGroupContext.js +15 -0
  141. package/dist-es/packages/core/src/radio-button/internal/RadioGroupContext.js.map +1 -0
  142. package/dist-es/packages/core/src/radio-button/internal/useRadioGroup.js +9 -0
  143. package/dist-es/packages/core/src/radio-button/internal/useRadioGroup.js.map +1 -0
  144. package/dist-es/packages/core/src/spinner/svgSpinners/SpinnerSVG.js +1 -0
  145. package/dist-es/packages/core/src/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  146. package/dist-es/packages/core/src/text/Text.css.js +1 -1
  147. package/dist-es/packages/core/src/tooltip/Tooltip.css.js +1 -1
  148. package/dist-es/packages/core/src/tooltip/Tooltip.js +40 -24
  149. package/dist-es/packages/core/src/tooltip/Tooltip.js.map +1 -1
  150. package/dist-es/packages/core/src/tooltip/useAriaAnnounce.js +1 -0
  151. package/dist-es/packages/core/src/tooltip/useAriaAnnounce.js.map +1 -1
  152. package/dist-es/packages/core/src/tooltip/useTooltip.js +7 -4
  153. package/dist-es/packages/core/src/tooltip/useTooltip.js.map +1 -1
  154. package/dist-es/packages/core/src/utils/capitalize.js +6 -0
  155. package/dist-es/packages/core/src/utils/capitalize.js.map +1 -0
  156. package/dist-es/packages/core/src/utils/mergeProps.js +21 -0
  157. package/dist-es/packages/core/src/utils/mergeProps.js.map +1 -0
  158. package/dist-es/packages/core/src/utils/useFloatingUI.js.map +1 -1
  159. package/dist-es/packages/core/src/viewport/ViewportProvider.js +1 -0
  160. package/dist-es/packages/core/src/viewport/ViewportProvider.js.map +1 -1
  161. package/dist-types/avatar/index.d.ts +1 -0
  162. package/dist-types/avatar/useAvatarImage.d.ts +2 -0
  163. package/dist-types/card/Card.d.ts +4 -4
  164. package/dist-types/card/InteractableCard.d.ts +14 -0
  165. package/dist-types/card/index.d.ts +1 -0
  166. package/dist-types/card/useInteractableCard.d.ts +21 -0
  167. package/dist-types/checkbox/Checkbox.d.ts +56 -0
  168. package/dist-types/checkbox/CheckboxGroup.d.ts +30 -0
  169. package/dist-types/checkbox/CheckboxIcon.d.ts +10 -0
  170. package/dist-types/checkbox/assets/CheckboxCheckedIcon.d.ts +4 -0
  171. package/dist-types/checkbox/assets/CheckboxCheckedIconHD.d.ts +4 -0
  172. package/dist-types/checkbox/assets/CheckboxIndeterminateIcon.d.ts +4 -0
  173. package/dist-types/checkbox/assets/CheckboxUncheckedIcon.d.ts +4 -0
  174. package/dist-types/checkbox/assets/index.d.ts +4 -0
  175. package/dist-types/checkbox/index.d.ts +3 -0
  176. package/dist-types/checkbox/internal/CheckboxGroupContext.d.ts +9 -0
  177. package/dist-types/checkbox/internal/useCheckboxGroup.d.ts +2 -0
  178. package/dist-types/index.d.ts +2 -0
  179. package/dist-types/link/Link.d.ts +1 -1
  180. package/dist-types/radio-button/RadioButton.d.ts +45 -0
  181. package/dist-types/radio-button/RadioButtonGroup.d.ts +29 -0
  182. package/dist-types/radio-button/RadioButtonIcon.d.ts +11 -0
  183. package/dist-types/radio-button/index.d.ts +3 -0
  184. package/dist-types/radio-button/internal/RadioGroupContext.d.ts +7 -0
  185. package/dist-types/radio-button/internal/useRadioGroup.d.ts +1 -0
  186. package/dist-types/tooltip/Tooltip.d.ts +10 -10
  187. package/dist-types/tooltip/useTooltip.d.ts +23 -3
  188. package/dist-types/utils/capitalize.d.ts +1 -0
  189. package/dist-types/utils/index.d.ts +2 -0
  190. package/dist-types/utils/mergeProps.d.ts +12 -0
  191. package/dist-types/utils/useFloatingUI.d.ts +3 -3
  192. package/package.json +3 -3
  193. package/dist-cjs/packages/core/src/avatar/internal/useLoaded.js +0 -30
  194. package/dist-cjs/packages/core/src/avatar/internal/useLoaded.js.map +0 -1
  195. package/dist-es/packages/core/src/avatar/internal/useLoaded.js +0 -26
  196. package/dist-es/packages/core/src/avatar/internal/useLoaded.js.map +0 -1
  197. package/dist-types/avatar/internal/useLoaded.d.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  import styleInject from '../../../../node_modules/style-inject/dist/style-inject.es.js';
2
2
 
3
- var css_248z = "/* Styles applied to root component */\n.saltTooltip {\n --tooltip-background: var(--saltTooltip-background, var(--salt-container-primary-background));\n --tooltip-zIndex: var(--saltTooltip-zIndex, var(--salt-zIndex-flyover));\n}\n\n.saltTooltip {\n background: var(--tooltip-background);\n border-color: var(--saltTooltip-borderColor, var(--tooltip-status-borderColor));\n border-width: var(--saltTooltip-borderWidth, var(--salt-size-border));\n border-style: var(--saltTooltip-borderStyle, var(--salt-container-borderStyle));\n box-shadow: var(--saltTooltip-shadow, var(--salt-overlayable-shadow-popout));\n color: var(--saltTooltip-text-color, var(--salt-text-primary-foreground));\n max-width: var(--saltTooltip-maxWidth, 230px);\n padding: var(--saltTooltip-padding, var(--salt-size-unit));\n position: relative;\n text-align: var(--saltTooltip-textAlign, left);\n z-index: var(--tooltip-zIndex);\n}\n\n/* Styles applied to container */\n.saltTooltip-container {\n display: flex;\n align-items: baseline;\n position: relative;\n}\n\n/* Styles applied to content */\n.saltTooltip-content {\n overflow: hidden;\n}\n\n/* Styles applied to status indicator */\n.saltTooltip-icon {\n --saltIcon-margin: 0 var(--saltTooltip-icon-marginRight, 6px) 0 0;\n vertical-align: top;\n align-self: center;\n}\n\n/* Styles applied to arrow */\n.saltTooltip-arrow,\n.saltTooltip-arrow::after {\n border: var(--salt-size-sharktooth-height) solid transparent;\n position: absolute;\n}\n\n.saltTooltip-arrow::after {\n content: \"\";\n}\n\n.saltTooltip[data-placement^=\"top\"] .saltTooltip-arrow {\n border-top-color: var(--tooltip-status-borderColor);\n bottom: -11px;\n}\n\n.saltTooltip[data-placement^=\"bottom\"] .saltTooltip-arrow {\n border-bottom-color: var(--tooltip-status-borderColor);\n top: -11px;\n}\n\n.saltTooltip[data-placement^=\"left\"] .saltTooltip-arrow {\n border-left-color: var(--tooltip-status-borderColor);\n right: -11px;\n}\n\n.saltTooltip[data-placement^=\"right\"] .saltTooltip-arrow {\n border-right-color: var(--tooltip-status-borderColor);\n left: -11px;\n}\n\n.saltTooltip[data-placement^=\"top\"] .saltTooltip-arrow::after {\n border-top-color: var(--tooltip-background);\n bottom: -4px;\n left: calc(100% - var(--salt-size-sharktooth-height));\n}\n\n.saltTooltip[data-placement^=\"bottom\"] .saltTooltip-arrow::after {\n border-bottom-color: var(--tooltip-background);\n top: -4px;\n left: calc(100% - var(--salt-size-sharktooth-height));\n}\n\n.saltTooltip[data-placement^=\"left\"] .saltTooltip-arrow::after {\n border-left-color: var(--tooltip-background);\n right: -4px;\n top: calc(100% - var(--salt-size-sharktooth-height));\n}\n\n.saltTooltip[data-placement^=\"right\"] .saltTooltip-arrow::after {\n border-right-color: var(--tooltip-background);\n left: -4px;\n top: calc(100% - var(--salt-size-sharktooth-height));\n}\n\n/* Styles applied when status = \"info\" */\n.saltTooltip-info {\n --tooltip-status-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when status = \"error\" */\n.saltTooltip-error {\n --tooltip-status-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when status = \"warning\" */\n.saltTooltip-warning {\n --tooltip-status-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when status = \"success\" */\n.saltTooltip-success {\n --tooltip-status-borderColor: var(--salt-status-success-borderColor);\n}\n";
3
+ var css_248z = "/* Styles applied to root component */\n.saltTooltip {\n --tooltip-background: var(--saltTooltip-background, var(--salt-container-primary-background));\n --tooltip-zIndex: var(--saltTooltip-zIndex, var(--salt-zIndex-flyover));\n /* apply icon margin based on the text line height so it's aligned on all densities */\n --tooltip-icon-marginTop: calc((var(--salt-text-lineHeight) - 12px) / 2);\n}\n\n.saltTooltip {\n background: var(--tooltip-background);\n border-color: var(--saltTooltip-borderColor, var(--tooltip-status-borderColor));\n border-style: var(--saltTooltip-borderStyle, var(--salt-container-borderStyle));\n border-width: var(--saltTooltip-borderWidth, var(--salt-size-border));\n box-shadow: var(--saltTooltip-shadow, var(--salt-overlayable-shadow-popout));\n color: var(--saltTooltip-text-color, var(--salt-text-primary-foreground));\n font-size: var(--saltTooltip-fontSize, var(--salt-text-fontSize));\n font-weight: var(--saltTooltip-fontWeight, var(--salt-text-fontWeight));\n line-height: var(--saltTooltip-lineHeight, var(--salt-text-lineHeight));\n max-width: var(--saltTooltip-maxWidth, 230px);\n padding: var(--saltTooltip-padding, var(--salt-size-unit));\n position: relative;\n text-align: var(--saltTooltip-textAlign, left);\n z-index: var(--tooltip-zIndex);\n}\n\n/* Styles applied to container */\n.saltTooltip-container {\n display: flex;\n align-items: baseline;\n position: relative;\n}\n\n/* Styles applied to content */\n.saltTooltip-content {\n overflow: hidden;\n}\n\n/* Styles applied to status indicator */\n.saltTooltip-icon {\n --saltIcon-margin: var(--tooltip-icon-marginTop) var(--saltTooltip-icon-marginRight, 6px) 0 0;\n vertical-align: top;\n align-self: flex-start;\n}\n\n/* Styles applied when status = \"info\" */\n.saltTooltip-info {\n --tooltip-status-borderColor: var(--salt-status-info-borderColor);\n}\n\n/* Styles applied when status = \"error\" */\n.saltTooltip-error {\n --tooltip-status-borderColor: var(--salt-status-error-borderColor);\n}\n\n/* Styles applied when status = \"warning\" */\n.saltTooltip-warning {\n --tooltip-status-borderColor: var(--salt-status-warning-borderColor);\n}\n\n/* Styles applied when status = \"success\" */\n.saltTooltip-success {\n --tooltip-status-borderColor: var(--salt-status-success-borderColor);\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -1,13 +1,15 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { clsx } from 'clsx';
3
3
  import { forwardRef, isValidElement, cloneElement } from 'react';
4
+ import { FloatingPortal, FloatingArrow } from '@floating-ui/react';
4
5
  import { StatusIndicator } from '../status-indicator/StatusIndicator.js';
5
6
  import { makePrefixer } from '../utils/makePrefixer.js';
6
7
  import '../utils/useFloatingUI.js';
7
8
  import { useForkRef } from '../utils/useForkRef.js';
8
9
  import '../utils/useId.js';
9
- import '../salt-provider/SaltProvider.js';
10
+ import { SaltProvider } from '../salt-provider/SaltProvider.js';
10
11
  import '../viewport/ViewportProvider.js';
12
+ import { mergeProps } from '../utils/mergeProps.js';
11
13
  import { useTooltip } from './useTooltip.js';
12
14
  import './Tooltip.css.js';
13
15
 
@@ -47,36 +49,50 @@ const Tooltip = forwardRef(
47
49
  isValidElement(children) ? children.ref : null,
48
50
  reference
49
51
  );
52
+ const floatingRef = useForkRef(floating, ref);
50
53
  return /* @__PURE__ */ jsxs(Fragment, {
51
54
  children: [
52
- open && !disabled && /* @__PURE__ */ jsxs("div", {
53
- className: clsx(withBaseName(), withBaseName(status), className),
54
- ref: floating,
55
- ...getTooltipProps(),
56
- children: [
57
- /* @__PURE__ */ jsxs("div", {
58
- className: withBaseName("container"),
55
+ isValidElement(children) && cloneElement(children, {
56
+ ...mergeProps(getTriggerProps(), children.props),
57
+ ref: triggerRef
58
+ }),
59
+ open && !disabled && /* @__PURE__ */ jsx(FloatingPortal, {
60
+ children: /* @__PURE__ */ jsx(SaltProvider, {
61
+ children: /* @__PURE__ */ jsxs("div", {
62
+ className: clsx(
63
+ withBaseName(),
64
+ withBaseName(status),
65
+ className
66
+ ),
67
+ ref: floatingRef,
68
+ ...getTooltipProps(),
59
69
  children: [
60
- !hideIcon && /* @__PURE__ */ jsx(StatusIndicator, {
61
- status,
62
- size: 1,
63
- className: withBaseName("icon")
70
+ /* @__PURE__ */ jsxs("div", {
71
+ className: withBaseName("container"),
72
+ children: [
73
+ !hideIcon && /* @__PURE__ */ jsx(StatusIndicator, {
74
+ status,
75
+ size: 1,
76
+ className: withBaseName("icon")
77
+ }),
78
+ /* @__PURE__ */ jsx("span", {
79
+ className: withBaseName("content"),
80
+ children: content
81
+ })
82
+ ]
64
83
  }),
65
- /* @__PURE__ */ jsx("span", {
66
- className: withBaseName("content"),
67
- children: content
84
+ !hideArrow && /* @__PURE__ */ jsx(FloatingArrow, {
85
+ ...arrowProps,
86
+ className: withBaseName("arrow"),
87
+ strokeWidth: 1,
88
+ fill: "var(--salt-container-primary-background)",
89
+ stroke: "var(--tooltip-status-borderColor)",
90
+ height: 5,
91
+ width: 10
68
92
  })
69
93
  ]
70
- }),
71
- !hideArrow && /* @__PURE__ */ jsx("div", {
72
- className: withBaseName("arrow"),
73
- ...arrowProps
74
94
  })
75
- ]
76
- }),
77
- isValidElement(children) && cloneElement(children, {
78
- ...getTriggerProps(),
79
- ref: triggerRef
95
+ })
80
96
  })
81
97
  ]
82
98
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../src/tooltip/Tooltip.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n cloneElement,\n forwardRef,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n} from \"react\";\nimport { StatusIndicator, ValidationStatus } from \"../status-indicator\";\nimport { UseFloatingUIProps, makePrefixer, useForkRef } from \"../utils\";\nimport { useTooltip, UseTooltipProps } from \"./useTooltip\";\nimport \"./Tooltip.css\";\n\nconst withBaseName = makePrefixer(\"saltTooltip\");\n\nexport interface TooltipProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<UseFloatingUIProps, \"open\" | \"onOpenChange\" | \"placement\"> {\n /**\n * The children will be the tooltip's trigger.\n */\n children: ReactNode;\n /**\n * Whether to hide the tooltip arrow. Defaults to `false`.\n */\n hideArrow?: boolean;\n /**\n * Whether to hide the state icon within the tooltip. Defaults to `false`.\n */\n hideIcon?: boolean;\n /**\n * Content displayed inside the tooltip. Can be a string or a React component.\n */\n content: ReactNode;\n /**\n * A string to determine the current status of the tooltip. Defaults to 'info'.\n */\n status?: ValidationStatus;\n /**\n * Delay in milliseconds before the tooltip is shown\n */\n enterDelay?: number;\n /**\n * Delay in milliseconds before the tooltip is hidden\n */\n leaveDelay?: number;\n /**\n * Option to not display the tooltip. Can be used in conditional situations like text truncation.\n */\n disabled?: boolean;\n /**\n * Option to remove the hover listener\n */\n disableHoverListener?: boolean;\n /**\n * Option to remove the focus listener\n */\n disableFocusListener?: boolean;\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n function Tooltip(props, ref) {\n const {\n children,\n className,\n disabled,\n hideArrow = false,\n hideIcon = false,\n open: openProp,\n content,\n status = \"info\",\n placement = \"right\",\n enterDelay = 300,\n leaveDelay = 0,\n ...rest\n } = props;\n\n const hookProps: UseTooltipProps = {\n open: openProp,\n placement,\n enterDelay,\n leaveDelay,\n ...rest,\n };\n\n const {\n arrowProps,\n open,\n floating,\n reference,\n getTriggerProps,\n getTooltipProps,\n } = useTooltip(hookProps);\n\n const triggerRef = useForkRef(\n // @ts-ignore\n isValidElement(children) ? children.ref : null,\n reference\n );\n\n return (\n <>\n {open && !disabled && (\n <div\n className={clsx(withBaseName(), withBaseName(status), className)}\n ref={floating}\n {...getTooltipProps()}\n >\n <div className={withBaseName(\"container\")}>\n {!hideIcon && (\n <StatusIndicator\n status={status}\n size={1}\n className={withBaseName(\"icon\")}\n />\n )}\n <span className={withBaseName(\"content\")}>{content}</span>\n </div>\n {!hideArrow && (\n <div className={withBaseName(\"arrow\")} {...arrowProps} />\n )}\n </div>\n )}\n\n {isValidElement(children) &&\n cloneElement(children, {\n ...getTriggerProps(),\n ref: triggerRef,\n })}\n </>\n );\n }\n);\n"],"names":["Tooltip"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,YAAA,GAAe,aAAa,aAAa,CAAA,CAAA;AA+CxC,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,SAASA,QAAQ,CAAA,KAAA,EAAO,GAAK,EAAA;AAC3B,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAY,GAAA,KAAA;AAAA,MACZ,QAAW,GAAA,KAAA;AAAA,MACX,IAAM,EAAA,QAAA;AAAA,MACN,OAAA;AAAA,MACA,MAAS,GAAA,MAAA;AAAA,MACT,SAAY,GAAA,OAAA;AAAA,MACZ,UAAa,GAAA,GAAA;AAAA,MACb,UAAa,GAAA,CAAA;AAAA,MACV,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,SAA6B,GAAA;AAAA,MACjC,IAAM,EAAA,QAAA;AAAA,MACN,SAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACL,CAAA;AAEA,IAAM,MAAA;AAAA,MACJ,UAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,KACF,GAAI,WAAW,SAAS,CAAA,CAAA;AAExB,IAAA,MAAM,UAAa,GAAA,UAAA;AAAA,MAEjB,cAAe,CAAA,QAAQ,CAAI,GAAA,QAAA,CAAS,GAAM,GAAA,IAAA;AAAA,MAC1C,SAAA;AAAA,KACF,CAAA;AAEA,IACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,MACG,QAAA,EAAA;AAAA,QAAQ,IAAA,IAAA,CAAC,4BACP,IAAA,CAAA,KAAA,EAAA;AAAA,UACC,WAAW,IAAK,CAAA,YAAA,IAAgB,YAAa,CAAA,MAAM,GAAG,SAAS,CAAA;AAAA,UAC/D,GAAK,EAAA,QAAA;AAAA,UACJ,GAAG,eAAgB,EAAA;AAAA,UAEpB,QAAA,EAAA;AAAA,4BAAC,IAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAA,EAAW,aAAa,WAAW,CAAA;AAAA,cACrC,QAAA,EAAA;AAAA,gBAAA,CAAC,4BACC,GAAA,CAAA,eAAA,EAAA;AAAA,kBACC,MAAA;AAAA,kBACA,IAAM,EAAA,CAAA;AAAA,kBACN,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,iBAChC,CAAA;AAAA,gCAED,GAAA,CAAA,MAAA,EAAA;AAAA,kBAAK,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,kBAAI,QAAA,EAAA,OAAA;AAAA,iBAAQ,CAAA;AAAA,eAAA;AAAA,aACrD,CAAA;AAAA,YACC,CAAC,6BACC,GAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAAI,GAAG,UAAA;AAAA,aAAY,CAAA;AAAA,WAAA;AAAA,SAE3D,CAAA;AAAA,QAGD,cAAe,CAAA,QAAQ,CACtB,IAAA,YAAA,CAAa,QAAU,EAAA;AAAA,UACrB,GAAG,eAAgB,EAAA;AAAA,UACnB,GAAK,EAAA,UAAA;AAAA,SACN,CAAA;AAAA,OAAA;AAAA,KACL,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../src/tooltip/Tooltip.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n cloneElement,\n forwardRef,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n Ref,\n} from \"react\";\nimport { FloatingArrow, FloatingPortal } from \"@floating-ui/react\";\nimport { StatusIndicator, ValidationStatus } from \"../status-indicator\";\nimport {\n UseFloatingUIProps,\n makePrefixer,\n mergeProps,\n useForkRef,\n} from \"../utils\";\nimport { useTooltip, UseTooltipProps } from \"./useTooltip\";\nimport \"./Tooltip.css\";\nimport { SaltProvider } from \"../salt-provider\";\n\nconst withBaseName = makePrefixer(\"saltTooltip\");\n\nexport interface TooltipProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<UseFloatingUIProps, \"open\" | \"onOpenChange\" | \"placement\"> {\n /**\n * The children will be the Tooltip's trigger.\n */\n children: ReactNode;\n /**\n * Whether to hide the Tooltip arrow. Defaults to `false`.\n */\n hideArrow?: boolean;\n /**\n * Whether to hide the status icon within the Tooltip. Defaults to `false`.\n */\n hideIcon?: boolean;\n /**\n * Content displayed inside the Tooltip. Can be a string or a React component.\n */\n content: ReactNode;\n /**\n * A string to determine the status of the Tooltip. Defaults to `info`.\n */\n status?: ValidationStatus;\n /**\n * Delay in milliseconds before the Tooltip is shown.\n */\n enterDelay?: number;\n /**\n * Delay in milliseconds before the Tooltip is hidden.\n */\n leaveDelay?: number;\n /**\n * Option to not display the Tooltip. Can be used in conditional situations like text truncation.\n */\n disabled?: boolean;\n /**\n * Option to remove the hover listener.\n */\n disableHoverListener?: boolean;\n /**\n * Option to remove the focus listener.\n */\n disableFocusListener?: boolean;\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n function Tooltip(props, ref) {\n const {\n children,\n className,\n disabled,\n hideArrow = false,\n hideIcon = false,\n open: openProp,\n content,\n status = \"info\",\n placement = \"right\",\n enterDelay = 300,\n leaveDelay = 0,\n ...rest\n } = props;\n\n const hookProps: UseTooltipProps = {\n open: openProp,\n placement,\n enterDelay,\n leaveDelay,\n ...rest,\n };\n\n const {\n arrowProps,\n open,\n floating,\n reference,\n getTriggerProps,\n getTooltipProps,\n } = useTooltip(hookProps);\n\n const triggerRef = useForkRef(\n // @ts-ignore\n isValidElement(children) ? children.ref : null,\n reference\n );\n\n const floatingRef = useForkRef(floating, ref) as Ref<HTMLDivElement>;\n\n return (\n <>\n {isValidElement(children) &&\n cloneElement(children, {\n ...mergeProps(getTriggerProps(), children.props),\n ref: triggerRef,\n })}\n\n {open && !disabled && (\n <FloatingPortal>\n {/* The provider is needed to support the use case where an app has nested modes. The element that is portalled needs to have the same style as the current scope */}\n <SaltProvider>\n <div\n className={clsx(\n withBaseName(),\n withBaseName(status),\n className\n )}\n ref={floatingRef}\n {...getTooltipProps()}\n >\n <div className={withBaseName(\"container\")}>\n {!hideIcon && (\n <StatusIndicator\n status={status}\n size={1}\n className={withBaseName(\"icon\")}\n />\n )}\n <span className={withBaseName(\"content\")}>{content}</span>\n </div>\n {!hideArrow && (\n <FloatingArrow\n {...arrowProps}\n className={withBaseName(\"arrow\")}\n strokeWidth={1}\n fill=\"var(--salt-container-primary-background)\"\n stroke=\"var(--tooltip-status-borderColor)\"\n height={5}\n width={10}\n />\n )}\n </div>\n </SaltProvider>\n </FloatingPortal>\n )}\n </>\n );\n }\n);\n"],"names":["Tooltip"],"mappings":"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"}
@@ -7,6 +7,7 @@ import '../utils/useId.js';
7
7
  import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect.js';
8
8
  import '../salt-provider/SaltProvider.js';
9
9
  import '../viewport/ViewportProvider.js';
10
+ import 'clsx';
10
11
 
11
12
  function getDocument(floating) {
12
13
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"useAriaAnnounce.js","sources":["../src/tooltip/useAriaAnnounce.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { PointerEvent, useEffect, useRef } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nfunction getDocument(floating: HTMLElement | null) {\n return floating?.ownerDocument ?? document;\n}\n\n// TODO: Check whether can be anything more restrictive than `any`\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getWindow(value: any) {\n return getDocument(value).defaultView ?? window;\n}\n\nfunction isElement(value: unknown): value is HTMLElement {\n return value ? value instanceof getWindow(value).Element : false;\n}\n\nfunction getDelay(\n value: Props[\"delay\"],\n prop: \"open\" | \"close\",\n pointerType?: PointerEvent[\"pointerType\"]\n) {\n if (pointerType && pointerType !== \"mouse\") {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n return value?.[prop];\n}\n\ntype Props = {\n delay?: number | Partial<{ open: number; close: number }>;\n};\n\nexport const useAriaAnnounce = (\n context: FloatingContext,\n { delay = 0 }: Props\n): ElementProps => {\n const { open, dataRef, refs } = context;\n\n const pointerTypeRef = useRef<PointerEvent[\"pointerType\"]>();\n const timeoutRef = useRef<number>();\n const blockMouseMoveRef = useRef(true);\n const { announce } = useAriaAnnouncer();\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n }\n });\n\n useEffect(() => {\n const reference = refs.reference.current;\n function announceFloating() {\n const tooltipContent = refs.floating.current?.innerText;\n\n if (tooltipContent) {\n announce(tooltipContent);\n }\n }\n\n function onMouseEnter(event: MouseEvent) {\n clearTimeout(timeoutRef.current);\n\n if (open) {\n return;\n }\n\n blockMouseMoveRef.current = false;\n dataRef.current.openEvent = event;\n\n if (delay) {\n timeoutRef.current = window.setTimeout(() => {\n announceFloating();\n }, getDelay(delay, \"open\", pointerTypeRef.current));\n } else {\n announceFloating();\n }\n }\n\n if (isElement(reference)) {\n reference.addEventListener(\"mouseenter\", onMouseEnter);\n return () => {\n reference.removeEventListener(\"mouseenter\", onMouseEnter);\n };\n }\n }, [dataRef, delay, open, refs.reference, refs.floating, announce]);\n\n function setPointerRef(event: PointerEvent) {\n pointerTypeRef.current = event.pointerType;\n }\n\n return {\n reference: {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n },\n floating: {\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAriaAnnounce.js","sources":["../src/tooltip/useAriaAnnounce.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { PointerEvent, useEffect, useRef } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nfunction getDocument(floating: HTMLElement | null) {\n return floating?.ownerDocument ?? document;\n}\n\n// TODO: Check whether can be anything more restrictive than `any`\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getWindow(value: any) {\n return getDocument(value).defaultView ?? window;\n}\n\nfunction isElement(value: unknown): value is HTMLElement {\n return value ? value instanceof getWindow(value).Element : false;\n}\n\nfunction getDelay(\n value: Props[\"delay\"],\n prop: \"open\" | \"close\",\n pointerType?: PointerEvent[\"pointerType\"]\n) {\n if (pointerType && pointerType !== \"mouse\") {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n return value?.[prop];\n}\n\ntype Props = {\n delay?: number | Partial<{ open: number; close: number }>;\n};\n\nexport const useAriaAnnounce = (\n context: FloatingContext,\n { delay = 0 }: Props\n): ElementProps => {\n const { open, dataRef, refs } = context;\n\n const pointerTypeRef = useRef<PointerEvent[\"pointerType\"]>();\n const timeoutRef = useRef<number>();\n const blockMouseMoveRef = useRef(true);\n const { announce } = useAriaAnnouncer();\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n }\n });\n\n useEffect(() => {\n const reference = refs.reference.current;\n function announceFloating() {\n const tooltipContent = refs.floating.current?.innerText;\n\n if (tooltipContent) {\n announce(tooltipContent);\n }\n }\n\n function onMouseEnter(event: MouseEvent) {\n clearTimeout(timeoutRef.current);\n\n if (open) {\n return;\n }\n\n blockMouseMoveRef.current = false;\n dataRef.current.openEvent = event;\n\n if (delay) {\n timeoutRef.current = window.setTimeout(() => {\n announceFloating();\n }, getDelay(delay, \"open\", pointerTypeRef.current));\n } else {\n announceFloating();\n }\n }\n\n if (isElement(reference)) {\n reference.addEventListener(\"mouseenter\", onMouseEnter);\n return () => {\n reference.removeEventListener(\"mouseenter\", onMouseEnter);\n };\n }\n }, [dataRef, delay, open, refs.reference, refs.floating, announce]);\n\n function setPointerRef(event: PointerEvent) {\n pointerTypeRef.current = event.pointerType;\n }\n\n return {\n reference: {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n },\n floating: {\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { useFloatingUI } from '../utils/useFloatingUI.js';
5
5
  import '../utils/useId.js';
6
6
  import '../salt-provider/SaltProvider.js';
7
7
  import '../viewport/ViewportProvider.js';
8
+ import 'clsx';
8
9
  import { useAriaAnnounce } from './useAriaAnnounce.js';
9
10
 
10
11
  function useTooltip(props) {
@@ -69,9 +70,11 @@ function useTooltip(props) {
69
70
  ]);
70
71
  const arrowProps = {
71
72
  ref: arrowRef,
73
+ context,
72
74
  style: {
73
- left: arrowX ? `${arrowX}px` : "",
74
- top: arrowY ? `${arrowY}px` : ""
75
+ position: strategy,
76
+ left: arrowX != null ? arrowX : 0,
77
+ top: arrowY != null ? arrowY : 0
75
78
  }
76
79
  };
77
80
  const getTooltipProps = () => {
@@ -79,8 +82,8 @@ function useTooltip(props) {
79
82
  "data-placement": placement,
80
83
  ref: floating,
81
84
  style: {
82
- top: y != null ? y : "",
83
- left: x != null ? x : "",
85
+ top: y != null ? y : 0,
86
+ left: x != null ? x : 0,
84
87
  position: strategy
85
88
  }
86
89
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltip.js","sources":["../src/tooltip/useTooltip.ts"],"sourcesContent":["import {\n arrow,\n flip,\n offset,\n safePolygon,\n shift,\n useDismiss,\n useFocus,\n useHover,\n useInteractions,\n useRole,\n limitShift,\n} from \"@floating-ui/react\";\nimport { HTMLProps, useRef } from \"react\";\nimport { useControlled, UseFloatingUIProps, useFloatingUI } from \"../utils\";\nimport { useAriaAnnounce } from \"./useAriaAnnounce\";\n\nexport interface UseTooltipProps\n extends Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\" | \"placement\">\n > {\n /**\n * Do not respond to focus events.\n */\n disableFocusListener?: boolean;\n /**\n * Do not respond to hover events.\n */\n disableHoverListener?: boolean;\n /**\n * The number of milliseconds to wait before showing the tooltip.\n * This prop won't impact the enter touch delay (`enterTouchDelay`).\n */\n enterDelay?: number;\n /**\n * The number of milliseconds to wait before hiding the tooltip.\n * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n */\n leaveDelay?: number;\n}\n\nexport function useTooltip(props?: UseTooltipProps) {\n const {\n enterDelay,\n leaveDelay,\n open: openProp,\n onOpenChange,\n placement: placementProp,\n disableHoverListener,\n disableFocusListener,\n } = props || {};\n\n const arrowRef = useRef<HTMLDivElement | null>(null);\n\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"Tooltip\",\n state: \"open\",\n });\n const handleOpenChange = (open: boolean) => {\n setOpen(open);\n onOpenChange?.(open);\n };\n\n const {\n floating,\n reference,\n x,\n y,\n strategy,\n middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },\n placement,\n context,\n } = useFloatingUI({\n open,\n onOpenChange: handleOpenChange,\n placement: placementProp,\n middleware: [\n offset(8),\n flip(),\n shift({ limiter: limitShift() }),\n arrow({ element: arrowRef }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useHover(context, {\n delay: {\n open: enterDelay,\n close: leaveDelay,\n },\n enabled: !disableHoverListener,\n handleClose: safePolygon(),\n }),\n useFocus(context, { enabled: !disableFocusListener }),\n useRole(context, { role: \"tooltip\" }),\n useDismiss(context),\n useAriaAnnounce(context, {\n delay: {\n open: enterDelay,\n close: leaveDelay,\n },\n }),\n ]);\n\n const arrowProps = {\n ref: arrowRef,\n style: {\n left: arrowX ? `${arrowX}px` : \"\",\n top: arrowY ? `${arrowY}px` : \"\",\n },\n };\n\n const getTooltipProps = (): HTMLProps<HTMLDivElement> => {\n return getFloatingProps({\n // @ts-ignore\n \"data-placement\": placement,\n ref: floating,\n style: {\n top: y ?? \"\",\n left: x ?? \"\",\n position: strategy,\n },\n });\n };\n\n const getTriggerProps = () =>\n getReferenceProps({\n ref: reference,\n });\n\n return {\n arrowProps,\n open,\n floating,\n reference,\n getTooltipProps,\n getTriggerProps,\n };\n}\n"],"names":["open"],"mappings":"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"}
1
+ {"version":3,"file":"useTooltip.js","sources":["../src/tooltip/useTooltip.ts"],"sourcesContent":["import {\n arrow,\n flip,\n offset,\n safePolygon,\n shift,\n useDismiss,\n useFocus,\n useHover,\n useInteractions,\n useRole,\n limitShift,\n} from \"@floating-ui/react\";\nimport { HTMLProps, useRef } from \"react\";\nimport { useControlled, UseFloatingUIProps, useFloatingUI } from \"../utils\";\nimport { useAriaAnnounce } from \"./useAriaAnnounce\";\n\nexport interface UseTooltipProps\n extends Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\" | \"placement\">\n > {\n /**\n * Do not respond to focus events.\n */\n disableFocusListener?: boolean;\n /**\n * Do not respond to hover events.\n */\n disableHoverListener?: boolean;\n /**\n * The number of milliseconds to wait before showing the tooltip.\n * This prop won't impact the enter touch delay (`enterTouchDelay`).\n */\n enterDelay?: number;\n /**\n * The number of milliseconds to wait before hiding the tooltip.\n * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n */\n leaveDelay?: number;\n}\n\nexport function useTooltip(props?: UseTooltipProps) {\n const {\n enterDelay,\n leaveDelay,\n open: openProp,\n onOpenChange,\n placement: placementProp,\n disableHoverListener,\n disableFocusListener,\n } = props || {};\n\n const arrowRef = useRef<SVGSVGElement | null>(null);\n\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"Tooltip\",\n state: \"open\",\n });\n const handleOpenChange = (open: boolean) => {\n setOpen(open);\n onOpenChange?.(open);\n };\n\n const {\n floating,\n reference,\n x,\n y,\n strategy,\n middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },\n placement,\n context,\n } = useFloatingUI({\n open,\n onOpenChange: handleOpenChange,\n placement: placementProp,\n middleware: [\n offset(8),\n flip(),\n shift({ limiter: limitShift() }),\n arrow({ element: arrowRef }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useHover(context, {\n delay: {\n open: enterDelay,\n close: leaveDelay,\n },\n enabled: !disableHoverListener,\n handleClose: safePolygon(),\n }),\n useFocus(context, { enabled: !disableFocusListener }),\n useRole(context, { role: \"tooltip\" }),\n useDismiss(context),\n useAriaAnnounce(context, {\n delay: {\n open: enterDelay,\n close: leaveDelay,\n },\n }),\n ]);\n\n const arrowProps = {\n ref: arrowRef,\n context,\n style: {\n position: strategy,\n left: arrowX ?? 0,\n top: arrowY ?? 0,\n },\n };\n\n const getTooltipProps = (): HTMLProps<HTMLDivElement> => {\n return getFloatingProps({\n // @ts-ignore\n \"data-placement\": placement,\n ref: floating,\n style: {\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n },\n });\n };\n\n const getTriggerProps = () =>\n getReferenceProps({\n ref: reference,\n });\n\n return {\n arrowProps,\n open,\n floating,\n reference,\n getTooltipProps,\n getTriggerProps,\n };\n}\n"],"names":["open"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ function capitalize(value) {
2
+ return value.length > 0 ? value[0].toUpperCase() + value.slice(1) : value;
3
+ }
4
+
5
+ export { capitalize };
6
+ //# sourceMappingURL=capitalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capitalize.js","sources":["../src/utils/capitalize.ts"],"sourcesContent":["export function capitalize(value: string): string {\n return value.length > 0 ? value[0].toUpperCase() + value.slice(1) : value;\n}\n"],"names":[],"mappings":"AAAO,SAAS,WAAW,KAAuB,EAAA;AAChD,EAAO,OAAA,KAAA,CAAM,MAAS,GAAA,CAAA,GAAI,KAAM,CAAA,CAAA,CAAA,CAAG,aAAgB,GAAA,KAAA,CAAM,KAAM,CAAA,CAAC,CAAI,GAAA,KAAA,CAAA;AACtE;;;;"}
@@ -0,0 +1,21 @@
1
+ import { clsx } from 'clsx';
2
+ import { createChainedFunction } from './createChainedFunction.js';
3
+
4
+ function mergeProps(propsA, propsB) {
5
+ const props = { ...propsA };
6
+ Object.keys(propsB).forEach((key) => {
7
+ const a = props[key];
8
+ const b = propsB[key];
9
+ if (typeof a === "function" && typeof b === "function" && key.indexOf("on") === 0) {
10
+ props[key] = createChainedFunction(a, b);
11
+ } else if (typeof a === "string" && typeof b === "string" && key === "className") {
12
+ props[key] = clsx(a, b);
13
+ } else {
14
+ props[key] = b != null ? b : a;
15
+ }
16
+ });
17
+ return props;
18
+ }
19
+
20
+ export { mergeProps };
21
+ //# sourceMappingURL=mergeProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeProps.js","sources":["../src/utils/mergeProps.ts"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { createChainedFunction } from \"./createChainedFunction\";\n\ninterface Props {\n [key: string]: unknown;\n}\n\n/**\n * This utility merges two prop objects according to the following rules:\n *\n * - If the prop is a function and begins with \"on\" then chain the functions together\n * - If the prop key is \"className\" then merge them using `clsx`\n * - If the prop is anything else, then use the value from the second parameter unless it's undefined then use the value from the first parameter\n */\nexport function mergeProps(\n propsA: Props,\n propsB: Props\n): Record<string, unknown> {\n const props = { ...propsA };\n\n Object.keys(propsB).forEach((key) => {\n const a: any = props[key];\n const b: any = propsB[key];\n\n if (\n typeof a === \"function\" &&\n typeof b === \"function\" &&\n key.indexOf(\"on\") === 0\n ) {\n props[key] = createChainedFunction(a, b);\n } else if (\n typeof a === \"string\" &&\n typeof b === \"string\" &&\n key === \"className\"\n ) {\n props[key] = clsx(a, b);\n } else {\n props[key] = b ?? a;\n }\n });\n\n return props;\n}\n"],"names":[],"mappings":";;;AAcgB,SAAA,UAAA,CACd,QACA,MACyB,EAAA;AACzB,EAAM,MAAA,KAAA,GAAQ,EAAE,GAAG,MAAO,EAAA,CAAA;AAE1B,EAAA,MAAA,CAAO,IAAK,CAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACnC,IAAA,MAAM,IAAS,KAAM,CAAA,GAAA,CAAA,CAAA;AACrB,IAAA,MAAM,IAAS,MAAO,CAAA,GAAA,CAAA,CAAA;AAEtB,IACE,IAAA,OAAO,CAAM,KAAA,UAAA,IACb,OAAO,CAAA,KAAM,cACb,GAAI,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CACtB,EAAA;AACA,MAAM,KAAA,CAAA,GAAA,CAAA,GAAO,qBAAsB,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KACzC,MAAA,IACE,OAAO,CAAM,KAAA,QAAA,IACb,OAAO,CAAM,KAAA,QAAA,IACb,QAAQ,WACR,EAAA;AACA,MAAM,KAAA,CAAA,GAAA,CAAA,GAAO,IAAK,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KACjB,MAAA;AACL,MAAA,KAAA,CAAM,OAAO,CAAK,IAAA,IAAA,GAAA,CAAA,GAAA,CAAA,CAAA;AAAA,KACpB;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingUI.js","sources":["../src/utils/useFloatingUI.tsx"],"sourcesContent":["import type { Middleware, Placement, Strategy } from \"@floating-ui/react\";\nimport {\n autoUpdate,\n flip,\n limitShift,\n shift,\n useFloating,\n} from \"@floating-ui/react\";\n\nexport type UseFloatingUIProps = {\n /**\n * Set position relative to trigger\n */\n placement?: Placement;\n strategy?: Strategy;\n middleware?: Middleware[];\n /**\n * Set visible state. Defaults to false\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes\n */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const DEFAULT_FLOATING_UI_MIDDLEWARE = [\n flip(),\n shift({ limiter: limitShift() }),\n];\n\nexport function useFloatingUI(\n props: UseFloatingUIProps\n): ReturnType<typeof useFloating> {\n const {\n placement,\n strategy,\n middleware = DEFAULT_FLOATING_UI_MIDDLEWARE,\n open = false,\n onOpenChange,\n } = props;\n\n const { reference, floating, refs, update, ...rest } = useFloating({\n placement,\n strategy,\n middleware,\n open,\n onOpenChange,\n whileElementsMounted: autoUpdate,\n });\n\n return {\n reference,\n floating,\n refs,\n update,\n ...rest,\n };\n}\n"],"names":[],"mappings":";;AA0BO,MAAM,8BAAiC,GAAA;AAAA,EAC5C,IAAK,EAAA;AAAA,EACL,KAAM,CAAA,EAAE,OAAS,EAAA,UAAA,IAAc,CAAA;AACjC,EAAA;AAEO,SAAS,cACd,KACgC,EAAA;AAChC,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAa,GAAA,8BAAA;AAAA,IACb,IAAO,GAAA,KAAA;AAAA,IACP,YAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,EAAE,SAAW,EAAA,QAAA,EAAU,MAAM,MAAW,EAAA,GAAA,IAAA,KAAS,WAAY,CAAA;AAAA,IACjE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAsB,EAAA,UAAA;AAAA,GACvB,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG,IAAA;AAAA,GACL,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useFloatingUI.js","sources":["../src/utils/useFloatingUI.tsx"],"sourcesContent":["import type { Middleware, Placement, Strategy } from \"@floating-ui/react\";\nimport {\n autoUpdate,\n flip,\n limitShift,\n shift,\n useFloating,\n} from \"@floating-ui/react\";\n\nexport type UseFloatingUIProps = {\n /**\n * Sets position relative to trigger.\n */\n placement?: Placement;\n strategy?: Strategy;\n middleware?: Middleware[];\n /**\n * Sets visible state.\n */\n open?: boolean;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const DEFAULT_FLOATING_UI_MIDDLEWARE = [\n flip(),\n shift({ limiter: limitShift() }),\n];\n\nexport function useFloatingUI(\n props: UseFloatingUIProps\n): ReturnType<typeof useFloating> {\n const {\n placement,\n strategy,\n middleware = DEFAULT_FLOATING_UI_MIDDLEWARE,\n open = false,\n onOpenChange,\n } = props;\n\n const { reference, floating, refs, update, ...rest } = useFloating({\n placement,\n strategy,\n middleware,\n open,\n onOpenChange,\n whileElementsMounted: autoUpdate,\n });\n\n return {\n reference,\n floating,\n refs,\n update,\n ...rest,\n };\n}\n"],"names":[],"mappings":";;AA0BO,MAAM,8BAAiC,GAAA;AAAA,EAC5C,IAAK,EAAA;AAAA,EACL,KAAM,CAAA,EAAE,OAAS,EAAA,UAAA,IAAc,CAAA;AACjC,EAAA;AAEO,SAAS,cACd,KACgC,EAAA;AAChC,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAa,GAAA,8BAAA;AAAA,IACb,IAAO,GAAA,KAAA;AAAA,IACP,YAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,EAAE,SAAW,EAAA,QAAA,EAAU,MAAM,MAAW,EAAA,GAAA,IAAA,KAAS,WAAY,CAAA;AAAA,IACjE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAsB,EAAA,UAAA;AAAA,GACvB,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG,IAAA;AAAA,GACL,CAAA;AACF;;;;"}
@@ -4,6 +4,7 @@ import '../utils/useFloatingUI.js';
4
4
  import '../utils/useId.js';
5
5
  import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect.js';
6
6
  import '../salt-provider/SaltProvider.js';
7
+ import 'clsx';
7
8
 
8
9
  const ViewportContext = createContext(null);
9
10
  const ViewportProvider = ({ children }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportProvider.js","sources":["../src/viewport/ViewportProvider.tsx"],"sourcesContent":["import { createContext, useState, useContext, ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nconst ViewportContext = createContext<number | null>(null);\n\ntype ViewportProviderProps = {\n children?: ReactNode;\n};\n\nconst ViewportProvider = ({ children }: ViewportProviderProps) => {\n // Get value directly from the ViewportContext so we can detect if the value is null (no inherited ViewportProvider)\n const existingViewport = useContext(ViewportContext);\n const [viewport, setViewport] = useState(existingViewport);\n\n const noExistingViewport = existingViewport === null;\n const viewportValue = existingViewport || viewport || 0;\n\n useIsomorphicLayoutEffect(() => {\n let observer: ResizeObserver | null = null;\n\n if (noExistingViewport) {\n observer = new ResizeObserver(\n (observerEntries: ResizeObserverEntry[]) => {\n setViewport(observerEntries[0].contentRect.width);\n }\n );\n\n observer.observe(document.body);\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }, [noExistingViewport]);\n\n return (\n <ViewportContext.Provider value={viewportValue}>\n {children}\n </ViewportContext.Provider>\n );\n};\n\nconst useViewport = (): number => {\n const value = useContext(ViewportContext);\n return value === null ? 0 : value;\n};\n\nexport { ViewportProvider, ViewportContext, useViewport };\n"],"names":[],"mappings":";;;;;;;AAGM,MAAA,eAAA,GAAkB,cAA6B,IAAI,EAAA;AAMzD,MAAM,gBAAmB,GAAA,CAAC,EAAE,QAAA,EAAsC,KAAA;AAEhE,EAAM,MAAA,gBAAA,GAAmB,WAAW,eAAe,CAAA,CAAA;AACnD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,gBAAgB,CAAA,CAAA;AAEzD,EAAA,MAAM,qBAAqB,gBAAqB,KAAA,IAAA,CAAA;AAChD,EAAM,MAAA,aAAA,GAAgB,oBAAoB,QAAY,IAAA,CAAA,CAAA;AAEtD,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,QAAkC,GAAA,IAAA,CAAA;AAEtC,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,QAAA,GAAW,IAAI,cAAA;AAAA,QACb,CAAC,eAA2C,KAAA;AAC1C,UAAY,WAAA,CAAA,eAAA,CAAgB,CAAG,CAAA,CAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,SAClD;AAAA,OACF,CAAA;AAEA,MAAS,QAAA,CAAA,OAAA,CAAQ,SAAS,IAAI,CAAA,CAAA;AAAA,KAChC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AAAA,OACtB;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,EACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,IAAyB,KAAO,EAAA,aAAA;AAAA,IAC9B,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,EAAA;AAEA,MAAM,cAAc,MAAc;AAChC,EAAM,MAAA,KAAA,GAAQ,WAAW,eAAe,CAAA,CAAA;AACxC,EAAO,OAAA,KAAA,KAAU,OAAO,CAAI,GAAA,KAAA,CAAA;AAC9B;;;;"}
1
+ {"version":3,"file":"ViewportProvider.js","sources":["../src/viewport/ViewportProvider.tsx"],"sourcesContent":["import { createContext, useState, useContext, ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nconst ViewportContext = createContext<number | null>(null);\n\ntype ViewportProviderProps = {\n children?: ReactNode;\n};\n\nconst ViewportProvider = ({ children }: ViewportProviderProps) => {\n // Get value directly from the ViewportContext so we can detect if the value is null (no inherited ViewportProvider)\n const existingViewport = useContext(ViewportContext);\n const [viewport, setViewport] = useState(existingViewport);\n\n const noExistingViewport = existingViewport === null;\n const viewportValue = existingViewport || viewport || 0;\n\n useIsomorphicLayoutEffect(() => {\n let observer: ResizeObserver | null = null;\n\n if (noExistingViewport) {\n observer = new ResizeObserver(\n (observerEntries: ResizeObserverEntry[]) => {\n setViewport(observerEntries[0].contentRect.width);\n }\n );\n\n observer.observe(document.body);\n }\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }, [noExistingViewport]);\n\n return (\n <ViewportContext.Provider value={viewportValue}>\n {children}\n </ViewportContext.Provider>\n );\n};\n\nconst useViewport = (): number => {\n const value = useContext(ViewportContext);\n return value === null ? 0 : value;\n};\n\nexport { ViewportProvider, ViewportContext, useViewport };\n"],"names":[],"mappings":";;;;;;;;AAGM,MAAA,eAAA,GAAkB,cAA6B,IAAI,EAAA;AAMzD,MAAM,gBAAmB,GAAA,CAAC,EAAE,QAAA,EAAsC,KAAA;AAEhE,EAAM,MAAA,gBAAA,GAAmB,WAAW,eAAe,CAAA,CAAA;AACnD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,gBAAgB,CAAA,CAAA;AAEzD,EAAA,MAAM,qBAAqB,gBAAqB,KAAA,IAAA,CAAA;AAChD,EAAM,MAAA,aAAA,GAAgB,oBAAoB,QAAY,IAAA,CAAA,CAAA;AAEtD,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,QAAkC,GAAA,IAAA,CAAA;AAEtC,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,QAAA,GAAW,IAAI,cAAA;AAAA,QACb,CAAC,eAA2C,KAAA;AAC1C,UAAY,WAAA,CAAA,eAAA,CAAgB,CAAG,CAAA,CAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,SAClD;AAAA,OACF,CAAA;AAEA,MAAS,QAAA,CAAA,OAAA,CAAQ,SAAS,IAAI,CAAA,CAAA;AAAA,KAChC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AAAA,OACtB;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,EACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,IAAyB,KAAO,EAAA,aAAA;AAAA,IAC9B,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,EAAA;AAEA,MAAM,cAAc,MAAc;AAChC,EAAM,MAAA,KAAA,GAAQ,WAAW,eAAe,CAAA,CAAA;AACxC,EAAO,OAAA,KAAA,KAAU,OAAO,CAAI,GAAA,KAAA,CAAA;AAC9B;;;;"}
@@ -1 +1,2 @@
1
1
  export * from "./Avatar";
2
+ export * from "./useAvatarImage";
@@ -0,0 +1,2 @@
1
+ import { ImgHTMLAttributes } from "react";
2
+ export declare function useAvatarImage({ src }: ImgHTMLAttributes<HTMLImageElement>): "loading" | "error" | "pending" | "loaded";
@@ -2,17 +2,17 @@ import { ComponentPropsWithoutRef } from "react";
2
2
  import "./Card.css";
3
3
  export interface CardProps extends ComponentPropsWithoutRef<"div"> {
4
4
  /**
5
+ * **Deprecated:** Use the InteractableCard component instead
6
+ *
5
7
  * If `true`, the card will be disabled.
6
8
  */
7
9
  disabled?: boolean;
8
10
  /**
11
+ * **Deprecated:** Use the InteractableCard component instead
12
+ *
9
13
  * If `true`, interactive styles will be applied to `Card`. These styles give prominence to certain content
10
14
  * on the page.
11
15
  */
12
16
  interactable?: boolean;
13
17
  }
14
- /**
15
- * Card component is a sheet if material that serves as an entry point to more detailed information.
16
- * Cards display content composed of different elements whose size or supported actions vary.
17
- */
18
18
  export declare const Card: import("react").ForwardRefExoticComponent<CardProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { CardProps } from "./Card";
3
+ import "./InteractableCard.css";
4
+ export interface InteractableCardProps extends Omit<CardProps, "disabled" | "interactable"> {
5
+ /**
6
+ * Accent border position: defaults to "bottom"
7
+ */
8
+ accentPlacement?: "bottom" | "top" | "left" | "right";
9
+ /**
10
+ * If `true`, the card will be disabled.
11
+ */
12
+ disabled?: boolean;
13
+ }
14
+ export declare const InteractableCard: import("react").ForwardRefExoticComponent<InteractableCardProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1,2 @@
1
1
  export * from "./Card";
2
+ export * from "./InteractableCard";
@@ -0,0 +1,21 @@
1
+ import { FocusEvent, KeyboardEvent, MouseEvent } from "react";
2
+ export interface CardHookProps<T extends Element> {
3
+ disabled?: boolean;
4
+ onKeyUp?: (event: KeyboardEvent<T>) => void;
5
+ onKeyDown?: (event: KeyboardEvent<T>) => void;
6
+ onClick?: (event: MouseEvent<T>) => void;
7
+ onBlur?: (event: FocusEvent<T>) => void;
8
+ }
9
+ export interface CardHookResult<T extends Element> {
10
+ active: boolean;
11
+ cardProps: {
12
+ "aria-disabled"?: boolean;
13
+ disabled?: boolean;
14
+ tabIndex: number;
15
+ onBlur: (event: FocusEvent<T>) => void;
16
+ onClick?: (event: MouseEvent<T>) => void;
17
+ onKeyDown: (event: KeyboardEvent<T>) => void;
18
+ onKeyUp: (event: KeyboardEvent<T>) => void;
19
+ };
20
+ }
21
+ export declare const useInteractableCard: <T extends Element>({ disabled, onKeyUp, onKeyDown, onClick, onBlur, }: CardHookProps<T>) => CardHookResult<T>;
@@ -0,0 +1,56 @@
1
+ import { ChangeEventHandler, FocusEventHandler, InputHTMLAttributes, ReactNode } from "react";
2
+ import "./Checkbox.css";
3
+ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLLabelElement>, "onChange" | "onBlur" | "onFocus"> {
4
+ /**
5
+ * If `true`, the checkbox will be checked.
6
+ */
7
+ checked?: boolean;
8
+ /**
9
+ * Whether the checkbox component is checked by default
10
+ * This will be disregarded if checked is already set.
11
+ */
12
+ defaultChecked?: boolean;
13
+ /**
14
+ * If `true`, the checkbox will be disabled.
15
+ */
16
+ disabled?: boolean;
17
+ /**
18
+ * If `true`, the checkbox will be in the error state.
19
+ */
20
+ error?: boolean;
21
+ /**
22
+ * If true, the checkbox appears indeterminate. This does not set the native
23
+ * input element to indeterminate due to the inconsistent behaviour across browsers
24
+ * However, a data-indeterminate attribute is set on the input.
25
+ */
26
+ indeterminate?: boolean;
27
+ /**
28
+ * Properties applied to the input element.
29
+ */
30
+ inputProps?: Partial<InputHTMLAttributes<HTMLInputElement>>;
31
+ /**
32
+ * The label to be shown next to the checkbox.
33
+ */
34
+ label?: ReactNode;
35
+ /**
36
+ * The name applied to the input.
37
+ */
38
+ name?: string;
39
+ /**
40
+ * Callback when checkbox loses focus.
41
+ */
42
+ onBlur?: FocusEventHandler<HTMLInputElement>;
43
+ /**
44
+ * Callback when checked state is changed.
45
+ */
46
+ onChange?: ChangeEventHandler<HTMLInputElement>;
47
+ /**
48
+ * Callback when checkbox gains focus.
49
+ */
50
+ onFocus?: FocusEventHandler<HTMLInputElement>;
51
+ /**
52
+ * The value of the checkbox.
53
+ */
54
+ value?: string;
55
+ }
56
+ export declare const Checkbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HTMLLabelElement>>;
@@ -0,0 +1,30 @@
1
+ import { ChangeEventHandler, ComponentPropsWithoutRef } from "react";
2
+ import "./CheckboxGroup.css";
3
+ export interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<"fieldset">, "onChange"> {
4
+ /**
5
+ * The current checked options.
6
+ */
7
+ checkedValues?: string[];
8
+ /**
9
+ * The default selected options for un-controlled component.
10
+ */
11
+ defaultCheckedValues?: string[];
12
+ /**
13
+ * Display group of elements in a compact row.
14
+ */
15
+ direction?: "horizontal" | "vertical";
16
+ /**
17
+ * The name used to reference the value of the control.
18
+ */
19
+ name?: string;
20
+ /**
21
+ * Callback fired when a checkbox is clicked.
22
+ * `event.target.value` returns the value of the checkbox that was clicked.
23
+ */
24
+ onChange?: ChangeEventHandler<HTMLInputElement>;
25
+ /**
26
+ * Only for horizontal direction. When `true` the text in radio button label will wrap to fit within the container. Otherwise, the checkboxes will wrap onto the next line.
27
+ */
28
+ wrap?: boolean;
29
+ }
30
+ export declare const CheckboxGroup: import("react").ForwardRefExoticComponent<CheckboxGroupProps & import("react").RefAttributes<HTMLFieldSetElement>>;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./CheckboxIcon.css";
3
+ export interface CheckboxIconProps {
4
+ checked?: boolean;
5
+ className?: string;
6
+ disabled?: boolean;
7
+ error?: boolean;
8
+ indeterminate?: boolean;
9
+ }
10
+ export declare const CheckboxIcon: ({ checked, className: classNameProp, disabled, error, indeterminate, }: CheckboxIconProps) => JSX.Element;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function CheckboxCheckedIcon({ className, }: {
3
+ className: string;
4
+ }): JSX.Element;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function CheckboxCheckedIconHD({ className, }: {
3
+ className: string;
4
+ }): JSX.Element;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function CheckboxIndeterminateIcon({ className, }: {
3
+ className: string;
4
+ }): JSX.Element;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function CheckboxUncheckedIcon({ className, }: {
3
+ className: string;
4
+ }): JSX.Element;
@@ -0,0 +1,4 @@
1
+ export { CheckboxUncheckedIcon } from "./CheckboxUncheckedIcon";
2
+ export { CheckboxCheckedIcon } from "./CheckboxCheckedIcon";
3
+ export { CheckboxCheckedIconHD } from "./CheckboxCheckedIconHD";
4
+ export { CheckboxIndeterminateIcon } from "./CheckboxIndeterminateIcon";
@@ -0,0 +1,3 @@
1
+ export * from "./Checkbox";
2
+ export * from "./CheckboxGroup";
3
+ export * from "./CheckboxIcon";
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { CheckboxGroupProps } from "../CheckboxGroup";
3
+ export interface CheckboxGroupState {
4
+ name?: CheckboxGroupProps["name"];
5
+ onChange?: CheckboxGroupProps["onChange"];
6
+ checkedValues?: CheckboxGroupProps["checkedValues"];
7
+ }
8
+ declare const CheckboxGroupContext: import("react").Context<CheckboxGroupState>;
9
+ export { CheckboxGroupContext };
@@ -0,0 +1,2 @@
1
+ import { CheckboxGroupState } from "./CheckboxGroupContext";
2
+ export declare function useCheckboxGroup(): CheckboxGroupState;
@@ -5,6 +5,7 @@ export * from "./border-layout";
5
5
  export * from "./breakpoints";
6
6
  export * from "./button";
7
7
  export * from "./card";
8
+ export * from "./checkbox";
8
9
  export * from "./flex-item";
9
10
  export * from "./flex-layout";
10
11
  export * from "./flow-layout";
@@ -12,6 +13,7 @@ export * from "./grid-item";
12
13
  export * from "./grid-layout";
13
14
  export * from "./link";
14
15
  export * from "./panel";
16
+ export * from "./radio-button";
15
17
  export * from "./spinner";
16
18
  export * from "./stack-layout";
17
19
  export * from "./status-indicator";
@@ -9,6 +9,6 @@ import "./Link.css";
9
9
  * <LinkExample to="#link">Action</LinkExample>
10
10
  */
11
11
  export interface LinkProps extends Omit<TextProps<"a">, "as" | "disabled"> {
12
- IconComponent?: ComponentType<IconProps>;
12
+ IconComponent?: ComponentType<IconProps> | null;
13
13
  }
14
14
  export declare const Link: import("react").ForwardRefExoticComponent<Omit<LinkProps, "ref"> & import("react").RefAttributes<HTMLAnchorElement>>;