/**
 * TooltipStore — thin Solid 2 port of Base UI React's `TooltipStore`
 * (`packages/react/src/tooltip/store/TooltipStore.ts`).
 *
 * Mirrors `PopoverStore` in scope: the React store carries the full
 * tooltip state machine; the Solid port keeps the legacy per-root
 * signal-based state but exposes a small imperative surface here so
 * `TooltipHandle` / `actionsRef` can plug in without wholesale rewriting
 * the root. See `src/popover/store/popover-store.ts` for the same
 * rationale.
 */

import { createChangeEventDetails, REASONS } from "../../internals/change-event-details.jsx";
import { PopupTriggerMap } from "../../internals/floating-ui/popup-trigger-map.jsx";
export class TooltipStore {
  _setOpen = null;
  _open = false;
  constructor() {
    this.context = {
      triggerElements: new PopupTriggerMap()
    };
  }

  /** @internal */
  attachSetOpen(fn) {
    this._setOpen = fn;
  }

  /** @internal */
  setOpenMirror(next) {
    this._open = next;
  }
  setOpen(next, details) {
    this._setOpen?.(next, details);
  }
  get isOpen() {
    return this._open;
  }
}
export class TooltipHandle {
  /** @internal */

  constructor() {
    this.store = new TooltipStore();
  }
  open(triggerId) {
    const triggerElement = this.store.context.triggerElements.getById(triggerId);
    if (!triggerElement) {
      throw new Error(`Base UI: TooltipHandle.open: No trigger found with id "${triggerId}".`);
    }
    this.store.setOpen(true, createChangeEventDetails(REASONS.imperativeAction, undefined, triggerElement));
  }
  close() {
    this.store.setOpen(false, createChangeEventDetails(REASONS.imperativeAction, undefined, undefined));
  }
  get isOpen() {
    return this.store.isOpen;
  }
}
export function createTooltipHandle() {
  return new TooltipHandle();
}
//# sourceMappingURL=tooltip-store.jsx.map
