function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
/**
 * venueBooking 入口组件
 * 初始化国际化、标准化入口上下文，并挂载 Provider + Content
 */
import React, { useState, useEffect } from 'react';
import { locales } from '@pisell/utils';
import useEngineContext from "../../hooks/useEngineContext";
import { VenueBookingProvider } from "./context";
import Content from "./components/Content";
import { normalizeEntryContext } from "./hooks";
import localeTexts from "./locales";
function getViewportHeight() {
  var _window$visualViewpor;
  if (typeof window === 'undefined') return undefined;
  var visualViewportHeight = (_window$visualViewpor = window.visualViewport) === null || _window$visualViewpor === void 0 ? void 0 : _window$visualViewpor.height;
  if (visualViewportHeight && visualViewportHeight > 0) return Math.round(visualViewportHeight);
  if (window.innerHeight > 0) return window.innerHeight;
  return undefined;
}
function getViewportHeightFallback() {
  var _CSS$supports, _CSS, _CSS$supports2, _CSS2;
  if (typeof CSS !== 'undefined' && (_CSS$supports = (_CSS = CSS).supports) !== null && _CSS$supports !== void 0 && _CSS$supports.call(_CSS, 'height', '100dvh')) return '100dvh';
  if (typeof CSS !== 'undefined' && (_CSS$supports2 = (_CSS2 = CSS).supports) !== null && _CSS$supports2 !== void 0 && _CSS$supports2.call(_CSS2, 'height', '100svh')) return '100svh';
  return '100%';
}
function getIsMobileFooterVisible() {
  if (typeof window === 'undefined') return false;
  return window.matchMedia('(max-width: 1023.98px)').matches;
}
function getViewportStyle(viewportHeight) {
  if (viewportHeight === undefined) {
    var fallbackHeight = getViewportHeightFallback();
    return {
      height: fallbackHeight,
      minHeight: fallbackHeight
    };
  }
  return {
    '--vb-viewport-height': "".concat(viewportHeight, "px"),
    height: 'var(--vb-viewport-height)',
    minHeight: 'var(--vb-viewport-height)'
  };
}

/** 场地预订主组件 */
function VenueBooking(props) {
  var _context$engine, _context$engine2;
  var context = useEngineContext();
  var entryContext = normalizeEntryContext(context === null || context === void 0 || (_context$engine = context.engine) === null || _context$engine === void 0 ? void 0 : _context$engine.props);
  locales.init(localeTexts, (context === null || context === void 0 || (_context$engine2 = context.engine) === null || _context$engine2 === void 0 || (_context$engine2 = _context$engine2.props) === null || _context$engine2 === void 0 ? void 0 : _context$engine2.locale) || 'en');

  // h-full 依赖父链上每一层都有明确高度，但宿主环境（如 KeepAlive wrapper）可能打断此链。
  // iOS Chrome 的 100vh/innerHeight 容易受地址栏影响，优先用 visualViewport 的动态可见高度。
  var _useState = useState(getViewportHeight),
    _useState2 = _slicedToArray(_useState, 2),
    viewportHeight = _useState2[0],
    setViewportHeight = _useState2[1];
  var _useState3 = useState(getIsMobileFooterVisible),
    _useState4 = _slicedToArray(_useState3, 2),
    isMobileFooterVisible = _useState4[0],
    setIsMobileFooterVisible = _useState4[1];
  useEffect(function () {
    var _window$visualViewpor2, _window$visualViewpor3;
    var frameId;
    function updateViewportHeight() {
      if (frameId !== undefined) window.cancelAnimationFrame(frameId);
      frameId = window.requestAnimationFrame(function () {
        frameId = undefined;
        setViewportHeight(getViewportHeight());
        setIsMobileFooterVisible(getIsMobileFooterVisible());
      });
    }
    updateViewportHeight();
    window.addEventListener('resize', updateViewportHeight);
    window.addEventListener('orientationchange', updateViewportHeight);
    (_window$visualViewpor2 = window.visualViewport) === null || _window$visualViewpor2 === void 0 || _window$visualViewpor2.addEventListener('resize', updateViewportHeight);
    (_window$visualViewpor3 = window.visualViewport) === null || _window$visualViewpor3 === void 0 || _window$visualViewpor3.addEventListener('scroll', updateViewportHeight);
    return function () {
      var _window$visualViewpor4, _window$visualViewpor5;
      if (frameId !== undefined) window.cancelAnimationFrame(frameId);
      window.removeEventListener('resize', updateViewportHeight);
      window.removeEventListener('orientationchange', updateViewportHeight);
      (_window$visualViewpor4 = window.visualViewport) === null || _window$visualViewpor4 === void 0 || _window$visualViewpor4.removeEventListener('resize', updateViewportHeight);
      (_window$visualViewpor5 = window.visualViewport) === null || _window$visualViewpor5 === void 0 || _window$visualViewpor5.removeEventListener('scroll', updateViewportHeight);
    };
  }, []);
  return /*#__PURE__*/React.createElement("div", {
    className: "venue-booking-scope ".concat(isMobileFooterVisible ? 'fixed' : '', " overflow-x-hidden overscroll-none bg-[#f5f5f3] text-zinc-900"),
    style: getViewportStyle(viewportHeight)
  }, /*#__PURE__*/React.createElement(VenueBookingProvider, {
    entryContext: entryContext
  }, /*#__PURE__*/React.createElement(Content, null)));
}
export default VenueBooking;