@fullcalendar/daygrid 7.0.0-beta.4 → 7.0.0-rc.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.
package/index.global.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- FullCalendar Day Grid Plugin v7.0.0-beta.4
2
+ FullCalendar Day Grid Plugin v7.0.0-rc.0
3
3
  Docs & License: https://fullcalendar.io/docs/month-view
4
4
  (c) 2024 Adam Shaw
5
5
  */
@@ -33,6 +33,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
33
33
  function buildDateRowConfig(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, // TODO: rename to dateHeaderFormat?
34
34
  context, colSpan) {
35
35
  return {
36
+ isDateRow: true,
36
37
  renderConfig: buildDateRenderConfig(context),
37
38
  dataConfigs: buildDateDataConfigs(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, context, colSpan)
38
39
  };
@@ -51,31 +52,38 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
51
52
  willUnmount: options.dayHeaderWillUnmount,
52
53
  };
53
54
  }
55
+ const dowDates = [];
56
+ for (let dow = 0; dow < 7; dow++) {
57
+ dowDates.push(internal$1.addDays(new Date(259200000), dow)); // start with Sun, 04 Jan 1970 00:00:00 GMT)
58
+ }
54
59
  /*
55
60
  For header cells: data
56
61
  */
57
62
  function buildDateDataConfigs(dates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, // TODO: rename to dateHeaderFormat?
58
- context, colSpan = 1, keyPrefix = '') {
63
+ context, colSpan = 1, keyPrefix = '', extraRenderProps = {}, // TODO
64
+ extraAttrs = {}, // TODO
65
+ className = '') {
59
66
  const { dateEnv, viewApi, options } = context;
60
67
  return datesRepDistinctDays
61
68
  ? dates.map((date) => {
62
69
  const dateMeta = internal$1.getDateMeta(date, todayRange, null, dateProfile);
63
70
  const text = dateEnv.format(date, dayHeaderFormat);
64
- const renderProps = Object.assign(Object.assign({}, dateMeta), { date: dateEnv.toDate(date), view: viewApi, text });
65
- const isNavLink = options.navLinks && !dateMeta.isDisabled;
71
+ const renderProps = Object.assign(Object.assign(Object.assign({}, dateMeta), { date: dateEnv.toDate(date), view: viewApi, text }), extraRenderProps);
72
+ const isNavLink = options.navLinks && !dateMeta.isDisabled &&
73
+ dates.length > 1; // don't show navlink to day if only one day
66
74
  const fullDateStr = internal$1.buildDateStr(context, date);
67
75
  // for DayGridHeaderCell
68
76
  return {
69
77
  key: keyPrefix + date.toUTCString(),
70
78
  renderProps,
71
- attrs: Object.assign(Object.assign({ 'aria-label': fullDateStr }, (dateMeta.isToday ? { 'aria-current': 'date' } : {})), { 'data-date': internal$1.formatDayString(date) }),
79
+ attrs: Object.assign(Object.assign(Object.assign({ 'aria-label': fullDateStr }, (dateMeta.isToday ? { 'aria-current': 'date' } : {})), { 'data-date': internal$1.formatDayString(date) }), extraAttrs),
72
80
  // for navlink
73
81
  innerAttrs: isNavLink
74
82
  ? internal$1.buildNavLinkAttrs(context, date, undefined, fullDateStr)
75
83
  : { 'aria-hidden': true },
76
84
  colSpan,
77
85
  isNavLink,
78
- className: internal$1.getDayClassName(dateMeta),
86
+ className: internal$1.joinClassNames(className, internal$1.getDayClassName(dateMeta)),
79
87
  };
80
88
  })
81
89
  : dates.map((date) => {
@@ -90,21 +98,19 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
90
98
  isOther: false,
91
99
  };
92
100
  const text = dateEnv.format(normDate, dayHeaderFormat);
93
- const renderProps = Object.assign(Object.assign({}, dayMeta), { date, view: viewApi, text });
101
+ const renderProps = Object.assign(Object.assign(Object.assign({}, dayMeta), { date: dowDates[dow], view: viewApi, text }), extraRenderProps);
94
102
  const fullWeekDayStr = dateEnv.format(normDate, WEEKDAY_FORMAT);
95
103
  // for DayGridHeaderCell
96
104
  return {
97
105
  key: keyPrefix + String(dow),
98
106
  renderProps,
99
- attrs: {
100
- 'aria-label': fullWeekDayStr,
101
- },
102
- // for navlink
107
+ attrs: Object.assign({ 'aria-label': fullWeekDayStr }, extraAttrs),
108
+ // NOT a navlink
103
109
  innerAttrs: {
104
110
  'aria-hidden': true, // label already on cell
105
111
  },
106
112
  colSpan,
107
- className: internal$1.getDayClassName(dayMeta),
113
+ className: internal$1.joinClassNames(className, internal$1.getDayClassName(dayMeta)),
108
114
  };
109
115
  });
110
116
  }
