@octanejs/base-ui 0.1.31 → 0.1.32

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 (201) hide show
  1. package/dist/cjs/accordion.cjs +497 -0
  2. package/dist/cjs/alert-dialog.cjs +65 -0
  3. package/dist/cjs/avatar.cjs +234 -0
  4. package/dist/cjs/button.cjs +54 -0
  5. package/dist/cjs/checkbox-group.cjs +165 -0
  6. package/dist/cjs/checkbox.cjs +475 -0
  7. package/dist/cjs/collapsible.cjs +700 -0
  8. package/dist/cjs/context-menu.cjs +257 -0
  9. package/dist/cjs/csp-provider.cjs +40 -0
  10. package/dist/cjs/dialog.cjs +741 -0
  11. package/dist/cjs/direction-provider.cjs +35 -0
  12. package/dist/cjs/field.cjs +559 -0
  13. package/dist/cjs/fieldset.cjs +101 -0
  14. package/dist/cjs/form.cjs +177 -0
  15. package/dist/cjs/index.cjs +133 -0
  16. package/dist/cjs/input.cjs +32 -0
  17. package/dist/cjs/internal.cjs +51 -0
  18. package/dist/cjs/menu.cjs +2420 -0
  19. package/dist/cjs/menubar.cjs +132 -0
  20. package/dist/cjs/merge-props.cjs +34 -0
  21. package/dist/cjs/meter.cjs +169 -0
  22. package/dist/cjs/number-field.cjs +812 -0
  23. package/dist/cjs/popover.cjs +966 -0
  24. package/dist/cjs/preview-card.cjs +632 -0
  25. package/dist/cjs/progress.cjs +206 -0
  26. package/dist/cjs/radio-group.cjs +264 -0
  27. package/dist/cjs/radio.cjs +327 -0
  28. package/dist/cjs/separator.cjs +44 -0
  29. package/dist/cjs/slider.cjs +1384 -0
  30. package/dist/cjs/switch.cjs +306 -0
  31. package/dist/cjs/tabs.cjs +727 -0
  32. package/dist/cjs/toast.cjs +1766 -0
  33. package/dist/cjs/toggle-group.cjs +118 -0
  34. package/dist/cjs/toggle.cjs +121 -0
  35. package/dist/cjs/tooltip.cjs +835 -0
  36. package/dist/cjs/unstable-use-media-query.cjs +79 -0
  37. package/dist/cjs/use-render.cjs +40 -0
  38. package/dist/cjs/utils/CSPContext.cjs +38 -0
  39. package/dist/cjs/utils/CheckboxGroupContext.cjs +40 -0
  40. package/dist/cjs/utils/CompositeRootContext.cjs +40 -0
  41. package/dist/cjs/utils/ContextMenuRootContext.cjs +42 -0
  42. package/dist/cjs/utils/DirectionContext.cjs +34 -0
  43. package/dist/cjs/utils/FloatingPortalLite.cjs +47 -0
  44. package/dist/cjs/utils/InternalBackdrop.cjs +49 -0
  45. package/dist/cjs/utils/MenubarContext.cjs +40 -0
  46. package/dist/cjs/utils/RadioGroupContext.cjs +34 -0
  47. package/dist/cjs/utils/RequestQueue.cjs +111 -0
  48. package/dist/cjs/utils/TimeoutManager.cjs +50 -0
  49. package/dist/cjs/utils/ToggleGroupContext.cjs +40 -0
  50. package/dist/cjs/utils/adaptiveOriginMiddleware.cjs +94 -0
  51. package/dist/cjs/utils/addEventListener.cjs +33 -0
  52. package/dist/cjs/utils/areArraysEqual.cjs +30 -0
  53. package/dist/cjs/utils/clamp.cjs +30 -0
  54. package/dist/cjs/utils/closePart.cjs +70 -0
  55. package/dist/cjs/utils/collapsibleOpenStateMapping.cjs +42 -0
  56. package/dist/cjs/utils/composeRefs.cjs +68 -0
  57. package/dist/cjs/utils/composite/CompositeItem.cjs +59 -0
  58. package/dist/cjs/utils/composite/CompositeList.cjs +177 -0
  59. package/dist/cjs/utils/composite/CompositeListContext.cjs +43 -0
  60. package/dist/cjs/utils/composite/CompositeRoot.cjs +118 -0
  61. package/dist/cjs/utils/composite/grid-utils.cjs +343 -0
  62. package/dist/cjs/utils/composite/gridNavigation.cjs +92 -0
  63. package/dist/cjs/utils/composite/keys.cjs +174 -0
  64. package/dist/cjs/utils/composite/list-utils.cjs +90 -0
  65. package/dist/cjs/utils/composite/useCompositeItem.cjs +63 -0
  66. package/dist/cjs/utils/composite/useCompositeListItem.cjs +104 -0
  67. package/dist/cjs/utils/composite/useCompositeRoot.cjs +263 -0
  68. package/dist/cjs/utils/constants.cjs +56 -0
  69. package/dist/cjs/utils/contains.cjs +46 -0
  70. package/dist/cjs/utils/createChangeEventDetails.cjs +92 -0
  71. package/dist/cjs/utils/dom.cjs +35 -0
  72. package/dist/cjs/utils/empty.cjs +34 -0
  73. package/dist/cjs/utils/field/FieldItemContext.cjs +34 -0
  74. package/dist/cjs/utils/field/FieldRootContext.cjs +80 -0
  75. package/dist/cjs/utils/field/FormContext.cjs +41 -0
  76. package/dist/cjs/utils/field/LabelableContext.cjs +43 -0
  77. package/dist/cjs/utils/field/LabelableProvider.cjs +115 -0
  78. package/dist/cjs/utils/field/constants.cjs +68 -0
  79. package/dist/cjs/utils/field/getCombinedFieldValidityData.cjs +36 -0
  80. package/dist/cjs/utils/field/useAriaLabelledBy.cjs +87 -0
  81. package/dist/cjs/utils/field/useFieldControlRegistration.cjs +165 -0
  82. package/dist/cjs/utils/field/useFieldValidation.cjs +285 -0
  83. package/dist/cjs/utils/field/useLabel.cjs +99 -0
  84. package/dist/cjs/utils/field/useLabelableId.cjs +105 -0
  85. package/dist/cjs/utils/field/useRegisterFieldControl.cjs +60 -0
  86. package/dist/cjs/utils/findRootOwnerId.cjs +37 -0
  87. package/dist/cjs/utils/floating/FloatingDelayGroup.cjs +219 -0
  88. package/dist/cjs/utils/floating/FloatingFocusManager.cjs +685 -0
  89. package/dist/cjs/utils/floating/FloatingPortal.cjs +230 -0
  90. package/dist/cjs/utils/floating/FloatingRootStore.cjs +87 -0
  91. package/dist/cjs/utils/floating/FloatingTree.cjs +86 -0
  92. package/dist/cjs/utils/floating/FloatingTreeStore.cjs +41 -0
  93. package/dist/cjs/utils/floating/FocusGuard.cjs +54 -0
  94. package/dist/cjs/utils/floating/composite.cjs +42 -0
  95. package/dist/cjs/utils/floating/constants.cjs +34 -0
  96. package/dist/cjs/utils/floating/createAttribute.cjs +30 -0
  97. package/dist/cjs/utils/floating/createEventEmitter.cjs +44 -0
  98. package/dist/cjs/utils/floating/element.cjs +103 -0
  99. package/dist/cjs/utils/floating/enqueueFocus.cjs +51 -0
  100. package/dist/cjs/utils/floating/event.cjs +65 -0
  101. package/dist/cjs/utils/floating/getEmptyRootContext.cjs +42 -0
  102. package/dist/cjs/utils/floating/gridNavigation.cjs +45 -0
  103. package/dist/cjs/utils/floating/markOthers.cjs +181 -0
  104. package/dist/cjs/utils/floating/nodes.cjs +48 -0
  105. package/dist/cjs/utils/floating/safePolygon.cjs +301 -0
  106. package/dist/cjs/utils/floating/tabbable.cjs +242 -0
  107. package/dist/cjs/utils/floating/types.cjs +16 -0
  108. package/dist/cjs/utils/floating/useClick.cjs +153 -0
  109. package/dist/cjs/utils/floating/useClientPoint.cjs +225 -0
  110. package/dist/cjs/utils/floating/useDismiss.cjs +506 -0
  111. package/dist/cjs/utils/floating/useFloating.cjs +186 -0
  112. package/dist/cjs/utils/floating/useFloatingRootContext.cjs +75 -0
  113. package/dist/cjs/utils/floating/useFocus.cjs +184 -0
  114. package/dist/cjs/utils/floating/useHoverFloatingInteraction.cjs +231 -0
  115. package/dist/cjs/utils/floating/useHoverInteractionSharedState.cjs +113 -0
  116. package/dist/cjs/utils/floating/useHoverReferenceInteraction.cjs +380 -0
  117. package/dist/cjs/utils/floating/useHoverShared.cjs +65 -0
  118. package/dist/cjs/utils/floating/useListNavigation.cjs +665 -0
  119. package/dist/cjs/utils/floating/useSyncedFloatingRootContext.cjs +91 -0
  120. package/dist/cjs/utils/floating/useTypeahead.cjs +187 -0
  121. package/dist/cjs/utils/formatNumber.cjs +60 -0
  122. package/dist/cjs/utils/generateId.cjs +32 -0
  123. package/dist/cjs/utils/getCssDimensions.cjs +42 -0
  124. package/dist/cjs/utils/getDefaultFormSubmitter.cjs +42 -0
  125. package/dist/cjs/utils/getDisabledMountTransitionStyles.cjs +32 -0
  126. package/dist/cjs/utils/getElementRef.cjs +35 -0
  127. package/dist/cjs/utils/getPseudoElementBounds.cjs +56 -0
  128. package/dist/cjs/utils/getStateAttributesProps.cjs +46 -0
  129. package/dist/cjs/utils/hideMiddleware.cjs +42 -0
  130. package/dist/cjs/utils/inertValue.cjs +30 -0
  131. package/dist/cjs/utils/matchesFocusVisible.cjs +38 -0
  132. package/dist/cjs/utils/mergeCleanups.cjs +37 -0
  133. package/dist/cjs/utils/mergeObjects.cjs +39 -0
  134. package/dist/cjs/utils/mergeProps.cjs +182 -0
  135. package/dist/cjs/utils/noop.cjs +29 -0
  136. package/dist/cjs/utils/number/constants.cjs +34 -0
  137. package/dist/cjs/utils/number/parse.cjs +258 -0
  138. package/dist/cjs/utils/number/types.cjs +16 -0
  139. package/dist/cjs/utils/number/validate.cjs +104 -0
  140. package/dist/cjs/utils/owner.cjs +35 -0
  141. package/dist/cjs/utils/platform.cjs +83 -0
  142. package/dist/cjs/utils/popupStateMapping.cjs +74 -0
  143. package/dist/cjs/utils/popups/index.cjs +39 -0
  144. package/dist/cjs/utils/popups/inlineRect.cjs +218 -0
  145. package/dist/cjs/utils/popups/popupStoreUtils.cjs +379 -0
  146. package/dist/cjs/utils/popups/popupTriggerMap.cjs +76 -0
  147. package/dist/cjs/utils/popups/store.cjs +118 -0
  148. package/dist/cjs/utils/popups/useTriggerFocusGuards.cjs +72 -0
  149. package/dist/cjs/utils/resolveAriaLabelledBy.cjs +35 -0
  150. package/dist/cjs/utils/resolveClassName.cjs +30 -0
  151. package/dist/cjs/utils/resolveRef.cjs +33 -0
  152. package/dist/cjs/utils/resolveStyle.cjs +30 -0
  153. package/dist/cjs/utils/serializeValue.cjs +40 -0
  154. package/dist/cjs/utils/slider/asc.cjs +30 -0
  155. package/dist/cjs/utils/slider/getMidpoint.cjs +34 -0
  156. package/dist/cjs/utils/slider/getPushedThumbValues.cjs +73 -0
  157. package/dist/cjs/utils/slider/getSliderValue.cjs +42 -0
  158. package/dist/cjs/utils/slider/replaceArrayItemAtIndex.cjs +33 -0
  159. package/dist/cjs/utils/slider/resolveThumbCollision.cjs +155 -0
  160. package/dist/cjs/utils/slider/roundValueToStep.cjs +45 -0
  161. package/dist/cjs/utils/slider/validateMinimumDistance.cjs +40 -0
  162. package/dist/cjs/utils/slider/valueArrayToPercentages.cjs +36 -0
  163. package/dist/cjs/utils/store/ReactStore.cjs +135 -0
  164. package/dist/cjs/utils/store/Store.cjs +83 -0
  165. package/dist/cjs/utils/store/createSelector.cjs +74 -0
  166. package/dist/cjs/utils/store/useStore.cjs +51 -0
  167. package/dist/cjs/utils/stringifyLocale.cjs +36 -0
  168. package/dist/cjs/utils/useAnchorPositioning.cjs +421 -0
  169. package/dist/cjs/utils/useAnchoredPopupScrollLock.cjs +59 -0
  170. package/dist/cjs/utils/useAnimationFrame.cjs +93 -0
  171. package/dist/cjs/utils/useAnimationsFinished.cjs +98 -0
  172. package/dist/cjs/utils/useBaseUiId.cjs +36 -0
  173. package/dist/cjs/utils/useButton.cjs +177 -0
  174. package/dist/cjs/utils/useCheckboxGroupParent.cjs +114 -0
  175. package/dist/cjs/utils/useControlled.cjs +47 -0
  176. package/dist/cjs/utils/useEnhancedClickHandler.cjs +60 -0
  177. package/dist/cjs/utils/useFocusableWhenDisabled.cjs +77 -0
  178. package/dist/cjs/utils/useForcedRerendering.cjs +35 -0
  179. package/dist/cjs/utils/useIsHydrating.cjs +44 -0
  180. package/dist/cjs/utils/useMixedToggleClickHandler.cjs +66 -0
  181. package/dist/cjs/utils/useOnFirstRender.cjs +35 -0
  182. package/dist/cjs/utils/useOnMount.cjs +36 -0
  183. package/dist/cjs/utils/useOpenChangeComplete.cjs +57 -0
  184. package/dist/cjs/utils/useOpenInteractionType.cjs +69 -0
  185. package/dist/cjs/utils/usePopupAutoResize.cjs +191 -0
  186. package/dist/cjs/utils/usePopupViewport.cjs +283 -0
  187. package/dist/cjs/utils/usePositioner.cjs +53 -0
  188. package/dist/cjs/utils/usePressAndHold.cjs +51 -0
  189. package/dist/cjs/utils/usePreviousValue.cjs +47 -0
  190. package/dist/cjs/utils/useRefWithInit.cjs +41 -0
  191. package/dist/cjs/utils/useRegisteredLabelId.cjs +48 -0
  192. package/dist/cjs/utils/useRenderElement.cjs +106 -0
  193. package/dist/cjs/utils/useScrollLock.cjs +232 -0
  194. package/dist/cjs/utils/useStableCallback.cjs +41 -0
  195. package/dist/cjs/utils/useTimeout.cjs +66 -0
  196. package/dist/cjs/utils/useTransitionStatus.cjs +116 -0
  197. package/dist/cjs/utils/useValueAsRef.cjs +43 -0
  198. package/dist/cjs/utils/useValueChanged.cjs +55 -0
  199. package/dist/cjs/utils/valueToPercent.cjs +30 -0
  200. package/dist/cjs/utils/visuallyHidden.cjs +49 -0
  201. package/package.json +20 -8
