@zealicsolutions/web-ui 1.0.44 → 1.0.45-beta.1
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/types/moleculeTypes.d.ts +16 -10
- package/dist/cjs/index.js +1577 -1577
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/molecules/Calendar/CalendarMolecule.d.ts +54 -0
- package/dist/cjs/molecules/Calendar/CalendarMolecule.stories.d.ts +3 -0
- package/dist/cjs/molecules/Visit/VisitMolecule.d.ts +41 -0
- package/dist/esm/containers/types/moleculeTypes.d.ts +16 -10
- package/dist/esm/molecules/BaseMolecule.js +1 -1
- package/dist/esm/molecules/BaseMolecule.js.map +1 -1
- package/dist/esm/molecules/Calendar/CalendarMolecule.d.ts +54 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.js +2 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.js.map +1 -0
- package/dist/esm/molecules/Calendar/CalendarMolecule.stories.d.ts +3 -0
- package/dist/esm/molecules/Visit/VisitMolecule.d.ts +41 -0
- package/dist/esm/molecules/Visit/VisitMolecule.js +2 -0
- package/dist/esm/molecules/Visit/VisitMolecule.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/core/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/core/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/core/internal-common.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/core/internal-common.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/daygrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/interaction/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/interaction/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/list/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/list/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/list/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/list/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/premium-common/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/react/dist/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/react/dist/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource/internal-common.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource/internal-common.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-daygrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-daygrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timegrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/resource-timeline/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/scrollgrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/scrollgrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timegrid/internal.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/index.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/index.js.map +1 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js +2 -0
- package/dist/esm/node_modules/@fullcalendar/timeline/internal.js.map +1 -0
- package/dist/esm/node_modules/preact/compat/dist/compat.mjs.js +2 -0
- package/dist/esm/node_modules/preact/compat/dist/compat.mjs.js.map +1 -0
- package/dist/esm/node_modules/preact/dist/preact.mjs.js +2 -0
- package/dist/esm/node_modules/preact/dist/preact.mjs.js.map +1 -0
- package/dist/esm/node_modules/preact/hooks/dist/hooks.mjs.js +2 -0
- package/dist/esm/node_modules/preact/hooks/dist/hooks.mjs.js.map +1 -0
- package/dist/index.d.ts +105 -10
- package/package.json +11 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"internal.js","sources":["../../../../../node_modules/@fullcalendar/timegrid/internal.js"],"sourcesContent":["import { Splitter, hasBgRendering, createFormatter, ViewContextType, ContentContainer, BaseComponent, DateComponent, diffDays, buildNavLinkAttrs, WeekNumberContainer, getStickyHeaderDates, ViewContainer, SimpleScrollGrid, getStickyFooterScrollbar, NowTimer, NowIndicatorContainer, renderScrollShim, rangeContainsMarker, startOfDay, asRoughMs, createDuration, RefMap, PositionCache, MoreLinkContainer, SegHierarchy, groupIntersectingEntries, binarySearch, getEntrySpanEnd, buildEntryKey, StandardEvent, memoize, sortEventSegs, DayCellContainer, hasCustomDayCellContent, getSegMeta, buildIsoString, computeEarliestSegStart, buildEventRangeKey, BgEvent, renderFill, addDurations, multiplyDuration, wholeDivideDurations, Slicer, intersectRanges, formatIsoTimeString, DayHeader, DaySeriesModel, DayTableModel, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createElement, createRef, Fragment } from '@fullcalendar/core/preact.js';\nimport { DayTable } from '@fullcalendar/daygrid/internal.js';\n\nclass AllDaySplitter extends Splitter {\n getKeyInfo() {\n return {\n allDay: {},\n timed: {},\n };\n }\n getKeysForDateSpan(dateSpan) {\n if (dateSpan.allDay) {\n return ['allDay'];\n }\n return ['timed'];\n }\n getKeysForEventDef(eventDef) {\n if (!eventDef.allDay) {\n return ['timed'];\n }\n if (hasBgRendering(eventDef)) {\n return ['timed', 'allDay'];\n }\n return ['allDay'];\n }\n}\n\nconst DEFAULT_SLAT_LABEL_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short',\n});\nfunction TimeColsAxisCell(props) {\n let classNames = [\n 'fc-timegrid-slot',\n 'fc-timegrid-slot-label',\n props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor',\n ];\n return (createElement(ViewContextType.Consumer, null, (context) => {\n if (!props.isLabeled) {\n return (createElement(\"td\", { className: classNames.join(' '), \"data-time\": props.isoTimeStr }));\n }\n let { dateEnv, options, viewApi } = context;\n let labelFormat = // TODO: fully pre-parse\n options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :\n Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) :\n createFormatter(options.slotLabelFormat);\n let renderProps = {\n level: 0,\n time: props.time,\n date: dateEnv.toDate(props.date),\n view: viewApi,\n text: dateEnv.format(props.date, labelFormat),\n };\n return (createElement(ContentContainer, { elTag: \"td\", elClasses: classNames, elAttrs: {\n 'data-time': props.isoTimeStr,\n }, renderProps: renderProps, generatorName: \"slotLabelContent\", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (createElement(\"div\", { className: \"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame\" },\n createElement(InnerContent, { elTag: \"div\", elClasses: [\n 'fc-timegrid-slot-label-cushion',\n 'fc-scrollgrid-shrink-cushion',\n ] })))));\n }));\n}\nfunction renderInnerContent(props) {\n return props.text;\n}\n\nclass TimeBodyAxis extends BaseComponent {\n render() {\n return this.props.slatMetas.map((slatMeta) => (createElement(\"tr\", { key: slatMeta.key },\n createElement(TimeColsAxisCell, Object.assign({}, slatMeta)))));\n }\n}\n\nconst DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: 'short' });\nconst AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;\nclass TimeColsView extends DateComponent {\n constructor() {\n super(...arguments);\n this.allDaySplitter = new AllDaySplitter(); // for use by subclasses\n this.headerElRef = createRef();\n this.rootElRef = createRef();\n this.scrollerElRef = createRef();\n this.state = {\n slatCoords: null,\n };\n this.handleScrollTopRequest = (scrollTop) => {\n let scrollerEl = this.scrollerElRef.current;\n if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer\n scrollerEl.scrollTop = scrollTop;\n }\n };\n /* Header Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n this.renderHeadAxis = (rowKey, frameHeight = '') => {\n let { options } = this.context;\n let { dateProfile } = this.props;\n let range = dateProfile.renderRange;\n let dayCnt = diffDays(range.start, range.end);\n // only do in day views (to avoid doing in week views that dont need it)\n let navLinkAttrs = (dayCnt === 1)\n ? buildNavLinkAttrs(this.context, range.start, 'week')\n : {};\n if (options.weekNumbers && rowKey === 'day') {\n return (createElement(WeekNumberContainer, { elTag: \"th\", elClasses: [\n 'fc-timegrid-axis',\n 'fc-scrollgrid-shrink',\n ], elAttrs: {\n 'aria-hidden': true,\n }, date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, (InnerContent) => (createElement(\"div\", { className: [\n 'fc-timegrid-axis-frame',\n 'fc-scrollgrid-shrink-frame',\n 'fc-timegrid-axis-frame-liquid',\n ].join(' '), style: { height: frameHeight } },\n createElement(InnerContent, { elTag: \"a\", elClasses: [\n 'fc-timegrid-axis-cushion',\n 'fc-scrollgrid-shrink-cushion',\n 'fc-scrollgrid-sync-inner',\n ], elAttrs: navLinkAttrs })))));\n }\n return (createElement(\"th\", { \"aria-hidden\": true, className: \"fc-timegrid-axis\" },\n createElement(\"div\", { className: \"fc-timegrid-axis-frame\", style: { height: frameHeight } })));\n };\n /* Table Component Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,\n // but DayGrid still needs to have classNames on inner elements in order to measure.\n this.renderTableRowAxis = (rowHeight) => {\n let { options, viewApi } = this.context;\n let renderProps = {\n text: options.allDayText,\n view: viewApi,\n };\n return (\n // TODO: make reusable hook. used in list view too\n createElement(ContentContainer, { elTag: \"td\", elClasses: [\n 'fc-timegrid-axis',\n 'fc-scrollgrid-shrink',\n ], elAttrs: {\n 'aria-hidden': true,\n }, renderProps: renderProps, generatorName: \"allDayContent\", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (createElement(\"div\", { className: [\n 'fc-timegrid-axis-frame',\n 'fc-scrollgrid-shrink-frame',\n rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : '',\n ].join(' '), style: { height: rowHeight } },\n createElement(InnerContent, { elTag: \"span\", elClasses: [\n 'fc-timegrid-axis-cushion',\n 'fc-scrollgrid-shrink-cushion',\n 'fc-scrollgrid-sync-inner',\n ] })))));\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n };\n }\n // rendering\n // ----------------------------------------------------------------------------------------------------\n renderSimpleLayout(headerRowContent, allDayContent, timeContent) {\n let { context, props } = this;\n let sections = [];\n let stickyHeaderDates = getStickyHeaderDates(context.options);\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n chunk: {\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n },\n });\n }\n if (allDayContent) {\n sections.push({\n type: 'body',\n key: 'all-day',\n chunk: { content: allDayContent },\n });\n sections.push({\n type: 'body',\n key: 'all-day-divider',\n outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?\n createElement(\"tr\", { role: \"presentation\", className: \"fc-scrollgrid-section\" },\n createElement(\"td\", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),\n });\n }\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n expandRows: Boolean(context.options.expandRows),\n chunk: {\n scrollerElRef: this.scrollerElRef,\n content: timeContent,\n },\n });\n return (createElement(ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },\n createElement(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: 'shrink' }], sections: sections })));\n }\n renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {\n let ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n if (!ScrollGrid) {\n throw new Error('No ScrollGrid implementation');\n }\n let { context, props } = this;\n let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);\n let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);\n let sections = [];\n if (headerRowContent) {\n sections.push({\n type: 'header',\n key: 'header',\n isSticky: stickyHeaderDates,\n syncRowHeights: true,\n chunks: [\n {\n key: 'axis',\n rowContent: (arg) => (createElement(\"tr\", { role: \"presentation\" }, this.renderHeadAxis('day', arg.rowSyncHeights[0]))),\n },\n {\n key: 'cols',\n elRef: this.headerElRef,\n tableClassName: 'fc-col-header',\n rowContent: headerRowContent,\n },\n ],\n });\n }\n if (allDayContent) {\n sections.push({\n type: 'body',\n key: 'all-day',\n syncRowHeights: true,\n chunks: [\n {\n key: 'axis',\n rowContent: (contentArg) => (createElement(\"tr\", { role: \"presentation\" }, this.renderTableRowAxis(contentArg.rowSyncHeights[0]))),\n },\n {\n key: 'cols',\n content: allDayContent,\n },\n ],\n });\n sections.push({\n key: 'all-day-divider',\n type: 'body',\n outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?\n createElement(\"tr\", { role: \"presentation\", className: \"fc-scrollgrid-section\" },\n createElement(\"td\", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),\n });\n }\n let isNowIndicator = context.options.nowIndicator;\n sections.push({\n type: 'body',\n key: 'body',\n liquid: true,\n expandRows: Boolean(context.options.expandRows),\n chunks: [\n {\n key: 'axis',\n content: (arg) => (\n // TODO: make this now-indicator arrow more DRY with TimeColsContent\n createElement(\"div\", { className: \"fc-timegrid-axis-chunk\" },\n createElement(\"table\", { \"aria-hidden\": true, style: { height: arg.expandRows ? arg.clientHeight : '' } },\n arg.tableColGroupNode,\n createElement(\"tbody\", null,\n createElement(TimeBodyAxis, { slatMetas: slatMetas }))),\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" },\n createElement(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, (nowDate) => {\n let nowIndicatorTop = isNowIndicator &&\n slatCoords &&\n slatCoords.safeComputeTop(nowDate); // might return void\n if (typeof nowIndicatorTop === 'number') {\n return (createElement(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: nowDate }));\n }\n return null;\n })))),\n },\n {\n key: 'cols',\n scrollerElRef: this.scrollerElRef,\n content: timeContent,\n },\n ],\n });\n if (stickyFooterScrollbar) {\n sections.push({\n key: 'footer',\n type: 'footer',\n isSticky: true,\n chunks: [\n {\n key: 'axis',\n content: renderScrollShim,\n },\n {\n key: 'cols',\n content: renderScrollShim,\n },\n ],\n });\n }\n return (createElement(ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },\n createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: false, colGroups: [\n { width: 'shrink', cols: [{ width: 'shrink' }] },\n { cols: [{ span: colCnt, minWidth: dayMinWidth }] },\n ], sections: sections })));\n }\n /* Dimensions\n ------------------------------------------------------------------------------------------------------------------*/\n getAllDayMaxEventProps() {\n let { dayMaxEvents, dayMaxEventRows } = this.context.options;\n if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?\n dayMaxEvents = undefined;\n dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure \"auto\" goes to a real number\n }\n return { dayMaxEvents, dayMaxEventRows };\n }\n}\nfunction renderAllDayInner(renderProps) {\n return renderProps.text;\n}\n\nclass TimeColsSlatsCoords {\n constructor(positions, dateProfile, slotDuration) {\n this.positions = positions;\n this.dateProfile = dateProfile;\n this.slotDuration = slotDuration;\n }\n safeComputeTop(date) {\n let { dateProfile } = this;\n if (rangeContainsMarker(dateProfile.currentRange, date)) {\n let startOfDayDate = startOfDay(date);\n let timeMs = date.valueOf() - startOfDayDate.valueOf();\n if (timeMs >= asRoughMs(dateProfile.slotMinTime) &&\n timeMs < asRoughMs(dateProfile.slotMaxTime)) {\n return this.computeTimeTop(createDuration(timeMs));\n }\n }\n return null;\n }\n // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n computeDateTop(when, startOfDayDate) {\n if (!startOfDayDate) {\n startOfDayDate = startOfDay(when);\n }\n return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));\n }\n // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.\n // Eventually allow computation with arbirary slat dates.\n computeTimeTop(duration) {\n let { positions, dateProfile } = this;\n let len = positions.els.length;\n // floating-point value of # of slots covered\n let slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);\n let slatIndex;\n let slatRemainder;\n // compute a floating-point number for how many slats should be progressed through.\n // from 0 to number of slats (inclusive)\n // constrained because slotMinTime/slotMaxTime might be customized.\n slatCoverage = Math.max(0, slatCoverage);\n slatCoverage = Math.min(len, slatCoverage);\n // an integer index of the furthest whole slat\n // from 0 to number slats (*exclusive*, so len-1)\n slatIndex = Math.floor(slatCoverage);\n slatIndex = Math.min(slatIndex, len - 1);\n // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n // could be 1.0 if slatCoverage is covering *all* the slots\n slatRemainder = slatCoverage - slatIndex;\n return positions.tops[slatIndex] +\n positions.getHeight(slatIndex) * slatRemainder;\n }\n}\n\nclass TimeColsSlatsBody extends BaseComponent {\n render() {\n let { props, context } = this;\n let { options } = context;\n let { slatElRefs } = props;\n return (createElement(\"tbody\", null, props.slatMetas.map((slatMeta, i) => {\n let renderProps = {\n time: slatMeta.time,\n date: context.dateEnv.toDate(slatMeta.date),\n view: context.viewApi,\n };\n return (createElement(\"tr\", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },\n props.axis && (createElement(TimeColsAxisCell, Object.assign({}, slatMeta))),\n createElement(ContentContainer, { elTag: \"td\", elClasses: [\n 'fc-timegrid-slot',\n 'fc-timegrid-slot-lane',\n !slatMeta.isLabeled && 'fc-timegrid-slot-minor',\n ], elAttrs: {\n 'data-time': slatMeta.isoTimeStr,\n }, renderProps: renderProps, generatorName: \"slotLaneContent\", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount })));\n })));\n }\n}\n\n/*\nfor the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n*/\nclass TimeColsSlats extends BaseComponent {\n constructor() {\n super(...arguments);\n this.rootElRef = createRef();\n this.slatElRefs = new RefMap();\n }\n render() {\n let { props, context } = this;\n return (createElement(\"div\", { ref: this.rootElRef, className: \"fc-timegrid-slots\" },\n createElement(\"table\", { \"aria-hidden\": true, className: context.theme.getClass('table'), style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n height: props.minHeight,\n } },\n props.tableColGroupNode /* relies on there only being a single <col> for the axis */,\n createElement(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));\n }\n componentDidMount() {\n this.updateSizing();\n }\n componentDidUpdate() {\n this.updateSizing();\n }\n componentWillUnmount() {\n if (this.props.onCoords) {\n this.props.onCoords(null);\n }\n }\n updateSizing() {\n let { context, props } = this;\n if (props.onCoords &&\n props.clientWidth !== null // means sizing has stabilized\n ) {\n let rootEl = this.rootElRef.current;\n if (rootEl.offsetHeight) { // not hidden by css\n props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));\n }\n }\n }\n}\nfunction collectSlatEls(elMap, slatMetas) {\n return slatMetas.map((slatMeta) => elMap[slatMeta.key]);\n}\n\nfunction splitSegsByCol(segs, colCnt) {\n let segsByCol = [];\n let i;\n for (i = 0; i < colCnt; i += 1) {\n segsByCol.push([]);\n }\n if (segs) {\n for (i = 0; i < segs.length; i += 1) {\n segsByCol[segs[i].col].push(segs[i]);\n }\n }\n return segsByCol;\n}\nfunction splitInteractionByCol(ui, colCnt) {\n let byRow = [];\n if (!ui) {\n for (let i = 0; i < colCnt; i += 1) {\n byRow[i] = null;\n }\n }\n else {\n for (let i = 0; i < colCnt; i += 1) {\n byRow[i] = {\n affectedInstances: ui.affectedInstances,\n isEvent: ui.isEvent,\n segs: [],\n };\n }\n for (let seg of ui.segs) {\n byRow[seg.col].segs.push(seg);\n }\n }\n return byRow;\n}\n\nclass TimeColMoreLink extends BaseComponent {\n render() {\n let { props } = this;\n return (createElement(MoreLinkContainer, { elClasses: ['fc-timegrid-more-link'], elStyle: {\n top: props.top,\n bottom: props.bottom,\n }, allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: () => renderPlainFgSegs(props.hiddenSegs, props), defaultGenerator: renderMoreLinkInner, forceTimed: true }, (InnerContent) => (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timegrid-more-link-inner', 'fc-sticky'] }))));\n }\n}\nfunction renderMoreLinkInner(props) {\n return props.shortText;\n}\n\n// segInputs assumed sorted\nfunction buildPositioning(segInputs, strictOrder, maxStackCnt) {\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 hiddenGroups = groupIntersectingEntries(hiddenEntries);\n let web = buildWeb(hierarchy);\n web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0\n let segRects = webToRects(web);\n return { segRects, hiddenGroups };\n}\nfunction buildWeb(hierarchy) {\n const { entriesByLevel } = hierarchy;\n const buildNode = cacheable((level, lateral) => level + ':' + lateral, (level, lateral) => {\n let siblingRange = findNextLevelSegs(hierarchy, level, lateral);\n let nextLevelRes = buildNodes(siblingRange, buildNode);\n let entry = entriesByLevel[level][lateral];\n return [\n Object.assign(Object.assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),\n entry.thickness + nextLevelRes[1], // the pressure builds\n ];\n });\n return buildNodes(entriesByLevel.length\n ? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length }\n : null, buildNode)[0];\n}\nfunction buildNodes(siblingRange, buildNode) {\n if (!siblingRange) {\n return [[], 0];\n }\n let { level, lateralStart, lateralEnd } = siblingRange;\n let lateral = lateralStart;\n let pairs = [];\n while (lateral < lateralEnd) {\n pairs.push(buildNode(level, lateral));\n lateral += 1;\n }\n pairs.sort(cmpDescPressures);\n return [\n pairs.map(extractNode),\n pairs[0][1], // first item's pressure\n ];\n}\nfunction cmpDescPressures(a, b) {\n return b[1] - a[1];\n}\nfunction extractNode(a) {\n return a[0];\n}\nfunction findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {\n let { levelCoords, entriesByLevel } = hierarchy;\n let subjectEntry = entriesByLevel[subjectLevel][subjectLateral];\n let afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;\n let levelCnt = levelCoords.length;\n let level = subjectLevel;\n // skip past levels that are too high up\n for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)\n ; // do nothing\n for (; level < levelCnt; level += 1) {\n let entries = entriesByLevel[level];\n let entry;\n let searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);\n let lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one\n let lateralEnd = lateralStart;\n while ( // loop through entries that horizontally intersect\n (entry = entries[lateralEnd]) && // but not past the whole seg list\n entry.span.start < subjectEntry.span.end) {\n lateralEnd += 1;\n }\n if (lateralStart < lateralEnd) {\n return { level, lateralStart, lateralEnd };\n }\n }\n return null;\n}\nfunction stretchWeb(topLevelNodes, totalThickness) {\n const stretchNode = cacheable((node, startCoord, prevThickness) => buildEntryKey(node), (node, startCoord, prevThickness) => {\n let { nextLevelNodes, thickness } = node;\n let allThickness = thickness + prevThickness;\n let thicknessFraction = thickness / allThickness;\n let endCoord;\n let newChildren = [];\n if (!nextLevelNodes.length) {\n endCoord = totalThickness;\n }\n else {\n for (let childNode of nextLevelNodes) {\n if (endCoord === undefined) {\n let res = stretchNode(childNode, startCoord, allThickness);\n endCoord = res[0];\n newChildren.push(res[1]);\n }\n else {\n let res = stretchNode(childNode, endCoord, 0);\n newChildren.push(res[1]);\n }\n }\n }\n let newThickness = (endCoord - startCoord) * thicknessFraction;\n return [endCoord - newThickness, Object.assign(Object.assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];\n });\n return topLevelNodes.map((node) => stretchNode(node, 0, 0)[1]);\n}\n// not sorted in any particular order\nfunction webToRects(topLevelNodes) {\n let rects = [];\n const processNode = cacheable((node, levelCoord, stackDepth) => buildEntryKey(node), (node, levelCoord, stackDepth) => {\n let rect = Object.assign(Object.assign({}, node), { levelCoord,\n stackDepth, stackForward: 0 });\n rects.push(rect);\n return (rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1);\n });\n function processNodes(nodes, levelCoord, stackDepth) {\n let stackForward = 0;\n for (let node of nodes) {\n stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);\n }\n return stackForward;\n }\n processNodes(topLevelNodes, 0, 0);\n return rects; // TODO: sort rects by levelCoord to be consistent with toRects?\n}\n// TODO: move to general util\nfunction cacheable(keyFunc, workFunc) {\n const cache = {};\n return (...args) => {\n let key = keyFunc(...args);\n return (key in cache)\n ? cache[key]\n : (cache[key] = workFunc(...args));\n };\n}\n\nfunction computeSegVCoords(segs, colDate, slatCoords = null, eventMinHeight = 0) {\n let vcoords = [];\n if (slatCoords) {\n for (let i = 0; i < segs.length; i += 1) {\n let seg = segs[i];\n let spanStart = slatCoords.computeDateTop(seg.start, colDate);\n let spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(\n slatCoords.computeDateTop(seg.end, colDate));\n vcoords.push({\n start: Math.round(spanStart),\n end: Math.round(spanEnd), //\n });\n }\n }\n return vcoords;\n}\nfunction computeFgSegPlacements(segs, segVCoords, // might not have for every seg\neventOrderStrict, eventMaxStack) {\n let segInputs = [];\n let dumbSegs = []; // segs without coords\n for (let i = 0; i < segs.length; i += 1) {\n let vcoords = segVCoords[i];\n if (vcoords) {\n segInputs.push({\n index: i,\n thickness: 1,\n span: vcoords,\n });\n }\n else {\n dumbSegs.push(segs[i]);\n }\n }\n let { segRects, hiddenGroups } = buildPositioning(segInputs, eventOrderStrict, eventMaxStack);\n let segPlacements = [];\n for (let segRect of segRects) {\n segPlacements.push({\n seg: segs[segRect.index],\n rect: segRect,\n });\n }\n for (let dumbSeg of dumbSegs) {\n segPlacements.push({ seg: dumbSeg, rect: null });\n }\n return { segPlacements, hiddenGroups };\n}\n\nconst DEFAULT_TIME_FORMAT = createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n meridiem: false,\n});\nclass TimeColEvent extends BaseComponent {\n render() {\n return (createElement(StandardEvent, Object.assign({}, this.props, { elClasses: [\n 'fc-timegrid-event',\n 'fc-v-event',\n this.props.isShort && 'fc-timegrid-event-short',\n ], defaultTimeFormat: DEFAULT_TIME_FORMAT })));\n }\n}\n\nclass TimeCol extends BaseComponent {\n constructor() {\n super(...arguments);\n this.sortEventSegs = memoize(sortEventSegs);\n }\n // TODO: memoize event-placement?\n render() {\n let { props, context } = this;\n let { options } = context;\n let isSelectMirror = options.selectMirror;\n let mirrorSegs = // yuck\n (props.eventDrag && props.eventDrag.segs) ||\n (props.eventResize && props.eventResize.segs) ||\n (isSelectMirror && props.dateSelectionSegs) ||\n [];\n let interactionAffectedInstances = // TODO: messy way to compute this\n (props.eventDrag && props.eventDrag.affectedInstances) ||\n (props.eventResize && props.eventResize.affectedInstances) ||\n {};\n let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);\n return (createElement(DayCellContainer, { elTag: \"td\", elRef: props.elRef, elClasses: [\n 'fc-timegrid-col',\n ...(props.extraClassNames || []),\n ], elAttrs: Object.assign({ role: 'gridcell' }, props.extraDataAttrs), date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraRenderProps: props.extraRenderProps }, (InnerContent) => (createElement(\"div\", { className: \"fc-timegrid-col-frame\" },\n createElement(\"div\", { className: \"fc-timegrid-col-bg\" },\n this.renderFillSegs(props.businessHourSegs, 'non-business'),\n this.renderFillSegs(props.bgEventSegs, 'bg-event'),\n this.renderFillSegs(props.dateSelectionSegs, 'highlight')),\n createElement(\"div\", { className: \"fc-timegrid-col-events\" }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),\n createElement(\"div\", { className: \"fc-timegrid-col-events\" }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror), 'mirror')),\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" }, this.renderNowIndicator(props.nowIndicatorSegs)),\n hasCustomDayCellContent(options) && (createElement(InnerContent, { elTag: \"div\", elClasses: ['fc-timegrid-col-misc'] }))))));\n }\n renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n let { props } = this;\n if (props.forPrint) {\n return renderPlainFgSegs(sortedFgSegs, props);\n }\n return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey);\n }\n renderPositionedFgSegs(segs, // if not mirror, needs to be sorted\n segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n let { eventMaxStack, eventShortHeight, eventOrderStrict, eventMinHeight } = this.context.options;\n let { date, slatCoords, eventSelection, todayRange, nowDate } = this.props;\n let isMirror = isDragging || isResizing || isDateSelecting;\n let segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);\n let { segPlacements, hiddenGroups } = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack);\n return (createElement(Fragment, null,\n this.renderHiddenGroups(hiddenGroups, segs),\n segPlacements.map((segPlacement) => {\n let { seg, rect } = segPlacement;\n let instanceId = seg.eventRange.instance.instanceId;\n let isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);\n let vStyle = computeSegVStyle(rect && rect.span);\n let hStyle = (!isMirror && rect) ? this.computeSegHStyle(rect) : { left: 0, right: 0 };\n let isInset = Boolean(rect) && rect.stackForward > 0;\n let isShort = Boolean(rect) && (rect.span.end - rect.span.start) < eventShortHeight; // look at other places for this problem\n return (createElement(\"div\", { className: 'fc-timegrid-event-harness' +\n (isInset ? ' fc-timegrid-event-harness-inset' : ''), key: forcedKey || instanceId, style: Object.assign(Object.assign({ visibility: isVisible ? '' : 'hidden' }, vStyle), hStyle) },\n createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, isShort: isShort }, getSegMeta(seg, todayRange, nowDate)))));\n })));\n }\n // will already have eventMinHeight applied because segInputs already had it\n renderHiddenGroups(hiddenGroups, segs) {\n let { extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize } = this.props;\n return (createElement(Fragment, null, hiddenGroups.map((hiddenGroup) => {\n let positionCss = computeSegVStyle(hiddenGroup.span);\n let hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);\n return (createElement(TimeColMoreLink, { key: buildIsoString(computeEarliestSegStart(hiddenSegs)), hiddenSegs: hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan: extraDateSpan, dateProfile: dateProfile, todayRange: todayRange, nowDate: nowDate, eventSelection: eventSelection, eventDrag: eventDrag, eventResize: eventResize }));\n })));\n }\n renderFillSegs(segs, fillType) {\n let { props, context } = this;\n let segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated\n let children = segVCoords.map((vcoords, i) => {\n let seg = segs[i];\n return (createElement(\"div\", { key: buildEventRangeKey(seg.eventRange), className: \"fc-timegrid-bg-harness\", style: computeSegVStyle(vcoords) }, fillType === 'bg-event' ?\n createElement(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, props.todayRange, props.nowDate))) :\n renderFill(fillType)));\n });\n return createElement(Fragment, null, children);\n }\n renderNowIndicator(segs) {\n let { slatCoords, date } = this.props;\n if (!slatCoords) {\n return null;\n }\n return segs.map((seg, i) => (createElement(NowIndicatorContainer\n // key doesn't matter. will only ever be one\n , { \n // key doesn't matter. will only ever be one\n key: i, elClasses: ['fc-timegrid-now-indicator-line'], elStyle: {\n top: slatCoords.computeDateTop(seg.start, date),\n }, isAxis: false, date: date })));\n }\n computeSegHStyle(segHCoords) {\n let { isRtl, options } = this.context;\n let shouldOverlap = options.slotEventOverlap;\n let nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point\n let farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point\n let left; // amount of space from left edge, a fraction of the total width\n let right; // amount of space from right edge, a fraction of the total width\n if (shouldOverlap) {\n // double the width, but don't go beyond the maximum forward coordinate (1.0)\n farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);\n }\n if (isRtl) {\n left = 1 - farCoord;\n right = nearCoord;\n }\n else {\n left = nearCoord;\n right = 1 - farCoord;\n }\n let props = {\n zIndex: segHCoords.stackDepth + 1,\n left: left * 100 + '%',\n right: right * 100 + '%',\n };\n if (shouldOverlap && !segHCoords.stackForward) {\n // add padding to the edge so that forward stacked events don't cover the resizer's icon\n props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n }\n return props;\n }\n}\nfunction renderPlainFgSegs(sortedFgSegs, { todayRange, nowDate, eventSelection, eventDrag, eventResize }) {\n let hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) ||\n (eventResize ? eventResize.affectedInstances : null) ||\n {};\n return (createElement(Fragment, null, sortedFgSegs.map((seg) => {\n let instanceId = seg.eventRange.instance.instanceId;\n return (createElement(\"div\", { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? 'hidden' : '' } },\n createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, getSegMeta(seg, todayRange, nowDate)))));\n })));\n}\nfunction computeSegVStyle(segVCoords) {\n if (!segVCoords) {\n return { top: '', bottom: '' };\n }\n return {\n top: segVCoords.start,\n bottom: -segVCoords.end,\n };\n}\nfunction compileSegsFromEntries(segEntries, allSegs) {\n return segEntries.map((segEntry) => allSegs[segEntry.index]);\n}\n\nclass TimeColsContent extends BaseComponent {\n constructor() {\n super(...arguments);\n this.splitFgEventSegs = memoize(splitSegsByCol);\n this.splitBgEventSegs = memoize(splitSegsByCol);\n this.splitBusinessHourSegs = memoize(splitSegsByCol);\n this.splitNowIndicatorSegs = memoize(splitSegsByCol);\n this.splitDateSelectionSegs = memoize(splitSegsByCol);\n this.splitEventDrag = memoize(splitInteractionByCol);\n this.splitEventResize = memoize(splitInteractionByCol);\n this.rootElRef = createRef();\n this.cellElRefs = new RefMap();\n }\n render() {\n let { props, context } = this;\n let nowIndicatorTop = context.options.nowIndicator &&\n props.slatCoords &&\n props.slatCoords.safeComputeTop(props.nowDate); // might return void\n let colCnt = props.cells.length;\n let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);\n let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);\n let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);\n let nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);\n let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);\n let eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);\n let eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);\n return (createElement(\"div\", { className: \"fc-timegrid-cols\", ref: this.rootElRef },\n createElement(\"table\", { role: \"presentation\", style: {\n minWidth: props.tableMinWidth,\n width: props.clientWidth,\n } },\n props.tableColGroupNode,\n createElement(\"tbody\", { role: \"presentation\" },\n createElement(\"tr\", { role: \"row\" },\n props.axis && (createElement(\"td\", { \"aria-hidden\": true, className: \"fc-timegrid-col fc-timegrid-axis\" },\n createElement(\"div\", { className: \"fc-timegrid-col-frame\" },\n createElement(\"div\", { className: \"fc-timegrid-now-indicator-container\" }, typeof nowIndicatorTop === 'number' && (createElement(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: props.nowDate })))))),\n props.cells.map((cell, i) => (createElement(TimeCol, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint }))))))));\n }\n componentDidMount() {\n this.updateCoords();\n }\n componentDidUpdate() {\n this.updateCoords();\n }\n updateCoords() {\n let { props } = this;\n if (props.onColCoords &&\n props.clientWidth !== null // means sizing has stabilized\n ) {\n props.onColCoords(new PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal\n false));\n }\n }\n}\nfunction collectCellEls(elMap, cells) {\n return cells.map((cell) => elMap[cell.key]);\n}\n\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\nclass TimeCols extends DateComponent {\n constructor() {\n super(...arguments);\n this.processSlotOptions = memoize(processSlotOptions);\n this.state = {\n slatCoords: null,\n };\n this.handleRootEl = (el) => {\n if (el) {\n this.context.registerInteractiveComponent(this, {\n el,\n isHitComboAllowed: this.props.isHitComboAllowed,\n });\n }\n else {\n this.context.unregisterInteractiveComponent(this);\n }\n };\n this.handleScrollRequest = (request) => {\n let { onScrollTopRequest } = this.props;\n let { slatCoords } = this.state;\n if (onScrollTopRequest && slatCoords) {\n if (request.time) {\n let top = slatCoords.computeTimeTop(request.time);\n top = Math.ceil(top); // zoom can give weird floating-point values. rather scroll a little bit further\n if (top) {\n top += 1; // to overcome top border that slots beyond the first have. looks better\n }\n onScrollTopRequest(top);\n }\n return true;\n }\n return false;\n };\n this.handleColCoords = (colCoords) => {\n this.colCoords = colCoords;\n };\n this.handleSlatCoords = (slatCoords) => {\n this.setState({ slatCoords });\n if (this.props.onSlatCoords) {\n this.props.onSlatCoords(slatCoords);\n }\n };\n }\n render() {\n let { props, state } = this;\n return (createElement(\"div\", { className: \"fc-timegrid-body\", ref: this.handleRootEl, style: {\n // these props are important to give this wrapper correct dimensions for interactions\n // TODO: if we set it here, can we avoid giving to inner tables?\n width: props.clientWidth,\n minWidth: props.tableMinWidth,\n } },\n createElement(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),\n createElement(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));\n }\n componentDidMount() {\n this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);\n }\n componentDidUpdate(prevProps) {\n this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);\n }\n componentWillUnmount() {\n this.scrollResponder.detach();\n }\n queryHit(positionLeft, positionTop) {\n let { dateEnv, options } = this.context;\n let { colCoords } = this;\n let { dateProfile } = this.props;\n let { slatCoords } = this.state;\n let { snapDuration, snapsPerSlot } = this.processSlotOptions(this.props.slotDuration, options.snapDuration);\n let colIndex = colCoords.leftToIndex(positionLeft);\n let slatIndex = slatCoords.positions.topToIndex(positionTop);\n if (colIndex != null && slatIndex != null) {\n let cell = this.props.cells[colIndex];\n let slatTop = slatCoords.positions.tops[slatIndex];\n let slatHeight = slatCoords.positions.getHeight(slatIndex);\n let partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1\n let localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n let snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n let dayDate = this.props.cells[colIndex].date;\n let time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));\n let start = dateEnv.add(dayDate, time);\n let end = dateEnv.add(start, snapDuration);\n return {\n dateProfile,\n dateSpan: Object.assign({ range: { start, end }, allDay: false }, cell.extraDateSpan),\n dayEl: colCoords.els[colIndex],\n rect: {\n left: colCoords.lefts[colIndex],\n right: colCoords.rights[colIndex],\n top: slatTop,\n bottom: slatTop + slatHeight,\n },\n layer: 0,\n };\n }\n return null;\n }\n}\nfunction processSlotOptions(slotDuration, snapDurationOverride) {\n let snapDuration = snapDurationOverride || slotDuration;\n let snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);\n if (snapsPerSlot === null) {\n snapDuration = slotDuration;\n snapsPerSlot = 1;\n // TODO: say warning?\n }\n return { snapDuration, snapsPerSlot };\n}\n\nclass DayTimeColsSlicer extends Slicer {\n sliceRange(range, dayRanges) {\n let segs = [];\n for (let col = 0; col < dayRanges.length; col += 1) {\n let segRange = intersectRanges(range, dayRanges[col]);\n if (segRange) {\n segs.push({\n start: segRange.start,\n end: segRange.end,\n isStart: segRange.start.valueOf() === range.start.valueOf(),\n isEnd: segRange.end.valueOf() === range.end.valueOf(),\n col,\n });\n }\n }\n return segs;\n }\n}\n\nclass DayTimeCols extends DateComponent {\n constructor() {\n super(...arguments);\n this.buildDayRanges = memoize(buildDayRanges);\n this.slicer = new DayTimeColsSlicer();\n this.timeColsRef = createRef();\n }\n render() {\n let { props, context } = this;\n let { dateProfile, dayTableModel } = props;\n let { nowIndicator, nextDayThreshold } = context.options;\n let dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);\n // give it the first row of cells\n // TODO: would move this further down hierarchy, but sliceNowDate needs it\n return (createElement(NowTimer, { unit: nowIndicator ? 'minute' : 'day' }, (nowDate, todayRange) => (createElement(TimeCols, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: nowIndicator && this.slicer.sliceNowDate(nowDate, dateProfile, nextDayThreshold, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords })))));\n }\n}\nfunction buildDayRanges(dayTableModel, dateProfile, dateEnv) {\n let ranges = [];\n for (let date of dayTableModel.headerDates) {\n ranges.push({\n start: dateEnv.add(date, dateProfile.slotMinTime),\n end: dateEnv.add(date, dateProfile.slotMaxTime),\n });\n }\n return ranges;\n}\n\n// potential nice values for the slot-duration and interval-duration\n// from largest to smallest\nconst STOCK_SUB_DURATIONS = [\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { seconds: 30 },\n { seconds: 15 },\n];\nfunction buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {\n let dayStart = new Date(0);\n let slatTime = slotMinTime;\n let slatIterator = createDuration(0);\n let labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);\n let metas = [];\n while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {\n let date = dateEnv.add(dayStart, slatTime);\n let isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;\n metas.push({\n date,\n time: slatTime,\n key: date.toISOString(),\n isoTimeStr: formatIsoTimeString(date),\n isLabeled,\n });\n slatTime = addDurations(slatTime, slotDuration);\n slatIterator = addDurations(slatIterator, slotDuration);\n }\n return metas;\n}\n// Computes an automatic value for slotLabelInterval\nfunction computeLabelInterval(slotDuration) {\n let i;\n let labelInterval;\n let slotsPerLabel;\n // find the smallest stock label interval that results in more than one slots-per-label\n for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {\n labelInterval = createDuration(STOCK_SUB_DURATIONS[i]);\n slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);\n if (slotsPerLabel !== null && slotsPerLabel > 1) {\n return labelInterval;\n }\n }\n return slotDuration; // fall back\n}\n\nclass DayTimeColsView extends TimeColsView {\n constructor() {\n super(...arguments);\n this.buildTimeColsModel = memoize(buildTimeColsModel);\n this.buildSlatMetas = memoize(buildSlatMetas);\n }\n render() {\n let { options, dateEnv, dateProfileGenerator } = this.context;\n let { props } = this;\n let { dateProfile } = props;\n let dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);\n let splitProps = this.allDaySplitter.splitProps(props);\n let slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);\n let { dayMinWidth } = options;\n let hasAttachedAxis = !dayMinWidth;\n let hasDetachedAxis = dayMinWidth;\n let headerContent = options.dayHeaders && (createElement(DayHeader, { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null }));\n let allDayContent = (options.allDaySlot !== false) && ((contentArg) => (createElement(DayTable, Object.assign({}, splitProps.allDay, { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, this.getAllDayMaxEventProps()))));\n let timeGridContent = (contentArg) => (createElement(DayTimeCols, Object.assign({}, splitProps.timed, { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: this.handleScrollTopRequest })));\n return hasDetachedAxis\n ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)\n : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);\n }\n}\nfunction buildTimeColsModel(dateProfile, dateProfileGenerator) {\n let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n return new DayTableModel(daySeries, false);\n}\n\nvar css_248z = \".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:\\\"\\\\00a0\\\"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:\\\"\\\\00a0-\\\\00a0\\\"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-arrow,.fc .fc-timegrid-now-indicator-line{pointer-events:none}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}\";\ninjectStyles(css_248z);\n\nexport { DayTimeCols, DayTimeColsSlicer, DayTimeColsView, TimeCols, TimeColsSlatsCoords, TimeColsView, buildDayRanges, buildSlatMetas, buildTimeColsModel };\n"],"names":["AllDaySplitter","Splitter","getKeyInfo","allDay","timed","getKeysForDateSpan","dateSpan","getKeysForEventDef","eventDef","hasBgRendering","DEFAULT_SLAT_LABEL_FORMAT","createFormatter","hour","minute","omitZeroMinute","meridiem","TimeColsAxisCell","props","classNames","isLabeled","createElement","ViewContextType","Consumer","context","className","join","isoTimeStr","dateEnv","options","viewApi","labelFormat","slotLabelFormat","Array","isArray","renderProps","level","time","date","toDate","view","text","format","ContentContainer","elTag","elClasses","elAttrs","generatorName","customGenerator","slotLabelContent","defaultGenerator","renderInnerContent","classNameGenerator","slotLabelClassNames","didMount","slotLabelDidMount","willUnmount","slotLabelWillUnmount","InnerContent","TimeBodyAxis","BaseComponent","render","this","slatMetas","map","slatMeta","key","Object","assign","DEFAULT_WEEK_NUM_FORMAT","week","TimeColsView","DateComponent","constructor","super","arguments","allDaySplitter","headerElRef","createRef","rootElRef","scrollerElRef","state","slatCoords","handleScrollTopRequest","scrollTop","scrollerEl","current","renderHeadAxis","rowKey","frameHeight","dateProfile","range","renderRange","navLinkAttrs","diffDays","start","end","buildNavLinkAttrs","weekNumbers","WeekNumberContainer","defaultFormat","style","height","renderTableRowAxis","rowHeight","allDayText","allDayContent","renderAllDayInner","allDayClassNames","allDayDidMount","allDayWillUnmount","handleSlatCoords","setState","renderSimpleLayout","headerRowContent","timeContent","sections","stickyHeaderDates","getStickyHeaderDates","push","type","isSticky","chunk","elRef","tableClassName","rowContent","content","outerContent","role","theme","getClass","liquid","expandRows","Boolean","ViewContainer","viewSpec","SimpleScrollGrid","isHeightAuto","forPrint","collapsibleWidth","cols","width","renderHScrollLayout","colCnt","dayMinWidth","ScrollGrid","pluginHooks","scrollGridImpl","Error","stickyFooterScrollbar","getStickyFooterScrollbar","syncRowHeights","chunks","arg","rowSyncHeights","contentArg","colSpan","isNowIndicator","nowIndicator","clientHeight","tableColGroupNode","NowTimer","unit","nowDate","nowIndicatorTop","safeComputeTop","NowIndicatorContainer","elStyle","top","isAxis","renderScrollShim","colGroups","span","minWidth","getAllDayMaxEventProps","dayMaxEvents","dayMaxEventRows","undefined","TimeColsSlatsCoords","positions","slotDuration","rangeContainsMarker","currentRange","startOfDayDate","startOfDay","timeMs","valueOf","asRoughMs","slotMinTime","slotMaxTime","computeTimeTop","createDuration","computeDateTop","when","duration","slatIndex","slatRemainder","len","els","length","slatCoverage","milliseconds","Math","max","min","floor","tops","getHeight","TimeColsSlatsBody","slatElRefs","i","ref","axis","slotLaneContent","slotLaneClassNames","slotLaneDidMount","slotLaneWillUnmount","TimeColsSlats","RefMap","tableMinWidth","clientWidth","minHeight","componentDidMount","updateSizing","componentDidUpdate","componentWillUnmount","onCoords","offsetHeight","PositionCache","elMap","currentMap","splitSegsByCol","segs","segsByCol","col","splitInteractionByCol","ui","byRow","affectedInstances","isEvent","seg","TimeColMoreLink","MoreLinkContainer","bottom","allDayDate","moreCnt","hiddenSegs","allSegs","extraDateSpan","todayRange","popoverContent","renderPlainFgSegs","renderMoreLinkInner","forceTimed","shortText","buildPositioning","segInputs","strictOrder","maxStackCnt","hierarchy","SegHierarchy","hiddenEntries","addSegs","hiddenGroups","groupIntersectingEntries","web","entriesByLevel","buildNode","cacheable","lateral","siblingRange","subjectLevel","subjectLateral","levelCoords","subjectEntry","afterSubject","thickness","levelCnt","entry","entries","searchIndex","binarySearch","getEntrySpanEnd","lateralStart","lateralEnd","findNextLevelSegs","nextLevelRes","buildNodes","nextLevelNodes","buildWeb","topLevelNodes","totalThickness","stretchNode","node","startCoord","prevThickness","buildEntryKey","endCoord","allThickness","thicknessFraction","newChildren","childNode","res","newThickness","stretchWeb","segRects","rects","processNode","levelCoord","stackDepth","rect","stackForward","processNodes","nodes","webToRects","pairs","sort","cmpDescPressures","extractNode","a","b","keyFunc","workFunc","cache","args","computeSegVCoords","colDate","eventMinHeight","vcoords","spanStart","spanEnd","round","DEFAULT_TIME_FORMAT","TimeColEvent","StandardEvent","isShort","defaultTimeFormat","TimeCol","sortEventSegs","memoize","isSelectMirror","selectMirror","mirrorSegs","eventDrag","eventResize","dateSelectionSegs","interactionAffectedInstances","sortedFgSegs","fgEventSegs","eventOrder","DayCellContainer","extraClassNames","extraDataAttrs","extraRenderProps","renderFillSegs","businessHourSegs","bgEventSegs","renderFgSegs","renderNowIndicator","nowIndicatorSegs","hasCustomDayCellContent","segIsInvisible","isDragging","isResizing","isDateSelecting","forcedKey","renderPositionedFgSegs","eventMaxStack","eventShortHeight","eventOrderStrict","eventSelection","isMirror","segVCoords","segPlacements","dumbSegs","index","segRect","dumbSeg","computeFgSegPlacements","Fragment","renderHiddenGroups","segPlacement","instanceId","eventRange","instance","isVisible","vStyle","computeSegVStyle","hStyle","computeSegHStyle","left","right","isInset","visibility","isSelected","getSegMeta","hiddenGroup","positionCss","segEntries","segEntry","buildIsoString","computeEarliestSegStart","fillType","children","buildEventRangeKey","BgEvent","renderFill","segHCoords","isRtl","shouldOverlap","slotEventOverlap","nearCoord","farCoord","zIndex","hiddenInstances","TimeColsContent","splitFgEventSegs","splitBgEventSegs","splitBusinessHourSegs","splitNowIndicatorSegs","splitDateSelectionSegs","splitEventDrag","splitEventResize","cellElRefs","cells","fgEventSegsByRow","bgEventSegsByRow","businessHourSegsByRow","nowIndicatorSegsByRow","dateSelectionSegsByRow","eventDragByRow","eventResizeByRow","cell","updateCoords","onColCoords","TimeCols","processSlotOptions","handleRootEl","el","registerInteractiveComponent","isHitComboAllowed","unregisterInteractiveComponent","handleScrollRequest","request","onScrollTopRequest","ceil","handleColCoords","colCoords","onSlatCoords","scrollResponder","createScrollResponder","prevProps","update","detach","queryHit","positionLeft","positionTop","snapDuration","snapsPerSlot","colIndex","leftToIndex","topToIndex","slatTop","slatHeight","partial","snapIndex","dayDate","addDurations","multiplyDuration","add","dayEl","lefts","rights","layer","snapDurationOverride","wholeDivideDurations","DayTimeColsSlicer","Slicer","sliceRange","dayRanges","segRange","intersectRanges","isStart","isEnd","DayTimeCols","buildDayRanges","slicer","timeColsRef","dayTableModel","nextDayThreshold","sliceProps","sliceNowDate","ranges","headerDates","STOCK_SUB_DURATIONS","hours","minutes","seconds","buildSlatMetas","explicitLabelInterval","dayStart","Date","slatTime","slatIterator","labelInterval","slotsPerLabel","computeLabelInterval","metas","toISOString","formatIsoTimeString","DayTimeColsView","buildTimeColsModel","dateProfileGenerator","splitProps","slotLabelInterval","hasAttachedAxis","hasDetachedAxis","headerContent","dayHeaders","DayHeader","dates","datesRepDistinctDays","renderIntro","allDaySlot","DayTable","colGroupNode","renderRowIntro","showWeekNumbers","headerAlignElRef","timeGridContent","daySeries","DaySeriesModel","DayTableModel","injectStyles"],"mappings":"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"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{createPlugin as e}from"../core/index.js";import i from"../premium-common/index.js";import{TimelineView as t}from"./internal.js";var n=e({name:"@fullcalendar/timeline",premiumReleaseDate:"2025-04-02",deps:[i],initialView:"timelineDay",views:{timeline:{component:t,usesMinMaxTime:!0,eventResizableFromStart:!0},timelineDay:{type:"timeline",duration:{days:1}},timelineWeek:{type:"timeline",duration:{weeks:1}},timelineMonth:{type:"timeline",duration:{months:1}},timelineYear:{type:"timeline",duration:{years:1}}}});export{n as default};
|
2
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../node_modules/@fullcalendar/timeline/index.js"],"sourcesContent":["import { createPlugin } from '@fullcalendar/core/index.js';\nimport premiumCommonPlugin from '@fullcalendar/premium-common/index.js';\nimport { TimelineView } from './internal.js';\nimport '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\nimport '@fullcalendar/scrollgrid/internal.js';\n\nvar index = createPlugin({\n name: '@fullcalendar/timeline',\n premiumReleaseDate: '2025-04-02',\n deps: [premiumCommonPlugin],\n initialView: 'timelineDay',\n views: {\n timeline: {\n component: TimelineView,\n usesMinMaxTime: true,\n eventResizableFromStart: true, // how is this consumed for TimelineView tho?\n },\n timelineDay: {\n type: 'timeline',\n duration: { days: 1 },\n },\n timelineWeek: {\n type: 'timeline',\n duration: { weeks: 1 },\n },\n timelineMonth: {\n type: 'timeline',\n duration: { months: 1 },\n },\n timelineYear: {\n type: 'timeline',\n duration: { years: 1 },\n },\n },\n});\n\nexport { index as default };\n"],"names":["index","createPlugin","name","premiumReleaseDate","deps","premiumCommonPlugin","initialView","views","timeline","component","TimelineView","usesMinMaxTime","eventResizableFromStart","timelineDay","type","duration","days","timelineWeek","weeks","timelineMonth","months","timelineYear","years"],"mappings":"uIAOG,IAACA,EAAQC,EAAa,CACrBC,KAAM,yBACNC,mBAAoB,aACpBC,KAAM,CAACC,GACPC,YAAa,cACbC,MAAO,CACHC,SAAU,CACNC,UAAWC,EACXC,gBAAgB,EAChBC,yBAAyB,GAE7BC,YAAa,CACTC,KAAM,WACNC,SAAU,CAAEC,KAAM,IAEtBC,aAAc,CACVH,KAAM,WACNC,SAAU,CAAEG,MAAO,IAEvBC,cAAe,CACXL,KAAM,WACNC,SAAU,CAAEK,OAAQ,IAExBC,aAAc,CACVP,KAAM,WACNC,SAAU,CAAEO,MAAO"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{ScrollGrid as e}from"../scrollgrid/internal.js";import{ct as t,bG as n,x as i,E as s,bc as o,z as r,ca as l,c9 as a,cq as d,c,bl as h,d as f,br as u,bq as m,t as p,q as g,bp as v,bo as b,y as S,al as R,B as D,ch as y,a6 as w,aK as C,bP as x,cd as k,a as P,bu as M,cp as T,bQ as E,c8 as I,ak as W,bm as z,bC as L,cm as H,cl as N,bR as O,bU as U,o as A,be as G,cg as j,co as B,aw as q,A as F,aY as _,aZ as Z,aX as X,C as Y,a_ as K,b8 as Q,aL as J,G as V,by as $}from"../core/internal-common.js";import{createRef as ee,createElement as te,Fragment as ne}from"../../preact/dist/preact.mjs.js";t('.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}');n.MAX_TIMELINE_SLOTS=1e3;const ie=[{years:1},{months:1},{days:1},{hours:1},{minutes:30},{minutes:15},{minutes:10},{minutes:5},{minutes:1},{seconds:30},{seconds:15},{seconds:10},{seconds:5},{seconds:1},{milliseconds:500},{milliseconds:100},{milliseconds:10},{milliseconds:1}];function se(e,t,s,o){let r={labelInterval:s.slotLabelInterval,slotDuration:s.slotDuration};!function(e,t,i){const{currentRange:s}=t;if(e.labelInterval){i.countDurationsBetween(s.start,s.end,e.labelInterval)>n.MAX_TIMELINE_SLOTS&&(console.warn("slotLabelInterval results in too many cells"),e.labelInterval=null)}if(e.slotDuration){i.countDurationsBetween(s.start,s.end,e.slotDuration)>n.MAX_TIMELINE_SLOTS&&(console.warn("slotDuration results in too many cells"),e.slotDuration=null)}if(e.labelInterval&&e.slotDuration){const t=u(e.labelInterval,e.slotDuration);(null===t||t<1)&&(console.warn("slotLabelInterval must be a multiple of slotDuration"),e.slotDuration=null)}}(r,e,t),le(r,e,t),function(e,t,n){const{currentRange:i}=t;let{slotDuration:s}=e;if(!s){const o=le(e,t,n);for(let e of ie){const t=f(e),n=u(o,t);if(null!==n&&n>1&&n<=6){s=t;break}}if(s){n.countDurationsBetween(i.start,i.end,s)>200&&(s=null)}s||(s=o),e.slotDuration=s}}(r,e,t);let l=s.slotLabelFormat,a=Array.isArray(l)?l:null!=l?[l]:function(e,t,n,i){let s,o;const{labelInterval:r}=e;let l=c(r).unit;const a=i.weekNumbers;let d=s=o=null;"week"!==l||a||(l="day");switch(l){case"year":d={year:"numeric"};break;case"month":ae("years",t,n)>1&&(d={year:"numeric"}),s={month:"short"};break;case"week":ae("years",t,n)>1&&(d={year:"numeric"}),s={week:"narrow"};break;case"day":ae("years",t,n)>1?d={year:"numeric",month:"long"}:ae("months",t,n)>1&&(d={month:"long"}),a&&(s={week:"short"}),o={weekday:"narrow",day:"numeric"};break;case"hour":a&&(d={week:"short"}),ae("days",t,n)>1&&(s={weekday:"short",day:"numeric",month:"numeric",omitCommas:!0}),o={hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"};break;case"minute":b(r)/60>=6?(d={hour:"numeric",meridiem:"short"},s=e=>":"+W(e.date.minute,2)):d={hour:"numeric",minute:"numeric",meridiem:"short"};break;case"second":v(r)/60>=6?(d={hour:"numeric",minute:"2-digit",meridiem:"lowercase"},s=e=>":"+W(e.date.second,2)):d={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"};break;case"millisecond":d={hour:"numeric",minute:"2-digit",second:"2-digit",meridiem:"lowercase"},s=e=>"."+W(e.millisecond,3)}return[].concat(d||[],s||[],o||[])}(r,e,t,s);r.headerFormats=a.map((e=>i(e))),r.isTimeScale=Boolean(r.slotDuration.milliseconds);let d=null;if(!r.isTimeScale){const e=c(r.slotDuration).unit;/year|month|week/.test(e)&&(d=e)}r.largeUnit=d,r.emphasizeWeeks=1===h(r.slotDuration)&&ae("weeks",e,t)>=2&&!s.businessHours;let g,S,D=s.snapDuration;D&&(g=f(D),S=u(r.slotDuration,g)),null==S&&(g=r.slotDuration,S=1),r.snapDuration=g,r.snapsPerSlot=S;let y=m(e.slotMaxTime)-m(e.slotMinTime),w=oe(e.renderRange.start,r,t),C=oe(e.renderRange.end,r,t);r.isTimeScale&&(w=t.add(w,e.slotMinTime),C=t.add(p(C,-1),e.slotMaxTime)),r.timeWindowMs=y,r.normalizedRange={start:w,end:C};let x=[],k=w;for(;k<C;)re(k,r,e,o)&&x.push(k),k=t.add(k,r.slotDuration);r.slotDates=x;let P=-1,M=0;const T=[],E=[];for(k=w;k<C;)re(k,r,e,o)?(P+=1,T.push(P),E.push(M)):T.push(P+.5),k=t.add(k,r.snapDuration),M+=1;return r.snapDiffToIndex=T,r.snapIndexToDiff=E,r.snapCnt=P+1,r.slotCnt=r.snapCnt/r.snapsPerSlot,r.isWeekStarts=function(e,t){let{slotDates:n,emphasizeWeeks:i}=e,s=null,o=[];for(let e of n){let n=t.computeWeekNumber(e),r=i&&null!==s&&s!==n;s=n,o.push(r)}return o}(r,t),r.cellRows=function(e,t){let n=e.slotDates,i=e.headerFormats,s=i.map((()=>[])),o=h(e.slotDuration),r=7===o?"week":1===o?"day":null,l=i.map((e=>e.getSmallestUnit?e.getSmallestUnit():null));for(let o=0;o<n.length;o+=1){let a=n[o],d=e.isWeekStarts[o];for(let n=0;n<i.length;n+=1){let o=i[n],c=s[n],h=c[c.length-1],f=n===i.length-1,u=i.length>1&&!f,m=null,p=l[n]||(f?r:null);if(u){let e=t.format(a,o);h&&h.text===e?h.colspan+=1:m=de(a,e,p)}else if(!h||R(t.countDurationsBetween(e.normalizedRange.start,a,e.labelInterval))){m=de(a,t.format(a,o),p)}else h.colspan+=1;m&&(m.weekStart=d,c.push(m))}}return s}(r,t),r.slotsPerLabel=u(r.labelInterval,r.slotDuration),r}function oe(e,t,n){let i=e;return t.isTimeScale||(i=g(i),t.largeUnit&&(i=n.startOf(i,t.largeUnit))),i}function re(e,t,n,i){if(i.isHiddenDay(e))return!1;if(t.isTimeScale){let i=g(e),s=e.valueOf()-i.valueOf()-m(n.slotMinTime);return s=(s%864e5+864e5)%864e5,s<t.timeWindowMs}return!0}function le(e,t,n){const{currentRange:i}=t;let{labelInterval:s}=e;if(!s){let t;if(e.slotDuration){for(t of ie){const n=f(t),i=u(n,e.slotDuration);if(null!==i&&i<=6){s=n;break}}s||(s=e.slotDuration)}else for(t of ie){s=f(t);if(n.countDurationsBetween(i.start,i.end,s)>=18)break}e.labelInterval=s}return s}function ae(e,t,n){let i=t.currentRange,s=null;return"years"===e?s=n.diffWholeYears(i.start,i.end):"months"===e||"weeks"===e?s=n.diffWholeMonths(i.start,i.end):"days"===e&&(s=S(i.start,i.end)),s||0}function de(e,t,n){return{date:e,text:t,rowUnit:n,colspan:1,isWeekStart:!1}}class ce extends D{constructor(){super(...arguments),this.refineRenderProps=F(ue),this.buildCellNavLinkAttrs=r(he)}render(){let{props:e,context:t}=this,{dateEnv:n,options:i}=t,{cell:s,dateProfile:o,tDateProfile:r}=e,l=_(s.date,e.todayRange,e.nowDate,o),a=this.refineRenderProps({level:e.rowLevel,dateMarker:s.date,text:s.text,dateEnv:t.dateEnv,viewApi:t.viewApi});return te(Y,{elTag:"th",elClasses:["fc-timeline-slot","fc-timeline-slot-label",s.isWeekStart&&"fc-timeline-slot-em",..."time"===s.rowUnit?Z(l,t.theme):X(l,t.theme)],elAttrs:{colSpan:s.colspan,"data-date":n.formatIso(s.date,{omitTime:!r.isTimeScale,omitTimeZoneOffset:!0})},renderProps:a,generatorName:"slotLabelContent",customGenerator:i.slotLabelContent,defaultGenerator:fe,classNameGenerator:i.slotLabelClassNames,didMount:i.slotLabelDidMount,willUnmount:i.slotLabelWillUnmount},(n=>te("div",{className:"fc-timeline-slot-frame",style:{height:e.rowInnerHeight}},te(n,{elTag:"a",elClasses:["fc-timeline-slot-cushion","fc-scrollgrid-sync-inner",e.isSticky&&"fc-sticky"],elAttrs:this.buildCellNavLinkAttrs(t,s.date,s.rowUnit)}))))}}function he(e,t,n){return n&&"time"!==n?K(e,t,n):{}}function fe(e){return e.text}function ue(e){return{level:e.level,date:e.dateEnv.toDate(e.dateMarker),view:e.viewApi,text:e.text}}class me extends D{render(){let{dateProfile:e,tDateProfile:t,rowInnerHeights:n,todayRange:i,nowDate:s}=this.props,{cellRows:o}=t;return te(ne,null,o.map(((r,l)=>{let a=l===o.length-1,d=t.isTimeScale&&a;return te("tr",{key:l,className:["fc-timeline-header-row",d?"fc-timeline-header-row-chrono":""].join(" ")},r.map((o=>te(ce,{key:o.date.toISOString(),cell:o,rowLevel:l,dateProfile:e,tDateProfile:t,todayRange:i,nowDate:s,rowInnerHeight:n&&n[l],isSticky:!a}))))})))}}class pe{constructor(e,t,n,i,s,o){this.slatRootEl=e,this.dateProfile=n,this.tDateProfile=i,this.dateEnv=s,this.isRtl=o,this.outerCoordCache=new Q(e,t,!0,!1),this.innerCoordCache=new Q(e,J(t,"div"),!0,!1)}isDateInRange(e){return V(this.dateProfile.currentRange,e)}dateToCoord(e){let{tDateProfile:t}=this,n=this.computeDateSnapCoverage(e)/t.snapsPerSlot,i=Math.floor(n);i=Math.min(i,t.slotCnt-1);let s=n-i,{innerCoordCache:o,outerCoordCache:r}=this;return this.isRtl?r.originClientRect.width-(r.rights[i]-o.getWidth(i)*s):r.lefts[i]+o.getWidth(i)*s}rangeToCoords(e){return{start:this.dateToCoord(e.start),end:this.dateToCoord(e.end)}}durationToCoord(e){let{dateProfile:t,tDateProfile:n,dateEnv:i,isRtl:s}=this,o=0;if(t){let r=i.add(t.activeRange.start,e);n.isTimeScale||(r=g(r)),o=this.dateToCoord(r),!s&&o&&(o+=1)}return o}coordFromLeft(e){return this.isRtl?this.outerCoordCache.originClientRect.width-e:e}computeDateSnapCoverage(e){return ge(e,this.tDateProfile,this.dateEnv)}}function ge(e,t,n){let i=n.countDurationsBetween(t.normalizedRange.start,e,t.snapDuration);if(i<0)return 0;if(i>=t.snapDiffToIndex.length)return t.snapCnt;let s=Math.floor(i),o=t.snapDiffToIndex[s];return R(o)?o+=i-s:o=Math.ceil(o),o}function ve(e,t){return null===e?{left:"",right:""}:t?{right:e,left:""}:{left:e,right:""}}function be(e,t){return e?t?{right:e.start,left:-e.end}:{left:e.start,right:-e.end}:{left:"",right:""}}class Se extends D{constructor(){super(...arguments),this.rootElRef=ee()}render(){let{props:e,context:t}=this,n=c(e.tDateProfile.slotDuration).unit,i=e.slatCoords&&e.slatCoords.dateProfile===e.dateProfile?e.slatCoords:null;return te(w,{unit:n},((n,s)=>te("div",{className:"fc-timeline-header",ref:this.rootElRef},te("table",{"aria-hidden":!0,className:"fc-scrollgrid-sync-table",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,te("tbody",null,te(me,{dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:n,todayRange:s,rowInnerHeights:e.rowInnerHeights}))),t.options.nowIndicator&&te("div",{className:"fc-timeline-now-indicator-container"},i&&i.isDateInRange(n)&&te(y,{elClasses:["fc-timeline-now-indicator-arrow"],elStyle:ve(i.dateToCoord(n),t.isRtl),isAxis:!0,date:n})))))}componentDidMount(){this.updateSize()}componentDidUpdate(){this.updateSize()}updateSize(){this.props.onMaxCushionWidth&&this.props.onMaxCushionWidth(this.computeMaxCushionWidth())}computeMaxCushionWidth(){return Math.max(...C(this.rootElRef.current,".fc-timeline-header-row:last-child .fc-timeline-slot-cushion").map((e=>e.getBoundingClientRect().width)))}}class Re extends D{render(){let{props:e,context:t}=this,{dateEnv:n,options:i,theme:s}=t,{date:o,tDateProfile:r,isEm:l}=e,a=_(e.date,e.todayRange,e.nowDate,e.dateProfile),d=Object.assign(Object.assign({date:n.toDate(e.date)},a),{view:t.viewApi});return te(Y,{elTag:"td",elRef:e.elRef,elClasses:["fc-timeline-slot","fc-timeline-slot-lane",l&&"fc-timeline-slot-em",r.isTimeScale?R(n.countDurationsBetween(r.normalizedRange.start,e.date,r.labelInterval))?"fc-timeline-slot-major":"fc-timeline-slot-minor":"",...e.isDay?X(a,s):Z(a,s)],elAttrs:{"data-date":n.formatIso(o,{omitTimeZoneOffset:!0,omitTime:!r.isTimeScale})},renderProps:d,generatorName:"slotLaneContent",customGenerator:i.slotLaneContent,classNameGenerator:i.slotLaneClassNames,didMount:i.slotLaneDidMount,willUnmount:i.slotLaneWillUnmount},(e=>te(e,{elTag:"div"})))}}class De extends D{render(){let{props:e}=this,{tDateProfile:t,cellElRefs:n}=e,{slotDates:i,isWeekStarts:s}=t,o=!t.isTimeScale&&!t.largeUnit;return te("tbody",null,te("tr",null,i.map(((i,r)=>{let l=i.toISOString();return te(Re,{key:l,elRef:n.createRef(l),date:i,dateProfile:e.dateProfile,tDateProfile:t,nowDate:e.nowDate,todayRange:e.todayRange,isEm:s[r],isDay:o})}))))}}class ye extends D{constructor(){super(...arguments),this.rootElRef=ee(),this.cellElRefs=new k,this.handleScrollRequest=e=>{let{onScrollLeftRequest:t}=this.props,{coords:n}=this;if(t&&n){if(e.time){t(n.coordFromLeft(n.durationToCoord(e.time)))}return!0}return null}}render(){let{props:e,context:t}=this;return te("div",{className:"fc-timeline-slots",ref:this.rootElRef},te("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,te(De,{cellElRefs:this.cellElRefs,dateProfile:e.dateProfile,tDateProfile:e.tDateProfile,nowDate:e.nowDate,todayRange:e.todayRange})))}componentDidMount(){this.updateSizing(),this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.updateSizing(),this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach(),this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{props:e,context:t}=this;if(null!==e.clientWidth&&this.scrollResponder){this.rootElRef.current.offsetWidth&&(this.coords=new pe(this.rootElRef.current,(n=this.cellElRefs.currentMap,e.tDateProfile.slotDates.map((e=>{let t=e.toISOString();return n[t]}))),e.dateProfile,e.tDateProfile,t.dateEnv,t.isRtl),e.onCoords&&e.onCoords(this.coords),this.scrollResponder.update(!1))}var n}positionToHit(e){let{outerCoordCache:t}=this.coords,{dateEnv:n,isRtl:i}=this.context,{tDateProfile:s}=this.props,o=t.leftToIndex(e);if(null!=o){let r=t.getWidth(o),l=i?(t.rights[o]-e)/r:(e-t.lefts[o])/r,a=Math.floor(l*s.snapsPerSlot),d=n.add(s.slotDates[o],z(s.snapDuration,a));return{dateSpan:{range:{start:d,end:n.add(d,s.snapDuration)},allDay:!this.props.tDateProfile.isTimeScale},dayEl:this.cellElRefs.currentMap[o],left:t.lefts[o],right:t.rights[o]}}return null}}function we(e,t,n){let i=[];if(n)for(let s of e){let e=n.rangeToCoords(s),o=Math.round(e.start),r=Math.round(e.end);r-o<t&&(r=o+t),i.push({start:o,end:r})}return i}class Ce extends D{render(){let{props:e}=this,t=[].concat(e.eventResizeSegs,e.dateSelectionSegs);return e.timelineCoords&&te("div",{className:"fc-timeline-bg"},this.renderSegs(e.businessHourSegs||[],e.timelineCoords,"non-business"),this.renderSegs(e.bgEventSegs||[],e.timelineCoords,"bg-event"),this.renderSegs(t,e.timelineCoords,"highlight"))}renderSegs(e,t,n){let{todayRange:i,nowDate:s}=this.props,{isRtl:o}=this.context,r=we(e,0,t),l=e.map(((e,t)=>{let l=be(r[t],o);return te("div",{key:O(e.eventRange),className:"fc-timeline-bg-harness",style:l},"bg-event"===n?te(H,Object.assign({seg:e},E(e,i,s))):N(n))}));return te(ne,null,l)}}class xe extends U{sliceRange(e,t,n,i,s){let o=function(e,t,n){if(!t.isTimeScale&&(e=q(e),t.largeUnit)){let i=e;((e={start:n.startOf(e.start,t.largeUnit),end:n.startOf(e.end,t.largeUnit)}).end.valueOf()!==i.end.valueOf()||e.end<=e.start)&&(e={start:e.start,end:n.add(e.end,t.slotDuration)})}return e}(e,i,s),r=[];if(ge(o.start,i,s)<ge(o.end,i,s)){let e=A(o,i.normalizedRange);e&&r.push({start:e.start,end:e.end,isStart:e.start.valueOf()===o.start.valueOf()&&re(e.start,i,t,n),isEnd:e.end.valueOf()===o.end.valueOf()&&re(G(e.end,-1),i,t,n)})}return r}}const ke=i({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});class Pe extends D{render(){let{props:e}=this;return te(j,Object.assign({},e,{elClasses:["fc-timeline-event","fc-h-event"],defaultTimeFormat:ke,defaultDisplayEventTime:!e.isTimeScale}))}}class Me extends D{render(){let{props:e,context:t}=this,{hiddenSegs:n,placement:i,resourceId:s}=e,{top:o,hcoords:r}=i,l=r&&null!==o,a=be(r,t.isRtl),d=s?{resourceId:s}:{};return te(B,{elRef:e.elRef,elClasses:["fc-timeline-more-link"],elStyle:Object.assign({visibility:l?"":"hidden",top:o||0},a),allDayDate:null,moreCnt:n.length,allSegs:n,hiddenSegs:n,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:d,popoverContent:()=>te(ne,null,n.map((t=>{let n=t.eventRange.instance.instanceId;return te("div",{key:n,style:{visibility:e.isForcedInvisible[n]?"hidden":""}},te(Pe,Object.assign({isTimeScale:e.isTimeScale,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:n===e.eventSelection},E(t,e.todayRange,e.nowDate))))})))},(e=>te(e,{elTag:"div",elClasses:["fc-timeline-more-link-inner","fc-sticky"]})))}}class Te extends D{constructor(){super(...arguments),this.slicer=new xe,this.sortEventSegs=r(x),this.harnessElRefs=new k,this.moreElRefs=new k,this.innerElRef=ee(),this.state={eventInstanceHeights:{},moreLinkHeights:{}},this.handleResize=e=>{e&&this.updateSize()}}render(){let{props:e,state:t,context:n}=this,{options:i}=n,{dateProfile:s,tDateProfile:o}=e,r=this.slicer.sliceProps(e,s,o.isTimeScale?null:e.nextDayThreshold,n,s,n.dateProfileGenerator,o,n.dateEnv),l=(r.eventDrag?r.eventDrag.segs:null)||(r.eventResize?r.eventResize.segs:null)||[],a=this.sortEventSegs(r.fgEventSegs,i.eventOrder),d=we(a,i.eventMinWidth,e.timelineCoords),[c,h]=function(e,t,n,i,s,o){let r=[],l=[];for(let i=0;i<e.length;i+=1){let s=e[i],o=n[s.eventRange.instance.instanceId],a=t[i];o&&a?r.push({index:i,span:a,thickness:o}):l.push({seg:s,hcoords:a,top:null})}let a=new $;null!=s&&(a.strictOrder=s),null!=o&&(a.maxStackCnt=o);let d=a.addSegs(r),c=d.map((t=>({seg:e[t.index],hcoords:t.span,top:null}))),h=L(d),f=[],u=[];const m=t=>e[t.index];for(let t=0;t<h.length;t+=1){let n=h[t],s=n.entries.map(m),o=i[M(T(s))];null!=o?f.push({index:e.length+t,thickness:o,span:n.span}):u.push({seg:s,hcoords:n.span,top:null})}a.maxStackCnt=-1,a.addSegs(f);let p=a.toRects(),g=[],v=0;for(let t of p){let n=t.index;g.push({seg:n<e.length?e[n]:h[n-e.length].entries.map(m),hcoords:t.span,top:t.levelCoord}),v=Math.max(v,t.levelCoord+t.thickness)}return[g.concat(l,c,u),v]}(a,d,t.eventInstanceHeights,t.moreLinkHeights,i.eventOrderStrict,i.eventMaxStack),f=(r.eventDrag?r.eventDrag.affectedInstances:null)||(r.eventResize?r.eventResize.affectedInstances:null)||{};return te(ne,null,te(Ce,{businessHourSegs:r.businessHourSegs,bgEventSegs:r.bgEventSegs,timelineCoords:e.timelineCoords,eventResizeSegs:r.eventResize?r.eventResize.segs:[],dateSelectionSegs:r.dateSelectionSegs,nowDate:e.nowDate,todayRange:e.todayRange}),te("div",{className:"fc-timeline-events fc-scrollgrid-sync-inner",ref:this.innerElRef,style:{height:h}},this.renderFgSegs(c,f,!1,!1,!1),this.renderFgSegs(function(e,t,n){if(!e.length||!t)return[];let i=function(e){let t={};for(let n of e){let{seg:e}=n;Array.isArray(e)||(t[e.eventRange.instance.instanceId]=n.top)}return t}(n);return e.map((e=>({seg:e,hcoords:t.rangeToCoords(e),top:i[e.eventRange.instance.instanceId]})))}(l,e.timelineCoords,c),{},Boolean(r.eventDrag),Boolean(r.eventResize),!1)))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){e.eventStore===this.props.eventStore&&e.timelineCoords===this.props.timelineCoords&&t.moreLinkHeights===this.state.moreLinkHeights||this.updateSize()}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateSize(){let{props:e}=this,{timelineCoords:t}=e;const n=this.innerElRef.current;e.onHeightChange&&e.onHeightChange(n,!1),t&&this.setState({eventInstanceHeights:P(this.harnessElRefs.currentMap,(e=>Math.round(e.getBoundingClientRect().height))),moreLinkHeights:P(this.moreElRefs.currentMap,(e=>Math.round(e.getBoundingClientRect().height)))},(()=>{e.onHeightChange&&e.onHeightChange(n,!0)})),e.syncParentMinHeight&&(n.parentElement.style.minHeight=n.style.height)}renderFgSegs(e,t,n,i,s){let{harnessElRefs:o,moreElRefs:r,props:l,context:a}=this,d=n||i||s;return te(ne,null,e.map((e=>{let{seg:c,hcoords:h,top:f}=e;if(Array.isArray(c)){let n=M(T(c));return te(Me,{key:"m:"+n,elRef:r.createRef(n),hiddenSegs:c,placement:e,dateProfile:l.dateProfile,nowDate:l.nowDate,todayRange:l.todayRange,isTimeScale:l.tDateProfile.isTimeScale,eventSelection:l.eventSelection,resourceId:l.resourceId,isForcedInvisible:t})}let u=c.eventRange.instance.instanceId,m=d||Boolean(!t[u]&&h&&null!==f),p=be(h,a.isRtl);return te("div",{key:"e:"+u,ref:d?null:o.createRef(u),className:"fc-timeline-event-harness",style:Object.assign({visibility:m?"":"hidden",top:f||0},p)},te(Pe,Object.assign({isTimeScale:l.tDateProfile.isTimeScale,seg:c,isDragging:n,isResizing:i,isDateSelecting:s,isSelected:u===l.eventSelection},E(c,l.todayRange,l.nowDate))))})))}}Te.addStateEquality({eventInstanceHeights:s,moreLinkHeights:s});class Ee extends o{constructor(){super(...arguments),this.slatsRef=ee(),this.state={coords:null},this.handeEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)},this.handleCoords=e=>{this.setState({coords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:t,context:n}=this,{options:i}=n,{dateProfile:s,tDateProfile:o}=e,r=c(o.slotDuration).unit;return te("div",{className:"fc-timeline-body",ref:this.handeEl,style:{minWidth:e.tableMinWidth,height:e.clientHeight,width:e.clientWidth}},te(w,{unit:r},((r,l)=>te(ne,null,te(ye,{ref:this.slatsRef,dateProfile:s,tDateProfile:o,nowDate:r,todayRange:l,clientWidth:e.clientWidth,tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,onCoords:this.handleCoords,onScrollLeftRequest:e.onScrollLeftRequest}),te(Te,{dateProfile:s,tDateProfile:e.tDateProfile,nowDate:r,todayRange:l,nextDayThreshold:i.nextDayThreshold,businessHours:e.businessHours,eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,timelineCoords:t.coords,syncParentMinHeight:!0}),i.nowIndicator&&t.coords&&t.coords.isDateInRange(r)&&te("div",{className:"fc-timeline-now-indicator-container"},te(y,{elClasses:["fc-timeline-now-indicator-line"],elStyle:ve(t.coords.dateToCoord(r),n.isRtl),isAxis:!1,date:r}))))))}queryHit(e,t,n,i){let s=this.slatsRef.current.positionToHit(e);return s?{dateProfile:this.props.dateProfile,dateSpan:s.dateSpan,rect:{left:s.left,right:s.right,top:0,bottom:i},dayEl:s.dayEl,layer:0}:null}}class Ie extends o{constructor(){super(...arguments),this.buildTimelineDateProfile=r(se),this.scrollGridRef=ee(),this.state={slatCoords:null,slotCushionMaxWidth:null},this.handleSlatCoords=e=>{this.setState({slatCoords:e})},this.handleScrollLeftRequest=e=>{this.scrollGridRef.current.forceScrollLeft(0,e)},this.handleMaxCushionWidth=e=>{this.setState({slotCushionMaxWidth:Math.ceil(e)})}}render(){let{props:t,state:n,context:i}=this,{options:s}=i,o=!t.forPrint&&l(s),r=!t.forPrint&&a(s),c=this.buildTimelineDateProfile(t.dateProfile,i.dateEnv,s,i.dateProfileGenerator),{slotMinWidth:h}=s,f=We(c,h||this.computeFallbackSlotMinWidth(c)),u=[{type:"header",key:"header",isSticky:o,chunks:[{key:"timeline",content:e=>te(Se,{dateProfile:t.dateProfile,clientWidth:e.clientWidth,clientHeight:e.clientHeight,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,tDateProfile:c,slatCoords:n.slatCoords,onMaxCushionWidth:h?null:this.handleMaxCushionWidth})}]},{type:"body",key:"body",liquid:!0,chunks:[{key:"timeline",content:e=>te(Ee,Object.assign({},t,{clientWidth:e.clientWidth,clientHeight:e.clientHeight,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,tDateProfile:c,onSlatCoords:this.handleSlatCoords,onScrollLeftRequest:this.handleScrollLeftRequest}))}]}];return r&&u.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"timeline",content:I}]}),te(d,{elClasses:["fc-timeline",!1===s.eventOverlap?"fc-timeline-overlap-disabled":""],viewSpec:i.viewSpec},te(e,{ref:this.scrollGridRef,liquid:!t.isHeightAuto&&!t.forPrint,forPrint:t.forPrint,collapsibleWidth:!1,colGroups:[{cols:f}],sections:u}))}computeFallbackSlotMinWidth(e){return Math.max(30,(this.state.slotCushionMaxWidth||0)/e.slotsPerLabel)}}function We(e,t){return[{span:e.slotCnt,minWidth:t||1}]}export{pe as TimelineCoords,Se as TimelineHeader,me as TimelineHeaderRows,Te as TimelineLane,Ce as TimelineLaneBg,xe as TimelineLaneSlicer,ye as TimelineSlats,Ie as TimelineView,We as buildSlatCols,se as buildTimelineDateProfile,ve as coordToCss,be as coordsToCss};
|
2
|
+
//# sourceMappingURL=internal.js.map
|
@@ -0,0 +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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"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{Component as e,options as t,createElement as n,Fragment as o,toChildArray as r,render as i}from"../../dist/preact.mjs.js";export{Component,Fragment,createContext,createElement,createRef}from"../../dist/preact.mjs.js";import"../../hooks/dist/hooks.mjs.js";function _(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var o in t)if("__source"!==o&&e[o]!==t[o])return!0;return!1}function l(e){this.props=e}(l.prototype=new e).isPureReactComponent=!0,l.prototype.shouldComponentUpdate=function(e,t){return _(this.props,e)||_(this.state,t)};var u=t.__b;t.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),u&&u(e)};var a=t.__e;t.__e=function(e,t,n,o){if(e.then)for(var r,i=t;i=i.__;)if((r=i.__c)&&r.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t);a(e,t,n,o)};var c=t.unmount;function s(e,t,n){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),e.__c.__H=null),null!=(e=function(e,t){for(var n in t)e[n]=t[n];return e}({},e)).__c&&(e.__c.__P===n&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map((function(e){return s(e,t,n)}))),e}function p(e,t,n){return e&&(e.__v=null,e.__k=e.__k&&e.__k.map((function(e){return p(e,t,n)})),e.__c&&e.__c.__P===t&&(e.__e&&n.insertBefore(e.__e,e.__d),e.__c.__e=!0,e.__c.__P=n)),e}function f(){this.__u=0,this.t=null,this.__b=null}function d(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function h(){this.u=null,this.o=null}t.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&!0===e.__h&&(e.type=null),c&&c(e)},(f.prototype=new e).__c=function(e,t){var n=t.__c,o=this;null==o.t&&(o.t=[]),o.t.push(n);var r=d(o.__v),i=!1,_=function(){i||(i=!0,n.__R=null,r?r(l):l())};n.__R=_;var l=function(){if(! --o.__u){if(o.state.__a){var e=o.state.__a;o.__v.__k[0]=p(e,e.__c.__P,e.__c.__O)}var t;for(o.setState({__a:o.__b=null});t=o.t.pop();)t.forceUpdate()}},u=!0===t.__h;o.__u++||u||o.setState({__a:o.__b=o.__v.__k[0]}),e.then(_,_)},f.prototype.componentWillUnmount=function(){this.t=[]},f.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),i=this.__v.__k[0].__c;this.__v.__k[0]=s(this.__b,r,i.__O=i.__P)}this.__b=null}var _=t.__a&&n(o,null,e.fallback);return _&&(_.__h=null),[n(o,null,t.__a?null:e.children),_]};var v=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.u=n=n[2]}};function m(e){return this.getChildContext=function(){return e.context},e.children}function y(e){var t=this,o=e.i;t.componentWillUnmount=function(){i(null,t.l),t.l=null,t.i=null},t.i&&t.i!==o&&t.componentWillUnmount(),e.__v?(t.l||(t.i=o,t.l={nodeType:1,parentNode:o,childNodes:[],appendChild:function(e){this.childNodes.push(e),t.i.appendChild(e)},insertBefore:function(e,n){this.childNodes.push(e),t.i.appendChild(e)},removeChild:function(e){this.childNodes.splice(this.childNodes.indexOf(e)>>>1,1),t.i.removeChild(e)}}),i(n(m,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function b(e,t){var o=n(y,{__v:e,i:t});return o.containerInfo=t,o}(h.prototype=new e).__a=function(e){var t=this,n=d(t.__v),o=t.o.get(e);return o[0]++,function(r){var i=function(){t.props.revealOrder?(o.push(r),v(t,e,o)):r()};n?n(i):i()}},h.prototype.render=function(e){this.u=null,this.o=new Map;var t=r(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},h.prototype.componentDidUpdate=h.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){v(e,n,t)}))};var g="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,k=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,C="undefined"!=typeof document,P=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};e.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(t){Object.defineProperty(e.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}));var x=t.event;function O(){}function N(){return this.cancelBubble}function w(){return this.defaultPrevented}t.event=function(e){return x&&(e=x(e)),e.persist=O,e.isPropagationStopped=N,e.isDefaultPrevented=w,e.nativeEvent=e};var S={configurable:!0,get:function(){return this.class}},U=t.vnode;t.vnode=function(e){var t=e.type,n=e.props,o=n;if("string"==typeof t){var i=-1===t.indexOf("-");for(var _ in o={},n){var l=n[_];C&&"children"===_&&"noscript"===t||"value"===_&&"defaultValue"in n&&null==l||("defaultValue"===_&&"value"in n&&null==n.value?_="value":"download"===_&&!0===l?l="":/ondoubleclick/i.test(_)?_="ondblclick":/^onchange(textarea|input)/i.test(_+t)&&!P(n.type)?_="oninput":/^onfocus$/i.test(_)?_="onfocusin":/^onblur$/i.test(_)?_="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(_)?_=_.toLowerCase():i&&k.test(_)?_=_.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(_)&&(_=_.toLowerCase(),o[_]&&(_="oninputCapture")),o[_]=l)}"select"==t&&o.multiple&&Array.isArray(o.value)&&(o.value=r(n.children).forEach((function(e){e.props.selected=-1!=o.value.indexOf(e.props.value)}))),"select"==t&&null!=o.defaultValue&&(o.value=r(n.children).forEach((function(e){e.props.selected=o.multiple?-1!=o.defaultValue.indexOf(e.props.value):o.defaultValue==e.props.value}))),e.props=o,n.class!=n.className&&(S.enumerable="className"in n,null!=n.className&&(o.class=n.className),Object.defineProperty(o,"className",S))}e.$$typeof=g,U&&U(e)};var E=t.__r;t.__r=function(e){E&&E(e),e.__c};export{l as PureComponent,f as Suspense,h as SuspenseList,b as createPortal};
|
2
|
+
//# sourceMappingURL=compat.mjs.js.map
|