calendarkit-prov2 2.0.6 → 2.0.7
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.
- package/dist/index.d.mts +46 -1
- package/dist/index.d.ts +46 -1
- package/dist/index.js +494 -370
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +410 -291
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/components/ui/button.tsx","../src/locales/index.ts","../src/components/CalendarHeader.tsx","../src/lib/date.ts","../src/components/MiniCalendar.tsx","../src/components/Sidebar.tsx","../src/components/dnd/DraggableEvent.tsx","../src/components/dnd/DroppableCell.tsx","../src/views/MonthView.tsx","../src/components/dnd/ResizableEvent.tsx","../src/views/WeekView.tsx","../src/views/DayView.tsx","../src/components/EmptyState.tsx","../src/views/AgendaView.tsx","../src/views/ResourceView.tsx","../src/components/ui/Modal.tsx","../src/components/EventModal.tsx","../src/components/Skeleton.tsx","../src/components/ContextMenu.tsx","../src/lib/theme.ts","../src/hooks/useCalendarLogic.ts","../src/hooks/useSwipeGesture.ts","../src/index.tsx"],"names":["React","dnsTr","dnsEnUS","dnsFr","dnsDe","dnsEs","dnsIt","dnsPt","dnsAr","dnsZhCN","dnsJa","dnsKo","dnsRu","dnsNl","dnsPl","dnsSv","format","subMonths","addMonths","ChevronLeft","ChevronRight","isSameDay","isSameMonth","isToday","useState","useEffect","ChevronDown","Globe","startOfWeek","endOfWeek","eachDayOfInterval","useCallback","toZonedTime","useRef","differenceInMinutes","Plus","useMemo","addDays","Users","startOfDay","X","Calendar","Clock","motion","MapPin","Bell","Paperclip","_","Copy","Trash2","AnimatePresence","subDays","subWeeks","addWeeks","startOfMonth","endOfMonth","id","createPortal"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { cn } from \"../../utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\r\n outline:\r\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-4 py-2\",\r\n sm: \"h-9 rounded-md px-3\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = \"button\"\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = \"Button\"\r\n\r\nexport { Button, buttonVariants }\r\n","import { CalendarTranslations } from '../types';\nimport {\n tr as dnsTr, enUS as dnsEnUS, fr as dnsFr, de as dnsDe,\n es as dnsEs, it as dnsIt, pt as dnsPt, ar as dnsAr,\n zhCN as dnsZhCN, ja as dnsJa, ko as dnsKo, ru as dnsRu,\n nl as dnsNl, pl as dnsPl, sv as dnsSv,\n} from 'date-fns/locale';\nimport type { Locale } from 'date-fns';\n\n// Supported language codes\nexport type LanguageCode =\n | 'tr' | 'en' | 'fr' | 'de' | 'es' | 'it' | 'pt'\n | 'ar' | 'zh' | 'ja' | 'ko' | 'ru' | 'nl' | 'pl' | 'sv';\n\n// Metadata for each language (used in the language switcher UI)\nexport const LANGUAGE_META: Record<LanguageCode, { native: string; english: string; flag: string; rtl?: boolean }> = {\n tr: { native: 'Türkçe', english: 'Turkish', flag: '🇹🇷' },\n en: { native: 'English', english: 'English', flag: '🇬🇧' },\n fr: { native: 'Français', english: 'French', flag: '🇫🇷' },\n de: { native: 'Deutsch', english: 'German', flag: '🇩🇪' },\n es: { native: 'Español', english: 'Spanish', flag: '🇪🇸' },\n it: { native: 'Italiano', english: 'Italian', flag: '🇮🇹' },\n pt: { native: 'Português', english: 'Portuguese', flag: '🇧🇷' },\n ar: { native: 'العربية', english: 'Arabic', flag: '🇸🇦', rtl: true },\n zh: { native: '中文', english: 'Chinese', flag: '🇨🇳' },\n ja: { native: '日本語', english: 'Japanese', flag: '🇯🇵' },\n ko: { native: '한국어', english: 'Korean', flag: '🇰🇷' },\n ru: { native: 'Русский', english: 'Russian', flag: '🇷🇺' },\n nl: { native: 'Nederlands',english: 'Dutch', flag: '🇳🇱' },\n pl: { native: 'Polski', english: 'Polish', flag: '🇵🇱' },\n sv: { native: 'Svenska', english: 'Swedish', flag: '🇸🇪' },\n};\n\n// ─── Turkish (default) ────────────────────────────────────────────────────────\nexport const tr: CalendarTranslations = {\n today: 'Bugün',\n month: 'Ay',\n week: 'Hafta',\n day: 'Gün',\n agenda: 'Ajanda',\n resource: 'Kaynaklar',\n create: 'Oluştur',\n createEvent: 'Etkinlik Oluştur',\n editEvent: 'Etkinliği Düzenle',\n newEvent: 'Yeni Etkinlik',\n saveChanges: 'Değişiklikleri Kaydet',\n delete: 'Sil',\n save: 'Kaydet',\n cancel: 'İptal',\n edit: 'Düzenle',\n duplicate: 'Çoğalt',\n close: 'Kapat',\n moreOptions: 'Daha Fazla Seçenek',\n addAttachment: 'Dosya Yükle',\n addReminder: 'Ekle',\n title: 'Başlık Ekle',\n addTitle: 'Başlık Ekle',\n start: 'Başlangıç',\n end: 'Bitiş',\n allDay: 'Tüm Gün',\n description: 'Açıklama',\n descriptionAndAttachments: 'Açıklama',\n addDescription: 'Açıklama veya not ekle...',\n location: 'Adres Gir',\n addLocation: 'Konum Ekle',\n locationHelpText: 'Harita oluşturmak için fiziksel adres girin (örn. \"Bağcılar Mah. No:1\").',\n notes: 'Notlar',\n repeat: 'Tekrarla',\n noRepeat: 'Tekrarlanmıyor',\n doesNotRepeat: 'Tekrarlanmıyor',\n daily: 'Günlük',\n weekly: 'Haftalık',\n monthly: 'Aylık',\n yearly: 'Yıllık',\n repeatFor: 'Tekrar Sayısı',\n times: 'kez',\n until: 'Şu tarihe kadar',\n endRepeat: 'Tekrar Bitişi',\n never: 'Hiçbir Zaman',\n afterOccurrences: 'Tekrardan Sonra',\n onDate: 'Tarihte',\n selectCalendar: 'Takvim Seç',\n selectType: 'Tür Seç',\n calendar: 'Takvim',\n calendars: 'Takvimler',\n event: 'Etkinlik',\n task: 'Görev',\n appointmentSchedule: 'Randevu Programı',\n new: 'Yeni',\n guests: 'Katılımcılar',\n addGuests: 'Katılımcı Ekle',\n guest: 'katılımcı',\n guestCount: 'katılımcı',\n guestsCount: 'katılımcı',\n guestAdded: 'katılımcı eklendi',\n guestsAdded: 'katılımcı eklendi',\n whosJoining: 'Kim katılıyor?',\n suggestedTimes: 'Misafirler için önerilen saatler',\n viewSuggestions: 'Önerileri Gör',\n whereWillItBe: 'Nerede olacak?',\n dateAndTime: 'Tarih ve Saat',\n reminders: 'Hatırlatıcılar',\n dragAndDrop: 'Dosyaları sürükle & bırak ya da',\n attachments: 'Ekler',\n reminderAtTime: 'Etkinlik saatinde',\n reminder5min: '5 dakika önce',\n reminder10min: '10 dakika önce',\n reminder15min: '15 dakika önce',\n reminder30min: '30 dakika önce',\n reminder1hour: '1 saat önce',\n reminder2hours: '2 saat önce',\n reminder1day: '1 gün önce',\n reminder2days: '2 gün önce',\n reminder1week: '1 hafta önce',\n tomorrow: 'Yarın',\n eventCount: 'etkinlik',\n eventsCount: 'etkinlik',\n timezone: 'Zaman Dilimi',\n localTime: 'Yerel Saat',\n operations: 'İşlemler',\n reverseTimeLabel: 'Saat Yönü',\n search: 'Etkinlik ara...',\n allTypes: 'Tüm Türler',\n noTitle: '(Başlıksız)',\n copy: '(Kopya)',\n clickToOpenInMaps: 'Haritada açmak için tıklayın',\n};\n\n// ─── English ──────────────────────────────────────────────────────────────────\nexport const en: CalendarTranslations = {\n today: 'Today',\n month: 'Month',\n week: 'Week',\n day: 'Day',\n agenda: 'Agenda',\n resource: 'Resources',\n create: 'Create',\n createEvent: 'Create Event',\n editEvent: 'Edit Event',\n newEvent: 'New Event',\n saveChanges: 'Save Changes',\n delete: 'Delete',\n save: 'Save',\n cancel: 'Cancel',\n edit: 'Edit',\n duplicate: 'Duplicate',\n close: 'Close',\n moreOptions: 'More options',\n addAttachment: 'Upload files',\n addReminder: 'Add',\n title: 'Add title',\n addTitle: 'Add title',\n start: 'Start',\n end: 'End',\n allDay: 'All Day',\n description: 'Description',\n descriptionAndAttachments: 'Description',\n addDescription: 'Add description or notes...',\n location: 'Enter address',\n addLocation: 'Add location',\n locationHelpText: 'Enter a physical address (e.g. \"123 Main St\") to generate the map.',\n notes: 'Notes',\n repeat: 'Repeat',\n noRepeat: 'Does not repeat',\n doesNotRepeat: 'Does not repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n yearly: 'Yearly',\n repeatFor: 'Repeat for',\n times: 'times',\n until: 'Until',\n endRepeat: 'End repeat',\n never: 'Never',\n afterOccurrences: 'After occurrences',\n onDate: 'On date',\n selectCalendar: 'Select Calendar',\n selectType: 'Select Type',\n calendar: 'Calendar',\n calendars: 'Calendars',\n event: 'Event',\n task: 'Task',\n appointmentSchedule: 'Appointment schedule',\n new: 'New',\n guests: 'Guests',\n addGuests: 'Add guests',\n guest: 'guest',\n guestCount: 'guest',\n guestsCount: 'guests',\n guestAdded: 'guest added',\n guestsAdded: 'guests added',\n whosJoining: \"Who's joining?\",\n suggestedTimes: 'Suggested times for guests',\n viewSuggestions: 'View suggestions',\n whereWillItBe: 'Where will it be?',\n dateAndTime: 'Date & Time',\n reminders: 'Reminders',\n dragAndDrop: 'Drag & drop files or',\n attachments: 'Attachments',\n reminderAtTime: 'At time of event',\n reminder5min: '5 minutes before',\n reminder10min: '10 minutes before',\n reminder15min: '15 minutes before',\n reminder30min: '30 minutes before',\n reminder1hour: '1 hour before',\n reminder2hours: '2 hours before',\n reminder1day: '1 day before',\n reminder2days: '2 days before',\n reminder1week: '1 week before',\n tomorrow: 'Tomorrow',\n eventCount: 'event',\n eventsCount: 'events',\n timezone: 'Time zone',\n localTime: 'Local Time',\n operations: 'Operations',\n reverseTimeLabel: 'Time Direction',\n search: 'Search events...',\n allTypes: 'All Types',\n noTitle: '(No title)',\n copy: '(Copy)',\n clickToOpenInMaps: 'Click to open in maps',\n};\n\n// ─── French ───────────────────────────────────────────────────────────────────\nexport const fr: CalendarTranslations = {\n today: \"Aujourd'hui\",\n month: 'Mois',\n week: 'Semaine',\n day: 'Jour',\n agenda: 'Agenda',\n resource: 'Ressources',\n create: 'Créer',\n createEvent: 'Créer un événement',\n editEvent: \"Modifier l'événement\",\n newEvent: 'Nouvel événement',\n saveChanges: 'Enregistrer les modifications',\n delete: 'Supprimer',\n save: 'Enregistrer',\n cancel: 'Annuler',\n edit: 'Modifier',\n duplicate: 'Dupliquer',\n close: 'Fermer',\n moreOptions: \"Plus d'options\",\n addAttachment: 'Télécharger des fichiers',\n addReminder: 'Ajouter',\n title: 'Ajouter un titre',\n addTitle: 'Ajouter un titre',\n start: 'Début',\n end: 'Fin',\n allDay: 'Toute la journée',\n description: 'Description',\n descriptionAndAttachments: 'Description',\n addDescription: 'Ajouter une description ou des notes...',\n location: 'Entrer une adresse',\n addLocation: 'Ajouter un lieu',\n locationHelpText: 'Entrez une adresse physique (ex: \"123 Rue Principale\") pour générer la carte.',\n notes: 'Notes',\n repeat: 'Répéter',\n noRepeat: 'Ne se répète pas',\n doesNotRepeat: 'Ne se répète pas',\n daily: 'Quotidien',\n weekly: 'Hebdomadaire',\n monthly: 'Mensuel',\n yearly: 'Annuel',\n repeatFor: 'Répéter pendant',\n times: 'fois',\n until: \"Jusqu'au\",\n endRepeat: 'Fin de répétition',\n never: 'Jamais',\n afterOccurrences: 'Après occurrences',\n onDate: 'À la date',\n selectCalendar: 'Sélectionner un calendrier',\n selectType: 'Sélectionner un type',\n calendar: 'Calendrier',\n calendars: 'Calendriers',\n event: 'Événement',\n task: 'Tâche',\n appointmentSchedule: 'Planning de rendez-vous',\n new: 'Nouveau',\n guests: 'Invités',\n addGuests: 'Ajouter des invités',\n guest: 'invité',\n guestCount: 'invité',\n guestsCount: 'invités',\n guestAdded: 'invité ajouté',\n guestsAdded: 'invités ajoutés',\n whosJoining: 'Qui participe ?',\n suggestedTimes: 'Horaires suggérés pour les invités',\n viewSuggestions: 'Voir les suggestions',\n whereWillItBe: 'Où aura lieu ?',\n dateAndTime: 'Date et heure',\n reminders: 'Rappels',\n dragAndDrop: 'Glisser-déposer des fichiers ou',\n attachments: 'Pièces jointes',\n reminderAtTime: \"À l'heure de l'événement\",\n reminder5min: '5 minutes avant',\n reminder10min: '10 minutes avant',\n reminder15min: '15 minutes avant',\n reminder30min: '30 minutes avant',\n reminder1hour: '1 heure avant',\n reminder2hours: '2 heures avant',\n reminder1day: '1 jour avant',\n reminder2days: '2 jours avant',\n reminder1week: '1 semaine avant',\n tomorrow: 'Demain',\n eventCount: 'événement',\n eventsCount: 'événements',\n timezone: 'Fuseau horaire',\n localTime: 'Heure locale',\n operations: 'Opérations',\n reverseTimeLabel: 'Direction du temps',\n search: 'Rechercher des événements...',\n allTypes: 'Tous les types',\n noTitle: '(Sans titre)',\n copy: '(Copie)',\n clickToOpenInMaps: 'Cliquer pour ouvrir dans la carte',\n};\n\n// ─── German ───────────────────────────────────────────────────────────────────\nexport const de: CalendarTranslations = {\n today: 'Heute',\n month: 'Monat',\n week: 'Woche',\n day: 'Tag',\n agenda: 'Agenda',\n resource: 'Ressourcen',\n create: 'Erstellen',\n createEvent: 'Termin erstellen',\n editEvent: 'Termin bearbeiten',\n newEvent: 'Neuer Termin',\n saveChanges: 'Änderungen speichern',\n delete: 'Löschen',\n save: 'Speichern',\n cancel: 'Abbrechen',\n edit: 'Bearbeiten',\n duplicate: 'Duplizieren',\n close: 'Schließen',\n moreOptions: 'Weitere Optionen',\n addAttachment: 'Dateien hochladen',\n addReminder: 'Hinzufügen',\n title: 'Titel hinzufügen',\n addTitle: 'Titel hinzufügen',\n start: 'Beginn',\n end: 'Ende',\n allDay: 'Ganztägig',\n description: 'Beschreibung',\n descriptionAndAttachments: 'Beschreibung',\n addDescription: 'Beschreibung oder Notizen hinzufügen...',\n location: 'Adresse eingeben',\n addLocation: 'Ort hinzufügen',\n locationHelpText: 'Geben Sie eine physische Adresse ein (z.B. \"Musterstraße 1\"), um die Karte zu generieren.',\n notes: 'Notizen',\n repeat: 'Wiederholen',\n noRepeat: 'Wiederholt sich nicht',\n doesNotRepeat: 'Wiederholt sich nicht',\n daily: 'Täglich',\n weekly: 'Wöchentlich',\n monthly: 'Monatlich',\n yearly: 'Jährlich',\n repeatFor: 'Wiederholen für',\n times: 'Mal',\n until: 'Bis',\n endRepeat: 'Wiederholung beenden',\n never: 'Nie',\n afterOccurrences: 'Nach Wiederholungen',\n onDate: 'Am Datum',\n selectCalendar: 'Kalender auswählen',\n selectType: 'Typ auswählen',\n calendar: 'Kalender',\n calendars: 'Kalender',\n event: 'Termin',\n task: 'Aufgabe',\n appointmentSchedule: 'Terminplan',\n new: 'Neu',\n guests: 'Gäste',\n addGuests: 'Gäste hinzufügen',\n guest: 'Gast',\n guestCount: 'Gast',\n guestsCount: 'Gäste',\n guestAdded: 'Gast hinzugefügt',\n guestsAdded: 'Gäste hinzugefügt',\n whosJoining: 'Wer nimmt teil?',\n suggestedTimes: 'Vorgeschlagene Zeiten für Gäste',\n viewSuggestions: 'Vorschläge anzeigen',\n whereWillItBe: 'Wo findet es statt?',\n dateAndTime: 'Datum und Uhrzeit',\n reminders: 'Erinnerungen',\n dragAndDrop: 'Dateien hineinziehen oder',\n attachments: 'Anhänge',\n reminderAtTime: 'Zum Zeitpunkt des Termins',\n reminder5min: '5 Minuten vorher',\n reminder10min: '10 Minuten vorher',\n reminder15min: '15 Minuten vorher',\n reminder30min: '30 Minuten vorher',\n reminder1hour: '1 Stunde vorher',\n reminder2hours: '2 Stunden vorher',\n reminder1day: '1 Tag vorher',\n reminder2days: '2 Tage vorher',\n reminder1week: '1 Woche vorher',\n tomorrow: 'Morgen',\n eventCount: 'Termin',\n eventsCount: 'Termine',\n timezone: 'Zeitzone',\n localTime: 'Ortszeit',\n operations: 'Aktionen',\n reverseTimeLabel: 'Zeitrichtung',\n search: 'Termine suchen...',\n allTypes: 'Alle Typen',\n noTitle: '(Kein Titel)',\n copy: '(Kopie)',\n clickToOpenInMaps: 'Klicken, um in der Karte zu öffnen',\n};\n\n// ─── Spanish ──────────────────────────────────────────────────────────────────\nexport const es: CalendarTranslations = {\n today: 'Hoy',\n month: 'Mes',\n week: 'Semana',\n day: 'Día',\n agenda: 'Agenda',\n resource: 'Recursos',\n create: 'Crear',\n createEvent: 'Crear evento',\n editEvent: 'Editar evento',\n newEvent: 'Nuevo evento',\n saveChanges: 'Guardar cambios',\n delete: 'Eliminar',\n save: 'Guardar',\n cancel: 'Cancelar',\n edit: 'Editar',\n duplicate: 'Duplicar',\n close: 'Cerrar',\n moreOptions: 'Más opciones',\n addAttachment: 'Subir archivos',\n addReminder: 'Agregar',\n title: 'Agregar título',\n addTitle: 'Agregar título',\n start: 'Inicio',\n end: 'Fin',\n allDay: 'Todo el día',\n description: 'Descripción',\n descriptionAndAttachments: 'Descripción',\n addDescription: 'Agregar descripción o notas...',\n location: 'Ingresar dirección',\n addLocation: 'Agregar ubicación',\n locationHelpText: 'Ingrese una dirección física (ej. \"Calle Principal 123\") para generar el mapa.',\n notes: 'Notas',\n repeat: 'Repetir',\n noRepeat: 'No se repite',\n doesNotRepeat: 'No se repite',\n daily: 'Diario',\n weekly: 'Semanal',\n monthly: 'Mensual',\n yearly: 'Anual',\n repeatFor: 'Repetir por',\n times: 'veces',\n until: 'Hasta',\n endRepeat: 'Fin de repetición',\n never: 'Nunca',\n afterOccurrences: 'Después de ocurrencias',\n onDate: 'En fecha',\n selectCalendar: 'Seleccionar calendario',\n selectType: 'Seleccionar tipo',\n calendar: 'Calendario',\n calendars: 'Calendarios',\n event: 'Evento',\n task: 'Tarea',\n appointmentSchedule: 'Horario de citas',\n new: 'Nuevo',\n guests: 'Invitados',\n addGuests: 'Agregar invitados',\n guest: 'invitado',\n guestCount: 'invitado',\n guestsCount: 'invitados',\n guestAdded: 'invitado agregado',\n guestsAdded: 'invitados agregados',\n whosJoining: '¿Quién se une?',\n suggestedTimes: 'Horarios sugeridos para invitados',\n viewSuggestions: 'Ver sugerencias',\n whereWillItBe: '¿Dónde será?',\n dateAndTime: 'Fecha y hora',\n reminders: 'Recordatorios',\n dragAndDrop: 'Arrastra y suelta archivos o',\n attachments: 'Adjuntos',\n reminderAtTime: 'A la hora del evento',\n reminder5min: '5 minutos antes',\n reminder10min: '10 minutos antes',\n reminder15min: '15 minutos antes',\n reminder30min: '30 minutos antes',\n reminder1hour: '1 hora antes',\n reminder2hours: '2 horas antes',\n reminder1day: '1 día antes',\n reminder2days: '2 días antes',\n reminder1week: '1 semana antes',\n tomorrow: 'Mañana',\n eventCount: 'evento',\n eventsCount: 'eventos',\n timezone: 'Zona horaria',\n localTime: 'Hora local',\n operations: 'Operaciones',\n reverseTimeLabel: 'Dirección del tiempo',\n search: 'Buscar eventos...',\n allTypes: 'Todos los tipos',\n noTitle: '(Sin título)',\n copy: '(Copia)',\n clickToOpenInMaps: 'Haga clic para abrir en el mapa',\n};\n\n// ─── Italian ──────────────────────────────────────────────────────────────────\nexport const it: CalendarTranslations = {\n today: 'Oggi',\n month: 'Mese',\n week: 'Settimana',\n day: 'Giorno',\n agenda: 'Agenda',\n resource: 'Risorse',\n create: 'Crea',\n createEvent: 'Crea evento',\n editEvent: 'Modifica evento',\n newEvent: 'Nuovo evento',\n saveChanges: 'Salva modifiche',\n delete: 'Elimina',\n save: 'Salva',\n cancel: 'Annulla',\n edit: 'Modifica',\n duplicate: 'Duplica',\n close: 'Chiudi',\n moreOptions: 'Altre opzioni',\n addAttachment: 'Carica file',\n addReminder: 'Aggiungi',\n title: 'Aggiungi titolo',\n addTitle: 'Aggiungi titolo',\n start: 'Inizio',\n end: 'Fine',\n allDay: 'Tutto il giorno',\n description: 'Descrizione',\n descriptionAndAttachments: 'Descrizione',\n addDescription: 'Aggiungi descrizione o note...',\n location: 'Inserisci indirizzo',\n addLocation: 'Aggiungi luogo',\n locationHelpText: 'Inserire un indirizzo fisico (es. \"Via Roma 1\") per generare la mappa.',\n notes: 'Note',\n repeat: 'Ripeti',\n noRepeat: 'Non si ripete',\n doesNotRepeat: 'Non si ripete',\n daily: 'Giornaliero',\n weekly: 'Settimanale',\n monthly: 'Mensile',\n yearly: 'Annuale',\n repeatFor: 'Ripeti per',\n times: 'volte',\n until: 'Fino a',\n endRepeat: 'Fine ripetizione',\n never: 'Mai',\n afterOccurrences: 'Dopo occorrenze',\n onDate: 'Alla data',\n selectCalendar: 'Seleziona calendario',\n selectType: 'Seleziona tipo',\n calendar: 'Calendario',\n calendars: 'Calendari',\n event: 'Evento',\n task: 'Attività',\n appointmentSchedule: 'Programma appuntamenti',\n new: 'Nuovo',\n guests: 'Ospiti',\n addGuests: 'Aggiungi ospiti',\n guest: 'ospite',\n guestCount: 'ospite',\n guestsCount: 'ospiti',\n guestAdded: 'ospite aggiunto',\n guestsAdded: 'ospiti aggiunti',\n whosJoining: 'Chi partecipa?',\n suggestedTimes: 'Orari suggeriti per gli ospiti',\n viewSuggestions: 'Vedi suggerimenti',\n whereWillItBe: 'Dove si terrà?',\n dateAndTime: 'Data e ora',\n reminders: 'Promemoria',\n dragAndDrop: 'Trascina e rilascia i file o',\n attachments: 'Allegati',\n reminderAtTime: \"All'ora dell'evento\",\n reminder5min: '5 minuti prima',\n reminder10min: '10 minuti prima',\n reminder15min: '15 minuti prima',\n reminder30min: '30 minuti prima',\n reminder1hour: '1 ora prima',\n reminder2hours: '2 ore prima',\n reminder1day: '1 giorno prima',\n reminder2days: '2 giorni prima',\n reminder1week: '1 settimana prima',\n tomorrow: 'Domani',\n eventCount: 'evento',\n eventsCount: 'eventi',\n timezone: 'Fuso orario',\n localTime: 'Ora locale',\n operations: 'Operazioni',\n reverseTimeLabel: 'Direzione del tempo',\n search: 'Cerca eventi...',\n allTypes: 'Tutti i tipi',\n noTitle: '(Senza titolo)',\n copy: '(Copia)',\n clickToOpenInMaps: 'Clicca per aprire nella mappa',\n};\n\n// ─── Portuguese ───────────────────────────────────────────────────────────────\nexport const pt: CalendarTranslations = {\n today: 'Hoje',\n month: 'Mês',\n week: 'Semana',\n day: 'Dia',\n agenda: 'Agenda',\n resource: 'Recursos',\n create: 'Criar',\n createEvent: 'Criar evento',\n editEvent: 'Editar evento',\n newEvent: 'Novo evento',\n saveChanges: 'Salvar alterações',\n delete: 'Excluir',\n save: 'Salvar',\n cancel: 'Cancelar',\n edit: 'Editar',\n duplicate: 'Duplicar',\n close: 'Fechar',\n moreOptions: 'Mais opções',\n addAttachment: 'Enviar arquivos',\n addReminder: 'Adicionar',\n title: 'Adicionar título',\n addTitle: 'Adicionar título',\n start: 'Início',\n end: 'Fim',\n allDay: 'Dia inteiro',\n description: 'Descrição',\n descriptionAndAttachments: 'Descrição',\n addDescription: 'Adicionar descrição ou notas...',\n location: 'Inserir endereço',\n addLocation: 'Adicionar local',\n locationHelpText: 'Insira um endereço físico (ex. \"Rua Principal, 123\") para gerar o mapa.',\n notes: 'Notas',\n repeat: 'Repetir',\n noRepeat: 'Não se repete',\n doesNotRepeat: 'Não se repete',\n daily: 'Diário',\n weekly: 'Semanal',\n monthly: 'Mensal',\n yearly: 'Anual',\n repeatFor: 'Repetir por',\n times: 'vezes',\n until: 'Até',\n endRepeat: 'Fim da repetição',\n never: 'Nunca',\n afterOccurrences: 'Após ocorrências',\n onDate: 'Na data',\n selectCalendar: 'Selecionar calendário',\n selectType: 'Selecionar tipo',\n calendar: 'Calendário',\n calendars: 'Calendários',\n event: 'Evento',\n task: 'Tarefa',\n appointmentSchedule: 'Agenda de compromissos',\n new: 'Novo',\n guests: 'Convidados',\n addGuests: 'Adicionar convidados',\n guest: 'convidado',\n guestCount: 'convidado',\n guestsCount: 'convidados',\n guestAdded: 'convidado adicionado',\n guestsAdded: 'convidados adicionados',\n whosJoining: 'Quem vai participar?',\n suggestedTimes: 'Horários sugeridos para convidados',\n viewSuggestions: 'Ver sugestões',\n whereWillItBe: 'Onde será?',\n dateAndTime: 'Data e hora',\n reminders: 'Lembretes',\n dragAndDrop: 'Arraste e solte arquivos ou',\n attachments: 'Anexos',\n reminderAtTime: 'No horário do evento',\n reminder5min: '5 minutos antes',\n reminder10min: '10 minutos antes',\n reminder15min: '15 minutos antes',\n reminder30min: '30 minutos antes',\n reminder1hour: '1 hora antes',\n reminder2hours: '2 horas antes',\n reminder1day: '1 dia antes',\n reminder2days: '2 dias antes',\n reminder1week: '1 semana antes',\n tomorrow: 'Amanhã',\n eventCount: 'evento',\n eventsCount: 'eventos',\n timezone: 'Fuso horário',\n localTime: 'Hora local',\n operations: 'Operações',\n reverseTimeLabel: 'Direção do tempo',\n search: 'Buscar eventos...',\n allTypes: 'Todos os tipos',\n noTitle: '(Sem título)',\n copy: '(Cópia)',\n clickToOpenInMaps: 'Clique para abrir no mapa',\n};\n\n// ─── Arabic ───────────────────────────────────────────────────────────────────\nexport const ar: CalendarTranslations = {\n today: 'اليوم',\n month: 'شهر',\n week: 'أسبوع',\n day: 'يوم',\n agenda: 'جدول الأعمال',\n resource: 'الموارد',\n create: 'إنشاء',\n createEvent: 'إنشاء حدث',\n editEvent: 'تعديل الحدث',\n newEvent: 'حدث جديد',\n saveChanges: 'حفظ التغييرات',\n delete: 'حذف',\n save: 'حفظ',\n cancel: 'إلغاء',\n edit: 'تعديل',\n duplicate: 'تكرار',\n close: 'إغلاق',\n moreOptions: 'المزيد من الخيارات',\n addAttachment: 'رفع ملفات',\n addReminder: 'إضافة',\n title: 'إضافة عنوان',\n addTitle: 'إضافة عنوان',\n start: 'البداية',\n end: 'النهاية',\n allDay: 'طوال اليوم',\n description: 'الوصف',\n descriptionAndAttachments: 'الوصف',\n addDescription: 'إضافة وصف أو ملاحظات...',\n location: 'إدخال العنوان',\n addLocation: 'إضافة موقع',\n locationHelpText: 'أدخل عنوانًا فعليًا (مثل \"شارع الملك فهد 1\") لإنشاء الخريطة.',\n notes: 'ملاحظات',\n repeat: 'تكرار',\n noRepeat: 'لا يتكرر',\n doesNotRepeat: 'لا يتكرر',\n daily: 'يومي',\n weekly: 'أسبوعي',\n monthly: 'شهري',\n yearly: 'سنوي',\n repeatFor: 'تكرار لـ',\n times: 'مرات',\n until: 'حتى',\n endRepeat: 'نهاية التكرار',\n never: 'أبدًا',\n afterOccurrences: 'بعد التكرارات',\n onDate: 'في التاريخ',\n selectCalendar: 'اختر التقويم',\n selectType: 'اختر النوع',\n calendar: 'التقويم',\n calendars: 'التقاويم',\n event: 'حدث',\n task: 'مهمة',\n appointmentSchedule: 'جدول المواعيد',\n new: 'جديد',\n guests: 'الضيوف',\n addGuests: 'إضافة ضيوف',\n guest: 'ضيف',\n guestCount: 'ضيف',\n guestsCount: 'ضيوف',\n guestAdded: 'ضيف مضاف',\n guestsAdded: 'ضيوف مضافون',\n whosJoining: 'من سينضم؟',\n suggestedTimes: 'الأوقات المقترحة للضيوف',\n viewSuggestions: 'عرض الاقتراحات',\n whereWillItBe: 'أين سيكون؟',\n dateAndTime: 'التاريخ والوقت',\n reminders: 'التذكيرات',\n dragAndDrop: 'اسحب وأفلت الملفات أو',\n attachments: 'المرفقات',\n reminderAtTime: 'عند وقت الحدث',\n reminder5min: 'قبل 5 دقائق',\n reminder10min: 'قبل 10 دقائق',\n reminder15min: 'قبل 15 دقيقة',\n reminder30min: 'قبل 30 دقيقة',\n reminder1hour: 'قبل ساعة',\n reminder2hours: 'قبل ساعتين',\n reminder1day: 'قبل يوم',\n reminder2days: 'قبل يومين',\n reminder1week: 'قبل أسبوع',\n tomorrow: 'غدًا',\n eventCount: 'حدث',\n eventsCount: 'أحداث',\n timezone: 'المنطقة الزمنية',\n localTime: 'التوقيت المحلي',\n operations: 'العمليات',\n reverseTimeLabel: 'اتجاه الوقت',\n search: 'البحث عن أحداث...',\n allTypes: 'جميع الأنواع',\n noTitle: '(بدون عنوان)',\n copy: '(نسخة)',\n clickToOpenInMaps: 'انقر للفتح في الخريطة',\n};\n\n// ─── Chinese Simplified ───────────────────────────────────────────────────────\nexport const zh: CalendarTranslations = {\n today: '今天',\n month: '月',\n week: '周',\n day: '天',\n agenda: '议程',\n resource: '资源',\n create: '创建',\n createEvent: '创建活动',\n editEvent: '编辑活动',\n newEvent: '新活动',\n saveChanges: '保存更改',\n delete: '删除',\n save: '保存',\n cancel: '取消',\n edit: '编辑',\n duplicate: '复制',\n close: '关闭',\n moreOptions: '更多选项',\n addAttachment: '上传文件',\n addReminder: '添加',\n title: '添加标题',\n addTitle: '添加标题',\n start: '开始',\n end: '结束',\n allDay: '全天',\n description: '描述',\n descriptionAndAttachments: '描述',\n addDescription: '添加描述或备注...',\n location: '输入地址',\n addLocation: '添加地点',\n locationHelpText: '输入实际地址(例如\"北京市朝阳区1号\")以生成地图。',\n notes: '备注',\n repeat: '重复',\n noRepeat: '不重复',\n doesNotRepeat: '不重复',\n daily: '每天',\n weekly: '每周',\n monthly: '每月',\n yearly: '每年',\n repeatFor: '重复',\n times: '次',\n until: '直到',\n endRepeat: '结束重复',\n never: '永不',\n afterOccurrences: '次后',\n onDate: '在日期',\n selectCalendar: '选择日历',\n selectType: '选择类型',\n calendar: '日历',\n calendars: '日历',\n event: '活动',\n task: '任务',\n appointmentSchedule: '预约日程',\n new: '新建',\n guests: '参与者',\n addGuests: '添加参与者',\n guest: '位参与者',\n guestCount: '位参与者',\n guestsCount: '位参与者',\n guestAdded: '位参与者已添加',\n guestsAdded: '位参与者已添加',\n whosJoining: '谁要参加?',\n suggestedTimes: '为来宾推荐的时间',\n viewSuggestions: '查看建议',\n whereWillItBe: '在哪里举办?',\n dateAndTime: '日期和时间',\n reminders: '提醒',\n dragAndDrop: '拖放文件或',\n attachments: '附件',\n reminderAtTime: '活动时间时',\n reminder5min: '提前5分钟',\n reminder10min: '提前10分钟',\n reminder15min: '提前15分钟',\n reminder30min: '提前30分钟',\n reminder1hour: '提前1小时',\n reminder2hours: '提前2小时',\n reminder1day: '提前1天',\n reminder2days: '提前2天',\n reminder1week: '提前1周',\n tomorrow: '明天',\n eventCount: '个活动',\n eventsCount: '个活动',\n timezone: '时区',\n localTime: '本地时间',\n operations: '操作',\n reverseTimeLabel: '时间方向',\n search: '搜索活动...',\n allTypes: '所有类型',\n noTitle: '(无标题)',\n copy: '(副本)',\n clickToOpenInMaps: '点击在地图中打开',\n};\n\n// ─── Japanese ─────────────────────────────────────────────────────────────────\nexport const ja: CalendarTranslations = {\n today: '今日',\n month: '月',\n week: '週',\n day: '日',\n agenda: 'アジェンダ',\n resource: 'リソース',\n create: '作成',\n createEvent: 'イベントを作成',\n editEvent: 'イベントを編集',\n newEvent: '新しいイベント',\n saveChanges: '変更を保存',\n delete: '削除',\n save: '保存',\n cancel: 'キャンセル',\n edit: '編集',\n duplicate: '複製',\n close: '閉じる',\n moreOptions: 'その他のオプション',\n addAttachment: 'ファイルをアップロード',\n addReminder: '追加',\n title: 'タイトルを追加',\n addTitle: 'タイトルを追加',\n start: '開始',\n end: '終了',\n allDay: '終日',\n description: '説明',\n descriptionAndAttachments: '説明',\n addDescription: '説明またはメモを追加...',\n location: '住所を入力',\n addLocation: '場所を追加',\n locationHelpText: '地図を生成するには実際の住所(例:「東京都渋谷区1-1-1」)を入力してください。',\n notes: 'メモ',\n repeat: '繰り返し',\n noRepeat: '繰り返しなし',\n doesNotRepeat: '繰り返しなし',\n daily: '毎日',\n weekly: '毎週',\n monthly: '毎月',\n yearly: '毎年',\n repeatFor: '繰り返し回数',\n times: '回',\n until: 'まで',\n endRepeat: '繰り返し終了',\n never: 'なし',\n afterOccurrences: '回後に終了',\n onDate: '日付に',\n selectCalendar: 'カレンダーを選択',\n selectType: 'タイプを選択',\n calendar: 'カレンダー',\n calendars: 'カレンダー',\n event: 'イベント',\n task: 'タスク',\n appointmentSchedule: '予約スケジュール',\n new: '新規',\n guests: 'ゲスト',\n addGuests: 'ゲストを追加',\n guest: '人のゲスト',\n guestCount: '人のゲスト',\n guestsCount: '人のゲスト',\n guestAdded: '人のゲストを追加しました',\n guestsAdded: '人のゲストを追加しました',\n whosJoining: '誰が参加しますか?',\n suggestedTimes: 'ゲストへの提案時間',\n viewSuggestions: '提案を見る',\n whereWillItBe: 'どこで開催されますか?',\n dateAndTime: '日時',\n reminders: 'リマインダー',\n dragAndDrop: 'ファイルをドラッグ&ドロップまたは',\n attachments: '添付ファイル',\n reminderAtTime: 'イベント時間に',\n reminder5min: '5分前',\n reminder10min: '10分前',\n reminder15min: '15分前',\n reminder30min: '30分前',\n reminder1hour: '1時間前',\n reminder2hours: '2時間前',\n reminder1day: '1日前',\n reminder2days: '2日前',\n reminder1week: '1週間前',\n tomorrow: '明日',\n eventCount: '件のイベント',\n eventsCount: '件のイベント',\n timezone: 'タイムゾーン',\n localTime: 'ローカル時間',\n operations: '操作',\n reverseTimeLabel: '時間の方向',\n search: 'イベントを検索...',\n allTypes: 'すべてのタイプ',\n noTitle: '(タイトルなし)',\n copy: '(コピー)',\n clickToOpenInMaps: 'クリックして地図で開く',\n};\n\n// ─── Korean ───────────────────────────────────────────────────────────────────\nexport const ko: CalendarTranslations = {\n today: '오늘',\n month: '월',\n week: '주',\n day: '일',\n agenda: '일정',\n resource: '리소스',\n create: '만들기',\n createEvent: '일정 만들기',\n editEvent: '일정 편집',\n newEvent: '새 일정',\n saveChanges: '변경사항 저장',\n delete: '삭제',\n save: '저장',\n cancel: '취소',\n edit: '편집',\n duplicate: '복제',\n close: '닫기',\n moreOptions: '더 보기',\n addAttachment: '파일 업로드',\n addReminder: '추가',\n title: '제목 추가',\n addTitle: '제목 추가',\n start: '시작',\n end: '종료',\n allDay: '종일',\n description: '설명',\n descriptionAndAttachments: '설명',\n addDescription: '설명 또는 메모 추가...',\n location: '주소 입력',\n addLocation: '장소 추가',\n locationHelpText: '지도를 생성하려면 실제 주소(예: \"서울시 강남구 1번지\")를 입력하세요.',\n notes: '메모',\n repeat: '반복',\n noRepeat: '반복 없음',\n doesNotRepeat: '반복 없음',\n daily: '매일',\n weekly: '매주',\n monthly: '매월',\n yearly: '매년',\n repeatFor: '반복 횟수',\n times: '번',\n until: '까지',\n endRepeat: '반복 종료',\n never: '없음',\n afterOccurrences: '번 후 종료',\n onDate: '날짜에',\n selectCalendar: '캘린더 선택',\n selectType: '유형 선택',\n calendar: '캘린더',\n calendars: '캘린더',\n event: '일정',\n task: '작업',\n appointmentSchedule: '예약 일정',\n new: '새로 만들기',\n guests: '참석자',\n addGuests: '참석자 추가',\n guest: '명 참석자',\n guestCount: '명 참석자',\n guestsCount: '명 참석자',\n guestAdded: '명 참석자 추가됨',\n guestsAdded: '명 참석자 추가됨',\n whosJoining: '누가 참가하나요?',\n suggestedTimes: '참석자를 위한 추천 시간',\n viewSuggestions: '제안 보기',\n whereWillItBe: '어디서 열리나요?',\n dateAndTime: '날짜 및 시간',\n reminders: '알림',\n dragAndDrop: '파일을 드래그 앤 드롭하거나',\n attachments: '첨부파일',\n reminderAtTime: '일정 시간에',\n reminder5min: '5분 전',\n reminder10min: '10분 전',\n reminder15min: '15분 전',\n reminder30min: '30분 전',\n reminder1hour: '1시간 전',\n reminder2hours: '2시간 전',\n reminder1day: '1일 전',\n reminder2days: '2일 전',\n reminder1week: '1주일 전',\n tomorrow: '내일',\n eventCount: '개 일정',\n eventsCount: '개 일정',\n timezone: '시간대',\n localTime: '로컬 시간',\n operations: '작업',\n reverseTimeLabel: '시간 방향',\n search: '일정 검색...',\n allTypes: '모든 유형',\n noTitle: '(제목 없음)',\n copy: '(복사)',\n clickToOpenInMaps: '지도에서 열려면 클릭하세요',\n};\n\n// ─── Russian ──────────────────────────────────────────────────────────────────\nexport const ru: CalendarTranslations = {\n today: 'Сегодня',\n month: 'Месяц',\n week: 'Неделя',\n day: 'День',\n agenda: 'Повестка',\n resource: 'Ресурсы',\n create: 'Создать',\n createEvent: 'Создать событие',\n editEvent: 'Изменить событие',\n newEvent: 'Новое событие',\n saveChanges: 'Сохранить изменения',\n delete: 'Удалить',\n save: 'Сохранить',\n cancel: 'Отмена',\n edit: 'Изменить',\n duplicate: 'Дублировать',\n close: 'Закрыть',\n moreOptions: 'Ещё параметры',\n addAttachment: 'Загрузить файлы',\n addReminder: 'Добавить',\n title: 'Добавить заголовок',\n addTitle: 'Добавить заголовок',\n start: 'Начало',\n end: 'Конец',\n allDay: 'Весь день',\n description: 'Описание',\n descriptionAndAttachments: 'Описание',\n addDescription: 'Добавить описание или заметки...',\n location: 'Ввести адрес',\n addLocation: 'Добавить место',\n locationHelpText: 'Введите физический адрес (например, \"ул. Ленина, 1\") для создания карты.',\n notes: 'Заметки',\n repeat: 'Повтор',\n noRepeat: 'Без повтора',\n doesNotRepeat: 'Без повтора',\n daily: 'Ежедневно',\n weekly: 'Еженедельно',\n monthly: 'Ежемесячно',\n yearly: 'Ежегодно',\n repeatFor: 'Повторять',\n times: 'раз',\n until: 'До',\n endRepeat: 'Конец повтора',\n never: 'Никогда',\n afterOccurrences: 'После повторений',\n onDate: 'На дату',\n selectCalendar: 'Выбрать календарь',\n selectType: 'Выбрать тип',\n calendar: 'Календарь',\n calendars: 'Календари',\n event: 'Событие',\n task: 'Задача',\n appointmentSchedule: 'Расписание встреч',\n new: 'Новый',\n guests: 'Гости',\n addGuests: 'Добавить гостей',\n guest: 'гость',\n guestCount: 'гость',\n guestsCount: 'гостей',\n guestAdded: 'гость добавлен',\n guestsAdded: 'гостей добавлено',\n whosJoining: 'Кто присоединится?',\n suggestedTimes: 'Предлагаемое время для гостей',\n viewSuggestions: 'Посмотреть предложения',\n whereWillItBe: 'Где это будет?',\n dateAndTime: 'Дата и время',\n reminders: 'Напоминания',\n dragAndDrop: 'Перетащите файлы или',\n attachments: 'Вложения',\n reminderAtTime: 'Во время события',\n reminder5min: 'За 5 минут',\n reminder10min: 'За 10 минут',\n reminder15min: 'За 15 минут',\n reminder30min: 'За 30 минут',\n reminder1hour: 'За 1 час',\n reminder2hours: 'За 2 часа',\n reminder1day: 'За 1 день',\n reminder2days: 'За 2 дня',\n reminder1week: 'За 1 неделю',\n tomorrow: 'Завтра',\n eventCount: 'событие',\n eventsCount: 'событий',\n timezone: 'Часовой пояс',\n localTime: 'Местное время',\n operations: 'Операции',\n reverseTimeLabel: 'Направление времени',\n search: 'Поиск событий...',\n allTypes: 'Все типы',\n noTitle: '(Без заголовка)',\n copy: '(Копия)',\n clickToOpenInMaps: 'Нажмите, чтобы открыть на карте',\n};\n\n// ─── Dutch ────────────────────────────────────────────────────────────────────\nexport const nl: CalendarTranslations = {\n today: 'Vandaag',\n month: 'Maand',\n week: 'Week',\n day: 'Dag',\n agenda: 'Agenda',\n resource: 'Bronnen',\n create: 'Aanmaken',\n createEvent: 'Evenement aanmaken',\n editEvent: 'Evenement bewerken',\n newEvent: 'Nieuw evenement',\n saveChanges: 'Wijzigingen opslaan',\n delete: 'Verwijderen',\n save: 'Opslaan',\n cancel: 'Annuleren',\n edit: 'Bewerken',\n duplicate: 'Dupliceren',\n close: 'Sluiten',\n moreOptions: 'Meer opties',\n addAttachment: 'Bestanden uploaden',\n addReminder: 'Toevoegen',\n title: 'Titel toevoegen',\n addTitle: 'Titel toevoegen',\n start: 'Begin',\n end: 'Einde',\n allDay: 'De hele dag',\n description: 'Beschrijving',\n descriptionAndAttachments: 'Beschrijving',\n addDescription: 'Beschrijving of notities toevoegen...',\n location: 'Adres invoeren',\n addLocation: 'Locatie toevoegen',\n locationHelpText: 'Voer een fysiek adres in (bijv. \"Hoofdstraat 1\") om de kaart te genereren.',\n notes: 'Notities',\n repeat: 'Herhalen',\n noRepeat: 'Geen herhaling',\n doesNotRepeat: 'Geen herhaling',\n daily: 'Dagelijks',\n weekly: 'Wekelijks',\n monthly: 'Maandelijks',\n yearly: 'Jaarlijks',\n repeatFor: 'Herhalen voor',\n times: 'keer',\n until: 'Tot',\n endRepeat: 'Herhaling beëindigen',\n never: 'Nooit',\n afterOccurrences: 'Na herhalingen',\n onDate: 'Op datum',\n selectCalendar: 'Kalender selecteren',\n selectType: 'Type selecteren',\n calendar: 'Kalender',\n calendars: 'Kalenders',\n event: 'Evenement',\n task: 'Taak',\n appointmentSchedule: 'Afspraakschema',\n new: 'Nieuw',\n guests: 'Gasten',\n addGuests: 'Gasten toevoegen',\n guest: 'gast',\n guestCount: 'gast',\n guestsCount: 'gasten',\n guestAdded: 'gast toegevoegd',\n guestsAdded: 'gasten toegevoegd',\n whosJoining: 'Wie doet er mee?',\n suggestedTimes: 'Voorgestelde tijden voor gasten',\n viewSuggestions: 'Suggesties bekijken',\n whereWillItBe: 'Waar zal het zijn?',\n dateAndTime: 'Datum en tijd',\n reminders: 'Herinneringen',\n dragAndDrop: 'Sleep bestanden of',\n attachments: 'Bijlagen',\n reminderAtTime: 'Op het moment van het evenement',\n reminder5min: '5 minuten van tevoren',\n reminder10min: '10 minuten van tevoren',\n reminder15min: '15 minuten van tevoren',\n reminder30min: '30 minuten van tevoren',\n reminder1hour: '1 uur van tevoren',\n reminder2hours: '2 uur van tevoren',\n reminder1day: '1 dag van tevoren',\n reminder2days: '2 dagen van tevoren',\n reminder1week: '1 week van tevoren',\n tomorrow: 'Morgen',\n eventCount: 'evenement',\n eventsCount: 'evenementen',\n timezone: 'Tijdzone',\n localTime: 'Lokale tijd',\n operations: 'Bewerkingen',\n reverseTimeLabel: 'Tijdrichting',\n search: 'Evenementen zoeken...',\n allTypes: 'Alle typen',\n noTitle: '(Geen titel)',\n copy: '(Kopie)',\n clickToOpenInMaps: 'Klik om op de kaart te openen',\n};\n\n// ─── Polish ───────────────────────────────────────────────────────────────────\nexport const pl: CalendarTranslations = {\n today: 'Dziś',\n month: 'Miesiąc',\n week: 'Tydzień',\n day: 'Dzień',\n agenda: 'Agenda',\n resource: 'Zasoby',\n create: 'Utwórz',\n createEvent: 'Utwórz wydarzenie',\n editEvent: 'Edytuj wydarzenie',\n newEvent: 'Nowe wydarzenie',\n saveChanges: 'Zapisz zmiany',\n delete: 'Usuń',\n save: 'Zapisz',\n cancel: 'Anuluj',\n edit: 'Edytuj',\n duplicate: 'Duplikuj',\n close: 'Zamknij',\n moreOptions: 'Więcej opcji',\n addAttachment: 'Prześlij pliki',\n addReminder: 'Dodaj',\n title: 'Dodaj tytuł',\n addTitle: 'Dodaj tytuł',\n start: 'Początek',\n end: 'Koniec',\n allDay: 'Cały dzień',\n description: 'Opis',\n descriptionAndAttachments: 'Opis',\n addDescription: 'Dodaj opis lub notatki...',\n location: 'Wprowadź adres',\n addLocation: 'Dodaj lokalizację',\n locationHelpText: 'Wprowadź adres fizyczny (np. \"ul. Główna 1\") aby wygenerować mapę.',\n notes: 'Notatki',\n repeat: 'Powtarzaj',\n noRepeat: 'Nie powtarza się',\n doesNotRepeat: 'Nie powtarza się',\n daily: 'Codziennie',\n weekly: 'Co tydzień',\n monthly: 'Co miesiąc',\n yearly: 'Co rok',\n repeatFor: 'Powtarzaj przez',\n times: 'razy',\n until: 'Do',\n endRepeat: 'Koniec powtarzania',\n never: 'Nigdy',\n afterOccurrences: 'Po powtórzeniach',\n onDate: 'W dniu',\n selectCalendar: 'Wybierz kalendarz',\n selectType: 'Wybierz typ',\n calendar: 'Kalendarz',\n calendars: 'Kalendarze',\n event: 'Wydarzenie',\n task: 'Zadanie',\n appointmentSchedule: 'Harmonogram spotkań',\n new: 'Nowy',\n guests: 'Goście',\n addGuests: 'Dodaj gości',\n guest: 'gość',\n guestCount: 'gość',\n guestsCount: 'gości',\n guestAdded: 'gość dodany',\n guestsAdded: 'gości dodanych',\n whosJoining: 'Kto dołącza?',\n suggestedTimes: 'Proponowane godziny dla gości',\n viewSuggestions: 'Zobacz sugestie',\n whereWillItBe: 'Gdzie się odbędzie?',\n dateAndTime: 'Data i godzina',\n reminders: 'Przypomnienia',\n dragAndDrop: 'Przeciągnij i upuść pliki lub',\n attachments: 'Załączniki',\n reminderAtTime: 'O czasie wydarzenia',\n reminder5min: '5 minut wcześniej',\n reminder10min: '10 minut wcześniej',\n reminder15min: '15 minut wcześniej',\n reminder30min: '30 minut wcześniej',\n reminder1hour: '1 godzinę wcześniej',\n reminder2hours: '2 godziny wcześniej',\n reminder1day: '1 dzień wcześniej',\n reminder2days: '2 dni wcześniej',\n reminder1week: '1 tydzień wcześniej',\n tomorrow: 'Jutro',\n eventCount: 'wydarzenie',\n eventsCount: 'wydarzeń',\n timezone: 'Strefa czasowa',\n localTime: 'Czas lokalny',\n operations: 'Operacje',\n reverseTimeLabel: 'Kierunek czasu',\n search: 'Szukaj wydarzeń...',\n allTypes: 'Wszystkie typy',\n noTitle: '(Bez tytułu)',\n copy: '(Kopia)',\n clickToOpenInMaps: 'Kliknij, aby otworzyć na mapie',\n};\n\n// ─── Swedish ──────────────────────────────────────────────────────────────────\nexport const sv: CalendarTranslations = {\n today: 'Idag',\n month: 'Månad',\n week: 'Vecka',\n day: 'Dag',\n agenda: 'Agenda',\n resource: 'Resurser',\n create: 'Skapa',\n createEvent: 'Skapa händelse',\n editEvent: 'Redigera händelse',\n newEvent: 'Ny händelse',\n saveChanges: 'Spara ändringar',\n delete: 'Ta bort',\n save: 'Spara',\n cancel: 'Avbryt',\n edit: 'Redigera',\n duplicate: 'Duplicera',\n close: 'Stäng',\n moreOptions: 'Fler alternativ',\n addAttachment: 'Ladda upp filer',\n addReminder: 'Lägg till',\n title: 'Lägg till titel',\n addTitle: 'Lägg till titel',\n start: 'Start',\n end: 'Slut',\n allDay: 'Hela dagen',\n description: 'Beskrivning',\n descriptionAndAttachments: 'Beskrivning',\n addDescription: 'Lägg till beskrivning eller anteckningar...',\n location: 'Ange adress',\n addLocation: 'Lägg till plats',\n locationHelpText: 'Ange en fysisk adress (t.ex. \"Storgatan 1\") för att generera kartan.',\n notes: 'Anteckningar',\n repeat: 'Upprepa',\n noRepeat: 'Upprepas inte',\n doesNotRepeat: 'Upprepas inte',\n daily: 'Dagligen',\n weekly: 'Varje vecka',\n monthly: 'Varje månad',\n yearly: 'Varje år',\n repeatFor: 'Upprepa',\n times: 'gånger',\n until: 'Till',\n endRepeat: 'Avsluta upprepning',\n never: 'Aldrig',\n afterOccurrences: 'Efter upprepningar',\n onDate: 'På datum',\n selectCalendar: 'Välj kalender',\n selectType: 'Välj typ',\n calendar: 'Kalender',\n calendars: 'Kalendrar',\n event: 'Händelse',\n task: 'Uppgift',\n appointmentSchedule: 'Bokningsschema',\n new: 'Ny',\n guests: 'Gäster',\n addGuests: 'Lägg till gäster',\n guest: 'gäst',\n guestCount: 'gäst',\n guestsCount: 'gäster',\n guestAdded: 'gäst tillagd',\n guestsAdded: 'gäster tillagda',\n whosJoining: 'Vem deltar?',\n suggestedTimes: 'Föreslagna tider för gäster',\n viewSuggestions: 'Visa förslag',\n whereWillItBe: 'Var ska det vara?',\n dateAndTime: 'Datum och tid',\n reminders: 'Påminnelser',\n dragAndDrop: 'Dra och släpp filer eller',\n attachments: 'Bilagor',\n reminderAtTime: 'Vid händelsens tid',\n reminder5min: '5 minuter innan',\n reminder10min: '10 minuter innan',\n reminder15min: '15 minuter innan',\n reminder30min: '30 minuter innan',\n reminder1hour: '1 timme innan',\n reminder2hours: '2 timmar innan',\n reminder1day: '1 dag innan',\n reminder2days: '2 dagar innan',\n reminder1week: '1 vecka innan',\n tomorrow: 'Imorgon',\n eventCount: 'händelse',\n eventsCount: 'händelser',\n timezone: 'Tidszon',\n localTime: 'Lokal tid',\n operations: 'Åtgärder',\n reverseTimeLabel: 'Tidsriktning',\n search: 'Sök händelser...',\n allTypes: 'Alla typer',\n noTitle: '(Ingen titel)',\n copy: '(Kopia)',\n clickToOpenInMaps: 'Klicka för att öppna i karta',\n};\n\n// ─── Locale map: language code → translations object ─────────────────────────\nexport const LOCALES: Record<LanguageCode, CalendarTranslations> = {\n tr, en, fr, de, es, it, pt, ar, zh, ja, ko, ru, nl, pl, sv,\n};\n\n// ─── date-fns locale map: language code → date-fns Locale ────────────────────\nexport const DATE_FNS_LOCALES: Record<LanguageCode, Locale> = {\n tr: dnsTr,\n en: dnsEnUS,\n fr: dnsFr,\n de: dnsDe,\n es: dnsEs,\n it: dnsIt,\n pt: dnsPt,\n ar: dnsAr,\n zh: dnsZhCN,\n ja: dnsJa,\n ko: dnsKo,\n ru: dnsRu,\n nl: dnsNl,\n pl: dnsPl,\n sv: dnsSv,\n};\n\n/**\n * Returns the full translation object for a given language code,\n * merged with any custom override translations.\n */\nexport function getTranslations(\n language: LanguageCode = 'tr',\n overrides: Partial<CalendarTranslations> = {}\n): CalendarTranslations {\n return { ...LOCALES[language], ...overrides };\n}\n","import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { format, Locale } from 'date-fns';\nimport { Button } from './ui/button';\nimport { ChevronLeft, ChevronRight, Menu, Moon, Sun, CalendarDays, CalendarRange, Calendar, ListTodo, ChevronDown, Globe, Plus, MoreHorizontal, CalendarCheck2 } from 'lucide-react';\nimport { ViewType, CustomView } from '../types';\nimport { LanguageCode, LANGUAGE_META } from '../locales';\nimport { cn } from '../utils';\n\nconst DROPDOWN_GAP = 8;\nconst VIEWPORT_PADDING = 8;\nconst LANG_DROPDOWN_WIDTH = 208; // matches w-52\nconst CUSTOM_VIEW_DROPDOWN_WIDTH = 160; // matches min-w-[160px]\n\n/** Position a fixed dropdown below its trigger, clamped inside the viewport. */\nfunction getDropdownPosition(triggerRect: DOMRect, dropdownWidth: number) {\n let left = triggerRect.left;\n const top = triggerRect.bottom + DROPDOWN_GAP;\n\n // If left-aligned panel overflows right, align its right edge with the trigger\n if (left + dropdownWidth > window.innerWidth - VIEWPORT_PADDING) {\n left = triggerRect.right - dropdownWidth;\n }\n\n // Final clamp so the panel never leaves the viewport\n left = Math.max(VIEWPORT_PADDING, Math.min(left, window.innerWidth - dropdownWidth - VIEWPORT_PADDING));\n\n return { top, left };\n}\n\ninterface CalendarHeaderProps {\n currentDate: Date;\n onPrev: () => void;\n onNext: () => void;\n onToday: () => void;\n view: ViewType;\n onViewChange: (view: ViewType) => void;\n onMenuClick?: () => void;\n isDarkMode?: boolean;\n onThemeToggle?: () => void;\n translations: any;\n hideViewSwitcher?: boolean;\n language?: LanguageCode;\n onLanguageChange?: (lang: LanguageCode) => void;\n locale?: Locale;\n /** Called when the user clicks the \"Create Event\" button in the header. */\n onCreateEvent?: () => void;\n /** Custom views shown after the built-in view buttons with a divider. */\n customViews?: CustomView[];\n /** The id of the currently active custom view (null = built-in view). */\n activeCustomViewId?: string | null;\n /** Called when a custom view button is clicked. */\n onCustomViewChange?: (id: string | null) => void;\n /** Total number of visible events – displayed as a badge before the view switcher. */\n eventCount?: number;\n /** When true, hides the language-switcher dropdown. The active language is still applied. */\n hideLanguageSwitcher?: boolean;\n}\n\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\n currentDate,\n onPrev,\n onNext,\n onToday,\n view,\n onViewChange,\n onMenuClick,\n isDarkMode,\n onThemeToggle,\n translations,\n hideViewSwitcher,\n language = 'tr',\n onLanguageChange,\n locale,\n onCreateEvent,\n customViews,\n activeCustomViewId,\n onCustomViewChange,\n eventCount,\n hideLanguageSwitcher = false,\n}) => {\n const [isLangOpen, setIsLangOpen] = useState(false);\n const [isCustomViewOpen, setIsCustomViewOpen] = useState(false);\n const langButtonRef = useRef<HTMLButtonElement>(null);\n const langDropdownRef = useRef<HTMLDivElement>(null);\n const customViewDropdownRef = useRef<HTMLDivElement>(null);\n const customViewButtonRef = useRef<HTMLButtonElement>(null);\n\n // Measured positions for portal-rendered dropdowns\n const [langPos, setLangPos] = useState<{ top: number; left: number } | null>(null);\n const [customViewPos, setCustomViewPos] = useState<{ top: number; left: number } | null>(null);\n\n const updateLangPos = useCallback(() => {\n const el = langButtonRef.current;\n if (!el) return;\n setLangPos(getDropdownPosition(el.getBoundingClientRect(), LANG_DROPDOWN_WIDTH));\n }, []);\n\n const updateCustomViewPos = useCallback(() => {\n const el = customViewButtonRef.current;\n if (!el) return;\n setCustomViewPos(getDropdownPosition(el.getBoundingClientRect(), CUSTOM_VIEW_DROPDOWN_WIDTH));\n }, []);\n\n // Measure language button position using useLayoutEffect for accuracy after paint\n useLayoutEffect(() => {\n if (!isLangOpen) return;\n updateLangPos();\n }, [isLangOpen, updateLangPos]);\n\n // Measure custom-view button position\n useLayoutEffect(() => {\n if (!isCustomViewOpen) return;\n updateCustomViewPos();\n }, [isCustomViewOpen, updateCustomViewPos]);\n\n // Re-measure dropdowns on scroll/resize so they stay anchored to the trigger\n useEffect(() => {\n if (!isLangOpen) return;\n const handle = () => updateLangPos();\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n return () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n }, [isLangOpen, updateLangPos]);\n\n useEffect(() => {\n if (!isCustomViewOpen) return;\n const handle = () => updateCustomViewPos();\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n return () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n }, [isCustomViewOpen, updateCustomViewPos]);\n\n // Close language dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n const insideButton = langButtonRef.current?.contains(target);\n const insideDropdown = langDropdownRef.current?.contains(target);\n if (!insideButton && !insideDropdown) setIsLangOpen(false);\n };\n if (isLangOpen) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isLangOpen]);\n\n // Close custom-view dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n const insideButton = customViewButtonRef.current?.contains(target);\n const insideDropdown = customViewDropdownRef.current?.contains(target);\n if (!insideButton && !insideDropdown) setIsCustomViewOpen(false);\n };\n if (isCustomViewOpen) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isCustomViewOpen]);\n\n const viewConfig = [\n { key: 'month', icon: CalendarDays },\n { key: 'week', icon: CalendarRange },\n { key: 'day', icon: Calendar },\n { key: 'agenda', icon: ListTodo },\n ] as const;\n\n const currentLang = LANGUAGE_META[language] ?? LANGUAGE_META['tr'];\n\n return (\n <div className=\"flex flex-col md:flex-row items-center justify-between px-3 md:px-5 py-3 border-b-[0px] border-border/50 bg-gradient-to-r from-background via-background to-muted/20 gap-3 md:gap-0 min-h-[64px]\">\n {/* ── Left Section: Menu, Navigation, Date Title ── */}\n <div className=\"flex items-center gap-2 w-full md:w-auto justify-between md:justify-start\">\n {/* Controls group: hamburger + today + create + arrows */}\n <div className=\"flex items-center gap-2 md:gap-3\">\n {/* Sidebar toggle */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/80 rounded-xl h-10 w-10 transition-all duration-200\"\n onClick={onMenuClick}\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n\n {/* Today button */}\n <Button\n variant=\"outline\"\n onClick={onToday}\n className=\"h-9 px-5 rounded-xl text-sm font-medium hidden sm:inline-flex border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200\"\n >\n {translations.today}\n </Button>\n\n {/* Create Event button — icon only; tooltip label appears on hover */}\n {onCreateEvent && (\n <div className=\"relative group hidden sm:block\">\n <Button\n onClick={onCreateEvent}\n size=\"icon\"\n className=\"h-9 w-9 rounded-xl shadow-sm shadow-primary/20 transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n\n {/* Tooltip */}\n <div className=\"pointer-events-none absolute left-1/2 -translate-x-1/2 top-full mt-2 z-50 opacity-0 group-hover:opacity-100 transition-opacity duration-150\">\n <div className=\"bg-popover text-popover-foreground text-xs font-medium px-2.5 py-1.5 rounded-lg shadow-md border border-border/60 whitespace-nowrap\">\n {translations.createEvent ?? translations.create}\n </div>\n {/* Arrow */}\n <div className=\"absolute -top-1 left-1/2 -translate-x-1/2 w-2 h-2 bg-popover border-l border-t border-border/60 rotate-45\" />\n </div>\n </div>\n )}\n\n {/* Navigation arrows */}\n <div className=\"flex items-center bg-muted/40 rounded-xl p-0.5\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onPrev}\n className=\"rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200\"\n >\n <ChevronLeft className=\"h-4 w-4 text-muted-foreground\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onNext}\n className=\"rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200\"\n >\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </Button>\n </div>\n\n {/* Current month/year — inline on desktop (sm+), hidden on mobile (moved outside) */}\n <div className=\"ml-2 md:ml-4 hidden sm:block\">\n <h2 className=\"text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight\">\n {format(currentDate, 'MMMM yyyy', { locale })}\n </h2>\n </div>\n </div>\n\n {/* Current month/year — right-aligned on mobile only */}\n <div className=\"sm:hidden\">\n <h2 className=\"text-lg font-semibold text-foreground whitespace-nowrap capitalize tracking-tight\">\n {format(currentDate, 'MMMM yyyy', { locale })}\n </h2>\n </div>\n </div>\n\n {/* ── Right Section: Language Switcher, Theme Toggle, View Switcher ── */}\n <div className=\"flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end\">\n\n {/* ── Language Dropdown – hidden when hideLanguageSwitcher is true ── */}\n {onLanguageChange && !hideLanguageSwitcher && (\n <div className=\"relative\">\n <button\n ref={langButtonRef}\n onClick={() => setIsLangOpen(!isLangOpen)}\n className={cn(\n \"flex items-center gap-1.5 h-9 px-3 rounded-xl text-sm font-medium transition-all duration-200\",\n \"text-muted-foreground hover:text-foreground hover:bg-accent/80\",\n isLangOpen && \"bg-accent/80 text-foreground\"\n )}\n title={currentLang.english}\n >\n <Globe className=\"h-3.5 w-3.5\" />\n <span className=\"text-base leading-none\">{currentLang.flag}</span>\n <span className=\"hidden sm:inline text-xs font-semibold uppercase tracking-wider\">\n {language}\n </span>\n <ChevronDown className={cn(\"h-3.5 w-3.5 transition-transform duration-200\", isLangOpen && \"rotate-180\")} />\n </button>\n\n {/* Dropdown — portalled to body so transforms/overflow can't affect positioning */}\n {isLangOpen && langPos && createPortal(\n <div\n ref={langDropdownRef}\n className=\"fixed w-52 bg-background border border-border/60 rounded-2xl shadow-2xl z-[9999] overflow-hidden py-1.5\"\n style={{ top: langPos.top, left: langPos.left, width: LANG_DROPDOWN_WIDTH }}\n >\n {/* Header */}\n <div className=\"px-3 py-2 border-b border-border/40 mb-1\">\n <p className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Language / Dil\n </p>\n </div>\n\n {/* Language options */}\n <div className=\"max-h-72 overflow-y-auto\">\n {(Object.entries(LANGUAGE_META) as [LanguageCode, typeof LANGUAGE_META[LanguageCode]][]).map(([code, meta]) => (\n <button\n key={code}\n onClick={() => { onLanguageChange(code); setIsLangOpen(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 text-sm transition-all duration-150\",\n \"hover:bg-accent/60\",\n language === code\n ? \"bg-primary/10 text-primary font-semibold\"\n : \"text-foreground\"\n )}\n >\n <span className=\"text-lg leading-none w-6 text-center\">{meta.flag}</span>\n <div className=\"flex-1 text-left\">\n <div className={cn(\"font-medium\", meta.rtl && \"text-right\")}>{meta.native}</div>\n <div className=\"text-xs text-muted-foreground\">{meta.english}</div>\n </div>\n {language === code && <div className=\"w-2 h-2 rounded-full bg-primary shrink-0\" />}\n </button>\n ))}\n </div>\n </div>,\n document.body\n )}\n </div>\n )}\n\n {/* ── Theme Toggle ── */}\n {onThemeToggle && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"rounded-xl h-9 w-9 hover:bg-accent/80 transition-all duration-200\"\n onClick={onThemeToggle}\n >\n {isDarkMode ? (\n <Sun className=\"h-4 w-4 text-amber-500\" />\n ) : (\n <Moon className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </Button>\n )}\n\n {/* ── Event count badge – displayed to the left of the view switcher ── */}\n {typeof eventCount === 'number' && !hideViewSwitcher && (\n <div\n className=\"flex items-center gap-1.5 h-8 px-3 rounded-xl bg-primary/10 text-primary text-xs font-semibold tabular-nums select-none border border-primary/20 shadow-sm shadow-primary/10\"\n title={`${eventCount} event${eventCount !== 1 ? 's' : ''}`}\n >\n <CalendarCheck2 className=\"w-3.5 h-3.5 shrink-0\" />\n <span>{eventCount}</span>\n </div>\n )}\n\n {/* ── View Switcher (built-in + custom views) ── */}\n {!hideViewSwitcher && (\n <div className=\"flex items-center bg-muted/50 backdrop-blur-sm rounded-xl p-1 gap-0.5\">\n {/* Built-in views: month / week / day / agenda */}\n {viewConfig.map(({ key, icon: Icon }) => (\n <Button\n key={key}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => { onViewChange(key); onCustomViewChange?.(null); }}\n className={cn(\n \"h-8 px-3 text-xs rounded-lg transition-all duration-200 gap-1.5\",\n view === key && !activeCustomViewId\n ? \"bg-background shadow-sm text-foreground font-medium border-[0.5px] border-border/50\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"hidden sm:inline\">{translations[key]}</span>\n </Button>\n ))}\n\n {/* Divider + \"...\" dropdown for custom views */}\n {customViews && customViews.length > 0 && (\n <>\n <div className=\"w-px h-5 bg-border/60 mx-0.5 shrink-0\" />\n\n <div className=\"relative\">\n {/* Trigger button — highlighted when a custom view is active */}\n <Button\n ref={customViewButtonRef}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCustomViewOpen((o) => !o)}\n className={cn(\n \"h-8 px-2.5 text-xs rounded-lg transition-all duration-200 gap-1\",\n activeCustomViewId\n ? \"bg-background shadow-sm text-foreground font-medium border-[0.5px] border-border/50\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background/50\"\n )}\n title=\"Daha fazla görünüm\"\n >\n {activeCustomViewId\n ? customViews.find((cv) => cv.id === activeCustomViewId)?.label\n : <MoreHorizontal className=\"h-3.5 w-3.5\" />}\n <ChevronDown className={cn(\"h-3 w-3 transition-transform duration-150\", isCustomViewOpen && \"rotate-180\")} />\n </Button>\n\n {/* Dropdown — portalled to body for correct positioning on mobile */}\n {isCustomViewOpen && customViewPos && createPortal(\n <div\n ref={customViewDropdownRef}\n className=\"fixed min-w-[160px] bg-background border border-border/60 rounded-2xl shadow-2xl z-[9999] overflow-hidden py-1.5\"\n style={{ top: customViewPos.top, left: customViewPos.left, minWidth: CUSTOM_VIEW_DROPDOWN_WIDTH }}\n >\n {customViews.map((cv) => (\n <button\n key={cv.id}\n onClick={() => { onCustomViewChange?.(cv.id); setIsCustomViewOpen(false); }}\n className={cn(\n \"w-full flex items-center gap-2.5 px-3 py-2.5 text-sm transition-all duration-150\",\n \"hover:bg-accent/60\",\n activeCustomViewId === cv.id\n ? \"bg-primary/10 text-primary font-semibold\"\n : \"text-foreground\"\n )}\n >\n {cv.icon && (\n <span className=\"w-4 h-4 flex items-center justify-center shrink-0\">\n {cv.icon}\n </span>\n )}\n <span>{cv.label}</span>\n {activeCustomViewId === cv.id && (\n <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </button>\n ))}\n </div>,\n document.body\n )}\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { \n startOfMonth, \n endOfMonth, \n startOfWeek, \n endOfWeek, \n eachDayOfInterval, \n addDays,\n isSameMonth,\n isSameDay,\n isToday,\n format,\n Locale,\n addMonths,\n subMonths,\n addWeeks,\n subWeeks,\n addDays as addDaysFns,\n subDays\n} from 'date-fns';\n\nexport const getMonthGrid = (date: Date, weekStartOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] => {\n const monthStart = startOfMonth(date);\n const monthEnd = endOfMonth(monthStart);\n \n const startDate = startOfWeek(monthStart, { weekStartsOn: weekStartOn });\n const endDate = endOfWeek(monthEnd, { weekStartsOn: weekStartOn });\n\n const dateFormat = 'd';\n const rows = [];\n let days = [];\n let day = startDate;\n let formattedDate = '';\n\n const grid: Date[] = [];\n\n // If the grid needs to always show 6 weeks (42 days) to be consistent\n // const totalDays = 42; \n // But eachDayOfInterval is easier.\n \n return eachDayOfInterval({\n start: startDate,\n end: endDate\n });\n};\n\nexport const getWeekDays = (date: Date, weekStartOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] => {\n const start = startOfWeek(date, { weekStartsOn: weekStartOn });\n const end = endOfWeek(date, { weekStartsOn: weekStartOn });\n return eachDayOfInterval({ start, end });\n};\n\nexport const getTimeSlots = (startHour: number = 0, endHour: number = 24, intervalMinutes: number = 30): Date[] => {\n // This might return just simple objects or dates relative to a base\n // For rendering the y-axis, we just need the labels usually.\n // But for the grid, we might need slots.\n \n // Simplified for now: return strings or just numbers\n return []; \n};\n\n// ─── Time-format helpers ──────────────────────────────────────────────────────\n\n/**\n * Languages that conventionally use 12-hour AM/PM clock.\n * All others default to 24-hour format.\n */\nconst AMPM_LANGUAGES = new Set(['en']);\n\n/** Returns true when the given language uses AM/PM (12-hour) clock. */\nexport const uses12Hour = (language: string): boolean =>\n AMPM_LANGUAGES.has(language);\n\n/**\n * Short hour label used on time-axis columns (e.g. \"2 PM\" vs \"14:00\").\n * - 12h: 'h a' → \"2 PM\"\n * - 24h: 'H:mm' → \"14:00\" (omits leading zero and colon when on the hour: use 'H' not 'HH')\n */\nexport const getTimeFormat = (language: string): string =>\n uses12Hour(language) ? 'h a' : 'H:mm';\n\n/**\n * Full time string including minutes (e.g. \"2:30 PM\" vs \"14:30\").\n * - 12h: 'h:mm a' → \"2:30 PM\"\n * - 24h: 'HH:mm' → \"14:30\"\n */\nexport const getTimeFormatFull = (language: string): string =>\n uses12Hour(language) ? 'h:mm a' : 'HH:mm';\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport {\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n isSameMonth,\n isSameDay,\n isToday,\n format,\n addMonths,\n subMonths,\n addWeeks,\n subWeeks,\n addDaysFns,\n subDays\n};\n","import React from 'react';\r\nimport { format, isSameMonth, isSameDay, isToday, addMonths, subMonths } from 'date-fns';\r\nimport type { Locale } from 'date-fns';\r\nimport { getMonthGrid } from '../lib/date';\r\nimport { Button } from './ui/button';\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../utils';\r\n\r\nimport { ViewType } from '../types';\r\n\r\ninterface MiniCalendarProps {\r\n currentDate: Date;\r\n onDateChange: (date: Date) => void;\r\n onViewChange?: (view: ViewType) => void;\r\n className?: string;\r\n /** date-fns locale used for month/year header formatting. */\r\n locale?: Locale;\r\n}\r\n\r\nexport const MiniCalendar: React.FC<MiniCalendarProps> = ({\r\n currentDate,\r\n onDateChange,\r\n onViewChange,\r\n className,\r\n locale,\r\n}) => {\r\n const [viewDate, setViewDate] = React.useState(currentDate);\r\n \r\n // Sync viewDate with currentDate when it changes externally\r\n React.useEffect(() => {\r\n setViewDate(currentDate);\r\n }, [currentDate]);\r\n\r\n const days = React.useMemo(() => getMonthGrid(viewDate), [viewDate]);\r\n\r\n // Generate weekday headers from locale (Mon=0 … Sun=6 shorthand)\r\n const weekDays = React.useMemo(() => {\r\n const base = new Date(2024, 0, 7); // Sunday Jan 7 2024\r\n return Array.from({ length: 7 }, (_, i) => {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + i);\r\n return format(d, 'EEEEE', { locale }); // narrow (single letter)\r\n });\r\n }, [locale]);\r\n\r\n const handlePrev = () => {\r\n const newDate = subMonths(viewDate, 1);\r\n setViewDate(newDate);\r\n // Optional: if user wants to sync main calendar on arrow click, uncomment:\r\n onDateChange(newDate);\r\n if (onViewChange) onViewChange('month');\r\n };\r\n\r\n const handleNext = () => {\r\n const newDate = addMonths(viewDate, 1);\r\n setViewDate(newDate);\r\n // Optional: if user wants to sync main calendar on arrow click, uncomment:\r\n onDateChange(newDate);\r\n if (onViewChange) onViewChange('month');\r\n };\r\n \r\n const handleDateClick = (day: Date) => {\r\n onDateChange(day);\r\n if (onViewChange) onViewChange('day');\r\n };\r\n\r\n return (\r\n <div className={cn(\"px-4 w-[260px]\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <span className=\"text-sm font-semibold text-foreground capitalize\">\r\n {format(viewDate, 'MMMM yyyy', { locale })}\r\n </span>\r\n <div className=\"flex items-center bg-muted/40 rounded-lg p-0.5\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-7 w-7 rounded-md hover:bg-background/80 transition-all\"\r\n onClick={handlePrev}\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-7 w-7 rounded-md hover:bg-background/80 transition-all\"\r\n onClick={handleNext}\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Weekday Headers */}\r\n <div className=\"grid grid-cols-7 gap-y-2 text-center mb-2\">\r\n {weekDays.map((day, i) => (\r\n <div key={`${day}-${i}`} className=\"text-[10px] text-muted-foreground/70 font-semibold uppercase\">\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Days Grid */}\r\n <div className=\"grid grid-cols-7 gap-y-1 text-center\">\r\n {days.map(day => {\r\n const isSelected = isSameDay(day, currentDate);\r\n const isCurrentMonth = isSameMonth(day, viewDate);\r\n const isTodayDate = isToday(day);\r\n\r\n return (\r\n <button\r\n key={day.toISOString()}\r\n onClick={() => handleDateClick(day)}\r\n className={cn(\r\n \"h-8 w-8 mx-auto flex items-center justify-center text-xs rounded-xl transition-all duration-200 font-medium\",\r\n !isCurrentMonth && \"text-muted-foreground/30\",\r\n isCurrentMonth && !isSelected && !isTodayDate && \"text-foreground hover:bg-accent/80\",\r\n isSelected && \"bg-primary text-primary-foreground shadow-md shadow-primary/30 scale-105\",\r\n !isSelected && isTodayDate && \"bg-primary/10 text-primary ring-1 ring-primary/30\"\r\n )}\r\n >\r\n {format(day, 'd')}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\nimport { Button } from './ui/button';\nimport { ChevronDown, Globe, LayoutGrid, X } from 'lucide-react';\nimport { MiniCalendar } from './MiniCalendar';\nimport { cn } from '../utils';\nimport { toZonedTime } from 'date-fns-tz';\nimport { format } from 'date-fns';\n\nimport { ViewType, CalendarEvent, SidebarMenuItem } from '../types';\n\ninterface SidebarProps {\n currentDate: Date;\n onDateChange: (date: Date) => void;\n onViewChange?: (view: ViewType) => void;\n onEventCreate?: () => void;\n timezone?: string;\n onTimezoneChange?: (timezone: string) => void;\n className?: string;\n readOnly?: boolean;\n calendars?: {\n id: string;\n label: string;\n color?: string;\n active?: boolean;\n }[];\n onCalendarToggle?: (calendarId: string, active: boolean) => void;\n translations?: any;\n events?: CalendarEvent[];\n onImport?: (events: Partial<CalendarEvent>[]) => void;\n /** date-fns locale forwarded to the built-in MiniCalendar for date formatting. */\n locale?: import('date-fns').Locale;\n /** Optional custom mini-calendar component replacing the built-in one. */\n renderMiniCalendar?: (props: {\n currentDate: Date;\n onDateChange: (date: Date) => void;\n onViewChange?: (view: ViewType) => void;\n }) => React.ReactNode;\n /** Custom navigation items; clicking one sets it as the active view. */\n sidebarMenus?: SidebarMenuItem[];\n /** The id of the currently active custom menu (null = calendar view). */\n activeCustomMenu?: string | null;\n /** Called when a custom menu item is clicked. */\n onCustomMenuChange?: (id: string | null) => void;\n /** When true, time flows 23:00 → 00:00 (bottom-to-top). */\n reverseTime?: boolean;\n /** Called when the reverse-time toggle is clicked. */\n onReverseTimeChange?: (reversed: boolean) => void;\n /** Custom views to list inside the İşlemler section. */\n customViews?: import('../types').CustomView[];\n /** The id of the currently active custom view (null = built-in). */\n activeCustomViewId?: string | null;\n /** Called when a custom view row is clicked in the sidebar. */\n onCustomViewChange?: (id: string | null) => void;\n}\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n currentDate,\n onDateChange,\n onViewChange,\n onEventCreate,\n timezone,\n onTimezoneChange,\n className,\n readOnly,\n calendars,\n onCalendarToggle,\n translations,\n renderMiniCalendar,\n sidebarMenus,\n activeCustomMenu,\n onCustomMenuChange,\n reverseTime = false,\n onReverseTimeChange,\n customViews,\n activeCustomViewId,\n onCustomViewChange,\n locale,\n}) => {\n const [calendarsOpen, setCalendarsOpen] = useState(true);\n const [timezoneOpen, setTimezoneOpen] = useState(false);\n const [now, setNow] = useState<Date | null>(null);\n const [hasMounted, setHasMounted] = useState(false);\n // Controls whether the menu panel is expanded (replaces the İşlemler button)\n const [menusExpanded, setMenusExpanded] = useState(false);\n\n // Only run on client to prevent hydration mismatch\n useEffect(() => {\n setHasMounted(true);\n setNow(new Date());\n const timer = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(timer);\n }, []);\n \n // Default demo data if no calendars provided\n const defaultCalendars = [\n { id: '1', label: 'My Calendar', color: '#3b82f6', active: true },\n { id: '2', label: 'Birthdays', color: '#10b981', active: true },\n { id: '3', label: 'Tasks', color: '#6366f1', active: true },\n ];\n\n const displayCalendars = calendars || defaultCalendars;\n\n const getAcronym = (tz: string) => {\n if (!tz || !now) return 'LOC';\n try {\n return new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' })\n .formatToParts(now)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) { return ''; }\n };\n\n const timezones = [\n { value: '', label: translations?.localTime ?? 'Local Time', acronym: 'LOC' },\n { value: 'UTC', label: 'UTC', acronym: 'UTC' },\n { value: 'America/New_York', label: 'New York', acronym: 'EST' },\n { value: 'America/Chicago', label: 'Chicago', acronym: 'CST' },\n { value: 'America/Denver', label: 'Denver', acronym: 'MST' },\n { value: 'America/Los_Angeles', label: 'Los Angeles', acronym: 'PST' },\n { value: 'Europe/London', label: 'London', acronym: 'GMT' },\n { value: 'Europe/Paris', label: 'Paris', acronym: 'CET' },\n { value: 'Europe/Berlin', label: 'Berlin', acronym: 'CET' },\n { value: 'Asia/Dubai', label: 'Dubai', acronym: 'GST' },\n { value: 'Asia/Tokyo', label: 'Tokyo', acronym: 'JST' },\n { value: 'Asia/Singapore', label: 'Singapore', acronym: 'SGT' },\n { value: 'Australia/Sydney', label: 'Sydney', acronym: 'AEDT' },\n ];\n\n // Format label with time: HH:MM (ACR)\n const formatTzLabel = (tz: { value: string, label: string, acronym: string }, showTime: boolean = true) => {\n // Don't show time if not mounted yet (SSR) to prevent hydration mismatch\n if (!hasMounted || !now || !showTime) {\n return <span>{tz.label}</span>;\n }\n\n let time = '';\n let acronym = tz.acronym;\n\n try {\n if (!tz.value) {\n time = format(now, 'HH:mm');\n // Try to get real local acronym\n try {\n acronym = new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' })\n .formatToParts(now)\n .find(part => part.type === 'timeZoneName')?.value || 'LOC';\n } catch (e) {}\n } else {\n const zDate = toZonedTime(now, tz.value);\n time = format(zDate, 'HH:mm');\n // Calculate dynamic acronym if needed (e.g. DST changes)\n const dynAcronym = getAcronym(tz.value);\n if (dynAcronym && !dynAcronym.includes('GMT') && !dynAcronym.includes('Time')) {\n acronym = dynAcronym;\n }\n }\n } catch (e) {\n return <span>{tz.label}</span>;\n }\n\n return (\n <div className=\"flex justify-between w-full\">\n <span>{tz.label}</span>\n <span className=\"text-muted-foreground ml-2 tabular-nums\">\n {time} <span className=\"text-xs opacity-75\">({acronym})</span>\n </span>\n </div>\n );\n };\n \n const selectedTzObj = timezones.find(t => t.value === (timezone || ''));\n const selectedTimezoneLabel = selectedTzObj ? formatTzLabel(selectedTzObj) : (translations?.localTime ?? 'Local Time');\n\n\n\n return (\n <div className={cn(\"flex flex-col w-[260px] overflow-x-hidden h-full bg-gradient-to-b scrollbar-hide from-background via-background to-muted/10 pt-4 pb-4 overflow-y-auto\", className)}>\n\n {/* ── İşlemler / Sidebar Menus ── */}\n {sidebarMenus && sidebarMenus.length > 0 && (\n <div className=\"px-4 mb-4\">\n {/* When menus are collapsed: show the \"İşlemler\" button */}\n {!menusExpanded && (\n <Button\n variant=\"outline\"\n className=\"w-full rounded-2xl h-11 gap-2.5 justify-start border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200 font-medium text-sm\"\n onClick={() => setMenusExpanded(true)}\n >\n <LayoutGrid className=\"w-4 h-4\" />\n <span>{translations?.operations ?? 'İşlemler'}</span>\n </Button>\n )}\n \n\n {/* When menus are expanded: show the menu list, button disappears */}\n {menusExpanded && (\n <div className=\"animate-in fade-in slide-in-from-top-2 duration-200\">\n {/* Header row with close button */}\n <div className=\"flex items-center justify-between mb-2 px-1\">\n <span className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n {translations?.operations ?? 'İşlemler'}\n </span>\n <button\n onClick={() => setMenusExpanded(false)}\n className=\"w-6 h-6 rounded-lg flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent/60 transition-all duration-150\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n <nav className=\"space-y-0.5\">\n {/* Calendar — returns to normal calendar view */}\n <button\n onClick={() => { onCustomMenuChange?.(null); setMenusExpanded(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-sm font-medium transition-all duration-150\",\n activeCustomMenu === null\n ? \"bg-primary/10 text-primary\"\n : \"text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n )}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/>\n </svg>\n <span>{translations?.calendar ?? 'Takvim'}</span>\n {activeCustomMenu === null && <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary\" />}\n </button>\n\n {/* User-defined sidebar menu items */}\n {sidebarMenus?.map((item) => (\n <button\n key={item.id}\n onClick={() => { onCustomMenuChange?.(item.id); setMenusExpanded(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-sm font-medium transition-all duration-150\",\n activeCustomMenu === item.id\n ? \"bg-primary/10 text-primary\"\n : \"text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n )}\n >\n {item.icon && (\n <span className=\"w-4 h-4 shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n )}\n <span className=\"truncate\">{item.label}</span>\n {activeCustomMenu === item.id && <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary\" />}\n </button>\n ))}\n\n {/* customViews are only in the header \"...\" dropdown — not listed here */}\n </nav>\n </div>\n )}\n </div>\n )}\n\n {/* ── Mobile-only: Create Event button (desktop has it in the header) ── */}\n {onEventCreate && (\n <div className=\"md:hidden px-4 mb-4\">\n <Button\n onClick={() => { onEventCreate(); }}\n className=\"w-full rounded-2xl h-11 gap-2.5 justify-center shadow-sm shadow-primary/20 transition-all duration-200 font-medium text-sm\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>\n </svg>\n <span>{translations?.createEvent ?? 'Etkinlik Oluştur'}</span>\n </Button>\n </div>\n )}\n\n {/* ── Saat yönü toggle'ı ── */}\n {onReverseTimeChange && (\n <div className=\"px-4 mb-4\">\n <button\n onClick={() => onReverseTimeChange(!reverseTime)}\n className={cn(\n \"w-full flex items-center justify-between px-3 py-2.5 rounded-xl border-[0.5px] transition-all duration-200 group\",\n reverseTime\n ? \"bg-primary/10 border-primary/30 text-primary\"\n : \"bg-muted/30 border-border/50 text-muted-foreground hover:border-primary/30 hover:text-foreground\"\n )}\n >\n {/* Label + direction hint */}\n <div className=\"flex items-center gap-2.5\">\n {/* Up/Down arrow icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"/>\n <polyline points=\"5 12 12 5 19 12\"/>\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" className=\"opacity-40\"/>\n <polyline points=\"5 12 12 19 19 12\" className=\"opacity-40\"/>\n </svg>\n <div className=\"text-left\">\n <div className=\"text-xs font-semibold leading-tight\">{translations?.reverseTimeLabel ?? 'Saat Yönü'}</div>\n <div className=\"text-[10px] leading-tight opacity-70 mt-0.5\">\n {reverseTime ? \"23:00 → 00:00\" : \"00:00 → 23:00\"}\n </div>\n </div>\n </div>\n\n {/* Toggle pill */}\n <div className={cn(\n \"relative w-9 h-5 rounded-full transition-colors duration-200 shrink-0\",\n reverseTime ? \"bg-primary\" : \"bg-border\"\n )}>\n <span className={cn(\n \"absolute top-0.5 w-4 h-4 bg-white rounded-full shadow-sm transition-all duration-200\",\n reverseTime ? \"left-4\" : \"left-0.5\"\n )} />\n </div>\n </button>\n </div>\n )}\n\n {renderMiniCalendar ? (\n // Custom mini-calendar: receives the same props as the built-in one\n renderMiniCalendar({ currentDate, onDateChange, onViewChange })\n ) : (\n <MiniCalendar currentDate={currentDate} onDateChange={onDateChange} onViewChange={onViewChange} locale={locale} />\n )}\n\n <div className=\"flex-1 px-4 space-y-5 mt-5\">\n {/* Calendars List */}\n <div className=\"bg-muted/20 rounded-2xl p-3 border-[0px] border-border/30\">\n <div\n className=\"flex items-center justify-between cursor-pointer hover:bg-accent/50 p-2 -m-1 rounded-xl mb-2 transition-all duration-200\"\n onClick={() => setCalendarsOpen(!calendarsOpen)}\n >\n <span className=\"text-sm font-semibold text-foreground\">{translations?.calendars}</span>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform duration-200\", calendarsOpen && \"rotate-180\")} />\n </div>\n\n {calendarsOpen && (\n <div className=\"space-y-1\">\n {displayCalendars.map(cal => (\n <div\n key={cal.id}\n className=\"flex items-center gap-3 py-2 px-2 hover:bg-accent/60 rounded-xl cursor-pointer group transition-all duration-200\"\n onClick={() => onCalendarToggle?.(cal.id, !(cal.active ?? true))}\n >\n <div className=\"relative flex items-center justify-center\">\n <input\n type=\"checkbox\"\n checked={cal.active ?? true}\n onChange={(e) => {\n e.stopPropagation();\n onCalendarToggle?.(cal.id, e.target.checked);\n }}\n className=\"peer h-5 w-5 rounded-md border-2 border-border/60 cursor-pointer appearance-none checked:border-transparent transition-all duration-200\"\n style={{ '--primary-color': cal.color } as React.CSSProperties}\n data-cal-id={cal.id}\n />\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity\">\n <svg className=\"w-3.5 h-3.5 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <style>{`\n input[type=\"checkbox\"][data-cal-id=\"${cal.id}\"]:checked {\n background-color: ${cal.color} !important;\n border-color: ${cal.color} !important;\n }\n input[type=\"checkbox\"][data-cal-id=\"${cal.id}\"]:focus {\n --tw-ring-color: ${cal.color}40 !important;\n }\n `}</style>\n </div>\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <span className=\"text-sm text-foreground/90 truncate font-medium\">{cal.label}</span>\n </div>\n <div\n className=\"w-2 h-2 rounded-full opacity-60 group-hover:opacity-100 transition-opacity\"\n style={{ backgroundColor: cal.color }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Timezone Selector - Custom UI */}\n <div className=\"mt-auto px-4 pt-5\">\n <div className=\"bg-muted/20 rounded-2xl p-3\">\n <div className=\"flex items-center gap-2 mb-3\">\n <div className=\"p-1.5 bg-primary/10 rounded-lg\">\n <Globe className=\"w-4 h-4 text-primary\" />\n </div>\n <span className=\"text-sm font-semibold text-foreground\">{translations?.timezone}</span>\n </div>\n\n <div className=\"relative\">\n <button\n onClick={() => setTimezoneOpen(!timezoneOpen)}\n className=\"w-full flex items-center justify-between bg-blue-200/40 hover:bg-blue-200/80 rounded-xl py-2.5 pl-4 pr-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/50 transition-all duration-200 text-left\"\n >\n <div className=\"flex-1 truncate mr-2 font-medium\">{selectedTimezoneLabel}</div>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform duration-200\", timezoneOpen && \"rotate-180\")} />\n </button>\n\n {timezoneOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setTimezoneOpen(false)} />\n <div className=\"absolute bottom-full left-0 w-full mb-2 bg-background rounded-xl shadow-2xl z-50 max-h-[260px] overflow-y-auto p-1.5 animate-in fade-in zoom-in-95 duration-200 backdrop-blur-none\">\n {timezones.map(tz => (\n <div\n key={tz.value}\n className={cn(\n \"px-3 py-2.5 text-sm rounded-lg cursor-pointer transition-all duration-200\",\n (timezone || '') === tz.value\n ? \"bg-primary text-primary-foreground font-semibold\"\n : \"text-foreground hover:bg-accent/80\"\n )}\n onClick={() => {\n onTimezoneChange?.(tz.value);\n setTimezoneOpen(false);\n }}\n >\n {formatTzLabel(tz)}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { CSS } from '@dnd-kit/utilities';\r\nimport { CalendarEvent } from '../../types';\r\nimport { cn } from '../../utils';\r\n\r\ninterface DraggableEventProps extends React.HTMLAttributes<HTMLDivElement> {\r\n event: CalendarEvent;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const DraggableEvent: React.FC<DraggableEventProps> = ({ event, children, className, style: propStyle, ...props }) => {\r\n const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({\r\n id: event.id,\r\n data: { event },\r\n });\r\n\r\n const style = {\r\n ...propStyle,\r\n transform: CSS.Translate.toString(transform),\r\n zIndex: isDragging ? 100 : propStyle?.zIndex,\r\n // When dragging, we want the ORIGINAL element to be almost invisible (or fully invisible)\r\n // so that the DragOverlay (the \"ghost\") is the only thing the user focuses on.\r\n // If we set opacity: 0, it disappears. If 0.1, it's a faint placeholder.\r\n // The user asked for \"Make the entire dragged item transparent\". \r\n // Usually this means the original item should be faded out while the drag overlay is moving.\r\n opacity: isDragging ? 0 : propStyle?.opacity, // Hiding original element completely\r\n };\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n style={style}\r\n {...listeners}\r\n {...attributes}\r\n {...props}\r\n className={cn(\"touch-none\", className)}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { useDroppable } from '@dnd-kit/core';\r\nimport { cn } from '../../utils';\r\n\r\ninterface DroppableCellProps {\r\n id: string; // usually ISO date string\r\n date: Date;\r\n resourceId?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const DroppableCell: React.FC<DroppableCellProps> = ({ id, date, resourceId, children, className, style, onClick }) => {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: id,\r\n data: { date, resourceId },\r\n });\r\n\r\n // Determine quarter based on minutes for graduated coloring\r\n const minutes = date.getMinutes();\r\n const quarterClass = \r\n minutes === 0 ? \"hover:bg-blue-50/50 dark:hover:bg-blue-900/10\" :\r\n minutes === 15 ? \"hover:bg-blue-50/80 dark:hover:bg-blue-900/20\" :\r\n minutes === 30 ? \"hover:bg-blue-100/50 dark:hover:bg-blue-900/30\" :\r\n \"hover:bg-blue-100/80 dark:hover:bg-blue-900/40\";\r\n\r\n const activeQuarterClass = \r\n minutes === 0 ? \"bg-blue-50/50 dark:bg-blue-900/10 ring-2 ring-primary ring-inset\" :\r\n minutes === 15 ? \"bg-blue-50/80 dark:bg-blue-900/20 ring-2 ring-primary ring-inset\" :\r\n minutes === 30 ? \"bg-blue-100/50 dark:bg-blue-900/30 ring-2 ring-primary ring-inset\" :\r\n \"bg-blue-100/80 dark:bg-blue-900/40 ring-2 ring-primary ring-inset\";\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n className={cn(\r\n className,\r\n quarterClass,\r\n isOver && activeQuarterClass\r\n )}\r\n style={style}\r\n onClick={onClick}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\nimport { format, isSameMonth, isSameDay, isToday, startOfWeek, endOfWeek, eachDayOfInterval } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { getMonthGrid } from '../lib/date';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { Locale } from 'date-fns';\n\ninterface MonthViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onDateClick?: (date: Date) => void;\n timezone?: string;\n locale?: Locale;\n}\n\n// Memoized Event Item Component for performance\nconst EventItem = React.memo(({ event, onEventClick }: { event: CalendarEvent, onEventClick?: (e: CalendarEvent) => void }) => (\n <DraggableEvent event={event}>\n <div\n className={cn(\n \"text-xs px-2.5 py-1.5 rounded-lg truncate cursor-pointer shadow-sm transition-all duration-200\",\n \"hover:shadow-md hover:scale-[1.02] hover:z-10\",\n !event.color && \"bg-primary/10 text-primary hover:bg-primary/15 border-[0.5px] border-primary/20\"\n )}\n style={event.color ? {\n backgroundColor: `${event.color}20`,\n color: event.color,\n borderLeft: `3px solid ${event.color}`,\n } : undefined}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n >\n <span className=\"font-medium\">{event.title}</span>\n </div>\n </DraggableEvent>\n));\n\nEventItem.displayName = 'EventItem';\n\nexport const MonthView: React.FC<MonthViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onDateClick,\n timezone,\n locale\n}) => {\n const days = useMemo(() => getMonthGrid(currentDate), [currentDate]);\n \n // Dynamic week days generation\n const weekDays = useMemo(() => {\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate]);\n\n // Timezone adjustment helper\n const getZonedDate = useCallback((date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n }, [timezone]);\n\n // Pre-calculate event buckets for O(1) access during render\n // This is crucial for handling 10000+ events\n const eventsByDay = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n \n events.forEach(event => {\n const zonedStart = getZonedDate(event.start);\n // Use date string as key (YYYY-MM-DD)\n const key = format(zonedStart, 'yyyy-MM-dd');\n \n if (!map.has(key)) {\n map.set(key, []);\n }\n map.get(key)!.push(event);\n });\n \n return map;\n }, [events, getZonedDate]);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] scrollbar-hide border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm\">\n <div className=\"overflow-y-auto flex-1 min-h-0 relative\">\n {/* Sticky Header */}\n <div className=\"grid grid-cols-7 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/30 via-muted/40 to-muted/30 sticky top-0 z-20 backdrop-blur-sm\">\n {weekDays.map((day) => (\n <div\n key={day.toISOString()}\n className=\"py-3 text-center text-xs font-semibold text-muted-foreground border-r-[0.5px] border-border/30 last:border-r-0 uppercase tracking-wider\"\n >\n {format(day, 'EEE', { locale })}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7\" style={{ gridAutoRows: '130px' }}>\n {days.map((day) => {\n const dayKey = format(day, 'yyyy-MM-dd');\n const dayEvents = eventsByDay.get(dayKey) || [];\n\n const isCurrentMonth = isSameMonth(day, currentDate);\n const cellId = day.toISOString();\n\n return (\n <DroppableCell\n key={cellId}\n id={cellId}\n date={day}\n className={cn(\n \"h-[130px] p-2 border-b-[0.5px] border-r-[0.5px] border-border/30 last:border-r-0 relative transition-all duration-200 hover:bg-accent/5 flex flex-col gap-1.5 overflow-hidden group\",\n !isCurrentMonth && \"bg-muted/5 text-muted-foreground/60\",\n isToday(day) && \"bg-primary/5 ring-1 ring-inset ring-primary/20\"\n )}\n onClick={() => onDateClick?.(day)}\n >\n <div className=\"flex justify-between items-start\">\n <div className={cn(\n \"text-sm font-semibold w-7 h-7 flex items-center justify-center rounded-full transition-all duration-200\",\n isToday(day)\n ? \"bg-primary text-primary-foreground shadow-md shadow-primary/30\"\n : \"group-hover:bg-accent\"\n )}>\n {format(day, 'd', { locale })}\n </div>\n {dayEvents.length > 0 && (\n <div className=\"text-[10px] font-medium text-muted-foreground/60 bg-muted/50 px-1.5 py-0.5 rounded-full\">\n {dayEvents.length}\n </div>\n )}\n </div>\n\n <div className=\"flex-1 flex flex-col gap-1 scrollbar-hide overflow-y-auto overflow-x-hidden\">\n {dayEvents.slice(0, 4).map(event => (\n <EventItem key={`${event.id}-${dayKey}`} event={event} onEventClick={onEventClick} />\n ))}\n {dayEvents.length > 4 && (\n <div className=\"text-[10px] text-primary font-semibold text-center py-1 px-2 rounded-md bg-primary/5 hover:bg-primary/10 cursor-pointer transition-colors\">\n +{dayEvents.length - 4} more\n </div>\n )}\n </div>\n </DroppableCell>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useCallback } from 'react';\r\nimport { CalendarEvent } from '../../types';\r\nimport { cn } from '../../utils';\r\n\r\ninterface ResizableEventProps {\r\n event: CalendarEvent;\r\n hourHeight: number;\r\n minDuration?: number; // Minimum duration in minutes\r\n onResize?: (event: CalendarEvent, newEnd: Date) => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n readonly?: boolean;\r\n}\r\n\r\nexport const ResizableEvent: React.FC<ResizableEventProps> = ({\r\n event,\r\n hourHeight,\r\n minDuration = 15,\r\n onResize,\r\n children,\r\n className,\r\n style,\r\n readonly,\r\n}) => {\r\n const [isResizing, setIsResizing] = useState(false);\r\n const [resizeHeight, setResizeHeight] = useState<number | null>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const startYRef = useRef<number>(0);\r\n const startHeightRef = useRef<number>(0);\r\n\r\n const handleResizeStart = useCallback((e: React.MouseEvent | React.TouchEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;\r\n startYRef.current = clientY;\r\n startHeightRef.current = containerRef.current?.offsetHeight || 0;\r\n\r\n setIsResizing(true);\r\n\r\n const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\r\n const moveClientY = 'touches' in moveEvent ? moveEvent.touches[0].clientY : moveEvent.clientY;\r\n const deltaY = moveClientY - startYRef.current;\r\n\r\n // Snap to 15-minute intervals\r\n const snapInterval = hourHeight / 4; // 15 minutes\r\n const snappedDelta = Math.round(deltaY / snapInterval) * snapInterval;\r\n\r\n const newHeight = Math.max(\r\n (minDuration / 60) * hourHeight, // Minimum height based on minDuration\r\n startHeightRef.current + snappedDelta\r\n );\r\n\r\n setResizeHeight(newHeight);\r\n };\r\n\r\n const handleEnd = () => {\r\n setIsResizing(false);\r\n\r\n if (resizeHeight !== null && containerRef.current && onResize) {\r\n // Calculate new end time based on resize\r\n const originalHeight = startHeightRef.current;\r\n const heightDiff = (resizeHeight || originalHeight) - originalHeight;\r\n const minutesDiff = (heightDiff / hourHeight) * 60;\r\n\r\n const newEnd = new Date(event.end);\r\n newEnd.setMinutes(newEnd.getMinutes() + minutesDiff);\r\n\r\n // Ensure new end is after start\r\n if (newEnd > event.start) {\r\n onResize(event, newEnd);\r\n }\r\n }\r\n\r\n setResizeHeight(null);\r\n\r\n document.removeEventListener('mousemove', handleMove);\r\n document.removeEventListener('mouseup', handleEnd);\r\n document.removeEventListener('touchmove', handleMove);\r\n document.removeEventListener('touchend', handleEnd);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMove);\r\n document.addEventListener('mouseup', handleEnd);\r\n document.addEventListener('touchmove', handleMove, { passive: false });\r\n document.addEventListener('touchend', handleEnd);\r\n }, [event, hourHeight, minDuration, onResize, resizeHeight]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative group\", className)}\r\n style={{\r\n ...style,\r\n height: resizeHeight !== null ? `${resizeHeight}px` : style?.height,\r\n }}\r\n >\r\n {children}\r\n\r\n {/* Resize Handle */}\r\n <div\r\n className={cn(\r\n readonly ? \"cursor-default\" : \"cursor-ns-resize group-hover:opacity-100\",\r\n \"absolute bottom-0 left-0 right-0 h-3 z-20 flex items-center justify-center\",\r\n \"opacity-0 transition-opacity\",\r\n isResizing && \"opacity-100\"\r\n )}\r\n onMouseDown={readonly ? undefined : handleResizeStart}\r\n onTouchStart={readonly ? undefined : handleResizeStart}\r\n >\r\n <div className={cn(\r\n \"w-8 h-1 rounded-full transition-all\",\r\n isResizing ? \"bg-primary\" : \"bg-muted-foreground/30 group-hover:bg-primary/50\"\r\n )} />\r\n </div>\r\n\r\n {/* Visual feedback during resize */}\r\n {isResizing && (\r\n <div className=\"absolute inset-0 border-2 border-primary border-dashed rounded-md pointer-events-none bg-primary/5\" />\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\nimport { format, isSameDay, differenceInMinutes, isToday, startOfWeek, endOfWeek, eachDayOfInterval } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { ResizableEvent } from '../components/dnd/ResizableEvent';\nimport { Locale } from 'date-fns';\nimport { getTimeFormat, getTimeFormatFull } from '../lib/date';\n\ninterface WeekViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date) => void;\n onEventResize?: (event: CalendarEvent, newEnd: Date) => void;\n timezone?: string;\n locale?: Locale;\n readonly?: boolean;\n language?: string;\n /** Hour (0-23) the calendar initially scrolls to on mount. Defaults to 8. */\n initialScrollHour?: number;\n /**\n * When true, time flows bottom-to-top (23:00 at top → 00:00 at bottom).\n * When false (default), time flows top-to-bottom (00:00 at top → 23:00 at bottom).\n */\n reverseTime?: boolean;\n}\n\nexport const WeekView: React.FC<WeekViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onTimeSlotClick,\n onEventResize,\n timezone,\n locale,\n readonly,\n language = 'tr',\n initialScrollHour = 8,\n reverseTime = false,\n}) => {\n // Generate days for the week\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n const weekDays = eachDayOfInterval({ start, end });\n // Hours array: reversed shows 23→0, normal shows 0→23\n const hours = reverseTime\n ? Array.from({ length: 24 }, (_, i) => 23 - i)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const hourHeight = 60; // px\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [now, setNow] = React.useState(new Date());\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(interval);\n }, []);\n\n // Scroll to the configured start hour on mount\n React.useEffect(() => {\n if (scrollContainerRef.current) {\n // Reversed mode: initialScrollHour is near the bottom of the grid, so offset accordingly\n scrollContainerRef.current.scrollTop = reverseTime\n ? (23 - initialScrollHour) * hourHeight\n : initialScrollHour * hourHeight;\n }\n }, []);\n\n // Timezone adjustment helper\n const getZonedDate = (date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n };\n\n const zonedNow = getZonedDate(new Date());\n\n const getTimezoneDisplay = (tz: string | undefined) => {\n // Use zonedNow if tz matches, otherwise calculate for specific tz if needed\n // But here tz IS the current view timezone.\n const date = now;\n let displayTime = '';\n let acronym = '';\n\n if (!tz) {\n // Local time\n displayTime = format(date, 'HH:mm');\n try {\n acronym = new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) { acronym = 'LOC'; }\n } else {\n try {\n const zDate = toZonedTime(date, tz);\n displayTime = format(zDate, 'HH:mm');\n \n // Get acronym\n // Note: Intl.DateTimeFormat needs the IANA timezone string\n acronym = new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) {\n // Fallback\n displayTime = format(date, 'HH:mm');\n acronym = tz;\n }\n }\n \n // Simplify generic long names if necessary, though 'short' usually works well.\n // E.g. \"GMT-5\" is often returned for offsets. The user asked for \"EST\", \"PST\".\n // Chrome/Node usually return \"EST\" for America/New_York.\n \n return (\n <div className=\"flex flex-col items-center justify-center leading-tight\">\n <span>{displayTime}</span>\n <span className=\"text-[10px] opacity-75\">({acronym})</span>\n </div>\n );\n };\n\n // Time formats driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n const eventTimeFormat = getTimeFormatFull(language);\n const nowFormat = getTimeFormatFull(language);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm\">\n {/* Scrollable Container — flex-1 + min-h-0 prevents unbounded growth */}\n <div\n ref={scrollContainerRef}\n className=\"flex-1 min-h-0 overflow-y-auto scrollbar-hide relative bg-background scroll-smooth\"\n style={{ scrollbarGutter: 'stable' }}\n >\n {/* Header - sticky inside scroll container */}\n <div className=\"flex border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 z-20 sticky top-0 backdrop-blur-sm\">\n <div className=\"flex-none p-3 text-center text-xs font-semibold text-muted-foreground w-16 flex items-center justify-center border-r-[0.5px] border-border/30 bg-muted/10\">\n {getTimezoneDisplay(timezone)}\n </div>\n <div className=\"flex-1 grid grid-cols-7\">\n {weekDays.map((day, index) => (\n <div key={day.toISOString()} className={cn(\"py-3 px-2 text-center\", index > 0 && \"border-l-[0.5px] border-border/30\")}>\n <div className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1.5\">{format(day, 'EEE', { locale })}</div>\n <div className={cn(\n \"w-9 h-9 flex items-center justify-center rounded-xl mx-auto text-sm font-semibold transition-all duration-200\",\n isToday(day)\n ? \"bg-primary text-primary-foreground shadow-lg shadow-primary/30 scale-110\"\n : \"text-foreground hover:bg-accent/80\"\n )}>\n {format(day, 'd', { locale })}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Grid Content */}\n <div\n className=\"flex min-w-full relative\"\n style={{ height: hours.length * hourHeight }}\n >\n {/* Time Labels Column */}\n <div className=\"flex-none w-16 border-r-[0.5px] border-border/30 relative bg-muted/5\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"relative w-full text-[11px] text-muted-foreground/80 text-right pr-3 font-medium tabular-nums box-border\"\n style={{ height: hourHeight }}\n >\n <span className=\"block -translate-y-1/2\">\n {hour !== 0 && format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </span>\n </div>\n ))}\n </div>\n\n {/* Days Columns */}\n <div className=\"flex-1 grid grid-cols-7 relative\">\n {weekDays.map((day, dayIndex) => {\n // Filter events for this day\n const dayEvents = events.filter(e => {\n const zonedStart = getZonedDate(e.start);\n return isSameDay(zonedStart, day);\n });\n\n return (\n <div key={day.toISOString()} className={cn(\"relative h-full\", dayIndex > 0 && \"border-l-[0.5px] border-border/30\")}>\n {/* Grid Rows (Droppable Cells) */}\n {hours.map((hour) => {\n return (\n <div\n key={hour}\n className=\"w-full border-b-[0.5px] border-dashed border-border/20 box-border relative hover:bg-accent/5 transition-colors\"\n style={{ height: hourHeight }}\n >\n {/* 4 x 15-minute intervals */}\n {[0, 15, 30, 45].map((minute) => {\n const cellDate = new Date(day);\n cellDate.setHours(hour, minute, 0, 0);\n const cellId = cellDate.toISOString();\n \n return (\n <DroppableCell \n key={minute}\n id={cellId}\n date={cellDate}\n className=\"w-full absolute left-0 right-0 z-0 transition-colors\"\n style={{ \n height: '25%', \n top: `${(minute / 60) * 100}%` \n }}\n >\n <div \n className=\"w-full h-full bg-transparent cursor-pointer\"\n onClick={() => onTimeSlotClick?.(cellDate)}\n />\n </DroppableCell>\n );\n })}\n </div>\n );\n })}\n \n {/* Events Overlay */}\n {dayEvents.map((event) => {\n // Calculate layout for overlapping events\n // Find all events that overlap with this one\n const overlappingEvents = dayEvents.filter(e => {\n if (e.id === event.id) return false;\n const s1 = getZonedDate(event.start).getTime();\n const e1 = getZonedDate(event.end).getTime();\n const s2 = getZonedDate(e.start).getTime();\n const e2 = getZonedDate(e.end).getTime();\n return s1 < e2 && e1 > s2;\n });\n\n // Calculate horizontal position (simple version)\n // A more robust algorithm would use graph coloring or column packing\n // For now, we can check how many simultaneous events exist and assign width/left\n \n // Sort overlapping group by start time\n const group = [event, ...overlappingEvents].sort((a, b) => \n getZonedDate(a.start).getTime() - getZonedDate(b.start).getTime() ||\n (a.id > b.id ? 1 : -1) // stable sort\n );\n \n const index = group.findIndex(e => e.id === event.id);\n const count = group.length;\n \n const widthPercent = 100 / count;\n const leftPercent = index * widthPercent;\n\n const zonedEventStart = getZonedDate(event.start);\n const zonedEventEnd = getZonedDate(event.end);\n \n const startMinutes = zonedEventStart.getHours() * 60 + zonedEventStart.getMinutes();\n const durationMinutes = differenceInMinutes(zonedEventEnd, zonedEventStart);\n const height = (durationMinutes / 60) * hourHeight;\n // In reversed mode, the event's visual top corresponds to the END time's position\n const top = reverseTime\n ? (1440 - startMinutes - durationMinutes) / 60 * hourHeight\n : (startMinutes / 60) * hourHeight;\n \n const isShortEvent = durationMinutes < 60;\n \n return (\n <DraggableEvent\n key={`${event.id}-${day.toISOString()}`}\n event={event}\n className={`absolute z-10 transition-all ${readonly ? \"cursor-default\" : \"\"}`}\n style={{\n top: `${top}px`,\n height: `${Math.max(height, 20)}px`,\n left: `${leftPercent}%`,\n width: `${widthPercent}%`,\n // Add minimal spacing between overlapping events\n paddingRight: count > 1 ? '2px' : '0'\n }}\n >\n <ResizableEvent\n readonly={readonly}\n event={event}\n hourHeight={hourHeight}\n onResize={onEventResize}\n className=\"h-full\"\n style={{ height: '100%' }}\n >\n <div\n className={cn(\n \"rounded-md border shadow-sm transition-all hover:shadow-md group overflow-hidden relative\",\n \"glass\",\n readonly ? \"cursor-default\" : \"cursor-grab active:cursor-grabbing\",\n !event.color && \"border-primary/20 bg-primary/10\",\n isShortEvent ? \"px-1 flex items-center justify-center\" : \"p-2\",\n // Add active border for overlapped events to distinguish them\n count > 1 && \"border-l-4 border-l-primary/50\"\n )}\n style={{\n height: '100%',\n backgroundColor: event.color ? `${event.color}15` : undefined,\n borderColor: event.color ? `${event.color}40` : undefined,\n borderLeftWidth: '3px',\n borderLeftColor: event.color || 'var(--primary)'\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n title={count > 1 ? `${event.title} (${index + 1}/${count})` : undefined}\n >\n <div className=\"flex flex-col h-full overflow-hidden w-full\">\n <div className={cn(\"font-semibold truncate text-foreground/90 leading-tight\",\n isShortEvent ? \"text-xs text-center\" : \"text-xs\"\n )}>\n {event.title}\n </div>\n {!isShortEvent && (\n <>\n <div className=\"text-[10px] text-muted-foreground truncate mt-0.5 font-medium leading-tight\">\n {format(zonedEventStart, eventTimeFormat, { locale })} - {format(zonedEventEnd, eventTimeFormat, { locale })}\n </div>\n {event.description && height > 50 && (\n <div className=\"text-[10px] text-muted-foreground/80 truncate mt-1 leading-tight opacity-80\">\n {event.description}\n </div>\n )}\n </>\n )}\n {/* Overlap Badge */}\n {count > 1 && !isShortEvent && (\n <div className=\"absolute top-1 right-1 bg-background/80 backdrop-blur-sm rounded-full w-4 h-4 flex items-center justify-center text-[9px] font-bold text-muted-foreground border border-border shadow-sm\">\n {count}\n </div>\n )}\n </div>\n </div>\n </ResizableEvent>\n </DraggableEvent>\n );\n })}\n \n {/* Current Time Indicator */}\n {isToday(day) && (\n <div\n className=\"absolute left-0 right-0 z-20 pointer-events-none flex items-center\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`\n }}\n >\n <div className=\"h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50\" />\n <div className=\"absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n \n {/* Current Time Label (Left Axis) */}\n <div \n className=\"absolute left-0 w-16 pointer-events-none z-30 flex justify-end pr-2\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight + 80}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight + 80}px`,\n }}\n >\n <span className=\"text-[10px] font-bold text-primary-foreground bg-primary px-1.5 py-0.5 rounded-md shadow-md -translate-y-1/2 backdrop-blur-none\">\n {format(zonedNow, nowFormat, { locale })}\n </span>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { format, differenceInMinutes, isToday, isSameDay } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { ResizableEvent } from '../components/dnd/ResizableEvent';\nimport { Locale } from 'date-fns';\nimport { getTimeFormat, getTimeFormatFull } from '../lib/date';\n\ninterface DayViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date) => void;\n onEventResize?: (event: CalendarEvent, newEnd: Date) => void;\n timezone?: string;\n locale?: Locale;\n readonly?: boolean;\n language?: string;\n /** Hour (0-23) the calendar initially scrolls to on mount. Defaults to 8. */\n initialScrollHour?: number;\n /**\n * When true, time flows bottom-to-top (23:00 at top → 00:00 at bottom).\n * When false (default), time flows top-to-bottom (00:00 at top → 23:00 at bottom).\n */\n reverseTime?: boolean;\n}\n\nexport const DayView: React.FC<DayViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onTimeSlotClick,\n onEventResize,\n timezone,\n locale,\n readonly,\n language = 'tr',\n initialScrollHour = 8,\n reverseTime = false,\n}) => {\n // Hours array: reversed shows 23→0, normal shows 0→23\n const hours = reverseTime\n ? Array.from({ length: 24 }, (_, i) => 23 - i)\n : Array.from({ length: 24 }, (_, i) => i);\n const hourHeight = 80; // Larger height for Day View\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [now, setNow] = React.useState(new Date());\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(interval);\n }, []);\n\n // Scroll to the configured start hour on mount\n React.useEffect(() => {\n if (scrollContainerRef.current) {\n // Reversed mode: initialScrollHour sits near the bottom of the grid\n scrollContainerRef.current.scrollTop = reverseTime\n ? (23 - initialScrollHour) * hourHeight\n : initialScrollHour * hourHeight;\n }\n }, []);\n\n // Timezone adjustment helper\n const getZonedDate = (date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n };\n\n const zonedNow = getZonedDate(now);\n\n // Filter events for the current day\n const dayEvents = events.filter(e => {\n const zonedStart = getZonedDate(e.start);\n return isSameDay(zonedStart, currentDate);\n });\n\n // Time formats driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n const eventTimeFormat = getTimeFormatFull(language);\n const nowFormat = getTimeFormatFull(language);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden shadow-sm\">\n {/* Header */}\n <div className=\"px-6 py-4 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 text-center shrink-0\">\n <div className=\"flex items-center justify-center gap-3\">\n <h2 className=\"text-xl font-semibold capitalize text-foreground\">\n {format(currentDate, 'EEEE, MMMM d, yyyy', { locale })}\n </h2>\n {isToday(currentDate) && (\n <span className=\"text-xs font-semibold bg-primary text-primary-foreground px-3 py-1 rounded-full shadow-md shadow-primary/20\">\n Today\n </span>\n )}\n </div>\n </div>\n\n {/* Grid — flex-1 + min-h-0 ensures this stays bounded and scrollable */}\n <div ref={scrollContainerRef} className=\"flex-1 min-h-0 overflow-y-auto relative\">\n <div className=\"flex relative\" style={{ height: hours.length * hourHeight }}>\n {/* Time Labels */}\n <div className=\"w-20 bg-muted/5 border-r-[0.5px] border-border/30 relative\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"relative w-full\"\n style={{ height: hourHeight }}\n >\n {hour !== 0 && (\n <span className=\"absolute w-full text-center -top-3 left-1/2 -translate-x-1/2 text-[11px] text-muted-foreground/80 font-medium tabular-nums bg-background px-1.5 py-0.5 rounded-md\">\n {format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </span>\n )}\n </div>\n ))}\n\n {/* Left Side Current Time Indicator (Overlay) */}\n {isToday(currentDate) && (\n <div\n className=\"absolute left-0 w-full pointer-events-none z-30 flex justify-end pr-2\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`,\n }}\n >\n <span className=\"text-[10px] font-bold text-white bg-primary px-2 py-1 rounded-lg shadow-md shadow-primary/30 -translate-y-1/2\">\n {format(zonedNow, nowFormat, { locale })}\n </span>\n </div>\n )}\n </div>\n\n {/* Day Column */}\n <div className=\"flex-1 relative\">\n {hours.map((hour) => {\n return (\n <div\n key={hour}\n className=\"border-b-[0.5px] border-dashed border-border/20 box-border relative hover:bg-accent/5 transition-colors\"\n style={{ height: hourHeight }}\n >\n {/* 4 x 15-minute intervals */}\n {[0, 15, 30, 45].map((minute) => {\n const cellDate = new Date(currentDate);\n cellDate.setHours(hour, minute, 0, 0);\n const cellId = cellDate.toISOString();\n \n return (\n <DroppableCell \n key={minute}\n id={cellId}\n date={cellDate}\n className=\"w-full absolute left-0 right-0 z-0 transition-colors\"\n style={{ \n height: '25%', \n top: `${(minute / 60) * 100}%` \n }}\n >\n <div \n className=\"h-full w-full bg-transparent cursor-pointer\"\n onClick={() => onTimeSlotClick?.(cellDate)}\n />\n </DroppableCell>\n );\n })}\n </div>\n );\n })}\n\n {dayEvents.map(event => {\n // Calculate layout for overlapping events (same logic as WeekView)\n const overlappingEvents = dayEvents.filter(e => {\n if (e.id === event.id) return false;\n const s1 = getZonedDate(event.start).getTime();\n const e1 = getZonedDate(event.end).getTime();\n const s2 = getZonedDate(e.start).getTime();\n const e2 = getZonedDate(e.end).getTime();\n return s1 < e2 && e1 > s2;\n });\n\n // Sort overlapping group by start time for consistent positioning\n const group = [event, ...overlappingEvents].sort((a, b) =>\n getZonedDate(a.start).getTime() - getZonedDate(b.start).getTime() ||\n (a.id > b.id ? 1 : -1)\n );\n\n const index = group.findIndex(e => e.id === event.id);\n const count = group.length;\n\n const widthPercent = 100 / count;\n const leftPercent = index * widthPercent;\n\n const zonedStart = getZonedDate(event.start);\n const zonedEnd = getZonedDate(event.end);\n\n const startMinutes = zonedStart.getHours() * 60 + zonedStart.getMinutes();\n const durationMinutes = differenceInMinutes(zonedEnd, zonedStart);\n const height = (durationMinutes / 60) * hourHeight;\n // In reversed mode, the event's visual top is at the END time's flipped position\n const top = reverseTime\n ? (1440 - startMinutes - durationMinutes) / 60 * hourHeight\n : (startMinutes / 60) * hourHeight;\n\n const isShortEvent = durationMinutes < 45;\n\n return (\n <DraggableEvent\n key={`${event.id}-${currentDate.toISOString()}`}\n event={event}\n className={`absolute z-10 transition-all ${readonly ? \"cursor-default\" : \"\"}`}\n style={{\n top: `${top}px`,\n height: `${Math.max(height, 28)}px`,\n left: `calc(${leftPercent}% + 4px)`,\n width: `calc(${widthPercent}% - 8px)`,\n paddingRight: count > 1 ? '2px' : '0'\n }}\n >\n <ResizableEvent\n readonly={readonly}\n event={event}\n hourHeight={hourHeight}\n onResize={onEventResize}\n className=\"h-full\"\n style={{ height: '100%' }}\n >\n <div\n className={cn(\n \"h-full rounded-lg border-[0.5px] shadow-sm overflow-hidden transition-all hover:shadow-lg hover:z-20 group\",\n \"glass backdrop-blur-sm\",\n readonly ? \"cursor-default\" : \"cursor-grab active:cursor-grabbing\",\n !event.color && \"bg-primary/10 border-primary/20\",\n isShortEvent ? \"px-2 flex items-center\" : \"px-3 py-2\",\n count > 1 && \"border-l-4\"\n )}\n style={{\n backgroundColor: event.color ? `${event.color}15` : undefined,\n borderColor: event.color ? `${event.color}30` : undefined,\n borderLeftColor: event.color || 'var(--primary)',\n borderLeftWidth: count > 1 ? '4px' : '3px'\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n title={count > 1 ? `${event.title} (${index + 1}/${count})` : undefined}\n >\n <div className=\"flex flex-col h-full overflow-hidden w-full\">\n <div className={cn(\n \"font-semibold truncate leading-tight\",\n isShortEvent ? \"text-xs\" : \"text-sm\",\n event.color ? \"text-foreground\" : \"text-foreground/90\"\n )}>\n {event.title}\n </div>\n {!isShortEvent && (\n <>\n <div className=\"text-xs text-muted-foreground mt-0.5 font-medium\">\n {format(zonedStart, eventTimeFormat, { locale })} - {format(zonedEnd, eventTimeFormat, { locale })}\n </div>\n {event.description && height > 60 && (\n <div className=\"text-xs text-muted-foreground/80 mt-1 line-clamp-2\">\n {event.description}\n </div>\n )}\n </>\n )}\n {/* Overlap Badge */}\n {count > 1 && !isShortEvent && (\n <div className=\"absolute top-1.5 right-1.5 bg-background/90 backdrop-blur-sm rounded-full w-5 h-5 flex items-center justify-center text-[10px] font-bold text-muted-foreground border border-border shadow-sm\">\n {count}\n </div>\n )}\n </div>\n </div>\n </ResizableEvent>\n </DraggableEvent>\n );\n })}\n \n {/* Current Time Indicator */}\n {isToday(currentDate) && (\n <div\n className=\"absolute left-0 right-0 z-20 pointer-events-none flex items-center\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`\n }}\n >\n {/* Line */}\n <div className=\"h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50\" />\n {/* Dot */}\n <div className=\"absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse\" />\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\r\nimport { Calendar, CalendarDays, CalendarClock, ListTodo, Users, Plus } from 'lucide-react';\r\nimport { cn } from '../utils';\r\nimport { ViewType } from '../types';\r\n\r\ninterface EmptyStateProps {\r\n view: ViewType;\r\n onCreateEvent?: () => void;\r\n translations?: {\r\n noEvents?: string;\r\n noEventsDesc?: string;\r\n createFirst?: string;\r\n createEvent?: string;\r\n };\r\n className?: string;\r\n}\r\n\r\nconst viewIcons: Record<ViewType, React.ReactNode> = {\r\n month: <Calendar className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n week: <CalendarDays className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n day: <CalendarClock className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n agenda: <ListTodo className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n resource: <Users className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n};\r\n\r\nconst viewTitles: Record<ViewType, string> = {\r\n month: 'No events this month',\r\n week: 'No events this week',\r\n day: 'No events today',\r\n agenda: 'No upcoming events',\r\n resource: 'No scheduled resources',\r\n};\r\n\r\nconst viewDescriptions: Record<ViewType, string> = {\r\n month: 'Your calendar is clear. Add your first event to get started.',\r\n week: 'Nothing scheduled for this week. Create an event to begin planning.',\r\n day: 'Your day is free. Schedule something to make the most of it.',\r\n agenda: 'No events coming up. Plan ahead by creating new events.',\r\n resource: 'No resources have been assigned yet.',\r\n};\r\n\r\nexport const EmptyState: React.FC<EmptyStateProps> = ({\r\n view,\r\n onCreateEvent,\r\n translations,\r\n className,\r\n}) => {\r\n const title = translations?.noEvents || viewTitles[view];\r\n const description = translations?.noEventsDesc || viewDescriptions[view];\r\n\r\n return (\r\n <div className={cn(\r\n \"flex flex-col items-center justify-center h-full min-h-[400px] py-12 px-6\",\r\n className\r\n )}>\r\n {/* Decorative background */}\r\n <div className=\"relative mb-8\">\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-primary/5 rounded-full blur-3xl scale-150\" />\r\n <div className=\"relative p-6 bg-gradient-to-br from-muted/30 to-muted/10 rounded-3xl border border-border/30\">\r\n {viewIcons[view]}\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"text-center max-w-sm\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground mb-6 leading-relaxed\">\r\n {description}\r\n </p>\r\n\r\n {/* Create button */}\r\n {onCreateEvent && (\r\n <button\r\n onClick={onCreateEvent}\r\n className=\"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-primary-foreground rounded-xl font-medium text-sm shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 hover:scale-105 active:scale-95 transition-all duration-200\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {translations?.createEvent || 'Create Event'}\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Decorative dots pattern */}\r\n <div className=\"absolute inset-0 pointer-events-none overflow-hidden opacity-30\">\r\n <div className=\"absolute top-1/4 left-1/4 w-2 h-2 rounded-full bg-primary/20\" />\r\n <div className=\"absolute top-1/3 right-1/3 w-3 h-3 rounded-full bg-primary/10\" />\r\n <div className=\"absolute bottom-1/4 left-1/3 w-2 h-2 rounded-full bg-primary/15\" />\r\n <div className=\"absolute bottom-1/3 right-1/4 w-4 h-4 rounded-full bg-primary/5\" />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Mini empty state for use in smaller containers\r\nexport const MiniEmptyState: React.FC<{\r\n message?: string;\r\n className?: string;\r\n}> = ({ message = 'No events', className }) => (\r\n <div className={cn(\r\n \"flex flex-col items-center justify-center py-8 text-center\",\r\n className\r\n )}>\r\n <Calendar className=\"w-10 h-10 text-muted-foreground/20 mb-3\" strokeWidth={1.5} />\r\n <p className=\"text-sm text-muted-foreground\">{message}</p>\r\n </div>\r\n);\r\n\r\n// Empty state specifically for Agenda View with date context\r\nexport const AgendaEmptyState: React.FC<{\r\n onCreateEvent?: () => void;\r\n translations?: {\r\n noUpcoming?: string;\r\n createEvent?: string;\r\n };\r\n}> = ({ onCreateEvent, translations }) => (\r\n <div className=\"flex flex-col items-center justify-center h-full min-h-[400px] py-12\">\r\n <div className=\"relative mb-8\">\r\n <div className=\"p-8 bg-gradient-to-br from-green-50 to-blue-50 dark:from-green-900/10 dark:to-blue-900/10 rounded-3xl border border-border/30\">\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"w-12 h-12 rounded-2xl bg-green-100 dark:bg-green-900/30 flex items-center justify-center\">\r\n <svg className=\"w-6 h-6 text-green-600 dark:text-green-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-medium text-foreground\">All caught up!</div>\r\n <div className=\"text-sm text-muted-foreground\">No events scheduled</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center max-w-sm\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">\r\n {translations?.noUpcoming || 'Your schedule is clear'}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground mb-6\">\r\n No upcoming events to show. Create a new event to start planning.\r\n </p>\r\n\r\n {onCreateEvent && (\r\n <button\r\n onClick={onCreateEvent}\r\n className=\"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-primary-foreground rounded-xl font-medium text-sm shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 hover:scale-105 active:scale-95 transition-all duration-200\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {translations?.createEvent || 'Create Event'}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n","import React, { useMemo } from 'react';\nimport { format, isSameDay, isToday, isTomorrow, addDays, startOfDay, differenceInMinutes } from 'date-fns';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { AgendaEmptyState } from '../components/EmptyState';\nimport { motion } from 'framer-motion';\nimport { Clock, MapPin, Users, Paperclip, Bell } from 'lucide-react';\nimport { getTimeFormatFull } from '../lib/date';\n\ninterface AgendaViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onCreateEvent?: () => void;\n translations?: any;\n language?: string;\n /** Optional custom empty-state component replacing the built-in AgendaEmptyState. */\n renderEmptyState?: (props: { view: 'agenda'; onCreateEvent?: () => void }) => React.ReactNode;\n}\n\nconst formatDuration = (start: Date, end: Date): string => {\n const minutes = differenceInMinutes(end, start);\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n if (remainingMinutes === 0) return `${hours}h`;\n return `${hours}h ${remainingMinutes}m`;\n};\n\n/** Returns a human-friendly day label using provided translation strings. */\nconst getDateLabel = (date: Date, todayLabel: string, tomorrowLabel: string): string => {\n if (isToday(date)) return todayLabel;\n if (isTomorrow(date)) return tomorrowLabel;\n return format(date, 'EEEE');\n};\n\nexport const AgendaView: React.FC<AgendaViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onCreateEvent,\n translations,\n language = 'tr',\n renderEmptyState,\n}) => {\n // Full time format string (e.g. \"14:30\" for 24h or \"2:30 PM\" for 12h)\n const timeFmt = getTimeFormatFull(language);\n // Group events by day for the next 30 days starting from currentDate\n const groupedEvents = useMemo(() => {\n const startDate = startOfDay(currentDate);\n\n const groups: { date: Date; events: CalendarEvent[] }[] = [];\n\n // Sort all events by start time first\n const sortedEvents = [...events].sort((a, b) => a.start.getTime() - b.start.getTime());\n\n // Iterate through the next 30 days\n for (let i = 0; i < 30; i++) {\n const day = addDays(startDate, i);\n const dayEvents = sortedEvents.filter(event => isSameDay(event.start, day));\n\n if (dayEvents.length > 0) {\n groups.push({ date: day, events: dayEvents });\n }\n }\n\n return groups;\n }, [currentDate, events]);\n\n const container = {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: {\n staggerChildren: 0.05\n }\n }\n };\n\n const item = {\n hidden: { opacity: 0, x: -20 },\n show: { opacity: 1, x: 0 }\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background overflow-y-auto\">\n {groupedEvents.length === 0 ? (\n renderEmptyState\n ? renderEmptyState({ view: 'agenda', onCreateEvent })\n : <AgendaEmptyState onCreateEvent={onCreateEvent} />\n ) : (\n <motion.div\n className=\"max-w-3xl mx-auto w-full pb-10 px-4 md:px-6\"\n variants={container}\n initial=\"hidden\"\n animate=\"show\"\n >\n {groupedEvents.map((group, groupIndex) => (\n <motion.div\n key={group.date.toISOString()}\n className=\"relative\"\n variants={item}\n >\n {/* Date Header */}\n <div className=\"sticky top-0 bg-background/95 backdrop-blur-md py-4 z-10 border-b border-border/50\">\n \n \n <div className=\"flex items-center gap-4\">\n {/* Date box */}\n <div className={cn(\n \"flex flex-col items-center justify-center w-16 h-16 rounded-2xl transition-all\",\n isToday(group.date)\n ? \"bg-primary text-primary-foreground shadow-lg shadow-primary/30\"\n : \"bg-muted/50 text-foreground\"\n )}>\n <span className=\"text-2xl font-bold leading-none\">\n {format(group.date, 'd')}\n </span>\n <span className=\"text-xs font-medium uppercase tracking-wide opacity-80\">\n {format(group.date, 'MMM')}\n </span>\n </div>\n\n {/* Day info */}\n <div className=\"flex flex-col\">\n <span className={cn(\n \"text-lg font-semibold\",\n isToday(group.date) && \"text-primary\"\n )}>\n {getDateLabel(group.date, translations?.today ?? 'Today', translations?.tomorrow ?? 'Tomorrow')}\n </span>\n <span className=\"text-sm text-muted-foreground\">\n {group.events.length} {group.events.length !== 1 ? (translations?.eventsCount ?? 'events') : (translations?.eventCount ?? 'event')}\n </span>\n </div>\n </div>\n </div>\n\n {/* Events List */}\n <div className=\"py-4 space-y-3\">\n {group.events.map((event, eventIndex) => (\n <motion.div\n key={event.id}\n onClick={() => onEventClick?.(event)}\n className={cn(\n \"group relative flex gap-4 p-4 rounded-2xl border border-border/40\",\n \"hover:border-primary/40 hover:shadow-lg hover:shadow-primary/5\",\n \"transition-all duration-200 cursor-pointer\",\n \"bg-gradient-to-br from-card via-card to-card/80\"\n )}\n whileHover={{ scale: 1.01, y: -2 }}\n transition={{ duration: 0.2 }}\n >\n {/* Left accent bar */}\n <div\n className=\"absolute left-0 top-3 bottom-3 w-1 rounded-full\"\n style={{ backgroundColor: event.color || 'var(--primary)' }}\n />\n\n {/* Time Column */}\n <div className=\"flex flex-col items-center min-w-[70px] pl-2\">\n {event.allDay ? (\n <div className=\"flex flex-col items-center\">\n <span className=\"text-xs font-semibold text-muted-foreground bg-muted/80 px-2.5 py-1 rounded-full\">\n {translations?.allDay ?? 'All Day'}\n </span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center\">\n {/* 12h: split hour and AM/PM; 24h: single formatted string */}\n <span className=\"text-base font-semibold text-foreground\">\n {format(event.start, timeFmt)}\n </span>\n <div className=\"w-px h-3 bg-border my-1\" />\n <span className=\"text-xs text-muted-foreground/70 font-medium\">\n {formatDuration(event.start, event.end)}\n </span>\n </div>\n )}\n </div>\n\n {/* Event Details */}\n <div className=\"flex-1 min-w-0 space-y-2\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"text-base font-semibold text-foreground group-hover:text-primary transition-colors line-clamp-1\">\n {event.title}\n </h4>\n {/* Color dot */}\n <div\n className=\"w-3 h-3 rounded-full shrink-0 mt-1.5\"\n style={{ backgroundColor: event.color || 'var(--primary)' }}\n />\n </div>\n\n {event.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 leading-relaxed\">\n {event.description}\n </p>\n )}\n\n {/* Meta info row */}\n <div className=\"flex flex-wrap items-center gap-3 pt-1\">\n {!event.allDay && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"w-3.5 h-3.5\" />\n <span>{format(event.start, timeFmt)} - {format(event.end, timeFmt)}</span>\n </div>\n )}\n\n {event.guests && event.guests.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Users className=\"w-3.5 h-3.5\" />\n <span>{event.guests.length} {event.guests.length !== 1 ? (translations?.guestsCount ?? 'guests') : (translations?.guestCount ?? 'guest')}</span>\n </div>\n )}\n\n {event.attachments && event.attachments.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Paperclip className=\"w-3.5 h-3.5\" />\n <span>{event.attachments.length}</span>\n </div>\n )}\n\n {event.reminders && event.reminders.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Bell className=\"w-3.5 h-3.5\" />\n <span>{event.reminders.length}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Hover arrow indicator */}\n <div className=\"absolute right-4 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <svg className=\"w-5 h-5 text-muted-foreground\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </div>\n </motion.div>\n ))}\n </div>\n </motion.div>\n ))}\n </motion.div>\n )}\n </div>\n );\n};\n","import React, { useRef } from 'react';\nimport { format, addHours, startOfDay, differenceInMinutes, isSameDay } from 'date-fns';\nimport { CalendarEvent, Resource } from '../types';\nimport { cn } from '../utils';\nimport { Locale } from 'date-fns';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { getTimeFormat } from '../lib/date';\n\ninterface ResourceViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n resources: Resource[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date, resourceId: string) => void;\n locale?: Locale;\n language?: string;\n}\n\nexport const ResourceView: React.FC<ResourceViewProps> = ({\n currentDate,\n events,\n resources,\n onEventClick,\n onTimeSlotClick,\n locale,\n language = 'tr',\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Define timeline: 8am to 8pm for example (or full 24h)\n // Let's do 24h for flexibility, but maybe scroll to 8am\n const hours = Array.from({ length: 24 }, (_, i) => i);\n const hourWidth = 100; // px per hour\n\n // Time format driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n\n const getEventStyle = (event: CalendarEvent) => {\n const start = new Date(event.start);\n const end = new Date(event.end);\n const dayStart = startOfDay(currentDate);\n \n // Calculate minutes from start of day\n const startMinutes = differenceInMinutes(start, dayStart);\n const durationMinutes = differenceInMinutes(end, start);\n \n const left = (startMinutes / 60) * hourWidth;\n const width = (durationMinutes / 60) * hourWidth;\n \n return {\n left: `${left}px`,\n width: `${Math.max(width, 4)}px`, // Min width for visibility\n };\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background overflow-hidden\">\n {/* Header: Hours */}\n <div className=\"flex border-b border-border bg-muted/20\">\n <div className=\"w-48 shrink-0 border-r border-border p-4 font-semibold text-sm bg-background sticky left-0 z-20\">\n Resources\n </div>\n <div className=\"flex overflow-hidden\">\n <div className=\"flex relative\" style={{ width: hours.length * hourWidth }}>\n {hours.map(hour => (\n <div \n key={hour} \n className=\"border-r border-border/50 text-xs text-muted-foreground p-2 font-medium shrink-0\"\n style={{ width: hourWidth }}\n >\n {format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Body: Resources & Events */}\n <div className=\"flex-1 min-h-0 overflow-auto relative\" ref={containerRef}>\n <div className=\"min-w-fit\">\n {resources.map(resource => {\n const resourceEvents = events.filter(e => \n e.resourceId === resource.id && \n isSameDay(new Date(e.start), currentDate)\n );\n\n return (\n <div key={resource.id} className=\"flex border-b border-border min-h-[100px]\">\n {/* Resource Label Column */}\n <div className=\"w-48 shrink-0 border-r border-border p-4 bg-background sticky left-0 z-10 flex items-center gap-3\">\n {resource.avatar ? (\n <img src={resource.avatar} alt={resource.label} className=\"w-8 h-8 rounded-full object-cover\" />\n ) : (\n <div className=\"w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold text-primary\">\n {resource.label.substring(0, 2).toUpperCase()}\n </div>\n )}\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{resource.label}</span>\n <span className=\"text-xs text-muted-foreground\">ID: {resource.id}</span>\n </div>\n </div>\n\n {/* Timeline Row */}\n <div className=\"relative flex\" style={{ width: hours.length * hourWidth }}>\n {/* Grid Lines */}\n {hours.map(hour => (\n <div \n key={hour}\n className=\"flex h-full shrink-0\"\n style={{ width: hourWidth }}\n >\n {[0, 15, 30, 45].map(minute => {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const slotId = `${resource.id}-${slotDate.toISOString()}`;\n\n return (\n <DroppableCell\n key={minute}\n id={slotId}\n date={slotDate}\n resourceId={resource.id}\n className=\"h-full flex-1 border-r border-border/10 last:border-border/30 hover:bg-accent/10 transition-colors\"\n onClick={() => {\n onTimeSlotClick?.(slotDate, resource.id);\n }}\n />\n );\n })}\n </div>\n ))}\n\n {/* Events */}\n {resourceEvents.map(event => (\n <DraggableEvent\n key={event.id}\n event={event}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n className=\"absolute top-2 bottom-2 rounded-md px-2 py-1 text-xs font-medium border shadow-sm cursor-pointer overflow-hidden hover:brightness-95 transition-all z-10\"\n style={{\n ...getEventStyle(event),\n backgroundColor: event.color || resource.color || 'var(--primary)',\n borderColor: 'rgba(0,0,0,0.1)',\n color: '#fff'\n }}\n >\n <div className=\"truncate\">{event.title}</div>\n </DraggableEvent>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\r\nimport { X } from 'lucide-react';\r\nimport { cn } from '../../utils';\r\nimport { Button } from './button';\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n title?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n hideHeader?: boolean;\r\n}\r\n\r\nexport const Modal: React.FC<ModalProps> = ({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n className,\r\n hideHeader = false,\r\n}) => {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n // Render inside parent container (absolute positioning) instead of portal to document.body\r\n return (\r\n <div className=\"absolute inset-0 z-50 flex items-center justify-center p-4 bg-black/40 backdrop-blur-md animate-in fade-in duration-300\">\r\n <div\r\n ref={overlayRef}\r\n className=\"absolute inset-0\"\r\n onClick={onClose}\r\n />\r\n <div\r\n className={cn(\r\n \"relative bg-background rounded-2xl shadow-2xl w-full max-w-md flex flex-col max-h-[70vh] sm:max-h-[80vh] animate-in zoom-in-95 slide-in-from-bottom-4 duration-300 border border-border/50\",\r\n className\r\n )}\r\n >\r\n {!hideHeader && (\r\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border/50 shrink-0 bg-gradient-to-r from-muted/20 to-background\">\r\n <h3 className=\"text-lg font-semibold text-foreground\">\r\n {title}\r\n </h3>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={onClose}\r\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-accent/80 transition-all duration-200\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </Button>\r\n </div>\r\n )}\r\n <div className={cn(\"overflow-y-auto flex-1\", !hideHeader && \"p-6\")}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Modal } from './ui/Modal';\nimport { CalendarEvent, EventType, EventAttachment, EventReminder } from '../types';\nimport { format, formatDistanceToNow, differenceInMinutes } from 'date-fns';\nimport { getTimeFormatFull } from '../lib/date';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n Clock, MapPin, AlignLeft, Trash2, X, Edit2,\n Users, Paperclip, File, XCircle, Calendar, ChevronDown, Check, Download,\n Bell, BellRing, Plus, Repeat, Tag, Palette, ChevronRight, Mail,\n ExternalLink, Copy, Share2, MoreHorizontal\n } from 'lucide-react';\nimport { cn } from '../utils';\n\ninterface EventModalProps {\n isOpen: boolean;\n onClose: () => void;\n event?: CalendarEvent | null;\n initialDate?: Date;\n onSave: (event: Partial<CalendarEvent>) => void;\n onDelete?: (eventId: string) => void;\n calendars?: { id: string; label: string; color?: string }[];\n eventTypes?: EventType[];\n translations: any;\n language?: string;\n}\n\n// Reminder options are built dynamically from translations (see getReminderOptions helper below)\n\n// Color palette for events\nconst COLOR_PALETTE = [\n '#3b82f6', // Blue\n '#ef4444', // Red\n '#10b981', // Emerald\n '#f59e0b', // Amber\n '#8b5cf6', // Violet\n '#ec4899', // Pink\n '#06b6d4', // Cyan\n '#84cc16', // Lime\n '#f97316', // Orange\n '#6366f1', // Indigo\n];\n\n/** Build reminder options from the active translation set */\nconst getReminderOptions = (t: any) => [\n { value: 0, label: t.reminderAtTime },\n { value: 5, label: t.reminder5min },\n { value: 10, label: t.reminder10min },\n { value: 15, label: t.reminder15min },\n { value: 30, label: t.reminder30min },\n { value: 60, label: t.reminder1hour },\n { value: 120, label: t.reminder2hours },\n { value: 1440, label: t.reminder1day },\n { value: 2880, label: t.reminder2days },\n { value: 10080, label: t.reminder1week },\n];\n\nexport const EventModal: React.FC<EventModalProps> = ({\n isOpen,\n onClose,\n event,\n initialDate,\n onSave,\n onDelete,\n calendars,\n eventTypes,\n translations,\n language = 'tr',\n}) => {\n // Full time format string derived from the active language\n const timeFmt = getTimeFormatFull(language);\n const [mode, setMode] = useState<'view' | 'edit' | 'create'>('create');\n const [activeTab, setActiveTab] = useState<'details' | 'guests' | 'options'>('details');\n\n const [formData, setFormData] = useState<Partial<CalendarEvent>>({\n title: '',\n description: '',\n location: '',\n start: new Date(),\n end: new Date(),\n allDay: false,\n color: '#3b82f6',\n calendarId: calendars?.[0]?.id,\n type: undefined,\n recurrence: undefined,\n attachments: [],\n reminders: [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n\n const [isCalendarDropdownOpen, setIsCalendarDropdownOpen] = useState(false);\n const [isColorPickerOpen, setIsColorPickerOpen] = useState(false);\n const [isReminderDropdownOpen, setIsReminderDropdownOpen] = useState(false);\n const [isGuestsDropdownOpen, setIsGuestsDropdownOpen] = useState(false);\n\n const fakeGuests = [\n 'alice@example.com',\n 'bob@example.com',\n 'charlie@example.com',\n 'diana@example.com',\n 'evan@example.com'\n ];\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [selectedGuests, setSelectedGuests] = useState<string[]>([]);\n\n useEffect(() => {\n if (isOpen) {\n if (event) {\n setMode('view');\n setFormData({\n ...event,\n start: new Date(event.start),\n end: new Date(event.end),\n attachments: event.attachments || [],\n reminders: event.reminders || [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n setSelectedGuests(event.guests || []);\n } else {\n setMode('create');\n const start = initialDate || new Date();\n const end = new Date(start);\n end.setHours(start.getHours() + 1);\n\n setFormData({\n title: '',\n description: '',\n location: '',\n start,\n end,\n allDay: false,\n color: '#3b82f6',\n calendarId: calendars?.[0]?.id,\n attachments: [],\n reminders: [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n setSelectedGuests([]);\n setActiveTab('details');\n }\n }\n }, [isOpen, event, initialDate, calendars]);\n\n const toggleGuest = (email: string) => {\n setSelectedGuests(prev => {\n const newGuests = prev.includes(email)\n ? prev.filter(e => e !== email)\n : [...prev, email];\n setFormData(curr => ({ ...curr, guests: newGuests }));\n return newGuests;\n });\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n let eventColor = formData.color;\n if (formData.calendarId && calendars) {\n const selectedCal = calendars.find(c => c.id === formData.calendarId);\n if (selectedCal?.color) {\n eventColor = selectedCal.color;\n }\n }\n\n onSave({\n ...formData,\n color: eventColor,\n id: event?.id,\n });\n onClose();\n };\n\n const handleDelete = () => {\n if (event?.id && onDelete) {\n onDelete(event.id);\n onClose();\n }\n };\n\n const formatDateForInput = (date: Date | undefined) => {\n if (!date) return '';\n return format(date, \"yyyy-MM-dd'T'HH:mm\");\n };\n\n const handleDateChange = (field: 'start' | 'end', value: string) => {\n const date = new Date(value);\n if (isNaN(date.getTime())) return;\n\n if (field === 'start') {\n const duration = formData.end!.getTime() - formData.start!.getTime();\n setFormData(prev => ({\n ...prev,\n start: date,\n end: new Date(date.getTime() + duration)\n }));\n } else {\n if (date < formData.start!) {\n setFormData(prev => ({ ...prev, start: date, end: date }));\n } else {\n setFormData(prev => ({ ...prev, end: date }));\n }\n }\n };\n\n const addReminder = (minutes: number, label: string) => {\n const newReminder: EventReminder = {\n id: Math.random().toString(36).substr(2, 9),\n type: 'notification',\n time: minutes,\n label\n };\n setFormData(prev => ({\n ...prev,\n reminders: [...(prev.reminders || []), newReminder]\n }));\n setIsReminderDropdownOpen(false);\n };\n\n const removeReminder = (id: string) => {\n setFormData(prev => ({\n ...prev,\n reminders: prev.reminders?.filter(r => r.id !== id)\n }));\n };\n\n const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n const newAttachments: EventAttachment[] = Array.from(e.target.files).map(file => ({\n id: Math.random().toString(36).substr(2, 9),\n name: file.name,\n type: 'file',\n size: `${(file.size / 1024).toFixed(1)} KB`\n }));\n setFormData(prev => ({\n ...prev,\n attachments: [...(prev.attachments || []), ...newAttachments]\n }));\n }\n };\n\n const removeAttachment = (id: string) => {\n setFormData(prev => ({\n ...prev,\n attachments: prev.attachments?.filter(a => a.id !== id)\n }));\n };\n\n const handleDownload = (attachment: EventAttachment) => {\n const element = document.createElement(\"a\");\n const file = new Blob(['Dummy content for ' + attachment.name], {type: 'text/plain'});\n element.href = URL.createObjectURL(file);\n element.download = attachment.name;\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n };\n\n const getDurationText = () => {\n if (!formData.start || !formData.end) return '';\n const mins = differenceInMinutes(formData.end, formData.start);\n if (mins < 60) return `${mins} min`;\n const hours = Math.floor(mins / 60);\n const remainingMins = mins % 60;\n if (remainingMins === 0) return `${hours} hr`;\n return `${hours} hr ${remainingMins} min`;\n };\n\n // ========== VIEW MODE ==========\n const renderViewMode = () => (\n <div className=\"flex flex-col bg-background overflow-hidden w-full max-h-[90vh]\">\n {/* Hero Header with Color */}\n <div\n className=\"relative px-6 pt-6 pb-8\"\n style={{\n background: `linear-gradient(135deg, ${event?.color || '#3b82f6'}15 0%, transparent 100%)`\n }}\n >\n {/* Top Actions Bar */}\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: event?.color || '#3b82f6' }}\n />\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {calendars?.find(c => c.id === event?.calendarId)?.label || 'Event'}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setMode('edit')}\n className=\"p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground\"\n title=\"Edit\"\n >\n <Edit2 className=\"w-4 h-4\" />\n </button>\n <button\n onClick={handleDelete}\n className=\"p-2 hover:bg-destructive/10 rounded-lg transition-all text-muted-foreground hover:text-destructive\"\n title=\"Delete\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n <button\n onClick={onClose}\n className=\"p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Title */}\n <h1 className=\"text-2xl font-bold text-foreground mb-3 leading-tight\">\n {event?.title || translations.noTitle}\n </h1>\n\n {/* Date & Time */}\n <div className=\"flex items-center gap-3 text-sm\">\n <div className=\"flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30\">\n <Calendar className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"font-medium\">\n {event?.start && format(new Date(event.start), 'EEE, MMM d')}\n </span>\n </div>\n <div className=\"flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"font-medium\">\n {event?.start && format(new Date(event.start), timeFmt)} – {event?.end && format(new Date(event.end), timeFmt)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"px-6 pb-6 space-y-4 overflow-y-auto flex-1\">\n {/* Location */}\n {event?.location && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"flex items-start gap-3 p-4 rounded-2xl bg-muted/30 border border-border/30 group hover:bg-muted/50 transition-all cursor-pointer\"\n >\n <div className=\"p-2 bg-primary/10 rounded-xl\">\n <MapPin className=\"w-5 h-5 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium text-foreground\">{event.location}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{translations.clickToOpenInMaps}</p>\n </div>\n <ExternalLink className=\"w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n </motion.div>\n )}\n\n {/* Guests */}\n {event?.guests && event.guests.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.05 }}\n className=\"space-y-3\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n {event.guests.length} {event.guests.length > 1 ? translations.guestsCount : translations.guestCount}\n </span>\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {event.guests.map((email, index) => (\n <div\n key={index}\n className=\"flex items-center gap-2 px-3 py-2 rounded-xl bg-muted/30 border border-border/30 hover:bg-muted/50 transition-all cursor-pointer group\"\n >\n <div\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold text-white\"\n style={{ backgroundColor: `hsl(${index * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">{email.split('@')[0]}</p>\n <p className=\"text-xs text-muted-foreground truncate\">{email}</p>\n </div>\n </div>\n ))}\n </div>\n </motion.div>\n )}\n\n {/* Reminders */}\n {event?.reminders && event.reminders.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n className=\"flex items-center gap-3\"\n >\n <div className=\"p-2 bg-amber-500/10 rounded-xl\">\n <Bell className=\"w-4 h-4 text-amber-500\" />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {event.reminders.map(reminder => (\n <span\n key={reminder.id}\n className=\"text-xs font-medium px-2.5 py-1 rounded-full bg-amber-500/10 text-amber-600 dark:text-amber-400\"\n >\n {reminder.label || `${reminder.time} min before`}\n </span>\n ))}\n </div>\n </motion.div>\n )}\n\n {/* Description */}\n {event?.description && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.15 }}\n className=\"space-y-2\"\n >\n <div className=\"flex items-center gap-2\">\n <AlignLeft className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.notes}</span>\n </div>\n <div className=\"text-sm text-foreground/80 whitespace-pre-wrap leading-relaxed pl-6 p-3 rounded-xl bg-muted/20 border border-border/30\">\n {event.description}\n </div>\n </motion.div>\n )}\n\n {/* Attachments */}\n {event?.attachments && event.attachments.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.2 }}\n className=\"space-y-2\"\n >\n <div className=\"flex items-center gap-2\">\n <Paperclip className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.attachments}</span>\n </div>\n <div className=\"grid gap-2\">\n {event.attachments.map(att => (\n <div\n key={att.id}\n onClick={() => handleDownload(att)}\n className=\"flex items-center gap-3 p-3 rounded-xl border border-border/30 bg-muted/20 hover:bg-muted/40 transition-all cursor-pointer group\"\n >\n <div className=\"p-2 bg-primary/10 rounded-lg\">\n <File className=\"w-4 h-4 text-primary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{att.name}</p>\n <p className=\"text-xs text-muted-foreground\">{att.size}</p>\n </div>\n <Download className=\"w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n </div>\n ))}\n </div>\n </motion.div>\n )}\n </div>\n </div>\n );\n\n // ========== EDIT/CREATE MODE ==========\n const renderEditMode = () => (\n <form onSubmit={handleSubmit} className=\"flex flex-col bg-background overflow-hidden w-full max-h-[85vh]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border/50 shrink-0\">\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => setIsColorPickerOpen(!isColorPickerOpen)}\n className=\"relative p-1\"\n >\n <div\n className=\"w-5 h-5 rounded-full cursor-pointer hover:scale-110 transition-transform\"\n style={{\n backgroundColor: formData.color,\n boxShadow: `0 0 0 2px var(--background), 0 0 0 4px ${formData.color}60`\n }}\n />\n {isColorPickerOpen && (\n <div className=\"absolute top-full left-0 mt-2 p-2 bg-background border border-border rounded-xl shadow-xl z-50 flex flex-wrap gap-1.5 w-[180px]\">\n {COLOR_PALETTE.map(color => (\n <button\n key={color}\n type=\"button\"\n onClick={() => {\n setFormData(prev => ({ ...prev, color }));\n setIsColorPickerOpen(false);\n }}\n className={cn(\n \"w-7 h-7 rounded-full transition-all hover:scale-110\",\n formData.color === color && \"ring-2 ring-offset-2 ring-offset-background ring-current\"\n )}\n style={{ backgroundColor: color, color: color }}\n />\n ))}\n </div>\n )}\n </button>\n <h2 className=\"text-lg font-semibold text-foreground\">\n {mode === 'edit' ? translations.editEvent : translations.newEvent}\n </h2>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-2 hover:bg-accent rounded-xl transition-all text-muted-foreground hover:text-foreground\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable Content */}\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"px-5 py-4 space-y-5\">\n {/* Title */}\n <div>\n <input\n type=\"text\"\n required\n autoFocus\n className=\"w-full text-xl font-semibold border-0 border-b-2 border-transparent focus:border-primary bg-transparent px-0 py-2 placeholder-muted-foreground/50 transition-all text-foreground focus:outline-none\"\n value={formData.title}\n onChange={e => setFormData({ ...formData, title: e.target.value })}\n placeholder={translations.addTitle}\n />\n </div>\n\n {/* Date & Time Row */}\n <div className=\"flex items-center gap-3 p-4 rounded-2xl bg-muted/20 border border-border/30\">\n <div className=\"p-2 bg-primary/10 rounded-xl shrink-0\">\n <Clock className=\"w-5 h-5 text-primary\" />\n </div>\n <div className=\"flex-1 grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block\">{translations.start}</label>\n <input\n type=\"datetime-local\"\n className=\"w-full bg-background border border-border/50 rounded-xl px-3 py-2 text-sm font-medium text-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n value={formatDateForInput(formData.start)}\n onChange={e => handleDateChange('start', e.target.value)}\n />\n </div>\n <div>\n <label className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block\">{translations.end}</label>\n <input\n type=\"datetime-local\"\n className=\"w-full bg-background border border-border/50 rounded-xl px-3 py-2 text-sm font-medium text-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n value={formatDateForInput(formData.end)}\n onChange={e => handleDateChange('end', e.target.value)}\n />\n </div>\n </div>\n </div>\n\n {/* Duration Badge */}\n {getDurationText() && (\n <div className=\"flex justify-center\">\n <span className=\"text-xs font-medium px-3 py-1 rounded-full bg-primary/10 text-primary\">\n {getDurationText()}\n </span>\n </div>\n )}\n\n {/* Reminders */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Bell className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.reminders}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsReminderDropdownOpen(!isReminderDropdownOpen)}\n className=\"flex items-center gap-1 text-xs font-medium text-primary hover:text-primary/80 transition-colors\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n {translations.addReminder}\n </button>\n {isReminderDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsReminderDropdownOpen(false)} />\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1 max-h-60 overflow-y-auto\">\n {getReminderOptions(translations).map(option => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => addReminder(option.value, option.label)}\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-accent transition-colors\"\n >\n {option.label}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n {formData.reminders && formData.reminders.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {formData.reminders.map(reminder => (\n <div\n key={reminder.id}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-full bg-amber-500/10 border border-amber-500/20\"\n >\n <BellRing className=\"w-3.5 h-3.5 text-amber-500\" />\n <span className=\"text-xs font-medium text-amber-600 dark:text-amber-400\">\n {reminder.label}\n </span>\n <button\n type=\"button\"\n onClick={() => removeReminder(reminder.id)}\n className=\"p-0.5 hover:bg-amber-500/20 rounded-full transition-colors\"\n >\n <X className=\"w-3 h-3 text-amber-500\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Guests */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.guests}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsGuestsDropdownOpen(!isGuestsDropdownOpen)}\n className=\"w-full flex items-center justify-between px-4 py-3 bg-muted/20 border border-border/30 rounded-xl text-sm text-left hover:bg-muted/30 transition-all\"\n >\n <span className={selectedGuests.length > 0 ? \"text-foreground font-medium\" : \"text-muted-foreground\"}>\n {selectedGuests.length > 0\n ? `${selectedGuests.length} ${selectedGuests.length > 1 ? translations.guestsAdded : translations.guestAdded}`\n : translations.addGuests}\n </span>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform\", isGuestsDropdownOpen && \"rotate-180\")} />\n </button>\n\n {isGuestsDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsGuestsDropdownOpen(false)} />\n <div className=\"absolute z-50 w-full mt-2 bg-background border border-border rounded-xl shadow-xl max-h-48 overflow-y-auto\">\n {fakeGuests.map(email => (\n <div\n key={email}\n className=\"px-4 py-3 hover:bg-accent cursor-pointer flex items-center gap-3 transition-colors\"\n onClick={() => toggleGuest(email)}\n >\n <div className={cn(\n \"w-5 h-5 rounded-md border-2 flex items-center justify-center transition-all\",\n selectedGuests.includes(email) ? 'bg-primary border-primary' : 'border-border'\n )}>\n {selectedGuests.includes(email) && <Check className=\"w-3 h-3 text-primary-foreground\" />}\n </div>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-7 h-7 rounded-full flex items-center justify-center text-xs font-semibold text-white\"\n style={{ backgroundColor: `hsl(${fakeGuests.indexOf(email) * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <span className=\"text-sm\">{email}</span>\n </div>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n\n {selectedGuests.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {selectedGuests.map(email => (\n <div\n key={email}\n className=\"flex items-center gap-2 pl-1 pr-2 py-1 bg-muted/30 border border-border/30 rounded-full\"\n >\n <div\n className=\"w-6 h-6 rounded-full flex items-center justify-center text-xs font-semibold text-white\"\n style={{ backgroundColor: `hsl(${fakeGuests.indexOf(email) * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <span className=\"text-xs font-medium text-foreground\">{email.split('@')[0]}</span>\n <button\n type=\"button\"\n onClick={() => toggleGuest(email)}\n className=\"p-0.5 hover:bg-destructive/10 rounded-full transition-colors\"\n >\n <X className=\"w-3 h-3 text-muted-foreground\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Location */}\n <div className=\"flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30\">\n <MapPin className=\"w-5 h-5 text-muted-foreground shrink-0\" />\n <input\n type=\"text\"\n className=\"flex-1 bg-transparent text-sm text-foreground placeholder-muted-foreground focus:outline-none\"\n placeholder={translations.addLocation}\n value={formData.location || ''}\n onChange={e => setFormData({ ...formData, location: e.target.value })}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <AlignLeft className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.notes}</span>\n </div>\n <textarea\n className=\"w-full bg-muted/20 border border-border/30 rounded-xl px-4 py-3 text-sm min-h-[100px] resize-none text-foreground placeholder-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n placeholder={translations.addDescription}\n value={formData.description || ''}\n onChange={e => setFormData({ ...formData, description: e.target.value })}\n />\n </div>\n\n {/* Recurrence */}\n <div className=\"flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30\">\n <Repeat className=\"w-5 h-5 text-muted-foreground shrink-0\" />\n <select\n className=\"flex-1 bg-transparent text-sm text-foreground focus:outline-none cursor-pointer\"\n value={formData.recurrence?.freq || ''}\n onChange={e => {\n if (e.target.value === '') {\n setFormData({ ...formData, recurrence: undefined });\n } else {\n setFormData({\n ...formData,\n recurrence: {\n freq: e.target.value as 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY',\n interval: 1\n }\n });\n }\n }}\n >\n <option value=\"\">{translations.doesNotRepeat}</option>\n <option value=\"DAILY\">{translations.daily}</option>\n <option value=\"WEEKLY\">{translations.weekly}</option>\n <option value=\"MONTHLY\">{translations.monthly}</option>\n <option value=\"YEARLY\">{translations.yearly}</option>\n </select>\n </div>\n\n {/* Calendar Selector */}\n <div className=\"flex items-center justify-between p-3 rounded-xl bg-muted/20 border border-border/30\">\n <div className=\"flex items-center gap-2\">\n <Tag className=\"w-5 h-5 text-muted-foreground\" />\n <span className=\"text-sm text-foreground\">{translations.calendar}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsCalendarDropdownOpen(!isCalendarDropdownOpen)}\n className=\"flex items-center gap-2 px-3 py-1.5 bg-background border border-border/50 rounded-lg text-sm hover:bg-accent/50 transition-all\"\n >\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: calendars?.find(c => c.id === formData.calendarId)?.color || '#3b82f6' }}\n />\n <span className=\"font-medium\">{calendars?.find(c => c.id === formData.calendarId)?.label || 'Select'}</span>\n <ChevronDown className=\"w-3.5 h-3.5 text-muted-foreground\" />\n </button>\n\n {isCalendarDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsCalendarDropdownOpen(false)} />\n <div className=\"absolute right-0 bottom-full mb-2 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1\">\n {calendars?.map(cal => (\n <button\n key={cal.id}\n type=\"button\"\n className=\"w-full flex items-center gap-3 px-3 py-2 hover:bg-accent transition-colors text-left\"\n onClick={() => {\n setFormData({\n ...formData,\n calendarId: cal.id,\n color: cal.color || formData.color\n });\n setIsCalendarDropdownOpen(false);\n }}\n >\n <div className=\"w-3 h-3 rounded-full\" style={{ backgroundColor: cal.color }} />\n <span className=\"flex-1 text-sm\">{cal.label}</span>\n {formData.calendarId === cal.id && <Check className=\"w-4 h-4 text-primary\" />}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"px-5 py-4 border-t border-border/50 flex items-center justify-between bg-muted/10 shrink-0\">\n {mode === 'edit' && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className=\"flex items-center gap-2 px-4 py-2 text-destructive hover:bg-destructive/10 rounded-xl transition-all text-sm font-medium\"\n >\n <Trash2 className=\"w-4 h-4\" />\n {translations.delete}\n </button>\n )}\n {mode === 'create' && <div />}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2.5 text-muted-foreground hover:text-foreground font-medium text-sm rounded-xl transition-all hover:bg-accent\"\n >\n {translations.cancel}\n </button>\n <button\n type=\"submit\"\n className=\"px-6 py-2.5 bg-primary hover:bg-primary/90 text-primary-foreground font-semibold text-sm rounded-xl shadow-md transition-all hover:shadow-lg hover:shadow-primary/20 active:scale-95\"\n >\n {mode === 'edit' ? translations.saveChanges : translations.createEvent}\n </button>\n </div>\n </div>\n </form>\n );\n\n return (\n <Modal isOpen={isOpen} onClose={onClose} hideHeader className=\"p-0 overflow-hidden max-w-lg rounded-2xl shadow-2xl\">\n <AnimatePresence mode=\"wait\">\n {mode === 'view' && event ? (\n <motion.div\n key=\"view\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {renderViewMode()}\n </motion.div>\n ) : (\n <motion.div\n key=\"edit\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {renderEditMode()}\n </motion.div>\n )}\n </AnimatePresence>\n </Modal>\n );\n};\n","import React from 'react';\r\nimport { cn } from '../utils';\r\n\r\n// Base skeleton component\r\nexport const Skeleton: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\r\n <div className={cn(\"animate-pulse bg-muted/40 rounded\", className)} style={style} />\r\n);\r\n\r\n// Month View Skeleton\r\nexport const MonthViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"grid grid-cols-7 border-b border-border/50 bg-muted/10\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <div key={i} className=\"py-3 px-2 text-center border-r border-border/30 last:border-r-0\">\r\n <Skeleton className=\"h-4 w-8 mx-auto\" />\r\n </div>\r\n ))}\r\n </div>\r\n {/* Grid */}\r\n <div className=\"grid grid-cols-7 flex-1\">\r\n {Array.from({ length: 35 }).map((_, i) => (\r\n <div key={i} className=\"min-h-[120px] border-r border-b border-border/30 p-2\">\r\n <Skeleton className=\"h-4 w-6 mb-2\" />\r\n <div className=\"space-y-1\">\r\n {Math.random() > 0.5 && <Skeleton className=\"h-5 w-full rounded-md\" />}\r\n {Math.random() > 0.7 && <Skeleton className=\"h-5 w-3/4 rounded-md\" />}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Week View Skeleton\r\nexport const WeekViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"flex border-b border-border/50 bg-muted/10\">\r\n <div className=\"w-16 p-3 border-r border-border/30\">\r\n <Skeleton className=\"h-8 w-10 mx-auto\" />\r\n </div>\r\n <div className=\"flex-1 grid grid-cols-7\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <div key={i} className=\"py-3 px-2 text-center border-r border-border/30 last:border-r-0\">\r\n <Skeleton className=\"h-3 w-8 mx-auto mb-1\" />\r\n <Skeleton className=\"h-8 w-8 mx-auto rounded-xl\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Grid */}\r\n <div className=\"flex flex-1\" style={{ height: '600px' }}>\r\n <div className=\"w-16 border-r border-border/30\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[60px] relative\">\r\n <Skeleton className=\"h-4 w-10 absolute right-2 -translate-y-1/2\" />\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"flex-1 grid grid-cols-7 relative\">\r\n {Array.from({ length: 7 }).map((_, colIdx) => (\r\n <div key={colIdx} className=\"relative border-r border-border/30 last:border-r-0\">\r\n {Array.from({ length: 10 }).map((_, rowIdx) => (\r\n <div key={rowIdx} className=\"h-[60px] border-b border-dashed border-border/20\" />\r\n ))}\r\n {/* Random events */}\r\n {Math.random() > 0.3 && (\r\n <Skeleton\r\n className=\"absolute rounded-md\"\r\n style={{\r\n top: `${Math.floor(Math.random() * 400)}px`,\r\n left: '4px',\r\n right: '4px',\r\n height: `${60 + Math.floor(Math.random() * 120)}px`\r\n }}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Day View Skeleton\r\nexport const DayViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"px-6 py-4 border-b border-border/50 bg-muted/10 text-center\">\r\n <Skeleton className=\"h-7 w-64 mx-auto\" />\r\n </div>\r\n {/* Grid */}\r\n <div className=\"flex flex-1\" style={{ height: '600px' }}>\r\n <div className=\"w-20 border-r border-border/30 bg-muted/5\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[80px] relative\">\r\n <Skeleton className=\"h-4 w-12 absolute left-1/2 -translate-x-1/2 -translate-y-1/2\" />\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"flex-1 relative\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[80px] border-b border-dashed border-border/20\" />\r\n ))}\r\n {/* Random events */}\r\n <Skeleton\r\n className=\"absolute rounded-lg left-4 right-4\"\r\n style={{ top: '160px', height: '120px' }}\r\n />\r\n <Skeleton\r\n className=\"absolute rounded-lg left-4 right-4\"\r\n style={{ top: '400px', height: '80px' }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Agenda View Skeleton\r\nexport const AgendaViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden p-6\">\r\n <div className=\"space-y-6\">\r\n {Array.from({ length: 4 }).map((_, dayIdx) => (\r\n <div key={dayIdx}>\r\n <Skeleton className=\"h-5 w-40 mb-4\" />\r\n <div className=\"space-y-3\">\r\n {Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_, eventIdx) => (\r\n <div key={eventIdx} className=\"flex items-center gap-4 p-3 rounded-xl bg-muted/10\">\r\n <Skeleton className=\"h-10 w-10 rounded-lg\" />\r\n <div className=\"flex-1 space-y-2\">\r\n <Skeleton className=\"h-4 w-3/4\" />\r\n <Skeleton className=\"h-3 w-1/2\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Calendar Header Skeleton\r\nexport const CalendarHeaderSkeleton: React.FC = () => (\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border/50 bg-muted/10\">\r\n <div className=\"flex items-center gap-3\">\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <Skeleton className=\"h-8 w-20 rounded-lg\" />\r\n </div>\r\n <Skeleton className=\"h-6 w-40\" />\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-8 w-16 rounded-lg\" />\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Sidebar Skeleton\r\nexport const SidebarSkeleton: React.FC = () => (\r\n <div className=\"w-[260px] h-full bg-background border-r border-border/50 p-4 space-y-6\">\r\n {/* Create button */}\r\n <Skeleton className=\"h-12 w-full rounded-2xl\" />\r\n\r\n {/* Mini calendar */}\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n <div className=\"flex gap-1\">\r\n <Skeleton className=\"h-6 w-6 rounded\" />\r\n <Skeleton className=\"h-6 w-6 rounded\" />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-4 w-4 mx-auto\" />\r\n ))}\r\n {Array.from({ length: 35 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-7 w-7 mx-auto rounded\" />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Calendars section */}\r\n <div className=\"bg-muted/20 rounded-2xl p-3\">\r\n <Skeleton className=\"h-4 w-20 mb-3\" />\r\n <div className=\"space-y-2\">\r\n {Array.from({ length: 3 }).map((_, i) => (\r\n <div key={i} className=\"flex items-center gap-3\">\r\n <Skeleton className=\"h-5 w-5 rounded\" />\r\n <Skeleton className=\"h-4 flex-1\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Full Calendar Skeleton (combines all)\r\nexport const CalendarSkeleton: React.FC<{ view?: string }> = ({ view = 'month' }) => (\r\n <div className=\"flex flex-col h-full\">\r\n <CalendarHeaderSkeleton />\r\n <div className=\"flex flex-1 overflow-hidden\">\r\n <SidebarSkeleton />\r\n <div className=\"flex-1 p-4\">\r\n {view === 'month' && <MonthViewSkeleton />}\r\n {view === 'week' && <WeekViewSkeleton />}\r\n {view === 'day' && <DayViewSkeleton />}\r\n {view === 'agenda' && <AgendaViewSkeleton />}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\r\nimport { CalendarEvent } from '../types';\r\nimport { cn } from '../utils';\r\nimport { Edit3, Trash2, Copy, Calendar, Clock, X } from 'lucide-react';\r\nimport { AnimatePresence, motion } from 'framer-motion';\r\n\r\ninterface ContextMenuAction {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n onClick: () => void;\r\n variant?: 'default' | 'danger';\r\n disabled?: boolean;\r\n}\r\n\r\ninterface EventContextMenuProps {\r\n event: CalendarEvent | null;\r\n position: { x: number; y: number } | null;\r\n onClose: () => void;\r\n onEdit?: (event: CalendarEvent) => void;\r\n onDelete?: (eventId: string) => void;\r\n onDuplicate?: (event: CalendarEvent) => void;\r\n customActions?: ContextMenuAction[];\r\n translations?: {\r\n edit?: string;\r\n delete?: string;\r\n duplicate?: string;\r\n };\r\n}\r\n\r\nexport const EventContextMenu: React.FC<EventContextMenuProps> = ({\r\n event,\r\n position,\r\n onClose,\r\n onEdit,\r\n onDelete,\r\n onDuplicate,\r\n customActions = [],\r\n translations,\r\n}) => {\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close on escape key\r\n useEffect(() => {\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n if (position) {\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => document.removeEventListener('keydown', handleKeyDown);\r\n }\r\n }, [position, onClose]);\r\n\r\n // Close on click outside\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (position) {\r\n // Delay to prevent immediate close from the right-click that opened it\r\n setTimeout(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }, 0);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }\r\n }, [position, onClose]);\r\n\r\n if (!event || !position) return null;\r\n\r\n const actions: ContextMenuAction[] = [\r\n ...(onEdit ? [{\r\n id: 'edit',\r\n label: translations?.edit || 'Edit',\r\n icon: <Edit3 className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onEdit(event);\r\n onClose();\r\n },\r\n }] : []),\r\n ...(onDuplicate ? [{\r\n id: 'duplicate',\r\n label: translations?.duplicate || 'Duplicate',\r\n icon: <Copy className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onDuplicate(event);\r\n onClose();\r\n },\r\n }] : []),\r\n ...customActions,\r\n ...(onDelete ? [{\r\n id: 'delete',\r\n label: translations?.delete || 'Delete',\r\n icon: <Trash2 className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onDelete(event.id);\r\n onClose();\r\n },\r\n variant: 'danger' as const,\r\n }] : []),\r\n ];\r\n\r\n // Calculate position to ensure menu stays within viewport\r\n const adjustedPosition = {\r\n x: Math.min(position.x, window.innerWidth - 200),\r\n y: Math.min(position.y, window.innerHeight - (actions.length * 44 + 80)),\r\n };\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={menuRef}\r\n initial={{ opacity: 0, scale: 0.95, y: -5 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: -5 }}\r\n transition={{ duration: 0.15, ease: 'easeOut' }}\r\n className=\"fixed z-[100] min-w-[180px] bg-background border-[0.5px] border-border rounded-xl shadow-xl overflow-hidden\"\r\n style={{\r\n left: adjustedPosition.x,\r\n top: adjustedPosition.y,\r\n }}\r\n >\r\n {/* Event preview header */}\r\n <div className=\"px-3 py-2 border-b-[0.5px] border-border bg-muted/30\">\r\n <div className=\"flex items-center gap-2\">\r\n <div\r\n className=\"w-2.5 h-2.5 rounded-full shrink-0\"\r\n style={{ backgroundColor: event.color || 'var(--primary)' }}\r\n />\r\n <span className=\"text-sm font-medium truncate text-foreground\">\r\n {event.title}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"py-1\">\r\n {actions.map((action, index) => (\r\n <React.Fragment key={action.id}>\r\n {index > 0 && action.variant === 'danger' && (\r\n <div className=\"h-px bg-border my-1\" />\r\n )}\r\n <button\r\n onClick={action.onClick}\r\n disabled={action.disabled}\r\n className={cn(\r\n \"w-full flex items-center gap-3 px-3 py-2 text-sm transition-colors\",\r\n action.disabled && \"opacity-50 cursor-not-allowed\",\r\n action.variant === 'danger'\r\n ? \"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20\"\r\n : \"text-foreground hover:bg-accent\"\r\n )}\r\n >\r\n {action.icon}\r\n <span>{action.label}</span>\r\n </button>\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n );\r\n};\r\n\r\n// Hook to manage context menu state\r\nexport const useEventContextMenu = () => {\r\n const [contextMenu, setContextMenu] = useState<{\r\n event: CalendarEvent | null;\r\n position: { x: number; y: number } | null;\r\n }>({ event: null, position: null });\r\n\r\n const openContextMenu = useCallback((event: CalendarEvent, e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setContextMenu({\r\n event,\r\n position: { x: e.clientX, y: e.clientY },\r\n });\r\n }, []);\r\n\r\n const closeContextMenu = useCallback(() => {\r\n setContextMenu({ event: null, position: null });\r\n }, []);\r\n\r\n return {\r\n contextMenuEvent: contextMenu.event,\r\n contextMenuPosition: contextMenu.position,\r\n openContextMenu,\r\n closeContextMenu,\r\n };\r\n};\r\n","/**\r\n * Converts a color string (hex or rgb) to HSL values (h s% l%) for Tailwind CSS variables.\r\n * @param color - The color string (e.g., \"#3b82f6\", \"3b82f6\", \"rgb(0, 84, 97)\")\r\n * @returns The HSL string (e.g., \"217 91% 60%\") or null if invalid\r\n */\r\nexport function colorToHsl(color: string): string | null {\r\n let r = 0, g = 0, b = 0;\r\n\r\n // Handle Hex\r\n if (color.startsWith('#') || /^[0-9a-fA-F]{3,6}$/.test(color)) {\r\n let c = color.replace(/^#/, '');\r\n if (c.length === 3) {\r\n c = c.split('').map(char => char + char).join('');\r\n }\r\n if (c.length !== 6) return null;\r\n \r\n r = parseInt(c.substring(0, 2), 16) / 255;\r\n g = parseInt(c.substring(2, 4), 16) / 255;\r\n b = parseInt(c.substring(4, 6), 16) / 255;\r\n } \r\n // Handle RGB\r\n else if (color.startsWith('rgb')) {\r\n const match = color.match(/\\d+/g);\r\n if (!match || match.length < 3) return null;\r\n r = parseInt(match[0]) / 255;\r\n g = parseInt(match[1]) / 255;\r\n b = parseInt(match[2]) / 255;\r\n } \r\n else {\r\n return null;\r\n }\r\n\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n let h = 0;\r\n let s = 0;\r\n let l = (max + min) / 2;\r\n\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n const hDeg = Math.round(h * 360);\r\n const sPct = Math.round(s * 100);\r\n const lPct = Math.round(l * 100);\r\n\r\n return `${hDeg} ${sPct}% ${lPct}%`;\r\n}\r\n\r\nexport interface ThemeVariables {\r\n '--background'?: string;\r\n '--foreground'?: string;\r\n '--primary'?: string;\r\n '--primary-foreground'?: string;\r\n '--secondary'?: string;\r\n '--secondary-foreground'?: string;\r\n '--muted'?: string;\r\n '--muted-foreground'?: string;\r\n '--accent'?: string;\r\n '--accent-foreground'?: string;\r\n '--border'?: string;\r\n '--radius'?: string;\r\n}\r\n\r\nimport { CalendarTheme } from '../types';\r\n\r\nexport function getThemeStyles(theme?: CalendarTheme): React.CSSProperties {\r\n if (!theme) return {};\r\n\r\n const styles: Record<string, string> = {};\r\n\r\n // Handle Colors\r\n if (theme.colors) {\r\n const mappings: Record<string, keyof typeof theme.colors> = {\r\n '--background': 'background',\r\n '--foreground': 'foreground',\r\n '--primary': 'primary',\r\n '--secondary': 'secondary',\r\n '--muted': 'muted',\r\n '--accent': 'accent',\r\n '--border': 'border',\r\n };\r\n\r\n Object.entries(mappings).forEach(([cssVar, themeKey]) => {\r\n const colorValue = theme.colors?.[themeKey];\r\n if (colorValue) {\r\n const hsl = colorToHsl(colorValue);\r\n if (hsl) {\r\n styles[cssVar] = hsl;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Handle Border Radius\r\n if (theme.borderRadius) {\r\n styles['--radius'] = theme.borderRadius;\r\n }\r\n\r\n // Handle Font Family\r\n if (theme.fontFamily) {\r\n styles['fontFamily'] = theme.fontFamily;\r\n }\r\n\r\n return styles as React.CSSProperties;\r\n}\r\n","import { useState, useMemo, useEffect } from 'react';\r\nimport {\r\n addMonths, subMonths, addWeeks, subWeeks, addDays, subDays,\r\n differenceInMilliseconds\r\n} from 'date-fns';\r\nimport { toZonedTime, fromZonedTime } from 'date-fns-tz';\r\nimport { RRule } from 'rrule';\r\nimport { DragEndEvent } from '@dnd-kit/core';\r\nimport { ViewType, CalendarEvent } from '../types';\r\n\r\ninterface UseCalendarLogicProps {\r\n events: CalendarEvent[];\r\n view?: ViewType;\r\n onViewChange?: (view: ViewType) => void;\r\n date?: Date;\r\n onDateChange?: (date: Date) => void;\r\n onEventClick?: (event: CalendarEvent) => void;\r\n onEventDrop?: (event: CalendarEvent, start: Date, end: Date) => void;\r\n onEventUpdate?: (event: CalendarEvent) => void;\r\n onEventCreate?: (event: Partial<CalendarEvent>) => void;\r\n onEventDelete?: (eventId: string) => void;\r\n readOnly?: boolean;\r\n timezone?: string;\r\n}\r\n\r\nexport const useCalendarLogic = ({\r\n events,\r\n view: controlledView,\r\n onViewChange: controlledOnViewChange,\r\n date: controlledDate,\r\n onDateChange: controlledOnDateChange,\r\n onEventClick,\r\n onEventDrop,\r\n onEventUpdate,\r\n onEventCreate,\r\n onEventDelete,\r\n readOnly,\r\n timezone\r\n}: UseCalendarLogicProps) => {\r\n const [internalView, setInternalView] = useState<ViewType>('week');\r\n const [internalDate, setInternalDate] = useState(new Date());\r\n // Start closed on SSR to avoid hydration mismatch.\r\n // After mount, open automatically on desktop (≥768px).\r\n const [isSidebarOpen, setIsSidebarOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (window.innerWidth >= 768) {\r\n setIsSidebarOpen(true);\r\n }\r\n }, []);\r\n \r\n // Modal state\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(null);\r\n const [modalInitialDate, setModalInitialDate] = useState<Date | undefined>(undefined);\r\n\r\n const view = controlledView ?? internalView;\r\n const currentDate = controlledDate ?? internalDate;\r\n\r\n // Expand recurring events\r\n const expandedEvents = useMemo(() => {\r\n const allEvents: CalendarEvent[] = [];\r\n \r\n // Define a range for expansion (e.g., +/- 1 year from current date)\r\n // For better performance, we could limit this based on the current view range\r\n const rangeStart = subDays(currentDate, 365);\r\n const rangeEnd = addDays(currentDate, 365);\r\n\r\n events.forEach(event => {\r\n if (event.recurrence) {\r\n try {\r\n const rule = new RRule({\r\n freq: RRule[event.recurrence.freq],\r\n interval: event.recurrence.interval || 1,\r\n dtstart: new Date(event.start),\r\n until: event.recurrence.until ? new Date(event.recurrence.until) : undefined,\r\n count: event.recurrence.count,\r\n });\r\n\r\n const dates = rule.between(rangeStart, rangeEnd);\r\n \r\n dates.forEach(date => {\r\n const duration = differenceInMilliseconds(new Date(event.end), new Date(event.start));\r\n allEvents.push({\r\n ...event,\r\n id: `${event.id}-${date.getTime()}`, // Unique ID for each instance\r\n originalEventId: event.id, // Reference to original\r\n start: date,\r\n end: new Date(date.getTime() + duration),\r\n });\r\n });\r\n } catch (e) {\r\n console.error(\"Error parsing recurrence rule\", e);\r\n allEvents.push(event); // Fallback to original\r\n }\r\n } else {\r\n allEvents.push(event);\r\n }\r\n });\r\n\r\n return allEvents;\r\n }, [events, currentDate]);\r\n\r\n const handleViewChange = (newView: ViewType) => {\r\n if (controlledOnViewChange) {\r\n controlledOnViewChange(newView);\r\n } else {\r\n setInternalView(newView);\r\n }\r\n };\r\n\r\n const handleDateChange = (newDate: Date) => {\r\n if (controlledOnDateChange) {\r\n controlledOnDateChange(newDate);\r\n } else {\r\n setInternalDate(newDate);\r\n }\r\n };\r\n\r\n const handlePrev = () => {\r\n switch (view) {\r\n case 'month':\r\n handleDateChange(subMonths(currentDate, 1));\r\n break;\r\n case 'week':\r\n handleDateChange(subWeeks(currentDate, 1));\r\n break;\r\n case 'day':\r\n case 'resource':\r\n handleDateChange(subDays(currentDate, 1));\r\n break;\r\n case 'agenda':\r\n handleDateChange(subDays(currentDate, 7));\r\n break;\r\n }\r\n };\r\n\r\n const handleNext = () => {\r\n switch (view) {\r\n case 'month':\r\n handleDateChange(addMonths(currentDate, 1));\r\n break;\r\n case 'week':\r\n handleDateChange(addWeeks(currentDate, 1));\r\n break;\r\n case 'day':\r\n case 'resource':\r\n handleDateChange(addDays(currentDate, 1));\r\n break;\r\n case 'agenda':\r\n handleDateChange(addDays(currentDate, 7));\r\n break;\r\n }\r\n };\r\n\r\n const handleToday = () => {\r\n handleDateChange(new Date());\r\n };\r\n\r\n const handleDateClick = (date: Date) => {\r\n handleDateChange(date);\r\n handleViewChange('day');\r\n };\r\n\r\n const handleTimeSlotClick = (date: Date) => {\r\n if (readOnly) return;\r\n setSelectedEvent(null);\r\n setModalInitialDate(date);\r\n setIsModalOpen(true);\r\n };\r\n \r\n const handleEventClickInternal = (event: CalendarEvent) => {\r\n if (onEventClick) {\r\n onEventClick(event);\r\n }\r\n \r\n if (!readOnly) {\r\n setSelectedEvent(event);\r\n setModalInitialDate(undefined);\r\n setIsModalOpen(true);\r\n }\r\n };\r\n\r\n const handleCreateEvent = () => {\r\n if (readOnly) return;\r\n setSelectedEvent(null);\r\n setModalInitialDate(new Date());\r\n setIsModalOpen(true);\r\n };\r\n\r\n const handleModalSave = (eventData: Partial<CalendarEvent>) => {\r\n // If we are editing an instance of a recurring event, we might want to split it\r\n // For simplicity in this version, we just update the original event if it has an ID,\r\n // or create a new one.\r\n \r\n // Check if it's a recurrence instance (has ID like \"originalId-timestamp\")\r\n let effectiveEventId = selectedEvent?.id;\r\n if (selectedEvent?.originalEventId) {\r\n effectiveEventId = selectedEvent.originalEventId;\r\n }\r\n\r\n if (effectiveEventId) {\r\n // Update existing\r\n if (onEventUpdate) {\r\n onEventUpdate({\r\n ...eventData,\r\n id: effectiveEventId\r\n } as CalendarEvent);\r\n }\r\n } else {\r\n // Create new\r\n if (onEventCreate) {\r\n onEventCreate(eventData);\r\n }\r\n }\r\n };\r\n \r\n const handleModalDelete = (eventId: string) => {\r\n // Handle deletion of recurring instances\r\n let effectiveEventId = eventId;\r\n if (selectedEvent?.originalEventId && selectedEvent.id === eventId) {\r\n effectiveEventId = selectedEvent.originalEventId;\r\n }\r\n\r\n if (onEventDelete) {\r\n onEventDelete(effectiveEventId);\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n if (!over) return;\r\n\r\n const activeEvent = active.data.current?.event as CalendarEvent;\r\n const overDate = over.data.current?.date as Date;\r\n\r\n if (!activeEvent || !overDate) return;\r\n\r\n const originalStart = new Date(activeEvent.start);\r\n const originalEnd = new Date(activeEvent.end);\r\n const duration = differenceInMilliseconds(originalEnd, originalStart);\r\n\r\n let newStart: Date;\r\n\r\n if (view === 'month') {\r\n // For month view, overDate is the day cell\r\n // We need to preserve the original time but change the date\r\n if (timezone) {\r\n // Get the original time in the target timezone\r\n const zonedOriginal = toZonedTime(originalStart, timezone);\r\n // Create new date with overDate's date but original's time\r\n const zonedNew = new Date(overDate);\r\n zonedNew.setHours(zonedOriginal.getHours());\r\n zonedNew.setMinutes(zonedOriginal.getMinutes());\r\n zonedNew.setSeconds(zonedOriginal.getSeconds());\r\n zonedNew.setMilliseconds(zonedOriginal.getMilliseconds());\r\n // Convert back from zoned time to UTC\r\n newStart = fromZonedTime(zonedNew, timezone);\r\n } else {\r\n newStart = new Date(overDate);\r\n newStart.setHours(originalStart.getHours());\r\n newStart.setMinutes(originalStart.getMinutes());\r\n newStart.setSeconds(originalStart.getSeconds());\r\n newStart.setMilliseconds(originalStart.getMilliseconds());\r\n }\r\n } else {\r\n // Week / Day / Resource View Logic\r\n // overDate represents the time slot in \"display timezone\"\r\n if (timezone) {\r\n // overDate is already in the display timezone representation\r\n // We need to convert it back to UTC for storage\r\n // The cell date was created as local time representing the target timezone\r\n newStart = fromZonedTime(overDate, timezone);\r\n } else {\r\n // No timezone set - use the date directly\r\n newStart = new Date(overDate);\r\n }\r\n\r\n newStart.setSeconds(0);\r\n newStart.setMilliseconds(0);\r\n }\r\n\r\n const newEnd = new Date(newStart.getTime() + duration);\r\n\r\n // Resource Handling\r\n let newResourceId = activeEvent.resourceId;\r\n const overResourceId = over.data.current?.resourceId;\r\n if (overResourceId) {\r\n newResourceId = overResourceId;\r\n }\r\n\r\n // Check if event has actually changed\r\n if (newStart.getTime() === originalStart.getTime() &&\r\n newEnd.getTime() === originalEnd.getTime() &&\r\n newResourceId === activeEvent.resourceId\r\n ) {\r\n return;\r\n }\r\n\r\n if (onEventDrop) {\r\n onEventDrop(\r\n { ...activeEvent, start: newStart, end: newEnd, resourceId: newResourceId },\r\n newStart,\r\n newEnd\r\n );\r\n } else if (onEventUpdate) {\r\n onEventUpdate({\r\n ...activeEvent,\r\n start: newStart,\r\n end: newEnd,\r\n resourceId: newResourceId\r\n });\r\n }\r\n };\r\n\r\n return {\r\n view,\r\n currentDate,\r\n isSidebarOpen,\r\n setIsSidebarOpen,\r\n isModalOpen,\r\n setIsModalOpen,\r\n selectedEvent,\r\n modalInitialDate,\r\n expandedEvents,\r\n handleViewChange,\r\n handleDateChange,\r\n handlePrev,\r\n handleNext,\r\n handleToday,\r\n handleDateClick,\r\n handleTimeSlotClick,\r\n handleEventClickInternal,\r\n handleCreateEvent,\r\n handleModalSave,\r\n handleModalDelete,\r\n handleDragEnd\r\n };\r\n};\r\n","import { useRef, useCallback, useEffect } from 'react';\r\n\r\ninterface SwipeGestureOptions {\r\n onSwipeLeft?: () => void;\r\n onSwipeRight?: () => void;\r\n onSwipeUp?: () => void;\r\n onSwipeDown?: () => void;\r\n threshold?: number; // Minimum distance to trigger swipe\r\n restraint?: number; // Maximum perpendicular distance\r\n allowedTime?: number; // Maximum time allowed to complete swipe\r\n enabled?: boolean;\r\n}\r\n\r\ninterface TouchInfo {\r\n startX: number;\r\n startY: number;\r\n startTime: number;\r\n}\r\n\r\nexport const useSwipeGesture = <T extends HTMLElement>(\r\n options: SwipeGestureOptions\r\n) => {\r\n const {\r\n onSwipeLeft,\r\n onSwipeRight,\r\n onSwipeUp,\r\n onSwipeDown,\r\n threshold = 100,\r\n restraint = 100,\r\n allowedTime = 500,\r\n enabled = true,\r\n } = options;\r\n\r\n const touchInfoRef = useRef<TouchInfo | null>(null);\r\n const elementRef = useRef<T>(null);\r\n\r\n const handleTouchStart = useCallback((e: TouchEvent) => {\r\n if (!enabled) return;\r\n\r\n const touch = e.touches[0];\r\n touchInfoRef.current = {\r\n startX: touch.clientX,\r\n startY: touch.clientY,\r\n startTime: Date.now(),\r\n };\r\n }, [enabled]);\r\n\r\n const handleTouchEnd = useCallback((e: TouchEvent) => {\r\n if (!enabled || !touchInfoRef.current) return;\r\n\r\n const touch = e.changedTouches[0];\r\n const { startX, startY, startTime } = touchInfoRef.current;\r\n\r\n const distX = touch.clientX - startX;\r\n const distY = touch.clientY - startY;\r\n const elapsedTime = Date.now() - startTime;\r\n\r\n // Check if swipe was fast enough\r\n if (elapsedTime <= allowedTime) {\r\n // Horizontal swipe\r\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\r\n if (distX > 0) {\r\n onSwipeRight?.();\r\n } else {\r\n onSwipeLeft?.();\r\n }\r\n }\r\n // Vertical swipe\r\n else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\r\n if (distY > 0) {\r\n onSwipeDown?.();\r\n } else {\r\n onSwipeUp?.();\r\n }\r\n }\r\n }\r\n\r\n touchInfoRef.current = null;\r\n }, [enabled, threshold, restraint, allowedTime, onSwipeLeft, onSwipeRight, onSwipeUp, onSwipeDown]);\r\n\r\n useEffect(() => {\r\n const element = elementRef.current;\r\n if (!element) return;\r\n\r\n element.addEventListener('touchstart', handleTouchStart, { passive: true });\r\n element.addEventListener('touchend', handleTouchEnd, { passive: true });\r\n\r\n return () => {\r\n element.removeEventListener('touchstart', handleTouchStart);\r\n element.removeEventListener('touchend', handleTouchEnd);\r\n };\r\n }, [handleTouchStart, handleTouchEnd]);\r\n\r\n return elementRef;\r\n};\r\n\r\n// Higher-order component for adding swipe to views\r\nexport const useViewSwipe = <T extends HTMLElement = HTMLElement>(\r\n onPrev: () => void,\r\n onNext: () => void,\r\n enabled: boolean = true\r\n) => {\r\n return useSwipeGesture<T>({\r\n onSwipeLeft: onNext,\r\n onSwipeRight: onPrev,\r\n threshold: 50,\r\n restraint: 100,\r\n allowedTime: 300,\r\n enabled,\r\n });\r\n};\r\n","import React, { useId, useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DndContext, useSensor, useSensors, PointerSensor, Modifier, DragOverlay } from '@dnd-kit/core';\nimport { createSnapModifier, restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { CalendarHeader } from './components/CalendarHeader';\nimport { Sidebar } from './components/Sidebar';\nimport { MonthView } from './views/MonthView';\nimport { WeekView } from './views/WeekView';\nimport { DayView } from './views/DayView';\nimport { AgendaView } from './views/AgendaView';\nimport { ResourceView } from './views/ResourceView';\nimport { EventModal } from './components/EventModal';\nimport { MonthViewSkeleton, WeekViewSkeleton, DayViewSkeleton, AgendaViewSkeleton } from './components/Skeleton';\nimport { EventContextMenu, useEventContextMenu } from './components/ContextMenu';\nimport { CalendarProps, CalendarEvent } from './types';\nimport { cn } from './utils';\nimport { getThemeStyles } from './lib/theme';\nimport { useCalendarLogic } from './hooks/useCalendarLogic';\nimport { differenceInMinutes, format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, addDays } from 'date-fns';\nimport { useViewSwipe } from './hooks/useSwipeGesture';\nimport { getTranslations, LanguageCode } from './locales';\nimport { getTimeFormatFull } from './lib/date';\n\n// Re-export types for consumers\nexport type {\n ViewType,\n CalendarEvent,\n CalendarProps,\n CalendarProps as ProSchedulerProps,\n CalendarTheme,\n CalendarTranslations,\n EventType,\n Resource,\n EventReminder,\n EventAttachment,\n ThemeColors,\n LanguageCode,\n SidebarMenuItem,\n CustomView,\n} from './types';\n\n// Re-export locale utilities so consumers can access language metadata\nexport { LANGUAGE_META, LOCALES, DATE_FNS_LOCALES, getTranslations } from './locales';\n\n// Re-export utilities\nexport { cn } from './utils';\n\nexport const Scheduler: React.FC<CalendarProps> = ({\n events = [],\n view: controlledView,\n onViewChange: controlledOnViewChange,\n date: controlledDate,\n onDateChange: controlledOnDateChange,\n onEventClick,\n onEventDrop,\n onEventCreate,\n onEventUpdate,\n onEventDelete,\n onEventResize,\n timezone,\n onTimezoneChange,\n className,\n theme,\n renderEventForm,\n renderHeader,\n renderMiniCalendar,\n renderEmptyState,\n readOnly,\n calendars,\n resources,\n eventTypes,\n onCalendarToggle,\n isLoading,\n isDarkMode,\n onThemeToggle,\n translations,\n hideViewSwitcher,\n hideLanguageSwitcher,\n initialScrollHour = 8,\n reverseTime: reverseTimeProp = false,\n language = 'tr', // default language is Turkish\n onLanguageChange,\n locale,\n sidebarMenus,\n customViews,\n}) => {\n // Tracks which custom sidebar menu is active (null = normal calendar view)\n const [activeCustomMenu, setActiveCustomMenu] = useState<string | null>(null);\n\n // Tracks which custom view is active (null = built-in view)\n const [activeCustomViewId, setActiveCustomViewId] = useState<string | null>(null);\n\n // Internal reverse-time state; persisted in localStorage so the preference\n // survives page refreshes. Falls back to the prop value on first load.\n const REVERSE_TIME_KEY = 'calendarkit:reverseTime';\n const [reverseTime, setReverseTime] = useState<boolean>(() => {\n try {\n const stored = localStorage.getItem(REVERSE_TIME_KEY);\n return stored !== null ? stored === 'true' : reverseTimeProp;\n } catch {\n return reverseTimeProp;\n }\n });\n\n // Persist whenever the value changes\n useEffect(() => {\n try {\n localStorage.setItem(REVERSE_TIME_KEY, String(reverseTime));\n } catch {\n // localStorage may be unavailable in some environments (e.g. SSR)\n }\n }, [reverseTime]);\n\n const [activeDragEvent, setActiveDragEvent] = useState<CalendarEvent | null>(null);\n\n // Ref to scheduler root — used to copy resolved theme CSS vars onto the portaled FAB\n const schedulerRef = useRef<HTMLDivElement>(null);\n const [fabCssVars, setFabCssVars] = useState<React.CSSProperties>({});\n\n // SSR guard — document.body is unavailable during server render\n const [isMounted, setIsMounted] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => { setIsMounted(true); }, []);\n\n // JS media query — more reliable than md:hidden when viewport meta or breakpoints differ\n useEffect(() => {\n if (!isMounted) return;\n const mq = window.matchMedia('(max-width: 767px)');\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [isMounted]);\n\n // Copy computed theme tokens from scheduler root so portaled FAB inherits the same palette\n const syncFabTheme = useCallback(() => {\n const root = schedulerRef.current;\n if (!root) return;\n const cs = getComputedStyle(root);\n const vars = ['--primary', '--primary-foreground'] as const;\n const next: Record<string, string> = {};\n vars.forEach((name) => {\n const value = cs.getPropertyValue(name).trim();\n if (value) next[name] = value;\n });\n setFabCssVars(next as React.CSSProperties);\n }, []);\n\n useEffect(() => {\n if (!isMounted) return;\n syncFabTheme();\n }, [isMounted, theme, isDarkMode, syncFabTheme]);\n\n // Context menu state\n const {\n contextMenuEvent,\n contextMenuPosition,\n openContextMenu,\n closeContextMenu,\n } = useEventContextMenu();\n\n const {\n view,\n currentDate,\n isSidebarOpen,\n setIsSidebarOpen,\n isModalOpen,\n setIsModalOpen,\n selectedEvent,\n modalInitialDate,\n handleViewChange,\n handleDateChange,\n handlePrev,\n handleNext,\n handleToday,\n handleDateClick,\n handleTimeSlotClick,\n handleEventClickInternal,\n handleCreateEvent,\n handleModalSave,\n handleModalDelete,\n handleDragEnd,\n expandedEvents // New export\n } = useCalendarLogic({\n events,\n view: controlledView,\n onViewChange: controlledOnViewChange,\n date: controlledDate,\n onDateChange: controlledOnDateChange,\n onEventClick,\n onEventDrop,\n onEventUpdate,\n onEventCreate,\n onEventDelete,\n readOnly,\n timezone\n });\n\n // DnD Sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n })\n );\n\n const gridSize = 15; // 15px snap (15 minutes if 60px/hr)\n const snapToGrid = createSnapModifier(gridSize);\n const modifiers: Modifier[] = [snapToGrid, restrictToWindowEdges];\n\n // Disable DnD if readOnly\n const dndSensors = readOnly ? [] : sensors;\n\n // Handle event resize\n const handleEventResize = (event: CalendarEvent, newEnd: Date) => {\n if (readOnly) return;\n\n // Call the external callback if provided\n if (onEventResize) {\n onEventResize(event, event.start, newEnd);\n }\n\n // Also update via onEventUpdate for internal state management\n if (onEventUpdate) {\n onEventUpdate({\n ...event,\n end: newEnd\n });\n }\n };\n \n const id = useId();\n\n // Mobile swipe gesture support\n const swipeRef = useViewSwipe<HTMLDivElement>(handlePrev, handleNext, true);\n\n // Build full translation object: base locale + custom overrides\n const t = getTranslations(language as LanguageCode, translations ?? {});\n\n const handleDragStart = (event: any) => {\n const { active } = event;\n const draggedEvent = expandedEvents.find(e => e.id === active.id);\n if (draggedEvent) {\n setActiveDragEvent(draggedEvent);\n }\n };\n\n const onDragEndWrapper = (event: any) => {\n setActiveDragEvent(null);\n handleDragEnd(event);\n };\n \n // Calculate height for week/day view drag overlay\n const getDragHeight = () => {\n if (!activeDragEvent) return undefined;\n \n if (view === 'resource') {\n return 80; // Approximate height for resource view events\n }\n\n if (view !== 'week' && view !== 'day') return undefined;\n const duration = differenceInMinutes(activeDragEvent.end, activeDragEvent.start);\n // 60px per hour\n const height = (duration / 60) * 60; // 60px height base\n // If DayView uses 80px, we should account for that. \n // Current implementation: WeekView = 60px, DayView = 80px.\n // But DayView uses 80px in DayView.tsx.\n // Let's assume 60px for now as default or pass a prop.\n // Or check view state.\n const hourHeight = view === 'day' ? 80 : 60;\n return (duration / 60) * hourHeight;\n };\n\n const getDragWidth = () => {\n if (view === 'month') return '100%';\n \n if (view === 'resource' && activeDragEvent) {\n const duration = differenceInMinutes(activeDragEvent.end, activeDragEvent.start);\n const width = (duration / 60) * 100; // 100px per hour in ResourceView\n return `${Math.max(width, 4)}px`;\n }\n\n // For Week/Day views, use a fixed width that looks like a column\n // Ideally we would measure the column width, but a fixed reasonable width works for the ghost\n return '150px'; \n };\n\n // Filter events based on active calendars\n const filteredEvents = useMemo(() => {\n if (!calendars) return expandedEvents;\n const activeCalendarIds = calendars.filter(c => c.active !== false).map(c => c.id);\n return expandedEvents.filter(e => {\n // If event has no calendarId, show it by default OR hide it? \n // Usually events belong to a calendar. If undefined, maybe show it.\n if (!e.calendarId) return true; \n return activeCalendarIds.includes(e.calendarId);\n });\n }, [expandedEvents, calendars]);\n\n // Count events only within the currently visible date range so the badge reflects\n // what the user actually sees (month / week / day / agenda next-30-days).\n const viewEventCount = useMemo(() => {\n let rangeStart: Date;\n let rangeEnd: Date;\n\n switch (view) {\n case 'month':\n rangeStart = startOfMonth(currentDate);\n rangeEnd = endOfMonth(currentDate);\n break;\n case 'week':\n rangeStart = startOfWeek(currentDate, { weekStartsOn: 1 });\n rangeEnd = endOfWeek(currentDate, { weekStartsOn: 1 });\n break;\n case 'day':\n case 'resource':\n rangeStart = startOfDay(currentDate);\n rangeEnd = endOfDay(currentDate);\n break;\n case 'agenda':\n rangeStart = startOfDay(currentDate);\n rangeEnd = addDays(rangeStart, 30);\n break;\n default:\n return filteredEvents.length;\n }\n\n return filteredEvents.filter(\n (e) => e.start >= rangeStart && e.start <= rangeEnd\n ).length;\n }, [filteredEvents, view, currentDate]);\n\n return (\n <>\n <DndContext \n id={id} \n sensors={dndSensors} \n onDragStart={handleDragStart}\n onDragEnd={onDragEndWrapper} \n modifiers={modifiers}\n >\n <div\n ref={schedulerRef}\n className={cn(\"flex flex-col h-full bg-background text-foreground relative\", className)}\n style={getThemeStyles(theme)}\n >\n {renderHeader ? (\n // Custom header: consumer gets full navigation/state props\n renderHeader({\n currentDate,\n view,\n onPrev: handlePrev,\n onNext: handleNext,\n onToday: handleToday,\n onViewChange: handleViewChange,\n translations: t,\n language: language as LanguageCode,\n onLanguageChange,\n isDarkMode,\n onThemeToggle,\n })\n ) : (\n <CalendarHeader\n currentDate={currentDate}\n onPrev={handlePrev}\n onNext={handleNext}\n onToday={handleToday}\n view={view}\n onViewChange={handleViewChange}\n onMenuClick={() => setIsSidebarOpen(!isSidebarOpen)}\n isDarkMode={isDarkMode}\n onThemeToggle={onThemeToggle}\n translations={t}\n hideViewSwitcher={hideViewSwitcher}\n language={language}\n onLanguageChange={onLanguageChange}\n locale={locale}\n onCreateEvent={handleCreateEvent}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); }}\n eventCount={viewEventCount}\n hideLanguageSwitcher={hideLanguageSwitcher}\n />\n )}\n \n <div className=\"flex flex-1 overflow-hidden\">\n {/* ── Desktop Sidebar (md+) — pushes the main content ── */}\n <motion.div\n className=\"hidden md:block overflow-hidden shrink-0\"\n initial={false}\n animate={{\n width: isSidebarOpen ? 256 : 0,\n opacity: isSidebarOpen ? 1 : 0,\n }}\n transition={{\n duration: 0.3,\n ease: [0.4, 0, 0.2, 1],\n }}\n >\n <Sidebar\n currentDate={currentDate}\n onDateChange={handleDateChange}\n onViewChange={handleViewChange}\n onEventCreate={handleCreateEvent}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n className=\"w-full h-full\"\n readOnly={readOnly}\n calendars={calendars}\n onCalendarToggle={onCalendarToggle}\n translations={t}\n renderMiniCalendar={renderMiniCalendar}\n locale={locale}\n sidebarMenus={sidebarMenus}\n activeCustomMenu={activeCustomMenu}\n onCustomMenuChange={(id) => { setActiveCustomMenu(id); setActiveCustomViewId(null); }}\n reverseTime={reverseTime}\n onReverseTimeChange={setReverseTime}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); }}\n />\n </motion.div>\n\n {/* ── Mobile Sidebar Overlay (below md) — fixed drawer + backdrop ── */}\n <AnimatePresence>\n {isSidebarOpen && (\n <motion.div\n key=\"mobile-sidebar-overlay\"\n className=\"md:hidden fixed inset-0 z-[100] flex\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {/* Sidebar drawer — slides in from left */}\n <motion.div\n className=\"w-[280px] h-full bg-background shadow-2xl overflow-hidden\"\n initial={{ x: -280 }}\n animate={{ x: 0 }}\n exit={{ x: -280 }}\n transition={{ duration: 0.25, ease: [0.4, 0, 0.2, 1] }}\n >\n <Sidebar\n currentDate={currentDate}\n onDateChange={handleDateChange}\n onViewChange={handleViewChange}\n onEventCreate={() => { setIsSidebarOpen(false); handleCreateEvent(); }}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n className=\"w-full h-full\"\n readOnly={readOnly}\n calendars={calendars}\n onCalendarToggle={onCalendarToggle}\n translations={t}\n renderMiniCalendar={renderMiniCalendar}\n locale={locale}\n sidebarMenus={sidebarMenus}\n activeCustomMenu={activeCustomMenu}\n onCustomMenuChange={(id) => { setActiveCustomMenu(id); setActiveCustomViewId(null); setIsSidebarOpen(false); }}\n reverseTime={reverseTime}\n onReverseTimeChange={setReverseTime}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); setIsSidebarOpen(false); }}\n />\n </motion.div>\n {/* Backdrop — tap to close */}\n <motion.div\n className=\"flex-1 bg-black/50 backdrop-blur-sm\"\n onClick={() => setIsSidebarOpen(false)}\n />\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* min-h-0 breaks the flex implicit min-height so inner views can scroll */}\n <div className=\"flex-1 flex flex-col overflow-hidden relative min-h-0\">\n {/* ── Custom Sidebar Menu Content ── */}\n {activeCustomMenu !== null && sidebarMenus && (\n <div className=\"flex-1 overflow-y-auto p-4 md:p-6\">\n {sidebarMenus.find((m) => m.id === activeCustomMenu)?.component}\n </div>\n )}\n\n {/* ── Custom View Content (from header switcher or sidebar İşlemler) ── */}\n {activeCustomViewId !== null && activeCustomMenu === null && customViews && (\n <div className=\"flex-1 overflow-y-auto p-4 md:p-6\">\n {customViews.find((v) => v.id === activeCustomViewId)?.component}\n </div>\n )}\n\n {/* ── Calendar Views (hidden when a custom menu or custom view is active) ── */}\n {activeCustomMenu === null && activeCustomViewId === null && (isLoading ? (\n <div className=\"flex-1 overflow-auto p-0 md:p-4 min-h-0\">\n <div className=\"h-full min-w-full\">\n {view === 'month' && <MonthViewSkeleton />}\n {view === 'week' && <WeekViewSkeleton />}\n {view === 'day' && <DayViewSkeleton />}\n {view === 'agenda' && <AgendaViewSkeleton />}\n {view === 'resource' && <WeekViewSkeleton />}\n </div>\n </div>\n ) : (\n /* overflow-hidden here: each view owns its own scroll container */\n <div ref={swipeRef} className=\"flex-1 overflow-hidden p-0 md:p-4 touch-pan-y min-h-0\">\n {/* Use flex column so the child view fills the full padded area */}\n <div className=\"flex flex-col h-full min-w-full min-h-0\">\n <AnimatePresence mode=\"wait\" initial={false}>\n <motion.div\n key={`${view}-${currentDate.toISOString()}-${timezone || 'local'}`}\n initial={{ opacity: 0, y: 8 }}\n animate={{\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.2,\n ease: [0.25, 0.1, 0.25, 1],\n }\n }}\n exit={{\n opacity: 0,\n y: -8,\n transition: {\n duration: 0.15,\n ease: [0.25, 0.1, 0.25, 1],\n }\n }}\n className=\"flex-1 min-h-0 flex flex-col\"\n style={{ height: '100%' }}\n >\n {view === 'month' && (\n <MonthView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onDateClick={handleDateClick}\n timezone={timezone}\n locale={locale}\n />\n )}\n {view === 'week' && (\n <WeekView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={handleTimeSlotClick}\n onEventResize={handleEventResize}\n timezone={timezone}\n locale={locale}\n readonly={readOnly}\n language={language}\n initialScrollHour={initialScrollHour}\n reverseTime={reverseTime}\n />\n )}\n {view === 'day' && (\n <DayView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={handleTimeSlotClick}\n onEventResize={handleEventResize}\n timezone={timezone}\n locale={locale}\n readonly={readOnly}\n language={language}\n initialScrollHour={initialScrollHour}\n reverseTime={reverseTime}\n />\n )}\n {view === 'agenda' && (\n <AgendaView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onCreateEvent={handleCreateEvent}\n translations={t}\n language={language}\n renderEmptyState={renderEmptyState}\n />\n )}\n {view === 'resource' && resources && (\n <ResourceView\n currentDate={currentDate}\n events={filteredEvents}\n resources={resources}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={(date) => {\n if (readOnly) return;\n handleTimeSlotClick(date);\n }}\n locale={locale}\n language={language}\n />\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n </div>\n ))}\n\n </div>\n </div>\n\n \n {renderEventForm ? (\n renderEventForm({\n isOpen: isModalOpen,\n onClose: () => setIsModalOpen(false),\n event: selectedEvent,\n initialDate: modalInitialDate,\n onSave: handleModalSave,\n onDelete: handleModalDelete\n })\n ) : (\n <EventModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n event={selectedEvent}\n initialDate={modalInitialDate}\n onSave={handleModalSave}\n onDelete={handleModalDelete}\n calendars={calendars}\n eventTypes={eventTypes}\n translations={t}\n language={language}\n />\n )}\n\n {/* Context Menu */}\n <EventContextMenu\n event={contextMenuEvent}\n position={contextMenuPosition}\n onClose={closeContextMenu}\n onEdit={(event) => {\n handleEventClickInternal(event);\n closeContextMenu();\n }}\n onDelete={(eventId) => {\n onEventDelete?.(eventId);\n closeContextMenu();\n }}\n onDuplicate={(event) => {\n // Create a duplicate with a new ID and slightly shifted time\n const duplicatedEvent: Partial<CalendarEvent> = {\n ...event,\n id: `${event.id}-copy-${Date.now()}`,\n title: `${event.title} ${t.copy}`,\n start: new Date(event.start.getTime() + 24 * 60 * 60 * 1000), // +1 day\n end: new Date(event.end.getTime() + 24 * 60 * 60 * 1000),\n };\n onEventCreate?.(duplicatedEvent);\n closeContextMenu();\n }}\n translations={{\n edit: t.edit,\n delete: t.delete,\n duplicate: t.duplicate,\n }}\n />\n\n <DragOverlay dropAnimation={null}>\n {activeDragEvent ? (\n <div\n className={cn(\n \"rounded-lg shadow-2xl border-2 overflow-hidden cursor-grabbing transition-transform\",\n \"backdrop-blur-sm\",\n !activeDragEvent.color && \"bg-primary/90 border-primary/60 text-primary-foreground\",\n )}\n style={{\n backgroundColor: activeDragEvent.color ? `${activeDragEvent.color}e0` : undefined,\n borderColor: activeDragEvent.color ? `${activeDragEvent.color}80` : undefined,\n color: activeDragEvent.color ? '#fff' : undefined,\n width: getDragWidth(),\n height: getDragHeight() ? `${getDragHeight()}px` : undefined,\n boxShadow: `0 20px 40px -15px ${activeDragEvent.color || 'var(--primary)'}40, 0 10px 20px -10px rgba(0,0,0,0.2)`,\n transform: 'rotate(-2deg) scale(1.02)',\n }}\n >\n <div className=\"p-2.5 h-full flex flex-col\">\n {/* Event color accent bar */}\n <div\n className=\"absolute left-0 top-0 bottom-0 w-1 rounded-l-lg\"\n style={{ backgroundColor: activeDragEvent.color || 'var(--primary)' }}\n />\n\n {/* Content */}\n <div className=\"pl-2\">\n <div className=\"font-semibold truncate text-sm\">{activeDragEvent.title}</div>\n {(view === 'week' || view === 'day') && getDragHeight() && getDragHeight()! > 40 && (\n <div className=\"text-xs opacity-80 mt-0.5 flex items-center gap-1\">\n <svg className=\"w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <path d=\"M12 6v6l4 2\"/>\n </svg>\n {format(activeDragEvent.start, getTimeFormatFull(language))} - {format(activeDragEvent.end, getTimeFormatFull(language))}\n </div>\n )}\n </div>\n\n {/* Drag indicator */}\n <div className=\"absolute bottom-1.5 right-1.5 opacity-60\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"9\" cy=\"5\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"5\" r=\"1.5\"/>\n <circle cx=\"9\" cy=\"12\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"12\" r=\"1.5\"/>\n <circle cx=\"9\" cy=\"19\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"19\" r=\"1.5\"/>\n </svg>\n </div>\n </div>\n </div>\n ) : null}\n </DragOverlay>\n\n </div>\n </DndContext>\n\n {/* Mobile FAB — portaled + inline styles so it stays visible outside overflow-hidden parents */}\n {isMounted && isMobile && !readOnly && createPortal(\n <div\n style={{\n position: 'fixed',\n bottom: 'max(1.5rem, env(safe-area-inset-bottom, 0px))',\n right: 'max(1.5rem, env(safe-area-inset-right, 0px))',\n zIndex: 9999,\n pointerEvents: 'none',\n ...fabCssVars,\n }}\n >\n <button\n type=\"button\"\n aria-label={t.createEvent ?? t.create ?? 'Create event'}\n onClick={handleCreateEvent}\n style={{\n pointerEvents: 'auto',\n width: 48,\n height: 48,\n borderRadius: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'hsl(var(--primary, 221.2 83.2% 53.3%))',\n color: 'hsl(var(--primary-foreground, 210 40% 98%))',\n border: 'none',\n cursor: 'pointer',\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.25)',\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>\n </svg>\n </button>\n </div>,\n document.body\n )}\n </>\n );\n};\n\n/** Primary export — backward-compatible alias for v1 `@calendarkit/react` consumers. */\nexport const ProScheduler = Scheduler;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/components/ui/button.tsx","../src/locales/index.ts","../src/components/CalendarHeader.tsx","../src/lib/date.ts","../src/components/MiniCalendar.tsx","../src/components/Sidebar.tsx","../src/components/dnd/DraggableEvent.tsx","../src/components/dnd/DroppableCell.tsx","../src/views/MonthView.tsx","../src/components/dnd/ResizableEvent.tsx","../src/components/EventCardBadge.tsx","../src/lib/eventBadges.tsx","../src/views/WeekView.tsx","../src/views/DayView.tsx","../src/components/EmptyState.tsx","../src/views/AgendaView.tsx","../src/views/ResourceView.tsx","../src/components/ui/Modal.tsx","../src/components/EventModal.tsx","../src/components/Skeleton.tsx","../src/components/ContextMenu.tsx","../src/lib/theme.ts","../src/hooks/useCalendarLogic.ts","../src/hooks/useSwipeGesture.ts","../src/index.tsx"],"names":["React","dnsTr","dnsEnUS","dnsFr","dnsDe","dnsEs","dnsIt","dnsPt","dnsAr","dnsZhCN","dnsJa","dnsKo","dnsRu","dnsNl","dnsPl","dnsSv","format","subMonths","addMonths","ChevronLeft","ChevronRight","isSameDay","isSameMonth","isToday","useState","useEffect","ChevronDown","Globe","startOfWeek","endOfWeek","eachDayOfInterval","useCallback","toZonedTime","useRef","differenceInMinutes","Plus","useMemo","addDays","Users","startOfDay","X","Calendar","Clock","motion","MapPin","Bell","Paperclip","_","Copy","Trash2","AnimatePresence","subDays","subWeeks","addWeeks","startOfMonth","endOfMonth","id","createPortal"],"mappings":";;;;;;;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACDA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,wRAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,WAAA,EACE,oEAAA;AAAA,QACF,OAAA,EACE,gFAAA;AAAA,QACF,SAAA,EACE,8DAAA;AAAA,QACF,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,gBAAA;AAAA,QACT,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAQA,IAAM,MAAA,GAAeA,OAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAChE,IAAA,MAAM,IAAA,GAAO,QAAA;AACb,IAAA,uBACEA,OAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACpCd,IAAM,aAAA,GAAwG;AAAA,EACnH,IAAI,EAAE,MAAA,EAAQ,gBAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,WAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,eAAa,OAAA,EAAS,QAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,WAAa,OAAA,EAAS,QAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,cAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,YAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,gBAAa,OAAA,EAAS,YAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,EAAA,EAAI,EAAE,MAAA,EAAQ,4CAAA,EAAa,SAAS,QAAA,EAAc,IAAA,EAAM,oBAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,EAC1E,IAAI,EAAE,MAAA,EAAQ,gBAAY,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC9D,IAAI,EAAE,MAAA,EAAQ,sBAAW,OAAA,EAAS,UAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC7D,IAAI,EAAE,MAAA,EAAQ,sBAAW,OAAA,EAAS,QAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC7D,IAAI,EAAE,MAAA,EAAQ,8CAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,cAAa,OAAA,EAAS,OAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,UAAa,OAAA,EAAS,QAAA,EAAc,MAAM,oBAAA,EAAO;AAAA,EAC/D,IAAI,EAAE,MAAA,EAAQ,WAAa,OAAA,EAAS,SAAA,EAAc,MAAM,oBAAA;AAC1D;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,UAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,uBAAA;AAAA,EACb,SAAA,EAAW,2BAAA;AAAA,EACX,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,iCAAA;AAAA,EACb,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,YAAA;AAAA,EACR,IAAA,EAAM,YAAA;AAAA,EACN,SAAA,EAAW,gBAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa,uBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,WAAA,EAAa,MAAA;AAAA,EACb,KAAA,EAAO,uBAAA;AAAA,EACP,QAAA,EAAU,uBAAA;AAAA,EACV,KAAA,EAAO,wBAAA;AAAA,EACP,GAAA,EAAK,YAAA;AAAA,EACL,MAAA,EAAQ,eAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,yBAAA,EAA2B,kBAAA;AAAA,EAC3B,cAAA,EAAgB,mCAAA;AAAA,EAChB,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,YAAA;AAAA,EACb,gBAAA,EAAkB,+FAAA;AAAA,EAClB,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA,EAAU,qBAAA;AAAA,EACV,aAAA,EAAe,qBAAA;AAAA,EACf,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,eAAA;AAAA,EACR,OAAA,EAAS,YAAA;AAAA,EACT,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAW,yBAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,sBAAA;AAAA,EACP,SAAA,EAAW,oBAAA;AAAA,EACX,KAAA,EAAO,iBAAA;AAAA,EACP,gBAAA,EAAkB,iBAAA;AAAA,EAClB,MAAA,EAAQ,SAAA;AAAA,EACR,cAAA,EAAgB,eAAA;AAAA,EAChB,UAAA,EAAY,eAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA,EACN,mBAAA,EAAqB,uBAAA;AAAA,EACrB,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,6BAAA;AAAA,EACR,SAAA,EAAW,+BAAA;AAAA,EACX,KAAA,EAAO,0BAAA;AAAA,EACP,UAAA,EAAY,0BAAA;AAAA,EACZ,WAAA,EAAa,0BAAA;AAAA,EACb,UAAA,EAAY,kCAAA;AAAA,EACZ,WAAA,EAAa,kCAAA;AAAA,EACb,WAAA,EAAa,0BAAA;AAAA,EACb,cAAA,EAAgB,wCAAA;AAAA,EAChB,eAAA,EAAiB,qBAAA;AAAA,EACjB,aAAA,EAAe,gBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW,+BAAA;AAAA,EACX,WAAA,EAAa,iDAAA;AAAA,EACb,WAAA,EAAa,OAAA;AAAA,EACb,cAAA,EAAgB,mBAAA;AAAA,EAChB,YAAA,EAAc,kBAAA;AAAA,EACd,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,YAAA,EAAc,kBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,QAAA,EAAU,YAAA;AAAA,EACV,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa,UAAA;AAAA,EACb,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY,oBAAA;AAAA,EACZ,gBAAA,EAAkB,iBAAA;AAAA,EAClB,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,kBAAA;AAAA,EACV,OAAA,EAAS,4BAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,YAAA;AAAA,EACX,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,cAAA;AAAA,EACb,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa,cAAA;AAAA,EACb,aAAA,EAAe,cAAA;AAAA,EACf,WAAA,EAAa,KAAA;AAAA,EACb,KAAA,EAAO,WAAA;AAAA,EACP,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,yBAAA,EAA2B,aAAA;AAAA,EAC3B,cAAA,EAAgB,6BAAA;AAAA,EAChB,QAAA,EAAU,eAAA;AAAA,EACV,WAAA,EAAa,cAAA;AAAA,EACb,gBAAA,EAAkB,oEAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,iBAAA;AAAA,EACV,aAAA,EAAe,iBAAA;AAAA,EACf,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,gBAAA,EAAkB,mBAAA;AAAA,EAClB,MAAA,EAAQ,SAAA;AAAA,EACR,cAAA,EAAgB,iBAAA;AAAA,EAChB,UAAA,EAAY,aAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,mBAAA,EAAqB,sBAAA;AAAA,EACrB,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,gBAAA;AAAA,EACb,cAAA,EAAgB,4BAAA;AAAA,EAChB,eAAA,EAAiB,kBAAA;AAAA,EACjB,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,sBAAA;AAAA,EACb,WAAA,EAAa,aAAA;AAAA,EACb,cAAA,EAAgB,kBAAA;AAAA,EAChB,YAAA,EAAc,kBAAA;AAAA,EACd,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,QAAA,EAAU,WAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY,YAAA;AAAA,EACZ,gBAAA,EAAkB,gBAAA;AAAA,EAClB,MAAA,EAAQ,kBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,OAAA,EAAS,YAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,MAAA,EAAQ,UAAA;AAAA,EACR,WAAA,EAAa,6BAAA;AAAA,EACb,SAAA,EAAW,4BAAA;AAAA,EACX,QAAA,EAAU,wBAAA;AAAA,EACV,WAAA,EAAa,+BAAA;AAAA,EACb,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM,aAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,WAAA,EAAa,gBAAA;AAAA,EACb,aAAA,EAAe,gCAAA;AAAA,EACf,WAAA,EAAa,SAAA;AAAA,EACb,KAAA,EAAO,kBAAA;AAAA,EACP,QAAA,EAAU,kBAAA;AAAA,EACV,KAAA,EAAO,UAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,qBAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,yBAAA,EAA2B,aAAA;AAAA,EAC3B,cAAA,EAAgB,yCAAA;AAAA,EAChB,QAAA,EAAU,oBAAA;AAAA,EACV,WAAA,EAAa,iBAAA;AAAA,EACb,gBAAA,EAAkB,qFAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,eAAA;AAAA,EACR,QAAA,EAAU,wBAAA;AAAA,EACV,aAAA,EAAe,wBAAA;AAAA,EACf,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,uBAAA;AAAA,EACX,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,UAAA;AAAA,EACP,SAAA,EAAW,yBAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,gBAAA,EAAkB,sBAAA;AAAA,EAClB,MAAA,EAAQ,cAAA;AAAA,EACR,cAAA,EAAgB,+BAAA;AAAA,EAChB,UAAA,EAAY,yBAAA;AAAA,EACZ,QAAA,EAAU,YAAA;AAAA,EACV,SAAA,EAAW,aAAA;AAAA,EACX,KAAA,EAAO,iBAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA,EACN,mBAAA,EAAqB,yBAAA;AAAA,EACrB,GAAA,EAAK,SAAA;AAAA,EACL,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW,wBAAA;AAAA,EACX,KAAA,EAAO,WAAA;AAAA,EACP,UAAA,EAAY,WAAA;AAAA,EACZ,WAAA,EAAa,YAAA;AAAA,EACb,UAAA,EAAY,qBAAA;AAAA,EACZ,WAAA,EAAa,uBAAA;AAAA,EACb,WAAA,EAAa,iBAAA;AAAA,EACb,cAAA,EAAgB,6CAAA;AAAA,EAChB,eAAA,EAAiB,sBAAA;AAAA,EACjB,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW,SAAA;AAAA,EACX,WAAA,EAAa,oCAAA;AAAA,EACb,WAAA,EAAa,mBAAA;AAAA,EACb,cAAA,EAAgB,mCAAA;AAAA,EAChB,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,iBAAA;AAAA,EACZ,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,gBAAA;AAAA,EACV,SAAA,EAAW,cAAA;AAAA,EACX,UAAA,EAAY,eAAA;AAAA,EACZ,gBAAA,EAAkB,oBAAA;AAAA,EAClB,MAAA,EAAQ,oCAAA;AAAA,EACR,QAAA,EAAU,gBAAA;AAAA,EACV,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,MAAA,EAAQ,WAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,SAAA,EAAW,mBAAA;AAAA,EACX,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,yBAAA;AAAA,EACb,MAAA,EAAQ,YAAA;AAAA,EACR,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM,YAAA;AAAA,EACN,SAAA,EAAW,aAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,WAAA,EAAa,kBAAA;AAAA,EACb,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,KAAA,EAAO,qBAAA;AAAA,EACP,QAAA,EAAU,qBAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,yBAAA,EAA2B,cAAA;AAAA,EAC3B,cAAA,EAAgB,4CAAA;AAAA,EAChB,QAAA,EAAU,kBAAA;AAAA,EACV,WAAA,EAAa,mBAAA;AAAA,EACb,gBAAA,EAAkB,8FAAA;AAAA,EAClB,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,QAAA,EAAU,uBAAA;AAAA,EACV,aAAA,EAAe,uBAAA;AAAA,EACf,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAW,oBAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW,sBAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,gBAAA,EAAkB,qBAAA;AAAA,EAClB,MAAA,EAAQ,UAAA;AAAA,EACR,cAAA,EAAgB,uBAAA;AAAA,EAChB,UAAA,EAAY,kBAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,mBAAA,EAAqB,YAAA;AAAA,EACrB,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,UAAA;AAAA,EACR,SAAA,EAAW,wBAAA;AAAA,EACX,KAAA,EAAO,MAAA;AAAA,EACP,UAAA,EAAY,MAAA;AAAA,EACZ,WAAA,EAAa,UAAA;AAAA,EACb,UAAA,EAAY,qBAAA;AAAA,EACZ,WAAA,EAAa,yBAAA;AAAA,EACb,WAAA,EAAa,iBAAA;AAAA,EACb,cAAA,EAAgB,uCAAA;AAAA,EAChB,eAAA,EAAiB,wBAAA;AAAA,EACjB,aAAA,EAAe,qBAAA;AAAA,EACf,WAAA,EAAa,mBAAA;AAAA,EACb,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,2BAAA;AAAA,EACb,WAAA,EAAa,YAAA;AAAA,EACb,cAAA,EAAgB,2BAAA;AAAA,EAChB,YAAA,EAAc,kBAAA;AAAA,EACd,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA,EAAgB,kBAAA;AAAA,EAChB,YAAA,EAAc,cAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,UAAA,EAAY,UAAA;AAAA,EACZ,gBAAA,EAAkB,cAAA;AAAA,EAClB,MAAA,EAAQ,mBAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,eAAA;AAAA,EACX,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,iBAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,SAAA,EAAW,UAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,gBAAA;AAAA,EACf,WAAA,EAAa,SAAA;AAAA,EACb,KAAA,EAAO,mBAAA;AAAA,EACP,QAAA,EAAU,mBAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,gBAAA;AAAA,EACR,WAAA,EAAa,gBAAA;AAAA,EACb,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,cAAA,EAAgB,mCAAA;AAAA,EAChB,QAAA,EAAU,uBAAA;AAAA,EACV,WAAA,EAAa,sBAAA;AAAA,EACb,gBAAA,EAAkB,sFAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,SAAA,EAAW,aAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW,sBAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,gBAAA,EAAkB,2BAAA;AAAA,EAClB,MAAA,EAAQ,UAAA;AAAA,EACR,cAAA,EAAgB,wBAAA;AAAA,EAChB,UAAA,EAAY,kBAAA;AAAA,EACZ,QAAA,EAAU,YAAA;AAAA,EACV,SAAA,EAAW,aAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,mBAAA,EAAqB,kBAAA;AAAA,EACrB,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,WAAA;AAAA,EACR,SAAA,EAAW,mBAAA;AAAA,EACX,KAAA,EAAO,UAAA;AAAA,EACP,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,mBAAA;AAAA,EACZ,WAAA,EAAa,qBAAA;AAAA,EACb,WAAA,EAAa,sBAAA;AAAA,EACb,cAAA,EAAgB,mCAAA;AAAA,EAChB,eAAA,EAAiB,iBAAA;AAAA,EACjB,aAAA,EAAe,uBAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAa,8BAAA;AAAA,EACb,WAAA,EAAa,UAAA;AAAA,EACb,cAAA,EAAgB,sBAAA;AAAA,EAChB,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,cAAA;AAAA,EACf,cAAA,EAAgB,eAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY,aAAA;AAAA,EACZ,gBAAA,EAAkB,yBAAA;AAAA,EAClB,MAAA,EAAQ,mBAAA;AAAA,EACR,QAAA,EAAU,iBAAA;AAAA,EACV,OAAA,EAAS,iBAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,WAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,iBAAA;AAAA,EACX,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,iBAAA;AAAA,EACb,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,aAAA;AAAA,EACf,WAAA,EAAa,UAAA;AAAA,EACb,KAAA,EAAO,iBAAA;AAAA,EACP,QAAA,EAAU,iBAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,iBAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,yBAAA,EAA2B,aAAA;AAAA,EAC3B,cAAA,EAAgB,gCAAA;AAAA,EAChB,QAAA,EAAU,qBAAA;AAAA,EACV,WAAA,EAAa,gBAAA;AAAA,EACb,gBAAA,EAAkB,wEAAA;AAAA,EAClB,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,eAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,SAAA,EAAW,kBAAA;AAAA,EACX,KAAA,EAAO,KAAA;AAAA,EACP,gBAAA,EAAkB,iBAAA;AAAA,EAClB,MAAA,EAAQ,WAAA;AAAA,EACR,cAAA,EAAgB,sBAAA;AAAA,EAChB,UAAA,EAAY,gBAAA;AAAA,EACZ,QAAA,EAAU,YAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,aAAA;AAAA,EACN,mBAAA,EAAqB,wBAAA;AAAA,EACrB,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,iBAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,iBAAA;AAAA,EACZ,WAAA,EAAa,iBAAA;AAAA,EACb,WAAA,EAAa,gBAAA;AAAA,EACb,cAAA,EAAgB,gCAAA;AAAA,EAChB,eAAA,EAAiB,mBAAA;AAAA,EACjB,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,YAAA;AAAA,EACb,SAAA,EAAW,YAAA;AAAA,EACX,WAAA,EAAa,8BAAA;AAAA,EACb,WAAA,EAAa,UAAA;AAAA,EACb,cAAA,EAAgB,qBAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,aAAA;AAAA,EACf,cAAA,EAAgB,aAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,QAAA,EAAU,aAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY,YAAA;AAAA,EACZ,gBAAA,EAAkB,qBAAA;AAAA,EAClB,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,OAAA,EAAS,gBAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,eAAA;AAAA,EACX,QAAA,EAAU,aAAA;AAAA,EACV,WAAA,EAAa,yBAAA;AAAA,EACb,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,SAAA,EAAW,UAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,WAAA;AAAA,EACb,KAAA,EAAO,qBAAA;AAAA,EACP,QAAA,EAAU,qBAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,iBAAA;AAAA,EACb,yBAAA,EAA2B,iBAAA;AAAA,EAC3B,cAAA,EAAgB,uCAAA;AAAA,EAChB,QAAA,EAAU,qBAAA;AAAA,EACV,WAAA,EAAa,iBAAA;AAAA,EACb,gBAAA,EAAkB,+EAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,kBAAA;AAAA,EACV,aAAA,EAAe,kBAAA;AAAA,EACf,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,SAAA,EAAW,aAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,SAAA,EAAW,wBAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,gBAAA,EAAkB,wBAAA;AAAA,EAClB,MAAA,EAAQ,SAAA;AAAA,EACR,cAAA,EAAgB,0BAAA;AAAA,EAChB,UAAA,EAAY,iBAAA;AAAA,EACZ,QAAA,EAAU,eAAA;AAAA,EACV,SAAA,EAAW,gBAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,mBAAA,EAAqB,wBAAA;AAAA,EACrB,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW,sBAAA;AAAA,EACX,KAAA,EAAO,WAAA;AAAA,EACP,UAAA,EAAY,WAAA;AAAA,EACZ,WAAA,EAAa,YAAA;AAAA,EACb,UAAA,EAAY,sBAAA;AAAA,EACZ,WAAA,EAAa,wBAAA;AAAA,EACb,WAAA,EAAa,sBAAA;AAAA,EACb,cAAA,EAAgB,uCAAA;AAAA,EAChB,eAAA,EAAiB,kBAAA;AAAA,EACjB,aAAA,EAAe,eAAA;AAAA,EACf,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,6BAAA;AAAA,EACb,WAAA,EAAa,QAAA;AAAA,EACb,cAAA,EAAgB,yBAAA;AAAA,EAChB,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,cAAA;AAAA,EACf,cAAA,EAAgB,eAAA;AAAA,EAChB,YAAA,EAAc,aAAA;AAAA,EACd,aAAA,EAAe,cAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,iBAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY,iBAAA;AAAA,EACZ,gBAAA,EAAkB,wBAAA;AAAA,EAClB,MAAA,EAAQ,mBAAA;AAAA,EACR,QAAA,EAAU,gBAAA;AAAA,EACV,OAAA,EAAS,iBAAA;AAAA,EACT,IAAA,EAAM,YAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,gCAAA;AAAA,EACP,KAAA,EAAO,oBAAA;AAAA,EACP,IAAA,EAAM,gCAAA;AAAA,EACN,GAAA,EAAK,oBAAA;AAAA,EACL,MAAA,EAAQ,qEAAA;AAAA,EACR,QAAA,EAAU,4CAAA;AAAA,EACV,MAAA,EAAQ,gCAAA;AAAA,EACR,WAAA,EAAa,mDAAA;AAAA,EACb,SAAA,EAAW,+DAAA;AAAA,EACX,QAAA,EAAU,6CAAA;AAAA,EACV,WAAA,EAAa,2EAAA;AAAA,EACb,MAAA,EAAQ,oBAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,MAAA,EAAQ,gCAAA;AAAA,EACR,IAAA,EAAM,gCAAA;AAAA,EACN,SAAA,EAAW,gCAAA;AAAA,EACX,KAAA,EAAO,gCAAA;AAAA,EACP,WAAA,EAAa,oGAAA;AAAA,EACb,aAAA,EAAe,mDAAA;AAAA,EACf,WAAA,EAAa,gCAAA;AAAA,EACb,KAAA,EAAO,+DAAA;AAAA,EACP,QAAA,EAAU,+DAAA;AAAA,EACV,KAAA,EAAO,4CAAA;AAAA,EACP,GAAA,EAAK,4CAAA;AAAA,EACL,MAAA,EAAQ,yDAAA;AAAA,EACR,WAAA,EAAa,gCAAA;AAAA,EACb,yBAAA,EAA2B,gCAAA;AAAA,EAC3B,cAAA,EAAgB,8GAAA;AAAA,EAChB,QAAA,EAAU,2EAAA;AAAA,EACV,WAAA,EAAa,yDAAA;AAAA,EACb,gBAAA,EAAkB,+RAAA;AAAA,EAClB,KAAA,EAAO,4CAAA;AAAA,EACP,MAAA,EAAQ,gCAAA;AAAA,EACR,QAAA,EAAU,6CAAA;AAAA,EACV,aAAA,EAAe,6CAAA;AAAA,EACf,KAAA,EAAO,0BAAA;AAAA,EACP,MAAA,EAAQ,sCAAA;AAAA,EACR,OAAA,EAAS,0BAAA;AAAA,EACT,MAAA,EAAQ,0BAAA;AAAA,EACR,SAAA,EAAW,6CAAA;AAAA,EACX,KAAA,EAAO,0BAAA;AAAA,EACP,KAAA,EAAO,oBAAA;AAAA,EACP,SAAA,EAAW,2EAAA;AAAA,EACX,KAAA,EAAO,gCAAA;AAAA,EACP,gBAAA,EAAkB,2EAAA;AAAA,EAClB,MAAA,EAAQ,yDAAA;AAAA,EACR,cAAA,EAAgB,qEAAA;AAAA,EAChB,UAAA,EAAY,yDAAA;AAAA,EACZ,QAAA,EAAU,4CAAA;AAAA,EACV,SAAA,EAAW,kDAAA;AAAA,EACX,KAAA,EAAO,oBAAA;AAAA,EACP,IAAA,EAAM,0BAAA;AAAA,EACN,mBAAA,EAAqB,2EAAA;AAAA,EACrB,GAAA,EAAK,0BAAA;AAAA,EACL,MAAA,EAAQ,sCAAA;AAAA,EACR,SAAA,EAAW,yDAAA;AAAA,EACX,KAAA,EAAO,oBAAA;AAAA,EACP,UAAA,EAAY,oBAAA;AAAA,EACZ,WAAA,EAAa,0BAAA;AAAA,EACb,UAAA,EAAY,6CAAA;AAAA,EACZ,WAAA,EAAa,+DAAA;AAAA,EACb,WAAA,EAAa,mDAAA;AAAA,EACb,cAAA,EAAgB,kIAAA;AAAA,EAChB,eAAA,EAAiB,iFAAA;AAAA,EACjB,aAAA,EAAe,yDAAA;AAAA,EACf,WAAA,EAAa,iFAAA;AAAA,EACb,SAAA,EAAW,wDAAA;AAAA,EACX,WAAA,EAAa,iHAAA;AAAA,EACb,WAAA,EAAa,kDAAA;AAAA,EACb,cAAA,EAAgB,sEAAA;AAAA,EAChB,YAAA,EAAc,qDAAA;AAAA,EACd,aAAA,EAAe,sDAAA;AAAA,EACf,aAAA,EAAe,sDAAA;AAAA,EACf,aAAA,EAAe,sDAAA;AAAA,EACf,aAAA,EAAe,6CAAA;AAAA,EACf,cAAA,EAAgB,yDAAA;AAAA,EAChB,YAAA,EAAc,uCAAA;AAAA,EACd,aAAA,EAAe,mDAAA;AAAA,EACf,aAAA,EAAe,mDAAA;AAAA,EACf,QAAA,EAAU,0BAAA;AAAA,EACV,UAAA,EAAY,oBAAA;AAAA,EACZ,WAAA,EAAa,gCAAA;AAAA,EACb,QAAA,EAAU,uFAAA;AAAA,EACV,SAAA,EAAW,iFAAA;AAAA,EACX,UAAA,EAAY,kDAAA;AAAA,EACZ,gBAAA,EAAkB,+DAAA;AAAA,EAClB,MAAA,EAAQ,+EAAA;AAAA,EACR,QAAA,EAAU,qEAAA;AAAA,EACV,OAAA,EAAS,2DAAA;AAAA,EACT,IAAA,EAAM,4BAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,EAAU,cAAA;AAAA,EACV,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,0BAAA;AAAA,EACb,SAAA,EAAW,0BAAA;AAAA,EACX,QAAA,EAAU,oBAAA;AAAA,EACV,WAAA,EAAa,0BAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,SAAA,EAAW,cAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,WAAA,EAAa,0BAAA;AAAA,EACb,aAAA,EAAe,0BAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,KAAA,EAAO,0BAAA;AAAA,EACP,QAAA,EAAU,0BAAA;AAAA,EACV,KAAA,EAAO,cAAA;AAAA,EACP,GAAA,EAAK,cAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,yBAAA,EAA2B,cAAA;AAAA,EAC3B,cAAA,EAAgB,+CAAA;AAAA,EAChB,QAAA,EAAU,0BAAA;AAAA,EACV,WAAA,EAAa,0BAAA;AAAA,EACb,gBAAA,EAAkB,+IAAA;AAAA,EAClB,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,EAAU,oBAAA;AAAA,EACV,aAAA,EAAe,oBAAA;AAAA,EACf,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW,cAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,0BAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,gBAAA,EAAkB,cAAA;AAAA,EAClB,MAAA,EAAQ,oBAAA;AAAA,EACR,cAAA,EAAgB,0BAAA;AAAA,EAChB,UAAA,EAAY,0BAAA;AAAA,EACZ,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,cAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,IAAA,EAAM,cAAA;AAAA,EACN,mBAAA,EAAqB,0BAAA;AAAA,EACrB,GAAA,EAAK,cAAA;AAAA,EACL,MAAA,EAAQ,oBAAA;AAAA,EACR,SAAA,EAAW,gCAAA;AAAA,EACX,KAAA,EAAO,0BAAA;AAAA,EACP,UAAA,EAAY,0BAAA;AAAA,EACZ,WAAA,EAAa,0BAAA;AAAA,EACb,UAAA,EAAY,4CAAA;AAAA,EACZ,WAAA,EAAa,4CAAA;AAAA,EACb,WAAA,EAAa,gCAAA;AAAA,EACb,cAAA,EAAgB,kDAAA;AAAA,EAChB,eAAA,EAAiB,0BAAA;AAAA,EACjB,aAAA,EAAe,sCAAA;AAAA,EACf,WAAA,EAAa,gCAAA;AAAA,EACb,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,gCAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,cAAA,EAAgB,gCAAA;AAAA,EAChB,YAAA,EAAc,2BAAA;AAAA,EACd,aAAA,EAAe,4BAAA;AAAA,EACf,aAAA,EAAe,4BAAA;AAAA,EACf,aAAA,EAAe,4BAAA;AAAA,EACf,aAAA,EAAe,2BAAA;AAAA,EACf,cAAA,EAAgB,2BAAA;AAAA,EAChB,YAAA,EAAc,qBAAA;AAAA,EACd,aAAA,EAAe,qBAAA;AAAA,EACf,aAAA,EAAe,qBAAA;AAAA,EACf,QAAA,EAAU,cAAA;AAAA,EACV,UAAA,EAAY,oBAAA;AAAA,EACZ,WAAA,EAAa,oBAAA;AAAA,EACb,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,0BAAA;AAAA,EACX,UAAA,EAAY,cAAA;AAAA,EACZ,gBAAA,EAAkB,0BAAA;AAAA,EAClB,MAAA,EAAQ,6BAAA;AAAA,EACR,QAAA,EAAU,0BAAA;AAAA,EACV,OAAA,EAAS,gCAAA;AAAA,EACT,IAAA,EAAM,0BAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,gCAAA;AAAA,EACR,QAAA,EAAU,0BAAA;AAAA,EACV,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,4CAAA;AAAA,EACb,SAAA,EAAW,4CAAA;AAAA,EACX,QAAA,EAAU,4CAAA;AAAA,EACV,WAAA,EAAa,gCAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ,gCAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,SAAA,EAAW,cAAA;AAAA,EACX,KAAA,EAAO,oBAAA;AAAA,EACP,WAAA,EAAa,wDAAA;AAAA,EACb,aAAA,EAAe,oEAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,KAAA,EAAO,4CAAA;AAAA,EACP,QAAA,EAAU,4CAAA;AAAA,EACV,KAAA,EAAO,cAAA;AAAA,EACP,GAAA,EAAK,cAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,yBAAA,EAA2B,cAAA;AAAA,EAC3B,cAAA,EAAgB,iEAAA;AAAA,EAChB,QAAA,EAAU,gCAAA;AAAA,EACV,WAAA,EAAa,gCAAA;AAAA,EACb,gBAAA,EAAkB,+NAAA;AAAA,EAClB,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,0BAAA;AAAA,EACR,QAAA,EAAU,sCAAA;AAAA,EACV,aAAA,EAAe,sCAAA;AAAA,EACf,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW,sCAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,sCAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,gBAAA,EAAkB,gCAAA;AAAA,EAClB,MAAA,EAAQ,oBAAA;AAAA,EACR,cAAA,EAAgB,kDAAA;AAAA,EAChB,UAAA,EAAY,sCAAA;AAAA,EACZ,QAAA,EAAU,gCAAA;AAAA,EACV,SAAA,EAAW,gCAAA;AAAA,EACX,KAAA,EAAO,0BAAA;AAAA,EACP,IAAA,EAAM,oBAAA;AAAA,EACN,mBAAA,EAAqB,kDAAA;AAAA,EACrB,GAAA,EAAK,cAAA;AAAA,EACL,MAAA,EAAQ,oBAAA;AAAA,EACR,SAAA,EAAW,sCAAA;AAAA,EACX,KAAA,EAAO,gCAAA;AAAA,EACP,UAAA,EAAY,gCAAA;AAAA,EACZ,WAAA,EAAa,gCAAA;AAAA,EACb,UAAA,EAAY,0EAAA;AAAA,EACZ,WAAA,EAAa,0EAAA;AAAA,EACb,WAAA,EAAa,wDAAA;AAAA,EACb,cAAA,EAAgB,wDAAA;AAAA,EAChB,eAAA,EAAiB,gCAAA;AAAA,EACjB,aAAA,EAAe,oEAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,sCAAA;AAAA,EACX,WAAA,EAAa,wGAAA;AAAA,EACb,WAAA,EAAa,sCAAA;AAAA,EACb,cAAA,EAAgB,4CAAA;AAAA,EAChB,YAAA,EAAc,eAAA;AAAA,EACd,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,qBAAA;AAAA,EACf,cAAA,EAAgB,qBAAA;AAAA,EAChB,YAAA,EAAc,eAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,qBAAA;AAAA,EACf,QAAA,EAAU,cAAA;AAAA,EACV,UAAA,EAAY,sCAAA;AAAA,EACZ,WAAA,EAAa,sCAAA;AAAA,EACb,QAAA,EAAU,sCAAA;AAAA,EACV,SAAA,EAAW,sCAAA;AAAA,EACX,UAAA,EAAY,cAAA;AAAA,EACZ,gBAAA,EAAkB,gCAAA;AAAA,EAClB,MAAA,EAAQ,+CAAA;AAAA,EACR,QAAA,EAAU,4CAAA;AAAA,EACV,OAAA,EAAS,kDAAA;AAAA,EACT,IAAA,EAAM,gCAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,EAAU,oBAAA;AAAA,EACV,MAAA,EAAQ,oBAAA;AAAA,EACR,WAAA,EAAa,iCAAA;AAAA,EACb,SAAA,EAAW,2BAAA;AAAA,EACX,QAAA,EAAU,qBAAA;AAAA,EACV,WAAA,EAAa,uCAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,cAAA;AAAA,EACN,SAAA,EAAW,cAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,WAAA,EAAa,qBAAA;AAAA,EACb,aAAA,EAAe,iCAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,KAAA,EAAO,2BAAA;AAAA,EACP,QAAA,EAAU,2BAAA;AAAA,EACV,KAAA,EAAO,cAAA;AAAA,EACP,GAAA,EAAK,cAAA;AAAA,EACL,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,yBAAA,EAA2B,cAAA;AAAA,EAC3B,cAAA,EAAgB,wDAAA;AAAA,EAChB,QAAA,EAAU,2BAAA;AAAA,EACV,WAAA,EAAa,2BAAA;AAAA,EACb,gBAAA,EAAkB,kLAAA;AAAA,EAClB,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,QAAA,EAAU,2BAAA;AAAA,EACV,aAAA,EAAe,2BAAA;AAAA,EACf,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW,2BAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,2BAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,gBAAA,EAAkB,4BAAA;AAAA,EAClB,MAAA,EAAQ,oBAAA;AAAA,EACR,cAAA,EAAgB,iCAAA;AAAA,EAChB,UAAA,EAAY,2BAAA;AAAA,EACZ,QAAA,EAAU,oBAAA;AAAA,EACV,SAAA,EAAW,oBAAA;AAAA,EACX,KAAA,EAAO,cAAA;AAAA,EACP,IAAA,EAAM,cAAA;AAAA,EACN,mBAAA,EAAqB,2BAAA;AAAA,EACrB,GAAA,EAAK,iCAAA;AAAA,EACL,MAAA,EAAQ,oBAAA;AAAA,EACR,SAAA,EAAW,iCAAA;AAAA,EACX,KAAA,EAAO,2BAAA;AAAA,EACP,UAAA,EAAY,2BAAA;AAAA,EACZ,WAAA,EAAa,2BAAA;AAAA,EACb,UAAA,EAAY,8CAAA;AAAA,EACZ,WAAA,EAAa,8CAAA;AAAA,EACb,WAAA,EAAa,8CAAA;AAAA,EACb,cAAA,EAAgB,iEAAA;AAAA,EAChB,eAAA,EAAiB,2BAAA;AAAA,EACjB,aAAA,EAAe,8CAAA;AAAA,EACf,WAAA,EAAa,kCAAA;AAAA,EACb,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,6EAAA;AAAA,EACb,WAAA,EAAa,0BAAA;AAAA,EACb,cAAA,EAAgB,iCAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,iBAAA;AAAA,EACf,aAAA,EAAe,sBAAA;AAAA,EACf,cAAA,EAAgB,sBAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,sBAAA;AAAA,EACf,QAAA,EAAU,cAAA;AAAA,EACV,UAAA,EAAY,qBAAA;AAAA,EACZ,WAAA,EAAa,qBAAA;AAAA,EACb,QAAA,EAAU,oBAAA;AAAA,EACV,SAAA,EAAW,2BAAA;AAAA,EACX,UAAA,EAAY,cAAA;AAAA,EACZ,gBAAA,EAAkB,2BAAA;AAAA,EAClB,MAAA,EAAQ,8BAAA;AAAA,EACR,QAAA,EAAU,2BAAA;AAAA,EACV,OAAA,EAAS,6BAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,4CAAA;AAAA,EACP,KAAA,EAAO,gCAAA;AAAA,EACP,IAAA,EAAM,sCAAA;AAAA,EACN,GAAA,EAAK,0BAAA;AAAA,EACL,MAAA,EAAQ,kDAAA;AAAA,EACR,QAAA,EAAU,4CAAA;AAAA,EACV,MAAA,EAAQ,4CAAA;AAAA,EACR,WAAA,EAAa,uFAAA;AAAA,EACb,SAAA,EAAW,6FAAA;AAAA,EACX,QAAA,EAAU,2EAAA;AAAA,EACV,WAAA,EAAa,+GAAA;AAAA,EACb,MAAA,EAAQ,4CAAA;AAAA,EACR,IAAA,EAAM,wDAAA;AAAA,EACN,MAAA,EAAQ,sCAAA;AAAA,EACR,IAAA,EAAM,kDAAA;AAAA,EACN,SAAA,EAAW,oEAAA;AAAA,EACX,KAAA,EAAO,4CAAA;AAAA,EACP,WAAA,EAAa,2EAAA;AAAA,EACb,aAAA,EAAe,uFAAA;AAAA,EACf,WAAA,EAAa,kDAAA;AAAA,EACb,KAAA,EAAO,yGAAA;AAAA,EACP,QAAA,EAAU,yGAAA;AAAA,EACV,KAAA,EAAO,sCAAA;AAAA,EACP,GAAA,EAAK,gCAAA;AAAA,EACL,MAAA,EAAQ,mDAAA;AAAA,EACR,WAAA,EAAa,kDAAA;AAAA,EACb,yBAAA,EAA2B,kDAAA;AAAA,EAC3B,cAAA,EAAgB,oKAAA;AAAA,EAChB,QAAA,EAAU,qEAAA;AAAA,EACV,WAAA,EAAa,iFAAA;AAAA,EACb,gBAAA,EAAkB,wVAAA;AAAA,EAClB,KAAA,EAAO,4CAAA;AAAA,EACP,MAAA,EAAQ,sCAAA;AAAA,EACR,QAAA,EAAU,+DAAA;AAAA,EACV,aAAA,EAAe,+DAAA;AAAA,EACf,KAAA,EAAO,wDAAA;AAAA,EACP,MAAA,EAAQ,oEAAA;AAAA,EACR,OAAA,EAAS,8DAAA;AAAA,EACT,MAAA,EAAQ,kDAAA;AAAA,EACR,SAAA,EAAW,wDAAA;AAAA,EACX,KAAA,EAAO,oBAAA;AAAA,EACP,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,2EAAA;AAAA,EACX,KAAA,EAAO,4CAAA;AAAA,EACP,gBAAA,EAAkB,6FAAA;AAAA,EAClB,MAAA,EAAQ,uCAAA;AAAA,EACR,cAAA,EAAgB,mGAAA;AAAA,EAChB,UAAA,EAAY,+DAAA;AAAA,EACZ,QAAA,EAAU,wDAAA;AAAA,EACV,SAAA,EAAW,wDAAA;AAAA,EACX,KAAA,EAAO,4CAAA;AAAA,EACP,IAAA,EAAM,sCAAA;AAAA,EACN,mBAAA,EAAqB,mGAAA;AAAA,EACrB,GAAA,EAAK,gCAAA;AAAA,EACL,MAAA,EAAQ,gCAAA;AAAA,EACR,SAAA,EAAW,uFAAA;AAAA,EACX,KAAA,EAAO,gCAAA;AAAA,EACP,UAAA,EAAY,gCAAA;AAAA,EACZ,WAAA,EAAa,sCAAA;AAAA,EACb,UAAA,EAAY,iFAAA;AAAA,EACZ,WAAA,EAAa,6FAAA;AAAA,EACb,WAAA,EAAa,oGAAA;AAAA,EACb,cAAA,EAAgB,iKAAA;AAAA,EAChB,eAAA,EAAiB,iIAAA;AAAA,EACjB,aAAA,EAAe,uEAAA;AAAA,EACf,WAAA,EAAa,gEAAA;AAAA,EACb,SAAA,EAAW,oEAAA;AAAA,EACX,WAAA,EAAa,gHAAA;AAAA,EACb,WAAA,EAAa,kDAAA;AAAA,EACb,cAAA,EAAgB,wFAAA;AAAA,EAChB,YAAA,EAAc,+CAAA;AAAA,EACd,aAAA,EAAe,gDAAA;AAAA,EACf,aAAA,EAAe,gDAAA;AAAA,EACf,aAAA,EAAe,gDAAA;AAAA,EACf,aAAA,EAAe,mCAAA;AAAA,EACf,cAAA,EAAgB,yCAAA;AAAA,EAChB,YAAA,EAAc,yCAAA;AAAA,EACd,aAAA,EAAe,mCAAA;AAAA,EACf,aAAA,EAAe,qDAAA;AAAA,EACf,QAAA,EAAU,sCAAA;AAAA,EACV,UAAA,EAAY,4CAAA;AAAA,EACZ,WAAA,EAAa,4CAAA;AAAA,EACb,QAAA,EAAU,qEAAA;AAAA,EACV,SAAA,EAAW,2EAAA;AAAA,EACX,UAAA,EAAY,kDAAA;AAAA,EACZ,gBAAA,EAAkB,+GAAA;AAAA,EAClB,MAAA,EAAQ,8EAAA;AAAA,EACR,QAAA,EAAU,6CAAA;AAAA,EACV,OAAA,EAAS,6EAAA;AAAA,EACT,IAAA,EAAM,kCAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,UAAA;AAAA,EACR,WAAA,EAAa,oBAAA;AAAA,EACb,SAAA,EAAW,oBAAA;AAAA,EACX,QAAA,EAAU,iBAAA;AAAA,EACV,WAAA,EAAa,qBAAA;AAAA,EACb,MAAA,EAAQ,aAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,aAAA;AAAA,EACb,aAAA,EAAe,oBAAA;AAAA,EACf,WAAA,EAAa,WAAA;AAAA,EACb,KAAA,EAAO,iBAAA;AAAA,EACP,QAAA,EAAU,iBAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,yBAAA,EAA2B,cAAA;AAAA,EAC3B,cAAA,EAAgB,uCAAA;AAAA,EAChB,QAAA,EAAU,gBAAA;AAAA,EACV,WAAA,EAAa,mBAAA;AAAA,EACb,gBAAA,EAAkB,4EAAA;AAAA,EAClB,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA,EAAU,gBAAA;AAAA,EACV,aAAA,EAAe,gBAAA;AAAA,EACf,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ,WAAA;AAAA,EACR,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ,WAAA;AAAA,EACR,SAAA,EAAW,eAAA;AAAA,EACX,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW,yBAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,gBAAA,EAAkB,gBAAA;AAAA,EAClB,MAAA,EAAQ,UAAA;AAAA,EACR,cAAA,EAAgB,qBAAA;AAAA,EAChB,UAAA,EAAY,iBAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,mBAAA,EAAqB,gBAAA;AAAA,EACrB,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,kBAAA;AAAA,EACX,KAAA,EAAO,MAAA;AAAA,EACP,UAAA,EAAY,MAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,iBAAA;AAAA,EACZ,WAAA,EAAa,mBAAA;AAAA,EACb,WAAA,EAAa,kBAAA;AAAA,EACb,cAAA,EAAgB,iCAAA;AAAA,EAChB,eAAA,EAAiB,qBAAA;AAAA,EACjB,aAAA,EAAe,oBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAa,oBAAA;AAAA,EACb,WAAA,EAAa,UAAA;AAAA,EACb,cAAA,EAAgB,iCAAA;AAAA,EAChB,YAAA,EAAc,uBAAA;AAAA,EACd,aAAA,EAAe,wBAAA;AAAA,EACf,aAAA,EAAe,wBAAA;AAAA,EACf,aAAA,EAAe,wBAAA;AAAA,EACf,aAAA,EAAe,mBAAA;AAAA,EACf,cAAA,EAAgB,mBAAA;AAAA,EAChB,YAAA,EAAc,mBAAA;AAAA,EACd,aAAA,EAAe,qBAAA;AAAA,EACf,aAAA,EAAe,oBAAA;AAAA,EACf,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,WAAA;AAAA,EACZ,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,aAAA;AAAA,EACX,UAAA,EAAY,aAAA;AAAA,EACZ,gBAAA,EAAkB,cAAA;AAAA,EAClB,MAAA,EAAQ,uBAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,cAAA;AAAA,EACP,IAAA,EAAM,cAAA;AAAA,EACN,GAAA,EAAK,YAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,WAAA;AAAA,EACR,WAAA,EAAa,sBAAA;AAAA,EACb,SAAA,EAAW,mBAAA;AAAA,EACX,QAAA,EAAU,iBAAA;AAAA,EACV,WAAA,EAAa,eAAA;AAAA,EACb,MAAA,EAAQ,WAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,SAAA,EAAW,UAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,mBAAA;AAAA,EACb,aAAA,EAAe,qBAAA;AAAA,EACf,WAAA,EAAa,OAAA;AAAA,EACb,KAAA,EAAO,kBAAA;AAAA,EACP,QAAA,EAAU,kBAAA;AAAA,EACV,KAAA,EAAO,eAAA;AAAA,EACP,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,sBAAA;AAAA,EACR,WAAA,EAAa,MAAA;AAAA,EACb,yBAAA,EAA2B,MAAA;AAAA,EAC3B,cAAA,EAAgB,2BAAA;AAAA,EAChB,QAAA,EAAU,qBAAA;AAAA,EACV,WAAA,EAAa,wBAAA;AAAA,EACb,gBAAA,EAAkB,2FAAA;AAAA,EAClB,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,WAAA;AAAA,EACR,QAAA,EAAU,uBAAA;AAAA,EACV,aAAA,EAAe,uBAAA;AAAA,EACf,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,iBAAA;AAAA,EACR,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,iBAAA;AAAA,EACX,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,oBAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,gBAAA,EAAkB,qBAAA;AAAA,EAClB,MAAA,EAAQ,QAAA;AAAA,EACR,cAAA,EAAgB,mBAAA;AAAA,EAChB,UAAA,EAAY,aAAA;AAAA,EACZ,QAAA,EAAU,WAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO,YAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,mBAAA,EAAqB,0BAAA;AAAA,EACrB,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAW,kBAAA;AAAA,EACX,KAAA,EAAO,gBAAA;AAAA,EACP,UAAA,EAAY,gBAAA;AAAA,EACZ,WAAA,EAAa,YAAA;AAAA,EACb,UAAA,EAAY,uBAAA;AAAA,EACZ,WAAA,EAAa,qBAAA;AAAA,EACb,WAAA,EAAa,wBAAA;AAAA,EACb,cAAA,EAAgB,oCAAA;AAAA,EAChB,eAAA,EAAiB,iBAAA;AAAA,EACjB,aAAA,EAAe,+BAAA;AAAA,EACf,WAAA,EAAa,gBAAA;AAAA,EACb,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAa,8CAAA;AAAA,EACb,WAAA,EAAa,sBAAA;AAAA,EACb,cAAA,EAAgB,qBAAA;AAAA,EAChB,YAAA,EAAc,wBAAA;AAAA,EACd,aAAA,EAAe,yBAAA;AAAA,EACf,aAAA,EAAe,yBAAA;AAAA,EACf,aAAA,EAAe,yBAAA;AAAA,EACf,aAAA,EAAe,+BAAA;AAAA,EACf,cAAA,EAAgB,0BAAA;AAAA,EAChB,YAAA,EAAc,6BAAA;AAAA,EACd,aAAA,EAAe,sBAAA;AAAA,EACf,aAAA,EAAe,+BAAA;AAAA,EACf,QAAA,EAAU,OAAA;AAAA,EACV,UAAA,EAAY,YAAA;AAAA,EACZ,WAAA,EAAa,eAAA;AAAA,EACb,QAAA,EAAU,gBAAA;AAAA,EACV,SAAA,EAAW,cAAA;AAAA,EACX,UAAA,EAAY,UAAA;AAAA,EACZ,gBAAA,EAAkB,gBAAA;AAAA,EAClB,MAAA,EAAQ,yBAAA;AAAA,EACR,QAAA,EAAU,gBAAA;AAAA,EACV,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,EAAA,GAA2B;AAAA,EACtC,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,WAAA,EAAa,mBAAA;AAAA,EACb,SAAA,EAAW,sBAAA;AAAA,EACX,QAAA,EAAU,gBAAA;AAAA,EACV,WAAA,EAAa,oBAAA;AAAA,EACb,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,UAAA;AAAA,EACP,WAAA,EAAa,iBAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,cAAA;AAAA,EACb,KAAA,EAAO,oBAAA;AAAA,EACP,QAAA,EAAU,oBAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ,YAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,yBAAA,EAA2B,aAAA;AAAA,EAC3B,cAAA,EAAgB,gDAAA;AAAA,EAChB,QAAA,EAAU,aAAA;AAAA,EACV,WAAA,EAAa,oBAAA;AAAA,EACb,gBAAA,EAAkB,yEAAA;AAAA,EAClB,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,eAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,OAAA,EAAS,gBAAA;AAAA,EACT,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,SAAA,EAAW,oBAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,gBAAA,EAAkB,oBAAA;AAAA,EAClB,MAAA,EAAQ,aAAA;AAAA,EACR,cAAA,EAAgB,kBAAA;AAAA,EAChB,UAAA,EAAY,aAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,aAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,mBAAA,EAAqB,gBAAA;AAAA,EACrB,GAAA,EAAK,IAAA;AAAA,EACL,MAAA,EAAQ,WAAA;AAAA,EACR,SAAA,EAAW,wBAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,UAAA,EAAY,SAAA;AAAA,EACZ,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,iBAAA;AAAA,EACZ,WAAA,EAAa,oBAAA;AAAA,EACb,WAAA,EAAa,aAAA;AAAA,EACb,cAAA,EAAgB,sCAAA;AAAA,EAChB,eAAA,EAAiB,iBAAA;AAAA,EACjB,aAAA,EAAe,mBAAA;AAAA,EACf,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW,gBAAA;AAAA,EACX,WAAA,EAAa,8BAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,cAAA,EAAgB,uBAAA;AAAA,EAChB,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,kBAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,YAAA,EAAc,aAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,QAAA,EAAU,SAAA;AAAA,EACV,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,cAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,UAAA,EAAY,gBAAA;AAAA,EACZ,gBAAA,EAAkB,cAAA;AAAA,EAClB,MAAA,EAAQ,wBAAA;AAAA,EACR,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,eAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,iBAAA,EAAmB;AACrB,CAAA;AAGO,IAAM,OAAA,GAAsD;AAAA,EACjE,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI;AAC1D;AAGO,IAAM,gBAAA,GAAiD;AAAA,EAC5D,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC,IAAA;AAAA,EACJ,EAAA,EAAIC;AACN;AAMO,SAAS,eAAA,CACd,QAAA,GAAyB,IAAA,EACzB,SAAA,GAA2C,EAAC,EACtB;AACtB,EAAA,OAAO,EAAE,GAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,GAAG,SAAA,EAAU;AAC9C;;;AC18CA,IAAM,YAAA,GAAe,CAAA;AACrB,IAAM,gBAAA,GAAmB,CAAA;AACzB,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,0BAAA,GAA6B,GAAA;AAGnC,SAAS,mBAAA,CAAoB,aAAsB,aAAA,EAAuB;AACxE,EAAA,IAAI,OAAO,WAAA,CAAY,IAAA;AACvB,EAAA,MAAM,GAAA,GAAM,YAAY,MAAA,GAAS,YAAA;AAGjC,EAAA,IAAI,IAAA,GAAO,aAAA,GAAgB,MAAA,CAAO,UAAA,GAAa,gBAAA,EAAkB;AAC/D,IAAA,IAAA,GAAO,YAAY,KAAA,GAAQ,aAAA;AAAA,EAC7B;AAGA,EAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,CAAO,UAAA,GAAa,aAAA,GAAgB,gBAAgB,CAAC,CAAA;AAEtG,EAAA,OAAO,EAAE,KAAK,IAAA,EAAK;AACrB;AA+BO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,WAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA,GAAuB;AACzB,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,OAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,eAAA,GAAkB,OAAuB,IAAI,CAAA;AACnD,EAAA,MAAM,qBAAA,GAAwB,OAAuB,IAAI,CAAA;AACzD,EAAA,MAAM,mBAAA,GAAsB,OAA0B,IAAI,CAAA;AAG1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAA+C,IAAI,CAAA;AACjF,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAA+C,IAAI,CAAA;AAE7F,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,MAAM,KAAK,aAAA,CAAc,OAAA;AACzB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,UAAA,CAAW,mBAAA,CAAoB,EAAA,CAAG,qBAAA,EAAsB,EAAG,mBAAmB,CAAC,CAAA;AAAA,EACjF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAA,MAAM,KAAK,mBAAA,CAAoB,OAAA;AAC/B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,gBAAA,CAAiB,mBAAA,CAAoB,EAAA,CAAG,qBAAA,EAAsB,EAAG,0BAA0B,CAAC,CAAA;AAAA,EAC9F,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,aAAA,EAAc;AAAA,EAChB,CAAA,EAAG,CAAC,UAAA,EAAY,aAAa,CAAC,CAAA;AAG9B,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACvB,IAAA,mBAAA,EAAoB;AAAA,EACtB,CAAA,EAAG,CAAC,gBAAA,EAAkB,mBAAmB,CAAC,CAAA;AAG1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,EAAc;AACnC,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,MAAA,EAAQ,IAAI,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,MAAM,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,MAAA,EAAQ,IAAI,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,aAAa,CAAC,CAAA;AAE9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACvB,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,EAAoB;AACzC,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,MAAA,EAAQ,IAAI,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,MAAM,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,MAAA,EAAQ,IAAI,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,mBAAmB,CAAC,CAAA;AAG1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAM,YAAA,GAAe,aAAA,CAAc,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AAC3D,MAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AAC/D,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,cAAA,gBAA8B,KAAK,CAAA;AAAA,IAC3D,CAAA;AACA,IAAA,IAAI,UAAA,EAAY,QAAA,CAAS,gBAAA,CAAiB,WAAA,EAAa,kBAAkB,CAAA;AACzE,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AACjE,MAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA;AACrE,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,cAAA,sBAAoC,KAAK,CAAA;AAAA,IACjE,CAAA;AACA,IAAA,IAAI,gBAAA,EAAkB,QAAA,CAAS,gBAAA,CAAiB,WAAA,EAAa,kBAAkB,CAAA;AAC/E,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,EAAE,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,YAAA,EAAa;AAAA,IACnC,EAAE,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAc;AAAA,IACnC,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,QAAA,EAAS;AAAA,IAC7B,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,QAAA;AAAS,GAClC;AAEA,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,QAAQ,CAAA,IAAK,cAAc,IAAI,CAAA;AAEjE,EAAA,uBACEf,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,kMAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,2EAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,kCAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,iHAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,oBAETA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAU,SAAA,EAAU;AAAA,GAC5B,kBAGAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,IAET,YAAA,CAAa;AAAA,GAChB,EAGC,iCACCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,aAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAU,SAAA,EAAU;AAAA,GAC5B,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,6IAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qIAAA,EAAA,EACZ,YAAA,CAAa,eAAe,YAAA,CAAa,MAC5C,CAAA,kBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6GAA4G,CAC7H,CACF,CAAA,kBAIFA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,WAAU,+BAAA,EAAgC;AAAA,GACzD,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,WAAU,+BAAA,EAAgC;AAAA,GAE5D,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8FAAA,EAAA,EACX,MAAA,CAAO,WAAA,EAAa,WAAA,EAAa,EAAE,MAAA,EAAQ,CAC9C,CACF,CACF,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mFAAA,EAAA,EACX,MAAA,CAAO,WAAA,EAAa,WAAA,EAAa,EAAE,MAAA,EAAQ,CAC9C,CACF,CACF,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EAAA,EAGZ,gBAAA,IAAoB,CAAC,oBAAA,oBACpBA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAA;AAAA,MACL,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,UAAU,CAAA;AAAA,MACxC,SAAA,EAAW,EAAA;AAAA,QACT,+FAAA;AAAA,QACA,gEAAA;AAAA,QACA,UAAA,IAAc;AAAA,OAChB;AAAA,MACA,OAAO,WAAA,CAAY;AAAA,KAAA;AAAA,oBAEnBA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,WAAU,aAAA,EAAc,CAAA;AAAA,oBAC/BA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,wBAAA,EAAA,EAA0B,YAAY,IAAK,CAAA;AAAA,oBAC3DA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEACb,QACH,CAAA;AAAA,oBACAA,iBAAA,aAAA,CAAC,WAAA,EAAA,EAAY,WAAW,EAAA,CAAG,+CAAA,EAAiD,UAAA,IAAc,YAAY,CAAA,EAAG;AAAA,GAC3G,EAGC,cAAc,OAAA,IAAW,YAAA;AAAA,oBACxBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,eAAA;AAAA,QACL,SAAA,EAAU,yGAAA;AAAA,QACV,KAAA,EAAO,EAAE,GAAA,EAAK,OAAA,CAAQ,KAAK,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,mBAAA;AAAoB,OAAA;AAAA,sBAG1EA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sEAAA,EAAA,EAAuE,gBAEpF,CACF,CAAA;AAAA,sBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BACX,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,CAA2D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAA,qBACvGA,gBAAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,IAAA;AAAA,UACL,SAAS,MAAM;AAAE,YAAA,gBAAA,CAAiB,IAAI,CAAA;AAAG,YAAA,aAAA,CAAc,KAAK,CAAA;AAAA,UAAG,CAAA;AAAA,UAC/D,SAAA,EAAW,EAAA;AAAA,YACT,gFAAA;AAAA,YACA,oBAAA;AAAA,YACA,QAAA,KAAa,OACT,0CAAA,GACA;AAAA;AACN,SAAA;AAAA,wBAEAA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,sCAAA,EAAA,EAAwC,KAAK,IAAK,CAAA;AAAA,wBAClEA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,IAAA,CAAK,GAAA,IAAO,YAAY,CAAA,EAAA,EAAI,IAAA,CAAK,MAAO,CAAA,kBAC1EA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAA,EAAiC,IAAA,CAAK,OAAQ,CAC/D,CAAA;AAAA,QACC,aAAa,IAAA,oBAAQA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0CAAA,EAA2C;AAAA,OAEnF,CACH;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GAEb,CAAA,EAID,aAAA,oBACCA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,mEAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,IAER,UAAA,mBACCA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAAyB,CAAA,mBAExCA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC;AAAA,KAMrD,OAAO,UAAA,KAAe,YAAY,CAAC,gBAAA,oBAClCA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,8KAAA;AAAA,MACV,OAAO,CAAA,EAAG,UAAU,SAAS,UAAA,KAAe,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,KAAA;AAAA,oBAExDA,gBAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAU,sBAAA,EAAuB,CAAA;AAAA,oBACjDA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,UAAW;AAAA,KAKrB,CAAC,gBAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,uEAAA,EAAA,EAEZ,UAAA,CAAW,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,MAAM,IAAA,EAAK,qBACjCA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAS,MAAM;AAAE,QAAA,YAAA,CAAa,GAAG,CAAA;AAAG,QAAA,kBAAA,GAAqB,IAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MAChE,SAAA,EAAW,EAAA;AAAA,QACT,iEAAA;AAAA,QACA,IAAA,KAAS,GAAA,IAAO,CAAC,kBAAA,GACb,qFAAA,GACA;AAAA;AACN,KAAA;AAAA,oBAEAA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAU,aAAA,EAAc,CAAA;AAAA,oBAC9BA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kBAAA,EAAA,EAAoB,YAAA,CAAa,GAAG,CAAE;AAAA,GAEzD,CAAA,EAGA,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,qBACnCA,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAwC,CAAA,kBAEvDA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,mBAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAS,MAAM,mBAAA,CAAoB,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,MAC5C,SAAA,EAAW,EAAA;AAAA,QACT,iEAAA;AAAA,QACA,qBACI,qFAAA,GACA;AAAA,OACN;AAAA,MACA,KAAA,EAAM;AAAA,KAAA;AAAA,IAEL,kBAAA,GACG,WAAA,CAAY,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,EAAA,KAAO,kBAAkB,CAAA,EAAG,wBACxDA,gBAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAU,aAAA,EAAc,CAAA;AAAA,oBAC5CA,iBAAA,aAAA,CAAC,WAAA,EAAA,EAAY,WAAW,EAAA,CAAG,2CAAA,EAA6C,gBAAA,IAAoB,YAAY,CAAA,EAAG;AAAA,GAC7G,EAGC,oBAAoB,aAAA,IAAiB,YAAA;AAAA,oBACpCA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,qBAAA;AAAA,QACL,SAAA,EAAU,kHAAA;AAAA,QACV,KAAA,EAAO,EAAE,GAAA,EAAK,aAAA,CAAc,KAAK,IAAA,EAAM,aAAA,CAAc,IAAA,EAAM,QAAA,EAAU,0BAAA;AAA2B,OAAA;AAAA,MAE/F,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,qBAChBA,gBAAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,KAAK,EAAA,CAAG,EAAA;AAAA,UACR,SAAS,MAAM;AAAE,YAAA,kBAAA,GAAqB,GAAG,EAAE,CAAA;AAAG,YAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,UAAG,CAAA;AAAA,UAC1E,SAAA,EAAW,EAAA;AAAA,YACT,kFAAA;AAAA,YACA,oBAAA;AAAA,YACA,kBAAA,KAAuB,EAAA,CAAG,EAAA,GACtB,0CAAA,GACA;AAAA;AACN,SAAA;AAAA,QAEC,EAAA,CAAG,wBACFA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EAAA,EACb,EAAA,CAAG,IACN,CAAA;AAAA,wBAEFA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,GAAG,KAAM,CAAA;AAAA,QACf,kBAAA,KAAuB,GAAG,EAAA,oBACzBA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sDAAA,EAAuD;AAAA,OAG5E;AAAA,KACH;AAAA,IACA,QAAA,CAAS;AAAA,GAEb,CACF,CAEJ,CAEJ,CACF,CAAA;AAEJ,CAAA;AClaO,IAAM,YAAA,GAAe,CAAC,IAAA,EAAY,WAAA,GAAyC,CAAA,KAAc;AAC9F,EAAA,MAAM,UAAA,GAAa,aAAa,IAAI,CAAA;AACpC,EAAA,MAAM,QAAA,GAAW,WAAW,UAAU,CAAA;AAEtC,EAAA,MAAM,YAAY,WAAA,CAAY,UAAA,EAAY,EAAE,YAAA,EAAc,aAAa,CAAA;AACvE,EAAA,MAAM,UAAU,SAAA,CAAU,QAAA,EAAU,EAAE,YAAA,EAAc,aAAa,CAAA;AAcjE,EAAA,OAAO,iBAAA,CAAkB;AAAA,IACvB,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACN,CAAA;AACH,CAAA;AAuBA,IAAM,cAAA,mBAAiB,IAAI,GAAA,CAAI,CAAC,IAAI,CAAC,CAAA;AAG9B,IAAM,UAAA,GAAa,CAAC,QAAA,KACzB,cAAA,CAAe,IAAI,QAAQ,CAAA;AAOtB,IAAM,gBAAgB,CAAC,QAAA,KAC5B,UAAA,CAAW,QAAQ,IAAI,KAAA,GAAQ,MAAA;AAO1B,IAAM,oBAAoB,CAAC,QAAA,KAChC,UAAA,CAAW,QAAQ,IAAI,QAAA,GAAW,OAAA;ACnE7B,IAAM,eAA4C,CAAC;AAAA,EACxD,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,gBAAAA,CAAM,SAAS,WAAW,CAAA;AAG1D,EAAAA,gBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,WAAA,CAAY,WAAW,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,IAAA,GAAOA,iBAAM,OAAA,CAAQ,MAAM,aAAa,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGnE,EAAA,MAAM,QAAA,GAAWA,gBAAAA,CAAM,OAAA,CAAQ,MAAM;AACnC,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAChC,IAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,GAAE,EAAG,CAAC,GAAG,CAAA,KAAM;AACzC,MAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,IAAI,CAAA;AACvB,MAAA,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAQ,GAAI,CAAC,CAAA;AAC5B,MAAA,OAAOgB,MAAAA,CAAO,CAAA,EAAG,OAAA,EAAS,EAAE,QAAQ,CAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,OAAA,GAAUC,SAAAA,CAAU,QAAA,EAAU,CAAC,CAAA;AACrC,IAAA,WAAA,CAAY,OAAO,CAAA;AAEnB,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,IAAI,YAAA,eAA2B,OAAO,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,OAAA,GAAUC,SAAAA,CAAU,QAAA,EAAU,CAAC,CAAA;AACrC,IAAA,WAAA,CAAY,OAAO,CAAA;AAEnB,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,IAAI,YAAA,eAA2B,OAAO,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAc;AACnC,IAAA,YAAA,CAAa,GAAG,CAAA;AAChB,IAAA,IAAI,YAAA,eAA2B,KAAK,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,uBACElB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,gBAAA,EAAkB,SAAS,CAAA,EAAA,kBAE5CA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDACbgB,MAAAA,CAAO,QAAA,EAAU,WAAA,EAAa,EAAE,QAAQ,CAC3C,CAAA,kBACAhB,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,0DAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW;AAAA,KAAA;AAAA,oBAETA,gBAAAA,CAAA,aAAA,CAACmB,WAAAA,EAAA,EAAY,WAAU,SAAA,EAAU;AAAA,GACrC,kBACAnB,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,0DAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW;AAAA,KAAA;AAAA,oBAETA,gBAAAA,CAAA,aAAA,CAACoB,YAAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA,GAE1C,CACF,CAAA,kBAGApB,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAAA,EACZ,QAAA,CAAS,IAAI,CAAC,GAAA,EAAK,sBAClBA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,GAAG,IAAI,CAAC,CAAA,CAAA,EAAI,SAAA,EAAU,8DAAA,EAAA,EAChC,GACH,CACD,CACH,CAAA,kBAGAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EAAA,EACZ,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACf,IAAA,MAAM,UAAA,GAAaqB,SAAAA,CAAU,GAAA,EAAK,WAAW,CAAA;AAC7C,IAAA,MAAM,cAAA,GAAiBC,WAAAA,CAAY,GAAA,EAAK,QAAQ,CAAA;AAChD,IAAA,MAAM,WAAA,GAAcC,QAAQ,GAAG,CAAA;AAE/B,IAAA,uBACEvB,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,IAAI,WAAA,EAAY;AAAA,QACrB,OAAA,EAAS,MAAM,eAAA,CAAgB,GAAG,CAAA;AAAA,QAClC,SAAA,EAAW,EAAA;AAAA,UACT,6GAAA;AAAA,UACA,CAAC,cAAA,IAAkB,0BAAA;AAAA,UACnB,cAAA,IAAkB,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,oCAAA;AAAA,UACjD,UAAA,IAAc,0EAAA;AAAA,UACd,CAAC,cAAc,WAAA,IAAe;AAAA;AAChC,OAAA;AAAA,MAECgB,MAAAA,CAAO,KAAK,GAAG;AAAA,KAClB;AAAA,EAEJ,CAAC,CACH,CACF,CAAA;AAEJ,CAAA;AC3EO,IAAM,UAAkC,CAAC;AAAA,EAC9C,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIQ,SAAS,IAAI,CAAA;AACvD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIA,SAAsB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAGxD,EAAAC,UAAU,MAAM;AACd,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,MAAA,iBAAO,IAAI,MAAM,CAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,MAAA,qBAAW,IAAA,EAAM,GAAG,GAAK,CAAA;AACzD,IAAA,OAAO,MAAM,cAAc,KAAK,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,EAAE,IAAI,GAAA,EAAK,KAAA,EAAO,eAAe,KAAA,EAAO,SAAA,EAAW,QAAQ,IAAA,EAAK;AAAA,IAChE,EAAE,IAAI,GAAA,EAAK,KAAA,EAAO,aAAa,KAAA,EAAO,SAAA,EAAW,QAAQ,IAAA,EAAK;AAAA,IAC9D,EAAE,IAAI,GAAA,EAAK,KAAA,EAAO,SAAS,KAAA,EAAO,SAAA,EAAW,QAAQ,IAAA;AAAK,GAC5D;AAEA,EAAA,MAAM,mBAAmB,SAAA,IAAa,gBAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAe;AAC/B,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,GAAA,EAAK,OAAO,KAAA;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,KAAK,cAAA,CAAe,OAAA,EAAS,EAAE,QAAA,EAAU,EAAA,EAAI,cAAc,OAAA,EAAS,EAC1E,aAAA,CAAc,GAAG,EACjB,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAc,GAAG,KAAA,IAAS,EAAA;AAAA,IAC5D,SAAS,CAAA,EAAG;AAAE,MAAA,OAAO,EAAA;AAAA,IAAI;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,EAAE,OAAO,EAAA,EAAI,KAAA,EAAO,cAAc,SAAA,IAAa,YAAA,EAAc,SAAS,KAAA,EAAM;AAAA,IAC5E,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC7C,EAAE,KAAA,EAAO,kBAAA,EAAoB,KAAA,EAAO,UAAA,EAAY,SAAS,KAAA,EAAM;AAAA,IAC/D,EAAE,KAAA,EAAO,iBAAA,EAAmB,KAAA,EAAO,SAAA,EAAW,SAAS,KAAA,EAAM;AAAA,IAC7D,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,QAAA,EAAU,SAAS,KAAA,EAAM;AAAA,IAC3D,EAAE,KAAA,EAAO,qBAAA,EAAuB,KAAA,EAAO,aAAA,EAAe,SAAS,KAAA,EAAM;AAAA,IACrE,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,SAAS,KAAA,EAAM;AAAA,IAC1D,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IACxD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAU,SAAS,KAAA,EAAM;AAAA,IAC1D,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IACtD,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IACtD,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,WAAA,EAAa,SAAS,KAAA,EAAM;AAAA,IAC9D,EAAE,KAAA,EAAO,kBAAA,EAAoB,KAAA,EAAO,QAAA,EAAU,SAAS,MAAA;AAAO,GAChE;AAGA,EAAA,MAAM,aAAA,GAAgB,CAAC,EAAA,EAAuD,QAAA,GAAoB,IAAA,KAAS;AAEvG,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,GAAA,IAAO,CAAC,QAAA,EAAU;AAClC,MAAA,uBAAOzB,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,GAAG,KAAM,CAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,IAAI,UAAU,EAAA,CAAG,OAAA;AAEjB,IAAA,IAAI;AACA,MAAA,IAAI,CAAC,GAAG,KAAA,EAAO;AACX,QAAA,IAAA,GAAOgB,MAAAA,CAAO,KAAK,OAAO,CAAA;AAE1B,QAAA,IAAI;AACA,UAAA,OAAA,GAAU,IAAI,IAAA,CAAK,cAAA,CAAe,SAAS,EAAE,YAAA,EAAc,SAAS,CAAA,CAC/D,aAAA,CAAc,GAAG,EACjB,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAc,GAAG,KAAA,IAAS,KAAA;AAAA,QAC9D,SAAS,CAAA,EAAG;AAAA,QAAC;AAAA,MACjB,CAAA,MAAO;AACH,QAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,EAAK,EAAA,CAAG,KAAK,CAAA;AACvC,QAAA,IAAA,GAAOA,MAAAA,CAAO,OAAO,OAAO,CAAA;AAE5B,QAAA,MAAM,UAAA,GAAa,UAAA,CAAW,EAAA,CAAG,KAAK,CAAA;AACtC,QAAA,IAAI,UAAA,IAAc,CAAC,UAAA,CAAW,QAAA,CAAS,KAAK,KAAK,CAAC,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3E,UAAA,OAAA,GAAU,UAAA;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,SAAS,CAAA,EAAG;AACR,MAAA,uBAAOhB,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,GAAG,KAAM,CAAA;AAAA,IAC3B;AAEA,IAAA,uBACIA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,EAAA,CAAG,KAAM,mBAChBA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAAA,EACX,IAAA,EAAK,GAAA,kBAACA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAA,EAAqB,GAAA,EAAE,OAAA,EAAQ,GAAC,CAC3D,CACJ,CAAA;AAAA,EAER,CAAA;AAEA,EAAA,MAAM,gBAAgB,SAAA,CAAU,IAAA,CAAK,OAAK,CAAA,CAAE,KAAA,MAAW,YAAY,EAAA,CAAG,CAAA;AACtE,EAAA,MAAM,wBAAwB,aAAA,GAAgB,aAAA,CAAc,aAAa,CAAA,GAAK,cAAc,SAAA,IAAa,YAAA;AAIzG,EAAA,uBACEA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,uJAAA,EAAyJ,SAAS,CAAA,EAAA,EAGlL,YAAA,IAAgB,YAAA,CAAa,SAAS,CAAA,oBACrCA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAAA,EAEZ,CAAC,aAAA,oBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,SAAA,EAAU,6LAAA;AAAA,MACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI;AAAA,KAAA;AAAA,oBAEpCA,gBAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,WAAU,SAAA,EAAU,CAAA;AAAA,oBAChCA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,YAAA,EAAc,cAAc,oBAAW;AAAA,GAChD,EAKD,aAAA,oBACCA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qDAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EAAA,EACb,YAAA,EAAc,UAAA,IAAc,oBAC/B,CAAA,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACrC,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,CAAA,EAAA,EAAE,WAAU,aAAA,EAAc;AAAA,GAE/B,mBAEAA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAS,MAAM;AAAE,QAAA,kBAAA,GAAqB,IAAI,CAAA;AAAG,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAAG,CAAA;AAAA,MACtE,SAAA,EAAW,EAAA;AAAA,QACT,uGAAA;AAAA,QACA,gBAAA,KAAqB,OACjB,4BAAA,GACA;AAAA;AACN,KAAA;AAAA,oBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAa,CAAA,EAAG,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,2BAC9KA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,GAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAG,CAAA,kBAAEA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,KAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAG,mBAAEA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,KAAI,EAAA,EAAG,GAAA,EAAG,CAAA,kBAAEA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,MAAI,CACtK,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,YAAA,EAAc,YAAY,QAAS,CAAA;AAAA,IACzC,qBAAqB,IAAA,oBAAQA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6CAAA,EAA8C;AAAA,KAI7F,YAAA,EAAc,GAAA,CAAI,CAAC,IAAA,qBAClBA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAK,IAAA,CAAK,EAAA;AAAA,MACV,SAAS,MAAM;AAAE,QAAA,kBAAA,GAAqB,KAAK,EAAE,CAAA;AAAG,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAAG,CAAA;AAAA,MACzE,SAAA,EAAW,EAAA;AAAA,QACT,uGAAA;AAAA,QACA,gBAAA,KAAqB,IAAA,CAAK,EAAA,GACtB,4BAAA,GACA;AAAA;AACN,KAAA;AAAA,IAEC,IAAA,CAAK,wBACJA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EAAA,EACb,IAAA,CAAK,IACR,CAAA;AAAA,oBAEFA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,UAAA,EAAA,EAAY,KAAK,KAAM,CAAA;AAAA,IACtC,gBAAA,KAAqB,KAAK,EAAA,oBAAMA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6CAAA,EAA8C;AAAA,GAElG,CAGH,CACF,CAEJ,CAAA,EAID,aAAA,oBACCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAS,MAAM;AAAE,QAAA,aAAA,EAAc;AAAA,MAAG,CAAA;AAAA,MAClC,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAa,GAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAA,kBAChLA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAU,CAAA,kBAAEA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAU,CACxC,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,YAAA,EAAc,eAAe,uBAAmB;AAAA,GAE3D,CAAA,EAID,mBAAA,oBACCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAM,mBAAA,CAAoB,CAAC,WAAW,CAAA;AAAA,MAC/C,SAAA,EAAW,EAAA;AAAA,QACT,kHAAA;AAAA,QACA,cACI,8CAAA,GACA;AAAA;AACN,KAAA;AAAA,oBAGAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EAAA,kBAEbA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,SAAA,EAAU,oBAAmB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,CAAA,EAAG,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAA,kBAC9KA,gBAAAA,CAAA,aAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,MAAK,EAAA,EAAG,GAAA,EAAG,mBACpCA,gBAAAA,CAAA,cAAC,UAAA,EAAA,EAAS,MAAA,EAAO,iBAAA,EAAiB,CAAA,kBAClCA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,EAAA,EAAG,MAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,MAAK,SAAA,EAAU,YAAA,EAAY,mBAC3DA,gBAAAA,CAAA,cAAC,UAAA,EAAA,EAAS,MAAA,EAAO,oBAAmB,SAAA,EAAU,YAAA,EAAY,CAC5D,CAAA,kBACAA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAA,EAAuC,YAAA,EAAc,gBAAA,IAAoB,iBAAY,mBACpGA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDACZ,WAAA,GAAc,oBAAA,GAAkB,oBACnC,CACF,CACF,CAAA;AAAA,oBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,MACd,uEAAA;AAAA,MACA,cAAc,YAAA,GAAe;AAAA,KAC/B,EAAA,kBACEA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAW,EAAA;AAAA,MACf,sFAAA;AAAA,MACA,cAAc,QAAA,GAAW;AAAA,OACxB,CACL;AAAA,GAEJ,CAAA,EAGD,kBAAA;AAAA;AAAA,IAEC,kBAAA,CAAmB,EAAE,WAAA,EAAa,YAAA,EAAc,cAAc;AAAA,sBAE9DA,iBAAA,aAAA,CAAC,YAAA,EAAA,EAAa,aAA0B,YAAA,EAA4B,YAAA,EAA4B,MAAA,EAAgB,CAAA,kBAGlHA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAEbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0HAAA;AAAA,MACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAC,aAAa;AAAA,KAAA;AAAA,oBAE9CA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,uCAAA,EAAA,EAAyC,cAAc,SAAU,CAAA;AAAA,oBACjFA,gBAAAA,CAAA,aAAA,CAAC0B,WAAAA,EAAA,EAAY,WAAW,EAAA,CAAG,iEAAA,EAAmE,aAAA,IAAiB,YAAY,CAAA,EAAG;AAAA,GAChI,EAEC,aAAA,oBACC1B,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,EACZ,gBAAA,CAAiB,GAAA,CAAI,CAAA,GAAA,qBACpBA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAK,GAAA,CAAI,EAAA;AAAA,MACT,SAAA,EAAU,kHAAA;AAAA,MACV,OAAA,EAAS,MAAM,gBAAA,GAAmB,GAAA,CAAI,IAAI,EAAE,GAAA,CAAI,UAAU,IAAA,CAAK;AAAA,KAAA;AAAA,oBAEjEA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,2CAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,UAAA;AAAA,QACL,OAAA,EAAS,IAAI,MAAA,IAAU,IAAA;AAAA,QACvB,QAAA,EAAU,CAAC,CAAA,KAAM;AACZ,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,gBAAA,GAAmB,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,QAChD,CAAA;AAAA,QACA,SAAA,EAAU,yIAAA;AAAA,QACV,KAAA,EAAO,EAAE,iBAAA,EAAmB,GAAA,CAAI,KAAA,EAAM;AAAA,QACtC,eAAa,GAAA,CAAI;AAAA;AAAA,uBAErBA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6HAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,wBAAA,EAAyB,IAAA,EAAK,MAAA,EAAO,SAAQ,WAAA,EAAY,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,qBACvGA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,eAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAAE,kBAAiB,CAC1E,CACJ,mBACAA,gBAAAA,CAAA,cAAC,OAAA,EAAA,IAAA,EAAO;AAAA,0DAAA,EACgC,IAAI,EAAE,CAAA;AAAA,0CAAA,EACtB,IAAI,KAAK,CAAA;AAAA,sCAAA,EACb,IAAI,KAAK,CAAA;AAAA;AAAA,0DAAA,EAEW,IAAI,EAAE,CAAA;AAAA,yCAAA,EACvB,IAAI,KAAK,CAAA;AAAA;AAAA,oBAAA,CAE9B,CACJ,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAA,EAAmD,GAAA,CAAI,KAAM,CAC/E,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,4EAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,GAAA,CAAI,KAAA;AAAM;AAAA;AACtC,GAEH,CACH,CAEJ,CACF,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAA,kBACXA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC2B,KAAAA,EAAA,EAAM,SAAA,EAAU,sBAAA,EAAuB,CAC5C,CAAA,kBACA3B,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uCAAA,EAAA,EAAyC,YAAA,EAAc,QAAS,CACpF,CAAA,kBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,MAAM,eAAA,CAAgB,CAAC,YAAY,CAAA;AAAA,MAC5C,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAoC,qBAAsB,CAAA;AAAA,oBACzEA,gBAAAA,CAAA,aAAA,CAAC0B,WAAAA,EAAA,EAAY,WAAW,EAAA,CAAG,iEAAA,EAAmE,YAAA,IAAgB,YAAY,CAAA,EAAG;AAAA,GACjI,EAEC,YAAA,oBACG1B,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACIA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA,EAAG,CAAA,kBAC3EA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oLAAA,EAAA,EACV,SAAA,CAAU,GAAA,CAAI,CAAA,EAAA,qBACXA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAK,EAAA,CAAG,KAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACP,2EAAA;AAAA,QAAA,CACC,QAAA,IAAY,EAAA,MAAQ,EAAA,CAAG,KAAA,GAClB,kDAAA,GACA;AAAA,OACV;AAAA,MACA,SAAS,MAAM;AACX,QAAA,gBAAA,GAAmB,GAAG,KAAK,CAAA;AAC3B,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACzB;AAAA,KAAA;AAAA,IAEC,cAAc,EAAE;AAAA,GAExB,CACL,CACJ,CAEL,CACL,CACJ,CACF,CAAA;AAEJ,CAAA;AClaO,IAAM,cAAA,GAAgD,CAAC,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,KAAA,EAAO,SAAA,EAAW,GAAG,KAAA,EAAM,KAAM;AAC3H,EAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAW,YAAY,SAAA,EAAW,UAAA,KAAe,YAAA,CAAa;AAAA,IAChF,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,IAAA,EAAM,EAAE,KAAA;AAAM,GACf,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,IAC3C,MAAA,EAAQ,UAAA,GAAa,GAAA,GAAM,SAAA,EAAW,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMtC,OAAA,EAAS,UAAA,GAAa,CAAA,GAAI,SAAA,EAAW;AAAA;AAAA,GACvC;AAEA,EAAA,uBACEA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,KAAA;AAAA,MACC,GAAG,SAAA;AAAA,MACH,GAAG,UAAA;AAAA,MACH,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS;AAAA,KAAA;AAAA,IAEpC;AAAA,GACH;AAEJ,CAAA;AC3BO,IAAM,aAAA,GAA8C,CAAC,EAAE,EAAA,EAAI,IAAA,EAAM,YAAY,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ,KAAM;AAC5H,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI,YAAA,CAAa;AAAA,IAC1C,EAAA;AAAA,IACA,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA;AAAW,GAC1B,CAAA;AAGD,EAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAChC,EAAA,MAAM,YAAA,GACJ,YAAY,CAAA,GAAI,+CAAA,GAChB,YAAY,EAAA,GAAK,+CAAA,GACjB,OAAA,KAAY,EAAA,GAAK,gDAAA,GACjB,gDAAA;AAEF,EAAA,MAAM,kBAAA,GACJ,YAAY,CAAA,GAAI,kEAAA,GAChB,YAAY,EAAA,GAAK,kEAAA,GACjB,OAAA,KAAY,EAAA,GAAK,mEAAA,GACjB,mEAAA;AAEF,EAAA,uBACEA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,SAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA,IAAU;AAAA,OACZ;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAEC;AAAA,GACH;AAEJ,CAAA;;;AC5BA,IAAM,SAAA,GAAYA,gBAAAA,CAAM,IAAA,CAAK,CAAC,EAAE,KAAA,EAAO,YAAA,EAAa,qBAChDA,gBAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAA,kBACZA,gBAAAA,CAAA,aAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,SAAA,EAAW,EAAA;AAAA,MACT,gGAAA;AAAA,MACA,+CAAA;AAAA,MACA,CAAC,MAAM,KAAA,IAAS;AAAA,KAClB;AAAA,IACA,KAAA,EAAO,MAAM,KAAA,GAAQ;AAAA,MACnB,eAAA,EAAiB,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA;AAAA,MAC/B,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,UAAA,EAAY,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA;AAAA,KACtC,GAAI,MAAA;AAAA,IACJ,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,YAAA,GAAe,KAAK,CAAA;AAAA,IACtB;AAAA,GAAA;AAAA,kBAEAA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,aAAA,EAAA,EAAe,MAAM,KAAM;AAC/C,CACJ,CACH,CAAA;AAED,SAAA,CAAU,WAAA,GAAc,WAAA;AAEjB,IAAM,YAAsC,CAAC;AAAA,EAClD,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM,YAAA,CAAa,WAAW,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGnE,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,MAAM,QAAQ4B,WAAAA,CAAY,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AAC1D,IAAA,MAAM,MAAMC,SAAAA,CAAU,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AACtD,IAAA,OAAOC,iBAAAA,CAAkB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,MAAM,YAAA,GAAeC,WAAAA,CAAY,CAAC,IAAA,KAAe;AAC/C,IAAA,OAAO,QAAA,GAAWC,WAAAA,CAAY,IAAA,EAAM,QAAQ,CAAA,GAAI,IAAA;AAAA,EAClD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAIb,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,GAAA,uBAAU,GAAA,EAA6B;AAE7C,IAAA,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACtB,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAE3C,MAAA,MAAM,GAAA,GAAMhB,MAAAA,CAAO,UAAA,EAAY,YAAY,CAAA;AAE3C,MAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,QAAA,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,EAAE,CAAA;AAAA,MACjB;AACA,MAAA,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAA,uBACEhB,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0JAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAEbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+IAAA,EAAA,EACZ,SAAS,GAAA,CAAI,CAAC,GAAA,qBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,IAAI,WAAA,EAAY;AAAA,MACrB,SAAA,EAAU;AAAA,KAAA;AAAA,IAETgB,MAAAA,CAAO,GAAA,EAAK,KAAA,EAAO,EAAE,QAAQ;AAAA,GAEjC,CACH,CAAA,kBACAhB,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,KAAA,EAAO,EAAE,YAAA,EAAc,OAAA,MACxD,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,IAAA,MAAM,MAAA,GAASgB,MAAAA,CAAO,GAAA,EAAK,YAAY,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,CAAI,MAAM,KAAK,EAAC;AAE9C,IAAA,MAAM,cAAA,GAAiBM,WAAAA,CAAY,GAAA,EAAK,WAAW,CAAA;AACnD,IAAA,MAAM,MAAA,GAAS,IAAI,WAAA,EAAY;AAE/B,IAAA,uBACEtB,gBAAAA,CAAA,aAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,MAAA;AAAA,QACL,EAAA,EAAI,MAAA;AAAA,QACJ,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,EAAA;AAAA,UACT,qLAAA;AAAA,UACA,CAAC,cAAA,IAAkB,qCAAA;AAAA,UACnBuB,OAAAA,CAAQ,GAAG,CAAA,IAAK;AAAA,SAClB;AAAA,QACA,OAAA,EAAS,MAAM,WAAA,GAAc,GAAG;AAAA,OAAA;AAAA,sBAEhCvB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,QACd,yGAAA;AAAA,QACAuB,OAAAA,CAAQ,GAAG,CAAA,GACP,gEAAA,GACA;AAAA,OACN,EAAA,EACGP,OAAO,GAAA,EAAK,GAAA,EAAK,EAAE,MAAA,EAAQ,CAC9B,CAAA,EACC,SAAA,CAAU,SAAS,CAAA,oBAClBhB,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yFAAA,EAAA,EACZ,SAAA,CAAU,MACb,CAEJ,CAAA;AAAA,sBAEAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,6EAAA,EAAA,EACZ,UAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,2BACxBA,gBAAAA,CAAA,cAAC,SAAA,EAAA,EAAU,GAAA,EAAK,GAAG,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,MAAM,IAAI,KAAA,EAAc,YAAA,EAA4B,CACrF,CAAA,EACA,SAAA,CAAU,SAAS,CAAA,oBAChBA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2IAAA,EAAA,EAA4I,GAAA,EACrJ,UAAU,MAAA,GAAS,CAAA,EAAE,OAC3B,CAEN;AAAA,KACF;AAAA,EAEJ,CAAC,CACD,CACF,CACF,CAAA;AAEJ,CAAA;AC1IO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,GAAc,EAAA;AAAA,EACd,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIwB,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,YAAA,GAAeS,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYA,OAAe,CAAC,CAAA;AAClC,EAAA,MAAM,cAAA,GAAiBA,OAAe,CAAC,CAAA;AAEvC,EAAA,MAAM,iBAAA,GAAoBF,WAAAA,CAAY,CAAC,CAAA,KAA2C;AAChF,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,IAAA,MAAM,OAAA,GAAU,aAAa,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,UAAU,CAAA,CAAE,OAAA;AAC1D,IAAA,SAAA,CAAU,OAAA,GAAU,OAAA;AACpB,IAAA,cAAA,CAAe,OAAA,GAAU,YAAA,CAAa,OAAA,EAAS,YAAA,IAAgB,CAAA;AAE/D,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,MAAM,UAAA,GAAa,CAAC,SAAA,KAAuC;AACzD,MAAA,MAAM,WAAA,GAAc,aAAa,SAAA,GAAY,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,UAAU,SAAA,CAAU,OAAA;AACtF,MAAA,MAAM,MAAA,GAAS,cAAc,SAAA,CAAU,OAAA;AAGvC,MAAA,MAAM,eAAe,UAAA,GAAa,CAAA;AAClC,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,YAAY,CAAA,GAAI,YAAA;AAEzD,MAAA,MAAM,YAAY,IAAA,CAAK,GAAA;AAAA,QACpB,cAAc,EAAA,GAAM,UAAA;AAAA;AAAA,QACrB,eAAe,OAAA,GAAU;AAAA,OAC3B;AAEA,MAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,YAAY,MAAM;AACtB,MAAA,aAAA,CAAc,KAAK,CAAA;AAEnB,MAAA,IAAI,YAAA,KAAiB,IAAA,IAAQ,YAAA,CAAa,OAAA,IAAW,QAAA,EAAU;AAE7D,QAAA,MAAM,iBAAiB,cAAA,CAAe,OAAA;AACtC,QAAA,MAAM,UAAA,GAAA,CAAc,gBAAgB,cAAA,IAAkB,cAAA;AACtD,QAAA,MAAM,WAAA,GAAe,aAAa,UAAA,GAAc,EAAA;AAEhD,QAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACjC,QAAA,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,UAAA,EAAW,GAAI,WAAW,CAAA;AAGnD,QAAA,IAAI,MAAA,GAAS,MAAM,KAAA,EAAO;AACxB,UAAA,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,QACxB;AAAA,MACF;AAEA,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,UAAU,CAAA;AACpD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AACjD,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,UAAU,CAAA;AACpD,MAAA,QAAA,CAAS,mBAAA,CAAoB,YAAY,SAAS,CAAA;AAAA,IACpD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,UAAU,CAAA;AACjD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,QAAA,CAAS,iBAAiB,WAAA,EAAa,UAAA,EAAY,EAAE,OAAA,EAAS,OAAO,CAAA;AACrE,IAAA,QAAA,CAAS,gBAAA,CAAiB,YAAY,SAAS,CAAA;AAAA,EACjD,GAAG,CAAC,KAAA,EAAO,YAAY,WAAA,EAAa,QAAA,EAAU,YAAY,CAAC,CAAA;AAE3D,EAAA,uBACE/B,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAQ,YAAA,KAAiB,IAAA,GAAO,CAAA,EAAG,YAAY,OAAO,KAAA,EAAO;AAAA;AAC/D,KAAA;AAAA,IAEC,QAAA;AAAA,oBAGDA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,WAAW,gBAAA,GAAmB,0CAAA;AAAA,UAC9B,4EAAA;AAAA,UACA,8BAAA;AAAA,UACA,UAAA,IAAc;AAAA,SAChB;AAAA,QACA,WAAA,EAAa,WAAW,MAAA,GAAY,iBAAA;AAAA,QACpC,YAAA,EAAc,WAAW,MAAA,GAAY;AAAA,OAAA;AAAA,sBAErCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,QACd,qCAAA;AAAA,QACA,aAAa,YAAA,GAAe;AAAA,OAC9B,EAAG;AAAA,KACL;AAAA,IAGC,8BACCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oGAAA,EAAqG;AAAA,GAExH;AAEJ,CAAA;ACzGO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,KAAM;AAEJ,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,IAAQ,CAAC,KAAA,EAAO,MAAM,OAAO,IAAA;AAEzC,EAAA,uBACEA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,6EAAA;AAAA,QACA,oFAAA;AAAA,QACA,sEAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,KAAA,CAAM;AAAA,KAAA;AAAA,oBAGbA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,uEAAA,EAAA,EACb,MAAM,IACT,CAAA;AAAA,IAEC,CAAC,2BACAA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAA,EAAyB,KAAA,CAAM,IAAK;AAAA,GAExD;AAEJ,CAAA;AC3BA,IAAM,UAAA,GAAa,aAAA;AAMZ,IAAM,iBAAA,GAAkE;AAAA,EAC7E,+BAAeA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAW,UAAA,EAAY,CAAA;AAAA,EAC5C,6BAAaA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,WAAW,UAAA,EAAY,CAAA;AAAA,EAC3C,+BAAeA,gBAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,WAAW,UAAA,EAAY,CAAA;AAAA,EAC/C,wBAAQA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,WAAW,UAAA,EAAY,CAAA;AAAA,EACtC,0BAAUA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,WAAW,UAAA,EAAY,CAAA;AAAA,EACzC,2BAAWA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAW,UAAA,EAAY,CAAA;AAAA,EACxC,uBAAOA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,WAAW,UAAA,EAAY,CAAA;AAAA,EACxC,wBAAQA,gBAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,WAAW,UAAA,EAAY,CAAA;AAAA,EAC1C,sBAAMA,gBAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAW,UAAA,EAAY,CAAA;AAAA,EAC7C,0BAAUA,gBAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,WAAW,UAAA,EAAY,CAAA;AAAA,EAC/C,0BAAUA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,WAAW,UAAA,EAAY,CAAA;AAAA,EACvC,yBAASA,gBAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,WAAW,UAAA,EAAY,CAAA;AAAA,EAC7C,2BAAWA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,WAAW,UAAA,EAAY,CAAA;AAAA,EACvC,2BAAWA,gBAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,WAAW,UAAA,EAAY;AAChD;AAGA,IAAM,kBAAA,GAA+E;AAAA,EACnF,EAAA,EAAI;AAAA,IACF,aAAA,EAAe,cAAA;AAAA,IACf,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,YAAA;AAAA,IACf,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,gBAAA;AAAA,IACV,SAAA,EAAW,MAAA;AAAA,IACX,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,QAAA,EAAU,cAAA;AAAA,IACV,OAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAW,YAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb;AAAA,EACA,EAAA,EAAI;AAAA,IACF,aAAA,EAAe,SAAA;AAAA,IACf,WAAA,EAAa,OAAA;AAAA,IACb,aAAA,EAAe,SAAA;AAAA,IACf,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,WAAA;AAAA,IACV,SAAA,EAAW,SAAA;AAAA,IACX,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,WAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAEf,CAAA;AAGA,IAAM,gBAAA,GAAmB,CAAC,QAAA,KACxB,QAAA,KAAa,OAAO,IAAA,GAAO,IAAA;AAGtB,SAAS,sBAAsB,EAAA,EAAuC;AAC3E,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,mBAAmB,EAAE,CAAA;AACnE;AAMO,SAAS,aAAA,CACd,EAAA,EACA,QAAA,GAAyB,IAAA,EACzB,IAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kBAAkB,EAAE,CAAA;AAAA,IAC1B,IAAA,EAAM,IAAA,IAAQ,kBAAA,CAAmB,IAAI,EAAE,EAAE;AAAA,GAC3C;AACF;AAMO,SAAS,iBAAA,CACd,KAAA,EACA,QAAA,GAAyB,IAAA,EACD;AAExB,EAAA,IAAI,MAAM,KAAA,EAAO,IAAA,IAAQ,MAAM,KAAA,EAAO,IAAA,SAAa,KAAA,CAAM,KAAA;AAEzD,EAAA,IAAI,KAAA,CAAM,OAAA,IAAW,qBAAA,CAAsB,KAAA,CAAM,OAAO,CAAA,EAAG;AACzD,IAAA,OAAO,aAAA,CAAc,KAAA,CAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,MAAA;AACT;AAMO,IAAM,YAAA,GAAwD;AAAA,EACnE,aAAA,EAAe,aAAA,CAAc,eAAA,EAAiB,IAAI,CAAA;AAAA,EAClD,WAAA,EAAa,aAAA,CAAc,aAAA,EAAe,IAAI,CAAA;AAAA,EAC9C,aAAA,EAAe,aAAA,CAAc,eAAA,EAAiB,IAAI,CAAA;AAAA,EAClD,MAAA,EAAQ,aAAA,CAAc,QAAA,EAAU,IAAI,CAAA;AAAA,EACpC,QAAA,EAAU,aAAA,CAAc,UAAA,EAAY,IAAI,CAAA;AAAA,EACxC,SAAA,EAAW,aAAA,CAAc,WAAA,EAAa,IAAI,CAAA;AAAA,EAC1C,KAAA,EAAO,aAAA,CAAc,OAAA,EAAS,IAAI,CAAA;AAAA,EAClC,MAAA,EAAQ,aAAA,CAAc,QAAA,EAAU,IAAI,CAAA;AAAA,EACpC,IAAA,EAAM,aAAA,CAAc,MAAA,EAAQ,IAAI,CAAA;AAAA,EAChC,QAAA,EAAU,aAAA,CAAc,UAAA,EAAY,IAAI,CAAA;AAAA,EACxC,QAAA,EAAU,aAAA,CAAc,UAAA,EAAY,IAAI,CAAA;AAAA,EACxC,OAAA,EAAS,aAAA,CAAc,SAAA,EAAW,IAAI,CAAA;AAAA,EACtC,SAAA,EAAW,aAAA,CAAc,WAAA,EAAa,IAAI,CAAA;AAAA,EAC1C,SAAA,EAAW,aAAA,CAAc,WAAA,EAAa,IAAI;AAC5C;;;AC5GO,IAAM,WAAoC,CAAC;AAAA,EAChD,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,iBAAA,GAAoB,CAAA;AAAA,EACpB,WAAA,GAAc;AAChB,CAAA,KAAM;AAEJ,EAAA,MAAM,QAAQ4B,WAAAA,CAAY,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AAC1D,EAAA,MAAM,MAAMC,SAAAA,CAAU,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AACtD,EAAA,MAAM,QAAA,GAAWC,iBAAAA,CAAkB,EAAE,KAAA,EAAO,KAAK,CAAA;AAEjD,EAAA,MAAM,KAAA,GAAQ,cACV,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,CAAC,CAAA,GAC3C,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAa,EAAA;AACnB,EAAA,MAAM,kBAAA,GAAqB9B,gBAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AAE5D,EAAA,MAAM,CAAC,KAAK,MAAM,CAAA,GAAIA,iBAAM,QAAA,iBAAS,IAAI,MAAM,CAAA;AAE/C,EAAAA,gBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM,MAAA,qBAAW,IAAA,EAAM,GAAG,GAAK,CAAA;AAC5D,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,gBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAE9B,MAAA,kBAAA,CAAmB,QAAQ,SAAA,GAAY,WAAA,GAAA,CAClC,EAAA,GAAK,iBAAA,IAAqB,aAC3B,iBAAA,GAAoB,UAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAe;AACnC,IAAA,OAAO,QAAA,GAAWgC,WAAAA,CAAY,IAAA,EAAM,QAAQ,CAAA,GAAI,IAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,YAAA,iBAAa,IAAI,IAAA,EAAM,CAAA;AAExC,EAAA,MAAM,kBAAA,GAAqB,CAAC,EAAA,KAA2B;AAGnD,IAAA,MAAM,IAAA,GAAO,GAAA;AACb,IAAA,IAAI,WAAA,GAAc,EAAA;AAClB,IAAA,IAAI,OAAA,GAAU,EAAA;AAEd,IAAA,IAAI,CAAC,EAAA,EAAI;AAEL,MAAA,WAAA,GAAchB,MAAAA,CAAO,MAAM,OAAO,CAAA;AAClC,MAAA,IAAI;AACD,QAAA,OAAA,GAAU,IAAI,IAAA,CAAK,cAAA,CAAe,SAAS,EAAE,YAAA,EAAc,SAAS,CAAA,CAClE,aAAA,CAAc,IAAI,EAClB,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAc,GAAG,KAAA,IAAS,EAAA;AAAA,MAC1D,SAAS,CAAA,EAAG;AAAE,QAAA,OAAA,GAAU,KAAA;AAAA,MAAO;AAAA,IACnC,CAAA,MAAO;AACH,MAAA,IAAI;AACA,QAAA,MAAM,KAAA,GAAQgB,WAAAA,CAAY,IAAA,EAAM,EAAE,CAAA;AAClC,QAAA,WAAA,GAAchB,MAAAA,CAAO,OAAO,OAAO,CAAA;AAInC,QAAA,OAAA,GAAU,IAAI,KAAK,cAAA,CAAe,OAAA,EAAS,EAAE,QAAA,EAAU,EAAA,EAAI,cAAc,OAAA,EAAS,EAC7E,aAAA,CAAc,IAAI,EAClB,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAc,GAAG,KAAA,IAAS,EAAA;AAAA,MAC9D,SAAS,CAAA,EAAG;AAER,QAAA,WAAA,GAAcA,MAAAA,CAAO,MAAM,OAAO,CAAA;AAClC,QAAA,OAAA,GAAU,EAAA;AAAA,MACd;AAAA,IACJ;AAMA,IAAA,uBACEhB,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yDAAA,EAAA,kBACXA,iBAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,WAAY,CAAA,kBACnBA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wBAAA,EAAA,EAAyB,GAAA,EAAE,OAAA,EAAQ,GAAC,CACxD,CAAA;AAAA,EAEN,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,cAAc,QAAQ,CAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,kBAAkB,QAAQ,CAAA;AAClD,EAAA,MAAM,SAAA,GAAY,kBAAkB,QAAQ,CAAA;AAE5C,EAAA,uBACEA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,2IAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,kBAAA;AAAA,MACL,SAAA,EAAU,oFAAA;AAAA,MACV,KAAA,EAAO,EAAE,eAAA,EAAiB,QAAA;AAAS,KAAA;AAAA,oBAGnCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qIAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2JAAA,EAAA,EACZ,kBAAA,CAAmB,QAAQ,CAC9B,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,EACV,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACpBA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,GAAA,CAAI,WAAA,EAAY,EAAG,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,KAAA,GAAQ,CAAA,IAAK,mCAAmC,CAAA,EAAA,kBAChHA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EAAA,EAAmFgB,MAAAA,CAAO,GAAA,EAAK,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAE,CAAA,kBACjIhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,MACd,+GAAA;AAAA,MACAuB,OAAAA,CAAQ,GAAG,CAAA,GACP,0EAAA,GACA;AAAA,KACN,EAAA,EACGP,MAAAA,CAAO,GAAA,EAAK,GAAA,EAAK,EAAE,MAAA,EAAQ,CAC9B,CACJ,CACC,CACL,CACF,CAAA;AAAA,oBAGAhB,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0BAAA;AAAA,QACV,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,SAAS,UAAA;AAAW,OAAA;AAAA,sBAG3CA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EAAA,EACZ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACPA,gBAAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,0GAAA;AAAA,UACV,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA;AAAW,SAAA;AAAA,wBAE5BA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wBAAA,EAAA,EACd,IAAA,KAAS,CAAA,IAAKgB,MAAAA,CAAAA,iBAAO,IAAI,IAAA,IAAO,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,GAAG,UAAA,EAAY,EAAE,MAAA,EAAQ,CACjF;AAAA,OAEN,CACH,CAAA;AAAA,sBAGAhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCACZ,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,EAAK,QAAA,KAAa;AAE7B,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK;AACjC,UAAA,MAAM,UAAA,GAAa,YAAA,CAAa,CAAA,CAAE,KAAK,CAAA;AACvC,UAAA,OAAOqB,SAAAA,CAAU,YAAY,GAAG,CAAA;AAAA,QACpC,CAAC,CAAA;AAED,QAAA,uBACArB,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,GAAA,CAAI,aAAY,EAAG,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,WAAW,CAAA,IAAK,mCAAmC,KAE5G,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACjB,UAAA,uBACIA,gBAAAA,CAAA,aAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,GAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAU,gHAAA;AAAA,cACV,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA;AAAW,aAAA;AAAA,YAG3B,CAAC,GAAG,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,cAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,GAAG,CAAA;AAC7B,cAAA,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AACpC,cAAA,MAAM,MAAA,GAAS,SAAS,WAAA,EAAY;AAEpC,cAAA,uBACIA,gBAAAA,CAAA,aAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACG,GAAA,EAAK,MAAA;AAAA,kBACL,EAAA,EAAI,MAAA;AAAA,kBACJ,IAAA,EAAM,QAAA;AAAA,kBACN,SAAA,EAAU,sDAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACH,MAAA,EAAQ,KAAA;AAAA,oBACR,GAAA,EAAK,CAAA,EAAI,MAAA,GAAS,EAAA,GAAM,GAAG,CAAA,CAAA;AAAA;AAC/B,iBAAA;AAAA,gCAEAA,gBAAAA,CAAA,aAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACG,SAAA,EAAU,6CAAA;AAAA,oBACV,OAAA,EAAS,MAAM,eAAA,GAAkB,QAAQ;AAAA;AAAA;AAC7C,eACJ;AAAA,YAER,CAAC;AAAA,WACL;AAAA,QAER,CAAC,CAAA,EAGA,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU;AAGtB,UAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK;AAC5C,YAAA,IAAI,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAA,EAAI,OAAO,KAAA;AAC9B,YAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,CAAM,KAAK,EAAE,OAAA,EAAQ;AAC7C,YAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,CAAM,GAAG,EAAE,OAAA,EAAQ;AAC3C,YAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ;AACzC,YAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,CAAE,GAAG,EAAE,OAAA,EAAQ;AACvC,YAAA,OAAO,EAAA,GAAK,MAAM,EAAA,GAAK,EAAA;AAAA,UAC3B,CAAC,CAAA;AAOD,UAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,GAAG,iBAAiB,CAAA,CAAE,IAAA;AAAA,YAAK,CAAC,CAAA,EAAG,CAAA,KACjD,aAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ,GAAI,aAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ,KAC/D,EAAE,EAAA,GAAK,CAAA,CAAE,KAAK,CAAA,GAAI,EAAA;AAAA;AAAA,WACvB;AAEA,UAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,MAAM,EAAE,CAAA;AACpD,UAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,UAAA,MAAM,eAAe,GAAA,GAAM,KAAA;AAC3B,UAAA,MAAM,cAAc,KAAA,GAAQ,YAAA;AAE5B,UAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAChD,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AAE5C,UAAA,MAAM,eAAe,eAAA,CAAgB,QAAA,EAAS,GAAI,EAAA,GAAK,gBAAgB,UAAA,EAAW;AAClF,UAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,aAAA,EAAe,eAAe,CAAA;AAC1E,UAAA,MAAM,MAAA,GAAU,kBAAkB,EAAA,GAAM,UAAA;AAExC,UAAA,MAAM,GAAA,GAAM,eACP,IAAA,GAAO,YAAA,GAAe,mBAAmB,EAAA,GAAK,UAAA,GAC9C,eAAe,EAAA,GAAM,UAAA;AAE1B,UAAA,MAAM,eAAe,eAAA,GAAkB,EAAA;AAEvC,UAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,KAAA,EAAO,QAAwB,CAAA;AACvE,UAAA,MAAM,QAAA,GAAW,QAAQ,aAAa,CAAA;AAEtC,UAAA,uBACIA,gBAAAA,CAAA,aAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACG,KAAK,CAAA,EAAG,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,GAAA,CAAI,aAAa,CAAA,CAAA;AAAA,cACrC,KAAA;AAAA,cACA,SAAA,EAAW,CAAA,6BAAA,EAAgC,QAAA,GAAW,gBAAA,GAAmB,EAAE,CAAA,CAAA;AAAA,cAC3E,KAAA,EAAO;AAAA,gBACH,GAAA,EAAK,GAAG,GAAG,CAAA,EAAA,CAAA;AAAA,gBACX,QAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,gBAC/B,IAAA,EAAM,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,gBACpB,KAAA,EAAO,GAAG,YAAY,CAAA,CAAA,CAAA;AAAA;AAAA,gBAEtB,YAAA,EAAc,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ;AAAA;AACtC,aAAA;AAAA,4BAEAA,gBAAAA,CAAA,aAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACG,QAAA;AAAA,gBACA,KAAA;AAAA,gBACA,UAAA;AAAA,gBACA,QAAA,EAAU,aAAA;AAAA,gBACV,SAAA,EAAU,QAAA;AAAA,gBACV,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA;AAAO,eAAA;AAAA,8BAExBA,gBAAAA,CAAA,aAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAW,EAAA;AAAA,oBACP,2FAAA;AAAA,oBACA,OAAA;AAAA,oBACA,WAAW,gBAAA,GAAmB,oCAAA;AAAA,oBAC9B,CAAC,MAAM,KAAA,IAAS,iCAAA;AAAA,oBAChB,eAAe,uCAAA,GAA0C,KAAA;AAAA;AAAA,oBAEzD,QAAA,IAAY,CAAC,YAAA,IAAgB,MAAA;AAAA;AAAA,oBAE7B,QAAQ,CAAA,IAAK;AAAA,mBACjB;AAAA,kBACA,KAAA,EAAO;AAAA,oBACH,MAAA,EAAQ,MAAA;AAAA,oBACR,iBAAiB,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,oBACpD,aAAa,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,oBAChD,eAAA,EAAiB,KAAA;AAAA,oBACjB,eAAA,EAAiB,MAAM,KAAA,IAAS;AAAA,mBACpC;AAAA,kBACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,YAAA,GAAe,KAAK,CAAA;AAAA,kBACxB,CAAA;AAAA,kBACA,KAAA,EAAO,KAAA,GAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,iBAAA;AAAA,gBAG7D,aAAA,oBACCA,gBAAAA,CAAA,aAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAO,aAAA;AAAA,oBACP,OAAA,EAAS;AAAA;AAAA,iBACX;AAAA,gCAEFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,kBAAG,yDAAA;AAAA,kBACf,eAAe,qBAAA,GAAwB;AAAA,iBAC3C,EAAA,EACK,KAAA,CAAM,KACX,CAAA,EACC,CAAC,YAAA,oBACEA,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACIA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAAA,EACVgB,MAAAA,CAAO,eAAA,EAAiB,eAAA,EAAiB,EAAE,MAAA,EAAQ,CAAA,EAAE,KAAA,EAAIA,MAAAA,CAAO,aAAA,EAAe,eAAA,EAAiB,EAAE,QAAQ,CAC/G,CAAA,EACC,KAAA,CAAM,WAAA,IAAe,MAAA,GAAS,EAAA,oBAC3BhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAAA,EACV,KAAA,CAAM,WACX,CAER,CAAA,EAGH,KAAA,GAAQ,CAAA,IAAK,CAAC,YAAA,oBACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0LAAA,EAAA,EACV,KACL,CAER;AAAA;AACJ;AACJ,WACJ;AAAA,QAER,CAAC,CAAA,EAGAuB,OAAAA,CAAQ,GAAG,CAAA,oBACZvB,gBAAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,oEAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,GAAA,EAAK,cACD,CAAA,EAAA,CAAI,IAAA,IAAQ,SAAS,QAAA,EAAS,GAAI,EAAA,GAAK,QAAA,CAAS,UAAA,EAAW,CAAA,IAAM,KAAK,UAAU,CAAA,EAAA,CAAA,GAChF,CAAA,EAAA,CAAI,QAAA,CAAS,QAAA,EAAS,GAAI,KAAK,QAAA,CAAS,UAAA,EAAW,IAAK,EAAA,GAAK,UAAU,CAAA,EAAA;AAAA;AAC7E,WAAA;AAAA,0BAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wEAAA,EAAyE,CAAA;AAAA,0BACxFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qHAAA,EAAsH;AAAA,SAG7I,CAAA;AAAA,MAEJ,CAAC,CACH;AAAA,KACF;AAAA,oBAGAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,qEAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACH,GAAA,EAAK,WAAA,GACD,CAAA,EAAA,CAAI,IAAA,IAAQ,QAAA,CAAS,UAAS,GAAI,EAAA,GAAK,QAAA,CAAS,UAAA,EAAW,CAAA,IAAM,EAAA,GAAK,aAAa,EAAE,CAAA,EAAA,CAAA,GACrF,CAAA,EAAA,CAAI,QAAA,CAAS,QAAA,EAAS,GAAI,EAAA,GAAK,QAAA,CAAS,UAAA,EAAW,IAAK,EAAA,GAAK,UAAA,GAAa,EAAE,CAAA,EAAA;AAAA;AACpF,OAAA;AAAA,sBAEAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iIAAA,EAAA,EACXgB,MAAAA,CAAO,QAAA,EAAU,SAAA,EAAW,EAAE,MAAA,EAAQ,CAC3C;AAAA;AACJ,GAEJ,CAAA;AAEJ,CAAA;AC5WO,IAAM,UAAkC,CAAC;AAAA,EAC9C,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,iBAAA,GAAoB,CAAA;AAAA,EACpB,WAAA,GAAc;AAChB,CAAA,KAAM;AAEJ,EAAA,MAAM,KAAA,GAAQ,cACV,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,CAAC,CAAA,GAC3C,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,EAAA;AACnB,EAAA,MAAM,kBAAA,GAAqBhB,gBAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AAE5D,EAAA,MAAM,CAAC,KAAK,MAAM,CAAA,GAAIA,iBAAM,QAAA,iBAAS,IAAI,MAAM,CAAA;AAE/C,EAAAA,gBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM,MAAA,qBAAW,IAAA,EAAM,GAAG,GAAK,CAAA;AAC5D,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,gBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAE9B,MAAA,kBAAA,CAAmB,QAAQ,SAAA,GAAY,WAAA,GAAA,CAClC,EAAA,GAAK,iBAAA,IAAqB,aAC3B,iBAAA,GAAoB,UAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAe;AACnC,IAAA,OAAO,QAAA,GAAWgC,WAAAA,CAAY,IAAA,EAAM,QAAQ,CAAA,GAAI,IAAA;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,aAAa,GAAG,CAAA;AAGjC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK;AACnC,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,CAAA,CAAE,KAAK,CAAA;AACvC,IAAA,OAAOX,SAAAA,CAAU,YAAY,WAAW,CAAA;AAAA,EAC1C,CAAC,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,cAAc,QAAQ,CAAA;AACzC,EAAA,MAAM,eAAA,GAAkB,kBAAkB,QAAQ,CAAA;AAClD,EAAA,MAAM,SAAA,GAAY,kBAAkB,QAAQ,CAAA;AAE5C,EAAA,uBACErB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sIAEXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4HAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EAAA,kBACXA,gBAAAA,CAAA,cAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kDAAA,EAAA,EACTgB,MAAAA,CAAO,aAAa,oBAAA,EAAsB,EAAE,MAAA,EAAQ,CACzD,CAAA,EACCO,OAAAA,CAAQ,WAAW,CAAA,oBAChBvB,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iHAA8G,OAE9H,CAER,CACJ,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,oBAAoB,SAAA,EAAU,yCAAA,EAAA,kBACpCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,UAAA,sBAE3DA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4DAAA,EAAA,EACT,KAAA,CAAM,IAAI,CAAC,IAAA,qBACTA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,iBAAA;AAAA,MACV,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA;AAAW,KAAA;AAAA,IAE3B,IAAA,KAAS,qBACNA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mKAAA,EAAA,EACXgB,MAAAA,CAAAA,iBAAO,IAAI,IAAA,IAAO,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA,EAAG,CAAC,GAAG,UAAA,EAAY,EAAE,MAAA,EAAQ,CACtE;AAAA,GAGV,CAAA,EAGAO,OAAAA,CAAQ,WAAW,CAAA,oBAChBvB,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAU,uEAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACH,GAAA,EAAK,cACD,CAAA,EAAA,CAAI,IAAA,IAAQ,SAAS,QAAA,EAAS,GAAI,EAAA,GAAK,QAAA,CAAS,UAAA,EAAW,CAAA,IAAM,KAAK,UAAU,CAAA,EAAA,CAAA,GAChF,CAAA,EAAA,CAAI,QAAA,CAAS,QAAA,EAAS,GAAI,KAAK,QAAA,CAAS,UAAA,EAAW,IAAK,EAAA,GAAK,UAAU,CAAA,EAAA;AAAA;AAC/E,KAAA;AAAA,oBAEAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+GAAA,EAAA,EACXgB,MAAAA,CAAO,QAAA,EAAU,SAAA,EAAW,EAAE,MAAA,EAAQ,CAC3C;AAAA,GAGb,CAAA,kBAGAhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAA,EACT,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACjB,IAAA,uBACGA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,yGAAA;AAAA,QACV,KAAA,EAAO,EAAE,MAAA,EAAQ,UAAA;AAAW,OAAA;AAAA,MAG3B,CAAC,GAAG,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,WAAW,CAAA;AACrC,QAAA,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AACpC,QAAA,MAAM,MAAA,GAAS,SAAS,WAAA,EAAY;AAEpC,QAAA,uBACIA,gBAAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACG,GAAA,EAAK,MAAA;AAAA,YACL,EAAA,EAAI,MAAA;AAAA,YACJ,IAAA,EAAM,QAAA;AAAA,YACN,SAAA,EAAU,sDAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,MAAA,EAAQ,KAAA;AAAA,cACR,GAAA,EAAK,CAAA,EAAI,MAAA,GAAS,EAAA,GAAM,GAAG,CAAA,CAAA;AAAA;AAC/B,WAAA;AAAA,0BAEAA,gBAAAA,CAAA,aAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,6CAAA;AAAA,cACV,OAAA,EAAS,MAAM,eAAA,GAAkB,QAAQ;AAAA;AAAA;AAC7C,SACJ;AAAA,MAER,CAAC;AAAA,KACL;AAAA,EAEP,CAAC,CAAA,EAEA,SAAA,CAAU,GAAA,CAAI,CAAA,KAAA,KAAS;AAEtB,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK;AAC5C,MAAA,IAAI,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAA,EAAI,OAAO,KAAA;AAC9B,MAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,CAAM,KAAK,EAAE,OAAA,EAAQ;AAC7C,MAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,CAAM,GAAG,EAAE,OAAA,EAAQ;AAC3C,MAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ;AACzC,MAAA,MAAM,EAAA,GAAK,YAAA,CAAa,CAAA,CAAE,GAAG,EAAE,OAAA,EAAQ;AACvC,MAAA,OAAO,EAAA,GAAK,MAAM,EAAA,GAAK,EAAA;AAAA,IAC3B,CAAC,CAAA;AAGD,IAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,GAAG,iBAAiB,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,CAAA,EAAG,CAAA,KACjD,aAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ,GAAI,aAAa,CAAA,CAAE,KAAK,EAAE,OAAA,EAAQ,KAC/D,EAAE,EAAA,GAAK,CAAA,CAAE,KAAK,CAAA,GAAI,EAAA;AAAA,KACvB;AAEA,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,OAAK,CAAA,CAAE,EAAA,KAAO,MAAM,EAAE,CAAA;AACpD,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,IAAA,MAAM,eAAe,GAAA,GAAM,KAAA;AAC3B,IAAA,MAAM,cAAc,KAAA,GAAQ,YAAA;AAE5B,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AAEvC,IAAA,MAAM,eAAe,UAAA,CAAW,QAAA,EAAS,GAAI,EAAA,GAAK,WAAW,UAAA,EAAW;AACxE,IAAA,MAAM,eAAA,GAAkBkC,mBAAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AAChE,IAAA,MAAM,MAAA,GAAU,kBAAkB,EAAA,GAAM,UAAA;AAExC,IAAA,MAAM,GAAA,GAAM,eACP,IAAA,GAAO,YAAA,GAAe,mBAAmB,EAAA,GAAK,UAAA,GAC9C,eAAe,EAAA,GAAM,UAAA;AAE1B,IAAA,MAAM,eAAe,eAAA,GAAkB,EAAA;AAEvC,IAAA,uBACElC,gBAAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACE,KAAK,CAAA,EAAG,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,aAAa,CAAA,CAAA;AAAA,QAC7C,KAAA;AAAA,QACA,SAAA,EAAW,CAAA,6BAAA,EAAgC,QAAA,GAAW,gBAAA,GAAmB,EAAE,CAAA,CAAA;AAAA,QAC3E,KAAA,EAAO;AAAA,UACH,GAAA,EAAK,GAAG,GAAG,CAAA,EAAA,CAAA;AAAA,UACX,QAAQ,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,UAC/B,IAAA,EAAM,QAAQ,WAAW,CAAA,QAAA,CAAA;AAAA,UACzB,KAAA,EAAO,QAAQ,YAAY,CAAA,QAAA,CAAA;AAAA,UAC3B,YAAA,EAAc,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ;AAAA;AACtC,OAAA;AAAA,sBAEAA,gBAAAA,CAAA,aAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACG,QAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA,EAAU,aAAA;AAAA,UACV,SAAA,EAAU,QAAA;AAAA,UACV,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA;AAAO,SAAA;AAAA,wBAExBA,gBAAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,4GAAA;AAAA,cACA,wBAAA;AAAA,cACA,WAAW,gBAAA,GAAmB,oCAAA;AAAA,cAC9B,CAAC,MAAM,KAAA,IAAS,iCAAA;AAAA,cAChB,eAAe,wBAAA,GAA2B,WAAA;AAAA,cAC1C,QAAQ,CAAA,IAAK;AAAA,aACjB;AAAA,YACA,KAAA,EAAO;AAAA,cACH,iBAAiB,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,cACpD,aAAa,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,cAChD,eAAA,EAAiB,MAAM,KAAA,IAAS,gBAAA;AAAA,cAChC,eAAA,EAAiB,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ;AAAA,aACzC;AAAA,YACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,YAAA,GAAe,KAAK,CAAA;AAAA,YACxB,CAAA;AAAA,YACA,KAAA,EAAO,KAAA,GAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,WAAA;AAAA,0BAE9DA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,YACZ,sCAAA;AAAA,YACA,eAAe,SAAA,GAAY,SAAA;AAAA,YAC3B,KAAA,CAAM,QAAQ,iBAAA,GAAoB;AAAA,WACtC,EAAA,EACK,KAAA,CAAM,KACX,CAAA,EACC,CAAC,YAAA,oBACEA,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACIA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAA,EACVgB,MAAAA,CAAO,UAAA,EAAY,eAAA,EAAiB,EAAE,MAAA,EAAQ,CAAA,EAAE,KAAA,EAAIA,MAAAA,CAAO,QAAA,EAAU,eAAA,EAAiB,EAAE,QAAQ,CACrG,CAAA,EACC,KAAA,CAAM,WAAA,IAAe,MAAA,GAAS,EAAA,oBAC3BhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAA,EACV,KAAA,CAAM,WACX,CAER,CAAA,EAGH,KAAA,GAAQ,CAAA,IAAK,CAAC,YAAA,oBACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+LAAA,EAAA,EACV,KACL,CAER;AAAA;AACJ;AACJ,KACH;AAAA,EAEJ,CAAC,CAAA,EAGAuB,OAAAA,CAAQ,WAAW,CAAA,oBAClBvB,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oEAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,cACD,CAAA,EAAA,CAAI,IAAA,IAAQ,SAAS,QAAA,EAAS,GAAI,EAAA,GAAK,QAAA,CAAS,UAAA,EAAW,CAAA,IAAM,KAAK,UAAU,CAAA,EAAA,CAAA,GAChF,CAAA,EAAA,CAAI,QAAA,CAAS,QAAA,EAAS,GAAI,KAAK,QAAA,CAAS,UAAA,EAAW,IAAK,EAAA,GAAK,UAAU,CAAA,EAAA;AAAA;AAC7E,KAAA;AAAA,oBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wEAAA,EAAyE,CAAA;AAAA,oBAExFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qHAAA,EAAsH;AAAA,GAG9I,CACJ,CACJ,CACJ,CAAA;AAEJ,CAAA;ACpMO,IAAM,gBAAA,GAMR,CAAC,EAAE,aAAA,EAAe,YAAA,uBACrBA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+HAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,MAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,CAAA,EAAA,kBAC7HA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,SAAQ,CAAA,EAAE,gBAAA,EAAiB,CACxE,CACF,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,6BAAA,EAAA,EAA8B,gBAAc,CAAA,kBAC3DA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAA,EAAgC,qBAAmB,CACpE,CACF,CACF,CACF,CAAA,kBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAAA,EAAA,EACX,YAAA,EAAc,cAAc,wBAC/B,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAA,EAAqC,mEAElD,CAAA,EAEC,aAAA,oBACCA,gBAAAA,CAAA,aAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAS,aAAA;AAAA,IACT,SAAA,EAAU;AAAA,GAAA;AAAA,kBAEVA,gBAAAA,CAAA,aAAA,CAACmC,IAAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,EACzB,cAAc,WAAA,IAAe;AAChC,CAEJ,CACF,CAAA;ACpIF,IAAM,cAAA,GAAiB,CAAC,KAAA,EAAa,GAAA,KAAsB;AACzD,EAAA,MAAM,OAAA,GAAUD,mBAAAA,CAAoB,GAAA,EAAK,KAAK,CAAA;AAC9C,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,MAAM,mBAAmB,OAAA,GAAU,EAAA;AACnC,EAAA,IAAI,gBAAA,KAAqB,CAAA,EAAG,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,CAAA;AAC3C,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAA,CAAA;AACtC,CAAA;AAGA,IAAM,YAAA,GAAe,CAAC,IAAA,EAAY,UAAA,EAAoB,aAAA,KAAkC;AACtF,EAAA,IAAIX,OAAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,UAAA;AAC1B,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,aAAA;AAC7B,EAAA,OAAOP,MAAAA,CAAO,MAAM,MAAM,CAAA;AAC5B,CAAA;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX;AACF,CAAA,KAAM;AAEJ,EAAA,MAAM,OAAA,GAAU,kBAAkB,QAAQ,CAAA;AAE1C,EAAA,MAAM,aAAA,GAAgBoB,QAAQ,MAAM;AAClC,IAAA,MAAM,SAAA,GAAY,WAAW,WAAW,CAAA;AAExC,IAAA,MAAM,SAAoD,EAAC;AAG3D,IAAA,MAAM,eAAe,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAM,OAAA,EAAQ,GAAI,CAAA,CAAE,KAAA,CAAM,SAAS,CAAA;AAGrF,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AACzB,MAAA,MAAM,GAAA,GAAMC,OAAAA,CAAQ,SAAA,EAAW,CAAC,CAAA;AAChC,MAAA,MAAM,SAAA,GAAY,aAAa,MAAA,CAAO,CAAA,KAAA,KAAShB,UAAU,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AAE1E,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,WAAW,CAAA;AAAA,MAChD;AAAA,IACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,WAAA,EAAa,MAAM,CAAC,CAAA;AAExB,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACrB,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,CAAA;AAAA,MACT,UAAA,EAAY;AAAA,QACV,eAAA,EAAiB;AAAA;AACnB;AACF,GACF;AAEA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,IAC7B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA;AAAE,GAC3B;AAEA,EAAA,uBACErB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEACZ,aAAA,CAAc,MAAA,KAAW,CAAA,GACxB,gBAAA,GACI,gBAAA,CAAiB,EAAE,MAAM,QAAA,EAAU,aAAA,EAAe,CAAA,mBAClDA,gBAAAA,CAAA,cAAC,gBAAA,EAAA,EAAiB,aAAA,EAA8B,CAAA,mBAEpDA,gBAAAA,CAAA,aAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,SAAA,EAAU,6CAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ;AAAA,KAAA;AAAA,IAEL,cAAc,GAAA,CAAI,CAAC,KAAA,EAAO,UAAA,qBACvBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,MAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACC,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY;AAAA,QAC5B,SAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU;AAAA,OAAA;AAAA,sBAGRA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGAGbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,EAAA;AAAA,QACd,gFAAA;AAAA,QACAuB,OAAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GACd,gEAAA,GACA;AAAA,2BAEJvB,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EAAA,EACbgB,MAAAA,CAAO,KAAA,CAAM,IAAA,EAAM,GAAG,CACzB,CAAA,kBACAhB,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EAAA,EACbgB,MAAAA,CAAO,MAAM,IAAA,EAAM,KAAK,CAC3B,CACF,mBAGAhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAW,EAAA;AAAA,QACf,uBAAA;AAAA,QACAuB,OAAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAK;AAAA,OACzB,EAAA,EACG,YAAA,CAAa,KAAA,CAAM,IAAA,EAAM,cAAc,KAAA,IAAS,OAAA,EAAS,YAAA,EAAc,QAAA,IAAY,UAAU,CAChG,CAAA,kBACAvB,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAA,EACb,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,GAAA,EAAE,KAAA,CAAM,OAAO,MAAA,KAAW,CAAA,GAAK,YAAA,EAAc,WAAA,IAAe,WAAa,YAAA,EAAc,UAAA,IAAc,OAC5H,CACF,CACF,CACF,CAAA;AAAA,sBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,EACV,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,UAAA,qBACtBA,gBAAAA,CAAA,aAAA;AAAA,QAAC,MAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACG,KAAK,KAAA,CAAM,EAAA;AAAA,UACX,OAAA,EAAS,MAAM,YAAA,GAAe,KAAK,CAAA;AAAA,UACnC,SAAA,EAAW,EAAA;AAAA,YACT,mEAAA;AAAA,YACA,gEAAA;AAAA,YACA,4CAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAM,GAAG,EAAA,EAAG;AAAA,UACjC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA;AAAI,SAAA;AAAA,wBAG5BA,gBAAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,iDAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,SAAS,gBAAA;AAAiB;AAAA,SAC5D;AAAA,wBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EAAA,EACV,KAAA,CAAM,MAAA,mBACHA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kFAAA,EAAA,EACb,YAAA,EAAc,MAAA,IAAU,SAC3B,CACF,CAAA,mBAEAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,4BAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAAA,EACbgB,MAAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAO,CAC9B,CAAA,kBACAhB,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA,kBACzCA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAAA,EACb,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,GAAG,CACxC,CACF,CAER,CAAA;AAAA,wBAGAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EAAA,kBACXA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DACbA,gBAAAA,CAAA,cAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qGACT,KAAA,CAAM,KACX,CAAA,kBAEAA,gBAAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sCAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,SAAS,gBAAA;AAAiB;AAAA,SAE9D,CAAA,EAEC,KAAA,CAAM,WAAA,oBACHA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gEACR,KAAA,CAAM,WACX,CAAA,kBAIJA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAA,EACZ,CAAC,KAAA,CAAM,MAAA,oBACNA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,eAAc,CAAA,kBAC/BA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAMgB,MAAAA,CAAO,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA,EAAE,KAAA,EAAIA,MAAAA,CAAO,KAAA,CAAM,KAAK,OAAO,CAAE,CACrE,CAAA,EAGD,MAAM,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAA,oBACrChB,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yDAAA,EAAA,kBACbA,gBAAAA,CAAA,cAACsC,KAAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EAAc,mBAC/BtC,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,GAAA,EAAE,MAAM,MAAA,CAAO,MAAA,KAAW,CAAA,GAAK,YAAA,EAAc,eAAe,QAAA,GAAa,YAAA,EAAc,UAAA,IAAc,OAAS,CAC3I,CAAA,EAGD,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,WAAA,CAAY,MAAA,GAAS,CAAA,oBAC/CA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,eAAc,CAAA,kBACnCA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,KAAA,CAAM,WAAA,CAAY,MAAO,CAClC,CAAA,EAGD,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,UAAU,MAAA,GAAS,CAAA,oBAC3CA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,eAAc,CAAA,kBAC9BA,gBAAAA,CAAA,aAAA,CAAC,cAAM,KAAA,CAAM,SAAA,CAAU,MAAO,CAChC,CAEJ,CACJ,CAAA;AAAA,wBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gGAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAA,kBAC/GA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAC1B,CACF;AAAA,OAEP,CACL;AAAA,KAEP;AAAA,GAGT,CAAA;AAEJ,CAAA;ACpOO,IAAM,eAA4C,CAAC;AAAA,EACxD,WAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAeiC,OAAuB,IAAI,CAAA;AAIhD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,GAAA;AAGlB,EAAA,MAAM,UAAA,GAAa,cAAc,QAAQ,CAAA;AAEzC,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC9B,IAAA,MAAM,QAAA,GAAWM,WAAW,WAAW,CAAA;AAGvC,IAAA,MAAM,YAAA,GAAeL,mBAAAA,CAAoB,KAAA,EAAO,QAAQ,CAAA;AACxD,IAAA,MAAM,eAAA,GAAkBA,mBAAAA,CAAoB,GAAA,EAAK,KAAK,CAAA;AAEtD,IAAA,MAAM,IAAA,GAAQ,eAAe,EAAA,GAAM,SAAA;AACnC,IAAA,MAAM,KAAA,GAAS,kBAAkB,EAAA,GAAM,SAAA;AAEvC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,GAAG,IAAI,CAAA,EAAA,CAAA;AAAA,MACb,OAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAC,CAAA,EAAA;AAAA;AAAA,KAC9B;AAAA,EACF,CAAA;AAEA,EAAA,uBACElC,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,4DAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,iGAAA,EAAA,EAAkG,WAEjH,CAAA,kBACAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EAAA,kBACVA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,SAAS,SAAA,EAAU,EAAA,EACpE,MAAM,GAAA,CAAI,CAAA,IAAA,qBACPA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,kFAAA;AAAA,MACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU,KAAA;AAAA,IAEzBgB,MAAAA,CAAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,QAAA,CAAS,IAAA,EAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,UAAA,EAAY,EAAE,QAAQ;AAAA,GAEzE,CACJ,CACL,CACF,mBAGAhB,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAwC,GAAA,EAAK,YAAA,EAAA,kBACzDA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,EACX,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAY;AACvB,IAAA,MAAM,iBAAiB,MAAA,CAAO,MAAA;AAAA,MAAO,CAAA,CAAA,KACjC,CAAA,CAAE,UAAA,KAAe,QAAA,CAAS,EAAA,IAC1BqB,SAAAA,CAAU,IAAI,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,EAAG,WAAW;AAAA,KAC5C;AAEA,IAAA,uBACIrB,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,QAAA,CAAS,IAAI,SAAA,EAAU,2CAAA,EAAA,kBAE7BA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,mGAAA,EAAA,EACV,SAAS,MAAA,mBACNA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,QAAQ,GAAA,EAAK,QAAA,CAAS,OAAO,SAAA,EAAU,mCAAA,EAAoC,oBAE9FA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGACV,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,EAAE,WAAA,EACpC,CAAA,kBAEJA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EAAA,kBACXA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qBAAA,EAAA,EAAuB,QAAA,CAAS,KAAM,CAAA,kBACtDA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAA,EAAgC,MAAA,EAAK,SAAS,EAAG,CACrE,CACJ,CAAA,kBAGAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,SAAS,SAAA,EAAU,EAAA,EAEnE,MAAM,GAAA,CAAI,CAAA,IAAA,qBACPA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA;AAAU,OAAA;AAAA,MAEzB,CAAC,CAAA,EAAG,EAAA,EAAI,IAAI,EAAE,CAAA,CAAE,IAAI,CAAA,MAAA,KAAU;AAC3B,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,WAAW,CAAA;AACrC,QAAA,QAAA,CAAS,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AACpC,QAAA,MAAM,SAAS,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,CAAA,EAAI,QAAA,CAAS,aAAa,CAAA,CAAA;AAEvD,QAAA,uBACIA,gBAAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACG,GAAA,EAAK,MAAA;AAAA,YACL,EAAA,EAAI,MAAA;AAAA,YACJ,IAAA,EAAM,QAAA;AAAA,YACN,YAAY,QAAA,CAAS,EAAA;AAAA,YACrB,SAAA,EAAU,oGAAA;AAAA,YACV,SAAS,MAAM;AACX,cAAA,eAAA,GAAkB,QAAA,EAAU,SAAS,EAAE,CAAA;AAAA,YAC3C;AAAA;AAAA,SACJ;AAAA,MAER,CAAC;AAAA,KAER,CAAA,EAGA,cAAA,CAAe,GAAA,CAAI,CAAA,KAAA,qBAChBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACG,KAAK,KAAA,CAAM,EAAA;AAAA,QACX,KAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,YAAA,GAAe,KAAK,CAAA;AAAA,QACxB,CAAA;AAAA,QACA,SAAA,EAAU,0JAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACH,GAAG,cAAc,KAAK,CAAA;AAAA,UACtB,eAAA,EAAiB,KAAA,CAAM,KAAA,IAAS,QAAA,CAAS,KAAA,IAAS,gBAAA;AAAA,UAClD,WAAA,EAAa,iBAAA;AAAA,UACb,KAAA,EAAO;AAAA;AACX,OAAA;AAAA,sBAEAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAA,EAAY,MAAM,KAAM;AAAA,KAE9C,CACL,CACJ,CAAA;AAAA,EAER,CAAC,CACJ,CACH,CACF,CAAA;AAEJ,CAAA;ACpJO,IAAM,QAA8B,CAAC;AAAA,EAC1C,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,KAAM;AACJ,EAAA,MAAM,UAAA,GAAaiC,OAAuB,IAAI,CAAA;AAE9C,EAAAR,UAAU,MAAM;AACd,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,YAAY,CAAA;AAAA,IACtD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAGpB,EAAA,uBACEzB,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yHAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,kBAAA;AAAA,MACV,OAAA,EAAS;AAAA;AAAA,GACX,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4LAAA;AAAA,QACA;AAAA;AACF,KAAA;AAAA,IAEC,CAAC,UAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,6HAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CACX,KACH,CAAA,kBACAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,gBAAAA,CAAA,aAAA,CAACwC,CAAAA,EAAA,EAAE,WAAU,SAAA,EAAU,CAAA;AAAA,sBACvBxC,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAU,OAAK;AAAA,KAEnC,CAAA;AAAA,oBAEFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,CAAC,UAAA,IAAc,KAAK,CAAA,EAAA,EAC9D,QACH;AAAA,GAEJ,CAAA;AAEJ,CAAA;AChDA,IAAM,aAAA,GAAgB;AAAA,EACpB,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAA;AAGA,IAAM,kBAAA,GAAqB,CAAC,CAAA,KAAW;AAAA,EACrC,EAAE,KAAA,EAAO,CAAA,EAAO,KAAA,EAAO,EAAE,cAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,CAAA,EAAO,KAAA,EAAO,EAAE,YAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,EAAA,EAAO,KAAA,EAAO,EAAE,aAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,EAAA,EAAO,KAAA,EAAO,EAAE,aAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,EAAA,EAAO,KAAA,EAAO,EAAE,aAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,EAAA,EAAO,KAAA,EAAO,EAAE,aAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,GAAA,EAAO,KAAA,EAAO,EAAE,cAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,IAAA,EAAO,KAAA,EAAO,EAAE,YAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,IAAA,EAAO,KAAA,EAAO,EAAE,aAAA,EAAgB;AAAA,EACzC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,EAAE,aAAA;AAC3B,CAAA;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AAEJ,EAAA,MAAM,OAAA,GAAU,kBAAkB,QAAQ,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIwB,SAAqC,QAAQ,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAA2C,SAAS,CAAA;AAEtF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAAiC;AAAA,IAC/D,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,sBAAW,IAAA,EAAK;AAAA,IAChB,GAAA,sBAAS,IAAA,EAAK;AAAA,IACd,MAAA,EAAQ,KAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,SAAA,GAAY,CAAC,CAAA,EAAG,EAAA;AAAA,IAC5B,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY,MAAA;AAAA,IACZ,aAAa,EAAC;AAAA,IACd,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,mBAAA,EAAqB;AAAA,GACpF,CAAA;AAED,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1E,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1E,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtE,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAqBS,OAAyB,IAAI;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIT,QAAAA,CAAmB,EAAE,CAAA;AAEjE,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAA,CAAQ,MAAM,CAAA;AACd,QAAA,WAAA,CAAY;AAAA,UACV,GAAG,KAAA;AAAA,UACH,KAAA,EAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,UAC3B,GAAA,EAAK,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAAA,UACvB,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,UACnC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,CAAC,EAAE,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,qBAAqB;AAAA,SACvG,CAAA;AACD,QAAA,iBAAA,CAAkB,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,QAAA,MAAM,KAAA,GAAQ,WAAA,oBAAe,IAAI,IAAA,EAAK;AACtC,QAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,KAAK,CAAA;AAC1B,QAAA,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS,GAAI,CAAC,CAAA;AAEjC,QAAA,WAAA,CAAY;AAAA,UACV,KAAA,EAAO,EAAA;AAAA,UACP,WAAA,EAAa,EAAA;AAAA,UACb,QAAA,EAAU,EAAA;AAAA,UACV,KAAA;AAAA,UACA,GAAA;AAAA,UACA,MAAA,EAAQ,KAAA;AAAA,UACR,KAAA,EAAO,SAAA;AAAA,UACP,UAAA,EAAY,SAAA,GAAY,CAAC,CAAA,EAAG,EAAA;AAAA,UAC5B,aAAa,EAAC;AAAA,UACd,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,mBAAA,EAAqB;AAAA,SACpF,CAAA;AACD,QAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,SAAS,CAAC,CAAA;AAE1C,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAkB;AACrC,IAAA,iBAAA,CAAkB,CAAA,IAAA,KAAQ;AACtB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,KAAK,IAC/B,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,KAAK,CAAA,GAC5B,CAAC,GAAG,MAAM,KAAK,CAAA;AACrB,MAAA,WAAA,CAAY,WAAS,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,WAAU,CAAE,CAAA;AACpD,MAAA,OAAO,SAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,IAAI,aAAa,QAAA,CAAS,KAAA;AAC1B,IAAA,IAAI,QAAA,CAAS,cAAc,SAAA,EAAW;AAClC,MAAA,MAAM,cAAc,SAAA,CAAU,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,SAAS,UAAU,CAAA;AACpE,MAAA,IAAI,aAAa,KAAA,EAAO;AACpB,QAAA,UAAA,GAAa,WAAA,CAAY,KAAA;AAAA,MAC7B;AAAA,IACJ;AAEA,IAAA,MAAA,CAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,KAAA,EAAO,UAAA;AAAA,MACP,IAAI,KAAA,EAAO;AAAA,KACZ,CAAA;AACD,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,KAAA,EAAO,MAAM,QAAA,EAAU;AACzB,MAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AACjB,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA2B;AACrD,IAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,IAAA,OAAOT,MAAAA,CAAO,MAAM,oBAAoB,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAwB,KAAA,KAAkB;AAClE,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AAE3B,IAAA,IAAI,UAAU,OAAA,EAAS;AACnB,MAAA,MAAM,WAAW,QAAA,CAAS,GAAA,CAAK,SAAQ,GAAI,QAAA,CAAS,MAAO,OAAA,EAAQ;AACnE,MAAA,WAAA,CAAY,CAAA,IAAA,MAAS;AAAA,QACjB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,IAAA;AAAA,QACP,KAAK,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,KAAY,QAAQ;AAAA,OAC3C,CAAE,CAAA;AAAA,IACN,CAAA,MAAO;AACH,MAAA,IAAI,IAAA,GAAO,SAAS,KAAA,EAAQ;AACvB,QAAA,WAAA,CAAY,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,OAAO,IAAA,EAAM,GAAA,EAAK,MAAK,CAAE,CAAA;AAAA,MAC9D,CAAA,MAAO;AACF,QAAA,WAAA,CAAY,WAAS,EAAE,GAAG,IAAA,EAAM,GAAA,EAAK,MAAK,CAAE,CAAA;AAAA,MACjD;AAAA,IACJ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,EAAiB,KAAA,KAAkB;AACtD,IAAA,MAAM,WAAA,GAA6B;AAAA,MACjC,EAAA,EAAI,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAAA,MAC1C,IAAA,EAAM,cAAA;AAAA,MACN,IAAA,EAAM,OAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,WAAA,CAAY,CAAA,IAAA,MAAS;AAAA,MACnB,GAAG,IAAA;AAAA,MACH,WAAW,CAAC,GAAI,KAAK,SAAA,IAAa,IAAK,WAAW;AAAA,KACpD,CAAE,CAAA;AACF,IAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,EAAA,KAAe;AACrC,IAAA,WAAA,CAAY,CAAA,IAAA,MAAS;AAAA,MACnB,GAAG,IAAA;AAAA,MACH,WAAW,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,EAAE;AAAA,KACpD,CAAE,CAAA;AAAA,EACJ,CAAA;AAwBA,EAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,KAAgC;AACtD,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,oBAAA,GAAuB,UAAA,CAAW,IAAI,CAAA,EAAG,EAAC,IAAA,EAAM,YAAA,EAAa,CAAA;AACpF,IAAA,OAAA,CAAQ,IAAA,GAAO,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACvC,IAAA,OAAA,CAAQ,WAAW,UAAA,CAAW,IAAA;AAC9B,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AACjC,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,CAAC,QAAA,CAAS,KAAA,IAAS,CAAC,QAAA,CAAS,KAAK,OAAO,EAAA;AAC7C,IAAA,MAAM,IAAA,GAAOkB,mBAAAA,CAAoB,QAAA,CAAS,GAAA,EAAK,SAAS,KAAK,CAAA;AAC7D,IAAA,IAAI,IAAA,GAAO,EAAA,EAAI,OAAO,CAAA,EAAG,IAAI,CAAA,IAAA,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA;AAClC,IAAA,MAAM,gBAAgB,IAAA,GAAO,EAAA;AAC7B,IAAA,IAAI,aAAA,KAAkB,CAAA,EAAG,OAAO,CAAA,EAAG,KAAK,CAAA,GAAA,CAAA;AACxC,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,IAAA,EAAO,aAAa,CAAA,IAAA,CAAA;AAAA,EACrC,CAAA;AAGA,EAAA,MAAM,cAAA,GAAiB,sBACrBlC,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,CAAA,wBAAA,EAA2B,KAAA,EAAO,KAAA,IAAS,SAAS,CAAA,wBAAA;AAAA;AAClE,KAAA;AAAA,oBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,EAAO,SAAS,SAAA;AAAU;AAAA,KACtD,kBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oEAAA,EAAA,EACb,SAAA,EAAW,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,KAAA,EAAO,UAAU,CAAA,EAAG,KAAA,IAAS,OAC9D,CACF,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,QAC7B,SAAA,EAAU,kGAAA;AAAA,QACV,KAAA,EAAM;AAAA,OAAA;AAAA,sBAENA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,WAAU,SAAA,EAAU;AAAA,KAC7B,kBACAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU,oGAAA;AAAA,QACV,KAAA,EAAM;AAAA,OAAA;AAAA,sBAENA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,WAAU,SAAA,EAAU;AAAA,KAC9B,kBACAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAU,kGAAA;AAAA,QACV,KAAA,EAAM;AAAA,OAAA;AAAA,sBAENA,gBAAAA,CAAA,aAAA,CAACwC,CAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA,KAE3B,CACF,CAAA;AAAA,oBAGAxC,iBAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,uDAAA,EAAA,EACX,KAAA,EAAO,KAAA,IAAS,YAAA,CAAa,OAChC,CAAA;AAAA,oBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0GAAA,EAAA,kBACbA,iBAAA,aAAA,CAACyC,QAAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC,CAAA,kBACpDzC,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAA,EACb,OAAO,KAAA,IAASgB,MAAAA,CAAO,IAAI,IAAA,CAAK,MAAM,KAAK,CAAA,EAAG,YAAY,CAC7D,CACF,mBACAhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0GAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC0C,OAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA,kBACjD1C,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,aAAA,EAAA,EACb,OAAO,KAAA,IAASgB,MAAAA,CAAO,IAAI,IAAA,CAAK,MAAM,KAAK,CAAA,EAAG,OAAO,CAAA,EAAE,YAAI,KAAA,EAAO,GAAA,IAAOA,MAAAA,CAAO,IAAI,KAAK,KAAA,CAAM,GAAG,GAAG,OAAO,CAC/G,CACF,CACF;AAAA,GACF,kBAGAhB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4CAAA,EAAA,EAEZ,KAAA,EAAO,QAAA,oBACNA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEV3C,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC4C,MAAAA,EAAA,EAAO,SAAA,EAAU,wBAAuB,CAC3C,CAAA;AAAA,oBACA5C,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,QAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAuC,KAAA,CAAM,QAAS,CAAA,kBACnEA,gBAAAA,CAAA,aAAA,CAAC,OAAE,SAAA,EAAU,sCAAA,EAAA,EAAwC,YAAA,CAAa,iBAAkB,CACtF,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,WAAU,oFAAA,EAAqF;AAAA,GAC/G,EAID,OAAO,MAAA,IAAU,KAAA,CAAM,OAAO,MAAA,GAAS,CAAA,oBACtCA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEV3C,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,kBACbA,iBAAA,aAAA,CAACsC,KAAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA,kBACjDtC,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qCAAA,EAAA,EACb,KAAA,CAAM,OAAO,MAAA,EAAO,GAAA,EAAE,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,GAAI,YAAA,CAAa,cAAc,YAAA,CAAa,UAC3F,CACF,CACF,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAA,EACZ,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBACxBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,KAAA;AAAA,QACL,SAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,gBAAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,wFAAA;AAAA,UACV,OAAO,EAAE,eAAA,EAAiB,CAAA,IAAA,EAAO,KAAA,GAAQ,EAAE,CAAA,WAAA,CAAA;AAAc,SAAA;AAAA,QAExD,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA;AAAY,OACxB;AAAA,sBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAA,EAAA,EAAuC,KAAA,CAAM,MAAM,GAAG,CAAA,CAAE,CAAC,CAAE,CAAA,kBACxEA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAA,EAAA,EAA0C,KAAM,CAC/D;AAAA,KAEH,CACH;AAAA,GACF,EAID,OAAO,SAAA,IAAa,KAAA,CAAM,UAAU,MAAA,GAAS,CAAA,oBAC5CA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,MACzB,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEV3C,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC6C,IAAAA,EAAA,EAAK,SAAA,EAAU,0BAAyB,CAC3C,CAAA;AAAA,oBACA7C,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAA,EACZ,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,qBACnBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAK,QAAA,CAAS,EAAA;AAAA,QACd,SAAA,EAAU;AAAA,OAAA;AAAA,MAET,QAAA,CAAS,KAAA,IAAS,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,WAAA;AAAA,KAEtC,CACH;AAAA,GACF,EAID,KAAA,EAAO,WAAA,oBACNA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEV3C,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,SAAA,EAAA,EAAU,WAAU,+BAAA,EAAgC,CAAA,kBACrDA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EAAA,EAAuC,YAAA,CAAa,KAAM,CAC5E,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,wHAAA,EAAA,EACZ,MAAM,WACT;AAAA,GACF,EAID,OAAO,WAAA,IAAe,KAAA,CAAM,YAAY,MAAA,GAAS,CAAA,oBAChDA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MAC5B,UAAA,EAAY,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,MACzB,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEV3C,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC8C,SAAAA,EAAA,EAAU,WAAU,+BAAA,EAAgC,CAAA,kBACrD9C,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EAAA,EAAuC,YAAA,CAAa,WAAY,CAClF,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAA,EACZ,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAA,GAAA,qBACrBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,GAAA,CAAI,EAAA;AAAA,QACT,OAAA,EAAS,MAAM,cAAA,CAAe,GAAG,CAAA;AAAA,QACjC,SAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAuB,CACzC,CAAA;AAAA,sBACAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAgD,GAAA,CAAI,IAAK,CAAA,kBACtEA,gBAAAA,CAAA,aAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAA,EAAiC,GAAA,CAAI,IAAK,CACzD,CAAA;AAAA,sBACAA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,WAAU,oFAAA,EAAqF;AAAA,KAE5G,CACH;AAAA,GAGN,CACF,CAAA;AAIF,EAAA,MAAM,cAAA,GAAiB,sBACrBA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,SAAA,EAAU,iEAAA,EAAA,kBAEtCA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,oBAAA,CAAqB,CAAC,iBAAiB,CAAA;AAAA,MACtD,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0EAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,iBAAiB,QAAA,CAAS,KAAA;AAAA,UAC1B,SAAA,EAAW,CAAA,uCAAA,EAA0C,QAAA,CAAS,KAAK,CAAA,EAAA;AAAA;AACrE;AAAA,KACF;AAAA,IACC,iBAAA,oBACCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iIAAA,EAAA,EACZ,aAAA,CAAc,GAAA,CAAI,CAAA,KAAA,qBACjBA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,KAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACb,UAAA,WAAA,CAAY,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,OAAM,CAAE,CAAA;AACxC,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,QAC5B,CAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA,QAAA,CAAS,UAAU,KAAA,IAAS;AAAA,SAC9B;AAAA,QACA,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,EAAO,KAAA;AAAa;AAAA,KAEjD,CACH;AAAA,qBAGJA,gBAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,uCAAA,EAAA,EACX,IAAA,KAAS,MAAA,GAAS,YAAA,CAAa,YAAY,YAAA,CAAa,QAC3D,CACF,CAAA,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAACwC,CAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA,GAE3B,CAAA,kBAGAxC,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAA,kBAEbA,iBAAA,aAAA,CAAC,KAAA,EAAA,IAAA,kBACCA,gBAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAU,qMAAA;AAAA,MACV,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,QAAA,EAAU,CAAA,CAAA,KAAK,WAAA,CAAY,EAAE,GAAG,UAAU,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,MACjE,aAAa,YAAA,CAAa;AAAA;AAAA,GAE9B,CAAA,kBAGAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6EAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC0C,KAAAA,EAAA,EAAM,SAAA,EAAU,sBAAA,EAAuB,CAC1C,CAAA,kBACA1C,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,KAAA,EAAA,IAAA,kBACCA,gBAAAA,CAAA,aAAA,CAAC,WAAM,SAAA,EAAU,qFAAA,EAAA,EAAuF,aAAa,KAAM,CAAA,kBAC3HA,gBAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,gBAAA;AAAA,MACL,SAAA,EAAU,8KAAA;AAAA,MACV,KAAA,EAAO,kBAAA,CAAmB,QAAA,CAAS,KAAK,CAAA;AAAA,MACxC,UAAU,CAAA,CAAA,KAAK,gBAAA,CAAiB,OAAA,EAAS,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,GAE3D,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,6BACCA,gBAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAU,qFAAA,EAAA,EAAuF,YAAA,CAAa,GAAI,CAAA,kBACzHA,gBAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,gBAAA;AAAA,MACL,SAAA,EAAU,8KAAA;AAAA,MACV,KAAA,EAAO,kBAAA,CAAmB,QAAA,CAAS,GAAG,CAAA;AAAA,MACtC,UAAU,CAAA,CAAA,KAAK,gBAAA,CAAiB,KAAA,EAAO,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,GAEzD,CACF,CACF,CAAA,EAGC,eAAA,EAAgB,oBACfA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uEAAA,EAAA,EACb,eAAA,EACH,CACF,CAAA,kBAIFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC6C,IAAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,CAAA,kBAChD7C,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAA,EAAuC,YAAA,CAAa,SAAU,CAChF,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,yBAAA,CAA0B,CAAC,sBAAsB,CAAA;AAAA,MAChE,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAACmC,IAAAA,EAAA,EAAK,WAAU,aAAA,EAAc,CAAA;AAAA,IAC7B,YAAA,CAAa;AAAA,GAChB,EACC,sBAAA,oBACCnC,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAqB,OAAA,EAAS,MAAM,yBAAA,CAA0B,KAAK,CAAA,EAAG,CAAA,kBACrFA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EAAA,EACZ,kBAAA,CAAmB,YAAY,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,qBACpCA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAK,MAAA,CAAO,KAAA;AAAA,MACZ,IAAA,EAAK,QAAA;AAAA,MACL,SAAS,MAAM,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,MACrD,SAAA,EAAU;AAAA,KAAA;AAAA,IAET,MAAA,CAAO;AAAA,GAEX,CACH,CACF,CAEJ,CACF,CAAA,EACC,QAAA,CAAS,SAAA,IAAa,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,qBACjDA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAA,EACZ,SAAS,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,qBACtBA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAK,QAAA,CAAS,EAAA;AAAA,MACd,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,WAAU,4BAAA,EAA6B,CAAA;AAAA,oBACjDA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,wDAAA,EAAA,EACb,SAAS,KACZ,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,cAAA,CAAe,QAAA,CAAS,EAAE,CAAA;AAAA,QACzC,SAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,gBAAAA,CAAA,aAAA,CAACwC,CAAAA,EAAA,EAAE,WAAU,wBAAA,EAAyB;AAAA;AACxC,GAEH,CACH,CAEJ,mBAGAxC,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,kBACbA,iBAAA,aAAA,CAACsC,KAAAA,EAAA,EAAM,SAAA,EAAU,iCAAgC,CAAA,kBACjDtC,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qCAAA,EAAA,EAAuC,YAAA,CAAa,MAAO,CAC7E,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,uBAAA,CAAwB,CAAC,oBAAoB,CAAA;AAAA,MAC5D,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI,6BAAA,GAAgC,uBAAA,EAAA,EAC1E,cAAA,CAAe,MAAA,GAAS,CAAA,GACrB,GAAG,cAAA,CAAe,MAAM,CAAA,CAAA,EAAI,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI,YAAA,CAAa,WAAA,GAAc,YAAA,CAAa,UAAU,CAAA,CAAA,GAC1G,YAAA,CAAa,SACnB,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC0B,WAAAA,EAAA,EAAY,WAAW,EAAA,CAAG,oDAAA,EAAsD,oBAAA,IAAwB,YAAY,CAAA,EAAG;AAAA,GAC1H,EAEC,oBAAA,oBACC1B,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,OAAA,EAAS,MAAM,uBAAA,CAAwB,KAAK,CAAA,EAAG,CAAA,kBACnFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4GAAA,EAAA,EACZ,UAAA,CAAW,GAAA,CAAI,CAAA,KAAA,qBACdA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAA;AAAA,MACL,SAAA,EAAU,oFAAA;AAAA,MACV,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK;AAAA,KAAA;AAAA,oBAEhCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,MACd,6EAAA;AAAA,MACA,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,GAAI,2BAAA,GAA8B;AAAA,KACjE,EAAA,EACG,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,oBAAKA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,iCAAA,EAAkC,CACxF,CAAA;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wFAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,IAAA,EAAO,WAAW,OAAA,CAAQ,KAAK,CAAA,GAAI,EAAE,CAAA,WAAA,CAAA;AAAc,OAAA;AAAA,MAE5E,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA;AAAY,KACxB,kBACAA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,SAAA,EAAA,EAAW,KAAM,CACnC;AAAA,GAEH,CACH,CACF,CAEJ,CAAA,EAEC,cAAA,CAAe,SAAS,CAAA,oBACvBA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,2BAAA,EAAA,EACZ,eAAe,GAAA,CAAI,CAAA,KAAA,qBAClBA,gBAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAA;AAAA,MACL,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wFAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,IAAA,EAAO,WAAW,OAAA,CAAQ,KAAK,CAAA,GAAI,EAAE,CAAA,WAAA,CAAA;AAAc,OAAA;AAAA,MAE5E,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA;AAAY,KACxB;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAA,EAAuC,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAE,CAAA;AAAA,oBAC3EA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,QAChC,SAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,gBAAAA,CAAA,aAAA,CAACwC,CAAAA,EAAA,EAAE,WAAU,+BAAA,EAAgC;AAAA;AAC/C,GAEH,CACH,CAEJ,mBAGAxC,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gGACbA,gBAAAA,CAAA,cAAC4C,MAAAA,EAAA,EAAO,WAAU,wCAAA,EAAyC,CAAA,kBAC3D5C,gBAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,+FAAA;AAAA,MACV,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,KAAA,EAAO,SAAS,QAAA,IAAY,EAAA;AAAA,MAC5B,QAAA,EAAU,CAAA,CAAA,KAAK,WAAA,CAAY,EAAE,GAAG,UAAU,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA,GAExE,CAAA,kBAGAA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACbA,gBAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,+BAAA,EAAgC,CAAA,kBACrDA,iBAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAA,EAAuC,YAAA,CAAa,KAAM,CAC5E,CAAA,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,uNAAA;AAAA,MACV,aAAa,YAAA,CAAa,cAAA;AAAA,MAC1B,KAAA,EAAO,SAAS,WAAA,IAAe,EAAA;AAAA,MAC/B,QAAA,EAAU,CAAA,CAAA,KAAK,WAAA,CAAY,EAAE,GAAG,UAAU,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA,GAE3E,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,4EAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAO,SAAA,EAAU,wCAAA,EAAyC,CAAA,kBAC3DA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iFAAA;AAAA,MACV,KAAA,EAAO,QAAA,CAAS,UAAA,EAAY,IAAA,IAAQ,EAAA;AAAA,MACpC,UAAU,CAAA,CAAA,KAAK;AACb,QAAA,IAAI,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,EAAI;AACzB,UAAA,WAAA,CAAY,EAAE,GAAG,QAAA,EAAU,UAAA,EAAY,QAAW,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,WAAA,CAAY;AAAA,YACV,GAAG,QAAA;AAAA,YACH,UAAA,EAAY;AAAA,cACV,IAAA,EAAM,EAAE,MAAA,CAAO,KAAA;AAAA,cACf,QAAA,EAAU;AAAA;AACZ,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,KAAA;AAAA,oBAEAA,gBAAAA,CAAA,aAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EAAA,EAAI,aAAa,aAAc,CAAA;AAAA,oBAC7CA,gBAAAA,CAAA,aAAA,CAAC,YAAO,KAAA,EAAM,OAAA,EAAA,EAAS,aAAa,KAAM,CAAA;AAAA,oBAC1CA,gBAAAA,CAAA,aAAA,CAAC,YAAO,KAAA,EAAM,QAAA,EAAA,EAAU,aAAa,MAAO,CAAA;AAAA,oBAC5CA,gBAAAA,CAAA,aAAA,CAAC,YAAO,KAAA,EAAM,SAAA,EAAA,EAAW,aAAa,OAAQ,CAAA;AAAA,oBAC9CA,gBAAAA,CAAA,aAAA,CAAC,YAAO,KAAA,EAAM,QAAA,EAAA,EAAU,aAAa,MAAO;AAAA,GAEhD,CAAA,kBAGAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,sFAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACbA,gBAAAA,CAAA,cAAC,GAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,CAAA,kBAC/CA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA2B,YAAA,CAAa,QAAS,CACnE,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,yBAAA,CAA0B,CAAC,sBAAsB,CAAA;AAAA,MAChE,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sBAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,SAAA,EAAW,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,QAAA,CAAS,UAAU,CAAA,EAAG,KAAA,IAAS,SAAA;AAAU;AAAA,KACnG;AAAA,oBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,aAAA,EAAA,EAAe,SAAA,EAAW,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,EAAA,KAAO,QAAA,CAAS,UAAU,CAAA,EAAG,SAAS,QAAS,CAAA;AAAA,oBACrGA,gBAAAA,CAAA,aAAA,CAAC0B,WAAAA,EAAA,EAAY,WAAU,mCAAA,EAAoC;AAAA,GAC7D,EAEC,sBAAA,oBACC1B,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,OAAA,EAAS,MAAM,yBAAA,CAA0B,KAAK,CAAA,EAAG,CAAA,kBACrFA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0GAAA,EAAA,EACZ,SAAA,EAAW,GAAA,CAAI,CAAA,GAAA,qBACdA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAK,GAAA,CAAI,EAAA;AAAA,MACT,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAU,sFAAA;AAAA,MACV,SAAS,MAAM;AACb,QAAA,WAAA,CAAY;AAAA,UACV,GAAG,QAAA;AAAA,UACH,YAAY,GAAA,CAAI,EAAA;AAAA,UAChB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,QAAA,CAAS;AAAA,SAC9B,CAAA;AACD,QAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,MACjC;AAAA,KAAA;AAAA,oBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAuB,KAAA,EAAO,EAAE,eAAA,EAAiB,GAAA,CAAI,KAAA,EAAM,EAAG,CAAA;AAAA,oBAC7EA,gBAAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EAAA,EAAkB,IAAI,KAAM,CAAA;AAAA,IAC3C,QAAA,CAAS,eAAe,GAAA,CAAI,EAAA,oBAAMA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sBAAA,EAAuB;AAAA,GAE9E,CACH,CACF,CAEJ,CACF,CACF,CACF,CAAA,kBAGAA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gGACZ,IAAA,KAAS,MAAA,oBACRA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,oBAEVA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,IAC3B,YAAA,CAAa;AAAA,GAChB,EAED,IAAA,KAAS,QAAA,oBAAYA,iBAAA,aAAA,CAAC,KAAA,EAAA,IAAI,CAAA,kBAC3BA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,IAET,YAAA,CAAa;AAAA,GAChB,kBACAA,gBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAU;AAAA,KAAA;AAAA,IAET,IAAA,KAAS,MAAA,GAAS,YAAA,CAAa,WAAA,GAAc,YAAA,CAAa;AAAA,GAE/D,CACF,CACF,CAAA;AAGF,EAAA,uBACEA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAM,QAAgB,OAAA,EAAkB,UAAA,EAAU,MAAC,SAAA,EAAU,qDAAA,EAAA,kBAC5DA,gBAAAA,CAAA,aAAA,CAAC,mBAAgB,IAAA,EAAK,MAAA,EAAA,EACnB,SAAS,MAAA,IAAU,KAAA,mBAClBA,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,GAAA,EAAI,MAAA;AAAA,MACJ,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA;AAAK,KAAA;AAAA,IAE5B,cAAA;AAAe,GAClB,mBAEA3C,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,GAAA,EAAI,MAAA;AAAA,MACJ,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA;AAAK,KAAA;AAAA,IAE5B,cAAA;AAAe,GAGtB,CACF,CAAA;AAEJ,CAAA;ACt2BO,IAAM,QAAA,GAA0E,CAAC,EAAE,SAAA,EAAW,OAAM,qBACzG3C,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,GAAG,KAAA,EAAc,CAAA;AAI7E,IAAM,iBAAA,GAA8B,sBACzCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EAAA,kBAEbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,wDAAA,EAAA,EACZ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACjCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,SAAA,EAAU,qFACrBA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,CACxC,CACD,CACH,CAAA,kBAEAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAAA,EACZ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,sBAClCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,CAAA,EAAG,WAAU,sDAAA,EAAA,kBACrBA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,gBAAe,CAAA,kBACnCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eACZ,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,oBAAOA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAS,SAAA,EAAU,uBAAA,EAAwB,CAAA,EACnE,IAAA,CAAK,MAAA,KAAW,GAAA,oBAAOA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,wBAAuB,CACrE,CACF,CACD,CACH,CACF,CAAA;AAIK,IAAM,mBAA6B,sBACxCA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,0EAAA,EAAA,kBAEbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAS,WAAU,kBAAA,EAAmB,CACzC,mBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,EACZ,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA,qBACjCA,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,CAAA,EAAG,SAAA,EAAU,iEAAA,EAAA,kBACrBA,gBAAAA,CAAA,aAAA,CAAC,YAAS,SAAA,EAAU,sBAAA,EAAuB,mBAC3CA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,WAAU,4BAAA,EAA6B,CACnD,CACD,CACH,CACF,mBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EAAc,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,sBAC5CA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EAAA,EACZ,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClCA,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,CAAA,EAAG,SAAA,EAAU,mBAAA,EAAA,kBACrBA,gBAAAA,CAAA,aAAA,CAAC,YAAS,SAAA,EAAU,4CAAA,EAA6C,CACnE,CACD,CACH,CAAA,kBACAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EAAA,EACZ,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,EAAE,GAAA,CAAI,CAAC,CAAA,EAAG,MAAA,qBACjCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAQ,SAAA,EAAU,oDAAA,EAAA,EACzB,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC+C,EAAAA,EAAG,MAAA,qBAClC/C,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAU,kDAAA,EAAmD,CAChF,CAAA,EAEA,IAAA,CAAK,QAAO,GAAI,GAAA,oBACfA,gBAAAA,CAAA,aAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,qBAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,GAAA,EAAK,GAAG,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,MACvC,IAAA,EAAM,KAAA;AAAA,MACN,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,GAAG,EAAA,GAAK,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAG,CAAC,CAAA,EAAA;AAAA;AACjD;AACF,CAEJ,CACD,CACH,CACF,CACF,CAAA;AAIK,IAAM,eAAA,GAA4B,sBACvCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8FAEbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFACbA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAS,SAAA,EAAU,kBAAA,EAAmB,CACzC,CAAA,kBAEAA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EAAc,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,sBAC5CA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CACZ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA,qBAClCA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAK,CAAA,EAAG,SAAA,EAAU,uCACrBA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAS,SAAA,EAAU,gEAA+D,CACrF,CACD,CACH,CAAA,kBACAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACZ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClCA,gBAAAA,CAAA,aAAA,CAAC,SAAI,GAAA,EAAK,CAAA,EAAG,WAAU,kDAAA,EAAmD,CAC3E,CAAA,kBAEDA,gBAAAA,CAAA,aAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,oCAAA;AAAA,IACV,KAAA,EAAO,EAAE,GAAA,EAAK,OAAA,EAAS,QAAQ,OAAA;AAAQ;AACzC,CAAA,kBACAA,gBAAAA,CAAA,aAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,oCAAA;AAAA,IACV,KAAA,EAAO,EAAE,GAAA,EAAK,OAAA,EAAS,QAAQ,MAAA;AAAO;AACxC,CACF,CACF,CACF,CAAA;AAIK,IAAM,kBAAA,GAA+B,sBAC1CA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,EACZ,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,2BACjCA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,GAAA,EAAK,0BACRA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,mBACpCA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,EACZ,MAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,CAAC,CAAA,EAAG,EAAE,GAAA,CAAI,CAAC+C,EAAAA,EAAG,QAAA,qBACjE/C,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,SAAA,EAAU,oDAAA,EAAA,kBAC5BA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,sBAAA,EAAuB,CAAA,kBAC3CA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EAAA,kBACbA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,CAAA,kBAChCA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,CAClC,CACF,CACD,CACH,CACF,CACD,CACH,CACF,CAAA;AC9GK,IAAM,mBAAoD,CAAC;AAAA,EAChE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUiC,OAAuB,IAAI,CAAA;AAG3C,EAAAR,UAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC1C,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,IACpE;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAGtB,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAC,OAAA,CAAQ,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAClE,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AAAA,MAC3D,GAAG,CAAC,CAAA;AACJ,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,IAC3E;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU,OAAO,IAAA;AAEhC,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,GAAI,SAAS,CAAC;AAAA,MACZ,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,cAAc,IAAA,IAAQ,MAAA;AAAA,MAC7B,sBAAMzB,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,WAAU,SAAA,EAAU,CAAA;AAAA,MACjC,SAAS,MAAM;AACb,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,KACD,IAAI,EAAC;AAAA,IACN,GAAI,cAAc,CAAC;AAAA,MACjB,EAAA,EAAI,WAAA;AAAA,MACJ,KAAA,EAAO,cAAc,SAAA,IAAa,WAAA;AAAA,MAClC,sBAAMA,gBAAAA,CAAA,cAACgD,IAAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,MAChC,SAAS,MAAM;AACb,QAAA,WAAA,CAAY,KAAK,CAAA;AACjB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,KACD,IAAI,EAAC;AAAA,IACN,GAAG,aAAA;AAAA,IACH,GAAI,WAAW,CAAC;AAAA,MACd,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,cAAc,MAAA,IAAU,QAAA;AAAA,MAC/B,sBAAMhD,gBAAAA,CAAA,cAACiD,MAAAA,EAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,MAClC,SAAS,MAAM;AACb,QAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AACjB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,IAAI;AAAC,GACR;AAGA,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAG,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG,MAAA,CAAO,aAAa,GAAG,CAAA;AAAA,IAC/C,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,OAAO,WAAA,IAAe,OAAA,CAAQ,MAAA,GAAS,EAAA,GAAK,EAAA,CAAG;AAAA,GACzE;AAEA,EAAA,uBACEjD,gBAAAA,CAAA,aAAA,CAACkD,eAAAA,EAAA,IAAA,kBACClD,gBAAAA,CAAA,aAAA;AAAA,IAAC2C,MAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,EAAA,EAAG;AAAA,MAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,EAAA,EAAG;AAAA,MACvC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,MAC9C,SAAA,EAAU,6GAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,MAAM,gBAAA,CAAiB,CAAA;AAAA,QACvB,KAAK,gBAAA,CAAiB;AAAA;AACxB,KAAA;AAAA,oBAGA3C,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mCAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,SAAS,gBAAA;AAAiB;AAAA,KAC5D,kBACAA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8CAAA,EAAA,EACb,KAAA,CAAM,KACT,CACF,CACF,CAAA;AAAA,oBAGAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EAAA,EACZ,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBACpBA,gBAAAA,CAAA,cAACA,gBAAAA,CAAM,QAAA,EAAN,EAAe,GAAA,EAAK,MAAA,CAAO,EAAA,EAAA,EACzB,KAAA,GAAQ,CAAA,IAAK,OAAO,OAAA,KAAY,QAAA,oBAC/BA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,CAAA,kBAEvCA,gBAAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,SAAA,EAAW,EAAA;AAAA,UACT,oEAAA;AAAA,UACA,OAAO,QAAA,IAAY,+BAAA;AAAA,UACnB,MAAA,CAAO,OAAA,KAAY,QAAA,GACf,yEAAA,GACA;AAAA;AACN,OAAA;AAAA,MAEC,MAAA,CAAO,IAAA;AAAA,sBACRA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAM,OAAO,KAAM;AAAA,KAExB,CACD,CACH;AAAA,GAEJ,CAAA;AAEJ,CAAA;AAGO,IAAM,sBAAsB,MAAM;AACvC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIwB,QAAAA,CAGnC,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAElC,EAAA,MAAM,eAAA,GAAkBO,WAAAA,CAAY,CAAC,KAAA,EAAsB,CAAA,KAAwB;AACjF,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,cAAA,CAAe;AAAA,MACb,KAAA;AAAA,MACA,UAAU,EAAE,CAAA,EAAG,EAAE,OAAA,EAAS,CAAA,EAAG,EAAE,OAAA;AAAQ,KACxC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,YAAY,MAAM;AACzC,IAAA,cAAA,CAAe,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,MAAM,CAAA;AAAA,EAChD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,kBAAkB,WAAA,CAAY,KAAA;AAAA,IAC9B,qBAAqB,WAAA,CAAY,QAAA;AAAA,IACjC,eAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;;AC9LO,SAAS,WAAW,KAAA,EAA8B;AACvD,EAAA,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA;AAGtB,EAAA,IAAI,MAAM,UAAA,CAAW,GAAG,KAAK,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,EAAG;AAC7D,IAAA,IAAI,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC9B,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,MAAA,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,UAAQ,IAAA,GAAO,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE3B,IAAA,CAAA,GAAI,SAAS,CAAA,CAAE,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AACtC,IAAA,CAAA,GAAI,SAAS,CAAA,CAAE,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AACtC,IAAA,CAAA,GAAI,SAAS,CAAA,CAAE,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAAA,EACxC,CAAA,MAAA,IAES,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,EAAG;AAChC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,GAAG,OAAO,IAAA;AACvC,IAAA,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,GAAA;AACzB,IAAA,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,GAAA;AACzB,IAAA,CAAA,GAAI,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,GAAA;AAAA,EAC3B,CAAA,MACK;AACH,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAA,CAAK,MAAM,GAAA,IAAO,CAAA;AAEtB,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,MAAM,IAAI,GAAA,GAAM,GAAA;AAChB,IAAA,CAAA,GAAI,IAAI,GAAA,GAAM,CAAA,IAAK,IAAI,GAAA,GAAM,GAAA,CAAA,GAAO,KAAK,GAAA,GAAM,GAAA,CAAA;AAE/C,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,CAAA;AAAG,QAAA,CAAA,GAAA,CAAK,CAAA,GAAI,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA,CAAA;AAAI,QAAA;AAAA,MAC3C,KAAK,CAAA;AAAG,QAAA,CAAA,GAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AAAG,QAAA;AAAA,MAC7B,KAAK,CAAA;AAAG,QAAA,CAAA,GAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA;AAAG,QAAA;AAAA;AAG/B,IAAA,CAAA,IAAK,CAAA;AAAA,EACP;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AAE/B,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,KAAK,IAAI,CAAA,CAAA,CAAA;AACjC;AAmBO,SAAS,eAAe,KAAA,EAA4C;AACzE,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AAEpB,EAAA,MAAM,SAAiC,EAAC;AAGxC,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,MAAM,QAAA,GAAsD;AAAA,MAC1D,cAAA,EAAgB,YAAA;AAAA,MAChB,cAAA,EAAgB,YAAA;AAAA,MAChB,WAAA,EAAa,SAAA;AAAA,MACb,aAAA,EAAe,WAAA;AAAA,MACf,SAAA,EAAW,OAAA;AAAA,MACX,UAAA,EAAY,QAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,QAAQ,CAAA,KAAM;AACvD,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,GAAS,QAAQ,CAAA;AAC1C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,GAAA,GAAM,WAAW,UAAU,CAAA;AACjC,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAM,YAAA,EAAc;AACtB,IAAA,MAAA,CAAO,UAAU,IAAI,KAAA,CAAM,YAAA;AAAA,EAC7B;AAGA,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,MAAA,CAAO,YAAY,IAAI,KAAA,CAAM,UAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,MAAA;AACT;ACzFO,IAAM,mBAAmB,CAAC;AAAA,EAC/B,MAAA;AAAA,EACA,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,sBAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,sBAAA;AAAA,EACd,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIP,SAAmB,MAAM,CAAA;AACjE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIA,QAAAA,iBAAS,IAAI,MAAM,CAAA;AAG3D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAExD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,cAAc,GAAA,EAAK;AAC5B,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAA+B,IAAI,CAAA;AAC7E,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAA2B,MAAS,CAAA;AAEpF,EAAA,MAAM,OAAO,cAAA,IAAkB,YAAA;AAC/B,EAAA,MAAM,cAAc,cAAA,IAAkB,YAAA;AAGtC,EAAA,MAAM,cAAA,GAAiBY,QAAQ,MAAM;AACnC,IAAA,MAAM,YAA6B,EAAC;AAIpC,IAAA,MAAM,UAAA,GAAae,OAAAA,CAAQ,WAAA,EAAa,GAAG,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAWd,OAAAA,CAAQ,WAAA,EAAa,GAAG,CAAA;AAEzC,IAAA,MAAA,CAAO,QAAQ,CAAA,KAAA,KAAS;AACtB,MAAA,IAAI,MAAM,UAAA,EAAY;AACpB,QAAA,IAAI;AACA,UAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM;AAAA,YACnB,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAAA,YACjC,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,QAAA,IAAY,CAAA;AAAA,YACvC,OAAA,EAAS,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,YAC7B,KAAA,EAAO,MAAM,UAAA,CAAW,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,GAAI,KAAA,CAAA;AAAA,YACnE,KAAA,EAAO,MAAM,UAAA,CAAW;AAAA,WAC3B,CAAA;AAED,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA;AAE/C,UAAA,KAAA,CAAM,QAAQ,CAAA,IAAA,KAAQ;AAClB,YAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,EAAG,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AACpF,YAAA,SAAA,CAAU,IAAA,CAAK;AAAA,cACX,GAAG,KAAA;AAAA,cACH,IAAI,CAAA,EAAG,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA;AAAA,cACjC,iBAAiB,KAAA,CAAM,EAAA;AAAA;AAAA,cACvB,KAAA,EAAO,IAAA;AAAA,cACP,KAAK,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,KAAY,QAAQ;AAAA,aAC1C,CAAA;AAAA,UACL,CAAC,CAAA;AAAA,QACL,SAAS,CAAA,EAAG;AACR,UAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAChD,UAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,QACxB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,WAAW,CAAC,CAAA;AAExB,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAsB;AAC9C,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,sBAAA,CAAuB,OAAO,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAkB;AAC1C,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,sBAAA,CAAuB,OAAO,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,OAAA;AACH,QAAA,gBAAA,CAAiBpB,SAAAA,CAAU,WAAA,EAAa,CAAC,CAAC,CAAA;AAC1C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,gBAAA,CAAiBmC,QAAAA,CAAS,WAAA,EAAa,CAAC,CAAC,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,KAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,gBAAA,CAAiBD,OAAAA,CAAQ,WAAA,EAAa,CAAC,CAAC,CAAA;AACxC,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiBA,OAAAA,CAAQ,WAAA,EAAa,CAAC,CAAC,CAAA;AACxC,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,OAAA;AACH,QAAA,gBAAA,CAAiBjC,SAAAA,CAAU,WAAA,EAAa,CAAC,CAAC,CAAA;AAC1C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,gBAAA,CAAiBmC,QAAAA,CAAS,WAAA,EAAa,CAAC,CAAC,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,KAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,gBAAA,CAAiBhB,OAAAA,CAAQ,WAAA,EAAa,CAAC,CAAC,CAAA;AACxC,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiBA,OAAAA,CAAQ,WAAA,EAAa,CAAC,CAAC,CAAA;AACxC,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,gBAAA,iBAAiB,IAAI,MAAM,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAe;AACtC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAe;AACxC,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAyB;AACvD,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACtB;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,mBAAA,CAAoB,MAAS,CAAA;AAC7B,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC5B,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,mBAAA,iBAAoB,IAAI,MAAM,CAAA;AAC9B,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,SAAA,KAAsC;AAM3D,IAAA,IAAI,mBAAmB,aAAA,EAAe,EAAA;AACtC,IAAA,IAAI,eAAe,eAAA,EAAiB;AAChC,MAAA,gBAAA,GAAmB,aAAA,CAAc,eAAA;AAAA,IACrC;AAEA,IAAA,IAAI,gBAAA,EAAkB;AAElB,MAAA,IAAI,aAAA,EAAe;AACf,QAAA,aAAA,CAAc;AAAA,UACV,GAAG,SAAA;AAAA,UACH,EAAA,EAAI;AAAA,SACU,CAAA;AAAA,MACtB;AAAA,IACJ,CAAA,MAAO;AAEH,MAAA,IAAI,aAAA,EAAe;AACf,QAAA,aAAA,CAAc,SAAS,CAAA;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,KAAoB;AAE3C,IAAA,IAAI,gBAAA,GAAmB,OAAA;AACvB,IAAA,IAAI,aAAA,EAAe,eAAA,IAAmB,aAAA,CAAc,EAAA,KAAO,OAAA,EAAS;AAChE,MAAA,gBAAA,GAAmB,aAAA,CAAc,eAAA;AAAA,IACrC;AAEA,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,aAAA,CAAc,gBAAgB,CAAA;AAAA,IAClC;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA;AAEzB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,KAAA;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAA;AAEpC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,QAAA,EAAU;AAE/B,IAAA,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AAChD,IAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,WAAA,EAAa,aAAa,CAAA;AAEpE,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,SAAS,OAAA,EAAS;AAGlB,MAAA,IAAI,QAAA,EAAU;AAEZ,QAAA,MAAM,aAAA,GAAgBL,WAAAA,CAAY,aAAA,EAAe,QAAQ,CAAA;AAEzD,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,QAAQ,CAAA;AAClC,QAAA,QAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAA,EAAU,CAAA;AAC1C,QAAA,QAAA,CAAS,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,CAAA;AAC9C,QAAA,QAAA,CAAS,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,CAAA;AAC9C,QAAA,QAAA,CAAS,eAAA,CAAgB,aAAA,CAAc,eAAA,EAAiB,CAAA;AAExD,QAAA,QAAA,GAAW,aAAA,CAAc,UAAU,QAAQ,CAAA;AAAA,MAC7C,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,IAAI,KAAK,QAAQ,CAAA;AAC5B,QAAA,QAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAA,EAAU,CAAA;AAC1C,QAAA,QAAA,CAAS,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,CAAA;AAC9C,QAAA,QAAA,CAAS,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,CAAA;AAC9C,QAAA,QAAA,CAAS,eAAA,CAAgB,aAAA,CAAc,eAAA,EAAiB,CAAA;AAAA,MAC1D;AAAA,IACJ,CAAA,MAAO;AAGH,MAAA,IAAI,QAAA,EAAU;AAIZ,QAAA,QAAA,GAAW,aAAA,CAAc,UAAU,QAAQ,CAAA;AAAA,MAC7C,CAAA,MAAO;AAEL,QAAA,QAAA,GAAW,IAAI,KAAK,QAAQ,CAAA;AAAA,MAC9B;AAEA,MAAA,QAAA,CAAS,WAAW,CAAC,CAAA;AACrB,MAAA,QAAA,CAAS,gBAAgB,CAAC,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,SAAS,IAAI,IAAA,CAAK,QAAA,CAAS,OAAA,KAAY,QAAQ,CAAA;AAGrD,IAAA,IAAI,gBAAgB,WAAA,CAAY,UAAA;AAChC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,UAAA;AAC1C,IAAA,IAAI,cAAA,EAAgB;AAChB,MAAA,aAAA,GAAgB,cAAA;AAAA,IACpB;AAGA,IAAA,IAAI,QAAA,CAAS,OAAA,EAAQ,KAAM,aAAA,CAAc,SAAQ,IAC7C,MAAA,CAAO,OAAA,EAAQ,KAAM,WAAA,CAAY,OAAA,EAAQ,IACzC,aAAA,KAAkB,YAAY,UAAA,EAChC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA;AAAA,QACE,EAAE,GAAG,WAAA,EAAa,KAAA,EAAO,UAAU,GAAA,EAAK,MAAA,EAAQ,YAAY,aAAA,EAAc;AAAA,QAC1E,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,WAAW,aAAA,EAAe;AACxB,MAAA,aAAA,CAAc;AAAA,QACZ,GAAG,WAAA;AAAA,QACH,KAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAK,MAAA;AAAA,QACL,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AChUO,IAAM,eAAA,GAAkB,CAC7B,OAAA,KACG;AACH,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,GAAY,GAAA;AAAA,IACZ,SAAA,GAAY,GAAA;AAAA,IACZ,WAAA,GAAc,GAAA;AAAA,IACd,OAAA,GAAU;AAAA,GACZ,GAAI,OAAA;AAEJ,EAAA,MAAM,YAAA,GAAeC,OAAyB,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAaA,OAAU,IAAI,CAAA;AAEjC,EAAA,MAAM,gBAAA,GAAmBF,WAAAA,CAAY,CAAC,CAAA,KAAkB;AACtD,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AACzB,IAAA,YAAA,CAAa,OAAA,GAAU;AAAA,MACrB,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,cAAA,GAAiBA,WAAAA,CAAY,CAAC,CAAA,KAAkB;AACpD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,OAAA,EAAS;AAEvC,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,cAAA,CAAe,CAAC,CAAA;AAChC,IAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,KAAc,YAAA,CAAa,OAAA;AAEnD,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA;AAC9B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAGjC,IAAA,IAAI,eAAe,WAAA,EAAa;AAE9B,MAAA,IAAI,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,aAAa,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,SAAA,EAAW;AAChE,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,YAAA,IAAe;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,WAAA,IAAc;AAAA,QAChB;AAAA,MACF,CAAA,MAAA,IAES,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,aAAa,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,SAAA,EAAW;AACrE,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,WAAA,IAAc;AAAA,QAChB,CAAA,MAAO;AACL,UAAA,SAAA,IAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AAAA,EACzB,CAAA,EAAG,CAAC,OAAA,EAAS,SAAA,EAAW,SAAA,EAAW,aAAa,WAAA,EAAa,YAAA,EAAc,SAAA,EAAW,WAAW,CAAC,CAAA;AAElG,EAAAN,UAAU,MAAM;AACd,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,OAAA,CAAQ,iBAAiB,YAAA,EAAc,gBAAA,EAAkB,EAAE,OAAA,EAAS,MAAM,CAAA;AAC1E,IAAA,OAAA,CAAQ,iBAAiB,UAAA,EAAY,cAAA,EAAgB,EAAE,OAAA,EAAS,MAAM,CAAA;AAEtE,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,CAAQ,mBAAA,CAAoB,cAAc,gBAAgB,CAAA;AAC1D,MAAA,OAAA,CAAQ,mBAAA,CAAoB,YAAY,cAAc,CAAA;AAAA,IACxD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,cAAc,CAAC,CAAA;AAErC,EAAA,OAAO,UAAA;AACT,CAAA;AAGO,IAAM,YAAA,GAAe,CAC1B,MAAA,EACA,MAAA,EACA,UAAmB,IAAA,KAChB;AACH,EAAA,OAAO,eAAA,CAAmB;AAAA,IACxB,WAAA,EAAa,MAAA;AAAA,IACb,YAAA,EAAc,MAAA;AAAA,IACd,SAAA,EAAW,EAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,WAAA,EAAa,GAAA;AAAA,IACb;AAAA,GACD,CAAA;AACH,CAAA;;;ACnDO,IAAM,YAAqC,CAAC;AAAA,EACjD,SAAS,EAAC;AAAA,EACV,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,sBAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,sBAAA;AAAA,EACd,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA,GAAoB,CAAA;AAAA,EACpB,aAAa,eAAA,GAAkB,KAAA;AAAA,EAC/B,QAAA,GAAW,IAAA;AAAA;AAAA,EACX,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AAEJ,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAID,SAAwB,IAAI,CAAA;AAG5E,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAIhF,EAAA,MAAM,gBAAA,GAAmB,yBAAA;AACzB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAkB,MAAM;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,gBAAgB,CAAA;AACpD,MAAA,OAAO,MAAA,KAAW,IAAA,GAAO,MAAA,KAAW,MAAA,GAAS,eAAA;AAAA,IAC/C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,eAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AAGD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,gBAAA,EAAkB,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAC5D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAID,SAA+B,IAAI,CAAA;AAGjF,EAAA,MAAM,YAAA,GAAeS,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIT,QAAAA,CAA8B,EAAE,CAAA;AAGpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE9C,EAAAC,UAAU,MAAM;AAAE,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAG3C,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,oBAAoB,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAA,CAAG,OAAO,CAAA;AAC3C,IAAA,MAAA,EAAO;AACP,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACpC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAGd,EAAA,MAAM,YAAA,GAAeM,YAAY,MAAM;AACrC,IAAA,MAAM,OAAO,YAAA,CAAa,OAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,EAAA,GAAK,iBAAiB,IAAI,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,CAAC,WAAA,EAAa,sBAAsB,CAAA;AACjD,IAAA,MAAM,OAA+B,EAAC;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,KAAS;AACrB,MAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,gBAAA,CAAiB,IAAI,EAAE,IAAA,EAAK;AAC7C,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA,GAAI,KAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAA,aAAA,CAAc,IAA2B,CAAA;AAAA,EAC3C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAN,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,YAAA,EAAa;AAAA,EACf,GAAG,CAAC,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,YAAY,CAAC,CAAA;AAG/C,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,mBAAA;AAAA,IAEA;AAAA,MACE,mBAAA,EAAoB;AAExB,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA;AAAA,MACE,gBAAA,CAAiB;AAAA,IACnB,MAAA;AAAA,IACA,IAAA,EAAM,cAAA;AAAA,IACN,YAAA,EAAc,sBAAA;AAAA,IACd,IAAA,EAAM,cAAA;AAAA,IACN,YAAA,EAAc,sBAAA;AAAA,IACd,YAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,UAAU,aAAA,EAAe;AAAA,MACvB,oBAAA,EAAsB;AAAA,QACpB,QAAA,EAAU;AAAA;AACZ,KACD;AAAA,GACH;AAEA,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,UAAA,GAAa,mBAAmB,QAAQ,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAwB,CAAC,UAAA,EAAY,qBAAqB,CAAA;AAGhE,EAAA,MAAM,UAAA,GAAa,QAAA,GAAW,EAAC,GAAI,OAAA;AAGnC,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,EAAsB,MAAA,KAAiB;AAChE,IAAA,IAAI,QAAA,EAAU;AAGd,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc;AAAA,QACZ,GAAG,KAAA;AAAA,QACH,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,KAAK,KAAA,EAAM;AAGjB,EAAA,MAAM,QAAA,GAAW,YAAA,CAA6B,UAAA,EAAY,UAAA,EAAY,IAAI,CAAA;AAG1E,EAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,QAAA,EAA0B,YAAA,IAAgB,EAAE,CAAA;AAEtE,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAe;AACtC,IAAA,MAAM,EAAE,QAAO,GAAI,KAAA;AACnB,IAAA,MAAM,eAAe,cAAA,CAAe,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,OAAO,EAAE,CAAA;AAChE,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,kBAAA,CAAmB,YAAY,CAAA;AAAA,IACnC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAe;AACrC,IAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACvB,CAAA;AAGA,EAAA,MAAM,gBAAgB,MAAM;AACxB,IAAA,IAAI,CAAC,iBAAiB,OAAO,MAAA;AAE7B,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,KAAA,EAAO,OAAO,MAAA;AAC9C,IAAA,MAAM,QAAA,GAAWS,mBAAAA,CAAoB,eAAA,CAAgB,GAAA,EAAK,gBAAgB,KAAK,CAAA;AAQ/E,IAAA,MAAM,UAAA,GAAa,IAAA,KAAS,KAAA,GAAQ,EAAA,GAAK,EAAA;AACzC,IAAA,OAAQ,WAAW,EAAA,GAAM,UAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACvB,IAAA,IAAI,IAAA,KAAS,SAAS,OAAO,MAAA;AAE7B,IAAA,IAAI,IAAA,KAAS,cAAc,eAAA,EAAiB;AACxC,MAAA,MAAM,QAAA,GAAWA,mBAAAA,CAAoB,eAAA,CAAgB,GAAA,EAAK,gBAAgB,KAAK,CAAA;AAC/E,MAAA,MAAM,KAAA,GAAS,WAAW,EAAA,GAAM,GAAA;AAChC,MAAA,OAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IAChC;AAIA,IAAA,OAAO,OAAA;AAAA,EACX,CAAA;AAGA,EAAA,MAAM,cAAA,GAAiBE,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,WAAW,OAAO,cAAA;AACvB,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,KAAW,KAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAA;AACjF,IAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAAA,KAAK;AAG9B,MAAA,IAAI,CAAC,CAAA,CAAE,UAAA,EAAY,OAAO,IAAA;AAC1B,MAAA,OAAO,iBAAA,CAAkB,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA;AAAA,IAClD,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,cAAA,EAAgB,SAAS,CAAC,CAAA;AAI9B,EAAA,MAAM,cAAA,GAAiBA,QAAQ,MAAM;AACnC,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,QAAA;AAEJ,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,OAAA;AACH,QAAA,UAAA,GAAakB,aAAa,WAAW,CAAA;AACrC,QAAA,QAAA,GAAWC,WAAW,WAAW,CAAA;AACjC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,UAAA,GAAa3B,WAAAA,CAAY,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AACzD,QAAA,QAAA,GAAWC,SAAAA,CAAU,WAAA,EAAa,EAAE,YAAA,EAAc,GAAG,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,KAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,UAAA,GAAaU,WAAW,WAAW,CAAA;AACnC,QAAA,QAAA,GAAW,SAAS,WAAW,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,UAAA,GAAaA,WAAW,WAAW,CAAA;AACnC,QAAA,QAAA,GAAWF,OAAAA,CAAQ,YAAY,EAAE,CAAA;AACjC,QAAA;AAAA,MACF;AACE,QAAA,OAAO,cAAA,CAAe,MAAA;AAAA;AAG1B,IAAA,OAAO,cAAA,CAAe,MAAA;AAAA,MACpB,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,IAAS,UAAA,IAAc,EAAE,KAAA,IAAS;AAAA,KAC7C,CAAE,MAAA;AAAA,EACJ,CAAA,EAAG,CAAC,cAAA,EAAgB,IAAA,EAAM,WAAW,CAAC,CAAA;AAEtC,EAAA,uBACArC,gBAAAA,CAAA,aAAA,CAAAA,gBAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,gBAAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,EAAA;AAAA,MACA,OAAA,EAAS,UAAA;AAAA,MACT,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,gBAAA;AAAA,MACX;AAAA,KAAA;AAAA,oBAEFA,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,6DAAA,EAA+D,SAAS,CAAA;AAAA,QACtF,KAAA,EAAO,eAAe,KAAK;AAAA,OAAA;AAAA,MAE1B,YAAA;AAAA;AAAA,QAEC,YAAA,CAAa;AAAA,UACX,WAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA,EAAQ,UAAA;AAAA,UACR,MAAA,EAAQ,UAAA;AAAA,UACR,OAAA,EAAS,WAAA;AAAA,UACT,YAAA,EAAc,gBAAA;AAAA,UACd,YAAA,EAAc,CAAA;AAAA,UACd,QAAA;AAAA,UACA,gBAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACD;AAAA,0BAEDA,gBAAAA,CAAA,aAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,MAAA,EAAQ,UAAA;AAAA,UACR,MAAA,EAAQ,UAAA;AAAA,UACR,OAAA,EAAS,WAAA;AAAA,UACT,IAAA;AAAA,UACA,YAAA,EAAc,gBAAA;AAAA,UACd,WAAA,EAAa,MAAM,gBAAA,CAAiB,CAAC,aAAa,CAAA;AAAA,UAClD,UAAA;AAAA,UACA,aAAA;AAAA,UACA,YAAA,EAAc,CAAA;AAAA,UACd,gBAAA;AAAA,UACA,QAAA;AAAA,UACA,gBAAA;AAAA,UACA,MAAA;AAAA,UACA,aAAA,EAAe,iBAAA;AAAA,UACf,WAAA;AAAA,UACA,kBAAA;AAAA,UACA,kBAAA,EAAoB,CAACwD,GAAAA,KAAO;AAAE,YAAA,qBAAA,CAAsBA,GAAE,CAAA;AAAG,YAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,UAAG,CAAA;AAAA,UACpF,UAAA,EAAY,cAAA;AAAA,UACZ;AAAA;AAAA,OACF;AAAA,sBAGFxD,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,6BAAA,EAAA,kBAEXA,gBAAAA,CAAA,aAAA;AAAA,QAAC2C,MAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACG,SAAA,EAAU,0CAAA;AAAA,UACV,OAAA,EAAS,KAAA;AAAA,UACT,OAAA,EAAS;AAAA,YACP,KAAA,EAAO,gBAAgB,GAAA,GAAM,CAAA;AAAA,YAC7B,OAAA,EAAS,gBAAgB,CAAA,GAAI;AAAA,WAC/B;AAAA,UACA,UAAA,EAAY;AAAA,YACV,QAAA,EAAU,GAAA;AAAA,YACV,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC;AAAA;AACvB,SAAA;AAAA,wBAEA3C,gBAAAA,CAAA,aAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,WAAA;AAAA,YACA,YAAA,EAAc,gBAAA;AAAA,YACd,YAAA,EAAc,gBAAA;AAAA,YACd,aAAA,EAAe,iBAAA;AAAA,YACf,QAAA;AAAA,YACA,gBAAA;AAAA,YACA,SAAA,EAAU,eAAA;AAAA,YACV,QAAA;AAAA,YACA,SAAA;AAAA,YACA,gBAAA;AAAA,YACA,YAAA,EAAc,CAAA;AAAA,YACd,kBAAA;AAAA,YACA,MAAA;AAAA,YACA,YAAA;AAAA,YACA,gBAAA;AAAA,YACA,kBAAA,EAAoB,CAACwD,GAAAA,KAAO;AAAE,cAAA,mBAAA,CAAoBA,GAAE,CAAA;AAAG,cAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,YAAG,CAAA;AAAA,YACpF,WAAA;AAAA,YACA,mBAAA,EAAqB,cAAA;AAAA,YACrB,WAAA;AAAA,YACA,kBAAA;AAAA,YACA,kBAAA,EAAoB,CAACA,GAAAA,KAAO;AAAE,cAAA,qBAAA,CAAsBA,GAAE,CAAA;AAAG,cAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,YAAG;AAAA;AAAA;AACxF,OACJ,kBAGAxD,gBAAAA,CAAA,aAAA,CAACkD,iBAAA,IAAA,EACE,aAAA,oBACClD,gBAAAA,CAAA,aAAA;AAAA,QAAC2C,MAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACG,GAAA,EAAI,wBAAA;AAAA,UACJ,SAAA,EAAU,sCAAA;AAAA,UACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA;AAAI,SAAA;AAAA,wBAG5B3C,gBAAAA,CAAA,aAAA;AAAA,UAAC2C,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,2DAAA;AAAA,YACV,OAAA,EAAS,EAAE,CAAA,EAAG,IAAA,EAAK;AAAA,YACnB,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAE;AAAA,YAChB,IAAA,EAAM,EAAE,CAAA,EAAG,IAAA,EAAK;AAAA,YAChB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAAE,WAAA;AAAA,0BAErD3C,gBAAAA,CAAA,aAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,WAAA;AAAA,cACA,YAAA,EAAc,gBAAA;AAAA,cACd,YAAA,EAAc,gBAAA;AAAA,cACd,eAAe,MAAM;AAAE,gBAAA,gBAAA,CAAiB,KAAK,CAAA;AAAG,gBAAA,iBAAA,EAAkB;AAAA,cAAG,CAAA;AAAA,cACrE,QAAA;AAAA,cACA,gBAAA;AAAA,cACA,SAAA,EAAU,eAAA;AAAA,cACV,QAAA;AAAA,cACA,SAAA;AAAA,cACA,gBAAA;AAAA,cACA,YAAA,EAAc,CAAA;AAAA,cACd,kBAAA;AAAA,cACA,MAAA;AAAA,cACA,YAAA;AAAA,cACA,gBAAA;AAAA,cACA,kBAAA,EAAoB,CAACwD,GAAAA,KAAO;AAAE,gBAAA,mBAAA,CAAoBA,GAAE,CAAA;AAAG,gBAAA,qBAAA,CAAsB,IAAI,CAAA;AAAG,gBAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,cAAG,CAAA;AAAA,cAC7G,WAAA;AAAA,cACA,mBAAA,EAAqB,cAAA;AAAA,cACrB,WAAA;AAAA,cACA,kBAAA;AAAA,cACA,kBAAA,EAAoB,CAACA,GAAAA,KAAO;AAAE,gBAAA,qBAAA,CAAsBA,GAAE,CAAA;AAAG,gBAAA,mBAAA,CAAoB,IAAI,CAAA;AAAG,gBAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,cAAG;AAAA;AAAA;AACjH,SACJ;AAAA,wBAEAxD,gBAAAA,CAAA,aAAA;AAAA,UAAC2C,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,qCAAA;AAAA,YACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK;AAAA;AAAA;AACzC,OAGR,mBAGA3C,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAA,EAEV,gBAAA,KAAqB,IAAA,IAAQ,YAAA,oBAC5BA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,mCAAA,EAAA,EACZ,aAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,gBAAgB,GAAG,SACxD,CAAA,EAID,uBAAuB,IAAA,IAAQ,gBAAA,KAAqB,QAAQ,WAAA,oBAC3DA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACZ,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,kBAAkB,CAAA,EAAG,SACzD,CAAA,EAID,gBAAA,KAAqB,IAAA,IAAQ,uBAAuB,IAAA,KAAS,SAAA,mBAC1DA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EAAA,EACZ,IAAA,KAAS,2BAAWA,gBAAAA,CAAA,cAAC,iBAAA,EAAA,IAAkB,CAAA,EACvC,IAAA,KAAS,MAAA,oBAAUA,gBAAAA,CAAA,cAAC,gBAAA,EAAA,IAAiB,CAAA,EACrC,SAAS,KAAA,oBAASA,iBAAA,aAAA,CAAC,eAAA,EAAA,IAAgB,CAAA,EACnC,IAAA,KAAS,QAAA,oBAAYA,iBAAA,aAAA,CAAC,kBAAA,EAAA,IAAmB,GACzC,IAAA,KAAS,UAAA,oBAAcA,gBAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,IAAiB,CAC5C,CACF,CAAA;AAAA;AAAA,wBAGJA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAU,SAAA,EAAU,uDAAA,EAAA,kBAE5BA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAACkD,eAAAA,EAAA,EAAgB,MAAK,MAAA,EAAO,OAAA,EAAS,KAAA,EAAA,kBAClClD,gBAAAA,CAAA,aAAA;AAAA,UAAC2C,MAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,GAAA,EAAK,GAAG,IAAI,CAAA,CAAA,EAAI,YAAY,WAAA,EAAa,CAAA,CAAA,EAAI,QAAA,IAAY,OAAO,CAAA,CAAA;AAAA,YAChE,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YAC5B,OAAA,EAAS;AAAA,cACP,OAAA,EAAS,CAAA;AAAA,cACT,CAAA,EAAG,CAAA;AAAA,cACH,UAAA,EAAY;AAAA,gBACV,QAAA,EAAU,GAAA;AAAA,gBACV,IAAA,EAAM,CAAC,IAAA,EAAM,GAAA,EAAK,MAAM,CAAC;AAAA;AAC3B,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,OAAA,EAAS,CAAA;AAAA,cACT,CAAA,EAAG,EAAA;AAAA,cACH,UAAA,EAAY;AAAA,gBACV,QAAA,EAAU,IAAA;AAAA,gBACV,IAAA,EAAM,CAAC,IAAA,EAAM,GAAA,EAAK,MAAM,CAAC;AAAA;AAC3B,aACF;AAAA,YACA,SAAA,EAAU,8BAAA;AAAA,YACV,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA;AAAO,WAAA;AAAA,UAEvB,IAAA,KAAS,OAAA,oBACN3C,gBAAAA,CAAA,aAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACD,WAAA;AAAA,cACA,MAAA,EAAQ,cAAA;AAAA,cACR,YAAA,EAAc,wBAAA;AAAA,cACd,WAAA,EAAa,eAAA;AAAA,cACb,QAAA;AAAA,cACA;AAAA;AAAA,WACA;AAAA,UAEH,IAAA,KAAS,MAAA,oBACNA,gBAAAA,CAAA,aAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACD,WAAA;AAAA,cACA,MAAA,EAAQ,cAAA;AAAA,cACR,YAAA,EAAc,wBAAA;AAAA,cACd,eAAA,EAAiB,mBAAA;AAAA,cACjB,aAAA,EAAe,iBAAA;AAAA,cACf,QAAA;AAAA,cACA,MAAA;AAAA,cACA,QAAA,EAAU,QAAA;AAAA,cACV,QAAA;AAAA,cACA,iBAAA;AAAA,cACA;AAAA;AAAA,WACA;AAAA,UAEH,IAAA,KAAS,KAAA,oBACNA,gBAAAA,CAAA,aAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACG,WAAA;AAAA,cACA,MAAA,EAAQ,cAAA;AAAA,cACR,YAAA,EAAc,wBAAA;AAAA,cACd,eAAA,EAAiB,mBAAA;AAAA,cACjB,aAAA,EAAe,iBAAA;AAAA,cACf,QAAA;AAAA,cACA,MAAA;AAAA,cACA,QAAA,EAAU,QAAA;AAAA,cACV,QAAA;AAAA,cACA,iBAAA;AAAA,cACA;AAAA;AAAA,WACJ;AAAA,UAEH,IAAA,KAAS,QAAA,oBACNA,gBAAAA,CAAA,aAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACG,WAAA;AAAA,cACA,MAAA,EAAQ,cAAA;AAAA,cACR,YAAA,EAAc,wBAAA;AAAA,cACd,aAAA,EAAe,iBAAA;AAAA,cACf,YAAA,EAAc,CAAA;AAAA,cACd,QAAA;AAAA,cACA;AAAA;AAAA,WACJ;AAAA,UAEH,IAAA,KAAS,UAAA,IAAc,SAAA,oBACpBA,gBAAAA,CAAA,aAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACG,WAAA;AAAA,cACA,MAAA,EAAQ,cAAA;AAAA,cACR,SAAA;AAAA,cACA,YAAA,EAAc,wBAAA;AAAA,cACd,eAAA,EAAiB,CAAC,IAAA,KAAS;AACvB,gBAAA,IAAI,QAAA,EAAU;AACd,gBAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,cAC5B,CAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA;AAAA;AACJ,SAGZ,CACF,CACF;AAAA,OAAA,CAGJ,CACJ,CAAA;AAAA,MAGC,kBACG,eAAA,CAAgB;AAAA,QACZ,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,QACnC,KAAA,EAAO,aAAA;AAAA,QACP,WAAA,EAAa,gBAAA;AAAA,QACb,MAAA,EAAQ,eAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACb,CAAA,mBAEDA,gBAAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACG,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,UACnC,KAAA,EAAO,aAAA;AAAA,UACP,WAAA,EAAa,gBAAA;AAAA,UACb,MAAA,EAAQ,eAAA;AAAA,UACR,QAAA,EAAU,iBAAA;AAAA,UACV,SAAA;AAAA,UACA,UAAA;AAAA,UACA,YAAA,EAAc,CAAA;AAAA,UACd;AAAA;AAAA,OACJ;AAAA,sBAIJA,gBAAAA,CAAA,aAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU,mBAAA;AAAA,UACV,OAAA,EAAS,gBAAA;AAAA,UACT,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,YAAA,wBAAA,CAAyB,KAAK,CAAA;AAC9B,YAAA,gBAAA,EAAiB;AAAA,UACnB,CAAA;AAAA,UACA,QAAA,EAAU,CAAC,OAAA,KAAY;AACrB,YAAA,aAAA,GAAgB,OAAO,CAAA;AACvB,YAAA,gBAAA,EAAiB;AAAA,UACnB,CAAA;AAAA,UACA,WAAA,EAAa,CAAC,KAAA,KAAU;AAEtB,YAAA,MAAM,eAAA,GAA0C;AAAA,cAC9C,GAAG,KAAA;AAAA,cACH,IAAI,CAAA,EAAG,KAAA,CAAM,EAAE,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,cAClC,OAAO,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAA;AAAA,cAC/B,KAAA,EAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,SAAQ,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAI,CAAA;AAAA;AAAA,cAC3D,GAAA,EAAK,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAQ,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAI;AAAA,aACzD;AACA,YAAA,aAAA,GAAgB,eAAe,CAAA;AAC/B,YAAA,gBAAA,EAAiB;AAAA,UACnB,CAAA;AAAA,UACA,YAAA,EAAc;AAAA,YACZ,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,QAAQ,CAAA,CAAE,MAAA;AAAA,YACV,WAAW,CAAA,CAAE;AAAA;AACf;AAAA,OACF;AAAA,sBAEAA,iBAAA,aAAA,CAAC,WAAA,EAAA,EAAY,eAAe,IAAA,EAAA,EACvB,eAAA,mBACGA,gBAAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACT,qFAAA;AAAA,YACA,kBAAA;AAAA,YACA,CAAC,gBAAgB,KAAA,IAAS;AAAA,WAC5B;AAAA,UACA,KAAA,EAAO;AAAA,YACH,iBAAiB,eAAA,CAAgB,KAAA,GAAQ,CAAA,EAAG,eAAA,CAAgB,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,YACxE,aAAa,eAAA,CAAgB,KAAA,GAAQ,CAAA,EAAG,eAAA,CAAgB,KAAK,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,YACpE,KAAA,EAAO,eAAA,CAAgB,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,YACxC,OAAO,YAAA,EAAa;AAAA,YACpB,QAAQ,aAAA,EAAc,GAAI,CAAA,EAAG,aAAA,EAAe,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,YACnD,SAAA,EAAW,CAAA,kBAAA,EAAqB,eAAA,CAAgB,KAAA,IAAS,gBAAgB,CAAA,qCAAA,CAAA;AAAA,YACzE,SAAA,EAAW;AAAA;AACf,SAAA;AAAA,wBAEAA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,4BAAA,EAAA,kBAEXA,gBAAAA,CAAA,aAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,iDAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,eAAA,CAAgB,SAAS,gBAAA;AAAiB;AAAA,2BAItEA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,gCAAA,EAAA,EAAkC,gBAAgB,KAAM,CAAA,EAAA,CACrE,SAAS,MAAA,IAAU,IAAA,KAAS,KAAA,KAAU,aAAA,MAAmB,aAAA,EAAc,GAAK,EAAA,oBAC5EA,iBAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAA,kBACbA,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,SAAA,EAAU,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAA,kBACzFA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,MAAK,CAAA,EAAE,IAAA,EAAI,mBAC9BA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,CAAA,EAAE,aAAA,EAAa,CACvB,GACCgB,MAAAA,CAAO,eAAA,CAAgB,KAAA,EAAO,iBAAA,CAAkB,QAAQ,CAAC,CAAA,EAAE,KAAA,EAAIA,MAAAA,CAAO,gBAAgB,GAAA,EAAK,iBAAA,CAAkB,QAAQ,CAAC,CACzH,CAEJ,CAAA,kBAGAhB,gBAAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,0CAAA,EAAA,kBACbA,gBAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAU,OAAA,EAAQ,aAAY,IAAA,EAAK,cAAA,EAAA,kBAChDA,gBAAAA,CAAA,aAAA,CAAC,YAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,GAAE,KAAA,EAAK,CAAA,kBAC7BA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,KAAI,CAAA,EAAE,KAAA,EAAK,mBAC9BA,gBAAAA,CAAA,cAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,MAAK,CAAA,EAAE,KAAA,EAAK,CAAA,kBAC9BA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,OAAK,CAAA,kBAC/BA,iBAAA,aAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAK,CAAA,kBAC9BA,gBAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,KAAA,EAAK,CACjC,CACF,CACJ;AAAA,UAEJ,IACR;AAAA;AAEF,GACF,EAGC,SAAA,IAAa,QAAA,IAAY,CAAC,QAAA,IAAYyD,YAAAA;AAAA,oBACrCzD,gBAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,MAAA,EAAQ,+CAAA;AAAA,UACR,KAAA,EAAO,8CAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,aAAA,EAAe,MAAA;AAAA,UACf,GAAG;AAAA;AACL,OAAA;AAAA,sBAEAA,gBAAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAY,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,MAAA,IAAU,cAAA;AAAA,UACzC,OAAA,EAAS,iBAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,aAAA,EAAe,MAAA;AAAA,YACf,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,IAAA;AAAA,YACd,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,QAAA;AAAA,YAChB,eAAA,EAAiB,wCAAA;AAAA,YACjB,KAAA,EAAO,6CAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ,SAAA;AAAA,YACR,SAAA,EAAW;AAAA;AACb,SAAA;AAAA,wBAEAA,gBAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAM,4BAAA,EAA6B,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,MAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAA,kBAC1KA,gBAAAA,CAAA,cAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAU,CAAA,kBAAEA,gBAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAU,CACxC;AAAA;AACF,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GAEb,CAAA;AAEF;AAGO,IAAM,YAAA,GAAe","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n","import * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { cn } from \"../../utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\r\n outline:\r\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-4 py-2\",\r\n sm: \"h-9 rounded-md px-3\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = \"button\"\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = \"Button\"\r\n\r\nexport { Button, buttonVariants }\r\n","import { CalendarTranslations } from '../types';\nimport {\n tr as dnsTr, enUS as dnsEnUS, fr as dnsFr, de as dnsDe,\n es as dnsEs, it as dnsIt, pt as dnsPt, ar as dnsAr,\n zhCN as dnsZhCN, ja as dnsJa, ko as dnsKo, ru as dnsRu,\n nl as dnsNl, pl as dnsPl, sv as dnsSv,\n} from 'date-fns/locale';\nimport type { Locale } from 'date-fns';\n\n// Supported language codes\nexport type LanguageCode =\n | 'tr' | 'en' | 'fr' | 'de' | 'es' | 'it' | 'pt'\n | 'ar' | 'zh' | 'ja' | 'ko' | 'ru' | 'nl' | 'pl' | 'sv';\n\n// Metadata for each language (used in the language switcher UI)\nexport const LANGUAGE_META: Record<LanguageCode, { native: string; english: string; flag: string; rtl?: boolean }> = {\n tr: { native: 'Türkçe', english: 'Turkish', flag: '🇹🇷' },\n en: { native: 'English', english: 'English', flag: '🇬🇧' },\n fr: { native: 'Français', english: 'French', flag: '🇫🇷' },\n de: { native: 'Deutsch', english: 'German', flag: '🇩🇪' },\n es: { native: 'Español', english: 'Spanish', flag: '🇪🇸' },\n it: { native: 'Italiano', english: 'Italian', flag: '🇮🇹' },\n pt: { native: 'Português', english: 'Portuguese', flag: '🇧🇷' },\n ar: { native: 'العربية', english: 'Arabic', flag: '🇸🇦', rtl: true },\n zh: { native: '中文', english: 'Chinese', flag: '🇨🇳' },\n ja: { native: '日本語', english: 'Japanese', flag: '🇯🇵' },\n ko: { native: '한국어', english: 'Korean', flag: '🇰🇷' },\n ru: { native: 'Русский', english: 'Russian', flag: '🇷🇺' },\n nl: { native: 'Nederlands',english: 'Dutch', flag: '🇳🇱' },\n pl: { native: 'Polski', english: 'Polish', flag: '🇵🇱' },\n sv: { native: 'Svenska', english: 'Swedish', flag: '🇸🇪' },\n};\n\n// ─── Turkish (default) ────────────────────────────────────────────────────────\nexport const tr: CalendarTranslations = {\n today: 'Bugün',\n month: 'Ay',\n week: 'Hafta',\n day: 'Gün',\n agenda: 'Ajanda',\n resource: 'Kaynaklar',\n create: 'Oluştur',\n createEvent: 'Etkinlik Oluştur',\n editEvent: 'Etkinliği Düzenle',\n newEvent: 'Yeni Etkinlik',\n saveChanges: 'Değişiklikleri Kaydet',\n delete: 'Sil',\n save: 'Kaydet',\n cancel: 'İptal',\n edit: 'Düzenle',\n duplicate: 'Çoğalt',\n close: 'Kapat',\n moreOptions: 'Daha Fazla Seçenek',\n addAttachment: 'Dosya Yükle',\n addReminder: 'Ekle',\n title: 'Başlık Ekle',\n addTitle: 'Başlık Ekle',\n start: 'Başlangıç',\n end: 'Bitiş',\n allDay: 'Tüm Gün',\n description: 'Açıklama',\n descriptionAndAttachments: 'Açıklama',\n addDescription: 'Açıklama veya not ekle...',\n location: 'Adres Gir',\n addLocation: 'Konum Ekle',\n locationHelpText: 'Harita oluşturmak için fiziksel adres girin (örn. \"Bağcılar Mah. No:1\").',\n notes: 'Notlar',\n repeat: 'Tekrarla',\n noRepeat: 'Tekrarlanmıyor',\n doesNotRepeat: 'Tekrarlanmıyor',\n daily: 'Günlük',\n weekly: 'Haftalık',\n monthly: 'Aylık',\n yearly: 'Yıllık',\n repeatFor: 'Tekrar Sayısı',\n times: 'kez',\n until: 'Şu tarihe kadar',\n endRepeat: 'Tekrar Bitişi',\n never: 'Hiçbir Zaman',\n afterOccurrences: 'Tekrardan Sonra',\n onDate: 'Tarihte',\n selectCalendar: 'Takvim Seç',\n selectType: 'Tür Seç',\n calendar: 'Takvim',\n calendars: 'Takvimler',\n event: 'Etkinlik',\n task: 'Görev',\n appointmentSchedule: 'Randevu Programı',\n new: 'Yeni',\n guests: 'Katılımcılar',\n addGuests: 'Katılımcı Ekle',\n guest: 'katılımcı',\n guestCount: 'katılımcı',\n guestsCount: 'katılımcı',\n guestAdded: 'katılımcı eklendi',\n guestsAdded: 'katılımcı eklendi',\n whosJoining: 'Kim katılıyor?',\n suggestedTimes: 'Misafirler için önerilen saatler',\n viewSuggestions: 'Önerileri Gör',\n whereWillItBe: 'Nerede olacak?',\n dateAndTime: 'Tarih ve Saat',\n reminders: 'Hatırlatıcılar',\n dragAndDrop: 'Dosyaları sürükle & bırak ya da',\n attachments: 'Ekler',\n reminderAtTime: 'Etkinlik saatinde',\n reminder5min: '5 dakika önce',\n reminder10min: '10 dakika önce',\n reminder15min: '15 dakika önce',\n reminder30min: '30 dakika önce',\n reminder1hour: '1 saat önce',\n reminder2hours: '2 saat önce',\n reminder1day: '1 gün önce',\n reminder2days: '2 gün önce',\n reminder1week: '1 hafta önce',\n tomorrow: 'Yarın',\n eventCount: 'etkinlik',\n eventsCount: 'etkinlik',\n timezone: 'Zaman Dilimi',\n localTime: 'Yerel Saat',\n operations: 'İşlemler',\n reverseTimeLabel: 'Saat Yönü',\n search: 'Etkinlik ara...',\n allTypes: 'Tüm Türler',\n noTitle: '(Başlıksız)',\n copy: '(Kopya)',\n clickToOpenInMaps: 'Haritada açmak için tıklayın',\n};\n\n// ─── English ──────────────────────────────────────────────────────────────────\nexport const en: CalendarTranslations = {\n today: 'Today',\n month: 'Month',\n week: 'Week',\n day: 'Day',\n agenda: 'Agenda',\n resource: 'Resources',\n create: 'Create',\n createEvent: 'Create Event',\n editEvent: 'Edit Event',\n newEvent: 'New Event',\n saveChanges: 'Save Changes',\n delete: 'Delete',\n save: 'Save',\n cancel: 'Cancel',\n edit: 'Edit',\n duplicate: 'Duplicate',\n close: 'Close',\n moreOptions: 'More options',\n addAttachment: 'Upload files',\n addReminder: 'Add',\n title: 'Add title',\n addTitle: 'Add title',\n start: 'Start',\n end: 'End',\n allDay: 'All Day',\n description: 'Description',\n descriptionAndAttachments: 'Description',\n addDescription: 'Add description or notes...',\n location: 'Enter address',\n addLocation: 'Add location',\n locationHelpText: 'Enter a physical address (e.g. \"123 Main St\") to generate the map.',\n notes: 'Notes',\n repeat: 'Repeat',\n noRepeat: 'Does not repeat',\n doesNotRepeat: 'Does not repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n yearly: 'Yearly',\n repeatFor: 'Repeat for',\n times: 'times',\n until: 'Until',\n endRepeat: 'End repeat',\n never: 'Never',\n afterOccurrences: 'After occurrences',\n onDate: 'On date',\n selectCalendar: 'Select Calendar',\n selectType: 'Select Type',\n calendar: 'Calendar',\n calendars: 'Calendars',\n event: 'Event',\n task: 'Task',\n appointmentSchedule: 'Appointment schedule',\n new: 'New',\n guests: 'Guests',\n addGuests: 'Add guests',\n guest: 'guest',\n guestCount: 'guest',\n guestsCount: 'guests',\n guestAdded: 'guest added',\n guestsAdded: 'guests added',\n whosJoining: \"Who's joining?\",\n suggestedTimes: 'Suggested times for guests',\n viewSuggestions: 'View suggestions',\n whereWillItBe: 'Where will it be?',\n dateAndTime: 'Date & Time',\n reminders: 'Reminders',\n dragAndDrop: 'Drag & drop files or',\n attachments: 'Attachments',\n reminderAtTime: 'At time of event',\n reminder5min: '5 minutes before',\n reminder10min: '10 minutes before',\n reminder15min: '15 minutes before',\n reminder30min: '30 minutes before',\n reminder1hour: '1 hour before',\n reminder2hours: '2 hours before',\n reminder1day: '1 day before',\n reminder2days: '2 days before',\n reminder1week: '1 week before',\n tomorrow: 'Tomorrow',\n eventCount: 'event',\n eventsCount: 'events',\n timezone: 'Time zone',\n localTime: 'Local Time',\n operations: 'Operations',\n reverseTimeLabel: 'Time Direction',\n search: 'Search events...',\n allTypes: 'All Types',\n noTitle: '(No title)',\n copy: '(Copy)',\n clickToOpenInMaps: 'Click to open in maps',\n};\n\n// ─── French ───────────────────────────────────────────────────────────────────\nexport const fr: CalendarTranslations = {\n today: \"Aujourd'hui\",\n month: 'Mois',\n week: 'Semaine',\n day: 'Jour',\n agenda: 'Agenda',\n resource: 'Ressources',\n create: 'Créer',\n createEvent: 'Créer un événement',\n editEvent: \"Modifier l'événement\",\n newEvent: 'Nouvel événement',\n saveChanges: 'Enregistrer les modifications',\n delete: 'Supprimer',\n save: 'Enregistrer',\n cancel: 'Annuler',\n edit: 'Modifier',\n duplicate: 'Dupliquer',\n close: 'Fermer',\n moreOptions: \"Plus d'options\",\n addAttachment: 'Télécharger des fichiers',\n addReminder: 'Ajouter',\n title: 'Ajouter un titre',\n addTitle: 'Ajouter un titre',\n start: 'Début',\n end: 'Fin',\n allDay: 'Toute la journée',\n description: 'Description',\n descriptionAndAttachments: 'Description',\n addDescription: 'Ajouter une description ou des notes...',\n location: 'Entrer une adresse',\n addLocation: 'Ajouter un lieu',\n locationHelpText: 'Entrez une adresse physique (ex: \"123 Rue Principale\") pour générer la carte.',\n notes: 'Notes',\n repeat: 'Répéter',\n noRepeat: 'Ne se répète pas',\n doesNotRepeat: 'Ne se répète pas',\n daily: 'Quotidien',\n weekly: 'Hebdomadaire',\n monthly: 'Mensuel',\n yearly: 'Annuel',\n repeatFor: 'Répéter pendant',\n times: 'fois',\n until: \"Jusqu'au\",\n endRepeat: 'Fin de répétition',\n never: 'Jamais',\n afterOccurrences: 'Après occurrences',\n onDate: 'À la date',\n selectCalendar: 'Sélectionner un calendrier',\n selectType: 'Sélectionner un type',\n calendar: 'Calendrier',\n calendars: 'Calendriers',\n event: 'Événement',\n task: 'Tâche',\n appointmentSchedule: 'Planning de rendez-vous',\n new: 'Nouveau',\n guests: 'Invités',\n addGuests: 'Ajouter des invités',\n guest: 'invité',\n guestCount: 'invité',\n guestsCount: 'invités',\n guestAdded: 'invité ajouté',\n guestsAdded: 'invités ajoutés',\n whosJoining: 'Qui participe ?',\n suggestedTimes: 'Horaires suggérés pour les invités',\n viewSuggestions: 'Voir les suggestions',\n whereWillItBe: 'Où aura lieu ?',\n dateAndTime: 'Date et heure',\n reminders: 'Rappels',\n dragAndDrop: 'Glisser-déposer des fichiers ou',\n attachments: 'Pièces jointes',\n reminderAtTime: \"À l'heure de l'événement\",\n reminder5min: '5 minutes avant',\n reminder10min: '10 minutes avant',\n reminder15min: '15 minutes avant',\n reminder30min: '30 minutes avant',\n reminder1hour: '1 heure avant',\n reminder2hours: '2 heures avant',\n reminder1day: '1 jour avant',\n reminder2days: '2 jours avant',\n reminder1week: '1 semaine avant',\n tomorrow: 'Demain',\n eventCount: 'événement',\n eventsCount: 'événements',\n timezone: 'Fuseau horaire',\n localTime: 'Heure locale',\n operations: 'Opérations',\n reverseTimeLabel: 'Direction du temps',\n search: 'Rechercher des événements...',\n allTypes: 'Tous les types',\n noTitle: '(Sans titre)',\n copy: '(Copie)',\n clickToOpenInMaps: 'Cliquer pour ouvrir dans la carte',\n};\n\n// ─── German ───────────────────────────────────────────────────────────────────\nexport const de: CalendarTranslations = {\n today: 'Heute',\n month: 'Monat',\n week: 'Woche',\n day: 'Tag',\n agenda: 'Agenda',\n resource: 'Ressourcen',\n create: 'Erstellen',\n createEvent: 'Termin erstellen',\n editEvent: 'Termin bearbeiten',\n newEvent: 'Neuer Termin',\n saveChanges: 'Änderungen speichern',\n delete: 'Löschen',\n save: 'Speichern',\n cancel: 'Abbrechen',\n edit: 'Bearbeiten',\n duplicate: 'Duplizieren',\n close: 'Schließen',\n moreOptions: 'Weitere Optionen',\n addAttachment: 'Dateien hochladen',\n addReminder: 'Hinzufügen',\n title: 'Titel hinzufügen',\n addTitle: 'Titel hinzufügen',\n start: 'Beginn',\n end: 'Ende',\n allDay: 'Ganztägig',\n description: 'Beschreibung',\n descriptionAndAttachments: 'Beschreibung',\n addDescription: 'Beschreibung oder Notizen hinzufügen...',\n location: 'Adresse eingeben',\n addLocation: 'Ort hinzufügen',\n locationHelpText: 'Geben Sie eine physische Adresse ein (z.B. \"Musterstraße 1\"), um die Karte zu generieren.',\n notes: 'Notizen',\n repeat: 'Wiederholen',\n noRepeat: 'Wiederholt sich nicht',\n doesNotRepeat: 'Wiederholt sich nicht',\n daily: 'Täglich',\n weekly: 'Wöchentlich',\n monthly: 'Monatlich',\n yearly: 'Jährlich',\n repeatFor: 'Wiederholen für',\n times: 'Mal',\n until: 'Bis',\n endRepeat: 'Wiederholung beenden',\n never: 'Nie',\n afterOccurrences: 'Nach Wiederholungen',\n onDate: 'Am Datum',\n selectCalendar: 'Kalender auswählen',\n selectType: 'Typ auswählen',\n calendar: 'Kalender',\n calendars: 'Kalender',\n event: 'Termin',\n task: 'Aufgabe',\n appointmentSchedule: 'Terminplan',\n new: 'Neu',\n guests: 'Gäste',\n addGuests: 'Gäste hinzufügen',\n guest: 'Gast',\n guestCount: 'Gast',\n guestsCount: 'Gäste',\n guestAdded: 'Gast hinzugefügt',\n guestsAdded: 'Gäste hinzugefügt',\n whosJoining: 'Wer nimmt teil?',\n suggestedTimes: 'Vorgeschlagene Zeiten für Gäste',\n viewSuggestions: 'Vorschläge anzeigen',\n whereWillItBe: 'Wo findet es statt?',\n dateAndTime: 'Datum und Uhrzeit',\n reminders: 'Erinnerungen',\n dragAndDrop: 'Dateien hineinziehen oder',\n attachments: 'Anhänge',\n reminderAtTime: 'Zum Zeitpunkt des Termins',\n reminder5min: '5 Minuten vorher',\n reminder10min: '10 Minuten vorher',\n reminder15min: '15 Minuten vorher',\n reminder30min: '30 Minuten vorher',\n reminder1hour: '1 Stunde vorher',\n reminder2hours: '2 Stunden vorher',\n reminder1day: '1 Tag vorher',\n reminder2days: '2 Tage vorher',\n reminder1week: '1 Woche vorher',\n tomorrow: 'Morgen',\n eventCount: 'Termin',\n eventsCount: 'Termine',\n timezone: 'Zeitzone',\n localTime: 'Ortszeit',\n operations: 'Aktionen',\n reverseTimeLabel: 'Zeitrichtung',\n search: 'Termine suchen...',\n allTypes: 'Alle Typen',\n noTitle: '(Kein Titel)',\n copy: '(Kopie)',\n clickToOpenInMaps: 'Klicken, um in der Karte zu öffnen',\n};\n\n// ─── Spanish ──────────────────────────────────────────────────────────────────\nexport const es: CalendarTranslations = {\n today: 'Hoy',\n month: 'Mes',\n week: 'Semana',\n day: 'Día',\n agenda: 'Agenda',\n resource: 'Recursos',\n create: 'Crear',\n createEvent: 'Crear evento',\n editEvent: 'Editar evento',\n newEvent: 'Nuevo evento',\n saveChanges: 'Guardar cambios',\n delete: 'Eliminar',\n save: 'Guardar',\n cancel: 'Cancelar',\n edit: 'Editar',\n duplicate: 'Duplicar',\n close: 'Cerrar',\n moreOptions: 'Más opciones',\n addAttachment: 'Subir archivos',\n addReminder: 'Agregar',\n title: 'Agregar título',\n addTitle: 'Agregar título',\n start: 'Inicio',\n end: 'Fin',\n allDay: 'Todo el día',\n description: 'Descripción',\n descriptionAndAttachments: 'Descripción',\n addDescription: 'Agregar descripción o notas...',\n location: 'Ingresar dirección',\n addLocation: 'Agregar ubicación',\n locationHelpText: 'Ingrese una dirección física (ej. \"Calle Principal 123\") para generar el mapa.',\n notes: 'Notas',\n repeat: 'Repetir',\n noRepeat: 'No se repite',\n doesNotRepeat: 'No se repite',\n daily: 'Diario',\n weekly: 'Semanal',\n monthly: 'Mensual',\n yearly: 'Anual',\n repeatFor: 'Repetir por',\n times: 'veces',\n until: 'Hasta',\n endRepeat: 'Fin de repetición',\n never: 'Nunca',\n afterOccurrences: 'Después de ocurrencias',\n onDate: 'En fecha',\n selectCalendar: 'Seleccionar calendario',\n selectType: 'Seleccionar tipo',\n calendar: 'Calendario',\n calendars: 'Calendarios',\n event: 'Evento',\n task: 'Tarea',\n appointmentSchedule: 'Horario de citas',\n new: 'Nuevo',\n guests: 'Invitados',\n addGuests: 'Agregar invitados',\n guest: 'invitado',\n guestCount: 'invitado',\n guestsCount: 'invitados',\n guestAdded: 'invitado agregado',\n guestsAdded: 'invitados agregados',\n whosJoining: '¿Quién se une?',\n suggestedTimes: 'Horarios sugeridos para invitados',\n viewSuggestions: 'Ver sugerencias',\n whereWillItBe: '¿Dónde será?',\n dateAndTime: 'Fecha y hora',\n reminders: 'Recordatorios',\n dragAndDrop: 'Arrastra y suelta archivos o',\n attachments: 'Adjuntos',\n reminderAtTime: 'A la hora del evento',\n reminder5min: '5 minutos antes',\n reminder10min: '10 minutos antes',\n reminder15min: '15 minutos antes',\n reminder30min: '30 minutos antes',\n reminder1hour: '1 hora antes',\n reminder2hours: '2 horas antes',\n reminder1day: '1 día antes',\n reminder2days: '2 días antes',\n reminder1week: '1 semana antes',\n tomorrow: 'Mañana',\n eventCount: 'evento',\n eventsCount: 'eventos',\n timezone: 'Zona horaria',\n localTime: 'Hora local',\n operations: 'Operaciones',\n reverseTimeLabel: 'Dirección del tiempo',\n search: 'Buscar eventos...',\n allTypes: 'Todos los tipos',\n noTitle: '(Sin título)',\n copy: '(Copia)',\n clickToOpenInMaps: 'Haga clic para abrir en el mapa',\n};\n\n// ─── Italian ──────────────────────────────────────────────────────────────────\nexport const it: CalendarTranslations = {\n today: 'Oggi',\n month: 'Mese',\n week: 'Settimana',\n day: 'Giorno',\n agenda: 'Agenda',\n resource: 'Risorse',\n create: 'Crea',\n createEvent: 'Crea evento',\n editEvent: 'Modifica evento',\n newEvent: 'Nuovo evento',\n saveChanges: 'Salva modifiche',\n delete: 'Elimina',\n save: 'Salva',\n cancel: 'Annulla',\n edit: 'Modifica',\n duplicate: 'Duplica',\n close: 'Chiudi',\n moreOptions: 'Altre opzioni',\n addAttachment: 'Carica file',\n addReminder: 'Aggiungi',\n title: 'Aggiungi titolo',\n addTitle: 'Aggiungi titolo',\n start: 'Inizio',\n end: 'Fine',\n allDay: 'Tutto il giorno',\n description: 'Descrizione',\n descriptionAndAttachments: 'Descrizione',\n addDescription: 'Aggiungi descrizione o note...',\n location: 'Inserisci indirizzo',\n addLocation: 'Aggiungi luogo',\n locationHelpText: 'Inserire un indirizzo fisico (es. \"Via Roma 1\") per generare la mappa.',\n notes: 'Note',\n repeat: 'Ripeti',\n noRepeat: 'Non si ripete',\n doesNotRepeat: 'Non si ripete',\n daily: 'Giornaliero',\n weekly: 'Settimanale',\n monthly: 'Mensile',\n yearly: 'Annuale',\n repeatFor: 'Ripeti per',\n times: 'volte',\n until: 'Fino a',\n endRepeat: 'Fine ripetizione',\n never: 'Mai',\n afterOccurrences: 'Dopo occorrenze',\n onDate: 'Alla data',\n selectCalendar: 'Seleziona calendario',\n selectType: 'Seleziona tipo',\n calendar: 'Calendario',\n calendars: 'Calendari',\n event: 'Evento',\n task: 'Attività',\n appointmentSchedule: 'Programma appuntamenti',\n new: 'Nuovo',\n guests: 'Ospiti',\n addGuests: 'Aggiungi ospiti',\n guest: 'ospite',\n guestCount: 'ospite',\n guestsCount: 'ospiti',\n guestAdded: 'ospite aggiunto',\n guestsAdded: 'ospiti aggiunti',\n whosJoining: 'Chi partecipa?',\n suggestedTimes: 'Orari suggeriti per gli ospiti',\n viewSuggestions: 'Vedi suggerimenti',\n whereWillItBe: 'Dove si terrà?',\n dateAndTime: 'Data e ora',\n reminders: 'Promemoria',\n dragAndDrop: 'Trascina e rilascia i file o',\n attachments: 'Allegati',\n reminderAtTime: \"All'ora dell'evento\",\n reminder5min: '5 minuti prima',\n reminder10min: '10 minuti prima',\n reminder15min: '15 minuti prima',\n reminder30min: '30 minuti prima',\n reminder1hour: '1 ora prima',\n reminder2hours: '2 ore prima',\n reminder1day: '1 giorno prima',\n reminder2days: '2 giorni prima',\n reminder1week: '1 settimana prima',\n tomorrow: 'Domani',\n eventCount: 'evento',\n eventsCount: 'eventi',\n timezone: 'Fuso orario',\n localTime: 'Ora locale',\n operations: 'Operazioni',\n reverseTimeLabel: 'Direzione del tempo',\n search: 'Cerca eventi...',\n allTypes: 'Tutti i tipi',\n noTitle: '(Senza titolo)',\n copy: '(Copia)',\n clickToOpenInMaps: 'Clicca per aprire nella mappa',\n};\n\n// ─── Portuguese ───────────────────────────────────────────────────────────────\nexport const pt: CalendarTranslations = {\n today: 'Hoje',\n month: 'Mês',\n week: 'Semana',\n day: 'Dia',\n agenda: 'Agenda',\n resource: 'Recursos',\n create: 'Criar',\n createEvent: 'Criar evento',\n editEvent: 'Editar evento',\n newEvent: 'Novo evento',\n saveChanges: 'Salvar alterações',\n delete: 'Excluir',\n save: 'Salvar',\n cancel: 'Cancelar',\n edit: 'Editar',\n duplicate: 'Duplicar',\n close: 'Fechar',\n moreOptions: 'Mais opções',\n addAttachment: 'Enviar arquivos',\n addReminder: 'Adicionar',\n title: 'Adicionar título',\n addTitle: 'Adicionar título',\n start: 'Início',\n end: 'Fim',\n allDay: 'Dia inteiro',\n description: 'Descrição',\n descriptionAndAttachments: 'Descrição',\n addDescription: 'Adicionar descrição ou notas...',\n location: 'Inserir endereço',\n addLocation: 'Adicionar local',\n locationHelpText: 'Insira um endereço físico (ex. \"Rua Principal, 123\") para gerar o mapa.',\n notes: 'Notas',\n repeat: 'Repetir',\n noRepeat: 'Não se repete',\n doesNotRepeat: 'Não se repete',\n daily: 'Diário',\n weekly: 'Semanal',\n monthly: 'Mensal',\n yearly: 'Anual',\n repeatFor: 'Repetir por',\n times: 'vezes',\n until: 'Até',\n endRepeat: 'Fim da repetição',\n never: 'Nunca',\n afterOccurrences: 'Após ocorrências',\n onDate: 'Na data',\n selectCalendar: 'Selecionar calendário',\n selectType: 'Selecionar tipo',\n calendar: 'Calendário',\n calendars: 'Calendários',\n event: 'Evento',\n task: 'Tarefa',\n appointmentSchedule: 'Agenda de compromissos',\n new: 'Novo',\n guests: 'Convidados',\n addGuests: 'Adicionar convidados',\n guest: 'convidado',\n guestCount: 'convidado',\n guestsCount: 'convidados',\n guestAdded: 'convidado adicionado',\n guestsAdded: 'convidados adicionados',\n whosJoining: 'Quem vai participar?',\n suggestedTimes: 'Horários sugeridos para convidados',\n viewSuggestions: 'Ver sugestões',\n whereWillItBe: 'Onde será?',\n dateAndTime: 'Data e hora',\n reminders: 'Lembretes',\n dragAndDrop: 'Arraste e solte arquivos ou',\n attachments: 'Anexos',\n reminderAtTime: 'No horário do evento',\n reminder5min: '5 minutos antes',\n reminder10min: '10 minutos antes',\n reminder15min: '15 minutos antes',\n reminder30min: '30 minutos antes',\n reminder1hour: '1 hora antes',\n reminder2hours: '2 horas antes',\n reminder1day: '1 dia antes',\n reminder2days: '2 dias antes',\n reminder1week: '1 semana antes',\n tomorrow: 'Amanhã',\n eventCount: 'evento',\n eventsCount: 'eventos',\n timezone: 'Fuso horário',\n localTime: 'Hora local',\n operations: 'Operações',\n reverseTimeLabel: 'Direção do tempo',\n search: 'Buscar eventos...',\n allTypes: 'Todos os tipos',\n noTitle: '(Sem título)',\n copy: '(Cópia)',\n clickToOpenInMaps: 'Clique para abrir no mapa',\n};\n\n// ─── Arabic ───────────────────────────────────────────────────────────────────\nexport const ar: CalendarTranslations = {\n today: 'اليوم',\n month: 'شهر',\n week: 'أسبوع',\n day: 'يوم',\n agenda: 'جدول الأعمال',\n resource: 'الموارد',\n create: 'إنشاء',\n createEvent: 'إنشاء حدث',\n editEvent: 'تعديل الحدث',\n newEvent: 'حدث جديد',\n saveChanges: 'حفظ التغييرات',\n delete: 'حذف',\n save: 'حفظ',\n cancel: 'إلغاء',\n edit: 'تعديل',\n duplicate: 'تكرار',\n close: 'إغلاق',\n moreOptions: 'المزيد من الخيارات',\n addAttachment: 'رفع ملفات',\n addReminder: 'إضافة',\n title: 'إضافة عنوان',\n addTitle: 'إضافة عنوان',\n start: 'البداية',\n end: 'النهاية',\n allDay: 'طوال اليوم',\n description: 'الوصف',\n descriptionAndAttachments: 'الوصف',\n addDescription: 'إضافة وصف أو ملاحظات...',\n location: 'إدخال العنوان',\n addLocation: 'إضافة موقع',\n locationHelpText: 'أدخل عنوانًا فعليًا (مثل \"شارع الملك فهد 1\") لإنشاء الخريطة.',\n notes: 'ملاحظات',\n repeat: 'تكرار',\n noRepeat: 'لا يتكرر',\n doesNotRepeat: 'لا يتكرر',\n daily: 'يومي',\n weekly: 'أسبوعي',\n monthly: 'شهري',\n yearly: 'سنوي',\n repeatFor: 'تكرار لـ',\n times: 'مرات',\n until: 'حتى',\n endRepeat: 'نهاية التكرار',\n never: 'أبدًا',\n afterOccurrences: 'بعد التكرارات',\n onDate: 'في التاريخ',\n selectCalendar: 'اختر التقويم',\n selectType: 'اختر النوع',\n calendar: 'التقويم',\n calendars: 'التقاويم',\n event: 'حدث',\n task: 'مهمة',\n appointmentSchedule: 'جدول المواعيد',\n new: 'جديد',\n guests: 'الضيوف',\n addGuests: 'إضافة ضيوف',\n guest: 'ضيف',\n guestCount: 'ضيف',\n guestsCount: 'ضيوف',\n guestAdded: 'ضيف مضاف',\n guestsAdded: 'ضيوف مضافون',\n whosJoining: 'من سينضم؟',\n suggestedTimes: 'الأوقات المقترحة للضيوف',\n viewSuggestions: 'عرض الاقتراحات',\n whereWillItBe: 'أين سيكون؟',\n dateAndTime: 'التاريخ والوقت',\n reminders: 'التذكيرات',\n dragAndDrop: 'اسحب وأفلت الملفات أو',\n attachments: 'المرفقات',\n reminderAtTime: 'عند وقت الحدث',\n reminder5min: 'قبل 5 دقائق',\n reminder10min: 'قبل 10 دقائق',\n reminder15min: 'قبل 15 دقيقة',\n reminder30min: 'قبل 30 دقيقة',\n reminder1hour: 'قبل ساعة',\n reminder2hours: 'قبل ساعتين',\n reminder1day: 'قبل يوم',\n reminder2days: 'قبل يومين',\n reminder1week: 'قبل أسبوع',\n tomorrow: 'غدًا',\n eventCount: 'حدث',\n eventsCount: 'أحداث',\n timezone: 'المنطقة الزمنية',\n localTime: 'التوقيت المحلي',\n operations: 'العمليات',\n reverseTimeLabel: 'اتجاه الوقت',\n search: 'البحث عن أحداث...',\n allTypes: 'جميع الأنواع',\n noTitle: '(بدون عنوان)',\n copy: '(نسخة)',\n clickToOpenInMaps: 'انقر للفتح في الخريطة',\n};\n\n// ─── Chinese Simplified ───────────────────────────────────────────────────────\nexport const zh: CalendarTranslations = {\n today: '今天',\n month: '月',\n week: '周',\n day: '天',\n agenda: '议程',\n resource: '资源',\n create: '创建',\n createEvent: '创建活动',\n editEvent: '编辑活动',\n newEvent: '新活动',\n saveChanges: '保存更改',\n delete: '删除',\n save: '保存',\n cancel: '取消',\n edit: '编辑',\n duplicate: '复制',\n close: '关闭',\n moreOptions: '更多选项',\n addAttachment: '上传文件',\n addReminder: '添加',\n title: '添加标题',\n addTitle: '添加标题',\n start: '开始',\n end: '结束',\n allDay: '全天',\n description: '描述',\n descriptionAndAttachments: '描述',\n addDescription: '添加描述或备注...',\n location: '输入地址',\n addLocation: '添加地点',\n locationHelpText: '输入实际地址(例如\"北京市朝阳区1号\")以生成地图。',\n notes: '备注',\n repeat: '重复',\n noRepeat: '不重复',\n doesNotRepeat: '不重复',\n daily: '每天',\n weekly: '每周',\n monthly: '每月',\n yearly: '每年',\n repeatFor: '重复',\n times: '次',\n until: '直到',\n endRepeat: '结束重复',\n never: '永不',\n afterOccurrences: '次后',\n onDate: '在日期',\n selectCalendar: '选择日历',\n selectType: '选择类型',\n calendar: '日历',\n calendars: '日历',\n event: '活动',\n task: '任务',\n appointmentSchedule: '预约日程',\n new: '新建',\n guests: '参与者',\n addGuests: '添加参与者',\n guest: '位参与者',\n guestCount: '位参与者',\n guestsCount: '位参与者',\n guestAdded: '位参与者已添加',\n guestsAdded: '位参与者已添加',\n whosJoining: '谁要参加?',\n suggestedTimes: '为来宾推荐的时间',\n viewSuggestions: '查看建议',\n whereWillItBe: '在哪里举办?',\n dateAndTime: '日期和时间',\n reminders: '提醒',\n dragAndDrop: '拖放文件或',\n attachments: '附件',\n reminderAtTime: '活动时间时',\n reminder5min: '提前5分钟',\n reminder10min: '提前10分钟',\n reminder15min: '提前15分钟',\n reminder30min: '提前30分钟',\n reminder1hour: '提前1小时',\n reminder2hours: '提前2小时',\n reminder1day: '提前1天',\n reminder2days: '提前2天',\n reminder1week: '提前1周',\n tomorrow: '明天',\n eventCount: '个活动',\n eventsCount: '个活动',\n timezone: '时区',\n localTime: '本地时间',\n operations: '操作',\n reverseTimeLabel: '时间方向',\n search: '搜索活动...',\n allTypes: '所有类型',\n noTitle: '(无标题)',\n copy: '(副本)',\n clickToOpenInMaps: '点击在地图中打开',\n};\n\n// ─── Japanese ─────────────────────────────────────────────────────────────────\nexport const ja: CalendarTranslations = {\n today: '今日',\n month: '月',\n week: '週',\n day: '日',\n agenda: 'アジェンダ',\n resource: 'リソース',\n create: '作成',\n createEvent: 'イベントを作成',\n editEvent: 'イベントを編集',\n newEvent: '新しいイベント',\n saveChanges: '変更を保存',\n delete: '削除',\n save: '保存',\n cancel: 'キャンセル',\n edit: '編集',\n duplicate: '複製',\n close: '閉じる',\n moreOptions: 'その他のオプション',\n addAttachment: 'ファイルをアップロード',\n addReminder: '追加',\n title: 'タイトルを追加',\n addTitle: 'タイトルを追加',\n start: '開始',\n end: '終了',\n allDay: '終日',\n description: '説明',\n descriptionAndAttachments: '説明',\n addDescription: '説明またはメモを追加...',\n location: '住所を入力',\n addLocation: '場所を追加',\n locationHelpText: '地図を生成するには実際の住所(例:「東京都渋谷区1-1-1」)を入力してください。',\n notes: 'メモ',\n repeat: '繰り返し',\n noRepeat: '繰り返しなし',\n doesNotRepeat: '繰り返しなし',\n daily: '毎日',\n weekly: '毎週',\n monthly: '毎月',\n yearly: '毎年',\n repeatFor: '繰り返し回数',\n times: '回',\n until: 'まで',\n endRepeat: '繰り返し終了',\n never: 'なし',\n afterOccurrences: '回後に終了',\n onDate: '日付に',\n selectCalendar: 'カレンダーを選択',\n selectType: 'タイプを選択',\n calendar: 'カレンダー',\n calendars: 'カレンダー',\n event: 'イベント',\n task: 'タスク',\n appointmentSchedule: '予約スケジュール',\n new: '新規',\n guests: 'ゲスト',\n addGuests: 'ゲストを追加',\n guest: '人のゲスト',\n guestCount: '人のゲスト',\n guestsCount: '人のゲスト',\n guestAdded: '人のゲストを追加しました',\n guestsAdded: '人のゲストを追加しました',\n whosJoining: '誰が参加しますか?',\n suggestedTimes: 'ゲストへの提案時間',\n viewSuggestions: '提案を見る',\n whereWillItBe: 'どこで開催されますか?',\n dateAndTime: '日時',\n reminders: 'リマインダー',\n dragAndDrop: 'ファイルをドラッグ&ドロップまたは',\n attachments: '添付ファイル',\n reminderAtTime: 'イベント時間に',\n reminder5min: '5分前',\n reminder10min: '10分前',\n reminder15min: '15分前',\n reminder30min: '30分前',\n reminder1hour: '1時間前',\n reminder2hours: '2時間前',\n reminder1day: '1日前',\n reminder2days: '2日前',\n reminder1week: '1週間前',\n tomorrow: '明日',\n eventCount: '件のイベント',\n eventsCount: '件のイベント',\n timezone: 'タイムゾーン',\n localTime: 'ローカル時間',\n operations: '操作',\n reverseTimeLabel: '時間の方向',\n search: 'イベントを検索...',\n allTypes: 'すべてのタイプ',\n noTitle: '(タイトルなし)',\n copy: '(コピー)',\n clickToOpenInMaps: 'クリックして地図で開く',\n};\n\n// ─── Korean ───────────────────────────────────────────────────────────────────\nexport const ko: CalendarTranslations = {\n today: '오늘',\n month: '월',\n week: '주',\n day: '일',\n agenda: '일정',\n resource: '리소스',\n create: '만들기',\n createEvent: '일정 만들기',\n editEvent: '일정 편집',\n newEvent: '새 일정',\n saveChanges: '변경사항 저장',\n delete: '삭제',\n save: '저장',\n cancel: '취소',\n edit: '편집',\n duplicate: '복제',\n close: '닫기',\n moreOptions: '더 보기',\n addAttachment: '파일 업로드',\n addReminder: '추가',\n title: '제목 추가',\n addTitle: '제목 추가',\n start: '시작',\n end: '종료',\n allDay: '종일',\n description: '설명',\n descriptionAndAttachments: '설명',\n addDescription: '설명 또는 메모 추가...',\n location: '주소 입력',\n addLocation: '장소 추가',\n locationHelpText: '지도를 생성하려면 실제 주소(예: \"서울시 강남구 1번지\")를 입력하세요.',\n notes: '메모',\n repeat: '반복',\n noRepeat: '반복 없음',\n doesNotRepeat: '반복 없음',\n daily: '매일',\n weekly: '매주',\n monthly: '매월',\n yearly: '매년',\n repeatFor: '반복 횟수',\n times: '번',\n until: '까지',\n endRepeat: '반복 종료',\n never: '없음',\n afterOccurrences: '번 후 종료',\n onDate: '날짜에',\n selectCalendar: '캘린더 선택',\n selectType: '유형 선택',\n calendar: '캘린더',\n calendars: '캘린더',\n event: '일정',\n task: '작업',\n appointmentSchedule: '예약 일정',\n new: '새로 만들기',\n guests: '참석자',\n addGuests: '참석자 추가',\n guest: '명 참석자',\n guestCount: '명 참석자',\n guestsCount: '명 참석자',\n guestAdded: '명 참석자 추가됨',\n guestsAdded: '명 참석자 추가됨',\n whosJoining: '누가 참가하나요?',\n suggestedTimes: '참석자를 위한 추천 시간',\n viewSuggestions: '제안 보기',\n whereWillItBe: '어디서 열리나요?',\n dateAndTime: '날짜 및 시간',\n reminders: '알림',\n dragAndDrop: '파일을 드래그 앤 드롭하거나',\n attachments: '첨부파일',\n reminderAtTime: '일정 시간에',\n reminder5min: '5분 전',\n reminder10min: '10분 전',\n reminder15min: '15분 전',\n reminder30min: '30분 전',\n reminder1hour: '1시간 전',\n reminder2hours: '2시간 전',\n reminder1day: '1일 전',\n reminder2days: '2일 전',\n reminder1week: '1주일 전',\n tomorrow: '내일',\n eventCount: '개 일정',\n eventsCount: '개 일정',\n timezone: '시간대',\n localTime: '로컬 시간',\n operations: '작업',\n reverseTimeLabel: '시간 방향',\n search: '일정 검색...',\n allTypes: '모든 유형',\n noTitle: '(제목 없음)',\n copy: '(복사)',\n clickToOpenInMaps: '지도에서 열려면 클릭하세요',\n};\n\n// ─── Russian ──────────────────────────────────────────────────────────────────\nexport const ru: CalendarTranslations = {\n today: 'Сегодня',\n month: 'Месяц',\n week: 'Неделя',\n day: 'День',\n agenda: 'Повестка',\n resource: 'Ресурсы',\n create: 'Создать',\n createEvent: 'Создать событие',\n editEvent: 'Изменить событие',\n newEvent: 'Новое событие',\n saveChanges: 'Сохранить изменения',\n delete: 'Удалить',\n save: 'Сохранить',\n cancel: 'Отмена',\n edit: 'Изменить',\n duplicate: 'Дублировать',\n close: 'Закрыть',\n moreOptions: 'Ещё параметры',\n addAttachment: 'Загрузить файлы',\n addReminder: 'Добавить',\n title: 'Добавить заголовок',\n addTitle: 'Добавить заголовок',\n start: 'Начало',\n end: 'Конец',\n allDay: 'Весь день',\n description: 'Описание',\n descriptionAndAttachments: 'Описание',\n addDescription: 'Добавить описание или заметки...',\n location: 'Ввести адрес',\n addLocation: 'Добавить место',\n locationHelpText: 'Введите физический адрес (например, \"ул. Ленина, 1\") для создания карты.',\n notes: 'Заметки',\n repeat: 'Повтор',\n noRepeat: 'Без повтора',\n doesNotRepeat: 'Без повтора',\n daily: 'Ежедневно',\n weekly: 'Еженедельно',\n monthly: 'Ежемесячно',\n yearly: 'Ежегодно',\n repeatFor: 'Повторять',\n times: 'раз',\n until: 'До',\n endRepeat: 'Конец повтора',\n never: 'Никогда',\n afterOccurrences: 'После повторений',\n onDate: 'На дату',\n selectCalendar: 'Выбрать календарь',\n selectType: 'Выбрать тип',\n calendar: 'Календарь',\n calendars: 'Календари',\n event: 'Событие',\n task: 'Задача',\n appointmentSchedule: 'Расписание встреч',\n new: 'Новый',\n guests: 'Гости',\n addGuests: 'Добавить гостей',\n guest: 'гость',\n guestCount: 'гость',\n guestsCount: 'гостей',\n guestAdded: 'гость добавлен',\n guestsAdded: 'гостей добавлено',\n whosJoining: 'Кто присоединится?',\n suggestedTimes: 'Предлагаемое время для гостей',\n viewSuggestions: 'Посмотреть предложения',\n whereWillItBe: 'Где это будет?',\n dateAndTime: 'Дата и время',\n reminders: 'Напоминания',\n dragAndDrop: 'Перетащите файлы или',\n attachments: 'Вложения',\n reminderAtTime: 'Во время события',\n reminder5min: 'За 5 минут',\n reminder10min: 'За 10 минут',\n reminder15min: 'За 15 минут',\n reminder30min: 'За 30 минут',\n reminder1hour: 'За 1 час',\n reminder2hours: 'За 2 часа',\n reminder1day: 'За 1 день',\n reminder2days: 'За 2 дня',\n reminder1week: 'За 1 неделю',\n tomorrow: 'Завтра',\n eventCount: 'событие',\n eventsCount: 'событий',\n timezone: 'Часовой пояс',\n localTime: 'Местное время',\n operations: 'Операции',\n reverseTimeLabel: 'Направление времени',\n search: 'Поиск событий...',\n allTypes: 'Все типы',\n noTitle: '(Без заголовка)',\n copy: '(Копия)',\n clickToOpenInMaps: 'Нажмите, чтобы открыть на карте',\n};\n\n// ─── Dutch ────────────────────────────────────────────────────────────────────\nexport const nl: CalendarTranslations = {\n today: 'Vandaag',\n month: 'Maand',\n week: 'Week',\n day: 'Dag',\n agenda: 'Agenda',\n resource: 'Bronnen',\n create: 'Aanmaken',\n createEvent: 'Evenement aanmaken',\n editEvent: 'Evenement bewerken',\n newEvent: 'Nieuw evenement',\n saveChanges: 'Wijzigingen opslaan',\n delete: 'Verwijderen',\n save: 'Opslaan',\n cancel: 'Annuleren',\n edit: 'Bewerken',\n duplicate: 'Dupliceren',\n close: 'Sluiten',\n moreOptions: 'Meer opties',\n addAttachment: 'Bestanden uploaden',\n addReminder: 'Toevoegen',\n title: 'Titel toevoegen',\n addTitle: 'Titel toevoegen',\n start: 'Begin',\n end: 'Einde',\n allDay: 'De hele dag',\n description: 'Beschrijving',\n descriptionAndAttachments: 'Beschrijving',\n addDescription: 'Beschrijving of notities toevoegen...',\n location: 'Adres invoeren',\n addLocation: 'Locatie toevoegen',\n locationHelpText: 'Voer een fysiek adres in (bijv. \"Hoofdstraat 1\") om de kaart te genereren.',\n notes: 'Notities',\n repeat: 'Herhalen',\n noRepeat: 'Geen herhaling',\n doesNotRepeat: 'Geen herhaling',\n daily: 'Dagelijks',\n weekly: 'Wekelijks',\n monthly: 'Maandelijks',\n yearly: 'Jaarlijks',\n repeatFor: 'Herhalen voor',\n times: 'keer',\n until: 'Tot',\n endRepeat: 'Herhaling beëindigen',\n never: 'Nooit',\n afterOccurrences: 'Na herhalingen',\n onDate: 'Op datum',\n selectCalendar: 'Kalender selecteren',\n selectType: 'Type selecteren',\n calendar: 'Kalender',\n calendars: 'Kalenders',\n event: 'Evenement',\n task: 'Taak',\n appointmentSchedule: 'Afspraakschema',\n new: 'Nieuw',\n guests: 'Gasten',\n addGuests: 'Gasten toevoegen',\n guest: 'gast',\n guestCount: 'gast',\n guestsCount: 'gasten',\n guestAdded: 'gast toegevoegd',\n guestsAdded: 'gasten toegevoegd',\n whosJoining: 'Wie doet er mee?',\n suggestedTimes: 'Voorgestelde tijden voor gasten',\n viewSuggestions: 'Suggesties bekijken',\n whereWillItBe: 'Waar zal het zijn?',\n dateAndTime: 'Datum en tijd',\n reminders: 'Herinneringen',\n dragAndDrop: 'Sleep bestanden of',\n attachments: 'Bijlagen',\n reminderAtTime: 'Op het moment van het evenement',\n reminder5min: '5 minuten van tevoren',\n reminder10min: '10 minuten van tevoren',\n reminder15min: '15 minuten van tevoren',\n reminder30min: '30 minuten van tevoren',\n reminder1hour: '1 uur van tevoren',\n reminder2hours: '2 uur van tevoren',\n reminder1day: '1 dag van tevoren',\n reminder2days: '2 dagen van tevoren',\n reminder1week: '1 week van tevoren',\n tomorrow: 'Morgen',\n eventCount: 'evenement',\n eventsCount: 'evenementen',\n timezone: 'Tijdzone',\n localTime: 'Lokale tijd',\n operations: 'Bewerkingen',\n reverseTimeLabel: 'Tijdrichting',\n search: 'Evenementen zoeken...',\n allTypes: 'Alle typen',\n noTitle: '(Geen titel)',\n copy: '(Kopie)',\n clickToOpenInMaps: 'Klik om op de kaart te openen',\n};\n\n// ─── Polish ───────────────────────────────────────────────────────────────────\nexport const pl: CalendarTranslations = {\n today: 'Dziś',\n month: 'Miesiąc',\n week: 'Tydzień',\n day: 'Dzień',\n agenda: 'Agenda',\n resource: 'Zasoby',\n create: 'Utwórz',\n createEvent: 'Utwórz wydarzenie',\n editEvent: 'Edytuj wydarzenie',\n newEvent: 'Nowe wydarzenie',\n saveChanges: 'Zapisz zmiany',\n delete: 'Usuń',\n save: 'Zapisz',\n cancel: 'Anuluj',\n edit: 'Edytuj',\n duplicate: 'Duplikuj',\n close: 'Zamknij',\n moreOptions: 'Więcej opcji',\n addAttachment: 'Prześlij pliki',\n addReminder: 'Dodaj',\n title: 'Dodaj tytuł',\n addTitle: 'Dodaj tytuł',\n start: 'Początek',\n end: 'Koniec',\n allDay: 'Cały dzień',\n description: 'Opis',\n descriptionAndAttachments: 'Opis',\n addDescription: 'Dodaj opis lub notatki...',\n location: 'Wprowadź adres',\n addLocation: 'Dodaj lokalizację',\n locationHelpText: 'Wprowadź adres fizyczny (np. \"ul. Główna 1\") aby wygenerować mapę.',\n notes: 'Notatki',\n repeat: 'Powtarzaj',\n noRepeat: 'Nie powtarza się',\n doesNotRepeat: 'Nie powtarza się',\n daily: 'Codziennie',\n weekly: 'Co tydzień',\n monthly: 'Co miesiąc',\n yearly: 'Co rok',\n repeatFor: 'Powtarzaj przez',\n times: 'razy',\n until: 'Do',\n endRepeat: 'Koniec powtarzania',\n never: 'Nigdy',\n afterOccurrences: 'Po powtórzeniach',\n onDate: 'W dniu',\n selectCalendar: 'Wybierz kalendarz',\n selectType: 'Wybierz typ',\n calendar: 'Kalendarz',\n calendars: 'Kalendarze',\n event: 'Wydarzenie',\n task: 'Zadanie',\n appointmentSchedule: 'Harmonogram spotkań',\n new: 'Nowy',\n guests: 'Goście',\n addGuests: 'Dodaj gości',\n guest: 'gość',\n guestCount: 'gość',\n guestsCount: 'gości',\n guestAdded: 'gość dodany',\n guestsAdded: 'gości dodanych',\n whosJoining: 'Kto dołącza?',\n suggestedTimes: 'Proponowane godziny dla gości',\n viewSuggestions: 'Zobacz sugestie',\n whereWillItBe: 'Gdzie się odbędzie?',\n dateAndTime: 'Data i godzina',\n reminders: 'Przypomnienia',\n dragAndDrop: 'Przeciągnij i upuść pliki lub',\n attachments: 'Załączniki',\n reminderAtTime: 'O czasie wydarzenia',\n reminder5min: '5 minut wcześniej',\n reminder10min: '10 minut wcześniej',\n reminder15min: '15 minut wcześniej',\n reminder30min: '30 minut wcześniej',\n reminder1hour: '1 godzinę wcześniej',\n reminder2hours: '2 godziny wcześniej',\n reminder1day: '1 dzień wcześniej',\n reminder2days: '2 dni wcześniej',\n reminder1week: '1 tydzień wcześniej',\n tomorrow: 'Jutro',\n eventCount: 'wydarzenie',\n eventsCount: 'wydarzeń',\n timezone: 'Strefa czasowa',\n localTime: 'Czas lokalny',\n operations: 'Operacje',\n reverseTimeLabel: 'Kierunek czasu',\n search: 'Szukaj wydarzeń...',\n allTypes: 'Wszystkie typy',\n noTitle: '(Bez tytułu)',\n copy: '(Kopia)',\n clickToOpenInMaps: 'Kliknij, aby otworzyć na mapie',\n};\n\n// ─── Swedish ──────────────────────────────────────────────────────────────────\nexport const sv: CalendarTranslations = {\n today: 'Idag',\n month: 'Månad',\n week: 'Vecka',\n day: 'Dag',\n agenda: 'Agenda',\n resource: 'Resurser',\n create: 'Skapa',\n createEvent: 'Skapa händelse',\n editEvent: 'Redigera händelse',\n newEvent: 'Ny händelse',\n saveChanges: 'Spara ändringar',\n delete: 'Ta bort',\n save: 'Spara',\n cancel: 'Avbryt',\n edit: 'Redigera',\n duplicate: 'Duplicera',\n close: 'Stäng',\n moreOptions: 'Fler alternativ',\n addAttachment: 'Ladda upp filer',\n addReminder: 'Lägg till',\n title: 'Lägg till titel',\n addTitle: 'Lägg till titel',\n start: 'Start',\n end: 'Slut',\n allDay: 'Hela dagen',\n description: 'Beskrivning',\n descriptionAndAttachments: 'Beskrivning',\n addDescription: 'Lägg till beskrivning eller anteckningar...',\n location: 'Ange adress',\n addLocation: 'Lägg till plats',\n locationHelpText: 'Ange en fysisk adress (t.ex. \"Storgatan 1\") för att generera kartan.',\n notes: 'Anteckningar',\n repeat: 'Upprepa',\n noRepeat: 'Upprepas inte',\n doesNotRepeat: 'Upprepas inte',\n daily: 'Dagligen',\n weekly: 'Varje vecka',\n monthly: 'Varje månad',\n yearly: 'Varje år',\n repeatFor: 'Upprepa',\n times: 'gånger',\n until: 'Till',\n endRepeat: 'Avsluta upprepning',\n never: 'Aldrig',\n afterOccurrences: 'Efter upprepningar',\n onDate: 'På datum',\n selectCalendar: 'Välj kalender',\n selectType: 'Välj typ',\n calendar: 'Kalender',\n calendars: 'Kalendrar',\n event: 'Händelse',\n task: 'Uppgift',\n appointmentSchedule: 'Bokningsschema',\n new: 'Ny',\n guests: 'Gäster',\n addGuests: 'Lägg till gäster',\n guest: 'gäst',\n guestCount: 'gäst',\n guestsCount: 'gäster',\n guestAdded: 'gäst tillagd',\n guestsAdded: 'gäster tillagda',\n whosJoining: 'Vem deltar?',\n suggestedTimes: 'Föreslagna tider för gäster',\n viewSuggestions: 'Visa förslag',\n whereWillItBe: 'Var ska det vara?',\n dateAndTime: 'Datum och tid',\n reminders: 'Påminnelser',\n dragAndDrop: 'Dra och släpp filer eller',\n attachments: 'Bilagor',\n reminderAtTime: 'Vid händelsens tid',\n reminder5min: '5 minuter innan',\n reminder10min: '10 minuter innan',\n reminder15min: '15 minuter innan',\n reminder30min: '30 minuter innan',\n reminder1hour: '1 timme innan',\n reminder2hours: '2 timmar innan',\n reminder1day: '1 dag innan',\n reminder2days: '2 dagar innan',\n reminder1week: '1 vecka innan',\n tomorrow: 'Imorgon',\n eventCount: 'händelse',\n eventsCount: 'händelser',\n timezone: 'Tidszon',\n localTime: 'Lokal tid',\n operations: 'Åtgärder',\n reverseTimeLabel: 'Tidsriktning',\n search: 'Sök händelser...',\n allTypes: 'Alla typer',\n noTitle: '(Ingen titel)',\n copy: '(Kopia)',\n clickToOpenInMaps: 'Klicka för att öppna i karta',\n};\n\n// ─── Locale map: language code → translations object ─────────────────────────\nexport const LOCALES: Record<LanguageCode, CalendarTranslations> = {\n tr, en, fr, de, es, it, pt, ar, zh, ja, ko, ru, nl, pl, sv,\n};\n\n// ─── date-fns locale map: language code → date-fns Locale ────────────────────\nexport const DATE_FNS_LOCALES: Record<LanguageCode, Locale> = {\n tr: dnsTr,\n en: dnsEnUS,\n fr: dnsFr,\n de: dnsDe,\n es: dnsEs,\n it: dnsIt,\n pt: dnsPt,\n ar: dnsAr,\n zh: dnsZhCN,\n ja: dnsJa,\n ko: dnsKo,\n ru: dnsRu,\n nl: dnsNl,\n pl: dnsPl,\n sv: dnsSv,\n};\n\n/**\n * Returns the full translation object for a given language code,\n * merged with any custom override translations.\n */\nexport function getTranslations(\n language: LanguageCode = 'tr',\n overrides: Partial<CalendarTranslations> = {}\n): CalendarTranslations {\n return { ...LOCALES[language], ...overrides };\n}\n","import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { format, Locale } from 'date-fns';\nimport { Button } from './ui/button';\nimport { ChevronLeft, ChevronRight, Menu, Moon, Sun, CalendarDays, CalendarRange, Calendar, ListTodo, ChevronDown, Globe, Plus, MoreHorizontal, CalendarCheck2 } from 'lucide-react';\nimport { ViewType, CustomView } from '../types';\nimport { LanguageCode, LANGUAGE_META } from '../locales';\nimport { cn } from '../utils';\n\nconst DROPDOWN_GAP = 8;\nconst VIEWPORT_PADDING = 8;\nconst LANG_DROPDOWN_WIDTH = 208; // matches w-52\nconst CUSTOM_VIEW_DROPDOWN_WIDTH = 160; // matches min-w-[160px]\n\n/** Position a fixed dropdown below its trigger, clamped inside the viewport. */\nfunction getDropdownPosition(triggerRect: DOMRect, dropdownWidth: number) {\n let left = triggerRect.left;\n const top = triggerRect.bottom + DROPDOWN_GAP;\n\n // If left-aligned panel overflows right, align its right edge with the trigger\n if (left + dropdownWidth > window.innerWidth - VIEWPORT_PADDING) {\n left = triggerRect.right - dropdownWidth;\n }\n\n // Final clamp so the panel never leaves the viewport\n left = Math.max(VIEWPORT_PADDING, Math.min(left, window.innerWidth - dropdownWidth - VIEWPORT_PADDING));\n\n return { top, left };\n}\n\ninterface CalendarHeaderProps {\n currentDate: Date;\n onPrev: () => void;\n onNext: () => void;\n onToday: () => void;\n view: ViewType;\n onViewChange: (view: ViewType) => void;\n onMenuClick?: () => void;\n isDarkMode?: boolean;\n onThemeToggle?: () => void;\n translations: any;\n hideViewSwitcher?: boolean;\n language?: LanguageCode;\n onLanguageChange?: (lang: LanguageCode) => void;\n locale?: Locale;\n /** Called when the user clicks the \"Create Event\" button in the header. */\n onCreateEvent?: () => void;\n /** Custom views shown after the built-in view buttons with a divider. */\n customViews?: CustomView[];\n /** The id of the currently active custom view (null = built-in view). */\n activeCustomViewId?: string | null;\n /** Called when a custom view button is clicked. */\n onCustomViewChange?: (id: string | null) => void;\n /** Total number of visible events – displayed as a badge before the view switcher. */\n eventCount?: number;\n /** When true, hides the language-switcher dropdown. The active language is still applied. */\n hideLanguageSwitcher?: boolean;\n}\n\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\n currentDate,\n onPrev,\n onNext,\n onToday,\n view,\n onViewChange,\n onMenuClick,\n isDarkMode,\n onThemeToggle,\n translations,\n hideViewSwitcher,\n language = 'tr',\n onLanguageChange,\n locale,\n onCreateEvent,\n customViews,\n activeCustomViewId,\n onCustomViewChange,\n eventCount,\n hideLanguageSwitcher = false,\n}) => {\n const [isLangOpen, setIsLangOpen] = useState(false);\n const [isCustomViewOpen, setIsCustomViewOpen] = useState(false);\n const langButtonRef = useRef<HTMLButtonElement>(null);\n const langDropdownRef = useRef<HTMLDivElement>(null);\n const customViewDropdownRef = useRef<HTMLDivElement>(null);\n const customViewButtonRef = useRef<HTMLButtonElement>(null);\n\n // Measured positions for portal-rendered dropdowns\n const [langPos, setLangPos] = useState<{ top: number; left: number } | null>(null);\n const [customViewPos, setCustomViewPos] = useState<{ top: number; left: number } | null>(null);\n\n const updateLangPos = useCallback(() => {\n const el = langButtonRef.current;\n if (!el) return;\n setLangPos(getDropdownPosition(el.getBoundingClientRect(), LANG_DROPDOWN_WIDTH));\n }, []);\n\n const updateCustomViewPos = useCallback(() => {\n const el = customViewButtonRef.current;\n if (!el) return;\n setCustomViewPos(getDropdownPosition(el.getBoundingClientRect(), CUSTOM_VIEW_DROPDOWN_WIDTH));\n }, []);\n\n // Measure language button position using useLayoutEffect for accuracy after paint\n useLayoutEffect(() => {\n if (!isLangOpen) return;\n updateLangPos();\n }, [isLangOpen, updateLangPos]);\n\n // Measure custom-view button position\n useLayoutEffect(() => {\n if (!isCustomViewOpen) return;\n updateCustomViewPos();\n }, [isCustomViewOpen, updateCustomViewPos]);\n\n // Re-measure dropdowns on scroll/resize so they stay anchored to the trigger\n useEffect(() => {\n if (!isLangOpen) return;\n const handle = () => updateLangPos();\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n return () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n }, [isLangOpen, updateLangPos]);\n\n useEffect(() => {\n if (!isCustomViewOpen) return;\n const handle = () => updateCustomViewPos();\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n return () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n }, [isCustomViewOpen, updateCustomViewPos]);\n\n // Close language dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n const insideButton = langButtonRef.current?.contains(target);\n const insideDropdown = langDropdownRef.current?.contains(target);\n if (!insideButton && !insideDropdown) setIsLangOpen(false);\n };\n if (isLangOpen) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isLangOpen]);\n\n // Close custom-view dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n const insideButton = customViewButtonRef.current?.contains(target);\n const insideDropdown = customViewDropdownRef.current?.contains(target);\n if (!insideButton && !insideDropdown) setIsCustomViewOpen(false);\n };\n if (isCustomViewOpen) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isCustomViewOpen]);\n\n const viewConfig = [\n { key: 'month', icon: CalendarDays },\n { key: 'week', icon: CalendarRange },\n { key: 'day', icon: Calendar },\n { key: 'agenda', icon: ListTodo },\n ] as const;\n\n const currentLang = LANGUAGE_META[language] ?? LANGUAGE_META['tr'];\n\n return (\n <div className=\"flex flex-col md:flex-row items-center justify-between px-3 md:px-5 py-3 border-b-[0px] border-border/50 bg-gradient-to-r from-background via-background to-muted/20 gap-3 md:gap-0 min-h-[64px]\">\n {/* ── Left Section: Menu, Navigation, Date Title ── */}\n <div className=\"flex items-center gap-2 w-full md:w-auto justify-between md:justify-start\">\n {/* Controls group: hamburger + today + create + arrows */}\n <div className=\"flex items-center gap-2 md:gap-3\">\n {/* Sidebar toggle */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/80 rounded-xl h-10 w-10 transition-all duration-200\"\n onClick={onMenuClick}\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n\n {/* Today button */}\n <Button\n variant=\"outline\"\n onClick={onToday}\n className=\"h-9 px-5 rounded-xl text-sm font-medium hidden sm:inline-flex border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200\"\n >\n {translations.today}\n </Button>\n\n {/* Create Event button — icon only; tooltip label appears on hover */}\n {onCreateEvent && (\n <div className=\"relative group hidden sm:block\">\n <Button\n onClick={onCreateEvent}\n size=\"icon\"\n className=\"h-9 w-9 rounded-xl shadow-sm shadow-primary/20 transition-all duration-200\"\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n\n {/* Tooltip */}\n <div className=\"pointer-events-none absolute left-1/2 -translate-x-1/2 top-full mt-2 z-50 opacity-0 group-hover:opacity-100 transition-opacity duration-150\">\n <div className=\"bg-popover text-popover-foreground text-xs font-medium px-2.5 py-1.5 rounded-lg shadow-md border border-border/60 whitespace-nowrap\">\n {translations.createEvent ?? translations.create}\n </div>\n {/* Arrow */}\n <div className=\"absolute -top-1 left-1/2 -translate-x-1/2 w-2 h-2 bg-popover border-l border-t border-border/60 rotate-45\" />\n </div>\n </div>\n )}\n\n {/* Navigation arrows */}\n <div className=\"flex items-center bg-muted/40 rounded-xl p-0.5\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onPrev}\n className=\"rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200\"\n >\n <ChevronLeft className=\"h-4 w-4 text-muted-foreground\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onNext}\n className=\"rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200\"\n >\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </Button>\n </div>\n\n {/* Current month/year — inline on desktop (sm+), hidden on mobile (moved outside) */}\n <div className=\"ml-2 md:ml-4 hidden sm:block\">\n <h2 className=\"text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight\">\n {format(currentDate, 'MMMM yyyy', { locale })}\n </h2>\n </div>\n </div>\n\n {/* Current month/year — right-aligned on mobile only */}\n <div className=\"sm:hidden\">\n <h2 className=\"text-lg font-semibold text-foreground whitespace-nowrap capitalize tracking-tight\">\n {format(currentDate, 'MMMM yyyy', { locale })}\n </h2>\n </div>\n </div>\n\n {/* ── Right Section: Language Switcher, Theme Toggle, View Switcher ── */}\n <div className=\"flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end\">\n\n {/* ── Language Dropdown – hidden when hideLanguageSwitcher is true ── */}\n {onLanguageChange && !hideLanguageSwitcher && (\n <div className=\"relative\">\n <button\n ref={langButtonRef}\n onClick={() => setIsLangOpen(!isLangOpen)}\n className={cn(\n \"flex items-center gap-1.5 h-9 px-3 rounded-xl text-sm font-medium transition-all duration-200\",\n \"text-muted-foreground hover:text-foreground hover:bg-accent/80\",\n isLangOpen && \"bg-accent/80 text-foreground\"\n )}\n title={currentLang.english}\n >\n <Globe className=\"h-3.5 w-3.5\" />\n <span className=\"text-base leading-none\">{currentLang.flag}</span>\n <span className=\"hidden sm:inline text-xs font-semibold uppercase tracking-wider\">\n {language}\n </span>\n <ChevronDown className={cn(\"h-3.5 w-3.5 transition-transform duration-200\", isLangOpen && \"rotate-180\")} />\n </button>\n\n {/* Dropdown — portalled to body so transforms/overflow can't affect positioning */}\n {isLangOpen && langPos && createPortal(\n <div\n ref={langDropdownRef}\n className=\"fixed w-52 bg-background border border-border/60 rounded-2xl shadow-2xl z-[9999] overflow-hidden py-1.5\"\n style={{ top: langPos.top, left: langPos.left, width: LANG_DROPDOWN_WIDTH }}\n >\n {/* Header */}\n <div className=\"px-3 py-2 border-b border-border/40 mb-1\">\n <p className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n Language / Dil\n </p>\n </div>\n\n {/* Language options */}\n <div className=\"max-h-72 overflow-y-auto\">\n {(Object.entries(LANGUAGE_META) as [LanguageCode, typeof LANGUAGE_META[LanguageCode]][]).map(([code, meta]) => (\n <button\n key={code}\n onClick={() => { onLanguageChange(code); setIsLangOpen(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 text-sm transition-all duration-150\",\n \"hover:bg-accent/60\",\n language === code\n ? \"bg-primary/10 text-primary font-semibold\"\n : \"text-foreground\"\n )}\n >\n <span className=\"text-lg leading-none w-6 text-center\">{meta.flag}</span>\n <div className=\"flex-1 text-left\">\n <div className={cn(\"font-medium\", meta.rtl && \"text-right\")}>{meta.native}</div>\n <div className=\"text-xs text-muted-foreground\">{meta.english}</div>\n </div>\n {language === code && <div className=\"w-2 h-2 rounded-full bg-primary shrink-0\" />}\n </button>\n ))}\n </div>\n </div>,\n document.body\n )}\n </div>\n )}\n\n {/* ── Theme Toggle ── */}\n {onThemeToggle && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"rounded-xl h-9 w-9 hover:bg-accent/80 transition-all duration-200\"\n onClick={onThemeToggle}\n >\n {isDarkMode ? (\n <Sun className=\"h-4 w-4 text-amber-500\" />\n ) : (\n <Moon className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </Button>\n )}\n\n {/* ── Event count badge – displayed to the left of the view switcher ── */}\n {typeof eventCount === 'number' && !hideViewSwitcher && (\n <div\n className=\"flex items-center gap-1.5 h-8 px-3 rounded-xl bg-primary/10 text-primary text-xs font-semibold tabular-nums select-none border border-primary/20 shadow-sm shadow-primary/10\"\n title={`${eventCount} event${eventCount !== 1 ? 's' : ''}`}\n >\n <CalendarCheck2 className=\"w-3.5 h-3.5 shrink-0\" />\n <span>{eventCount}</span>\n </div>\n )}\n\n {/* ── View Switcher (built-in + custom views) ── */}\n {!hideViewSwitcher && (\n <div className=\"flex items-center bg-muted/50 backdrop-blur-sm rounded-xl p-1 gap-0.5\">\n {/* Built-in views: month / week / day / agenda */}\n {viewConfig.map(({ key, icon: Icon }) => (\n <Button\n key={key}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => { onViewChange(key); onCustomViewChange?.(null); }}\n className={cn(\n \"h-8 px-3 text-xs rounded-lg transition-all duration-200 gap-1.5\",\n view === key && !activeCustomViewId\n ? \"bg-background shadow-sm text-foreground font-medium border-[0.5px] border-border/50\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"hidden sm:inline\">{translations[key]}</span>\n </Button>\n ))}\n\n {/* Divider + \"...\" dropdown for custom views */}\n {customViews && customViews.length > 0 && (\n <>\n <div className=\"w-px h-5 bg-border/60 mx-0.5 shrink-0\" />\n\n <div className=\"relative\">\n {/* Trigger button — highlighted when a custom view is active */}\n <Button\n ref={customViewButtonRef}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCustomViewOpen((o) => !o)}\n className={cn(\n \"h-8 px-2.5 text-xs rounded-lg transition-all duration-200 gap-1\",\n activeCustomViewId\n ? \"bg-background shadow-sm text-foreground font-medium border-[0.5px] border-border/50\"\n : \"text-muted-foreground hover:text-foreground hover:bg-background/50\"\n )}\n title=\"Daha fazla görünüm\"\n >\n {activeCustomViewId\n ? customViews.find((cv) => cv.id === activeCustomViewId)?.label\n : <MoreHorizontal className=\"h-3.5 w-3.5\" />}\n <ChevronDown className={cn(\"h-3 w-3 transition-transform duration-150\", isCustomViewOpen && \"rotate-180\")} />\n </Button>\n\n {/* Dropdown — portalled to body for correct positioning on mobile */}\n {isCustomViewOpen && customViewPos && createPortal(\n <div\n ref={customViewDropdownRef}\n className=\"fixed min-w-[160px] bg-background border border-border/60 rounded-2xl shadow-2xl z-[9999] overflow-hidden py-1.5\"\n style={{ top: customViewPos.top, left: customViewPos.left, minWidth: CUSTOM_VIEW_DROPDOWN_WIDTH }}\n >\n {customViews.map((cv) => (\n <button\n key={cv.id}\n onClick={() => { onCustomViewChange?.(cv.id); setIsCustomViewOpen(false); }}\n className={cn(\n \"w-full flex items-center gap-2.5 px-3 py-2.5 text-sm transition-all duration-150\",\n \"hover:bg-accent/60\",\n activeCustomViewId === cv.id\n ? \"bg-primary/10 text-primary font-semibold\"\n : \"text-foreground\"\n )}\n >\n {cv.icon && (\n <span className=\"w-4 h-4 flex items-center justify-center shrink-0\">\n {cv.icon}\n </span>\n )}\n <span>{cv.label}</span>\n {activeCustomViewId === cv.id && (\n <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary shrink-0\" />\n )}\n </button>\n ))}\n </div>,\n document.body\n )}\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { \n startOfMonth, \n endOfMonth, \n startOfWeek, \n endOfWeek, \n eachDayOfInterval, \n addDays,\n isSameMonth,\n isSameDay,\n isToday,\n format,\n Locale,\n addMonths,\n subMonths,\n addWeeks,\n subWeeks,\n addDays as addDaysFns,\n subDays\n} from 'date-fns';\n\nexport const getMonthGrid = (date: Date, weekStartOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] => {\n const monthStart = startOfMonth(date);\n const monthEnd = endOfMonth(monthStart);\n \n const startDate = startOfWeek(monthStart, { weekStartsOn: weekStartOn });\n const endDate = endOfWeek(monthEnd, { weekStartsOn: weekStartOn });\n\n const dateFormat = 'd';\n const rows = [];\n let days = [];\n let day = startDate;\n let formattedDate = '';\n\n const grid: Date[] = [];\n\n // If the grid needs to always show 6 weeks (42 days) to be consistent\n // const totalDays = 42; \n // But eachDayOfInterval is easier.\n \n return eachDayOfInterval({\n start: startDate,\n end: endDate\n });\n};\n\nexport const getWeekDays = (date: Date, weekStartOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] => {\n const start = startOfWeek(date, { weekStartsOn: weekStartOn });\n const end = endOfWeek(date, { weekStartsOn: weekStartOn });\n return eachDayOfInterval({ start, end });\n};\n\nexport const getTimeSlots = (startHour: number = 0, endHour: number = 24, intervalMinutes: number = 30): Date[] => {\n // This might return just simple objects or dates relative to a base\n // For rendering the y-axis, we just need the labels usually.\n // But for the grid, we might need slots.\n \n // Simplified for now: return strings or just numbers\n return []; \n};\n\n// ─── Time-format helpers ──────────────────────────────────────────────────────\n\n/**\n * Languages that conventionally use 12-hour AM/PM clock.\n * All others default to 24-hour format.\n */\nconst AMPM_LANGUAGES = new Set(['en']);\n\n/** Returns true when the given language uses AM/PM (12-hour) clock. */\nexport const uses12Hour = (language: string): boolean =>\n AMPM_LANGUAGES.has(language);\n\n/**\n * Short hour label used on time-axis columns (e.g. \"2 PM\" vs \"14:00\").\n * - 12h: 'h a' → \"2 PM\"\n * - 24h: 'H:mm' → \"14:00\" (omits leading zero and colon when on the hour: use 'H' not 'HH')\n */\nexport const getTimeFormat = (language: string): string =>\n uses12Hour(language) ? 'h a' : 'H:mm';\n\n/**\n * Full time string including minutes (e.g. \"2:30 PM\" vs \"14:30\").\n * - 12h: 'h:mm a' → \"2:30 PM\"\n * - 24h: 'HH:mm' → \"14:30\"\n */\nexport const getTimeFormatFull = (language: string): string =>\n uses12Hour(language) ? 'h:mm a' : 'HH:mm';\n\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport {\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n isSameMonth,\n isSameDay,\n isToday,\n format,\n addMonths,\n subMonths,\n addWeeks,\n subWeeks,\n addDaysFns,\n subDays\n};\n","import React from 'react';\r\nimport { format, isSameMonth, isSameDay, isToday, addMonths, subMonths } from 'date-fns';\r\nimport type { Locale } from 'date-fns';\r\nimport { getMonthGrid } from '../lib/date';\r\nimport { Button } from './ui/button';\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../utils';\r\n\r\nimport { ViewType } from '../types';\r\n\r\ninterface MiniCalendarProps {\r\n currentDate: Date;\r\n onDateChange: (date: Date) => void;\r\n onViewChange?: (view: ViewType) => void;\r\n className?: string;\r\n /** date-fns locale used for month/year header formatting. */\r\n locale?: Locale;\r\n}\r\n\r\nexport const MiniCalendar: React.FC<MiniCalendarProps> = ({\r\n currentDate,\r\n onDateChange,\r\n onViewChange,\r\n className,\r\n locale,\r\n}) => {\r\n const [viewDate, setViewDate] = React.useState(currentDate);\r\n \r\n // Sync viewDate with currentDate when it changes externally\r\n React.useEffect(() => {\r\n setViewDate(currentDate);\r\n }, [currentDate]);\r\n\r\n const days = React.useMemo(() => getMonthGrid(viewDate), [viewDate]);\r\n\r\n // Generate weekday headers from locale (Mon=0 … Sun=6 shorthand)\r\n const weekDays = React.useMemo(() => {\r\n const base = new Date(2024, 0, 7); // Sunday Jan 7 2024\r\n return Array.from({ length: 7 }, (_, i) => {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + i);\r\n return format(d, 'EEEEE', { locale }); // narrow (single letter)\r\n });\r\n }, [locale]);\r\n\r\n const handlePrev = () => {\r\n const newDate = subMonths(viewDate, 1);\r\n setViewDate(newDate);\r\n // Optional: if user wants to sync main calendar on arrow click, uncomment:\r\n onDateChange(newDate);\r\n if (onViewChange) onViewChange('month');\r\n };\r\n\r\n const handleNext = () => {\r\n const newDate = addMonths(viewDate, 1);\r\n setViewDate(newDate);\r\n // Optional: if user wants to sync main calendar on arrow click, uncomment:\r\n onDateChange(newDate);\r\n if (onViewChange) onViewChange('month');\r\n };\r\n \r\n const handleDateClick = (day: Date) => {\r\n onDateChange(day);\r\n if (onViewChange) onViewChange('day');\r\n };\r\n\r\n return (\r\n <div className={cn(\"px-4 w-[260px]\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <span className=\"text-sm font-semibold text-foreground capitalize\">\r\n {format(viewDate, 'MMMM yyyy', { locale })}\r\n </span>\r\n <div className=\"flex items-center bg-muted/40 rounded-lg p-0.5\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-7 w-7 rounded-md hover:bg-background/80 transition-all\"\r\n onClick={handlePrev}\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"h-7 w-7 rounded-md hover:bg-background/80 transition-all\"\r\n onClick={handleNext}\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n {/* Weekday Headers */}\r\n <div className=\"grid grid-cols-7 gap-y-2 text-center mb-2\">\r\n {weekDays.map((day, i) => (\r\n <div key={`${day}-${i}`} className=\"text-[10px] text-muted-foreground/70 font-semibold uppercase\">\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Days Grid */}\r\n <div className=\"grid grid-cols-7 gap-y-1 text-center\">\r\n {days.map(day => {\r\n const isSelected = isSameDay(day, currentDate);\r\n const isCurrentMonth = isSameMonth(day, viewDate);\r\n const isTodayDate = isToday(day);\r\n\r\n return (\r\n <button\r\n key={day.toISOString()}\r\n onClick={() => handleDateClick(day)}\r\n className={cn(\r\n \"h-8 w-8 mx-auto flex items-center justify-center text-xs rounded-xl transition-all duration-200 font-medium\",\r\n !isCurrentMonth && \"text-muted-foreground/30\",\r\n isCurrentMonth && !isSelected && !isTodayDate && \"text-foreground hover:bg-accent/80\",\r\n isSelected && \"bg-primary text-primary-foreground shadow-md shadow-primary/30 scale-105\",\r\n !isSelected && isTodayDate && \"bg-primary/10 text-primary ring-1 ring-primary/30\"\r\n )}\r\n >\r\n {format(day, 'd')}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\nimport { Button } from './ui/button';\nimport { ChevronDown, Globe, LayoutGrid, X } from 'lucide-react';\nimport { MiniCalendar } from './MiniCalendar';\nimport { cn } from '../utils';\nimport { toZonedTime } from 'date-fns-tz';\nimport { format } from 'date-fns';\n\nimport { ViewType, CalendarEvent, SidebarMenuItem } from '../types';\n\ninterface SidebarProps {\n currentDate: Date;\n onDateChange: (date: Date) => void;\n onViewChange?: (view: ViewType) => void;\n onEventCreate?: () => void;\n timezone?: string;\n onTimezoneChange?: (timezone: string) => void;\n className?: string;\n readOnly?: boolean;\n calendars?: {\n id: string;\n label: string;\n color?: string;\n active?: boolean;\n }[];\n onCalendarToggle?: (calendarId: string, active: boolean) => void;\n translations?: any;\n events?: CalendarEvent[];\n onImport?: (events: Partial<CalendarEvent>[]) => void;\n /** date-fns locale forwarded to the built-in MiniCalendar for date formatting. */\n locale?: import('date-fns').Locale;\n /** Optional custom mini-calendar component replacing the built-in one. */\n renderMiniCalendar?: (props: {\n currentDate: Date;\n onDateChange: (date: Date) => void;\n onViewChange?: (view: ViewType) => void;\n }) => React.ReactNode;\n /** Custom navigation items; clicking one sets it as the active view. */\n sidebarMenus?: SidebarMenuItem[];\n /** The id of the currently active custom menu (null = calendar view). */\n activeCustomMenu?: string | null;\n /** Called when a custom menu item is clicked. */\n onCustomMenuChange?: (id: string | null) => void;\n /** When true, time flows 23:00 → 00:00 (bottom-to-top). */\n reverseTime?: boolean;\n /** Called when the reverse-time toggle is clicked. */\n onReverseTimeChange?: (reversed: boolean) => void;\n /** Custom views to list inside the İşlemler section. */\n customViews?: import('../types').CustomView[];\n /** The id of the currently active custom view (null = built-in). */\n activeCustomViewId?: string | null;\n /** Called when a custom view row is clicked in the sidebar. */\n onCustomViewChange?: (id: string | null) => void;\n}\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n currentDate,\n onDateChange,\n onViewChange,\n onEventCreate,\n timezone,\n onTimezoneChange,\n className,\n readOnly,\n calendars,\n onCalendarToggle,\n translations,\n renderMiniCalendar,\n sidebarMenus,\n activeCustomMenu,\n onCustomMenuChange,\n reverseTime = false,\n onReverseTimeChange,\n customViews,\n activeCustomViewId,\n onCustomViewChange,\n locale,\n}) => {\n const [calendarsOpen, setCalendarsOpen] = useState(true);\n const [timezoneOpen, setTimezoneOpen] = useState(false);\n const [now, setNow] = useState<Date | null>(null);\n const [hasMounted, setHasMounted] = useState(false);\n // Controls whether the menu panel is expanded (replaces the İşlemler button)\n const [menusExpanded, setMenusExpanded] = useState(false);\n\n // Only run on client to prevent hydration mismatch\n useEffect(() => {\n setHasMounted(true);\n setNow(new Date());\n const timer = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(timer);\n }, []);\n \n // Default demo data if no calendars provided\n const defaultCalendars = [\n { id: '1', label: 'My Calendar', color: '#3b82f6', active: true },\n { id: '2', label: 'Birthdays', color: '#10b981', active: true },\n { id: '3', label: 'Tasks', color: '#6366f1', active: true },\n ];\n\n const displayCalendars = calendars || defaultCalendars;\n\n const getAcronym = (tz: string) => {\n if (!tz || !now) return 'LOC';\n try {\n return new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' })\n .formatToParts(now)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) { return ''; }\n };\n\n const timezones = [\n { value: '', label: translations?.localTime ?? 'Local Time', acronym: 'LOC' },\n { value: 'UTC', label: 'UTC', acronym: 'UTC' },\n { value: 'America/New_York', label: 'New York', acronym: 'EST' },\n { value: 'America/Chicago', label: 'Chicago', acronym: 'CST' },\n { value: 'America/Denver', label: 'Denver', acronym: 'MST' },\n { value: 'America/Los_Angeles', label: 'Los Angeles', acronym: 'PST' },\n { value: 'Europe/London', label: 'London', acronym: 'GMT' },\n { value: 'Europe/Paris', label: 'Paris', acronym: 'CET' },\n { value: 'Europe/Berlin', label: 'Berlin', acronym: 'CET' },\n { value: 'Asia/Dubai', label: 'Dubai', acronym: 'GST' },\n { value: 'Asia/Tokyo', label: 'Tokyo', acronym: 'JST' },\n { value: 'Asia/Singapore', label: 'Singapore', acronym: 'SGT' },\n { value: 'Australia/Sydney', label: 'Sydney', acronym: 'AEDT' },\n ];\n\n // Format label with time: HH:MM (ACR)\n const formatTzLabel = (tz: { value: string, label: string, acronym: string }, showTime: boolean = true) => {\n // Don't show time if not mounted yet (SSR) to prevent hydration mismatch\n if (!hasMounted || !now || !showTime) {\n return <span>{tz.label}</span>;\n }\n\n let time = '';\n let acronym = tz.acronym;\n\n try {\n if (!tz.value) {\n time = format(now, 'HH:mm');\n // Try to get real local acronym\n try {\n acronym = new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' })\n .formatToParts(now)\n .find(part => part.type === 'timeZoneName')?.value || 'LOC';\n } catch (e) {}\n } else {\n const zDate = toZonedTime(now, tz.value);\n time = format(zDate, 'HH:mm');\n // Calculate dynamic acronym if needed (e.g. DST changes)\n const dynAcronym = getAcronym(tz.value);\n if (dynAcronym && !dynAcronym.includes('GMT') && !dynAcronym.includes('Time')) {\n acronym = dynAcronym;\n }\n }\n } catch (e) {\n return <span>{tz.label}</span>;\n }\n\n return (\n <div className=\"flex justify-between w-full\">\n <span>{tz.label}</span>\n <span className=\"text-muted-foreground ml-2 tabular-nums\">\n {time} <span className=\"text-xs opacity-75\">({acronym})</span>\n </span>\n </div>\n );\n };\n \n const selectedTzObj = timezones.find(t => t.value === (timezone || ''));\n const selectedTimezoneLabel = selectedTzObj ? formatTzLabel(selectedTzObj) : (translations?.localTime ?? 'Local Time');\n\n\n\n return (\n <div className={cn(\"flex flex-col w-[260px] overflow-x-hidden h-full bg-gradient-to-b scrollbar-hide from-background via-background to-muted/10 pt-4 pb-4 overflow-y-auto\", className)}>\n\n {/* ── İşlemler / Sidebar Menus ── */}\n {sidebarMenus && sidebarMenus.length > 0 && (\n <div className=\"px-4 mb-4\">\n {/* When menus are collapsed: show the \"İşlemler\" button */}\n {!menusExpanded && (\n <Button\n variant=\"outline\"\n className=\"w-full rounded-2xl h-11 gap-2.5 justify-start border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200 font-medium text-sm\"\n onClick={() => setMenusExpanded(true)}\n >\n <LayoutGrid className=\"w-4 h-4\" />\n <span>{translations?.operations ?? 'İşlemler'}</span>\n </Button>\n )}\n \n\n {/* When menus are expanded: show the menu list, button disappears */}\n {menusExpanded && (\n <div className=\"animate-in fade-in slide-in-from-top-2 duration-200\">\n {/* Header row with close button */}\n <div className=\"flex items-center justify-between mb-2 px-1\">\n <span className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n {translations?.operations ?? 'İşlemler'}\n </span>\n <button\n onClick={() => setMenusExpanded(false)}\n className=\"w-6 h-6 rounded-lg flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-accent/60 transition-all duration-150\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n <nav className=\"space-y-0.5\">\n {/* Calendar — returns to normal calendar view */}\n <button\n onClick={() => { onCustomMenuChange?.(null); setMenusExpanded(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-sm font-medium transition-all duration-150\",\n activeCustomMenu === null\n ? \"bg-primary/10 text-primary\"\n : \"text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n )}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/>\n </svg>\n <span>{translations?.calendar ?? 'Takvim'}</span>\n {activeCustomMenu === null && <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary\" />}\n </button>\n\n {/* User-defined sidebar menu items */}\n {sidebarMenus?.map((item) => (\n <button\n key={item.id}\n onClick={() => { onCustomMenuChange?.(item.id); setMenusExpanded(false); }}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-sm font-medium transition-all duration-150\",\n activeCustomMenu === item.id\n ? \"bg-primary/10 text-primary\"\n : \"text-muted-foreground hover:bg-accent/60 hover:text-foreground\"\n )}\n >\n {item.icon && (\n <span className=\"w-4 h-4 shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n )}\n <span className=\"truncate\">{item.label}</span>\n {activeCustomMenu === item.id && <span className=\"ml-auto w-1.5 h-1.5 rounded-full bg-primary\" />}\n </button>\n ))}\n\n {/* customViews are only in the header \"...\" dropdown — not listed here */}\n </nav>\n </div>\n )}\n </div>\n )}\n\n {/* ── Mobile-only: Create Event button (desktop has it in the header) ── */}\n {onEventCreate && (\n <div className=\"md:hidden px-4 mb-4\">\n <Button\n onClick={() => { onEventCreate(); }}\n className=\"w-full rounded-2xl h-11 gap-2.5 justify-center shadow-sm shadow-primary/20 transition-all duration-200 font-medium text-sm\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>\n </svg>\n <span>{translations?.createEvent ?? 'Etkinlik Oluştur'}</span>\n </Button>\n </div>\n )}\n\n {/* ── Saat yönü toggle'ı ── */}\n {onReverseTimeChange && (\n <div className=\"px-4 mb-4\">\n <button\n onClick={() => onReverseTimeChange(!reverseTime)}\n className={cn(\n \"w-full flex items-center justify-between px-3 py-2.5 rounded-xl border-[0.5px] transition-all duration-200 group\",\n reverseTime\n ? \"bg-primary/10 border-primary/30 text-primary\"\n : \"bg-muted/30 border-border/50 text-muted-foreground hover:border-primary/30 hover:text-foreground\"\n )}\n >\n {/* Label + direction hint */}\n <div className=\"flex items-center gap-2.5\">\n {/* Up/Down arrow icon */}\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"/>\n <polyline points=\"5 12 12 5 19 12\"/>\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" className=\"opacity-40\"/>\n <polyline points=\"5 12 12 19 19 12\" className=\"opacity-40\"/>\n </svg>\n <div className=\"text-left\">\n <div className=\"text-xs font-semibold leading-tight\">{translations?.reverseTimeLabel ?? 'Saat Yönü'}</div>\n <div className=\"text-[10px] leading-tight opacity-70 mt-0.5\">\n {reverseTime ? \"23:00 → 00:00\" : \"00:00 → 23:00\"}\n </div>\n </div>\n </div>\n\n {/* Toggle pill */}\n <div className={cn(\n \"relative w-9 h-5 rounded-full transition-colors duration-200 shrink-0\",\n reverseTime ? \"bg-primary\" : \"bg-border\"\n )}>\n <span className={cn(\n \"absolute top-0.5 w-4 h-4 bg-white rounded-full shadow-sm transition-all duration-200\",\n reverseTime ? \"left-4\" : \"left-0.5\"\n )} />\n </div>\n </button>\n </div>\n )}\n\n {renderMiniCalendar ? (\n // Custom mini-calendar: receives the same props as the built-in one\n renderMiniCalendar({ currentDate, onDateChange, onViewChange })\n ) : (\n <MiniCalendar currentDate={currentDate} onDateChange={onDateChange} onViewChange={onViewChange} locale={locale} />\n )}\n\n <div className=\"flex-1 px-4 space-y-5 mt-5\">\n {/* Calendars List */}\n <div className=\"bg-muted/20 rounded-2xl p-3 border-[0px] border-border/30\">\n <div\n className=\"flex items-center justify-between cursor-pointer hover:bg-accent/50 p-2 -m-1 rounded-xl mb-2 transition-all duration-200\"\n onClick={() => setCalendarsOpen(!calendarsOpen)}\n >\n <span className=\"text-sm font-semibold text-foreground\">{translations?.calendars}</span>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform duration-200\", calendarsOpen && \"rotate-180\")} />\n </div>\n\n {calendarsOpen && (\n <div className=\"space-y-1\">\n {displayCalendars.map(cal => (\n <div\n key={cal.id}\n className=\"flex items-center gap-3 py-2 px-2 hover:bg-accent/60 rounded-xl cursor-pointer group transition-all duration-200\"\n onClick={() => onCalendarToggle?.(cal.id, !(cal.active ?? true))}\n >\n <div className=\"relative flex items-center justify-center\">\n <input\n type=\"checkbox\"\n checked={cal.active ?? true}\n onChange={(e) => {\n e.stopPropagation();\n onCalendarToggle?.(cal.id, e.target.checked);\n }}\n className=\"peer h-5 w-5 rounded-md border-2 border-border/60 cursor-pointer appearance-none checked:border-transparent transition-all duration-200\"\n style={{ '--primary-color': cal.color } as React.CSSProperties}\n data-cal-id={cal.id}\n />\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity\">\n <svg className=\"w-3.5 h-3.5 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <style>{`\n input[type=\"checkbox\"][data-cal-id=\"${cal.id}\"]:checked {\n background-color: ${cal.color} !important;\n border-color: ${cal.color} !important;\n }\n input[type=\"checkbox\"][data-cal-id=\"${cal.id}\"]:focus {\n --tw-ring-color: ${cal.color}40 !important;\n }\n `}</style>\n </div>\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n <span className=\"text-sm text-foreground/90 truncate font-medium\">{cal.label}</span>\n </div>\n <div\n className=\"w-2 h-2 rounded-full opacity-60 group-hover:opacity-100 transition-opacity\"\n style={{ backgroundColor: cal.color }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Timezone Selector - Custom UI */}\n <div className=\"mt-auto px-4 pt-5\">\n <div className=\"bg-muted/20 rounded-2xl p-3\">\n <div className=\"flex items-center gap-2 mb-3\">\n <div className=\"p-1.5 bg-primary/10 rounded-lg\">\n <Globe className=\"w-4 h-4 text-primary\" />\n </div>\n <span className=\"text-sm font-semibold text-foreground\">{translations?.timezone}</span>\n </div>\n\n <div className=\"relative\">\n <button\n onClick={() => setTimezoneOpen(!timezoneOpen)}\n className=\"w-full flex items-center justify-between bg-blue-200/40 hover:bg-blue-200/80 rounded-xl py-2.5 pl-4 pr-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/50 transition-all duration-200 text-left\"\n >\n <div className=\"flex-1 truncate mr-2 font-medium\">{selectedTimezoneLabel}</div>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform duration-200\", timezoneOpen && \"rotate-180\")} />\n </button>\n\n {timezoneOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setTimezoneOpen(false)} />\n <div className=\"absolute bottom-full left-0 w-full mb-2 bg-background rounded-xl shadow-2xl z-50 max-h-[260px] overflow-y-auto p-1.5 animate-in fade-in zoom-in-95 duration-200 backdrop-blur-none\">\n {timezones.map(tz => (\n <div\n key={tz.value}\n className={cn(\n \"px-3 py-2.5 text-sm rounded-lg cursor-pointer transition-all duration-200\",\n (timezone || '') === tz.value\n ? \"bg-primary text-primary-foreground font-semibold\"\n : \"text-foreground hover:bg-accent/80\"\n )}\n onClick={() => {\n onTimezoneChange?.(tz.value);\n setTimezoneOpen(false);\n }}\n >\n {formatTzLabel(tz)}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { CSS } from '@dnd-kit/utilities';\r\nimport { CalendarEvent } from '../../types';\r\nimport { cn } from '../../utils';\r\n\r\ninterface DraggableEventProps extends React.HTMLAttributes<HTMLDivElement> {\r\n event: CalendarEvent;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const DraggableEvent: React.FC<DraggableEventProps> = ({ event, children, className, style: propStyle, ...props }) => {\r\n const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({\r\n id: event.id,\r\n data: { event },\r\n });\r\n\r\n const style = {\r\n ...propStyle,\r\n transform: CSS.Translate.toString(transform),\r\n zIndex: isDragging ? 100 : propStyle?.zIndex,\r\n // When dragging, we want the ORIGINAL element to be almost invisible (or fully invisible)\r\n // so that the DragOverlay (the \"ghost\") is the only thing the user focuses on.\r\n // If we set opacity: 0, it disappears. If 0.1, it's a faint placeholder.\r\n // The user asked for \"Make the entire dragged item transparent\". \r\n // Usually this means the original item should be faded out while the drag overlay is moving.\r\n opacity: isDragging ? 0 : propStyle?.opacity, // Hiding original element completely\r\n };\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n style={style}\r\n {...listeners}\r\n {...attributes}\r\n {...props}\r\n className={cn(\"touch-none\", className)}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { useDroppable } from '@dnd-kit/core';\r\nimport { cn } from '../../utils';\r\n\r\ninterface DroppableCellProps {\r\n id: string; // usually ISO date string\r\n date: Date;\r\n resourceId?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const DroppableCell: React.FC<DroppableCellProps> = ({ id, date, resourceId, children, className, style, onClick }) => {\r\n const { isOver, setNodeRef } = useDroppable({\r\n id: id,\r\n data: { date, resourceId },\r\n });\r\n\r\n // Determine quarter based on minutes for graduated coloring\r\n const minutes = date.getMinutes();\r\n const quarterClass = \r\n minutes === 0 ? \"hover:bg-blue-50/50 dark:hover:bg-blue-900/10\" :\r\n minutes === 15 ? \"hover:bg-blue-50/80 dark:hover:bg-blue-900/20\" :\r\n minutes === 30 ? \"hover:bg-blue-100/50 dark:hover:bg-blue-900/30\" :\r\n \"hover:bg-blue-100/80 dark:hover:bg-blue-900/40\";\r\n\r\n const activeQuarterClass = \r\n minutes === 0 ? \"bg-blue-50/50 dark:bg-blue-900/10 ring-2 ring-primary ring-inset\" :\r\n minutes === 15 ? \"bg-blue-50/80 dark:bg-blue-900/20 ring-2 ring-primary ring-inset\" :\r\n minutes === 30 ? \"bg-blue-100/50 dark:bg-blue-900/30 ring-2 ring-primary ring-inset\" :\r\n \"bg-blue-100/80 dark:bg-blue-900/40 ring-2 ring-primary ring-inset\";\r\n\r\n return (\r\n <div\r\n ref={setNodeRef}\r\n className={cn(\r\n className,\r\n quarterClass,\r\n isOver && activeQuarterClass\r\n )}\r\n style={style}\r\n onClick={onClick}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import React, { useMemo, useCallback } from 'react';\nimport { format, isSameMonth, isSameDay, isToday, startOfWeek, endOfWeek, eachDayOfInterval } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { getMonthGrid } from '../lib/date';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { Locale } from 'date-fns';\n\ninterface MonthViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onDateClick?: (date: Date) => void;\n timezone?: string;\n locale?: Locale;\n}\n\n// Memoized Event Item Component for performance\nconst EventItem = React.memo(({ event, onEventClick }: { event: CalendarEvent, onEventClick?: (e: CalendarEvent) => void }) => (\n <DraggableEvent event={event}>\n <div\n className={cn(\n \"text-xs px-2.5 py-1.5 rounded-lg truncate cursor-pointer shadow-sm transition-all duration-200\",\n \"hover:shadow-md hover:scale-[1.02] hover:z-10\",\n !event.color && \"bg-primary/10 text-primary hover:bg-primary/15 border-[0.5px] border-primary/20\"\n )}\n style={event.color ? {\n backgroundColor: `${event.color}20`,\n color: event.color,\n borderLeft: `3px solid ${event.color}`,\n } : undefined}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n >\n <span className=\"font-medium\">{event.title}</span>\n </div>\n </DraggableEvent>\n));\n\nEventItem.displayName = 'EventItem';\n\nexport const MonthView: React.FC<MonthViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onDateClick,\n timezone,\n locale\n}) => {\n const days = useMemo(() => getMonthGrid(currentDate), [currentDate]);\n \n // Dynamic week days generation\n const weekDays = useMemo(() => {\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n return eachDayOfInterval({ start, end });\n }, [currentDate]);\n\n // Timezone adjustment helper\n const getZonedDate = useCallback((date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n }, [timezone]);\n\n // Pre-calculate event buckets for O(1) access during render\n // This is crucial for handling 10000+ events\n const eventsByDay = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n \n events.forEach(event => {\n const zonedStart = getZonedDate(event.start);\n // Use date string as key (YYYY-MM-DD)\n const key = format(zonedStart, 'yyyy-MM-dd');\n \n if (!map.has(key)) {\n map.set(key, []);\n }\n map.get(key)!.push(event);\n });\n \n return map;\n }, [events, getZonedDate]);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] scrollbar-hide border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm\">\n <div className=\"overflow-y-auto flex-1 min-h-0 relative\">\n {/* Sticky Header */}\n <div className=\"grid grid-cols-7 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/30 via-muted/40 to-muted/30 sticky top-0 z-20 backdrop-blur-sm\">\n {weekDays.map((day) => (\n <div\n key={day.toISOString()}\n className=\"py-3 text-center text-xs font-semibold text-muted-foreground border-r-[0.5px] border-border/30 last:border-r-0 uppercase tracking-wider\"\n >\n {format(day, 'EEE', { locale })}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7\" style={{ gridAutoRows: '130px' }}>\n {days.map((day) => {\n const dayKey = format(day, 'yyyy-MM-dd');\n const dayEvents = eventsByDay.get(dayKey) || [];\n\n const isCurrentMonth = isSameMonth(day, currentDate);\n const cellId = day.toISOString();\n\n return (\n <DroppableCell\n key={cellId}\n id={cellId}\n date={day}\n className={cn(\n \"h-[130px] p-2 border-b-[0.5px] border-r-[0.5px] border-border/30 last:border-r-0 relative transition-all duration-200 hover:bg-accent/5 flex flex-col gap-1.5 overflow-hidden group\",\n !isCurrentMonth && \"bg-muted/5 text-muted-foreground/60\",\n isToday(day) && \"bg-primary/5 ring-1 ring-inset ring-primary/20\"\n )}\n onClick={() => onDateClick?.(day)}\n >\n <div className=\"flex justify-between items-start\">\n <div className={cn(\n \"text-sm font-semibold w-7 h-7 flex items-center justify-center rounded-full transition-all duration-200\",\n isToday(day)\n ? \"bg-primary text-primary-foreground shadow-md shadow-primary/30\"\n : \"group-hover:bg-accent\"\n )}>\n {format(day, 'd', { locale })}\n </div>\n {dayEvents.length > 0 && (\n <div className=\"text-[10px] font-medium text-muted-foreground/60 bg-muted/50 px-1.5 py-0.5 rounded-full\">\n {dayEvents.length}\n </div>\n )}\n </div>\n\n <div className=\"flex-1 flex flex-col gap-1 scrollbar-hide overflow-y-auto overflow-x-hidden\">\n {dayEvents.slice(0, 4).map(event => (\n <EventItem key={`${event.id}-${dayKey}`} event={event} onEventClick={onEventClick} />\n ))}\n {dayEvents.length > 4 && (\n <div className=\"text-[10px] text-primary font-semibold text-center py-1 px-2 rounded-md bg-primary/5 hover:bg-primary/10 cursor-pointer transition-colors\">\n +{dayEvents.length - 4} more\n </div>\n )}\n </div>\n </DroppableCell>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useCallback } from 'react';\r\nimport { CalendarEvent } from '../../types';\r\nimport { cn } from '../../utils';\r\n\r\ninterface ResizableEventProps {\r\n event: CalendarEvent;\r\n hourHeight: number;\r\n minDuration?: number; // Minimum duration in minutes\r\n onResize?: (event: CalendarEvent, newEnd: Date) => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n readonly?: boolean;\r\n}\r\n\r\nexport const ResizableEvent: React.FC<ResizableEventProps> = ({\r\n event,\r\n hourHeight,\r\n minDuration = 15,\r\n onResize,\r\n children,\r\n className,\r\n style,\r\n readonly,\r\n}) => {\r\n const [isResizing, setIsResizing] = useState(false);\r\n const [resizeHeight, setResizeHeight] = useState<number | null>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const startYRef = useRef<number>(0);\r\n const startHeightRef = useRef<number>(0);\r\n\r\n const handleResizeStart = useCallback((e: React.MouseEvent | React.TouchEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;\r\n startYRef.current = clientY;\r\n startHeightRef.current = containerRef.current?.offsetHeight || 0;\r\n\r\n setIsResizing(true);\r\n\r\n const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\r\n const moveClientY = 'touches' in moveEvent ? moveEvent.touches[0].clientY : moveEvent.clientY;\r\n const deltaY = moveClientY - startYRef.current;\r\n\r\n // Snap to 15-minute intervals\r\n const snapInterval = hourHeight / 4; // 15 minutes\r\n const snappedDelta = Math.round(deltaY / snapInterval) * snapInterval;\r\n\r\n const newHeight = Math.max(\r\n (minDuration / 60) * hourHeight, // Minimum height based on minDuration\r\n startHeightRef.current + snappedDelta\r\n );\r\n\r\n setResizeHeight(newHeight);\r\n };\r\n\r\n const handleEnd = () => {\r\n setIsResizing(false);\r\n\r\n if (resizeHeight !== null && containerRef.current && onResize) {\r\n // Calculate new end time based on resize\r\n const originalHeight = startHeightRef.current;\r\n const heightDiff = (resizeHeight || originalHeight) - originalHeight;\r\n const minutesDiff = (heightDiff / hourHeight) * 60;\r\n\r\n const newEnd = new Date(event.end);\r\n newEnd.setMinutes(newEnd.getMinutes() + minutesDiff);\r\n\r\n // Ensure new end is after start\r\n if (newEnd > event.start) {\r\n onResize(event, newEnd);\r\n }\r\n }\r\n\r\n setResizeHeight(null);\r\n\r\n document.removeEventListener('mousemove', handleMove);\r\n document.removeEventListener('mouseup', handleEnd);\r\n document.removeEventListener('touchmove', handleMove);\r\n document.removeEventListener('touchend', handleEnd);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMove);\r\n document.addEventListener('mouseup', handleEnd);\r\n document.addEventListener('touchmove', handleMove, { passive: false });\r\n document.addEventListener('touchend', handleEnd);\r\n }, [event, hourHeight, minDuration, onResize, resizeHeight]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"relative group\", className)}\r\n style={{\r\n ...style,\r\n height: resizeHeight !== null ? `${resizeHeight}px` : style?.height,\r\n }}\r\n >\r\n {children}\r\n\r\n {/* Resize Handle */}\r\n <div\r\n className={cn(\r\n readonly ? \"cursor-default\" : \"cursor-ns-resize group-hover:opacity-100\",\r\n \"absolute bottom-0 left-0 right-0 h-3 z-20 flex items-center justify-center\",\r\n \"opacity-0 transition-opacity\",\r\n isResizing && \"opacity-100\"\r\n )}\r\n onMouseDown={readonly ? undefined : handleResizeStart}\r\n onTouchStart={readonly ? undefined : handleResizeStart}\r\n >\r\n <div className={cn(\r\n \"w-8 h-1 rounded-full transition-all\",\r\n isResizing ? \"bg-primary\" : \"bg-muted-foreground/30 group-hover:bg-primary/50\"\r\n )} />\r\n </div>\r\n\r\n {/* Visual feedback during resize */}\r\n {isResizing && (\r\n <div className=\"absolute inset-0 border-2 border-primary border-dashed rounded-md pointer-events-none bg-primary/5\" />\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { EventBadge } from '../types';\r\nimport { cn } from '../utils';\r\n\r\ninterface EventCardBadgeProps {\r\n badge: EventBadge;\r\n /**\r\n * When true (short events), only the icon is shown to save space.\r\n * The full name remains available via the native title tooltip.\r\n */\r\n compact?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Renders an event badge in the top-left corner of a timed event card.\r\n * Expects `badge.icon` (JSX) and `badge.name` (label).\r\n */\r\nexport const EventCardBadge: React.FC<EventCardBadgeProps> = ({\r\n badge,\r\n compact = false,\r\n className,\r\n}) => {\r\n // Skip render when required fields are missing\r\n if (!badge?.icon || !badge?.name) return null;\r\n\r\n return (\r\n <div\r\n className={cn(\r\n // Pin to the card's top-left corner above content\r\n 'absolute top-0 left-0 z-10 flex items-center gap-0.5 max-w-[calc(100%-4px)]',\r\n 'rounded-br-md bg-background/85 backdrop-blur-sm border-b border-r border-border/40',\r\n 'px-1 py-0.5 text-[9px] font-semibold leading-none text-foreground/80',\r\n 'pointer-events-none select-none',\r\n className\r\n )}\r\n title={badge.name}\r\n >\r\n {/* Icon slot — normalize child SVG size for consistent badge height */}\r\n <span className=\"shrink-0 flex items-center justify-center [&>svg]:w-2.5 [&>svg]:h-2.5\">\r\n {badge.icon}\r\n </span>\r\n {/* Hide label on compact (short) cards; keep icon only */}\r\n {!compact && (\r\n <span className=\"truncate max-w-[72px]\">{badge.name}</span>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n User,\r\n Users,\r\n Package,\r\n Video,\r\n MapPin,\r\n Sparkles,\r\n RefreshCw,\r\n ClipboardCheck,\r\n Presentation,\r\n Star,\r\n PartyPopper,\r\n Ban,\r\n Home,\r\n Headphones,\r\n} from 'lucide-react';\r\nimport { BuiltInEventBadgeId, CalendarEvent, EventBadge } from '../types';\r\nimport { LanguageCode } from '../locales';\r\n\r\n/** Shared class applied to all built-in badge icons for consistent size. */\r\nconst ICON_CLASS = 'w-2.5 h-2.5';\r\n\r\n// Re-export the id union so consumers can keep importing from this module.\r\nexport type { BuiltInEventBadgeId };\r\n\r\n/** Icon node for each built-in badge id. */\r\nexport const EVENT_BADGE_ICONS: Record<BuiltInEventBadgeId, React.ReactNode> = {\r\n privateLesson: <User className={ICON_CLASS} />,\r\n groupLesson: <Users className={ICON_CLASS} />,\r\n packageLesson: <Package className={ICON_CLASS} />,\r\n online: <Video className={ICON_CLASS} />,\r\n inPerson: <MapPin className={ICON_CLASS} />,\r\n homeVisit: <Home className={ICON_CLASS} />,\r\n trial: <Sparkles className={ICON_CLASS} />,\r\n makeup: <RefreshCw className={ICON_CLASS} />,\r\n exam: <ClipboardCheck className={ICON_CLASS} />,\r\n workshop: <Presentation className={ICON_CLASS} />,\r\n priority: <Star className={ICON_CLASS} />,\r\n holiday: <PartyPopper className={ICON_CLASS} />,\r\n cancelled: <Ban className={ICON_CLASS} />,\r\n listening: <Headphones className={ICON_CLASS} />,\r\n};\r\n\r\n/** Localized short labels for built-in badges (tr + en fallbacks). */\r\nconst EVENT_BADGE_LABELS: Record<'tr' | 'en', Record<BuiltInEventBadgeId, string>> = {\r\n tr: {\r\n privateLesson: 'Özel Ders',\r\n groupLesson: 'Grup Ders',\r\n packageLesson: 'Paket Ders',\r\n online: 'Online',\r\n inPerson: 'Yüz Yüze',\r\n homeVisit: 'Evde',\r\n trial: 'Deneme',\r\n makeup: 'Telafi',\r\n exam: 'Sınav',\r\n workshop: 'Workshop',\r\n priority: 'Öncelikli',\r\n holiday: 'Tatil',\r\n cancelled: 'İptal',\r\n listening: 'Dinleme',\r\n },\r\n en: {\r\n privateLesson: 'Private',\r\n groupLesson: 'Group',\r\n packageLesson: 'Package',\r\n online: 'Online',\r\n inPerson: 'In Person',\r\n homeVisit: 'At Home',\r\n trial: 'Trial',\r\n makeup: 'Makeup',\r\n exam: 'Exam',\r\n workshop: 'Workshop',\r\n priority: 'Priority',\r\n holiday: 'Holiday',\r\n cancelled: 'Cancelled',\r\n listening: 'Listening',\r\n },\r\n};\r\n\r\n/** Resolve label language — unknown codes fall back to English. */\r\nconst resolveLabelLang = (language?: LanguageCode): 'tr' | 'en' =>\r\n language === 'tr' ? 'tr' : 'en';\r\n\r\n/** Type guard for backend string → BuiltInEventBadgeId. */\r\nexport function isBuiltInEventBadgeId(id: string): id is BuiltInEventBadgeId {\r\n return Object.prototype.hasOwnProperty.call(EVENT_BADGE_ICONS, id);\r\n}\r\n\r\n/**\r\n * Build a localized EventBadge for a built-in id.\r\n * Optional `name` overrides the localized default label.\r\n */\r\nexport function getEventBadge(\r\n id: BuiltInEventBadgeId,\r\n language: LanguageCode = 'tr',\r\n name?: string\r\n): EventBadge {\r\n const lang = resolveLabelLang(language);\r\n return {\r\n icon: EVENT_BADGE_ICONS[id],\r\n name: name ?? EVENT_BADGE_LABELS[lang][id],\r\n };\r\n}\r\n\r\n/**\r\n * Resolve the display badge for an event.\r\n * Priority: explicit `badge` object → `badgeId` from the backend.\r\n */\r\nexport function resolveEventBadge(\r\n event: Pick<CalendarEvent, 'badge' | 'badgeId'>,\r\n language: LanguageCode = 'tr'\r\n): EventBadge | undefined {\r\n // Full badge object wins when both icon and name are present\r\n if (event.badge?.icon && event.badge?.name) return event.badge;\r\n // Backend JSON typically only sends a string key\r\n if (event.badgeId && isBuiltInEventBadgeId(event.badgeId)) {\r\n return getEventBadge(event.badgeId, language);\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Ready-made badges with Turkish labels (package default language).\r\n * Prefer `badgeId` + `resolveEventBadge` when data comes from an API.\r\n */\r\nexport const EVENT_BADGES: Record<BuiltInEventBadgeId, EventBadge> = {\r\n privateLesson: getEventBadge('privateLesson', 'tr'),\r\n groupLesson: getEventBadge('groupLesson', 'tr'),\r\n packageLesson: getEventBadge('packageLesson', 'tr'),\r\n online: getEventBadge('online', 'tr'),\r\n inPerson: getEventBadge('inPerson', 'tr'),\r\n homeVisit: getEventBadge('homeVisit', 'tr'),\r\n trial: getEventBadge('trial', 'tr'),\r\n makeup: getEventBadge('makeup', 'tr'),\r\n exam: getEventBadge('exam', 'tr'),\r\n workshop: getEventBadge('workshop', 'tr'),\r\n priority: getEventBadge('priority', 'tr'),\r\n holiday: getEventBadge('holiday', 'tr'),\r\n cancelled: getEventBadge('cancelled', 'tr'),\r\n listening: getEventBadge('listening', 'tr'),\r\n};\r\n","import React from 'react';\nimport { format, isSameDay, differenceInMinutes, isToday, startOfWeek, endOfWeek, eachDayOfInterval } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { ResizableEvent } from '../components/dnd/ResizableEvent';\nimport { EventCardBadge } from '../components/EventCardBadge';\nimport { Locale } from 'date-fns';\nimport { getTimeFormat, getTimeFormatFull } from '../lib/date';\nimport { resolveEventBadge } from '../lib/eventBadges';\nimport { LanguageCode } from '../locales';\n\ninterface WeekViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date) => void;\n onEventResize?: (event: CalendarEvent, newEnd: Date) => void;\n timezone?: string;\n locale?: Locale;\n readonly?: boolean;\n language?: string;\n /** Hour (0-23) the calendar initially scrolls to on mount. Defaults to 8. */\n initialScrollHour?: number;\n /**\n * When true, time flows bottom-to-top (23:00 at top → 00:00 at bottom).\n * When false (default), time flows top-to-bottom (00:00 at top → 23:00 at bottom).\n */\n reverseTime?: boolean;\n}\n\nexport const WeekView: React.FC<WeekViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onTimeSlotClick,\n onEventResize,\n timezone,\n locale,\n readonly,\n language = 'tr',\n initialScrollHour = 8,\n reverseTime = false,\n}) => {\n // Generate days for the week\n const start = startOfWeek(currentDate, { weekStartsOn: 1 });\n const end = endOfWeek(currentDate, { weekStartsOn: 1 });\n const weekDays = eachDayOfInterval({ start, end });\n // Hours array: reversed shows 23→0, normal shows 0→23\n const hours = reverseTime\n ? Array.from({ length: 24 }, (_, i) => 23 - i)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const hourHeight = 60; // px\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [now, setNow] = React.useState(new Date());\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(interval);\n }, []);\n\n // Scroll to the configured start hour on mount\n React.useEffect(() => {\n if (scrollContainerRef.current) {\n // Reversed mode: initialScrollHour is near the bottom of the grid, so offset accordingly\n scrollContainerRef.current.scrollTop = reverseTime\n ? (23 - initialScrollHour) * hourHeight\n : initialScrollHour * hourHeight;\n }\n }, []);\n\n // Timezone adjustment helper\n const getZonedDate = (date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n };\n\n const zonedNow = getZonedDate(new Date());\n\n const getTimezoneDisplay = (tz: string | undefined) => {\n // Use zonedNow if tz matches, otherwise calculate for specific tz if needed\n // But here tz IS the current view timezone.\n const date = now;\n let displayTime = '';\n let acronym = '';\n\n if (!tz) {\n // Local time\n displayTime = format(date, 'HH:mm');\n try {\n acronym = new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) { acronym = 'LOC'; }\n } else {\n try {\n const zDate = toZonedTime(date, tz);\n displayTime = format(zDate, 'HH:mm');\n \n // Get acronym\n // Note: Intl.DateTimeFormat needs the IANA timezone string\n acronym = new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' })\n .formatToParts(date)\n .find(part => part.type === 'timeZoneName')?.value || '';\n } catch (e) {\n // Fallback\n displayTime = format(date, 'HH:mm');\n acronym = tz;\n }\n }\n \n // Simplify generic long names if necessary, though 'short' usually works well.\n // E.g. \"GMT-5\" is often returned for offsets. The user asked for \"EST\", \"PST\".\n // Chrome/Node usually return \"EST\" for America/New_York.\n \n return (\n <div className=\"flex flex-col items-center justify-center leading-tight\">\n <span>{displayTime}</span>\n <span className=\"text-[10px] opacity-75\">({acronym})</span>\n </div>\n );\n };\n\n // Time formats driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n const eventTimeFormat = getTimeFormatFull(language);\n const nowFormat = getTimeFormatFull(language);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm\">\n {/* Scrollable Container — flex-1 + min-h-0 prevents unbounded growth */}\n <div\n ref={scrollContainerRef}\n className=\"flex-1 min-h-0 overflow-y-auto scrollbar-hide relative bg-background scroll-smooth\"\n style={{ scrollbarGutter: 'stable' }}\n >\n {/* Header - sticky inside scroll container */}\n <div className=\"flex border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 z-20 sticky top-0 backdrop-blur-sm\">\n <div className=\"flex-none p-3 text-center text-xs font-semibold text-muted-foreground w-16 flex items-center justify-center border-r-[0.5px] border-border/30 bg-muted/10\">\n {getTimezoneDisplay(timezone)}\n </div>\n <div className=\"flex-1 grid grid-cols-7\">\n {weekDays.map((day, index) => (\n <div key={day.toISOString()} className={cn(\"py-3 px-2 text-center\", index > 0 && \"border-l-[0.5px] border-border/30\")}>\n <div className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1.5\">{format(day, 'EEE', { locale })}</div>\n <div className={cn(\n \"w-9 h-9 flex items-center justify-center rounded-xl mx-auto text-sm font-semibold transition-all duration-200\",\n isToday(day)\n ? \"bg-primary text-primary-foreground shadow-lg shadow-primary/30 scale-110\"\n : \"text-foreground hover:bg-accent/80\"\n )}>\n {format(day, 'd', { locale })}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Grid Content */}\n <div\n className=\"flex min-w-full relative\"\n style={{ height: hours.length * hourHeight }}\n >\n {/* Time Labels Column */}\n <div className=\"flex-none w-16 border-r-[0.5px] border-border/30 relative bg-muted/5\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"relative w-full text-[11px] text-muted-foreground/80 text-right pr-3 font-medium tabular-nums box-border\"\n style={{ height: hourHeight }}\n >\n <span className=\"block -translate-y-1/2\">\n {hour !== 0 && format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </span>\n </div>\n ))}\n </div>\n\n {/* Days Columns */}\n <div className=\"flex-1 grid grid-cols-7 relative\">\n {weekDays.map((day, dayIndex) => {\n // Filter events for this day\n const dayEvents = events.filter(e => {\n const zonedStart = getZonedDate(e.start);\n return isSameDay(zonedStart, day);\n });\n\n return (\n <div key={day.toISOString()} className={cn(\"relative h-full\", dayIndex > 0 && \"border-l-[0.5px] border-border/30\")}>\n {/* Grid Rows (Droppable Cells) */}\n {hours.map((hour) => {\n return (\n <div\n key={hour}\n className=\"w-full border-b-[0.5px] border-dashed border-border/20 box-border relative hover:bg-accent/5 transition-colors\"\n style={{ height: hourHeight }}\n >\n {/* 4 x 15-minute intervals */}\n {[0, 15, 30, 45].map((minute) => {\n const cellDate = new Date(day);\n cellDate.setHours(hour, minute, 0, 0);\n const cellId = cellDate.toISOString();\n \n return (\n <DroppableCell \n key={minute}\n id={cellId}\n date={cellDate}\n className=\"w-full absolute left-0 right-0 z-0 transition-colors\"\n style={{ \n height: '25%', \n top: `${(minute / 60) * 100}%` \n }}\n >\n <div \n className=\"w-full h-full bg-transparent cursor-pointer\"\n onClick={() => onTimeSlotClick?.(cellDate)}\n />\n </DroppableCell>\n );\n })}\n </div>\n );\n })}\n \n {/* Events Overlay */}\n {dayEvents.map((event) => {\n // Calculate layout for overlapping events\n // Find all events that overlap with this one\n const overlappingEvents = dayEvents.filter(e => {\n if (e.id === event.id) return false;\n const s1 = getZonedDate(event.start).getTime();\n const e1 = getZonedDate(event.end).getTime();\n const s2 = getZonedDate(e.start).getTime();\n const e2 = getZonedDate(e.end).getTime();\n return s1 < e2 && e1 > s2;\n });\n\n // Calculate horizontal position (simple version)\n // A more robust algorithm would use graph coloring or column packing\n // For now, we can check how many simultaneous events exist and assign width/left\n \n // Sort overlapping group by start time\n const group = [event, ...overlappingEvents].sort((a, b) => \n getZonedDate(a.start).getTime() - getZonedDate(b.start).getTime() ||\n (a.id > b.id ? 1 : -1) // stable sort\n );\n \n const index = group.findIndex(e => e.id === event.id);\n const count = group.length;\n \n const widthPercent = 100 / count;\n const leftPercent = index * widthPercent;\n\n const zonedEventStart = getZonedDate(event.start);\n const zonedEventEnd = getZonedDate(event.end);\n \n const startMinutes = zonedEventStart.getHours() * 60 + zonedEventStart.getMinutes();\n const durationMinutes = differenceInMinutes(zonedEventEnd, zonedEventStart);\n const height = (durationMinutes / 60) * hourHeight;\n // In reversed mode, the event's visual top corresponds to the END time's position\n const top = reverseTime\n ? (1440 - startMinutes - durationMinutes) / 60 * hourHeight\n : (startMinutes / 60) * hourHeight;\n \n const isShortEvent = durationMinutes < 60;\n // Resolve badge from full object or backend-friendly badgeId\n const resolvedBadge = resolveEventBadge(event, language as LanguageCode);\n const hasBadge = Boolean(resolvedBadge);\n \n return (\n <DraggableEvent\n key={`${event.id}-${day.toISOString()}`}\n event={event}\n className={`absolute z-10 transition-all ${readonly ? \"cursor-default\" : \"\"}`}\n style={{\n top: `${top}px`,\n height: `${Math.max(height, 20)}px`,\n left: `${leftPercent}%`,\n width: `${widthPercent}%`,\n // Add minimal spacing between overlapping events\n paddingRight: count > 1 ? '2px' : '0'\n }}\n >\n <ResizableEvent\n readonly={readonly}\n event={event}\n hourHeight={hourHeight}\n onResize={onEventResize}\n className=\"h-full\"\n style={{ height: '100%' }}\n >\n <div\n className={cn(\n \"rounded-md border shadow-sm transition-all hover:shadow-md group overflow-hidden relative\",\n \"glass\",\n readonly ? \"cursor-default\" : \"cursor-grab active:cursor-grabbing\",\n !event.color && \"border-primary/20 bg-primary/10\",\n isShortEvent ? \"px-1 flex items-center justify-center\" : \"p-2\",\n // Reserve space under the badge so title/time do not overlap\n hasBadge && !isShortEvent && \"pt-4\",\n // Add active border for overlapped events to distinguish them\n count > 1 && \"border-l-4 border-l-primary/50\"\n )}\n style={{\n height: '100%',\n backgroundColor: event.color ? `${event.color}15` : undefined,\n borderColor: event.color ? `${event.color}40` : undefined,\n borderLeftWidth: '3px',\n borderLeftColor: event.color || 'var(--primary)'\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n title={count > 1 ? `${event.title} (${index + 1}/${count})` : undefined}\n >\n {/* Optional event badge — top-left corner (badge or badgeId) */}\n {resolvedBadge && (\n <EventCardBadge\n badge={resolvedBadge}\n compact={isShortEvent}\n />\n )}\n <div className=\"flex flex-col h-full overflow-hidden w-full\">\n <div className={cn(\"font-semibold truncate text-foreground/90 leading-tight\",\n isShortEvent ? \"text-xs text-center\" : \"text-xs\"\n )}>\n {event.title}\n </div>\n {!isShortEvent && (\n <>\n <div className=\"text-[10px] text-muted-foreground truncate mt-0.5 font-medium leading-tight\">\n {format(zonedEventStart, eventTimeFormat, { locale })} - {format(zonedEventEnd, eventTimeFormat, { locale })}\n </div>\n {event.description && height > 50 && (\n <div className=\"text-[10px] text-muted-foreground/80 truncate mt-1 leading-tight opacity-80\">\n {event.description}\n </div>\n )}\n </>\n )}\n {/* Overlap Badge */}\n {count > 1 && !isShortEvent && (\n <div className=\"absolute top-1 right-1 bg-background/80 backdrop-blur-sm rounded-full w-4 h-4 flex items-center justify-center text-[9px] font-bold text-muted-foreground border border-border shadow-sm\">\n {count}\n </div>\n )}\n </div>\n </div>\n </ResizableEvent>\n </DraggableEvent>\n );\n })}\n \n {/* Current Time Indicator */}\n {isToday(day) && (\n <div\n className=\"absolute left-0 right-0 z-20 pointer-events-none flex items-center\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`\n }}\n >\n <div className=\"h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50\" />\n <div className=\"absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n \n {/* Current Time Label (Left Axis) */}\n <div \n className=\"absolute left-0 w-16 pointer-events-none z-30 flex justify-end pr-2\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight + 80}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight + 80}px`,\n }}\n >\n <span className=\"text-[10px] font-bold text-primary-foreground bg-primary px-1.5 py-0.5 rounded-md shadow-md -translate-y-1/2 backdrop-blur-none\">\n {format(zonedNow, nowFormat, { locale })}\n </span>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { format, differenceInMinutes, isToday, isSameDay } from 'date-fns';\nimport { toZonedTime } from 'date-fns-tz';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { ResizableEvent } from '../components/dnd/ResizableEvent';\nimport { Locale } from 'date-fns';\nimport { getTimeFormat, getTimeFormatFull } from '../lib/date';\n\ninterface DayViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date) => void;\n onEventResize?: (event: CalendarEvent, newEnd: Date) => void;\n timezone?: string;\n locale?: Locale;\n readonly?: boolean;\n language?: string;\n /** Hour (0-23) the calendar initially scrolls to on mount. Defaults to 8. */\n initialScrollHour?: number;\n /**\n * When true, time flows bottom-to-top (23:00 at top → 00:00 at bottom).\n * When false (default), time flows top-to-bottom (00:00 at top → 23:00 at bottom).\n */\n reverseTime?: boolean;\n}\n\nexport const DayView: React.FC<DayViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onTimeSlotClick,\n onEventResize,\n timezone,\n locale,\n readonly,\n language = 'tr',\n initialScrollHour = 8,\n reverseTime = false,\n}) => {\n // Hours array: reversed shows 23→0, normal shows 0→23\n const hours = reverseTime\n ? Array.from({ length: 24 }, (_, i) => 23 - i)\n : Array.from({ length: 24 }, (_, i) => i);\n const hourHeight = 80; // Larger height for Day View\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n\n const [now, setNow] = React.useState(new Date());\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000);\n return () => clearInterval(interval);\n }, []);\n\n // Scroll to the configured start hour on mount\n React.useEffect(() => {\n if (scrollContainerRef.current) {\n // Reversed mode: initialScrollHour sits near the bottom of the grid\n scrollContainerRef.current.scrollTop = reverseTime\n ? (23 - initialScrollHour) * hourHeight\n : initialScrollHour * hourHeight;\n }\n }, []);\n\n // Timezone adjustment helper\n const getZonedDate = (date: Date) => {\n return timezone ? toZonedTime(date, timezone) : date;\n };\n\n const zonedNow = getZonedDate(now);\n\n // Filter events for the current day\n const dayEvents = events.filter(e => {\n const zonedStart = getZonedDate(e.start);\n return isSameDay(zonedStart, currentDate);\n });\n\n // Time formats driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n const eventTimeFormat = getTimeFormatFull(language);\n const nowFormat = getTimeFormatFull(language);\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden shadow-sm\">\n {/* Header */}\n <div className=\"px-6 py-4 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 text-center shrink-0\">\n <div className=\"flex items-center justify-center gap-3\">\n <h2 className=\"text-xl font-semibold capitalize text-foreground\">\n {format(currentDate, 'EEEE, MMMM d, yyyy', { locale })}\n </h2>\n {isToday(currentDate) && (\n <span className=\"text-xs font-semibold bg-primary text-primary-foreground px-3 py-1 rounded-full shadow-md shadow-primary/20\">\n Today\n </span>\n )}\n </div>\n </div>\n\n {/* Grid — flex-1 + min-h-0 ensures this stays bounded and scrollable */}\n <div ref={scrollContainerRef} className=\"flex-1 min-h-0 overflow-y-auto relative\">\n <div className=\"flex relative\" style={{ height: hours.length * hourHeight }}>\n {/* Time Labels */}\n <div className=\"w-20 bg-muted/5 border-r-[0.5px] border-border/30 relative\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"relative w-full\"\n style={{ height: hourHeight }}\n >\n {hour !== 0 && (\n <span className=\"absolute w-full text-center -top-3 left-1/2 -translate-x-1/2 text-[11px] text-muted-foreground/80 font-medium tabular-nums bg-background px-1.5 py-0.5 rounded-md\">\n {format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </span>\n )}\n </div>\n ))}\n\n {/* Left Side Current Time Indicator (Overlay) */}\n {isToday(currentDate) && (\n <div\n className=\"absolute left-0 w-full pointer-events-none z-30 flex justify-end pr-2\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`,\n }}\n >\n <span className=\"text-[10px] font-bold text-white bg-primary px-2 py-1 rounded-lg shadow-md shadow-primary/30 -translate-y-1/2\">\n {format(zonedNow, nowFormat, { locale })}\n </span>\n </div>\n )}\n </div>\n\n {/* Day Column */}\n <div className=\"flex-1 relative\">\n {hours.map((hour) => {\n return (\n <div\n key={hour}\n className=\"border-b-[0.5px] border-dashed border-border/20 box-border relative hover:bg-accent/5 transition-colors\"\n style={{ height: hourHeight }}\n >\n {/* 4 x 15-minute intervals */}\n {[0, 15, 30, 45].map((minute) => {\n const cellDate = new Date(currentDate);\n cellDate.setHours(hour, minute, 0, 0);\n const cellId = cellDate.toISOString();\n \n return (\n <DroppableCell \n key={minute}\n id={cellId}\n date={cellDate}\n className=\"w-full absolute left-0 right-0 z-0 transition-colors\"\n style={{ \n height: '25%', \n top: `${(minute / 60) * 100}%` \n }}\n >\n <div \n className=\"h-full w-full bg-transparent cursor-pointer\"\n onClick={() => onTimeSlotClick?.(cellDate)}\n />\n </DroppableCell>\n );\n })}\n </div>\n );\n })}\n\n {dayEvents.map(event => {\n // Calculate layout for overlapping events (same logic as WeekView)\n const overlappingEvents = dayEvents.filter(e => {\n if (e.id === event.id) return false;\n const s1 = getZonedDate(event.start).getTime();\n const e1 = getZonedDate(event.end).getTime();\n const s2 = getZonedDate(e.start).getTime();\n const e2 = getZonedDate(e.end).getTime();\n return s1 < e2 && e1 > s2;\n });\n\n // Sort overlapping group by start time for consistent positioning\n const group = [event, ...overlappingEvents].sort((a, b) =>\n getZonedDate(a.start).getTime() - getZonedDate(b.start).getTime() ||\n (a.id > b.id ? 1 : -1)\n );\n\n const index = group.findIndex(e => e.id === event.id);\n const count = group.length;\n\n const widthPercent = 100 / count;\n const leftPercent = index * widthPercent;\n\n const zonedStart = getZonedDate(event.start);\n const zonedEnd = getZonedDate(event.end);\n\n const startMinutes = zonedStart.getHours() * 60 + zonedStart.getMinutes();\n const durationMinutes = differenceInMinutes(zonedEnd, zonedStart);\n const height = (durationMinutes / 60) * hourHeight;\n // In reversed mode, the event's visual top is at the END time's flipped position\n const top = reverseTime\n ? (1440 - startMinutes - durationMinutes) / 60 * hourHeight\n : (startMinutes / 60) * hourHeight;\n\n const isShortEvent = durationMinutes < 45;\n\n return (\n <DraggableEvent\n key={`${event.id}-${currentDate.toISOString()}`}\n event={event}\n className={`absolute z-10 transition-all ${readonly ? \"cursor-default\" : \"\"}`}\n style={{\n top: `${top}px`,\n height: `${Math.max(height, 28)}px`,\n left: `calc(${leftPercent}% + 4px)`,\n width: `calc(${widthPercent}% - 8px)`,\n paddingRight: count > 1 ? '2px' : '0'\n }}\n >\n <ResizableEvent\n readonly={readonly}\n event={event}\n hourHeight={hourHeight}\n onResize={onEventResize}\n className=\"h-full\"\n style={{ height: '100%' }}\n >\n <div\n className={cn(\n \"h-full rounded-lg border-[0.5px] shadow-sm overflow-hidden transition-all hover:shadow-lg hover:z-20 group\",\n \"glass backdrop-blur-sm\",\n readonly ? \"cursor-default\" : \"cursor-grab active:cursor-grabbing\",\n !event.color && \"bg-primary/10 border-primary/20\",\n isShortEvent ? \"px-2 flex items-center\" : \"px-3 py-2\",\n count > 1 && \"border-l-4\"\n )}\n style={{\n backgroundColor: event.color ? `${event.color}15` : undefined,\n borderColor: event.color ? `${event.color}30` : undefined,\n borderLeftColor: event.color || 'var(--primary)',\n borderLeftWidth: count > 1 ? '4px' : '3px'\n }}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n title={count > 1 ? `${event.title} (${index + 1}/${count})` : undefined}\n >\n <div className=\"flex flex-col h-full overflow-hidden w-full\">\n <div className={cn(\n \"font-semibold truncate leading-tight\",\n isShortEvent ? \"text-xs\" : \"text-sm\",\n event.color ? \"text-foreground\" : \"text-foreground/90\"\n )}>\n {event.title}\n </div>\n {!isShortEvent && (\n <>\n <div className=\"text-xs text-muted-foreground mt-0.5 font-medium\">\n {format(zonedStart, eventTimeFormat, { locale })} - {format(zonedEnd, eventTimeFormat, { locale })}\n </div>\n {event.description && height > 60 && (\n <div className=\"text-xs text-muted-foreground/80 mt-1 line-clamp-2\">\n {event.description}\n </div>\n )}\n </>\n )}\n {/* Overlap Badge */}\n {count > 1 && !isShortEvent && (\n <div className=\"absolute top-1.5 right-1.5 bg-background/90 backdrop-blur-sm rounded-full w-5 h-5 flex items-center justify-center text-[10px] font-bold text-muted-foreground border border-border shadow-sm\">\n {count}\n </div>\n )}\n </div>\n </div>\n </ResizableEvent>\n </DraggableEvent>\n );\n })}\n \n {/* Current Time Indicator */}\n {isToday(currentDate) && (\n <div\n className=\"absolute left-0 right-0 z-20 pointer-events-none flex items-center\"\n style={{\n top: reverseTime\n ? `${(1440 - (zonedNow.getHours() * 60 + zonedNow.getMinutes())) / 60 * hourHeight}px`\n : `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`\n }}\n >\n {/* Line */}\n <div className=\"h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50\" />\n {/* Dot */}\n <div className=\"absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse\" />\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\r\nimport { Calendar, CalendarDays, CalendarClock, ListTodo, Users, Plus } from 'lucide-react';\r\nimport { cn } from '../utils';\r\nimport { ViewType } from '../types';\r\n\r\ninterface EmptyStateProps {\r\n view: ViewType;\r\n onCreateEvent?: () => void;\r\n translations?: {\r\n noEvents?: string;\r\n noEventsDesc?: string;\r\n createFirst?: string;\r\n createEvent?: string;\r\n };\r\n className?: string;\r\n}\r\n\r\nconst viewIcons: Record<ViewType, React.ReactNode> = {\r\n month: <Calendar className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n week: <CalendarDays className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n day: <CalendarClock className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n agenda: <ListTodo className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n resource: <Users className=\"w-16 h-16 text-muted-foreground/30\" strokeWidth={1.5} />,\r\n};\r\n\r\nconst viewTitles: Record<ViewType, string> = {\r\n month: 'No events this month',\r\n week: 'No events this week',\r\n day: 'No events today',\r\n agenda: 'No upcoming events',\r\n resource: 'No scheduled resources',\r\n};\r\n\r\nconst viewDescriptions: Record<ViewType, string> = {\r\n month: 'Your calendar is clear. Add your first event to get started.',\r\n week: 'Nothing scheduled for this week. Create an event to begin planning.',\r\n day: 'Your day is free. Schedule something to make the most of it.',\r\n agenda: 'No events coming up. Plan ahead by creating new events.',\r\n resource: 'No resources have been assigned yet.',\r\n};\r\n\r\nexport const EmptyState: React.FC<EmptyStateProps> = ({\r\n view,\r\n onCreateEvent,\r\n translations,\r\n className,\r\n}) => {\r\n const title = translations?.noEvents || viewTitles[view];\r\n const description = translations?.noEventsDesc || viewDescriptions[view];\r\n\r\n return (\r\n <div className={cn(\r\n \"flex flex-col items-center justify-center h-full min-h-[400px] py-12 px-6\",\r\n className\r\n )}>\r\n {/* Decorative background */}\r\n <div className=\"relative mb-8\">\r\n <div className=\"absolute inset-0 bg-gradient-to-br from-primary/5 via-transparent to-primary/5 rounded-full blur-3xl scale-150\" />\r\n <div className=\"relative p-6 bg-gradient-to-br from-muted/30 to-muted/10 rounded-3xl border border-border/30\">\r\n {viewIcons[view]}\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"text-center max-w-sm\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">\r\n {title}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground mb-6 leading-relaxed\">\r\n {description}\r\n </p>\r\n\r\n {/* Create button */}\r\n {onCreateEvent && (\r\n <button\r\n onClick={onCreateEvent}\r\n className=\"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-primary-foreground rounded-xl font-medium text-sm shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 hover:scale-105 active:scale-95 transition-all duration-200\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {translations?.createEvent || 'Create Event'}\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Decorative dots pattern */}\r\n <div className=\"absolute inset-0 pointer-events-none overflow-hidden opacity-30\">\r\n <div className=\"absolute top-1/4 left-1/4 w-2 h-2 rounded-full bg-primary/20\" />\r\n <div className=\"absolute top-1/3 right-1/3 w-3 h-3 rounded-full bg-primary/10\" />\r\n <div className=\"absolute bottom-1/4 left-1/3 w-2 h-2 rounded-full bg-primary/15\" />\r\n <div className=\"absolute bottom-1/3 right-1/4 w-4 h-4 rounded-full bg-primary/5\" />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Mini empty state for use in smaller containers\r\nexport const MiniEmptyState: React.FC<{\r\n message?: string;\r\n className?: string;\r\n}> = ({ message = 'No events', className }) => (\r\n <div className={cn(\r\n \"flex flex-col items-center justify-center py-8 text-center\",\r\n className\r\n )}>\r\n <Calendar className=\"w-10 h-10 text-muted-foreground/20 mb-3\" strokeWidth={1.5} />\r\n <p className=\"text-sm text-muted-foreground\">{message}</p>\r\n </div>\r\n);\r\n\r\n// Empty state specifically for Agenda View with date context\r\nexport const AgendaEmptyState: React.FC<{\r\n onCreateEvent?: () => void;\r\n translations?: {\r\n noUpcoming?: string;\r\n createEvent?: string;\r\n };\r\n}> = ({ onCreateEvent, translations }) => (\r\n <div className=\"flex flex-col items-center justify-center h-full min-h-[400px] py-12\">\r\n <div className=\"relative mb-8\">\r\n <div className=\"p-8 bg-gradient-to-br from-green-50 to-blue-50 dark:from-green-900/10 dark:to-blue-900/10 rounded-3xl border border-border/30\">\r\n <div className=\"flex items-center gap-4\">\r\n <div className=\"w-12 h-12 rounded-2xl bg-green-100 dark:bg-green-900/30 flex items-center justify-center\">\r\n <svg className=\"w-6 h-6 text-green-600 dark:text-green-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-medium text-foreground\">All caught up!</div>\r\n <div className=\"text-sm text-muted-foreground\">No events scheduled</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center max-w-sm\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">\r\n {translations?.noUpcoming || 'Your schedule is clear'}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground mb-6\">\r\n No upcoming events to show. Create a new event to start planning.\r\n </p>\r\n\r\n {onCreateEvent && (\r\n <button\r\n onClick={onCreateEvent}\r\n className=\"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-primary-foreground rounded-xl font-medium text-sm shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 hover:scale-105 active:scale-95 transition-all duration-200\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {translations?.createEvent || 'Create Event'}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n","import React, { useMemo } from 'react';\nimport { format, isSameDay, isToday, isTomorrow, addDays, startOfDay, differenceInMinutes } from 'date-fns';\nimport { CalendarEvent } from '../types';\nimport { cn } from '../utils';\nimport { AgendaEmptyState } from '../components/EmptyState';\nimport { motion } from 'framer-motion';\nimport { Clock, MapPin, Users, Paperclip, Bell } from 'lucide-react';\nimport { getTimeFormatFull } from '../lib/date';\n\ninterface AgendaViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n onEventClick?: (event: CalendarEvent) => void;\n onCreateEvent?: () => void;\n translations?: any;\n language?: string;\n /** Optional custom empty-state component replacing the built-in AgendaEmptyState. */\n renderEmptyState?: (props: { view: 'agenda'; onCreateEvent?: () => void }) => React.ReactNode;\n}\n\nconst formatDuration = (start: Date, end: Date): string => {\n const minutes = differenceInMinutes(end, start);\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n if (remainingMinutes === 0) return `${hours}h`;\n return `${hours}h ${remainingMinutes}m`;\n};\n\n/** Returns a human-friendly day label using provided translation strings. */\nconst getDateLabel = (date: Date, todayLabel: string, tomorrowLabel: string): string => {\n if (isToday(date)) return todayLabel;\n if (isTomorrow(date)) return tomorrowLabel;\n return format(date, 'EEEE');\n};\n\nexport const AgendaView: React.FC<AgendaViewProps> = ({\n currentDate,\n events,\n onEventClick,\n onCreateEvent,\n translations,\n language = 'tr',\n renderEmptyState,\n}) => {\n // Full time format string (e.g. \"14:30\" for 24h or \"2:30 PM\" for 12h)\n const timeFmt = getTimeFormatFull(language);\n // Group events by day for the next 30 days starting from currentDate\n const groupedEvents = useMemo(() => {\n const startDate = startOfDay(currentDate);\n\n const groups: { date: Date; events: CalendarEvent[] }[] = [];\n\n // Sort all events by start time first\n const sortedEvents = [...events].sort((a, b) => a.start.getTime() - b.start.getTime());\n\n // Iterate through the next 30 days\n for (let i = 0; i < 30; i++) {\n const day = addDays(startDate, i);\n const dayEvents = sortedEvents.filter(event => isSameDay(event.start, day));\n\n if (dayEvents.length > 0) {\n groups.push({ date: day, events: dayEvents });\n }\n }\n\n return groups;\n }, [currentDate, events]);\n\n const container = {\n hidden: { opacity: 0 },\n show: {\n opacity: 1,\n transition: {\n staggerChildren: 0.05\n }\n }\n };\n\n const item = {\n hidden: { opacity: 0, x: -20 },\n show: { opacity: 1, x: 0 }\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background overflow-y-auto\">\n {groupedEvents.length === 0 ? (\n renderEmptyState\n ? renderEmptyState({ view: 'agenda', onCreateEvent })\n : <AgendaEmptyState onCreateEvent={onCreateEvent} />\n ) : (\n <motion.div\n className=\"max-w-3xl mx-auto w-full pb-10 px-4 md:px-6\"\n variants={container}\n initial=\"hidden\"\n animate=\"show\"\n >\n {groupedEvents.map((group, groupIndex) => (\n <motion.div\n key={group.date.toISOString()}\n className=\"relative\"\n variants={item}\n >\n {/* Date Header */}\n <div className=\"sticky top-0 bg-background/95 backdrop-blur-md py-4 z-10 border-b border-border/50\">\n \n \n <div className=\"flex items-center gap-4\">\n {/* Date box */}\n <div className={cn(\n \"flex flex-col items-center justify-center w-16 h-16 rounded-2xl transition-all\",\n isToday(group.date)\n ? \"bg-primary text-primary-foreground shadow-lg shadow-primary/30\"\n : \"bg-muted/50 text-foreground\"\n )}>\n <span className=\"text-2xl font-bold leading-none\">\n {format(group.date, 'd')}\n </span>\n <span className=\"text-xs font-medium uppercase tracking-wide opacity-80\">\n {format(group.date, 'MMM')}\n </span>\n </div>\n\n {/* Day info */}\n <div className=\"flex flex-col\">\n <span className={cn(\n \"text-lg font-semibold\",\n isToday(group.date) && \"text-primary\"\n )}>\n {getDateLabel(group.date, translations?.today ?? 'Today', translations?.tomorrow ?? 'Tomorrow')}\n </span>\n <span className=\"text-sm text-muted-foreground\">\n {group.events.length} {group.events.length !== 1 ? (translations?.eventsCount ?? 'events') : (translations?.eventCount ?? 'event')}\n </span>\n </div>\n </div>\n </div>\n\n {/* Events List */}\n <div className=\"py-4 space-y-3\">\n {group.events.map((event, eventIndex) => (\n <motion.div\n key={event.id}\n onClick={() => onEventClick?.(event)}\n className={cn(\n \"group relative flex gap-4 p-4 rounded-2xl border border-border/40\",\n \"hover:border-primary/40 hover:shadow-lg hover:shadow-primary/5\",\n \"transition-all duration-200 cursor-pointer\",\n \"bg-gradient-to-br from-card via-card to-card/80\"\n )}\n whileHover={{ scale: 1.01, y: -2 }}\n transition={{ duration: 0.2 }}\n >\n {/* Left accent bar */}\n <div\n className=\"absolute left-0 top-3 bottom-3 w-1 rounded-full\"\n style={{ backgroundColor: event.color || 'var(--primary)' }}\n />\n\n {/* Time Column */}\n <div className=\"flex flex-col items-center min-w-[70px] pl-2\">\n {event.allDay ? (\n <div className=\"flex flex-col items-center\">\n <span className=\"text-xs font-semibold text-muted-foreground bg-muted/80 px-2.5 py-1 rounded-full\">\n {translations?.allDay ?? 'All Day'}\n </span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center\">\n {/* 12h: split hour and AM/PM; 24h: single formatted string */}\n <span className=\"text-base font-semibold text-foreground\">\n {format(event.start, timeFmt)}\n </span>\n <div className=\"w-px h-3 bg-border my-1\" />\n <span className=\"text-xs text-muted-foreground/70 font-medium\">\n {formatDuration(event.start, event.end)}\n </span>\n </div>\n )}\n </div>\n\n {/* Event Details */}\n <div className=\"flex-1 min-w-0 space-y-2\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"text-base font-semibold text-foreground group-hover:text-primary transition-colors line-clamp-1\">\n {event.title}\n </h4>\n {/* Color dot */}\n <div\n className=\"w-3 h-3 rounded-full shrink-0 mt-1.5\"\n style={{ backgroundColor: event.color || 'var(--primary)' }}\n />\n </div>\n\n {event.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 leading-relaxed\">\n {event.description}\n </p>\n )}\n\n {/* Meta info row */}\n <div className=\"flex flex-wrap items-center gap-3 pt-1\">\n {!event.allDay && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"w-3.5 h-3.5\" />\n <span>{format(event.start, timeFmt)} - {format(event.end, timeFmt)}</span>\n </div>\n )}\n\n {event.guests && event.guests.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Users className=\"w-3.5 h-3.5\" />\n <span>{event.guests.length} {event.guests.length !== 1 ? (translations?.guestsCount ?? 'guests') : (translations?.guestCount ?? 'guest')}</span>\n </div>\n )}\n\n {event.attachments && event.attachments.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Paperclip className=\"w-3.5 h-3.5\" />\n <span>{event.attachments.length}</span>\n </div>\n )}\n\n {event.reminders && event.reminders.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Bell className=\"w-3.5 h-3.5\" />\n <span>{event.reminders.length}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Hover arrow indicator */}\n <div className=\"absolute right-4 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <svg className=\"w-5 h-5 text-muted-foreground\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </div>\n </motion.div>\n ))}\n </div>\n </motion.div>\n ))}\n </motion.div>\n )}\n </div>\n );\n};\n","import React, { useRef } from 'react';\nimport { format, addHours, startOfDay, differenceInMinutes, isSameDay } from 'date-fns';\nimport { CalendarEvent, Resource } from '../types';\nimport { cn } from '../utils';\nimport { Locale } from 'date-fns';\nimport { DraggableEvent } from '../components/dnd/DraggableEvent';\nimport { DroppableCell } from '../components/dnd/DroppableCell';\nimport { getTimeFormat } from '../lib/date';\n\ninterface ResourceViewProps {\n currentDate: Date;\n events: CalendarEvent[];\n resources: Resource[];\n onEventClick?: (event: CalendarEvent) => void;\n onTimeSlotClick?: (date: Date, resourceId: string) => void;\n locale?: Locale;\n language?: string;\n}\n\nexport const ResourceView: React.FC<ResourceViewProps> = ({\n currentDate,\n events,\n resources,\n onEventClick,\n onTimeSlotClick,\n locale,\n language = 'tr',\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Define timeline: 8am to 8pm for example (or full 24h)\n // Let's do 24h for flexibility, but maybe scroll to 8am\n const hours = Array.from({ length: 24 }, (_, i) => i);\n const hourWidth = 100; // px per hour\n\n // Time format driven by the active language (24h vs 12h AM/PM)\n const timeFormat = getTimeFormat(language);\n\n const getEventStyle = (event: CalendarEvent) => {\n const start = new Date(event.start);\n const end = new Date(event.end);\n const dayStart = startOfDay(currentDate);\n \n // Calculate minutes from start of day\n const startMinutes = differenceInMinutes(start, dayStart);\n const durationMinutes = differenceInMinutes(end, start);\n \n const left = (startMinutes / 60) * hourWidth;\n const width = (durationMinutes / 60) * hourWidth;\n \n return {\n left: `${left}px`,\n width: `${Math.max(width, 4)}px`, // Min width for visibility\n };\n };\n\n return (\n <div className=\"flex flex-col h-full min-h-0 bg-background overflow-hidden\">\n {/* Header: Hours */}\n <div className=\"flex border-b border-border bg-muted/20\">\n <div className=\"w-48 shrink-0 border-r border-border p-4 font-semibold text-sm bg-background sticky left-0 z-20\">\n Resources\n </div>\n <div className=\"flex overflow-hidden\">\n <div className=\"flex relative\" style={{ width: hours.length * hourWidth }}>\n {hours.map(hour => (\n <div \n key={hour} \n className=\"border-r border-border/50 text-xs text-muted-foreground p-2 font-medium shrink-0\"\n style={{ width: hourWidth }}\n >\n {format(new Date().setHours(hour, 0, 0, 0), timeFormat, { locale })}\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Body: Resources & Events */}\n <div className=\"flex-1 min-h-0 overflow-auto relative\" ref={containerRef}>\n <div className=\"min-w-fit\">\n {resources.map(resource => {\n const resourceEvents = events.filter(e => \n e.resourceId === resource.id && \n isSameDay(new Date(e.start), currentDate)\n );\n\n return (\n <div key={resource.id} className=\"flex border-b border-border min-h-[100px]\">\n {/* Resource Label Column */}\n <div className=\"w-48 shrink-0 border-r border-border p-4 bg-background sticky left-0 z-10 flex items-center gap-3\">\n {resource.avatar ? (\n <img src={resource.avatar} alt={resource.label} className=\"w-8 h-8 rounded-full object-cover\" />\n ) : (\n <div className=\"w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold text-primary\">\n {resource.label.substring(0, 2).toUpperCase()}\n </div>\n )}\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{resource.label}</span>\n <span className=\"text-xs text-muted-foreground\">ID: {resource.id}</span>\n </div>\n </div>\n\n {/* Timeline Row */}\n <div className=\"relative flex\" style={{ width: hours.length * hourWidth }}>\n {/* Grid Lines */}\n {hours.map(hour => (\n <div \n key={hour}\n className=\"flex h-full shrink-0\"\n style={{ width: hourWidth }}\n >\n {[0, 15, 30, 45].map(minute => {\n const slotDate = new Date(currentDate);\n slotDate.setHours(hour, minute, 0, 0);\n const slotId = `${resource.id}-${slotDate.toISOString()}`;\n\n return (\n <DroppableCell\n key={minute}\n id={slotId}\n date={slotDate}\n resourceId={resource.id}\n className=\"h-full flex-1 border-r border-border/10 last:border-border/30 hover:bg-accent/10 transition-colors\"\n onClick={() => {\n onTimeSlotClick?.(slotDate, resource.id);\n }}\n />\n );\n })}\n </div>\n ))}\n\n {/* Events */}\n {resourceEvents.map(event => (\n <DraggableEvent\n key={event.id}\n event={event}\n onClick={(e) => {\n e.stopPropagation();\n onEventClick?.(event);\n }}\n className=\"absolute top-2 bottom-2 rounded-md px-2 py-1 text-xs font-medium border shadow-sm cursor-pointer overflow-hidden hover:brightness-95 transition-all z-10\"\n style={{\n ...getEventStyle(event),\n backgroundColor: event.color || resource.color || 'var(--primary)',\n borderColor: 'rgba(0,0,0,0.1)',\n color: '#fff'\n }}\n >\n <div className=\"truncate\">{event.title}</div>\n </DraggableEvent>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\r\nimport { X } from 'lucide-react';\r\nimport { cn } from '../../utils';\r\nimport { Button } from './button';\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n title?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n hideHeader?: boolean;\r\n}\r\n\r\nexport const Modal: React.FC<ModalProps> = ({\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n className,\r\n hideHeader = false,\r\n}) => {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleEscape);\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n // Render inside parent container (absolute positioning) instead of portal to document.body\r\n return (\r\n <div className=\"absolute inset-0 z-50 flex items-center justify-center p-4 bg-black/40 backdrop-blur-md animate-in fade-in duration-300\">\r\n <div\r\n ref={overlayRef}\r\n className=\"absolute inset-0\"\r\n onClick={onClose}\r\n />\r\n <div\r\n className={cn(\r\n \"relative bg-background rounded-2xl shadow-2xl w-full max-w-md flex flex-col max-h-[70vh] sm:max-h-[80vh] animate-in zoom-in-95 slide-in-from-bottom-4 duration-300 border border-border/50\",\r\n className\r\n )}\r\n >\r\n {!hideHeader && (\r\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border/50 shrink-0 bg-gradient-to-r from-muted/20 to-background\">\r\n <h3 className=\"text-lg font-semibold text-foreground\">\r\n {title}\r\n </h3>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={onClose}\r\n className=\"h-9 w-9 p-0 rounded-xl hover:bg-accent/80 transition-all duration-200\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </Button>\r\n </div>\r\n )}\r\n <div className={cn(\"overflow-y-auto flex-1\", !hideHeader && \"p-6\")}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Modal } from './ui/Modal';\nimport { CalendarEvent, EventType, EventAttachment, EventReminder } from '../types';\nimport { format, formatDistanceToNow, differenceInMinutes } from 'date-fns';\nimport { getTimeFormatFull } from '../lib/date';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n Clock, MapPin, AlignLeft, Trash2, X, Edit2,\n Users, Paperclip, File, XCircle, Calendar, ChevronDown, Check, Download,\n Bell, BellRing, Plus, Repeat, Tag, Palette, ChevronRight, Mail,\n ExternalLink, Copy, Share2, MoreHorizontal\n } from 'lucide-react';\nimport { cn } from '../utils';\n\ninterface EventModalProps {\n isOpen: boolean;\n onClose: () => void;\n event?: CalendarEvent | null;\n initialDate?: Date;\n onSave: (event: Partial<CalendarEvent>) => void;\n onDelete?: (eventId: string) => void;\n calendars?: { id: string; label: string; color?: string }[];\n eventTypes?: EventType[];\n translations: any;\n language?: string;\n}\n\n// Reminder options are built dynamically from translations (see getReminderOptions helper below)\n\n// Color palette for events\nconst COLOR_PALETTE = [\n '#3b82f6', // Blue\n '#ef4444', // Red\n '#10b981', // Emerald\n '#f59e0b', // Amber\n '#8b5cf6', // Violet\n '#ec4899', // Pink\n '#06b6d4', // Cyan\n '#84cc16', // Lime\n '#f97316', // Orange\n '#6366f1', // Indigo\n];\n\n/** Build reminder options from the active translation set */\nconst getReminderOptions = (t: any) => [\n { value: 0, label: t.reminderAtTime },\n { value: 5, label: t.reminder5min },\n { value: 10, label: t.reminder10min },\n { value: 15, label: t.reminder15min },\n { value: 30, label: t.reminder30min },\n { value: 60, label: t.reminder1hour },\n { value: 120, label: t.reminder2hours },\n { value: 1440, label: t.reminder1day },\n { value: 2880, label: t.reminder2days },\n { value: 10080, label: t.reminder1week },\n];\n\nexport const EventModal: React.FC<EventModalProps> = ({\n isOpen,\n onClose,\n event,\n initialDate,\n onSave,\n onDelete,\n calendars,\n eventTypes,\n translations,\n language = 'tr',\n}) => {\n // Full time format string derived from the active language\n const timeFmt = getTimeFormatFull(language);\n const [mode, setMode] = useState<'view' | 'edit' | 'create'>('create');\n const [activeTab, setActiveTab] = useState<'details' | 'guests' | 'options'>('details');\n\n const [formData, setFormData] = useState<Partial<CalendarEvent>>({\n title: '',\n description: '',\n location: '',\n start: new Date(),\n end: new Date(),\n allDay: false,\n color: '#3b82f6',\n calendarId: calendars?.[0]?.id,\n type: undefined,\n recurrence: undefined,\n attachments: [],\n reminders: [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n\n const [isCalendarDropdownOpen, setIsCalendarDropdownOpen] = useState(false);\n const [isColorPickerOpen, setIsColorPickerOpen] = useState(false);\n const [isReminderDropdownOpen, setIsReminderDropdownOpen] = useState(false);\n const [isGuestsDropdownOpen, setIsGuestsDropdownOpen] = useState(false);\n\n const fakeGuests = [\n 'alice@example.com',\n 'bob@example.com',\n 'charlie@example.com',\n 'diana@example.com',\n 'evan@example.com'\n ];\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [selectedGuests, setSelectedGuests] = useState<string[]>([]);\n\n useEffect(() => {\n if (isOpen) {\n if (event) {\n setMode('view');\n setFormData({\n ...event,\n start: new Date(event.start),\n end: new Date(event.end),\n attachments: event.attachments || [],\n reminders: event.reminders || [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n setSelectedGuests(event.guests || []);\n } else {\n setMode('create');\n const start = initialDate || new Date();\n const end = new Date(start);\n end.setHours(start.getHours() + 1);\n\n setFormData({\n title: '',\n description: '',\n location: '',\n start,\n end,\n allDay: false,\n color: '#3b82f6',\n calendarId: calendars?.[0]?.id,\n attachments: [],\n reminders: [{ id: '1', type: 'notification', time: 30, label: '30 minutes before' }],\n });\n setSelectedGuests([]);\n setActiveTab('details');\n }\n }\n }, [isOpen, event, initialDate, calendars]);\n\n const toggleGuest = (email: string) => {\n setSelectedGuests(prev => {\n const newGuests = prev.includes(email)\n ? prev.filter(e => e !== email)\n : [...prev, email];\n setFormData(curr => ({ ...curr, guests: newGuests }));\n return newGuests;\n });\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n let eventColor = formData.color;\n if (formData.calendarId && calendars) {\n const selectedCal = calendars.find(c => c.id === formData.calendarId);\n if (selectedCal?.color) {\n eventColor = selectedCal.color;\n }\n }\n\n onSave({\n ...formData,\n color: eventColor,\n id: event?.id,\n });\n onClose();\n };\n\n const handleDelete = () => {\n if (event?.id && onDelete) {\n onDelete(event.id);\n onClose();\n }\n };\n\n const formatDateForInput = (date: Date | undefined) => {\n if (!date) return '';\n return format(date, \"yyyy-MM-dd'T'HH:mm\");\n };\n\n const handleDateChange = (field: 'start' | 'end', value: string) => {\n const date = new Date(value);\n if (isNaN(date.getTime())) return;\n\n if (field === 'start') {\n const duration = formData.end!.getTime() - formData.start!.getTime();\n setFormData(prev => ({\n ...prev,\n start: date,\n end: new Date(date.getTime() + duration)\n }));\n } else {\n if (date < formData.start!) {\n setFormData(prev => ({ ...prev, start: date, end: date }));\n } else {\n setFormData(prev => ({ ...prev, end: date }));\n }\n }\n };\n\n const addReminder = (minutes: number, label: string) => {\n const newReminder: EventReminder = {\n id: Math.random().toString(36).substr(2, 9),\n type: 'notification',\n time: minutes,\n label\n };\n setFormData(prev => ({\n ...prev,\n reminders: [...(prev.reminders || []), newReminder]\n }));\n setIsReminderDropdownOpen(false);\n };\n\n const removeReminder = (id: string) => {\n setFormData(prev => ({\n ...prev,\n reminders: prev.reminders?.filter(r => r.id !== id)\n }));\n };\n\n const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n const newAttachments: EventAttachment[] = Array.from(e.target.files).map(file => ({\n id: Math.random().toString(36).substr(2, 9),\n name: file.name,\n type: 'file',\n size: `${(file.size / 1024).toFixed(1)} KB`\n }));\n setFormData(prev => ({\n ...prev,\n attachments: [...(prev.attachments || []), ...newAttachments]\n }));\n }\n };\n\n const removeAttachment = (id: string) => {\n setFormData(prev => ({\n ...prev,\n attachments: prev.attachments?.filter(a => a.id !== id)\n }));\n };\n\n const handleDownload = (attachment: EventAttachment) => {\n const element = document.createElement(\"a\");\n const file = new Blob(['Dummy content for ' + attachment.name], {type: 'text/plain'});\n element.href = URL.createObjectURL(file);\n element.download = attachment.name;\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n };\n\n const getDurationText = () => {\n if (!formData.start || !formData.end) return '';\n const mins = differenceInMinutes(formData.end, formData.start);\n if (mins < 60) return `${mins} min`;\n const hours = Math.floor(mins / 60);\n const remainingMins = mins % 60;\n if (remainingMins === 0) return `${hours} hr`;\n return `${hours} hr ${remainingMins} min`;\n };\n\n // ========== VIEW MODE ==========\n const renderViewMode = () => (\n <div className=\"flex flex-col bg-background overflow-hidden w-full max-h-[90vh]\">\n {/* Hero Header with Color */}\n <div\n className=\"relative px-6 pt-6 pb-8\"\n style={{\n background: `linear-gradient(135deg, ${event?.color || '#3b82f6'}15 0%, transparent 100%)`\n }}\n >\n {/* Top Actions Bar */}\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: event?.color || '#3b82f6' }}\n />\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {calendars?.find(c => c.id === event?.calendarId)?.label || 'Event'}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setMode('edit')}\n className=\"p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground\"\n title=\"Edit\"\n >\n <Edit2 className=\"w-4 h-4\" />\n </button>\n <button\n onClick={handleDelete}\n className=\"p-2 hover:bg-destructive/10 rounded-lg transition-all text-muted-foreground hover:text-destructive\"\n title=\"Delete\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n <button\n onClick={onClose}\n className=\"p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Title */}\n <h1 className=\"text-2xl font-bold text-foreground mb-3 leading-tight\">\n {event?.title || translations.noTitle}\n </h1>\n\n {/* Date & Time */}\n <div className=\"flex items-center gap-3 text-sm\">\n <div className=\"flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30\">\n <Calendar className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"font-medium\">\n {event?.start && format(new Date(event.start), 'EEE, MMM d')}\n </span>\n </div>\n <div className=\"flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30\">\n <Clock className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"font-medium\">\n {event?.start && format(new Date(event.start), timeFmt)} – {event?.end && format(new Date(event.end), timeFmt)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"px-6 pb-6 space-y-4 overflow-y-auto flex-1\">\n {/* Location */}\n {event?.location && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"flex items-start gap-3 p-4 rounded-2xl bg-muted/30 border border-border/30 group hover:bg-muted/50 transition-all cursor-pointer\"\n >\n <div className=\"p-2 bg-primary/10 rounded-xl\">\n <MapPin className=\"w-5 h-5 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium text-foreground\">{event.location}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{translations.clickToOpenInMaps}</p>\n </div>\n <ExternalLink className=\"w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n </motion.div>\n )}\n\n {/* Guests */}\n {event?.guests && event.guests.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.05 }}\n className=\"space-y-3\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n {event.guests.length} {event.guests.length > 1 ? translations.guestsCount : translations.guestCount}\n </span>\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {event.guests.map((email, index) => (\n <div\n key={index}\n className=\"flex items-center gap-2 px-3 py-2 rounded-xl bg-muted/30 border border-border/30 hover:bg-muted/50 transition-all cursor-pointer group\"\n >\n <div\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold text-white\"\n style={{ backgroundColor: `hsl(${index * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">{email.split('@')[0]}</p>\n <p className=\"text-xs text-muted-foreground truncate\">{email}</p>\n </div>\n </div>\n ))}\n </div>\n </motion.div>\n )}\n\n {/* Reminders */}\n {event?.reminders && event.reminders.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1 }}\n className=\"flex items-center gap-3\"\n >\n <div className=\"p-2 bg-amber-500/10 rounded-xl\">\n <Bell className=\"w-4 h-4 text-amber-500\" />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {event.reminders.map(reminder => (\n <span\n key={reminder.id}\n className=\"text-xs font-medium px-2.5 py-1 rounded-full bg-amber-500/10 text-amber-600 dark:text-amber-400\"\n >\n {reminder.label || `${reminder.time} min before`}\n </span>\n ))}\n </div>\n </motion.div>\n )}\n\n {/* Description */}\n {event?.description && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.15 }}\n className=\"space-y-2\"\n >\n <div className=\"flex items-center gap-2\">\n <AlignLeft className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.notes}</span>\n </div>\n <div className=\"text-sm text-foreground/80 whitespace-pre-wrap leading-relaxed pl-6 p-3 rounded-xl bg-muted/20 border border-border/30\">\n {event.description}\n </div>\n </motion.div>\n )}\n\n {/* Attachments */}\n {event?.attachments && event.attachments.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.2 }}\n className=\"space-y-2\"\n >\n <div className=\"flex items-center gap-2\">\n <Paperclip className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.attachments}</span>\n </div>\n <div className=\"grid gap-2\">\n {event.attachments.map(att => (\n <div\n key={att.id}\n onClick={() => handleDownload(att)}\n className=\"flex items-center gap-3 p-3 rounded-xl border border-border/30 bg-muted/20 hover:bg-muted/40 transition-all cursor-pointer group\"\n >\n <div className=\"p-2 bg-primary/10 rounded-lg\">\n <File className=\"w-4 h-4 text-primary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{att.name}</p>\n <p className=\"text-xs text-muted-foreground\">{att.size}</p>\n </div>\n <Download className=\"w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n </div>\n ))}\n </div>\n </motion.div>\n )}\n </div>\n </div>\n );\n\n // ========== EDIT/CREATE MODE ==========\n const renderEditMode = () => (\n <form onSubmit={handleSubmit} className=\"flex flex-col bg-background overflow-hidden w-full max-h-[85vh]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border/50 shrink-0\">\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => setIsColorPickerOpen(!isColorPickerOpen)}\n className=\"relative p-1\"\n >\n <div\n className=\"w-5 h-5 rounded-full cursor-pointer hover:scale-110 transition-transform\"\n style={{\n backgroundColor: formData.color,\n boxShadow: `0 0 0 2px var(--background), 0 0 0 4px ${formData.color}60`\n }}\n />\n {isColorPickerOpen && (\n <div className=\"absolute top-full left-0 mt-2 p-2 bg-background border border-border rounded-xl shadow-xl z-50 flex flex-wrap gap-1.5 w-[180px]\">\n {COLOR_PALETTE.map(color => (\n <button\n key={color}\n type=\"button\"\n onClick={() => {\n setFormData(prev => ({ ...prev, color }));\n setIsColorPickerOpen(false);\n }}\n className={cn(\n \"w-7 h-7 rounded-full transition-all hover:scale-110\",\n formData.color === color && \"ring-2 ring-offset-2 ring-offset-background ring-current\"\n )}\n style={{ backgroundColor: color, color: color }}\n />\n ))}\n </div>\n )}\n </button>\n <h2 className=\"text-lg font-semibold text-foreground\">\n {mode === 'edit' ? translations.editEvent : translations.newEvent}\n </h2>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-2 hover:bg-accent rounded-xl transition-all text-muted-foreground hover:text-foreground\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable Content */}\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"px-5 py-4 space-y-5\">\n {/* Title */}\n <div>\n <input\n type=\"text\"\n required\n autoFocus\n className=\"w-full text-xl font-semibold border-0 border-b-2 border-transparent focus:border-primary bg-transparent px-0 py-2 placeholder-muted-foreground/50 transition-all text-foreground focus:outline-none\"\n value={formData.title}\n onChange={e => setFormData({ ...formData, title: e.target.value })}\n placeholder={translations.addTitle}\n />\n </div>\n\n {/* Date & Time Row */}\n <div className=\"flex items-center gap-3 p-4 rounded-2xl bg-muted/20 border border-border/30\">\n <div className=\"p-2 bg-primary/10 rounded-xl shrink-0\">\n <Clock className=\"w-5 h-5 text-primary\" />\n </div>\n <div className=\"flex-1 grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block\">{translations.start}</label>\n <input\n type=\"datetime-local\"\n className=\"w-full bg-background border border-border/50 rounded-xl px-3 py-2 text-sm font-medium text-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n value={formatDateForInput(formData.start)}\n onChange={e => handleDateChange('start', e.target.value)}\n />\n </div>\n <div>\n <label className=\"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block\">{translations.end}</label>\n <input\n type=\"datetime-local\"\n className=\"w-full bg-background border border-border/50 rounded-xl px-3 py-2 text-sm font-medium text-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n value={formatDateForInput(formData.end)}\n onChange={e => handleDateChange('end', e.target.value)}\n />\n </div>\n </div>\n </div>\n\n {/* Duration Badge */}\n {getDurationText() && (\n <div className=\"flex justify-center\">\n <span className=\"text-xs font-medium px-3 py-1 rounded-full bg-primary/10 text-primary\">\n {getDurationText()}\n </span>\n </div>\n )}\n\n {/* Reminders */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Bell className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.reminders}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsReminderDropdownOpen(!isReminderDropdownOpen)}\n className=\"flex items-center gap-1 text-xs font-medium text-primary hover:text-primary/80 transition-colors\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n {translations.addReminder}\n </button>\n {isReminderDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsReminderDropdownOpen(false)} />\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1 max-h-60 overflow-y-auto\">\n {getReminderOptions(translations).map(option => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => addReminder(option.value, option.label)}\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-accent transition-colors\"\n >\n {option.label}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n {formData.reminders && formData.reminders.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {formData.reminders.map(reminder => (\n <div\n key={reminder.id}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-full bg-amber-500/10 border border-amber-500/20\"\n >\n <BellRing className=\"w-3.5 h-3.5 text-amber-500\" />\n <span className=\"text-xs font-medium text-amber-600 dark:text-amber-400\">\n {reminder.label}\n </span>\n <button\n type=\"button\"\n onClick={() => removeReminder(reminder.id)}\n className=\"p-0.5 hover:bg-amber-500/20 rounded-full transition-colors\"\n >\n <X className=\"w-3 h-3 text-amber-500\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Guests */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Users className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.guests}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsGuestsDropdownOpen(!isGuestsDropdownOpen)}\n className=\"w-full flex items-center justify-between px-4 py-3 bg-muted/20 border border-border/30 rounded-xl text-sm text-left hover:bg-muted/30 transition-all\"\n >\n <span className={selectedGuests.length > 0 ? \"text-foreground font-medium\" : \"text-muted-foreground\"}>\n {selectedGuests.length > 0\n ? `${selectedGuests.length} ${selectedGuests.length > 1 ? translations.guestsAdded : translations.guestAdded}`\n : translations.addGuests}\n </span>\n <ChevronDown className={cn(\"w-4 h-4 text-muted-foreground transition-transform\", isGuestsDropdownOpen && \"rotate-180\")} />\n </button>\n\n {isGuestsDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsGuestsDropdownOpen(false)} />\n <div className=\"absolute z-50 w-full mt-2 bg-background border border-border rounded-xl shadow-xl max-h-48 overflow-y-auto\">\n {fakeGuests.map(email => (\n <div\n key={email}\n className=\"px-4 py-3 hover:bg-accent cursor-pointer flex items-center gap-3 transition-colors\"\n onClick={() => toggleGuest(email)}\n >\n <div className={cn(\n \"w-5 h-5 rounded-md border-2 flex items-center justify-center transition-all\",\n selectedGuests.includes(email) ? 'bg-primary border-primary' : 'border-border'\n )}>\n {selectedGuests.includes(email) && <Check className=\"w-3 h-3 text-primary-foreground\" />}\n </div>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-7 h-7 rounded-full flex items-center justify-center text-xs font-semibold text-white\"\n style={{ backgroundColor: `hsl(${fakeGuests.indexOf(email) * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <span className=\"text-sm\">{email}</span>\n </div>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n\n {selectedGuests.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {selectedGuests.map(email => (\n <div\n key={email}\n className=\"flex items-center gap-2 pl-1 pr-2 py-1 bg-muted/30 border border-border/30 rounded-full\"\n >\n <div\n className=\"w-6 h-6 rounded-full flex items-center justify-center text-xs font-semibold text-white\"\n style={{ backgroundColor: `hsl(${fakeGuests.indexOf(email) * 60}, 70%, 50%)` }}\n >\n {email[0].toUpperCase()}\n </div>\n <span className=\"text-xs font-medium text-foreground\">{email.split('@')[0]}</span>\n <button\n type=\"button\"\n onClick={() => toggleGuest(email)}\n className=\"p-0.5 hover:bg-destructive/10 rounded-full transition-colors\"\n >\n <X className=\"w-3 h-3 text-muted-foreground\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Location */}\n <div className=\"flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30\">\n <MapPin className=\"w-5 h-5 text-muted-foreground shrink-0\" />\n <input\n type=\"text\"\n className=\"flex-1 bg-transparent text-sm text-foreground placeholder-muted-foreground focus:outline-none\"\n placeholder={translations.addLocation}\n value={formData.location || ''}\n onChange={e => setFormData({ ...formData, location: e.target.value })}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <AlignLeft className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">{translations.notes}</span>\n </div>\n <textarea\n className=\"w-full bg-muted/20 border border-border/30 rounded-xl px-4 py-3 text-sm min-h-[100px] resize-none text-foreground placeholder-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all\"\n placeholder={translations.addDescription}\n value={formData.description || ''}\n onChange={e => setFormData({ ...formData, description: e.target.value })}\n />\n </div>\n\n {/* Recurrence */}\n <div className=\"flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30\">\n <Repeat className=\"w-5 h-5 text-muted-foreground shrink-0\" />\n <select\n className=\"flex-1 bg-transparent text-sm text-foreground focus:outline-none cursor-pointer\"\n value={formData.recurrence?.freq || ''}\n onChange={e => {\n if (e.target.value === '') {\n setFormData({ ...formData, recurrence: undefined });\n } else {\n setFormData({\n ...formData,\n recurrence: {\n freq: e.target.value as 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY',\n interval: 1\n }\n });\n }\n }}\n >\n <option value=\"\">{translations.doesNotRepeat}</option>\n <option value=\"DAILY\">{translations.daily}</option>\n <option value=\"WEEKLY\">{translations.weekly}</option>\n <option value=\"MONTHLY\">{translations.monthly}</option>\n <option value=\"YEARLY\">{translations.yearly}</option>\n </select>\n </div>\n\n {/* Calendar Selector */}\n <div className=\"flex items-center justify-between p-3 rounded-xl bg-muted/20 border border-border/30\">\n <div className=\"flex items-center gap-2\">\n <Tag className=\"w-5 h-5 text-muted-foreground\" />\n <span className=\"text-sm text-foreground\">{translations.calendar}</span>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsCalendarDropdownOpen(!isCalendarDropdownOpen)}\n className=\"flex items-center gap-2 px-3 py-1.5 bg-background border border-border/50 rounded-lg text-sm hover:bg-accent/50 transition-all\"\n >\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: calendars?.find(c => c.id === formData.calendarId)?.color || '#3b82f6' }}\n />\n <span className=\"font-medium\">{calendars?.find(c => c.id === formData.calendarId)?.label || 'Select'}</span>\n <ChevronDown className=\"w-3.5 h-3.5 text-muted-foreground\" />\n </button>\n\n {isCalendarDropdownOpen && (\n <>\n <div className=\"fixed inset-0 z-40\" onClick={() => setIsCalendarDropdownOpen(false)} />\n <div className=\"absolute right-0 bottom-full mb-2 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1\">\n {calendars?.map(cal => (\n <button\n key={cal.id}\n type=\"button\"\n className=\"w-full flex items-center gap-3 px-3 py-2 hover:bg-accent transition-colors text-left\"\n onClick={() => {\n setFormData({\n ...formData,\n calendarId: cal.id,\n color: cal.color || formData.color\n });\n setIsCalendarDropdownOpen(false);\n }}\n >\n <div className=\"w-3 h-3 rounded-full\" style={{ backgroundColor: cal.color }} />\n <span className=\"flex-1 text-sm\">{cal.label}</span>\n {formData.calendarId === cal.id && <Check className=\"w-4 h-4 text-primary\" />}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"px-5 py-4 border-t border-border/50 flex items-center justify-between bg-muted/10 shrink-0\">\n {mode === 'edit' && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className=\"flex items-center gap-2 px-4 py-2 text-destructive hover:bg-destructive/10 rounded-xl transition-all text-sm font-medium\"\n >\n <Trash2 className=\"w-4 h-4\" />\n {translations.delete}\n </button>\n )}\n {mode === 'create' && <div />}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2.5 text-muted-foreground hover:text-foreground font-medium text-sm rounded-xl transition-all hover:bg-accent\"\n >\n {translations.cancel}\n </button>\n <button\n type=\"submit\"\n className=\"px-6 py-2.5 bg-primary hover:bg-primary/90 text-primary-foreground font-semibold text-sm rounded-xl shadow-md transition-all hover:shadow-lg hover:shadow-primary/20 active:scale-95\"\n >\n {mode === 'edit' ? translations.saveChanges : translations.createEvent}\n </button>\n </div>\n </div>\n </form>\n );\n\n return (\n <Modal isOpen={isOpen} onClose={onClose} hideHeader className=\"p-0 overflow-hidden max-w-lg rounded-2xl shadow-2xl\">\n <AnimatePresence mode=\"wait\">\n {mode === 'view' && event ? (\n <motion.div\n key=\"view\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {renderViewMode()}\n </motion.div>\n ) : (\n <motion.div\n key=\"edit\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n >\n {renderEditMode()}\n </motion.div>\n )}\n </AnimatePresence>\n </Modal>\n );\n};\n","import React from 'react';\r\nimport { cn } from '../utils';\r\n\r\n// Base skeleton component\r\nexport const Skeleton: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\r\n <div className={cn(\"animate-pulse bg-muted/40 rounded\", className)} style={style} />\r\n);\r\n\r\n// Month View Skeleton\r\nexport const MonthViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"grid grid-cols-7 border-b border-border/50 bg-muted/10\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <div key={i} className=\"py-3 px-2 text-center border-r border-border/30 last:border-r-0\">\r\n <Skeleton className=\"h-4 w-8 mx-auto\" />\r\n </div>\r\n ))}\r\n </div>\r\n {/* Grid */}\r\n <div className=\"grid grid-cols-7 flex-1\">\r\n {Array.from({ length: 35 }).map((_, i) => (\r\n <div key={i} className=\"min-h-[120px] border-r border-b border-border/30 p-2\">\r\n <Skeleton className=\"h-4 w-6 mb-2\" />\r\n <div className=\"space-y-1\">\r\n {Math.random() > 0.5 && <Skeleton className=\"h-5 w-full rounded-md\" />}\r\n {Math.random() > 0.7 && <Skeleton className=\"h-5 w-3/4 rounded-md\" />}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Week View Skeleton\r\nexport const WeekViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"flex border-b border-border/50 bg-muted/10\">\r\n <div className=\"w-16 p-3 border-r border-border/30\">\r\n <Skeleton className=\"h-8 w-10 mx-auto\" />\r\n </div>\r\n <div className=\"flex-1 grid grid-cols-7\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <div key={i} className=\"py-3 px-2 text-center border-r border-border/30 last:border-r-0\">\r\n <Skeleton className=\"h-3 w-8 mx-auto mb-1\" />\r\n <Skeleton className=\"h-8 w-8 mx-auto rounded-xl\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n {/* Grid */}\r\n <div className=\"flex flex-1\" style={{ height: '600px' }}>\r\n <div className=\"w-16 border-r border-border/30\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[60px] relative\">\r\n <Skeleton className=\"h-4 w-10 absolute right-2 -translate-y-1/2\" />\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"flex-1 grid grid-cols-7 relative\">\r\n {Array.from({ length: 7 }).map((_, colIdx) => (\r\n <div key={colIdx} className=\"relative border-r border-border/30 last:border-r-0\">\r\n {Array.from({ length: 10 }).map((_, rowIdx) => (\r\n <div key={rowIdx} className=\"h-[60px] border-b border-dashed border-border/20\" />\r\n ))}\r\n {/* Random events */}\r\n {Math.random() > 0.3 && (\r\n <Skeleton\r\n className=\"absolute rounded-md\"\r\n style={{\r\n top: `${Math.floor(Math.random() * 400)}px`,\r\n left: '4px',\r\n right: '4px',\r\n height: `${60 + Math.floor(Math.random() * 120)}px`\r\n }}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Day View Skeleton\r\nexport const DayViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden\">\r\n {/* Header */}\r\n <div className=\"px-6 py-4 border-b border-border/50 bg-muted/10 text-center\">\r\n <Skeleton className=\"h-7 w-64 mx-auto\" />\r\n </div>\r\n {/* Grid */}\r\n <div className=\"flex flex-1\" style={{ height: '600px' }}>\r\n <div className=\"w-20 border-r border-border/30 bg-muted/5\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[80px] relative\">\r\n <Skeleton className=\"h-4 w-12 absolute left-1/2 -translate-x-1/2 -translate-y-1/2\" />\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"flex-1 relative\">\r\n {Array.from({ length: 10 }).map((_, i) => (\r\n <div key={i} className=\"h-[80px] border-b border-dashed border-border/20\" />\r\n ))}\r\n {/* Random events */}\r\n <Skeleton\r\n className=\"absolute rounded-lg left-4 right-4\"\r\n style={{ top: '160px', height: '120px' }}\r\n />\r\n <Skeleton\r\n className=\"absolute rounded-lg left-4 right-4\"\r\n style={{ top: '400px', height: '80px' }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Agenda View Skeleton\r\nexport const AgendaViewSkeleton: React.FC = () => (\r\n <div className=\"h-full bg-background border border-border/50 rounded-2xl overflow-hidden p-6\">\r\n <div className=\"space-y-6\">\r\n {Array.from({ length: 4 }).map((_, dayIdx) => (\r\n <div key={dayIdx}>\r\n <Skeleton className=\"h-5 w-40 mb-4\" />\r\n <div className=\"space-y-3\">\r\n {Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_, eventIdx) => (\r\n <div key={eventIdx} className=\"flex items-center gap-4 p-3 rounded-xl bg-muted/10\">\r\n <Skeleton className=\"h-10 w-10 rounded-lg\" />\r\n <div className=\"flex-1 space-y-2\">\r\n <Skeleton className=\"h-4 w-3/4\" />\r\n <Skeleton className=\"h-3 w-1/2\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Calendar Header Skeleton\r\nexport const CalendarHeaderSkeleton: React.FC = () => (\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border/50 bg-muted/10\">\r\n <div className=\"flex items-center gap-3\">\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <div className=\"flex items-center gap-2\">\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <Skeleton className=\"h-8 w-8 rounded-lg\" />\r\n <Skeleton className=\"h-8 w-20 rounded-lg\" />\r\n </div>\r\n <Skeleton className=\"h-6 w-40\" />\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-8 w-16 rounded-lg\" />\r\n ))}\r\n </div>\r\n </div>\r\n);\r\n\r\n// Sidebar Skeleton\r\nexport const SidebarSkeleton: React.FC = () => (\r\n <div className=\"w-[260px] h-full bg-background border-r border-border/50 p-4 space-y-6\">\r\n {/* Create button */}\r\n <Skeleton className=\"h-12 w-full rounded-2xl\" />\r\n\r\n {/* Mini calendar */}\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <Skeleton className=\"h-4 w-20\" />\r\n <div className=\"flex gap-1\">\r\n <Skeleton className=\"h-6 w-6 rounded\" />\r\n <Skeleton className=\"h-6 w-6 rounded\" />\r\n </div>\r\n </div>\r\n <div className=\"grid grid-cols-7 gap-1\">\r\n {Array.from({ length: 7 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-4 w-4 mx-auto\" />\r\n ))}\r\n {Array.from({ length: 35 }).map((_, i) => (\r\n <Skeleton key={i} className=\"h-7 w-7 mx-auto rounded\" />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Calendars section */}\r\n <div className=\"bg-muted/20 rounded-2xl p-3\">\r\n <Skeleton className=\"h-4 w-20 mb-3\" />\r\n <div className=\"space-y-2\">\r\n {Array.from({ length: 3 }).map((_, i) => (\r\n <div key={i} className=\"flex items-center gap-3\">\r\n <Skeleton className=\"h-5 w-5 rounded\" />\r\n <Skeleton className=\"h-4 flex-1\" />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// Full Calendar Skeleton (combines all)\r\nexport const CalendarSkeleton: React.FC<{ view?: string }> = ({ view = 'month' }) => (\r\n <div className=\"flex flex-col h-full\">\r\n <CalendarHeaderSkeleton />\r\n <div className=\"flex flex-1 overflow-hidden\">\r\n <SidebarSkeleton />\r\n <div className=\"flex-1 p-4\">\r\n {view === 'month' && <MonthViewSkeleton />}\r\n {view === 'week' && <WeekViewSkeleton />}\r\n {view === 'day' && <DayViewSkeleton />}\r\n {view === 'agenda' && <AgendaViewSkeleton />}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\r\nimport { CalendarEvent } from '../types';\r\nimport { cn } from '../utils';\r\nimport { Edit3, Trash2, Copy, Calendar, Clock, X } from 'lucide-react';\r\nimport { AnimatePresence, motion } from 'framer-motion';\r\n\r\ninterface ContextMenuAction {\r\n id: string;\r\n label: string;\r\n icon?: React.ReactNode;\r\n onClick: () => void;\r\n variant?: 'default' | 'danger';\r\n disabled?: boolean;\r\n}\r\n\r\ninterface EventContextMenuProps {\r\n event: CalendarEvent | null;\r\n position: { x: number; y: number } | null;\r\n onClose: () => void;\r\n onEdit?: (event: CalendarEvent) => void;\r\n onDelete?: (eventId: string) => void;\r\n onDuplicate?: (event: CalendarEvent) => void;\r\n customActions?: ContextMenuAction[];\r\n translations?: {\r\n edit?: string;\r\n delete?: string;\r\n duplicate?: string;\r\n };\r\n}\r\n\r\nexport const EventContextMenu: React.FC<EventContextMenuProps> = ({\r\n event,\r\n position,\r\n onClose,\r\n onEdit,\r\n onDelete,\r\n onDuplicate,\r\n customActions = [],\r\n translations,\r\n}) => {\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close on escape key\r\n useEffect(() => {\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n if (position) {\r\n document.addEventListener('keydown', handleKeyDown);\r\n return () => document.removeEventListener('keydown', handleKeyDown);\r\n }\r\n }, [position, onClose]);\r\n\r\n // Close on click outside\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (position) {\r\n // Delay to prevent immediate close from the right-click that opened it\r\n setTimeout(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }, 0);\r\n return () => document.removeEventListener('mousedown', handleClickOutside);\r\n }\r\n }, [position, onClose]);\r\n\r\n if (!event || !position) return null;\r\n\r\n const actions: ContextMenuAction[] = [\r\n ...(onEdit ? [{\r\n id: 'edit',\r\n label: translations?.edit || 'Edit',\r\n icon: <Edit3 className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onEdit(event);\r\n onClose();\r\n },\r\n }] : []),\r\n ...(onDuplicate ? [{\r\n id: 'duplicate',\r\n label: translations?.duplicate || 'Duplicate',\r\n icon: <Copy className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onDuplicate(event);\r\n onClose();\r\n },\r\n }] : []),\r\n ...customActions,\r\n ...(onDelete ? [{\r\n id: 'delete',\r\n label: translations?.delete || 'Delete',\r\n icon: <Trash2 className=\"w-4 h-4\" />,\r\n onClick: () => {\r\n onDelete(event.id);\r\n onClose();\r\n },\r\n variant: 'danger' as const,\r\n }] : []),\r\n ];\r\n\r\n // Calculate position to ensure menu stays within viewport\r\n const adjustedPosition = {\r\n x: Math.min(position.x, window.innerWidth - 200),\r\n y: Math.min(position.y, window.innerHeight - (actions.length * 44 + 80)),\r\n };\r\n\r\n return (\r\n <AnimatePresence>\r\n <motion.div\r\n ref={menuRef}\r\n initial={{ opacity: 0, scale: 0.95, y: -5 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: -5 }}\r\n transition={{ duration: 0.15, ease: 'easeOut' }}\r\n className=\"fixed z-[100] min-w-[180px] bg-background border-[0.5px] border-border rounded-xl shadow-xl overflow-hidden\"\r\n style={{\r\n left: adjustedPosition.x,\r\n top: adjustedPosition.y,\r\n }}\r\n >\r\n {/* Event preview header */}\r\n <div className=\"px-3 py-2 border-b-[0.5px] border-border bg-muted/30\">\r\n <div className=\"flex items-center gap-2\">\r\n <div\r\n className=\"w-2.5 h-2.5 rounded-full shrink-0\"\r\n style={{ backgroundColor: event.color || 'var(--primary)' }}\r\n />\r\n <span className=\"text-sm font-medium truncate text-foreground\">\r\n {event.title}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"py-1\">\r\n {actions.map((action, index) => (\r\n <React.Fragment key={action.id}>\r\n {index > 0 && action.variant === 'danger' && (\r\n <div className=\"h-px bg-border my-1\" />\r\n )}\r\n <button\r\n onClick={action.onClick}\r\n disabled={action.disabled}\r\n className={cn(\r\n \"w-full flex items-center gap-3 px-3 py-2 text-sm transition-colors\",\r\n action.disabled && \"opacity-50 cursor-not-allowed\",\r\n action.variant === 'danger'\r\n ? \"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20\"\r\n : \"text-foreground hover:bg-accent\"\r\n )}\r\n >\r\n {action.icon}\r\n <span>{action.label}</span>\r\n </button>\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </motion.div>\r\n </AnimatePresence>\r\n );\r\n};\r\n\r\n// Hook to manage context menu state\r\nexport const useEventContextMenu = () => {\r\n const [contextMenu, setContextMenu] = useState<{\r\n event: CalendarEvent | null;\r\n position: { x: number; y: number } | null;\r\n }>({ event: null, position: null });\r\n\r\n const openContextMenu = useCallback((event: CalendarEvent, e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setContextMenu({\r\n event,\r\n position: { x: e.clientX, y: e.clientY },\r\n });\r\n }, []);\r\n\r\n const closeContextMenu = useCallback(() => {\r\n setContextMenu({ event: null, position: null });\r\n }, []);\r\n\r\n return {\r\n contextMenuEvent: contextMenu.event,\r\n contextMenuPosition: contextMenu.position,\r\n openContextMenu,\r\n closeContextMenu,\r\n };\r\n};\r\n","/**\r\n * Converts a color string (hex or rgb) to HSL values (h s% l%) for Tailwind CSS variables.\r\n * @param color - The color string (e.g., \"#3b82f6\", \"3b82f6\", \"rgb(0, 84, 97)\")\r\n * @returns The HSL string (e.g., \"217 91% 60%\") or null if invalid\r\n */\r\nexport function colorToHsl(color: string): string | null {\r\n let r = 0, g = 0, b = 0;\r\n\r\n // Handle Hex\r\n if (color.startsWith('#') || /^[0-9a-fA-F]{3,6}$/.test(color)) {\r\n let c = color.replace(/^#/, '');\r\n if (c.length === 3) {\r\n c = c.split('').map(char => char + char).join('');\r\n }\r\n if (c.length !== 6) return null;\r\n \r\n r = parseInt(c.substring(0, 2), 16) / 255;\r\n g = parseInt(c.substring(2, 4), 16) / 255;\r\n b = parseInt(c.substring(4, 6), 16) / 255;\r\n } \r\n // Handle RGB\r\n else if (color.startsWith('rgb')) {\r\n const match = color.match(/\\d+/g);\r\n if (!match || match.length < 3) return null;\r\n r = parseInt(match[0]) / 255;\r\n g = parseInt(match[1]) / 255;\r\n b = parseInt(match[2]) / 255;\r\n } \r\n else {\r\n return null;\r\n }\r\n\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n let h = 0;\r\n let s = 0;\r\n let l = (max + min) / 2;\r\n\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n const hDeg = Math.round(h * 360);\r\n const sPct = Math.round(s * 100);\r\n const lPct = Math.round(l * 100);\r\n\r\n return `${hDeg} ${sPct}% ${lPct}%`;\r\n}\r\n\r\nexport interface ThemeVariables {\r\n '--background'?: string;\r\n '--foreground'?: string;\r\n '--primary'?: string;\r\n '--primary-foreground'?: string;\r\n '--secondary'?: string;\r\n '--secondary-foreground'?: string;\r\n '--muted'?: string;\r\n '--muted-foreground'?: string;\r\n '--accent'?: string;\r\n '--accent-foreground'?: string;\r\n '--border'?: string;\r\n '--radius'?: string;\r\n}\r\n\r\nimport { CalendarTheme } from '../types';\r\n\r\nexport function getThemeStyles(theme?: CalendarTheme): React.CSSProperties {\r\n if (!theme) return {};\r\n\r\n const styles: Record<string, string> = {};\r\n\r\n // Handle Colors\r\n if (theme.colors) {\r\n const mappings: Record<string, keyof typeof theme.colors> = {\r\n '--background': 'background',\r\n '--foreground': 'foreground',\r\n '--primary': 'primary',\r\n '--secondary': 'secondary',\r\n '--muted': 'muted',\r\n '--accent': 'accent',\r\n '--border': 'border',\r\n };\r\n\r\n Object.entries(mappings).forEach(([cssVar, themeKey]) => {\r\n const colorValue = theme.colors?.[themeKey];\r\n if (colorValue) {\r\n const hsl = colorToHsl(colorValue);\r\n if (hsl) {\r\n styles[cssVar] = hsl;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Handle Border Radius\r\n if (theme.borderRadius) {\r\n styles['--radius'] = theme.borderRadius;\r\n }\r\n\r\n // Handle Font Family\r\n if (theme.fontFamily) {\r\n styles['fontFamily'] = theme.fontFamily;\r\n }\r\n\r\n return styles as React.CSSProperties;\r\n}\r\n","import { useState, useMemo, useEffect } from 'react';\r\nimport {\r\n addMonths, subMonths, addWeeks, subWeeks, addDays, subDays,\r\n differenceInMilliseconds\r\n} from 'date-fns';\r\nimport { toZonedTime, fromZonedTime } from 'date-fns-tz';\r\nimport { RRule } from 'rrule';\r\nimport { DragEndEvent } from '@dnd-kit/core';\r\nimport { ViewType, CalendarEvent } from '../types';\r\n\r\ninterface UseCalendarLogicProps {\r\n events: CalendarEvent[];\r\n view?: ViewType;\r\n onViewChange?: (view: ViewType) => void;\r\n date?: Date;\r\n onDateChange?: (date: Date) => void;\r\n onEventClick?: (event: CalendarEvent) => void;\r\n onEventDrop?: (event: CalendarEvent, start: Date, end: Date) => void;\r\n onEventUpdate?: (event: CalendarEvent) => void;\r\n onEventCreate?: (event: Partial<CalendarEvent>) => void;\r\n onEventDelete?: (eventId: string) => void;\r\n readOnly?: boolean;\r\n timezone?: string;\r\n}\r\n\r\nexport const useCalendarLogic = ({\r\n events,\r\n view: controlledView,\r\n onViewChange: controlledOnViewChange,\r\n date: controlledDate,\r\n onDateChange: controlledOnDateChange,\r\n onEventClick,\r\n onEventDrop,\r\n onEventUpdate,\r\n onEventCreate,\r\n onEventDelete,\r\n readOnly,\r\n timezone\r\n}: UseCalendarLogicProps) => {\r\n const [internalView, setInternalView] = useState<ViewType>('week');\r\n const [internalDate, setInternalDate] = useState(new Date());\r\n // Start closed on SSR to avoid hydration mismatch.\r\n // After mount, open automatically on desktop (≥768px).\r\n const [isSidebarOpen, setIsSidebarOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (window.innerWidth >= 768) {\r\n setIsSidebarOpen(true);\r\n }\r\n }, []);\r\n \r\n // Modal state\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(null);\r\n const [modalInitialDate, setModalInitialDate] = useState<Date | undefined>(undefined);\r\n\r\n const view = controlledView ?? internalView;\r\n const currentDate = controlledDate ?? internalDate;\r\n\r\n // Expand recurring events\r\n const expandedEvents = useMemo(() => {\r\n const allEvents: CalendarEvent[] = [];\r\n \r\n // Define a range for expansion (e.g., +/- 1 year from current date)\r\n // For better performance, we could limit this based on the current view range\r\n const rangeStart = subDays(currentDate, 365);\r\n const rangeEnd = addDays(currentDate, 365);\r\n\r\n events.forEach(event => {\r\n if (event.recurrence) {\r\n try {\r\n const rule = new RRule({\r\n freq: RRule[event.recurrence.freq],\r\n interval: event.recurrence.interval || 1,\r\n dtstart: new Date(event.start),\r\n until: event.recurrence.until ? new Date(event.recurrence.until) : undefined,\r\n count: event.recurrence.count,\r\n });\r\n\r\n const dates = rule.between(rangeStart, rangeEnd);\r\n \r\n dates.forEach(date => {\r\n const duration = differenceInMilliseconds(new Date(event.end), new Date(event.start));\r\n allEvents.push({\r\n ...event,\r\n id: `${event.id}-${date.getTime()}`, // Unique ID for each instance\r\n originalEventId: event.id, // Reference to original\r\n start: date,\r\n end: new Date(date.getTime() + duration),\r\n });\r\n });\r\n } catch (e) {\r\n console.error(\"Error parsing recurrence rule\", e);\r\n allEvents.push(event); // Fallback to original\r\n }\r\n } else {\r\n allEvents.push(event);\r\n }\r\n });\r\n\r\n return allEvents;\r\n }, [events, currentDate]);\r\n\r\n const handleViewChange = (newView: ViewType) => {\r\n if (controlledOnViewChange) {\r\n controlledOnViewChange(newView);\r\n } else {\r\n setInternalView(newView);\r\n }\r\n };\r\n\r\n const handleDateChange = (newDate: Date) => {\r\n if (controlledOnDateChange) {\r\n controlledOnDateChange(newDate);\r\n } else {\r\n setInternalDate(newDate);\r\n }\r\n };\r\n\r\n const handlePrev = () => {\r\n switch (view) {\r\n case 'month':\r\n handleDateChange(subMonths(currentDate, 1));\r\n break;\r\n case 'week':\r\n handleDateChange(subWeeks(currentDate, 1));\r\n break;\r\n case 'day':\r\n case 'resource':\r\n handleDateChange(subDays(currentDate, 1));\r\n break;\r\n case 'agenda':\r\n handleDateChange(subDays(currentDate, 7));\r\n break;\r\n }\r\n };\r\n\r\n const handleNext = () => {\r\n switch (view) {\r\n case 'month':\r\n handleDateChange(addMonths(currentDate, 1));\r\n break;\r\n case 'week':\r\n handleDateChange(addWeeks(currentDate, 1));\r\n break;\r\n case 'day':\r\n case 'resource':\r\n handleDateChange(addDays(currentDate, 1));\r\n break;\r\n case 'agenda':\r\n handleDateChange(addDays(currentDate, 7));\r\n break;\r\n }\r\n };\r\n\r\n const handleToday = () => {\r\n handleDateChange(new Date());\r\n };\r\n\r\n const handleDateClick = (date: Date) => {\r\n handleDateChange(date);\r\n handleViewChange('day');\r\n };\r\n\r\n const handleTimeSlotClick = (date: Date) => {\r\n if (readOnly) return;\r\n setSelectedEvent(null);\r\n setModalInitialDate(date);\r\n setIsModalOpen(true);\r\n };\r\n \r\n const handleEventClickInternal = (event: CalendarEvent) => {\r\n if (onEventClick) {\r\n onEventClick(event);\r\n }\r\n \r\n if (!readOnly) {\r\n setSelectedEvent(event);\r\n setModalInitialDate(undefined);\r\n setIsModalOpen(true);\r\n }\r\n };\r\n\r\n const handleCreateEvent = () => {\r\n if (readOnly) return;\r\n setSelectedEvent(null);\r\n setModalInitialDate(new Date());\r\n setIsModalOpen(true);\r\n };\r\n\r\n const handleModalSave = (eventData: Partial<CalendarEvent>) => {\r\n // If we are editing an instance of a recurring event, we might want to split it\r\n // For simplicity in this version, we just update the original event if it has an ID,\r\n // or create a new one.\r\n \r\n // Check if it's a recurrence instance (has ID like \"originalId-timestamp\")\r\n let effectiveEventId = selectedEvent?.id;\r\n if (selectedEvent?.originalEventId) {\r\n effectiveEventId = selectedEvent.originalEventId;\r\n }\r\n\r\n if (effectiveEventId) {\r\n // Update existing\r\n if (onEventUpdate) {\r\n onEventUpdate({\r\n ...eventData,\r\n id: effectiveEventId\r\n } as CalendarEvent);\r\n }\r\n } else {\r\n // Create new\r\n if (onEventCreate) {\r\n onEventCreate(eventData);\r\n }\r\n }\r\n };\r\n \r\n const handleModalDelete = (eventId: string) => {\r\n // Handle deletion of recurring instances\r\n let effectiveEventId = eventId;\r\n if (selectedEvent?.originalEventId && selectedEvent.id === eventId) {\r\n effectiveEventId = selectedEvent.originalEventId;\r\n }\r\n\r\n if (onEventDelete) {\r\n onEventDelete(effectiveEventId);\r\n }\r\n };\r\n\r\n const handleDragEnd = (event: DragEndEvent) => {\r\n const { active, over } = event;\r\n\r\n if (!over) return;\r\n\r\n const activeEvent = active.data.current?.event as CalendarEvent;\r\n const overDate = over.data.current?.date as Date;\r\n\r\n if (!activeEvent || !overDate) return;\r\n\r\n const originalStart = new Date(activeEvent.start);\r\n const originalEnd = new Date(activeEvent.end);\r\n const duration = differenceInMilliseconds(originalEnd, originalStart);\r\n\r\n let newStart: Date;\r\n\r\n if (view === 'month') {\r\n // For month view, overDate is the day cell\r\n // We need to preserve the original time but change the date\r\n if (timezone) {\r\n // Get the original time in the target timezone\r\n const zonedOriginal = toZonedTime(originalStart, timezone);\r\n // Create new date with overDate's date but original's time\r\n const zonedNew = new Date(overDate);\r\n zonedNew.setHours(zonedOriginal.getHours());\r\n zonedNew.setMinutes(zonedOriginal.getMinutes());\r\n zonedNew.setSeconds(zonedOriginal.getSeconds());\r\n zonedNew.setMilliseconds(zonedOriginal.getMilliseconds());\r\n // Convert back from zoned time to UTC\r\n newStart = fromZonedTime(zonedNew, timezone);\r\n } else {\r\n newStart = new Date(overDate);\r\n newStart.setHours(originalStart.getHours());\r\n newStart.setMinutes(originalStart.getMinutes());\r\n newStart.setSeconds(originalStart.getSeconds());\r\n newStart.setMilliseconds(originalStart.getMilliseconds());\r\n }\r\n } else {\r\n // Week / Day / Resource View Logic\r\n // overDate represents the time slot in \"display timezone\"\r\n if (timezone) {\r\n // overDate is already in the display timezone representation\r\n // We need to convert it back to UTC for storage\r\n // The cell date was created as local time representing the target timezone\r\n newStart = fromZonedTime(overDate, timezone);\r\n } else {\r\n // No timezone set - use the date directly\r\n newStart = new Date(overDate);\r\n }\r\n\r\n newStart.setSeconds(0);\r\n newStart.setMilliseconds(0);\r\n }\r\n\r\n const newEnd = new Date(newStart.getTime() + duration);\r\n\r\n // Resource Handling\r\n let newResourceId = activeEvent.resourceId;\r\n const overResourceId = over.data.current?.resourceId;\r\n if (overResourceId) {\r\n newResourceId = overResourceId;\r\n }\r\n\r\n // Check if event has actually changed\r\n if (newStart.getTime() === originalStart.getTime() &&\r\n newEnd.getTime() === originalEnd.getTime() &&\r\n newResourceId === activeEvent.resourceId\r\n ) {\r\n return;\r\n }\r\n\r\n if (onEventDrop) {\r\n onEventDrop(\r\n { ...activeEvent, start: newStart, end: newEnd, resourceId: newResourceId },\r\n newStart,\r\n newEnd\r\n );\r\n } else if (onEventUpdate) {\r\n onEventUpdate({\r\n ...activeEvent,\r\n start: newStart,\r\n end: newEnd,\r\n resourceId: newResourceId\r\n });\r\n }\r\n };\r\n\r\n return {\r\n view,\r\n currentDate,\r\n isSidebarOpen,\r\n setIsSidebarOpen,\r\n isModalOpen,\r\n setIsModalOpen,\r\n selectedEvent,\r\n modalInitialDate,\r\n expandedEvents,\r\n handleViewChange,\r\n handleDateChange,\r\n handlePrev,\r\n handleNext,\r\n handleToday,\r\n handleDateClick,\r\n handleTimeSlotClick,\r\n handleEventClickInternal,\r\n handleCreateEvent,\r\n handleModalSave,\r\n handleModalDelete,\r\n handleDragEnd\r\n };\r\n};\r\n","import { useRef, useCallback, useEffect } from 'react';\r\n\r\ninterface SwipeGestureOptions {\r\n onSwipeLeft?: () => void;\r\n onSwipeRight?: () => void;\r\n onSwipeUp?: () => void;\r\n onSwipeDown?: () => void;\r\n threshold?: number; // Minimum distance to trigger swipe\r\n restraint?: number; // Maximum perpendicular distance\r\n allowedTime?: number; // Maximum time allowed to complete swipe\r\n enabled?: boolean;\r\n}\r\n\r\ninterface TouchInfo {\r\n startX: number;\r\n startY: number;\r\n startTime: number;\r\n}\r\n\r\nexport const useSwipeGesture = <T extends HTMLElement>(\r\n options: SwipeGestureOptions\r\n) => {\r\n const {\r\n onSwipeLeft,\r\n onSwipeRight,\r\n onSwipeUp,\r\n onSwipeDown,\r\n threshold = 100,\r\n restraint = 100,\r\n allowedTime = 500,\r\n enabled = true,\r\n } = options;\r\n\r\n const touchInfoRef = useRef<TouchInfo | null>(null);\r\n const elementRef = useRef<T>(null);\r\n\r\n const handleTouchStart = useCallback((e: TouchEvent) => {\r\n if (!enabled) return;\r\n\r\n const touch = e.touches[0];\r\n touchInfoRef.current = {\r\n startX: touch.clientX,\r\n startY: touch.clientY,\r\n startTime: Date.now(),\r\n };\r\n }, [enabled]);\r\n\r\n const handleTouchEnd = useCallback((e: TouchEvent) => {\r\n if (!enabled || !touchInfoRef.current) return;\r\n\r\n const touch = e.changedTouches[0];\r\n const { startX, startY, startTime } = touchInfoRef.current;\r\n\r\n const distX = touch.clientX - startX;\r\n const distY = touch.clientY - startY;\r\n const elapsedTime = Date.now() - startTime;\r\n\r\n // Check if swipe was fast enough\r\n if (elapsedTime <= allowedTime) {\r\n // Horizontal swipe\r\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\r\n if (distX > 0) {\r\n onSwipeRight?.();\r\n } else {\r\n onSwipeLeft?.();\r\n }\r\n }\r\n // Vertical swipe\r\n else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\r\n if (distY > 0) {\r\n onSwipeDown?.();\r\n } else {\r\n onSwipeUp?.();\r\n }\r\n }\r\n }\r\n\r\n touchInfoRef.current = null;\r\n }, [enabled, threshold, restraint, allowedTime, onSwipeLeft, onSwipeRight, onSwipeUp, onSwipeDown]);\r\n\r\n useEffect(() => {\r\n const element = elementRef.current;\r\n if (!element) return;\r\n\r\n element.addEventListener('touchstart', handleTouchStart, { passive: true });\r\n element.addEventListener('touchend', handleTouchEnd, { passive: true });\r\n\r\n return () => {\r\n element.removeEventListener('touchstart', handleTouchStart);\r\n element.removeEventListener('touchend', handleTouchEnd);\r\n };\r\n }, [handleTouchStart, handleTouchEnd]);\r\n\r\n return elementRef;\r\n};\r\n\r\n// Higher-order component for adding swipe to views\r\nexport const useViewSwipe = <T extends HTMLElement = HTMLElement>(\r\n onPrev: () => void,\r\n onNext: () => void,\r\n enabled: boolean = true\r\n) => {\r\n return useSwipeGesture<T>({\r\n onSwipeLeft: onNext,\r\n onSwipeRight: onPrev,\r\n threshold: 50,\r\n restraint: 100,\r\n allowedTime: 300,\r\n enabled,\r\n });\r\n};\r\n","import React, { useId, useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DndContext, useSensor, useSensors, PointerSensor, Modifier, DragOverlay } from '@dnd-kit/core';\nimport { createSnapModifier, restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { CalendarHeader } from './components/CalendarHeader';\nimport { Sidebar } from './components/Sidebar';\nimport { MonthView } from './views/MonthView';\nimport { WeekView } from './views/WeekView';\nimport { DayView } from './views/DayView';\nimport { AgendaView } from './views/AgendaView';\nimport { ResourceView } from './views/ResourceView';\nimport { EventModal } from './components/EventModal';\nimport { MonthViewSkeleton, WeekViewSkeleton, DayViewSkeleton, AgendaViewSkeleton } from './components/Skeleton';\nimport { EventContextMenu, useEventContextMenu } from './components/ContextMenu';\nimport { CalendarProps, CalendarEvent } from './types';\nimport { cn } from './utils';\nimport { getThemeStyles } from './lib/theme';\nimport { useCalendarLogic } from './hooks/useCalendarLogic';\nimport { differenceInMinutes, format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, addDays } from 'date-fns';\nimport { useViewSwipe } from './hooks/useSwipeGesture';\nimport { getTranslations, LanguageCode } from './locales';\nimport { getTimeFormatFull } from './lib/date';\n\n// Re-export types for consumers\nexport type {\n ViewType,\n CalendarEvent,\n CalendarProps,\n CalendarProps as ProSchedulerProps,\n CalendarTheme,\n CalendarTranslations,\n EventType,\n EventBadge,\n BuiltInEventBadgeId,\n Resource,\n EventReminder,\n EventAttachment,\n ThemeColors,\n LanguageCode,\n SidebarMenuItem,\n CustomView,\n} from './types';\n\n// Re-export locale utilities so consumers can access language metadata\nexport { LANGUAGE_META, LOCALES, DATE_FNS_LOCALES, getTranslations } from './locales';\n\n// Re-export built-in event badge presets (Özel Ders, Grup Ders, Online, …)\nexport {\n EVENT_BADGES,\n EVENT_BADGE_ICONS,\n getEventBadge,\n resolveEventBadge,\n isBuiltInEventBadgeId,\n} from './lib/eventBadges';\n\n// Re-export utilities\nexport { cn } from './utils';\n\nexport const Scheduler: React.FC<CalendarProps> = ({\n events = [],\n view: controlledView,\n onViewChange: controlledOnViewChange,\n date: controlledDate,\n onDateChange: controlledOnDateChange,\n onEventClick,\n onEventDrop,\n onEventCreate,\n onEventUpdate,\n onEventDelete,\n onEventResize,\n timezone,\n onTimezoneChange,\n className,\n theme,\n renderEventForm,\n renderHeader,\n renderMiniCalendar,\n renderEmptyState,\n readOnly,\n calendars,\n resources,\n eventTypes,\n onCalendarToggle,\n isLoading,\n isDarkMode,\n onThemeToggle,\n translations,\n hideViewSwitcher,\n hideLanguageSwitcher,\n initialScrollHour = 8,\n reverseTime: reverseTimeProp = false,\n language = 'tr', // default language is Turkish\n onLanguageChange,\n locale,\n sidebarMenus,\n customViews,\n}) => {\n // Tracks which custom sidebar menu is active (null = normal calendar view)\n const [activeCustomMenu, setActiveCustomMenu] = useState<string | null>(null);\n\n // Tracks which custom view is active (null = built-in view)\n const [activeCustomViewId, setActiveCustomViewId] = useState<string | null>(null);\n\n // Internal reverse-time state; persisted in localStorage so the preference\n // survives page refreshes. Falls back to the prop value on first load.\n const REVERSE_TIME_KEY = 'calendarkit:reverseTime';\n const [reverseTime, setReverseTime] = useState<boolean>(() => {\n try {\n const stored = localStorage.getItem(REVERSE_TIME_KEY);\n return stored !== null ? stored === 'true' : reverseTimeProp;\n } catch {\n return reverseTimeProp;\n }\n });\n\n // Persist whenever the value changes\n useEffect(() => {\n try {\n localStorage.setItem(REVERSE_TIME_KEY, String(reverseTime));\n } catch {\n // localStorage may be unavailable in some environments (e.g. SSR)\n }\n }, [reverseTime]);\n\n const [activeDragEvent, setActiveDragEvent] = useState<CalendarEvent | null>(null);\n\n // Ref to scheduler root — used to copy resolved theme CSS vars onto the portaled FAB\n const schedulerRef = useRef<HTMLDivElement>(null);\n const [fabCssVars, setFabCssVars] = useState<React.CSSProperties>({});\n\n // SSR guard — document.body is unavailable during server render\n const [isMounted, setIsMounted] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => { setIsMounted(true); }, []);\n\n // JS media query — more reliable than md:hidden when viewport meta or breakpoints differ\n useEffect(() => {\n if (!isMounted) return;\n const mq = window.matchMedia('(max-width: 767px)');\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [isMounted]);\n\n // Copy computed theme tokens from scheduler root so portaled FAB inherits the same palette\n const syncFabTheme = useCallback(() => {\n const root = schedulerRef.current;\n if (!root) return;\n const cs = getComputedStyle(root);\n const vars = ['--primary', '--primary-foreground'] as const;\n const next: Record<string, string> = {};\n vars.forEach((name) => {\n const value = cs.getPropertyValue(name).trim();\n if (value) next[name] = value;\n });\n setFabCssVars(next as React.CSSProperties);\n }, []);\n\n useEffect(() => {\n if (!isMounted) return;\n syncFabTheme();\n }, [isMounted, theme, isDarkMode, syncFabTheme]);\n\n // Context menu state\n const {\n contextMenuEvent,\n contextMenuPosition,\n openContextMenu,\n closeContextMenu,\n } = useEventContextMenu();\n\n const {\n view,\n currentDate,\n isSidebarOpen,\n setIsSidebarOpen,\n isModalOpen,\n setIsModalOpen,\n selectedEvent,\n modalInitialDate,\n handleViewChange,\n handleDateChange,\n handlePrev,\n handleNext,\n handleToday,\n handleDateClick,\n handleTimeSlotClick,\n handleEventClickInternal,\n handleCreateEvent,\n handleModalSave,\n handleModalDelete,\n handleDragEnd,\n expandedEvents // New export\n } = useCalendarLogic({\n events,\n view: controlledView,\n onViewChange: controlledOnViewChange,\n date: controlledDate,\n onDateChange: controlledOnDateChange,\n onEventClick,\n onEventDrop,\n onEventUpdate,\n onEventCreate,\n onEventDelete,\n readOnly,\n timezone\n });\n\n // DnD Sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n })\n );\n\n const gridSize = 15; // 15px snap (15 minutes if 60px/hr)\n const snapToGrid = createSnapModifier(gridSize);\n const modifiers: Modifier[] = [snapToGrid, restrictToWindowEdges];\n\n // Disable DnD if readOnly\n const dndSensors = readOnly ? [] : sensors;\n\n // Handle event resize\n const handleEventResize = (event: CalendarEvent, newEnd: Date) => {\n if (readOnly) return;\n\n // Call the external callback if provided\n if (onEventResize) {\n onEventResize(event, event.start, newEnd);\n }\n\n // Also update via onEventUpdate for internal state management\n if (onEventUpdate) {\n onEventUpdate({\n ...event,\n end: newEnd\n });\n }\n };\n \n const id = useId();\n\n // Mobile swipe gesture support\n const swipeRef = useViewSwipe<HTMLDivElement>(handlePrev, handleNext, true);\n\n // Build full translation object: base locale + custom overrides\n const t = getTranslations(language as LanguageCode, translations ?? {});\n\n const handleDragStart = (event: any) => {\n const { active } = event;\n const draggedEvent = expandedEvents.find(e => e.id === active.id);\n if (draggedEvent) {\n setActiveDragEvent(draggedEvent);\n }\n };\n\n const onDragEndWrapper = (event: any) => {\n setActiveDragEvent(null);\n handleDragEnd(event);\n };\n \n // Calculate height for week/day view drag overlay\n const getDragHeight = () => {\n if (!activeDragEvent) return undefined;\n \n if (view === 'resource') {\n return 80; // Approximate height for resource view events\n }\n\n if (view !== 'week' && view !== 'day') return undefined;\n const duration = differenceInMinutes(activeDragEvent.end, activeDragEvent.start);\n // 60px per hour\n const height = (duration / 60) * 60; // 60px height base\n // If DayView uses 80px, we should account for that. \n // Current implementation: WeekView = 60px, DayView = 80px.\n // But DayView uses 80px in DayView.tsx.\n // Let's assume 60px for now as default or pass a prop.\n // Or check view state.\n const hourHeight = view === 'day' ? 80 : 60;\n return (duration / 60) * hourHeight;\n };\n\n const getDragWidth = () => {\n if (view === 'month') return '100%';\n \n if (view === 'resource' && activeDragEvent) {\n const duration = differenceInMinutes(activeDragEvent.end, activeDragEvent.start);\n const width = (duration / 60) * 100; // 100px per hour in ResourceView\n return `${Math.max(width, 4)}px`;\n }\n\n // For Week/Day views, use a fixed width that looks like a column\n // Ideally we would measure the column width, but a fixed reasonable width works for the ghost\n return '150px'; \n };\n\n // Filter events based on active calendars\n const filteredEvents = useMemo(() => {\n if (!calendars) return expandedEvents;\n const activeCalendarIds = calendars.filter(c => c.active !== false).map(c => c.id);\n return expandedEvents.filter(e => {\n // If event has no calendarId, show it by default OR hide it? \n // Usually events belong to a calendar. If undefined, maybe show it.\n if (!e.calendarId) return true; \n return activeCalendarIds.includes(e.calendarId);\n });\n }, [expandedEvents, calendars]);\n\n // Count events only within the currently visible date range so the badge reflects\n // what the user actually sees (month / week / day / agenda next-30-days).\n const viewEventCount = useMemo(() => {\n let rangeStart: Date;\n let rangeEnd: Date;\n\n switch (view) {\n case 'month':\n rangeStart = startOfMonth(currentDate);\n rangeEnd = endOfMonth(currentDate);\n break;\n case 'week':\n rangeStart = startOfWeek(currentDate, { weekStartsOn: 1 });\n rangeEnd = endOfWeek(currentDate, { weekStartsOn: 1 });\n break;\n case 'day':\n case 'resource':\n rangeStart = startOfDay(currentDate);\n rangeEnd = endOfDay(currentDate);\n break;\n case 'agenda':\n rangeStart = startOfDay(currentDate);\n rangeEnd = addDays(rangeStart, 30);\n break;\n default:\n return filteredEvents.length;\n }\n\n return filteredEvents.filter(\n (e) => e.start >= rangeStart && e.start <= rangeEnd\n ).length;\n }, [filteredEvents, view, currentDate]);\n\n return (\n <>\n <DndContext \n id={id} \n sensors={dndSensors} \n onDragStart={handleDragStart}\n onDragEnd={onDragEndWrapper} \n modifiers={modifiers}\n >\n <div\n ref={schedulerRef}\n className={cn(\"flex flex-col h-full bg-background text-foreground relative\", className)}\n style={getThemeStyles(theme)}\n >\n {renderHeader ? (\n // Custom header: consumer gets full navigation/state props\n renderHeader({\n currentDate,\n view,\n onPrev: handlePrev,\n onNext: handleNext,\n onToday: handleToday,\n onViewChange: handleViewChange,\n translations: t,\n language: language as LanguageCode,\n onLanguageChange,\n isDarkMode,\n onThemeToggle,\n })\n ) : (\n <CalendarHeader\n currentDate={currentDate}\n onPrev={handlePrev}\n onNext={handleNext}\n onToday={handleToday}\n view={view}\n onViewChange={handleViewChange}\n onMenuClick={() => setIsSidebarOpen(!isSidebarOpen)}\n isDarkMode={isDarkMode}\n onThemeToggle={onThemeToggle}\n translations={t}\n hideViewSwitcher={hideViewSwitcher}\n language={language}\n onLanguageChange={onLanguageChange}\n locale={locale}\n onCreateEvent={handleCreateEvent}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); }}\n eventCount={viewEventCount}\n hideLanguageSwitcher={hideLanguageSwitcher}\n />\n )}\n \n <div className=\"flex flex-1 overflow-hidden\">\n {/* ── Desktop Sidebar (md+) — pushes the main content ── */}\n <motion.div\n className=\"hidden md:block overflow-hidden shrink-0\"\n initial={false}\n animate={{\n width: isSidebarOpen ? 256 : 0,\n opacity: isSidebarOpen ? 1 : 0,\n }}\n transition={{\n duration: 0.3,\n ease: [0.4, 0, 0.2, 1],\n }}\n >\n <Sidebar\n currentDate={currentDate}\n onDateChange={handleDateChange}\n onViewChange={handleViewChange}\n onEventCreate={handleCreateEvent}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n className=\"w-full h-full\"\n readOnly={readOnly}\n calendars={calendars}\n onCalendarToggle={onCalendarToggle}\n translations={t}\n renderMiniCalendar={renderMiniCalendar}\n locale={locale}\n sidebarMenus={sidebarMenus}\n activeCustomMenu={activeCustomMenu}\n onCustomMenuChange={(id) => { setActiveCustomMenu(id); setActiveCustomViewId(null); }}\n reverseTime={reverseTime}\n onReverseTimeChange={setReverseTime}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); }}\n />\n </motion.div>\n\n {/* ── Mobile Sidebar Overlay (below md) — fixed drawer + backdrop ── */}\n <AnimatePresence>\n {isSidebarOpen && (\n <motion.div\n key=\"mobile-sidebar-overlay\"\n className=\"md:hidden fixed inset-0 z-[100] flex\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n >\n {/* Sidebar drawer — slides in from left */}\n <motion.div\n className=\"w-[280px] h-full bg-background shadow-2xl overflow-hidden\"\n initial={{ x: -280 }}\n animate={{ x: 0 }}\n exit={{ x: -280 }}\n transition={{ duration: 0.25, ease: [0.4, 0, 0.2, 1] }}\n >\n <Sidebar\n currentDate={currentDate}\n onDateChange={handleDateChange}\n onViewChange={handleViewChange}\n onEventCreate={() => { setIsSidebarOpen(false); handleCreateEvent(); }}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n className=\"w-full h-full\"\n readOnly={readOnly}\n calendars={calendars}\n onCalendarToggle={onCalendarToggle}\n translations={t}\n renderMiniCalendar={renderMiniCalendar}\n locale={locale}\n sidebarMenus={sidebarMenus}\n activeCustomMenu={activeCustomMenu}\n onCustomMenuChange={(id) => { setActiveCustomMenu(id); setActiveCustomViewId(null); setIsSidebarOpen(false); }}\n reverseTime={reverseTime}\n onReverseTimeChange={setReverseTime}\n customViews={customViews}\n activeCustomViewId={activeCustomViewId}\n onCustomViewChange={(id) => { setActiveCustomViewId(id); setActiveCustomMenu(null); setIsSidebarOpen(false); }}\n />\n </motion.div>\n {/* Backdrop — tap to close */}\n <motion.div\n className=\"flex-1 bg-black/50 backdrop-blur-sm\"\n onClick={() => setIsSidebarOpen(false)}\n />\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* min-h-0 breaks the flex implicit min-height so inner views can scroll */}\n <div className=\"flex-1 flex flex-col overflow-hidden relative min-h-0\">\n {/* ── Custom Sidebar Menu Content ── */}\n {activeCustomMenu !== null && sidebarMenus && (\n <div className=\"flex-1 overflow-y-auto p-4 md:p-6\">\n {sidebarMenus.find((m) => m.id === activeCustomMenu)?.component}\n </div>\n )}\n\n {/* ── Custom View Content (from header switcher or sidebar İşlemler) ── */}\n {activeCustomViewId !== null && activeCustomMenu === null && customViews && (\n <div className=\"flex-1 overflow-y-auto p-4 md:p-6\">\n {customViews.find((v) => v.id === activeCustomViewId)?.component}\n </div>\n )}\n\n {/* ── Calendar Views (hidden when a custom menu or custom view is active) ── */}\n {activeCustomMenu === null && activeCustomViewId === null && (isLoading ? (\n <div className=\"flex-1 overflow-auto p-0 md:p-4 min-h-0\">\n <div className=\"h-full min-w-full\">\n {view === 'month' && <MonthViewSkeleton />}\n {view === 'week' && <WeekViewSkeleton />}\n {view === 'day' && <DayViewSkeleton />}\n {view === 'agenda' && <AgendaViewSkeleton />}\n {view === 'resource' && <WeekViewSkeleton />}\n </div>\n </div>\n ) : (\n /* overflow-hidden here: each view owns its own scroll container */\n <div ref={swipeRef} className=\"flex-1 overflow-hidden p-0 md:p-4 touch-pan-y min-h-0\">\n {/* Use flex column so the child view fills the full padded area */}\n <div className=\"flex flex-col h-full min-w-full min-h-0\">\n <AnimatePresence mode=\"wait\" initial={false}>\n <motion.div\n key={`${view}-${currentDate.toISOString()}-${timezone || 'local'}`}\n initial={{ opacity: 0, y: 8 }}\n animate={{\n opacity: 1,\n y: 0,\n transition: {\n duration: 0.2,\n ease: [0.25, 0.1, 0.25, 1],\n }\n }}\n exit={{\n opacity: 0,\n y: -8,\n transition: {\n duration: 0.15,\n ease: [0.25, 0.1, 0.25, 1],\n }\n }}\n className=\"flex-1 min-h-0 flex flex-col\"\n style={{ height: '100%' }}\n >\n {view === 'month' && (\n <MonthView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onDateClick={handleDateClick}\n timezone={timezone}\n locale={locale}\n />\n )}\n {view === 'week' && (\n <WeekView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={handleTimeSlotClick}\n onEventResize={handleEventResize}\n timezone={timezone}\n locale={locale}\n readonly={readOnly}\n language={language}\n initialScrollHour={initialScrollHour}\n reverseTime={reverseTime}\n />\n )}\n {view === 'day' && (\n <DayView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={handleTimeSlotClick}\n onEventResize={handleEventResize}\n timezone={timezone}\n locale={locale}\n readonly={readOnly}\n language={language}\n initialScrollHour={initialScrollHour}\n reverseTime={reverseTime}\n />\n )}\n {view === 'agenda' && (\n <AgendaView\n currentDate={currentDate}\n events={filteredEvents}\n onEventClick={handleEventClickInternal}\n onCreateEvent={handleCreateEvent}\n translations={t}\n language={language}\n renderEmptyState={renderEmptyState}\n />\n )}\n {view === 'resource' && resources && (\n <ResourceView\n currentDate={currentDate}\n events={filteredEvents}\n resources={resources}\n onEventClick={handleEventClickInternal}\n onTimeSlotClick={(date) => {\n if (readOnly) return;\n handleTimeSlotClick(date);\n }}\n locale={locale}\n language={language}\n />\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n </div>\n ))}\n\n </div>\n </div>\n\n \n {renderEventForm ? (\n renderEventForm({\n isOpen: isModalOpen,\n onClose: () => setIsModalOpen(false),\n event: selectedEvent,\n initialDate: modalInitialDate,\n onSave: handleModalSave,\n onDelete: handleModalDelete\n })\n ) : (\n <EventModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n event={selectedEvent}\n initialDate={modalInitialDate}\n onSave={handleModalSave}\n onDelete={handleModalDelete}\n calendars={calendars}\n eventTypes={eventTypes}\n translations={t}\n language={language}\n />\n )}\n\n {/* Context Menu */}\n <EventContextMenu\n event={contextMenuEvent}\n position={contextMenuPosition}\n onClose={closeContextMenu}\n onEdit={(event) => {\n handleEventClickInternal(event);\n closeContextMenu();\n }}\n onDelete={(eventId) => {\n onEventDelete?.(eventId);\n closeContextMenu();\n }}\n onDuplicate={(event) => {\n // Create a duplicate with a new ID and slightly shifted time\n const duplicatedEvent: Partial<CalendarEvent> = {\n ...event,\n id: `${event.id}-copy-${Date.now()}`,\n title: `${event.title} ${t.copy}`,\n start: new Date(event.start.getTime() + 24 * 60 * 60 * 1000), // +1 day\n end: new Date(event.end.getTime() + 24 * 60 * 60 * 1000),\n };\n onEventCreate?.(duplicatedEvent);\n closeContextMenu();\n }}\n translations={{\n edit: t.edit,\n delete: t.delete,\n duplicate: t.duplicate,\n }}\n />\n\n <DragOverlay dropAnimation={null}>\n {activeDragEvent ? (\n <div\n className={cn(\n \"rounded-lg shadow-2xl border-2 overflow-hidden cursor-grabbing transition-transform\",\n \"backdrop-blur-sm\",\n !activeDragEvent.color && \"bg-primary/90 border-primary/60 text-primary-foreground\",\n )}\n style={{\n backgroundColor: activeDragEvent.color ? `${activeDragEvent.color}e0` : undefined,\n borderColor: activeDragEvent.color ? `${activeDragEvent.color}80` : undefined,\n color: activeDragEvent.color ? '#fff' : undefined,\n width: getDragWidth(),\n height: getDragHeight() ? `${getDragHeight()}px` : undefined,\n boxShadow: `0 20px 40px -15px ${activeDragEvent.color || 'var(--primary)'}40, 0 10px 20px -10px rgba(0,0,0,0.2)`,\n transform: 'rotate(-2deg) scale(1.02)',\n }}\n >\n <div className=\"p-2.5 h-full flex flex-col\">\n {/* Event color accent bar */}\n <div\n className=\"absolute left-0 top-0 bottom-0 w-1 rounded-l-lg\"\n style={{ backgroundColor: activeDragEvent.color || 'var(--primary)' }}\n />\n\n {/* Content */}\n <div className=\"pl-2\">\n <div className=\"font-semibold truncate text-sm\">{activeDragEvent.title}</div>\n {(view === 'week' || view === 'day') && getDragHeight() && getDragHeight()! > 40 && (\n <div className=\"text-xs opacity-80 mt-0.5 flex items-center gap-1\">\n <svg className=\"w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <path d=\"M12 6v6l4 2\"/>\n </svg>\n {format(activeDragEvent.start, getTimeFormatFull(language))} - {format(activeDragEvent.end, getTimeFormatFull(language))}\n </div>\n )}\n </div>\n\n {/* Drag indicator */}\n <div className=\"absolute bottom-1.5 right-1.5 opacity-60\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"9\" cy=\"5\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"5\" r=\"1.5\"/>\n <circle cx=\"9\" cy=\"12\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"12\" r=\"1.5\"/>\n <circle cx=\"9\" cy=\"19\" r=\"1.5\"/>\n <circle cx=\"15\" cy=\"19\" r=\"1.5\"/>\n </svg>\n </div>\n </div>\n </div>\n ) : null}\n </DragOverlay>\n\n </div>\n </DndContext>\n\n {/* Mobile FAB — portaled + inline styles so it stays visible outside overflow-hidden parents */}\n {isMounted && isMobile && !readOnly && createPortal(\n <div\n style={{\n position: 'fixed',\n bottom: 'max(1.5rem, env(safe-area-inset-bottom, 0px))',\n right: 'max(1.5rem, env(safe-area-inset-right, 0px))',\n zIndex: 9999,\n pointerEvents: 'none',\n ...fabCssVars,\n }}\n >\n <button\n type=\"button\"\n aria-label={t.createEvent ?? t.create ?? 'Create event'}\n onClick={handleCreateEvent}\n style={{\n pointerEvents: 'auto',\n width: 48,\n height: 48,\n borderRadius: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'hsl(var(--primary, 221.2 83.2% 53.3%))',\n color: 'hsl(var(--primary-foreground, 210 40% 98%))',\n border: 'none',\n cursor: 'pointer',\n boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.25)',\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>\n </svg>\n </button>\n </div>,\n document.body\n )}\n </>\n );\n};\n\n/** Primary export — backward-compatible alias for v1 `@calendarkit/react` consumers. */\nexport const ProScheduler = Scheduler;\n"]}
|