@zealicsolutions/web-ui 1.0.68 → 1.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/containers/Container.stories.d.ts +15 -1
- package/dist/cjs/containers/types/moleculeTypes.d.ts +32 -4
- package/dist/cjs/contexts/OrganismContext/OrganismContextProvider.d.ts +2 -2
- package/dist/cjs/index.js +1561 -1561
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/molecules/BinaryRadioButtons/BinaryRadioButtons.d.ts +47 -0
- package/dist/cjs/molecules/BinaryRadioButtons/BinaryRadioButtons.stories.d.ts +38 -0
- package/dist/cjs/molecules/Calendar/CalendarMolecule.d.ts +87 -31
- package/dist/cjs/molecules/Calendar/CalendarMolecule.stories.d.ts +7 -4
- package/dist/cjs/molecules/Calendar/ResourceTimelineCalendar.d.ts +101 -2
- package/dist/cjs/molecules/Calendar/SimpleCalendar.d.ts +98 -2
- package/dist/cjs/molecules/Calendar/YearViewCalendar.d.ts +82 -2
- package/dist/cjs/molecules/Calendar/hooks/useCalendarCore.d.ts +14 -0
- package/dist/cjs/molecules/Calendar/hooks/useCalendarCore.test.d.ts +1 -0
- package/dist/cjs/molecules/Calendar/hooks/useCalendarStyling.d.ts +229 -0
- package/dist/cjs/molecules/Checkbox/Checkbox.d.ts +34 -0
- package/dist/cjs/molecules/Checkbox/Checkbox.stories.d.ts +23 -0
- package/dist/cjs/molecules/Consent/Consent.stories.d.ts +76 -7
- package/dist/cjs/molecules/Consent/ConsentMolecule.d.ts +10 -4
- package/dist/cjs/molecules/index.d.ts +22 -20
- package/dist/esm/components/Checkbox/Checkbox.js +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/RichTextViewer/components/Leaf.js +1 -1
- package/dist/esm/components/RichTextViewer/components/Leaf.js.map +1 -1
- package/dist/esm/containers/Container.js +1 -1
- package/dist/esm/containers/Container.js.map +1 -1
- package/dist/esm/containers/Container.stories.d.ts +15 -1
- package/dist/esm/containers/ContainerStoriesComponent.js +1 -1
- package/dist/esm/containers/ContainerStoriesComponent.js.map +1 -1
- package/dist/esm/containers/FormContainer.js +1 -1
- package/dist/esm/containers/FormContainer.js.map +1 -1
- package/dist/esm/containers/FormStepContainer.js +1 -1
- package/dist/esm/containers/FormStepContainer.js.map +1 -1
- package/dist/esm/containers/OrganismItem.js +1 -1
- package/dist/esm/containers/OrganismItem.js.map +1 -1
- package/dist/esm/containers/hooks/useCheckCondition.js +1 -1
- package/dist/esm/containers/hooks/useCheckCondition.js.map +1 -1
- package/dist/esm/containers/hooks/useStateListenerValue.js +1 -1
- package/dist/esm/containers/hooks/useStateListenerValue.js.map +1 -1
- package/dist/esm/containers/hooks/useStateModifierHandler.js +1 -1
- package/dist/esm/containers/hooks/useStateModifierHandler.js.map +1 -1
- package/dist/esm/containers/types/moleculeTypes.d.ts +32 -4
- package/dist/esm/contexts/ApiContext/queries/useDataModelFieldOptions.js +1 -1
- package/dist/esm/contexts/ApiContext/queries/useDataModelFieldOptions.js.map +1 -1
- package/dist/esm/contexts/ButtonActionsContext/ButtonActionsContextProvider.js +1 -1
- package/dist/esm/contexts/ButtonActionsContext/ButtonActionsContextProvider.js.map +1 -1
- package/dist/esm/contexts/FormStepContext/FormStepContextProvider.js +1 -1
- package/dist/esm/contexts/FormStepContext/FormStepContextProvider.js.map +1 -1
- package/dist/esm/contexts/OrganismContext/OrganismContextProvider.d.ts +2 -2
- package/dist/esm/contexts/OrganismContext/OrganismContextProvider.js +1 -1
- package/dist/esm/contexts/OrganismContext/OrganismContextProvider.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/molecules/Accordion/Accordion.js +1 -1
- package/dist/esm/molecules/Accordion/Accordion.js.map +1 -1
- package/dist/esm/molecules/Avatar/Avatar.js +1 -1
- package/dist/esm/molecules/Avatar/Avatar.js.map +1 -1
- package/dist/esm/molecules/BaseMolecule.js +1 -1
- package/dist/esm/molecules/BaseMolecule.js.map +1 -1
- package/dist/esm/molecules/BasicTextField/BasicTextField.js +1 -1
- package/dist/esm/molecules/BasicTextField/BasicTextField.js.map +1 -1
- package/dist/esm/molecules/BinaryRadioButtons/BinaryRadioButtons.d.ts +47 -0
- package/dist/esm/molecules/BinaryRadioButtons/BinaryRadioButtons.js +2 -0
- package/dist/esm/molecules/BinaryRadioButtons/BinaryRadioButtons.js.map +1 -0
- package/dist/esm/molecules/BinaryRadioButtons/BinaryRadioButtons.stories.d.ts +38 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.d.ts +87 -31
- package/dist/esm/molecules/Calendar/CalendarMolecule.stories.d.ts +7 -4
- package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.d.ts +101 -2
- package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.js +1 -1
- package/dist/esm/molecules/Calendar/ResourceTimelineCalendar.js.map +1 -1
- package/dist/esm/molecules/Calendar/SimpleCalendar.d.ts +98 -2
- package/dist/esm/molecules/Calendar/SimpleCalendar.js +1 -1
- package/dist/esm/molecules/Calendar/SimpleCalendar.js.map +1 -1
- package/dist/esm/molecules/Calendar/YearViewCalendar.d.ts +82 -2
- package/dist/esm/molecules/Calendar/YearViewCalendar.js +1 -1
- package/dist/esm/molecules/Calendar/YearViewCalendar.js.map +1 -1
- package/dist/esm/molecules/Calendar/hooks/useCalendarCore.d.ts +14 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarCore.js +2 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarCore.js.map +1 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarCore.test.d.ts +1 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.d.ts +229 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.js +2 -0
- package/dist/esm/molecules/Calendar/hooks/useCalendarStyling.js.map +1 -0
- package/dist/esm/molecules/Checkbox/Checkbox.d.ts +34 -0
- package/dist/esm/molecules/Checkbox/Checkbox.js +2 -0
- package/dist/esm/molecules/Checkbox/Checkbox.js.map +1 -0
- package/dist/esm/molecules/Checkbox/Checkbox.stories.d.ts +23 -0
- package/dist/esm/molecules/Checklist/Checklist.js +1 -1
- package/dist/esm/molecules/Checklist/Checklist.js.map +1 -1
- package/dist/esm/molecules/Consent/Consent.stories.d.ts +76 -7
- package/dist/esm/molecules/Consent/ConsentMolecule.d.ts +10 -4
- package/dist/esm/molecules/Consent/ConsentMolecule.js +1 -1
- package/dist/esm/molecules/Consent/ConsentMolecule.js.map +1 -1
- package/dist/esm/molecules/CurrencyInputtField/CurrencyInputField.js +1 -1
- package/dist/esm/molecules/CurrencyInputtField/CurrencyInputField.js.map +1 -1
- package/dist/esm/molecules/DatePicker/DatePicker.js +1 -1
- package/dist/esm/molecules/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/molecules/Drawer/Drawer.js +1 -1
- package/dist/esm/molecules/Drawer/Drawer.js.map +1 -1
- package/dist/esm/molecules/EmailInputField/EmailInputField.js +1 -1
- package/dist/esm/molecules/EmailInputField/EmailInputField.js.map +1 -1
- package/dist/esm/molecules/Menu/Menu.js +1 -1
- package/dist/esm/molecules/Menu/Menu.js.map +1 -1
- package/dist/esm/molecules/NumericInputField/NumericInputField.js +1 -1
- package/dist/esm/molecules/NumericInputField/NumericInputField.js.map +1 -1
- package/dist/esm/molecules/PasswordSetup/PasswordSetup.js +1 -1
- package/dist/esm/molecules/PasswordSetup/PasswordSetup.js.map +1 -1
- package/dist/esm/molecules/PhoneNumberInputField/PhoneNumberInputField.js +1 -1
- package/dist/esm/molecules/PhoneNumberInputField/PhoneNumberInputField.js.map +1 -1
- package/dist/esm/molecules/Rating/Rating.js +1 -1
- package/dist/esm/molecules/Rating/Rating.js.map +1 -1
- package/dist/esm/molecules/Select/Select.js +1 -1
- package/dist/esm/molecules/Select/Select.js.map +1 -1
- package/dist/esm/molecules/Slider/Slider.js +1 -1
- package/dist/esm/molecules/Slider/Slider.js.map +1 -1
- package/dist/esm/molecules/SpeedDial/SpeedDial.js +1 -1
- package/dist/esm/molecules/SpeedDial/SpeedDial.js.map +1 -1
- package/dist/esm/molecules/Stepper/Stepper.js +1 -1
- package/dist/esm/molecules/Stepper/Stepper.js.map +1 -1
- package/dist/esm/molecules/Switch/Switch.js +1 -1
- package/dist/esm/molecules/Switch/Switch.js.map +1 -1
- package/dist/esm/molecules/Tabs/Tabs.js +1 -1
- package/dist/esm/molecules/Tabs/Tabs.js.map +1 -1
- package/dist/esm/molecules/index.d.ts +22 -20
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js +1 -1
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js.map +1 -1
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js +1 -1
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js.map +1 -1
- package/dist/esm/node_modules/@mui/material/Checkbox/Checkbox.js.map +1 -1
- package/dist/index.d.ts +686 -651
- package/package.json +3 -3
- package/dist/cjs/molecules/Consent/Consent.d.ts +0 -32
- package/dist/cjs/molecules/Consent/ConsentCapture.d.ts +0 -20
- package/dist/cjs/molecules/Consent/consentMock.d.ts +0 -7
- package/dist/esm/components/Checkbox/helpers.js +0 -2
- package/dist/esm/components/Checkbox/helpers.js.map +0 -1
- package/dist/esm/molecules/Calendar/CalendarMolecule.js +0 -2
- package/dist/esm/molecules/Calendar/CalendarMolecule.js.map +0 -1
- package/dist/esm/molecules/Consent/Consent.d.ts +0 -32
- package/dist/esm/molecules/Consent/Consent.js +0 -2
- package/dist/esm/molecules/Consent/Consent.js.map +0 -1
- package/dist/esm/molecules/Consent/ConsentCapture.d.ts +0 -20
- package/dist/esm/molecules/Consent/ConsentCapture.js +0 -2
- package/dist/esm/molecules/Consent/ConsentCapture.js.map +0 -1
- package/dist/esm/molecules/Consent/consentMock.d.ts +0 -7
- /package/dist/cjs/containers/{mock-data.d.ts → mockData.d.ts} +0 -0
- /package/dist/cjs/organisms/Organism/{mock-data.d.ts → mockData.d.ts} +0 -0
- /package/dist/esm/containers/{mock-data.d.ts → mockData.d.ts} +0 -0
- /package/dist/esm/organisms/Organism/{mock-data.d.ts → mockData.d.ts} +0 -0
@@ -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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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sources":["../../../../../../node_modules/@mui/material/Checkbox/Checkbox.js"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha } from '@mui/system/colorManipulator';\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport CheckBoxOutlineBlankIcon from \"../internal/svg-icons/CheckBoxOutlineBlank.js\";\nimport CheckBoxIcon from \"../internal/svg-icons/CheckBox.js\";\nimport IndeterminateCheckBoxIcon from \"../internal/svg-icons/IndeterminateCheckBox.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport checkboxClasses, { getCheckboxUtilityClass } from \"./checkboxClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n indeterminate,\n color,\n size\n } = ownerState;\n const slots = {\n root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`, `size${capitalize(size)}`]\n };\n const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n return {\n ...classes,\n // forward the disabled and checked classes to the SwitchBase\n ...composedClasses\n };\n};\nconst CheckboxRoot = styled(SwitchBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiCheckbox',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.indeterminate && styles.indeterminate, styles[`size${capitalize(ownerState.size)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n color: (theme.vars || theme).palette.text.secondary,\n variants: [{\n props: {\n color: 'default',\n disableRipple: false\n },\n style: {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity)\n }\n }\n }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color,\n disableRipple: false\n },\n style: {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[color].main, theme.palette.action.hoverOpacity)\n }\n }\n })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color\n },\n style: {\n [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n color: (theme.vars || theme).palette[color].main\n },\n [`&.${checkboxClasses.disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n }\n })), {\n // Should be last to override other colors\n props: {\n disableRipple: false\n },\n style: {\n // Reset on touch devices, it doesn't add specificity\n '&:hover': {\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n }\n }]\n})));\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiCheckbox'\n });\n const {\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon: iconProp = defaultIcon,\n indeterminate = false,\n indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n inputProps,\n size = 'medium',\n disableRipple = false,\n className,\n ...other\n } = props;\n const icon = indeterminate ? indeterminateIconProp : iconProp;\n const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n const ownerState = {\n ...props,\n disableRipple,\n color,\n indeterminate,\n size\n };\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CheckboxRoot, {\n type: \"checkbox\",\n inputProps: {\n 'data-indeterminate': indeterminate,\n ...inputProps\n },\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: icon.props.fontSize ?? size\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n fontSize: indeterminateIcon.props.fontSize ?? size\n }),\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className),\n disableRipple: disableRipple,\n ...other,\n classes: classes\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * The icon to display when the component is checked.\n * @default <CheckBoxIcon />\n */\n checkedIcon: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the ripple effect is disabled.\n * @default false\n */\n disableRipple: PropTypes.bool,\n /**\n * The icon to display when the component is unchecked.\n * @default <CheckBoxOutlineBlankIcon />\n */\n icon: PropTypes.node,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the `input`.\n * @default false\n */\n indeterminate: PropTypes.bool,\n /**\n * The icon to display when the component is indeterminate.\n * @default <IndeterminateCheckBoxIcon />\n */\n indeterminateIcon: PropTypes.node,\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * If `true`, the `input` element is required.\n * @default false\n */\n required: PropTypes.bool,\n /**\n * The size of the component.\n * `small` is equivalent to the dense checkbox styling.\n * @default 'medium'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Checkbox;"],"names":["CheckboxRoot","styled","SwitchBase","shouldForwardProp","prop","rootShouldForwardProp","name","slot","overridesResolver","props","styles","ownerState","root","indeterminate","capitalize","size","color","memoTheme","theme","vars","palette","text","secondary","variants","disableRipple","style","backgroundColor","action","activeChannel","hoverOpacity","alpha","active","Object","entries","filter","createSimplePaletteValueFilter","map","mainChannel","main","checkboxClasses","checked","disabled","defaultCheckedIcon","_jsx","CheckBoxIcon","defaultIcon","CheckBoxOutlineBlankIcon","defaultIndeterminateIcon","IndeterminateCheckBoxIcon","Checkbox","React","forwardRef","inProps","ref","useDefaultProps","checkedIcon","icon","iconProp","indeterminateIcon","indeterminateIconProp","inputProps","className","other","classes","slots","composedClasses","composeClasses","getCheckboxUtilityClass","useUtilityClasses","type","cloneElement","fontSize","clsx","process","env","NODE_ENV","propTypes","PropTypes","exports","bool","node","object","string","oneOfType","oneOf","defaultChecked","id","inputRef","refType","onChange","func","required","sx","arrayOf","value","any","Checkbox$1"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../../../../node_modules/@mui/material/Checkbox/Checkbox.js"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha } from '@mui/system/colorManipulator';\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport CheckBoxOutlineBlankIcon from \"../internal/svg-icons/CheckBoxOutlineBlank.js\";\nimport CheckBoxIcon from \"../internal/svg-icons/CheckBox.js\";\nimport IndeterminateCheckBoxIcon from \"../internal/svg-icons/IndeterminateCheckBox.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport checkboxClasses, { getCheckboxUtilityClass } from \"./checkboxClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n indeterminate,\n color,\n size\n } = ownerState;\n const slots = {\n root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`, `size${capitalize(size)}`]\n };\n const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n return {\n ...classes,\n // forward the disabled and checked classes to the SwitchBase\n ...composedClasses\n };\n};\nconst CheckboxRoot = styled(SwitchBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiCheckbox',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.indeterminate && styles.indeterminate, styles[`size${capitalize(ownerState.size)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n color: (theme.vars || theme).palette.text.secondary,\n variants: [{\n props: {\n color: 'default',\n disableRipple: false\n },\n style: {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity)\n }\n }\n }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color,\n disableRipple: false\n },\n style: {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[color].main, theme.palette.action.hoverOpacity)\n }\n }\n })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color\n },\n style: {\n [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n color: (theme.vars || theme).palette[color].main\n },\n [`&.${checkboxClasses.disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n }\n })), {\n // Should be last to override other colors\n props: {\n disableRipple: false\n },\n style: {\n // Reset on touch devices, it doesn't add specificity\n '&:hover': {\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n }\n }]\n})));\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiCheckbox'\n });\n const {\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon: iconProp = defaultIcon,\n indeterminate = false,\n indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n inputProps,\n size = 'medium',\n disableRipple = false,\n className,\n ...other\n } = props;\n const icon = indeterminate ? indeterminateIconProp : iconProp;\n const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n const ownerState = {\n ...props,\n disableRipple,\n color,\n indeterminate,\n size\n };\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CheckboxRoot, {\n type: \"checkbox\",\n inputProps: {\n 'data-indeterminate': indeterminate,\n ...inputProps\n },\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: icon.props.fontSize ?? size\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n fontSize: indeterminateIcon.props.fontSize ?? size\n }),\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className),\n disableRipple: disableRipple,\n ...other,\n classes: classes\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * The icon to display when the component is checked.\n * @default <CheckBoxIcon />\n */\n checkedIcon: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the ripple effect is disabled.\n * @default false\n */\n disableRipple: PropTypes.bool,\n /**\n * The icon to display when the component is unchecked.\n * @default <CheckBoxOutlineBlankIcon />\n */\n icon: PropTypes.node,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the `input`.\n * @default false\n */\n indeterminate: PropTypes.bool,\n /**\n * The icon to display when the component is indeterminate.\n * @default <IndeterminateCheckBoxIcon />\n */\n indeterminateIcon: PropTypes.node,\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * If `true`, the `input` element is required.\n * @default false\n */\n required: PropTypes.bool,\n /**\n * The size of the component.\n * `small` is equivalent to the dense checkbox styling.\n * @default 'medium'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Checkbox;"],"names":["CheckboxRoot","styled","SwitchBase","shouldForwardProp","prop","rootShouldForwardProp","name","slot","overridesResolver","props","styles","ownerState","root","indeterminate","capitalize","size","color","memoTheme","theme","vars","palette","text","secondary","variants","disableRipple","style","backgroundColor","action","activeChannel","hoverOpacity","alpha","active","Object","entries","filter","createSimplePaletteValueFilter","map","mainChannel","main","checkboxClasses","checked","disabled","defaultCheckedIcon","_jsx","CheckBoxIcon","defaultIcon","CheckBoxOutlineBlankIcon","defaultIndeterminateIcon","IndeterminateCheckBoxIcon","Checkbox","React","forwardRef","inProps","ref","useDefaultProps","checkedIcon","icon","iconProp","indeterminateIcon","indeterminateIconProp","inputProps","className","other","classes","slots","composedClasses","composeClasses","getCheckboxUtilityClass","useUtilityClasses","type","cloneElement","fontSize","clsx","process","env","NODE_ENV","propTypes","PropTypes","exports","bool","node","object","string","oneOfType","oneOf","defaultChecked","id","inputRef","refType","onChange","func","required","sx","arrayOf","value","any","MuiCheckbox"],"mappings":"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"}
|