PageSourceSearch

https://navitabi-devel.firebaseapp.com/_nuxt/d_opJxUf.js

js navitabi-devel.firebaseapp.com collected 2026-10-03 15:09:52 UTC 52,323 bytes, 1,320 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CSy0m-SZ2.js","./D3t9r-J4.js","./DDsE4vUS2.js","./CcRUFGPw.js"])))=>i.map(i=>d[i]);
2(function() {
3	try {
4		var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {};
5		e.SENTRY_RELEASE = { id: "cdc68def821e8f2221eb1aa34782d750d9794199" };
6		var n = new e.Error().stack;
7		n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "3a80cb35-a324-48fc-9832-fb26a0593ef6", e._sentryDebugIdIdentifier = "sentry-dbid-3a80cb35-a324-48fc-9832-fb26a0593ef6");
8	} catch (e) {}
9})();
10import { a as __toESM } from "./D3t9r-J4.js";
11import { a as useNuxtApp, o as useRuntimeConfig } from "./4omwaCoX.js";
12import { D as createVNode, E as createTextVNode, Ht as watch, On as unref, St as resolveComponent, _ as createBaseVNode, b as createElementBlock, ct as onMounted, et as mergeProps, g as computed, it as onBeforeUnmount, k as defineComponent, mt as openBlock, o as Fragment, qt as withCtx, tr as toDisplayString, tt as nextTick, v as createBlock, vn as ref, y as createCommentVNode } from "./BSDeTsrd.js";
13import { n as useI18n } from "./DaC_mzmf.js";
14import { f as useRoute, p as useRouter } from "./fWUdV8VM.js";
15import { c as storeToRefs, t as useAuthStore } from "./-W_FVIZo.js";
16import { y as onBeforeRouteLeave } from "./D8r2Zzdx.js";
17import { n as init_preload_helper, t as __vitePreload } from "./CcRUFGPw.js";
18import { j as deleteField } from "./D_6IP05v.js";
19import { t as _plugin_vue_export_helper_default } from "./hx9ve9to.js";
20import { t as useErrorToast } from "./BCla01PV.js";
21import { t as fetchUser } from "./DBRPEJ_p2.js";
22import { i as uploadCoverImage, r as getUrl } from "./C-maI5qr2.js";
23import { t as useSubscription } from "./DuHOKVoR2.js";
24import { t as definePageMeta } from "./B56CKwSa2.js";
25import { p as OLocationToGeoPoint } from "./BR8QOkdj2.js";
26import { N as fetchValidTags, O as updateEventInfo, P as updateByEventTags, g as fetchEventById, v as fetchEventDeeply } from "./CU8eG1C32.js";
27import { c as fetchMapsByOwner, i as drawTile } from "./DlGo-wAS2.js";
28import { t as fitCircleBounds } from "./Bo34W0R42.js";
29import { t as isEventOwner } from "./DkEJBw2t2.js";
30import { n as useEventBreadcrumb } from "./BhqmF14N2.js";
31import { n as PaidFeatureSwitch_default, t as PaidFeatureNote_default } from "./33xEEzQB.js";
32import { i as drawSpotCircle, n as drawEventCircle } from "./CzkwWTJj.js";
33import { n as allCountries, t as regions_default } from "./CVEKzsge.js";
34import { t as resizeImage } from "./K_fLQ63q.js";
35/** アプリ strings.xml の `invalid_date_range` に対応する i18n キー。 */
36var MESSAGE_INVALID_DATE_RANGE = "event_form.invalid_date_range";
37/** アプリ strings.xml の `event_date_range_too_long` に対応する i18n キー。 */
38var MESSAGE_DATE_RANGE_TOO_LONG = "event_form.date_range_too_long";
39/** アプリ `EditEventFragment.saveButtonAction()` のハードコード文言に対応する i18n キー。 */
40var MESSAGE_INVALID_MEET_CODE = "event_form.invalid_meet_code";
41/** アプリ strings.xml の `invalid_completion_url` に対応する i18n キー。 */
42var MESSAGE_INVALID_COMPLETION_URL = "event_form.invalid_completion_url";
43var MS_PER_DAY = 864e5;
44/**
45* `YYYYMMDD` の整数を UTC のミリ秒に変換する。不正な日付は null。
46*
47* UTC を使うのは、日付だけの比較に夏時間の影響を持ち込まないため
48* (アプリはローカル時刻の Date を ms で引き算している)。
49* 負数・非整数・NaN も null にする(`isUnset` を通り抜けた異常値の保険)。
50*/
51var ymdToUtcMs = (ymd) => {
52	if (!Number.isInteger(ymd) || ymd <= 0) return null;
53	const year = Math.floor(ymd / 1e4);
54	const month = Math.floor(ymd / 100) % 100;
55	const day = ymd % 100;
56	if (year < 1e3 || month < 1 || month > 12 || day < 1 || day > 31) return null;
57	const ms = Date.UTC(year, month - 1, day);
58	const date = new Date(ms);
59	if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return null;
60	return ms;
61};
62/** 未設定を表す値(このリポジトリでは 0 と undefined の両方が使われる)。 */
63var isUnset = (ymd) => ymd === void 0 || ymd === null || ymd === 0;
64/**
65* 開始日・終了日の組み合わせを検証する。
66* 終了日が未設定なら常に OK(開始日のみ、両方未設定はどちらも許容)。
67*/
68var validateEventDateRange = (ymdStart, ymdEnd) => {
69	if (isUnset(ymdEnd)) return null;
70	if (isUnset(ymdStart)) return MESSAGE_INVALID_DATE_RANGE;
71	const startMs = ymdToUtcMs(ymdStart);
72	const endMs = ymdToUtcMs(ymdEnd);
73	if (startMs === null || endMs === null) return MESSAGE_INVALID_DATE_RANGE;
74	if (endMs < startMs) return MESSAGE_INVALID_DATE_RANGE;
75	if (endMs - startMs > 90 * MS_PER_DAY) return MESSAGE_DATE_RANGE_TOO_LONG;
76	return null;
77};
78/**
79* イベント番号を検証する。空・未設定は OK(保存時に削除される)。
80* 桁数チェックはアプリと同じ。数字のみに限る点は iOS のフィールド型(number)に合わせている。
81*/
82var validateMeetCode = (meetCode) => {
83	const trimmed = meetCode?.trim() ?? "";
84	if (trimmed === "") return null;
85	if (trimmed.length !== 4) return MESSAGE_INVALID_MEET_CODE;
86	if (!/^\d+$/.test(trimmed)) return MESSAGE_INVALID_MEET_CODE;
87	return null;
88};
89var isHttpUrl = (value) => {
90	try {
91		const url = new URL(value);
92		return url.protocol === "http:" || url.protocol === "https:";
93	} catch {
94		return false;
95	}
96};
97/** `scheme:` を自前で持っているか(RFC 3986 の scheme 構文)。 */
98var HAS_SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
99/**
100* プレイ後に開く URL を検証する。空・未設定は OK。
101*
102* Android は `Patterns.WEB_URL` を使っており「スキームなし(example.com)」も通すため、
103* スキームを補って再判定する 2 段構えにしている(既存データを弾かないため)。
104* 値の正規化はしない(アプリが保存する値と同じものを保存する)。
105*
106* この値は**ネイティブアプリがプレイ後に開く URL** として使われるため、
107* `javascript:` などのスキームを通すと保存型 XSS になる。
108* スキーム補完の前に次を必ず弾くこと:
109*
110* - 自前のスキームを持つ入力(`javascript:...` / `vbscript:...` など)
111*   → http/https として解釈できない限り不正。`new URL('https://' + 'javascript:alert(1);[email protected]')` は
112*     `javascript:alert(1);x=` を userinfo、`ex.com` を host として**パースに成功してしまう**
113* - `//` 始まり(プロトコル相対)と `\` を含むもの(UNC / パス偽装)
114* - userinfo 付き(`user:pass@host`)。フィッシング目的の host 偽装に使われる
115*/
116var validateCompletionUrl = (completionUrl) => {
117	const trimmed = completionUrl?.trim() ?? "";
118	if (trimmed === "") return null;
119	if (HAS_SCHEME.test(trimmed)) return isHttpUrl(trimmed) && !hasUserInfo(trimmed) ? null : MESSAGE_INVALID_COMPLETION_URL;
120	if (trimmed.startsWith("//") || trimmed.includes("\\")) return MESSAGE_INVALID_COMPLETION_URL;
121	try {
122		const candidate = `https://${trimmed}`;
123		if (new URL(candidate).hostname.includes(".") && !hasUserInfo(candidate)) return null;
124	} catch {}
125	return MESSAGE_INVALID_COMPLETION_URL;
126};
127var hasUserInfo = (value) => {
128	try {
129		const url = new URL(value);
130		return url.username !== "" || url.password !== "";
131	} catch {
132		return false;
133	}
134};
135/** 全角数字を半角に寄せる(`1234` を弾かず 1234 として扱う)。 */
136var toHalfWidthDigits = (value) => value.replace(/[0-9]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 65248));
137/**
138* イベント番号の入力正規化。数字のみ・最大 4 桁に切り詰める。
139* アプリも 5 文字以上は 4 文字へ切り詰める(`EditEventFragment.callbackEditTextReturn`)。
140*/
141var normalizeMeetCode = (value) => toHalfWidthDigits(String(value ?? "")).replace(/\D/g, "").slice(0, 4);
142/**
143* eventSetup の保存前チェックをまとめて実行し、エラーの i18n キー配列を返す。
144* 描画側が各キーを `t()` で解決して表示する。
145* アプリは複数エラーを改行連結で 1 つのダイアログに出す(`EditEventFragment.saveButtonAction()`)。
146*
147* `previous` を渡すと、`meetCode` / `completionUrl` は**値が変わったときだけ**検証する。
148* これらは Pro ゲート対象で未契約だと編集できないため、既存の不正値を検証してしまうと
149* 「直せないのに保存もできない」状態になる。日付は常に検証する(ゲート対象外で直せる)。
150*/
151var validateEventSetup = (input, previous) => {
152	const isUnchanged = (key) => previous !== void 0 && (previous[key] ?? "") === (input[key] ?? "");
153	return [
154		validateEventDateRange(input.ymdStart, input.ymdEnd),
155		isUnchanged("meetCode") ? null : validateMeetCode(input.meetCode),
156		isUnchanged("completionUrl") ? null : validateCompletionUrl(input.completionUrl)
157	].filter((message) => message !== null);
158};
159//#endregion
160//#region utils/eventUpdatePayload.ts
161/**
162* イベント更新ペイロードの組み立てヘルパー。
163*
164* Firestore の `deleteField()` を直接参照しないよう、削除センチネルを引数で受け取る。
165* こうすることで Firebase をモックせずにユニットテストできる。
166*/
167/**
168* true のときだけ書き込み、それ以外は削除する。
169* アプリの `data.put(key, value ? true : FieldValue.delete())`
170* (NaviTabi-Android `EditEventFragment.getDataToSave()`)と同じ扱い。
171*/
172var boolOrDelete = (value, del) => value === true ? true : del();
173/**
174* 空でない文字列だけ書き込み、空・未設定は削除する。
175* アプリの `getStringOrFieldValueForDelete()` 相当。
176*/
177var stringOrDelete = (value, del) => {
178	return value?.trim() || del();
179};
180/**
181* 通常イベントで Pro ゲート対象のフィールド。判定が `available` でないときは変更を無効化する。
182*
183* iOS `AdminEditEventViewController` がゲートする 9 項目
184* (`entryRequired` / `autoPhotoCheckEnabled` / `forceLiveTrack` /
185* `disableDisplayOtherPlayers` / `entryNumberRequired` / `completionUrl` /
186* `messageSendingOrganizerOnly` / `hideResults` / `hideActivityDetail`)に、
187* `entryRequired` と対になる `meetCode` を加えたもの。
188*
189* **UI の `:disabled="!paidFeatureAvailable"` と必ず一致させること。**
190* 片方だけ増えると「UI では触れるのに保存されない」または「UI で触れるのに素通し」になる。
191*/
192var PAID_EVENT_FIELD_KEYS = [
193	"entryRequired",
194	"meetCode",
195	"autoPhotoCheckEnabled",
196	"hideActivityDetail",
197	"forceLiveTrack",
198	"disableDisplayOtherPlayers",
199	"hideResults",
200	"entryNumberRequired",
201	"completionUrl",
202	"messageSendingOrganizerOnly"
203];
204/**
205* 安全管理イベントで Pro ゲート対象のフィールド。通常イベントより**狭い**。
206*
207* iOS `AdminEditSafetyEventViewController` がゲートするのは
208* `entryNumberRequired` / `completionUrl` / `messageSendingOrganizerOnly` の 3 項目だけで、
209* `shareLiveMap`(Web では `hideResults` の反転)はゲートしていない。
210* 通常イベントと同じキー集合を使うと、未契約の主催者が「保存成功」と表示されたまま
211* `shareLiveMap` の変更を黙って巻き戻される。
212*/
213var PAID_SAFETY_EVENT_FIELD_KEYS = [
214	"entryNumberRequired",
215	"completionUrl",
216	"messageSendingOrganizerOnly"
217];
218/**
219* 有料機能が使えないときに Pro 項目の変更を無効化する。
220*
221* フォーム値ではなく「読み込み時の Firestore 値」に戻す。`false` 固定にはしない:
222* 既存の ON を巻き戻すとグランドファーザー(契約失効後も既存設定を維持する挙動)を壊すため。
223*
224* 注意: これはセキュリティ境界ではない。`firestore.rules` の events は認証だけで update を
225* 許しているため、クライアント側の値は SDK 直叩きで回避できる。ここでの目的は
226* 「UI で無効化した項目が、状態遷移の隙や DOM 操作で保存さã
226‚Œã¦ã—まう」経路を塞ぐことに限られる。
227*/
228var clampPaidFields = (formValues, loadedValues, paidFieldKeys, available) => {
229	if (available) return { ...formValues };
230	return paidFieldKeys.reduce((acc, key) => ({
231		...acc,
232		[key]: loadedValues[key]
233	}), { ...formValues });
234};
235//#endregion
236//#region pages/events/[eventId]/edit.vue?vue&type=script&setup=true&lang.ts
237init_preload_helper();
238var _hoisted_1 = {
239	id: "info",
240	class: "text-h5 my-5"
241};
242var _hoisted_2 = {
243	key: 1,
244	style: {
245		"border": "thin dashed",
246		"height": "150px"
247	}
248};
249var _hoisted_3 = { class: "text-subtitle-1 font-weight-medium mt-4" };
250var _hoisted_4 = { class: "text-subtitle-1 font-weight-medium mt-4" };
251var _hoisted_5 = { class: "text-caption text-medium-emphasis mt-1" };
252var _hoisted_6 = { class: "text-caption text-medium-emphasis mt-1" };
253var _hoisted_7 = { class: "text-subtitle-1 font-weight-medium mt-4" };
254var _hoisted_8 = { class: "text-subtitle-1 font-weight-medium mt-4" };
255var _hoisted_9 = { class: "font-weight-light mb-2" };
256var _hoisted_10 = { class: "font-weight-medium" };
257//#endregion
258//#region pages/events/[eventId]/edit.vue
259var edit_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
260	__name: "edit",
261	setup(__props) {
262		definePageMeta({ layout: "mypage" });
263		const authStore = useAuthStore();
264		const { userInfo } = storeToRefs(authStore);
265		const router = useRouter();
266		const route = useRoute();
267		const { $toast } = useNuxtApp();
268		const { showError } = useErrorToast();
269		const config = useRuntimeConfig();
270		const { t } = useI18n();
271		const isSaving = ref(false);
272		const isDrawing = ref(false);
273		const user = ref(null);
274		const allTags = ref([]);
275		const maps = ref([]);
276		const event = ref(void 0);
277		const input = ref({
278			name: "",
279			about: "",
280			description: "",
281			note: "",
282			country: "jp",
283			subdivision: "",
284			tags: [],
285			public: false,
286			coverImage: void 0,
287			map: "default",
288			ymdStart: 0,
289			ymdEnd: 0,
290			forceLiveTrack: false,
291			disableDisplayOtherPlayers: false,
292			entryNumberRequired: false,
293			organizerMessagingEnabled: false,
294			messageSendingOrganizerOnly: false,
295			hideResults: false,
296			hideActivityDetail: false,
297			autoPhotoCheckEnabled: false,
298			entryRequired: false,
299			meetCode: ""
300		});
301		const loadedInput = ref(null);
302		const thumbnailUrl = ref(null);
303		let radiusMap = null;
304		const eventCircleCenter = ref(null);
305		const eventCircleRadius = ref(1e3);
306		const ymdStartMenu = ref(false);
307		const ymdEndMenu = ref(false);
308		const isSafetyEvent = ref(false);
309		const { paidFeatureAvailable, paidFeatureLocked, paidFeatureGate, resolvePaidFeature } = useSubscription();
310		const trackingIntervalItems = computed(() => [
311			{
312				text: t("event_form.interval_minutes", { n: 1 }),
313				value: 60
314			},
315			{
316				text: t("event_form.interval_minutes", { n: 3 }),
317				value: 180
318			},
319			{
320				text: t("event_form.interval_minutes", { n: 5 }),
321				value: 300
322			}
323		]);
324		const paidFieldKeys = computed(() => isSafetyEvent.value ? PAID_SAFETY_EVENT_FIELD_KEYS : PAID_EVENT_FIELD_KEYS);
325		/** 有料機能が使えないときは Pro 項目の変更を読み込み時の値に戻した入力を返す。 */
326		const buildClampedInput = () => clampPaidFields(input.value, loadedInput.value ?? {}, paidFieldKeys.value, paidFeatureAvailable.value);
327		const overlayVisible = computed(() => isSaving.value || isDrawing.value);
328		const shareLiveMap = computed({
329			get: () => !input.value.hideResults,
330			set: (val) => {
331				input.value.hideResults = !val;
332			}
333		});
334		const canSave = computed(() => {
335			if (!input.value.name || !input.value.subdivision) return false;
336			if (isSafetyEvent.value) {
337				if (!input.value.ymdStart) return false;
338				if (!eventCircleCenter.value) return false;
339			}
340			return true;
341		});
342		const mapItems = computed(() => [{
343			text: t("event_form.default_map"),
344			value: "default"
345		}, ...maps.value.map((map) => ({
346			text: map.copyright ? t("map_manage.name_with_copyright", {
347				name: map.name,
348				copyright: map.copyright
349			}) : map.name,
350			value: map.id
351		}))]);
352		const countryItems = computed(() => {
353			return allCountries.map((data) => {
354				return {
355					text: data[0],
356					value: data[1].toLowerCase()
357				};
358			});
359		});
360		const regionItems = computed(() => {
361			const countryIso = input.value.country.toUpperCase();
362			const countryData = regions_default[countryIso];
363			if (!countryData) return [];
364			return countryData.regions.sort((a, b) => +a.iso - +b.iso).map((region) => {
365				return {
366					text: region.name,
367					value: region.admin
368				};
369			});
370		});
371		const breadcrumb = useEventBreadcrumb(event, { tail: () => [{
372			title: t("breadcrumb.edit"),
373			to: `/events/${event.value?.id}/edit`
374		}] });
375		const formatDate = (date) => {
376			if (!date) return "";
377			const year = Math.floor(date / 1e4);
378			const day = String(Math.floor(date % 100)).padStart(2, "0");
379			return `${year}-${String(Math.floor(date / 100 % 100)).padStart(2, "0")}-${day}`;
380		};
381		const parseDate = (date) => {
382			if (!date) return 0;
383			if (date instanceof Date) {
384				const year = date.getFullYear();
385				const month = date.getMonth() + 1;
386				const day = date.getDate();
387				return year * 1e4 + month * 100 + day;
388			}
389			const [year, month, day] = date.split("-");
390			return Number(year) * 1e4 + Number(month) * 100 + Number(day);
391		};
392		const ymdStartForDP = computed({
393			get: () => {
394				if (!input.value.ymdStart) return void 0;
395				return formatDate(input.value.ymdStart);
396			},
397			set: (date) => {
398				input.value.ymdStart = parseDate(date);
399			}
400		});
401		const ymdEndForDP = computed({
402			get: () => {
403				if (!input.value.ymdEnd) return void 0;
404				return formatDate(input.value.ymdEnd);
405			},
406			set: (date) => {
407				input.value.ymdEnd = parseDate(date);
408			}
409		});
410		const preventNav = (event) => {
411			if (isSaving.value) return;
412			event.preventDefault();
413			event.returnValue = "";
414		};
415		const fetch = async () => {
416			event.value = await fetchEventDeeply(route.params.eventId);
417			if (!event.value) return;
418			isSafetyEvent.value = event.value.type === "safety";
419			input.value = {
420				name: event.value.name,
421				about: event.value.about || "",
422				description: event.value.description || "",
423				note: event.value.note || "",
424				country: event.value.country || "jp",
425				subdivision: event.value.subdivision || "",
426				tags: event.value.tags || [],
427				public: event.value.public,
428				map: event.value.map ?? "default",
429				ymdStart: event.value.ymdStart,
430				ymdEnd: event.value.ymdEnd,
431				forceLiveTrack: event.value.forceLiveTrack,
432				disableDisplayOtherPlayers: event.value.disableDisplayOtherPlayers,
433				entryNumberRequired: event.value.entryNumberRequired,
434				organizerMessagingEnabled: event.value.organizerMessagingEnabled,
435				messageSendingOrganizerOnly: event.value.messageSendingOrganizerOnly,
436				hideResults: event.value.hideResults,
437				hideActivityDetail: event.value.hideActivityDetail,
438				autoPhotoCheckEnabled: event.value.autoPhotoCheckEnabled,
439				entryRequired: event.value.entryRequired,
440				meetCode: event.value.meetCode ?? "",
441				type: event.value.type,
442				showUserLocationOnMap: event.value.showUserLocationOnMap,
443				safetyTrackingInterval: event.value.safetyTrackingInterval ?? 180,
444				completionUrl: event.value.completionUrl
445			};
446			loadedInput.value = { ...input.value };
447			if (event.value.imageUrl) {
448				const imageUrl = getUrl(event.value.imageUrl);
449				thumbnailUrl.value = imageUrl;
450			}
451		};
452		const handleFileInput = (file) => {
453			if (!file) {
454				thumbnailUrl.value = null;
455				delete input.value.coverImage;
456				return;
457			}
458			const name = file.name;
459			resizeImage(file, (resized) => {
460				thumbnailUrl.value = resized;
461				input.value = {
462					...input.value,
463					coverImage: {
464						url: resized,
465						name
466					}
467				};
468			});
469		};
470		const handleTagInput = (tags) => {
471			allTags.value = Array.from(/* @__PURE__ */ new Set([...tags, ...allTags.value]));
472		};
473		const handleMeetCodeInput = (value) => {
474			const raw = String(value ?? "");
475			const normalized = normalizeMeetCode(raw);
476			if (raw === normalized) {
477				input.value = {
478					...input.value,
479					meetCode: normalized
480				};
481				return;
482			}
483			input.value = {
484				...input.value,
485				meetCode: raw
486			};
487			nextTick(() => {
488				input.value = {
489					...input.value,
490					meetCode: normalized
491				};
492			});
493		};
494		const initRadiusMap = (event) => {
495			if (!radiusMap) return;
496			event.spots.forEach((spot) => {
497				const sourceId = `radiusPoint${spot.id}`;
498				drawSpotCircle(radiusMap, sourceId, spot);
499			});
500			if (event.location && event.radius) {
501				eventCircleRadius.value = event.radius;
502				eventCircleCenter.value = event.location;
503				drawEventCircle(radiusMap, "eventCircle", event.radius, event.location);
504			}
505			radiusMap.on("click", (e) => {
506				const loc = {
507					latitude: e.lngLat.lat,
508					longitude: e.lngLat.lng
509				};
510				eventCircleCenter.value = loc;
511				drawEventCircle(radiusMap, "eventCircle", eventCircleRadius.value, loc);
512			});
513		};
514		const initMap = async (event) => {
515			const GeocoderModule = await __vitePreload(() => import("./CSy0m-SZ2.js").then((m) => /* @__PURE__ */ __toESM(m.default)), __vite__mapDeps([0,1]), import.meta.url);
516			const MapboxGeocoder = GeocoderModule.default || GeocoderModule;
517			const defaultCenter = {
518				latitude: 35.6895,
519				longitude: 139.69171
520			};
521			const mapboxModule = await __vitePreload(() => import("./DDsE4vUS2.js").then((n) => /* @__PURE__ */ __toESM(n.t())), __vite__mapDeps([2,1,3]), import.meta.url);
522			const mapboxgl = mapboxModule.default || mapboxModule;
523			if (!config.public.mapboxToken) {
524				console.error("mapbox token not found");
525				return;
526			}
527			mapboxgl.accessToken = config.public.mapboxToken;
528			const firstSpot = event.spots[0];
529			const rCenter = event.location || (firstSpot ? firstSpot.location : defaultCenter);
530			radiusMap = new mapboxgl.Map({
531				attributionControl: false,
532				container: "radius-map",
533				center: [rCenter.longitude, rCenter.latitude],
534				zoom: event.location || event.spots.length > 0 ? 14.15 : 1,
535				style: "mapbox://styles/mapbox/streets-v11"
536			});
537			await new Promise((resolve, reject) => {
538				if (!radiusMap) return reject(/* @__PURE__ */ new Error("map not found"));
539				radiusMap.on("load", () => {
540					resolve();
541				});
542				radiusMap.on("error", () => {
543					reject(/* @__PURE__ */ new Error("Error happened when initializing mapbox"));
544				});
545			});
546			radiusMap.addControl(new MapboxGeocoder({
547				accessToken: mapboxgl.accessToken,
548				mapboxgl,
549				marker: false
550			}));
551			if (event.radius && event.location) {
552				const { longitude, latitude } = event.location;
553				fitCircleBounds(radiusMap, [longitude, latitude], event.radius, { padding: 10 });
554			}
555		};
556		const saveEventInfo = async (clamped) => {
557			if (!user.value || !event.value) return;
558			let _input = { ...clamped };
559			if (_input.map === "default") _input.map = deleteField();
560			if (clamped.ymdStart === 0) _input.ymdStart = deleteField();
561			if (clamped.ymdEnd === 0) _input.ymdEnd = deleteField();
562			if (eventCircleRadius.value) _input = {
563				..._input,
564				radius: +eventCircleRadius.value
565			};
566			if (eventCircleCenter.value) _input = {
567				..._input,
568				location: OLocationToGeoPoint(eventCircleCenter.value)
569			};
570			try {
571				isSaving.value = true;
572				let gsUrl = null;
573				await updateByEventTags(input.value.tags, event.value.tags || []);
574				Object.keys(_input).forEach((key) => {
575					if (_input[key] === void 0) delete _input[key];
576				});
577				if (isSafetyEvent.value) {
578					delete _input.entryRequired;
579					delete _input.autoPhotoCheckEnabled;
580					delete _input.hideActivityDetail;
581					delete _input.meetCode;
582				} else {
583					_input.entryRequired = boolOrDelete(clamped.entryRequired, deleteField);
584					_input.autoPhotoCheckEnabled = boolOrDelete(clamped.autoPhotoCheckEnabled, deleteField);
585					_input.hideActivityDetail = boolOrDelete(clamped.hideActivityDetail, deleteField);
586					_input.meetCode = stringOrDelete(clamped.meetCode, deleteField);
587				}
588				if (_input.coverImage && _input.coverImage.name) {
589					gsUrl = await uploadCoverImage(event.value.id, _input.coverImage.url, _input.coverImage.name);
590					delete _input.coverImage;
591					await updateEventInfo(event.value.id, {
592						..._input,
593						imageUrl: gsUrl
594					});
595				} else {
596					if (!thumbnailUrl.value) delete _input.coverImage;
597					await updateEventInfo(event.value.id, _input);
598				}
599				$toast.success(t("admin.saved_success"));
600			} catch (error) {
601				showError(error);
602			} finally {
603				isSaving.value = false;
604			}
605			await fetch();
606		};
607		const onSaveAll = async () => {
608			const clamped = buildClampedInput();
609			const errors = validateEventSetup({
610				ymdStart: clamped.ymdStart,
611				ymdEnd: clamped.ymdEnd,
612				meetCode: clamped.meetCode,
613				completionUrl: clamped.completionUrl
614			}, {
615				meetCode: loadedInput.value?.meetCode,
616				completionUrl: loadedInput.value?.completionUrl
617			});
618			if (errors.length > 0) {
619				$toast.error(errors.map((key) => t(key)).join("\n"));
620				return;
621			}
622			await saveEventInfo(clamped);
623		};
624		watch(() => input.value.entryRequired, (enabled, wasEnabled) => {
625			if (!enabled && wasEnabled && input.value.meetCode) input.value = {
626				...input.value,
627				meetCode: ""
628			};
629		});
630		watch(eventCircleRadius, () => {
631			if (!eventCircleCenter.value || !radiusMap) return;
632			drawEventCircle(radiusMap, "eventCircle", eventCircleRadius.value, eventCircleCenter.value);
633		});
634		onMounted(async () => {
635			window.addEventListener("beforeunload", preventNav);
636			if (!userInfo.value) return;
637			try {
638				const fetchedEvent = await fetchEventById(route.params.eventId);
639				if (!isEventOwner(userInfo.value, fetchedEvent)) {
640					router.push("/");
641					return;
642				}
643				isDrawing.value = true;
644				const [_allTags, _user, _maps] = await Promise.all([
645					fetchValidTags(),
646					fetchUser(userInfo.value.uid),
647					fetchMapsByOwner(userInfo.value.uid)
648				]);
649				allTags.value = _allTags.map((tag) => tag.tag);
650				user.value = _user;
651				maps.value = _maps;
652				await fetch();
653				if (!event.value) throw new Error("Failed to initialize event object");
654				const paidFeaturePromise = resolvePaidFeature(user.value, event.value);
655				await nextTick();
656				await initMap(event.value);
657				if (!radiusMap) throw new Error("Failed to initialize map object");
658				await drawTile(radiusMap, event.value);
659				initRadiusMap(event.value);
660				await paidFeaturePromise;
661			} catch (e) {
662				showError(e);
663			} finally {
664				isDrawing.value = false;
665			}
666		});
667		onBeforeUnmount(() => {
668			window.removeEventListener("beforeunload", preventNav);
669		});
670		onBeforeRouteLeave((_to, _from, next) => {
671			if (isSaving.value) {
672				next();
673				return;
674			}
675			if (!window.confirm(t("admin.leave_confirm"))) {
676				next(false);
677				return;
678			}
679			next();
680		});
681		return (_ctx, _cache) => {
682			const _component_v_breadcrumbs = resolveComponent("v-breadcrumbs");
683			const _component_v_icon = resolveComponent("v-icon");
684			const _component_v_chip = resolveComponent("v-chip");
685			const _component_v_col = resolveComponent("v-col");
686			const _component_v_text_field = resolveComponent("v-text-field");
687			const _component_v_textarea = resolveComponent("v-textarea");
688			const _component_v_autocomplete = resolveComponent("v-autocomplete");
689			const _component_v_combobox = resolveComponent("v-combobox");
690			const _component_v_file_input = resolveComponent("v-file-input");
691			const _component_v_img = resolveComponent("v-img");
692			const _component_v_select = resolveComponent("v-select");
693			const _component_v_date_picker = resolveComponent("v-date-picker");
694			const _component_v_menu = resolveComponent("v-menu");
695			const _component_v_divider = resolveComponent("v-divider");
696			const _component_v_switch = resolveComponent("v-switch");
697			const _component_CommonPaidFeatureNote = PaidFeatureNote_default;
698			const _component_CommonPaidFeatureSwitch = PaidFeatureSwitch_default;
699			const _component_v_btn = resolveComponent("v-btn");
700			const _component_v_row = resolveComponent("v-row");
701			const _component_v_form = resolveComponent("v-form");
702			const _component_v_container = resolveComponent("v-container");
703			const _component_v_progress_circular = resolveComponent("v-progress-circular");
704			const _component_v_overlay = resolveComponent("v-overlay");
705			return openBlock(), createElementBlock("div", null, [
706				createVNode(_component_v_breadcrumbs, { items: unref(breadcrumb) }, null, 8, ["items"]),
707				createVNode(_component_v_container, null, {
708					default: withCtx(() => [createBaseVNode("div", _hoisted_1, toDisplayString(unref(t)("event_form.event_information")), 1), createVNode(_component_v_form, {
709						ref: "form",
710						"lazy-validation": ""
711					}, {
712						default: withCtx(() => [createVNode(_component_v_row, null, {
713							default: withCtx(() => [
714								isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, {
715									key: 0,
716									cols: "12"
717								}, {
718									default: withCtx(() => [createVNode(_component_v_chip, {
719										color: "orange",
720										variant: "flat",
721										label: "",
722										class: "text-white"
723									}, {
724										default: withCtx(() => [createVNode(_component_v_icon, { start: "" }, {
725											default: withCtx(() => [..._cache[33] || (_cache[33] = [createTextVNode("mdi-shield-check", -1)])]),
726											_: 1
727										}), createTextVNode(" " + toDisplayString(unref(t)("event_form.safety_tracking_event")), 1)]),
728										_: 1
729									})]),
730									_: 1
731								})) : createCommentVNode("", true),
732								createVNode(_component_v_col, {
733									cols: "12",
734									sm: "6"
735								}, {
736									default: withCtx(() => [createVNode(_component_v_text_field, {
737										modelValue: input.value.name,
738										"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => input.value.name = $event),
739										variant: "outlined",
740										"hide-details": "",
741										label: `${unref(t)("explore.event_name")}*`,
742										required: ""
743									}, null, 8, ["modelValue", "label"])]),
744									_: 1
745								}),
746								createVNode(_component_v_col, {
747									cols: "12",
748									sm: "6"
749								}, {
750									default: withCtx(() => [createVNode(_component_v_text_field, {
751										modelValue: input.value.about,
752										"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => input.value.about = $event),
753										variant: "outlined",
754										"hide-details": "",
755										label: unref(t)("event_form.subtitle")
756									}, null, 8, ["modelValue", "label"])]),
757									_: 1
758								}),
759								createVNode(_component_v_col, { cols: "12" }, {
760									default: withCtx(() => [createVNode(_component_v_textarea, {
761										modelValue: input.value.description,
762										"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => input.value.description = $event),
763										label: unref(t)("event_form.description"),
764										rows: "4",
765										variant: "outlined",
766										"hide-details": ""
767									}, null, 8, ["modelValue", "label"])]),
768									_: 1
769								}),
770								!isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, {
771									key: 1,
772									cols: "12"
773								}, {
774									default: withCtx(() => [createVNode(_component_v_text_field, {
775										modelValue: input.value.note,
776										"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => input.value.note = $event),
777										variant: "outlined",
778										"hide-details": "",
779										label: unref(t)("event_form.precautions")
780									}, null, 8, ["modelValue", "label"])]),
781									_: 1
782								})) : createCommentVNode("", true),
783								createVNode(_component_v_col, {
784									cols: "12",
785									sm: "6"
786								}, {
787									default: withCtx(() => [createVNode(_component_v_autocomplete, {
788										modelValue: input.value.country,
789										"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => input.value.country = $event),
790										items: countryItems.value,
791										variant: "outlined",
792										"hide-details": "",
793										"item-title": "text",
794										"item-value": "value",
795										label: `${unref(t)("event_form.country")}*`,
796										disabled: ""
797									}, null, 8, [
798										"modelValue",
799										"items",
800										"label"
801									])]),
802									_: 1
803								}),
804								createVNode(_component_v_col, {
805									cols: "12",
806									sm: "6"
807								}, {
808									default: withCtx(() => [createVNode(_component_v_autocomplete, {
809										modelValue: input.value.subdivision,
810										"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => input.value.subdivision = $event),
811										items: regionItems.value,
812										"item-title": "text",
813										"item-value": "value",
814										label: `${unref(t)("event_form.subdivision")}*`,
815										variant: "outlined",
816										"hide-details": ""
817									}, null, 8, [
818										"modelValue",
819										"items",
820										"label"
821									])]),
822									_: 1
823								}),
824								!isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, {
825									key: 2,
826									cols: "12"
827								}, {
828									default: withCtx(() => [createVNode(_component_v_combobox, {
829										modelValue: input.value.tags,
830										"onUpdate:modelValue": [_cache[6] || (_cache[6] = ($event) => input.value.tags = $event), _cache[7] || (_cache[7] = (e) => handleTagInput(e))],
831										variant: "outlined",
832										"hide-details": "",
833										items: allTags.value,
834										chips: "",
835										label: unref(t)("event_form.tags_label"),
836										multiple: "",
837										"hide-no-data": ""
838									}, null, 8, [
839										"modelValue",
840										"items",
841										"label"
842									])]),
843									_: 1
844								})) : createCommentVNode("", true),
845								createVNode(_component_v_col, {
846									cols: "12",
847									sm: "6"
848								}, {
849									default: withCtx(() => [createVNode(_component_v_file_input, {
850										accept: "image/*",
851										label: unref(t)("event_form.cover_image"),
852										variant: "outlined",
853										"prepend-icon": "",
854										class: "mb-2",
855										"hide-details": "",
856										"prepend-inner-icon": "mdi-paperclip",
857										"onUpdate:modelValue": handleFileInput
858									}, null, 8, ["label"]), thumbnailUrl.value ? (openBlock(), createBlock(_component_v_img, {
859										key: 0,
860										src: thumbnailUrl.value,
861										alt: unref(t)("event_form.cover_image"),
862										height: "150px"
863									}, null, 8, ["src", "alt"])) : (openBlock(), createElementBlock("div", _hoisted_2))]),
864									_: 1
865								}),
866								createVNode(_component_v_col, {
867									cols: "12",
868									sm: "6"
869								}, {
870									default: withCtx(() => [createVNode(_component_v_select, {
871										modelValue: input.value.map,
872										"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => input.value.map = $event),
873										variant: "outlined",
874										items: mapItems.value,
875										"item-title": "text",
876										"item-value": "value",
877										"hide-details": "",
878										label: unref(t)("event_form.background_map")
879									}, null, 8, [
880										"modelValue",
881										"items",
882										"label"
883									])]),
884									_: 1
885								}),
886								createVNode(_component_v_col, {
887									cols: "6",
888									sm: "6"
889								}, {
890									default: withCtx(() => [createVNode(_component_v_menu, {
891										modelValue: ymdStartMenu.value,
892										"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => ymdStartMenu.value = $event),
893										"close-on-content-click": false,
894										transition: "scale-transition",
895										location: "bottom",
896										"min-width": "auto"
897									}, {
898										activator: withCtx(({ props }) => [createVNode(_component_v_text_field, mergeProps({
899											modelValue: ymdStartForDP.value,
900											"onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => ymdStartForDP.value = $event),
901											label: isSafetyEvent.value ? `${unref(t)("event_form.start_date")}*` : unref(t)("event_form.start_date"),
902											"prepend-icon": "mdi-calendar",
903											readonly: ""
904										}, props, { clearable: "" }), null, 16, ["modelValue", "label"])]),
905										default: withCtx(() => [createVNode(_component_v_date_picker, {
906											modelValue: ymdStartForDP.value,
907											"onUpdate:modelValue": [_cache[10] || (_cache[10] = ($event) => ymdStartForDP.value = $event), _cache[11] || (_cache[11] = ($event) => ymdStartMenu.value = false)],
908											scrollable: "",
909											"hide-header": ""
910										}, null, 8, ["modelValue"])]),
911										_: 1
912									}, 8, ["modelValue"])]),
913									_: 1
914								}),
915								createVNode(_component_v_col, {
916									cols: "6",
917									sm: "6"
918								}, {
919									default: withCtx(() => [createVNode(_component_v_menu, {
920										modelValue: ymdEndMenu.value,
921										"onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => ymdEndMenu.value = $event),
922										"close-on-content-click": false,
923										transition: "scale-transition",
924										location: "bottom",
925										"min-width": "auto"
926									}, {
927										activator: withCtx(({ props }) => [createVNode(_component_v_text_field, mergeProps({
928											modelValue: ymdEndForDP.value,
929											"onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => ymdEndForDP.value = $event),
930											label: unref(t)("event_form.end_date"),
931											"prepend-icon": "mdi-calendar",
932											readonly: ""
933										}, props, { clearable: "" }), null, 16, ["modelValue", "label"])]),
934										default: withCtx(() => [createVNode(_component_v_date_picker, {
935											modelValue: ymdEndForDP.value,
936											"onUpdate:modelValue": [_cache[14] || (_cache[14] = ($event) => ymdEndForDP.value = $event), _cache[15] || (_cache[15] = ($event) => ymdEndMenu.value = false)],
937											scrollable: "",
938											"hide-header": ""
939										}, null, 8, ["modelValue"])]),
940										_: 1
941									}, 8, ["modelValue"])]),
942									_: 1
943								}),
944								isSafetyEvent.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [
945									createVNode(_component_v_col, {
946										cols: "12",
947										class: "my-2"
948									}, {
949										default: withCtx(() => [createVNode(_component_v_divider), createBaseVNode("div", _hoisted_3, toDisplayString(unref(t)("event_form.safety_settings")), 1)]),
950										_: 1
951									}),
952									createVNode(_component_v_col, {
953										cols: "6",
954										sm: "6"
955									}, {
956										default: withCtx(() => [createVNode(_component_v_select, {
957											modelValue: input.value.safetyTrackingInterval,
958											"onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => input.value.safetyTrackingInterval = $event),
959											items: trackingIntervalItems.value,
960											"item-title": "text",
961											"item-value": "value",
962											variant: "outlined",
963											"hide-details": "",
964											label: unref(t)("event_form.tracking_interval")
965										}, null, 8, [
966											"modelValue",
967											"items",
968											"label"
969										])]),
970										_: 1
971									}),
972									createVNode(_component_v_col, {
973										cols: "6",
974										sm: "6"
975									}, {
976										default: withCtx(() => [createVNode(_component_v_switch, {
977											modelValue: input.value.showUserLocationOnMap,
978											"onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => input.value.showUserLocationOnMap = $event),
979											color: "primary",
980											"hide-details": "",
981											label: unref(t)("event_form.show_map_to_participants")
982										}, null, 8, ["modelValue", "label"])]),
983										_: 1
984									}),
985									createVNode(_component_v_col, {
986										cols: "6",
987										sm: "6"
988									}, {
989										default: withCtx(() => [createVNode(_component_v_switch, {
990											modelValue: shareLiveMap.value,
991											"onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => shareLiveMap.value = $event),
992											color: "primary",
993											"hide-details": "",
994											label: unref(t)("event_form.share_live_map")
995										}, null, 8, ["modelValue", "label"])]),
996										_: 1
997									})
998								], 64)) : createCommentVNode("", true),
999								!isSafetyEvent.value ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [
1000									createVNode(_component_v_col, {
1001										cols: "12",
1002										class: "my-2"
1003									}, {
1004										default: withCtx(() => [
1005											createVNode(_component_v_divider),
1006											createBaseVNode("div", _hoisted_4, toDisplayString(unref(t)("event_form.event_settings")), 1),
1007											createVNode(_component_CommonPaidFeatureNote, {
1008												gate: unref(paidFeatureGate),
1009												class: "mt-1"
1010											}, null, 8, ["gate"])
1011										]),
1012										_: 1
1013									}),
1014									createVNode(_component_v_col, {
1015										cols: "6",
1016										sm: "6"
1017									}, {
1018										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1019											modelValue: input.value.entryRequired,
1020											"onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => input.value.entryRequired = $event),
1021											label: unref(t)("event_form.require_approval"),
1022											gate: unref(paidFeatureGate)
1023										}, null, 8, [
1024											"modelValue",
1025											"label",
1026											"gate"
1027										]), createBaseVNode("div", _hoisted_5, toDisplayString(unref(t)("event_form.approval_in_app_note")), 1)]),
1028										_: 1
1029									}),
1030									createVNode(_component_v_col, {
1031										cols: "6",
1032										sm: "6"
1033									}, {
1034										default: withCtx(() => [createVNode(_component_v_text_field, {
1035											"model-value": input.value.meetCode,
1036											variant: "outlined",
1037											"hide-details": "",
1038											label: unref(t)("event_form.event_number"),
1039											inputmode: "numeric",
1040											maxlength: "4",
1041											placeholder: "1234",
1042											disabled: !unref(paidFeatureAvailable) || !input.value.entryRequired,
1043											"prepend-inner-icon": unref(paidFeatureLocked) ? "mdi-lock" : void 0,
1044											"onUpdate:modelValue": handleMeetCodeInput
1045										}, null, 8, [
1046											"model-value",
1047											"label",
1048											"disabled",
1049											"prepend-inner-icon"
1050										]), createBaseVNode("div", _hoisted_6, toDisplayString(unref(t)("event_form.event_number_note")), 1)]),
1051										_: 1
1052									}),
1053									createVNode(_component_v_col, {
1054										cols: "6",
1055										sm: "6"
1056									}, {
1057										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1058											modelValue: input.value.autoPhotoCheckEnabled,
1059											"onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => input.value.autoPhotoCheckEnabled = $event),
1060											label: unref(t)("event_form.auto_photo_check"),
1061											gate: unref(paidFeatureGate)
1062										}, null, 8, [
1063											"modelValue",
1064											"label",
1065											"gate"
1066										])]),
1067										_: 1
1068									}),
1069									createVNode(_component_v_col, {
1070										cols: "6",
1071										sm: "6"
1072									}, {
1073										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1074											modelValue: input.value.forceLiveTrack,
1075											"onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => input.value.forceLiveTrack = $event),
1076											label: unref(t)("event_form.always_live_tracking"),
1077											gate: unref(paidFeatureGate)
1078										}, null, 8, [
1079											"modelValue",
1080											"label",
1081											"gate"
1082										])]),
1083										_: 1
1084									}),
1085									createVNode(_component_v_col, {
1086										cols: "6",
1087										sm: "6"
1088									}, {
1089										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1090											modelValue: input.value.disableDisplayOtherPlayers,
1091											"onUpdate:modelValue": _cache[23] || (_cache[23] = ($event) => input.value.disableDisplayOtherPlayers = $event),
1092											label: unref(t)("event_form.hide_other_players"),
1093											gate: unref(paidFeatureGate)
1094										}, null, 8, [
1095											"modelValue",
1096											"label",
1097											"gate"
1098										])]),
1099										_: 1
1100									}),
1101									createVNode(_component_v_col, {
1102										cols: "6",
1103										sm: "6"
1104									}, {
1105										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1106											modelValue: input.value.hideResults,
1107											"onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => input.value.hideResults = $event),
1108											label: unref(t)("event_form.hide_results"),
1109											gate: unref(paidFeatureGate)
1110										}, null, 8, [
1111											"modelValue",
1112											"label",
1113											"gate"
1114										])]),
1115										_: 1
1116									}),
1117									createVNode(_component_v_col, {
1118										cols: "6",
1119										sm: "6"
1120									}, {
1121										default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1122											modelValue: input.value.hideActivityDetail,
1123											"onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => input.value.hideActivityDetail = $event),
1124											label: unref(t)("event_form.hide_activity_detail"),
1125											gate: unref(paidFeatureGate)
1126										}, null, 8, [
1127											"modelValue",
1128											"label",
1129											"gate"
1130										])]),
1131										_: 1
1132									})
1133								], 64)) : createCommentVNode("", true),
1134								createVNode(_component_v_col, {
1135									cols: "12",
1136									class: "my-2"
1137								}, {
1138									default: withCtx(() => [
1139										createVNode(_component_v_divider),
1140										createBaseVNode("div", _hoisted_7, toDisplayString(unref(t)("event_form.advanced_settings")), 1),
1141										createVNode(_component_CommonPaidFeatureNote, {
1142											gate: unref(paidFeatureGate),
1143											class: "mt-1"
1144										}, null, 8, ["gate"])
1145									]),
1146									_: 1
1147								}),
1148								createVNode(_component_v_col, {
1149									cols: "6",
1150									sm: "6"
1151								}, {
1152									default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1153										modelValue: input.value.entryNumberRequired,
1154										"onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => input.value.entryNumberRequired = $event),
1155										label: unref(t)("event_form.require_entry_number"),
1156										gate: unref(paidFeatureGate)
1157									}, null, 8, [
1158										"modelValue",
1159										"label",
1160										"gate"
1161									])]),
1162									_: 1
1163								}),
1164								createVNode(_component_v_col, {
1165									cols: "6",
1166									sm: "6"
1167								}, {
1168									default: withCtx(() => [createVNode(_component_v_text_field, {
1169										modelValue: input.value.completionUrl,
1170										"onUpdate:modelValue": _cache[27] || (_cache[27] = ($event) => input.value.completionUrl = $event),
1171										variant: "outlined",
1172										"hide-details": "",
1173										label: unref(t)("event_form.completion_url"),
1174										type: "url",
1175										placeholder: "https://...",
1176										disabled: !unref(paidFeatureAvailable),
1177										"prepend-inner-icon": unref(paidFeatureLocked) ? "mdi-lock" : void 0
1178									}, null, 8, [
1179										"modelValue",
1180										"label",
1181										"disabled",
1182										"prepend-inner-icon"
1183									])]),
1184									_: 1
1185								}),
1186								createVNode(_component_v_col, {
1187									cols: "6",
1188									sm: "6"
1189								}, {
1190									default: withCtx(() => [createVNode(_component_CommonPaidFeatureSwitch, {
1191										modelValue: input.value.messageSendingOrganizerOnly,
1192										"onUpdate:modelValue": _cache[28] || (_cache[28] = ($event) => input.value.messageSendingOrganizerOnly = $event),
1193										label: unref(t)("event_form.restrict_messages"),
1194										gate: unref(paidFeatureGate)
1195									}, null, 8, [
1196										"modelValue",
1197										"label",
1198										"gate"
1199									])]),
1200									_: 1
1201								}),
1202								createVNode(_component_v_col, {
1203									cols: "6",
1204									sm: "6"
1205								}, {
1206									default: withCtx(() => [createVNode(_component_v_switch, {
1207										modelValue: input.value.organizerMessagingEnabled,
1208										"onUpdate:modelValue": _cache[29] || (_cache[29] = ($event) => input.value.organizerMessagingEnabled = $event),
1209										color: "primary",
1210										"hide-details": "",
1211										label: unref(t)("event_form.organizer_messaging")
1212									}, null, 8, ["modelValue", "label"])]),
1213									_: 1
1214								}),
1215								createVNode(_component_v_col, {
1216									cols: "12",
1217									class: "my-2"
1218								}, {
1219									default: withCtx(() => [createVNode(_component_v_divider), createBaseVNode("div", _hoisted_8, toDisplayString(unref(t)("event_form.event_area")) + toDisplayString(isSafetyEvent.value ? "*" : ""), 1)]),
1220									_: 1
1221								}),
1222								createVNode(_component_v_col, {
1223									cols: "12",
1224									sm: "6"
1225								}, {
1226									default: withCtx(() => [..._cache[34] || (_cache[34] = [createBaseVNode("div", {
1227										id: "radius-map",
1228										class: "radius_map"
1229									}, null, -1)])]),
1230									_: 1
1231								}),
1232								createVNode(_component_v_col, {
1233									cols: "12",
1234									sm: "6"
1235								}, {
1236									default: withCtx(() => [createBaseVNode("div", _hoisted_9, [createTextVNode(toDisplayString(unref(t)("event_form.define_area")) + " ", 1), createVNode(_component_v_icon, null, {
1237										default: withCtx(() => [..._cache[35] || (_cache[35] = [createTextVNode("mdi-cursor-default-click", -1)])]),
1238										_: 1
1239									})]), createVNode(_component_v_text_field, {
1240										modelValue: eventCircleRadius.value,
1241										"onUpdate:modelValue": _cache[30] || (_cache[30] = ($event) => eventCircleRadius.value = $event),
1242										label: unref(t)("event_form.circle_radius"),
1243										variant: "outlined",
1244										"hide-details": "",
1245										required: "",
1246										step: "25",
1247										min: "0",
1248										type: "number"
1249									}, null, 8, ["modelValue", "label"])]),
1250									_: 1
1251								}),
1252								createVNode(_component_v_col, {
1253									cols: "12",
1254									class: "my-2"
1255								}, {
1256									default: withCtx(() => [createVNode(_component_v_divider)]),
1257									_: 1
1258								}),
1259								createVNode(_component_v_col, {
1260									cols: "12",
1261									sm: "6"
1262								}, {
1263									default: withCtx(() => [createVNode(_component_v_switch, {
1264										modelValue: input.value.public,
1265										"onUpdate:modelValue": _cache[31] || (_cache[31] = ($event) => input.value.public = $event),
1266										color: "primary",
1267										label: unref(t)("event_form.publish"),
1268										"hide-details": ""
1269									}, null, 8, ["modelValue", "label"])]),
1270									_: 1
1271								}),
1272								!isSafetyEvent.value ? (openBlock(), createBlock(_component_v_col, {
1273									key: 5,
1274									cols: "12"
1275								}, {
1276									default: withCtx(() => [createBaseVNode("div", _hoisted_10, toDisplayString(unref(t)("event_form.setup_note")), 1)]),
1277									_: 1
1278								})) : createCommentVNode("", true),
1279								createVNode(_component_v_col, { cols: "12" }, {
1280									default: withCtx(() => [createVNode(_component_v_btn, {
1281										loading: isSaving.value,
1282										disabled: !canSave.value,
1283										color: "primary",
1284										variant: "flat",
1285										class: "text-capitalize",
1286										block: "",
1287										rounded: "",
1288										onClick: onSaveAll
1289									}, {
1290										default: withCtx(() => [createTextVNode(toDisplayString(unref(t)("common.save")) + " ", 1), createVNode(_component_v_icon, { end: "" }, {
1291											default: withCtx(() => [..._cache[36] || (_cache[36] = [createTextVNode("mdi-cloud-upload", -1)])]),
1292											_: 1
1293										})]),
1294										_: 1
1295									}, 8, ["loading", "disabled"])]),
1296									_: 1
1297								})
1298							]),
1299							_: 1
1300						})]),
1301						_: 1
1302					}, 512)]),
1303					_: 1
1304				}),
1305				createVNode(_component_v_overlay, {
1306					modelValue: overlayVisible.value,
1307					"onUpdate:modelValue": _cache[32] || (_cache[32] = ($event) => overlayVisible.value = $event)
1308				}, {
1309					default: withCtx(() => [createVNode(_component_v_progress_circular, {
1310						indeterminate: "",
1311						size: "64"
1312					})]),
1313					_: 1
1314				}, 8, ["modelValue"])
1315			]);
1316		};
1317	}
1318}), [["__scopeId", "data-v-6faadfe9"]]);
1319//#endregion
1320export { edit_default as default };

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.