@salt-ds/core 0.0.0-snapshot-20230623164123 → 0.0.0-snapshot-20230802143610

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 (259) hide show
  1. package/dist-cjs/accordion/Accordion.css.js +6 -0
  2. package/dist-cjs/accordion/Accordion.css.js.map +1 -0
  3. package/dist-cjs/accordion/Accordion.js +73 -0
  4. package/dist-cjs/accordion/Accordion.js.map +1 -0
  5. package/dist-cjs/accordion/AccordionContext.js +29 -0
  6. package/dist-cjs/accordion/AccordionContext.js.map +1 -0
  7. package/dist-cjs/accordion/AccordionGroup.css.js +6 -0
  8. package/dist-cjs/accordion/AccordionGroup.css.js.map +1 -0
  9. package/dist-cjs/accordion/AccordionGroup.js +36 -0
  10. package/dist-cjs/accordion/AccordionGroup.js.map +1 -0
  11. package/dist-cjs/accordion/AccordionHeader.css.js +6 -0
  12. package/dist-cjs/accordion/AccordionHeader.css.js.map +1 -0
  13. package/dist-cjs/accordion/AccordionHeader.js +63 -0
  14. package/dist-cjs/accordion/AccordionHeader.js.map +1 -0
  15. package/dist-cjs/accordion/AccordionPanel.css.js +6 -0
  16. package/dist-cjs/accordion/AccordionPanel.css.js.map +1 -0
  17. package/dist-cjs/accordion/AccordionPanel.js +76 -0
  18. package/dist-cjs/accordion/AccordionPanel.js.map +1 -0
  19. package/dist-cjs/button/Button.css.js +1 -1
  20. package/dist-cjs/card/InteractableCard.css.js +1 -1
  21. package/dist-cjs/card/InteractableCard.js +5 -3
  22. package/dist-cjs/card/InteractableCard.js.map +1 -1
  23. package/dist-cjs/checkbox/Checkbox.css.js +1 -1
  24. package/dist-cjs/checkbox/Checkbox.js +36 -19
  25. package/dist-cjs/checkbox/Checkbox.js.map +1 -1
  26. package/dist-cjs/checkbox/CheckboxGroup.js +10 -6
  27. package/dist-cjs/checkbox/CheckboxGroup.js.map +1 -1
  28. package/dist-cjs/checkbox/CheckboxIcon.css.js +1 -1
  29. package/dist-cjs/checkbox/CheckboxIcon.js +45 -27
  30. package/dist-cjs/checkbox/CheckboxIcon.js.map +1 -1
  31. package/dist-cjs/checkbox/internal/CheckboxGroupContext.js.map +1 -1
  32. package/dist-cjs/drawer/Drawer.css.js +6 -0
  33. package/dist-cjs/drawer/Drawer.css.js.map +1 -0
  34. package/dist-cjs/drawer/Drawer.js +82 -0
  35. package/dist-cjs/drawer/Drawer.js.map +1 -0
  36. package/dist-cjs/drawer/useDrawer.js +36 -0
  37. package/dist-cjs/drawer/useDrawer.js.map +1 -0
  38. package/dist-cjs/form-field/FormField.css.js +1 -1
  39. package/dist-cjs/form-field/FormField.js +4 -2
  40. package/dist-cjs/form-field/FormField.js.map +1 -1
  41. package/dist-cjs/form-field/FormFieldHelperText.css.js +1 -1
  42. package/dist-cjs/form-field/FormFieldLabel.css.js +1 -1
  43. package/dist-cjs/form-field/FormFieldLabel.js +15 -6
  44. package/dist-cjs/form-field/FormFieldLabel.js.map +1 -1
  45. package/dist-cjs/form-field-context/FormFieldContext.js.map +1 -1
  46. package/dist-cjs/index.js +27 -10
  47. package/dist-cjs/index.js.map +1 -1
  48. package/dist-cjs/input/Input.css.js +1 -1
  49. package/dist-cjs/input/Input.js +7 -12
  50. package/dist-cjs/input/Input.js.map +1 -1
  51. package/dist-cjs/multiline-input/MultilineInput.css.js +6 -0
  52. package/dist-cjs/multiline-input/MultilineInput.css.js.map +1 -0
  53. package/dist-cjs/multiline-input/MultilineInput.js +170 -0
  54. package/dist-cjs/multiline-input/MultilineInput.js.map +1 -0
  55. package/dist-cjs/radio-button/RadioButton.css.js +1 -1
  56. package/dist-cjs/radio-button/RadioButton.js +28 -10
  57. package/dist-cjs/radio-button/RadioButton.js.map +1 -1
  58. package/dist-cjs/radio-button/RadioButtonGroup.js +5 -1
  59. package/dist-cjs/radio-button/RadioButtonGroup.js.map +1 -1
  60. package/dist-cjs/radio-button/RadioButtonIcon.css.js +1 -1
  61. package/dist-cjs/radio-button/RadioButtonIcon.js +36 -22
  62. package/dist-cjs/radio-button/RadioButtonIcon.js.map +1 -1
  63. package/dist-cjs/radio-button/internal/RadioGroupContext.js.map +1 -1
  64. package/dist-cjs/status-adornment/StatusAdornment.css.js +1 -1
  65. package/dist-cjs/status-adornment/StatusAdornment.js.map +1 -1
  66. package/dist-cjs/text/Text.css.js +1 -1
  67. package/dist-cjs/toast/Toast.css.js +6 -0
  68. package/dist-cjs/toast/Toast.css.js.map +1 -0
  69. package/dist-cjs/toast/Toast.js +50 -0
  70. package/dist-cjs/toast/Toast.js.map +1 -0
  71. package/dist-cjs/toast/ToastContent.css.js +6 -0
  72. package/dist-cjs/toast/ToastContent.css.js.map +1 -0
  73. package/dist-cjs/toast/ToastContent.js +34 -0
  74. package/dist-cjs/toast/ToastContent.js.map +1 -0
  75. package/dist-cjs/toggle-button/ToggleButton.css.js +6 -0
  76. package/dist-cjs/toggle-button/ToggleButton.css.js.map +1 -0
  77. package/dist-cjs/toggle-button/ToggleButton.js +81 -0
  78. package/dist-cjs/toggle-button/ToggleButton.js.map +1 -0
  79. package/dist-cjs/toggle-button-group/ToggleButtonGroup.css.js +6 -0
  80. package/dist-cjs/toggle-button-group/ToggleButtonGroup.css.js.map +1 -0
  81. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js +117 -0
  82. package/dist-cjs/toggle-button-group/ToggleButtonGroup.js.map +1 -0
  83. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js +20 -0
  84. package/dist-cjs/toggle-button-group/ToggleButtonGroupContext.js.map +1 -0
  85. package/dist-cjs/tooltip/Tooltip.js +52 -17
  86. package/dist-cjs/tooltip/Tooltip.js.map +1 -1
  87. package/dist-cjs/tooltip/useTooltip.js.map +1 -1
  88. package/dist-cjs/utils/useFloatingUI.js +1 -48
  89. package/dist-cjs/utils/useFloatingUI.js.map +1 -1
  90. package/dist-es/accordion/Accordion.css.js +4 -0
  91. package/dist-es/accordion/Accordion.css.js.map +1 -0
  92. package/dist-es/accordion/Accordion.js +69 -0
  93. package/dist-es/accordion/Accordion.js.map +1 -0
  94. package/dist-es/accordion/AccordionContext.js +24 -0
  95. package/dist-es/accordion/AccordionContext.js.map +1 -0
  96. package/dist-es/accordion/AccordionGroup.css.js +4 -0
  97. package/dist-es/accordion/AccordionGroup.css.js.map +1 -0
  98. package/dist-es/accordion/AccordionGroup.js +32 -0
  99. package/dist-es/accordion/AccordionGroup.js.map +1 -0
  100. package/dist-es/accordion/AccordionHeader.css.js +4 -0
  101. package/dist-es/accordion/AccordionHeader.css.js.map +1 -0
  102. package/dist-es/accordion/AccordionHeader.js +59 -0
  103. package/dist-es/accordion/AccordionHeader.js.map +1 -0
  104. package/dist-es/accordion/AccordionPanel.css.js +4 -0
  105. package/dist-es/accordion/AccordionPanel.css.js.map +1 -0
  106. package/dist-es/accordion/AccordionPanel.js +72 -0
  107. package/dist-es/accordion/AccordionPanel.js.map +1 -0
  108. package/dist-es/button/Button.css.js +1 -1
  109. package/dist-es/card/InteractableCard.css.js +1 -1
  110. package/dist-es/card/InteractableCard.js +5 -3
  111. package/dist-es/card/InteractableCard.js.map +1 -1
  112. package/dist-es/checkbox/Checkbox.css.js +1 -1
  113. package/dist-es/checkbox/Checkbox.js +36 -19
  114. package/dist-es/checkbox/Checkbox.js.map +1 -1
  115. package/dist-es/checkbox/CheckboxGroup.js +10 -6
  116. package/dist-es/checkbox/CheckboxGroup.js.map +1 -1
  117. package/dist-es/checkbox/CheckboxIcon.css.js +1 -1
  118. package/dist-es/checkbox/CheckboxIcon.js +46 -28
  119. package/dist-es/checkbox/CheckboxIcon.js.map +1 -1
  120. package/dist-es/checkbox/internal/CheckboxGroupContext.js.map +1 -1
  121. package/dist-es/drawer/Drawer.css.js +4 -0
  122. package/dist-es/drawer/Drawer.css.js.map +1 -0
  123. package/dist-es/drawer/Drawer.js +77 -0
  124. package/dist-es/drawer/Drawer.js.map +1 -0
  125. package/dist-es/drawer/useDrawer.js +32 -0
  126. package/dist-es/drawer/useDrawer.js.map +1 -0
  127. package/dist-es/form-field/FormField.css.js +1 -1
  128. package/dist-es/form-field/FormField.js +4 -2
  129. package/dist-es/form-field/FormField.js.map +1 -1
  130. package/dist-es/form-field/FormFieldHelperText.css.js +1 -1
  131. package/dist-es/form-field/FormFieldLabel.css.js +1 -1
  132. package/dist-es/form-field/FormFieldLabel.js +16 -7
  133. package/dist-es/form-field/FormFieldLabel.js.map +1 -1
  134. package/dist-es/form-field-context/FormFieldContext.js.map +1 -1
  135. package/dist-es/index.js +14 -3
  136. package/dist-es/index.js.map +1 -1
  137. package/dist-es/input/Input.css.js +1 -1
  138. package/dist-es/input/Input.js +7 -12
  139. package/dist-es/input/Input.js.map +1 -1
  140. package/dist-es/multiline-input/MultilineInput.css.js +4 -0
  141. package/dist-es/multiline-input/MultilineInput.css.js.map +1 -0
  142. package/dist-es/multiline-input/MultilineInput.js +166 -0
  143. package/dist-es/multiline-input/MultilineInput.js.map +1 -0
  144. package/dist-es/radio-button/RadioButton.css.js +1 -1
  145. package/dist-es/radio-button/RadioButton.js +28 -10
  146. package/dist-es/radio-button/RadioButton.js.map +1 -1
  147. package/dist-es/radio-button/RadioButtonGroup.js +5 -1
  148. package/dist-es/radio-button/RadioButtonGroup.js.map +1 -1
  149. package/dist-es/radio-button/RadioButtonIcon.css.js +1 -1
  150. package/dist-es/radio-button/RadioButtonIcon.js +36 -22
  151. package/dist-es/radio-button/RadioButtonIcon.js.map +1 -1
  152. package/dist-es/radio-button/internal/RadioGroupContext.js.map +1 -1
  153. package/dist-es/status-adornment/StatusAdornment.css.js +1 -1
  154. package/dist-es/status-adornment/StatusAdornment.js.map +1 -1
  155. package/dist-es/text/Text.css.js +1 -1
  156. package/dist-es/toast/Toast.css.js +4 -0
  157. package/dist-es/toast/Toast.css.js.map +1 -0
  158. package/dist-es/toast/Toast.js +46 -0
  159. package/dist-es/toast/Toast.js.map +1 -0
  160. package/dist-es/toast/ToastContent.css.js +4 -0
  161. package/dist-es/toast/ToastContent.css.js.map +1 -0
  162. package/dist-es/toast/ToastContent.js +30 -0
  163. package/dist-es/toast/ToastContent.js.map +1 -0
  164. package/dist-es/toggle-button/ToggleButton.css.js +4 -0
  165. package/dist-es/toggle-button/ToggleButton.css.js.map +1 -0
  166. package/dist-es/toggle-button/ToggleButton.js +77 -0
  167. package/dist-es/toggle-button/ToggleButton.js.map +1 -0
  168. package/dist-es/toggle-button-group/ToggleButtonGroup.css.js +4 -0
  169. package/dist-es/toggle-button-group/ToggleButtonGroup.css.js.map +1 -0
  170. package/dist-es/toggle-button-group/ToggleButtonGroup.js +113 -0
  171. package/dist-es/toggle-button-group/ToggleButtonGroup.js.map +1 -0
  172. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js +15 -0
  173. package/dist-es/toggle-button-group/ToggleButtonGroupContext.js.map +1 -0
  174. package/dist-es/tooltip/Tooltip.js +52 -17
  175. package/dist-es/tooltip/Tooltip.js.map +1 -1
  176. package/dist-es/tooltip/useTooltip.js.map +1 -1
  177. package/dist-es/utils/useFloatingUI.js +3 -46
  178. package/dist-es/utils/useFloatingUI.js.map +1 -1
  179. package/dist-types/accordion/Accordion.d.ts +29 -0
  180. package/dist-types/accordion/AccordionContext.d.ts +11 -0
  181. package/dist-types/accordion/AccordionGroup.d.ts +3 -0
  182. package/dist-types/accordion/AccordionHeader.d.ts +3 -0
  183. package/dist-types/accordion/AccordionPanel.d.ts +3 -0
  184. package/dist-types/accordion/index.d.ts +4 -0
  185. package/dist-types/card/InteractableCard.d.ts +2 -3
  186. package/dist-types/checkbox/Checkbox.d.ts +6 -2
  187. package/dist-types/checkbox/CheckboxGroup.d.ts +6 -1
  188. package/dist-types/checkbox/CheckboxIcon.d.ts +7 -2
  189. package/dist-types/checkbox/internal/CheckboxGroupContext.d.ts +3 -1
  190. package/dist-types/drawer/Drawer.d.ts +22 -0
  191. package/dist-types/drawer/index.d.ts +2 -0
  192. package/dist-types/drawer/useDrawer.d.ts +27 -0
  193. package/dist-types/form-field/FormField.d.ts +5 -1
  194. package/dist-types/form-field/FormFieldLabel.d.ts +10 -1
  195. package/dist-types/form-field/index.d.ts +0 -1
  196. package/dist-types/form-field-context/FormFieldContext.d.ts +3 -0
  197. package/dist-types/index.d.ts +7 -0
  198. package/dist-types/input/index.d.ts +0 -1
  199. package/dist-types/multiline-input/MultilineInput.d.ts +40 -0
  200. package/dist-types/multiline-input/index.d.ts +1 -0
  201. package/dist-types/radio-button/RadioButton.d.ts +12 -4
  202. package/dist-types/radio-button/RadioButtonGroup.d.ts +4 -0
  203. package/dist-types/radio-button/RadioButtonIcon.d.ts +10 -5
  204. package/dist-types/radio-button/internal/RadioGroupContext.d.ts +3 -1
  205. package/dist-types/status-adornment/StatusAdornment.d.ts +1 -2
  206. package/dist-types/toast/Toast.d.ts +9 -0
  207. package/dist-types/toast/ToastContent.d.ts +2 -0
  208. package/dist-types/toast/index.d.ts +2 -0
  209. package/dist-types/toggle-button/ToggleButton.d.ts +7 -0
  210. package/dist-types/toggle-button/index.d.ts +1 -0
  211. package/dist-types/toggle-button-group/ToggleButtonGroup.d.ts +25 -0
  212. package/dist-types/toggle-button-group/ToggleButtonGroupContext.d.ts +10 -0
  213. package/dist-types/toggle-button-group/index.d.ts +2 -0
  214. package/dist-types/utils/useFloatingUI.d.ts +1 -22
  215. package/package.json +8 -8
  216. package/dist-cjs/checkbox/assets/CheckboxCheckedIcon.js +0 -33
  217. package/dist-cjs/checkbox/assets/CheckboxCheckedIcon.js.map +0 -1
  218. package/dist-cjs/checkbox/assets/CheckboxCheckedIconHD.js +0 -32
  219. package/dist-cjs/checkbox/assets/CheckboxCheckedIconHD.js.map +0 -1
  220. package/dist-cjs/checkbox/assets/CheckboxIndeterminateIcon.js +0 -37
  221. package/dist-cjs/checkbox/assets/CheckboxIndeterminateIcon.js.map +0 -1
  222. package/dist-cjs/checkbox/assets/CheckboxUncheckedIcon.js +0 -26
  223. package/dist-cjs/checkbox/assets/CheckboxUncheckedIcon.js.map +0 -1
  224. package/dist-cjs/form-field/FormFieldControlWrapper.css.js +0 -6
  225. package/dist-cjs/form-field/FormFieldControlWrapper.css.js.map +0 -1
  226. package/dist-cjs/form-field/FormFieldControlWrapper.js +0 -47
  227. package/dist-cjs/form-field/FormFieldControlWrapper.js.map +0 -1
  228. package/dist-cjs/input/adornment-button/AdornmentButton.css.js +0 -6
  229. package/dist-cjs/input/adornment-button/AdornmentButton.css.js.map +0 -1
  230. package/dist-cjs/input/adornment-button/AdornmentButton.js +0 -41
  231. package/dist-cjs/input/adornment-button/AdornmentButton.js.map +0 -1
  232. package/dist-cjs/tooltip/TooltipBase.js +0 -62
  233. package/dist-cjs/tooltip/TooltipBase.js.map +0 -1
  234. package/dist-es/checkbox/assets/CheckboxCheckedIcon.js +0 -29
  235. package/dist-es/checkbox/assets/CheckboxCheckedIcon.js.map +0 -1
  236. package/dist-es/checkbox/assets/CheckboxCheckedIconHD.js +0 -28
  237. package/dist-es/checkbox/assets/CheckboxCheckedIconHD.js.map +0 -1
  238. package/dist-es/checkbox/assets/CheckboxIndeterminateIcon.js +0 -33
  239. package/dist-es/checkbox/assets/CheckboxIndeterminateIcon.js.map +0 -1
  240. package/dist-es/checkbox/assets/CheckboxUncheckedIcon.js +0 -22
  241. package/dist-es/checkbox/assets/CheckboxUncheckedIcon.js.map +0 -1
  242. package/dist-es/form-field/FormFieldControlWrapper.css.js +0 -4
  243. package/dist-es/form-field/FormFieldControlWrapper.css.js.map +0 -1
  244. package/dist-es/form-field/FormFieldControlWrapper.js +0 -41
  245. package/dist-es/form-field/FormFieldControlWrapper.js.map +0 -1
  246. package/dist-es/input/adornment-button/AdornmentButton.css.js +0 -4
  247. package/dist-es/input/adornment-button/AdornmentButton.css.js.map +0 -1
  248. package/dist-es/input/adornment-button/AdornmentButton.js +0 -37
  249. package/dist-es/input/adornment-button/AdornmentButton.js.map +0 -1
  250. package/dist-es/tooltip/TooltipBase.js +0 -58
  251. package/dist-es/tooltip/TooltipBase.js.map +0 -1
  252. package/dist-types/checkbox/assets/CheckboxCheckedIcon.d.ts +0 -4
  253. package/dist-types/checkbox/assets/CheckboxCheckedIconHD.d.ts +0 -4
  254. package/dist-types/checkbox/assets/CheckboxIndeterminateIcon.d.ts +0 -4
  255. package/dist-types/checkbox/assets/CheckboxUncheckedIcon.d.ts +0 -4
  256. package/dist-types/checkbox/assets/index.d.ts +0 -4
  257. package/dist-types/form-field/FormFieldControlWrapper.d.ts +0 -11
  258. package/dist-types/input/adornment-button/AdornmentButton.d.ts +0 -4
  259. package/dist-types/tooltip/TooltipBase.d.ts +0 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButton.js","sources":["../src/toggle-button/ToggleButton.tsx"],"sourcesContent":["import {\n ComponentProps,\n forwardRef,\n useRef,\n MouseEvent,\n FocusEvent,\n} from \"react\";\nimport { clsx } from \"clsx\";\nimport { useToggleButtonGroup } from \"../toggle-button-group\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { makePrefixer, useControlled, useForkRef } from \"../utils\";\n\nimport toggleButtonCss from \"./ToggleButton.css\";\n\nexport interface ToggleButtonProps extends ComponentProps<\"button\"> {\n selected?: boolean;\n onChange?: (event: MouseEvent<HTMLButtonElement>) => void;\n value: string | ReadonlyArray<string> | number | undefined;\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButton\");\n\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n function ToggleButton(props, ref) {\n const {\n children,\n className,\n disabled: disabledProp,\n value,\n onClick,\n onFocus,\n onChange,\n selected: selectedProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button\",\n css: toggleButtonCss,\n window: targetWindow,\n });\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const handleRef = useForkRef(ref, buttonRef);\n\n const toggleButtonGroup = useToggleButtonGroup();\n\n const toggleButtonGroupSelected = toggleButtonGroup\n ? toggleButtonGroup.isSelected(value)\n : selectedProp;\n const focusable = toggleButtonGroup\n ? toggleButtonGroup?.isFocused(value)\n : true;\n const disabled = toggleButtonGroup?.disabled || disabledProp;\n\n const [selected, setSelected] = useControlled({\n controlled: toggleButtonGroupSelected,\n default: Boolean(selectedProp),\n name: \"ToggleButton\",\n state: \"selected\",\n });\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n toggleButtonGroup?.select(event);\n setSelected(!selected);\n onChange?.(event);\n onClick?.(event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLButtonElement>) => {\n toggleButtonGroup?.focus(value);\n onFocus?.(event);\n };\n\n const ariaChecked = selected && !disabled;\n\n return (\n <button\n aria-checked={ariaChecked}\n className={clsx(withBaseName(), className)}\n disabled={disabled}\n role={toggleButtonGroup ? \"radio\" : \"checkbox\"}\n ref={handleRef}\n onClick={handleClick}\n onFocus={handleFocus}\n tabIndex={focusable && !disabled ? 0 : -1}\n value={value}\n {...rest}\n >\n {children}\n </button>\n );\n }\n);\n"],"names":["ToggleButton","toggleButtonCss"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ var css_248z = ".saltToggleButtonGroup {\n display: flex;\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);\n width: fit-content;\n gap: var(--salt-spacing-50);\n padding: calc(var(--salt-spacing-50) - var(--salt-size-border));\n flex-direction: row;\n}\n\n.saltToggleButtonGroup-horizontal .saltToggleButton {\n height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n.saltToggleButtonGroup-vertical {\n flex-direction: column;\n}\n\n.saltToggleButtonGroup-vertical .saltToggleButton {\n justify-content: start;\n}\n";
2
+
3
+ export { css_248z as default };
4
+ //# sourceMappingURL=ToggleButtonGroup.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroup.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,113 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useRef, useState, useCallback, useMemo } from 'react';
3
+ import { clsx } from 'clsx';
4
+ import { useWindow } from '@salt-ds/window';
5
+ import { useComponentCssInjection } from '@salt-ds/styles';
6
+ import { makePrefixer } from '../utils/makePrefixer.js';
7
+ import { useControlled } from '../utils/useControlled.js';
8
+ import '../utils/useFloatingUI.js';
9
+ import { useForkRef } from '../utils/useForkRef.js';
10
+ import '../utils/useId.js';
11
+ import '../salt-provider/SaltProvider.js';
12
+ import '../viewport/ViewportProvider.js';
13
+ import { ToggleButtonGroupContext } from './ToggleButtonGroupContext.js';
14
+ import css_248z from './ToggleButtonGroup.css.js';
15
+
16
+ const withBaseName = makePrefixer("saltToggleButtonGroup");
17
+ const ToggleButtonGroup = forwardRef(function ToggleButtonGroup2(props, ref) {
18
+ const {
19
+ children,
20
+ className,
21
+ value: valueProp,
22
+ defaultValue,
23
+ disabled,
24
+ onChange,
25
+ onKeyDown,
26
+ orientation = "horizontal",
27
+ ...rest
28
+ } = props;
29
+ const targetWindow = useWindow();
30
+ useComponentCssInjection({
31
+ testId: "salt-toggle-button-group",
32
+ css: css_248z,
33
+ window: targetWindow
34
+ });
35
+ const groupRef = useRef(null);
36
+ const handleRef = useForkRef(ref, groupRef);
37
+ const [value, setValue] = useControlled({
38
+ default: defaultValue,
39
+ controlled: valueProp,
40
+ name: "ToggleButtonGroup",
41
+ state: "value"
42
+ });
43
+ const [focused, setFocused] = useState(value);
44
+ const select = useCallback(
45
+ (event) => {
46
+ const newValue = event.currentTarget.value;
47
+ setValue(newValue);
48
+ if (value !== newValue) {
49
+ onChange == null ? void 0 : onChange(event);
50
+ }
51
+ },
52
+ [onChange, value, setValue]
53
+ );
54
+ const isSelected = useCallback(
55
+ (id) => {
56
+ return value === id;
57
+ },
58
+ [value]
59
+ );
60
+ const focus = (id) => {
61
+ setFocused(id);
62
+ };
63
+ const isFocused = useCallback(
64
+ (id) => {
65
+ return focused === id || !focused;
66
+ },
67
+ [focused]
68
+ );
69
+ const contextValue = useMemo(
70
+ () => ({
71
+ select,
72
+ isSelected,
73
+ focus,
74
+ isFocused,
75
+ disabled
76
+ }),
77
+ [select, isSelected, isFocused, disabled]
78
+ );
79
+ const handleKeyDown = (event) => {
80
+ var _a, _b, _c, _d;
81
+ const elements = Array.from(
82
+ (_b = (_a = groupRef.current) == null ? void 0 : _a.querySelectorAll("button:not([disabled])")) != null ? _b : []
83
+ );
84
+ const currentIndex = elements.findIndex(
85
+ (element) => element === document.activeElement
86
+ );
87
+ switch (event.key) {
88
+ case "ArrowDown":
89
+ case "ArrowRight":
90
+ (_c = elements[(currentIndex + 1) % elements.length]) == null ? void 0 : _c.focus();
91
+ break;
92
+ case "ArrowUp":
93
+ case "ArrowLeft":
94
+ (_d = elements[(currentIndex - 1 + elements.length) % elements.length]) == null ? void 0 : _d.focus();
95
+ break;
96
+ }
97
+ onKeyDown == null ? void 0 : onKeyDown(event);
98
+ };
99
+ return /* @__PURE__ */ jsx(ToggleButtonGroupContext.Provider, {
100
+ value: contextValue,
101
+ children: /* @__PURE__ */ jsx("div", {
102
+ className: clsx(withBaseName(), withBaseName(orientation), className),
103
+ role: "radiogroup",
104
+ ref: handleRef,
105
+ onKeyDown: handleKeyDown,
106
+ ...rest,
107
+ children
108
+ })
109
+ });
110
+ });
111
+
112
+ export { ToggleButtonGroup };
113
+ //# sourceMappingURL=ToggleButtonGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroup.js","sources":["../src/toggle-button-group/ToggleButtonGroup.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { clsx } from \"clsx\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { makePrefixer, useControlled, useForkRef } from \"../utils\";\nimport { ToggleButtonGroupContext } from \"./ToggleButtonGroupContext\";\nimport toggleButtonGroupCss from \"./ToggleButtonGroup.css\";\n\nexport interface ToggleButtonGroupProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: string | ReadonlyArray<string> | number | undefined;\n /**\n * If `true`, the Toggle Button Group will be disabled.\n */\n disabled?: boolean;\n /**\n * The value. Use when the component is controlled.\n */\n value?: string | ReadonlyArray<string> | number | undefined;\n /**\n * Callback fired when the selection changes.\n * @param event\n */\n onChange?: (event: SyntheticEvent<HTMLButtonElement>) => void;\n /**\n * The orientation of the toggle buttons.\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButtonGroup\");\n\nexport const ToggleButtonGroup = forwardRef<\n HTMLDivElement,\n ToggleButtonGroupProps\n>(function ToggleButtonGroup(props, ref) {\n const {\n children,\n className,\n value: valueProp,\n defaultValue,\n disabled,\n onChange,\n onKeyDown,\n orientation = \"horizontal\",\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button-group\",\n css: toggleButtonGroupCss,\n window: targetWindow,\n });\n\n const groupRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(ref, groupRef);\n\n const [value, setValue] = useControlled({\n default: defaultValue,\n controlled: valueProp,\n name: \"ToggleButtonGroup\",\n state: \"value\",\n });\n const [focused, setFocused] = useState<\n string | ReadonlyArray<string> | number | undefined\n >(value);\n\n const select = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>) => {\n const newValue = event.currentTarget.value;\n setValue(newValue);\n if (value !== newValue) {\n onChange?.(event);\n }\n },\n [onChange, value, setValue]\n );\n\n const isSelected = useCallback(\n (id: string | ReadonlyArray<string> | number | undefined) => {\n return value === id;\n },\n [value]\n );\n\n const focus = (id: string | ReadonlyArray<string> | number | undefined) => {\n setFocused(id);\n };\n\n const isFocused = useCallback(\n (id: string | ReadonlyArray<string> | number | undefined) => {\n return focused === id || !focused;\n },\n [focused]\n );\n\n const contextValue = useMemo(\n () => ({\n select,\n isSelected,\n focus,\n isFocused,\n disabled,\n }),\n [select, isSelected, isFocused, disabled]\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const elements: HTMLElement[] = Array.from(\n groupRef.current?.querySelectorAll(\"button:not([disabled])\") ?? []\n );\n const currentIndex = elements.findIndex(\n (element) => element === document.activeElement\n );\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n elements[(currentIndex + 1) % elements.length]?.focus();\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n elements[\n (currentIndex - 1 + elements.length) % elements.length\n ]?.focus();\n break;\n }\n\n onKeyDown?.(event);\n };\n\n return (\n <ToggleButtonGroupContext.Provider value={contextValue}>\n <div\n className={clsx(withBaseName(), withBaseName(orientation), className)}\n role=\"radiogroup\"\n ref={handleRef}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </div>\n </ToggleButtonGroupContext.Provider>\n );\n});\n"],"names":["ToggleButtonGroup","toggleButtonGroupCss"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { useContext } from 'react';
2
+ import { createContext } from '../utils/createContext.js';
3
+ import '../utils/useFloatingUI.js';
4
+ import '../utils/useId.js';
5
+ import '../salt-provider/SaltProvider.js';
6
+ import '../viewport/ViewportProvider.js';
7
+ import 'clsx';
8
+
9
+ const ToggleButtonGroupContext = createContext("ToggleButtonGroupContext", void 0);
10
+ function useToggleButtonGroup() {
11
+ return useContext(ToggleButtonGroupContext);
12
+ }
13
+
14
+ export { ToggleButtonGroupContext, useToggleButtonGroup };
15
+ //# sourceMappingURL=ToggleButtonGroupContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroupContext.js","sources":["../src/toggle-button-group/ToggleButtonGroupContext.ts"],"sourcesContent":["import { SyntheticEvent, useContext } from \"react\";\nimport { createContext } from \"../utils\";\nexport interface ToggleButtonGroupContextValue {\n disabled?: boolean;\n select: (event: SyntheticEvent<HTMLButtonElement>) => void;\n isSelected: (\n id: string | ReadonlyArray<string> | number | undefined\n ) => boolean;\n focus: (id: string | ReadonlyArray<string> | number | undefined) => void;\n isFocused: (\n id: string | ReadonlyArray<string> | number | undefined\n ) => boolean;\n}\n\nexport const ToggleButtonGroupContext = createContext<\n ToggleButtonGroupContextValue | undefined\n>(\"ToggleButtonGroupContext\", undefined);\n\nexport function useToggleButtonGroup() {\n return useContext(ToggleButtonGroupContext);\n}\n"],"names":[],"mappings":";;;;;;;;AAca,MAAA,wBAAA,GAA2B,aAEtC,CAAA,0BAAA,EAA4B,KAAS,CAAA,EAAA;AAEhC,SAAS,oBAAuB,GAAA;AACrC,EAAA,OAAO,WAAW,wBAAwB,CAAA,CAAA;AAC5C;;;;"}
@@ -1,17 +1,21 @@
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';
5
+ import { useWindow } from '@salt-ds/window';
6
+ import { useComponentCssInjection } from '@salt-ds/styles';
7
+ import { StatusIndicator } from '../status-indicator/StatusIndicator.js';
4
8
  import { makePrefixer } from '../utils/makePrefixer.js';
5
- import { useFloatingComponent } from '../utils/useFloatingUI.js';
9
+ import '../utils/useFloatingUI.js';
6
10
  import { useForkRef } from '../utils/useForkRef.js';
7
11
  import '../utils/useId.js';
8
- import '../salt-provider/SaltProvider.js';
12
+ import { SaltProvider } from '../salt-provider/SaltProvider.js';
9
13
  import '../viewport/ViewportProvider.js';
10
14
  import { mergeProps } from '../utils/mergeProps.js';
11
15
  import { useTooltip } from './useTooltip.js';
16
+ import css_248z from './Tooltip.css.js';
12
17
  import '../form-field-context/FormFieldContext.js';
13
18
  import { useFormFieldProps } from '../form-field-context/useFormFieldProps.js';
14
- import { TooltipBase } from './TooltipBase.js';
15
19
 
16
20
  const withBaseName = makePrefixer("saltTooltip");
17
21
  const Tooltip = forwardRef(
@@ -19,7 +23,7 @@ const Tooltip = forwardRef(
19
23
  const {
20
24
  children,
21
25
  className,
22
- disabled: disabledProp = false,
26
+ disabled: disabledProp,
23
27
  hideArrow = false,
24
28
  hideIcon = false,
25
29
  open: openProp,
@@ -31,12 +35,18 @@ const Tooltip = forwardRef(
31
35
  ...rest
32
36
  } = props;
33
37
  const {
38
+ a11yProps,
34
39
  disabled: formFieldDisabled,
35
40
  validationStatus: formFieldValidationStatus
36
41
  } = useFormFieldProps();
37
42
  const disabled = formFieldDisabled != null ? formFieldDisabled : disabledProp;
38
43
  const status = formFieldValidationStatus != null ? formFieldValidationStatus : statusProp;
39
- const { Component } = useFloatingComponent();
44
+ const targetWindow = useWindow();
45
+ useComponentCssInjection({
46
+ testId: "salt-tooltip",
47
+ css: css_248z,
48
+ window: targetWindow
49
+ });
40
50
  const hookProps = {
41
51
  open: openProp,
42
52
  placement,
@@ -63,18 +73,43 @@ const Tooltip = forwardRef(
63
73
  ...mergeProps(getTriggerProps(), children.props),
64
74
  ref: triggerRef
65
75
  }),
66
- /* @__PURE__ */ jsx(Component, {
67
- className: clsx(withBaseName(), withBaseName(status), className),
68
- open,
69
- disabled,
70
- ref: floatingRef,
71
- ...getTooltipProps(),
72
- children: /* @__PURE__ */ jsx(TooltipBase, {
73
- hideIcon,
74
- status,
75
- content,
76
- hideArrow,
77
- arrowProps
76
+ open && !disabled && /* @__PURE__ */ jsx(FloatingPortal, {
77
+ children: /* @__PURE__ */ jsx(SaltProvider, {
78
+ children: /* @__PURE__ */ jsxs("div", {
79
+ className: clsx(
80
+ withBaseName(),
81
+ withBaseName(status),
82
+ className
83
+ ),
84
+ ref: floatingRef,
85
+ ...getTooltipProps(),
86
+ children: [
87
+ /* @__PURE__ */ jsxs("div", {
88
+ className: withBaseName("container"),
89
+ children: [
90
+ !hideIcon && /* @__PURE__ */ jsx(StatusIndicator, {
91
+ status,
92
+ size: 1,
93
+ className: withBaseName("icon")
94
+ }),
95
+ /* @__PURE__ */ jsx("span", {
96
+ id: a11yProps == null ? void 0 : a11yProps["aria-describedby"],
97
+ className: withBaseName("content"),
98
+ children: content
99
+ })
100
+ ]
101
+ }),
102
+ !hideArrow && /* @__PURE__ */ jsx(FloatingArrow, {
103
+ ...arrowProps,
104
+ className: withBaseName("arrow"),
105
+ strokeWidth: 1,
106
+ fill: "var(--salt-container-primary-background)",
107
+ stroke: "var(--tooltip-status-borderColor)",
108
+ height: 5,
109
+ width: 10
110
+ })
111
+ ]
112
+ })
78
113
  })
79
114
  })
80
115
  ]
@@ -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 isValidElement,\n ReactNode,\n Ref,\n} from \"react\";\n\nimport { ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n mergeProps,\n UseFloatingUIProps,\n useForkRef,\n useFloatingComponent,\n} from \"../utils\";\n\nimport { useTooltip, UseTooltipProps } from \"./useTooltip\";\nimport { useFormFieldProps } from \"../form-field-context\";\nimport { TooltipBase } from \"./TooltipBase\";\n\nconst withBaseName = makePrefixer(\"saltTooltip\");\n\nexport interface TooltipProps\n extends Pick<UseFloatingUIProps, \"open\" | \"onOpenChange\" | \"placement\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\"> {\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: disabledProp = false,\n hideArrow = false,\n hideIcon = false,\n open: openProp,\n content,\n status: statusProp = \"info\",\n placement = \"right\",\n enterDelay = 300,\n leaveDelay = 0,\n ...rest\n } = props;\n\n const {\n disabled: formFieldDisabled,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const disabled = formFieldDisabled ?? disabledProp;\n const status = formFieldValidationStatus ?? statusProp;\n\n const { Component } = useFloatingComponent();\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 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 <Component\n className={clsx(withBaseName(), withBaseName(status), className)}\n open={open}\n disabled={disabled}\n ref={floatingRef}\n {...getTooltipProps()}\n >\n <TooltipBase\n hideIcon={hideIcon}\n status={status}\n content={content}\n hideArrow={hideArrow}\n arrowProps={arrowProps}\n />\n </Component>\n </>\n );\n }\n);\n"],"names":["Tooltip"],"mappings":";;;;;;;;;;;;;;;AAuBA,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,UAAU,YAAe,GAAA,KAAA;AAAA,MACzB,SAAY,GAAA,KAAA;AAAA,MACZ,QAAW,GAAA,KAAA;AAAA,MACX,IAAM,EAAA,QAAA;AAAA,MACN,OAAA;AAAA,MACA,QAAQ,UAAa,GAAA,MAAA;AAAA,MACrB,SAAY,GAAA,OAAA;AAAA,MACZ,UAAa,GAAA,GAAA;AAAA,MACb,UAAa,GAAA,CAAA;AAAA,MACV,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAM,MAAA;AAAA,MACJ,QAAU,EAAA,iBAAA;AAAA,MACV,gBAAkB,EAAA,yBAAA;AAAA,QAChB,iBAAkB,EAAA,CAAA;AAEtB,IAAA,MAAM,WAAW,iBAAqB,IAAA,IAAA,GAAA,iBAAA,GAAA,YAAA,CAAA;AACtC,IAAA,MAAM,SAAS,yBAA6B,IAAA,IAAA,GAAA,yBAAA,GAAA,UAAA,CAAA;AAE5C,IAAM,MAAA,EAAE,SAAU,EAAA,GAAI,oBAAqB,EAAA,CAAA;AAE3C,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;AACA,IAAM,MAAA,WAAA,GAAc,UAAW,CAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AAE5C,IACE,uBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,MACG,QAAA,EAAA;AAAA,QAAe,cAAA,CAAA,QAAQ,CACtB,IAAA,YAAA,CAAa,QAAU,EAAA;AAAA,UACrB,GAAG,UAAA,CAAW,eAAgB,EAAA,EAAG,SAAS,KAAK,CAAA;AAAA,UAC/C,GAAK,EAAA,UAAA;AAAA,SACN,CAAA;AAAA,wBAEF,GAAA,CAAA,SAAA,EAAA;AAAA,UACC,WAAW,IAAK,CAAA,YAAA,IAAgB,YAAa,CAAA,MAAM,GAAG,SAAS,CAAA;AAAA,UAC/D,IAAA;AAAA,UACA,QAAA;AAAA,UACA,GAAK,EAAA,WAAA;AAAA,UACJ,GAAG,eAAgB,EAAA;AAAA,UAEpB,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA;AAAA,YACC,QAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA;AAAA,YACA,SAAA;AAAA,YACA,UAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OAAA;AAAA,KACF,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 isValidElement,\n ReactNode,\n Ref,\n} from \"react\";\nimport { FloatingArrow, FloatingPortal } from \"@floating-ui/react\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { StatusIndicator, ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n mergeProps,\n UseFloatingUIProps,\n useForkRef,\n} from \"../utils\";\nimport { SaltProvider } from \"../salt-provider\";\n\nimport { useTooltip, UseTooltipProps } from \"./useTooltip\";\nimport tooltipCss from \"./Tooltip.css\";\nimport { useFormFieldProps } from \"../form-field-context\";\n\nconst withBaseName = makePrefixer(\"saltTooltip\");\n\nexport interface TooltipProps\n extends Pick<UseFloatingUIProps, \"open\" | \"onOpenChange\" | \"placement\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\"> {\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: disabledProp,\n hideArrow = false,\n hideIcon = false,\n open: openProp,\n content,\n status: statusProp = \"info\",\n placement = \"right\",\n enterDelay = 300,\n leaveDelay = 0,\n ...rest\n } = props;\n\n const {\n a11yProps,\n disabled: formFieldDisabled,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const disabled = formFieldDisabled ?? disabledProp;\n const status = formFieldValidationStatus ?? statusProp;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tooltip\",\n css: tooltipCss,\n window: targetWindow,\n });\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\n id={a11yProps?.[\"aria-describedby\"]}\n className={withBaseName(\"content\")}\n >\n {content}\n </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","tooltipCss"],"mappings":"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"}
@@ -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<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\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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"}
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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"}
@@ -1,46 +1,5 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { FloatingPortal, platform, flip, shift, limitShift, useFloating, autoUpdate } from '@floating-ui/react';
3
- import { createContext, forwardRef, useMemo, useContext } from 'react';
4
- import { SaltProvider } from '../salt-provider/SaltProvider.js';
1
+ import { flip, shift, limitShift, useFloating, autoUpdate } from '@floating-ui/react';
5
2
 
6
- const FloatingComponentContext = createContext({
7
- Component: forwardRef((props, ref) => {
8
- const { open, disabled, ...rest } = props;
9
- return open && !disabled ? /* @__PURE__ */ jsx(FloatingPortal, {
10
- children: /* @__PURE__ */ jsx(SaltProvider, {
11
- children: /* @__PURE__ */ jsx("div", {
12
- ...rest,
13
- ref
14
- })
15
- })
16
- }) : null;
17
- })
18
- });
19
- if (process.env.NODE_ENV !== "production") {
20
- FloatingComponentContext.displayName = "FloatingComponentContext";
21
- }
22
- function FloatingComponentProvider(props) {
23
- const { Component, children } = props;
24
- const value = useMemo(() => ({ Component }), [Component]);
25
- return /* @__PURE__ */ jsx(FloatingComponentContext.Provider, {
26
- value,
27
- children
28
- });
29
- }
30
- function useFloatingComponent() {
31
- return useContext(FloatingComponentContext);
32
- }
33
- const PlatformContext = createContext(platform);
34
- function FloatingPlatformProvider(props) {
35
- const { platform: platformProp, children } = props;
36
- return /* @__PURE__ */ jsx(PlatformContext.Provider, {
37
- value: platformProp,
38
- children
39
- });
40
- }
41
- function usePlatform() {
42
- return useContext(PlatformContext);
43
- }
44
3
  const DEFAULT_FLOATING_UI_MIDDLEWARE = [
45
4
  flip(),
46
5
  shift({ limiter: limitShift() })
@@ -53,15 +12,13 @@ function useFloatingUI(props) {
53
12
  open = false,
54
13
  onOpenChange
55
14
  } = props;
56
- const platform2 = usePlatform();
57
15
  const { reference, floating, refs, update, ...rest } = useFloating({
58
16
  placement,
59
17
  strategy,
60
18
  middleware,
61
19
  open,
62
20
  onOpenChange,
63
- whileElementsMounted: autoUpdate,
64
- platform: platform2
21
+ whileElementsMounted: autoUpdate
65
22
  });
66
23
  return {
67
24
  reference,
@@ -72,5 +29,5 @@ function useFloatingUI(props) {
72
29
  };
73
30
  }
74
31
 
75
- export { DEFAULT_FLOATING_UI_MIDDLEWARE, FloatingComponentProvider, FloatingPlatformProvider, useFloatingComponent, useFloatingUI, usePlatform };
32
+ export { DEFAULT_FLOATING_UI_MIDDLEWARE, useFloatingUI };
76
33
  //# sourceMappingURL=useFloatingUI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingUI.js","sources":["../src/utils/useFloatingUI.tsx"],"sourcesContent":["import type {\n Middleware,\n Placement,\n Platform,\n Strategy,\n} from \"@floating-ui/react\";\nimport {\n autoUpdate,\n flip,\n limitShift,\n platform,\n shift,\n useFloating,\n} from \"@floating-ui/react\";\nimport {\n createContext,\n ReactNode,\n useContext,\n useMemo,\n ForwardedRef,\n forwardRef,\n PropsWithChildren,\n ComponentType,\n} from \"react\";\n\nimport { FloatingPortal } from \"@floating-ui/react\";\nimport { SaltProvider } from \"../salt-provider\";\n\nexport interface FloatingComponentProps extends UseFloatingUIProps {\n /**\n * Option to not render the popper.\n */\n disabled: boolean;\n}\n\nexport interface FloatingComponentContextType {\n Component: ComponentType<PropsWithChildren<FloatingComponentProps>>;\n}\n\nconst FloatingComponentContext = createContext<FloatingComponentContextType>({\n Component: forwardRef((props, ref: ForwardedRef<HTMLDivElement>) => {\n const { open, disabled, ...rest } = props;\n return open && !disabled ? (\n <FloatingPortal>\n <SaltProvider>\n <div {...rest} ref={ref} />\n </SaltProvider>\n </FloatingPortal>\n ) : null;\n }),\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n FloatingComponentContext.displayName = \"FloatingComponentContext\";\n}\n\nexport interface FloatingComponentProviderProps\n extends FloatingComponentContextType {\n children: ReactNode;\n}\n\nexport function FloatingComponentProvider(\n props: FloatingComponentProviderProps\n) {\n const { Component, children } = props;\n const value = useMemo(() => ({ Component }), [Component]);\n\n return (\n <FloatingComponentContext.Provider value={value}>\n {children}\n </FloatingComponentContext.Provider>\n );\n}\n\nexport function useFloatingComponent() {\n return useContext(FloatingComponentContext);\n}\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\nconst PlatformContext = createContext<Platform>(platform);\n\nexport interface FloatingPlatformProviderProps {\n platform: Platform;\n children: ReactNode;\n}\n\nexport function FloatingPlatformProvider(props: FloatingPlatformProviderProps) {\n const { platform: platformProp, children } = props;\n\n return (\n <PlatformContext.Provider value={platformProp}>\n {children}\n </PlatformContext.Provider>\n );\n}\n\nexport function usePlatform() {\n return useContext(PlatformContext);\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 platform = usePlatform();\n\n const { reference, floating, refs, update, ...rest } = useFloating({\n placement,\n strategy,\n middleware,\n open,\n onOpenChange,\n whileElementsMounted: autoUpdate,\n platform,\n });\n\n return {\n reference,\n floating,\n refs,\n update,\n ...rest,\n };\n}\n"],"names":["platform"],"mappings":";;;;;AAuCA,MAAM,2BAA2B,aAA4C,CAAA;AAAA,EAC3E,SAAW,EAAA,UAAA,CAAW,CAAC,KAAA,EAAO,GAAsC,KAAA;AAClE,IAAA,MAAM,EAAE,IAAA,EAAM,QAAa,EAAA,GAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AACpC,IAAO,OAAA,IAAA,IAAQ,CAAC,QAAA,mBACb,GAAA,CAAA,cAAA,EAAA;AAAA,MACC,QAAC,kBAAA,GAAA,CAAA,YAAA,EAAA;AAAA,QACC,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,UAAK,GAAG,IAAA;AAAA,UAAM,GAAA;AAAA,SAAU,CAAA;AAAA,OAC3B,CAAA;AAAA,KACF,CACE,GAAA,IAAA,CAAA;AAAA,GACL,CAAA;AACH,CAAC,CAAA,CAAA;AAED,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,wBAAA,CAAyB,WAAc,GAAA,0BAAA,CAAA;AACzC,CAAA;AAOO,SAAS,0BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,SAAW,EAAA,QAAA,EAAa,GAAA,KAAA,CAAA;AAChC,EAAM,MAAA,KAAA,GAAQ,QAAQ,OAAO,EAAE,WAAc,CAAA,EAAA,CAAC,SAAS,CAAC,CAAA,CAAA;AAExD,EACE,uBAAA,GAAA,CAAC,yBAAyB,QAAzB,EAAA;AAAA,IAAkC,KAAA;AAAA,IAChC,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,oBAAuB,GAAA;AACrC,EAAA,OAAO,WAAW,wBAAwB,CAAA,CAAA;AAC5C,CAAA;AAmBA,MAAM,eAAA,GAAkB,cAAwB,QAAQ,CAAA,CAAA;AAOjD,SAAS,yBAAyB,KAAsC,EAAA;AAC7E,EAAA,MAAM,EAAE,QAAA,EAAU,YAAc,EAAA,QAAA,EAAa,GAAA,KAAA,CAAA;AAE7C,EACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,IAAyB,KAAO,EAAA,YAAA;AAAA,IAC9B,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,WAAc,GAAA;AAC5B,EAAA,OAAO,WAAW,eAAe,CAAA,CAAA;AACnC,CAAA;AAEO,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,MAAMA,YAAW,WAAY,EAAA,CAAA;AAE7B,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,IACtB,QAAAA,EAAAA,SAAAA;AAAA,GACD,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;;;;"}
@@ -0,0 +1,29 @@
1
+ import { ComponentPropsWithoutRef, SyntheticEvent } from "react";
2
+ export interface AccordionProps extends ComponentPropsWithoutRef<"div"> {
3
+ /**
4
+ * AccordionGroup value.
5
+ */
6
+ value: string;
7
+ /**
8
+ * Whether the accordion is expanded.
9
+ */
10
+ expanded?: boolean;
11
+ /**
12
+ * Whether the accordion is expanded by default.
13
+ */
14
+ defaultExpanded?: boolean;
15
+ /**
16
+ * Callback fired when the accordion is toggled.
17
+ * @param event
18
+ */
19
+ onToggle?: (event: SyntheticEvent<HTMLButtonElement>) => void;
20
+ /**
21
+ * Whether the accordion is disabled.
22
+ */
23
+ disabled?: boolean;
24
+ /**
25
+ * The status of the accordion.
26
+ */
27
+ status?: "error" | "warning" | "success";
28
+ }
29
+ export declare const Accordion: import("react").ForwardRefExoticComponent<AccordionProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,11 @@
1
+ import { SyntheticEvent } from "react";
2
+ export interface AccordionContextValue {
3
+ value: string;
4
+ expanded: boolean;
5
+ toggle: (event: SyntheticEvent<HTMLButtonElement>) => void;
6
+ disabled: boolean;
7
+ id: string;
8
+ status?: "error" | "warning" | "success";
9
+ }
10
+ export declare const AccordionContext: import("react").Context<AccordionContextValue>;
11
+ export declare function useAccordion(): AccordionContextValue;
@@ -0,0 +1,3 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ export declare type AccordionGroupProps = ComponentPropsWithoutRef<"div">;
3
+ export declare const AccordionGroup: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,3 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ export declare type AccordionHeaderProps = ComponentPropsWithoutRef<"button">;
3
+ export declare const AccordionHeader: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,3 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ export declare type AccordionPanelProps = ComponentPropsWithoutRef<"div">;
3
+ export declare const AccordionPanel: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,4 @@
1
+ export * from "./AccordionGroup";
2
+ export * from "./AccordionPanel";
3
+ export * from "./Accordion";
4
+ export * from "./AccordionHeader";
@@ -1,6 +1,5 @@
1
- /// <reference types="react" />
2
- import { CardProps } from "./Card";
3
- export interface InteractableCardProps extends Omit<CardProps, "disabled" | "interactable"> {
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ export interface InteractableCardProps extends ComponentPropsWithoutRef<"div"> {
4
3
  /**
5
4
  * Accent border position: defaults to "bottom"
6
5
  */
@@ -1,4 +1,5 @@
1
1
  import { ChangeEventHandler, FocusEventHandler, InputHTMLAttributes, ReactNode } from "react";
2
+ import { AdornmentValidationStatus } from "../status-adornment";
2
3
  export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLLabelElement>, "onChange" | "onBlur" | "onFocus"> {
3
4
  /**
4
5
  * If `true`, the checkbox will be checked.
@@ -53,8 +54,11 @@ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLLabelElement
53
54
  */
54
55
  value?: string;
55
56
  /**
56
- * Validation status.
57
+ * Validation status, one of "warning" | "error" | "success"
58
+ *
59
+ * Checkbox has styling variants for "error" and "warning".
60
+ * No visual styling will be applied on "success" variant.
57
61
  */
58
- validationStatus?: "error" | "warning";
62
+ validationStatus?: AdornmentValidationStatus;
59
63
  }
60
64
  export declare const Checkbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HTMLLabelElement>>;
@@ -1,4 +1,5 @@
1
1
  import { ChangeEventHandler, ComponentPropsWithoutRef } from "react";
2
+ import { AdornmentValidationStatus } from "../status-adornment";
2
3
  export interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<"fieldset">, "onChange"> {
3
4
  /**
4
5
  * The current checked options.
@@ -25,6 +26,10 @@ export interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<"field
25
26
  * `event.target.value` returns the value of the checkbox that was clicked.
26
27
  */
27
28
  onChange?: ChangeEventHandler<HTMLInputElement>;
29
+ /**
30
+ * If `true`, the component is read only.
31
+ */
32
+ readOnly?: boolean;
28
33
  /**
29
34
  * 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.
30
35
  */
@@ -32,6 +37,6 @@ export interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<"field
32
37
  /**
33
38
  * Validation status.
34
39
  */
35
- validationStatus?: "error" | "warning";
40
+ validationStatus?: AdornmentValidationStatus;
36
41
  }
37
42
  export declare const CheckboxGroup: import("react").ForwardRefExoticComponent<CheckboxGroupProps & import("react").RefAttributes<HTMLFieldSetElement>>;
@@ -1,10 +1,15 @@
1
1
  /// <reference types="react" />
2
+ import { AdornmentValidationStatus } from "../status-adornment";
2
3
  export interface CheckboxIconProps {
3
4
  checked?: boolean;
4
5
  className?: string;
5
6
  disabled?: boolean;
7
+ /**
8
+ * @deprecated Use validationStatus instead
9
+ */
6
10
  error?: boolean;
7
11
  indeterminate?: boolean;
8
- validationStatus?: "error" | "warning";
12
+ readOnly?: boolean;
13
+ validationStatus?: AdornmentValidationStatus;
9
14
  }
10
- export declare const CheckboxIcon: ({ checked, className: classNameProp, disabled, error, indeterminate, validationStatus, }: CheckboxIconProps) => JSX.Element;
15
+ export declare const CheckboxIcon: ({ checked, className, disabled, error, indeterminate, validationStatus, readOnly, }: CheckboxIconProps) => JSX.Element;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { a11yValueAriaProps } from "../../form-field-context";
3
+ import { AdornmentValidationStatus } from "../../status-adornment";
3
4
  import { CheckboxGroupProps } from "../CheckboxGroup";
4
5
  export interface CheckboxGroupState {
5
6
  a11yProps?: a11yValueAriaProps;
@@ -7,7 +8,8 @@ export interface CheckboxGroupState {
7
8
  name?: CheckboxGroupProps["name"];
8
9
  onChange?: CheckboxGroupProps["onChange"];
9
10
  checkedValues?: CheckboxGroupProps["checkedValues"];
10
- validationStatus?: "error" | "warning";
11
+ readOnly?: boolean;
12
+ validationStatus?: AdornmentValidationStatus;
11
13
  }
12
14
  declare const CheckboxGroupContext: import("react").Context<CheckboxGroupState>;
13
15
  export { CheckboxGroupContext };
@@ -0,0 +1,22 @@
1
+ import { HTMLAttributes } from "react";
2
+ export declare const DRAWER_POSITIONS: readonly ["left", "top", "right", "bottom"];
3
+ export declare type DrawerPositions = typeof DRAWER_POSITIONS[number];
4
+ export interface DrawerProps extends HTMLAttributes<HTMLDivElement> {
5
+ /**
6
+ * Defines the drawer position within the screen.
7
+ */
8
+ position?: DrawerPositions;
9
+ /**
10
+ * Display or hide the component.
11
+ */
12
+ open?: boolean;
13
+ /**
14
+ * Callback function triggered when open state changes.
15
+ */
16
+ onOpenChange?: (open: boolean) => void;
17
+ /**
18
+ * Change background color palette
19
+ */
20
+ variant?: "primary" | "secondary";
21
+ }
22
+ export declare const Drawer: import("react").ForwardRefExoticComponent<DrawerProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,2 @@
1
+ export * from "./Drawer";
2
+ export * from "./useDrawer";