@zealicsolutions/web-ui 1.0.60-test.2 → 1.0.60-test.4

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.
Files changed (32) hide show
  1. package/dist/cjs/index.js +247 -247
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/molecules/Calendar/CalendarMolecule.d.ts +0 -7
  4. package/dist/cjs/molecules/Calendar/ResourceTimelineCalendar.d.ts +95 -2
  5. package/dist/cjs/molecules/Calendar/SimpleCalendar.d.ts +98 -2
  6. package/dist/cjs/molecules/Calendar/YearViewCalendar.d.ts +84 -2
  7. package/dist/cjs/molecules/Calendar/hooks/useCalendarCore.d.ts +14 -0
  8. package/dist/cjs/molecules/Calendar/hooks/useCalendarStyling.d.ts +229 -0
  9. package/dist/esm/molecules/Calendar/CalendarMolecule.d.ts +0 -7
  10. package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.d.ts +95 -2
  11. package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.js +1 -1
  12. package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.js.map +1 -1
  13. package/dist/esm/molecules/Calendar/SimpleCalendar.d.ts +98 -2
  14. package/dist/esm/molecules/Calendar/SimpleCalendar.js +1 -1
  15. package/dist/esm/molecules/Calendar/SimpleCalendar.js.map +1 -1
  16. package/dist/esm/molecules/Calendar/YearViewCalendar.d.ts +84 -2
  17. package/dist/esm/molecules/Calendar/YearViewCalendar.js +1 -1
  18. package/dist/esm/molecules/Calendar/YearViewCalendar.js.map +1 -1
  19. package/dist/esm/molecules/Calendar/hooks/useCalendarCore.d.ts +14 -0
  20. package/dist/esm/molecules/Calendar/hooks/useCalendarCore.js +2 -0
  21. package/dist/esm/molecules/Calendar/hooks/useCalendarCore.js.map +1 -0
  22. package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.d.ts +229 -0
  23. package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.js +2 -0
  24. package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.js.map +1 -0
  25. package/dist/esm/node_modules/@fullcalendar/premium-common/index.js +1 -1
  26. package/dist/esm/node_modules/@fullcalendar/premium-common/index.js.map +1 -1
  27. package/dist/esm/node_modules/@fullcalendar/timeline/internal.js +1 -1
  28. package/dist/esm/node_modules/@fullcalendar/timeline/internal.js.map +1 -1
  29. package/dist/index.d.ts +0 -7
  30. package/package.json +1 -1
  31. package/dist/esm/molecules/Calendar/CalendarMolecule.js +0 -2
  32. package/dist/esm/molecules/Calendar/CalendarMolecule.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sources":["../../../../../node_modules/@fullcalendar/timeline/internal.js"],"sourcesContent":["import { injectStyles, config, createFormatter, greatestDurationDenominator, asCleanDays, createDuration, wholeDivideDurations, asRoughMs, addDays, startOfDay, asRoughSeconds, asRoughMinutes, diffWholeDays, isInt, computeVisibleDayRange, padStart, BaseComponent, memoizeObjArg, memoize, getDateMeta, ContentContainer, getSlotClassNames, getDayClassNames, buildNavLinkAttrs, PositionCache, findDirectChildren, rangeContainsMarker, NowTimer, NowIndicatorContainer, findElements, RefMap, multiplyDuration, SegHierarchy, groupIntersectingEntries, buildIsoString, computeEarliestSegStart, buildEventRangeKey, BgEvent, getSegMeta, renderFill, Slicer, intersectRanges, addMs, StandardEvent, MoreLinkContainer, sortEventSegs, mapHash, isPropsEqual, DateComponent, getStickyHeaderDates, getStickyFooterScrollbar, ViewContainer, renderScrollShim } from '@fullcalendar/core/internal.js';\nimport { createElement, Fragment, createRef } from '@fullcalendar/core/preact.js';\nimport { ScrollGrid } from '@fullcalendar/scrollgrid/internal.js';\n\nvar css_248z = \".fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;pointer-events:none;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:\\\"\\\";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}\";\ninjectStyles(css_248z);\n\nconst MIN_AUTO_LABELS = 18; // more than `12` months but less that `24` hours\nconst MAX_AUTO_SLOTS_PER_LABEL = 6; // allows 6 10-min slots in an hour\nconst MAX_AUTO_CELLS = 200; // allows 4-days to have a :30 slot duration\nconfig.MAX_TIMELINE_SLOTS = 1000;\n// potential nice values for slot-duration and interval-duration\nconst STOCK_SUB_DURATIONS = [\n { years: 1 },\n { months: 1 },\n { days: 1 },\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { minutes: 10 },\n { minutes: 5 },\n { minutes: 1 },\n { seconds: 30 },\n { seconds: 15 },\n { seconds: 10 },\n { seconds: 5 },\n { seconds: 1 },\n { milliseconds: 500 },\n { milliseconds: 100 },\n { milliseconds: 10 },\n { milliseconds: 1 },\n];\nfunction buildTimelineDateProfile(dateProfile, dateEnv, allOptions, dateProfileGenerator) {\n let tDateProfile = {\n labelInterval: allOptions.slotLabelInterval,\n slotDuration: allOptions.slotDuration,\n };\n validateLabelAndSlot(tDateProfile, dateProfile, dateEnv); // validate after computed grid duration\n ensureLabelInterval(tDateProfile, dateProfile, dateEnv);\n ensureSlotDuration(tDateProfile, dateProfile, dateEnv);\n let input = allOptions.slotLabelFormat;\n let rawFormats = Array.isArray(input) ? input :\n (input != null) ? [input] :\n computeHeaderFormats(tDateProfile, dateProfile, dateEnv, allOptions);\n tDateProfile.headerFormats = rawFormats.map((rawFormat) => createFormatter(rawFormat));\n tDateProfile.isTimeScale = Boolean(tDateProfile.slotDuration.milliseconds);\n let largeUnit = null;\n if (!tDateProfile.isTimeScale) {\n const slotUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit;\n if (/year|month|week/.test(slotUnit)) {\n largeUnit = slotUnit;\n }\n }\n tDateProfile.largeUnit = largeUnit;\n tDateProfile.emphasizeWeeks =\n asCleanDays(tDateProfile.slotDuration) === 1 &&\n currentRangeAs('weeks', dateProfile, dateEnv) >= 2 &&\n !allOptions.businessHours;\n /*\n console.log('label interval =', timelineView.labelInterval.humanize())\n console.log('slot duration =', timelineView.slotDuration.humanize())\n console.log('header formats =', timelineView.headerFormats)\n console.log('isTimeScale', timelineView.isTimeScale)\n console.log('largeUnit', timelineView.largeUnit)\n */\n let rawSnapDuration = allOptions.snapDuration;\n let snapDuration;\n let snapsPerSlot;\n if (rawSnapDuration) {\n snapDuration = createDuration(rawSnapDuration);\n snapsPerSlot = wholeDivideDurations(tDateProfile.slotDuration, snapDuration);\n // ^ TODO: warning if not whole?\n }\n if (snapsPerSlot == null) {\n snapDuration = tDateProfile.slotDuration;\n snapsPerSlot = 1;\n }\n tDateProfile.snapDuration = snapDuration;\n tDateProfile.snapsPerSlot = snapsPerSlot;\n // more...\n let timeWindowMs = asRoughMs(dateProfile.slotMaxTime) - asRoughMs(dateProfile.slotMinTime);\n // TODO: why not use normalizeRange!?\n let normalizedStart = normalizeDate(dateProfile.renderRange.start, tDateProfile, dateEnv);\n let normalizedEnd = normalizeDate(dateProfile.renderRange.end, tDateProfile, dateEnv);\n // apply slotMinTime/slotMaxTime\n // TODO: View should be responsible.\n if (tDateProfile.isTimeScale) {\n normalizedStart = dateEnv.add(normalizedStart, dateProfile.slotMinTime);\n normalizedEnd = dateEnv.add(addDays(normalizedEnd, -1), dateProfile.slotMaxTime);\n }\n tDateProfile.timeWindowMs = timeWindowMs;\n tDateProfile.normalizedRange = { start: normalizedStart, end: normalizedEnd };\n let slotDates = [];\n let date = normalizedStart;\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n slotDates.push(date);\n }\n date = dateEnv.add(date, tDateProfile.slotDuration);\n }\n tDateProfile.slotDates = slotDates;\n // more...\n let snapIndex = -1;\n let snapDiff = 0; // index of the diff :(\n const snapDiffToIndex = [];\n const snapIndexToDiff = [];\n date = normalizedStart;\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n snapIndex += 1;\n snapDiffToIndex.push(snapIndex);\n snapIndexToDiff.push(snapDiff);\n }\n else {\n snapDiffToIndex.push(snapIndex + 0.5);\n }\n date = dateEnv.add(date, tDateProfile.snapDuration);\n snapDiff += 1;\n }\n tDateProfile.snapDiffToIndex = snapDiffToIndex;\n tDateProfile.snapIndexToDiff = snapIndexToDiff;\n tDateProfile.snapCnt = snapIndex + 1; // is always one behind\n tDateProfile.slotCnt = tDateProfile.snapCnt / tDateProfile.snapsPerSlot;\n // more...\n tDateProfile.isWeekStarts = buildIsWeekStarts(tDateProfile, dateEnv);\n tDateProfile.cellRows = buildCellRows(tDateProfile, dateEnv);\n tDateProfile.slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);\n return tDateProfile;\n}\n/*\nsnaps to appropriate unit\n*/\nfunction normalizeDate(date, tDateProfile, dateEnv) {\n let normalDate = date;\n if (!tDateProfile.isTimeScale) {\n normalDate = startOfDay(normalDate);\n if (tDateProfile.largeUnit) {\n normalDate = dateEnv.startOf(normalDate, tDateProfile.largeUnit);\n }\n }\n return normalDate;\n}\n/*\nsnaps to appropriate unit\n*/\nfunction normalizeRange(range, tDateProfile, dateEnv) {\n if (!tDateProfile.isTimeScale) {\n range = computeVisibleDayRange(range);\n if (tDateProfile.largeUnit) {\n let dayRange = range; // preserve original result\n range = {\n start: dateEnv.startOf(range.start, tDateProfile.largeUnit),\n end: dateEnv.startOf(range.end, tDateProfile.largeUnit),\n };\n // if date is partially through the interval, or is in the same interval as the start,\n // make the exclusive end be the *next* interval\n if (range.end.valueOf() !== dayRange.end.valueOf() || range.end <= range.start) {\n range = {\n start: range.start,\n end: dateEnv.add(range.end, tDateProfile.slotDuration),\n };\n }\n }\n }\n return range;\n}\nfunction isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator) {\n if (dateProfileGenerator.isHiddenDay(date)) {\n return false;\n }\n if (tDateProfile.isTimeScale) {\n // determine if the time is within slotMinTime/slotMaxTime, which may have wacky values\n let day = startOfDay(date);\n let timeMs = date.valueOf() - day.valueOf();\n let ms = timeMs - asRoughMs(dateProfile.slotMinTime); // milliseconds since slotMinTime\n ms = ((ms % 86400000) + 86400000) % 86400000; // make negative values wrap to 24hr clock\n return ms < tDateProfile.timeWindowMs; // before the slotMaxTime?\n }\n return true;\n}\nfunction validateLabelAndSlot(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n // make sure labelInterval doesn't exceed the max number of cells\n if (tDateProfile.labelInterval) {\n const labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.labelInterval);\n if (labelCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotLabelInterval results in too many cells');\n tDateProfile.labelInterval = null;\n }\n }\n // make sure slotDuration doesn't exceed the maximum number of cells\n if (tDateProfile.slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.slotDuration);\n if (slotCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotDuration results in too many cells');\n tDateProfile.slotDuration = null;\n }\n }\n // make sure labelInterval is a multiple of slotDuration\n if (tDateProfile.labelInterval && tDateProfile.slotDuration) {\n const slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);\n if (slotsPerLabel === null || slotsPerLabel < 1) {\n console.warn('slotLabelInterval must be a multiple of slotDuration');\n tDateProfile.slotDuration = null;\n }\n }\n}\nfunction ensureLabelInterval(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n let { labelInterval } = tDateProfile;\n if (!labelInterval) {\n // compute based off the slot duration\n // find the largest label interval with an acceptable slots-per-label\n let input;\n if (tDateProfile.slotDuration) {\n for (input of STOCK_SUB_DURATIONS) {\n const tryLabelInterval = createDuration(input);\n const slotsPerLabel = wholeDivideDurations(tryLabelInterval, tDateProfile.slotDuration);\n if (slotsPerLabel !== null && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n labelInterval = tryLabelInterval;\n break;\n }\n }\n // use the slot duration as a last resort\n if (!labelInterval) {\n labelInterval = tDateProfile.slotDuration;\n }\n // compute based off the view's duration\n // find the largest label interval that yields the minimum number of labels\n }\n else {\n for (input of STOCK_SUB_DURATIONS) {\n labelInterval = createDuration(input);\n const labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, labelInterval);\n if (labelCnt >= MIN_AUTO_LABELS) {\n break;\n }\n }\n }\n tDateProfile.labelInterval = labelInterval;\n }\n return labelInterval;\n}\nfunction ensureSlotDuration(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n let { slotDuration } = tDateProfile;\n if (!slotDuration) {\n const labelInterval = ensureLabelInterval(tDateProfile, dateProfile, dateEnv); // will compute if necessary\n // compute based off the label interval\n // find the largest slot duration that is different from labelInterval, but still acceptable\n for (let input of STOCK_SUB_DURATIONS) {\n const trySlotDuration = createDuration(input);\n const slotsPerLabel = wholeDivideDurations(labelInterval, trySlotDuration);\n if (slotsPerLabel !== null && slotsPerLabel > 1 && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n slotDuration = trySlotDuration;\n break;\n }\n }\n // only allow the value if it won't exceed the view's # of slots limit\n if (slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, slotDuration);\n if (slotCnt > MAX_AUTO_CELLS) {\n slotDuration = null;\n }\n }\n // use the label interval as a last resort\n if (!slotDuration) {\n slotDuration = labelInterval;\n }\n tDateProfile.slotDuration = slotDuration;\n }\n return slotDuration;\n}\nfunction computeHeaderFormats(tDateProfile, dateProfile, dateEnv, allOptions) {\n let format1;\n let format2;\n const { labelInterval } = tDateProfile;\n let unit = greatestDurationDenominator(labelInterval).unit;\n const weekNumbersVisible = allOptions.weekNumbers;\n let format0 = (format1 = (format2 = null));\n // NOTE: weekNumber computation function wont work\n if ((unit === 'week') && !weekNumbersVisible) {\n unit = 'day';\n }\n switch (unit) {\n case 'year':\n format0 = { year: 'numeric' }; // '2015'\n break;\n case 'month':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' }; // '2015'\n }\n format1 = { month: 'short' }; // 'Jan'\n break;\n case 'week':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' }; // '2015'\n }\n format1 = { week: 'narrow' }; // 'Wk4'\n break;\n case 'day':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric', month: 'long' }; // 'January 2014'\n }\n else if (currentRangeAs('months', dateProfile, dateEnv) > 1) {\n format0 = { month: 'long' }; // 'January'\n }\n if (weekNumbersVisible) {\n format1 = { week: 'short' }; // 'Wk 4'\n }\n format2 = { weekday: 'narrow', day: 'numeric' }; // 'Su 9'\n break;\n case 'hour':\n if (weekNumbersVisible) {\n format0 = { week: 'short' }; // 'Wk 4'\n }\n if (currentRangeAs('days', dateProfile, dateEnv) > 1) {\n format1 = { weekday: 'short', day: 'numeric', month: 'numeric', omitCommas: true }; // Sat 4/7\n }\n format2 = {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n };\n break;\n case 'minute':\n // sufficiently large number of different minute cells?\n if ((asRoughMinutes(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = {\n hour: 'numeric',\n meridiem: 'short',\n };\n format1 = (params) => (':' + padStart(params.date.minute, 2) // ':30'\n );\n }\n else {\n format0 = {\n hour: 'numeric',\n minute: 'numeric',\n meridiem: 'short',\n };\n }\n break;\n case 'second':\n // sufficiently large number of different second cells?\n if ((asRoughSeconds(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = { hour: 'numeric', minute: '2-digit', meridiem: 'lowercase' }; // '8:30 PM'\n format1 = (params) => (':' + padStart(params.date.second, 2) // ':30'\n );\n }\n else {\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'\n }\n break;\n case 'millisecond':\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'\n format1 = (params) => ('.' + padStart(params.millisecond, 3));\n break;\n }\n return [].concat(format0 || [], format1 || [], format2 || []);\n}\n// Compute the number of the give units in the \"current\" range.\n// Won't go more precise than days.\n// Will return `0` if there's not a clean whole interval.\nfunction currentRangeAs(unit, dateProfile, dateEnv) {\n let range = dateProfile.currentRange;\n let res = null;\n if (unit === 'years') {\n res = dateEnv.diffWholeYears(range.start, range.end);\n }\n else if (unit === 'months') {\n res = dateEnv.diffWholeMonths(range.start, range.end);\n }\n else if (unit === 'weeks') {\n res = dateEnv.diffWholeMonths(range.start, range.end);\n }\n else if (unit === 'days') {\n res = diffWholeDays(range.start, range.end);\n }\n return res || 0;\n}\nfunction buildIsWeekStarts(tDateProfile, dateEnv) {\n let { slotDates, emphasizeWeeks } = tDateProfile;\n let prevWeekNumber = null;\n let isWeekStarts = [];\n for (let slotDate of slotDates) {\n let weekNumber = dateEnv.computeWeekNumber(slotDate);\n let isWeekStart = emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber);\n prevWeekNumber = weekNumber;\n isWeekStarts.push(isWeekStart);\n }\n return isWeekStarts;\n}\nfunction buildCellRows(tDateProfile, dateEnv) {\n let slotDates = tDateProfile.slotDates;\n let formats = tDateProfile.headerFormats;\n let cellRows = formats.map(() => []); // indexed by row,col\n let slotAsDays = asCleanDays(tDateProfile.slotDuration);\n let guessedSlotUnit = slotAsDays === 7 ? 'week' :\n slotAsDays === 1 ? 'day' :\n null;\n // specifically for navclicks\n let rowUnitsFromFormats = formats.map((format) => (format.getSmallestUnit ? format.getSmallestUnit() : null));\n // builds cellRows and slotCells\n for (let i = 0; i < slotDates.length; i += 1) {\n let date = slotDates[i];\n let isWeekStart = tDateProfile.isWeekStarts[i];\n for (let row = 0; row < formats.length; row += 1) {\n let format = formats[row];\n let rowCells = cellRows[row];\n let leadingCell = rowCells[rowCells.length - 1];\n let isLastRow = row === formats.length - 1;\n let isSuperRow = formats.length > 1 && !isLastRow; // more than one row and not the last\n let newCell = null;\n let rowUnit = rowUnitsFromFormats[row] || (isLastRow ? guessedSlotUnit : null);\n if (isSuperRow) {\n let text = dateEnv.format(date, format);\n if (!leadingCell || (leadingCell.text !== text)) {\n newCell = buildCellObject(date, text, rowUnit);\n }\n else {\n leadingCell.colspan += 1;\n }\n }\n else if (!leadingCell ||\n isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.labelInterval))) {\n let text = dateEnv.format(date, format);\n newCell = buildCellObject(date, text, rowUnit);\n }\n else {\n leadingCell.colspan += 1;\n }\n if (newCell) {\n newCell.weekStart = isWeekStart;\n rowCells.push(newCell);\n }\n }\n }\n return cellRows;\n}\nfunction buildCellObject(date, text, rowUnit) {\n return { date, text, rowUnit, colspan: 1, isWeekStart: false };\n}\n\nclass TimelineHeaderTh extends BaseComponent {\n constructor() {\n super(...arguments);\n this.refineRenderProps = memoizeObjArg(refineRenderProps);\n this.buildCellNavLinkAttrs = memoize(buildCellNavLinkAttrs);\n }\n render() {\n let { props, context } = this;\n let { dateEnv, options } = context;\n let { cell, dateProfile, tDateProfile } = props;\n // the cell.rowUnit is f'd\n // giving 'month' for a 3-day view\n // workaround: to infer day, do NOT time\n let dateMeta = getDateMeta(cell.date, props.todayRange, props.nowDate, dateProfile);\n let renderProps = this.refineRenderProps({\n level: props.rowLevel,\n dateMarker: cell.date,\n text: cell.text,\n dateEnv: context.dateEnv,\n viewApi: context.viewApi,\n });\n return (createElement(ContentContainer, { elTag: \"th\", elClasses: [\n 'fc-timeline-slot',\n 'fc-timeline-slot-label',\n cell.isWeekStart && 'fc-timeline-slot-em',\n ...( // TODO: so slot classnames for week/month/bigger. see note above about rowUnit\n cell.rowUnit === 'time' ?\n getSlotClassNames(dateMeta, context.theme) :\n getDayClassNames(dateMeta, context.theme)),\n ], elAttrs: {\n colSpan: cell.colspan,\n 'data-date': dateEnv.formatIso(cell.date, {\n omitTime: !tDateProfile.isTimeScale,\n omitTimeZoneOffset: true,\n }),\n }, renderProps: renderProps, generatorName: \"slotLabelContent\", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (createElement(\"div\", { className: \"fc-timeline-slot-frame\", style: { height: props.rowInnerHeight } },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-timeline-slot-cushion',\n 'fc-scrollgrid-sync-inner',\n props.isSticky && 'fc-sticky',\n ], elAttrs: this.buildCellNavLinkAttrs(context, cell.date, cell.rowUnit) })))));\n }\n}\nfunction buildCellNavLinkAttrs(context, cellDate, rowUnit) {\n return (rowUnit && rowUnit !== 'time')\n ? buildNavLinkAttrs(context, cellDate, rowUnit)\n : {};\n}\nfunction renderInnerContent(renderProps) {\n return renderProps.text;\n}\nfunction refineRenderProps(input) {\n return {\n level: input.level,\n date: input.dateEnv.toDate(input.dateMarker),\n view: input.viewApi,\n text: input.text,\n };\n}\n\nclass TimelineHeaderRows extends BaseComponent {\n render() {\n let { dateProfile, tDateProfile, rowInnerHeights, todayRange, nowDate } = this.props;\n let { cellRows } = tDateProfile;\n return (createElement(Fragment, null, cellRows.map((rowCells, rowLevel) => {\n let isLast = rowLevel === cellRows.length - 1;\n let isChrono = tDateProfile.isTimeScale && isLast; // the final row, with times?\n let classNames = [\n 'fc-timeline-header-row',\n isChrono ? 'fc-timeline-header-row-chrono' : '',\n ];\n return ( // eslint-disable-next-line react/no-array-index-key\n createElement(\"tr\", { key: rowLevel, className: classNames.join(' ') }, rowCells.map((cell) => (createElement(TimelineHeaderTh, { key: cell.date.toISOString(), cell: cell, rowLevel: rowLevel, dateProfile: dateProfile, tDateProfile: tDateProfile, todayRange: todayRange, nowDate: nowDate, rowInnerHeight: rowInnerHeights && rowInnerHeights[rowLevel], isSticky: !isLast })))));\n })));\n }\n}\n\nclass TimelineCoords {\n constructor(slatRootEl, // okay to expose?\n slatEls, dateProfile, tDateProfile, dateEnv, isRtl) {\n this.slatRootEl = slatRootEl;\n this.dateProfile = dateProfile;\n this.tDateProfile = tDateProfile;\n this.dateEnv = dateEnv;\n this.isRtl = isRtl;\n this.outerCoordCache = new PositionCache(slatRootEl, slatEls, true, // isHorizontal\n false);\n // for the inner divs within the slats\n // used for event rendering and scrollTime, to disregard slat border\n this.innerCoordCache = new PositionCache(slatRootEl, findDirectChildren(slatEls, 'div'), true, // isHorizontal\n false);\n }\n isDateInRange(date) {\n return rangeContainsMarker(this.dateProfile.currentRange, date);\n }\n // results range from negative width of area to 0\n dateToCoord(date) {\n let { tDateProfile } = this;\n let snapCoverage = this.computeDateSnapCoverage(date);\n let slotCoverage = snapCoverage / tDateProfile.snapsPerSlot;\n let slotIndex = Math.floor(slotCoverage);\n slotIndex = Math.min(slotIndex, tDateProfile.slotCnt - 1);\n let partial = slotCoverage - slotIndex;\n let { innerCoordCache, outerCoordCache } = this;\n if (this.isRtl) {\n return outerCoordCache.originClientRect.width - (outerCoordCache.rights[slotIndex] -\n (innerCoordCache.getWidth(slotIndex) * partial));\n }\n return (outerCoordCache.lefts[slotIndex] +\n (innerCoordCache.getWidth(slotIndex) * partial));\n }\n rangeToCoords(range) {\n return {\n start: this.dateToCoord(range.start),\n end: this.dateToCoord(range.end),\n };\n }\n durationToCoord(duration) {\n let { dateProfile, tDateProfile, dateEnv, isRtl } = this;\n let coord = 0;\n if (dateProfile) {\n let date = dateEnv.add(dateProfile.activeRange.start, duration);\n if (!tDateProfile.isTimeScale) {\n date = startOfDay(date);\n }\n coord = this.dateToCoord(date);\n // hack to overcome the left borders of non-first slat\n if (!isRtl && coord) {\n coord += 1;\n }\n }\n return coord;\n }\n coordFromLeft(coord) {\n if (this.isRtl) {\n return this.outerCoordCache.originClientRect.width - coord;\n }\n return coord;\n }\n // returned value is between 0 and the number of snaps\n computeDateSnapCoverage(date) {\n return computeDateSnapCoverage(date, this.tDateProfile, this.dateEnv);\n }\n}\n// returned value is between 0 and the number of snaps\nfunction computeDateSnapCoverage(date, tDateProfile, dateEnv) {\n let snapDiff = dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.snapDuration);\n if (snapDiff < 0) {\n return 0;\n }\n if (snapDiff >= tDateProfile.snapDiffToIndex.length) {\n return tDateProfile.snapCnt;\n }\n let snapDiffInt = Math.floor(snapDiff);\n let snapCoverage = tDateProfile.snapDiffToIndex[snapDiffInt];\n if (isInt(snapCoverage)) { // not an in-between value\n snapCoverage += snapDiff - snapDiffInt; // add the remainder\n }\n else {\n // a fractional value, meaning the date is not visible\n // always round up in this case. works for start AND end dates in a range.\n snapCoverage = Math.ceil(snapCoverage);\n }\n return snapCoverage;\n}\nfunction coordToCss(hcoord, isRtl) {\n if (hcoord === null) {\n return { left: '', right: '' };\n }\n if (isRtl) {\n return { right: hcoord, left: '' };\n }\n return { left: hcoord, right: '' };\n}\nfunction coordsToCss(hcoords, isRtl) {\n if (!hcoords) {\n return { left: '', right: '' };\n }\n if (isRtl) {\n return { right: hcoords.start, left: -hcoords.end };\n }\n return { left: hcoords.start, right: -hcoords.end };\n}\n\nclass TimelineHeader extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n }\n render() {\n let { props, context } = this;\n // TODO: very repetitive\n // TODO: make part of tDateProfile?\n let timerUnit = greatestDurationDenominator(props.tDateProfile.slotDuration).unit;\n // WORKAROUND: make ignore slatCoords when out of sync with dateProfile\n let slatCoords = props.slatCoords && props.slatCoords.dateProfile === props.dateProfile ? props.slatCoords : null;\n return (createElement(NowTimer, { unit: timerUnit }, (nowDate, todayRange) => (createElement(\"div\", { className: \"fc-timeline-header\", ref: this.rootElRef },\n createElement(\"table\", { \"aria-hidden\": true, className: \"fc-scrollgrid-sync-table\", style: { minWidth: props.tableMinWidth, width: props.clientWidth } },\n props.tableColGroupNode,\n createElement(\"tbody\", null,\n createElement(TimelineHeaderRows, { dateProfile: props.dateProfile, tDateProfile: props.tDateProfile, nowDate: nowDate, todayRange: todayRange, rowInnerHeights: props.rowInnerHeights }))),\n context.options.nowIndicator && (\n // need to have a container regardless of whether the current view has a visible now indicator\n // because apparently removal of the element resets the scroll for some reasons (issue #5351).\n // this issue doesn't happen for the timeline body however (\n createElement(\"div\", { className: \"fc-timeline-now-indicator-container\" }, (slatCoords && slatCoords.isDateInRange(nowDate)) && (createElement(NowIndicatorContainer, { elClasses: ['fc-timeline-now-indicator-arrow'], elStyle: coordToCss(slatCoords.dateToCoord(nowDate), context.isRtl), isAxis: true, date: nowDate }))))))));\n }\n componentDidMount() {\n this.updateSize();\n }\n componentDidUpdate() {\n this.updateSize();\n }\n updateSize() {\n if (this.props.onMaxCushionWidth) {\n this.props.onMaxCushionWidth(this.computeMaxCushionWidth());\n }\n }\n computeMaxCushionWidth() {\n return Math.max(...findElements(this.rootElRef.current, '.fc-timeline-header-row:last-child .fc-timeline-slot-cushion').map((el) => el.getBoundingClientRect().width));\n }\n}\n\nclass TimelineSlatCell extends BaseComponent {\n render() {\n let { props, context } = this;\n let { dateEnv, options, theme } = context;\n let { date, tDateProfile, isEm } = props;\n let dateMeta = getDateMeta(props.date, props.todayRange, props.nowDate, props.dateProfile);\n let renderProps = Object.assign(Object.assign({ date: dateEnv.toDate(props.date) }, dateMeta), { view: context.viewApi });\n return (createElement(ContentContainer, { elTag: \"td\", elRef: props.elRef, elClasses: [\n 'fc-timeline-slot',\n 'fc-timeline-slot-lane',\n isEm && 'fc-timeline-slot-em',\n tDateProfile.isTimeScale ? (isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, props.date, tDateProfile.labelInterval)) ?\n 'fc-timeline-slot-major' :\n 'fc-timeline-slot-minor') : '',\n ...(props.isDay ?\n getDayClassNames(dateMeta, theme) :\n getSlotClassNames(dateMeta, theme)),\n ], elAttrs: {\n 'data-date': dateEnv.formatIso(date, {\n omitTimeZoneOffset: true,\n omitTime: !tDateProfile.isTimeScale,\n }),\n }, renderProps: renderProps, generatorName: \"slotLaneContent\", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\" }))));\n }\n}\n\nclass TimelineSlatsBody extends BaseComponent {\n render() {\n let { props } = this;\n let { tDateProfile, cellElRefs } = props;\n let { slotDates, isWeekStarts } = tDateProfile;\n let isDay = !tDateProfile.isTimeScale && !tDateProfile.largeUnit;\n return (createElement(\"tbody\", null,\n createElement(\"tr\", null, slotDates.map((slotDate, i) => {\n let key = slotDate.toISOString();\n return (createElement(TimelineSlatCell, { key: key, elRef: cellElRefs.createRef(key), date: slotDate, dateProfile: props.dateProfile, tDateProfile: tDateProfile, nowDate: props.nowDate, todayRange: props.todayRange, isEm: isWeekStarts[i], isDay: isDay }));\n }))));\n }\n}\n\nclass TimelineSlats extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n this.cellElRefs = new RefMap();\n this.handleScrollRequest = (request) => {\n let { onScrollLeftRequest } = this.props;\n let { coords } = this;\n if (onScrollLeftRequest && coords) {\n if (request.time) {\n let scrollLeft = coords.coordFromLeft(coords.durationToCoord(request.time));\n onScrollLeftRequest(scrollLeft);\n }\n return true;\n }\n return null; // best?\n };\n }\n render() {\n let { props, context } = this;\n return (createElement(\"div\", { className: \"fc-timeline-slots\", ref: this.rootElRef },\n createElement(\"table\", { \"aria-hidden\": true, className: context.theme.getClass('table'), style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n } },\n props.tableColGroupNode,\n createElement(TimelineSlatsBody, { cellElRefs: this.cellElRefs, dateProfile: props.dateProfile, tDateProfile: props.tDateProfile, nowDate: props.nowDate, todayRange: props.todayRange }))));\n }\n componentDidMount() {\n this.updateSizing();\n this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);\n }\n componentDidUpdate(prevProps) {\n this.updateSizing();\n this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);\n }\n componentWillUnmount() {\n this.scrollResponder.detach();\n if (this.props.onCoords) {\n this.props.onCoords(null);\n }\n }\n updateSizing() {\n let { props, context } = this;\n if (props.clientWidth !== null && // is sizing stable?\n this.scrollResponder\n // ^it's possible to have clientWidth immediately after mount (when returning from print view), but w/o scrollResponder\n ) {\n let rootEl = this.rootElRef.current;\n if (rootEl.offsetWidth) { // not hidden by css\n this.coords = new TimelineCoords(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.tDateProfile.slotDates), props.dateProfile, props.tDateProfile, context.dateEnv, context.isRtl);\n if (props.onCoords) {\n props.onCoords(this.coords);\n }\n this.scrollResponder.update(false); // TODO: wouldn't have to do this if coords were in state\n }\n }\n }\n positionToHit(leftPosition) {\n let { outerCoordCache } = this.coords;\n let { dateEnv, isRtl } = this.context;\n let { tDateProfile } = this.props;\n let slatIndex = outerCoordCache.leftToIndex(leftPosition);\n if (slatIndex != null) {\n // somewhat similar to what TimeGrid does. consolidate?\n let slatWidth = outerCoordCache.getWidth(slatIndex);\n let partial = isRtl ?\n (outerCoordCache.rights[slatIndex] - leftPosition) / slatWidth :\n (leftPosition - outerCoordCache.lefts[slatIndex]) / slatWidth;\n let localSnapIndex = Math.floor(partial * tDateProfile.snapsPerSlot);\n let start = dateEnv.add(tDateProfile.slotDates[slatIndex], multiplyDuration(tDateProfile.snapDuration, localSnapIndex));\n let end = dateEnv.add(start, tDateProfile.snapDuration);\n return {\n dateSpan: {\n range: { start, end },\n allDay: !this.props.tDateProfile.isTimeScale,\n },\n dayEl: this.cellElRefs.currentMap[slatIndex],\n left: outerCoordCache.lefts[slatIndex],\n right: outerCoordCache.rights[slatIndex],\n };\n }\n return null;\n }\n}\nfunction collectCellEls(elMap, slotDates) {\n return slotDates.map((slotDate) => {\n let key = slotDate.toISOString();\n return elMap[key];\n });\n}\n\nfunction computeSegHCoords(segs, minWidth, timelineCoords) {\n let hcoords = [];\n if (timelineCoords) {\n for (let seg of segs) {\n let res = timelineCoords.rangeToCoords(seg);\n let start = Math.round(res.start); // for barely-overlapping collisions\n let end = Math.round(res.end); //\n if (end - start < minWidth) {\n end = start + minWidth;\n }\n hcoords.push({ start, end });\n }\n }\n return hcoords;\n}\nfunction computeFgSegPlacements(segs, segHCoords, // might not have for every seg\neventInstanceHeights, // might not have for every seg\nmoreLinkHeights, // might not have for every more-link\nstrictOrder, maxStackCnt) {\n let segInputs = [];\n let crudePlacements = []; // when we don't know dims\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i];\n let instanceId = seg.eventRange.instance.instanceId;\n let height = eventInstanceHeights[instanceId];\n let hcoords = segHCoords[i];\n if (height && hcoords) {\n segInputs.push({\n index: i,\n span: hcoords,\n thickness: height,\n });\n }\n else {\n crudePlacements.push({\n seg,\n hcoords,\n top: null,\n });\n }\n }\n let hierarchy = new SegHierarchy();\n if (strictOrder != null) {\n hierarchy.strictOrder = strictOrder;\n }\n if (maxStackCnt != null) {\n hierarchy.maxStackCnt = maxStackCnt;\n }\n let hiddenEntries = hierarchy.addSegs(segInputs);\n let hiddenPlacements = hiddenEntries.map((entry) => ({\n seg: segs[entry.index],\n hcoords: entry.span,\n top: null,\n }));\n let hiddenGroups = groupIntersectingEntries(hiddenEntries);\n let moreLinkInputs = [];\n let moreLinkCrudePlacements = [];\n const extractSeg = (entry) => segs[entry.index];\n for (let i = 0; i < hiddenGroups.length; i += 1) {\n let hiddenGroup = hiddenGroups[i];\n let sortedSegs = hiddenGroup.entries.map(extractSeg);\n let height = moreLinkHeights[buildIsoString(computeEarliestSegStart(sortedSegs))]; // not optimal :(\n if (height != null) {\n // NOTE: the hiddenGroup's spanStart/spanEnd are already computed by rangeToCoords. computed during input.\n moreLinkInputs.push({\n index: segs.length + i,\n thickness: height,\n span: hiddenGroup.span,\n });\n }\n else {\n moreLinkCrudePlacements.push({\n seg: sortedSegs,\n hcoords: hiddenGroup.span,\n top: null,\n });\n }\n }\n // add more-links into the hierarchy, but don't limit\n hierarchy.maxStackCnt = -1;\n hierarchy.addSegs(moreLinkInputs);\n let visibleRects = hierarchy.toRects();\n let visiblePlacements = [];\n let maxHeight = 0;\n for (let rect of visibleRects) {\n let segIndex = rect.index;\n visiblePlacements.push({\n seg: segIndex < segs.length\n ? segs[segIndex] // a real seg\n : hiddenGroups[segIndex - segs.length].entries.map(extractSeg),\n hcoords: rect.span,\n top: rect.levelCoord,\n });\n maxHeight = Math.max(maxHeight, rect.levelCoord + rect.thickness);\n }\n return [\n visiblePlacements.concat(crudePlacements, hiddenPlacements, moreLinkCrudePlacements),\n maxHeight,\n ];\n}\n\nclass TimelineLaneBg extends BaseComponent {\n render() {\n let { props } = this;\n let highlightSeg = [].concat(props.eventResizeSegs, props.dateSelectionSegs);\n return props.timelineCoords && (createElement(\"div\", { className: \"fc-timeline-bg\" },\n this.renderSegs(props.businessHourSegs || [], props.timelineCoords, 'non-business'),\n this.renderSegs(props.bgEventSegs || [], props.timelineCoords, 'bg-event'),\n this.renderSegs(highlightSeg, props.timelineCoords, 'highlight')));\n }\n renderSegs(segs, timelineCoords, fillType) {\n let { todayRange, nowDate } = this.props;\n let { isRtl } = this.context;\n let segHCoords = computeSegHCoords(segs, 0, timelineCoords);\n let children = segs.map((seg, i) => {\n let hcoords = segHCoords[i];\n let hStyle = coordsToCss(hcoords, isRtl);\n return (createElement(\"div\", { key: buildEventRangeKey(seg.eventRange), className: \"fc-timeline-bg-harness\", style: hStyle }, fillType === 'bg-event' ?\n createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, todayRange, nowDate))) :\n renderFill(fillType)));\n });\n return createElement(Fragment, null, children);\n }\n}\n\nclass TimelineLaneSlicer extends Slicer {\n sliceRange(origRange, dateProfile, dateProfileGenerator, tDateProfile, dateEnv) {\n let normalRange = normalizeRange(origRange, tDateProfile, dateEnv);\n let segs = [];\n // protect against when the span is entirely in an invalid date region\n if (computeDateSnapCoverage(normalRange.start, tDateProfile, dateEnv)\n < computeDateSnapCoverage(normalRange.end, tDateProfile, dateEnv)) {\n // intersect the footprint's range with the grid's range\n let slicedRange = intersectRanges(normalRange, tDateProfile.normalizedRange);\n if (slicedRange) {\n segs.push({\n start: slicedRange.start,\n end: slicedRange.end,\n isStart: slicedRange.start.valueOf() === normalRange.start.valueOf()\n && isValidDate(slicedRange.start, tDateProfile, dateProfile, dateProfileGenerator),\n isEnd: slicedRange.end.valueOf() === normalRange.end.valueOf()\n && isValidDate(addMs(slicedRange.end, -1), tDateProfile, dateProfile, dateProfileGenerator),\n });\n }\n }\n return segs;\n }\n}\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow',\n});\nclass TimelineEvent extends BaseComponent {\n render() {\n let { props } = this;\n return (createElement(StandardEvent, Object.assign({}, props, { elClasses: ['fc-timeline-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TIME_FORMAT, defaultDisplayEventTime: !props.isTimeScale })));\n }\n}\n\nclass TimelineLaneMoreLink extends BaseComponent {\n render() {\n let { props, context } = this;\n let { hiddenSegs, placement, resourceId } = props;\n let { top, hcoords } = placement;\n let isVisible = hcoords && top !== null;\n let hStyle = coordsToCss(hcoords, context.isRtl);\n let extraDateSpan = resourceId ? { resourceId } : {};\n return (createElement(MoreLinkContainer, { elRef: props.elRef, elClasses: ['fc-timeline-more-link'], elStyle: Object.assign({ visibility: isVisible ? '' : 'hidden', top: top || 0 }, hStyle), allDayDate: null, moreCnt: hiddenSegs.length, allSegs: hiddenSegs, hiddenSegs: hiddenSegs, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: extraDateSpan, popoverContent: () => (createElement(Fragment, null, hiddenSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId;\n return (createElement(\"div\", { key: instanceId, style: { visibility: props.isForcedInvisible[instanceId] ? 'hidden' : '' } },\n createElement(TimelineEvent, Object.assign({ isTimeScale: props.isTimeScale, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection }, getSegMeta(seg, props.todayRange, props.nowDate)))));\n }))) }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timeline-more-link-inner', 'fc-sticky'] }))));\n }\n}\n\nclass TimelineLane extends BaseComponent {\n constructor() {\n super(...arguments);\n this.slicer = new TimelineLaneSlicer();\n this.sortEventSegs = memoize(sortEventSegs);\n this.harnessElRefs = new RefMap();\n this.moreElRefs = new RefMap();\n this.innerElRef = createRef();\n // TODO: memoize event positioning\n this.state = {\n eventInstanceHeights: {},\n moreLinkHeights: {},\n };\n this.handleResize = (isForced) => {\n if (isForced) {\n this.updateSize();\n }\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let { dateProfile, tDateProfile } = props;\n let slicedProps = this.slicer.sliceProps(props, dateProfile, tDateProfile.isTimeScale ? null : props.nextDayThreshold, context, // wish we didn't have to pass in the rest of the args...\n dateProfile, context.dateProfileGenerator, tDateProfile, context.dateEnv);\n let mirrorSegs = (slicedProps.eventDrag ? slicedProps.eventDrag.segs : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.segs : null) ||\n [];\n let fgSegs = this.sortEventSegs(slicedProps.fgEventSegs, options.eventOrder);\n let fgSegHCoords = computeSegHCoords(fgSegs, options.eventMinWidth, props.timelineCoords);\n let [fgPlacements, fgHeight] = computeFgSegPlacements(fgSegs, fgSegHCoords, state.eventInstanceHeights, state.moreLinkHeights, options.eventOrderStrict, options.eventMaxStack);\n let isForcedInvisible = // TODO: more convenient\n (slicedProps.eventDrag ? slicedProps.eventDrag.affectedInstances : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.affectedInstances : null) ||\n {};\n return (createElement(Fragment, null,\n createElement(TimelineLaneBg, { businessHourSegs: slicedProps.businessHourSegs, bgEventSegs: slicedProps.bgEventSegs, timelineCoords: props.timelineCoords, eventResizeSegs: slicedProps.eventResize ? slicedProps.eventResize.segs : [] /* bad new empty array? */, dateSelectionSegs: slicedProps.dateSelectionSegs, nowDate: props.nowDate, todayRange: props.todayRange }),\n createElement(\"div\", { className: \"fc-timeline-events fc-scrollgrid-sync-inner\", ref: this.innerElRef, style: { height: fgHeight } },\n this.renderFgSegs(fgPlacements, isForcedInvisible, false, false, false),\n this.renderFgSegs(buildMirrorPlacements(mirrorSegs, props.timelineCoords, fgPlacements), {}, Boolean(slicedProps.eventDrag), Boolean(slicedProps.eventResize), false))));\n }\n componentDidMount() {\n this.updateSize();\n this.context.addResizeHandler(this.handleResize);\n }\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.eventStore !== this.props.eventStore || // external thing changed?\n prevProps.timelineCoords !== this.props.timelineCoords || // external thing changed?\n prevState.moreLinkHeights !== this.state.moreLinkHeights // HACK. see addStateEquality\n ) {\n this.updateSize();\n }\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize);\n }\n updateSize() {\n let { props } = this;\n let { timelineCoords } = props;\n const innerEl = this.innerElRef.current;\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, false);\n }\n if (timelineCoords) {\n this.setState({\n eventInstanceHeights: mapHash(this.harnessElRefs.currentMap, (harnessEl) => (Math.round(harnessEl.getBoundingClientRect().height))),\n moreLinkHeights: mapHash(this.moreElRefs.currentMap, (moreEl) => (Math.round(moreEl.getBoundingClientRect().height))),\n }, () => {\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, true);\n }\n });\n }\n // hack\n if (props.syncParentMinHeight) {\n innerEl.parentElement.style.minHeight = innerEl.style.height;\n }\n }\n renderFgSegs(segPlacements, isForcedInvisible, isDragging, isResizing, isDateSelecting) {\n let { harnessElRefs, moreElRefs, props, context } = this;\n let isMirror = isDragging || isResizing || isDateSelecting;\n return (createElement(Fragment, null, segPlacements.map((segPlacement) => {\n let { seg, hcoords, top } = segPlacement;\n if (Array.isArray(seg)) { // a more-link\n let isoStr = buildIsoString(computeEarliestSegStart(seg));\n return (createElement(TimelineLaneMoreLink, { key: 'm:' + isoStr /* \"m\" for \"more\" */, elRef: moreElRefs.createRef(isoStr), hiddenSegs: seg, placement: segPlacement, dateProfile: props.dateProfile, nowDate: props.nowDate, todayRange: props.todayRange, isTimeScale: props.tDateProfile.isTimeScale, eventSelection: props.eventSelection, resourceId: props.resourceId, isForcedInvisible: isForcedInvisible }));\n }\n let instanceId = seg.eventRange.instance.instanceId;\n let isVisible = isMirror || Boolean(!isForcedInvisible[instanceId] && hcoords && top !== null);\n let hStyle = coordsToCss(hcoords, context.isRtl);\n return (createElement(\"div\", { key: 'e:' + instanceId /* \"e\" for \"event\" */, ref: isMirror ? null : harnessElRefs.createRef(instanceId), className: \"fc-timeline-event-harness\", style: Object.assign({ visibility: isVisible ? '' : 'hidden', top: top || 0 }, hStyle) },\n createElement(TimelineEvent, Object.assign({ isTimeScale: props.tDateProfile.isTimeScale, seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === props.eventSelection /* TODO: bad for mirror? */ }, getSegMeta(seg, props.todayRange, props.nowDate)))));\n })));\n }\n}\nTimelineLane.addStateEquality({\n eventInstanceHeights: isPropsEqual,\n moreLinkHeights: isPropsEqual,\n});\nfunction buildMirrorPlacements(mirrorSegs, timelineCoords, fgPlacements) {\n if (!mirrorSegs.length || !timelineCoords) {\n return [];\n }\n let topsByInstanceId = buildAbsoluteTopHash(fgPlacements); // TODO: cache this at first render?\n return mirrorSegs.map((seg) => ({\n seg,\n hcoords: timelineCoords.rangeToCoords(seg),\n top: topsByInstanceId[seg.eventRange.instance.instanceId],\n }));\n}\nfunction buildAbsoluteTopHash(placements) {\n let topsByInstanceId = {};\n for (let placement of placements) {\n let { seg } = placement;\n if (!Array.isArray(seg)) { // doesn't represent a more-link\n topsByInstanceId[seg.eventRange.instance.instanceId] = placement.top;\n }\n }\n return topsByInstanceId;\n}\n\nclass TimelineGrid extends DateComponent {\n constructor() {\n super(...arguments);\n this.slatsRef = createRef();\n this.state = {\n coords: null,\n };\n this.handeEl = (el) => {\n if (el) {\n this.context.registerInteractiveComponent(this, { el });\n }\n else {\n this.context.unregisterInteractiveComponent(this);\n }\n };\n this.handleCoords = (coords) => {\n this.setState({ coords });\n if (this.props.onSlatCoords) {\n this.props.onSlatCoords(coords);\n }\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let { dateProfile, tDateProfile } = props;\n let timerUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit;\n return (createElement(\"div\", { className: \"fc-timeline-body\", ref: this.handeEl, style: {\n minWidth: props.tableMinWidth,\n height: props.clientHeight,\n width: props.clientWidth,\n } },\n createElement(NowTimer, { unit: timerUnit }, (nowDate, todayRange) => (createElement(Fragment, null,\n createElement(TimelineSlats, { ref: this.slatsRef, dateProfile: dateProfile, tDateProfile: tDateProfile, nowDate: nowDate, todayRange: todayRange, clientWidth: props.clientWidth, tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, onCoords: this.handleCoords, onScrollLeftRequest: props.onScrollLeftRequest }),\n createElement(TimelineLane, { dateProfile: dateProfile, tDateProfile: props.tDateProfile, nowDate: nowDate, todayRange: todayRange, nextDayThreshold: options.nextDayThreshold, businessHours: props.businessHours, eventStore: props.eventStore, eventUiBases: props.eventUiBases, dateSelection: props.dateSelection, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, timelineCoords: state.coords, syncParentMinHeight: true }),\n (options.nowIndicator && state.coords && state.coords.isDateInRange(nowDate)) && (createElement(\"div\", { className: \"fc-timeline-now-indicator-container\" },\n createElement(NowIndicatorContainer, { elClasses: ['fc-timeline-now-indicator-line'], elStyle: coordToCss(state.coords.dateToCoord(nowDate), context.isRtl), isAxis: false, date: nowDate }))))))));\n }\n // Hit System\n // ------------------------------------------------------------------------------------------\n queryHit(positionLeft, positionTop, elWidth, elHeight) {\n let slats = this.slatsRef.current;\n let slatHit = slats.positionToHit(positionLeft);\n if (slatHit) {\n return {\n dateProfile: this.props.dateProfile,\n dateSpan: slatHit.dateSpan,\n rect: {\n left: slatHit.left,\n right: slatHit.right,\n top: 0,\n bottom: elHeight,\n },\n dayEl: slatHit.dayEl,\n layer: 0,\n };\n }\n return null;\n }\n}\n\nclass TimelineView extends DateComponent {\n constructor() {\n super(...arguments);\n this.buildTimelineDateProfile = memoize(buildTimelineDateProfile);\n this.scrollGridRef = createRef();\n this.state = {\n slatCoords: null,\n slotCushionMaxWidth: null,\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n };\n this.handleScrollLeftRequest = (scrollLeft) => {\n let scrollGrid = this.scrollGridRef.current;\n scrollGrid.forceScrollLeft(0, scrollLeft);\n };\n this.handleMaxCushionWidth = (slotCushionMaxWidth) => {\n this.setState({\n slotCushionMaxWidth: Math.ceil(slotCushionMaxWidth), // for less rerendering TODO: DRY\n });\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(options);\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(options);\n let tDateProfile = this.buildTimelineDateProfile(props.dateProfile, context.dateEnv, options, context.dateProfileGenerator);\n let { slotMinWidth } = options;\n let slatCols = buildSlatCols(tDateProfile, slotMinWidth || this.computeFallbackSlotMinWidth(tDateProfile));\n let sections = [\n {\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunks: [{\n key: 'timeline',\n content: (contentArg) => (createElement(TimelineHeader, { dateProfile: props.dateProfile, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, tableMinWidth: contentArg.tableMinWidth, tableColGroupNode: contentArg.tableColGroupNode, tDateProfile: tDateProfile, slatCoords: state.slatCoords, onMaxCushionWidth: slotMinWidth ? null : this.handleMaxCushionWidth })),\n }],\n },\n {\n type: 'body',\n key: 'body',\n liquid: true,\n chunks: [{\n key: 'timeline',\n content: (contentArg) => (createElement(TimelineGrid, Object.assign({}, props, { clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, tableMinWidth: contentArg.tableMinWidth, tableColGroupNode: contentArg.tableColGroupNode, tDateProfile: tDateProfile, onSlatCoords: this.handleSlatCoords, onScrollLeftRequest: this.handleScrollLeftRequest }))),\n }],\n },\n ];\n if (stickyFooterScrollbar) {\n sections.push({\n type: 'footer',\n key: 'footer',\n isSticky: true,\n chunks: [{\n key: 'timeline',\n content: renderScrollShim,\n }],\n });\n }\n return (createElement(ViewContainer, { elClasses: [\n 'fc-timeline',\n options.eventOverlap === false ?\n 'fc-timeline-overlap-disabled' :\n '',\n ], viewSpec: context.viewSpec },\n createElement(ScrollGrid, { ref: this.scrollGridRef, liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: false, colGroups: [\n { cols: slatCols },\n ], sections: sections })));\n }\n computeFallbackSlotMinWidth(tDateProfile) {\n return Math.max(30, ((this.state.slotCushionMaxWidth || 0) / tDateProfile.slotsPerLabel));\n }\n}\nfunction buildSlatCols(tDateProfile, slotMinWidth) {\n return [{\n span: tDateProfile.slotCnt,\n minWidth: slotMinWidth || 1, // needs to be a non-zero number to trigger horizontal scrollbars!??????\n }];\n}\n\nexport { TimelineCoords, TimelineHeader, TimelineHeaderRows, TimelineLane, TimelineLaneBg, TimelineLaneSlicer, TimelineSlats, TimelineView, buildSlatCols, buildTimelineDateProfile, coordToCss, coordsToCss };\n"],"names":["injectStyles","config","MAX_TIMELINE_SLOTS","STOCK_SUB_DURATIONS","years","months","days","hours","minutes","seconds","milliseconds","buildTimelineDateProfile","dateProfile","dateEnv","allOptions","dateProfileGenerator","tDateProfile","labelInterval","slotLabelInterval","slotDuration","currentRange","countDurationsBetween","start","end","console","warn","slotsPerLabel","wholeDivideDurations","validateLabelAndSlot","ensureLabelInterval","input","trySlotDuration","createDuration","ensureSlotDuration","slotLabelFormat","rawFormats","Array","isArray","format1","format2","unit","greatestDurationDenominator","weekNumbersVisible","weekNumbers","format0","year","currentRangeAs","month","week","weekday","day","omitCommas","hour","minute","omitZeroMinute","meridiem","asRoughMinutes","params","padStart","date","asRoughSeconds","second","millisecond","concat","computeHeaderFormats","headerFormats","map","rawFormat","createFormatter","isTimeScale","Boolean","largeUnit","slotUnit","test","emphasizeWeeks","asCleanDays","businessHours","snapDuration","snapsPerSlot","rawSnapDuration","timeWindowMs","asRoughMs","slotMaxTime","slotMinTime","normalizedStart","normalizeDate","renderRange","normalizedEnd","add","addDays","normalizedRange","slotDates","isValidDate","push","snapIndex","snapDiff","snapDiffToIndex","snapIndexToDiff","snapCnt","slotCnt","isWeekStarts","prevWeekNumber","slotDate","weekNumber","computeWeekNumber","isWeekStart","buildIsWeekStarts","cellRows","formats","slotAsDays","guessedSlotUnit","rowUnitsFromFormats","format","getSmallestUnit","i","length","row","rowCells","leadingCell","isLastRow","isSuperRow","newCell","rowUnit","text","colspan","buildCellObject","isInt","weekStart","buildCellRows","normalDate","startOfDay","startOf","isHiddenDay","ms","valueOf","tryLabelInterval","range","res","diffWholeYears","diffWholeMonths","diffWholeDays","TimelineHeaderTh","BaseComponent","constructor","super","arguments","this","refineRenderProps","memoizeObjArg","buildCellNavLinkAttrs","memoize","render","props","context","options","cell","dateMeta","getDateMeta","todayRange","nowDate","renderProps","level","rowLevel","dateMarker","viewApi","createElement","ContentContainer","elTag","elClasses","getSlotClassNames","theme","getDayClassNames","elAttrs","colSpan","formatIso","omitTime","omitTimeZoneOffset","generatorName","customGenerator","slotLabelContent","defaultGenerator","renderInnerContent","classNameGenerator","slotLabelClassNames","didMount","slotLabelDidMount","willUnmount","slotLabelWillUnmount","InnerContent","className","style","height","rowInnerHeight","isSticky","cellDate","buildNavLinkAttrs","toDate","view","TimelineHeaderRows","rowInnerHeights","Fragment","isLast","isChrono","key","join","toISOString","TimelineCoords","slatRootEl","slatEls","isRtl","outerCoordCache","PositionCache","innerCoordCache","findDirectChildren","isDateInRange","rangeContainsMarker","dateToCoord","slotCoverage","computeDateSnapCoverage","slotIndex","Math","floor","min","partial","originClientRect","width","rights","getWidth","lefts","rangeToCoords","durationToCoord","duration","coord","activeRange","coordFromLeft","snapDiffInt","snapCoverage","ceil","coordToCss","hcoord","left","right","coordsToCss","hcoords","TimelineHeader","rootElRef","createRef","timerUnit","slatCoords","NowTimer","ref","minWidth","tableMinWidth","clientWidth","tableColGroupNode","nowIndicator","NowIndicatorContainer","elStyle","isAxis","componentDidMount","updateSize","componentDidUpdate","onMaxCushionWidth","computeMaxCushionWidth","max","findElements","current","el","getBoundingClientRect","TimelineSlatCell","isEm","Object","assign","elRef","isDay","slotLaneContent","slotLaneClassNames","slotLaneDidMount","slotLaneWillUnmount","TimelineSlatsBody","cellElRefs","TimelineSlats","RefMap","handleScrollRequest","request","onScrollLeftRequest","coords","time","getClass","updateSizing","scrollResponder","createScrollResponder","prevProps","update","componentWillUnmount","detach","onCoords","offsetWidth","elMap","currentMap","positionToHit","leftPosition","slatIndex","leftToIndex","slatWidth","localSnapIndex","multiplyDuration","dateSpan","allDay","dayEl","computeSegHCoords","segs","timelineCoords","seg","round","TimelineLaneBg","highlightSeg","eventResizeSegs","dateSelectionSegs","renderSegs","businessHourSegs","bgEventSegs","fillType","segHCoords","children","hStyle","buildEventRangeKey","eventRange","BgEvent","getSegMeta","renderFill","TimelineLaneSlicer","Slicer","sliceRange","origRange","normalRange","computeVisibleDayRange","dayRange","normalizeRange","slicedRange","intersectRanges","isStart","isEnd","addMs","DEFAULT_TIME_FORMAT","TimelineEvent","StandardEvent","defaultTimeFormat","defaultDisplayEventTime","TimelineLaneMoreLink","hiddenSegs","placement","resourceId","top","isVisible","extraDateSpan","MoreLinkContainer","visibility","allDayDate","moreCnt","allSegs","popoverContent","instanceId","instance","isForcedInvisible","isDragging","isResizing","isDateSelecting","isSelected","eventSelection","TimelineLane","slicer","sortEventSegs","harnessElRefs","moreElRefs","innerElRef","state","eventInstanceHeights","moreLinkHeights","handleResize","isForced","slicedProps","sliceProps","nextDayThreshold","mirrorSegs","eventDrag","eventResize","fgSegs","fgEventSegs","eventOrder","fgSegHCoords","eventMinWidth","fgPlacements","fgHeight","strictOrder","maxStackCnt","segInputs","crudePlacements","index","span","thickness","hierarchy","SegHierarchy","hiddenEntries","addSegs","hiddenPlacements","entry","hiddenGroups","groupIntersectingEntries","moreLinkInputs","moreLinkCrudePlacements","extractSeg","hiddenGroup","sortedSegs","entries","buildIsoString","computeEarliestSegStart","visibleRects","toRects","visiblePlacements","maxHeight","rect","segIndex","levelCoord","computeFgSegPlacements","eventOrderStrict","eventMaxStack","affectedInstances","renderFgSegs","topsByInstanceId","placements","buildAbsoluteTopHash","buildMirrorPlacements","addResizeHandler","prevState","eventStore","removeResizeHandler","innerEl","onHeightChange","setState","mapHash","harnessEl","moreEl","syncParentMinHeight","parentElement","minHeight","segPlacements","isMirror","segPlacement","isoStr","addStateEquality","isPropsEqual","TimelineGrid","DateComponent","slatsRef","handeEl","registerInteractiveComponent","unregisterInteractiveComponent","handleCoords","onSlatCoords","clientHeight","eventUiBases","dateSelection","queryHit","positionLeft","positionTop","elWidth","elHeight","slatHit","bottom","layer","TimelineView","scrollGridRef","slotCushionMaxWidth","handleSlatCoords","handleScrollLeftRequest","scrollLeft","forceScrollLeft","handleMaxCushionWidth","stickyHeaderDates","forPrint","getStickyHeaderDates","stickyFooterScrollbar","getStickyFooterScrollbar","slotMinWidth","slatCols","buildSlatCols","computeFallbackSlotMinWidth","sections","type","chunks","content","contentArg","liquid","renderScrollShim","ViewContainer","eventOverlap","viewSpec","ScrollGrid","isHeightAuto","collapsibleWidth","colGroups","cols"],"mappings":"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"}
