@redis-ui/components 47.3.2 → 47.4.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 (157) hide show
  1. package/dist/AppSelectionMenu/components/Compose/Compose.cjs +1 -1
  2. package/dist/AppSelectionMenu/components/Compose/Compose.js +1 -1
  3. package/dist/Banner/components/BannerSemanticComponents/SemanticCloseButton/SemanticCloseButton.style.cjs +1 -1
  4. package/dist/Banner/components/BannerSemanticComponents/SemanticCloseButton/SemanticCloseButton.style.js +1 -1
  5. package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.cjs +1 -1
  6. package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.js +1 -1
  7. package/dist/Checkbox/components/Compose/Compose.cjs +1 -1
  8. package/dist/Checkbox/components/Compose/Compose.js +1 -1
  9. package/dist/Checkbox/components/Indicator/Indicator.style.cjs +2 -2
  10. package/dist/Checkbox/components/Indicator/Indicator.style.js +3 -3
  11. package/dist/Drawer/components/Description/Description.cjs +1 -1
  12. package/dist/Drawer/components/Description/Description.js +1 -1
  13. package/dist/Drawer/components/Header/components/Title/Title.cjs +1 -1
  14. package/dist/Drawer/components/Header/components/Title/Title.js +1 -1
  15. package/dist/Inputs/PasswordInput/components/PasswordInput.context.cjs +1 -1
  16. package/dist/Inputs/PasswordInput/components/PasswordInput.context.js +1 -1
  17. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.cjs +1 -1
  18. package/dist/Inputs/TextArea/components/TextAreaTag/TextAreaTag.js +1 -1
  19. package/dist/Inputs/components/Context/InputValue.context.d.ts +1 -1
  20. package/dist/Inputs/components/Context/InputValueProvider.cjs +1 -1
  21. package/dist/Inputs/components/Context/InputValueProvider.js +1 -1
  22. package/dist/Inputs/components/Context/NumericInputValueProvider.cjs +1 -1
  23. package/dist/Inputs/components/Context/NumericInputValueProvider.js +1 -1
  24. package/dist/Inputs/components/InputTag/InputTag.cjs +1 -1
  25. package/dist/Inputs/components/InputTag/InputTag.js +1 -1
  26. package/dist/Loader/Loader.cjs +1 -1
  27. package/dist/Loader/Loader.js +1 -1
  28. package/dist/Modal/components/Content/components/Description/Description.cjs +1 -1
  29. package/dist/Modal/components/Content/components/Description/Description.js +1 -1
  30. package/dist/Modal/components/Content/components/Header/components/Title/Title.cjs +1 -1
  31. package/dist/Modal/components/Content/components/Header/components/Title/Title.js +1 -1
  32. package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.cjs +1 -1
  33. package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.d.ts +1 -1
  34. package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.js +1 -1
  35. package/dist/RadioGroup/components/Compose/Compose.cjs +2 -2
  36. package/dist/RadioGroup/components/Compose/Compose.js +2 -2
  37. package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.cjs +1 -1
  38. package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.js +1 -1
  39. package/dist/Section/components/Compose/Compose.cjs +1 -1
  40. package/dist/Section/components/Compose/Compose.js +1 -1
  41. package/dist/Section/components/Header/components/CollapseButton/CollapseButton.cjs +1 -1
  42. package/dist/Section/components/Header/components/CollapseButton/CollapseButton.js +1 -1
  43. package/dist/Select/components/Context/hooks/useSelectContextApi.d.ts +1 -1
  44. package/dist/Select/components/Trigger/components/Compose/Compose.cjs +1 -1
  45. package/dist/Select/components/Trigger/components/Compose/Compose.js +1 -1
  46. package/dist/Slider/components/Compose/Compose.cjs +1 -1
  47. package/dist/Slider/components/Compose/Compose.js +1 -1
  48. package/dist/Switch/components/Compose/Compose.cjs +1 -1
  49. package/dist/Switch/components/Compose/Compose.js +1 -1
  50. package/dist/Toast/Toaster.style.cjs +2 -2
  51. package/dist/Toast/Toaster.style.js +2 -2
  52. package/dist/Toast/core/mapping.helpers.cjs +1 -1
  53. package/dist/Toast/core/mapping.helpers.js +1 -1
  54. package/dist/Typography/hooks/useEllipsisTooltip.d.ts +1 -1
  55. package/dist/node_modules/@radix-ui/primitive/dist/index.cjs +1 -1
  56. package/dist/node_modules/@radix-ui/primitive/dist/index.js +1 -1
  57. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.cjs +108 -62
  58. package/dist/node_modules/@radix-ui/react-checkbox/dist/index.js +108 -62
  59. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.cjs +5 -4
  60. package/dist/node_modules/@radix-ui/react-collapsible/dist/index.js +5 -4
  61. package/dist/node_modules/@radix-ui/react-collection/dist/index.cjs +4 -2
  62. package/dist/node_modules/@radix-ui/react-collection/dist/index.js +5 -3
  63. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.cjs +16 -2
  64. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +16 -2
  65. package/dist/node_modules/@radix-ui/react-context/dist/index.cjs +8 -8
  66. package/dist/node_modules/@radix-ui/react-context/dist/index.js +8 -8
  67. package/dist/node_modules/@radix-ui/react-dialog/dist/index.cjs +6 -4
  68. package/dist/node_modules/@radix-ui/react-dialog/dist/index.js +6 -4
  69. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.cjs +4 -3
  70. package/dist/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +4 -3
  71. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.cjs +4 -1
  72. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js +4 -1
  73. package/dist/node_modules/@radix-ui/react-id/dist/index.cjs +1 -1
  74. package/dist/node_modules/@radix-ui/react-id/dist/index.js +1 -1
  75. package/dist/node_modules/@radix-ui/react-menu/dist/index.cjs +8 -5
  76. package/dist/node_modules/@radix-ui/react-menu/dist/index.js +8 -5
  77. package/dist/node_modules/@radix-ui/react-popover/dist/index.cjs +6 -4
  78. package/dist/node_modules/@radix-ui/react-popover/dist/index.js +6 -4
  79. package/dist/node_modules/@radix-ui/react-popper/dist/index.cjs +4 -1
  80. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +4 -1
  81. package/dist/node_modules/@radix-ui/react-presence/dist/index.cjs +16 -6
  82. package/dist/node_modules/@radix-ui/react-presence/dist/index.js +16 -5
  83. package/dist/node_modules/@radix-ui/react-primitive/dist/index.cjs +3 -1
  84. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +3 -1
  85. package/dist/node_modules/@radix-ui/react-progress/dist/index.cjs +2 -2
  86. package/dist/node_modules/@radix-ui/react-progress/dist/index.js +2 -2
  87. package/dist/node_modules/@radix-ui/{react-slider → react-progress}/node_modules/@radix-ui/react-context/dist/index.cjs +2 -1
  88. package/dist/node_modules/@radix-ui/{react-switch → react-progress}/node_modules/@radix-ui/react-context/dist/index.js +2 -1
  89. package/dist/node_modules/@radix-ui/{react-slider → react-progress}/node_modules/@radix-ui/react-primitive/dist/index.cjs +1 -1
  90. package/dist/node_modules/@radix-ui/{react-switch → react-progress}/node_modules/@radix-ui/react-primitive/dist/index.js +4 -2
  91. package/dist/node_modules/@radix-ui/{react-slider → react-progress}/node_modules/@radix-ui/react-slot/dist/index.cjs +14 -4
  92. package/dist/node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-slot/dist/index.js +97 -0
  93. package/dist/node_modules/@radix-ui/react-radio-group/dist/index.cjs +16 -11
  94. package/dist/node_modules/@radix-ui/react-radio-group/dist/index.js +16 -11
  95. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.cjs +11 -6
  96. package/dist/node_modules/@radix-ui/react-roving-focus/dist/index.js +11 -6
  97. package/dist/node_modules/@radix-ui/react-select/dist/index.cjs +56 -35
  98. package/dist/node_modules/@radix-ui/react-select/dist/index.js +57 -36
  99. package/dist/node_modules/@radix-ui/react-slider/dist/index.cjs +35 -35
  100. package/dist/node_modules/@radix-ui/react-slider/dist/index.js +10 -10
  101. package/dist/node_modules/@radix-ui/react-slot/dist/index.cjs +55 -39
  102. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +54 -38
  103. package/dist/node_modules/@radix-ui/react-switch/dist/index.cjs +27 -23
  104. package/dist/node_modules/@radix-ui/react-switch/dist/index.js +17 -13
  105. package/dist/node_modules/@radix-ui/react-tabs/dist/index.cjs +2 -1
  106. package/dist/node_modules/@radix-ui/react-tabs/dist/index.js +2 -1
  107. package/dist/node_modules/@radix-ui/react-toggle/dist/index.cjs +4 -3
  108. package/dist/node_modules/@radix-ui/react-toggle/dist/index.js +4 -3
  109. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.cjs +33 -17
  110. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.js +33 -17
  111. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.cjs +29 -16
  112. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +29 -16
  113. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.cjs +1 -1
  114. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +1 -1
  115. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.cjs +14 -11
  116. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.js +14 -11
  117. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.cjs +8 -2
  118. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +8 -2
  119. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.cjs +3 -1
  120. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js +3 -1
  121. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.cjs +4 -2
  122. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +4 -2
  123. package/dist/{node_modules/@radix-ui/react-switch → packages/components}/node_modules/@radix-ui/react-primitive/dist/index.cjs +5 -3
  124. package/dist/{node_modules/@radix-ui/react-slider → packages/components}/node_modules/@radix-ui/react-primitive/dist/index.js +1 -1
  125. package/dist/packages/components/node_modules/@radix-ui/react-slot/dist/index.cjs +99 -0
  126. package/dist/{node_modules/@radix-ui/react-slider → packages/components}/node_modules/@radix-ui/react-slot/dist/index.js +14 -4
  127. package/dist/packages/components/node_modules/@radix-ui/react-visually-hidden/dist/index.cjs +32 -0
  128. package/dist/packages/components/node_modules/@radix-ui/react-visually-hidden/dist/index.js +30 -0
  129. package/dist/{node_modules → packages/components/node_modules}/react-toastify/dist/react-toastify.esm.cjs +3 -3
  130. package/dist/{node_modules → packages/components/node_modules}/react-toastify/dist/react-toastify.esm.js +2 -2
  131. package/package.json +18 -14
  132. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/number/dist/index.cjs +0 -6
  133. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/number/dist/index.js +0 -6
  134. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/primitive/dist/index.cjs +0 -9
  135. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/primitive/dist/index.js +0 -9
  136. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-collection/dist/index.cjs +0 -81
  137. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-collection/dist/index.js +0 -79
  138. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-compose-refs/dist/index.cjs +0 -31
  139. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-compose-refs/dist/index.js +0 -28
  140. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-context/dist/index.js +0 -67
  141. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-direction/dist/index.cjs +0 -12
  142. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-direction/dist/index.js +0 -10
  143. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-controllable-state/dist/index.cjs +0 -57
  144. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +0 -55
  145. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-layout-effect/dist/index.cjs +0 -7
  146. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +0 -5
  147. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-previous/dist/index.cjs +0 -19
  148. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-previous/dist/index.js +0 -17
  149. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-size/dist/index.cjs +0 -41
  150. package/dist/node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-use-size/dist/index.js +0 -39
  151. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/primitive/dist/index.cjs +0 -9
  152. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/primitive/dist/index.js +0 -9
  153. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-compose-refs/dist/index.cjs +0 -31
  154. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-compose-refs/dist/index.js +0 -28
  155. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-context/dist/index.cjs +0 -69
  156. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot/dist/index.cjs +0 -82
  157. package/dist/node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot/dist/index.js +0 -80
