const require_runtime = require("../../../_virtual/_rolldown/runtime.js");
const require_objectSpread2 = require("../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
const require_reservationConstants = require("../reservationConstants.js");
const require_reservationDataUtils = require("../data/reservationDataUtils.js");
const require_ReservationFloorMapDockAppearanceToggle = require("./ReservationFloorMapDockAppearanceToggle.js");
let dayjs = require("dayjs");
dayjs = require_runtime.__toESM(dayjs);
let react = require("react");
react = require_runtime.__toESM(react);
let antd = require("antd");
let _pisell_utils = require("@pisell/utils");
let _pisell_materials = require("@pisell/materials");
let _ant_design_icons = require("@ant-design/icons");
//#region src/plus/pisellReservation/components/PisellReservationSubcomponents.tsx
/**
* 预约页拆出的轻量子组件（无业务数据请求）：
* - `RecordBoardBodyViewCapture`：同步 bodyView 到 ref，并可通知宿主；
* - `ScheduleSyncOnFloorEnter`：从表格回到平面图/日历、或从日历回到平面图时，用当前营业日 patch 列表时间窗口；
* - `PisellReservationToolbarTabs`：平面图/日历为日程带 + Segmented；表格 / 资源墙不展示日程带，仅 extraTabs；
* - `ReservationGridTopRight` / `PisellReservationScheduleEndActions` / `ReservationFloorMapCanvasTabsTrailing`：工具栏与画布尾区。
*/
/** 无 UI：将 RecordBoard Context 中的 `bodyView` 写入 ref，并可选通知宿主（如预约页按视图切换 booking 的 form_record_ids） */
function RecordBoardBodyViewCapture(props) {
	const { bodyView } = (0, _pisell_materials.useRecordBoardContext)();
	(0, react.useEffect)(() => {
		var _props$onBodyViewChan;
		props.bodyViewRef.current = bodyView;
		(_props$onBodyViewChan = props.onBodyViewChange) === null || _props$onBodyViewChan === void 0 || _props$onBodyViewChan.call(props, bodyView);
	}, [
		bodyView,
		props.bodyViewRef,
		props.onBodyViewChange
	]);
	return null;
}
/**
* 视图切换时统一收敛 `floorDayBookingData.searchParams`：
* - 从 grid / 任意非视图区切到 floorMap / calendar / resourceWall 时，锚定当前营业日单日窗；
* - 从 calendar / resourceWall 切回 floorMap 时，除锚定单日窗外，必须清掉 calendar 周/月视图写入的
*   `compact_fields` / `enable_remote_memory_cache`（否则 osServer 在非今日锚定下会走 compact with，
*    booking 缺失 resources，平面图合并落空）；
* - 从 calendar 切到 grid / resourceWall 时，单独清 calendar-only flags，避免之后再切回 floorMap 时残留。
*
* 注意：此组件必须常驻挂载（放在 `<PisellRecordBoard>` 内、`<ShellFrame>` 外），
* 否则 ShellFrame 会按 bodyView 条件渲染 children，导致它只在 grid 视图下挂载而无法观测到切换事件。
*/
function ScheduleSyncOnFloorEnter(props) {
	const { bodyView } = (0, _pisell_materials.useRecordBoardContext)();
	const prevRef = (0, react.useRef)(null);
	(0, react.useEffect)(() => {
		const prev = prevRef.current;
		if (props.isInternalListData && (bodyView === "floorMap" || bodyView === "calendar" || bodyView === "resourceWall") && prev !== null && prev !== "floorMap" && prev !== "calendar" && prev !== "resourceWall") props.patchSearchParams((p) => require_reservationDataUtils.stripCalendarOnlyFlags(require_reservationDataUtils.mergeSearchParamsBookingWindow(p, props.schedule.date, props.operatingDayBoundary, props.timelineRange, (0, dayjs.default)())));
		if (props.isInternalListData && (prev === "calendar" || prev === "resourceWall") && bodyView === "floorMap") props.patchSearchParams((p) => require_reservationDataUtils.stripCalendarOnlyFlags(require_reservationDataUtils.mergeSearchParamsBookingWindow(p, props.schedule.date, props.operatingDayBoundary, props.timelineRange, (0, dayjs.default)())));
		/**
		* 从 calendar 切到 grid / resourceWall：
		* - resourceWall 与 floorMap 共用 `floorDayBookingData`，必须同时收敛回**锚定营业日单日窗**，
		*   否则会残留 calendar 周/月视口的 `booking_time_start_between`；
		* - grid 视图用的是独立的 `gridBookingData`，这里调整的是 `floorDayBookingData.searchParams`，
		*   不会影响 grid 当前展示；好处是之后再切回 floorMap/resourceWall/calendar 时状态一致。
		*/
		if (props.isInternalListData && prev === "calendar" && (bodyView === "grid" || bodyView === "resourceWall")) props.patchSearchParams((p) => require_reservationDataUtils.stripCalendarOnlyFlags(require_reservationDataUtils.mergeSearchParamsBookingWindow(p, props.schedule.date, props.operatingDayBoundary, props.timelineRange, (0, dayjs.default)())));
		prevRef.current = bodyView;
	}, [
		bodyView,
		props.schedule.date.valueOf(),
		props.isInternalListData,
		props.patchSearchParams,
		props.schedule.date,
		props.operatingDayBoundary,
		props.timelineRange
	]);
	return null;
}
function useReservationBodyViewToggleState() {
	var _shellMeta$hasGridCon;
	const { bodyViewSwitchable } = (0, _pisell_materials.useRecordBoardContext)();
	const shellMeta = (0, _pisell_materials.useRecordBoardShellBodyMeta)();
	const hasGrid = (_shellMeta$hasGridCon = shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.hasGridContent) !== null && _shellMeta$hasGridCon !== void 0 ? _shellMeta$hasGridCon : true;
	const hasFloor = shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.hasFloorMapSlot;
	const hasCalendar = shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.hasCalendarSlot;
	const hasResourceWall = shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.hasResourceWallSlot;
	const floorForToggle = shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.effectiveFloorMapProps;
	const canFloor = Boolean(hasFloor && floorForToggle != null);
	const canCalendar = Boolean(hasCalendar);
	const canResourceWall = Boolean(hasResourceWall);
	return {
		allowBodyViewToggle: (hasGrid ? 1 : 0) + (canFloor ? 1 : 0) + (canCalendar ? 1 : 0) + (canResourceWall ? 1 : 0) >= 2 && bodyViewSwitchable !== false,
		bodyViewSegmentedOptions: (0, react.useMemo)(() => {
			const opts = [];
			if (canFloor) opts.push({
				label: _pisell_utils.locales.getText(require_reservationConstants.I18N_VIEW_FLOOR),
				value: "floorMap"
			});
			if (canCalendar) opts.push({
				label: _pisell_utils.locales.getText(require_reservationConstants.I18N_VIEW_CALENDAR),
				value: "calendar"
			});
			if (canResourceWall) opts.push({
				label: _pisell_utils.locales.getText(require_reservationConstants.I18N_VIEW_RESOURCE_WALL),
				value: "resourceWall"
			});
			if (hasGrid) opts.push({
				label: _pisell_utils.locales.getText(require_reservationConstants.I18N_VIEW_GRID),
				value: "grid"
			});
			return opts;
		}, [
			canFloor,
			canCalendar,
			canResourceWall,
			hasGrid
		])
	};
}
function ReservationMobileToolbarBodyViewSelect() {
	const { bodyView, setBodyView } = (0, _pisell_materials.useRecordBoardContext)();
	const { allowBodyViewToggle, bodyViewSegmentedOptions } = useReservationBodyViewToggleState();
	if (!allowBodyViewToggle) return null;
	if (bodyView !== "grid" && bodyView !== "resourceWall") return null;
	return /* @__PURE__ */ react.default.createElement(antd.Select, {
		className: "pisell-reservation-mobile-toolbar-body-view-select",
		popupClassName: "pisell-reservation-body-view-select-dropdown",
		popupMatchSelectWidth: false,
		size: "small",
		value: bodyView,
		onChange: (v) => setBodyView(v),
		options: bodyViewSegmentedOptions.map((o) => ({
			label: o.label,
			value: o.value
		}))
	});
}
/**
* 顶栏 tabs：**仅平面图、日历**下为日程带 + 时间轴 + 标题旁切换；表格 / 资源墙不展示 ScheduleBand，
* 切换器由 RecordBoard 工具栏顶行承担（表格态在 Find 左侧；资源墙无 Find 时在顶行左侧），与历史行为一致。
*/
function PisellReservationToolbarTabs(props) {
	var _props$calendarGranul, _props$scheduleProps, _props$timeNavigatorP, _props$timeNavigatorP2, _props$timeNavigatorP5, _props$timeNavigatorP6, _props$timeNavigatorP7, _props$timeNavigatorP8, _props$timeNavigatorP9, _props$timeNavigatorP10, _props$timeNavigatorP11;
	const { bodyView, setBodyView } = (0, _pisell_materials.useRecordBoardContext)();
	const { allowBodyViewToggle, bodyViewSegmentedOptions } = useReservationBodyViewToggleState();
	if (bodyView === "grid") return props.extraTabs ? /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, props.extraTabs) : null;
	if (bodyView === "resourceWall") return props.extraTabs ? /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, props.extraTabs) : null;
	const segmentedSize = props.phoneLayout ? "middle" : "large";
	/** 手机布局：深色顶栏 Segmented 改为下拉，避免多 Tab 挤爆 */
	const bodyViewToggle = allowBodyViewToggle ? props.phoneLayout ? /* @__PURE__ */ react.default.createElement(antd.Select, {
		className: "pisell-reservation-body-view-select",
		popupClassName: "pisell-reservation-body-view-select-dropdown",
		popupMatchSelectWidth: false,
		size: "middle",
		value: bodyView,
		onChange: (v) => setBodyView(v),
		options: bodyViewSegmentedOptions.map((o) => ({
			label: o.label,
			value: o.value
		}))
	}) : /* @__PURE__ */ react.default.createElement(antd.Segmented, {
		className: "pisell-reservation-body-view-segmented",
		size: segmentedSize,
		value: bodyView,
		onChange: (v) => setBodyView(v),
		options: bodyViewSegmentedOptions
	}) : null;
	const scheduleStartMerged = /* @__PURE__ */ react.default.createElement("div", { className: "pisell-reservation-schedule-start-merge" }, props.scheduleStartSlot, bodyViewToggle);
	/**
	* 手机布局：把「不在当前时间 + Go to current time」两个元素合并成一颗胶囊，
	* 节省一行高度；桌面保留原双元素结构。
	*/
	const afterDateSlot = /* @__PURE__ */ react.default.createElement("div", { className: "pisell-reservation-follow-time-slot" }, props.phoneLayout ? props.followWallClock ? /* @__PURE__ */ react.default.createElement("span", {
		className: "pisell-reservation-follow-current-chip pisell-reservation-follow-current-chip--on",
		"aria-live": "polite",
		"aria-label": _pisell_utils.locales.getText(require_reservationConstants.I18N_AT_CURRENT_TIME)
	}, /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-follow-current-chip-dot" }), /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-follow-current-chip-label" }, _pisell_utils.locales.getText(require_reservationConstants.I18N_AT_CURRENT_TIME_SHORT))) : /* @__PURE__ */ react.default.createElement("button", {
		type: "button",
		className: "pisell-reservation-follow-current-chip pisell-reservation-follow-current-chip--off",
		onClick: props.onFollowWallClockToggle,
		"aria-pressed": false,
		"aria-label": _pisell_utils.locales.getText(require_reservationConstants.I18N_GO_CURRENT)
	}, /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-follow-current-chip-label" }, _pisell_utils.locales.getText(require_reservationConstants.I18N_GO_CURRENT))) : props.followWallClock ? /* @__PURE__ */ react.default.createElement("span", {
		className: "pisell-reservation-follow-time-hint pisell-reservation-follow-time-hint--at-current",
		"aria-live": "polite"
	}, _pisell_utils.locales.getText(require_reservationConstants.I18N_AT_CURRENT_TIME)) : /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement("span", {
		className: "pisell-reservation-follow-time-hint pisell-reservation-follow-time-hint--off-current",
		"aria-live": "polite"
	}, _pisell_utils.locales.getText(require_reservationConstants.I18N_NON_CURRENT_HINT)), /* @__PURE__ */ react.default.createElement("button", {
		type: "button",
		className: "pisell-reservation-follow-current-btn pisell-reservation-follow-current-btn--go-current",
		onClick: props.onFollowWallClockToggle,
		"aria-pressed": false
	}, /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-follow-current-btn-label" }, _pisell_utils.locales.getText(require_reservationConstants.I18N_GO_CURRENT)))));
	const calendarNavUnit = bodyView === "calendar" ? props.calendarGranularity === "resource" ? "month" : (_props$calendarGranul = props.calendarGranularity) !== null && _props$calendarGranul !== void 0 ? _props$calendarGranul : "day" : "day";
	return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, /* @__PURE__ */ react.default.createElement(_pisell_materials.PisellReservationScheduleBand, {
		value: props.schedule,
		onChange: props.onScheduleChange,
		scheduleRowClassName: props.phoneLayout && !allowBodyViewToggle ? "pisell-reservation-schedule-band-schedule-row--phone-single-line" : void 0,
		hideTimeNavigator: bodyView === "calendar",
		scheduleProps: require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, props.scheduleProps), {}, { navigationLocked: Boolean((_props$scheduleProps = props.scheduleProps) === null || _props$scheduleProps === void 0 ? void 0 : _props$scheduleProps.navigationLocked) }, bodyView === "calendar" ? { navigationUnit: calendarNavUnit } : {}),
		timeNavigatorProps: require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({
			range: require_reservationConstants.RESERVATION_TIMELINE_BUSINESS_RANGE,
			businessHours: require_reservationConstants.RESERVATION_TIMELINE_BUSINESS_RANGE
		}, props.timeNavigatorProps), {}, {
			showNowButton: (_props$timeNavigatorP = (_props$timeNavigatorP2 = props.timeNavigatorProps) === null || _props$timeNavigatorP2 === void 0 ? void 0 : _props$timeNavigatorP2.showNowButton) !== null && _props$timeNavigatorP !== void 0 ? _props$timeNavigatorP : false,
			snapToStep: false,
			cursorMode: props.phoneLayout ? "axis-moves" : "cursor-moves",
			onUserInteraction: () => {
				var _props$timeNavigatorP3, _props$timeNavigatorP4;
				props.onTimeNavigatorUserInteraction();
				(_props$timeNavigatorP3 = props.timeNavigatorProps) === null || _props$timeNavigatorP3 === void 0 || (_props$timeNavigatorP4 = _props$timeNavigatorP3.onUserInteraction) === null || _props$timeNavigatorP4 === void 0 || _props$timeNavigatorP4.call(_props$timeNavigatorP3);
			},
			userInteractionLocked: Boolean((_props$timeNavigatorP5 = props.timeNavigatorProps) === null || _props$timeNavigatorP5 === void 0 ? void 0 : _props$timeNavigatorP5.userInteractionLocked),
			loadDensity: props.loadDensity,
			horizontalAxisCellSizePx: props.phoneLayout ? (_props$timeNavigatorP6 = (_props$timeNavigatorP7 = props.timeNavigatorProps) === null || _props$timeNavigatorP7 === void 0 ? void 0 : _props$timeNavigatorP7.horizontalAxisCellSizePx) !== null && _props$timeNavigatorP6 !== void 0 ? _props$timeNavigatorP6 : 40 : (_props$timeNavigatorP8 = props.timeNavigatorProps) === null || _props$timeNavigatorP8 === void 0 ? void 0 : _props$timeNavigatorP8.horizontalAxisCellSizePx,
			horizontalTrackHeightPx: props.phoneLayout ? (_props$timeNavigatorP9 = (_props$timeNavigatorP10 = props.timeNavigatorProps) === null || _props$timeNavigatorP10 === void 0 ? void 0 : _props$timeNavigatorP10.horizontalTrackHeightPx) !== null && _props$timeNavigatorP9 !== void 0 ? _props$timeNavigatorP9 : 36 : (_props$timeNavigatorP11 = props.timeNavigatorProps) === null || _props$timeNavigatorP11 === void 0 ? void 0 : _props$timeNavigatorP11.horizontalTrackHeightPx
		}),
		scheduleStartSlot: scheduleStartMerged,
		scheduleAfterDateSlot: afterDateSlot,
		scheduleEndSlot: props.scheduleEndSlot
	}), props.extraTabs);
}
/** 表格视图时展示工具栏右上角透传；平面图时收起（编辑入口在画布 Tab 行右侧） */
function ReservationGridTopRight(props) {
	var _props$extra;
	const { bodyView } = (0, _pisell_materials.useRecordBoardContext)();
	if (bodyView === "floorMap" || bodyView === "calendar") return null;
	return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, (_props$extra = props.extra) !== null && _props$extra !== void 0 ? _props$extra : null);
}
/** 顶栏日程带右侧：日历粒度（与左上角 Segmented 同款）+ 新建 */
function PisellReservationScheduleEndActions(props) {
	const { bodyView } = (0, _pisell_materials.useRecordBoardContext)();
	const shellMeta = (0, _pisell_materials.useRecordBoardShellBodyMeta)();
	const showGranularity = bodyView === "calendar" && Boolean(shellMeta === null || shellMeta === void 0 ? void 0 : shellMeta.hasCalendarSlot) && props.calendarGranularity != null && props.onCalendarGranularityChange != null;
	const segmentedSize = props.phoneLayout ? "middle" : "large";
	const granularityOpts = [
		{
			label: _pisell_utils.locales.getText(require_reservationConstants.I18N_CALENDAR_RESOURCE),
			value: "resource"
		},
		{
			label: _pisell_utils.locales.getText(require_reservationConstants.I18N_CALENDAR_DAY),
			value: "day"
		},
		{
			label: _pisell_utils.locales.getText(require_reservationConstants.I18N_CALENDAR_WEEK),
			value: "week"
		},
		{
			label: _pisell_utils.locales.getText(require_reservationConstants.I18N_CALENDAR_MONTH),
			value: "month"
		}
	];
	return /* @__PURE__ */ react.default.createElement("div", { className: "pisell-reservation-schedule-end-slots" }, showGranularity ? props.phoneLayout ? /* @__PURE__ */ react.default.createElement(antd.Select, {
		className: "pisell-reservation-body-view-select pisell-reservation-calendar-granularity-select",
		popupClassName: "pisell-reservation-body-view-select-dropdown pisell-reservation-calendar-granularity-select-dropdown",
		popupMatchSelectWidth: false,
		size: "middle",
		value: props.calendarGranularity,
		onChange: (v) => {
			var _props$onCalendarGran;
			return (_props$onCalendarGran = props.onCalendarGranularityChange) === null || _props$onCalendarGran === void 0 ? void 0 : _props$onCalendarGran.call(props, v);
		},
		options: granularityOpts.map((o) => ({
			label: o.label,
			value: o.value
		}))
	}) : /* @__PURE__ */ react.default.createElement(antd.Segmented, {
		className: "pisell-reservation-body-view-segmented pisell-reservation-calendar-granularity-segmented",
		size: segmentedSize,
		value: props.calendarGranularity,
		onChange: (v) => {
			var _props$onCalendarGran2;
			return (_props$onCalendarGran2 = props.onCalendarGranularityChange) === null || _props$onCalendarGran2 === void 0 ? void 0 : _props$onCalendarGran2.call(props, v);
		},
		options: granularityOpts
	}) : null, /* @__PURE__ */ react.default.createElement("button", {
		type: "button",
		className: props.phoneLayout ? "pisell-reservation-new-btn pisell-reservation-new-btn--phone" : "pisell-reservation-new-btn",
		onClick: () => {
			var _props$onNewReservati;
			return (_props$onNewReservati = props.onNewReservation) === null || _props$onNewReservati === void 0 ? void 0 : _props$onNewReservati.call(props);
		}
	}, _pisell_utils.locales.getText(require_reservationConstants.I18N_NEW)));
}
/** 平面图左下 Dock 展开区：与缩放/网格平级的业务工具按钮。 */
function ReservationFloorMapDockToolButtons(props) {
	return /* @__PURE__ */ react.default.createElement(require_ReservationFloorMapDockAppearanceToggle.ReservationFloorMapDockAppearanceToggle, {
		mode: props.appearanceMode,
		onToggle: props.onToggleAppearanceMode
	});
}
/** 平面图左下 Dock 展开区：编辑 / 完成编辑（经 PisellFloorMapLayout.viewportDockTrailing） */
function ReservationFloorMapCanvasTabsTrailing(props) {
	const { bodyView } = (0, _pisell_materials.useRecordBoardContext)();
	(0, react.useEffect)(() => {
		if (bodyView !== "floorMap" && props.mapEditInternal) props.setMapEditInternal(false);
	}, [
		bodyView,
		props.mapEditInternal,
		props.setMapEditInternal
	]);
	if (bodyView !== "floorMap") return null;
	if (props.isFloorModeControlled) return null;
	const editLabel = _pisell_utils.locales.getText(props.mapEditInternal ? require_reservationConstants.I18N_EDIT_MAP_DONE : require_reservationConstants.I18N_EDIT_MAP);
	const handleToggleMapEdit = () => {
		if (props.mapEditInternal) {
			var _props$floorMapLayout, _props$floorMapLayout2;
			(_props$floorMapLayout = props.floorMapLayoutRef.current) === null || _props$floorMapLayout === void 0 || (_props$floorMapLayout2 = _props$floorMapLayout.saveLayout) === null || _props$floorMapLayout2 === void 0 || _props$floorMapLayout2.call(_props$floorMapLayout);
		}
		props.setMapEditInternal((v) => !v);
	};
	if (props.phoneLayout) return /* @__PURE__ */ react.default.createElement("button", {
		type: "button",
		className: props.mapEditInternal ? "pisell-floor-map-layout-view-controls-tool-btn pisell-floor-map-layout-view-controls-tool-btn--active" : "pisell-floor-map-layout-view-controls-tool-btn",
		title: editLabel,
		"aria-label": editLabel,
		"aria-pressed": props.mapEditInternal,
		onClick: handleToggleMapEdit
	}, props.mapEditInternal ? /* @__PURE__ */ react.default.createElement(_ant_design_icons.CheckOutlined, null) : /* @__PURE__ */ react.default.createElement(_ant_design_icons.EditOutlined, null));
	return /* @__PURE__ */ react.default.createElement("div", { className: "pisell-reservation-floor-map-dock-actions" }, /* @__PURE__ */ react.default.createElement(antd.Button, {
		type: "primary",
		size: "middle",
		className: "pisell-reservation-topbar-edit-btn",
		onClick: handleToggleMapEdit
	}, editLabel));
}
/** 默认顶栏标题 slot */
function ReservationDefaultScheduleStart() {
	return /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-page-title" }, _pisell_utils.locales.getText(require_reservationConstants.I18N_PAGE_TITLE));
}
/** 场控页顶栏标题 slot */
function ReservationVenueScheduleStart() {
	return /* @__PURE__ */ react.default.createElement("span", { className: "pisell-reservation-page-title" }, _pisell_utils.locales.getText(require_reservationConstants.I18N_PAGE_TITLE_VENUE));
}
//#endregion
exports.PisellReservationScheduleEndActions = PisellReservationScheduleEndActions;
exports.PisellReservationToolbarTabs = PisellReservationToolbarTabs;
exports.RecordBoardBodyViewCapture = RecordBoardBodyViewCapture;
exports.ReservationDefaultScheduleStart = ReservationDefaultScheduleStart;
exports.ReservationFloorMapCanvasTabsTrailing = ReservationFloorMapCanvasTabsTrailing;
exports.ReservationFloorMapDockToolButtons = ReservationFloorMapDockToolButtons;
exports.ReservationGridTopRight = ReservationGridTopRight;
exports.ReservationMobileToolbarBodyViewSelect = ReservationMobileToolbarBodyViewSelect;
exports.ReservationVenueScheduleStart = ReservationVenueScheduleStart;
exports.ScheduleSyncOnFloorEnter = ScheduleSyncOnFloorEnter;
