{"version":3,"sources":["node_modules/positioning/dist/positioning.js","node_modules/calendar-utils/calendar-utils.js","node_modules/@mattlewis92/dom-autoscroller/dist/bundle.es.js","node_modules/angular-draggable-droppable/fesm2020/angular-draggable-droppable.mjs","node_modules/angular-resizable-element/fesm2020/angular-resizable-element.mjs","node_modules/angular-calendar/fesm2020/angular-calendar.mjs"],"sourcesContent":["// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nvar Positioning = /** @class */function () {\n function Positioning() {}\n Positioning.prototype.getAllStyles = function (element) {\n return window.getComputedStyle(element);\n };\n Positioning.prototype.getStyle = function (element, prop) {\n return this.getAllStyles(element)[prop];\n };\n Positioning.prototype.isStaticPositioned = function (element) {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n };\n Positioning.prototype.offsetParent = function (element) {\n var offsetParentEl = element.offsetParent || document.documentElement;\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n return offsetParentEl || document.documentElement;\n };\n Positioning.prototype.position = function (element, round) {\n if (round === void 0) {\n round = true;\n }\n var elPosition;\n var parentOffset = {\n width: 0,\n height: 0,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n elPosition = {\n top: elPosition.top,\n bottom: elPosition.bottom,\n left: elPosition.left,\n right: elPosition.right,\n height: elPosition.height,\n width: elPosition.width\n };\n } else {\n var offsetParentEl = this.offsetParent(element);\n elPosition = this.offset(element, false);\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n return elPosition;\n };\n Positioning.prototype.offset = function (element, round) {\n if (round === void 0) {\n round = true;\n }\n var elBcr = element.getBoundingClientRect();\n var viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n var elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n return elOffset;\n };\n /*\n Return false if the element to position is outside the viewport\n */\n Positioning.prototype.positionElements = function (hostElement, targetElement, placement, appendToBody) {\n var _a = placement.split('-'),\n _b = _a[0],\n placementPrimary = _b === void 0 ? 'top' : _b,\n _c = _a[1],\n placementSecondary = _c === void 0 ? 'center' : _c;\n var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n var targetElStyles = this.getAllStyles(targetElement);\n var marginTop = parseFloat(targetElStyles.marginTop);\n var marginBottom = parseFloat(targetElStyles.marginBottom);\n var marginLeft = parseFloat(targetElStyles.marginLeft);\n var marginRight = parseFloat(targetElStyles.marginRight);\n var topPosition = 0;\n var leftPosition = 0;\n switch (placementPrimary) {\n case 'top':\n topPosition = hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom);\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height;\n break;\n case 'left':\n leftPosition = hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight);\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width;\n break;\n }\n switch (placementSecondary) {\n case 'top':\n topPosition = hostElPosition.top;\n break;\n case 'bottom':\n topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n leftPosition = hostElPosition.left;\n break;\n case 'right':\n leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n leftPosition = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;\n } else {\n topPosition = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;\n }\n break;\n }\n /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n targetElement.style.transform = \"translate(\" + Math.round(leftPosition) + \"px, \" + Math.round(topPosition) + \"px)\";\n // Check if the targetElement is inside the viewport\n var targetElBCR = targetElement.getBoundingClientRect();\n var html = document.documentElement;\n var windowHeight = window.innerHeight || html.clientHeight;\n var windowWidth = window.innerWidth || html.clientWidth;\n return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && targetElBCR.bottom <= windowHeight;\n };\n return Positioning;\n}();\nexport { Positioning };\nvar placementSeparator = /\\s+/;\nvar positionService = new Positioning();\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) {\n var placementVals = Array.isArray(placement) ? placement : placement.split(placementSeparator);\n var allowedPlacements = ['top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', 'right-top', 'right-bottom'];\n var classList = targetElement.classList;\n var addClassesToTarget = function (targetPlacement) {\n var _a = targetPlacement.split('-'),\n primary = _a[0],\n secondary = _a[1];\n var classes = [];\n if (baseClass) {\n classes.push(baseClass + \"-\" + primary);\n if (secondary) {\n classes.push(baseClass + \"-\" + primary + \"-\" + secondary);\n }\n classes.forEach(function (classname) {\n classList.add(classname);\n });\n }\n return classes;\n };\n // Remove old placement classes to avoid issues\n if (baseClass) {\n allowedPlacements.forEach(function (placementToRemove) {\n classList.remove(baseClass + \"-\" + placementToRemove);\n });\n }\n // replace auto placement with other placements\n var hasAuto = placementVals.findIndex(function (val) {\n return val === 'auto';\n });\n if (hasAuto >= 0) {\n allowedPlacements.forEach(function (obj) {\n if (placementVals.find(function (val) {\n return val.search('^' + obj) !== -1;\n }) == null) {\n placementVals.splice(hasAuto++, 1, obj);\n }\n });\n }\n // coordinates where to position\n // Required for transform:\n var style = targetElement.style;\n style.position = 'absolute';\n style.top = '0';\n style.left = '0';\n style['will-change'] = 'transform';\n var testPlacement;\n var isInViewport = false;\n for (var _i = 0, placementVals_1 = placementVals; _i < placementVals_1.length; _i++) {\n testPlacement = placementVals_1[_i];\n var addedClasses = addClassesToTarget(testPlacement);\n if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n isInViewport = true;\n break;\n }\n // Remove the baseClasses for further calculation\n if (baseClass) {\n addedClasses.forEach(function (classname) {\n classList.remove(classname);\n });\n }\n }\n if (!isInViewport) {\n // If nothing match, the first placement is the default one\n testPlacement = placementVals[0];\n addClassesToTarget(testPlacement);\n positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n }\n return testPlacement;\n}\n","var __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nexport var DAYS_OF_WEEK = /*#__PURE__*/function (DAYS_OF_WEEK) {\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"SUNDAY\"] = 0] = \"SUNDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"MONDAY\"] = 1] = \"MONDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"TUESDAY\"] = 2] = \"TUESDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"WEDNESDAY\"] = 3] = \"WEDNESDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"THURSDAY\"] = 4] = \"THURSDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"FRIDAY\"] = 5] = \"FRIDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"SATURDAY\"] = 6] = \"SATURDAY\";\n return DAYS_OF_WEEK;\n}(DAYS_OF_WEEK || {});\nvar DEFAULT_WEEKEND_DAYS = [DAYS_OF_WEEK.SUNDAY, DAYS_OF_WEEK.SATURDAY];\nvar DAYS_IN_WEEK = 7;\nvar HOURS_IN_DAY = 24;\nvar MINUTES_IN_HOUR = 60;\nexport var SECONDS_IN_DAY = 60 * 60 * 24;\nfunction getExcludedSeconds(dateAdapter, _a) {\n var startDate = _a.startDate,\n seconds = _a.seconds,\n excluded = _a.excluded,\n precision = _a.precision;\n if (excluded.length < 1) {\n return 0;\n }\n var addSeconds = dateAdapter.addSeconds,\n getDay = dateAdapter.getDay,\n addDays = dateAdapter.addDays;\n var endDate = addSeconds(startDate, seconds - 1);\n var dayStart = getDay(startDate);\n var dayEnd = getDay(endDate);\n var result = 0; // Calculated in seconds\n var current = startDate;\n var _loop_1 = function () {\n var day = getDay(current);\n if (excluded.some(function (excludedDay) {\n return excludedDay === day;\n })) {\n result += calculateExcludedSeconds(dateAdapter, {\n dayStart: dayStart,\n dayEnd: dayEnd,\n day: day,\n precision: precision,\n startDate: startDate,\n endDate: endDate\n });\n }\n current = addDays(current, 1);\n };\n while (current < endDate) {\n _loop_1();\n }\n return result;\n}\nfunction calculateExcludedSeconds(dateAdapter, _a) {\n var precision = _a.precision,\n day = _a.day,\n dayStart = _a.dayStart,\n dayEnd = _a.dayEnd,\n startDate = _a.startDate,\n endDate = _a.endDate;\n var differenceInSeconds = dateAdapter.differenceInSeconds,\n endOfDay = dateAdapter.endOfDay,\n startOfDay = dateAdapter.startOfDay;\n if (precision === 'minutes') {\n if (day === dayStart) {\n return differenceInSeconds(endOfDay(startDate), startDate) + 1;\n } else if (day === dayEnd) {\n return differenceInSeconds(endDate, startOfDay(endDate)) + 1;\n }\n }\n return SECONDS_IN_DAY;\n}\nfunction getWeekViewEventSpan(dateAdapter, _a) {\n var event = _a.event,\n offset = _a.offset,\n startOfWeekDate = _a.startOfWeekDate,\n excluded = _a.excluded,\n precision = _a.precision,\n totalDaysInView = _a.totalDaysInView;\n var max = dateAdapter.max,\n differenceInSeconds = dateAdapter.differenceInSeconds,\n addDays = dateAdapter.addDays,\n endOfDay = dateAdapter.endOfDay,\n differenceInDays = dateAdapter.differenceInDays;\n var span = SECONDS_IN_DAY;\n var begin = max([event.start, startOfWeekDate]);\n if (event.end) {\n switch (precision) {\n case 'minutes':\n span = differenceInSeconds(event.end, begin);\n break;\n default:\n span = differenceInDays(addDays(endOfDay(event.end), 1), begin) * SECONDS_IN_DAY;\n break;\n }\n }\n var offsetSeconds = offset * SECONDS_IN_DAY;\n var totalLength = offsetSeconds + span;\n // the best way to detect if an event is outside the week-view\n // is to check if the total span beginning (from startOfWeekDay or event start) exceeds the total days in the view\n var secondsInView = totalDaysInView * SECONDS_IN_DAY;\n if (totalLength > secondsInView) {\n span = secondsInView - offsetSeconds;\n }\n span -= getExcludedSeconds(dateAdapter, {\n startDate: begin,\n seconds: span,\n excluded: excluded,\n precision: precision\n });\n return span / SECONDS_IN_DAY;\n}\nfunction getWeekViewEventOffset(dateAdapter, _a) {\n var event = _a.event,\n startOfWeekDate = _a.startOfWeek,\n excluded = _a.excluded,\n precision = _a.precision;\n var differenceInDays = dateAdapter.differenceInDays,\n startOfDay = dateAdapter.startOfDay,\n differenceInSeconds = dateAdapter.differenceInSeconds;\n if (event.start < startOfWeekDate) {\n return 0;\n }\n var offset = 0;\n switch (precision) {\n case 'days':\n offset = differenceInDays(startOfDay(event.start), startOfWeekDate) * SECONDS_IN_DAY;\n break;\n case 'minutes':\n offset = differenceInSeconds(event.start, startOfWeekDate);\n break;\n }\n offset -= getExcludedSeconds(dateAdapter, {\n startDate: startOfWeekDate,\n seconds: offset,\n excluded: excluded,\n precision: precision\n });\n return Math.abs(offset / SECONDS_IN_DAY);\n}\nfunction isEventIsPeriod(dateAdapter, _a) {\n var event = _a.event,\n periodStart = _a.periodStart,\n periodEnd = _a.periodEnd;\n var isSameSecond = dateAdapter.isSameSecond;\n var eventStart = event.start;\n var eventEnd = event.end || event.start;\n if (eventStart > periodStart && eventStart < periodEnd) {\n return true;\n }\n if (eventEnd > periodStart && eventEnd < periodEnd) {\n return true;\n }\n if (eventStart < periodStart && eventEnd > periodEnd) {\n return true;\n }\n if (isSameSecond(eventStart, periodStart) || isSameSecond(eventStart, periodEnd)) {\n return true;\n }\n if (isSameSecond(eventEnd, periodStart) || isSameSecond(eventEnd, periodEnd)) {\n return true;\n }\n return false;\n}\nexport function getEventsInPeriod(dateAdapter, _a) {\n var events = _a.events,\n periodStart = _a.periodStart,\n periodEnd = _a.periodEnd;\n return events.filter(function (event) {\n return isEventIsPeriod(dateAdapter, {\n event: event,\n periodStart: periodStart,\n periodEnd: periodEnd\n });\n });\n}\nfunction getWeekDay(dateAdapter, _a) {\n var date = _a.date,\n _b = _a.weekendDays,\n weekendDays = _b === void 0 ? DEFAULT_WEEKEND_DAYS : _b;\n var startOfDay = dateAdapter.startOfDay,\n isSameDay = dateAdapter.isSameDay,\n getDay = dateAdapter.getDay;\n var today = startOfDay(new Date());\n var day = getDay(date);\n return {\n date: date,\n day: day,\n isPast: date < today,\n isToday: isSameDay(date, today),\n isFuture: date > today,\n isWeekend: weekendDays.indexOf(day) > -1\n };\n}\nexport function getWeekViewHeader(dateAdapter, _a) {\n var viewDate = _a.viewDate,\n weekStartsOn = _a.weekStartsOn,\n _b = _a.excluded,\n excluded = _b === void 0 ? [] : _b,\n weekendDays = _a.weekendDays,\n _c = _a.viewStart,\n viewStart = _c === void 0 ? dateAdapter.startOfWeek(viewDate, {\n weekStartsOn: weekStartsOn\n }) : _c,\n _d = _a.viewEnd,\n viewEnd = _d === void 0 ? dateAdapter.addDays(viewStart, DAYS_IN_WEEK) : _d;\n var addDays = dateAdapter.addDays,\n getDay = dateAdapter.getDay;\n var days = [];\n var date = viewStart;\n while (date < viewEnd) {\n if (!excluded.some(function (e) {\n return getDay(date) === e;\n })) {\n days.push(getWeekDay(dateAdapter, {\n date: date,\n weekendDays: weekendDays\n }));\n }\n date = addDays(date, 1);\n }\n return days;\n}\nexport function getDifferenceInDaysWithExclusions(dateAdapter, _a) {\n var date1 = _a.date1,\n date2 = _a.date2,\n excluded = _a.excluded;\n var date = date1;\n var diff = 0;\n while (date < date2) {\n if (excluded.indexOf(dateAdapter.getDay(date)) === -1) {\n diff++;\n }\n date = dateAdapter.addDays(date, 1);\n }\n return diff;\n}\nexport function getAllDayWeekEvents(dateAdapter, _a) {\n var _b = _a.events,\n events = _b === void 0 ? [] : _b,\n _c = _a.excluded,\n excluded = _c === void 0 ? [] : _c,\n _d = _a.precision,\n precision = _d === void 0 ? 'days' : _d,\n _e = _a.absolutePositionedEvents,\n absolutePositionedEvents = _e === void 0 ? false : _e,\n viewStart = _a.viewStart,\n viewEnd = _a.viewEnd;\n viewStart = dateAdapter.startOfDay(viewStart);\n viewEnd = dateAdapter.endOfDay(viewEnd);\n var differenceInSeconds = dateAdapter.differenceInSeconds,\n differenceInDays = dateAdapter.differenceInDays;\n var maxRange = getDifferenceInDaysWithExclusions(dateAdapter, {\n date1: viewStart,\n date2: viewEnd,\n excluded: excluded\n });\n var totalDaysInView = differenceInDays(viewEnd, viewStart) + 1;\n var eventsMapped = events.filter(function (event) {\n return event.allDay;\n }).map(function (event) {\n var offset = getWeekViewEventOffset(dateAdapter, {\n event: event,\n startOfWeek: viewStart,\n excluded: excluded,\n precision: precision\n });\n var span = getWeekViewEventSpan(dateAdapter, {\n event: event,\n offset: offset,\n startOfWeekDate: viewStart,\n excluded: excluded,\n precision: precision,\n totalDaysInView: totalDaysInView\n });\n return {\n event: event,\n offset: offset,\n span: span\n };\n }).filter(function (e) {\n return e.offset < maxRange;\n }).filter(function (e) {\n return e.span > 0;\n }).map(function (entry) {\n return {\n event: entry.event,\n offset: entry.offset,\n span: entry.span,\n startsBeforeWeek: entry.event.start < viewStart,\n endsAfterWeek: (entry.event.end || entry.event.start) > viewEnd\n };\n }).sort(function (itemA, itemB) {\n var startSecondsDiff = differenceInSeconds(itemA.event.start, itemB.event.start);\n if (startSecondsDiff === 0) {\n return differenceInSeconds(itemB.event.end || itemB.event.start, itemA.event.end || itemA.event.start);\n }\n return startSecondsDiff;\n });\n var allDayEventRows = [];\n var allocatedEvents = [];\n eventsMapped.forEach(function (event, index) {\n if (allocatedEvents.indexOf(event) === -1) {\n allocatedEvents.push(event);\n var rowSpan_1 = event.span + event.offset;\n var otherRowEvents = eventsMapped.slice(index + 1).filter(function (nextEvent) {\n if (nextEvent.offset >= rowSpan_1 && rowSpan_1 + nextEvent.span <= totalDaysInView && allocatedEvents.indexOf(nextEvent) === -1) {\n var nextEventOffset = nextEvent.offset - rowSpan_1;\n if (!absolutePositionedEvents) {\n nextEvent.offset = nextEventOffset;\n }\n rowSpan_1 += nextEvent.span + nextEventOffset;\n allocatedEvents.push(nextEvent);\n return true;\n }\n });\n var weekEvents = __spreadArray([event], otherRowEvents, true);\n var id = weekEvents.filter(function (weekEvent) {\n return weekEvent.event.id;\n }).map(function (weekEvent) {\n return weekEvent.event.id;\n }).join('-');\n allDayEventRows.push(__assign({\n row: weekEvents\n }, id ? {\n id: id\n } : {}));\n }\n });\n return allDayEventRows;\n}\nfunction getWeekViewHourGrid(dateAdapter, _a) {\n var events = _a.events,\n viewDate = _a.viewDate,\n hourSegments = _a.hourSegments,\n hourDuration = _a.hourDuration,\n dayStart = _a.dayStart,\n dayEnd = _a.dayEnd,\n weekStartsOn = _a.weekStartsOn,\n excluded = _a.excluded,\n weekendDays = _a.weekendDays,\n segmentHeight = _a.segmentHeight,\n viewStart = _a.viewStart,\n viewEnd = _a.viewEnd,\n minimumEventHeight = _a.minimumEventHeight;\n var dayViewHourGrid = getDayViewHourGrid(dateAdapter, {\n viewDate: viewDate,\n hourSegments: hourSegments,\n hourDuration: hourDuration,\n dayStart: dayStart,\n dayEnd: dayEnd\n });\n var weekDays = getWeekViewHeader(dateAdapter, {\n viewDate: viewDate,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n viewStart: viewStart,\n viewEnd: viewEnd\n });\n var setHours = dateAdapter.setHours,\n setMinutes = dateAdapter.setMinutes,\n getHours = dateAdapter.getHours,\n getMinutes = dateAdapter.getMinutes;\n return weekDays.map(function (day) {\n var dayView = getDayView(dateAdapter, {\n events: events,\n viewDate: day.date,\n hourSegments: hourSegments,\n dayStart: dayStart,\n dayEnd: dayEnd,\n segmentHeight: segmentHeight,\n eventWidth: 1,\n hourDuration: hourDuration,\n minimumEventHeight: minimumEventHeight\n });\n var hours = dayViewHourGrid.map(function (hour) {\n var segments = hour.segments.map(function (segment) {\n var date = setMinutes(setHours(day.date, getHours(segment.date)), getMinutes(segment.date));\n return __assign(__assign({}, segment), {\n date: date\n });\n });\n return __assign(__assign({}, hour), {\n segments: segments\n });\n });\n function getColumnCount(allEvents, prevOverlappingEvents) {\n var columnCount = Math.max.apply(Math, prevOverlappingEvents.map(function (iEvent) {\n return iEvent.left + 1;\n }));\n var nextOverlappingEvents = allEvents.filter(function (iEvent) {\n return iEvent.left >= columnCount;\n }).filter(function (iEvent) {\n return getOverLappingWeekViewEvents(prevOverlappingEvents, iEvent.top, iEvent.top + iEvent.height).length > 0;\n });\n if (nextOverlappingEvents.length > 0) {\n return getColumnCount(allEvents, nextOverlappingEvents);\n } else {\n return columnCount;\n }\n }\n var mappedEvents = dayView.events.map(function (event) {\n var columnCount = getColumnCount(dayView.events, getOverLappingWeekViewEvents(dayView.events, event.top, event.top + event.height));\n var width = 100 / columnCount;\n return __assign(__assign({}, event), {\n left: event.left * width,\n width: width\n });\n });\n return {\n hours: hours,\n date: day.date,\n events: mappedEvents.map(function (event) {\n var overLappingEvents = getOverLappingWeekViewEvents(mappedEvents.filter(function (otherEvent) {\n return otherEvent.left > event.left;\n }), event.top, event.top + event.height);\n if (overLappingEvents.length > 0) {\n return __assign(__assign({}, event), {\n width: Math.min.apply(Math, overLappingEvents.map(function (otherEvent) {\n return otherEvent.left;\n })) - event.left\n });\n }\n return event;\n })\n };\n });\n}\nexport function getWeekView(dateAdapter, _a) {\n var _b = _a.events,\n events = _b === void 0 ? [] : _b,\n viewDate = _a.viewDate,\n weekStartsOn = _a.weekStartsOn,\n _c = _a.excluded,\n excluded = _c === void 0 ? [] : _c,\n _d = _a.precision,\n precision = _d === void 0 ? 'days' : _d,\n _e = _a.absolutePositionedEvents,\n absolutePositionedEvents = _e === void 0 ? false : _e,\n hourSegments = _a.hourSegments,\n hourDuration = _a.hourDuration,\n dayStart = _a.dayStart,\n dayEnd = _a.dayEnd,\n weekendDays = _a.weekendDays,\n segmentHeight = _a.segmentHeight,\n minimumEventHeight = _a.minimumEventHeight,\n _f = _a.viewStart,\n viewStart = _f === void 0 ? dateAdapter.startOfWeek(viewDate, {\n weekStartsOn: weekStartsOn\n }) : _f,\n _g = _a.viewEnd,\n viewEnd = _g === void 0 ? dateAdapter.endOfWeek(viewDate, {\n weekStartsOn: weekStartsOn\n }) : _g;\n if (!events) {\n events = [];\n }\n var startOfDay = dateAdapter.startOfDay,\n endOfDay = dateAdapter.endOfDay;\n viewStart = startOfDay(viewStart);\n viewEnd = endOfDay(viewEnd);\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: events,\n periodStart: viewStart,\n periodEnd: viewEnd\n });\n var header = getWeekViewHeader(dateAdapter, {\n viewDate: viewDate,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n viewStart: viewStart,\n viewEnd: viewEnd\n });\n return {\n allDayEventRows: getAllDayWeekEvents(dateAdapter, {\n events: eventsInPeriod,\n excluded: excluded,\n precision: precision,\n absolutePositionedEvents: absolutePositionedEvents,\n viewStart: viewStart,\n viewEnd: viewEnd\n }),\n period: {\n events: eventsInPeriod,\n start: header[0].date,\n end: endOfDay(header[header.length - 1].date)\n },\n hourColumns: getWeekViewHourGrid(dateAdapter, {\n events: events,\n viewDate: viewDate,\n hourSegments: hourSegments,\n hourDuration: hourDuration,\n dayStart: dayStart,\n dayEnd: dayEnd,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n segmentHeight: segmentHeight,\n viewStart: viewStart,\n viewEnd: viewEnd,\n minimumEventHeight: minimumEventHeight\n })\n };\n}\nexport function getMonthView(dateAdapter, _a) {\n var _b = _a.events,\n events = _b === void 0 ? [] : _b,\n viewDate = _a.viewDate,\n weekStartsOn = _a.weekStartsOn,\n _c = _a.excluded,\n excluded = _c === void 0 ? [] : _c,\n _d = _a.viewStart,\n viewStart = _d === void 0 ? dateAdapter.startOfMonth(viewDate) : _d,\n _e = _a.viewEnd,\n viewEnd = _e === void 0 ? dateAdapter.endOfMonth(viewDate) : _e,\n weekendDays = _a.weekendDays;\n if (!events) {\n events = [];\n }\n var startOfWeek = dateAdapter.startOfWeek,\n endOfWeek = dateAdapter.endOfWeek,\n differenceInDays = dateAdapter.differenceInDays,\n startOfDay = dateAdapter.startOfDay,\n addHours = dateAdapter.addHours,\n endOfDay = dateAdapter.endOfDay,\n isSameMonth = dateAdapter.isSameMonth,\n getDay = dateAdapter.getDay;\n var start = startOfWeek(viewStart, {\n weekStartsOn: weekStartsOn\n });\n var end = endOfWeek(viewEnd, {\n weekStartsOn: weekStartsOn\n });\n var eventsInMonth = getEventsInPeriod(dateAdapter, {\n events: events,\n periodStart: start,\n periodEnd: end\n });\n var initialViewDays = [];\n var previousDate;\n var _loop_2 = function (i) {\n // hacky fix for https://github.com/mattlewis92/angular-calendar/issues/173\n var date;\n if (previousDate) {\n date = startOfDay(addHours(previousDate, HOURS_IN_DAY));\n if (previousDate.getTime() === date.getTime()) {\n // DST change, so need to add 25 hours\n /* istanbul ignore next */\n date = startOfDay(addHours(previousDate, HOURS_IN_DAY + 1));\n }\n previousDate = date;\n } else {\n date = previousDate = start;\n }\n if (!excluded.some(function (e) {\n return getDay(date) === e;\n })) {\n var day = getWeekDay(dateAdapter, {\n date: date,\n weekendDays: weekendDays\n });\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: eventsInMonth,\n periodStart: startOfDay(date),\n periodEnd: endOfDay(date)\n });\n day.inMonth = isSameMonth(date, viewDate);\n day.events = eventsInPeriod;\n day.badgeTotal = eventsInPeriod.length;\n initialViewDays.push(day);\n }\n };\n for (var i = 0; i < differenceInDays(end, start) + 1; i++) {\n _loop_2(i);\n }\n var days = [];\n var totalDaysVisibleInWeek = DAYS_IN_WEEK - excluded.length;\n if (totalDaysVisibleInWeek < DAYS_IN_WEEK) {\n for (var i = 0; i < initialViewDays.length; i += totalDaysVisibleInWeek) {\n var row = initialViewDays.slice(i, i + totalDaysVisibleInWeek);\n var isRowInMonth = row.some(function (day) {\n return viewStart <= day.date && day.date < viewEnd;\n });\n if (isRowInMonth) {\n days = __spreadArray(__spreadArray([], days, true), row, true);\n }\n }\n } else {\n days = initialViewDays;\n }\n var rows = Math.floor(days.length / totalDaysVisibleInWeek);\n var rowOffsets = [];\n for (var i = 0; i < rows; i++) {\n rowOffsets.push(i * totalDaysVisibleInWeek);\n }\n return {\n rowOffsets: rowOffsets,\n totalDaysVisibleInWeek: totalDaysVisibleInWeek,\n days: days,\n period: {\n start: days[0].date,\n end: endOfDay(days[days.length - 1].date),\n events: eventsInMonth\n }\n };\n}\nfunction getOverLappingWeekViewEvents(events, top, bottom) {\n return events.filter(function (previousEvent) {\n var previousEventTop = previousEvent.top;\n var previousEventBottom = previousEvent.top + previousEvent.height;\n if (top < previousEventBottom && previousEventBottom < bottom) {\n return true;\n } else if (top < previousEventTop && previousEventTop < bottom) {\n return true;\n } else if (previousEventTop <= top && bottom <= previousEventBottom) {\n return true;\n }\n return false;\n });\n}\nfunction getDayView(dateAdapter, _a) {\n var events = _a.events,\n viewDate = _a.viewDate,\n hourSegments = _a.hourSegments,\n dayStart = _a.dayStart,\n dayEnd = _a.dayEnd,\n eventWidth = _a.eventWidth,\n segmentHeight = _a.segmentHeight,\n hourDuration = _a.hourDuration,\n minimumEventHeight = _a.minimumEventHeight;\n var setMinutes = dateAdapter.setMinutes,\n setHours = dateAdapter.setHours,\n startOfDay = dateAdapter.startOfDay,\n startOfMinute = dateAdapter.startOfMinute,\n endOfDay = dateAdapter.endOfDay,\n differenceInMinutes = dateAdapter.differenceInMinutes;\n var startOfView = setMinutes(setHours(startOfDay(viewDate), sanitiseHours(dayStart.hour)), sanitiseMinutes(dayStart.minute));\n var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), sanitiseHours(dayEnd.hour)), sanitiseMinutes(dayEnd.minute));\n endOfView.setSeconds(59, 999);\n var previousDayEvents = [];\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: events.filter(function (event) {\n return !event.allDay;\n }),\n periodStart: startOfView,\n periodEnd: endOfView\n });\n var dayViewEvents = eventsInPeriod.sort(function (eventA, eventB) {\n return eventA.start.valueOf() - eventB.start.valueOf();\n }).map(function (event) {\n var eventStart = event.start;\n var eventEnd = event.end || eventStart;\n var startsBeforeDay = eventStart < startOfView;\n var endsAfterDay = eventEnd > endOfView;\n var hourHeightModifier = hourSegments * segmentHeight / (hourDuration || MINUTES_IN_HOUR);\n var top = 0;\n if (eventStart > startOfView) {\n // adjust the difference in minutes if the user's offset is different between the start of the day and the event (e.g. when going to or from DST)\n var eventOffset = dateAdapter.getTimezoneOffset(eventStart);\n var startOffset = dateAdapter.getTimezoneOffset(startOfView);\n var diff = startOffset - eventOffset;\n top += differenceInMinutes(eventStart, startOfView) + diff;\n }\n top *= hourHeightModifier;\n top = Math.floor(top);\n var startDate = startsBeforeDay ? startOfView : eventStart;\n var endDate = endsAfterDay ? endOfView : eventEnd;\n var timezoneOffset = dateAdapter.getTimezoneOffset(startDate) - dateAdapter.getTimezoneOffset(endDate);\n var height = differenceInMinutes(endDate, startDate) + timezoneOffset;\n if (!event.end) {\n height = segmentHeight;\n } else {\n height *= hourHeightModifier;\n }\n if (minimumEventHeight && height < minimumEventHeight) {\n height = minimumEventHeight;\n }\n height = Math.floor(height);\n var bottom = top + height;\n var overlappingPreviousEvents = getOverLappingWeekViewEvents(previousDayEvents, top, bottom);\n var left = 0;\n while (overlappingPreviousEvents.some(function (previousEvent) {\n return previousEvent.left === left;\n })) {\n left += eventWidth;\n }\n var dayEvent = {\n event: event,\n height: height,\n width: eventWidth,\n top: top,\n left: left,\n startsBeforeDay: startsBeforeDay,\n endsAfterDay: endsAfterDay\n };\n previousDayEvents.push(dayEvent);\n return dayEvent;\n });\n var width = Math.max.apply(Math, dayViewEvents.map(function (event) {\n return event.left + event.width;\n }));\n var allDayEvents = getEventsInPeriod(dateAdapter, {\n events: events.filter(function (event) {\n return event.allDay;\n }),\n periodStart: startOfDay(startOfView),\n periodEnd: endOfDay(endOfView)\n });\n return {\n events: dayViewEvents,\n width: width,\n allDayEvents: allDayEvents,\n period: {\n events: eventsInPeriod,\n start: startOfView,\n end: endOfView\n }\n };\n}\nfunction sanitiseHours(hours) {\n return Math.max(Math.min(23, hours), 0);\n}\nfunction sanitiseMinutes(minutes) {\n return Math.max(Math.min(59, minutes), 0);\n}\nfunction getDayViewHourGrid(dateAdapter, _a) {\n var viewDate = _a.viewDate,\n hourSegments = _a.hourSegments,\n hourDuration = _a.hourDuration,\n dayStart = _a.dayStart,\n dayEnd = _a.dayEnd;\n var setMinutes = dateAdapter.setMinutes,\n setHours = dateAdapter.setHours,\n startOfDay = dateAdapter.startOfDay,\n startOfMinute = dateAdapter.startOfMinute,\n endOfDay = dateAdapter.endOfDay,\n addMinutes = dateAdapter.addMinutes,\n addDays = dateAdapter.addDays;\n var hours = [];\n var startOfView = setMinutes(setHours(startOfDay(viewDate), sanitiseHours(dayStart.hour)), sanitiseMinutes(dayStart.minute));\n var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), sanitiseHours(dayEnd.hour)), sanitiseMinutes(dayEnd.minute));\n var segmentDuration = (hourDuration || MINUTES_IN_HOUR) / hourSegments;\n var startOfViewDay = startOfDay(viewDate);\n var endOfViewDay = endOfDay(viewDate);\n var dateAdjustment = function (d) {\n return d;\n };\n // this means that we change from or to DST on this day and that's going to cause problems so we bump the date\n if (dateAdapter.getTimezoneOffset(startOfViewDay) !== dateAdapter.getTimezoneOffset(endOfViewDay)) {\n startOfViewDay = addDays(startOfViewDay, 1);\n startOfView = addDays(startOfView, 1);\n endOfView = addDays(endOfView, 1);\n dateAdjustment = function (d) {\n return addDays(d, -1);\n };\n }\n var dayDuration = hourDuration ? HOURS_IN_DAY * 60 / hourDuration : MINUTES_IN_HOUR;\n for (var i = 0; i < dayDuration; i++) {\n var segments = [];\n for (var j = 0; j < hourSegments; j++) {\n var date = addMinutes(addMinutes(startOfView, i * (hourDuration || MINUTES_IN_HOUR)), j * segmentDuration);\n if (date >= startOfView && date < endOfView) {\n segments.push({\n date: dateAdjustment(date),\n displayDate: date,\n isStart: j === 0\n });\n }\n }\n if (segments.length > 0) {\n hours.push({\n segments: segments\n });\n }\n }\n return hours;\n}\nexport var EventValidationErrorMessage = /*#__PURE__*/function (EventValidationErrorMessage) {\n EventValidationErrorMessage[\"NotArray\"] = \"Events must be an array\";\n EventValidationErrorMessage[\"StartPropertyMissing\"] = \"Event is missing the `start` property\";\n EventValidationErrorMessage[\"StartPropertyNotDate\"] = \"Event `start` property should be a javascript date object. Do `new Date(event.start)` to fix it.\";\n EventValidationErrorMessage[\"EndPropertyNotDate\"] = \"Event `end` property should be a javascript date object. Do `new Date(event.end)` to fix it.\";\n EventValidationErrorMessage[\"EndsBeforeStart\"] = \"Event `start` property occurs after the `end`\";\n return EventValidationErrorMessage;\n}(EventValidationErrorMessage || {});\nexport function validateEvents(events, log) {\n var isValid = true;\n function isError(msg, event) {\n log(msg, event);\n isValid = false;\n }\n if (!Array.isArray(events)) {\n log(EventValidationErrorMessage.NotArray, events);\n return false;\n }\n events.forEach(function (event) {\n if (!event.start) {\n isError(EventValidationErrorMessage.StartPropertyMissing, event);\n } else if (!(event.start instanceof Date)) {\n isError(EventValidationErrorMessage.StartPropertyNotDate, event);\n }\n if (event.end) {\n if (!(event.end instanceof Date)) {\n isError(EventValidationErrorMessage.EndPropertyNotDate, event);\n }\n if (event.start > event.end) {\n isError(EventValidationErrorMessage.EndsBeforeStart, event);\n }\n }\n });\n return isValid;\n}\n","function getDef(f, d) {\n if (typeof f === 'undefined') {\n return typeof d === 'undefined' ? f : d;\n }\n return f;\n}\nfunction boolean(func, def) {\n func = getDef(func, def);\n if (typeof func === 'function') {\n return function f() {\n var arguments$1 = arguments;\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments$1[_key];\n }\n return !!func.apply(this, args);\n };\n }\n return !!func ? function () {\n return true;\n } : function () {\n return false;\n };\n}\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n\n/**\n * Returns `true` if provided input is Element.\n * @name isElement\n * @param {*} [input]\n * @returns {boolean}\n */\nvar isElement$1 = function (input) {\n return input != null && (typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input.nodeType === 1 && _typeof(input.style) === 'object' && _typeof(input.ownerDocument) === 'object';\n};\nfunction indexOfElement(elements, element) {\n element = resolveElement(element, true);\n if (!isElement$1(element)) {\n return -1;\n }\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === element) {\n return i;\n }\n }\n return -1;\n}\nfunction hasElement(elements, element) {\n return -1 !== indexOfElement(elements, element);\n}\nfunction pushElements(elements, toAdd) {\n for (var i = 0; i < toAdd.length; i++) {\n if (!hasElement(elements, toAdd[i])) {\n elements.push(toAdd[i]);\n }\n }\n return toAdd;\n}\nfunction addElements(elements) {\n var arguments$1 = arguments;\n var toAdd = [],\n len = arguments.length - 1;\n while (len-- > 0) {\n toAdd[len] = arguments$1[len + 1];\n }\n toAdd = toAdd.map(resolveElement);\n return pushElements(elements, toAdd);\n}\nfunction removeElements(elements) {\n var arguments$1 = arguments;\n var toRemove = [],\n len = arguments.length - 1;\n while (len-- > 0) {\n toRemove[len] = arguments$1[len + 1];\n }\n return toRemove.map(resolveElement).reduce(function (last, e) {\n var index = indexOfElement(elements, e);\n if (index !== -1) {\n return last.concat(elements.splice(index, 1));\n }\n return last;\n }, []);\n}\nfunction resolveElement(element, noThrow) {\n if (typeof element === 'string') {\n try {\n return document.querySelector(element);\n } catch (e) {\n throw e;\n }\n }\n if (!isElement$1(element) && !noThrow) {\n throw new TypeError(element + \" is not a DOM element.\");\n }\n return element;\n}\nfunction createPointCB(object, options) {\n // A persistent object (as opposed to returned object) is used to save memory\n // This is good to prevent layout thrashing, or for games, and such\n\n // NOTE\n // This uses IE fixes which should be OK to remove some day. :)\n // Some speed will be gained by removal of these.\n\n // pointCB should be saved in a variable on return\n // This allows the usage of element.removeEventListener\n\n options = options || {};\n var allowUpdate = boolean(options.allowUpdate, true);\n\n /*if(typeof options.allowUpdate === 'function'){\n allowUpdate = options.allowUpdate;\n }else{\n allowUpdate = function(){return true;};\n }*/\n\n return function pointCB(event) {\n event = event || window.event; // IE-ism\n object.target = event.target || event.srcElement || event.originalTarget;\n object.element = this;\n object.type = event.type;\n if (!allowUpdate(event)) {\n return;\n }\n\n // Support touch\n // http://www.creativebloq.com/javascript/make-your-site-work-touch-devices-51411644\n\n if (event.targetTouches) {\n object.x = event.targetTouches[0].clientX;\n object.y = event.targetTouches[0].clientY;\n object.pageX = event.targetTouches[0].pageX;\n object.pageY = event.targetTouches[0].pageY;\n object.screenX = event.targetTouches[0].screenX;\n object.screenY = event.targetTouches[0].screenY;\n } else {\n // If pageX/Y aren't available and clientX/Y are,\n // calculate pageX/Y - logic taken from jQuery.\n // (This is to support old IE)\n // NOTE Hopefully this can be removed soon.\n\n if (event.pageX === null && event.clientX !== null) {\n var eventDoc = event.target && event.target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n object.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n object.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n } else {\n object.pageX = event.pageX;\n object.pageY = event.pageY;\n }\n\n // pageX, and pageY change with page scroll\n // so we're not going to use those for x, and y.\n // NOTE Most browsers also alias clientX/Y with x/y\n // so that's something to consider down the road.\n\n object.x = event.clientX;\n object.y = event.clientY;\n object.screenX = event.screenX;\n object.screenY = event.screenY;\n }\n object.clientX = object.x;\n object.clientY = object.y;\n };\n\n //NOTE Remember accessibility, Aria roles, and labels.\n}\nfunction createWindowRect() {\n var props = {\n top: {\n value: 0,\n enumerable: true\n },\n left: {\n value: 0,\n enumerable: true\n },\n right: {\n value: window.innerWidth,\n enumerable: true\n },\n bottom: {\n value: window.innerHeight,\n enumerable: true\n },\n width: {\n value: window.innerWidth,\n enumerable: true\n },\n height: {\n value: window.innerHeight,\n enumerable: true\n },\n x: {\n value: 0,\n enumerable: true\n },\n y: {\n value: 0,\n enumerable: true\n }\n };\n if (Object.create) {\n return Object.create({}, props);\n } else {\n var rect = {};\n Object.defineProperties(rect, props);\n return rect;\n }\n}\nfunction getClientRect(el) {\n if (el === window) {\n return createWindowRect();\n } else {\n try {\n var rect = el.getBoundingClientRect();\n if (rect.x === undefined) {\n rect.x = rect.left;\n rect.y = rect.top;\n }\n return rect;\n } catch (e) {\n throw new TypeError(\"Can't call getBoundingClientRect on \" + el);\n }\n }\n}\nfunction pointInside(point, el) {\n var rect = getClientRect(el);\n return point.y > rect.top && point.y < rect.bottom && point.x > rect.left && point.x < rect.right;\n}\nvar objectCreate = void 0;\nif (typeof Object.create != 'function') {\n objectCreate = function (undefined$1) {\n var Temp = function Temp() {};\n return function (prototype, propertiesObject) {\n if (prototype !== Object(prototype) && prototype !== null) {\n throw TypeError('Argument must be an object, or null');\n }\n Temp.prototype = prototype || {};\n var result = new Temp();\n Temp.prototype = null;\n if (propertiesObject !== undefined$1) {\n Object.defineProperties(result, propertiesObject);\n }\n\n // to imitate the case of Object.create(null)\n if (prototype === null) {\n result.__proto__ = null;\n }\n return result;\n };\n }();\n} else {\n objectCreate = Object.create;\n}\nvar objectCreate$1 = objectCreate;\nvar mouseEventProps = ['altKey', 'button', 'buttons', 'clientX', 'clientY', 'ctrlKey', 'metaKey', 'movementX', 'movementY', 'offsetX', 'offsetY', 'pageX', 'pageY', 'region', 'relatedTarget', 'screenX', 'screenY', 'shiftKey', 'which', 'x', 'y'];\nfunction createDispatcher(element) {\n var defaultSettings = {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n shiftKey: false,\n altKey: false,\n metaKey: false,\n button: 0,\n buttons: 1,\n relatedTarget: null,\n region: null\n };\n if (element !== undefined) {\n element.addEventListener('mousemove', onMove);\n }\n function onMove(e) {\n for (var i = 0; i < mouseEventProps.length; i++) {\n defaultSettings[mouseEventProps[i]] = e[mouseEventProps[i]];\n }\n }\n var dispatch = function () {\n if (MouseEvent) {\n return function m1(element, initMove, data) {\n var evt = new MouseEvent('mousemove', createMoveInit(defaultSettings, initMove));\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n return element.dispatchEvent(evt);\n };\n } else if (typeof document.createEvent === 'function') {\n return function m2(element, initMove, data) {\n var settings = createMoveInit(defaultSettings, initMove);\n var evt = document.createEvent('MouseEvents');\n evt.initMouseEvent(\"mousemove\", true,\n //can bubble\n true,\n //cancelable\n window,\n //view\n 0,\n //detail\n settings.screenX,\n //0, //screenX\n settings.screenY,\n //0, //screenY\n settings.clientX,\n //80, //clientX\n settings.clientY,\n //20, //clientY\n settings.ctrlKey,\n //false, //ctrlKey\n settings.altKey,\n //false, //altKey\n settings.shiftKey,\n //false, //shiftKey\n settings.metaKey,\n //false, //metaKey\n settings.button,\n //0, //button\n settings.relatedTarget //null //relatedTarget\n );\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n return element.dispatchEvent(evt);\n };\n } else if (typeof document.createEventObject === 'function') {\n return function m3(element, initMove, data) {\n var evt = document.createEventObject();\n var settings = createMoveInit(defaultSettings, initMove);\n for (var name in settings) {\n evt[name] = settings[name];\n }\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n return element.dispatchEvent(evt);\n };\n }\n }();\n function destroy() {\n if (element) {\n element.removeEventListener('mousemove', onMove, false);\n }\n defaultSettings = null;\n }\n return {\n destroy: destroy,\n dispatch: dispatch\n };\n}\nfunction createMoveInit(defaultSettings, initMove) {\n initMove = initMove || {};\n var settings = objectCreate$1(defaultSettings);\n for (var i = 0; i < mouseEventProps.length; i++) {\n if (initMove[mouseEventProps[i]] !== undefined) {\n settings[mouseEventProps[i]] = initMove[mouseEventProps[i]];\n }\n }\n return settings;\n}\nfunction setSpecial(e, data) {\n console.log('data ', data);\n e.data = data || {};\n e.dispatched = 'mousemove';\n}\nvar prefix = ['webkit', 'moz', 'ms', 'o'];\nvar requestFrame = function () {\n if (typeof window === \"undefined\") {\n return function () {};\n }\n for (var i = 0, limit = prefix.length; i < limit && !window.requestAnimationFrame; ++i) {\n window.requestAnimationFrame = window[prefix[i] + 'RequestAnimationFrame'];\n }\n if (!window.requestAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function (callback) {\n var now = new Date().getTime();\n var ttc = Math.max(0, 16 - now - lastTime);\n var timer = window.setTimeout(function () {\n return callback(now + ttc);\n }, ttc);\n lastTime = now + ttc;\n return timer;\n };\n }\n return window.requestAnimationFrame.bind(window);\n}();\nvar cancelFrame = function () {\n if (typeof window === \"undefined\") {\n return function () {};\n }\n for (var i = 0, limit = prefix.length; i < limit && !window.cancelAnimationFrame; ++i) {\n window.cancelAnimationFrame = window[prefix[i] + 'CancelAnimationFrame'] || window[prefix[i] + 'CancelRequestAnimationFrame'];\n }\n if (!window.cancelAnimationFrame) {\n window.cancelAnimationFrame = function (timer) {\n window.clearTimeout(timer);\n };\n }\n return window.cancelAnimationFrame.bind(window);\n}();\nfunction AutoScroller(elements, options) {\n if (options === void 0) options = {};\n var self = this;\n var maxSpeed = 4,\n scrolling = false;\n if (typeof options.margin !== 'object') {\n var margin = options.margin || -1;\n this.margin = {\n left: margin,\n right: margin,\n top: margin,\n bottom: margin\n };\n } else {\n this.margin = options.margin;\n }\n\n //this.scrolling = false;\n this.scrollWhenOutside = options.scrollWhenOutside || false;\n var point = {},\n pointCB = createPointCB(point),\n dispatcher = createDispatcher(),\n down = false;\n window.addEventListener('mousemove', pointCB, false);\n window.addEventListener('touchmove', pointCB, false);\n if (!isNaN(options.maxSpeed)) {\n maxSpeed = options.maxSpeed;\n }\n if (typeof maxSpeed !== 'object') {\n maxSpeed = {\n left: maxSpeed,\n right: maxSpeed,\n top: maxSpeed,\n bottom: maxSpeed\n };\n }\n this.autoScroll = boolean(options.autoScroll);\n this.syncMove = boolean(options.syncMove, false);\n this.destroy = function (forceCleanAnimation) {\n window.removeEventListener('mousemove', pointCB, false);\n window.removeEventListener('touchmove', pointCB, false);\n window.removeEventListener('mousedown', onDown, false);\n window.removeEventListener('touchstart', onDown, false);\n window.removeEventListener('mouseup', onUp, false);\n window.removeEventListener('touchend', onUp, false);\n window.removeEventListener('pointerup', onUp, false);\n window.removeEventListener('mouseleave', onMouseOut, false);\n window.removeEventListener('mousemove', onMove, false);\n window.removeEventListener('touchmove', onMove, false);\n window.removeEventListener('scroll', setScroll, true);\n elements = [];\n if (forceCleanAnimation) {\n cleanAnimation();\n }\n };\n this.add = function () {\n var element = [],\n len = arguments.length;\n while (len--) element[len] = arguments[len];\n addElements.apply(void 0, [elements].concat(element));\n return this;\n };\n this.remove = function () {\n var element = [],\n len = arguments.length;\n while (len--) element[len] = arguments[len];\n return removeElements.apply(void 0, [elements].concat(element));\n };\n var hasWindow = null,\n windowAnimationFrame;\n if (Object.prototype.toString.call(elements) !== '[object Array]') {\n elements = [elements];\n }\n (function (temp) {\n elements = [];\n temp.forEach(function (element) {\n if (element === window) {\n hasWindow = window;\n } else {\n self.add(element);\n }\n });\n })(elements);\n Object.defineProperties(this, {\n down: {\n get: function () {\n return down;\n }\n },\n maxSpeed: {\n get: function () {\n return maxSpeed;\n }\n },\n point: {\n get: function () {\n return point;\n }\n },\n scrolling: {\n get: function () {\n return scrolling;\n }\n }\n });\n var current = null,\n animationFrame;\n window.addEventListener('mousedown', onDown, false);\n window.addEventListener('touchstart', onDown, false);\n window.addEventListener('mouseup', onUp, false);\n window.addEventListener('touchend', onUp, false);\n\n /*\n IE does not trigger mouseup event when scrolling.\n It is a known issue that Microsoft won't fix.\n https://connect.microsoft.com/IE/feedback/details/783058/scrollbar-trigger-mousedown-but-not-mouseup\n IE supports pointer events instead\n */\n window.addEventListener('pointerup', onUp, false);\n window.addEventListener('mousemove', onMove, false);\n window.addEventListener('touchmove', onMove, false);\n window.addEventListener('mouseleave', onMouseOut, false);\n window.addEventListener('scroll', setScroll, true);\n function setScroll(e) {\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === e.target) {\n scrolling = true;\n break;\n }\n }\n if (scrolling) {\n requestFrame(function () {\n return scrolling = false;\n });\n }\n }\n function onDown() {\n down = true;\n }\n function onUp() {\n down = false;\n cleanAnimation();\n }\n function cleanAnimation() {\n cancelFrame(animationFrame);\n cancelFrame(windowAnimationFrame);\n }\n function onMouseOut() {\n down = false;\n }\n function getTarget(target) {\n if (!target) {\n return null;\n }\n if (current === target) {\n return target;\n }\n if (hasElement(elements, target)) {\n return target;\n }\n while (target = target.parentNode) {\n if (hasElement(elements, target)) {\n return target;\n }\n }\n return null;\n }\n function getElementUnderPoint() {\n var underPoint = null;\n for (var i = 0; i < elements.length; i++) {\n if (inside(point, elements[i])) {\n underPoint = elements[i];\n }\n }\n return underPoint;\n }\n function onMove(event) {\n if (!self.autoScroll()) {\n return;\n }\n if (event['dispatched']) {\n return;\n }\n var target = event.target,\n body = document.body;\n if (current && !inside(point, current)) {\n if (!self.scrollWhenOutside) {\n current = null;\n }\n }\n if (target && target.parentNode === body) {\n //The special condition to improve speed.\n target = getElementUnderPoint();\n } else {\n target = getTarget(target);\n if (!target) {\n target = getElementUnderPoint();\n }\n }\n if (target && target !== current) {\n current = target;\n }\n if (hasWindow) {\n cancelFrame(windowAnimationFrame);\n windowAnimationFrame = requestFrame(scrollWindow);\n }\n if (!current) {\n return;\n }\n cancelFrame(animationFrame);\n animationFrame = requestFrame(scrollTick);\n }\n function scrollWindow() {\n autoScroll(hasWindow);\n cancelFrame(windowAnimationFrame);\n windowAnimationFrame = requestFrame(scrollWindow);\n }\n function scrollTick() {\n if (!current) {\n return;\n }\n autoScroll(current);\n cancelFrame(animationFrame);\n animationFrame = requestFrame(scrollTick);\n }\n function autoScroll(el) {\n var rect = getClientRect(el),\n scrollx,\n scrolly;\n if (point.x < rect.left + self.margin.left) {\n scrollx = Math.floor(Math.max(-1, (point.x - rect.left) / self.margin.left - 1) * self.maxSpeed.left);\n } else if (point.x > rect.right - self.margin.right) {\n scrollx = Math.ceil(Math.min(1, (point.x - rect.right) / self.margin.right + 1) * self.maxSpeed.right);\n } else {\n scrollx = 0;\n }\n if (point.y < rect.top + self.margin.top) {\n scrolly = Math.floor(Math.max(-1, (point.y - rect.top) / self.margin.top - 1) * self.maxSpeed.top);\n } else if (point.y > rect.bottom - self.margin.bottom) {\n scrolly = Math.ceil(Math.min(1, (point.y - rect.bottom) / self.margin.bottom + 1) * self.maxSpeed.bottom);\n } else {\n scrolly = 0;\n }\n if (self.syncMove()) {\n /*\n Notes about mousemove event dispatch.\n screen(X/Y) should need to be updated.\n Some other properties might need to be set.\n Keep the syncMove option default false until all inconsistencies are taken care of.\n */\n dispatcher.dispatch(el, {\n pageX: point.pageX + scrollx,\n pageY: point.pageY + scrolly,\n clientX: point.x + scrollx,\n clientY: point.y + scrolly\n });\n }\n setTimeout(function () {\n if (scrolly) {\n scrollY(el, scrolly);\n }\n if (scrollx) {\n scrollX(el, scrollx);\n }\n });\n }\n function scrollY(el, amount) {\n if (el === window) {\n window.scrollTo(el.pageXOffset, el.pageYOffset + amount);\n } else {\n el.scrollTop += amount;\n }\n }\n function scrollX(el, amount) {\n if (el === window) {\n window.scrollTo(el.pageXOffset + amount, el.pageYOffset);\n } else {\n el.scrollLeft += amount;\n }\n }\n}\nfunction AutoScrollerFactory(element, options) {\n return new AutoScroller(element, options);\n}\nfunction inside(point, el, rect) {\n if (!rect) {\n return pointInside(point, el);\n } else {\n return point.y > rect.top && point.y < rect.bottom && point.x > rect.left && point.x < rect.right;\n }\n}\n\n/*\ngit remote add origin https://github.com/hollowdoor/dom_autoscroller.git\ngit push -u origin master\n*/\n\nexport default AutoScrollerFactory;","import * as i0 from '@angular/core';\nimport { Injectable, Directive, EventEmitter, Optional, Inject, Input, Output, NgModule } from '@angular/core';\nimport { Subject, Observable, ReplaySubject, merge, combineLatest, fromEvent } from 'rxjs';\nimport { filter, mergeMap, startWith, map, share, takeUntil, take, takeLast, count, pairwise, distinctUntilChanged } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\nimport autoScroll from '@mattlewis92/dom-autoscroller';\nfunction addClass(renderer, element, classToAdd) {\n if (classToAdd) {\n classToAdd.split(' ').forEach(className => renderer.addClass(element.nativeElement, className));\n }\n}\nfunction removeClass(renderer, element, classToRemove) {\n if (classToRemove) {\n classToRemove.split(' ').forEach(className => renderer.removeClass(element.nativeElement, className));\n }\n}\nlet DraggableHelper = /*#__PURE__*/(() => {\n class DraggableHelper {\n constructor() {\n this.currentDrag = new Subject();\n }\n }\n DraggableHelper.ɵfac = function DraggableHelper_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DraggableHelper)();\n };\n DraggableHelper.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DraggableHelper,\n factory: DraggableHelper.ɵfac,\n providedIn: 'root'\n });\n return DraggableHelper;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * If the window isn't scrollable, then place this on the scrollable container that draggable elements are inside. e.g.\n * ```html\n