@@ -14,62 +14,95 @@ react = require_runtime.__toESM(react, 1);
14
14
  //#region ../../node_modules/@radix-ui/react-checkbox/dist/index.mjs
15
15
  var CHECKBOX_NAME = "Checkbox";
16
16
  var [createCheckboxContext, createCheckboxScope] = require_index$2.createContextScope(CHECKBOX_NAME);
17
- var [CheckboxProvider, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
18
- var Checkbox = react.forwardRef((props, forwardedRef) => {
19
- const { __scopeCheckbox, name, checked: checkedProp, defaultChecked, required, disabled, value = "on", onCheckedChange, ...checkboxProps } = props;
20
- const [button, setButton] = react.useState(null);
21
- const composedRefs = require_index$1.useComposedRefs(forwardedRef, (node) => setButton(node));
22
- const hasConsumerStoppedPropagationRef = react.useRef(false);
23
- const isFormControl = button ? Boolean(button.closest("form")) : true;
24
- const [checked = false, setChecked] = require_index$6.useControllableState({
17
+ var [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
18
+ function CheckboxProvider(props) {
19
+ const { __scopeCheckbox, checked: checkedProp, children, defaultChecked, disabled, form, name, onCheckedChange, required, value = "on", internal_do_not_use_render } = props;
20
+ const [checked, setChecked] = require_index$6.useControllableState({
25
21
  prop: checkedProp,
26
- defaultProp: defaultChecked,
27
- onChange: onCheckedChange
22
+ defaultProp: defaultChecked ?? false,
23
+ onChange: onCheckedChange,
24
+ caller: CHECKBOX_NAME
25
+ });
26
+ const [control, setControl] = react.useState(null);
27
+ const [bubbleInput, setBubbleInput] = react.useState(null);
28
+ const hasConsumerStoppedPropagationRef = react.useRef(false);
29
+ const isFormControl = control ? !!form || !!control.closest("form") : true;
30
+ const context = {
31
+ checked,
32
+ disabled,
33
+ setChecked,
34
+ control,
35
+ setControl,
36
+ name,
37
+ form,
38
+ value,
39
+ hasConsumerStoppedPropagationRef,
40
+ required,
41
+ defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,
42
+ isFormControl,
43
+ bubbleInput,
44
+ setBubbleInput
45
+ };
46
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxProviderImpl, {
47
+ scope: __scopeCheckbox,
48
+ ...context,
49
+ children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
28
50
  });
51
+ }
52
+ var TRIGGER_NAME = "CheckboxTrigger";
53
+ var CheckboxTrigger = react.forwardRef(({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {
54
+ const { control, value, disabled, checked, required, setControl, setChecked, hasConsumerStoppedPropagationRef, isFormControl, bubbleInput } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);
55
+ const composedRefs = require_index$1.useComposedRefs(forwardedRef, setControl);
29
56
  const initialCheckedStateRef = react.useRef(checked);
30
57
  react.useEffect(() => {
31
- const form = button?.form;
58
+ const form = control?.form;
32
59
  if (form) {
33
60
  const reset = () => setChecked(initialCheckedStateRef.current);
34
61
  form.addEventListener("reset", reset);
35
62
  return () => form.removeEventListener("reset", reset);
36
63
  }
37
- }, [button, setChecked]);
38
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CheckboxProvider, {
39
- scope: __scopeCheckbox,
40
- state: checked,
64
+ }, [control, setChecked]);
65
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$3.Primitive.button, {
66
+ type: "button",
67
+ role: "checkbox",
68
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
69
+ "aria-required": required,
70
+ "data-state": getState(checked),
71
+ "data-disabled": disabled ? "" : void 0,
72
+ disabled,
73
+ value,
74
+ ...checkboxProps,
75
+ ref: composedRefs,
76
+ onKeyDown: require_index.composeEventHandlers(onKeyDown, (event) => {
77
+ if (event.key === "Enter") event.preventDefault();
78
+ }),
79
+ onClick: require_index.composeEventHandlers(onClick, (event) => {
80
+ setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);
81
+ if (bubbleInput && isFormControl) {
82
+ hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
83
+ if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
84
+ }
85
+ })
86
+ });
87
+ });
88
+ CheckboxTrigger.displayName = TRIGGER_NAME;
89
+ var Checkbox = react.forwardRef((props, forwardedRef) => {
90
+ const { __scopeCheckbox, name, checked, defaultChecked, required, disabled, value, onCheckedChange, form, ...checkboxProps } = props;
91
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxProvider, {
92
+ __scopeCheckbox,
93
+ checked,
94
+ defaultChecked,
41
95
  disabled,
42
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$3.Primitive.button, {
43
- type: "button",
44
- role: "checkbox",
45
- "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
46
- "aria-required": required,
47
- "data-state": getState(checked),
48
- "data-disabled": disabled ? "" : void 0,
49
- disabled,
50
- value,
96
+ required,
97
+ onCheckedChange,
98
+ name,
99
+ form,
100
+ value,
101
+ internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxTrigger, {
51
102
  ...checkboxProps,
52
- ref: composedRefs,
53
- onKeyDown: require_index.composeEventHandlers(props.onKeyDown, (event) => {
54
- if (event.key === "Enter") event.preventDefault();
55
- }),
56
- onClick: require_index.composeEventHandlers(props.onClick, (event) => {
57
- setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);
58
- if (isFormControl) {
59
- hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
60
- if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
61
- }
62
- })
63
- }), isFormControl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BubbleInput, {
64
- control: button,
65
- bubbles: !hasConsumerStoppedPropagationRef.current,
66
- name,
67
- value,
68
- checked,
69
- required,
70
- disabled,
71
- style: { transform: "translateX(-100%)" }
72
- })]
103
+ ref: forwardedRef,
104
+ __scopeCheckbox
105
+ }), isFormControl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckboxBubbleInput, { __scopeCheckbox })] })
73
106
  });
