@forcecalendar/core 2.1.70 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1225 @@
1
+ /**
2
+ * Type definitions for Lightning Calendar Core
3
+ * @module types
4
+ */
5
+ export type EventData = {
6
+ /**
7
+ * - Unique identifier for the event
8
+ */
9
+ id: string;
10
+ /**
11
+ * - Event title
12
+ */
13
+ title: string;
14
+ /**
15
+ * - Start date/time of the event
16
+ */
17
+ start: Date | string;
18
+ /**
19
+ * - End date/time of the event
20
+ */
21
+ end?: Date | string;
22
+ /**
23
+ * - Whether this is an all-day event
24
+ */
25
+ allDay?: boolean;
26
+ /**
27
+ * - Event description
28
+ */
29
+ description?: string;
30
+ /**
31
+ * - Event location
32
+ */
33
+ location?: string;
34
+ /**
35
+ * - Event color (applies to all color properties if set)
36
+ */
37
+ color?: string;
38
+ /**
39
+ * - Background color for the event
40
+ */
41
+ backgroundColor?: string;
42
+ /**
43
+ * - Border color for the event
44
+ */
45
+ borderColor?: string;
46
+ /**
47
+ * - Text color for the event
48
+ */
49
+ textColor?: string;
50
+ /**
51
+ * - Whether this is a recurring event
52
+ */
53
+ recurring?: boolean;
54
+ /**
55
+ * - Recurrence rule (RRULE string or object)
56
+ */
57
+ recurrenceRule?: RecurrenceRule | string;
58
+ /**
59
+ * - IANA timezone for the event
60
+ */
61
+ timeZone?: string;
62
+ /**
63
+ * - IANA timezone for the event end (cross-timezone events)
64
+ */
65
+ endTimeZone?: string;
66
+ /**
67
+ * - Backward-compatible alias for recurrenceRule
68
+ */
69
+ recurrence?: RecurrenceRule | string;
70
+ /**
71
+ * - Single category (alias for a one-element categories array)
72
+ */
73
+ category?: string;
74
+ /**
75
+ * - Event status
76
+ */
77
+ status?: EventStatus;
78
+ /**
79
+ * - Event visibility
80
+ */
81
+ visibility?: EventVisibility;
82
+ /**
83
+ * - Event organizer
84
+ */
85
+ organizer?: Organizer;
86
+ /**
87
+ * - Event attendees
88
+ */
89
+ attendees?: Attendee[];
90
+ /**
91
+ * - Event reminders
92
+ */
93
+ reminders?: Reminder[];
94
+ /**
95
+ * - Event categories/tags
96
+ */
97
+ categories?: string[];
98
+ /**
99
+ * - Event attachments
100
+ */
101
+ attachments?: Attachment[];
102
+ /**
103
+ * - Virtual meeting information
104
+ */
105
+ conferenceData?: ConferenceData;
106
+ /**
107
+ * - Custom metadata for extensibility
108
+ */
109
+ metadata?: Record<string, any>;
110
+ };
111
+ export type EventStatus = ('confirmed' | 'tentative' | 'cancelled');
112
+ export type EventVisibility = ('public' | 'private' | 'confidential');
113
+ export type AttendeeResponseStatus = ('needs-action' | 'accepted' | 'declined' | 'tentative' | 'delegated');
114
+ export type AttendeeRole = ('required' | 'optional' | 'resource');
115
+ export type ReminderMethod = ('email' | 'popup' | 'sms');
116
+ export type Organizer = {
117
+ /**
118
+ * - Unique identifier for the organizer
119
+ */
120
+ id?: string;
121
+ /**
122
+ * - Organizer's name
123
+ */
124
+ name: string;
125
+ /**
126
+ * - Organizer's email
127
+ */
128
+ email: string;
129
+ /**
130
+ * - Organizer's phone number
131
+ */
132
+ phoneNumber?: string;
133
+ /**
134
+ * - URL to organizer's photo
135
+ */
136
+ photoUrl?: string;
137
+ };
138
+ export type Attendee = {
139
+ /**
140
+ * - Unique identifier for the attendee
141
+ */
142
+ id?: string;
143
+ /**
144
+ * - Attendee's name
145
+ */
146
+ name: string;
147
+ /**
148
+ * - Attendee's email
149
+ */
150
+ email: string;
151
+ /**
152
+ * - Attendee's phone number
153
+ */
154
+ phoneNumber?: string;
155
+ /**
156
+ * - URL to attendee's photo
157
+ */
158
+ photoUrl?: string;
159
+ /**
160
+ * - Response status
161
+ */
162
+ responseStatus?: AttendeeResponseStatus;
163
+ /**
164
+ * - Attendee role
165
+ */
166
+ role?: AttendeeRole;
167
+ /**
168
+ * - Whether attendance is optional
169
+ */
170
+ optional?: boolean;
171
+ /**
172
+ * - Whether attendee is a resource (room, equipment)
173
+ */
174
+ resource?: boolean;
175
+ /**
176
+ * - Attendee's comment or note
177
+ */
178
+ comment?: string;
179
+ /**
180
+ * - When the attendee responded
181
+ */
182
+ responseTime?: Date;
183
+ };
184
+ export type Reminder = {
185
+ /**
186
+ * - Unique identifier for the reminder
187
+ */
188
+ id?: string;
189
+ /**
190
+ * - Reminder method
191
+ */
192
+ method: ReminderMethod;
193
+ /**
194
+ * - Minutes before event to trigger reminder
195
+ */
196
+ minutesBefore: number;
197
+ /**
198
+ * - Custom reminder message
199
+ */
200
+ message?: string;
201
+ /**
202
+ * - Whether reminder is active
203
+ */
204
+ enabled?: boolean;
205
+ };
206
+ export type Attachment = {
207
+ /**
208
+ * - Unique identifier for the attachment
209
+ */
210
+ id?: string;
211
+ /**
212
+ * - File name
213
+ */
214
+ fileName: string;
215
+ /**
216
+ * - URL to the file
217
+ */
218
+ fileUrl?: string;
219
+ /**
220
+ * - MIME type of the file
221
+ */
222
+ mimeType?: string;
223
+ /**
224
+ * - File size in bytes
225
+ */
226
+ size?: number;
227
+ /**
228
+ * - URL to file type icon
229
+ */
230
+ iconUrl?: string;
231
+ };
232
+ export type ConferenceData = {
233
+ /**
234
+ * - Unique identifier for the conference
235
+ */
236
+ id?: string;
237
+ /**
238
+ * - Conference solution (e.g., 'zoom', 'teams', 'meet')
239
+ */
240
+ solution?: string;
241
+ /**
242
+ * - Conference URL
243
+ */
244
+ url?: string;
245
+ /**
246
+ * - Conference phone number
247
+ */
248
+ phone?: string;
249
+ /**
250
+ * - Access code or meeting ID
251
+ */
252
+ accessCode?: string;
253
+ /**
254
+ * - Meeting password
255
+ */
256
+ password?: string;
257
+ /**
258
+ * - Additional conference notes
259
+ */
260
+ notes?: string;
261
+ };
262
+ export type RecurrenceRule = {
263
+ /**
264
+ * - Frequency of recurrence
265
+ */
266
+ freq: ('DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY');
267
+ /**
268
+ * - Interval between occurrences
269
+ */
270
+ interval?: number;
271
+ /**
272
+ * - Number of occurrences
273
+ */
274
+ count?: number;
275
+ /**
276
+ * - End date for recurrence
277
+ */
278
+ until?: Date;
279
+ /**
280
+ * - Days of week (MO, TU, WE, TH, FR, SA, SU)
281
+ */
282
+ byDay?: string[];
283
+ /**
284
+ * - Days of month (1-31)
285
+ */
286
+ byMonthDay?: number[];
287
+ /**
288
+ * - Months (1-12)
289
+ */
290
+ byMonth?: number[];
291
+ /**
292
+ * - Position in set (-1 for last)
293
+ */
294
+ bySetPos?: number[];
295
+ /**
296
+ * - Exception dates to exclude
297
+ */
298
+ exceptions?: Date[];
299
+ };
300
+ export type CalendarConfig = {
301
+ /**
302
+ * - Initial view type
303
+ */
304
+ view?: ViewType;
305
+ /**
306
+ * - Initial date to display
307
+ */
308
+ date?: Date;
309
+ /**
310
+ * - Day week starts on (0=Sunday, 6=Saturday)
311
+ */
312
+ weekStartsOn?: number;
313
+ /**
314
+ * - Locale for formatting
315
+ */
316
+ locale?: string;
317
+ /**
318
+ * - IANA timezone
319
+ */
320
+ timeZone?: string;
321
+ /**
322
+ * - Show week numbers
323
+ */
324
+ showWeekNumbers?: boolean;
325
+ /**
326
+ * - Show weekend days
327
+ */
328
+ showWeekends?: boolean;
329
+ /**
330
+ * - Always show 6 weeks in month view
331
+ */
332
+ fixedWeekCount?: boolean;
333
+ /**
334
+ * - Business hours configuration
335
+ */
336
+ businessHours?: BusinessHours;
337
+ /**
338
+ * - Initial events to load
339
+ */
340
+ events?: EventData[];
341
+ };
342
+ export type ViewType = ('month' | 'week' | 'day' | 'list');
343
+ export type BusinessHours = {
344
+ /**
345
+ * - Start time (HH:MM format)
346
+ */
347
+ start: string;
348
+ /**
349
+ * - End time (HH:MM format)
350
+ */
351
+ end: string;
352
+ };
353
+ export type ViewData = {
354
+ /**
355
+ * - Type of view
356
+ */
357
+ type: ViewType;
358
+ /**
359
+ * - Start date of the view
360
+ */
361
+ startDate?: Date;
362
+ /**
363
+ * - End date of the view
364
+ */
365
+ endDate?: Date;
366
+ };
367
+ export type MonthViewData = {
368
+ /**
369
+ * - Always 'month'
370
+ */
371
+ type: ViewType;
372
+ /**
373
+ * - Year being displayed
374
+ */
375
+ year: number;
376
+ /**
377
+ * - Month being displayed (0-11)
378
+ */
379
+ month: number;
380
+ /**
381
+ * - Localized month name
382
+ */
383
+ monthName: string;
384
+ /**
385
+ * - Array of weeks in the month
386
+ */
387
+ weeks: WeekData[];
388
+ /**
389
+ * - First date in the view
390
+ */
391
+ startDate: Date;
392
+ /**
393
+ * - Last date in the view
394
+ */
395
+ endDate: Date;
396
+ };
397
+ export type WeekData = {
398
+ /**
399
+ * - Week number in the year
400
+ */
401
+ weekNumber: number;
402
+ /**
403
+ * - Array of days in the week
404
+ */
405
+ days: DayData[];
406
+ };
407
+ export type DayData = {
408
+ /**
409
+ * - Date object for the day
410
+ */
411
+ date: Date;
412
+ /**
413
+ * - Day of the month (1-31)
414
+ */
415
+ dayOfMonth: number;
416
+ /**
417
+ * - Whether this day is in the current month
418
+ */
419
+ isCurrentMonth: boolean;
420
+ /**
421
+ * - Whether this is today
422
+ */
423
+ isToday: boolean;
424
+ /**
425
+ * - Whether this is a weekend day
426
+ */
427
+ isWeekend: boolean;
428
+ /**
429
+ * - Events for this day
430
+ */
431
+ events: import('./events/Event.js').Event[];
432
+ };
433
+ export type WeekViewData = {
434
+ /**
435
+ * - Always 'week'
436
+ */
437
+ type: ViewType;
438
+ /**
439
+ * - Week number in the year
440
+ */
441
+ weekNumber: number;
442
+ /**
443
+ * - First day of the week
444
+ */
445
+ startDate: Date;
446
+ /**
447
+ * - Last day of the week
448
+ */
449
+ endDate: Date;
450
+ /**
451
+ * - Array of days with detailed event data
452
+ */
453
+ days: WeekDayData[];
454
+ };
455
+ export type WeekDayData = {
456
+ /**
457
+ * - Date object for the day
458
+ */
459
+ date: Date;
460
+ /**
461
+ * - Day of week (0-6)
462
+ */
463
+ dayOfWeek: number;
464
+ /**
465
+ * - Localized day name
466
+ */
467
+ dayName: string;
468
+ /**
469
+ * - Whether this is today
470
+ */
471
+ isToday: boolean;
472
+ /**
473
+ * - Whether this is a weekend day
474
+ */
475
+ isWeekend: boolean;
476
+ /**
477
+ * - All events for this day
478
+ */
479
+ events: import('./events/Event.js').Event[];
480
+ /**
481
+ * - Groups of overlapping events
482
+ */
483
+ overlapGroups: Array<import('./events/Event.js').Event[]>;
484
+ /**
485
+ * - Function to calculate positions
486
+ */
487
+ getEventPositions: (events: import('./events/Event.js').Event[]) => Map<string, EventPosition>;
488
+ };
489
+ export type EventPosition = {
490
+ /**
491
+ * - Column index for rendering
492
+ */
493
+ column: number;
494
+ /**
495
+ * - Total number of columns
496
+ */
497
+ totalColumns: number;
498
+ };
499
+ export type DayViewData = {
500
+ /**
501
+ * - Always 'day'
502
+ */
503
+ type: ViewType;
504
+ /**
505
+ * - Date being displayed
506
+ */
507
+ date: Date;
508
+ /**
509
+ * - Localized day name
510
+ */
511
+ dayName: string;
512
+ /**
513
+ * - Whether this is today
514
+ */
515
+ isToday: boolean;
516
+ /**
517
+ * - All-day events
518
+ */
519
+ allDayEvents: import('./events/Event.js').Event[];
520
+ /**
521
+ * - Hourly time slots
522
+ */
523
+ hours: HourSlot[];
524
+ };
525
+ export type HourSlot = {
526
+ /**
527
+ * - Hour (0-23)
528
+ */
529
+ hour: number;
530
+ /**
531
+ * - Formatted time string
532
+ */
533
+ time: string;
534
+ /**
535
+ * - Events in this hour
536
+ */
537
+ events: import('./events/Event.js').Event[];
538
+ };
539
+ export type ListViewData = {
540
+ /**
541
+ * - Always 'list'
542
+ */
543
+ type: ViewType;
544
+ /**
545
+ * - Start of the list range
546
+ */
547
+ startDate: Date;
548
+ /**
549
+ * - End of the list range
550
+ */
551
+ endDate: Date;
552
+ /**
553
+ * - Days with events
554
+ */
555
+ days: ListDayData[];
556
+ /**
557
+ * - Total event count
558
+ */
559
+ totalEvents: number;
560
+ };
561
+ export type ListDayData = {
562
+ /**
563
+ * - Date object
564
+ */
565
+ date: Date;
566
+ /**
567
+ * - Localized day name
568
+ */
569
+ dayName: string;
570
+ /**
571
+ * - Whether this is today
572
+ */
573
+ isToday: boolean;
574
+ /**
575
+ * - Events for this day
576
+ */
577
+ events: import('./events/Event.js').Event[];
578
+ };
579
+ export type CalendarState = {
580
+ /**
581
+ * - Current view type
582
+ */
583
+ view: ViewType;
584
+ /**
585
+ * - Currently displayed date
586
+ */
587
+ currentDate: Date;
588
+ /**
589
+ * - Selected event ID
590
+ */
591
+ selectedEventId: string | null;
592
+ /**
593
+ * - Selected date
594
+ */
595
+ selectedDate: Date | null;
596
+ /**
597
+ * - Hovered event ID
598
+ */
599
+ hoveredEventId: string | null;
600
+ /**
601
+ * - Hovered date
602
+ */
603
+ hoveredDate: Date | null;
604
+ /**
605
+ * - Week start day
606
+ */
607
+ weekStartsOn: number;
608
+ /**
609
+ * - Show week numbers
610
+ */
611
+ showWeekNumbers: boolean;
612
+ /**
613
+ * - Show weekends
614
+ */
615
+ showWeekends: boolean;
616
+ /**
617
+ * - Fixed week count in month view
618
+ */
619
+ fixedWeekCount: boolean;
620
+ /**
621
+ * - IANA timezone
622
+ */
623
+ timeZone: string;
624
+ /**
625
+ * - Locale string
626
+ */
627
+ locale: string;
628
+ /**
629
+ * - Hour format
630
+ */
631
+ hourFormat: ('12h' | '24h');
632
+ /**
633
+ * - Business hours
634
+ */
635
+ businessHours: BusinessHours;
636
+ /**
637
+ * - Active filters
638
+ */
639
+ filters: FilterState;
640
+ /**
641
+ * - Dragging state
642
+ */
643
+ isDragging: boolean;
644
+ /**
645
+ * - Resizing state
646
+ */
647
+ isResizing: boolean;
648
+ /**
649
+ * - Creating state
650
+ */
651
+ isCreating: boolean;
652
+ /**
653
+ * - Loading state
654
+ */
655
+ isLoading: boolean;
656
+ /**
657
+ * - Loading message
658
+ */
659
+ loadingMessage: string;
660
+ /**
661
+ * - Error message
662
+ */
663
+ error: string | null;
664
+ /**
665
+ * - Custom metadata
666
+ */
667
+ metadata: Record<string, any>;
668
+ };
669
+ export type FilterState = {
670
+ /**
671
+ * - Search term
672
+ */
673
+ searchTerm: string;
674
+ /**
675
+ * - Selected categories
676
+ */
677
+ categories: string[];
678
+ /**
679
+ * - Show all-day events
680
+ */
681
+ showAllDay: boolean;
682
+ /**
683
+ * - Show timed events
684
+ */
685
+ showTimed: boolean;
686
+ };
687
+ export type EventStoreChange = {
688
+ /**
689
+ * - Type of change
690
+ */
691
+ type: ('add' | 'update' | 'remove' | 'clear');
692
+ /**
693
+ * - Affected event
694
+ */
695
+ event?: import('./events/Event.js').Event;
696
+ /**
697
+ * - Previous event state (for updates)
698
+ */
699
+ oldEvent?: import('./events/Event.js').Event;
700
+ /**
701
+ * - Previous events (for clear)
702
+ */
703
+ oldEvents?: import('./events/Event.js').Event[];
704
+ /**
705
+ * - Store version number
706
+ */
707
+ version: number;
708
+ };
709
+ export type QueryFilters = {
710
+ /**
711
+ * - Start date for range query
712
+ */
713
+ start?: Date;
714
+ /**
715
+ * - End date for range query
716
+ */
717
+ end?: Date;
718
+ /**
719
+ * - Specific date to query
720
+ */
721
+ date?: Date;
722
+ /**
723
+ * - Month (0-11)
724
+ */
725
+ month?: number;
726
+ /**
727
+ * - Year
728
+ */
729
+ year?: number;
730
+ /**
731
+ * - Filter by all-day events
732
+ */
733
+ allDay?: boolean;
734
+ /**
735
+ * - Filter by recurring events
736
+ */
737
+ recurring?: boolean;
738
+ /**
739
+ * - Filter by event status
740
+ */
741
+ status?: EventStatus;
742
+ /**
743
+ * - Filter by categories
744
+ */
745
+ categories?: string[];
746
+ /**
747
+ * - Whether to match all categories (AND) or any (OR)
748
+ */
749
+ matchAllCategories?: boolean;
750
+ /**
751
+ * - Filter by events with/without attendees
752
+ */
753
+ hasAttendees?: boolean;
754
+ /**
755
+ * - Filter by organizer email
756
+ */
757
+ organizerEmail?: string;
758
+ /**
759
+ * - Sort field
760
+ */
761
+ sort?: ('start' | 'end' | 'duration' | 'title');
762
+ };
763
+ export type EventOccurrence = {
764
+ /**
765
+ * - Occurrence start date
766
+ */
767
+ start: Date;
768
+ /**
769
+ * - Occurrence end date
770
+ */
771
+ end: Date;
772
+ /**
773
+ * - ID of the parent recurring event
774
+ */
775
+ recurringEventId: string;
776
+ };
777
+ export type CalendarPlugin = {
778
+ /**
779
+ * - Installation function
780
+ */
781
+ install: (calendar: import('./calendar/Calendar.js').Calendar) => void;
782
+ /**
783
+ * - Cleanup function
784
+ */
785
+ uninstall?: (calendar: import('./calendar/Calendar.js').Calendar) => void;
786
+ };
787
+ export type EventListener = (payload: any) => void;
788
+ export type UnsubscribeFn = () => void;
789
+ export type ConflictType = ('time' | 'attendee' | 'resource' | 'location');
790
+ export type ConflictSeverity = ('critical' | 'high' | 'medium' | 'low');
791
+ export type ConflictDetails = {
792
+ /**
793
+ * - Unique identifier for the conflict
794
+ */
795
+ id: string;
796
+ /**
797
+ * - Type of conflict
798
+ */
799
+ type: ConflictType;
800
+ /**
801
+ * - Severity level
802
+ */
803
+ severity: ConflictSeverity;
804
+ /**
805
+ * - ID of the event with conflict
806
+ */
807
+ eventId: string;
808
+ /**
809
+ * - ID of the conflicting event
810
+ */
811
+ conflictingEventId: string;
812
+ /**
813
+ * - Human-readable description
814
+ */
815
+ description: string;
816
+ /**
817
+ * - Start of overlap period
818
+ */
819
+ overlapStart?: Date;
820
+ /**
821
+ * - End of overlap period
822
+ */
823
+ overlapEnd?: Date;
824
+ /**
825
+ * - Duration of overlap in minutes
826
+ */
827
+ overlapMinutes?: number;
828
+ /**
829
+ * - Email addresses of conflicting attendees
830
+ */
831
+ conflictingAttendees?: string[];
832
+ /**
833
+ * - Resource that has conflict
834
+ */
835
+ conflictingResource?: string;
836
+ /**
837
+ * - Additional conflict information
838
+ */
839
+ metadata?: Record<string, any>;
840
+ };
841
+ export type ConflictCheckOptions = {
842
+ /**
843
+ * - Check for attendee conflicts
844
+ */
845
+ checkAttendees?: boolean;
846
+ /**
847
+ * - Check for resource conflicts
848
+ */
849
+ checkResources?: boolean;
850
+ /**
851
+ * - Check for location conflicts
852
+ */
853
+ checkLocation?: boolean;
854
+ /**
855
+ * - Ignore all-day events in conflict check
856
+ */
857
+ ignoreAllDay?: boolean;
858
+ /**
859
+ * - Event IDs to exclude from check
860
+ */
861
+ excludeEventIds?: string[];
862
+ /**
863
+ * - Event statuses to include
864
+ */
865
+ includeStatuses?: EventStatus[];
866
+ /**
867
+ * - Buffer time between events in minutes
868
+ */
869
+ bufferMinutes?: number;
870
+ };
871
+ export type ConflictSummary = {
872
+ /**
873
+ * - Whether any conflicts exist
874
+ */
875
+ hasConflicts: boolean;
876
+ /**
877
+ * - Total number of conflicts
878
+ */
879
+ totalConflicts: number;
880
+ /**
881
+ * - Array of conflict details
882
+ */
883
+ conflicts: ConflictDetails[];
884
+ /**
885
+ * - Count by type
886
+ */
887
+ conflictsByType: any;
888
+ /**
889
+ * - Count by severity
890
+ */
891
+ conflictsBySeverity: any;
892
+ /**
893
+ * - All event IDs involved
894
+ */
895
+ affectedEventIds: string[];
896
+ /**
897
+ * - All attendee emails involved
898
+ */
899
+ affectedAttendees: string[];
900
+ };
901
+ /**
902
+ * @typedef {Object} EventData
903
+ * @property {string} id - Unique identifier for the event
904
+ * @property {string} title - Event title
905
+ * @property {Date|string} start - Start date/time of the event
906
+ * @property {Date|string} [end] - End date/time of the event
907
+ * @property {boolean} [allDay=false] - Whether this is an all-day event
908
+ * @property {string} [description=''] - Event description
909
+ * @property {string} [location=''] - Event location
910
+ * @property {string} [color=null] - Event color (applies to all color properties if set)
911
+ * @property {string} [backgroundColor=null] - Background color for the event
912
+ * @property {string} [borderColor=null] - Border color for the event
913
+ * @property {string} [textColor=null] - Text color for the event
914
+ * @property {boolean} [recurring=false] - Whether this is a recurring event
915
+ * @property {RecurrenceRule|string} [recurrenceRule=null] - Recurrence rule (RRULE string or object)
916
+ * @property {string} [timeZone=null] - IANA timezone for the event
917
+ * @property {string} [endTimeZone=null] - IANA timezone for the event end (cross-timezone events)
918
+ * @property {RecurrenceRule|string} [recurrence=null] - Backward-compatible alias for recurrenceRule
919
+ * @property {string} [category=null] - Single category (alias for a one-element categories array)
920
+ * @property {EventStatus} [status='confirmed'] - Event status
921
+ * @property {EventVisibility} [visibility='public'] - Event visibility
922
+ * @property {Organizer} [organizer=null] - Event organizer
923
+ * @property {Attendee[]} [attendees=[]] - Event attendees
924
+ * @property {Reminder[]} [reminders=[]] - Event reminders
925
+ * @property {string[]} [categories=[]] - Event categories/tags
926
+ * @property {Attachment[]} [attachments=[]] - Event attachments
927
+ * @property {ConferenceData} [conferenceData=null] - Virtual meeting information
928
+ * @property {Object.<string, any>} [metadata={}] - Custom metadata for extensibility
929
+ */
930
+ /**
931
+ * @typedef {('confirmed'|'tentative'|'cancelled')} EventStatus
932
+ */
933
+ /**
934
+ * @typedef {('public'|'private'|'confidential')} EventVisibility
935
+ */
936
+ /**
937
+ * @typedef {('needs-action'|'accepted'|'declined'|'tentative'|'delegated')} AttendeeResponseStatus
938
+ */
939
+ /**
940
+ * @typedef {('required'|'optional'|'resource')} AttendeeRole
941
+ */
942
+ /**
943
+ * @typedef {('email'|'popup'|'sms')} ReminderMethod
944
+ */
945
+ /**
946
+ * @typedef {Object} Organizer
947
+ * @property {string} [id] - Unique identifier for the organizer
948
+ * @property {string} name - Organizer's name
949
+ * @property {string} email - Organizer's email
950
+ * @property {string} [phoneNumber] - Organizer's phone number
951
+ * @property {string} [photoUrl] - URL to organizer's photo
952
+ */
953
+ /**
954
+ * @typedef {Object} Attendee
955
+ * @property {string} [id] - Unique identifier for the attendee
956
+ * @property {string} name - Attendee's name
957
+ * @property {string} email - Attendee's email
958
+ * @property {string} [phoneNumber] - Attendee's phone number
959
+ * @property {string} [photoUrl] - URL to attendee's photo
960
+ * @property {AttendeeResponseStatus} [responseStatus='needs-action'] - Response status
961
+ * @property {AttendeeRole} [role='required'] - Attendee role
962
+ * @property {boolean} [optional=false] - Whether attendance is optional
963
+ * @property {boolean} [resource=false] - Whether attendee is a resource (room, equipment)
964
+ * @property {string} [comment] - Attendee's comment or note
965
+ * @property {Date} [responseTime] - When the attendee responded
966
+ */
967
+ /**
968
+ * @typedef {Object} Reminder
969
+ * @property {string} [id] - Unique identifier for the reminder
970
+ * @property {ReminderMethod} method - Reminder method
971
+ * @property {number} minutesBefore - Minutes before event to trigger reminder
972
+ * @property {string} [message] - Custom reminder message
973
+ * @property {boolean} [enabled=true] - Whether reminder is active
974
+ */
975
+ /**
976
+ * @typedef {Object} Attachment
977
+ * @property {string} [id] - Unique identifier for the attachment
978
+ * @property {string} fileName - File name
979
+ * @property {string} [fileUrl] - URL to the file
980
+ * @property {string} [mimeType] - MIME type of the file
981
+ * @property {number} [size] - File size in bytes
982
+ * @property {string} [iconUrl] - URL to file type icon
983
+ */
984
+ /**
985
+ * @typedef {Object} ConferenceData
986
+ * @property {string} [id] - Unique identifier for the conference
987
+ * @property {string} [solution] - Conference solution (e.g., 'zoom', 'teams', 'meet')
988
+ * @property {string} [url] - Conference URL
989
+ * @property {string} [phone] - Conference phone number
990
+ * @property {string} [accessCode] - Access code or meeting ID
991
+ * @property {string} [password] - Meeting password
992
+ * @property {string} [notes] - Additional conference notes
993
+ */
994
+ /**
995
+ * @typedef {Object} RecurrenceRule
996
+ * @property {('DAILY'|'WEEKLY'|'MONTHLY'|'YEARLY')} freq - Frequency of recurrence
997
+ * @property {number} [interval=1] - Interval between occurrences
998
+ * @property {number} [count=null] - Number of occurrences
999
+ * @property {Date} [until=null] - End date for recurrence
1000
+ * @property {string[]} [byDay=[]] - Days of week (MO, TU, WE, TH, FR, SA, SU)
1001
+ * @property {number[]} [byMonthDay=[]] - Days of month (1-31)
1002
+ * @property {number[]} [byMonth=[]] - Months (1-12)
1003
+ * @property {number[]} [bySetPos=[]] - Position in set (-1 for last)
1004
+ * @property {Date[]} [exceptions=[]] - Exception dates to exclude
1005
+ */
1006
+ /**
1007
+ * @typedef {Object} CalendarConfig
1008
+ * @property {ViewType} [view='month'] - Initial view type
1009
+ * @property {Date} [date=new Date()] - Initial date to display
1010
+ * @property {number} [weekStartsOn=0] - Day week starts on (0=Sunday, 6=Saturday)
1011
+ * @property {string} [locale='en-US'] - Locale for formatting
1012
+ * @property {string} [timeZone] - IANA timezone
1013
+ * @property {boolean} [showWeekNumbers=false] - Show week numbers
1014
+ * @property {boolean} [showWeekends=true] - Show weekend days
1015
+ * @property {boolean} [fixedWeekCount=true] - Always show 6 weeks in month view
1016
+ * @property {BusinessHours} [businessHours] - Business hours configuration
1017
+ * @property {EventData[]} [events=[]] - Initial events to load
1018
+ */
1019
+ /**
1020
+ * @typedef {('month'|'week'|'day'|'list')} ViewType
1021
+ */
1022
+ /**
1023
+ * @typedef {Object} BusinessHours
1024
+ * @property {string} start - Start time (HH:MM format)
1025
+ * @property {string} end - End time (HH:MM format)
1026
+ */
1027
+ /**
1028
+ * @typedef {Object} ViewData
1029
+ * @property {ViewType} type - Type of view
1030
+ * @property {Date} [startDate] - Start date of the view
1031
+ * @property {Date} [endDate] - End date of the view
1032
+ */
1033
+ /**
1034
+ * @typedef {Object} MonthViewData
1035
+ * @property {ViewType} type - Always 'month'
1036
+ * @property {number} year - Year being displayed
1037
+ * @property {number} month - Month being displayed (0-11)
1038
+ * @property {string} monthName - Localized month name
1039
+ * @property {WeekData[]} weeks - Array of weeks in the month
1040
+ * @property {Date} startDate - First date in the view
1041
+ * @property {Date} endDate - Last date in the view
1042
+ */
1043
+ /**
1044
+ * @typedef {Object} WeekData
1045
+ * @property {number} weekNumber - Week number in the year
1046
+ * @property {DayData[]} days - Array of days in the week
1047
+ */
1048
+ /**
1049
+ * @typedef {Object} DayData
1050
+ * @property {Date} date - Date object for the day
1051
+ * @property {number} dayOfMonth - Day of the month (1-31)
1052
+ * @property {boolean} isCurrentMonth - Whether this day is in the current month
1053
+ * @property {boolean} isToday - Whether this is today
1054
+ * @property {boolean} isWeekend - Whether this is a weekend day
1055
+ * @property {import('./events/Event.js').Event[]} events - Events for this day
1056
+ */
1057
+ /**
1058
+ * @typedef {Object} WeekViewData
1059
+ * @property {ViewType} type - Always 'week'
1060
+ * @property {number} weekNumber - Week number in the year
1061
+ * @property {Date} startDate - First day of the week
1062
+ * @property {Date} endDate - Last day of the week
1063
+ * @property {WeekDayData[]} days - Array of days with detailed event data
1064
+ */
1065
+ /**
1066
+ * @typedef {Object} WeekDayData
1067
+ * @property {Date} date - Date object for the day
1068
+ * @property {number} dayOfWeek - Day of week (0-6)
1069
+ * @property {string} dayName - Localized day name
1070
+ * @property {boolean} isToday - Whether this is today
1071
+ * @property {boolean} isWeekend - Whether this is a weekend day
1072
+ * @property {import('./events/Event.js').Event[]} events - All events for this day
1073
+ * @property {Array<import('./events/Event.js').Event[]>} overlapGroups - Groups of overlapping events
1074
+ * @property {(events: import('./events/Event.js').Event[]) => Map<string, EventPosition>} getEventPositions - Function to calculate positions
1075
+ */
1076
+ /**
1077
+ * @typedef {Object} EventPosition
1078
+ * @property {number} column - Column index for rendering
1079
+ * @property {number} totalColumns - Total number of columns
1080
+ */
1081
+ /**
1082
+ * @typedef {Object} DayViewData
1083
+ * @property {ViewType} type - Always 'day'
1084
+ * @property {Date} date - Date being displayed
1085
+ * @property {string} dayName - Localized day name
1086
+ * @property {boolean} isToday - Whether this is today
1087
+ * @property {import('./events/Event.js').Event[]} allDayEvents - All-day events
1088
+ * @property {HourSlot[]} hours - Hourly time slots
1089
+ */
1090
+ /**
1091
+ * @typedef {Object} HourSlot
1092
+ * @property {number} hour - Hour (0-23)
1093
+ * @property {string} time - Formatted time string
1094
+ * @property {import('./events/Event.js').Event[]} events - Events in this hour
1095
+ */
1096
+ /**
1097
+ * @typedef {Object} ListViewData
1098
+ * @property {ViewType} type - Always 'list'
1099
+ * @property {Date} startDate - Start of the list range
1100
+ * @property {Date} endDate - End of the list range
1101
+ * @property {ListDayData[]} days - Days with events
1102
+ * @property {number} totalEvents - Total event count
1103
+ */
1104
+ /**
1105
+ * @typedef {Object} ListDayData
1106
+ * @property {Date} date - Date object
1107
+ * @property {string} dayName - Localized day name
1108
+ * @property {boolean} isToday - Whether this is today
1109
+ * @property {import('./events/Event.js').Event[]} events - Events for this day
1110
+ */
1111
+ /**
1112
+ * @typedef {Object} CalendarState
1113
+ * @property {ViewType} view - Current view type
1114
+ * @property {Date} currentDate - Currently displayed date
1115
+ * @property {string|null} selectedEventId - Selected event ID
1116
+ * @property {Date|null} selectedDate - Selected date
1117
+ * @property {string|null} hoveredEventId - Hovered event ID
1118
+ * @property {Date|null} hoveredDate - Hovered date
1119
+ * @property {number} weekStartsOn - Week start day
1120
+ * @property {boolean} showWeekNumbers - Show week numbers
1121
+ * @property {boolean} showWeekends - Show weekends
1122
+ * @property {boolean} fixedWeekCount - Fixed week count in month view
1123
+ * @property {string} timeZone - IANA timezone
1124
+ * @property {string} locale - Locale string
1125
+ * @property {('12h'|'24h')} hourFormat - Hour format
1126
+ * @property {BusinessHours} businessHours - Business hours
1127
+ * @property {FilterState} filters - Active filters
1128
+ * @property {boolean} isDragging - Dragging state
1129
+ * @property {boolean} isResizing - Resizing state
1130
+ * @property {boolean} isCreating - Creating state
1131
+ * @property {boolean} isLoading - Loading state
1132
+ * @property {string} loadingMessage - Loading message
1133
+ * @property {string|null} error - Error message
1134
+ * @property {Object.<string, any>} metadata - Custom metadata
1135
+ */
1136
+ /**
1137
+ * @typedef {Object} FilterState
1138
+ * @property {string} searchTerm - Search term
1139
+ * @property {string[]} categories - Selected categories
1140
+ * @property {boolean} showAllDay - Show all-day events
1141
+ * @property {boolean} showTimed - Show timed events
1142
+ */
1143
+ /**
1144
+ * @typedef {Object} EventStoreChange
1145
+ * @property {('add'|'update'|'remove'|'clear')} type - Type of change
1146
+ * @property {import('./events/Event.js').Event} [event] - Affected event
1147
+ * @property {import('./events/Event.js').Event} [oldEvent] - Previous event state (for updates)
1148
+ * @property {import('./events/Event.js').Event[]} [oldEvents] - Previous events (for clear)
1149
+ * @property {number} version - Store version number
1150
+ */
1151
+ /**
1152
+ * @typedef {Object} QueryFilters
1153
+ * @property {Date} [start] - Start date for range query
1154
+ * @property {Date} [end] - End date for range query
1155
+ * @property {Date} [date] - Specific date to query
1156
+ * @property {number} [month] - Month (0-11)
1157
+ * @property {number} [year] - Year
1158
+ * @property {boolean} [allDay] - Filter by all-day events
1159
+ * @property {boolean} [recurring] - Filter by recurring events
1160
+ * @property {EventStatus} [status] - Filter by event status
1161
+ * @property {string[]} [categories] - Filter by categories
1162
+ * @property {boolean} [matchAllCategories=false] - Whether to match all categories (AND) or any (OR)
1163
+ * @property {boolean} [hasAttendees] - Filter by events with/without attendees
1164
+ * @property {string} [organizerEmail] - Filter by organizer email
1165
+ * @property {('start'|'end'|'duration'|'title')} [sort] - Sort field
1166
+ */
1167
+ /**
1168
+ * @typedef {Object} EventOccurrence
1169
+ * @property {Date} start - Occurrence start date
1170
+ * @property {Date} end - Occurrence end date
1171
+ * @property {string} recurringEventId - ID of the parent recurring event
1172
+ */
1173
+ /**
1174
+ * @typedef {Object} CalendarPlugin
1175
+ * @property {(calendar: import('./calendar/Calendar.js').Calendar) => void} install - Installation function
1176
+ * @property {(calendar: import('./calendar/Calendar.js').Calendar) => void} [uninstall] - Cleanup function
1177
+ */
1178
+ /**
1179
+ * @typedef {(payload: any) => void} EventListener
1180
+ */
1181
+ /**
1182
+ * @typedef {() => void} UnsubscribeFn
1183
+ */
1184
+ /**
1185
+ * @typedef {('time'|'attendee'|'resource'|'location')} ConflictType
1186
+ */
1187
+ /**
1188
+ * @typedef {('critical'|'high'|'medium'|'low')} ConflictSeverity
1189
+ */
1190
+ /**
1191
+ * @typedef {Object} ConflictDetails
1192
+ * @property {string} id - Unique identifier for the conflict
1193
+ * @property {ConflictType} type - Type of conflict
1194
+ * @property {ConflictSeverity} severity - Severity level
1195
+ * @property {string} eventId - ID of the event with conflict
1196
+ * @property {string} conflictingEventId - ID of the conflicting event
1197
+ * @property {string} description - Human-readable description
1198
+ * @property {Date} [overlapStart] - Start of overlap period
1199
+ * @property {Date} [overlapEnd] - End of overlap period
1200
+ * @property {number} [overlapMinutes] - Duration of overlap in minutes
1201
+ * @property {string[]} [conflictingAttendees] - Email addresses of conflicting attendees
1202
+ * @property {string} [conflictingResource] - Resource that has conflict
1203
+ * @property {Object.<string, any>} [metadata] - Additional conflict information
1204
+ */
1205
+ /**
1206
+ * @typedef {Object} ConflictCheckOptions
1207
+ * @property {boolean} [checkAttendees=true] - Check for attendee conflicts
1208
+ * @property {boolean} [checkResources=true] - Check for resource conflicts
1209
+ * @property {boolean} [checkLocation=true] - Check for location conflicts
1210
+ * @property {boolean} [ignoreAllDay=false] - Ignore all-day events in conflict check
1211
+ * @property {string[]} [excludeEventIds=[]] - Event IDs to exclude from check
1212
+ * @property {EventStatus[]} [includeStatuses=['confirmed', 'tentative']] - Event statuses to include
1213
+ * @property {number} [bufferMinutes=0] - Buffer time between events in minutes
1214
+ */
1215
+ /**
1216
+ * @typedef {Object} ConflictSummary
1217
+ * @property {boolean} hasConflicts - Whether any conflicts exist
1218
+ * @property {number} totalConflicts - Total number of conflicts
1219
+ * @property {ConflictDetails[]} conflicts - Array of conflict details
1220
+ * @property {Object.<ConflictType, number>} conflictsByType - Count by type
1221
+ * @property {Object.<ConflictSeverity, number>} conflictsBySeverity - Count by severity
1222
+ * @property {string[]} affectedEventIds - All event IDs involved
1223
+ * @property {string[]} affectedAttendees - All attendee emails involved
1224
+ */
1225
+ export {};