/**
 * Constants for every `reason` string carried on Base UI change-event details.
 * Mirrors the React Base UI `REASONS` namespace.
 */
export const REASONS = {
  none: "none",
  triggerPress: "trigger-press",
  triggerHover: "trigger-hover",
  triggerFocus: "trigger-focus",
  outsidePress: "outside-press",
  itemPress: "item-press",
  closePress: "close-press",
  linkPress: "link-press",
  clearPress: "clear-press",
  chipRemovePress: "chip-remove-press",
  trackPress: "track-press",
  incrementPress: "increment-press",
  decrementPress: "decrement-press",
  inputChange: "input-change",
  inputClear: "input-clear",
  inputBlur: "input-blur",
  inputPaste: "input-paste",
  inputPress: "input-press",
  focusOut: "focus-out",
  escapeKey: "escape-key",
  closeWatcher: "close-watcher",
  listNavigation: "list-navigation",
  keyboard: "keyboard",
  pointer: "pointer",
  drag: "drag",
  swipe: "swipe",
  wheel: "wheel",
  scrub: "scrub",
  cancelOpen: "cancel-open",
  siblingOpen: "sibling-open",
  disabled: "disabled",
  imperativeAction: "imperative-action",
  windowResize: "window-resize"
};

/**
 * Maps a change `reason` string to its corresponding native event type.
 */

/**
 * The "details" object passed as the second argument of every `onXChange`
 * callback in Base UI.
 */

const EMPTY_CUSTOM = Object.freeze({});

/**
 * Create a change-event details object with `cancel`/`allowPropagation`
 * utilities and their read-only observers.
 *
 * Plain value factory — not reactive, safe to call in event handlers.
 */
export function createChangeEventDetails(reason, event, trigger, customProperties) {
  let canceled = false;
  let allowPropagation = false;
  const custom = customProperties ?? EMPTY_CUSTOM;
  const details = {
    reason,
    event: event ?? new Event("base-ui"),
    cancel() {
      canceled = true;
    },
    allowPropagation() {
      allowPropagation = true;
    },
    get isCanceled() {
      return canceled;
    },
    get isPropagationAllowed() {
      return allowPropagation;
    },
    trigger,
    ...custom
  };
  return details;
}

/**
 * Create a "generic" (non-cancelable) event details object. Useful for
 * notification-style events where the consumer cannot influence the flow.
 */
export function createGenericEventDetails(reason, event, customProperties) {
  const custom = customProperties ?? EMPTY_CUSTOM;
  const details = {
    reason,
    event: event ?? new Event("base-ui"),
    ...custom
  };
  return details;
}
//# sourceMappingURL=change-event-details.jsx.map