74
107
  });
75
108
  Checkbox.displayName = CHECKBOX_NAME;
@@ -78,9 +111,9 @@ var CheckboxIndicator = react.forwardRef((props, forwardedRef) => {
78
111
  const { __scopeCheckbox, forceMount, ...indicatorProps } = props;
79
112
  const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);
80
113
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$5.Presence, {
81
- present: forceMount || isIndeterminate(context.state) || context.state === true,
114
+ present: forceMount || isIndeterminate(context.checked) || context.checked === true,
82
115
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$3.Primitive.span, {
83
- "data-state": getState(context.state),
116
+ "data-state": getState(context.checked),
84
117
  "data-disabled": context.disabled ? "" : void 0,
85
118
  ...indicatorProps,
86
119
  ref: forwardedRef,
@@ -92,15 +125,18 @@ var CheckboxIndicator = react.forwardRef((props, forwardedRef) => {
92
125
  });
93
126
  });
94
127
  CheckboxIndicator.displayName = INDICATOR_NAME;
95
- var BubbleInput = (props) => {
96
- const { control, checked, bubbles = true, ...inputProps } = props;
97
- const ref = react.useRef(null);
128
+ var BUBBLE_INPUT_NAME = "CheckboxBubbleInput";
129
+ var CheckboxBubbleInput = react.forwardRef(({ __scopeCheckbox, ...props }, forwardedRef) => {
130
+ const { control, hasConsumerStoppedPropagationRef, checked, defaultChecked, required, disabled, name, value, form, bubbleInput, setBubbleInput } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);
131
+ const composedRefs = require_index$1.useComposedRefs(forwardedRef, setBubbleInput);
98
132
  const prevChecked = require_index$7.usePrevious(checked);
99
133
  const controlSize = require_index$4.useSize(control);
100
134
  react.useEffect(() => {
101
- const input = ref.current;
135
+ const input = bubbleInput;
136
+ if (!input) return;
102
137
  const inputProto = window.HTMLInputElement.prototype;
103
138
  const setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
139
+ const bubbles = !hasConsumerStoppedPropagationRef.current;
104
140
  if (prevChecked !== checked && setChecked) {
105
141
  const event = new Event("click", { bubbles });
106
142
  input.indeterminate = isIndeterminate(checked);
@@ -108,35 +144,45 @@ var BubbleInput = (props) => {
108
144
  input.dispatchEvent(event);
109
145
  }
110
146
  }, [
147
+ bubbleInput,
111
148
  prevChecked,
112
149
  checked,
113
- bubbles
150
+ hasConsumerStoppedPropagationRef
114
151
  ]);
115
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
152
+ const defaultCheckedRef = react.useRef(isIndeterminate(checked) ? false : checked);
153
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$3.Primitive.input, {
116
154
  type: "checkbox",
117
155
  "aria-hidden": true,
118
- defaultChecked: isIndeterminate(checked) ? false : checked,
119
- ...inputProps,
156
+ defaultChecked: defaultChecked ?? defaultCheckedRef.current,
157
+ required,
158
+ disabled,
159
+ name,
160
+ value,
161
+ form,
162
+ ...props,
120
163
  tabIndex: -1,
121
- ref,
164
+ ref: composedRefs,
122
165
  style: {
123
166
  ...props.style,
124
167
  ...controlSize,
125
168
  position: "absolute",
126
169
  pointerEvents: "none",
127
170
  opacity: 0,
128
- margin: 0
171
+ margin: 0,
172
+ transform: "translateX(-100%)"
129
173
  }
130
174
  });
131
- };
175
+ });
176
+ CheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;
177
+ function isFunction(value) {
178
+ return typeof value === "function";
179
+ }
132
180
  function isIndeterminate(checked) {
133
181
  return checked === "indeterminate";
134
182
  }
