@vicacha-devs/strapi-plugin-events 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +121 -2
  3. package/dist/admin/CalendarPage-CwCvPDRx.js +1215 -0
  4. package/dist/admin/CalendarPage-Dz7g19qp.mjs +1215 -0
  5. package/dist/admin/RRuleInput-BQl-siRj.js +11 -0
  6. package/dist/admin/RRuleInput-C8bR37X9.mjs +6 -0
  7. package/dist/admin/SettingsPage-CNG9AEO_.mjs +415 -0
  8. package/dist/admin/SettingsPage-DhjtKDmY.js +415 -0
  9. package/dist/admin/ar-mMKUXxch.js +216 -0
  10. package/dist/admin/ar-tWKEvJLB.mjs +216 -0
  11. package/dist/admin/de-CGk8UZ3W.js +216 -0
  12. package/dist/admin/de-OdbJEFs0.mjs +216 -0
  13. package/dist/admin/en-Dskn9ZPa.mjs +216 -0
  14. package/dist/admin/en-imdSlLhJ.js +216 -0
  15. package/dist/admin/es-DcMsMHrI.mjs +216 -0
  16. package/dist/admin/es-DkqqxUJQ.js +216 -0
  17. package/dist/admin/fr-BTEIPOFw.mjs +216 -0
  18. package/dist/admin/fr-D92B_ZTv.js +216 -0
  19. package/dist/admin/index-BTq_X4uT.js +1005 -0
  20. package/dist/admin/index-BatOiwBu.mjs +1006 -0
  21. package/dist/admin/index.js +6 -0
  22. package/dist/admin/index.mjs +6 -0
  23. package/dist/admin/it-CAxPpL_9.mjs +216 -0
  24. package/dist/admin/it-ClKaSCgv.js +216 -0
  25. package/dist/admin/nl-CS1aUfT7.mjs +216 -0
  26. package/dist/admin/nl-F6FIi7zw.js +216 -0
  27. package/dist/admin/pl-BfmBU9FW.mjs +216 -0
  28. package/dist/admin/pl-p8VLXi02.js +216 -0
  29. package/dist/admin/pt-BUdH0uSw.js +216 -0
  30. package/dist/admin/pt-DdulKcbk.mjs +216 -0
  31. package/dist/admin/src/components/EventSidePanel.d.ts +13 -0
  32. package/dist/admin/src/components/Initializer.d.ts +5 -0
  33. package/dist/admin/src/components/PluginIcon.d.ts +2 -0
  34. package/dist/admin/src/components/RRuleInput.d.ts +3 -0
  35. package/dist/admin/src/components/events/AttendeesManagerPanel.d.ts +15 -0
  36. package/dist/admin/src/components/events/EventsDirectoryPanel.d.ts +11 -0
  37. package/dist/admin/src/components/events/EventsKpiCards.d.ts +16 -0
  38. package/dist/admin/src/components/events/QuickCreateEventPanel.d.ts +21 -0
  39. package/dist/admin/src/components/events/calendarPageHelpers.d.ts +8 -0
  40. package/dist/admin/src/fields/rruleField.d.ts +41 -0
  41. package/dist/admin/src/index.d.ts +15 -0
  42. package/dist/admin/src/pages/CalendarPage.d.ts +3 -0
  43. package/dist/admin/src/pages/SettingsPage.d.ts +3 -0
  44. package/dist/admin/src/permissions.d.ts +15 -0
  45. package/dist/admin/src/translations/cmLabels.d.ts +1 -0
  46. package/dist/admin/src/translations/cmPlaceholders.d.ts +1 -0
  47. package/dist/admin/tr-Bp50qvL8.mjs +216 -0
  48. package/dist/admin/tr-C7G9mPtg.js +216 -0
  49. package/dist/server/index.js +3709 -0
  50. package/dist/server/index.mjs +3705 -0
  51. package/dist/server/src/bootstrap.d.ts +5 -0
  52. package/dist/server/src/config/index.d.ts +7 -0
  53. package/dist/server/src/content-types/event/schema.json.d.ts +279 -0
  54. package/dist/server/src/content-types/index.d.ts +366 -0
  55. package/dist/server/src/content-types/registration/schema.json.d.ts +86 -0
  56. package/dist/server/src/controllers/admin.d.ts +17 -0
  57. package/dist/server/src/controllers/content-api.d.ts +14 -0
  58. package/dist/server/src/controllers/index.d.ts +28 -0
  59. package/dist/server/src/destroy.d.ts +5 -0
  60. package/dist/server/src/index.d.ts +551 -0
  61. package/dist/server/src/middlewares/index.d.ts +2 -0
  62. package/dist/server/src/policies/index.d.ts +2 -0
  63. package/dist/server/src/register.d.ts +5 -0
  64. package/dist/server/src/routes/admin.d.ts +17 -0
  65. package/dist/server/src/routes/content-api.d.ts +12 -0
  66. package/dist/server/src/routes/index.d.ts +30 -0
  67. package/dist/server/src/services/ical.d.ts +18 -0
  68. package/dist/server/src/services/index.d.ts +110 -0
  69. package/dist/server/src/services/occurrence.d.ts +44 -0
  70. package/dist/server/src/services/occurrenceHelpers.d.ts +16 -0
  71. package/dist/server/src/services/occurrencePayloadHelpers.d.ts +30 -0
  72. package/dist/server/src/services/occurrenceRsvpBatch.d.ts +25 -0
  73. package/dist/server/src/services/rsvp.d.ts +51 -0
  74. package/dist/server/src/services/rsvpHelpers.d.ts +52 -0
  75. package/dist/server/src/services/rsvpMutations.d.ts +34 -0
  76. package/dist/server/src/services/rsvpSecurity.d.ts +22 -0
  77. package/dist/server/src/services/settings.d.ts +10 -0
  78. package/dist/server/src/types.d.ts +171 -0
  79. package/dist/shared/calendarSystems.d.ts +6 -0
  80. package/dist/shared/icalGenerator.d.ts +25 -0
  81. package/dist/shared/index.d.ts +6 -0
  82. package/dist/shared/index.js +753 -0
  83. package/dist/shared/index.mjs +727 -0
  84. package/dist/shared/pluginId.d.ts +4 -0
  85. package/dist/shared/rruleEngine.d.ts +20 -0
  86. package/dist/shared/spotlightHelpers.d.ts +17 -0
  87. package/dist/shared/types.d.ts +309 -0
  88. package/dist/shared/urlAndPosterHelpers.d.ts +18 -0
  89. package/package.json +109 -3
