chore: sync GovOPlaN module split state
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@govoplan/core-webui": "^0.1.6",
|
||||
"lucide-react": "^0.555.0",
|
||||
"lucide-react": "^1.23.0",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-router-dom": "^7.1.1",
|
||||
|
||||
@@ -55,6 +55,117 @@ export type CalendarEvent = {
|
||||
|
||||
export type CalendarCollectionListResponse = { calendars: CalendarCollection[] };
|
||||
export type CalendarEventListResponse = { events: CalendarEvent[] };
|
||||
export type CalendarDeltaDeletedItem = { id: string; resource_type?: string | null; revision?: string | null; deleted_at?: string | null };
|
||||
export type CalendarEventDeltaResponse = {
|
||||
events: CalendarEvent[];
|
||||
deleted: CalendarDeltaDeletedItem[];
|
||||
watermark?: string | null;
|
||||
has_more: boolean;
|
||||
full: boolean;
|
||||
};
|
||||
|
||||
export type CalendarCalDavAuthType = "none" | "basic" | "bearer";
|
||||
export type CalendarCalDavSyncDirection = "inbound" | "two_way";
|
||||
export type CalendarCalDavConflictPolicy = "etag" | "overwrite";
|
||||
export type CalendarSyncSourceKind = "caldav" | "ics" | "webcal" | "graph" | "ews";
|
||||
|
||||
export type CalendarSyncSource = {
|
||||
id: string;
|
||||
tenant_id: string;
|
||||
calendar_id: string;
|
||||
source_kind: CalendarSyncSourceKind;
|
||||
collection_url: string;
|
||||
display_name?: string | null;
|
||||
auth_type: CalendarCalDavAuthType;
|
||||
username?: string | null;
|
||||
credential_ref?: string | null;
|
||||
has_credential: boolean;
|
||||
sync_enabled: boolean;
|
||||
sync_interval_seconds: number;
|
||||
sync_direction: CalendarCalDavSyncDirection;
|
||||
conflict_policy: CalendarCalDavConflictPolicy;
|
||||
sync_token?: string | null;
|
||||
ctag?: string | null;
|
||||
last_attempt_at?: string | null;
|
||||
last_synced_at?: string | null;
|
||||
next_sync_at?: string | null;
|
||||
last_status?: string | null;
|
||||
last_error?: string | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
};
|
||||
|
||||
export type CalendarCalDavSource = CalendarSyncSource;
|
||||
export type CalendarSyncSourceListResponse = { sources: CalendarSyncSource[] };
|
||||
export type CalendarCalDavSourceListResponse = { sources: CalendarCalDavSource[] };
|
||||
|
||||
export type CalendarCalDavDiscoveryCandidate = {
|
||||
collection_url: string;
|
||||
href: string;
|
||||
display_name?: string | null;
|
||||
color?: string | null;
|
||||
ctag?: string | null;
|
||||
sync_token?: string | null;
|
||||
};
|
||||
|
||||
export type CalendarCalDavDiscoveryPayload = {
|
||||
url: string;
|
||||
source_id?: string | null;
|
||||
auth_type?: CalendarCalDavAuthType | null;
|
||||
username?: string | null;
|
||||
credential_ref?: string | null;
|
||||
password?: string | null;
|
||||
bearer_token?: string | null;
|
||||
};
|
||||
|
||||
export type CalendarCalDavDiscoveryResponse = { calendars: CalendarCalDavDiscoveryCandidate[] };
|
||||
|
||||
export type CalendarSyncSourceCreatePayload = {
|
||||
source_kind?: CalendarSyncSourceKind;
|
||||
calendar_id: string;
|
||||
collection_url: string;
|
||||
display_name?: string | null;
|
||||
auth_type?: CalendarCalDavAuthType;
|
||||
username?: string | null;
|
||||
credential_ref?: string | null;
|
||||
password?: string | null;
|
||||
bearer_token?: string | null;
|
||||
sync_enabled?: boolean;
|
||||
sync_interval_seconds?: number;
|
||||
sync_direction?: CalendarCalDavSyncDirection;
|
||||
conflict_policy?: CalendarCalDavConflictPolicy;
|
||||
metadata?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type CalendarCalDavSourceCreatePayload = CalendarSyncSourceCreatePayload;
|
||||
|
||||
export type CalendarCalDavSourceUpdatePayload = Partial<CalendarCalDavSourceCreatePayload>;
|
||||
export type CalendarSyncSourceUpdatePayload = Partial<CalendarSyncSourceCreatePayload>;
|
||||
|
||||
export type CalendarSyncSourceSyncPayload = {
|
||||
password?: string | null;
|
||||
bearer_token?: string | null;
|
||||
force_full?: boolean;
|
||||
};
|
||||
|
||||
export type CalendarCalDavSyncPayload = CalendarSyncSourceSyncPayload;
|
||||
|
||||
export type CalendarSyncSourceSyncResponse = {
|
||||
source: CalendarSyncSource;
|
||||
created: number;
|
||||
updated: number;
|
||||
deleted: number;
|
||||
unchanged: number;
|
||||
fetched: number;
|
||||
full_sync: boolean;
|
||||
used_sync_token: boolean;
|
||||
sync_token?: string | null;
|
||||
ctag?: string | null;
|
||||
errors: string[];
|
||||
};
|
||||
|
||||
export type CalendarCalDavSyncResponse = CalendarSyncSourceSyncResponse;
|
||||
|
||||
export type CalendarCollectionCreatePayload = {
|
||||
name: string;
|
||||
@@ -79,17 +190,34 @@ export type CalendarCollectionDeletePayload = {
|
||||
|
||||
export type CalendarEventCreatePayload = {
|
||||
calendar_id?: string | null;
|
||||
uid?: string | null;
|
||||
recurrence_id?: string | null;
|
||||
sequence?: number;
|
||||
summary: string;
|
||||
description?: string | null;
|
||||
location?: string | null;
|
||||
start_at: string;
|
||||
end_at?: string | null;
|
||||
all_day?: boolean;
|
||||
timezone?: string | null;
|
||||
status?: string;
|
||||
transparency?: string;
|
||||
classification?: string;
|
||||
start_at: string;
|
||||
end_at?: string | null;
|
||||
duration_seconds?: number | null;
|
||||
all_day?: boolean;
|
||||
timezone?: string | null;
|
||||
organizer?: Record<string, unknown> | null;
|
||||
attendees?: Record<string, unknown>[];
|
||||
categories?: string[];
|
||||
rrule?: Record<string, unknown> | null;
|
||||
rdate?: Record<string, unknown>[];
|
||||
exdate?: Record<string, unknown>[];
|
||||
reminders?: Record<string, unknown>[];
|
||||
attachments?: Record<string, unknown>[];
|
||||
related_to?: Record<string, unknown>[];
|
||||
source_kind?: string;
|
||||
source_href?: string | null;
|
||||
etag?: string | null;
|
||||
icalendar?: Record<string, unknown>;
|
||||
metadata?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type CalendarEventUpdatePayload = Partial<CalendarEventCreatePayload>;
|
||||
@@ -110,6 +238,57 @@ export function deleteCalendar(settings: ApiSettings, calendarId: string, payloa
|
||||
return apiFetch<void>(settings, `/api/v1/calendar/calendars/${calendarId}`, { method: "DELETE", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function listSyncSources(settings: ApiSettings, params: { calendar_id?: string; source_kind?: CalendarSyncSourceKind } = {}): Promise<CalendarSyncSourceListResponse> {
|
||||
const search = new URLSearchParams();
|
||||
if (params.calendar_id) search.set("calendar_id", params.calendar_id);
|
||||
if (params.source_kind) search.set("source_kind", params.source_kind);
|
||||
const suffix = search.toString() ? `?${search.toString()}` : "";
|
||||
return apiFetch<CalendarSyncSourceListResponse>(settings, `/api/v1/calendar/sync-sources${suffix}`);
|
||||
}
|
||||
|
||||
export function listCalDavSources(settings: ApiSettings, params: { calendar_id?: string } = {}): Promise<CalendarCalDavSourceListResponse> {
|
||||
const search = new URLSearchParams();
|
||||
if (params.calendar_id) search.set("calendar_id", params.calendar_id);
|
||||
const suffix = search.toString() ? `?${search.toString()}` : "";
|
||||
return apiFetch<CalendarCalDavSourceListResponse>(settings, `/api/v1/calendar/caldav/sources${suffix}`);
|
||||
}
|
||||
|
||||
export function discoverCalDavCalendars(settings: ApiSettings, payload: CalendarCalDavDiscoveryPayload): Promise<CalendarCalDavDiscoveryResponse> {
|
||||
return apiFetch<CalendarCalDavDiscoveryResponse>(settings, "/api/v1/calendar/caldav/discover", { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function createSyncSource(settings: ApiSettings, payload: CalendarSyncSourceCreatePayload): Promise<CalendarSyncSource> {
|
||||
return apiFetch<CalendarSyncSource>(settings, "/api/v1/calendar/sync-sources", { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function createCalDavSource(settings: ApiSettings, payload: CalendarCalDavSourceCreatePayload): Promise<CalendarCalDavSource> {
|
||||
return apiFetch<CalendarCalDavSource>(settings, "/api/v1/calendar/caldav/sources", { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function updateSyncSource(settings: ApiSettings, sourceId: string, payload: CalendarSyncSourceUpdatePayload): Promise<CalendarSyncSource> {
|
||||
return apiFetch<CalendarSyncSource>(settings, `/api/v1/calendar/sync-sources/${sourceId}`, { method: "PATCH", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function updateCalDavSource(settings: ApiSettings, sourceId: string, payload: CalendarCalDavSourceUpdatePayload): Promise<CalendarCalDavSource> {
|
||||
return apiFetch<CalendarCalDavSource>(settings, `/api/v1/calendar/caldav/sources/${sourceId}`, { method: "PATCH", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function deleteSyncSource(settings: ApiSettings, sourceId: string): Promise<void> {
|
||||
return apiFetch<void>(settings, `/api/v1/calendar/sync-sources/${sourceId}`, { method: "DELETE" });
|
||||
}
|
||||
|
||||
export function deleteCalDavSource(settings: ApiSettings, sourceId: string): Promise<void> {
|
||||
return apiFetch<void>(settings, `/api/v1/calendar/caldav/sources/${sourceId}`, { method: "DELETE" });
|
||||
}
|
||||
|
||||
export function syncSyncSource(settings: ApiSettings, sourceId: string, payload: CalendarSyncSourceSyncPayload = {}): Promise<CalendarSyncSourceSyncResponse> {
|
||||
return apiFetch<CalendarSyncSourceSyncResponse>(settings, `/api/v1/calendar/sync-sources/${sourceId}/sync`, { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function syncCalDavSource(settings: ApiSettings, sourceId: string, payload: CalendarCalDavSyncPayload = {}): Promise<CalendarCalDavSyncResponse> {
|
||||
return apiFetch<CalendarCalDavSyncResponse>(settings, `/api/v1/calendar/caldav/sources/${sourceId}/sync`, { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
export function listCalendarEvents(
|
||||
settings: ApiSettings,
|
||||
params: { calendar_id?: string; start_at?: string; end_at?: string } = {}
|
||||
@@ -122,6 +301,20 @@ export function listCalendarEvents(
|
||||
return apiFetch<CalendarEventListResponse>(settings, `/api/v1/calendar/events${suffix}`);
|
||||
}
|
||||
|
||||
export function listCalendarEventsDelta(
|
||||
settings: ApiSettings,
|
||||
params: { calendar_id?: string; start_at?: string; end_at?: string; since?: string | null; limit?: number } = {}
|
||||
): Promise<CalendarEventDeltaResponse> {
|
||||
const search = new URLSearchParams();
|
||||
if (params.calendar_id) search.set("calendar_id", params.calendar_id);
|
||||
if (params.start_at) search.set("start_at", params.start_at);
|
||||
if (params.end_at) search.set("end_at", params.end_at);
|
||||
if (params.since) search.set("since", params.since);
|
||||
if (params.limit) search.set("limit", String(params.limit));
|
||||
const suffix = search.toString() ? `?${search.toString()}` : "";
|
||||
return apiFetch<CalendarEventDeltaResponse>(settings, `/api/v1/calendar/events/delta${suffix}`);
|
||||
}
|
||||
|
||||
export function createCalendarEvent(settings: ApiSettings, payload: CalendarEventCreatePayload): Promise<CalendarEvent> {
|
||||
return apiFetch<CalendarEvent>(settings, "/api/v1/calendar/events", { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
358
webui/src/i18n/generatedTranslations.ts
Normal file
358
webui/src/i18n/generatedTranslations.ts
Normal file
@@ -0,0 +1,358 @@
|
||||
import type { PlatformTranslations } from "@govoplan/core-webui";
|
||||
|
||||
export const generatedTranslations: PlatformTranslations = {
|
||||
"en": {
|
||||
"i18n:govoplan-calendar.add_calendar.124c55eb": "Add calendar...",
|
||||
"i18n:govoplan-calendar.add_calendar.8fadb5bc": "Add calendar",
|
||||
"i18n:govoplan-calendar.add.61cc55aa": "Add",
|
||||
"i18n:govoplan-calendar.advanced.4d064726": "Advanced",
|
||||
"i18n:govoplan-calendar.agenda.891e9d6d": "Agenda",
|
||||
"i18n:govoplan-calendar.all_day.11457433": "All day",
|
||||
"i18n:govoplan-calendar.attachments_json.d91abf3c": "Attachments JSON",
|
||||
"i18n:govoplan-calendar.attachments.6771ade6": "Attachments",
|
||||
"i18n:govoplan-calendar.attendees_json.aeb487bb": "Attendees JSON",
|
||||
"i18n:govoplan-calendar.attendees.a45a0962": "Attendees",
|
||||
"i18n:govoplan-calendar.authentication.ee1acfa5": "Authentication",
|
||||
"i18n:govoplan-calendar.automatic_sync.084644b2": "Automatic sync",
|
||||
"i18n:govoplan-calendar.basic.aa2c96da": "Basic",
|
||||
"i18n:govoplan-calendar.bearer_token.ffa64bcf": "Bearer token",
|
||||
"i18n:govoplan-calendar.caldav_source.459ed16a": "CalDAV source",
|
||||
"i18n:govoplan-calendar.caldav.64f9720e": "CalDAV",
|
||||
"i18n:govoplan-calendar.calendar_controls.974f4fa1": "Calendar controls",
|
||||
"i18n:govoplan-calendar.calendar_navigation.7ba43cd2": "Calendar navigation",
|
||||
"i18n:govoplan-calendar.calendar_request_failed.ae8a54f4": "Calendar request failed.",
|
||||
"i18n:govoplan-calendar.calendar_source_type.92cdb42f": "Calendar source type",
|
||||
"i18n:govoplan-calendar.calendar_views.9e6b9c2b": "Calendar views",
|
||||
"i18n:govoplan-calendar.calendar.adab5090": "Calendar",
|
||||
"i18n:govoplan-calendar.calendars.94445018": "Calendars",
|
||||
"i18n:govoplan-calendar.cancel.77dfd213": "Cancel",
|
||||
"i18n:govoplan-calendar.cancelled.5587b0af": "CANCELLED",
|
||||
"i18n:govoplan-calendar.categories.6ccb6007": "Categories",
|
||||
"i18n:govoplan-calendar.change_end_time.db66ef4b": "Change end time",
|
||||
"i18n:govoplan-calendar.change_start_time.06eea3d3": "Change start time",
|
||||
"i18n:govoplan-calendar.class.41ff354b": "Class",
|
||||
"i18n:govoplan-calendar.color.1d0c8304": "Color",
|
||||
"i18n:govoplan-calendar.confidential.84c9cc88": "CONFIDENTIAL",
|
||||
"i18n:govoplan-calendar.configured.668c5fff": "Configured",
|
||||
"i18n:govoplan-calendar.confirm_delete.c9f2829e": "Confirm delete",
|
||||
"i18n:govoplan-calendar.confirmed.0542404a": "CONFIRMED",
|
||||
"i18n:govoplan-calendar.conflict_policy.5810e150": "Conflict policy",
|
||||
"i18n:govoplan-calendar.continuous.04f2ccda": "Continuous",
|
||||
"i18n:govoplan-calendar.credential_reference.a7e92de5": "Credential reference",
|
||||
"i18n:govoplan-calendar.credential.8bede3ea": "Credential",
|
||||
"i18n:govoplan-calendar.dav_url.4205e180": "DAV URL",
|
||||
"i18n:govoplan-calendar.day.987b9ced": "Day",
|
||||
"i18n:govoplan-calendar.delete_events_with_this_calendar.cc0e1287": "Delete events with this calendar",
|
||||
"i18n:govoplan-calendar.delete.f6fdbe48": "Delete",
|
||||
"i18n:govoplan-calendar.deleting.2cda36c9": "Deleting",
|
||||
"i18n:govoplan-calendar.description.55f8ebc8": "Description",
|
||||
"i18n:govoplan-calendar.direction.fd8e45ba": "Direction",
|
||||
"i18n:govoplan-calendar.discover.4827ea22": "Discover",
|
||||
"i18n:govoplan-calendar.discovering.1884f689": "Discovering...",
|
||||
"i18n:govoplan-calendar.display_name.c7874aaa": "Display name",
|
||||
"i18n:govoplan-calendar.duration_must_be_greater_than_zero.519292f7": "Duration must be greater than zero.",
|
||||
"i18n:govoplan-calendar.duration_seconds.19d42eeb": "Duration seconds",
|
||||
"i18n:govoplan-calendar.duration.1370004d": "Duration",
|
||||
"i18n:govoplan-calendar.edit_calendar.a47a2a7a": "Edit calendar",
|
||||
"i18n:govoplan-calendar.edit_event.a7028454": "Edit event",
|
||||
"i18n:govoplan-calendar.edit_value.fad75899": "Edit {value0}",
|
||||
"i18n:govoplan-calendar.end_date_and_time_must_be_after_start_date_and_t.daf31831": "End date and time must be after start date and time.",
|
||||
"i18n:govoplan-calendar.end_date_must_be_on_or_after_start_date.a2518865": "End date must be on or after start date.",
|
||||
"i18n:govoplan-calendar.end_date.89d10cd6": "End date",
|
||||
"i18n:govoplan-calendar.end_mode.5a06de37": "End mode",
|
||||
"i18n:govoplan-calendar.end_time.cd7800da": "End time",
|
||||
"i18n:govoplan-calendar.enter_a_secret_now_or_use_an_environment_referen.6db0e6ce": "Enter a secret now or use an environment reference such as",
|
||||
"i18n:govoplan-calendar.etag.11d00f6e": "ETag",
|
||||
"i18n:govoplan-calendar.event": "event",
|
||||
"i18n:govoplan-calendar.event_count_could_not_be_loaded_the_backend_will.163ff055": "Event count could not be loaded. The backend will still apply the selected delete action.",
|
||||
"i18n:govoplan-calendar.events": "events",
|
||||
"i18n:govoplan-calendar.events_are_stored_in_govoplan_and_are_not_synced.3660e504": "Events are stored in GovOPlaN and are not synced to an external calendar source.",
|
||||
"i18n:govoplan-calendar.ews_endpoint.a3273983": "EWS endpoint",
|
||||
"i18n:govoplan-calendar.exchange_web_services_source.53caabf3": "Exchange Web Services source",
|
||||
"i18n:govoplan-calendar.exchange.5b13eac7": "Exchange",
|
||||
"i18n:govoplan-calendar.exdate_json.7d0c538d": "EXDATE JSON",
|
||||
"i18n:govoplan-calendar.fri.bbd6e32e": "Fri",
|
||||
"i18n:govoplan-calendar.full_sync.21b89c76": "Full sync",
|
||||
"i18n:govoplan-calendar.graph_calendar_url.e59607f3": "Graph calendar URL",
|
||||
"i18n:govoplan-calendar.graph.9a7405eb": "Graph",
|
||||
"i18n:govoplan-calendar.icalendar_json.fb6cc33e": "iCalendar JSON",
|
||||
"i18n:govoplan-calendar.icalendar.f388476d": "iCalendar",
|
||||
"i18n:govoplan-calendar.ics_webcal_subscription.03bc0d63": "ICS/webcal subscription",
|
||||
"i18n:govoplan-calendar.ics_webcal.9c55b570": "ICS/webcal",
|
||||
"i18n:govoplan-calendar.identity.7e5a975b": "Identity",
|
||||
"i18n:govoplan-calendar.inbound_only.bf4269b0": "Inbound only",
|
||||
"i18n:govoplan-calendar.interval.011efcd5": "Interval",
|
||||
"i18n:govoplan-calendar.last_attempt.82aee111": "Last attempt",
|
||||
"i18n:govoplan-calendar.last_sync.ef0ef267": "Last sync",
|
||||
"i18n:govoplan-calendar.loading_calendar.7eb8f548": "Loading calendar...",
|
||||
"i18n:govoplan-calendar.loading_event_count.716ad3c2": "Loading event count...",
|
||||
"i18n:govoplan-calendar.local_calendar.ed3f72f8": "Local calendar",
|
||||
"i18n:govoplan-calendar.local.dc99d54d": "Local",
|
||||
"i18n:govoplan-calendar.location.d219c681": "Location",
|
||||
"i18n:govoplan-calendar.make_target_calendar_the_default.10a3977b": "Make target calendar the default",
|
||||
"i18n:govoplan-calendar.managing_sync_sources_requires_calendar_administ.835e29fa": "Managing sync sources requires calendar administration rights.",
|
||||
"i18n:govoplan-calendar.metadata_json.b0e4c283": "Metadata JSON",
|
||||
"i18n:govoplan-calendar.metadata.251edc0e": "Metadata",
|
||||
"i18n:govoplan-calendar.microsoft_graph_source.ec4f1383": "Microsoft Graph source",
|
||||
"i18n:govoplan-calendar.mon.24b2a099": "Mon",
|
||||
"i18n:govoplan-calendar.month.082bc378": "Month",
|
||||
"i18n:govoplan-calendar.move_events_to_another_calendar.830c7b09": "Move events to another calendar",
|
||||
"i18n:govoplan-calendar.name.709a2322": "Name",
|
||||
"i18n:govoplan-calendar.never.80c3052d": "Never",
|
||||
"i18n:govoplan-calendar.new_event.2ef3795c": "New event",
|
||||
"i18n:govoplan-calendar.new.6403f2b7": "New",
|
||||
"i18n:govoplan-calendar.next_sync.88c7af72": "Next sync",
|
||||
"i18n:govoplan-calendar.next.bc981983": "Next",
|
||||
"i18n:govoplan-calendar.no_calendar_collections_found.6453624a": "No calendar collections found.",
|
||||
"i18n:govoplan-calendar.no_calendars.3a7e4a7a": "No calendars",
|
||||
"i18n:govoplan-calendar.no_events.e339ba73": "No events",
|
||||
"i18n:govoplan-calendar.none.6eef6648": "None",
|
||||
"i18n:govoplan-calendar.not_configured.811931bb": "Not configured",
|
||||
"i18n:govoplan-calendar.not_scheduled.9c367369": "Not scheduled",
|
||||
"i18n:govoplan-calendar.not_synced.4c205136": "Not synced",
|
||||
"i18n:govoplan-calendar.opaque.3e1d0194": "OPAQUE",
|
||||
"i18n:govoplan-calendar.organizer_json.3add6f9f": "Organizer JSON",
|
||||
"i18n:govoplan-calendar.organizer.debd1720": "Organizer",
|
||||
"i18n:govoplan-calendar.overwrite_remote.39625e32": "Overwrite remote",
|
||||
"i18n:govoplan-calendar.participants.cd56e083": "Participants",
|
||||
"i18n:govoplan-calendar.password.8be3c943": "Password",
|
||||
"i18n:govoplan-calendar.previous.50f94286": "Previous",
|
||||
"i18n:govoplan-calendar.private.b0b7ba46": "PRIVATE",
|
||||
"i18n:govoplan-calendar.public.d1785ca2": "PUBLIC",
|
||||
"i18n:govoplan-calendar.raw.da433cd4": "Raw",
|
||||
"i18n:govoplan-calendar.rdate_json.5b51fca4": "RDATE JSON",
|
||||
"i18n:govoplan-calendar.recurrence_id.e0b780ba": "Recurrence ID",
|
||||
"i18n:govoplan-calendar.recurrence.f7ad40f5": "Recurrence",
|
||||
"i18n:govoplan-calendar.refresh.56e3badc": "Refresh",
|
||||
"i18n:govoplan-calendar.related_to_json.2d4e8f59": "Related-To JSON",
|
||||
"i18n:govoplan-calendar.related_to.0e7989ff": "Related-To",
|
||||
"i18n:govoplan-calendar.related.917df91e": "Related",
|
||||
"i18n:govoplan-calendar.reminders_json.ca25e08f": "Reminders JSON",
|
||||
"i18n:govoplan-calendar.reminders.ae8c3939": "Reminders",
|
||||
"i18n:govoplan-calendar.remove_local_events_with_this_calendar.fb8831e1": "Remove local events with this calendar",
|
||||
"i18n:govoplan-calendar.remove.e963907d": "Remove",
|
||||
"i18n:govoplan-calendar.removing.b7d2c38b": "Removing",
|
||||
"i18n:govoplan-calendar.replace_password.3f912c9c": "Replace password",
|
||||
"i18n:govoplan-calendar.replace_token.bbeee6a9": "Replace token",
|
||||
"i18n:govoplan-calendar.require_matching_etag.0ab1ffe1": "Require matching ETag",
|
||||
"i18n:govoplan-calendar.rrule.c7b2f8a3": "RRULE",
|
||||
"i18n:govoplan-calendar.sat.6b782d41": "Sat",
|
||||
"i18n:govoplan-calendar.save.efc007a3": "Save",
|
||||
"i18n:govoplan-calendar.saving.ae7e8875": "Saving...",
|
||||
"i18n:govoplan-calendar.sequence.5c8f4e0e": "Sequence",
|
||||
"i18n:govoplan-calendar.show_value.60e2ce8e": "Show {value0}",
|
||||
"i18n:govoplan-calendar.source_href.819fa147": "Source href",
|
||||
"i18n:govoplan-calendar.source_kind.7eda9bc4": "Source kind",
|
||||
"i18n:govoplan-calendar.source.6da13add": "Source",
|
||||
"i18n:govoplan-calendar.start_date.ff99f5b5": "Start date",
|
||||
"i18n:govoplan-calendar.start_time.88d8206d": "Start time",
|
||||
"i18n:govoplan-calendar.state.a7250206": "State",
|
||||
"i18n:govoplan-calendar.status.bae7d5be": "Status",
|
||||
"i18n:govoplan-calendar.subscription_url.b8b6a1a0": "Subscription URL",
|
||||
"i18n:govoplan-calendar.sun.48c98cab": "Sun",
|
||||
"i18n:govoplan-calendar.sync_now.2b7d938e": "Sync now",
|
||||
"i18n:govoplan-calendar.sync_value.72e4ba66": "Sync {value0}",
|
||||
"i18n:govoplan-calendar.syncing_value.ca80b487": "Syncing {value0}",
|
||||
"i18n:govoplan-calendar.syncing.4ae6fa22": "Syncing",
|
||||
"i18n:govoplan-calendar.syncing.e5c7727a": "Syncing...",
|
||||
"i18n:govoplan-calendar.target_calendar.e533fe1d": "Target calendar",
|
||||
"i18n:govoplan-calendar.tentative.d19f9022": "TENTATIVE",
|
||||
"i18n:govoplan-calendar.the_selected_calendar.67caa12f": "the selected calendar",
|
||||
"i18n:govoplan-calendar.thu.3593ccd9": "Thu",
|
||||
"i18n:govoplan-calendar.timezone.d1f7dc89": "Timezone",
|
||||
"i18n:govoplan-calendar.title.768e0c1c": "Title",
|
||||
"i18n:govoplan-calendar.today.24345a14": "Today",
|
||||
"i18n:govoplan-calendar.transparency.7cb338a9": "Transparency",
|
||||
"i18n:govoplan-calendar.transparent.ea4efcae": "TRANSPARENT",
|
||||
"i18n:govoplan-calendar.tue.529541bb": "Tue",
|
||||
"i18n:govoplan-calendar.two_way.ee50a3e6": "Two-way",
|
||||
"i18n:govoplan-calendar.uid.d946adf5": "UID",
|
||||
"i18n:govoplan-calendar.username.84c29015": "Username",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_delete_value_value.7869d1f1": "{value0} this calendar will delete {value1} {value2}.",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_move_value_value_to_val.6c87e1c1": "{value0} this calendar will move {value1} {value2} to {value3}.",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_remove_value_local_valu.8f21a59e": "{value0} this calendar will remove {value1} local {value2} from GovOPlaN.",
|
||||
"i18n:govoplan-calendar.vevent.9cf5be75": "VEVENT",
|
||||
"i18n:govoplan-calendar.wed.23408b19": "Wed",
|
||||
"i18n:govoplan-calendar.week.f82be68a": "Week",
|
||||
"i18n:govoplan-calendar.whole_day.951c82d1": "Whole day",
|
||||
"i18n:govoplan-calendar.working.049ac820": "Working...",
|
||||
"i18n:govoplan-calendar.workweek.2fef6ea4": "Workweek"
|
||||
},
|
||||
"de": {
|
||||
"i18n:govoplan-calendar.add_calendar.124c55eb": "Add calendar...",
|
||||
"i18n:govoplan-calendar.add_calendar.8fadb5bc": "Add calendar",
|
||||
"i18n:govoplan-calendar.add.61cc55aa": "Hinzufügen",
|
||||
"i18n:govoplan-calendar.advanced.4d064726": "Advanced",
|
||||
"i18n:govoplan-calendar.agenda.891e9d6d": "Agenda",
|
||||
"i18n:govoplan-calendar.all_day.11457433": "Ganztägig",
|
||||
"i18n:govoplan-calendar.attachments_json.d91abf3c": "Attachments JSON",
|
||||
"i18n:govoplan-calendar.attachments.6771ade6": "Attachments",
|
||||
"i18n:govoplan-calendar.attendees_json.aeb487bb": "Attendees JSON",
|
||||
"i18n:govoplan-calendar.attendees.a45a0962": "Attendees",
|
||||
"i18n:govoplan-calendar.authentication.ee1acfa5": "Authentication",
|
||||
"i18n:govoplan-calendar.automatic_sync.084644b2": "Automatic sync",
|
||||
"i18n:govoplan-calendar.basic.aa2c96da": "Basic",
|
||||
"i18n:govoplan-calendar.bearer_token.ffa64bcf": "Bearer token",
|
||||
"i18n:govoplan-calendar.caldav_source.459ed16a": "CalDAV source",
|
||||
"i18n:govoplan-calendar.caldav.64f9720e": "CalDAV",
|
||||
"i18n:govoplan-calendar.calendar_controls.974f4fa1": "Calendar controls",
|
||||
"i18n:govoplan-calendar.calendar_navigation.7ba43cd2": "Calendar navigation",
|
||||
"i18n:govoplan-calendar.calendar_request_failed.ae8a54f4": "Calendar request failed.",
|
||||
"i18n:govoplan-calendar.calendar_source_type.92cdb42f": "Calendar source type",
|
||||
"i18n:govoplan-calendar.calendar_views.9e6b9c2b": "Calendar views",
|
||||
"i18n:govoplan-calendar.calendar.adab5090": "Kalender",
|
||||
"i18n:govoplan-calendar.calendars.94445018": "Calendars",
|
||||
"i18n:govoplan-calendar.cancel.77dfd213": "Abbrechen",
|
||||
"i18n:govoplan-calendar.cancelled.5587b0af": "CANCELLED",
|
||||
"i18n:govoplan-calendar.categories.6ccb6007": "Categories",
|
||||
"i18n:govoplan-calendar.change_end_time.db66ef4b": "Change end time",
|
||||
"i18n:govoplan-calendar.change_start_time.06eea3d3": "Change start time",
|
||||
"i18n:govoplan-calendar.class.41ff354b": "Class",
|
||||
"i18n:govoplan-calendar.color.1d0c8304": "Color",
|
||||
"i18n:govoplan-calendar.confidential.84c9cc88": "CONFIDENTIAL",
|
||||
"i18n:govoplan-calendar.configured.668c5fff": "Configured",
|
||||
"i18n:govoplan-calendar.confirm_delete.c9f2829e": "Confirm delete",
|
||||
"i18n:govoplan-calendar.confirmed.0542404a": "CONFIRMED",
|
||||
"i18n:govoplan-calendar.conflict_policy.5810e150": "Conflict policy",
|
||||
"i18n:govoplan-calendar.continuous.04f2ccda": "Continuous",
|
||||
"i18n:govoplan-calendar.credential_reference.a7e92de5": "Credential reference",
|
||||
"i18n:govoplan-calendar.credential.8bede3ea": "Credential",
|
||||
"i18n:govoplan-calendar.dav_url.4205e180": "DAV URL",
|
||||
"i18n:govoplan-calendar.day.987b9ced": "Tag",
|
||||
"i18n:govoplan-calendar.delete_events_with_this_calendar.cc0e1287": "Delete events with this calendar",
|
||||
"i18n:govoplan-calendar.delete.f6fdbe48": "Löschen",
|
||||
"i18n:govoplan-calendar.deleting.2cda36c9": "Deleting",
|
||||
"i18n:govoplan-calendar.description.55f8ebc8": "Beschreibung",
|
||||
"i18n:govoplan-calendar.direction.fd8e45ba": "Direction",
|
||||
"i18n:govoplan-calendar.discover.4827ea22": "Discover",
|
||||
"i18n:govoplan-calendar.discovering.1884f689": "Discovering...",
|
||||
"i18n:govoplan-calendar.display_name.c7874aaa": "Anzeigename",
|
||||
"i18n:govoplan-calendar.duration_must_be_greater_than_zero.519292f7": "Duration must be greater than zero.",
|
||||
"i18n:govoplan-calendar.duration_seconds.19d42eeb": "Duration seconds",
|
||||
"i18n:govoplan-calendar.duration.1370004d": "Duration",
|
||||
"i18n:govoplan-calendar.edit_calendar.a47a2a7a": "Edit calendar",
|
||||
"i18n:govoplan-calendar.edit_event.a7028454": "Termin bearbeiten",
|
||||
"i18n:govoplan-calendar.edit_value.fad75899": "Edit {value0}",
|
||||
"i18n:govoplan-calendar.end_date_and_time_must_be_after_start_date_and_t.daf31831": "End date and time must be after start date and time.",
|
||||
"i18n:govoplan-calendar.end_date_must_be_on_or_after_start_date.a2518865": "End date must be on or after start date.",
|
||||
"i18n:govoplan-calendar.end_date.89d10cd6": "End date",
|
||||
"i18n:govoplan-calendar.end_mode.5a06de37": "End mode",
|
||||
"i18n:govoplan-calendar.end_time.cd7800da": "End time",
|
||||
"i18n:govoplan-calendar.enter_a_secret_now_or_use_an_environment_referen.6db0e6ce": "Enter a secret now or use an environment reference such as",
|
||||
"i18n:govoplan-calendar.etag.11d00f6e": "ETag",
|
||||
"i18n:govoplan-calendar.event": "event",
|
||||
"i18n:govoplan-calendar.event_count_could_not_be_loaded_the_backend_will.163ff055": "Event count could not be loaded. The backend will still apply the selected delete action.",
|
||||
"i18n:govoplan-calendar.events": "events",
|
||||
"i18n:govoplan-calendar.events_are_stored_in_govoplan_and_are_not_synced.3660e504": "Events are stored in GovOPlaN and are not synced to an external calendar source.",
|
||||
"i18n:govoplan-calendar.ews_endpoint.a3273983": "EWS endpoint",
|
||||
"i18n:govoplan-calendar.exchange_web_services_source.53caabf3": "Exchange Web Services source",
|
||||
"i18n:govoplan-calendar.exchange.5b13eac7": "Exchange",
|
||||
"i18n:govoplan-calendar.exdate_json.7d0c538d": "EXDATE JSON",
|
||||
"i18n:govoplan-calendar.fri.bbd6e32e": "Fri",
|
||||
"i18n:govoplan-calendar.full_sync.21b89c76": "Full sync",
|
||||
"i18n:govoplan-calendar.graph_calendar_url.e59607f3": "Graph calendar URL",
|
||||
"i18n:govoplan-calendar.graph.9a7405eb": "Graph",
|
||||
"i18n:govoplan-calendar.icalendar_json.fb6cc33e": "iCalendar JSON",
|
||||
"i18n:govoplan-calendar.icalendar.f388476d": "iCalendar",
|
||||
"i18n:govoplan-calendar.ics_webcal_subscription.03bc0d63": "ICS/webcal subscription",
|
||||
"i18n:govoplan-calendar.ics_webcal.9c55b570": "ICS/webcal",
|
||||
"i18n:govoplan-calendar.identity.7e5a975b": "Identity",
|
||||
"i18n:govoplan-calendar.inbound_only.bf4269b0": "Inbound only",
|
||||
"i18n:govoplan-calendar.interval.011efcd5": "Interval",
|
||||
"i18n:govoplan-calendar.last_attempt.82aee111": "Last attempt",
|
||||
"i18n:govoplan-calendar.last_sync.ef0ef267": "Last sync",
|
||||
"i18n:govoplan-calendar.loading_calendar.7eb8f548": "Loading calendar...",
|
||||
"i18n:govoplan-calendar.loading_event_count.716ad3c2": "Loading event count...",
|
||||
"i18n:govoplan-calendar.local_calendar.ed3f72f8": "Local calendar",
|
||||
"i18n:govoplan-calendar.local.dc99d54d": "Local",
|
||||
"i18n:govoplan-calendar.location.d219c681": "Ort",
|
||||
"i18n:govoplan-calendar.make_target_calendar_the_default.10a3977b": "Make target calendar the default",
|
||||
"i18n:govoplan-calendar.managing_sync_sources_requires_calendar_administ.835e29fa": "Managing sync sources requires calendar administration rights.",
|
||||
"i18n:govoplan-calendar.metadata_json.b0e4c283": "Metadata JSON",
|
||||
"i18n:govoplan-calendar.metadata.251edc0e": "Metadata",
|
||||
"i18n:govoplan-calendar.microsoft_graph_source.ec4f1383": "Microsoft Graph source",
|
||||
"i18n:govoplan-calendar.mon.24b2a099": "Mon",
|
||||
"i18n:govoplan-calendar.month.082bc378": "Monat",
|
||||
"i18n:govoplan-calendar.move_events_to_another_calendar.830c7b09": "Move events to another calendar",
|
||||
"i18n:govoplan-calendar.name.709a2322": "Name",
|
||||
"i18n:govoplan-calendar.never.80c3052d": "Never",
|
||||
"i18n:govoplan-calendar.new_event.2ef3795c": "New event",
|
||||
"i18n:govoplan-calendar.new.6403f2b7": "New",
|
||||
"i18n:govoplan-calendar.next_sync.88c7af72": "Next sync",
|
||||
"i18n:govoplan-calendar.next.bc981983": "Weiter",
|
||||
"i18n:govoplan-calendar.no_calendar_collections_found.6453624a": "No calendar collections found.",
|
||||
"i18n:govoplan-calendar.no_calendars.3a7e4a7a": "No calendars",
|
||||
"i18n:govoplan-calendar.no_events.e339ba73": "No events",
|
||||
"i18n:govoplan-calendar.none.6eef6648": "Keine",
|
||||
"i18n:govoplan-calendar.not_configured.811931bb": "Nicht konfiguriert",
|
||||
"i18n:govoplan-calendar.not_scheduled.9c367369": "Not scheduled",
|
||||
"i18n:govoplan-calendar.not_synced.4c205136": "Not synced",
|
||||
"i18n:govoplan-calendar.opaque.3e1d0194": "OPAQUE",
|
||||
"i18n:govoplan-calendar.organizer_json.3add6f9f": "Organizer JSON",
|
||||
"i18n:govoplan-calendar.organizer.debd1720": "Organizer",
|
||||
"i18n:govoplan-calendar.overwrite_remote.39625e32": "Overwrite remote",
|
||||
"i18n:govoplan-calendar.participants.cd56e083": "Participants",
|
||||
"i18n:govoplan-calendar.password.8be3c943": "Passwort",
|
||||
"i18n:govoplan-calendar.previous.50f94286": "Previous",
|
||||
"i18n:govoplan-calendar.private.b0b7ba46": "PRIVATE",
|
||||
"i18n:govoplan-calendar.public.d1785ca2": "PUBLIC",
|
||||
"i18n:govoplan-calendar.raw.da433cd4": "Raw",
|
||||
"i18n:govoplan-calendar.rdate_json.5b51fca4": "RDATE JSON",
|
||||
"i18n:govoplan-calendar.recurrence_id.e0b780ba": "Recurrence ID",
|
||||
"i18n:govoplan-calendar.recurrence.f7ad40f5": "Wiederholung",
|
||||
"i18n:govoplan-calendar.refresh.56e3badc": "Refresh",
|
||||
"i18n:govoplan-calendar.related_to_json.2d4e8f59": "Related-To JSON",
|
||||
"i18n:govoplan-calendar.related_to.0e7989ff": "Related-To",
|
||||
"i18n:govoplan-calendar.related.917df91e": "Related",
|
||||
"i18n:govoplan-calendar.reminders_json.ca25e08f": "Reminders JSON",
|
||||
"i18n:govoplan-calendar.reminders.ae8c3939": "Reminders",
|
||||
"i18n:govoplan-calendar.remove_local_events_with_this_calendar.fb8831e1": "Remove local events with this calendar",
|
||||
"i18n:govoplan-calendar.remove.e963907d": "Remove",
|
||||
"i18n:govoplan-calendar.removing.b7d2c38b": "Removing",
|
||||
"i18n:govoplan-calendar.replace_password.3f912c9c": "Replace password",
|
||||
"i18n:govoplan-calendar.replace_token.bbeee6a9": "Replace token",
|
||||
"i18n:govoplan-calendar.require_matching_etag.0ab1ffe1": "Require matching ETag",
|
||||
"i18n:govoplan-calendar.rrule.c7b2f8a3": "RRULE",
|
||||
"i18n:govoplan-calendar.sat.6b782d41": "Sat",
|
||||
"i18n:govoplan-calendar.save.efc007a3": "Speichern",
|
||||
"i18n:govoplan-calendar.saving.ae7e8875": "Saving...",
|
||||
"i18n:govoplan-calendar.sequence.5c8f4e0e": "Sequence",
|
||||
"i18n:govoplan-calendar.show_value.60e2ce8e": "Show {value0}",
|
||||
"i18n:govoplan-calendar.source_href.819fa147": "Source href",
|
||||
"i18n:govoplan-calendar.source_kind.7eda9bc4": "Source kind",
|
||||
"i18n:govoplan-calendar.source.6da13add": "Quelle",
|
||||
"i18n:govoplan-calendar.start_date.ff99f5b5": "Start date",
|
||||
"i18n:govoplan-calendar.start_time.88d8206d": "Start time",
|
||||
"i18n:govoplan-calendar.state.a7250206": "State",
|
||||
"i18n:govoplan-calendar.status.bae7d5be": "Status",
|
||||
"i18n:govoplan-calendar.subscription_url.b8b6a1a0": "Subscription URL",
|
||||
"i18n:govoplan-calendar.sun.48c98cab": "Sun",
|
||||
"i18n:govoplan-calendar.sync_now.2b7d938e": "Sync now",
|
||||
"i18n:govoplan-calendar.sync_value.72e4ba66": "Sync {value0}",
|
||||
"i18n:govoplan-calendar.syncing_value.ca80b487": "Syncing {value0}",
|
||||
"i18n:govoplan-calendar.syncing.4ae6fa22": "Syncing",
|
||||
"i18n:govoplan-calendar.syncing.e5c7727a": "Syncing...",
|
||||
"i18n:govoplan-calendar.target_calendar.e533fe1d": "Target calendar",
|
||||
"i18n:govoplan-calendar.tentative.d19f9022": "TENTATIVE",
|
||||
"i18n:govoplan-calendar.the_selected_calendar.67caa12f": "the selected calendar",
|
||||
"i18n:govoplan-calendar.thu.3593ccd9": "Thu",
|
||||
"i18n:govoplan-calendar.timezone.d1f7dc89": "Timezone",
|
||||
"i18n:govoplan-calendar.title.768e0c1c": "Title",
|
||||
"i18n:govoplan-calendar.today.24345a14": "Heute",
|
||||
"i18n:govoplan-calendar.transparency.7cb338a9": "Transparency",
|
||||
"i18n:govoplan-calendar.transparent.ea4efcae": "TRANSPARENT",
|
||||
"i18n:govoplan-calendar.tue.529541bb": "Tue",
|
||||
"i18n:govoplan-calendar.two_way.ee50a3e6": "Two-way",
|
||||
"i18n:govoplan-calendar.uid.d946adf5": "UID",
|
||||
"i18n:govoplan-calendar.username.84c29015": "Benutzername",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_delete_value_value.7869d1f1": "{value0} this calendar will delete {value1} {value2}.",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_move_value_value_to_val.6c87e1c1": "{value0} this calendar will move {value1} {value2} to {value3}.",
|
||||
"i18n:govoplan-calendar.value_this_calendar_will_remove_value_local_valu.8f21a59e": "{value0} this calendar will remove {value1} local {value2} from GovOPlaN.",
|
||||
"i18n:govoplan-calendar.vevent.9cf5be75": "VEVENT",
|
||||
"i18n:govoplan-calendar.wed.23408b19": "Wed",
|
||||
"i18n:govoplan-calendar.week.f82be68a": "Woche",
|
||||
"i18n:govoplan-calendar.whole_day.951c82d1": "Whole day",
|
||||
"i18n:govoplan-calendar.working.049ac820": "Working...",
|
||||
"i18n:govoplan-calendar.workweek.2fef6ea4": "Workweek"
|
||||
}
|
||||
};
|
||||
@@ -1,21 +1,27 @@
|
||||
import { createElement, lazy } from "react";
|
||||
import type { PlatformWebModule } from "@govoplan/core-webui";
|
||||
import "./styles/calendar.css";
|
||||
import { generatedTranslations } from "./i18n/generatedTranslations";
|
||||
|
||||
const CalendarPage = lazy(() => import("./features/calendar/CalendarPage"));
|
||||
|
||||
const eventRead = ["calendar:event:read"];
|
||||
const translations = {
|
||||
en: generatedTranslations.en,
|
||||
de: generatedTranslations.de
|
||||
};
|
||||
|
||||
export const calendarModule: PlatformWebModule = {
|
||||
id: "calendar",
|
||||
label: "Calendar",
|
||||
label: "i18n:govoplan-calendar.calendar.adab5090",
|
||||
version: "1.0.0",
|
||||
dependencies: ["access"],
|
||||
optionalDependencies: ["mail", "tasks", "scheduling", "appointments", "workflow", "notifications", "dms", "connectors"],
|
||||
navItems: [{ to: "/calendar", label: "Calendar", iconName: "calendar", anyOf: eventRead, order: 55 }],
|
||||
translations,
|
||||
navItems: [{ to: "/calendar", label: "i18n:govoplan-calendar.calendar.adab5090", iconName: "calendar", anyOf: eventRead, order: 55 }],
|
||||
routes: [
|
||||
{ path: "/calendar", anyOf: eventRead, order: 55, render: ({ settings, auth }) => createElement(CalendarPage, { settings, auth }) }
|
||||
]
|
||||
{ path: "/calendar", anyOf: eventRead, order: 55, render: ({ settings, auth }) => createElement(CalendarPage, { settings, auth }) }]
|
||||
|
||||
};
|
||||
|
||||
export default calendarModule;
|
||||
export default calendarModule;
|
||||
@@ -17,6 +17,11 @@
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.calendar-loading-frame {
|
||||
min-height: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.calendar-shell {
|
||||
min-height: 0;
|
||||
height: 100%;
|
||||
@@ -101,59 +106,13 @@
|
||||
|
||||
.calendar-mode-switch {
|
||||
flex: 0 1 520px;
|
||||
display: inline-grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
width: min(520px, 100%);
|
||||
max-width: 520px;
|
||||
overflow: hidden;
|
||||
border: 1px solid #c9c3b9;
|
||||
border-radius: 8px;
|
||||
background: #c9c3b9;
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.75), 0 1px 1px rgba(0,0,0,.05);
|
||||
}
|
||||
|
||||
.calendar-mode-tab {
|
||||
.calendar-mode-switch .segmented-control-option {
|
||||
min-height: 34px;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
background: linear-gradient(#ffffff, #f1efeb);
|
||||
color: #4f4a43;
|
||||
cursor: pointer;
|
||||
font: inherit;
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.75), 0 1px 1px rgba(0,0,0,.05);
|
||||
transition: background .18s ease, box-shadow .18s ease, color .18s ease;
|
||||
}
|
||||
|
||||
.calendar-mode-tab + .calendar-mode-tab {
|
||||
border-left: 1px solid #c9c3b9;
|
||||
}
|
||||
|
||||
.calendar-mode-tab:first-child {
|
||||
border-radius: 7px 0 0 7px;
|
||||
}
|
||||
|
||||
.calendar-mode-tab:last-child {
|
||||
border-radius: 0 7px 7px 0;
|
||||
}
|
||||
|
||||
.calendar-mode-tab:hover,
|
||||
.calendar-mode-tab:focus-visible {
|
||||
background: linear-gradient(#ffffff, #e8e5df);
|
||||
color: #4f4a43;
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.82), 0 2px 5px rgba(0,0,0,.08);
|
||||
}
|
||||
|
||||
.calendar-mode-tab:focus-visible {
|
||||
outline: 3px solid rgba(82, 130, 177, .22);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
.calendar-mode-tab.is-active {
|
||||
background: var(--line);
|
||||
color: var(--text-strong);
|
||||
box-shadow: inset 0 2px 5px rgba(0,0,0,.12), inset 0 -1px 0 rgba(255,255,255,.45);
|
||||
}
|
||||
|
||||
.calendar-sidebar {
|
||||
@@ -216,7 +175,7 @@
|
||||
.calendar-list-row {
|
||||
min-width: 0;
|
||||
display: grid;
|
||||
grid-template-columns: 42px minmax(0, 1fr) 30px;
|
||||
grid-template-columns: 42px minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-height: 36px;
|
||||
@@ -230,6 +189,10 @@
|
||||
background: var(--panel-soft);
|
||||
}
|
||||
|
||||
.calendar-list-row.is-syncing {
|
||||
background: var(--panel-soft);
|
||||
}
|
||||
|
||||
.calendar-visibility-switch {
|
||||
--calendar-list-color: var(--green);
|
||||
width: 34px;
|
||||
@@ -286,6 +249,14 @@
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.calendar-list-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
gap: 2px;
|
||||
min-width: 28px;
|
||||
}
|
||||
|
||||
.calendar-row-icon-button.btn {
|
||||
width: 28px;
|
||||
min-width: 28px;
|
||||
@@ -306,44 +277,41 @@
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.calendar-create-form input[type="color"] {
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
height: 24px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--line-dark);
|
||||
border-radius: 4px;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
.calendar-row-icon-button.btn.is-syncing,
|
||||
.calendar-row-icon-button.btn.is-syncing:disabled {
|
||||
border-color: var(--green);
|
||||
background: var(--surface);
|
||||
color: var(--green);
|
||||
opacity: 1;
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
.calendar-create-form input:disabled {
|
||||
opacity: .55;
|
||||
cursor: not-allowed;
|
||||
.calendar-sync-spin {
|
||||
animation: calendar-sync-spin .85s linear infinite;
|
||||
}
|
||||
|
||||
.calendar-create-form {
|
||||
@keyframes calendar-sync-spin {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.calendar-sync-spin {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
|
||||
.calendar-create-action {
|
||||
min-width: 0;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) 28px 36px;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-top: 6px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.calendar-create-form input[type="text"],
|
||||
.calendar-create-form input:not([type]) {
|
||||
min-width: 0;
|
||||
height: 34px;
|
||||
border: 1px solid var(--line-dark);
|
||||
border-radius: 4px;
|
||||
background: var(--surface);
|
||||
color: var(--text);
|
||||
font: inherit;
|
||||
padding: 6px 8px;
|
||||
.calendar-create-action .btn {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.calendar-agenda {
|
||||
@@ -931,7 +899,11 @@
|
||||
}
|
||||
|
||||
.calendar-event-dialog {
|
||||
width: min(560px, 100%);
|
||||
width: min(680px, 100%);
|
||||
}
|
||||
|
||||
.calendar-vevent-dialog {
|
||||
width: min(920px, 100%);
|
||||
}
|
||||
|
||||
.calendar-dialog-form {
|
||||
@@ -974,14 +946,205 @@
|
||||
|
||||
.calendar-dialog-name-color-row {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) 86px;
|
||||
grid-template-columns: minmax(0, 1fr) 142px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.calendar-dialog-color-label input[type="color"] {
|
||||
.calendar-source-switch {
|
||||
grid-template-columns: repeat(auto-fit, minmax(104px, 1fr));
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.calendar-source-switch .segmented-control-option {
|
||||
min-height: 34px;
|
||||
}
|
||||
|
||||
.calendar-source-pane {
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 6px;
|
||||
background: var(--panel-soft);
|
||||
}
|
||||
|
||||
.calendar-source-pane h3 {
|
||||
margin: 0;
|
||||
color: var(--text-strong);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.calendar-source-pane-heading,
|
||||
.calendar-sync-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.calendar-dialog-grid-two,
|
||||
.calendar-dialog-grid-three,
|
||||
.calendar-caldav-setup,
|
||||
.calendar-sync-settings {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.calendar-dialog-grid-three {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.calendar-dialog-wide {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.calendar-caldav-setup {
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
.calendar-discovery-actions {
|
||||
grid-column: 1 / -1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
min-width: 0;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.calendar-discovery-actions .btn {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.calendar-discovery-actions span {
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.calendar-discovery-actions.is-readonly {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.calendar-advanced-settings {
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.calendar-advanced-settings summary {
|
||||
width: fit-content;
|
||||
cursor: pointer;
|
||||
color: var(--text-strong);
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.calendar-advanced-settings[open] {
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.calendar-advanced-settings[open] summary {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.calendar-vevent-details {
|
||||
border-top: 1px solid var(--line);
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.calendar-vevent-section {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
padding: 12px 0;
|
||||
border-top: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.calendar-vevent-section:first-of-type {
|
||||
border-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.calendar-vevent-section h3 {
|
||||
margin: 0;
|
||||
color: var(--text-strong);
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.calendar-vevent-section textarea {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
||||
font-size: 12px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.calendar-sync-settings {
|
||||
align-items: end;
|
||||
}
|
||||
|
||||
.calendar-sync-status {
|
||||
padding: 3px 8px;
|
||||
border: 1px solid var(--line-dark);
|
||||
border-radius: 999px;
|
||||
background: var(--surface);
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.calendar-sync-status.is-error {
|
||||
border-color: #f0b8b2;
|
||||
background: #fff2f0;
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
.calendar-sync-status.is-syncing {
|
||||
border-color: var(--green);
|
||||
background: var(--surface);
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
.calendar-sync-button.btn.is-syncing,
|
||||
.calendar-sync-button.btn.is-syncing:disabled {
|
||||
opacity: 1;
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
.calendar-sync-status-panel {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
padding: 10px;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 6px;
|
||||
background: var(--surface);
|
||||
}
|
||||
|
||||
.calendar-sync-status-panel dl {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 8px 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.calendar-sync-status-panel dl div {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.calendar-sync-status-panel dt {
|
||||
color: var(--muted);
|
||||
font-size: 11px;
|
||||
font-weight: 800;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.calendar-sync-status-panel dd {
|
||||
margin: 2px 0 0;
|
||||
overflow: hidden;
|
||||
color: var(--text);
|
||||
font-size: 13px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.calendar-form-error {
|
||||
@@ -1056,6 +1219,15 @@
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.calendar-delete-dialog {
|
||||
width: min(520px, 100%);
|
||||
}
|
||||
|
||||
.calendar-delete-dialog-body {
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.calendar-event-dialog-footer {
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
@@ -1114,7 +1286,12 @@
|
||||
|
||||
.calendar-dialog-row,
|
||||
.calendar-dialog-date-row,
|
||||
.calendar-dialog-name-color-row {
|
||||
.calendar-dialog-name-color-row,
|
||||
.calendar-dialog-grid-two,
|
||||
.calendar-dialog-grid-three,
|
||||
.calendar-caldav-setup,
|
||||
.calendar-sync-settings,
|
||||
.calendar-sync-status-panel dl {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user