135
183
  function getState(checked) {
136
184
  return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
137
185
  }
138
- var Root = Checkbox;
139
- var Indicator = CheckboxIndicator;
140
186
  //#endregion
141
- exports.Indicator = Indicator;
142
- exports.Root = Root;
187
+ exports.Checkbox = Checkbox;
188
+ exports.CheckboxIndicator = CheckboxIndicator;
@@ -7,67 +7,100 @@ import { useSize } from "../../react-use-size/dist/index.js";
7
7
  import { Presence } from "../../react-presence/dist/index.js";
8
8
  import { useControllableState } from "../../react-use-controllable-state/dist/index.js";
9
9
  import { usePrevious } from "../../react-use-previous/dist/index.js";
10
- import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
11
  import * as React$1 from "react";
12
12
  //#region ../../node_modules/@radix-ui/react-checkbox/dist/index.mjs
13
13
  var CHECKBOX_NAME = "Checkbox";
14
14
  var [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);
15
- var [CheckboxProvider, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
16
- var Checkbox = React$1.forwardRef((props, forwardedRef) => {
17
- const { __scopeCheckbox, name, checked: checkedProp, defaultChecked, required, disabled, value = "on", onCheckedChange, ...checkboxProps } = props;
18
- const [button, setButton] = React$1.useState(null);
19
- const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));
20
- const hasConsumerStoppedPropagationRef = React$1.useRef(false);
21
- const isFormControl = button ? Boolean(button.closest("form")) : true;
22
- const [checked = false, setChecked] = useControllableState({
15
+ var [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
16
+ function CheckboxProvider(props) {
17
+ const { __scopeCheckbox, checked: checkedProp, children, defaultChecked, disabled, form, name, onCheckedChange, required, value = "on", internal_do_not_use_render } = props;
18
+ const [checked, setChecked] = useControllableState({
23
19
  prop: checkedProp,
24
- defaultProp: defaultChecked,
25
- onChange: onCheckedChange
20
+ defaultProp: defaultChecked ?? false,
21
+ onChange: onCheckedChange,
22
+ caller: CHECKBOX_NAME
23
+ });
24
+ const [control, setControl] = React$1.useState(null);
25
+ const [bubbleInput, setBubbleInput] = React$1.useState(null);
26
+ const hasConsumerStoppedPropagationRef = React$1.useRef(false);
27
+ const isFormControl = control ? !!form || !!control.closest("form") : true;
28
+ const context = {
29
+ checked,
30
+ disabled,
31
+ setChecked,
32
+ control,
33
+ setControl,
34
+ name,
35
+ form,
36
+ value,
37
+ hasConsumerStoppedPropagationRef,
38
+ required,
39
+ defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,
40
+ isFormControl,
41
+ bubbleInput,
42
+ setBubbleInput
43
+ };
44
+ return /* @__PURE__ */ jsx(CheckboxProviderImpl, {
45
+ scope: __scopeCheckbox,
46
+ ...context,
47
+ children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
26
48
  });
49
+ }
50
+ var TRIGGER_NAME = "CheckboxTrigger";
51
+ var CheckboxTrigger = React$1.forwardRef(({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {
52
+ const { control, value, disabled, checked, required, setControl, setChecked, hasConsumerStoppedPropagationRef, isFormControl, bubbleInput } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);
53
+ const composedRefs = useComposedRefs(forwardedRef, setControl);
27
54
  const initialCheckedStateRef = React$1.useRef(checked);
28
55
  React$1.useEffect(() => {
29
- const form = button?.form;
56
+ const form = control?.form;
30
57
  if (form) {
31
58
  const reset = () => setChecked(initialCheckedStateRef.current);
32
59
  form.addEventListener("reset", reset);
33
60
  return () => form.removeEventListener("reset", reset);
34
61
  }
35
- }, [button, setChecked]);
36
- return /* @__PURE__ */ jsxs(CheckboxProvider, {
37
- scope: __scopeCheckbox,
38
- state: checked,
62
+ }, [control, setChecked]);
63
+ return /* @__PURE__ */ jsx(Primitive.button, {
64
+ type: "button",
65
+ role: "checkbox",
66
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
67
+ "aria-required": required,
68
+ "data-state": getState(checked),
69
+ "data-disabled": disabled ? "" : void 0,
70
+ disabled,
71
+ value,
72
+ ...checkboxProps,
73
+ ref: composedRefs,
74
+ onKeyDown: composeEventHandlers(onKeyDown, (event) => {
75
+ if (event.key === "Enter") event.preventDefault();
76
+ }),
77
+ onClick: composeEventHandlers(onClick, (event) => {
78
+ setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);
79
+ if (bubbleInput && isFormControl) {
80
+ hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
81
+ if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
82
+ }
83
+ })
84
+ });
85
+ });
86
+ CheckboxTrigger.displayName = TRIGGER_NAME;
87
+ var Checkbox = React$1.forwardRef((props, forwardedRef) => {
88
+ const { __scopeCheckbox, name, checked, defaultChecked, required, disabled, value, onCheckedChange, form, ...checkboxProps } = props;
89
+ return /* @__PURE__ */ jsx(CheckboxProvider, {
90
+ __scopeCheckbox,
91
+ checked,
92
+ defaultChecked,
39
93
  disabled,
40
- children: [/* @__PURE__ */ jsx(Primitive.button, {
41
- type: "button",
42
- role: "checkbox",
43
- "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
44
- "aria-required": required,
45
- "data-state": getState(checked),
46
- "data-disabled": disabled ? "" : void 0,
47
- disabled,
48
- value,
94
+ required,
95
+ onCheckedChange,
96
+ name,
97
+ form,
98
+ value,
99
+ internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CheckboxTrigger, {
49
100
  ...checkboxProps,
50
- ref: composedRefs,
51
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
52
- if (event.key === "Enter") event.preventDefault();
53
- }),
54
- onClick: composeEventHandlers(props.onClick, (event) => {
55
- setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);
56
- if (isFormControl) {
57
- hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
58
- if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
59
- }
60
- })
61
- }), isFormControl && /* @__PURE__ */ jsx(BubbleInput, {
62
- control: button,
63
- bubbles: !hasConsumerStoppedPropagationRef.current,
64
- name,
65
- value,
66
- checked,
67
- required,
68
- disabled,
69
- style: { transform: "translateX(-100%)" }
70
- })]
101
+ ref: forwardedRef,
102
+ __scopeCheckbox
103
+ }), isFormControl && /* @__PURE__ */ jsx(CheckboxBubbleInput, { __scopeCheckbox })] })
71
104
  });