1
+ {"version":3,"file":"internal.js","sources":["../../../../../node_modules/@fullcalendar/timeline/internal.js"],"sourcesContent":["import { injectStyles, config, createFormatter, greatestDurationDenominator, asCleanDays, createDuration, wholeDivideDurations, asRoughMs, addDays, startOfDay, asRoughSeconds, asRoughMinutes, diffWholeDays, isInt, computeVisibleDayRange, padStart, BaseComponent, memoizeObjArg, memoize, getDateMeta, ContentContainer, getSlotClassNames, getDayClassNames, buildNavLinkAttrs, PositionCache, findDirectChildren, rangeContainsMarker, NowTimer, NowIndicatorContainer, findElements, RefMap, multiplyDuration, SegHierarchy, groupIntersectingEntries, buildIsoString, computeEarliestSegStart, buildEventRangeKey, BgEvent, getSegMeta, renderFill, Slicer, intersectRanges, addMs, StandardEvent, MoreLinkContainer, sortEventSegs, mapHash, isPropsEqual, DateComponent, getStickyHeaderDates, getStickyFooterScrollbar, ViewContainer, renderScrollShim } from '@fullcalendar/core/internal.js';\nimport { createElement, Fragment, createRef } from '@fullcalendar/core/preact.js';\nimport { ScrollGrid } from '@fullcalendar/scrollgrid/internal.js';\n\nvar css_248z = \".fc .fc-timeline-body{min-height:100%;position:relative;z-index:1}.fc .fc-timeline-slots{bottom:0;position:absolute;top:0;z-index:1}.fc .fc-timeline-slots>table{height:100%}.fc .fc-timeline-slot-minor{border-style:dotted}.fc .fc-timeline-slot-frame{align-items:center;display:flex;justify-content:center}.fc .fc-timeline-header-row-chrono .fc-timeline-slot-frame{justify-content:flex-start}.fc .fc-timeline-header-row:last-child .fc-timeline-slot-frame{overflow:hidden}.fc .fc-timeline-slot-cushion{padding:4px 5px;white-space:nowrap}.fc-direction-ltr .fc-timeline-slot{border-right:0!important}.fc-direction-rtl .fc-timeline-slot{border-left:0!important}.fc .fc-timeline-now-indicator-container{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:4}.fc .fc-timeline-now-indicator-arrow,.fc .fc-timeline-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;pointer-events:none;position:absolute;top:0}.fc .fc-timeline-now-indicator-arrow{border-left-color:transparent;border-right-color:transparent;border-width:6px 5px 0;margin:0 -6px}.fc .fc-timeline-now-indicator-line{border-width:0 0 0 1px;bottom:0;margin:0 -1px}.fc .fc-timeline-events{position:relative;width:0;z-index:3}.fc .fc-timeline-event-harness,.fc .fc-timeline-more-link{position:absolute;top:0}.fc-timeline-event{z-index:1}.fc-timeline-event.fc-event-mirror{z-index:2}.fc-timeline-event{align-items:center;border-radius:0;display:flex;font-size:var(--fc-small-font-size);margin-bottom:1px;padding:2px 1px;position:relative}.fc-timeline-event .fc-event-main{flex-grow:1;flex-shrink:1;min-width:0}.fc-timeline-event .fc-event-time{font-weight:700}.fc-timeline-event .fc-event-time,.fc-timeline-event .fc-event-title{padding:0 2px;white-space:nowrap}.fc-direction-ltr .fc-timeline-event.fc-event-end,.fc-direction-ltr .fc-timeline-more-link{margin-right:1px}.fc-direction-rtl .fc-timeline-event.fc-event-end,.fc-direction-rtl .fc-timeline-more-link{margin-left:1px}.fc-timeline-overlap-disabled .fc-timeline-event{margin-bottom:0;padding-bottom:5px;padding-top:5px}.fc-timeline-event:not(.fc-event-end):after,.fc-timeline-event:not(.fc-event-start):before{border-color:transparent #000;border-style:solid;border-width:5px;content:\\\"\\\";flex-grow:0;flex-shrink:0;height:0;margin:0 1px;opacity:.5;width:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-start):before,.fc-direction-rtl .fc-timeline-event:not(.fc-event-end):after{border-left:0}.fc-direction-ltr .fc-timeline-event:not(.fc-event-end):after,.fc-direction-rtl .fc-timeline-event:not(.fc-event-start):before{border-right:0}.fc-timeline-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;font-size:var(--fc-small-font-size);padding:1px}.fc-timeline-more-link-inner{display:inline-block;left:0;padding:2px;right:0}.fc .fc-timeline-bg{bottom:0;left:0;position:absolute;right:0;top:0;width:0;z-index:2}.fc .fc-timeline-bg .fc-non-business{z-index:1}.fc .fc-timeline-bg .fc-bg-event{z-index:2}.fc .fc-timeline-bg .fc-highlight{z-index:3}.fc .fc-timeline-bg-harness{bottom:0;position:absolute;top:0}\";\ninjectStyles(css_248z);\n\nconst MIN_AUTO_LABELS = 18; // more than `12` months but less that `24` hours\nconst MAX_AUTO_SLOTS_PER_LABEL = 6; // allows 6 10-min slots in an hour\nconst MAX_AUTO_CELLS = 200; // allows 4-days to have a :30 slot duration\nconfig.MAX_TIMELINE_SLOTS = 1000;\n// potential nice values for slot-duration and interval-duration\nconst STOCK_SUB_DURATIONS = [\n { years: 1 },\n { months: 1 },\n { days: 1 },\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { minutes: 10 },\n { minutes: 5 },\n { minutes: 1 },\n { seconds: 30 },\n { seconds: 15 },\n { seconds: 10 },\n { seconds: 5 },\n { seconds: 1 },\n { milliseconds: 500 },\n { milliseconds: 100 },\n { milliseconds: 10 },\n { milliseconds: 1 },\n];\nfunction buildTimelineDateProfile(dateProfile, dateEnv, allOptions, dateProfileGenerator) {\n let tDateProfile = {\n labelInterval: allOptions.slotLabelInterval,\n slotDuration: allOptions.slotDuration,\n };\n validateLabelAndSlot(tDateProfile, dateProfile, dateEnv); // validate after computed grid duration\n ensureLabelInterval(tDateProfile, dateProfile, dateEnv);\n ensureSlotDuration(tDateProfile, dateProfile, dateEnv);\n let input = allOptions.slotLabelFormat;\n let rawFormats = Array.isArray(input) ? input :\n (input != null) ? [input] :\n computeHeaderFormats(tDateProfile, dateProfile, dateEnv, allOptions);\n tDateProfile.headerFormats = rawFormats.map((rawFormat) => createFormatter(rawFormat));\n tDateProfile.isTimeScale = Boolean(tDateProfile.slotDuration.milliseconds);\n let largeUnit = null;\n if (!tDateProfile.isTimeScale) {\n const slotUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit;\n if (/year|month|week/.test(slotUnit)) {\n largeUnit = slotUnit;\n }\n }\n tDateProfile.largeUnit = largeUnit;\n tDateProfile.emphasizeWeeks =\n asCleanDays(tDateProfile.slotDuration) === 1 &&\n currentRangeAs('weeks', dateProfile, dateEnv) >= 2 &&\n !allOptions.businessHours;\n /*\n console.log('label interval =', timelineView.labelInterval.humanize())\n console.log('slot duration =', timelineView.slotDuration.humanize())\n console.log('header formats =', timelineView.headerFormats)\n console.log('isTimeScale', timelineView.isTimeScale)\n console.log('largeUnit', timelineView.largeUnit)\n */\n let rawSnapDuration = allOptions.snapDuration;\n let snapDuration;\n let snapsPerSlot;\n if (rawSnapDuration) {\n snapDuration = createDuration(rawSnapDuration);\n snapsPerSlot = wholeDivideDurations(tDateProfile.slotDuration, snapDuration);\n // ^ TODO: warning if not whole?\n }\n if (snapsPerSlot == null) {\n snapDuration = tDateProfile.slotDuration;\n snapsPerSlot = 1;\n }\n tDateProfile.snapDuration = snapDuration;\n tDateProfile.snapsPerSlot = snapsPerSlot;\n // more...\n let timeWindowMs = asRoughMs(dateProfile.slotMaxTime) - asRoughMs(dateProfile.slotMinTime);\n // TODO: why not use normalizeRange!?\n let normalizedStart = normalizeDate(dateProfile.renderRange.start, tDateProfile, dateEnv);\n let normalizedEnd = normalizeDate(dateProfile.renderRange.end, tDateProfile, dateEnv);\n // apply slotMinTime/slotMaxTime\n // TODO: View should be responsible.\n if (tDateProfile.isTimeScale) {\n normalizedStart = dateEnv.add(normalizedStart, dateProfile.slotMinTime);\n normalizedEnd = dateEnv.add(addDays(normalizedEnd, -1), dateProfile.slotMaxTime);\n }\n tDateProfile.timeWindowMs = timeWindowMs;\n tDateProfile.normalizedRange = { start: normalizedStart, end: normalizedEnd };\n let slotDates = [];\n let date = normalizedStart;\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n slotDates.push(date);\n }\n date = dateEnv.add(date, tDateProfile.slotDuration);\n }\n tDateProfile.slotDates = slotDates;\n // more...\n let snapIndex = -1;\n let snapDiff = 0; // index of the diff :(\n const snapDiffToIndex = [];\n const snapIndexToDiff = [];\n date = normalizedStart;\n while (date < normalizedEnd) {\n if (isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator)) {\n snapIndex += 1;\n snapDiffToIndex.push(snapIndex);\n snapIndexToDiff.push(snapDiff);\n }\n else {\n snapDiffToIndex.push(snapIndex + 0.5);\n }\n date = dateEnv.add(date, tDateProfile.snapDuration);\n snapDiff += 1;\n }\n tDateProfile.snapDiffToIndex = snapDiffToIndex;\n tDateProfile.snapIndexToDiff = snapIndexToDiff;\n tDateProfile.snapCnt = snapIndex + 1; // is always one behind\n tDateProfile.slotCnt = tDateProfile.snapCnt / tDateProfile.snapsPerSlot;\n // more...\n tDateProfile.isWeekStarts = buildIsWeekStarts(tDateProfile, dateEnv);\n tDateProfile.cellRows = buildCellRows(tDateProfile, dateEnv);\n tDateProfile.slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);\n return tDateProfile;\n}\n/*\nsnaps to appropriate unit\n*/\nfunction normalizeDate(date, tDateProfile, dateEnv) {\n let normalDate = date;\n if (!tDateProfile.isTimeScale) {\n normalDate = startOfDay(normalDate);\n if (tDateProfile.largeUnit) {\n normalDate = dateEnv.startOf(normalDate, tDateProfile.largeUnit);\n }\n }\n return normalDate;\n}\n/*\nsnaps to appropriate unit\n*/\nfunction normalizeRange(range, tDateProfile, dateEnv) {\n if (!tDateProfile.isTimeScale) {\n range = computeVisibleDayRange(range);\n if (tDateProfile.largeUnit) {\n let dayRange = range; // preserve original result\n range = {\n start: dateEnv.startOf(range.start, tDateProfile.largeUnit),\n end: dateEnv.startOf(range.end, tDateProfile.largeUnit),\n };\n // if date is partially through the interval, or is in the same interval as the start,\n // make the exclusive end be the *next* interval\n if (range.end.valueOf() !== dayRange.end.valueOf() || range.end <= range.start) {\n range = {\n start: range.start,\n end: dateEnv.add(range.end, tDateProfile.slotDuration),\n };\n }\n }\n }\n return range;\n}\nfunction isValidDate(date, tDateProfile, dateProfile, dateProfileGenerator) {\n if (dateProfileGenerator.isHiddenDay(date)) {\n return false;\n }\n if (tDateProfile.isTimeScale) {\n // determine if the time is within slotMinTime/slotMaxTime, which may have wacky values\n let day = startOfDay(date);\n let timeMs = date.valueOf() - day.valueOf();\n let ms = timeMs - asRoughMs(dateProfile.slotMinTime); // milliseconds since slotMinTime\n ms = ((ms % 86400000) + 86400000) % 86400000; // make negative values wrap to 24hr clock\n return ms < tDateProfile.timeWindowMs; // before the slotMaxTime?\n }\n return true;\n}\nfunction validateLabelAndSlot(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n // make sure labelInterval doesn't exceed the max number of cells\n if (tDateProfile.labelInterval) {\n const labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.labelInterval);\n if (labelCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotLabelInterval results in too many cells');\n tDateProfile.labelInterval = null;\n }\n }\n // make sure slotDuration doesn't exceed the maximum number of cells\n if (tDateProfile.slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, tDateProfile.slotDuration);\n if (slotCnt > config.MAX_TIMELINE_SLOTS) {\n console.warn('slotDuration results in too many cells');\n tDateProfile.slotDuration = null;\n }\n }\n // make sure labelInterval is a multiple of slotDuration\n if (tDateProfile.labelInterval && tDateProfile.slotDuration) {\n const slotsPerLabel = wholeDivideDurations(tDateProfile.labelInterval, tDateProfile.slotDuration);\n if (slotsPerLabel === null || slotsPerLabel < 1) {\n console.warn('slotLabelInterval must be a multiple of slotDuration');\n tDateProfile.slotDuration = null;\n }\n }\n}\nfunction ensureLabelInterval(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n let { labelInterval } = tDateProfile;\n if (!labelInterval) {\n // compute based off the slot duration\n // find the largest label interval with an acceptable slots-per-label\n let input;\n if (tDateProfile.slotDuration) {\n for (input of STOCK_SUB_DURATIONS) {\n const tryLabelInterval = createDuration(input);\n const slotsPerLabel = wholeDivideDurations(tryLabelInterval, tDateProfile.slotDuration);\n if (slotsPerLabel !== null && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n labelInterval = tryLabelInterval;\n break;\n }\n }\n // use the slot duration as a last resort\n if (!labelInterval) {\n labelInterval = tDateProfile.slotDuration;\n }\n // compute based off the view's duration\n // find the largest label interval that yields the minimum number of labels\n }\n else {\n for (input of STOCK_SUB_DURATIONS) {\n labelInterval = createDuration(input);\n const labelCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, labelInterval);\n if (labelCnt >= MIN_AUTO_LABELS) {\n break;\n }\n }\n }\n tDateProfile.labelInterval = labelInterval;\n }\n return labelInterval;\n}\nfunction ensureSlotDuration(tDateProfile, dateProfile, dateEnv) {\n const { currentRange } = dateProfile;\n let { slotDuration } = tDateProfile;\n if (!slotDuration) {\n const labelInterval = ensureLabelInterval(tDateProfile, dateProfile, dateEnv); // will compute if necessary\n // compute based off the label interval\n // find the largest slot duration that is different from labelInterval, but still acceptable\n for (let input of STOCK_SUB_DURATIONS) {\n const trySlotDuration = createDuration(input);\n const slotsPerLabel = wholeDivideDurations(labelInterval, trySlotDuration);\n if (slotsPerLabel !== null && slotsPerLabel > 1 && slotsPerLabel <= MAX_AUTO_SLOTS_PER_LABEL) {\n slotDuration = trySlotDuration;\n break;\n }\n }\n // only allow the value if it won't exceed the view's # of slots limit\n if (slotDuration) {\n const slotCnt = dateEnv.countDurationsBetween(currentRange.start, currentRange.end, slotDuration);\n if (slotCnt > MAX_AUTO_CELLS) {\n slotDuration = null;\n }\n }\n // use the label interval as a last resort\n if (!slotDuration) {\n slotDuration = labelInterval;\n }\n tDateProfile.slotDuration = slotDuration;\n }\n return slotDuration;\n}\nfunction computeHeaderFormats(tDateProfile, dateProfile, dateEnv, allOptions) {\n let format1;\n let format2;\n const { labelInterval } = tDateProfile;\n let unit = greatestDurationDenominator(labelInterval).unit;\n const weekNumbersVisible = allOptions.weekNumbers;\n let format0 = (format1 = (format2 = null));\n // NOTE: weekNumber computation function wont work\n if ((unit === 'week') && !weekNumbersVisible) {\n unit = 'day';\n }\n switch (unit) {\n case 'year':\n format0 = { year: 'numeric' }; // '2015'\n break;\n case 'month':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' }; // '2015'\n }\n format1 = { month: 'short' }; // 'Jan'\n break;\n case 'week':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric' }; // '2015'\n }\n format1 = { week: 'narrow' }; // 'Wk4'\n break;\n case 'day':\n if (currentRangeAs('years', dateProfile, dateEnv) > 1) {\n format0 = { year: 'numeric', month: 'long' }; // 'January 2014'\n }\n else if (currentRangeAs('months', dateProfile, dateEnv) > 1) {\n format0 = { month: 'long' }; // 'January'\n }\n if (weekNumbersVisible) {\n format1 = { week: 'short' }; // 'Wk 4'\n }\n format2 = { weekday: 'narrow', day: 'numeric' }; // 'Su 9'\n break;\n case 'hour':\n if (weekNumbersVisible) {\n format0 = { week: 'short' }; // 'Wk 4'\n }\n if (currentRangeAs('days', dateProfile, dateEnv) > 1) {\n format1 = { weekday: 'short', day: 'numeric', month: 'numeric', omitCommas: true }; // Sat 4/7\n }\n format2 = {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n };\n break;\n case 'minute':\n // sufficiently large number of different minute cells?\n if ((asRoughMinutes(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = {\n hour: 'numeric',\n meridiem: 'short',\n };\n format1 = (params) => (':' + padStart(params.date.minute, 2) // ':30'\n );\n }\n else {\n format0 = {\n hour: 'numeric',\n minute: 'numeric',\n meridiem: 'short',\n };\n }\n break;\n case 'second':\n // sufficiently large number of different second cells?\n if ((asRoughSeconds(labelInterval) / 60) >= MAX_AUTO_SLOTS_PER_LABEL) {\n format0 = { hour: 'numeric', minute: '2-digit', meridiem: 'lowercase' }; // '8:30 PM'\n format1 = (params) => (':' + padStart(params.date.second, 2) // ':30'\n );\n }\n else {\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'\n }\n break;\n case 'millisecond':\n format0 = { hour: 'numeric', minute: '2-digit', second: '2-digit', meridiem: 'lowercase' }; // '8:30:45 PM'\n format1 = (params) => ('.' + padStart(params.millisecond, 3));\n break;\n }\n return [].concat(format0 || [], format1 || [], format2 || []);\n}\n// Compute the number of the give units in the \"current\" range.\n// Won't go more precise than days.\n// Will return `0` if there's not a clean whole interval.\nfunction currentRangeAs(unit, dateProfile, dateEnv) {\n let range = dateProfile.currentRange;\n let res = null;\n if (unit === 'years') {\n res = dateEnv.diffWholeYears(range.start, range.end);\n }\n else if (unit === 'months') {\n res = dateEnv.diffWholeMonths(range.start, range.end);\n }\n else if (unit === 'weeks') {\n res = dateEnv.diffWholeMonths(range.start, range.end);\n }\n else if (unit === 'days') {\n res = diffWholeDays(range.start, range.end);\n }\n return res || 0;\n}\nfunction buildIsWeekStarts(tDateProfile, dateEnv) {\n let { slotDates, emphasizeWeeks } = tDateProfile;\n let prevWeekNumber = null;\n let isWeekStarts = [];\n for (let slotDate of slotDates) {\n let weekNumber = dateEnv.computeWeekNumber(slotDate);\n let isWeekStart = emphasizeWeeks && (prevWeekNumber !== null) && (prevWeekNumber !== weekNumber);\n prevWeekNumber = weekNumber;\n isWeekStarts.push(isWeekStart);\n }\n return isWeekStarts;\n}\nfunction buildCellRows(tDateProfile, dateEnv) {\n let slotDates = tDateProfile.slotDates;\n let formats = tDateProfile.headerFormats;\n let cellRows = formats.map(() => []); // indexed by row,col\n let slotAsDays = asCleanDays(tDateProfile.slotDuration);\n let guessedSlotUnit = slotAsDays === 7 ? 'week' :\n slotAsDays === 1 ? 'day' :\n null;\n // specifically for navclicks\n let rowUnitsFromFormats = formats.map((format) => (format.getSmallestUnit ? format.getSmallestUnit() : null));\n // builds cellRows and slotCells\n for (let i = 0; i < slotDates.length; i += 1) {\n let date = slotDates[i];\n let isWeekStart = tDateProfile.isWeekStarts[i];\n for (let row = 0; row < formats.length; row += 1) {\n let format = formats[row];\n let rowCells = cellRows[row];\n let leadingCell = rowCells[rowCells.length - 1];\n let isLastRow = row === formats.length - 1;\n let isSuperRow = formats.length > 1 && !isLastRow; // more than one row and not the last\n let newCell = null;\n let rowUnit = rowUnitsFromFormats[row] || (isLastRow ? guessedSlotUnit : null);\n if (isSuperRow) {\n let text = dateEnv.format(date, format);\n if (!leadingCell || (leadingCell.text !== text)) {\n newCell = buildCellObject(date, text, rowUnit);\n }\n else {\n leadingCell.colspan += 1;\n }\n }\n else if (!leadingCell ||\n isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.labelInterval))) {\n let text = dateEnv.format(date, format);\n newCell = buildCellObject(date, text, rowUnit);\n }\n else {\n leadingCell.colspan += 1;\n }\n if (newCell) {\n newCell.weekStart = isWeekStart;\n rowCells.push(newCell);\n }\n }\n }\n return cellRows;\n}\nfunction buildCellObject(date, text, rowUnit) {\n return { date, text, rowUnit, colspan: 1, isWeekStart: false };\n}\n\nclass TimelineHeaderTh extends BaseComponent {\n constructor() {\n super(...arguments);\n this.refineRenderProps = memoizeObjArg(refineRenderProps);\n this.buildCellNavLinkAttrs = memoize(buildCellNavLinkAttrs);\n }\n render() {\n let { props, context } = this;\n let { dateEnv, options } = context;\n let { cell, dateProfile, tDateProfile } = props;\n // the cell.rowUnit is f'd\n // giving 'month' for a 3-day view\n // workaround: to infer day, do NOT time\n let dateMeta = getDateMeta(cell.date, props.todayRange, props.nowDate, dateProfile);\n let renderProps = this.refineRenderProps({\n level: props.rowLevel,\n dateMarker: cell.date,\n text: cell.text,\n dateEnv: context.dateEnv,\n viewApi: context.viewApi,\n });\n return (createElement(ContentContainer, { elTag: \"th\", elClasses: [\n 'fc-timeline-slot',\n 'fc-timeline-slot-label',\n cell.isWeekStart && 'fc-timeline-slot-em',\n ...( // TODO: so slot classnames for week/month/bigger. see note above about rowUnit\n cell.rowUnit === 'time' ?\n getSlotClassNames(dateMeta, context.theme) :\n getDayClassNames(dateMeta, context.theme)),\n ], elAttrs: {\n colSpan: cell.colspan,\n 'data-date': dateEnv.formatIso(cell.date, {\n omitTime: !tDateProfile.isTimeScale,\n omitTimeZoneOffset: true,\n }),\n }, renderProps: renderProps, generatorName: \"slotLabelContent\", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (createElement(\"div\", { className: \"fc-timeline-slot-frame\", style: { height: props.rowInnerHeight } },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-timeline-slot-cushion',\n 'fc-scrollgrid-sync-inner',\n props.isSticky && 'fc-sticky',\n ], elAttrs: this.buildCellNavLinkAttrs(context, cell.date, cell.rowUnit) })))));\n }\n}\nfunction buildCellNavLinkAttrs(context, cellDate, rowUnit) {\n return (rowUnit && rowUnit !== 'time')\n ? buildNavLinkAttrs(context, cellDate, rowUnit)\n : {};\n}\nfunction renderInnerContent(renderProps) {\n return renderProps.text;\n}\nfunction refineRenderProps(input) {\n return {\n level: input.level,\n date: input.dateEnv.toDate(input.dateMarker),\n view: input.viewApi,\n text: input.text,\n };\n}\n\nclass TimelineHeaderRows extends BaseComponent {\n render() {\n let { dateProfile, tDateProfile, rowInnerHeights, todayRange, nowDate } = this.props;\n let { cellRows } = tDateProfile;\n return (createElement(Fragment, null, cellRows.map((rowCells, rowLevel) => {\n let isLast = rowLevel === cellRows.length - 1;\n let isChrono = tDateProfile.isTimeScale && isLast; // the final row, with times?\n let classNames = [\n 'fc-timeline-header-row',\n isChrono ? 'fc-timeline-header-row-chrono' : '',\n ];\n return ( // eslint-disable-next-line react/no-array-index-key\n createElement(\"tr\", { key: rowLevel, className: classNames.join(' ') }, rowCells.map((cell) => (createElement(TimelineHeaderTh, { key: cell.date.toISOString(), cell: cell, rowLevel: rowLevel, dateProfile: dateProfile, tDateProfile: tDateProfile, todayRange: todayRange, nowDate: nowDate, rowInnerHeight: rowInnerHeights && rowInnerHeights[rowLevel], isSticky: !isLast })))));\n })));\n }\n}\n\nclass TimelineCoords {\n constructor(slatRootEl, // okay to expose?\n slatEls, dateProfile, tDateProfile, dateEnv, isRtl) {\n this.slatRootEl = slatRootEl;\n this.dateProfile = dateProfile;\n this.tDateProfile = tDateProfile;\n this.dateEnv = dateEnv;\n this.isRtl = isRtl;\n this.outerCoordCache = new PositionCache(slatRootEl, slatEls, true, // isHorizontal\n false);\n // for the inner divs within the slats\n // used for event rendering and scrollTime, to disregard slat border\n this.innerCoordCache = new PositionCache(slatRootEl, findDirectChildren(slatEls, 'div'), true, // isHorizontal\n false);\n }\n isDateInRange(date) {\n return rangeContainsMarker(this.dateProfile.currentRange, date);\n }\n // results range from negative width of area to 0\n dateToCoord(date) {\n let { tDateProfile } = this;\n let snapCoverage = this.computeDateSnapCoverage(date);\n let slotCoverage = snapCoverage / tDateProfile.snapsPerSlot;\n let slotIndex = Math.floor(slotCoverage);\n slotIndex = Math.min(slotIndex, tDateProfile.slotCnt - 1);\n let partial = slotCoverage - slotIndex;\n let { innerCoordCache, outerCoordCache } = this;\n if (this.isRtl) {\n return outerCoordCache.originClientRect.width - (outerCoordCache.rights[slotIndex] -\n (innerCoordCache.getWidth(slotIndex) * partial));\n }\n return (outerCoordCache.lefts[slotIndex] +\n (innerCoordCache.getWidth(slotIndex) * partial));\n }\n rangeToCoords(range) {\n return {\n start: this.dateToCoord(range.start),\n end: this.dateToCoord(range.end),\n };\n }\n durationToCoord(duration) {\n let { dateProfile, tDateProfile, dateEnv, isRtl } = this;\n let coord = 0;\n if (dateProfile) {\n let date = dateEnv.add(dateProfile.activeRange.start, duration);\n if (!tDateProfile.isTimeScale) {\n date = startOfDay(date);\n }\n coord = this.dateToCoord(date);\n // hack to overcome the left borders of non-first slat\n if (!isRtl && coord) {\n coord += 1;\n }\n }\n return coord;\n }\n coordFromLeft(coord) {\n if (this.isRtl) {\n return this.outerCoordCache.originClientRect.width - coord;\n }\n return coord;\n }\n // returned value is between 0 and the number of snaps\n computeDateSnapCoverage(date) {\n return computeDateSnapCoverage(date, this.tDateProfile, this.dateEnv);\n }\n}\n// returned value is between 0 and the number of snaps\nfunction computeDateSnapCoverage(date, tDateProfile, dateEnv) {\n let snapDiff = dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, date, tDateProfile.snapDuration);\n if (snapDiff < 0) {\n return 0;\n }\n if (snapDiff >= tDateProfile.snapDiffToIndex.length) {\n return tDateProfile.snapCnt;\n }\n let snapDiffInt = Math.floor(snapDiff);\n let snapCoverage = tDateProfile.snapDiffToIndex[snapDiffInt];\n if (isInt(snapCoverage)) { // not an in-between value\n snapCoverage += snapDiff - snapDiffInt; // add the remainder\n }\n else {\n // a fractional value, meaning the date is not visible\n // always round up in this case. works for start AND end dates in a range.\n snapCoverage = Math.ceil(snapCoverage);\n }\n return snapCoverage;\n}\nfunction coordToCss(hcoord, isRtl) {\n if (hcoord === null) {\n return { left: '', right: '' };\n }\n if (isRtl) {\n return { right: hcoord, left: '' };\n }\n return { left: hcoord, right: '' };\n}\nfunction coordsToCss(hcoords, isRtl) {\n if (!hcoords) {\n return { left: '', right: '' };\n }\n if (isRtl) {\n return { right: hcoords.start, left: -hcoords.end };\n }\n return { left: hcoords.start, right: -hcoords.end };\n}\n\nclass TimelineHeader extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n }\n render() {\n let { props, context } = this;\n // TODO: very repetitive\n // TODO: make part of tDateProfile?\n let timerUnit = greatestDurationDenominator(props.tDateProfile.slotDuration).unit;\n // WORKAROUND: make ignore slatCoords when out of sync with dateProfile\n let slatCoords = props.slatCoords && props.slatCoords.dateProfile === props.dateProfile ? props.slatCoords : null;\n return (createElement(NowTimer, { unit: timerUnit }, (nowDate, todayRange) => (createElement(\"div\", { className: \"fc-timeline-header\", ref: this.rootElRef },\n createElement(\"table\", { \"aria-hidden\": true, className: \"fc-scrollgrid-sync-table\", style: { minWidth: props.tableMinWidth, width: props.clientWidth } },\n props.tableColGroupNode,\n createElement(\"tbody\", null,\n createElement(TimelineHeaderRows, { dateProfile: props.dateProfile, tDateProfile: props.tDateProfile, nowDate: nowDate, todayRange: todayRange, rowInnerHeights: props.rowInnerHeights }))),\n context.options.nowIndicator && (\n // need to have a container regardless of whether the current view has a visible now indicator\n // because apparently removal of the element resets the scroll for some reasons (issue #5351).\n // this issue doesn't happen for the timeline body however (\n createElement(\"div\", { className: \"fc-timeline-now-indicator-container\" }, (slatCoords && slatCoords.isDateInRange(nowDate)) && (createElement(NowIndicatorContainer, { elClasses: ['fc-timeline-now-indicator-arrow'], elStyle: coordToCss(slatCoords.dateToCoord(nowDate), context.isRtl), isAxis: true, date: nowDate }))))))));\n }\n componentDidMount() {\n this.updateSize();\n }\n componentDidUpdate() {\n this.updateSize();\n }\n updateSize() {\n if (this.props.onMaxCushionWidth) {\n this.props.onMaxCushionWidth(this.computeMaxCushionWidth());\n }\n }\n computeMaxCushionWidth() {\n return Math.max(...findElements(this.rootElRef.current, '.fc-timeline-header-row:last-child .fc-timeline-slot-cushion').map((el) => el.getBoundingClientRect().width));\n }\n}\n\nclass TimelineSlatCell extends BaseComponent {\n render() {\n let { props, context } = this;\n let { dateEnv, options, theme } = context;\n let { date, tDateProfile, isEm } = props;\n let dateMeta = getDateMeta(props.date, props.todayRange, props.nowDate, props.dateProfile);\n let renderProps = Object.assign(Object.assign({ date: dateEnv.toDate(props.date) }, dateMeta), { view: context.viewApi });\n return (createElement(ContentContainer, { elTag: \"td\", elRef: props.elRef, elClasses: [\n 'fc-timeline-slot',\n 'fc-timeline-slot-lane',\n isEm && 'fc-timeline-slot-em',\n tDateProfile.isTimeScale ? (isInt(dateEnv.countDurationsBetween(tDateProfile.normalizedRange.start, props.date, tDateProfile.labelInterval)) ?\n 'fc-timeline-slot-major' :\n 'fc-timeline-slot-minor') : '',\n ...(props.isDay ?\n getDayClassNames(dateMeta, theme) :\n getSlotClassNames(dateMeta, theme)),\n ], elAttrs: {\n 'data-date': dateEnv.formatIso(date, {\n omitTimeZoneOffset: true,\n omitTime: !tDateProfile.isTimeScale,\n }),\n }, renderProps: renderProps, generatorName: \"slotLaneContent\", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\" }))));\n }\n}\n\nclass TimelineSlatsBody extends BaseComponent {\n render() {\n let { props } = this;\n let { tDateProfile, cellElRefs } = props;\n let { slotDates, isWeekStarts } = tDateProfile;\n let isDay = !tDateProfile.isTimeScale && !tDateProfile.largeUnit;\n return (createElement(\"tbody\", null,\n createElement(\"tr\", null, slotDates.map((slotDate, i) => {\n let key = slotDate.toISOString();\n return (createElement(TimelineSlatCell, { key: key, elRef: cellElRefs.createRef(key), date: slotDate, dateProfile: props.dateProfile, tDateProfile: tDateProfile, nowDate: props.nowDate, todayRange: props.todayRange, isEm: isWeekStarts[i], isDay: isDay }));\n }))));\n }\n}\n\nclass TimelineSlats extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n this.cellElRefs = new RefMap();\n this.handleScrollRequest = (request) => {\n let { onScrollLeftRequest } = this.props;\n let { coords } = this;\n if (onScrollLeftRequest && coords) {\n if (request.time) {\n let scrollLeft = coords.coordFromLeft(coords.durationToCoord(request.time));\n onScrollLeftRequest(scrollLeft);\n }\n return true;\n }\n return null; // best?\n };\n }\n render() {\n let { props, context } = this;\n return (createElement(\"div\", { className: \"fc-timeline-slots\", ref: this.rootElRef },\n createElement(\"table\", { \"aria-hidden\": true, className: context.theme.getClass('table'), style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n } },\n props.tableColGroupNode,\n createElement(TimelineSlatsBody, { cellElRefs: this.cellElRefs, dateProfile: props.dateProfile, tDateProfile: props.tDateProfile, nowDate: props.nowDate, todayRange: props.todayRange }))));\n }\n componentDidMount() {\n this.updateSizing();\n this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);\n }\n componentDidUpdate(prevProps) {\n this.updateSizing();\n this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);\n }\n componentWillUnmount() {\n this.scrollResponder.detach();\n if (this.props.onCoords) {\n this.props.onCoords(null);\n }\n }\n updateSizing() {\n let { props, context } = this;\n if (props.clientWidth !== null && // is sizing stable?\n this.scrollResponder\n // ^it's possible to have clientWidth immediately after mount (when returning from print view), but w/o scrollResponder\n ) {\n let rootEl = this.rootElRef.current;\n if (rootEl.offsetWidth) { // not hidden by css\n this.coords = new TimelineCoords(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.tDateProfile.slotDates), props.dateProfile, props.tDateProfile, context.dateEnv, context.isRtl);\n if (props.onCoords) {\n props.onCoords(this.coords);\n }\n this.scrollResponder.update(false); // TODO: wouldn't have to do this if coords were in state\n }\n }\n }\n positionToHit(leftPosition) {\n let { outerCoordCache } = this.coords;\n let { dateEnv, isRtl } = this.context;\n let { tDateProfile } = this.props;\n let slatIndex = outerCoordCache.leftToIndex(leftPosition);\n if (slatIndex != null) {\n // somewhat similar to what TimeGrid does. consolidate?\n let slatWidth = outerCoordCache.getWidth(slatIndex);\n let partial = isRtl ?\n (outerCoordCache.rights[slatIndex] - leftPosition) / slatWidth :\n (leftPosition - outerCoordCache.lefts[slatIndex]) / slatWidth;\n let localSnapIndex = Math.floor(partial * tDateProfile.snapsPerSlot);\n let start = dateEnv.add(tDateProfile.slotDates[slatIndex], multiplyDuration(tDateProfile.snapDuration, localSnapIndex));\n let end = dateEnv.add(start, tDateProfile.snapDuration);\n return {\n dateSpan: {\n range: { start, end },\n allDay: !this.props.tDateProfile.isTimeScale,\n },\n dayEl: this.cellElRefs.currentMap[slatIndex],\n left: outerCoordCache.lefts[slatIndex],\n right: outerCoordCache.rights[slatIndex],\n };\n }\n return null;\n }\n}\nfunction collectCellEls(elMap, slotDates) {\n return slotDates.map((slotDate) => {\n let key = slotDate.toISOString();\n return elMap[key];\n });\n}\n\nfunction computeSegHCoords(segs, minWidth, timelineCoords) {\n let hcoords = [];\n if (timelineCoords) {\n for (let seg of segs) {\n let res = timelineCoords.rangeToCoords(seg);\n let start = Math.round(res.start); // for barely-overlapping collisions\n let end = Math.round(res.end); //\n if (end - start < minWidth) {\n end = start + minWidth;\n }\n hcoords.push({ start, end });\n }\n }\n return hcoords;\n}\nfunction computeFgSegPlacements(segs, segHCoords, // might not have for every seg\neventInstanceHeights, // might not have for every seg\nmoreLinkHeights, // might not have for every more-link\nstrictOrder, maxStackCnt) {\n let segInputs = [];\n let crudePlacements = []; // when we don't know dims\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i];\n let instanceId = seg.eventRange.instance.instanceId;\n let height = eventInstanceHeights[instanceId];\n let hcoords = segHCoords[i];\n if (height && hcoords) {\n segInputs.push({\n index: i,\n span: hcoords,\n thickness: height,\n });\n }\n else {\n crudePlacements.push({\n seg,\n hcoords,\n top: null,\n });\n }\n }\n let hierarchy = new SegHierarchy();\n if (strictOrder != null) {\n hierarchy.strictOrder = strictOrder;\n }\n if (maxStackCnt != null) {\n hierarchy.maxStackCnt = maxStackCnt;\n }\n let hiddenEntries = hierarchy.addSegs(segInputs);\n let hiddenPlacements = hiddenEntries.map((entry) => ({\n seg: segs[entry.index],\n hcoords: entry.span,\n top: null,\n }));\n let hiddenGroups = groupIntersectingEntries(hiddenEntries);\n let moreLinkInputs = [];\n let moreLinkCrudePlacements = [];\n const extractSeg = (entry) => segs[entry.index];\n for (let i = 0; i < hiddenGroups.length; i += 1) {\n let hiddenGroup = hiddenGroups[i];\n let sortedSegs = hiddenGroup.entries.map(extractSeg);\n let height = moreLinkHeights[buildIsoString(computeEarliestSegStart(sortedSegs))]; // not optimal :(\n if (height != null) {\n // NOTE: the hiddenGroup's spanStart/spanEnd are already computed by rangeToCoords. computed during input.\n moreLinkInputs.push({\n index: segs.length + i,\n thickness: height,\n span: hiddenGroup.span,\n });\n }\n else {\n moreLinkCrudePlacements.push({\n seg: sortedSegs,\n hcoords: hiddenGroup.span,\n top: null,\n });\n }\n }\n // add more-links into the hierarchy, but don't limit\n hierarchy.maxStackCnt = -1;\n hierarchy.addSegs(moreLinkInputs);\n let visibleRects = hierarchy.toRects();\n let visiblePlacements = [];\n let maxHeight = 0;\n for (let rect of visibleRects) {\n let segIndex = rect.index;\n visiblePlacements.push({\n seg: segIndex < segs.length\n ? segs[segIndex] // a real seg\n : hiddenGroups[segIndex - segs.length].entries.map(extractSeg),\n hcoords: rect.span,\n top: rect.levelCoord,\n });\n maxHeight = Math.max(maxHeight, rect.levelCoord + rect.thickness);\n }\n return [\n visiblePlacements.concat(crudePlacements, hiddenPlacements, moreLinkCrudePlacements),\n maxHeight,\n ];\n}\n\nclass TimelineLaneBg extends BaseComponent {\n render() {\n let { props } = this;\n let highlightSeg = [].concat(props.eventResizeSegs, props.dateSelectionSegs);\n return props.timelineCoords && (createElement(\"div\", { className: \"fc-timeline-bg\" },\n this.renderSegs(props.businessHourSegs || [], props.timelineCoords, 'non-business'),\n this.renderSegs(props.bgEventSegs || [], props.timelineCoords, 'bg-event'),\n this.renderSegs(highlightSeg, props.timelineCoords, 'highlight')));\n }\n renderSegs(segs, timelineCoords, fillType) {\n let { todayRange, nowDate } = this.props;\n let { isRtl } = this.context;\n let segHCoords = computeSegHCoords(segs, 0, timelineCoords);\n let children = segs.map((seg, i) => {\n let hcoords = segHCoords[i];\n let hStyle = coordsToCss(hcoords, isRtl);\n return (createElement(\"div\", { key: buildEventRangeKey(seg.eventRange), className: \"fc-timeline-bg-harness\", style: hStyle }, fillType === 'bg-event' ?\n createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, todayRange, nowDate))) :\n renderFill(fillType)));\n });\n return createElement(Fragment, null, children);\n }\n}\n\nclass TimelineLaneSlicer extends Slicer {\n sliceRange(origRange, dateProfile, dateProfileGenerator, tDateProfile, dateEnv) {\n let normalRange = normalizeRange(origRange, tDateProfile, dateEnv);\n let segs = [];\n // protect against when the span is entirely in an invalid date region\n if (computeDateSnapCoverage(normalRange.start, tDateProfile, dateEnv)\n < computeDateSnapCoverage(normalRange.end, tDateProfile, dateEnv)) {\n // intersect the footprint's range with the grid's range\n let slicedRange = intersectRanges(normalRange, tDateProfile.normalizedRange);\n if (slicedRange) {\n segs.push({\n start: slicedRange.start,\n end: slicedRange.end,\n isStart: slicedRange.start.valueOf() === normalRange.start.valueOf()\n && isValidDate(slicedRange.start, tDateProfile, dateProfile, dateProfileGenerator),\n isEnd: slicedRange.end.valueOf() === normalRange.end.valueOf()\n && isValidDate(addMs(slicedRange.end, -1), tDateProfile, dateProfile, dateProfileGenerator),\n });\n }\n }\n return segs;\n }\n}\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow',\n});\nclass TimelineEvent extends BaseComponent {\n render() {\n let { props } = this;\n return (createElement(StandardEvent, Object.assign({}, props, { elClasses: ['fc-timeline-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TIME_FORMAT, defaultDisplayEventTime: !props.isTimeScale })));\n }\n}\n\nclass TimelineLaneMoreLink extends BaseComponent {\n render() {\n let { props, context } = this;\n let { hiddenSegs, placement, resourceId } = props;\n let { top, hcoords } = placement;\n let isVisible = hcoords && top !== null;\n let hStyle = coordsToCss(hcoords, context.isRtl);\n let extraDateSpan = resourceId ? { resourceId } : {};\n return (createElement(MoreLinkContainer, { elRef: props.elRef, elClasses: ['fc-timeline-more-link'], elStyle: Object.assign({ visibility: isVisible ? '' : 'hidden', top: top || 0 }, hStyle), allDayDate: null, moreCnt: hiddenSegs.length, allSegs: hiddenSegs, hiddenSegs: hiddenSegs, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: extraDateSpan, popoverContent: () => (createElement(Fragment, null, hiddenSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId;\n return (createElement(\"div\", { key: instanceId, style: { visibility: props.isForcedInvisible[instanceId] ? 'hidden' : '' } },\n createElement(TimelineEvent, Object.assign({ isTimeScale: props.isTimeScale, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection }, getSegMeta(seg, props.todayRange, props.nowDate)))));\n }))) }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timeline-more-link-inner', 'fc-sticky'] }))));\n }\n}\n\nclass TimelineLane extends BaseComponent {\n constructor() {\n super(...arguments);\n this.slicer = new TimelineLaneSlicer();\n this.sortEventSegs = memoize(sortEventSegs);\n this.harnessElRefs = new RefMap();\n this.moreElRefs = new RefMap();\n this.innerElRef = createRef();\n // TODO: memoize event positioning\n this.state = {\n eventInstanceHeights: {},\n moreLinkHeights: {},\n };\n this.handleResize = (isForced) => {\n if (isForced) {\n this.updateSize();\n }\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let { dateProfile, tDateProfile } = props;\n let slicedProps = this.slicer.sliceProps(props, dateProfile, tDateProfile.isTimeScale ? null : props.nextDayThreshold, context, // wish we didn't have to pass in the rest of the args...\n dateProfile, context.dateProfileGenerator, tDateProfile, context.dateEnv);\n let mirrorSegs = (slicedProps.eventDrag ? slicedProps.eventDrag.segs : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.segs : null) ||\n [];\n let fgSegs = this.sortEventSegs(slicedProps.fgEventSegs, options.eventOrder);\n let fgSegHCoords = computeSegHCoords(fgSegs, options.eventMinWidth, props.timelineCoords);\n let [fgPlacements, fgHeight] = computeFgSegPlacements(fgSegs, fgSegHCoords, state.eventInstanceHeights, state.moreLinkHeights, options.eventOrderStrict, options.eventMaxStack);\n let isForcedInvisible = // TODO: more convenient\n (slicedProps.eventDrag ? slicedProps.eventDrag.affectedInstances : null) ||\n (slicedProps.eventResize ? slicedProps.eventResize.affectedInstances : null) ||\n {};\n return (createElement(Fragment, null,\n createElement(TimelineLaneBg, { businessHourSegs: slicedProps.businessHourSegs, bgEventSegs: slicedProps.bgEventSegs, timelineCoords: props.timelineCoords, eventResizeSegs: slicedProps.eventResize ? slicedProps.eventResize.segs : [] /* bad new empty array? */, dateSelectionSegs: slicedProps.dateSelectionSegs, nowDate: props.nowDate, todayRange: props.todayRange }),\n createElement(\"div\", { className: \"fc-timeline-events fc-scrollgrid-sync-inner\", ref: this.innerElRef, style: { height: fgHeight } },\n this.renderFgSegs(fgPlacements, isForcedInvisible, false, false, false),\n this.renderFgSegs(buildMirrorPlacements(mirrorSegs, props.timelineCoords, fgPlacements), {}, Boolean(slicedProps.eventDrag), Boolean(slicedProps.eventResize), false))));\n }\n componentDidMount() {\n this.updateSize();\n this.context.addResizeHandler(this.handleResize);\n }\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.eventStore !== this.props.eventStore || // external thing changed?\n prevProps.timelineCoords !== this.props.timelineCoords || // external thing changed?\n prevState.moreLinkHeights !== this.state.moreLinkHeights // HACK. see addStateEquality\n ) {\n this.updateSize();\n }\n }\n componentWillUnmount() {\n this.context.removeResizeHandler(this.handleResize);\n }\n updateSize() {\n let { props } = this;\n let { timelineCoords } = props;\n const innerEl = this.innerElRef.current;\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, false);\n }\n if (timelineCoords) {\n this.setState({\n eventInstanceHeights: mapHash(this.harnessElRefs.currentMap, (harnessEl) => (Math.round(harnessEl.getBoundingClientRect().height))),\n moreLinkHeights: mapHash(this.moreElRefs.currentMap, (moreEl) => (Math.round(moreEl.getBoundingClientRect().height))),\n }, () => {\n if (props.onHeightChange) {\n props.onHeightChange(innerEl, true);\n }\n });\n }\n // hack\n if (props.syncParentMinHeight) {\n innerEl.parentElement.style.minHeight = innerEl.style.height;\n }\n }\n renderFgSegs(segPlacements, isForcedInvisible, isDragging, isResizing, isDateSelecting) {\n let { harnessElRefs, moreElRefs, props, context } = this;\n let isMirror = isDragging || isResizing || isDateSelecting;\n return (createElement(Fragment, null, segPlacements.map((segPlacement) => {\n let { seg, hcoords, top } = segPlacement;\n if (Array.isArray(seg)) { // a more-link\n let isoStr = buildIsoString(computeEarliestSegStart(seg));\n return (createElement(TimelineLaneMoreLink, { key: 'm:' + isoStr /* \"m\" for \"more\" */, elRef: moreElRefs.createRef(isoStr), hiddenSegs: seg, placement: segPlacement, dateProfile: props.dateProfile, nowDate: props.nowDate, todayRange: props.todayRange, isTimeScale: props.tDateProfile.isTimeScale, eventSelection: props.eventSelection, resourceId: props.resourceId, isForcedInvisible: isForcedInvisible }));\n }\n let instanceId = seg.eventRange.instance.instanceId;\n let isVisible = isMirror || Boolean(!isForcedInvisible[instanceId] && hcoords && top !== null);\n let hStyle = coordsToCss(hcoords, context.isRtl);\n return (createElement(\"div\", { key: 'e:' + instanceId /* \"e\" for \"event\" */, ref: isMirror ? null : harnessElRefs.createRef(instanceId), className: \"fc-timeline-event-harness\", style: Object.assign({ visibility: isVisible ? '' : 'hidden', top: top || 0 }, hStyle) },\n createElement(TimelineEvent, Object.assign({ isTimeScale: props.tDateProfile.isTimeScale, seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === props.eventSelection /* TODO: bad for mirror? */ }, getSegMeta(seg, props.todayRange, props.nowDate)))));\n })));\n }\n}\nTimelineLane.addStateEquality({\n eventInstanceHeights: isPropsEqual,\n moreLinkHeights: isPropsEqual,\n});\nfunction buildMirrorPlacements(mirrorSegs, timelineCoords, fgPlacements) {\n if (!mirrorSegs.length || !timelineCoords) {\n return [];\n }\n let topsByInstanceId = buildAbsoluteTopHash(fgPlacements); // TODO: cache this at first render?\n return mirrorSegs.map((seg) => ({\n seg,\n hcoords: timelineCoords.rangeToCoords(seg),\n top: topsByInstanceId[seg.eventRange.instance.instanceId],\n }));\n}\nfunction buildAbsoluteTopHash(placements) {\n let topsByInstanceId = {};\n for (let placement of placements) {\n let { seg } = placement;\n if (!Array.isArray(seg)) { // doesn't represent a more-link\n topsByInstanceId[seg.eventRange.instance.instanceId] = placement.top;\n }\n }\n return topsByInstanceId;\n}\n\nclass TimelineGrid extends DateComponent {\n constructor() {\n super(...arguments);\n this.slatsRef = createRef();\n this.state = {\n coords: null,\n };\n this.handeEl = (el) => {\n if (el) {\n this.context.registerInteractiveComponent(this, { el });\n }\n else {\n this.context.unregisterInteractiveComponent(this);\n }\n };\n this.handleCoords = (coords) => {\n this.setState({ coords });\n if (this.props.onSlatCoords) {\n this.props.onSlatCoords(coords);\n }\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let { dateProfile, tDateProfile } = props;\n let timerUnit = greatestDurationDenominator(tDateProfile.slotDuration).unit;\n return (createElement(\"div\", { className: \"fc-timeline-body\", ref: this.handeEl, style: {\n minWidth: props.tableMinWidth,\n height: props.clientHeight,\n width: props.clientWidth,\n } },\n createElement(NowTimer, { unit: timerUnit }, (nowDate, todayRange) => (createElement(Fragment, null,\n createElement(TimelineSlats, { ref: this.slatsRef, dateProfile: dateProfile, tDateProfile: tDateProfile, nowDate: nowDate, todayRange: todayRange, clientWidth: props.clientWidth, tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, onCoords: this.handleCoords, onScrollLeftRequest: props.onScrollLeftRequest }),\n createElement(TimelineLane, { dateProfile: dateProfile, tDateProfile: props.tDateProfile, nowDate: nowDate, todayRange: todayRange, nextDayThreshold: options.nextDayThreshold, businessHours: props.businessHours, eventStore: props.eventStore, eventUiBases: props.eventUiBases, dateSelection: props.dateSelection, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, timelineCoords: state.coords, syncParentMinHeight: true }),\n (options.nowIndicator && state.coords && state.coords.isDateInRange(nowDate)) && (createElement(\"div\", { className: \"fc-timeline-now-indicator-container\" },\n createElement(NowIndicatorContainer, { elClasses: ['fc-timeline-now-indicator-line'], elStyle: coordToCss(state.coords.dateToCoord(nowDate), context.isRtl), isAxis: false, date: nowDate }))))))));\n }\n // Hit System\n // ------------------------------------------------------------------------------------------\n queryHit(positionLeft, positionTop, elWidth, elHeight) {\n let slats = this.slatsRef.current;\n let slatHit = slats.positionToHit(positionLeft);\n if (slatHit) {\n return {\n dateProfile: this.props.dateProfile,\n dateSpan: slatHit.dateSpan,\n rect: {\n left: slatHit.left,\n right: slatHit.right,\n top: 0,\n bottom: elHeight,\n },\n dayEl: slatHit.dayEl,\n layer: 0,\n };\n }\n return null;\n }\n}\n\nclass TimelineView extends DateComponent {\n constructor() {\n super(...arguments);\n this.buildTimelineDateProfile = memoize(buildTimelineDateProfile);\n this.scrollGridRef = createRef();\n this.state = {\n slatCoords: null,\n slotCushionMaxWidth: null,\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n };\n this.handleScrollLeftRequest = (scrollLeft) => {\n let scrollGrid = this.scrollGridRef.current;\n scrollGrid.forceScrollLeft(0, scrollLeft);\n };\n this.handleMaxCushionWidth = (slotCushionMaxWidth) => {\n this.setState({\n slotCushionMaxWidth: Math.ceil(slotCushionMaxWidth), // for less rerendering TODO: DRY\n });\n };\n }\n render() {\n let { props, state, context } = this;\n let { options } = context;\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(options);\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(options);\n let tDateProfile = this.buildTimelineDateProfile(props.dateProfile, context.dateEnv, options, context.dateProfileGenerator);\n let { slotMinWidth } = options;\n let slatCols = buildSlatCols(tDateProfile, slotMinWidth || this.computeFallbackSlotMinWidth(tDateProfile));\n let sections = [\n {\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunks: [{\n key: 'timeline',\n content: (contentArg) => (createElement(TimelineHeader, { dateProfile: props.dateProfile, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, tableMinWidth: contentArg.tableMinWidth, tableColGroupNode: contentArg.tableColGroupNode, tDateProfile: tDateProfile, slatCoords: state.slatCoords, onMaxCushionWidth: slotMinWidth ? null : this.handleMaxCushionWidth })),\n }],\n },\n {\n type: 'body',\n key: 'body',\n liquid: true,\n chunks: [{\n key: 'timeline',\n content: (contentArg) => (createElement(TimelineGrid, Object.assign({}, props, { clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, tableMinWidth: contentArg.tableMinWidth, tableColGroupNode: contentArg.tableColGroupNode, tDateProfile: tDateProfile, onSlatCoords: this.handleSlatCoords, onScrollLeftRequest: this.handleScrollLeftRequest }))),\n }],\n },\n ];\n if (stickyFooterScrollbar) {\n sections.push({\n type: 'footer',\n key: 'footer',\n isSticky: true,\n chunks: [{\n key: 'timeline',\n content: renderScrollShim,\n }],\n });\n }\n return (createElement(ViewContainer, { elClasses: [\n 'fc-timeline',\n options.eventOverlap === false ?\n 'fc-timeline-overlap-disabled' :\n '',\n ], viewSpec: context.viewSpec },\n createElement(ScrollGrid, { ref: this.scrollGridRef, liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: false, colGroups: [\n { cols: slatCols },\n ], sections: sections })));\n }\n computeFallbackSlotMinWidth(tDateProfile) {\n return Math.max(30, ((this.state.slotCushionMaxWidth || 0) / tDateProfile.slotsPerLabel));\n }\n}\nfunction buildSlatCols(tDateProfile, slotMinWidth) {\n return [{\n span: tDateProfile.slotCnt,\n minWidth: slotMinWidth || 1, // needs to be a non-zero number to trigger horizontal scrollbars!??????\n }];\n}\n\nexport { TimelineCoords, TimelineHeader, TimelineHeaderRows, TimelineLane, TimelineLaneBg, TimelineLaneSlicer, TimelineSlats, TimelineView, buildSlatCols, buildTimelineDateProfile, coordToCss, coordsToCss };\n"],"names":["injectStyles","config","MAX_TIMELINE_SLOTS","STOCK_SUB_DURATIONS","years","months","days","hours","minutes","seconds","milliseconds","buildTimelineDateProfile","dateProfile","dateEnv","allOptions","dateProfileGenerator","tDateProfile","labelInterval","slotLabelInterval","slotDuration","currentRange","countDurationsBetween","start","end","console","warn","slotsPerLabel","wholeDivideDurations","validateLabelAndSlot","ensureLabelInterval","input","trySlotDuration","createDuration","ensureSlotDuration","slotLabelFormat","rawFormats","Array","isArray","format1","format2","unit","greatestDurationDenominator","weekNumbersVisible","weekNumbers","format0","year","currentRangeAs","month","week","weekday","day","omitCommas","hour","minute","omitZeroMinute","meridiem","asRoughMinutes","params","padStart","date","asRoughSeconds","second","millisecond","concat","computeHeaderFormats","headerFormats","map","rawFormat","createFormatter","isTimeScale","Boolean","largeUnit","slotUnit","test","emphasizeWeeks","asCleanDays","businessHours","snapDuration","snapsPerSlot","rawSnapDuration","timeWindowMs","asRoughMs","slotMaxTime","slotMinTime","normalizedStart","normalizeDate","renderRange","normalizedEnd","add","addDays","normalizedRange","slotDates","isValidDate","push","snapIndex","snapDiff","snapDiffToIndex","snapIndexToDiff","snapCnt","slotCnt","isWeekStarts","prevWeekNumber","slotDate","weekNumber","computeWeekNumber","isWeekStart","buildIsWeekStarts","cellRows","formats","slotAsDays","guessedSlotUnit","rowUnitsFromFormats","format","getSmallestUnit","i","length","row","rowCells","leadingCell","isLastRow","isSuperRow","newCell","rowUnit","text","colspan","buildCellObject","isInt","weekStart","buildCellRows","normalDate","startOfDay","startOf","isHiddenDay","ms","valueOf","tryLabelInterval","range","res","diffWholeYears","diffWholeMonths","diffWholeDays","TimelineHeaderTh","BaseComponent","constructor","super","arguments","this","refineRenderProps","memoizeObjArg","buildCellNavLinkAttrs","memoize","render","props","context","options","cell","dateMeta","getDateMeta","todayRange","nowDate","renderProps","level","rowLevel","dateMarker","viewApi","createElement","ContentContainer","elTag","elClasses","getSlotClassNames","theme","getDayClassNames","elAttrs","colSpan","formatIso","omitTime","omitTimeZoneOffset","generatorName","customGenerator","slotLabelContent","defaultGenerator","renderInnerContent","classNameGenerator","slotLabelClassNames","didMount","slotLabelDidMount","willUnmount","slotLabelWillUnmount","InnerContent","className","style","height","rowInnerHeight","isSticky","cellDate","buildNavLinkAttrs","toDate","view","TimelineHeaderRows","rowInnerHeights","Fragment","isLast","isChrono","key","join","toISOString","TimelineCoords","slatRootEl","slatEls","isRtl","outerCoordCache","PositionCache","innerCoordCache","findDirectChildren","isDateInRange","rangeContainsMarker","dateToCoord","slotCoverage","computeDateSnapCoverage","slotIndex","Math","floor","min","partial","originClientRect","width","rights","getWidth","lefts","rangeToCoords","durationToCoord","duration","coord","activeRange","coordFromLeft","snapDiffInt","snapCoverage","ceil","coordToCss","hcoord","left","right","coordsToCss","hcoords","TimelineHeader","rootElRef","createRef","timerUnit","slatCoords","NowTimer","ref","minWidth","tableMinWidth","clientWidth","tableColGroupNode","nowIndicator","NowIndicatorContainer","elStyle","isAxis","componentDidMount","updateSize","componentDidUpdate","onMaxCushionWidth","computeMaxCushionWidth","max","findElements","current","el","getBoundingClientRect","TimelineSlatCell","isEm","Object","assign","elRef","isDay","slotLaneContent","slotLaneClassNames","slotLaneDidMount","slotLaneWillUnmount","TimelineSlatsBody","cellElRefs","TimelineSlats","RefMap","handleScrollRequest","request","onScrollLeftRequest","coords","time","getClass","updateSizing","scrollResponder","createScrollResponder","prevProps","update","componentWillUnmount","detach","onCoords","offsetWidth","elMap","currentMap","positionToHit","leftPosition","slatIndex","leftToIndex","slatWidth","localSnapIndex","multiplyDuration","dateSpan","allDay","dayEl","computeSegHCoords","segs","timelineCoords","seg","round","TimelineLaneBg","highlightSeg","eventResizeSegs","dateSelectionSegs","renderSegs","businessHourSegs","bgEventSegs","fillType","segHCoords","children","hStyle","buildEventRangeKey","eventRange","BgEvent","getSegMeta","renderFill","TimelineLaneSlicer","Slicer","sliceRange","origRange","normalRange","computeVisibleDayRange","dayRange","normalizeRange","slicedRange","intersectRanges","isStart","isEnd","addMs","DEFAULT_TIME_FORMAT","TimelineEvent","StandardEvent","defaultTimeFormat","defaultDisplayEventTime","TimelineLaneMoreLink","hiddenSegs","placement","resourceId","top","isVisible","extraDateSpan","MoreLinkContainer","visibility","allDayDate","moreCnt","allSegs","popoverContent","instanceId","instance","isForcedInvisible","isDragging","isResizing","isDateSelecting","isSelected","eventSelection","TimelineLane","slicer","sortEventSegs","harnessElRefs","moreElRefs","innerElRef","state","eventInstanceHeights","moreLinkHeights","handleResize","isForced","slicedProps","sliceProps","nextDayThreshold","mirrorSegs","eventDrag","eventResize","fgSegs","fgEventSegs","eventOrder","fgSegHCoords","eventMinWidth","fgPlacements","fgHeight","strictOrder","maxStackCnt","segInputs","crudePlacements","index","span","thickness","hierarchy","SegHierarchy","hiddenEntries","addSegs","hiddenPlacements","entry","hiddenGroups","groupIntersectingEntries","moreLinkInputs","moreLinkCrudePlacements","extractSeg","hiddenGroup","sortedSegs","entries","buildIsoString","computeEarliestSegStart","visibleRects","toRects","visiblePlacements","maxHeight","rect","segIndex","levelCoord","computeFgSegPlacements","eventOrderStrict","eventMaxStack","affectedInstances","renderFgSegs","topsByInstanceId","placements","buildAbsoluteTopHash","buildMirrorPlacements","addResizeHandler","prevState","eventStore","removeResizeHandler","innerEl","onHeightChange","setState","mapHash","harnessEl","moreEl","syncParentMinHeight","parentElement","minHeight","segPlacements","isMirror","segPlacement","isoStr","addStateEquality","isPropsEqual","TimelineGrid","DateComponent","slatsRef","handeEl","registerInteractiveComponent","unregisterInteractiveComponent","handleCoords","onSlatCoords","clientHeight","eventUiBases","dateSelection","queryHit","positionLeft","positionTop","elWidth","elHeight","slatHit","bottom","layer","TimelineView","scrollGridRef","slotCushionMaxWidth","handleSlatCoords","handleScrollLeftRequest","scrollLeft","forceScrollLeft","handleMaxCushionWidth","stickyHeaderDates","forPrint","getStickyHeaderDates","stickyFooterScrollbar","getStickyFooterScrollbar","slotMinWidth","slatCols","buildSlatCols","computeFallbackSlotMinWidth","sections","type","chunks","content","contentArg","liquid","renderScrollShim","ViewContainer","eventOverlap","viewSpec","ScrollGrid","isHeightAuto","collapsibleWidth","colGroups","cols"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -25,7 +25,6 @@ import { ConsentCaptureProps } from 'molecules/Consent/ConsentCapture';
25
25
  import { IconRendererProps as IconRendererProps$1 } from 'molecules/Icon';
26
26
  import { RegisterOptions, FieldValues, UseFormReturn, ValidationMode } from 'react-hook-form';
27
27
  import { DatePickerProps } from '@mui/x-date-pickers';
28
- import { MoleculeItemDTO } from 'containers/types/moleculeItemTypes';
29
28
  import * as containers_types_types from 'containers/types/types';
30
29
  import { ContainerProps as ContainerProps$2, ContainerProperties as ContainerProperties$1, ContainerComponentProps as ContainerComponentProps$2 } from 'containers/types/types';
31
30
 
@@ -1720,7 +1719,6 @@ interface AvatarMoleculeProps {
1720
1719
  interface CalendarMoleculeProps {
1721
1720
  events?: any[];
1722
1721
  resources?: any[];
1723
- items?: MoleculeItemDTO[];
1724
1722
  initialView?: string;
1725
1723
  enableDayView?: boolean;
1726
1724
  enableWeekView?: boolean;
@@ -1756,7 +1754,6 @@ interface CalendarMoleculeProps {
1756
1754
  paddingTop?: string;
1757
1755
  paddingRight?: string;
1758
1756
  paddingBottom?: string;
1759
- themeSystem?: any;
1760
1757
  buttonFontSize?: string | number;
1761
1758
  buttonPaddingY?: string;
1762
1759
  buttonPaddingX?: string;
@@ -1823,10 +1820,6 @@ interface CalendarMoleculeProps {
1823
1820
  backgroundColor?: string;
1824
1821
  fontFamily?: string;
1825
1822
  elevation?: number;
1826
- gradientTheme?: 'none' | 'purple' | 'blue' | 'ocean' | 'sunset' | 'forest' | 'rose';
1827
- headerGradientTheme?: 'none' | 'purple' | 'blue' | 'ocean' | 'sunset' | 'forest' | 'rose';
1828
- cellGradientTheme?: 'none' | 'light' | 'subtle' | 'warm' | 'cool';
1829
- eventGradientTheme?: 'none' | 'purple' | 'blue' | 'green' | 'orange' | 'red' | 'gradient';
1830
1823
  overlayColor?: string;
1831
1824
  overlayOpacity?: 'none' | 'light' | 'medium' | 'strong';
1832
1825
  glassEffect?: 'none' | 'light' | 'medium' | 'strong';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zealicsolutions/web-ui",
3
- "version": "1.0.60-test.2",
3
+ "version": "1.0.60-test.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/Zealic_Solutions/zeal-ui-web.git"
@@ -1,2 +0,0 @@
1
- import{__assign as e,__spreadArray as r}from"../../node_modules/tslib/tslib.es6.js";import{jsxs as o,jsx as t}from"../../node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.esm.js";import n from"../../node_modules/@fullcalendar/react/dist/index.js";import{useState as a,useRef as i,useCallback as p}from"react";import d from"../../node_modules/@fullcalendar/daygrid/index.js";import x from"../../node_modules/@fullcalendar/interaction/index.js";import l from"../../node_modules/@fullcalendar/list/index.js";import c from"../../node_modules/@fullcalendar/multimonth/index.js";import g from"../../node_modules/@fullcalendar/resource/index.js";import u from"../../node_modules/@fullcalendar/resource-timegrid/index.js";import b from"../../node_modules/@fullcalendar/resource-timeline/index.js";import s from"../../node_modules/@fullcalendar/timegrid/index.js";import f from"../../node_modules/@fullcalendar/timeline/index.js";import m from"../../node_modules/@mui/material/Box/Box.js";var h=function(h){var v,y,C,w=h.events,k=void 0===w?[]:w,S=h.resources;h.items;var T,W=h.initialView,B=void 0===W?"month":W,G=h.enableDayView,M=void 0!==G&&G,j=h.enableWeekView,D=void 0!==j&&j,F=h.enableMonthView,R=void 0===F||F,L=h.enableYearView,V=void 0!==L&&L,z=h.enableDayListView,H=void 0!==z&&z,Y=h.enableWeekListView,_=void 0!==Y&&Y,E=h.enableGridView,A=void 0===E||E,P=h.enableTimelineView,O=void 0!==P&&P,I=h.enableResourceView,N=void 0!==I&&I,X=h.monthsPerRow,K=void 0===X?3:X,q=h.dayMaxEvents,J=void 0===q?3:q,Q=h.yearViewMode,U=void 0===Q?"grid":Q,Z=h.showPrevButton,$=void 0===Z||Z,ee=h.showNextButton,re=void 0===ee||ee,oe=h.showTodayButton,te=void 0===oe||oe,ne=h.showViewSwitcher,ae=void 0===ne||ne,ie=h.editable,pe=void 0!==ie&&ie,de=h.droppable,xe=void 0!==de&&de,le=h.selectable,ce=void 0!==le&&le,ge=h.slotDuration,ue=void 0===ge?"00:15:00":ge,be=h.snapDuration,se=void 0===be?"00:05:00":be,fe=h.businessHours,me=h.eventOverlap,he=void 0!==me&&me,ve=h.showGridLines,ye=void 0!==ve&&ve,Ce=h.width,we=h.height,ke=h.marginLeft,Se=void 0===ke?"0":ke,Te=h.marginTop,We=void 0===Te?"0":Te,Be=h.marginRight,Ge=void 0===Be?"0":Be,Me=h.marginBottom,je=void 0===Me?"0":Me,De=h.paddingLeft,Fe=void 0===De?"0":De,Re=h.paddingTop,Le=void 0===Re?"0":Re,Ve=h.paddingRight,ze=void 0===Ve?"0":Ve,He=h.paddingBottom,Ye=void 0===He?"0":He,_e=h.themeSystem,Ee=void 0===_e?"standard":_e,Ae=h.buttonFontSize,Pe=h.buttonPaddingY,Oe=h.buttonPaddingX,Ie=h.buttonColor,Ne=h.buttonTextColor,Xe=h.buttonBorderColor,Ke=h.buttonFontWeight,qe=h.buttonElevation,Je=h.buttonHeight,Qe=h.buttonMinWidth,Ue=h.buttonMarginY,Ze=h.buttonMarginX,$e=h.buttonBorderRadius,er=h.buttonHoverColor,rr=h.buttonHoverTextColor,or=h.buttonHoverBorderColor,tr=h.headerBackgroundColor,nr=h.headerBorderColor,ar=h.headerPadding,ir=h.headerHeight,pr=h.headerFontSize,dr=h.headerFontWeight,xr=h.headerTextColor,lr=h.dayHeaderColor,cr=h.dayHeaderFontWeight,gr=h.eventBackgroundColor,ur=h.eventBorderColor,br=h.eventTextColor,sr=h.eventBorderRadius,fr=h.eventOpacity,mr=h.eventElevation,hr=h.eventPadding,vr=h.eventFontSize,yr=h.eventFontFamily,Cr=h.eventFontWeight,wr=h.cellBackgroundColor,kr=h.cellHoverBackgroundColor,Sr=h.cellTodayBackgroundColor,Tr=h.cellBorderColor,Wr=h.cellTextColor,Br=h.cellFontSize,Gr=h.cellPadding,Mr=h.cellHeight,jr=h.timeGridSlotHeight,Dr=h.timeGridSlotBorderColor,Fr=h.timeGridNowIndicatorColor,Rr=h.timeGridLabelFontSize,Lr=h.timeGridLabelColor,Vr=h.nowIndicatorColor,zr=h.allDaySlot,Hr=h.allDayBackgroundColor,Yr=h.allDayTextColor,_r=h.resourceAreaWidth,Er=h.resourceBackgroundColor,Ar=h.resourceTextColor,Pr=h.resourceBorderColor,Or=h.resourceFontSize,Ir=h.resourcePadding,Nr=h.resourceGroupCollapsible,Xr=void 0!==Nr&&Nr,Kr=h.borderColor,qr=h.borderRadius,Jr=h.borderStyle,Qr=h.borderWidth,Ur=h.backgroundColor,Zr=h.fontFamily,$r=h.elevation,eo=h.gradientTheme,ro=h.headerGradientTheme,oo=h.cellGradientTheme,to=h.eventGradientTheme,no=h.overlayColor,ao=h.overlayOpacity,io=h.glassEffect,po=h.headerLetterSpacing,xo=h.textShadowStyle,lo=h.enableAnimations,co=h.animationSpeed,go=h.hoverEffect,uo=h.customButtons,bo=void 0===uo?{}:uo,so=h.onEventAdd,fo=h.configurationItemInfo,mo=a(k),ho=mo[0],vo=mo[1],yo=i(null),Co=a(new Set),wo=Co[0],ko=Co[1],So=function(e){return e&&"none"!==e&&{purple:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)",blue:"linear-gradient(135deg, #2196f3 0%, #1976d2 100%)",ocean:"linear-gradient(135deg, #00bcd4 0%, #009688 100%)",sunset:"linear-gradient(135deg, #ff9800 0%, #f57c00 100%)",forest:"linear-gradient(135deg, #4caf50 0%, #2e7d32 100%)",rose:"linear-gradient(135deg, #e91e63 0%, #c2185b 100%)",light:"linear-gradient(135deg, rgba(255,255,255,0.8) 0%, rgba(248,250,252,0.8) 100%)",subtle:"linear-gradient(135deg, rgba(248,250,252,0.5) 0%, rgba(241,245,249,0.5) 100%)",warm:"linear-gradient(135deg, rgba(255,251,235,0.8) 0%, rgba(254,243,199,0.8) 100%)",cool:"linear-gradient(135deg, rgba(240,249,255,0.8) 0%, rgba(219,234,254,0.8) 100%)",green:"linear-gradient(135deg, #4caf50 0%, #388e3c 100%)",orange:"linear-gradient(135deg, #ff9800 0%, #f57c00 100%)",red:"linear-gradient(135deg, #f44336 0%, #d32f2f 100%)",gradient:"linear-gradient(135deg, rgba(103, 58, 183, 0.9) 0%, rgba(63, 81, 181, 0.9) 100%)"}[e]||""},To=function(e){return e&&"normal"!==e&&{normal:"0",wide:"0.5px",wider:"1px",tight:"-0.5px"}[e]||"0"},Wo=function(e){return e&&"none"!==e&&{subtle:"0 1px 2px rgba(0, 0, 0, 0.1)",medium:"0 2px 4px rgba(0, 0, 0, 0.2)",strong:"0 3px 6px rgba(0, 0, 0, 0.3)"}[e]||""},Bo=function(e){return e&&{slow:"0.5s",medium:"0.3s",fast:"0.2s"}[e]||"0.3s"},Go=function(e){return e||"0"},Mo=function(e){return e&&"none"!==e?{light:{opacity:.1,blur:"10px"},medium:{opacity:.15,blur:"15px"},strong:{opacity:.2,blur:"20px"}}[e]:null},jo=function(e){if(!e||e<0)return"none";var r={0:"none",1:"0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)",2:"0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12)",3:"0px 3px 3px -2px rgba(0,0,0,0.2), 0px 3px 4px 0px rgba(0,0,0,0.14), 0px 1px 8px 0px rgba(0,0,0,0.12)",4:"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)",5:"0px 3px 5px -1px rgba(0,0,0,0.2), 0px 5px 8px 0px rgba(0,0,0,0.14), 0px 1px 14px 0px rgba(0,0,0,0.12)",6:"0px 3px 5px -1px rgba(0,0,0,0.2), 0px 6px 10px 0px rgba(0,0,0,0.14), 0px 1px 18px 0px rgba(0,0,0,0.12)",7:"0px 4px 5px -2px rgba(0,0,0,0.2), 0px 7px 10px 1px rgba(0,0,0,0.14), 0px 2px 16px 1px rgba(0,0,0,0.12)",8:"0px 5px 5px -3px rgba(0,0,0,0.2), 0px 8px 10px 1px rgba(0,0,0,0.14), 0px 3px 14px 2px rgba(0,0,0,0.12)",9:"0px 5px 6px -3px rgba(0,0,0,0.2), 0px 9px 12px 1px rgba(0,0,0,0.14), 0px 3px 16px 2px rgba(0,0,0,0.12)",10:"0px 6px 6px -3px rgba(0,0,0,0.2), 0px 10px 14px 1px rgba(0,0,0,0.14), 0px 4px 18px 3px rgba(0,0,0,0.12)",11:"0px 6px 7px -4px rgba(0,0,0,0.2), 0px 11px 15px 1px rgba(0,0,0,0.14), 0px 4px 20px 3px rgba(0,0,0,0.12)",12:"0px 7px 8px -4px rgba(0,0,0,0.2), 0px 12px 17px 2px rgba(0,0,0,0.14), 0px 5px 22px 4px rgba(0,0,0,0.12)",13:"0px 7px 8px -4px rgba(0,0,0,0.2), 0px 13px 19px 2px rgba(0,0,0,0.14), 0px 5px 24px 4px rgba(0,0,0,0.12)",14:"0px 7px 9px -4px rgba(0,0,0,0.2), 0px 14px 21px 2px rgba(0,0,0,0.14), 0px 5px 26px 4px rgba(0,0,0,0.12)",15:"0px 8px 9px -5px rgba(0,0,0,0.2), 0px 15px 22px 2px rgba(0,0,0,0.14), 0px 6px 28px 5px rgba(0,0,0,0.12)",16:"0px 8px 10px -5px rgba(0,0,0,0.2), 0px 16px 24px 2px rgba(0,0,0,0.14), 0px 6px 30px 5px rgba(0,0,0,0.12)",17:"0px 8px 11px -5px rgba(0,0,0,0.2), 0px 17px 26px 2px rgba(0,0,0,0.14), 0px 6px 32px 5px rgba(0,0,0,0.12)",18:"0px 9px 11px -5px rgba(0,0,0,0.2), 0px 18px 28px 2px rgba(0,0,0,0.14), 0px 7px 34px 6px rgba(0,0,0,0.12)",19:"0px 9px 12px -6px rgba(0,0,0,0.2), 0px 19px 29px 2px rgba(0,0,0,0.14), 0px 7px 36px 6px rgba(0,0,0,0.12)",20:"0px 10px 13px -6px rgba(0,0,0,0.2), 0px 20px 31px 3px rgba(0,0,0,0.14), 0px 8px 38px 7px rgba(0,0,0,0.12)",21:"0px 10px 13px -6px rgba(0,0,0,0.2), 0px 21px 33px 3px rgba(0,0,0,0.14), 0px 8px 40px 7px rgba(0,0,0,0.12)",22:"0px 10px 14px -6px rgba(0,0,0,0.2), 0px 22px 35px 3px rgba(0,0,0,0.14), 0px 8px 42px 7px rgba(0,0,0,0.12)",23:"0px 11px 14px -7px rgba(0,0,0,0.2), 0px 23px 36px 3px rgba(0,0,0,0.14), 0px 9px 44px 8px rgba(0,0,0,0.12)",24:"0px 11px 15px -7px rgba(0,0,0,0.2), 0px 24px 38px 3px rgba(0,0,0,0.14), 0px 9px 46px 8px rgba(0,0,0,0.12)"};return r[Math.min(Math.max(Math.round(e),0),24)]||r[0]},Do=Xr?{resourceGroupLabelContent:function(r){return o("span",e({style:{cursor:"pointer",userSelect:"none"},onClick:function(){return e=r.groupValue,ko((function(r){var o=new Set(r);return o.has(e)?o.delete(e):o.add(e),o}));var e}},{children:[wo.has(r.groupValue)?"▶ ":"▼ ",r.text]}))},filterResourcesWithEvents:!0,resources:null==S?void 0:S.filter((function(e){return!wo.has(e.group)}))}:{},Fo=[x,d,s,l,f,g,u,b,c],Ro=function(e){return N?"list"===e?"resourceList":"resource".concat(O?"Timeline":"TimeGrid"):O?"timeline":A?"dayGrid":"timeGrid"},Lo=((v={dayGridMonth:R})["".concat(Ro("day"),"Day")]=M,v["".concat(Ro("week"),"Week")]=D,v.listDay=!N&&H,v.listWeek=!N&&_,v.resourceTimeGridDay=N&&H,v.resourceTimeGridWeek=N&&_,v.multiMonthYear=V,v),Vo=Object.entries(Lo).filter((function(e){return e[1]})).map((function(e){return e[0]})),zo=function(e){return{month:"dayGridMonth",day:"".concat(Ro("day"),"Day"),week:"".concat(Ro("week"),"Week"),dayList:N?"resourceTimeGridDay":"listDay",weekList:N?"resourceTimeGridWeek":"listWeek",year:"multiMonthYear"}[e]||e},Ho=Lo[zo(B)]?zo(B):Vo[0]||"dayGridMonth",Yo=function(e){return"".concat(String(e.getHours()).padStart(2,"0"),":").concat(String(e.getMinutes()).padStart(2,"0"))},_o=p((function(e){var o,t=e.event,n=t.id,a=t.title,i=t.start,p=t.end,d={id:"".concat(n,"-").concat(null==i?void 0:i.getTime()),title:a,start:i,end:p,resourceId:null===(o=e.event.getResources()[0])||void 0===o?void 0:o.id};vo((function(e){return r(r([],e,!0),[d],!1)})),null==so||so(d),e.event.remove()}),[so]),Eo=V?{multiMonthYear:{type:"multiMonth",duration:{years:1},buttonText:"Year",multiMonthMaxColumns:"grid"===U?K:"stack"===U?1:K,multiMonthMinWidth:"continuous"===U?250:void 0,dayMaxEvents:J}}:{},Ao=e(e({width:Ce,marginLeft:Se,marginTop:We,marginRight:Ge,marginBottom:je,paddingLeft:Fe,paddingTop:Le,paddingRight:ze,paddingBottom:Ye,"--fc-button-bg":Ie,"--fc-button-color":Ne,"--fc-button-hover-bg":er,"--fc-event-bg":gr,"--fc-event-border-color":ur,"--fc-button-border-radius":$e,"& .fc .fc-toolbar":{backgroundColor:tr,background:So(ro)||tr,color:xr,borderColor:nr,padding:ar,height:ir,letterSpacing:To(po),textShadow:Wo(xo),"& .fc-toolbar-title":{fontSize:pr,fontWeight:dr,color:xr,letterSpacing:To(po),textShadow:Wo(xo)}},"& .fc .fc-col-header-cell-cushion":{color:lr,fontWeight:cr,letterSpacing:To(po),textShadow:Wo(xo)},"& .fc .fc-timegrid-slot-label-cushion":{color:Lr,fontSize:Rr},"& .fc .fc-event":{color:br},"& .fc .fc-event:hover":{backgroundColor:gr},"& .fc .fc-event-title":{fontSize:vr,fontFamily:yr,fontWeight:Cr},"& .fc .fc-now-indicator":{backgroundColor:Vr},"& .fc .fc-timegrid-now-indicator-line":{backgroundColor:Fr||Vr},"& .fc .fc-timegrid-slot":{height:jr,borderColor:Dr},"& .fc .fc-resource-area":{backgroundColor:Er,width:_r,borderColor:Pr,"& .fc-resource-cell":{color:Ar,fontSize:Or,padding:Ir}},"& .fc .fc-resource .fc-resource-title":{color:Ar},"& .fc .fc-resource-area-cell":{borderColor:Pr}},ye?{}:{"& .fc .fc-scrollgrid-shim, & .fc .fc-timegrid-divider":{display:"none"}}),{"& .fc":e(e({borderRadius:qr,borderColor:Kr,borderWidth:Go(Qr),borderStyle:Jr||"none",boxShadow:jo($r),fontFamily:Zr,backgroundColor:Ur,background:So(eo)||Ur},Mo(io)&&{backgroundColor:"rgba(255, 255, 255, ".concat(null===(y=Mo(io))||void 0===y?void 0:y.opacity,")"),backdropFilter:"blur(".concat(null===(C=Mo(io))||void 0===C?void 0:C.blur,")"),border:"1px solid rgba(255, 255, 255, 0.2)"}),no&&{position:"relative","&::before":{content:'""',position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:no,opacity:(T=ao,T&&"none"!==T&&{light:.1,medium:.2,strong:.3}[T]||0),pointerEvents:"none",borderRadius:"inherit"}}),"& .fc .fc-button":e({fontSize:Ae,padding:Pe||Oe?"".concat(Pe||"0"," ").concat(Oe||"0"):void 0,borderRadius:$e,backgroundColor:Ie,color:Ne,borderColor:Xe,fontWeight:Ke,boxShadow:jo(qe),height:Je,minWidth:Qe,margin:Ue||Ze?"".concat(Ue||"0"," ").concat(Ze||"0"):void 0},lo&&{transition:"all ".concat(Bo(co)," ease"),"&:hover":{backgroundColor:er,color:rr,borderColor:or,transform:"lift"===go?"translateY(-2px)":"scale"===go?"scale(1.05)":"bounce"===go?"translateY(-1px) scale(1.02)":"none"}}),"& .fc-event":e({backgroundColor:gr,color:br,borderColor:ur,borderRadius:sr,fontSize:vr,fontWeight:Cr,opacity:fr,boxShadow:jo(mr),padding:hr,borderWidth:Go(Qr),borderStyle:Jr||"none",background:So(to)||gr},lo&&{transition:"all ".concat(Bo(co)," ease"),"&:hover":{transform:"lift"===go?"translateY(-3px)":"scale"===go?"scale(1.02)":"glow"===go?"translateY(-1px)":"bounce"===go?"translateY(-2px) scale(1.01)":"none",boxShadow:"".concat(jo(mr)||"","glow"===go?", 0 0 20px rgba(103, 58, 183, 0.4)":", 0 8px 25px rgba(0, 0, 0, 0.15)")}}),"& .fc .fc-daygrid-day, & .fc .fc-timegrid-slot, & .fc .fc-col-header-cell":e({backgroundColor:wr,borderColor:Tr,borderWidth:Go(Qr),borderStyle:Jr||"none",padding:Gr,height:Mr,color:Wr,fontSize:Br,background:So(oo)||wr},lo&&{transition:"all ".concat(Bo(co)," ease"),"&:hover":{backgroundColor:kr,transform:"scale"===go?"scale(1.02)":"lift"===go?"translateY(-1px)":"none"}}),"& .fc .fc-day-today":{backgroundColor:Sr,background:So(oo)?"linear-gradient(45deg, ".concat(Sr," 0%, ").concat(So(oo)," 100%)"):Sr},"& .fc .fc-timegrid-all-day-slot":{backgroundColor:Hr},"& .fc .fc-timegrid-all-day-slot .fc-event":{color:Yr},'& .fc .fc-daygrid-day .fc-event[data-all-day="true"]':{color:Yr,backgroundColor:Hr}}),Po=p((function(){var e=[];return $&&e.push("prev"),re&&e.push("next"),te&&e.push("today"),Object.keys(bo).forEach((function(r){e.push(r)})),{left:e.join(","),center:"title",right:ae?Vo.join(","):""}}),[$,re,te,ae,bo,Vo]);return t(m,e({sx:Ao},fo,{children:t(n,e({ref:yo,height:we,plugins:Fo,themeSystem:Ee,schedulerLicenseKey:"CC-Attribution-NonCommercial-NoDerivatives",initialView:Ho,headerToolbar:Po(),views:Eo,editable:pe,droppable:xe,selectable:ce,businessHours:fe,eventOverlap:he,eventAllow:function(e){if(!fe)return!0;var r=(Array.isArray(fe)?fe:[fe]).find((function(r){return r.daysOfWeek.includes(e.start.getDay())}));return!!r&&(Yo(e.start)>=r.startTime&&Yo(e.end)<=r.endTime)},allDaySlot:zr,slotDuration:ue,snapDuration:se,events:ho,resources:S,resourceAreaWidth:_r,eventReceive:_o},Do))}))};export{h as CalendarMolecule};
2
- //# sourceMappingURL=CalendarMolecule.js.map