@@ -0,0 +1,1006 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Box, Flex, Typography, Button, Badge } from "@strapi/design-system";
3
+ import { useFetchClient } from "@strapi/strapi/admin";
4
+ import { useState, useEffect, useMemo, useRef } from "react";
5
+ import { useIntl } from "react-intl";
6
+ import { useNavigate } from "react-router-dom";
7
+ import { formatDateInCalendarSystem } from "@vicacha-devs/strapi-plugin-calendar/shared";
8
+ import { Calendar } from "@strapi/icons";
9
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
10
+ const v = glob[path];
11
+ if (v) {
12
+ return typeof v === "function" ? v() : Promise.resolve(v);
13
+ }
14
+ return new Promise((_, reject) => {
15
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
16
+ reject.bind(
17
+ null,
18
+ new Error(
19
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
20
+ )
21
+ )
22
+ );
23
+ });
24
+ };
25
+ function freezeOptions(items) {
26
+ return Object.freeze(items.map((item) => Object.freeze({ ...item })));
27
+ }
28
+ freezeOptions([
29
+ { value: "es", label: "es — Español (Spanish)" },
30
+ { value: "en", label: "en — English" },
31
+ { value: "ar", label: "ar — العربية (Arabic)" },
32
+ { value: "tr", label: "tr — Türkçe (Turkish)" },
33
+ { value: "fr", label: "fr — Français (French)" },
34
+ { value: "de", label: "de — Deutsch (German)" },
35
+ { value: "pt", label: "pt — Português (Portuguese)" },
36
+ { value: "it", label: "it — Italiano (Italian)" },
37
+ { value: "nl", label: "nl — Nederlands (Dutch)" },
38
+ { value: "pl", label: "pl — Polski (Polish)" },
39
+ { value: "ru", label: "ru — Русский (Russian)" },
40
+ { value: "id", label: "id — Bahasa Indonesia" },
41
+ { value: "ur", label: "ur — اردو (Urdu)" },
42
+ { value: "zh", label: "zh — 中文 (Chinese)" }
43
+ ]);
44
+ freezeOptions([
45
+ {
46
+ value: "islamic-umalqura",
47
+ label: "islamic-umalqura (Hijri Umm al-Qura)"
48
+ },
49
+ { value: "islamic-civil", label: "islamic-civil (Tabular Islamic Civil)" },
50
+ { value: "islamic-tbla", label: "islamic-tbla (Tabular Astronomical)" },
51
+ { value: "hebrew", label: "hebrew (Hebrew)" },
52
+ { value: "persian", label: "persian (Solar Hijri)" },
53
+ { value: "none", label: "none (Gregorian Only)" }
54
+ ]);
55
+ const VALID_LOCALE_RE = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,4}$/;
56
+ function isTranslationRecord(value) {
57
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
58
+ }
59
+ function extractDictionary(loaded) {
60
+ if (!isTranslationRecord(loaded)) {
61
+ return void 0;
62
+ }
63
+ if ("default" in loaded) {
64
+ return isTranslationRecord(loaded.default) ? loaded.default : void 0;
65
+ }
66
+ return loaded;
67
+ }
68
+ function getLookupCandidates(locale, fallbackToLanguage) {
69
+ const trimmed = locale.trim();
70
+ if (!VALID_LOCALE_RE.test(trimmed)) {
71
+ return [];
72
+ }
73
+ if (!fallbackToLanguage || !trimmed.includes("-")) {
74
+ return [trimmed];
75
+ }
76
+ const base = trimmed.split("-")[0];
77
+ return base && base !== trimmed ? [trimmed, base] : [trimmed];
78
+ }
79
+ function prefixPluginTranslations(trad, pluginId, options) {
80
+ const normalizedPluginId = typeof pluginId === "string" ? pluginId.trim() : "";
81
+ if (!normalizedPluginId) {
82
+ throw new TypeError("pluginId can't be empty");
83
+ }
84
+ const result = {};
85
+ if (options?.baseTranslations) {
86
+ for (const [key, value] of Object.entries(options.baseTranslations)) {
87
+ if (typeof value === "string") {
88
+ result[key] = value;
89
+ }
90
+ }
91
+ }
92
+ const prefix = `${normalizedPluginId}.`;
93
+ const explicitPrefixed = [];
94
+ for (const [key, value] of Object.entries(trad)) {
95
+ if (typeof value !== "string") {
96
+ continue;
97
+ }
98
+ if (options?.keepUnprefixed) {
99
+ result[key] = value;
100
+ }
101
+ if (key.startsWith(prefix)) {
102
+ explicitPrefixed.push([key, value]);
103
+ } else {
104
+ result[`${prefix}${key}`] = value;
105
+ }
106
+ }
107
+ for (const [key, value] of explicitPrefixed) {
108
+ result[key] = value;
109
+ }
110
+ return result;
111
+ }
112
+ function createRegisterTrads(options) {
113
+ const { pluginId, defaultLocales = ["en", "es", "ar", "tr"], supportedLocales, keepUnprefixed = true, fallbackToLanguageCode = true, loadTranslation, translations, getBaseTranslations, onLoaded } = options;
114
+ const normalizedPluginId = typeof pluginId === "string" ? pluginId.trim() : "";
115
+ if (!normalizedPluginId) {
116
+ throw new TypeError("pluginId can't be empty");
117
+ }
118
+ const supportedSet = supportedLocales ? new Set(supportedLocales) : void 0;
119
+ const effectiveDefaults = supportedSet ? defaultLocales.filter((loc) => getLookupCandidates(loc, fallbackToLanguageCode).some((candidate) => supportedSet.has(candidate))) : defaultLocales;
120
+ return async function registerTrads({ locales = [] } = {}) {
121
+ const allLocales = effectiveDefaults.length > 0 ? Array.from(/* @__PURE__ */ new Set([...locales, ...effectiveDefaults])) : Array.from(new Set(locales));
122
+ return Promise.all(allLocales.map(async (locale) => {
123
+ const candidates = getLookupCandidates(locale, fallbackToLanguageCode);
124
+ if (candidates.length === 0) {
125
+ return { data: {}, locale };
126
+ }
127
+ if (supportedSet && !candidates.some((candidate) => supportedSet.has(candidate))) {
128
+ return { data: {}, locale };
129
+ }
130
+ let rawData;
131
+ for (const candidate of candidates) {
132
+ if (translations && Object.hasOwn(translations, candidate)) {
133
+ rawData = extractDictionary(translations[candidate]);
134
+ if (rawData) {
135
+ break;
136
+ }
137
+ }
138
+ if (loadTranslation) {
139
+ try {
140
+ const loaded = await loadTranslation(candidate);
141
+ rawData = extractDictionary(loaded);
142
+ if (rawData) {
143
+ break;
144
+ }
145
+ } catch {
146
+ }
147
+ }
148
+ }
149
+ const baseTranslations = getBaseTranslations?.(locale);
150
+ const hasBase = Boolean(baseTranslations) && Object.keys(baseTranslations).length > 0;
151
+ if (!rawData && !hasBase) {
152
+ return { data: {}, locale };
153
+ }
154
+ const prefixed = prefixPluginTranslations(rawData ?? {}, normalizedPluginId, {
155
+ keepUnprefixed,
156
+ baseTranslations
157
+ });
158
+ onLoaded?.(locale, prefixed);
159
+ return { data: prefixed, locale };
160
+ }));
161
+ };
162
+ }
163
+ const PLUGIN_ID = "events";
164
+ const EVENT_CONTENT_TYPE_UID = `plugin::${PLUGIN_ID}.event`;
165
+ const DANGEROUS_OBJECT_KEYS = /* @__PURE__ */ new Set([
166
+ "__proto__",
167
+ "constructor",
168
+ "prototype"
169
+ ]);
170
+ function isSafeObjectKey(key) {
171
+ return typeof key === "string" && key.length > 0 && !DANGEROUS_OBJECT_KEYS.has(key);
172
+ }
173
+ function getStringProp(doc, key) {
174
+ if (!doc || !isSafeObjectKey(key) || !Object.hasOwn(doc, key)) {
175
+ return "";
176
+ }
177
+ const val = doc[key];
178
+ return typeof val === "string" ? val : "";
179
+ }
180
+ function resolveDocumentStartDate(doc) {
181
+ return getStringProp(doc, "startDate") || getStringProp(doc, "preferredDate");
182
+ }
183
+ function isDocumentEventLike(model, doc, rawStartDate) {
184
+ if (model === EVENT_CONTENT_TYPE_UID) return true;
185
+ return Boolean(
186
+ rawStartDate || doc?.recurrence || doc?.rsvpEnabled !== void 0
187
+ );
188
+ }
189
+ function formatSingleCalendarSystem(sys, rawStartDate, doc, locale) {
190
+ const overrideVal = sys.overrideField ? getStringProp(doc, sys.overrideField).trim() : "";
191
+ const formatted = overrideVal || formatDateInCalendarSystem(rawStartDate, sys, locale, { compact: false });
192
+ return {
193
+ id: sys.id,
194
+ label: sys.label,
195
+ formatted,
196
+ isOverridden: Boolean(overrideVal)
197
+ };
198
+ }
199
+ function computeCapacityPercent(stats) {
200
+ const cap = stats?.capacity ?? 0;
201
+ if (!stats || cap <= 0) return 0;
202
+ return Math.min(100, Math.round(stats.confirmedSeats / cap * 100));
203
+ }
204
+ function resolveRsvpEnabled(doc, stats) {
205
+ return typeof doc?.rsvpEnabled === "boolean" ? doc.rsvpEnabled : stats.rsvpEnabled;
206
+ }
207
+ const SidePanelRsvpCard = ({
208
+ stats,
209
+ rsvpEnabled,
210
+ capacityPercent,
211
+ t
212
+ }) => {
213
+ const badgeBg = stats.isFull ? "danger100" : "success100";
214
+ const badgeText = stats.isFull ? "danger700" : "success700";
215
+ const badgeLabel = stats.isFull ? t("sidePanel.full", "Full / Waitlist") : t("sidePanel.open", "Open");
216
+ return /* @__PURE__ */ jsxs(Box, { padding: 3, background: "neutral100", hasRadius: true, children: [
217
+ /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [
218
+ /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t("sidePanel.rsvpStatus", "RSVP & Capacity") }),
219
+ rsvpEnabled ? /* @__PURE__ */ jsx(Badge, { backgroundColor: badgeBg, textColor: badgeText, children: badgeLabel }) : /* @__PURE__ */ jsx(Badge, { backgroundColor: "neutral150", textColor: "neutral600", children: t("events.directory.noRsvp", "Info / External Link") })
220
+ ] }),
221
+ /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", paddingTop: 2, children: [
222
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", children: [
223
+ t("sidePanel.confirmedSeats", "Confirmed Seats"),
224
+ ":"
225
+ ] }),
226
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", fontWeight: "bold", children: [
227
+ stats.confirmedSeats,
228
+ stats.capacity ? ` / ${stats.capacity}` : ""
229
+ ] })
230
+ ] }),
231
+ Boolean(stats.capacity) && /* @__PURE__ */ jsx(
232
+ Box,
233
+ {
234
+ marginTop: 2,
235
+ marginBottom: 2,
236
+ style: {
237
+ height: 8,
238
+ borderRadius: 4,
239
+ background: "#eaeaef",
240
+ overflow: "hidden"
241
+ },
242
+ children: /* @__PURE__ */ jsx(
243
+ "div",
244
+ {
245
+ style: {
246
+ width: `${capacityPercent}%`,
247
+ height: "100%",
248
+ background: stats.isFull ? "#d02b20" : "#0D9488"
249
+ }
250
+ }
251
+ )
252
+ }
253
+ ),
254
+ /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", paddingTop: 1, children: [
255
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", children: [
256
+ t("sidePanel.checkedIn", "Checked In"),
257
+ ":"
258
+ ] }),
259
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: stats.checkedInSeats })
260
+ ] }),
261
+ /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", paddingTop: 1, children: [
262
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", children: [
263
+ t("sidePanel.waitlisted", "Waitlisted Seats"),
264
+ ":"
265
+ ] }),
266
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: stats.waitlistedSeats })
267
+ ] })
268
+ ] });
269
+ };
270
+ function resolveActiveContentLocale(fallbackLocale) {
271
+ if (typeof window !== "undefined") {
272
+ const urlLoc = new URLSearchParams(window.location.search).get(
273
+ "plugins[i18n][locale]"
274
+ );
275
+ if (urlLoc) return urlLoc;
276
+ }
277
+ return fallbackLocale || "en";
278
+ }
279
+ const EventSidePanel = (props) => {
280
+ const { formatMessage, locale } = useIntl();
281
+ const navigate = useNavigate();
282
+ const { get } = useFetchClient();
283
+ const [stats, setStats] = useState(null);
284
+ const [settings, setSettings] = useState(null);
285
+ const model = props.model ?? "";
286
+ const documentId = props.documentId || getStringProp(props.document, "documentId");
287
+ const rawStartDate = resolveDocumentStartDate(props.document);
288
+ const isEventLike = isDocumentEventLike(model, props.document, rawStartDate);
289
+ const activeLocale = resolveActiveContentLocale(locale);
290
+ useEffect(() => {
291
+ if (!isEventLike) return;
292
+ let mounted = true;
293
+ get(`/${PLUGIN_ID}/settings`).then((res) => {
294
+ const data = res?.data?.data;
295
+ if (mounted && data) setSettings(data);
296
+ }).catch(() => {
297
+ });
298
+ if (documentId) {
299
+ const encodedDocId = encodeURIComponent(documentId);
300
+ const encodedModel = encodeURIComponent(model);
301
+ const statsUrl = `/${PLUGIN_ID}/stats/${encodedDocId}?eventUid=${encodedModel}`;
302
+ get(statsUrl).then((res) => {
303
+ const data = res?.data?.data;
304
+ if (mounted && data) setStats(data);
305
+ }).catch(() => {
306
+ });
307
+ }
308
+ return () => {
309
+ mounted = false;
310
+ };
311
+ }, [documentId, isEventLike, model, get]);
312
+ const computedAlternateDates = useMemo(() => {
313
+ const systems = settings?.secondaryCalendars;
314
+ if (!rawStartDate || !systems) return [];
315
+ return systems.filter((sys) => sys.enabled).map(
316
+ (sys) => formatSingleCalendarSystem(
317
+ sys,
318
+ rawStartDate,
319
+ props.document,
320
+ activeLocale
321
+ )
322
+ ).filter((item) => Boolean(item.formatted));
323
+ }, [
324
+ rawStartDate,
325
+ settings?.secondaryCalendars,
326
+ props.document,
327
+ activeLocale
328
+ ]);
329
+ if (!isEventLike || !documentId) {
330
+ return null;
331
+ }
332
+ const t = (id, defaultMessage) => formatMessage({ id: `${PLUGIN_ID}.${id}`, defaultMessage });
333
+ const icsUrl = `/api/events/${encodeURIComponent(documentId)}/invite.ics`;
334
+ const capacityPercent = computeCapacityPercent(stats);
335
+ const managerRoute = `/plugins/${PLUGIN_ID}?eventDocumentId=${encodeURIComponent(documentId)}`;
336
+ return {
337
+ title: t("sidePanel.title", "Events & RSVP Summary"),
338
+ content: /* @__PURE__ */ jsx(Box, { paddingTop: 2, paddingBottom: 2, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 3, children: [
339
+ computedAlternateDates.length > 0 && /* @__PURE__ */ jsxs(Box, { padding: 3, background: "neutral100", hasRadius: true, children: [
340
+ /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t(
341
+ "sidePanel.secondaryCalendars",
342
+ "Alternative Calendar Dates"
343
+ ) }),
344
+ /* @__PURE__ */ jsx(
345
+ Flex,
346
+ {
347
+ direction: "column",
348
+ alignItems: "stretch",
349
+ gap: 1,
350
+ paddingTop: 2,
351
+ children: computedAlternateDates.map((alt) => /* @__PURE__ */ jsxs(
352
+ Flex,
353
+ {
354
+ justifyContent: "space-between",
355
+ alignItems: "center",
356
+ children: [
357
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", textColor: "neutral600", children: [
358
+ alt.label,
359
+ ":"
360
+ ] }),
361
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: alt.formatted })
362
+ ]
363
+ },
364
+ alt.id
365
+ ))
366
+ }
367
+ )
368
+ ] }),
369
+ stats && /* @__PURE__ */ jsx(
370
+ SidePanelRsvpCard,
371
+ {
372
+ stats,
373
+ rsvpEnabled: resolveRsvpEnabled(props.document, stats),
374
+ capacityPercent,
375
+ t
376
+ }
377
+ ),
378
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
379
+ /* @__PURE__ */ jsx(
380
+ Button,
381
+ {
382
+ variant: "secondary",
383
+ size: "S",
384
+ tag: "a",
385
+ href: icsUrl,
386
+ target: "_blank",
387
+ rel: "noopener noreferrer",
388
+ children: t("sidePanel.downloadIcs", "Download .ics Invite")
389
+ }
390
+ ),
391
+ /* @__PURE__ */ jsx(
392
+ Button,
393
+ {
394
+ variant: "tertiary",
395
+ size: "S",
396
+ onClick: () => navigate(managerRoute),
397
+ children: t(
398
+ "sidePanel.openCalendar",
399
+ "Open in Events & Attendees Manager"
400
+ )
401
+ }
402
+ )
403
+ ] })
404
+ ] }) })
405
+ };
406
+ };
407
+ const Initializer = ({ setPlugin }) => {
408
+ const ref = useRef(setPlugin);
409
+ useEffect(() => {
410
+ ref.current?.(PLUGIN_ID);
411
+ }, []);
412
+ return null;
413
+ };
414
+ const PluginIcon = () => /* @__PURE__ */ jsx(Calendar, {});
415
+ const rruleField = {
416
+ name: "rrule",
417
+ pluginId: PLUGIN_ID,
418
+ type: "json",
419
+ intlLabel: {
420
+ id: `${PLUGIN_ID}.rrule.label`,
421
+ defaultMessage: "Event Recurrence & Schedule (RRULE)"
422
+ },
423
+ intlDescription: {
424
+ id: `${PLUGIN_ID}.rrule.description`,
425
+ defaultMessage: "Configure recurring rules (RFC 5545 RRULE), timezone, exception dates, and single-instance overrides."
426
+ },
427
+ icon: Calendar,
428
+ components: {
429
+ Input: async () => import("./RRuleInput-C8bR37X9.mjs").then((m) => ({ default: m.default }))
430
+ },
431
+ options: {
432
+ base: [],
433
+ advanced: [
434
+ {
435
+ sectionTitle: {
436
+ id: `${PLUGIN_ID}.rrule.section.advanced`,
437
+ defaultMessage: "Settings"
438
+ },
439
+ items: [
440
+ {
441
+ name: "required",
442
+ type: "checkbox",
443
+ intlLabel: {
444
+ id: `${PLUGIN_ID}.rrule.options.required`,
445
+ defaultMessage: "Required field"
446
+ },
447
+ description: {
448
+ id: `${PLUGIN_ID}.rrule.options.required.description`,
449
+ defaultMessage: "Require editors to specify recurrence or schedule settings."
450
+ }
451
+ }
452
+ ]
453
+ }
454
+ ]
455
+ }
456
+ };
457
+ const pluginPermissions = {
458
+ read: [{ action: `plugin::${PLUGIN_ID}.read`, subject: null }],
459
+ update: [{ action: `plugin::${PLUGIN_ID}.update`, subject: null }],
460
+ settings: [{ action: `plugin::${PLUGIN_ID}.settings.update`, subject: null }]
461
+ };
462
+ const CM_LABEL_TRANSLATIONS = {
463
+ en: {
464
+ "content-manager.content-types.plugin::events.event.title": "Title",
465
+ "content-manager.content-types.plugin::events.event.slug": "URL Slug",
466
+ "content-manager.content-types.plugin::events.event.summary": "Summary",
467
+ "content-manager.content-types.plugin::events.event.description": "Description",
468
+ "content-manager.content-types.plugin::events.event.startDate": "Start Date & Time",
469
+ "content-manager.content-types.plugin::events.event.endDate": "End Date & Time",
470
+ "content-manager.content-types.plugin::events.event.allDay": "All Day Event",
471
+ "content-manager.content-types.plugin::events.event.timezone": "Timezone",
472
+ "content-manager.content-types.plugin::events.event.recurrence": "Recurrence Schedule (RRULE)",
473
+ "content-manager.content-types.plugin::events.event.eventStatus": "Event Status",
474
+ "content-manager.content-types.plugin::events.event.locationType": "Attendance Mode / Location Type",
475
+ "content-manager.content-types.plugin::events.event.location": "Location / Venue",
476
+ "content-manager.content-types.plugin::events.event.virtualUrl": "Virtual / Livestream URL",
477
+ "content-manager.content-types.plugin::events.event.category": "Category",
478
+ "content-manager.content-types.plugin::events.event.color": "Color (Hex)",
479
+ "content-manager.content-types.plugin::events.event.featured": "Featured",
480
+ "content-manager.content-types.plugin::events.event.rsvpEnabled": "Enable RSVP Registration",
481
+ "content-manager.content-types.plugin::events.event.capacity": "Maximum Seat Capacity",
482
+ "content-manager.content-types.plugin::events.event.waitlistEnabled": "Enable Waitlist When Full",
483
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration": "Max Guests per Registration",
484
+ "content-manager.content-types.plugin::events.event.registrationDeadline": "Registration Deadline",
485
+ "content-manager.content-types.plugin::events.event.alternateDates": "Alternative Calendar Dates (JSON)",
486
+ "content-manager.content-types.plugin::events.event.poster": "Event Poster / Flyer",
487
+ "content-manager.content-types.plugin::events.event.actionLinks": "Custom Action Links (JSON)",
488
+ "content-manager.content-types.plugin::events.event.spotlightConfig": "Homepage Spotlight Configuration",
489
+ "content-manager.content-types.plugin::events.event.metadata": "Additional Metadata (JSON)",
490
+ "content-manager.content-types.plugin::events.event.hijriDate": "Hijri Date (Islamic Calendar)",
491
+ "content-manager.content-types.plugin::events.event.timeLabel": "Formatted Time Label",
492
+ "content-manager.content-types.plugin::events.event.imageUrl": "External Image URL",
493
+ "content-manager.content-types.plugin::events.event.imageAlt": "Image Alt Text",
494
+ "content-manager.content-types.plugin::events.event.speaker": "Speaker / Lecturer",
495
+ "content-manager.content-types.plugin::events.event.speakerProfile": "Speaker Profile",
496
+ "content-manager.content-types.plugin::events.event.speakerSlug": "Speaker Slug",
497
+ "content-manager.content-types.plugin::events.event.documentId": "Document ID",
498
+ "content-manager.content-types.plugin::events.registration.eventUid": "Event Content-Type UID",
499
+ "content-manager.content-types.plugin::events.registration.eventDocumentId": "Event Document ID",
500
+ "content-manager.content-types.plugin::events.registration.eventTitle": "Event Title",
501
+ "content-manager.content-types.plugin::events.registration.occurrenceDate": "Occurrence Date",
502
+ "content-manager.content-types.plugin::events.registration.attendeeName": "Attendee Full Name",
503
+ "content-manager.content-types.plugin::events.registration.attendeeEmail": "Attendee Email Address",
504
+ "content-manager.content-types.plugin::events.registration.attendeePhone": "Attendee Phone Number",
505
+ "content-manager.content-types.plugin::events.registration.guestsCount": "Number of Additional Guests",
506
+ "content-manager.content-types.plugin::events.registration.status": "Status",
507
+ "content-manager.content-types.plugin::events.registration.checkInToken": "QR Check-In Token",
508
+ "content-manager.content-types.plugin::events.registration.checkedInAt": "Checked-In Date & Time",
509
+ "content-manager.content-types.plugin::events.registration.notes": "Notes",
510
+ "content-manager.content-types.plugin::events.registration.metadata": "Additional Metadata (JSON)",
511
+ "content-manager.content-types.plugin::events.registration.documentId": "Document ID",
512
+ "content-manager.enum.scheduled": "Scheduled",
513
+ "content-manager.enum.cancelled": "Cancelled",
514
+ "content-manager.enum.postponed": "Postponed",
515
+ "content-manager.enum.rescheduled": "Rescheduled",
516
+ "content-manager.enum.in_person": "In Person",
517
+ "content-manager.enum.online": "Online",
518
+ "content-manager.enum.hybrid": "Hybrid",
519
+ "content-manager.enum.confirmed": "Confirmed",
520
+ "content-manager.enum.waitlisted": "Waitlisted",
521
+ "content-manager.enum.checked_in": "Checked In"
522
+ },
523
+ es: {
524
+ "content-manager.content-types.plugin::events.event.title": "Título",
525
+ "content-manager.content-types.plugin::events.event.slug": "Slug (URL Amigable)",
526
+ "content-manager.content-types.plugin::events.event.summary": "Resumen",
527
+ "content-manager.content-types.plugin::events.event.description": "Descripción",
528
+ "content-manager.content-types.plugin::events.event.startDate": "Fecha y Hora de Inicio",
529
+ "content-manager.content-types.plugin::events.event.endDate": "Fecha y Hora de Fin",
530
+ "content-manager.content-types.plugin::events.event.allDay": "Todo el Día",
531
+ "content-manager.content-types.plugin::events.event.timezone": "Zona Horaria",
532
+ "content-manager.content-types.plugin::events.event.recurrence": "Programación y Recurrencia",
533
+ "content-manager.content-types.plugin::events.event.eventStatus": "Estado del Evento",
534
+ "content-manager.content-types.plugin::events.event.locationType": "Modalidad de Asistencia (Tipo de Ubicación)",
535
+ "content-manager.content-types.plugin::events.event.location": "Ubicación / Lugar",
536
+ "content-manager.content-types.plugin::events.event.virtualUrl": "Enlace Virtual o Transmisión en Vivo (URL)",
537
+ "content-manager.content-types.plugin::events.event.category": "Categoría",
538
+ "content-manager.content-types.plugin::events.event.color": "Color (Hex)",
539
+ "content-manager.content-types.plugin::events.event.featured": "Destacado",
540
+ "content-manager.content-types.plugin::events.event.rsvpEnabled": "Habilitar Inscripción Previa (RSVP)",
541
+ "content-manager.content-types.plugin::events.event.capacity": "Cupo Máximo de Asistentes (Capacidad)",
542
+ "content-manager.content-types.plugin::events.event.waitlistEnabled": "Habilitar Lista de Espera",
543
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration": "Máximo de Invitados por Inscripción",
544
+ "content-manager.content-types.plugin::events.event.registrationDeadline": "Fecha Límite de Inscripción",
545
+ "content-manager.content-types.plugin::events.event.alternateDates": "Fechas en Calendarios Alternativos (JSON)",
546
+ "content-manager.content-types.plugin::events.event.poster": "Afiche / Póster del Evento",
547
+ "content-manager.content-types.plugin::events.event.actionLinks": "Enlaces de Acción Personalizados (JSON)",
548
+ "content-manager.content-types.plugin::events.event.spotlightConfig": "Configuración de Destacado en Inicio",
549
+ "content-manager.content-types.plugin::events.event.metadata": "Metadatos Adicionales (JSON)",
550
+ "content-manager.content-types.plugin::events.event.hijriDate": "Fecha Hijri (Calendario Islámico)",
551
+ "content-manager.content-types.plugin::events.event.timeLabel": "Etiqueta de Hora (ej. 18:30)",
552
+ "content-manager.content-types.plugin::events.event.imageUrl": "URL de Imagen Externa",
553
+ "content-manager.content-types.plugin::events.event.imageAlt": "Texto Alternativo de Imagen",
554
+ "content-manager.content-types.plugin::events.event.speaker": "Orador / Conferencista",
555
+ "content-manager.content-types.plugin::events.event.speakerProfile": "Perfil del Orador",
556
+ "content-manager.content-types.plugin::events.event.speakerSlug": "Slug del Orador",
557
+ "content-manager.content-types.plugin::events.event.documentId": "ID del Documento",
558
+ "content-manager.content-types.plugin::events.registration.eventUid": "UID del Tipo de Contenido del Evento",
559
+ "content-manager.content-types.plugin::events.registration.eventDocumentId": "ID del Documento del Evento",
560
+ "content-manager.content-types.plugin::events.registration.eventTitle": "Título del Evento",
561
+ "content-manager.content-types.plugin::events.registration.occurrenceDate": "Fecha de la Sesión / Ocurrencia",
562
+ "content-manager.content-types.plugin::events.registration.attendeeName": "Nombre Completo del Asistente",
563
+ "content-manager.content-types.plugin::events.registration.attendeeEmail": "Correo Electrónico del Asistente",
564
+ "content-manager.content-types.plugin::events.registration.attendeePhone": "Teléfono del Asistente",
565
+ "content-manager.content-types.plugin::events.registration.guestsCount": "Número de Acompañantes / Invitados",
566
+ "content-manager.content-types.plugin::events.registration.status": "Estado",
567
+ "content-manager.content-types.plugin::events.registration.checkInToken": "Token de Registro de Asistencia (QR)",
568
+ "content-manager.content-types.plugin::events.registration.checkedInAt": "Fecha y Hora de Ingreso (Check-In)",
569
+ "content-manager.content-types.plugin::events.registration.notes": "Notas",
570
+ "content-manager.content-types.plugin::events.registration.metadata": "Metadatos Adicionales (JSON)",
571
+ "content-manager.content-types.plugin::events.registration.documentId": "ID del Documento",
572
+ "content-manager.enum.scheduled": "Programado",
573
+ "content-manager.enum.cancelled": "Cancelado",
574
+ "content-manager.enum.postponed": "Pospuesto",
575
+ "content-manager.enum.rescheduled": "Reprogramado",
576
+ "content-manager.enum.in_person": "Presencial",
577
+ "content-manager.enum.online": "En Línea (Virtual)",
578
+ "content-manager.enum.hybrid": "Híbrido (Presencial y Virtual)",
579
+ "content-manager.enum.confirmed": "Confirmado",
580
+ "content-manager.enum.waitlisted": "En Lista de Espera",
581
+ "content-manager.enum.checked_in": "Asistencia Registrada"
582
+ },
583
+ ar: {
584
+ "content-manager.content-types.plugin::events.event.title": "العنوان",
585
+ "content-manager.content-types.plugin::events.event.slug": "المسار المختصر (Slug)",
586
+ "content-manager.content-types.plugin::events.event.summary": "الملخص",
587
+ "content-manager.content-types.plugin::events.event.description": "الوصف",
588
+ "content-manager.content-types.plugin::events.event.startDate": "تاريخ ووقت البداية",
589
+ "content-manager.content-types.plugin::events.event.endDate": "تاريخ ووقت النهاية",
590
+ "content-manager.content-types.plugin::events.event.allDay": "فعالية طوال اليوم",
591
+ "content-manager.content-types.plugin::events.event.timezone": "المنطقة الزمنية",
592
+ "content-manager.content-types.plugin::events.event.recurrence": "جدول التكرار (RRULE)",
593
+ "content-manager.content-types.plugin::events.event.eventStatus": "حالة الفعالية",
594
+ "content-manager.content-types.plugin::events.event.locationType": "طريقة الحضور (نوع الموقع)",
595
+ "content-manager.content-types.plugin::events.event.location": "الموقع / القاعة",
596
+ "content-manager.content-types.plugin::events.event.virtualUrl": "رابط البث المباشر / الافتراضي (URL)",
597
+ "content-manager.content-types.plugin::events.event.category": "الفئة",
598
+ "content-manager.content-types.plugin::events.event.color": "اللون (Hex)",
599
+ "content-manager.content-types.plugin::events.event.featured": "مميز",
600
+ "content-manager.content-types.plugin::events.event.rsvpEnabled": "تفعيل التسجيل المسبق للحضور (RSVP)",
601
+ "content-manager.content-types.plugin::events.event.capacity": "السعة القصوى للمقاعد",
602
+ "content-manager.content-types.plugin::events.event.waitlistEnabled": "تفعيل قائمة الانتظار عند اكتمال العدد",
603
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration": "الحد الأقصى للضيوف لكل تسجيل",
604
+ "content-manager.content-types.plugin::events.event.registrationDeadline": "الموعد النهائي للتسجيل",
605
+ "content-manager.content-types.plugin::events.event.alternateDates": "التواريخ في التقاويم البديلة (JSON)",
606
+ "content-manager.content-types.plugin::events.event.poster": "ملصق الفعالية",
607
+ "content-manager.content-types.plugin::events.event.actionLinks": "روابط الإجراءات المخصصة (JSON)",
608
+ "content-manager.content-types.plugin::events.event.spotlightConfig": "إعدادات الإبراز في الصفحة الرئيسية",
609
+ "content-manager.content-types.plugin::events.event.metadata": "بيانات وصفية إضافية (JSON)",
610
+ "content-manager.content-types.plugin::events.event.hijriDate": "التاريخ الهجري",
611
+ "content-manager.content-types.plugin::events.event.timeLabel": "تسمية الوقت (مثال: 06:30 مساءً)",
612
+ "content-manager.content-types.plugin::events.event.imageUrl": "رابط الصورة الخارجي",
613
+ "content-manager.content-types.plugin::events.event.imageAlt": "النص البديل للصورة",
614
+ "content-manager.content-types.plugin::events.event.speaker": "المتحدث / المحاضر",
615
+ "content-manager.content-types.plugin::events.event.speakerProfile": "ملف المتحدث",
616
+ "content-manager.content-types.plugin::events.event.speakerSlug": "معرف المتحدث (Slug)",
617
+ "content-manager.content-types.plugin::events.event.documentId": "معرف المستند",
618
+ "content-manager.content-types.plugin::events.registration.eventUid": "معرف نوع محتوى الفعالية (UID)",
619
+ "content-manager.content-types.plugin::events.registration.eventDocumentId": "معرف مستند الفعالية",
620
+ "content-manager.content-types.plugin::events.registration.eventTitle": "عنوان الفعالية",
621
+ "content-manager.content-types.plugin::events.registration.occurrenceDate": "تاريخ انعقاد الجلسة",
622
+ "content-manager.content-types.plugin::events.registration.attendeeName": "الاسم الكامل للحاضر",
623
+ "content-manager.content-types.plugin::events.registration.attendeeEmail": "البريد الإلكتروني للحاضر",
624
+ "content-manager.content-types.plugin::events.registration.attendeePhone": "رقم هاتف الحاضر",
625
+ "content-manager.content-types.plugin::events.registration.guestsCount": "عدد المرافقين الإضافيين",
626
+ "content-manager.content-types.plugin::events.registration.status": "الحالة",
627
+ "content-manager.content-types.plugin::events.registration.checkInToken": "رمز تسجيل الدخول (QR)",
628
+ "content-manager.content-types.plugin::events.registration.checkedInAt": "تاريخ ووقت تسجيل الحضور",
629
+ "content-manager.content-types.plugin::events.registration.notes": "ملاحظات",
630
+ "content-manager.content-types.plugin::events.registration.metadata": "بيانات وصفية إضافية (JSON)",
631
+ "content-manager.content-types.plugin::events.registration.documentId": "معرف المستند",
632
+ "content-manager.enum.scheduled": "مجدول",
633
+ "content-manager.enum.cancelled": "ملغى",
634
+ "content-manager.enum.postponed": "مؤجل",
635
+ "content-manager.enum.rescheduled": "معاد جدولته",
636
+ "content-manager.enum.in_person": "حضوري",
637
+ "content-manager.enum.online": "عبر الإنترنت",
638
+ "content-manager.enum.hybrid": "هجين (حضوري وعبر الإنترنت)",
639
+ "content-manager.enum.confirmed": "مؤكد",
640
+ "content-manager.enum.waitlisted": "في قائمة الانتظار",
641
+ "content-manager.enum.checked_in": "تم تسجيل الحضور"
642
+ },
643
+ tr: {
644
+ "content-manager.content-types.plugin::events.event.title": "Başlık",
645
+ "content-manager.content-types.plugin::events.event.slug": "Kısa Ad (URL Slug)",
646
+ "content-manager.content-types.plugin::events.event.summary": "Özet",
647
+ "content-manager.content-types.plugin::events.event.description": "Açıklama",
648
+ "content-manager.content-types.plugin::events.event.startDate": "Başlangıç Tarihi ve Saati",
649
+ "content-manager.content-types.plugin::events.event.endDate": "Bitiş Tarihi ve Saati",
650
+ "content-manager.content-types.plugin::events.event.allDay": "Tüm Gün Etkinlik",
651
+ "content-manager.content-types.plugin::events.event.timezone": "Saat Dilimi",
652
+ "content-manager.content-types.plugin::events.event.recurrence": "Tekrarlama Programı (RRULE)",
653
+ "content-manager.content-types.plugin::events.event.eventStatus": "Etkinlik Durumu",
654
+ "content-manager.content-types.plugin::events.event.locationType": "Katılım Biçimi / Konum Türü",
655
+ "content-manager.content-types.plugin::events.event.location": "Konum / Mekan",
656
+ "content-manager.content-types.plugin::events.event.virtualUrl": "Çevrimiçi / Canlı Yayın Bağlantısı (URL)",
657
+ "content-manager.content-types.plugin::events.event.category": "Kategori",
658
+ "content-manager.content-types.plugin::events.event.color": "Renk (Hex)",
659
+ "content-manager.content-types.plugin::events.event.featured": "Öne Çıkan",
660
+ "content-manager.content-types.plugin::events.event.rsvpEnabled": "Ön Kayıt (LCV) Etkinleştir",
661
+ "content-manager.content-types.plugin::events.event.capacity": "Maksimum Katılımcı Kapasitesi",
662
+ "content-manager.content-types.plugin::events.event.waitlistEnabled": "Bekleme Listesini Etkinleştir",
663
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration": "Kayıt Başına Maksimum Misafir",
664
+ "content-manager.content-types.plugin::events.event.registrationDeadline": "Son Kayıt Tarihi",
665
+ "content-manager.content-types.plugin::events.event.alternateDates": "Alternatif Takvim Tarihleri (JSON)",
666
+ "content-manager.content-types.plugin::events.event.poster": "Etkinlik Afişi / Posteri",
667
+ "content-manager.content-types.plugin::events.event.actionLinks": "Özel Eylem Bağlantıları (JSON)",
668
+ "content-manager.content-types.plugin::events.event.spotlightConfig": "Ana Sayfa Vitrin Yapılandırması",
669
+ "content-manager.content-types.plugin::events.event.metadata": "Ek Meta Veriler (JSON)",
670
+ "content-manager.content-types.plugin::events.event.hijriDate": "Hicri Tarih",
671
+ "content-manager.content-types.plugin::events.event.timeLabel": "Saat Etiketi (örn. 18:30)",
672
+ "content-manager.content-types.plugin::events.event.imageUrl": "Harici Görsel URL",
673
+ "content-manager.content-types.plugin::events.event.imageAlt": "Görsel Alternatif Metni",
674
+ "content-manager.content-types.plugin::events.event.speaker": "Konuşmacı / Hatip",
675
+ "content-manager.content-types.plugin::events.event.speakerProfile": "Konuşmacı Profili",
676
+ "content-manager.content-types.plugin::events.event.speakerSlug": "Konuşmacı Kısa Adı (Slug)",
677
+ "content-manager.content-types.plugin::events.event.documentId": "Belge Kimliği (ID)",
678
+ "content-manager.content-types.plugin::events.registration.eventUid": "Etkinlik İçerik Türü Kimliği (UID)",
679
+ "content-manager.content-types.plugin::events.registration.eventDocumentId": "Etkinlik Belge Kimliği",
680
+ "content-manager.content-types.plugin::events.registration.eventTitle": "Etkinlik Başlığı",
681
+ "content-manager.content-types.plugin::events.registration.occurrenceDate": "Oturum / Etkinlik Tarihi",
682
+ "content-manager.content-types.plugin::events.registration.attendeeName": "Katılımcı Adı Soyadı",
683
+ "content-manager.content-types.plugin::events.registration.attendeeEmail": "Katılımcı E-posta Adresi",
684
+ "content-manager.content-types.plugin::events.registration.attendeePhone": "Katılımcı Telefon Numarası",
685
+ "content-manager.content-types.plugin::events.registration.guestsCount": "Ek Misafir Sayısı",
686
+ "content-manager.content-types.plugin::events.registration.status": "Durum",
687
+ "content-manager.content-types.plugin::events.registration.checkInToken": "QR Giriş Jetonu",
688
+ "content-manager.content-types.plugin::events.registration.checkedInAt": "Giriş Yapılma Tarihi ve Saati",
689
+ "content-manager.content-types.plugin::events.registration.notes": "Notlar",
690
+ "content-manager.content-types.plugin::events.registration.metadata": "Ek Meta Veriler (JSON)",
691
+ "content-manager.content-types.plugin::events.registration.documentId": "Belge Kimliği (ID)",
692
+ "content-manager.enum.scheduled": "Planlandı",
693
+ "content-manager.enum.cancelled": "İptal Edildi",
694
+ "content-manager.enum.postponed": "Ertelendi",
695
+ "content-manager.enum.rescheduled": "Yeniden Planlandı",
696
+ "content-manager.enum.in_person": "Yüz Yüze",
697
+ "content-manager.enum.online": "Çevrimiçi (Online)",
698
+ "content-manager.enum.hybrid": "Hibrit (Yüz Yüze ve Çevrimiçi)",
699
+ "content-manager.enum.confirmed": "Onaylandı",
700
+ "content-manager.enum.waitlisted": "Bekleme Listesinde",
701
+ "content-manager.enum.checked_in": "Giriş Yapıldı"
702
+ }
703
+ };
704
+ const CM_PLACEHOLDER_TRANSLATIONS = {
705
+ en: {
706
+ "content-manager.content-types.plugin::events.event.title.placeholder": "Enter title...",
707
+ "content-manager.content-types.plugin::events.event.slug.placeholder": "auto-generated-url-slug",
708
+ "content-manager.content-types.plugin::events.event.summary.placeholder": "Enter summary...",
709
+ "content-manager.content-types.plugin::events.event.description.placeholder": "Enter description...",
710
+ "content-manager.content-types.plugin::events.event.startDate.placeholder": "YYYY-MM-DD",
711
+ "content-manager.content-types.plugin::events.event.endDate.placeholder": "YYYY-MM-DD",
712
+ "content-manager.content-types.plugin::events.event.allDay.placeholder": "Enter all day event...",
713
+ "content-manager.content-types.plugin::events.event.timezone.placeholder": "America/Bogota",
714
+ "content-manager.content-types.plugin::events.event.recurrence.placeholder": "Enter recurrence schedule (rrule)...",
715
+ "content-manager.content-types.plugin::events.event.eventStatus.placeholder": "Enter event status...",
716
+ "content-manager.content-types.plugin::events.event.locationType.placeholder": "Enter attendance mode / location type...",
717
+ "content-manager.content-types.plugin::events.event.location.placeholder": "Enter location / venue...",
718
+ "content-manager.content-types.plugin::events.event.virtualUrl.placeholder": "https://...",
719
+ "content-manager.content-types.plugin::events.event.category.placeholder": "Enter category...",
720
+ "content-manager.content-types.plugin::events.event.color.placeholder": "#0F766E",
721
+ "content-manager.content-types.plugin::events.event.featured.placeholder": "Enter featured...",
722
+ "content-manager.content-types.plugin::events.event.rsvpEnabled.placeholder": "Enter enable rsvp registration...",
723
+ "content-manager.content-types.plugin::events.event.capacity.placeholder": "Enter maximum seat capacity...",
724
+ "content-manager.content-types.plugin::events.event.waitlistEnabled.placeholder": "Enter enable waitlist when full...",
725
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration.placeholder": "Enter max guests per registration...",
726
+ "content-manager.content-types.plugin::events.event.registrationDeadline.placeholder": "Enter registration deadline...",
727
+ "content-manager.content-types.plugin::events.event.alternateDates.placeholder": "Enter alternative calendar dates (json)...",
728
+ "content-manager.content-types.plugin::events.event.poster.placeholder": "Enter event poster / flyer...",
729
+ "content-manager.content-types.plugin::events.event.actionLinks.placeholder": "Enter custom action links (json)...",
730
+ "content-manager.content-types.plugin::events.event.spotlightConfig.placeholder": "Enter homepage spotlight configuration...",
731
+ "content-manager.content-types.plugin::events.event.metadata.placeholder": "Enter additional metadata (json)...",
732
+ "content-manager.content-types.plugin::events.event.hijriDate.placeholder": "e.g., 15 Ramadan 1447 AH",
733
+ "content-manager.content-types.plugin::events.event.timeLabel.placeholder": "e.g., 10:00 AM",
734
+ "content-manager.content-types.plugin::events.event.imageUrl.placeholder": "https://...",
735
+ "content-manager.content-types.plugin::events.event.imageAlt.placeholder": "Enter image alt text...",
736
+ "content-manager.content-types.plugin::events.event.speaker.placeholder": "Enter speaker / lecturer...",
737
+ "content-manager.content-types.plugin::events.event.speakerProfile.placeholder": "Enter speaker profile...",
738
+ "content-manager.content-types.plugin::events.event.speakerSlug.placeholder": "auto-generated-url-slug",
739
+ "content-manager.content-types.plugin::events.event.documentId.placeholder": "Enter document id...",
740
+ "content-manager.content-types.plugin::events.registration.eventUid.placeholder": "Enter event content-type uid...",
741
+ "content-manager.content-types.plugin::events.registration.eventDocumentId.placeholder": "Enter event document id...",
742
+ "content-manager.content-types.plugin::events.registration.eventTitle.placeholder": "Enter event title...",
743
+ "content-manager.content-types.plugin::events.registration.occurrenceDate.placeholder": "YYYY-MM-DD",
744
+ "content-manager.content-types.plugin::events.registration.attendeeName.placeholder": "Enter attendee full name...",
745
+ "content-manager.content-types.plugin::events.registration.attendeeEmail.placeholder": "attendee@example.org",
746
+ "content-manager.content-types.plugin::events.registration.attendeePhone.placeholder": "+57 310 555 0199",
747
+ "content-manager.content-types.plugin::events.registration.guestsCount.placeholder": "Enter number of additional guests...",
748
+ "content-manager.content-types.plugin::events.registration.status.placeholder": "Enter status...",
749
+ "content-manager.content-types.plugin::events.registration.checkInToken.placeholder": "Enter qr check-in token...",
750
+ "content-manager.content-types.plugin::events.registration.checkedInAt.placeholder": "Enter checked-in date & time...",
751
+ "content-manager.content-types.plugin::events.registration.notes.placeholder": "Enter notes...",
752
+ "content-manager.content-types.plugin::events.registration.metadata.placeholder": "Enter additional metadata (json)...",
753
+ "content-manager.content-types.plugin::events.registration.documentId.placeholder": "Enter document id..."
754
+ },
755
+ es: {
756
+ "content-manager.content-types.plugin::events.event.title.placeholder": "Ingresa título...",
757
+ "content-manager.content-types.plugin::events.event.slug.placeholder": "slug-generado-automaticamente",
758
+ "content-manager.content-types.plugin::events.event.summary.placeholder": "Ingresa resumen...",
759
+ "content-manager.content-types.plugin::events.event.description.placeholder": "Ingresa descripción...",
760
+ "content-manager.content-types.plugin::events.event.startDate.placeholder": "YYYY-MM-DD",
761
+ "content-manager.content-types.plugin::events.event.endDate.placeholder": "YYYY-MM-DD",
762
+ "content-manager.content-types.plugin::events.event.allDay.placeholder": "Ingresa todo el día...",
763
+ "content-manager.content-types.plugin::events.event.timezone.placeholder": "America/Bogota",
764
+ "content-manager.content-types.plugin::events.event.recurrence.placeholder": "Ingresa programación y recurrencia...",
765
+ "content-manager.content-types.plugin::events.event.eventStatus.placeholder": "Ingresa estado del evento...",
766
+ "content-manager.content-types.plugin::events.event.locationType.placeholder": "Ingresa modalidad de asistencia (tipo de ubicación)...",
767
+ "content-manager.content-types.plugin::events.event.location.placeholder": "Ingresa ubicación / lugar...",
768
+ "content-manager.content-types.plugin::events.event.virtualUrl.placeholder": "https://...",
769
+ "content-manager.content-types.plugin::events.event.category.placeholder": "Ingresa categoría...",
770
+ "content-manager.content-types.plugin::events.event.color.placeholder": "#0F766E",
771
+ "content-manager.content-types.plugin::events.event.featured.placeholder": "Ingresa destacado...",
772
+ "content-manager.content-types.plugin::events.event.rsvpEnabled.placeholder": "Ingresa habilitar inscripción previa (rsvp)...",
773
+ "content-manager.content-types.plugin::events.event.capacity.placeholder": "Ingresa cupo máximo de asistentes (capacidad)...",
774
+ "content-manager.content-types.plugin::events.event.waitlistEnabled.placeholder": "Ingresa habilitar lista de espera...",
775
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration.placeholder": "Ingresa máximo de invitados por inscripción...",
776
+ "content-manager.content-types.plugin::events.event.registrationDeadline.placeholder": "Ingresa fecha límite de inscripción...",
777
+ "content-manager.content-types.plugin::events.event.alternateDates.placeholder": "Ingresa fechas en calendarios alternativos (json)...",
778
+ "content-manager.content-types.plugin::events.event.poster.placeholder": "Ingresa afiche / póster del evento...",
779
+ "content-manager.content-types.plugin::events.event.actionLinks.placeholder": "Ingresa enlaces de acción personalizados (json)...",
780
+ "content-manager.content-types.plugin::events.event.spotlightConfig.placeholder": "Ingresa configuración de destacado en inicio...",
781
+ "content-manager.content-types.plugin::events.event.metadata.placeholder": "Ingresa metadatos adicionales (json)...",
782
+ "content-manager.content-types.plugin::events.event.hijriDate.placeholder": "ej., 15 Ramadán 1447 AH",
783
+ "content-manager.content-types.plugin::events.event.timeLabel.placeholder": "ej., 10:00 AM",
784
+ "content-manager.content-types.plugin::events.event.imageUrl.placeholder": "https://...",
785
+ "content-manager.content-types.plugin::events.event.imageAlt.placeholder": "Ingresa texto alternativo de imagen...",
786
+ "content-manager.content-types.plugin::events.event.speaker.placeholder": "Ingresa orador / conferencista...",
787
+ "content-manager.content-types.plugin::events.event.speakerProfile.placeholder": "Ingresa perfil del orador...",
788
+ "content-manager.content-types.plugin::events.event.speakerSlug.placeholder": "slug-generado-automaticamente",
789
+ "content-manager.content-types.plugin::events.event.documentId.placeholder": "Ingresa id del documento...",
790
+ "content-manager.content-types.plugin::events.registration.eventUid.placeholder": "Ingresa uid del tipo de contenido del evento...",
791
+ "content-manager.content-types.plugin::events.registration.eventDocumentId.placeholder": "Ingresa id del documento del evento...",
792
+ "content-manager.content-types.plugin::events.registration.eventTitle.placeholder": "Ingresa título del evento...",
793
+ "content-manager.content-types.plugin::events.registration.occurrenceDate.placeholder": "YYYY-MM-DD",
794
+ "content-manager.content-types.plugin::events.registration.attendeeName.placeholder": "Ingresa nombre completo del asistente...",
795
+ "content-manager.content-types.plugin::events.registration.attendeeEmail.placeholder": "attendee@example.org",
796
+ "content-manager.content-types.plugin::events.registration.attendeePhone.placeholder": "+57 310 555 0199",
797
+ "content-manager.content-types.plugin::events.registration.guestsCount.placeholder": "Ingresa número de acompañantes / invitados...",
798
+ "content-manager.content-types.plugin::events.registration.status.placeholder": "Ingresa estado...",
799
+ "content-manager.content-types.plugin::events.registration.checkInToken.placeholder": "Ingresa token de registro de asistencia (qr)...",
800
+ "content-manager.content-types.plugin::events.registration.checkedInAt.placeholder": "Ingresa fecha y hora de ingreso (check-in)...",
801
+ "content-manager.content-types.plugin::events.registration.notes.placeholder": "Ingresa notas...",
802
+ "content-manager.content-types.plugin::events.registration.metadata.placeholder": "Ingresa metadatos adicionales (json)...",
803
+ "content-manager.content-types.plugin::events.registration.documentId.placeholder": "Ingresa id del documento..."
804
+ },
805
+ ar: {
806
+ "content-manager.content-types.plugin::events.event.title.placeholder": "أدخل العنوان...",
807
+ "content-manager.content-types.plugin::events.event.slug.placeholder": "معرف-الرابط-التلقائي",
808
+ "content-manager.content-types.plugin::events.event.summary.placeholder": "أدخل الملخص...",
809
+ "content-manager.content-types.plugin::events.event.description.placeholder": "أدخل الوصف...",
810
+ "content-manager.content-types.plugin::events.event.startDate.placeholder": "YYYY-MM-DD",
811
+ "content-manager.content-types.plugin::events.event.endDate.placeholder": "YYYY-MM-DD",
812
+ "content-manager.content-types.plugin::events.event.allDay.placeholder": "أدخل فعالية طوال اليوم...",
813
+ "content-manager.content-types.plugin::events.event.timezone.placeholder": "America/Bogota",
814
+ "content-manager.content-types.plugin::events.event.recurrence.placeholder": "أدخل جدول التكرار (RRULE)...",
815
+ "content-manager.content-types.plugin::events.event.eventStatus.placeholder": "أدخل حالة الفعالية...",
816
+ "content-manager.content-types.plugin::events.event.locationType.placeholder": "أدخل طريقة الحضور (نوع الموقع)...",
817
+ "content-manager.content-types.plugin::events.event.location.placeholder": "أدخل الموقع / القاعة...",
818
+ "content-manager.content-types.plugin::events.event.virtualUrl.placeholder": "https://...",
819
+ "content-manager.content-types.plugin::events.event.category.placeholder": "أدخل الفئة...",
820
+ "content-manager.content-types.plugin::events.event.color.placeholder": "#0F766E",
821
+ "content-manager.content-types.plugin::events.event.featured.placeholder": "أدخل مميز...",
822
+ "content-manager.content-types.plugin::events.event.rsvpEnabled.placeholder": "أدخل تفعيل التسجيل المسبق للحضور (RSVP)...",
823
+ "content-manager.content-types.plugin::events.event.capacity.placeholder": "أدخل السعة القصوى للمقاعد...",
824
+ "content-manager.content-types.plugin::events.event.waitlistEnabled.placeholder": "أدخل تفعيل قائمة الانتظار عند اكتمال العدد...",
825
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration.placeholder": "أدخل الحد الأقصى للضيوف لكل تسجيل...",
826
+ "content-manager.content-types.plugin::events.event.registrationDeadline.placeholder": "أدخل الموعد النهائي للتسجيل...",
827
+ "content-manager.content-types.plugin::events.event.alternateDates.placeholder": "أدخل التواريخ في التقاويم البديلة (JSON)...",
828
+ "content-manager.content-types.plugin::events.event.poster.placeholder": "أدخل ملصق الفعالية...",
829
+ "content-manager.content-types.plugin::events.event.actionLinks.placeholder": "أدخل روابط الإجراءات المخصصة (JSON)...",
830
+ "content-manager.content-types.plugin::events.event.spotlightConfig.placeholder": "أدخل إعدادات الإبراز في الصفحة الرئيسية...",
831
+ "content-manager.content-types.plugin::events.event.metadata.placeholder": "أدخل بيانات وصفية إضافية (JSON)...",
832
+ "content-manager.content-types.plugin::events.event.hijriDate.placeholder": "مثال: ١٥ رمضان ١٤٤٧ هـ",
833
+ "content-manager.content-types.plugin::events.event.timeLabel.placeholder": "مثال: 10:00 صباحاً",
834
+ "content-manager.content-types.plugin::events.event.imageUrl.placeholder": "https://...",
835
+ "content-manager.content-types.plugin::events.event.imageAlt.placeholder": "أدخل النص البديل للصورة...",
836
+ "content-manager.content-types.plugin::events.event.speaker.placeholder": "أدخل المتحدث / المحاضر...",
837
+ "content-manager.content-types.plugin::events.event.speakerProfile.placeholder": "أدخل ملف المتحدث...",
838
+ "content-manager.content-types.plugin::events.event.speakerSlug.placeholder": "معرف-الرابط-التلقائي",
839
+ "content-manager.content-types.plugin::events.event.documentId.placeholder": "أدخل معرف المستند...",
840
+ "content-manager.content-types.plugin::events.registration.eventUid.placeholder": "أدخل معرف نوع محتوى الفعالية (UID)...",
841
+ "content-manager.content-types.plugin::events.registration.eventDocumentId.placeholder": "أدخل معرف مستند الفعالية...",
842
+ "content-manager.content-types.plugin::events.registration.eventTitle.placeholder": "أدخل عنوان الفعالية...",
843
+ "content-manager.content-types.plugin::events.registration.occurrenceDate.placeholder": "YYYY-MM-DD",
844
+ "content-manager.content-types.plugin::events.registration.attendeeName.placeholder": "أدخل الاسم الكامل للحاضر...",
845
+ "content-manager.content-types.plugin::events.registration.attendeeEmail.placeholder": "attendee@example.org",
846
+ "content-manager.content-types.plugin::events.registration.attendeePhone.placeholder": "+57 310 555 0199",
847
+ "content-manager.content-types.plugin::events.registration.guestsCount.placeholder": "أدخل عدد المرافقين الإضافيين...",
848
+ "content-manager.content-types.plugin::events.registration.status.placeholder": "أدخل الحالة...",
849
+ "content-manager.content-types.plugin::events.registration.checkInToken.placeholder": "أدخل رمز تسجيل الدخول (QR)...",
850
+ "content-manager.content-types.plugin::events.registration.checkedInAt.placeholder": "أدخل تاريخ ووقت تسجيل الحضور...",
851
+ "content-manager.content-types.plugin::events.registration.notes.placeholder": "أدخل ملاحظات...",
852
+ "content-manager.content-types.plugin::events.registration.metadata.placeholder": "أدخل بيانات وصفية إضافية (JSON)...",
853
+ "content-manager.content-types.plugin::events.registration.documentId.placeholder": "أدخل معرف المستند..."
854
+ },
855
+ tr: {
856
+ "content-manager.content-types.plugin::events.event.title.placeholder": "Başlık girin...",
857
+ "content-manager.content-types.plugin::events.event.slug.placeholder": "otomatik-url-kisa-adi",
858
+ "content-manager.content-types.plugin::events.event.summary.placeholder": "Özet girin...",
859
+ "content-manager.content-types.plugin::events.event.description.placeholder": "Açıklama girin...",
860
+ "content-manager.content-types.plugin::events.event.startDate.placeholder": "YYYY-MM-DD",
861
+ "content-manager.content-types.plugin::events.event.endDate.placeholder": "YYYY-MM-DD",
862
+ "content-manager.content-types.plugin::events.event.allDay.placeholder": "Tüm Gün Etkinlik girin...",
863
+ "content-manager.content-types.plugin::events.event.timezone.placeholder": "America/Bogota",
864
+ "content-manager.content-types.plugin::events.event.recurrence.placeholder": "Tekrarlama Programı (RRULE) girin...",
865
+ "content-manager.content-types.plugin::events.event.eventStatus.placeholder": "Etkinlik Durumu girin...",
866
+ "content-manager.content-types.plugin::events.event.locationType.placeholder": "Katılım Biçimi / Konum Türü girin...",
867
+ "content-manager.content-types.plugin::events.event.location.placeholder": "Konum / Mekan girin...",
868
+ "content-manager.content-types.plugin::events.event.virtualUrl.placeholder": "https://...",
869
+ "content-manager.content-types.plugin::events.event.category.placeholder": "Kategori girin...",
870
+ "content-manager.content-types.plugin::events.event.color.placeholder": "#0F766E",
871
+ "content-manager.content-types.plugin::events.event.featured.placeholder": "Öne Çıkan girin...",
872
+ "content-manager.content-types.plugin::events.event.rsvpEnabled.placeholder": "Ön Kayıt (LCV) Etkinleştir girin...",
873
+ "content-manager.content-types.plugin::events.event.capacity.placeholder": "Maksimum Katılımcı Kapasitesi girin...",
874
+ "content-manager.content-types.plugin::events.event.waitlistEnabled.placeholder": "Bekleme Listesini Etkinleştir girin...",
875
+ "content-manager.content-types.plugin::events.event.maxGuestsPerRegistration.placeholder": "Kayıt Başına Maksimum Misafir girin...",
876
+ "content-manager.content-types.plugin::events.event.registrationDeadline.placeholder": "Son Kayıt Tarihi girin...",
877
+ "content-manager.content-types.plugin::events.event.alternateDates.placeholder": "Alternatif Takvim Tarihleri (JSON) girin...",
878
+ "content-manager.content-types.plugin::events.event.poster.placeholder": "Etkinlik Afişi / Posteri girin...",
879
+ "content-manager.content-types.plugin::events.event.actionLinks.placeholder": "Özel Eylem Bağlantıları (JSON) girin...",
880
+ "content-manager.content-types.plugin::events.event.spotlightConfig.placeholder": "Ana Sayfa Vitrin Yapılandırması girin...",
881
+ "content-manager.content-types.plugin::events.event.metadata.placeholder": "Ek Meta Veriler (JSON) girin...",
882
+ "content-manager.content-types.plugin::events.event.hijriDate.placeholder": "örn., 15 Ramazan 1447 H",
883
+ "content-manager.content-types.plugin::events.event.timeLabel.placeholder": "örn., 10:00",
884
+ "content-manager.content-types.plugin::events.event.imageUrl.placeholder": "https://...",
885
+ "content-manager.content-types.plugin::events.event.imageAlt.placeholder": "Görsel Alternatif Metni girin...",
886
+ "content-manager.content-types.plugin::events.event.speaker.placeholder": "Konuşmacı / Hatip girin...",
887
+ "content-manager.content-types.plugin::events.event.speakerProfile.placeholder": "Konuşmacı Profili girin...",
888
+ "content-manager.content-types.plugin::events.event.speakerSlug.placeholder": "otomatik-url-kisa-adi",
889
+ "content-manager.content-types.plugin::events.event.documentId.placeholder": "Belge Kimliği (ID) girin...",
890
+ "content-manager.content-types.plugin::events.registration.eventUid.placeholder": "Etkinlik İçerik Türü Kimliği (UID) girin...",
891
+ "content-manager.content-types.plugin::events.registration.eventDocumentId.placeholder": "Etkinlik Belge Kimliği girin...",
892
+ "content-manager.content-types.plugin::events.registration.eventTitle.placeholder": "Etkinlik Başlığı girin...",
893
+ "content-manager.content-types.plugin::events.registration.occurrenceDate.placeholder": "YYYY-MM-DD",
894
+ "content-manager.content-types.plugin::events.registration.attendeeName.placeholder": "Katılımcı Adı Soyadı girin...",
895
+ "content-manager.content-types.plugin::events.registration.attendeeEmail.placeholder": "attendee@example.org",
896
+ "content-manager.content-types.plugin::events.registration.attendeePhone.placeholder": "+57 310 555 0199",
897
+ "content-manager.content-types.plugin::events.registration.guestsCount.placeholder": "Ek Misafir Sayısı girin...",
898
+ "content-manager.content-types.plugin::events.registration.status.placeholder": "Durum girin...",
899
+ "content-manager.content-types.plugin::events.registration.checkInToken.placeholder": "QR Giriş Jetonu girin...",
900
+ "content-manager.content-types.plugin::events.registration.checkedInAt.placeholder": "Giriş Yapılma Tarihi ve Saati girin...",
901
+ "content-manager.content-types.plugin::events.registration.notes.placeholder": "Notlar girin...",
902
+ "content-manager.content-types.plugin::events.registration.metadata.placeholder": "Ek Meta Veriler (JSON) girin...",
903
+ "content-manager.content-types.plugin::events.registration.documentId.placeholder": "Belge Kimliği (ID) girin..."
904
+ }
905
+ };
906
+ const SUPPORTED_LOCALES = [
907
+ "en",
908
+ "es",
909
+ "fr",
910
+ "de",
911
+ "pt",
912
+ "it",
913
+ "nl",
914
+ "pl",
915
+ "tr",
916
+ "ar"
917
+ ];
918
+ function pickLocaleRecord(dict, locale, baseLang) {
919
+ if (Object.hasOwn(dict, locale)) {
920
+ return dict[locale];
921
+ }
922
+ if (Object.hasOwn(dict, baseLang)) {
923
+ return dict[baseLang];
924
+ }
925
+ return dict.en;
926
+ }
927
+ const index = {
928
+ register(app) {
929
+ app.addMenuLink({
930
+ to: `plugins/${PLUGIN_ID}`,
931
+ icon: PluginIcon,
932
+ intlLabel: {
933
+ id: `${PLUGIN_ID}.plugin.name`,
934
+ defaultMessage: "Events & RSVPs"
935
+ },
936
+ Component: () => import("./CalendarPage-Dz7g19qp.mjs").then((m) => ({ default: m.default })),
937
+ permissions: pluginPermissions.read
938
+ });
939
+ app.registerPlugin({
940
+ id: PLUGIN_ID,
941
+ initializer: Initializer,
942
+ isReady: false,
943
+ name: PLUGIN_ID
944
+ });
945
+ app.customFields.register(
946
+ rruleField
947
+ );
948
+ const calendarSuiteSection = {
949
+ id: "calendar",
950
+ intlLabel: {
951
+ id: "calendar.settings.section",
952
+ defaultMessage: "Calendar, Events & Bookings"
953
+ }
954
+ };
955
+ const eventsSettingsLink = {
956
+ intlLabel: {
957
+ id: `${PLUGIN_ID}.settings.menuLabel`,
958
+ defaultMessage: "Events & RSVPs"
959
+ },
960
+ id: `${PLUGIN_ID}-settings`,
961
+ to: `${PLUGIN_ID}`,
962
+ Component: () => import("./SettingsPage-CNG9AEO_.mjs").then((m) => ({ default: m.default })),
963
+ permissions: pluginPermissions.settings
964
+ };
965
+ const maybeApp = app;
966
+ try {
967
+ if (typeof maybeApp.addSettingsLink === "function") {
968
+ maybeApp.addSettingsLink(calendarSuiteSection.id, eventsSettingsLink);
969
+ } else if (typeof maybeApp.createSettingSection === "function") {
970
+ maybeApp.createSettingSection(calendarSuiteSection, [
971
+ eventsSettingsLink
972
+ ]);
973
+ }
974
+ } catch {
975
+ maybeApp.createSettingSection?.(calendarSuiteSection, [
976
+ eventsSettingsLink
977
+ ]);
978
+ }
979
+ },
980
+ bootstrap(app) {
981
+ const cmPlugin = app.getPlugin("content-manager");
982
+ const apis = cmPlugin?.apis;
983
+ if (apis && typeof apis.addEditViewSidePanel === "function") {
984
+ apis.addEditViewSidePanel([EventSidePanel]);
985
+ }
986
+ },
987
+ registerTrads: createRegisterTrads({
988
+ pluginId: PLUGIN_ID,
989
+ defaultLocales: ["en", "es", "ar", "tr"],
990
+ supportedLocales: SUPPORTED_LOCALES,
991
+ loadTranslation: (locale) => __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => import("./ar-tWKEvJLB.mjs"), "./translations/de.json": () => import("./de-OdbJEFs0.mjs"), "./translations/en.json": () => import("./en-Dskn9ZPa.mjs"), "./translations/es.json": () => import("./es-DcMsMHrI.mjs"), "./translations/fr.json": () => import("./fr-BTEIPOFw.mjs"), "./translations/it.json": () => import("./it-CAxPpL_9.mjs"), "./translations/nl.json": () => import("./nl-CS1aUfT7.mjs"), "./translations/pl.json": () => import("./pl-BfmBU9FW.mjs"), "./translations/pt.json": () => import("./pt-DdulKcbk.mjs"), "./translations/tr.json": () => import("./tr-Bp50qvL8.mjs") }), `./translations/${locale}.json`, 3),
992
+ getBaseTranslations: (locale) => {
993
+ const baseLang = locale.split("-")[0] ?? "en";
994
+ return {
995
+ ...pickLocaleRecord(CM_LABEL_TRANSLATIONS, locale, baseLang),
996
+ ...pickLocaleRecord(CM_PLACEHOLDER_TRANSLATIONS, locale, baseLang)
997
+ };
998
+ }
999
+ })
1000
+ };
1001
+ export {
1002
+ PLUGIN_ID as P,
1003
+ SUPPORTED_LOCALES as S,
1004
+ index as i,
1005
+ pluginPermissions as p
1006
+ };