@@ -0,0 +1,835 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var tooltip_exports = {};
20
+ __export(tooltip_exports, {
21
+ OPEN_DELAY: () => OPEN_DELAY,
22
+ Tooltip: () => Tooltip,
23
+ TooltipHandle: () => TooltipHandle,
24
+ TooltipStore: () => TooltipStore,
25
+ TooltipTriggerDataAttributes: () => TooltipTriggerDataAttributes,
26
+ TooltipViewportCssVars: () => TooltipViewportCssVars,
27
+ createTooltipHandle: () => createTooltipHandle,
28
+ useTooltipPositionerContext: () => useTooltipPositionerContext,
29
+ useTooltipRootContext: () => useTooltipRootContext
30
+ });
31
+ module.exports = __toCommonJS(tooltip_exports);
32
+ var import_octane = require("octane");
33
+ var import_internal = require("./internal.cjs");
34
+ var import_useRenderElement = require("./utils/useRenderElement.cjs");
35
+ var import_mergeProps = require("./utils/mergeProps.cjs");
36
+ var import_useBaseUiId = require("./utils/useBaseUiId.cjs");
37
+ var import_createChangeEventDetails = require("./utils/createChangeEventDetails.cjs");
38
+ var import_ReactStore = require("./utils/store/ReactStore.cjs");
39
+ var import_createSelector = require("./utils/store/createSelector.cjs");
40
+ var import_useTimeout = require("./utils/useTimeout.cjs");
41
+ var import_useValueAsRef = require("./utils/useValueAsRef.cjs");
42
+ var import_octane2 = require("octane");
43
+ var import_useDismiss = require("./utils/floating/useDismiss.cjs");
44
+ var import_useClientPoint = require("./utils/floating/useClientPoint.cjs");
45
+ var import_useFocus = require("./utils/floating/useFocus.cjs");
46
+ var import_FloatingDelayGroup = require("./utils/floating/FloatingDelayGroup.cjs");
47
+ var import_useHoverReferenceInteraction = require("./utils/floating/useHoverReferenceInteraction.cjs");
48
+ var import_useHoverFloatingInteraction = require("./utils/floating/useHoverFloatingInteraction.cjs");
49
+ var import_useHoverInteractionSharedState = require("./utils/floating/useHoverInteractionSharedState.cjs");
50
+ var import_element = require("./utils/floating/element.cjs");
51
+ var import_event = require("./utils/floating/event.cjs");
52
+ var import_dom = require("./utils/dom.cjs");
53
+ var import_FloatingPortalLite = require("./utils/FloatingPortalLite.cjs");
54
+ var import_useAnchorPositioning = require("./utils/useAnchorPositioning.cjs");
55
+ var import_usePositioner = require("./utils/usePositioner.cjs");
56
+ var import_usePopupViewport = require("./utils/usePopupViewport.cjs");
57
+ var import_adaptiveOriginMiddleware = require("./utils/adaptiveOriginMiddleware.cjs");
58
+ var import_useOpenChangeComplete = require("./utils/useOpenChangeComplete.cjs");
59
+ var import_getDisabledMountTransitionStyles = require("./utils/getDisabledMountTransitionStyles.cjs");
60
+ var import_constants = require("./utils/constants.cjs");
61
+ var import_popupStateMapping = require("./utils/popupStateMapping.cjs");
62
+ var import_useTransitionStatus = require("./utils/useTransitionStatus.cjs");
63
+ var import_popups = require("./utils/popups/index.cjs");
64
+ var import_popupTriggerMap = require("./utils/popups/popupTriggerMap.cjs");
65
+ const OPEN_DELAY = 600;
66
+ const TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
67
+ const TooltipTriggerDataAttributes = {
68
+ popupOpen: import_popupStateMapping.CommonTriggerDataAttributes.popupOpen,
69
+ triggerDisabled: "data-trigger-disabled"
70
+ };
71
+ const TooltipViewportCssVars = {
72
+ popupWidth: "--popup-width",
73
+ popupHeight: "--popup-height"
74
+ };
75
+ const tooltipSelectors = {
76
+ ...import_popups.popupStoreSelectors,
77
+ disabled: (0, import_createSelector.createSelector)((state) => state.disabled),
78
+ instantType: (0, import_createSelector.createSelector)((state) => state.instantType),
79
+ isInstantPhase: (0, import_createSelector.createSelector)((state) => state.isInstantPhase),
80
+ trackCursorAxis: (0, import_createSelector.createSelector)((state) => state.trackCursorAxis),
81
+ disableHoverablePopup: (0, import_createSelector.createSelector)(
82
+ (state) => state.disableHoverablePopup
83
+ ),
84
+ lastOpenChangeReason: (0, import_createSelector.createSelector)((state) => state.openChangeReason),
85
+ closeOnClick: (0, import_createSelector.createSelector)((state) => state.closeOnClick),
86
+ closeDelay: (0, import_createSelector.createSelector)((state) => state.closeDelay),
87
+ hasViewport: (0, import_createSelector.createSelector)((state) => state.hasViewport)
88
+ };
89
+ function createInitialTooltipState() {
90
+ return {
91
+ ...(0, import_popups.createInitialPopupStoreState)(),
92
+ disabled: false,
93
+ instantType: void 0,
94
+ isInstantPhase: false,
95
+ trackCursorAxis: "none",
96
+ disableHoverablePopup: false,
97
+ openChangeReason: null,
98
+ closeOnClick: true,
99
+ closeDelay: 0,
100
+ hasViewport: false
101
+ };
102
+ }
103
+ class TooltipStore extends import_ReactStore.ReactStore {
104
+ constructor(initialState, floatingId, nested = false) {
105
+ const triggerElements = new import_popupTriggerMap.PopupTriggerMap();
106
+ const state = { ...createInitialTooltipState(), ...initialState };
107
+ state.floatingRootContext = (0, import_popups.createPopupFloatingRootContext)(triggerElements, floatingId, nested);
108
+ super(
109
+ state,
110
+ {
111
+ popupRef: { current: null },
112
+ onOpenChange: void 0,
113
+ onOpenChangeComplete: void 0,
114
+ triggerElements
115
+ },
116
+ tooltipSelectors
117
+ );
118
+ }
119
+ setOpen = (nextOpen, eventDetails) => {
120
+ (0, import_popups.applyPopupOpenChange)(this, nextOpen, eventDetails, {
121
+ extraState: { openChangeReason: eventDetails.reason }
122
+ });
123
+ };
124
+ // Used by trigger clicks to clear a delayed hover open without reporting a public state change.
125
+ cancelPendingOpen(event) {
126
+ this.state.floatingRootContext.dispatchOpenChange(
127
+ false,
128
+ (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.triggerPress, event)
129
+ );
130
+ }
131
+ static useStore(externalStore, initialState, slot) {
132
+ return (0, import_popups.usePopupStore)(
133
+ externalStore,
134
+ (floatingId, nested) => new TooltipStore(initialState, floatingId, nested),
135
+ true,
136
+ slot
137
+ ).store;
138
+ }
139
+ }
140
+ class TooltipHandle {
141
+ store;
142
+ constructor(store) {
143
+ this.store = store ?? new TooltipStore();
144
+ }
145
+ open(triggerId) {
146
+ const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0;
147
+ if (triggerId && !triggerElement) {
148
+ throw new Error(`Base UI: TooltipHandle.open: No trigger found with id "${triggerId}".`);
149
+ }
150
+ this.store.setOpen(
151
+ true,
152
+ (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction, void 0, triggerElement)
153
+ );
154
+ }
155
+ close() {
156
+ this.store.setOpen(
157
+ false,
158
+ (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction, void 0, void 0)
159
+ );
160
+ }
161
+ get isOpen() {
162
+ return this.store.select("open");
163
+ }
164
+ }
165
+ function createTooltipHandle() {
166
+ return new TooltipHandle();
167
+ }
168
+ const TooltipRootContext = (0, import_octane.createContext)(void 0);
169
+ function useTooltipRootContext(optional) {
170
+ const context = (0, import_octane.useContext)(TooltipRootContext);
171
+ if (context === void 0 && !optional) {
172
+ throw new Error(
173
+ "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>."
174
+ );
175
+ }
176
+ return context;
177
+ }
178
+ const TooltipProviderContext = (0, import_octane.createContext)(void 0);
179
+ function useTooltipProviderContext() {
180
+ return (0, import_octane.useContext)(TooltipProviderContext);
181
+ }
182
+ const TooltipPortalContext = (0, import_octane.createContext)(void 0);
183
+ function useTooltipPortalContext() {
184
+ const value = (0, import_octane.useContext)(TooltipPortalContext);
185
+ if (value === void 0) {
186
+ throw new Error("Base UI: <Tooltip.Portal> is missing.");
187
+ }
188
+ return value;
189
+ }
190
+ const TooltipPositionerContext = (0, import_octane.createContext)(
191
+ void 0
192
+ );
193
+ function useTooltipPositionerContext() {
194
+ const context = (0, import_octane.useContext)(TooltipPositionerContext);
195
+ if (!context) {
196
+ throw new Error(
197
+ "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>."
198
+ );
199
+ }
200
+ return context;
201
+ }
202
+ function TooltipProvider(props) {
203
+ const slot = (0, import_internal.S)("TooltipProvider");
204
+ const { delay, closeDelay, timeout = 400, children } = props;
205
+ const contextValue = (0, import_octane.useMemo)(
206
+ () => ({ delay, closeDelay }),
207
+ [delay, closeDelay],
208
+ (0, import_internal.subSlot)(slot, "ctx")
209
+ );
210
+ const delayValue = (0, import_octane.useMemo)(
211
+ () => ({ open: delay, close: closeDelay }),
212
+ [delay, closeDelay],
213
+ (0, import_internal.subSlot)(slot, "delay")
214
+ );
215
+ return (0, import_octane.createElement)(TooltipProviderContext.Provider, {
216
+ value: contextValue,
217
+ children: (0, import_octane.createElement)(import_FloatingDelayGroup.FloatingDelayGroup, {
218
+ delay: delayValue,
219
+ timeoutMs: timeout,
220
+ children
221
+ })
222
+ });
223
+ }
224
+ function TooltipInteractions(props) {
225
+ const slot = (0, import_internal.S)("TooltipInteractions");
226
+ const { store, disabled, trackCursorAxis } = props;
227
+ const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
228
+ const dismiss = (0, import_useDismiss.useDismiss)(
229
+ floatingRootContext,
230
+ { enabled: !disabled, referencePress: () => store.select("closeOnClick") },
231
+ (0, import_internal.subSlot)(slot, "dismiss")
232
+ );
233
+ const clientPoint = (0, import_useClientPoint.useClientPoint)(
234
+ floatingRootContext,
235
+ {
236
+ enabled: !disabled && trackCursorAxis !== "none",
237
+ axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
238
+ },
239
+ (0, import_internal.subSlot)(slot, "cp")
240
+ );
241
+ const activeTriggerProps = (0, import_octane.useMemo)(
242
+ () => (0, import_mergeProps.mergeProps)(clientPoint.reference, dismiss.reference),
243
+ [clientPoint.reference, dismiss.reference],
244
+ (0, import_internal.subSlot)(slot, "atp")
245
+ );
246
+ const inactiveTriggerProps = (0, import_octane.useMemo)(
247
+ () => (0, import_mergeProps.mergeProps)(clientPoint.trigger, dismiss.trigger),
248
+ [clientPoint.trigger, dismiss.trigger],
249
+ (0, import_internal.subSlot)(slot, "itp")
250
+ );
251
+ const popupProps = (0, import_octane.useMemo)(
252
+ () => (0, import_mergeProps.mergeProps)(import_popups.FOCUSABLE_POPUP_PROPS, clientPoint.floating, dismiss.floating),
253
+ [clientPoint.floating, dismiss.floating],
254
+ (0, import_internal.subSlot)(slot, "pp")
255
+ );
256
+ (0, import_popups.usePopupInteractionProps)(
257
+ store,
258
+ { activeTriggerProps, inactiveTriggerProps, popupProps },
259
+ (0, import_internal.subSlot)(slot, "pip")
260
+ );
261
+ return null;
262
+ }
263
+ function TooltipRoot(props) {
264
+ const slot = (0, import_internal.S)("TooltipRoot");
265
+ const {
266
+ disabled = false,
267
+ defaultOpen = false,
268
+ open: openProp,
269
+ disableHoverablePopup = false,
270
+ trackCursorAxis = "none",
271
+ actionsRef,
272
+ onOpenChange,
273
+ onOpenChangeComplete,
274
+ handle,
275
+ triggerId: triggerIdProp,
276
+ defaultTriggerId: defaultTriggerIdProp = null,
277
+ children
278
+ } = props;
279
+ const store = TooltipStore.useStore(
280
+ handle?.store,
281
+ {
282
+ open: defaultOpen,
283
+ openProp,
284
+ activeTriggerId: defaultTriggerIdProp,
285
+ triggerIdProp
286
+ },
287
+ (0, import_internal.subSlot)(slot, "store")
288
+ );
289
+ (0, import_popups.useInitialOpenSync)(store, openProp, defaultOpen, defaultTriggerIdProp, (0, import_internal.subSlot)(slot, "ios"));
290
+ store.useControlledProp("openProp", openProp, (0, import_internal.subSlot)(slot, "cp:open"));
291
+ store.useControlledProp("triggerIdProp", triggerIdProp, (0, import_internal.subSlot)(slot, "cp:trigger"));
292
+ store.useContextCallback("onOpenChange", onOpenChange, (0, import_internal.subSlot)(slot, "cb:open"));
293
+ store.useContextCallback(
294
+ "onOpenChangeComplete",
295
+ onOpenChangeComplete,
296
+ (0, import_internal.subSlot)(slot, "cb:complete")
297
+ );
298
+ const openState = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
299
+ const open = !disabled && openState;
300
+ const activeTriggerId = store.useState("activeTriggerId", (0, import_internal.subSlot)(slot, "atid"));
301
+ const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
302
+ const payload = store.useState("payload", (0, import_internal.subSlot)(slot, "payload"));
303
+ store.useSyncedValue("trackCursorAxis", trackCursorAxis, (0, import_internal.subSlot)(slot, "sv:tca"));
304
+ store.useSyncedValue("disableHoverablePopup", disableHoverablePopup, (0, import_internal.subSlot)(slot, "sv:dhp"));
305
+ store.useSyncedValue("disabled", disabled, (0, import_internal.subSlot)(slot, "sv:disabled"));
306
+ (0, import_popups.useImplicitActiveTrigger)(store, { closeOnActiveTriggerUnmount: true }, (0, import_internal.subSlot)(slot, "implicit"));
307
+ const { forceUnmount, transitionStatus } = (0, import_popups.useOpenStateTransitions)(
308
+ open,
309
+ store,
310
+ void 0,
311
+ (0, import_internal.subSlot)(slot, "transitions")
312
+ );
313
+ const isInstantPhase = store.useState("isInstantPhase", (0, import_internal.subSlot)(slot, "iip"));
314
+ const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "itype"));
315
+ const lastOpenChangeReason = store.useState("lastOpenChangeReason", (0, import_internal.subSlot)(slot, "locr"));
316
+ const previousInstantTypeRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "pit"));
317
+ (0, import_octane2.useLayoutEffect)(
318
+ () => {
319
+ if (openState && disabled) {
320
+ store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.disabled));
321
+ }
322
+ },
323
+ [openState, disabled, store],
324
+ (0, import_internal.subSlot)(slot, "l:disabled")
325
+ );
326
+ (0, import_octane2.useLayoutEffect)(
327
+ () => {
328
+ if (transitionStatus === "ending" && lastOpenChangeReason === import_createChangeEventDetails.REASONS.none || transitionStatus !== "ending" && isInstantPhase) {
329
+ if (instantType !== "delay") {
330
+ previousInstantTypeRef.current = instantType;
331
+ }
332
+ store.set("instantType", "delay");
333
+ } else if (previousInstantTypeRef.current !== null) {
334
+ store.set("instantType", previousInstantTypeRef.current);
335
+ previousInstantTypeRef.current = null;
336
+ }
337
+ },
338
+ [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store],
339
+ (0, import_internal.subSlot)(slot, "l:instant")
340
+ );
341
+ (0, import_octane2.useLayoutEffect)(
342
+ () => {
343
+ if (open && activeTriggerId == null) {
344
+ store.set("payload", void 0);
345
+ }
346
+ },
347
+ [store, activeTriggerId, open],
348
+ (0, import_internal.subSlot)(slot, "l:payload")
349
+ );
350
+ const handleImperativeClose = (0, import_octane2.useCallback)(
351
+ () => {
352
+ store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.imperativeAction));
353
+ },
354
+ [store],
355
+ (0, import_internal.subSlot)(slot, "close")
356
+ );
357
+ (0, import_octane2.useImperativeHandle)(
358
+ actionsRef,
359
+ () => ({ unmount: forceUnmount, close: handleImperativeClose }),
360
+ [forceUnmount, handleImperativeClose],
361
+ (0, import_internal.subSlot)(slot, "imp")
362
+ );
363
+ const shouldRenderInteractions = open || mounted || !disabled && trackCursorAxis !== "none";
364
+ const resolvedChildren = typeof children === "function" && !(0, import_octane2.isChildrenBlock)(children) ? children({ payload }) : children;
365
+ const content = [
366
+ shouldRenderInteractions ? (0, import_octane.createElement)(TooltipInteractions, {
367
+ key: "interactions",
368
+ store,
369
+ disabled,
370
+ trackCursorAxis
371
+ }) : null,
372
+ (0, import_octane.createElement)(import_octane.Fragment, { key: "children", children: resolvedChildren })
373
+ ];
374
+ return (0, import_octane.createElement)(TooltipRootContext.Provider, { value: store, children: content });
375
+ }
376
+ function getTargetElement(event) {
377
+ if ("composedPath" in event) {
378
+ const path = event.composedPath();
379
+ for (let i = 0; i < path.length; i += 1) {
380
+ const element = path[i];
381
+ if ((0, import_dom.isElement)(element)) {
382
+ return element;
383
+ }
384
+ }
385
+ }
386
+ const target = event.target;
387
+ if ((0, import_dom.isElement)(target)) {
388
+ return target;
389
+ }
390
+ return null;
391
+ }
392
+ function closestEnabledTooltipTrigger(element) {
393
+ let current = element;
394
+ while (current) {
395
+ if (current.hasAttribute(TOOLTIP_TRIGGER_IDENTIFIER)) {
396
+ return current;
397
+ }
398
+ const parentElement = current.parentElement;
399
+ if (parentElement) {
400
+ current = parentElement;
401
+ continue;
402
+ }
403
+ const root = current.getRootNode();
404
+ current = "host" in root && (0, import_dom.isElement)(root.host) ? root.host : null;
405
+ }
406
+ return null;
407
+ }
408
+ function TooltipTrigger(componentProps) {
409
+ const slot = (0, import_internal.S)("TooltipTrigger");
410
+ const {
411
+ render,
412
+ className,
413
+ style,
414
+ handle,
415
+ payload,
416
+ disabled: disabledProp,
417
+ delay,
418
+ closeOnClick = true,
419
+ closeDelay,
420
+ id: idProp,
421
+ ref,
422
+ ...elementProps
423
+ } = componentProps;
424
+ const rootContext = useTooltipRootContext(true);
425
+ const store = handle?.store ?? rootContext;
426
+ if (!store) {
427
+ throw new Error(
428
+ "Base UI: <Tooltip.Trigger> must be either used within a <Tooltip.Root> component or provided with a handle."
429
+ );
430
+ }
431
+ const thisTriggerId = (0, import_useBaseUiId.useBaseUiId)(idProp, (0, import_internal.subSlot)(slot, "id"));
432
+ const isTriggerActive = store.useState("isTriggerActive", (0, import_internal.subSlot)(slot, "ita"), thisTriggerId);
433
+ const isOpenedByThisTrigger = store.useState(
434
+ "isOpenedByTrigger",
435
+ (0, import_internal.subSlot)(slot, "obt"),
436
+ thisTriggerId
437
+ );
438
+ const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
439
+ const triggerElementRef = (0, import_octane.useRef)(null, (0, import_internal.subSlot)(slot, "trigEl"));
440
+ const delayWithDefault = delay ?? OPEN_DELAY;
441
+ const closeDelayWithDefault = closeDelay ?? 0;
442
+ const { registerTrigger, isMountedByThisTrigger } = (0, import_popups.useTriggerDataForwarding)(
443
+ thisTriggerId,
444
+ triggerElementRef,
445
+ store,
446
+ { payload, closeOnClick, closeDelay: closeDelayWithDefault },
447
+ (0, import_internal.subSlot)(slot, "tdf")
448
+ );
449
+ const providerContext = useTooltipProviderContext();
450
+ const { delayRef, isInstantPhase, hasProvider } = (0, import_FloatingDelayGroup.useDelayGroup)(
451
+ floatingRootContext,
452
+ { open: isOpenedByThisTrigger },
453
+ (0, import_internal.subSlot)(slot, "group")
454
+ );
455
+ const hoverInteraction = (0, import_useHoverInteractionSharedState.useHoverInteractionSharedState)(
456
+ floatingRootContext,
457
+ (0, import_internal.subSlot)(slot, "hoverState")
458
+ );
459
+ store.useSyncedValue("isInstantPhase", isInstantPhase, (0, import_internal.subSlot)(slot, "sv:iip"));
460
+ const rootDisabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "rootDisabled"));
461
+ const disabled = disabledProp ?? rootDisabled;
462
+ const disabledRef = (0, import_useValueAsRef.useValueAsRef)(disabled, (0, import_internal.subSlot)(slot, "disabledRef"));
463
+ const trackCursorAxis = store.useState("trackCursorAxis", (0, import_internal.subSlot)(slot, "tca"));
464
+ const disableHoverablePopup = store.useState("disableHoverablePopup", (0, import_internal.subSlot)(slot, "dhp"));
465
+ const isNestedTriggerHoveredRef = (0, import_octane.useRef)(false, (0, import_internal.subSlot)(slot, "nested"));
466
+ const nestedTriggerOpenTimeout = (0, import_useTimeout.useTimeout)((0, import_internal.subSlot)(slot, "nestedTo"));
467
+ const pointerTypeRef = (0, import_octane.useRef)(void 0, (0, import_internal.subSlot)(slot, "ptype"));
468
+ function getOpenDelay() {
469
+ const providerDelay = providerContext?.delay;
470
+ const groupOpenValue = typeof delayRef.current === "object" ? delayRef.current.open : void 0;
471
+ let computedOpenDelay = delayWithDefault;
472
+ if (hasProvider) {
473
+ if (groupOpenValue !== 0) {
474
+ computedOpenDelay = delay ?? providerDelay ?? delayWithDefault;
475
+ } else {
476
+ computedOpenDelay = 0;
477
+ }
478
+ }
479
+ return computedOpenDelay;
480
+ }
481
+ function isEnabledNestedTriggerTarget(target) {
482
+ const triggerEl = triggerElementRef.current;
483
+ if (!triggerEl || !target) {
484
+ return false;
485
+ }
486
+ const nearestTrigger = closestEnabledTooltipTrigger(target);
487
+ return nearestTrigger !== null && nearestTrigger !== triggerEl && (0, import_element.contains)(triggerEl, nearestTrigger);
488
+ }
489
+ function detectNestedTriggerHover(target) {
490
+ const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
491
+ isNestedTriggerHoveredRef.current = nestedTriggerHovered;
492
+ if (nestedTriggerHovered) {
493
+ hoverInteraction.openChangeTimeout.clear();
494
+ hoverInteraction.restTimeout.clear();
495
+ hoverInteraction.restTimeoutPending = false;
496
+ nestedTriggerOpenTimeout.clear();
497
+ }
498
+ return nestedTriggerHovered;
499
+ }
500
+ const hoverProps = (0, import_useHoverReferenceInteraction.useHoverReferenceInteraction)(
501
+ floatingRootContext,
502
+ {
503
+ enabled: !disabled,
504
+ mouseOnly: true,
505
+ move: false,
506
+ handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? (0, import_useHoverReferenceInteraction.safePolygon)() : null,
507
+ restMs: getOpenDelay,
508
+ delay() {
509
+ const closeValue = typeof delayRef.current === "object" ? delayRef.current.close : void 0;
510
+ let computedCloseDelay = closeDelayWithDefault;
511
+ if (closeDelay == null && hasProvider) {
512
+ computedCloseDelay = closeValue;
513
+ }
514
+ return { close: computedCloseDelay };
515
+ },
516
+ triggerElementRef,
517
+ isActiveTrigger: isTriggerActive,
518
+ isClosing: () => store.select("transitionStatus") === "ending",
519
+ shouldOpen() {
520
+ return !isNestedTriggerHoveredRef.current;
521
+ }
522
+ },
523
+ (0, import_internal.subSlot)(slot, "hover")
524
+ );
525
+ const focusProps = (0, import_useFocus.useFocus)(
526
+ floatingRootContext,
527
+ { enabled: !disabled },
528
+ (0, import_internal.subSlot)(slot, "focus")
529
+ ).reference;
530
+ function handleNestedTriggerHover(event) {
531
+ const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
532
+ const target = getTargetElement(event);
533
+ const nestedTriggerHovered = detectNestedTriggerHover(target);
534
+ const triggerEl = triggerElementRef.current;
535
+ const targetInsideTrigger = triggerEl && target && (0, import_element.contains)(triggerEl, target);
536
+ if (nestedTriggerHovered && store.select("open") && store.select("lastOpenChangeReason") === import_createChangeEventDetails.REASONS.triggerHover) {
537
+ store.setOpen(false, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.triggerHover, event));
538
+ return;
539
+ }
540
+ if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
541
+ (0, import_event.isMouseLikePointerType)(pointerTypeRef.current)) {
542
+ const openTooltip = () => {
543
+ if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store.select("open")) {
544
+ store.setOpen(true, (0, import_createChangeEventDetails.createChangeEventDetails)(import_createChangeEventDetails.REASONS.triggerHover, event, triggerEl));
545
+ }
546
+ };
547
+ const openDelay = getOpenDelay();
548
+ if (openDelay === 0) {
549
+ nestedTriggerOpenTimeout.clear();
550
+ openTooltip();
551
+ } else {
552
+ nestedTriggerOpenTimeout.start(openDelay, openTooltip);
553
+ }
554
+ }
555
+ }
556
+ const rootTriggerProps = store.useState(
557
+ "triggerProps",
558
+ (0, import_internal.subSlot)(slot, "tp"),
559
+ isMountedByThisTrigger
560
+ );
561
+ const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
562
+ const state = { open: isOpenedByThisTrigger };
563
+ return (0, import_useRenderElement.useRenderElement)(
564
+ "button",
565
+ { render, className, style },
566
+ {
567
+ state,
568
+ ref: [ref, registerTrigger, triggerElementRef],
569
+ props: [
570
+ hoverProps,
571
+ focusProps,
572
+ shouldApplyRootTriggerProps ? rootTriggerProps : void 0,
573
+ {
574
+ onMouseOver(event) {
575
+ handleNestedTriggerHover(event);
576
+ },
577
+ onFocus(event) {
578
+ if (isEnabledNestedTriggerTarget(getTargetElement(event))) {
579
+ event.preventBaseUIHandler?.();
580
+ }
581
+ },
582
+ onMouseLeave() {
583
+ isNestedTriggerHoveredRef.current = false;
584
+ nestedTriggerOpenTimeout.clear();
585
+ pointerTypeRef.current = void 0;
586
+ },
587
+ onPointerEnter(event) {
588
+ pointerTypeRef.current = event.pointerType;
589
+ },
590
+ onPointerDown(event) {
591
+ pointerTypeRef.current = event.pointerType;
592
+ store.set("closeOnClick", closeOnClick);
593
+ if (closeOnClick && !store.select("open")) {
594
+ store.cancelPendingOpen(event);
595
+ }
596
+ },
597
+ onClick(event) {
598
+ if (closeOnClick && !store.select("open")) {
599
+ store.cancelPendingOpen(event);
600
+ }
601
+ },
602
+ id: thisTriggerId,
603
+ [TooltipTriggerDataAttributes.triggerDisabled]: disabled ? "" : void 0,
604
+ [TOOLTIP_TRIGGER_IDENTIFIER]: disabled ? void 0 : ""
605
+ },
606
+ elementProps
607
+ ],
608
+ stateAttributesMapping: import_popupStateMapping.triggerOpenStateMapping
609
+ },
610
+ (0, import_internal.subSlot)(slot, "re")
611
+ );
612
+ }
613
+ function TooltipPortal(props) {
614
+ const slot = (0, import_internal.S)("TooltipPortal");
615
+ const { keepMounted = false, ref, ...portalProps } = props;
616
+ const store = useTooltipRootContext();
617
+ const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
618
+ if (!(mounted || keepMounted)) {
619
+ return null;
620
+ }
621
+ return (0, import_octane.createElement)(TooltipPortalContext.Provider, {
622
+ value: keepMounted,
623
+ children: (0, import_octane.createElement)(import_FloatingPortalLite.FloatingPortalLite, { ref, ...portalProps })
624
+ });
625
+ }
626
+ function TooltipPositioner(componentProps) {
627
+ const slot = (0, import_internal.S)("TooltipPositioner");
628
+ const {
629
+ render,
630
+ className,
631
+ style,
632
+ anchor,
633
+ positionMethod = "absolute",
634
+ side = "top",
635
+ align = "center",
636
+ sideOffset = 0,
637
+ alignOffset = 0,
638
+ collisionBoundary = "clipping-ancestors",
639
+ collisionPadding = 5,
640
+ arrowPadding = 5,
641
+ sticky = false,
642
+ disableAnchorTracking = false,
643
+ collisionAvoidance = import_constants.POPUP_COLLISION_AVOIDANCE,
644
+ ref,
645
+ ...elementProps
646
+ } = componentProps;
647
+ const store = useTooltipRootContext();
648
+ const keepMounted = useTooltipPortalContext();
649
+ const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
650
+ const mounted = store.useState("mounted", (0, import_internal.subSlot)(slot, "mounted"));
651
+ const trackCursorAxis = store.useState("trackCursorAxis", (0, import_internal.subSlot)(slot, "tca"));
652
+ const disableHoverablePopup = store.useState("disableHoverablePopup", (0, import_internal.subSlot)(slot, "dhp"));
653
+ const floatingRootContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
654
+ const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
655
+ const transitionStatus = store.useState("transitionStatus", (0, import_internal.subSlot)(slot, "trans"));
656
+ const hasViewport = store.useState("hasViewport", (0, import_internal.subSlot)(slot, "viewport"));
657
+ const positioning = (0, import_useAnchorPositioning.useAnchorPositioning)(
658
+ {
659
+ anchor,
660
+ positionMethod,
661
+ floatingRootContext,
662
+ mounted,
663
+ side,
664
+ sideOffset,
665
+ align,
666
+ alignOffset,
667
+ collisionBoundary,
668
+ collisionPadding,
669
+ sticky,
670
+ arrowPadding,
671
+ disableAnchorTracking,
672
+ keepMounted,
673
+ collisionAvoidance,
674
+ adaptiveOrigin: hasViewport ? import_adaptiveOriginMiddleware.adaptiveOrigin : void 0
675
+ },
676
+ (0, import_internal.subSlot)(slot, "pos")
677
+ );
678
+ const state = (0, import_octane.useMemo)(
679
+ () => ({
680
+ open,
681
+ side: positioning.side,
682
+ align: positioning.align,
683
+ anchorHidden: positioning.anchorHidden,
684
+ instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
685
+ }),
686
+ [
687
+ open,
688
+ positioning.side,
689
+ positioning.align,
690
+ positioning.anchorHidden,
691
+ trackCursorAxis,
692
+ instantType
693
+ ],
694
+ (0, import_internal.subSlot)(slot, "state")
695
+ );
696
+ const setPositionerElement = store.useStateSetter("positionerElement", (0, import_internal.subSlot)(slot, "spe"));
697
+ const element = (0, import_usePositioner.usePositioner)(
698
+ { render, className, style },
699
+ state,
700
+ {
701
+ styles: positioning.positionerStyles,
702
+ transitionStatus,
703
+ props: elementProps,
704
+ refs: [ref, setPositionerElement],
705
+ hidden: !mounted,
706
+ inert: !open || trackCursorAxis === "both" || disableHoverablePopup
707
+ },
708
+ (0, import_internal.subSlot)(slot, "positioner")
709
+ );
710
+ return (0, import_octane.createElement)(TooltipPositionerContext.Provider, {
711
+ value: positioning,
712
+ children: element
713
+ });
714
+ }
715
+ const popupStateAttributesMapping = {
716
+ ...import_popupStateMapping.popupStateMapping,
717
+ ...import_useTransitionStatus.transitionStatusMapping
718
+ };
719
+ function TooltipPopup(componentProps) {
720
+ const slot = (0, import_internal.S)("TooltipPopup");
721
+ const { render, className, style, ref, ...elementProps } = componentProps;
722
+ const store = useTooltipRootContext();
723
+ const { side, align } = useTooltipPositionerContext();
724
+ const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
725
+ const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
726
+ const transitionStatus = store.useState("transitionStatus", (0, import_internal.subSlot)(slot, "trans"));
727
+ const popupProps = store.useState("popupProps", (0, import_internal.subSlot)(slot, "pp"));
728
+ const floatingContext = store.useState("floatingRootContext", (0, import_internal.subSlot)(slot, "frc"));
729
+ const disabled = store.useState("disabled", (0, import_internal.subSlot)(slot, "disabled"));
730
+ const closeDelay = store.useState("closeDelay", (0, import_internal.subSlot)(slot, "closeDelay"));
731
+ (0, import_useOpenChangeComplete.useOpenChangeComplete)(
732
+ {
733
+ open,
734
+ ref: store.context.popupRef,
735
+ onComplete() {
736
+ if (open) {
737
+ store.context.onOpenChangeComplete?.(true);
738
+ }
739
+ }
740
+ },
741
+ (0, import_internal.subSlot)(slot, "occ")
742
+ );
743
+ (0, import_useHoverFloatingInteraction.useHoverFloatingInteraction)(
744
+ floatingContext,
745
+ { enabled: !disabled, closeDelay },
746
+ (0, import_internal.subSlot)(slot, "hoverPopup")
747
+ );
748
+ const setPopupElement = store.useStateSetter("popupElement", (0, import_internal.subSlot)(slot, "spe"));
749
+ const state = { open, side, align, instant: instantType, transitionStatus };
750
+ return (0, import_useRenderElement.useRenderElement)(
751
+ "div",
752
+ { render, className, style },
753
+ {
754
+ state,
755
+ ref: [ref, store.context.popupRef, setPopupElement],
756
+ props: [popupProps, (0, import_getDisabledMountTransitionStyles.getDisabledMountTransitionStyles)(transitionStatus), elementProps],
757
+ stateAttributesMapping: popupStateAttributesMapping
758
+ },
759
+ (0, import_internal.subSlot)(slot, "re")
760
+ );
761
+ }
762
+ function TooltipArrow(componentProps) {
763
+ const slot = (0, import_internal.S)("TooltipArrow");
764
+ const { render, className, style, ref, ...elementProps } = componentProps;
765
+ const store = useTooltipRootContext();
766
+ const { arrowRef, side, align, arrowUncentered, arrowStyles } = useTooltipPositionerContext();
767
+ const open = store.useState("open", (0, import_internal.subSlot)(slot, "open"));
768
+ const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
769
+ const state = { open, side, align, uncentered: arrowUncentered, instant: instantType };
770
+ return (0, import_useRenderElement.useRenderElement)(
771
+ "div",
772
+ { render, className, style },
773
+ {
774
+ state,
775
+ ref: [ref, arrowRef],
776
+ props: [{ style: arrowStyles, "aria-hidden": true }, elementProps],
777
+ stateAttributesMapping: import_popupStateMapping.popupStateMapping
778
+ },
779
+ (0, import_internal.subSlot)(slot, "re")
780
+ );
781
+ }
782
+ const viewportStateAttributesMapping = {
783
+ activationDirection: (value) => value ? { "data-activation-direction": value } : null
784
+ };
785
+ function TooltipViewport(componentProps) {
786
+ const slot = (0, import_internal.S)("TooltipViewport");
787
+ const { render, className, style, children, ref, ...elementProps } = componentProps;
788
+ const store = useTooltipRootContext();
789
+ const positioner = useTooltipPositionerContext();
790
+ const instantType = store.useState("instantType", (0, import_internal.subSlot)(slot, "instant"));
791
+ const { children: childrenToRender, state: viewportState } = (0, import_usePopupViewport.usePopupViewport)(
792
+ { store, side: positioner.side, cssVars: TooltipViewportCssVars, children },
793
+ (0, import_internal.subSlot)(slot, "vp")
794
+ );
795
+ const state = {
796
+ activationDirection: viewportState.activationDirection,
797
+ transitioning: viewportState.transitioning,
798
+ instant: instantType
799
+ };
800
+ return (0, import_useRenderElement.useRenderElement)(
801
+ "div",
802
+ { render, className, style },
803
+ {
804
+ state,
805
+ ref,
806
+ props: [elementProps, { children: childrenToRender }],
807
+ stateAttributesMapping: viewportStateAttributesMapping
808
+ },
809
+ (0, import_internal.subSlot)(slot, "re")
810
+ );
811
+ }
812
+ const Tooltip = {
813
+ Provider: TooltipProvider,
814
+ Root: TooltipRoot,
815
+ Trigger: TooltipTrigger,
816
+ Portal: TooltipPortal,
817
+ Positioner: TooltipPositioner,
818
+ Popup: TooltipPopup,
819
+ Arrow: TooltipArrow,
820
+ Viewport: TooltipViewport,
821
+ createHandle: createTooltipHandle,
822
+ Handle: TooltipHandle
823
+ };
824
+ // Annotate the CommonJS export names for ESM import in node:
825
+ 0 && (module.exports = {
826
+ OPEN_DELAY,
827
+ Tooltip,
828
+ TooltipHandle,
829
+ TooltipStore,
830
+ TooltipTriggerDataAttributes,
831
+ TooltipViewportCssVars,
832
+ createTooltipHandle,
833
+ useTooltipPositionerContext,
834
+ useTooltipRootContext
835
+ });