72
105
  });
73
106
  Checkbox.displayName = CHECKBOX_NAME;
@@ -76,9 +109,9 @@ var CheckboxIndicator = React$1.forwardRef((props, forwardedRef) => {
76
109
  const { __scopeCheckbox, forceMount, ...indicatorProps } = props;
77
110
  const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);
78
111
  return /* @__PURE__ */ jsx(Presence, {
79
- present: forceMount || isIndeterminate(context.state) || context.state === true,
112
+ present: forceMount || isIndeterminate(context.checked) || context.checked === true,
80
113
  children: /* @__PURE__ */ jsx(Primitive.span, {
81
- "data-state": getState(context.state),
114
+ "data-state": getState(context.checked),
82
115
  "data-disabled": context.disabled ? "" : void 0,
83
116
  ...indicatorProps,
84
117
  ref: forwardedRef,
@@ -90,15 +123,18 @@ var CheckboxIndicator = React$1.forwardRef((props, forwardedRef) => {
90
123
  });
91
124
  });
92
125
  CheckboxIndicator.displayName = INDICATOR_NAME;
93
- var BubbleInput = (props) => {
94
- const { control, checked, bubbles = true, ...inputProps } = props;
95
- const ref = React$1.useRef(null);
126
+ var BUBBLE_INPUT_NAME = "CheckboxBubbleInput";
127
+ var CheckboxBubbleInput = React$1.forwardRef(({ __scopeCheckbox, ...props }, forwardedRef) => {
128
+ const { control, hasConsumerStoppedPropagationRef, checked, defaultChecked, required, disabled, name, value, form, bubbleInput, setBubbleInput } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);
129
+ const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);
96
130
  const prevChecked = usePrevious(checked);
97
131
  const controlSize = useSize(control);
98
132
  React$1.useEffect(() => {
99
- const input = ref.current;
133
+ const input = bubbleInput;
134
+ if (!input) return;
100
135
  const inputProto = window.HTMLInputElement.prototype;
101
136
  const setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
137
+ const bubbles = !hasConsumerStoppedPropagationRef.current;
102
138
  if (prevChecked !== checked && setChecked) {
103
139
  const event = new Event("click", { bubbles });
104
140
  input.indeterminate = isIndeterminate(checked);
@@ -106,34 +142,44 @@ var BubbleInput = (props) => {
106
142
  input.dispatchEvent(event);
107
143
  }
108
144
  }, [
145
+ bubbleInput,
109
146
  prevChecked,
110
147
  checked,
111
- bubbles
148
+ hasConsumerStoppedPropagationRef
112
149
  ]);
113
- return /* @__PURE__ */ jsx("input", {
150
+ const defaultCheckedRef = React$1.useRef(isIndeterminate(checked) ? false : checked);
151
+ return /* @__PURE__ */ jsx(Primitive.input, {
114
152
  type: "checkbox",
115
153
  "aria-hidden": true,
116
- defaultChecked: isIndeterminate(checked) ? false : checked,
117
- ...inputProps,
154
+ defaultChecked: defaultChecked ?? defaultCheckedRef.current,
155
+ required,
156
+ disabled,
157
+ name,
158
+ value,
159
+ form,
160
+ ...props,
118
161
  tabIndex: -1,
119
- ref,
162
+ ref: composedRefs,
120
163
  style: {
121
164
  ...props.style,
122
165
  ...controlSize,
123
166
  position: "absolute",
124
167
  pointerEvents: "none",
125
168
  opacity: 0,
126
- margin: 0
169
+ margin: 0,
170
+ transform: "translateX(-100%)"
127
171
  }
128
172
  });
129
- };
173
+ });
174
+ CheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;
175
+ function isFunction(value) {
176
+ return typeof value === "function";
177
+ }
130
178
  function isIndeterminate(checked) {
131
179
  return checked === "indeterminate";
132
180
  }
133
181
  function getState(checked) {
134
182
  return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
135
183
  }
136
- var Root = Checkbox;
137
- var Indicator = CheckboxIndicator;
138
184
  //#endregion
139
- export { Indicator, Root };
185
+ export { Checkbox, CheckboxIndicator };
@@ -17,10 +17,11 @@ var [createCollapsibleContext, createCollapsibleScope] = require_index$2.createC
17
17
  var [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);
18
18
  var Collapsible = react.forwardRef((props, forwardedRef) => {
19
19
  const { __scopeCollapsible, open: openProp, defaultOpen, disabled, onOpenChange, ...collapsibleProps } = props;
20
- const [open = false, setOpen] = require_index$7.useControllableState({
20
+ const [open, setOpen] = require_index$7.useControllableState({
21
21
  prop: openProp,
22
- defaultProp: defaultOpen,
23
- onChange: onOpenChange
22
+ defaultProp: defaultOpen ?? false,
23
+ onChange: onOpenChange,
24
+ caller: COLLAPSIBLE_NAME
24
25
  });
25
26
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CollapsibleProvider, {
26
27
  scope: __scopeCollapsible,
@@ -80,7 +81,7 @@ var CollapsibleContentImpl = react.forwardRef((props, forwardedRef) => {
80
81
  const width = widthRef.current;
81
82
  const isOpen = context.open || isPresent;
82
83
  const isMountAnimationPreventedRef = react.useRef(isOpen);
83
- const originalStylesRef = react.useRef();
84
+ const originalStylesRef = react.useRef(void 0);
84
85
  react.useEffect(() => {
85
86
  const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);
86
87
  return () => cancelAnimationFrame(rAF);
@@ -15,10 +15,11 @@ var [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLL
15
15
  var [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);
16
16
  var Collapsible = React$1.forwardRef((props, forwardedRef) => {
17
17
  const { __scopeCollapsible, open: openProp, defaultOpen, disabled, onOpenChange, ...collapsibleProps } = props;
18
- const [open = false, setOpen] = useControllableState({
18
+ const [open, setOpen] = useControllableState({
19
19
  prop: openProp,
20
- defaultProp: defaultOpen,
21
- onChange: onOpenChange
20
+ defaultProp: defaultOpen ?? false,
21
+ onChange: onOpenChange,
22
+ caller: COLLAPSIBLE_NAME
22
23
  });
23
24
  return /* @__PURE__ */ jsx(CollapsibleProvider, {
24
25
  scope: __scopeCollapsible,
@@ -78,7 +79,7 @@ var CollapsibleContentImpl = React$1.forwardRef((props, forwardedRef) => {
78
79
  const width = widthRef.current;
79
80
  const isOpen = context.open || isPresent;
80
81
  const isMountAnimationPreventedRef = React$1.useRef(isOpen);
81
- const originalStylesRef = React$1.useRef();
82
+ const originalStylesRef = React$1.useRef(void 0);
82
83
  React$1.useEffect(() => {
83
84
  const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);
84
85
  return () => cancelAnimationFrame(rAF);
@@ -27,9 +27,10 @@ function createCollection(name) {
27
27
  };
28
28
  CollectionProvider.displayName = PROVIDER_NAME;
29
29
  const COLLECTION_SLOT_NAME = name + "CollectionSlot";
30
+ const CollectionSlotImpl = require_index$2.createSlot(COLLECTION_SLOT_NAME);
30
31
  const CollectionSlot = react.default.forwardRef((props, forwardedRef) => {
31
32
  const { scope, children } = props;
32
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$2.Slot, {
33
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CollectionSlotImpl, {
33
34
  ref: require_index.useComposedRefs(forwardedRef, useCollectionContext(COLLECTION_SLOT_NAME, scope).collectionRef),
34
35
  children
35
36
  });
@@ -37,6 +38,7 @@ function createCollection(name) {
37
38
  CollectionSlot.displayName = COLLECTION_SLOT_NAME;
38
39
  const ITEM_SLOT_NAME = name + "CollectionItemSlot";
39
40
  const ITEM_DATA_ATTR = "data-radix-collection-item";
41
+ const CollectionItemSlotImpl = require_index$2.createSlot(ITEM_SLOT_NAME);
40
42
  const CollectionItemSlot = react.default.forwardRef((props, forwardedRef) => {
41
43
  const { scope, children, ...itemData } = props;
42
44
  const ref = react.default.useRef(null);
@@ -49,7 +51,7 @@ function createCollection(name) {
49
51
  });
50
52
  return () => void context.itemMap.delete(ref);
51
53
  });
52
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$2.Slot, {
54
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CollectionItemSlotImpl, {
53
55
  [ITEM_DATA_ATTR]: "",
54
56
  ref: composedRefs,
55
57
  children
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { useComposedRefs } from "../../react-compose-refs/dist/index.js";
3
3
  import { createContextScope } from "../../react-context/dist/index.js";
4
- import { Slot } from "../../react-slot/dist/index.js";
4
+ import { createSlot } from "../../react-slot/dist/index.js";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  import React from "react";
7
7
  //#region ../../node_modules/@radix-ui/react-collection/dist/index.mjs
@@ -25,9 +25,10 @@ function createCollection(name) {
25
25
  };
26
26
  CollectionProvider.displayName = PROVIDER_NAME;
27
27
  const COLLECTION_SLOT_NAME = name + "CollectionSlot";
28
+ const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);
28
29
  const CollectionSlot = React.forwardRef((props, forwardedRef) => {
29
30
  const { scope, children } = props;
30
- return /* @__PURE__ */ jsx(Slot, {
31
+ return /* @__PURE__ */ jsx(CollectionSlotImpl, {
31
32
  ref: useComposedRefs(forwardedRef, useCollectionContext(COLLECTION_SLOT_NAME, scope).collectionRef),
32
33
  children
33
34
  });
@@ -35,6 +36,7 @@ function createCollection(name) {
35
36
  CollectionSlot.displayName = COLLECTION_SLOT_NAME;
36
37
  const ITEM_SLOT_NAME = name + "CollectionItemSlot";
37
38
  const ITEM_DATA_ATTR = "data-radix-collection-item";
39
+ const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);
38
40
  const CollectionItemSlot = React.forwardRef((props, forwardedRef) => {
39
41
  const { scope, children, ...itemData } = props;
40
42
  const ref = React.useRef(null);
@@ -47,7 +49,7 @@ function createCollection(name) {
47
49
  });
48
50
  return () => void context.itemMap.delete(ref);
49
51
  });
50
- return /* @__PURE__ */ jsx(Slot, {
52
+ return /* @__PURE__ */ jsx(CollectionItemSlotImpl, {
51
53
  [ITEM_DATA_ATTR]: "",
52
54
  ref: composedRefs,
53
55
  children
@@ -3,11 +3,25 @@ let react = require("react");
3
3
  react = require_runtime.__toESM(react, 1);
4
4
  //#region ../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs
5
5
  function setRef(ref, value) {
6
- if (typeof ref === "function") ref(value);
6
+ if (typeof ref === "function") return ref(value);
7
7
  else if (ref !== null && ref !== void 0) ref.current = value;
8
8
  }
9
9
  function composeRefs(...refs) {
10
- return (node) => refs.forEach((ref) => setRef(ref, node));
10
+ return (node) => {
11
+ let hasCleanup = false;
12
+ const cleanups = refs.map((ref) => {
13
+ const cleanup = setRef(ref, node);
14
+ if (!hasCleanup && typeof cleanup == "function") hasCleanup = true;
15
+ return cleanup;
16
+ });
17
+ if (hasCleanup) return () => {
18
+ for (let i = 0; i < cleanups.length; i++) {
19
+ const cleanup = cleanups[i];
20
+ if (typeof cleanup == "function") cleanup();
21
+ else setRef(refs[i], null);
22
+ }
23
+ };
24
+ };
11
25
  }
12
26
  function useComposedRefs(...refs) {
13
27
  return react.useCallback(composeRefs(...refs), refs);
@@ -1,11 +1,25 @@
1
1
  import * as React$1 from "react";
2
2
  //#region ../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs
3
3
  function setRef(ref, value) {
4
- if (typeof ref === "function") ref(value);
4
+ if (typeof ref === "function") return ref(value);
5
5
  else if (ref !== null && ref !== void 0) ref.current = value;
6
6
  }
7
7
  function composeRefs(...refs) {
8
- return (node) => refs.forEach((ref) => setRef(ref, node));
8
+ return (node) => {
9
+ let hasCleanup = false;
10
+ const cleanups = refs.map((ref) => {
11
+ const cleanup = setRef(ref, node);
12
+ if (!hasCleanup && typeof cleanup == "function") hasCleanup = true;
13
+ return cleanup;
14
+ });
15
+ if (hasCleanup) return () => {
16
+ for (let i = 0; i < cleanups.length; i++) {
17
+ const cleanup = cleanups[i];
18
+ if (typeof cleanup == "function") cleanup();
19
+ else setRef(refs[i], null);
20
+ }
21
+ };
22
+ };
9
23
  }
10
24
  function useComposedRefs(...refs) {
11
25
  return React$1.useCallback(composeRefs(...refs), refs);