UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

1,389 lines (1,373 loc) 3.09 MB
import { style, animate, animation, keyframes, AnimationBuilder, useAnimation, trigger, transition, state } from '@angular/animations'; import { __assign, __spread, __decorate, __metadata, __values, __param, __extends, __read } from 'tslib'; import { Injectable, Input, HostListener, Directive, NgModule, Inject, PLATFORM_ID, ɵɵdefineInjectable, ɵɵinject, Pipe, EventEmitter, Output, isDevMode, ElementRef, ComponentFactoryResolver, ApplicationRef, Injector, NgZone, INJECTOR, ChangeDetectorRef, Optional, HostBinding, InjectionToken, Component, ViewContainerRef, ViewChild, TemplateRef, IterableDiffers, ContentChild, ContentChildren, forwardRef, QueryList, Self, Renderer2, SecurityContext, Host, ViewChildren, NgModuleRef, SimpleChange, ChangeDetectionStrategy, LOCALE_ID } from '@angular/core'; import { NgModel, FormControlName, NG_VALUE_ACCESSOR, FormsModule, NG_VALIDATORS, CheckboxRequiredValidator, NgControl, ReactiveFormsModule } from '@angular/forms'; import { isPlatformBrowser, DOCUMENT, CommonModule, formatDate, DatePipe, DecimalPipe } from '@angular/common'; import { Observable, Subject, fromEvent, interval, animationFrameScheduler, merge, Subscription, timer, pipe, combineLatest } from 'rxjs'; import { filter, takeUntil, throttleTime, first as first$1, take, throttle, debounce, tap, switchMap, skipLast, map, debounceTime } from 'rxjs/operators'; import ResizeObserver from 'resize-observer-polyfill'; import * as JSZip from 'jszip/dist/jszip'; import { DomSanitizer, HammerGestureConfig, HAMMER_GESTURE_CONFIG, ɵgetDOM } from '@angular/platform-browser'; var EaseIn; (function (EaseIn) { EaseIn[EaseIn["quad"] = "cubic-bezier(0.550, 0.085, 0.680, 0.530)"] = "quad"; EaseIn[EaseIn["cubic"] = "cubic-bezier(0.550, 0.055, 0.675, 0.190)"] = "cubic"; EaseIn[EaseIn["quart"] = "cubic-bezier(0.895, 0.030, 0.685, 0.220)"] = "quart"; EaseIn[EaseIn["quint"] = "cubic-bezier(0.755, 0.050, 0.855, 0.060)"] = "quint"; EaseIn[EaseIn["sine"] = "cubic-bezier(0.470, 0.000, 0.745, 0.715)"] = "sine"; EaseIn[EaseIn["expo"] = "cubic-bezier(0.950, 0.050, 0.795, 0.035)"] = "expo"; EaseIn[EaseIn["circ"] = "cubic-bezier(0.600, 0.040, 0.980, 0.335)"] = "circ"; EaseIn[EaseIn["back"] = "cubic-bezier(0.600, -0.280, 0.735, 0.045)"] = "back"; })(EaseIn || (EaseIn = {})); var EaseOut; (function (EaseOut) { EaseOut[EaseOut["quad"] = "cubic-bezier(0.250, 0.460, 0.450, 0.940)"] = "quad"; EaseOut[EaseOut["cubic"] = "cubic-bezier(0.215, 0.610, 0.355, 1.000)"] = "cubic"; EaseOut[EaseOut["quart"] = "cubic-bezier(0.165, 0.840, 0.440, 1.000)"] = "quart"; EaseOut[EaseOut["quint"] = "cubic-bezier(0.230, 1.000, 0.320, 1.000)"] = "quint"; EaseOut[EaseOut["sine"] = "cubic-bezier(0.390, 0.575, 0.565, 1.000)"] = "sine"; EaseOut[EaseOut["expo"] = "cubic-bezier(0.190, 1.000, 0.220, 1.000)"] = "expo"; EaseOut[EaseOut["circ"] = "cubic-bezier(0.075, 0.820, 0.165, 1.000)"] = "circ"; EaseOut[EaseOut["back"] = "cubic-bezier(0.175, 0.885, 0.320, 1.275)"] = "back"; })(EaseOut || (EaseOut = {})); var EaseInOut; (function (EaseInOut) { EaseInOut[EaseInOut["quad"] = "cubic-bezier(0.455, 0.030, 0.515, 0.955)"] = "quad"; EaseInOut[EaseInOut["cubic"] = "cubic-bezier(0.645, 0.045, 0.355, 1.000)"] = "cubic"; EaseInOut[EaseInOut["quart"] = "cubic-bezier(0.770, 0.000, 0.175, 1.000)"] = "quart"; EaseInOut[EaseInOut["quint"] = "cubic-bezier(0.860, 0.000, 0.070, 1.000)"] = "quint"; EaseInOut[EaseInOut["sine"] = "cubic-bezier(0.445, 0.050, 0.550, 0.950)"] = "sine"; EaseInOut[EaseInOut["expo"] = "cubic-bezier(1.000, 0.000, 0.000, 1.000)"] = "expo"; EaseInOut[EaseInOut["circ"] = "cubic-bezier(0.785, 0.135, 0.150, 0.860)"] = "circ"; EaseInOut[EaseInOut["back"] = "cubic-bezier(0.680, -0.550, 0.265, 1.550)"] = "back"; })(EaseInOut || (EaseInOut = {})); var base = [ style({ opacity: "{{startOpacity}}" }), animate("{{duration}} {{delay}} {{easing}}", style({ opacity: "{{endOpacity}}" })) ]; var baseParams = { delay: '0s', duration: '350ms', easing: EaseOut.sine, endOpacity: 1, startOpacity: 0 }; var fadeIn = animation(base, { params: baseParams }); var fadeOut = animation(base, { params: { delay: '0s', duration: '350ms', easing: EaseOut.sine, endOpacity: 0, startOpacity: 1 } }); var baseRecipe = [ style({ backfaceVisibility: 'hidden', transformStyle: 'preserve-3d' }), animate("{{duration}} {{delay}} {{easing}}", keyframes([ style({ offset: 0, transform: "translateZ({{startDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{startAngle}}deg)" }), style({ offset: 1, transform: "translateZ({{endDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{endAngle}}deg)" }) ])) ]; var baseParams$1 = { delay: '0s', duration: '600ms', easing: EaseOut.quad, endAngle: 180, endDistance: '0px', rotateX: 1, rotateY: 0, rotateZ: 0, startAngle: 0, startDistance: '0px' }; var flipTop = animation(baseRecipe, { params: __assign({}, baseParams$1) }); var flipBottom = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endAngle: -180 }) }); var flipLeft = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { rotateX: 0, rotateY: 1 }) }); var flipRight = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endAngle: -180, rotateX: 0, rotateY: 1 }) }); var flipHorFwd = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endDistance: '170px' }) }); var flipHorBck = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endDistance: '-170px' }) }); var flipVerFwd = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endDistance: '170px', rotateX: 0, rotateY: 1 }) }); var flipVerBck = animation(baseRecipe, { params: __assign(__assign({}, baseParams$1), { endDistance: '-170px', rotateX: 0, rotateY: 1 }) }); var baseRecipe$1 = [ style({ opacity: "{{startOpacity}}", transform: "rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{startAngle}}deg)", transformOrigin: "{{xPos}} {{yPos}}" }), animate("{{duration}} {{delay}} {{easing}}", style({ offset: 0, opacity: "{{endOpacity}}", transform: "rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{endAngle}}deg)", transformOrigin: "{{xPos}} {{yPos}}" })) ]; var baseInParams = { delay: '0s', duration: '600ms', easing: EaseOut.quad, endAngle: 0, endOpacity: 1, rotateX: 0, rotateY: 0, rotateZ: 1, startAngle: -360, startOpacity: 0, xPos: 'center', yPos: 'center' }; var baseOutParams = __assign(__assign({}, baseInParams), { easing: EaseIn.quad, endOpacity: 0, startOpacity: 1 }); var rotateInCenter = animation(baseRecipe$1, { params: __assign({}, baseInParams) }); var rotateOutCenter = animation(baseRecipe$1, { params: __assign({}, baseOutParams) }); var rotateInTop = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'top' }) }); var rotateOutTop = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'top' }) }); var rotateInRight = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'right' }) }); var rotateOutRight = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'right' }) }); var rotateInBottom = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'bottom' }) }); var rotateOutBottom = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'bottom' }) }); var rotateInLeft = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'left' }) }); var rotateOutLeft = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'left' }) }); var rotateInTr = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'right', yPos: 'top' }) }); var rotateOutTr = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'right', yPos: 'top' }) }); var rotateInBr = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'right', yPos: 'bottom' }) }); var rotateOutBr = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'right', yPos: 'bottom' }) }); var rotateInBl = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'left', yPos: 'bottom' }) }); var rotateOutBl = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'left', yPos: 'bottom' }) }); var rotateInTl = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { xPos: 'left', yPos: 'top' }) }); var rotateOutTl = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { xPos: 'left', yPos: 'top' }) }); var rotateInDiagonal1 = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { rotateX: 1, rotateY: 1, rotateZ: 0 }) }); var rotateOutDiagonal1 = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { rotateX: 1, rotateY: 1, rotateZ: 0 }) }); var rotateInDiagonal2 = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { rotateX: -1, rotateY: 1, rotateZ: 0 }) }); var rotateOutDiagonal2 = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { rotateX: -1, rotateY: 1, rotateZ: 0 }) }); var rotateInHor = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { rotateX: 0, rotateY: 1, rotateZ: 0 }) }); var rotateOutHor = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { rotateX: 0, rotateY: 1, rotateZ: 0 }) }); var rotateInVer = animation(baseRecipe$1, { params: __assign(__assign({}, baseInParams), { rotateX: 1, rotateY: 0, rotateZ: 0 }) }); var rotateOutVer = animation(baseRecipe$1, { params: __assign(__assign({}, baseOutParams), { rotateX: 1, rotateY: 0, rotateZ: 0 }) }); var baseRecipe$2 = [ animate("{{duration}} {{delay}} {{easing}}", keyframes([ style({ offset: 0, transform: "rotate(0deg) translate{{direction}}(0)", transformOrigin: "{{xPos}} {{yPos}}" }), style({ offset: 0.1, transform: "rotate({{endAngle}}deg) translate{{direction}}(-{{startDistance}})" }), style({ offset: 0.2, transform: "rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})" }), style({ offset: 0.3, transform: "rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})" }), style({ offset: 0.4, transform: "rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})" }), style({ offset: 0.5, transform: "rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})" }), style({ offset: 0.6, transform: "rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})" }), style({ offset: 0.7, transform: "rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})" }), style({ offset: 0.8, transform: "rotate(-{{endAngle}}deg) translate{{direction}}({{endDistance}})" }), style({ offset: 0.9, transform: "rotate({{endAngle}}deg) translate{{direction}}(-{{endDistance}})" }), style({ offset: 1, transform: "rotate(0deg) translate{{direction}}(0)", transformOrigin: "{{xPos}} {{yPos}}" }) ])) ]; var baseParams$2 = { delay: '0s', direction: 'X', duration: '800ms', easing: EaseInOut.quad, endAngle: 0, endDistance: '8px', startAngle: 0, startDistance: '10px', xPos: 'center', yPos: 'center' }; var shakeHor = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'X' }) }); var shakeVer = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y' }) }); var shakeTop = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', yPos: 'top' }) }); var shakeBottom = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', yPos: 'bottom' }) }); var shakeRight = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'center' }) }); var shakeLeft = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'center' }) }); var shakeCenter = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 8, endDistance: '0', startAngle: 10, startDistance: '0', xPos: 'center', yPos: 'center' }) }); var shakeTr = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'top' }) }); var shakeBr = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'right', yPos: 'bottom' }) }); var shakeBl = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'bottom' }) }); var shakeTl = animation(baseRecipe$2, { params: __assign(__assign({}, baseParams$2), { direction: 'Y', endAngle: 2, endDistance: '0', startAngle: 4, startDistance: '0', xPos: 'left', yPos: 'top' }) }); var heartbeatBase = [ style({ animationTimingFunction: "ease-out", transform: "scale(1)", transformOrigin: "center center" }), animate("{{duration}} {{delay}} {{easing}}", keyframes([ style({ animationTimingFunction: "ease-in", offset: 0.1, transform: "scale(0.91)" }), style({ animationTimingFunction: "ease-out", offset: 0.17, transform: "scale(0.98)" }), style({ animationTimingFunction: "ease-in", offset: 0.33, transform: "scale(0.87)" }), style({ animationTimingFunction: "ease-out", offset: 0.45, transform: "scale(1)" }) ])) ]; var heartbeatParams = { delay: '0s', duration: '1.5s', easing: 'ease-in-out' }; var pulsateBase = [ animate("{{duration}} {{delay}} {{easing}}", keyframes([ style({ offset: 0, transform: "scale({{fromScale}})" }), style({ offset: 0.5, transform: "scale({{toScale}})" }), style({ offset: 1, transform: "scale({{fromScale}})" }) ])) ]; var pulsateParams = { delay: '0s', duration: '.5s', easing: 'ease-in-out', fromScale: 1, toScale: 1.1 }; var blinkBase = [ animate("{{duration}} {{delay}} {{easing}}", keyframes([ style({ offset: 0, opacity: .8, transform: "scale({{fromScale}})" }), style({ offset: 0.8, opacity: 0, transform: "scale({{midScale}})" }), style({ offset: 1, opacity: 0, transform: "scale({{toScale}})" }) ])) ]; var blinkParams = { delay: '0s', duration: '.8s', easing: 'ease-in-out', fromScale: .2, midScale: 1.2, toScale: 2.2 }; var pulsateFwd = animation(pulsateBase, { params: __assign({}, pulsateParams) }); var pulsateBck = animation(pulsateBase, { params: __assign(__assign({}, pulsateParams), { toScale: .9 }) }); var heartbeat = animation(heartbeatBase, { params: __assign({}, heartbeatParams) }); var blink = animation(blinkBase, { params: __assign({}, blinkParams) }); var base$1 = [ style({ opacity: "{{startOpacity}}", transform: "scale{{direction}}({{fromScale}})", transformOrigin: "{{xPos}} {{yPos}}" }), animate("{{duration}} {{delay}} {{easing}}", style({ opacity: "{{endOpacity}}", transform: "scale{{direction}}({{toScale}})", transformOrigin: "{{xPos}} {{yPos}}" })) ]; var baseInParams$1 = { delay: '0s', direction: '', duration: '350ms', easing: EaseOut.quad, endOpacity: 1, fromScale: .5, startOpacity: 0, toScale: 1, xPos: '50%', yPos: '50%' }; var baseOutParams$1 = __assign(__assign({}, baseInParams$1), { easing: EaseOut.sine, endOpacity: 0, fromScale: 1, startOpacity: 1, toScale: .5 }); var scaleInCenter = animation(base$1, { params: baseInParams$1 }); var scaleInBl = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '0', yPos: '100%' }) }); var scaleInVerCenter = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'Y', fromScale: .4 }) }); var scaleInTop = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '50%', yPos: '0' }) }); var scaleInLeft = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '0', yPos: '50%' }) }); var scaleInVerTop = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'Y', fromScale: .4, xPos: '100%', yPos: '0' }) }); var scaleInTr = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '100%', yPos: '0' }) }); var scaleInTl = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '0', yPos: '0' }) }); var scaleInVerBottom = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'Y', fromScale: .4, xPos: '0', yPos: '100%' }) }); var scaleInRight = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '100%', yPos: '50%' }) }); var scaleInHorCenter = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'X', fromScale: .4 }) }); var scaleInBr = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '100%', yPos: '100%' }) }); var scaleInHorLeft = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'X', fromScale: .4, xPos: '0', yPos: '0' }) }); var scaleInBottom = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { xPos: '50%', yPos: '100%' }) }); var scaleInHorRight = animation(base$1, { params: __assign(__assign({}, baseInParams$1), { direction: 'X', fromScale: .4, xPos: '100%', yPos: '100%' }) }); var scaleOutCenter = animation(base$1, { params: baseOutParams$1 }); var scaleOutBl = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '0', yPos: '100%' }) }); var scaleOutBr = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '100%', yPos: '100%' }) }); var scaleOutVerCenter = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'Y', toScale: .3 }) }); var scaleOutVerTop = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'Y', toScale: .3, xPos: '100%', yPos: '0' }) }); var scaleOutVerBottom = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'Y', toScale: .3, xPos: '0', yPos: '100%' }) }); var scaleOutTop = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '50%', yPos: '0' }) }); var scaleOutLeft = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '0', yPos: '50%' }) }); var scaleOutTr = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '100%', yPos: '0' }) }); var scaleOutTl = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '0', yPos: '0' }) }); var scaleOutRight = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '100%', yPos: '50%' }) }); var scaleOutBottom = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { xPos: '50%', yPos: '100%' }) }); var scaleOutHorCenter = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'X', toScale: .3 }) }); var scaleOutHorLeft = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'X', toScale: .3, xPos: '0', yPos: '0' }) }); var scaleOutHorRight = animation(base$1, { params: __assign(__assign({}, baseOutParams$1), { direction: 'X', toScale: .3, xPos: '100%', yPos: '100%' }) }); var base$2 = [ style({ opacity: "{{startOpacity}}", transform: "{{fromPosition}}" }), animate("{{duration}} {{delay}} {{easing}}", style({ opacity: "{{endOpacity}}", transform: "{{toPosition}}" })) ]; var baseInParams$2 = { delay: '0s', duration: '350ms', easing: EaseOut.quad, endOpacity: 1, fromPosition: 'translateY(-500px)', startOpacity: 0, toPosition: 'translateY(0)' }; var baseOutParams$2 = { delay: '0s', duration: '350ms', easing: EaseIn.quad, endOpacity: 0, fromPosition: 'translateY(0)', startOpacity: 1, toPosition: 'translateY(-500px)' }; var slideInTop = animation(base$2, { params: baseInParams$2 }); var slideInLeft = animation(base$2, { params: { delay: '0s', duration: '350ms', easing: EaseOut.quad, endOpacity: 1, fromPosition: 'translateX(-500px)', startOpacity: 0, toPosition: 'translateY(0)' } }); var slideInRight = animation(base$2, { params: { delay: '0s', duration: '350ms', easing: EaseOut.quad, endOpacity: 1, fromPosition: 'translateX(500px)', startOpacity: 0, toPosition: 'translateY(0)' } }); var slideInBottom = animation(base$2, { params: { delay: '0s', duration: '350ms', easing: EaseOut.quad, endOpacity: 1, fromPosition: 'translateY(500px)', startOpacity: 0, toPosition: 'translateY(0)' } }); var slideInTr = animation(base$2, { params: __assign(__assign({}, baseInParams$2), { fromPosition: 'translateY(-500px) translateX(500px)', toPosition: 'translateY(0) translateX(0)' }) }); var slideInTl = animation(base$2, { params: __assign(__assign({}, baseInParams$2), { fromPosition: 'translateY(-500px) translateX(-500px)', toPosition: 'translateY(0) translateX(0)' }) }); var slideInBr = animation(base$2, { params: __assign(__assign({}, baseInParams$2), { fromPosition: 'translateY(500px) translateX(500px)', toPosition: 'translateY(0) translateX(0)' }) }); var slideInBl = animation(base$2, { params: __assign(__assign({}, baseInParams$2), { fromPosition: 'translateY(500px) translateX(-500px)', toPosition: 'translateY(0) translateX(0)' }) }); var slideOutTop = animation(base$2, { params: baseOutParams$2 }); var slideOutRight = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { toPosition: 'translateX(500px)' }) }); var slideOutBottom = animation(base$2, { params: { delay: '0s', duration: '350ms', easing: EaseIn.quad, endOpacity: 0, fromPosition: 'translateY(0)', startOpacity: 1, toPosition: 'translateY(500px)' } }); var slideOutLeft = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { toPosition: 'translateX(-500px)' }) }); var slideOutTr = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(-500px) translateX(500px)' }) }); var slideOutBr = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(500px) translateX(500px)' }) }); var slideOutBl = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(500px) translateX(-500px)' }) }); var slideOutTl = animation(base$2, { params: __assign(__assign({}, baseOutParams$2), { fromPosition: 'translateY(0) translateX(0)', toPosition: 'translateY(-500px) translateX(-500px)' }) }); var swingBase = [ style({ opacity: "{{startOpacity}}", transform: "rotate{{direction}}({{startAngle}}deg)", transformOrigin: "{{xPos}} {{yPos}}" }), animate("{{duration}} {{delay}} {{easing}}", style({ opacity: "{{endOpacity}}", transform: "rotate{{direction}}({{endAngle}}deg)", transformOrigin: "{{xPos}} {{yPos}}" })) ]; var swingParams = { delay: '0s', direction: 'X', duration: '.5s', easing: EaseOut.back, endAngle: 0, endOpacity: 1, startAngle: -100, startOpacity: 0, xPos: 'top', yPos: 'center' }; var swingOutParams = __assign(__assign({}, swingParams), { duration: '.55s', easing: EaseIn.back, endAngle: 70, endOpacity: 0, startAngle: 0, startOpacity: 1 }); var swingInTopFwd = animation(swingBase, { params: __assign({}, swingParams) }); var swingInRightFwd = animation(swingBase, { params: __assign(__assign({}, swingParams), { direction: 'Y', xPos: 'center', yPos: 'right' }) }); var swingInBottomFwd = animation(swingBase, { params: __assign(__assign({}, swingParams), { startAngle: 100, xPos: 'bottom' }) }); var swingInLeftFwd = animation(swingBase, { params: __assign(__assign({}, swingParams), { direction: 'Y', startAngle: 100, xPos: 'center', yPos: 'left' }) }); var swingInTopBck = animation(swingBase, { params: __assign(__assign({}, swingParams), { duration: '.6s', startAngle: 70 }) }); var swingInRightBck = animation(swingBase, { params: __assign(__assign({}, swingParams), { direction: 'Y', duration: '.6s', startAngle: 70, xPos: 'center', yPos: 'right' }) }); var swingInBottomBck = animation(swingBase, { params: __assign(__assign({}, swingParams), { duration: '.6s', startAngle: -70, xPos: 'bottom' }) }); var swingInLeftBck = animation(swingBase, { params: __assign(__assign({}, swingParams), { direction: 'Y', duration: '.6s', startAngle: -70, xPos: 'center', yPos: 'left' }) }); var swingOutTopFwd = animation(swingBase, { params: __assign({}, swingOutParams) }); var swingOutRightFwd = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { direction: 'Y', xPos: 'center', yPos: 'right' }) }); var swingOutBottomFwd = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { endAngle: -70, xPos: 'bottom' }) }); var swingOutLefttFwd = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { direction: 'Y', endAngle: -70, xPos: 'center', yPos: 'left' }) }); var swingOutTopBck = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { duration: '.45s', endAngle: -100 }) }); var swingOutRightBck = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { direction: 'Y', duration: '.45s', endAngle: -100, xPos: 'center', yPos: 'right' }) }); var swingOutBottomBck = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { duration: '.45s', endAngle: 100, xPos: 'bottom' }) }); var swingOutLeftBck = animation(swingBase, { params: __assign(__assign({}, swingOutParams), { direction: 'Y', duration: '.45s', endAngle: 100, xPos: 'center', yPos: 'left' }) }); var base$3 = [ style({ opacity: "{{ startOpacity }}", height: "{{ startHeight }}" }), animate("{{duration}} {{delay}} {{easing}}", style({ opacity: "{{ endOpacity }}", height: "{{ endHeight }}" })) ]; var baseParams$3 = { delay: '0s', duration: '350ms', easing: EaseIn.quad, startOpacity: 0, endOpacity: 1, startHeight: '', endHeight: '' }; var growVerIn = animation(base$3, { params: __assign(__assign({}, baseParams$3), { easing: EaseOut.quad, startOpacity: 0, endOpacity: 1, startHeight: '0px', endHeight: '*' }) }); var growVerOut = animation(base$3, { params: __assign(__assign({}, baseParams$3), { easing: EaseOut.quad, startOpacity: 1, endOpacity: 0, startHeight: '*', endHeight: '0px' }) }); /** * Common service to be injected between components where those implementing common * ToggleView interface can register and toggle directives can call their methods. * TODO: Track currently active? Events? */ var IgxNavigationService = /** @class */ (function () { function IgxNavigationService() { this.navs = {}; } IgxNavigationService.prototype.add = function (id, navItem) { this.navs[id] = navItem; }; IgxNavigationService.prototype.remove = function (id) { delete this.navs[id]; }; IgxNavigationService.prototype.get = function (id) { if (id) { return this.navs[id]; } }; IgxNavigationService.prototype.toggle = function (id) { var _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } if (this.navs[id]) { return (_a = this.navs[id]).toggle.apply(_a, __spread(args)); } }; IgxNavigationService.prototype.open = function (id) { var _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } if (this.navs[id]) { return (_a = this.navs[id]).open.apply(_a, __spread(args)); } }; IgxNavigationService.prototype.close = function (id) { var _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } if (this.navs[id]) { return (_a = this.navs[id]).close.apply(_a, __spread(args)); } }; IgxNavigationService = __decorate([ Injectable(), __metadata("design:paramtypes", []) ], IgxNavigationService); return IgxNavigationService; }()); /** * Directive that can toggle targets through provided NavigationService. * * Usage: * ``` * <button igxNavToggle="ID"> Toggle </button> * ``` * Where the `ID` matches the ID of compatible `IToggleView` component. */ var IgxNavigationToggleDirective = /** @class */ (function () { function IgxNavigationToggleDirective(nav) { this.state = nav; } IgxNavigationToggleDirective.prototype.toggleNavigationDrawer = function () { this.state.toggle(this.target, true); }; IgxNavigationToggleDirective.ctorParameters = function () { return [ { type: IgxNavigationService } ]; }; __decorate([ Input('igxNavToggle'), __metadata("design:type", Object) ], IgxNavigationToggleDirective.prototype, "target", void 0); __decorate([ HostListener('click'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxNavigationToggleDirective.prototype, "toggleNavigationDrawer", null); IgxNavigationToggleDirective = __decorate([ Directive({ selector: '[igxNavToggle]' }), __metadata("design:paramtypes", [IgxNavigationService]) ], IgxNavigationToggleDirective); return IgxNavigationToggleDirective; }()); /** * Directive that can close targets through provided NavigationService. * * Usage: * ``` * <button igxNavClose="ID"> Close </button> * ``` * Where the `ID` matches the ID of compatible `IToggleView` component. */ var IgxNavigationCloseDirective = /** @class */ (function () { function IgxNavigationCloseDirective(nav) { this.state = nav; } IgxNavigationCloseDirective.prototype.closeNavigationDrawer = function () { this.state.close(this.target, true); }; IgxNavigationCloseDirective.ctorParameters = function () { return [ { type: IgxNavigationService } ]; }; __decorate([ Input('igxNavClose'), __metadata("design:type", Object) ], IgxNavigationCloseDirective.prototype, "target", void 0); __decorate([ HostListener('click'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxNavigationCloseDirective.prototype, "closeNavigationDrawer", null); IgxNavigationCloseDirective = __decorate([ Directive({ selector: '[igxNavClose]' }), __metadata("design:paramtypes", [IgxNavigationService]) ], IgxNavigationCloseDirective); return IgxNavigationCloseDirective; }()); /** * @hidden */ var IgxNavigationModule = /** @class */ (function () { function IgxNavigationModule() { } IgxNavigationModule = __decorate([ NgModule({ declarations: [IgxNavigationCloseDirective, IgxNavigationToggleDirective], exports: [IgxNavigationCloseDirective, IgxNavigationToggleDirective], providers: [IgxNavigationService] }) ], IgxNavigationModule); return IgxNavigationModule; }()); /** *@hidden */ function cloneArray(array, deep) { var arr = []; if (!array) { return arr; } var i = array.length; while (i--) { arr[i] = deep ? cloneValue(array[i]) : array[i]; } return arr; } /** * Doesn't clone leaf items * @hidden */ function cloneHierarchicalArray(array, childDataKey) { var e_1, _a; var result = []; if (!array) { return result; } try { for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) { var item = array_1_1.value; var clonedItem = cloneValue(item); if (Array.isArray(item[childDataKey])) { clonedItem[childDataKey] = cloneHierarchicalArray(clonedItem[childDataKey], childDataKey); } result.push(clonedItem); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1); } finally { if (e_1) throw e_1.error; } } return result; } /** * Deep clones all first level keys of Obj2 and merges them to Obj1 * @param obj1 Object to merge into * @param obj2 Object to merge from * @returns Obj1 with merged cloned keys from Obj2 * @hidden */ function mergeObjects(obj1, obj2) { var e_2, _a; if (!isObject(obj1)) { throw new Error("Cannot merge into " + obj1 + ". First param must be an object."); } if (!isObject(obj2)) { return obj1; } try { for (var _b = __values(Object.keys(obj2)), _c = _b.next(); !_c.done; _c = _b.next()) { var key = _c.value; obj1[key] = cloneValue(obj2[key]); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } return obj1; } /** * Creates deep clone of provided value. * Supports primitive values, dates and objects. * If passed value is array returns shallow copy of the array. * @param value value to clone * @returns Deep copy of provided value *@hidden */ function cloneValue(value) { var e_3, _a; if (isDate(value)) { return new Date(value.getTime()); } if (Array.isArray(value)) { return __spread(value); } if (value instanceof Map || value instanceof Set) { return value; } if (isObject(value)) { var result = {}; try { for (var _b = __values(Object.keys(value)), _c = _b.next(); !_c.done; _c = _b.next()) { var key = _c.value; result[key] = cloneValue(value[key]); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_3) throw e_3.error; } } return result; } return value; } /** * Checks if provided variable is Object * @param value Value to check * @returns true if provided variable is Object *@hidden */ function isObject(value) { return value && value.toString() === '[object Object]'; } /** * Checks if provided variable is Date * @param value Value to check * @returns true if provided variable is Date *@hidden */ function isDate(value) { return Object.prototype.toString.call(value) === '[object Date]'; } /** * Checks if the two passed arguments are equal * Currently supports date objects * @param obj1 * @param obj2 * @returns: `boolean` * @hidden */ function isEqual(obj1, obj2) { if (isDate(obj1) && isDate(obj2)) { return obj1.getTime() === obj2.getTime(); } return obj1 === obj2; } /** *@hidden * Returns the actual size of the node content, using Range * ```typescript * let range = document.createRange(); * let column = this.grid.columnList.filter(c => c.field === 'ID')[0]; * * let size = getNodeSizeViaRange(range, column.cells[0].nativeElement); * ``` */ function getNodeSizeViaRange(range, node) { var overflow = null; if (!isFirefox()) { overflow = node.style.overflow; // we need that hack - otherwise content won't be measured correctly in IE/Edge node.style.overflow = 'visible'; } range.selectNodeContents(node); var width = range.getBoundingClientRect().width; if (!isFirefox()) { // we need that hack - otherwise content won't be measured correctly in IE/Edge node.style.overflow = overflow; } return width; } /** *@hidden * Returns the actual size of the node content, using Canvas * ```typescript * let ctx = document.createElement('canvas').getContext('2d'); * let column = this.grid.columnList.filter(c => c.field === 'ID')[0]; * * let size = valToPxlsUsingCanvas(ctx, column.cells[0].nativeElement); * ``` */ function getNodeSizeViaCanvas(canvas2dCtx, node) { var s = this.grid.document.defaultView.getComputedStyle(node); // need to set the font to get correct width canvas2dCtx.font = s.fontSize + ' ' + s.fontFamily; return canvas2dCtx.measureText(node.textContent).width; } /** *@hidden */ function isIE() { return navigator.appVersion.indexOf('Trident/') > 0; } /** *@hidden */ function isEdge() { var edgeBrowser = /Edge[\/\s](\d+\.\d+)/.test(navigator.userAgent); return edgeBrowser; } /** *@hidden */ function isFirefox() { var firefoxBrowser = /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent); return firefoxBrowser; } /** * @hidden */ var PlatformUtil = /** @class */ (function () { function PlatformUtil(platformId) { this.platformId = platformId; this.isBrowser = isPlatformBrowser(this.platformId); this.isIOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window); } PlatformUtil.ctorParameters = function () { return [ { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] } ]; }; PlatformUtil.ɵprov = ɵɵdefineInjectable({ factory: function PlatformUtil_Factory() { return new PlatformUtil(ɵɵinject(PLATFORM_ID)); }, token: PlatformUtil, providedIn: "root" }); PlatformUtil = __decorate([ Injectable({ providedIn: 'root' }), __param(0, Inject(PLATFORM_ID)), __metadata("design:paramtypes", [Object]) ], PlatformUtil); return PlatformUtil; }()); /** * @hidden */ function isLeftClick(event) { return event.button === 0; } /** @hidden */ function isNavigationKey(key) { return [ 'down', 'up', 'left', 'right', 'arrowdown', 'arrowup', 'arrowleft', 'arrowright', 'home', 'end', 'space', 'spacebar', ' ' ].indexOf(key) !== -1; } /** *@hidden */ function flatten(arr) { var result = []; arr.forEach(function (el) { result.push(el); if (el.children) { var children = Array.isArray(el.children) ? el.children : el.children.toArray(); result = result.concat(flatten(children)); } }); return result; } var NAVIGATION_KEYS = new Set([ 'down', 'up', 'left', 'right', 'arrowdown', 'arrowup', 'arrowleft', 'arrowright', 'home', 'end', 'space', 'spacebar', ' ' ]); var ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' ')); var ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' ')); var SUPPORTED_KEYS = new Set(__spread(Array.from(NAVIGATION_KEYS), ['tab', 'enter', 'f2', 'escape', 'esc'])); /** * @hidden * @internal * * Creates a new ResizeObserver on `target` and returns it as an Observable. */ function resizeObservable(target) { return new Observable(function (observer) { var instance = new ResizeObserver(function (entries) { observer.next(entries); }); instance.observe(target); var unsubscribe = function () { return instance.disconnect(); }; return unsubscribe; }); } /** * Represents sorting expressions. */ var SortingDirection; (function (SortingDirection) { SortingDirection[SortingDirection["None"] = 0] = "None"; SortingDirection[SortingDirection["Asc"] = 1] = "Asc"; SortingDirection[SortingDirection["Desc"] = 2] = "Desc"; })(SortingDirection || (SortingDirection = {})); function isHierarchyMatch(h1, h2) { if (h1.length !== h2.length) { return false; } return h1.every(function (level, index) { return level.fieldName === h2[index].fieldName && level.value === h2[index].value; }); } function getHierarchy(gRow) { var hierarchy = []; if (gRow !== undefined && gRow.expression) { hierarchy.push({ fieldName: gRow.expression.fieldName, value: gRow.value }); while (gRow.groupParent) { gRow = gRow.groupParent; hierarchy.unshift({ fieldName: gRow.expression.fieldName, value: gRow.value }); } } return hierarchy; } var DefaultSortingStrategy = /** @class */ (function () { function DefaultSortingStrategy() { } DefaultSortingStrategy.instance = function () { return this._instance || (this._instance = new this()); }; DefaultSortingStrategy.prototype.sort = function (data, fieldName, dir, ignoreCase, valueResolver) { var _this = this; var key = fieldName; var reverse = (dir === SortingDirection.Desc ? -1 : 1); var cmpFunc = function (obj1, obj2) { return _this.compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver); }; return this.arraySort(data, cmpFunc); }; DefaultSortingStrategy.prototype.compareValues = function (a, b) { var an = (a === null || a === undefined); var bn = (b === null || b === undefined); if (an) { if (bn) { return 0; } return -1; } else if (bn) { return 1; } return a > b ? 1 : a < b ? -1 : 0; }; DefaultSortingStrategy.prototype.compareObjects = function (obj1, obj2, key, reverse, ignoreCase, valueResolver) { var a = valueResolver(obj1, key); var b = valueResolver(obj2, key); if (ignoreCase) { a = a && a.toLowerCase ? a.toLowerCase() : a; b = b && b.toLowerCase ? b.toLowerCase() : b; } return reverse * this.compareValues(a, b); }; DefaultSortingStrategy.prototype.arraySort = function (data, compareFn) { return data.sort(compareFn); }; DefaultSortingStrategy._instance = null; return DefaultSortingStrategy; }()); var NoopSortingStrategy = /** @class */ (function () { function NoopSortingStrategy() { } NoopSortingStrategy.instance = function () { return this._instance || (this._instance = new NoopSortingStrategy()); }; NoopSortingStrategy.prototype.sort = function (data, expressions) { return data; }; NoopSortingStrategy._instance = null; return NoopSortingStrategy; }()); var IgxSorting = /** @class */ (function () { function IgxSorting() { } IgxSorting.prototype.sort = function (data, expressions) { return this.sortDataRecursive(data, expressions); }; IgxSorting.prototype.groupedRecordsByExpression = function (data, index, expression) { var i; var groupval; var res = []; var key = expression.fieldName; var len = data.length; res.push(data[index]); groupval = this.getFieldValue(data[index], key); index++; var comparer = expression.groupingComparer || DefaultSortingStrategy.instance().compareValues; for (i = index; i < len; i++) { if (comparer(this.getFieldValue(data[i], key), groupval) === 0) { res.push(data[i]); } else { break; } } return res; }; IgxSorting.prototype.sortDataRecursive = function (data, expressions, expressionIndex) { if (expressionIndex === void 0) { expressionIndex = 0; } var i; var j; var expr; var gbData; var gbDataLen; var exprsLen = expressions.length; var dataLen = data.length; expressionIndex = expressionIndex || 0; if (expressionIndex >= exprsLen || dataLen <= 1) { return data; } expr = expressions[expressionIndex]; if (!expr.strategy) { expr.strategy = DefaultSortingStrategy.instance(); } data = expr.strategy.sort(data, expr.fieldName, expr.dir, expr.ignoreCase, this.getFieldValue); if (expressionIndex === exprsLen - 1) { return data; } // in case of multiple sorting for (i = 0; i < dataLen; i++) { gbData = this.groupedRecordsByExpression(data, i, expr); gbDataLen = gbData.length; if (gbDataLen > 1) { gbData = this.sortDataRecursive(gbData, expressions, expressionIndex + 1); } for (j = 0; j < gbDataLen; j++) { data[i + j] = gbData[j]; } i += gbDataLen - 1; } return data; }; IgxSorting.prototype.groupDataRecursive = function (data, state, level, parent, metadata, grid, groupsRecords, fullResult) { if (grid === void 0) { grid = null; } if (groupsRecords === void 0) { groupsRecords = []; } if (fullResult === void 0) { fullResult = { data: [], metadata: [] }; } var expressions = state.expressions; var expansion = state.expansion; var i = 0; var result = []; var _loop_1 = function () { var e_1, _a; var group = this_1.groupedRecordsByExpression(data, i, expressions[level]); var groupRow = { expression: expressions[level], level: level, records: cloneArray(group), value: group[0][expressions[level].fieldName], groupParent: parent, groups: [], height: grid ? grid.renderedRowHeight : null }; if (parent) { parent.groups.push(groupRow); } else { groupsRecords.push(groupRow); } var hierarchy = getHierarchy(groupRow); var expandState = expansion.find(function (s) { return isHierarchyMatch(s.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }], hierarchy); }); var expanded = expandState ? expandState.expanded : state.defaultExpanded; var recursiveResult = void 0; result.push(groupRow); metadata.push(null); fullResult.data.push(groupRow); fullResult.metadata.push(null); if (level < expressions.length - 1) { recursiveResult = this_1.groupDataRecursive(group, state, level + 1, groupRow, expanded ? metadata : [], grid, groupsRecords, fullResult); if (expanded) { result = result.concat(recursiveResult); } } else { try { for (var group_1 = (e_1 = void 0, __values(group)), group_1_1 = group_1.next(); !group_1_1.done; group_1_1 = group_1.next()) { var groupItem = group_1_1.value; fullResult.metadata.push(groupRow); fullResult.data.push(groupItem); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (group_1_1 && !group_1_1.done && (_a = group_1.return)) _a.call(group_1); } finally { if (e_1) throw e_1.error; } } if (expanded) { metadata.push.apply(metadata, __spread(fullResult.metadata.slice(fullResult.metadata.length - group