diff options
Diffstat (limited to 'library/fullcalendar/packages/daygrid/index.global.js')
-rw-r--r-- | library/fullcalendar/packages/daygrid/index.global.js | 258 |
1 files changed, 182 insertions, 76 deletions
diff --git a/library/fullcalendar/packages/daygrid/index.global.js b/library/fullcalendar/packages/daygrid/index.global.js index 58c6a55cf..2f96df948 100644 --- a/library/fullcalendar/packages/daygrid/index.global.js +++ b/library/fullcalendar/packages/daygrid/index.global.js @@ -1,7 +1,7 @@ /*! -FullCalendar Day Grid Plugin v6.0.3 +FullCalendar Day Grid Plugin v6.1.8 Docs & License: https://fullcalendar.io/docs/month-view -(c) 2022 Adam Shaw +(c) 2023 Adam Shaw */ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { 'use strict'; @@ -83,7 +83,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { }); } return (preact.createElement(internal$1.ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec }, - preact.createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections }))); + preact.createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections }))); } } @@ -217,16 +217,25 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { } render() { let { context, props, state, rootElRef } = this; - let { options } = context; + let { options, dateEnv } = context; let { date, dateProfile } = props; + // TODO: memoize this? + const isMonthStart = props.showDayNumber && + shouldDisplayMonthStart(date, dateProfile.currentRange, dateEnv); return (preact.createElement(internal$1.DayCellContainer, { elTag: "td", elRef: this.handleRootEl, elClasses: [ 'fc-daygrid-day', ...(props.extraClassNames || []), - ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (preact.createElement("div", { className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", ref: props.innerElRef }, + ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, isMonthStart: isMonthStart, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (preact.createElement("div", { ref: props.innerElRef, className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", style: { minHeight: props.minHeight } }, props.showWeekNumber && (preact.createElement(internal$1.WeekNumberContainer, { elTag: "a", elClasses: ['fc-daygrid-week-number'], elAttrs: internal$1.buildNavLinkAttrs(context, date, 'week'), date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })), - Boolean(!renderProps.isDisabled && - (props.showDayNumber || internal$1.hasCustomDayCellContent(options) || props.forceDayTop)) && (preact.createElement("div", { className: "fc-daygrid-day-top" }, - preact.createElement(InnerContent, { elTag: "a", elClasses: ['fc-daygrid-day-number'], elAttrs: Object.assign(Object.assign({}, internal$1.buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))), + !renderProps.isDisabled && + (props.showDayNumber || internal$1.hasCustomDayCellContent(options) || props.forceDayTop) ? (preact.createElement("div", { className: "fc-daygrid-day-top" }, + preact.createElement(InnerContent, { elTag: "a", elClasses: [ + 'fc-daygrid-day-number', + isMonthStart && 'fc-daygrid-month-start', + ], elAttrs: Object.assign(Object.assign({}, internal$1.buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))) : props.showDayNumber ? ( + // for creating correct amount of space (see issue #7162) + preact.createElement("div", { className: "fc-daygrid-day-top", style: { visibility: 'hidden' } }, + preact.createElement("a", { className: "fc-daygrid-day-number" }, "\u00A0"))) : undefined, preact.createElement("div", { className: "fc-daygrid-day-events", ref: props.fgContentElRef }, props.fgContent, preact.createElement("div", { className: "fc-daygrid-day-bottom", style: { marginTop: props.moreMarginTop } }, @@ -237,6 +246,21 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { function renderTopInner(props) { return props.dayNumberText || preact.createElement(preact.Fragment, null, "\u00A0"); } + function shouldDisplayMonthStart(date, currentRange, dateEnv) { + const { start: currentStart, end: currentEnd } = currentRange; + const currentEndIncl = internal$1.addMs(currentEnd, -1); + const currentFirstYear = dateEnv.getYear(currentStart); + const currentFirstMonth = dateEnv.getMonth(currentStart); + const currentLastYear = dateEnv.getYear(currentEndIncl); + const currentLastMonth = dateEnv.getMonth(currentEndIncl); + // spans more than one month? + return !(currentFirstYear === currentLastYear && currentFirstMonth === currentLastMonth) && + Boolean( + // first date in current view? + date.valueOf() === currentStart.valueOf() || + // a month-start that's within the current range? + (dateEnv.getDay(date) === 1 && date.valueOf() < currentEnd.valueOf())); + } function computeFgSegPlacement(segs, // assumed already sorted dayMaxEvents, dayMaxEventRows, strictOrder, eventInstanceHeights, maxContentHeight, cells) { @@ -507,7 +531,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { preact.createElement(preact.Fragment, null, this.renderFillSegs(highlightSegsByCol[col], 'highlight'), this.renderFillSegs(businessHoursByCol[col], 'non-business'), - this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))) })); + this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))), minHeight: props.cellMinHeight })); }))); } componentDidMount() { @@ -679,7 +703,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { return topsByInstanceId; } - class Table extends internal$1.DateComponent { + class TableRows extends internal$1.DateComponent { constructor() { super(...arguments); this.splitBusinessHourSegs = internal$1.memoize(splitSegsByRow); @@ -689,22 +713,9 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { this.splitEventDrag = internal$1.memoize(splitInteractionByRow); this.splitEventResize = internal$1.memoize(splitInteractionByRow); this.rowRefs = new internal$1.RefMap(); - this.handleRootEl = (rootEl) => { - this.rootEl = rootEl; - if (rootEl) { - this.context.registerInteractiveComponent(this, { - el: rootEl, - isHitComboAllowed: this.props.isHitComboAllowed, - }); - } - else { - this.context.unregisterInteractiveComponent(this); - } - }; } render() { - let { props } = this; - let { dateProfile, dayMaxEventRows, dayMaxEvents, expandRows } = props; + let { props, context } = this; let rowCnt = props.cells.length; let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt); let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt); @@ -712,36 +723,33 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt); let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt); let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt); - let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true; - // if rows can't expand to fill fixed height, can't do balanced-height event limit - // TODO: best place to normalize these options? - if (limitViaBalanced && !expandRows) { - limitViaBalanced = false; - dayMaxEventRows = null; - dayMaxEvents = null; + // for DayGrid view with many rows, force a min-height on cells so doesn't appear squished + // choose 7 because a month view will have max 6 rows + let cellMinHeight = (rowCnt >= 7 && props.clientWidth) ? + props.clientWidth / context.options.aspectRatio / 6 : + null; + return (preact.createElement(internal$1.NowTimer, { unit: "day" }, (nowDate, todayRange) => (preact.createElement(preact.Fragment, null, props.cells.map((cells, row) => (preact.createElement(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length + ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */ + : row // in case there are no cells (like when resource view is loading) + , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: props.dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, cellMinHeight: cellMinHeight, forPrint: props.forPrint }))))))); + } + componentDidMount() { + // HACK: need a daygrid wrapper parent to do positioning + // NOTE: a daygrid resource view w/o resources can have zero cells + const firstCellEl = this.rowRefs.currentMap[0].getCellEls()[0]; + this.rootEl = firstCellEl ? firstCellEl.closest('.fc-daygrid-body') : null; + if (this.rootEl) { + this.context.registerInteractiveComponent(this, { + el: this.rootEl, + isHitComboAllowed: this.props.isHitComboAllowed, + }); + } + } + componentWillUnmount() { + if (this.rootEl) { + this.context.unregisterInteractiveComponent(this); + this.rootEl = null; } - let classNames = [ - 'fc-daygrid-body', - limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced', - expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others? - ]; - return (preact.createElement("div", { className: classNames.join(' '), ref: this.handleRootEl, style: { - // these props are important to give this wrapper correct dimensions for interactions - // TODO: if we set it here, can we avoid giving to inner tables? - width: props.clientWidth, - minWidth: props.tableMinWidth, - } }, - preact.createElement(internal$1.NowTimer, { unit: "day" }, (nowDate, todayRange) => (preact.createElement(preact.Fragment, null, - preact.createElement("table", { role: "presentation", className: "fc-scrollgrid-sync-table", style: { - width: props.clientWidth, - minWidth: props.tableMinWidth, - height: expandRows ? props.clientHeight : '', - } }, - props.colGroupNode, - preact.createElement("tbody", { role: "presentation" }, props.cells.map((cells, row) => (preact.createElement(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length - ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */ - : row // in case there are no cells (like when resource view is loading) - , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })))))))))); } // Hit System // ---------------------------------------------------------------------------------------------------- @@ -786,6 +794,87 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { return seg.eventRange.def.allDay; } + class Table extends internal$1.DateComponent { + constructor() { + super(...arguments); + this.elRef = preact.createRef(); + this.needsScrollReset = false; + } + render() { + let { props } = this; + let { dayMaxEventRows, dayMaxEvents, expandRows } = props; + let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true; + // if rows can't expand to fill fixed height, can't do balanced-height event limit + // TODO: best place to normalize these options? + if (limitViaBalanced && !expandRows) { + limitViaBalanced = false; + dayMaxEventRows = null; + dayMaxEvents = null; + } + let classNames = [ + 'fc-daygrid-body', + limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced', + expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others? + ]; + return (preact.createElement("div", { ref: this.elRef, className: classNames.join(' '), style: { + // these props are important to give this wrapper correct dimensions for interactions + // TODO: if we set it here, can we avoid giving to inner tables? + width: props.clientWidth, + minWidth: props.tableMinWidth, + } }, + preact.createElement("table", { role: "presentation", className: "fc-scrollgrid-sync-table", style: { + width: props.clientWidth, + minWidth: props.tableMinWidth, + height: expandRows ? props.clientHeight : '', + } }, + props.colGroupNode, + preact.createElement("tbody", { role: "presentation" }, + preact.createElement(TableRows, { dateProfile: props.dateProfile, cells: props.cells, renderRowIntro: props.renderRowIntro, showWeekNumbers: props.showWeekNumbers, clientWidth: props.clientWidth, clientHeight: props.clientHeight, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed }))))); + } + componentDidMount() { + this.requestScrollReset(); + } + componentDidUpdate(prevProps) { + if (prevProps.dateProfile !== this.props.dateProfile) { + this.requestScrollReset(); + } + else { + this.flushScrollReset(); + } + } + requestScrollReset() { + this.needsScrollReset = true; + this.flushScrollReset(); + } + flushScrollReset() { + if (this.needsScrollReset && + this.props.clientWidth // sizes computed? + ) { + const subjectEl = getScrollSubjectEl(this.elRef.current, this.props.dateProfile); + if (subjectEl) { + const originEl = subjectEl.closest('.fc-daygrid-body'); + const scrollEl = originEl.closest('.fc-scroller'); + const scrollTop = subjectEl.getBoundingClientRect().top - + originEl.getBoundingClientRect().top; + scrollEl.scrollTop = scrollTop ? (scrollTop + 1) : 0; // overcome border + } + this.needsScrollReset = false; + } + } + } + function getScrollSubjectEl(containerEl, dateProfile) { + let el; + if (dateProfile.currentRangeUnit.match(/year|month/)) { + el = containerEl.querySelector(`[data-date="${internal$1.formatIsoMonthStr(dateProfile.currentDate)}-01"]`); + // even if view is month-based, first-of-month might be hidden... + } + if (!el) { + el = containerEl.querySelector(`[data-date="${internal$1.formatDayString(dateProfile.currentDate)}"]`); + // could still be hidden if an interior-view hidden day + } + return el; + } + class DayTableSlicer extends internal$1.Slicer { constructor() { super(...arguments); @@ -814,6 +903,7 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { this.buildDayTableModel = internal$1.memoize(buildDayTableModel); this.headerRef = preact.createRef(); this.tableRef = preact.createRef(); + // can't override any lifecycle methods from parent } render() { let { options, dateProfileGenerator } = this.context; @@ -832,34 +922,44 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { } class TableDateProfileGenerator extends internal$1.DateProfileGenerator { - // Computes the date range that will be rendered. + // Computes the date range that will be rendered buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) { - let { dateEnv } = this.props; let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay); - let start = renderRange.start; - let end = renderRange.end; - let endOfWeek; - // year and month views should be aligned with weeks. this is already done for week - if (/^(year|month)$/.test(currentRangeUnit)) { - start = dateEnv.startOfWeek(start); - // make end-of-week if not already - endOfWeek = dateEnv.startOfWeek(end); - if (endOfWeek.valueOf() !== end.valueOf()) { - end = internal$1.addWeeks(endOfWeek, 1); - } - } - // ensure 6 weeks - if (this.props.monthMode && - this.props.fixedWeekCount) { - let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays - internal$1.diffWeeks(start, end)); - end = internal$1.addWeeks(end, 6 - rowCnt); + let { props } = this; + return buildDayTableRenderRange({ + currentRange: renderRange, + snapToWeek: /^(year|month)$/.test(currentRangeUnit), + fixedWeekCount: props.fixedWeekCount, + dateEnv: props.dateEnv, + }); + } + } + function buildDayTableRenderRange(props) { + let { dateEnv, currentRange } = props; + let { start, end } = currentRange; + let endOfWeek; + // year and month views should be aligned with weeks. this is already done for week + if (props.snapToWeek) { + start = dateEnv.startOfWeek(start); + // make end-of-week if not already + endOfWeek = dateEnv.startOfWeek(end); + if (endOfWeek.valueOf() !== end.valueOf()) { + end = internal$1.addWeeks(endOfWeek, 1); } - return { start, end }; } + // ensure 6 weeks + if (props.fixedWeekCount) { + // TODO: instead of these date-math gymnastics (for multimonth view), + // compute dateprofiles of all months, then use start of first and end of last. + let lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(internal$1.addDays(currentRange.end, -1))); + let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays + internal$1.diffWeeks(lastMonthRenderStart, end)); + end = internal$1.addWeeks(end, 6 - rowCnt); + } + return { start, end }; } - var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;padding:2px 3px 0}.fc .fc-daygrid-day-bottom:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-more-link{cursor:pointer;position:relative;z-index:4}.fc .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:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.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-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.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;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.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-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}"; + var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .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:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.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-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.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;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.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-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}"; internal$1.injectStyles(css_248z); var plugin = core.createPlugin({ @@ -881,9 +981,12 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { dayGridMonth: { type: 'dayGrid', duration: { months: 1 }, - monthMode: true, fixedWeekCount: true, }, + dayGridYear: { + type: 'dayGrid', + duration: { years: 1 }, + }, }, }); @@ -891,7 +994,10 @@ FullCalendar.DayGrid = (function (exports, core, internal$1, preact) { __proto__: null, DayTable: DayTable, DayTableSlicer: DayTableSlicer, + TableDateProfileGenerator: TableDateProfileGenerator, + buildDayTableRenderRange: buildDayTableRenderRange, Table: Table, + TableRows: TableRows, TableView: TableView, buildDayTableModel: buildDayTableModel, DayGridView: DayTableView |