@@ -223,6 +229,8 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
223
229
  class DayGridCell extends internal$1.DateComponent {
224
230
  constructor() {
225
231
  super(...arguments);
232
+ // memo
233
+ this.getDateMeta = internal$1.memoize(internal$1.getDateMeta);
226
234
  // ref
227
235
  this.rootElRef = preact.createRef();
228
236
  this.handleBodyEl = (bodyEl) => {
@@ -256,8 +264,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
256
264
  // TODO: memoize this
257
265
  const isMonthStart = props.showDayNumber &&
258
266
  shouldDisplayMonthStart(props.date, props.dateProfile.currentRange, dateEnv);
259
- // TODO: memoize this
260
- const dateMeta = internal$1.getDateMeta(props.date, props.todayRange, null, props.dateProfile);
267
+ const dateMeta = this.getDateMeta(props.date, props.todayRange, null, props.dateProfile);
261
268
  const baseClassName = internal$1.joinClassNames('fc-daygrid-day', props.borderStart && 'fc-border-s', props.width != null ? '' : 'fc-liquid', 'fc-flex-col');
262
269
  if (dateMeta.isDisabled) {
263
270
  return (preact.createElement("div", { role: 'gridcell', "aria-disabled": true, className: internal$1.joinClassNames(baseClassName, 'fc-day-disabled'), style: {
@@ -506,10 +513,10 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
506
513
  // Hit Element
507
514
  // -------------------------------------------------------------------------------------------------
508
515
  function getRowEl(rootEl, row) {
509
- return rootEl.querySelectorAll(':scope > [role=row]')[row];
516
+ return rootEl.querySelectorAll('[role=row]')[row];
510
517
  }
511
518
  function getCellEl(rowEl, col) {
512
- return rowEl.querySelectorAll(':scope > [role=gridcell]')[col];
519
+ return rowEl.querySelectorAll('[role=gridcell]')[col];
513
520
  }
514
521
  // Header Formatting
515
522
  // -------------------------------------------------------------------------------------------------
@@ -607,13 +614,16 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
607
614
  return (preact.createElement("div", { role: props.role /* !!! */, "aria-label": props.role === 'row' // HACK
608
615
  ? fullWeekStr
609
616
  : undefined // can't have label on non-role div
610
- , className: internal$1.joinClassNames('fc-flex-row fc-rel', props.className), style: {
611
- minHeight: props.minHeight,
617
+ , className: internal$1.joinClassNames('fc-daygrid-row', props.forPrint && 'fc-daygrid-row-print', 'fc-flex-row fc-rel', props.className), style: {
618
+ 'flex-basis': props.basis,
612
619
  }, ref: this.handleRootEl },
620
+ props.showWeekNumbers && (preact.createElement(internal$1.WeekNumberContainer, { tag: 'div', attrs: Object.assign(Object.assign({}, (isNavLink
621
+ ? internal$1.buildNavLinkAttrs(context, weekDate, 'week', fullWeekStr, /* isTabbable = */ false)
622
+ : {})), { 'role': undefined, 'aria-hidden': true }), className: 'fc-daygrid-week-number', date: weekDate, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })),
613
623
  this.renderFillSegs(props.businessHourSegs, 'non-business'),
614
624
  this.renderFillSegs(props.bgEventSegs, 'bg-event'),
615
625
  this.renderFillSegs(highlightSegs, 'highlight'),
616
- preact.createElement("div", { className: 'fc-flex-row fc-liquid fc-rel' }, props.cells.map((cell, col) => {
626
+ props.cells.map((cell, col) => {
617
627
  const normalFgNodes = this.renderFgSegs(maxMainTop, renderableSegsByCol[col], segTops, props.todayRange, forcedInvisibleMap);
618
628
  return (preact.createElement(DayGridCell, { key: cell.key, dateProfile: props.dateProfile, todayRange: props.todayRange, date: cell.date, showDayNumber: props.showDayNumbers, isCompact: props.isCompact, isTall: props.isTall, borderStart: Boolean(col),
619
629
  // content
@@ -624,10 +634,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
624
634
  fgHeight: heightsByCol[col], width: props.colWidth,
625
635
  // refs
626
636
  headerHeightRef: headerHeightRefMap.createRef(cell.key), mainHeightRef: mainHeightRefMap.createRef(cell.key) }));
627
- })),
628
- props.showWeekNumbers && (preact.createElement(internal$1.WeekNumberContainer, { tag: 'div', attrs: Object.assign(Object.assign({}, (isNavLink
629
- ? internal$1.buildNavLinkAttrs(context, weekDate, 'week', fullWeekStr, /* isTabbable = */ false)
630
- : {})), { 'role': undefined, 'aria-hidden': true }), className: 'fc-daygrid-week-number', date: weekDate, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })),
637
+ }),
631
638
  this.renderFgSegs(maxMainTop, mirrorSegs, segTops, props.todayRange, {}, // forcedInvisibleMap
632
639
  Boolean(props.eventDrag), Boolean(props.eventResize), false)));
633
640
  }
@@ -787,30 +794,22 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
787
794
  let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
788
795
  let isHeightAuto = internal$1.getIsHeightAuto(options);
789
796
  let rowHeightsRedistribute = !props.forPrint && !isHeightAuto;
790
- let [rowMinHeight, isCompact] = computeRowHeight(props.visibleWidth, rowCnt, isHeightAuto, props.forPrint, options);
797
+ let rowBasis = computeRowBasis(props.visibleWidth, rowCnt, isHeightAuto, options);
798
+ let isCompact = computeRowIsCompact(props.visibleWidth, options);
791
799
  return (preact.createElement("div", { role: 'rowgroup', className: internal$1.joinClassNames(
792
800
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
793
801
  // https://stackoverflow.com/a/60256345
794
802
  !props.forPrint && 'fc-flex-col', props.className), style: { width: props.width }, ref: this.handleRootEl }, props.cellRows.map((cells, row) => (preact.createElement(DayGridRow, { key: cells[0].key, role: 'row', dateProfile: props.dateProfile, todayRange: props.todayRange, cells: cells, showDayNumbers: rowCnt > 1, showWeekNumbers: rowCnt > 1 && options.weekNumbers, forPrint: props.forPrint, isCompact: isCompact,
795
803
  // if not auto-height, distribute height of container somewhat evently to rows
796
- // (treat all as zero, distribute height, then ensure min-heights -- the inner content height)
797
- className: internal$1.joinClassNames(rowHeightsRedistribute && 'fc-grow fc-basis0', rowCnt > 1 && 'fc-break-inside-avoid', // don't avoid breaks for single tall row
804
+ className: internal$1.joinClassNames(rowHeightsRedistribute && 'fc-grow', rowCnt > 1 && 'fc-break-inside-avoid', // don't avoid breaks for single tall row
798
805
  row < rowCnt - 1 && 'fc-border-b'),
799
806
  // content
800
807
  fgEventSegs: fgEventSegsByRow[row], bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* HACK */, businessHourSegs: businessHourSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventSelection: props.eventSelection, eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows,
801
808
  // dimensions
802
- colWidth: props.colWidth, minHeight: rowMinHeight,
809
+ colWidth: props.colWidth, basis: rowBasis,
803
810
  // refs
804
811
  heightRef: rowHeightRefMap.createRef(cells[0].key) })))));
805
812
  }
806
- componentDidMount() {
807
- this.disconnectWidth = internal$1.watchWidth(this.rootEl, (width) => {
808
- this.setState({ width });
809
- });
810
- }
811
- componentWillUnmount() {
812
- this.disconnectWidth();
813
- }
814
813
  // Hit System
815
814
  // -----------------------------------------------------------------------------------------------
816
815
  queryHit(positionLeft, positionTop, elWidth) {
@@ -827,8 +826,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
827
826
  start: cellStartDate,
828
827
  end: cellEndDate,
829
828
  }, allDay: true }, cell.dateSpanProps),
830
- // HACK. TODO: This is expensive to do every hit-query
831
- dayEl: getCellEl(getRowEl(this.rootEl, row), col),
829
+ getDayEl: () => getCellEl(getRowEl(this.rootEl, row), col),
832
830
  rect: {
833
831
  left,
834
832
  right,
@@ -844,27 +842,35 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
844
842
  function isSegAllDay(seg) {
845
843
  return seg.eventRange.def.allDay;
846
844
  }
847
- function computeRowHeight(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
848
- rowCnt, isHeightAuto, forPrint, options) {
845
+ /*
846
+ Amount of height a row should consume prior to expanding
847
+ We don't want to use min-height with flexbox because we leverage min-height:auto,
848
+ which yields value based on natural height of events
849
+ */
850
+ function computeRowBasis(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
851
+ rowCnt, isHeightAuto, options) {
849
852
  if (visibleWidth != null) {
850
853
  // ensure a consistent row min-height modelled after a month with 6 rows respecting aspectRatio
851
854
  // will result in same minHeight regardless of weekends, dayMinWidth, height:auto
852
- const rowMinHeight = visibleWidth / options.aspectRatio / 6;
853
- return [
854
- forPrint
855
- // special-case for print, which condenses whole-page width without notifying
856
- // this is value that looks natural on paper for portrait/landscape
857
- ? '6em'
858
- // don't give minHeight when single-month non-auto-height
859
- // TODO: better way to detect this with DateProfile?
860
- : (rowCnt > 6 || isHeightAuto)
861
- ? rowMinHeight
862
- : undefined,
863
- // isCompact?: just before most lone +more links hit bottom of cell
864
- rowMinHeight < 70,
865
- ];
855
+ const rowBasis = visibleWidth / options.aspectRatio / 6;
856
+ // don't give minHeight when single-month non-auto-height
857
+ // TODO: better way to detect this with DateProfile?
858
+ return (rowCnt > 6 || isHeightAuto) ? rowBasis : 0;
866
859
  }
867
- return [undefined, false];
860
+ return 0;
861
+ }
862
+ /*
863
+ Infers cell height based on overall width
864
+ */
865
+ function computeRowIsCompact(visibleWidth, // should INCLUDE any scrollbar width to avoid oscillation
866
+ options) {
867
+ if (visibleWidth != null) {
868
+ // ensure a consistent row min-height modelled after a month with 6 rows respecting aspectRatio
869
+ // will result in same minHeight regardless of weekends, dayMinWidth, height:auto
870
+ const rowBasis = visibleWidth / options.aspectRatio / 6;
871
+ return rowBasis < 70;
872
+ }
873
+ return false;
868
874
  }
869
875
 
870
876
  class DayGridHeaderCell extends internal$1.BaseComponent {
@@ -924,6 +930,9 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
924
930
  const { props } = this;
925
931
  return (preact.createElement("div", { role: props.role /* !!! */, "aria-rowindex": props.rowIndex != null ? 1 + props.rowIndex : undefined, className: internal$1.joinClassNames('fc-flex-row fc-content-box', props.className), style: { height: props.height } }, props.dataConfigs.map((dataConfig, cellI) => (preact.createElement(DayGridHeaderCell, { key: dataConfig.key, renderConfig: props.renderConfig, dataConfig: dataConfig, isSticky: props.isSticky, borderStart: Boolean(cellI), colWidth: props.colWidth, innerHeightRef: props.innerHeightRef })))));
926
932
  }
933
+ componentWillUnmount() {
934
+ internal$1.setRef(this.props.innerHeightRef, null);
935
+ }
927
936
  }
928
937
 
929
938
  /*
@@ -944,37 +953,39 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
944
953
  this.handleScroller = (scroller) => {
945
954
  internal$1.setRef(this.props.scrollerRef, scroller);
946
955
  };
956
+ this.handleTotalWidth = (totalWidth) => {
957
+ this.setState({ totalWidth });
958
+ };
947
959
  this.handleClientWidth = (clientWidth) => {
948
960
  this.setState({ clientWidth });
949
961
  };
950
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
951
- this.setState({ endScrollbarWidth });
952
- };
953
962
  }
954
963
  render() {
955
964
  const { props, state, context } = this;
956
965
  const { options } = context;
966
+ const { totalWidth, clientWidth } = state;
967
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
968
+ ? totalWidth - clientWidth
969
+ : undefined;
957
970
  const verticalScrollbars = !props.forPrint && !internal$1.getIsHeightAuto(options);
958
971
  const stickyHeaderDates = !props.forPrint && internal$1.getStickyHeaderDates(options);
959
972
  return (preact.createElement(preact.Fragment, null,
960
973
  options.dayHeaders && (preact.createElement("div", { className: internal$1.joinClassNames(props.forPrint ? 'fc-print-header' : 'fc-flex-row', // col for print, row for screen
961
- 'fc-border-b') },
962
- preact.createElement(DayGridHeader, { headerTiers: props.headerTiers, className: internal$1.joinClassNames('fc-daygrid-header', stickyHeaderDates && 'fc-table-header-sticky') }),
963
- Boolean(state.endScrollbarWidth) && (preact.createElement("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } })))),
964
- preact.createElement(internal$1.Scroller, { vertical: verticalScrollbars, clientWidthRef: this.handleClientWidth, endScrollbarWidthRef: this.handleEndScrollbarWidth, className: internal$1.joinClassNames('fc-daygrid-body',
974
+ stickyHeaderDates && 'fc-table-header-sticky', 'fc-border-b') },
975
+ preact.createElement(DayGridHeader, { headerTiers: props.headerTiers, className: 'fc-daygrid-header' }),
976
+ Boolean(endScrollbarWidth) && (preact.createElement("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } })))),
977
+ preact.createElement(internal$1.Scroller, { vertical: verticalScrollbars, className: internal$1.joinClassNames('fc-daygrid-body',
965
978
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
966
979
  // https://stackoverflow.com/a/60256345
967
- !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.handleScroller },
980
+ !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.handleScroller, clientWidthRef: this.handleClientWidth },
968
981
  preact.createElement(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: props.cellRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-grow', dayMaxEvents: props.forPrint ? undefined : options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows,
969
982
  // content
970
983
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventDrag: props.eventDrag, eventResize: props.eventResize, eventSelection: props.eventSelection,
971
984
  // dimensions
972
- visibleWidth: // TODO: DRY
973
- state.clientWidth != null && state.endScrollbarWidth != null
974
- ? state.clientWidth + state.endScrollbarWidth
975
- : undefined,
985
+ visibleWidth: totalWidth,
976
986
  // refs
977
- rowHeightRefMap: props.rowHeightRefMap }))));
987
+ rowHeightRefMap: props.rowHeightRefMap })),
988
+ preact.createElement(internal$1.Ruler, { widthRef: this.handleTotalWidth })));
978
989
  }
979
990
  }
980
991
 
@@ -986,43 +997,45 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
986
997
  this.footerScrollerRef = preact.createRef();
987
998
  // Sizing
988
999
  // -----------------------------------------------------------------------------------------------
1000
+ this.handleTotalWidth = (totalWidth) => {
1001
+ this.setState({ totalWidth });
1002
+ };
989
1003
  this.handleClientWidth = (clientWidth) => {
990
1004
  this.setState({ clientWidth });
991
1005
  };
992
- this.handleEndScrollbarWidth = (endScrollbarWidth) => {
993
- this.setState({ endScrollbarWidth });
994
- };
995
1006
  }
996
1007
  render() {
997
1008
  const { props, state, context } = this;
998
1009
  const { options } = context;
1010
+ const { totalWidth, clientWidth } = state;
1011
+ const endScrollbarWidth = (totalWidth != null && clientWidth != null)
1012
+ ? totalWidth - clientWidth
1013
+ : undefined;
999
1014
  const verticalScrollbars = !props.forPrint && !internal$1.getIsHeightAuto(options);
1000
1015
  const stickyHeaderDates = !props.forPrint && internal$1.getStickyHeaderDates(options);
1001
1016
  const stickyFooterScrollbar = !props.forPrint && internal$1.getStickyFooterScrollbar(options);
1002
1017
  const colCnt = props.cellRows[0].length;
1003
- const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, state.clientWidth);
1018
+ const [canvasWidth, colWidth] = computeColWidth(colCnt, props.dayMinWidth, clientWidth);
1004
1019
  return (preact.createElement(preact.Fragment, null,
1005
- options.dayHeaders && (preact.createElement("div", { className: 'fc-print-header' },
1006
- preact.createElement(internal$1.Scroller, { horizontal: true, hideScrollbars: true, className: internal$1.joinClassNames('fc-daygrid-header fc-flex-row fc-border-b', stickyHeaderDates && 'fc-table-header-sticky'), ref: this.headerScrollerRef },
1020
+ options.dayHeaders && (preact.createElement("div", { className: internal$1.joinClassNames('fc-print-header', stickyHeaderDates && 'fc-table-header-sticky') },
1021
+ preact.createElement(internal$1.Scroller, { horizontal: true, hideScrollbars: true, className: 'fc-daygrid-header fc-flex-row fc-border-b', ref: this.headerScrollerRef },
1007
1022
  preact.createElement(DayGridHeader, { headerTiers: props.headerTiers, colWidth: colWidth, width: canvasWidth }),
1008
- Boolean(state.endScrollbarWidth) && (preact.createElement("div", { className: 'fc-border-s fc-filler', style: { minWidth: state.endScrollbarWidth } }))))),
1023
+ Boolean(endScrollbarWidth) && (preact.createElement("div", { className: 'fc-border-s fc-filler', style: { minWidth: endScrollbarWidth } }))))),
1009
1024
  preact.createElement(internal$1.Scroller, { vertical: verticalScrollbars, horizontal: true, hideScrollbars: stickyFooterScrollbar ||
1010
1025
  props.forPrint // prevents blank space in print-view on Safari
1011
1026
  , className: internal$1.joinClassNames('fc-daygrid-body',
1012
1027
  // HACK for Safari. Can't do break-inside:avoid with flexbox items, likely b/c it's not standard:
1013
1028
  // https://stackoverflow.com/a/60256345
1014
- !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.bodyScrollerRef, clientWidthRef: this.handleClientWidth, endScrollbarWidthRef: this.handleEndScrollbarWidth },
1029
+ !props.forPrint && 'fc-flex-col', verticalScrollbars && 'fc-liquid'), ref: this.bodyScrollerRef, clientWidthRef: this.handleClientWidth },
1015
1030
  preact.createElement(DayGridRows, { dateProfile: props.dateProfile, todayRange: props.todayRange, cellRows: props.cellRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed, className: 'fc-grow', dayMaxEvents: props.forPrint ? undefined : options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows,
1016
1031
  // content
1017
1032
  fgEventSegs: props.fgEventSegs, bgEventSegs: props.bgEventSegs, businessHourSegs: props.businessHourSegs, dateSelectionSegs: props.dateSelectionSegs, eventDrag: props.eventDrag, eventResize: props.eventResize, eventSelection: props.eventSelection,
1018
1033
  // dimensions
1019
- colWidth: colWidth, width: canvasWidth, visibleWidth: // TODO: DRY
1020
- state.clientWidth != null && state.endScrollbarWidth != null
1021
- ? state.clientWidth + state.endScrollbarWidth
1022
- : undefined,
1034
+ colWidth: colWidth, width: canvasWidth, visibleWidth: totalWidth,
1023
1035
  // refs
1024
1036
  rowHeightRefMap: props.rowHeightRefMap })),
1025
- Boolean(stickyFooterScrollbar) && (preact.createElement(internal$1.StickyFooterScrollbar, { canvasWidth: canvasWidth, scrollerRef: this.footerScrollerRef }))));
1037
+ Boolean(stickyFooterScrollbar) && (preact.createElement(internal$1.FooterScrollbar, { isSticky: true, canvasWidth: canvasWidth, scrollerRef: this.footerScrollerRef })),
1038
+ preact.createElement(internal$1.Ruler, { widthRef: this.handleTotalWidth })));
1026
1039
  }
1027
1040
  // Lifecycle
1028
1041
  // -----------------------------------------------------------------------------------------------
@@ -1077,7 +1090,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
1077
1090
  }
1078
1091
  }
1079
1092
  };
1080
- this.handleScrollEnd = ({ isUser }) => {
1093
+ this.handleScrollEnd = (isUser) => {
1081
1094
  if (isUser) {
1082
1095
  this.scrollDate = null;
1083
1096
  }
@@ -1185,7 +1198,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
1185
1198
  return { start, end };
1186
1199
  }
1187
1200
 
1188
- var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-media-print .fc-daygrid-event{overflow:hidden!important;white-space:nowrap!important}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative;z-index:2}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}";
1201
+ var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-row-print{min-height:6em}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:1}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-media-print .fc-daygrid-dot-event .fc-event-time,.fc-media-print .fc-daygrid-dot-event .fc-event-title{overflow:hidden!important;white-space:nowrap!important}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}";
1189
1202
  internal$1.injectStyles(css_248z);
1190
1203
 
1191
1204
  var plugin = core.createPlugin({
@@ -1229,7 +1242,8 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
1229
1242
  buildDateDataConfigs: buildDateDataConfigs,
1230
1243
  createDayHeaderFormatter: createDayHeaderFormatter,
1231
1244
  DayGridLayout: DayGridLayout,
1232
- computeRowHeight: computeRowHeight,
1245
+ computeRowBasis: computeRowBasis,
1246
+ computeRowIsCompact: computeRowIsCompact,
1233
1247
  DayGridRow: DayGridRow,
1234
1248
  DayGridRows: DayGridRows,
1235
1249
  buildDayTableModel: buildDayTableModel,
@@ -1,6 +1,6 @@
1
1
  /*!
2
- FullCalendar Day Grid Plugin v7.0.0-beta.4
2
+ FullCalendar Day Grid Plugin v7.0.0-rc.0
3
3
  Docs & License: https://fullcalendar.io/docs/month-view
4
4
  (c) 2024 Adam Shaw
5
5
  */
6
- FullCalendar.DayGrid=function(e,t,n,r){"use strict";class i extends n.Slicer{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}const a=n.createFormatter({weekday:"long"}),s=new Date(2592e5);function o(...e){return[l(...e)]}function l(e,t,n,r,i,a,s){return{renderConfig:d(a),dataConfigs:c(e,t,n,r,i,a,s)}}function d(e){const{options:t}=e;return{generatorName:"dayHeaderContent",customGenerator:t.dayHeaderContent,classNameGenerator:t.dayHeaderClassNames,didMount:t.dayHeaderDidMount,willUnmount:t.dayHeaderWillUnmount}}function c(e,t,r,i,o,l,d=1,c=""){const{dateEnv:g,viewApi:f,options:h}=l;return t?e.map(e=>{const t=n.getDateMeta(e,i,null,r),a=g.format(e,o),s=Object.assign(Object.assign({},t),{date:g.toDate(e),view:f,text:a}),u=h.navLinks&&!t.isDisabled,m=n.buildDateStr(l,e);return{key:c+e.toUTCString(),renderProps:s,attrs:Object.assign(Object.assign({"aria-label":m},t.isToday?{"aria-current":"date"}:{}),{"data-date":n.formatDayString(e)}),innerAttrs:u?n.buildNavLinkAttrs(l,e,void 0,m):{"aria-hidden":!0},colSpan:d,isNavLink:u,className:n.getDayClassName(t)}}):e.map(e=>{const t=e.getUTCDay(),r=n.addDays(s,t),i={dow:t,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},l=g.format(r,o),h=Object.assign(Object.assign({},i),{date:e,view:f,text:l}),u=g.format(r,a);return{key:c+String(t),renderProps:h,attrs:{"aria-label":u},innerAttrs:{"aria-hidden":!0},colSpan:d,className:n.getDayClassName(i)}})}function g(e){return n.getEventKey(e)+":"+e.start+(e.standinFor?":standin":e.isSlice?":slice":"")}function f(e,t){const n=[];for(let e=0;e<t;e++)n[e]=[];for(const t of e)n[t.row].push(t);return n}function h(e,t){const n=[];if(e){for(let r=0;r<t;r++)n[r]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(const t of e.segs)n[t.row].segs.push(t)}else for(let e=0;e<t;e++)n[e]=null;return n}function u(e,t){return Object.assign(Object.assign({},e),{start:t,end:t+1,isStart:e.isStart&&e.start===t,isEnd:e.isEnd&&e.end-1===t,standinFor:e})}const m=n.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function p(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.end-e.start==1&&e.isStart&&e.isEnd}class v extends n.BaseComponent{render(){let{props:e}=this;return r.createElement(n.StandardEvent,Object.assign({},e,{className:"fc-daygrid-block-event fc-daygrid-event fc-h-event",defaultTimeFormat:m,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.eventRange.def.allDay}))}}class y extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{eventRange:a}=e,s=i.eventTimeFormat||m,o=n.buildEventRangeTimeText(s,a,void 0,void 0,e.isStart,e.isEnd,t,!0,e.defaultDisplayEventEnd),[l,d]=n.getEventTagAndAttrs(a,t);return r.createElement(n.EventContainer,Object.assign({},e,{tag:l,attrs:d,className:"fc-daygrid-dot-event fc-daygrid-event",defaultGenerator:R,timeText:o,isResizing:!1,isDateSelecting:!1}))}}function R(e){return r.createElement(r.Fragment,null,r.createElement("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&r.createElement("div",{className:"fc-event-time"},e.timeText),r.createElement("div",{className:"fc-event-title"},e.event.title||r.createElement(r.Fragment,null," ")))}class S extends n.BaseComponent{render(){let{props:e}=this;return r.createElement(n.MoreLinkContainer,{className:n.joinClassNames("fc-daygrid-more-link",e.isBlock?"fc-daygrid-more-link-block":"fc-daygrid-more-link-button"),dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,segs:e.segs,hiddenSegs:e.hiddenSegs,alignElRef:e.alignElRef,alignParentTop:e.alignParentTop,dateSpanProps:e.dateSpanProps,popoverContent:()=>{let t=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return r.createElement(r.Fragment,null,e.segs.map(i=>{let{eventRange:a}=i,{instanceId:s}=a.instance;return r.createElement("div",{key:s,style:{visibility:t[s]?"hidden":""}},p(i)?r.createElement(y,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},n.getEventRangeMeta(a,e.todayRange))):r.createElement(v,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},n.getEventRangeMeta(a,e.todayRange))))}))}})}}class b extends n.DateComponent{constructor(){super(...arguments),this.rootElRef=r.createRef(),this.handleBodyEl=e=>{this.disconnectBodyHeight&&(this.disconnectBodyHeight(),this.disconnectBodyHeight=void 0,n.setRef(this.props.headerHeightRef,null),n.setRef(this.props.mainHeightRef,null)),e&&(this.disconnectBodyHeight=n.watchSize(e,(t,r)=>{const{props:i}=this,a=e.getBoundingClientRect(),s=this.rootElRef.current.getBoundingClientRect(),o=a.top-s.top;n.isDimsEqual(this.headerHeight,o)||(this.headerHeight=o,n.setRef(i.headerHeightRef,o)),i.fgLiquidHeight&&n.setRef(i.mainHeightRef,r)}))}}render(){let{props:e,context:t}=this,{options:i,dateEnv:a}=t;const s=e.showDayNumber&&function(e,t,r){const{start:i,end:a}=t,s=n.addMs(a,-1),o=r.getYear(i),l=r.getMonth(i),d=r.getYear(s),c=r.getMonth(s);return!(o===d&&l===c)&&Boolean(e.valueOf()===i.valueOf()||1===r.getDay(e)&&e.valueOf()<a.valueOf())}(e.date,e.dateProfile.currentRange,a),o=n.getDateMeta(e.date,e.todayRange,null,e.dateProfile),l=n.joinClassNames("fc-daygrid-day",e.borderStart&&"fc-border-s",null!=e.width?"":"fc-liquid","fc-flex-col");if(o.isDisabled)return r.createElement("div",{role:"gridcell","aria-disabled":!0,className:n.joinClassNames(l,"fc-day-disabled"),style:{width:e.width}});const d=e.showDayNumber||n.hasCustomDayCellContent(i),c=i.navLinks,g=n.buildDateStr(t,e.date);return r.createElement(n.DayCellContainer,{tag:"div",className:n.joinClassNames(l,e.className),attrs:Object.assign(Object.assign({},e.attrs),{role:"gridcell","aria-label":g}),style:{width:e.width},elRef:this.rootElRef,renderProps:e.renderProps,defaultGenerator:E,date:e.date,dateMeta:o,showDayNumber:e.showDayNumber,isMonthStart:s},i=>r.createElement(r.Fragment,null,d&&r.createElement("div",{className:"fc-daygrid-day-header"},r.createElement(i,{tag:"div",attrs:c?n.buildNavLinkAttrs(t,e.date,void 0,g):{"aria-hidden":!0},className:n.joinClassNames("fc-daygrid-day-number",s&&"fc-daygrid-month-start")})),r.createElement("div",{className:n.joinClassNames("fc-daygrid-day-body",e.isTall&&"fc-daygrid-day-body-tall",e.fgLiquidHeight?"fc-liquid":"fc-grow"),ref:this.handleBodyEl},r.createElement("div",{className:"fc-daygrid-day-events",style:{height:e.fgHeight}},e.fg),r.createElement(S,{isBlock:e.isCompact,allDayDate:e.date,segs:e.segs,hiddenSegs:e.hiddenSegs,alignElRef:this.rootElRef,alignParentTop:e.showDayNumber?"[role=row]":".fc-view",dateSpanProps:e.dateSpanProps,dateProfile:e.dateProfile,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange}))))}}function E(e){return e.dayNumberText||r.createElement(r.Fragment,null," ")}function w(e,t){let n=e.get(t.eventRange);n||e.set(t.eventRange,n=[]),n.push(t)}function D(e,t){let r=new n.DaySeriesModel(e.renderRange,t);return new n.DayTableModel(r,/year|month|week/.test(e.currentRangeUnit))}function x(e,t,n){if(null==n)return[void 0,void 0];return n/e<t?[t*e,t]:[n,void 0]}function C(e,t,r,i){let a,s;if(null!=t)a=e.start*t,s=(r-e.end)*t;else{const t=1/r;a=n.fracToCssDim(e.start*t),s=n.fracToCssDim(1-e.end*t)}return i?{right:a,left:s}:{left:a,right:s}}function H(e,t,n,r,i){const a=null!=n?n:t/r,s=Math.floor(e/a),o=s*a;return{col:i?r-s-1:s,left:o,right:o+a}}function N(e,t){return e.querySelectorAll(":scope > [role=row]")[t]}function k(e,t){return e.querySelectorAll(":scope > [role=gridcell]")[t]}function M(e,t,r){return e||function(e,t){if(!e||t>10)return n.createFormatter({weekday:"short"});if(t>1)return n.createFormatter({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0});return n.createFormatter({weekday:"long"})}(t,r)}class P extends r.Component{constructor(){super(...arguments),this.rootElRef=r.createRef()}render(){const{props:e}=this;return r.createElement("div",{className:n.joinClassNames(e.className,"fc-abs"),style:e.style,ref:this.rootElRef},e.children)}componentDidMount(){const e=this.rootElRef.current;this.disconnectHeight=n.watchHeight(e,e=>{n.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),n.setRef(this.props.heightRef,null)}}const W=n.createFormatter({week:"narrow"});class z extends n.BaseComponent{constructor(){super(...arguments),this.headerHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleSegPositioning)}),this.mainHeightRefMap=new n.RefMap(()=>{(!0===this.props.dayMaxEvents||!0===this.props.dayMaxEventRows)&&n.afterSize(this.handleSegPositioning)}),this.segHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleSegPositioning)}),this.handleRootEl=e=>{this.rootEl=e,n.setRef(this.props.rootElRef,e)},this.handleSegPositioning=()=>{this.forceUpdate()}}render(){const{props:e,context:t,headerHeightRefMap:i,mainHeightRefMap:a}=this,{cells:s}=e,{options:o}=t,l=e.cells[0].date,d=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,c=n.sortEventSegs(e.fgEventSegs,o.eventOrder),[f,h]=this.computeFgDims(),[m,p,v,y,R]=function(e,t,r,i,a,s=!0,o,l){let d,c,f;!0===o||!0===l?(d=i,f=!0):"number"==typeof o?(c=o,f=!1):"number"==typeof l&&(c=l,f=!0);const h=new Map,m=new Map,p=new Map,v=new Map;let y=new n.SegHierarchy(e,e=>t.get(g(e)),a,d,c,f,s);y.traverseSegs((e,t)=>{w(h,e),p.set(g(e),t),e.isSlice&&v.set(e.eventRange,!0)});for(const e of y.hiddenSegs)w(m,e);if(v.size){p.clear(),y=new n.SegHierarchy(function(e,t){const n=[];for(const r of e)n.push(...t.get(r.eventRange)||[]);return n}(e,h),e=>t.get(g(e)),a,d,c,f),y.traverseSegs((e,t)=>{p.set(g(e),t)});for(const e of y.hiddenSegs)w(m,e)}const R=[],S=[],b=[],E=[];for(let e=0;e<r.length;e++)R.push([]),S.push([]),b.push([]),E.push(0);for(const n of e){const{eventRange:e}=n,r=h.get(e)||[],i=m.get(e)||[],a=v.get(e)||!1;if(b[n.start].push(n),a)for(const e of r)b[e.start].push(e);for(const e of r){for(let t=e.start;t<e.end;t++){const n=u(e,t);R[t].push(n)}const n=g(e),r=p.get(n);if(null!=r){const i=t.get(n);for(let t=e.start;t<e.end;t++)E[t]=Math.max(E[t],r+i)}}for(const e of i)for(let t=e.start;t<e.end;t++){const n=u(e,t);R[t].push(n),S[t].push(n)}}return[R,S,b,p,E]}(c,this.segHeightRefMap.current,s,d?h:void 0,o.eventOrderStrict,o.eventSlicing,e.dayMaxEvents,e.dayMaxEventRows),S=[];if(null!=f){let e=0;for(const t of s){const n=i.current.get(t.key),r=f-n;S.push(R[e++]+r)}}const E=this.getHighlightSegs(),D=this.getMirrorSegs(),x=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{},C=o.navLinks,H=n.buildDateStr(t,l,"week");return r.createElement("div",{role:e.role,"aria-label":"row"===e.role?H:void 0,className:n.joinClassNames("fc-flex-row fc-rel",e.className),style:{minHeight:e.minHeight},ref:this.handleRootEl},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(E,"highlight"),r.createElement("div",{className:"fc-flex-row fc-liquid fc-rel"},e.cells.map((t,n)=>{const s=this.renderFgSegs(f,v[n],y,e.todayRange,x);return r.createElement(b,{key:t.key,dateProfile:e.dateProfile,todayRange:e.todayRange,date:t.date,showDayNumber:e.showDayNumbers,isCompact:e.isCompact,isTall:e.isTall,borderStart:Boolean(n),segs:m[n],hiddenSegs:p[n],fgLiquidHeight:d,fg:r.createElement(r.Fragment,null,s),eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,renderProps:t.renderProps,dateSpanProps:t.dateSpanProps,attrs:t.attrs,className:t.className,fgHeight:S[n],width:e.colWidth,headerHeightRef:i.createRef(t.key),mainHeightRef:a.createRef(t.key)})})),e.showWeekNumbers&&r.createElement(n.WeekNumberContainer,{tag:"div",attrs:Object.assign(Object.assign({},C?n.buildNavLinkAttrs(t,l,"week",H,!1):{}),{role:void 0,"aria-hidden":!0}),className:"fc-daygrid-week-number",date:l,defaultFormat:W}),this.renderFgSegs(f,D,y,e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1))}renderFgSegs(e,t,i,a,s,o,l,d){var c;const{props:f,context:h,segHeightRefMap:u}=this,{isRtl:m}=h,{colWidth:R,eventSelection:S}=f,b=f.cells.length,E=1===f.cells.length,w=o||l||d,D=[];for(const f of t){const t=g(f),{standinFor:h,eventRange:x}=f,{instanceId:H}=x.instance;if(h)continue;const{left:N,right:k}=C(f,R,b,m),M=null!==(c=i.get(h?g(h):t))&&void 0!==c?c:w?0:void 0,W=null!=e&&null!=M?e+M:void 0,z=h||s[H]||null==W;D.push(r.createElement(P,{key:t,className:f.start?"fc-border-transparent fc-border-s":"",style:{visibility:z?"hidden":"",top:W,left:N,right:k},heightRef:h||w?null:u.createRef(t)},p(f)?r.createElement(y,Object.assign({eventRange:x,isStart:f.isStart,isEnd:f.isEnd,isDragging:o,isSelected:H===S,defaultDisplayEventEnd:E},n.getEventRangeMeta(x,a))):r.createElement(v,Object.assign({eventRange:x,isStart:f.isStart,isEnd:f.isEnd,isDragging:o,isResizing:l,isDateSelecting:d,isSelected:H===S,defaultDisplayEventEnd:E},n.getEventRangeMeta(x,a)))))}return D}renderFillSegs(e,t){const{props:i,context:a}=this,{isRtl:s}=a,{todayRange:o,colWidth:l}=i,d=i.cells.length,c=[];for(const i of e){const e=n.buildEventRangeKey(i.eventRange),{left:a,right:g}=C(i,l,d,s),f=!i.standinFor;c.push(r.createElement("div",{key:e,className:"fc-fill-y",style:{visibility:f?"":"hidden",left:a,right:g}},"bg-event"===t?r.createElement(n.BgEvent,Object.assign({eventRange:i.eventRange,isStart:i.isStart,isEnd:i.isEnd},n.getEventRangeMeta(i.eventRange,o))):n.renderFill(t)))}return r.createElement(r.Fragment,{},...c)}componentDidMount(){const{rootEl:e}=this;this.disconnectHeight=n.watchHeight(e,e=>{n.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),n.setRef(this.props.heightRef,null)}computeFgDims(){const{cells:e}=this.props,t=this.headerHeightRefMap.current,n=this.mainHeightRefMap.current;let r,i;for(const a of e){const e=t.get(a.key),s=n.get(a.key);if(null!=e&&((void 0===r||e>r)&&(r=e),null!=s)){const t=e+s;(void 0===i||t<i)&&(i=t)}}return[r,null!=i&&null!=r?i-r:void 0]}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}}class j extends n.DateComponent{constructor(){super(...arguments),this.splitBusinessHourSegs=n.memoize(f),this.splitBgEventSegs=n.memoize(f),this.splitFgEventSegs=n.memoize(f),this.splitDateSelectionSegs=n.memoize(f),this.splitEventDrag=n.memoize(h),this.splitEventResize=n.memoize(h),this.rowHeightRefMap=new n.RefMap((e,t)=>{const{rowHeightRefMap:n}=this.props;n&&n.handleValue(e,t)}),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t,rowHeightRefMap:i}=this,{options:a}=t,s=e.cellRows.length,o=this.splitFgEventSegs(e.fgEventSegs,s),l=this.splitBgEventSegs(e.bgEventSegs,s),d=this.splitBusinessHourSegs(e.businessHourSegs,s),c=this.splitDateSelectionSegs(e.dateSelectionSegs,s),g=this.splitEventDrag(e.eventDrag,s),f=this.splitEventResize(e.eventResize,s),h=n.getIsHeightAuto(a),u=!e.forPrint&&!h,[m,p]=T(e.visibleWidth,s,h,e.forPrint,a);return r.createElement("div",{role:"rowgroup",className:n.joinClassNames(!e.forPrint&&"fc-flex-col",e.className),style:{width:e.width},ref:this.handleRootEl},e.cellRows.map((t,h)=>r.createElement(z,{key:t[0].key,role:"row",dateProfile:e.dateProfile,todayRange:e.todayRange,cells:t,showDayNumbers:s>1,showWeekNumbers:s>1&&a.weekNumbers,forPrint:e.forPrint,isCompact:p,className:n.joinClassNames(u&&"fc-grow fc-basis0",s>1&&"fc-break-inside-avoid",h<s-1&&"fc-border-b"),fgEventSegs:o[h],bgEventSegs:l[h].filter(F),businessHourSegs:d[h],dateSelectionSegs:c[h],eventSelection:e.eventSelection,eventDrag:g[h],eventResize:f[h],dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,colWidth:e.colWidth,minHeight:m,heightRef:i.createRef(t[0].key)})))}componentDidMount(){this.disconnectWidth=n.watchWidth(this.rootEl,e=>{this.setState({width:e})})}componentWillUnmount(){this.disconnectWidth()}queryHit(e,t,r){const{props:i,context:a}=this,s=i.cellRows[0].length,{col:o,left:l,right:d}=H(e,r,i.colWidth,s,a.isRtl),{row:c,top:g,bottom:f}=function(e,t,n){let r=0,i=0,a=0;for(const s of t){const t=s[0].key;if(i=a,a=i+n.get(t),e<a)break;r++}return{row:r,top:i,bottom:a}}(t,i.cellRows,this.rowHeightRefMap.current),h=i.cellRows[c][o],u=h.date,m=n.addDays(u,1);return{dateProfile:i.dateProfile,dateSpan:Object.assign({range:{start:u,end:m},allDay:!0},h.dateSpanProps),dayEl:k(N(this.rootEl,c),o),rect:{left:l,right:d,top:g,bottom:f},layer:0}}}function F(e){return e.eventRange.def.allDay}function T(e,t,n,r,i){if(null!=e){const a=e/i.aspectRatio/6;return[r?"6em":t>6||n?a:void 0,a<70]}return[void 0,!1]}class O extends n.BaseComponent{constructor(){super(...arguments),this.handleInnerEl=e=>{this.disconectInnerHeight&&(this.disconectInnerHeight(),this.disconectInnerHeight=void 0),e?this.disconectInnerHeight=n.watchHeight(e,e=>{n.setRef(this.props.innerHeightRef,e)}):n.setRef(this.props.innerHeightRef,null)}}render(){const{props:e}=this,{renderConfig:t,dataConfig:i}=e,a=i.renderProps.isDisabled;return r.createElement(n.ContentContainer,{tag:"div",attrs:Object.assign({role:"columnheader","aria-colspan":i.colSpan},i.attrs),className:n.joinClassNames("fc-header-cell fc-cell fc-flex-col fc-align-center",e.borderStart&&"fc-border-s",!e.isSticky&&"fc-crop",null==e.colWidth&&"fc-liquid",i.className),style:{width:null!=e.colWidth?e.colWidth*(i.colSpan||1):void 0},renderProps:i.renderProps,generatorName:t.generatorName,customGenerator:t.customGenerator,defaultGenerator:n.renderText,classNameGenerator:a?void 0:t.classNameGenerator,didMount:t.didMount,willUnmount:t.willUnmount},t=>r.createElement(t,{tag:"div",attrs:i.innerAttrs,className:n.joinClassNames("fc-cell-inner fc-flex-col fc-padding-sm",e.isSticky&&"fc-sticky-s"),elRef:this.handleInnerEl}))}}class B extends n.BaseComponent{constructor(){super(...arguments),this.innerHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleInnerHeights)}),this.handleInnerHeights=()=>{const e=this.innerHeightRefMap.current;let t=0;for(const n of e.values())t=Math.max(t,n);this.currentInnerHeight!==t&&(this.currentInnerHeight=t,n.setRef(this.props.innerHeightRef,t))}}render(){const{props:e}=this;return r.createElement("div",{role:e.role,"aria-rowindex":null!=e.rowIndex?1+e.rowIndex:void 0,className:n.joinClassNames("fc-flex-row fc-content-box",e.className),style:{height:e.height}},e.dataConfigs.map((t,n)=>r.createElement(O,{key:t.key,renderConfig:e.renderConfig,dataConfig:t,isSticky:e.isSticky,borderStart:Boolean(n),colWidth:e.colWidth,innerHeightRef:e.innerHeightRef})))}}class I extends n.BaseComponent{render(){const{props:e}=this;return r.createElement("div",{role:"rowgroup",className:n.joinClassNames(e.className,"fc-flex-col",null==e.width&&"fc-liquid"),style:{width:e.width}},e.headerTiers.map((t,n)=>r.createElement(B,Object.assign({},t,{key:n,role:"row",className:n?"fc-border-t":"",colWidth:e.colWidth}))))}}class G extends n.BaseComponent{constructor(){super(...arguments),this.handleScroller=e=>{n.setRef(this.props.scrollerRef,e)},this.handleClientWidth=e=>{this.setState({clientWidth:e})},this.handleEndScrollbarWidth=e=>{this.setState({endScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!n.getIsHeightAuto(a),o=!e.forPrint&&n.getStickyHeaderDates(a);return r.createElement(r.Fragment,null,a.dayHeaders&&r.createElement("div",{className:n.joinClassNames(e.forPrint?"fc-print-header":"fc-flex-row","fc-border-b")},r.createElement(I,{headerTiers:e.headerTiers,className:n.joinClassNames("fc-daygrid-header",o&&"fc-table-header-sticky")}),Boolean(t.endScrollbarWidth)&&r.createElement("div",{className:"fc-border-s fc-filler",style:{minWidth:t.endScrollbarWidth}})),r.createElement(n.Scroller,{vertical:s,clientWidthRef:this.handleClientWidth,endScrollbarWidthRef:this.handleEndScrollbarWidth,className:n.joinClassNames("fc-daygrid-body",!e.forPrint&&"fc-flex-col",s&&"fc-liquid"),ref:this.handleScroller},r.createElement(j,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,className:"fc-grow",dayMaxEvents:e.forPrint?void 0:a.dayMaxEvents,dayMaxEventRows:a.dayMaxEventRows,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,visibleWidth:null!=t.clientWidth&&null!=t.endScrollbarWidth?t.clientWidth+t.endScrollbarWidth:void 0,rowHeightRefMap:e.rowHeightRefMap})))}}class A extends n.BaseComponent{constructor(){super(...arguments),this.headerScrollerRef=r.createRef(),this.bodyScrollerRef=r.createRef(),this.footerScrollerRef=r.createRef(),this.handleClientWidth=e=>{this.setState({clientWidth:e})},this.handleEndScrollbarWidth=e=>{this.setState({endScrollbarWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,s=!e.forPrint&&!n.getIsHeightAuto(a),o=!e.forPrint&&n.getStickyHeaderDates(a),l=!e.forPrint&&n.getStickyFooterScrollbar(a),d=e.cellRows[0].length,[c,g]=x(d,e.dayMinWidth,t.clientWidth);return r.createElement(r.Fragment,null,a.dayHeaders&&r.createElement("div",{className:"fc-print-header"},r.createElement(n.Scroller,{horizontal:!0,hideScrollbars:!0,className:n.joinClassNames("fc-daygrid-header fc-flex-row fc-border-b",o&&"fc-table-header-sticky"),ref:this.headerScrollerRef},r.createElement(I,{headerTiers:e.headerTiers,colWidth:g,width:c}),Boolean(t.endScrollbarWidth)&&r.createElement("div",{className:"fc-border-s fc-filler",style:{minWidth:t.endScrollbarWidth}}))),r.createElement(n.Scroller,{vertical:s,horizontal:!0,hideScrollbars:l||e.forPrint,className:n.joinClassNames("fc-daygrid-body",!e.forPrint&&"fc-flex-col",s&&"fc-liquid"),ref:this.bodyScrollerRef,clientWidthRef:this.handleClientWidth,endScrollbarWidthRef:this.handleEndScrollbarWidth},r.createElement(j,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,className:"fc-grow",dayMaxEvents:e.forPrint?void 0:a.dayMaxEvents,dayMaxEventRows:a.dayMaxEventRows,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,colWidth:g,width:c,visibleWidth:null!=t.clientWidth&&null!=t.endScrollbarWidth?t.clientWidth+t.endScrollbarWidth:void 0,rowHeightRefMap:e.rowHeightRefMap})),Boolean(l)&&r.createElement(n.StickyFooterScrollbar,{canvasWidth:c,scrollerRef:this.footerScrollerRef}))}componentDidMount(){const e=n.getScrollerSyncerClass(this.context.pluginHooks);this.syncedScroller=new e(!0),n.setRef(this.props.scrollerRef,this.syncedScroller),this.updateSyncedScroller()}componentDidUpdate(){this.updateSyncedScroller()}componentWillUnmount(){this.syncedScroller.destroy()}updateSyncedScroller(){this.syncedScroller.handleChildren([this.headerScrollerRef.current,this.bodyScrollerRef.current,this.footerScrollerRef.current])}}class U extends n.BaseComponent{constructor(){super(...arguments),this.scrollerRef=r.createRef(),this.rowHeightRefMap=new n.RefMap(()=>{n.afterSize(this.updateScrollY)}),this.scrollDate=null,this.updateScrollY=()=>{const e=this.rowHeightRefMap.current,t=this.scrollerRef.current;if(t&&this.scrollDate){let n=function(e,t,n,r=0){let i=0;for(const a of t){const t=a[0].date,s=a[a.length-1].date,o=t.toISOString();if(e>=t&&e<=s)return i;const l=n.get(o);if(null==l)return;i+=l+r}return i}(this.scrollDate,this.props.cellRows,e,1);null!=n&&(n&&n++,t.scrollTo({y:n}))}},this.handleScrollEnd=({isUser:e})=>{e&&(this.scrollDate=null)}}render(){const{props:e,context:t}=this,{options:i}=t,a=Object.assign(Object.assign({},e),{scrollerRef:this.scrollerRef,rowHeightRefMap:this.rowHeightRefMap});return r.createElement(n.ViewContainer,{viewSpec:t.viewSpec,attrs:{role:"grid","aria-rowcount":e.headerTiers.length+e.cellRows.length,"aria-colcount":e.cellRows[0].length,"aria-labelledby":e.labelId,"aria-label":e.labelStr},className:n.joinClassNames(e.className,"fc-print-root fc-border")},i.dayMinWidth?r.createElement(A,Object.assign({},a,{dayMinWidth:i.dayMinWidth})):r.createElement(G,Object.assign({},a)))}componentDidMount(){this.resetScroll(),this.scrollerRef.current.addScrollEndListener(this.handleScrollEnd)}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile&&this.context.options.scrollTimeReset&&this.resetScroll()}componentWillUnmount(){this.scrollerRef.current.removeScrollEndListener(this.handleScrollEnd)}resetScroll(){this.scrollDate=this.props.dateProfile.currentDate,this.updateScrollY();this.scrollerRef.current.scrollTo({x:0})}}class L extends n.BaseComponent{constructor(){super(...arguments),this.buildDayTableModel=n.memoize(D),this.buildDateRowConfigs=n.memoize(o),this.createDayHeaderFormatter=n.memoize(M),this.slicer=new i}render(){const{props:e,context:t}=this,{options:i}=t,a=this.buildDayTableModel(e.dateProfile,t.dateProfileGenerator),s=1===a.rowCnt,o=this.createDayHeaderFormatter(t.options.dayHeaderFormat,s,a.colCnt),l=this.slicer.sliceProps(e,e.dateProfile,i.nextDayThreshold,t,a);return r.createElement(n.NowTimer,{unit:"day"},(n,i)=>{const d=this.buildDateRowConfigs(a.headerDates,s,e.dateProfile,i,o,t);return r.createElement(U,{labelId:e.labelId,labelStr:e.labelStr,dateProfile:e.dateProfile,todayRange:i,cellRows:a.cellRows,forPrint:e.forPrint,className:"fc-daygrid",headerTiers:d,fgEventSegs:l.fgEventSegs,bgEventSegs:l.bgEventSegs,businessHourSegs:l.businessHourSegs,dateSelectionSegs:l.dateSelectionSegs,eventDrag:l.eventDrag,eventResize:l.eventResize,eventSelection:l.eventSelection})})}}class q extends n.DateProfileGenerator{buildRenderRange(e,t,n){let r=super.buildRenderRange(e,t,n),{props:i}=this;return Y({currentRange:r,snapToWeek:/^(year|month)$/.test(t),fixedWeekCount:i.fixedWeekCount,dateEnv:i.dateEnv})}}function Y(e){let t,{dateEnv:r,currentRange:i}=e,{start:a,end:s}=i;if(e.snapToWeek&&(a=r.startOfWeek(a),t=r.startOfWeek(s),t.valueOf()!==s.valueOf()&&(s=n.addWeeks(t,1))),e.fixedWeekCount){let e=r.startOfWeek(r.startOfMonth(n.addDays(i.end,-1))),t=Math.ceil(n.diffWeeks(e,s));s=n.addWeeks(s,6-t)}return{start:a,end:s}}n.injectStyles(":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-media-print .fc-daygrid-event{overflow:hidden!important;white-space:nowrap!important}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative;z-index:2}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}");var _=t.createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:L,dateProfileGeneratorClass:q},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}}),V={__proto__:null,DayTableSlicer:i,TableDateProfileGenerator:q,buildDayTableRenderRange:Y,DayGridView:L,DayGridHeaderRow:B,buildDateRowConfigs:o,buildDateRowConfig:l,buildDateRenderConfig:d,buildDateDataConfigs:c,createDayHeaderFormatter:M,DayGridLayout:U,computeRowHeight:T,DayGridRow:z,DayGridRows:j,buildDayTableModel:D,computeColWidth:x,computeColFromPosition:H,getRowEl:N,getCellEl:k};return t.globalPlugins.push(_),e.Internal=V,e.default=_,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);
6
+ FullCalendar.DayGrid=function(e,t,n,r){"use strict";class i extends n.Slicer{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}const a=n.createFormatter({weekday:"long"}),s=new Date(2592e5);function o(...e){return[l(...e)]}function l(e,t,n,r,i,a,s){return{isDateRow:!0,renderConfig:d(a),dataConfigs:g(e,t,n,r,i,a,s)}}function d(e){const{options:t}=e;return{generatorName:"dayHeaderContent",customGenerator:t.dayHeaderContent,classNameGenerator:t.dayHeaderClassNames,didMount:t.dayHeaderDidMount,willUnmount:t.dayHeaderWillUnmount}}const c=[];for(let e=0;e<7;e++)c.push(n.addDays(new Date(2592e5),e));function g(e,t,r,i,o,l,d=1,g="",f={},h={},u=""){const{dateEnv:m,viewApi:p,options:v}=l;return t?e.map(t=>{const a=n.getDateMeta(t,i,null,r),s=m.format(t,o),c=Object.assign(Object.assign(Object.assign({},a),{date:m.toDate(t),view:p,text:s}),f),y=v.navLinks&&!a.isDisabled&&e.length>1,R=n.buildDateStr(l,t);return{key:g+t.toUTCString(),renderProps:c,attrs:Object.assign(Object.assign(Object.assign({"aria-label":R},a.isToday?{"aria-current":"date"}:{}),{"data-date":n.formatDayString(t)}),h),innerAttrs:y?n.buildNavLinkAttrs(l,t,void 0,R):{"aria-hidden":!0},colSpan:d,isNavLink:y,className:n.joinClassNames(u,n.getDayClassName(a))}}):e.map(e=>{const t=e.getUTCDay(),r=n.addDays(s,t),i={dow:t,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},l=m.format(r,o),v=Object.assign(Object.assign(Object.assign({},i),{date:c[t],view:p,text:l}),f),y=m.format(r,a);return{key:g+String(t),renderProps:v,attrs:Object.assign({"aria-label":y},h),innerAttrs:{"aria-hidden":!0},colSpan:d,className:n.joinClassNames(u,n.getDayClassName(i))}})}function f(e){return n.getEventKey(e)+":"+e.start+(e.standinFor?":standin":e.isSlice?":slice":"")}function h(e,t){const n=[];for(let e=0;e<t;e++)n[e]=[];for(const t of e)n[t.row].push(t);return n}function u(e,t){const n=[];if(e){for(let r=0;r<t;r++)n[r]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(const t of e.segs)n[t.row].segs.push(t)}else for(let e=0;e<t;e++)n[e]=null;return n}function m(e,t){return Object.assign(Object.assign({},e),{start:t,end:t+1,isStart:e.isStart&&e.start===t,isEnd:e.isEnd&&e.end-1===t,standinFor:e})}const p=n.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function v(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.end-e.start==1&&e.isStart&&e.isEnd}class y extends n.BaseComponent{render(){let{props:e}=this;return r.createElement(n.StandardEvent,Object.assign({},e,{className:"fc-daygrid-block-event fc-daygrid-event fc-h-event",defaultTimeFormat:p,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.eventRange.def.allDay}))}}class R extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{eventRange:a}=e,s=i.eventTimeFormat||p,o=n.buildEventRangeTimeText(s,a,void 0,void 0,e.isStart,e.isEnd,t,!0,e.defaultDisplayEventEnd),[l,d]=n.getEventTagAndAttrs(a,t);return r.createElement(n.EventContainer,Object.assign({},e,{tag:l,attrs:d,className:"fc-daygrid-dot-event fc-daygrid-event",defaultGenerator:b,timeText:o,isResizing:!1,isDateSelecting:!1}))}}function b(e){return r.createElement(r.Fragment,null,r.createElement("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&r.createElement("div",{className:"fc-event-time"},e.timeText),r.createElement("div",{className:"fc-event-title"},e.event.title||r.createElement(r.Fragment,null," ")))}class S extends n.BaseComponent{render(){let{props:e}=this;return r.createElement(n.MoreLinkContainer,{className:n.joinClassNames("fc-daygrid-more-link",e.isBlock?"fc-daygrid-more-link-block":"fc-daygrid-more-link-button"),dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,segs:e.segs,hiddenSegs:e.hiddenSegs,alignElRef:e.alignElRef,alignParentTop:e.alignParentTop,dateSpanProps:e.dateSpanProps,popoverContent:()=>{let t=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return r.createElement(r.Fragment,null,e.segs.map(i=>{let{eventRange:a}=i,{instanceId:s}=a.instance;return r.createElement("div",{key:s,style:{visibility:t[s]?"hidden":""}},v(i)?r.createElement(R,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},n.getEventRangeMeta(a,e.todayRange))):r.createElement(y,Object.assign({eventRange:a,isStart:i.isStart,isEnd:i.isEnd,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:s===e.eventSelection,defaultDisplayEventEnd:!1},n.getEventRangeMeta(a,e.todayRange))))}))}})}}class E extends n.DateComponent{constructor(){super(...arguments),this.getDateMeta=n.memoize(n.getDateMeta),this.rootElRef=r.createRef(),this.handleBodyEl=e=>{this.disconnectBodyHeight&&(this.disconnectBodyHeight(),this.disconnectBodyHeight=void 0,n.setRef(this.props.headerHeightRef,null),n.setRef(this.props.mainHeightRef,null)),e&&(this.disconnectBodyHeight=n.watchSize(e,(t,r)=>{const{props:i}=this,a=e.getBoundingClientRect(),s=this.rootElRef.current.getBoundingClientRect(),o=a.top-s.top;n.isDimsEqual(this.headerHeight,o)||(this.headerHeight=o,n.setRef(i.headerHeightRef,o)),i.fgLiquidHeight&&n.setRef(i.mainHeightRef,r)}))}}render(){let{props:e,context:t}=this,{options:i,dateEnv:a}=t;const s=e.showDayNumber&&function(e,t,r){const{start:i,end:a}=t,s=n.addMs(a,-1),o=r.getYear(i),l=r.getMonth(i),d=r.getYear(s),c=r.getMonth(s);return!(o===d&&l===c)&&Boolean(e.valueOf()===i.valueOf()||1===r.getDay(e)&&e.valueOf()<a.valueOf())}(e.date,e.dateProfile.currentRange,a),o=this.getDateMeta(e.date,e.todayRange,null,e.dateProfile),l=n.joinClassNames("fc-daygrid-day",e.borderStart&&"fc-border-s",null!=e.width?"":"fc-liquid","fc-flex-col");if(o.isDisabled)return r.createElement("div",{role:"gridcell","aria-disabled":!0,className:n.joinClassNames(l,"fc-day-disabled"),style:{width:e.width}});const d=e.showDayNumber||n.hasCustomDayCellContent(i),c=i.navLinks,g=n.buildDateStr(t,e.date);return r.createElement(n.DayCellContainer,{tag:"div",className:n.joinClassNames(l,e.className),attrs:Object.assign(Object.assign({},e.attrs),{role:"gridcell","aria-label":g}),style:{width:e.width},elRef:this.rootElRef,renderProps:e.renderProps,defaultGenerator:w,date:e.date,dateMeta:o,showDayNumber:e.showDayNumber,isMonthStart:s},i=>r.createElement(r.Fragment,null,d&&r.createElement("div",{className:"fc-daygrid-day-header"},r.createElement(i,{tag:"div",attrs:c?n.buildNavLinkAttrs(t,e.date,void 0,g):{"aria-hidden":!0},className:n.joinClassNames("fc-daygrid-day-number",s&&"fc-daygrid-month-start")})),r.createElement("div",{className:n.joinClassNames("fc-daygrid-day-body",e.isTall&&"fc-daygrid-day-body-tall",e.fgLiquidHeight?"fc-liquid":"fc-grow"),ref:this.handleBodyEl},r.createElement("div",{className:"fc-daygrid-day-events",style:{height:e.fgHeight}},e.fg),r.createElement(S,{isBlock:e.isCompact,allDayDate:e.date,segs:e.segs,hiddenSegs:e.hiddenSegs,alignElRef:this.rootElRef,alignParentTop:e.showDayNumber?"[role=row]":".fc-view",dateSpanProps:e.dateSpanProps,dateProfile:e.dateProfile,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange}))))}}function w(e){return e.dayNumberText||r.createElement(r.Fragment,null," ")}function D(e,t){let n=e.get(t.eventRange);n||e.set(t.eventRange,n=[]),n.push(t)}function x(e,t){let r=new n.DaySeriesModel(e.renderRange,t);return new n.DayTableModel(r,/year|month|week/.test(e.currentRangeUnit))}function C(e,t,n){if(null==n)return[void 0,void 0];return n/e<t?[t*e,t]:[n,void 0]}function H(e,t,r,i){let a,s;if(null!=t)a=e.start*t,s=(r-e.end)*t;else{const t=1/r;a=n.fracToCssDim(e.start*t),s=n.fracToCssDim(1-e.end*t)}return i?{right:a,left:s}:{left:a,right:s}}function N(e,t,n,r,i){const a=null!=n?n:t/r,s=Math.floor(e/a),o=s*a;return{col:i?r-s-1:s,left:o,right:o+a}}function k(e,t){return e.querySelectorAll("[role=row]")[t]}function M(e,t){return e.querySelectorAll("[role=gridcell]")[t]}function P(e,t,r){return e||function(e,t){if(!e||t>10)return n.createFormatter({weekday:"short"});if(t>1)return n.createFormatter({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0});return n.createFormatter({weekday:"long"})}(t,r)}class W extends r.Component{constructor(){super(...arguments),this.rootElRef=r.createRef()}render(){const{props:e}=this;return r.createElement("div",{className:n.joinClassNames(e.className,"fc-abs"),style:e.style,ref:this.rootElRef},e.children)}componentDidMount(){const e=this.rootElRef.current;this.disconnectHeight=n.watchHeight(e,e=>{n.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),n.setRef(this.props.heightRef,null)}}const z=n.createFormatter({week:"narrow"});class j extends n.BaseComponent{constructor(){super(...arguments),this.headerHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleSegPositioning)}),this.mainHeightRefMap=new n.RefMap(()=>{(!0===this.props.dayMaxEvents||!0===this.props.dayMaxEventRows)&&n.afterSize(this.handleSegPositioning)}),this.segHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleSegPositioning)}),this.handleRootEl=e=>{this.rootEl=e,n.setRef(this.props.rootElRef,e)},this.handleSegPositioning=()=>{this.forceUpdate()}}render(){const{props:e,context:t,headerHeightRefMap:i,mainHeightRefMap:a}=this,{cells:s}=e,{options:o}=t,l=e.cells[0].date,d=!0===e.dayMaxEvents||!0===e.dayMaxEventRows,c=n.sortEventSegs(e.fgEventSegs,o.eventOrder),[g,h]=this.computeFgDims(),[u,p,v,y,R]=function(e,t,r,i,a,s=!0,o,l){let d,c,g;!0===o||!0===l?(d=i,g=!0):"number"==typeof o?(c=o,g=!1):"number"==typeof l&&(c=l,g=!0);const h=new Map,u=new Map,p=new Map,v=new Map;let y=new n.SegHierarchy(e,e=>t.get(f(e)),a,d,c,g,s);y.traverseSegs((e,t)=>{D(h,e),p.set(f(e),t),e.isSlice&&v.set(e.eventRange,!0)});for(const e of y.hiddenSegs)D(u,e);if(v.size){p.clear(),y=new n.SegHierarchy(function(e,t){const n=[];for(const r of e)n.push(...t.get(r.eventRange)||[]);return n}(e,h),e=>t.get(f(e)),a,d,c,g),y.traverseSegs((e,t)=>{p.set(f(e),t)});for(const e of y.hiddenSegs)D(u,e)}const R=[],b=[],S=[],E=[];for(let e=0;e<r.length;e++)R.push([]),b.push([]),S.push([]),E.push(0);for(const n of e){const{eventRange:e}=n,r=h.get(e)||[],i=u.get(e)||[],a=v.get(e)||!1;if(S[n.start].push(n),a)for(const e of r)S[e.start].push(e);for(const e of r){for(let t=e.start;t<e.end;t++){const n=m(e,t);R[t].push(n)}const n=f(e),r=p.get(n);if(null!=r){const i=t.get(n);for(let t=e.start;t<e.end;t++)E[t]=Math.max(E[t],r+i)}}for(const e of i)for(let t=e.start;t<e.end;t++){const n=m(e,t);R[t].push(n),b[t].push(n)}}return[R,b,S,p,E]}(c,this.segHeightRefMap.current,s,d?h:void 0,o.eventOrderStrict,o.eventSlicing,e.dayMaxEvents,e.dayMaxEventRows),b=[];if(null!=g){let e=0;for(const t of s){const n=i.current.get(t.key),r=g-n;b.push(R[e++]+r)}}const S=this.getHighlightSegs(),w=this.getMirrorSegs(),x=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{},C=o.navLinks,H=n.buildDateStr(t,l,"week");return r.createElement("div",{role:e.role,"aria-label":"row"===e.role?H:void 0,className:n.joinClassNames("fc-daygrid-row",e.forPrint&&"fc-daygrid-row-print","fc-flex-row fc-rel",e.className),style:{"flex-basis":e.basis},ref:this.handleRootEl},e.showWeekNumbers&&r.createElement(n.WeekNumberContainer,{tag:"div",attrs:Object.assign(Object.assign({},C?n.buildNavLinkAttrs(t,l,"week",H,!1):{}),{role:void 0,"aria-hidden":!0}),className:"fc-daygrid-week-number",date:l,defaultFormat:z}),this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(S,"highlight"),e.cells.map((t,n)=>{const s=this.renderFgSegs(g,v[n],y,e.todayRange,x);return r.createElement(E,{key:t.key,dateProfile:e.dateProfile,todayRange:e.todayRange,date:t.date,showDayNumber:e.showDayNumbers,isCompact:e.isCompact,isTall:e.isTall,borderStart:Boolean(n),segs:u[n],hiddenSegs:p[n],fgLiquidHeight:d,fg:r.createElement(r.Fragment,null,s),eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,renderProps:t.renderProps,dateSpanProps:t.dateSpanProps,attrs:t.attrs,className:t.className,fgHeight:b[n],width:e.colWidth,headerHeightRef:i.createRef(t.key),mainHeightRef:a.createRef(t.key)})}),this.renderFgSegs(g,w,y,e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1))}renderFgSegs(e,t,i,a,s,o,l,d){var c;const{props:g,context:h,segHeightRefMap:u}=this,{isRtl:m}=h,{colWidth:p,eventSelection:b}=g,S=g.cells.length,E=1===g.cells.length,w=o||l||d,D=[];for(const g of t){const t=f(g),{standinFor:h,eventRange:x}=g,{instanceId:C}=x.instance;if(h)continue;const{left:N,right:k}=H(g,p,S,m),M=null!==(c=i.get(h?f(h):t))&&void 0!==c?c:w?0:void 0,P=null!=e&&null!=M?e+M:void 0,z=h||s[C]||null==P;D.push(r.createElement(W,{key:t,className:g.start?"fc-border-transparent fc-border-s":"",style:{visibility:z?"hidden":"",top:P,left:N,right:k},heightRef:h||w?null:u.createRef(t)},v(g)?r.createElement(R,Object.assign({eventRange:x,isStart:g.isStart,isEnd:g.isEnd,isDragging:o,isSelected:C===b,defaultDisplayEventEnd:E},n.getEventRangeMeta(x,a))):r.createElement(y,Object.assign({eventRange:x,isStart:g.isStart,isEnd:g.isEnd,isDragging:o,isResizing:l,isDateSelecting:d,isSelected:C===b,defaultDisplayEventEnd:E},n.getEventRangeMeta(x,a)))))}return D}renderFillSegs(e,t){const{props:i,context:a}=this,{isRtl:s}=a,{todayRange:o,colWidth:l}=i,d=i.cells.length,c=[];for(const i of e){const e=n.buildEventRangeKey(i.eventRange),{left:a,right:g}=H(i,l,d,s),f=!i.standinFor;c.push(r.createElement("div",{key:e,className:"fc-fill-y",style:{visibility:f?"":"hidden",left:a,right:g}},"bg-event"===t?r.createElement(n.BgEvent,Object.assign({eventRange:i.eventRange,isStart:i.isStart,isEnd:i.isEnd},n.getEventRangeMeta(i.eventRange,o))):n.renderFill(t)))}return r.createElement(r.Fragment,{},...c)}componentDidMount(){const{rootEl:e}=this;this.disconnectHeight=n.watchHeight(e,e=>{n.setRef(this.props.heightRef,e)})}componentWillUnmount(){this.disconnectHeight(),n.setRef(this.props.heightRef,null)}computeFgDims(){const{cells:e}=this.props,t=this.headerHeightRefMap.current,n=this.mainHeightRefMap.current;let r,i;for(const a of e){const e=t.get(a.key),s=n.get(a.key);if(null!=e&&((void 0===r||e>r)&&(r=e),null!=s)){const t=e+s;(void 0===i||t<i)&&(i=t)}}return[r,null!=i&&null!=r?i-r:void 0]}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}}class T extends n.DateComponent{constructor(){super(...arguments),this.splitBusinessHourSegs=n.memoize(h),this.splitBgEventSegs=n.memoize(h),this.splitFgEventSegs=n.memoize(h),this.splitDateSelectionSegs=n.memoize(h),this.splitEventDrag=n.memoize(u),this.splitEventResize=n.memoize(u),this.rowHeightRefMap=new n.RefMap((e,t)=>{const{rowHeightRefMap:n}=this.props;n&&n.handleValue(e,t)}),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t,rowHeightRefMap:i}=this,{options:a}=t,s=e.cellRows.length,o=this.splitFgEventSegs(e.fgEventSegs,s),l=this.splitBgEventSegs(e.bgEventSegs,s),d=this.splitBusinessHourSegs(e.businessHourSegs,s),c=this.splitDateSelectionSegs(e.dateSelectionSegs,s),g=this.splitEventDrag(e.eventDrag,s),f=this.splitEventResize(e.eventResize,s),h=n.getIsHeightAuto(a),u=!e.forPrint&&!h,m=O(e.visibleWidth,s,h,a),p=B(e.visibleWidth,a);return r.createElement("div",{role:"rowgroup",className:n.joinClassNames(!e.forPrint&&"fc-flex-col",e.className),style:{width:e.width},ref:this.handleRootEl},e.cellRows.map((t,h)=>r.createElement(j,{key:t[0].key,role:"row",dateProfile:e.dateProfile,todayRange:e.todayRange,cells:t,showDayNumbers:s>1,showWeekNumbers:s>1&&a.weekNumbers,forPrint:e.forPrint,isCompact:p,className:n.joinClassNames(u&&"fc-grow",s>1&&"fc-break-inside-avoid",h<s-1&&"fc-border-b"),fgEventSegs:o[h],bgEventSegs:l[h].filter(F),businessHourSegs:d[h],dateSelectionSegs:c[h],eventSelection:e.eventSelection,eventDrag:g[h],eventResize:f[h],dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,colWidth:e.colWidth,basis:m,heightRef:i.createRef(t[0].key)})))}queryHit(e,t,r){const{props:i,context:a}=this,s=i.cellRows[0].length,{col:o,left:l,right:d}=N(e,r,i.colWidth,s,a.isRtl),{row:c,top:g,bottom:f}=function(e,t,n){let r=0,i=0,a=0;for(const s of t){const t=s[0].key;if(i=a,a=i+n.get(t),e<a)break;r++}return{row:r,top:i,bottom:a}}(t,i.cellRows,this.rowHeightRefMap.current),h=i.cellRows[c][o],u=h.date,m=n.addDays(u,1);return{dateProfile:i.dateProfile,dateSpan:Object.assign({range:{start:u,end:m},allDay:!0},h.dateSpanProps),getDayEl:()=>M(k(this.rootEl,c),o),rect:{left:l,right:d,top:g,bottom:f},layer:0}}}function F(e){return e.eventRange.def.allDay}function O(e,t,n,r){if(null!=e){const i=e/r.aspectRatio/6;return t>6||n?i:0}return 0}function B(e,t){if(null!=e){return e/t.aspectRatio/6<70}return!1}class I extends n.BaseComponent{constructor(){super(...arguments),this.handleInnerEl=e=>{this.disconectInnerHeight&&(this.disconectInnerHeight(),this.disconectInnerHeight=void 0),e?this.disconectInnerHeight=n.watchHeight(e,e=>{n.setRef(this.props.innerHeightRef,e)}):n.setRef(this.props.innerHeightRef,null)}}render(){const{props:e}=this,{renderConfig:t,dataConfig:i}=e,a=i.renderProps.isDisabled;return r.createElement(n.ContentContainer,{tag:"div",attrs:Object.assign({role:"columnheader","aria-colspan":i.colSpan},i.attrs),className:n.joinClassNames("fc-header-cell fc-cell fc-flex-col fc-align-center",e.borderStart&&"fc-border-s",!e.isSticky&&"fc-crop",null==e.colWidth&&"fc-liquid",i.className),style:{width:null!=e.colWidth?e.colWidth*(i.colSpan||1):void 0},renderProps:i.renderProps,generatorName:t.generatorName,customGenerator:t.customGenerator,defaultGenerator:n.renderText,classNameGenerator:a?void 0:t.classNameGenerator,didMount:t.didMount,willUnmount:t.willUnmount},t=>r.createElement(t,{tag:"div",attrs:i.innerAttrs,className:n.joinClassNames("fc-cell-inner fc-flex-col fc-padding-sm",e.isSticky&&"fc-sticky-s"),elRef:this.handleInnerEl}))}}class G extends n.BaseComponent{constructor(){super(...arguments),this.innerHeightRefMap=new n.RefMap(()=>{n.afterSize(this.handleInnerHeights)}),this.handleInnerHeights=()=>{const e=this.innerHeightRefMap.current;let t=0;for(const n of e.values())t=Math.max(t,n);this.currentInnerHeight!==t&&(this.currentInnerHeight=t,n.setRef(this.props.innerHeightRef,t))}}render(){const{props:e}=this;return r.createElement("div",{role:e.role,"aria-rowindex":null!=e.rowIndex?1+e.rowIndex:void 0,className:n.joinClassNames("fc-flex-row fc-content-box",e.className),style:{height:e.height}},e.dataConfigs.map((t,n)=>r.createElement(I,{key:t.key,renderConfig:e.renderConfig,dataConfig:t,isSticky:e.isSticky,borderStart:Boolean(n),colWidth:e.colWidth,innerHeightRef:e.innerHeightRef})))}componentWillUnmount(){n.setRef(this.props.innerHeightRef,null)}}class A extends n.BaseComponent{render(){const{props:e}=this;return r.createElement("div",{role:"rowgroup",className:n.joinClassNames(e.className,"fc-flex-col",null==e.width&&"fc-liquid"),style:{width:e.width}},e.headerTiers.map((t,n)=>r.createElement(G,Object.assign({},t,{key:n,role:"row",className:n?"fc-border-t":"",colWidth:e.colWidth}))))}}class L extends n.BaseComponent{constructor(){super(...arguments),this.handleScroller=e=>{n.setRef(this.props.scrollerRef,e)},this.handleTotalWidth=e=>{this.setState({totalWidth:e})},this.handleClientWidth=e=>{this.setState({clientWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,{totalWidth:s,clientWidth:o}=t,l=null!=s&&null!=o?s-o:void 0,d=!e.forPrint&&!n.getIsHeightAuto(a),c=!e.forPrint&&n.getStickyHeaderDates(a);return r.createElement(r.Fragment,null,a.dayHeaders&&r.createElement("div",{className:n.joinClassNames(e.forPrint?"fc-print-header":"fc-flex-row",c&&"fc-table-header-sticky","fc-border-b")},r.createElement(A,{headerTiers:e.headerTiers,className:"fc-daygrid-header"}),Boolean(l)&&r.createElement("div",{className:"fc-border-s fc-filler",style:{minWidth:l}})),r.createElement(n.Scroller,{vertical:d,className:n.joinClassNames("fc-daygrid-body",!e.forPrint&&"fc-flex-col",d&&"fc-liquid"),ref:this.handleScroller,clientWidthRef:this.handleClientWidth},r.createElement(T,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,className:"fc-grow",dayMaxEvents:e.forPrint?void 0:a.dayMaxEvents,dayMaxEventRows:a.dayMaxEventRows,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,visibleWidth:s,rowHeightRefMap:e.rowHeightRefMap})),r.createElement(n.Ruler,{widthRef:this.handleTotalWidth}))}}class U extends n.BaseComponent{constructor(){super(...arguments),this.headerScrollerRef=r.createRef(),this.bodyScrollerRef=r.createRef(),this.footerScrollerRef=r.createRef(),this.handleTotalWidth=e=>{this.setState({totalWidth:e})},this.handleClientWidth=e=>{this.setState({clientWidth:e})}}render(){const{props:e,state:t,context:i}=this,{options:a}=i,{totalWidth:s,clientWidth:o}=t,l=null!=s&&null!=o?s-o:void 0,d=!e.forPrint&&!n.getIsHeightAuto(a),c=!e.forPrint&&n.getStickyHeaderDates(a),g=!e.forPrint&&n.getStickyFooterScrollbar(a),f=e.cellRows[0].length,[h,u]=C(f,e.dayMinWidth,o);return r.createElement(r.Fragment,null,a.dayHeaders&&r.createElement("div",{className:n.joinClassNames("fc-print-header",c&&"fc-table-header-sticky")},r.createElement(n.Scroller,{horizontal:!0,hideScrollbars:!0,className:"fc-daygrid-header fc-flex-row fc-border-b",ref:this.headerScrollerRef},r.createElement(A,{headerTiers:e.headerTiers,colWidth:u,width:h}),Boolean(l)&&r.createElement("div",{className:"fc-border-s fc-filler",style:{minWidth:l}}))),r.createElement(n.Scroller,{vertical:d,horizontal:!0,hideScrollbars:g||e.forPrint,className:n.joinClassNames("fc-daygrid-body",!e.forPrint&&"fc-flex-col",d&&"fc-liquid"),ref:this.bodyScrollerRef,clientWidthRef:this.handleClientWidth},r.createElement(T,{dateProfile:e.dateProfile,todayRange:e.todayRange,cellRows:e.cellRows,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed,className:"fc-grow",dayMaxEvents:e.forPrint?void 0:a.dayMaxEvents,dayMaxEventRows:a.dayMaxEventRows,fgEventSegs:e.fgEventSegs,bgEventSegs:e.bgEventSegs,businessHourSegs:e.businessHourSegs,dateSelectionSegs:e.dateSelectionSegs,eventDrag:e.eventDrag,eventResize:e.eventResize,eventSelection:e.eventSelection,colWidth:u,width:h,visibleWidth:s,rowHeightRefMap:e.rowHeightRefMap})),Boolean(g)&&r.createElement(n.FooterScrollbar,{isSticky:!0,canvasWidth:h,scrollerRef:this.footerScrollerRef}),r.createElement(n.Ruler,{widthRef:this.handleTotalWidth}))}componentDidMount(){const e=n.getScrollerSyncerClass(this.context.pluginHooks);this.syncedScroller=new e(!0),n.setRef(this.props.scrollerRef,this.syncedScroller),this.updateSyncedScroller()}componentDidUpdate(){this.updateSyncedScroller()}componentWillUnmount(){this.syncedScroller.destroy()}updateSyncedScroller(){this.syncedScroller.handleChildren([this.headerScrollerRef.current,this.bodyScrollerRef.current,this.footerScrollerRef.current])}}class q extends n.BaseComponent{constructor(){super(...arguments),this.scrollerRef=r.createRef(),this.rowHeightRefMap=new n.RefMap(()=>{n.afterSize(this.updateScrollY)}),this.scrollDate=null,this.updateScrollY=()=>{const e=this.rowHeightRefMap.current,t=this.scrollerRef.current;if(t&&this.scrollDate){let n=function(e,t,n,r=0){let i=0;for(const a of t){const t=a[0].date,s=a[a.length-1].date,o=t.toISOString();if(e>=t&&e<=s)return i;const l=n.get(o);if(null==l)return;i+=l+r}return i}(this.scrollDate,this.props.cellRows,e,1);null!=n&&(n&&n++,t.scrollTo({y:n}))}},this.handleScrollEnd=e=>{e&&(this.scrollDate=null)}}render(){const{props:e,context:t}=this,{options:i}=t,a=Object.assign(Object.assign({},e),{scrollerRef:this.scrollerRef,rowHeightRefMap:this.rowHeightRefMap});return r.createElement(n.ViewContainer,{viewSpec:t.viewSpec,attrs:{role:"grid","aria-rowcount":e.headerTiers.length+e.cellRows.length,"aria-colcount":e.cellRows[0].length,"aria-labelledby":e.labelId,"aria-label":e.labelStr},className:n.joinClassNames(e.className,"fc-print-root fc-border")},i.dayMinWidth?r.createElement(U,Object.assign({},a,{dayMinWidth:i.dayMinWidth})):r.createElement(L,Object.assign({},a)))}componentDidMount(){this.resetScroll(),this.scrollerRef.current.addScrollEndListener(this.handleScrollEnd)}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile&&this.context.options.scrollTimeReset&&this.resetScroll()}componentWillUnmount(){this.scrollerRef.current.removeScrollEndListener(this.handleScrollEnd)}resetScroll(){this.scrollDate=this.props.dateProfile.currentDate,this.updateScrollY();this.scrollerRef.current.scrollTo({x:0})}}class Y extends n.BaseComponent{constructor(){super(...arguments),this.buildDayTableModel=n.memoize(x),this.buildDateRowConfigs=n.memoize(o),this.createDayHeaderFormatter=n.memoize(P),this.slicer=new i}render(){const{props:e,context:t}=this,{options:i}=t,a=this.buildDayTableModel(e.dateProfile,t.dateProfileGenerator),s=1===a.rowCnt,o=this.createDayHeaderFormatter(t.options.dayHeaderFormat,s,a.colCnt),l=this.slicer.sliceProps(e,e.dateProfile,i.nextDayThreshold,t,a);return r.createElement(n.NowTimer,{unit:"day"},(n,i)=>{const d=this.buildDateRowConfigs(a.headerDates,s,e.dateProfile,i,o,t);return r.createElement(q,{labelId:e.labelId,labelStr:e.labelStr,dateProfile:e.dateProfile,todayRange:i,cellRows:a.cellRows,forPrint:e.forPrint,className:"fc-daygrid",headerTiers:d,fgEventSegs:l.fgEventSegs,bgEventSegs:l.bgEventSegs,businessHourSegs:l.businessHourSegs,dateSelectionSegs:l.dateSelectionSegs,eventDrag:l.eventDrag,eventResize:l.eventResize,eventSelection:l.eventSelection})})}}class _ extends n.DateProfileGenerator{buildRenderRange(e,t,n){let r=super.buildRenderRange(e,t,n),{props:i}=this;return V({currentRange:r,snapToWeek:/^(year|month)$/.test(t),fixedWeekCount:i.fixedWeekCount,dateEnv:i.dateEnv})}}function V(e){let t,{dateEnv:r,currentRange:i}=e,{start:a,end:s}=i;if(e.snapToWeek&&(a=r.startOfWeek(a),t=r.startOfWeek(s),t.valueOf()!==s.valueOf()&&(s=n.addWeeks(t,1))),e.fixedWeekCount){let e=r.startOfWeek(r.startOfMonth(n.addDays(i.end,-1))),t=Math.ceil(n.diffWeeks(e,s));s=n.addWeeks(s,6-t)}return{start:a,end:s}}n.injectStyles(":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-row-print{min-height:6em}.fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc-daygrid-day-header{display:flex;flex-direction:row-reverse}.fc-day-other .fc-daygrid-day-header{opacity:.3}.fc-daygrid-day-number{padding:4px;position:relative}.fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc-daygrid-day-body{display:flex;flex-direction:column;margin-bottom:1px}.fc-daygrid-day-body-tall{margin-bottom:1em;min-height:2em}.fc-daygrid-day-body:only-child{margin-top:2px}.fc-daygrid-more-link{border-radius:3px;cursor:pointer;font-size:var(--fc-small-font-size);margin:0 2px 1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap}.fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc-daygrid-more-link-button{align-self:flex-start}.fc-daygrid-more-link-block{border:1px solid var(--fc-event-border-color);padding:1px}.fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:1}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px}.fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);margin-bottom:1px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;direction:row;display:flex;padding:2px 0;position:relative}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-daygrid-dot-event .fc-event-time,.fc-daygrid-dot-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-media-print .fc-daygrid-dot-event .fc-event-time,.fc-media-print .fc-daygrid-dot-event .fc-event-title{overflow:hidden!important;white-space:nowrap!important}.fc-daygrid-dot-event .fc-event-title{flex-basis:0;flex-grow:1;font-weight:700;min-height:0;min-width:0}");var K=t.createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:Y,dateProfileGeneratorClass:_},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}}),Z={__proto__:null,DayTableSlicer:i,TableDateProfileGenerator:_,buildDayTableRenderRange:V,DayGridView:Y,DayGridHeaderRow:G,buildDateRowConfigs:o,buildDateRowConfig:l,buildDateRenderConfig:d,buildDateDataConfigs:g,createDayHeaderFormatter:P,DayGridLayout:q,computeRowBasis:O,computeRowIsCompact:B,DayGridRow:j,DayGridRows:T,buildDayTableModel:x,computeColWidth:C,computeColFromPosition:N,getRowEl:k,getCellEl:M};return t.globalPlugins.push(K),e.Internal=Z,e.default=K,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact);