����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 3.135.220.9 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/www/public/client/ |
Upload File : |
{"version":3,"sources":["src/common/core/ui/color-picker/colorpicker-panel.component.ts","src/common/core/ui/color-picker/colorpicker-panel.component.html","node_modules/rxjs/_esm2015/internal/observable/interval.js","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/slider.js","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js","src/app/html-builder/undo-manager/undo-command.ts","src/app/html-builder/undo-manager/undo-commands-list.ts","src/app/html-builder/undo-manager/undo-manager.service.ts","src/app/html-builder/live-preview/active-element.ts","src/app/html-builder/live-preview/context-boxes.service.ts","src/app/html-builder/live-preview/selected-element.service.ts","src/app/html-builder/builder-document-actions.service.ts","src/app/html-builder/main-loader/main-loader.service.ts","src/app/html-builder/builder-document.service.ts","src/app/html-builder/projects/active-project.ts","src/app/html-builder/live-preview/code-editor/ace-themes.ts","src/app/html-builder/live-preview/code-editor/code-editor.component.html","src/app/html-builder/live-preview/code-editor/code-editor.component.ts","src/app/html-builder/live-preview/code-editor/code-editor.service.ts","src/app/html-builder/text-style-values.ts","src/app/html-builder/font-awesome-icons-list.ts","src/app/html-builder/live-preview/inline-text-editor/inline-text-editor.component.html","src/app/html-builder/live-preview/inline-text-editor/inline-text-editor.component.ts","src/app/html-builder/live-preview/inline-text-editor/inline-text-editor.service.ts","src/app/html-builder/live-preview/live-preview-context-menu/live-preview-context-menu.component.ts","src/app/html-builder/live-preview/live-preview-context-menu/live-preview-context-menu.component.html","src/common/core/keybinds/keycodes.enum.ts","src/common/core/keybinds/keybinds.service.ts","src/app/html-builder/live-preview/link-editor/link-editor.component.html","src/app/html-builder/live-preview/link-editor/link-editor.component.ts","src/app/html-builder/live-preview/link-editor/link-editor.service.ts","src/app/html-builder/live-preview.service.ts","src/app/html-builder/inspector/layout-panel/layout-panel.service.ts","src/app/html-builder/inspector/inspector-floating-panel.service.ts","src/app/html-builder/elements/elements-api.service.ts","src/app/html-builder/inspector/inspector-drawer.service.ts","src/app/html-builder/live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.service.ts","src/app/html-builder/inspector/inspector.service.ts","src/app/html-builder/live-preview/drag-and-drop/live-preview-scroller.ts","src/app/html-builder/live-preview/drag-and-drop/base-drag-and-drop.ts","src/app/html-builder/utils/cursor-in-top-half-of-node.ts","src/app/html-builder/live-preview/drag-and-drop/drag-elements.directive.ts","src/app/html-builder/inspector/elements-panel/elements-panel.component.html","src/app/html-builder/inspector/elements-panel/elements-panel.component.ts","src/app/html-builder/inspector/inspector-panel/attributes-panel/attributes-panel.component.html","src/app/html-builder/inspector/inspector-panel/attributes-panel/attributes-panel.component.ts","src/app/html-builder/gradient-values.ts","src/app/html-builder/inspector/inspector-panel/background-panel/gradient-background-panel/gradient-background-panel.component.html","src/app/html-builder/inspector/inspector-panel/background-panel/gradient-background-panel/gradient-background-panel.component.ts","src/app/html-builder/inspector/inspector-panel/background-panel/image-background-panel/image-background-panel.component.html","src/app/html-builder/inspector/inspector-panel/background-panel/image-background-panel/image-background-panel.component.ts","src/app/html-builder/inspector/inspector-panel/background-panel/background-panel.component.ts","src/app/html-builder/inspector/inspector-panel/background-panel/background-panel.component.html","src/app/html-builder/inspector/inspector-panel/shadows-panel/shadows-panel.component.html","src/app/html-builder/inspector/inspector-panel/shadows-panel/shadows-panel.component.ts","src/app/html-builder/inspector/inspector-panel/spacing-panel/side-control-border/side-control-border.component.ts","src/app/html-builder/inspector/inspector-panel/spacing-panel/side-control-border/side-control-border.component.html","src/app/html-builder/inspector/inspector-panel/spacing-panel/spacing-panel.component.ts","src/app/html-builder/inspector/inspector-panel/spacing-panel/spacing-panel.component.html","src/app/html-builder/inspector/inspector-panel/text-style-panel/google-fonts-panel/google-fonts-panel.component.html","src/app/html-builder/inspector/inspector-panel/text-style-panel/google-fonts-panel/google-fonts-panel.component.ts","src/app/html-builder/inspector/inspector-panel/text-style-panel/text-style-panel.component.html","src/app/html-builder/inspector/inspector-panel/text-style-panel/text-style-panel.component.ts","src/app/html-builder/inspector/inspector-panel/border-style-controls/border-style-controls.component.ts","src/app/html-builder/inspector/inspector-panel/border-style-controls/border-style-controls.component.html","src/app/html-builder/inspector/inspector-panel/inspector-panel.component.html","src/app/html-builder/inspector/inspector-panel/inspector-panel.component.ts","src/app/html-builder/inspector/layout-panel/column-presets/column-presets.component.html","src/app/html-builder/inspector/layout-panel/column-presets/column-presets.component.ts","src/app/html-builder/inspector/layout-panel/layout-panel.component.html","src/app/html-builder/inspector/layout-panel/layout-panel.component.ts","src/app/html-builder/inspector/pages-panel/pages-panel.component.html","src/app/html-builder/inspector/pages-panel/pages-panel.component.ts","src/app/html-builder/inspector/settings-panel/settings-panel.component.html","src/app/html-builder/inspector/settings-panel/settings-panel.component.ts","src/app/html-builder/inspector/device-switcher/device-switcher.component.html","src/app/html-builder/inspector/device-switcher/device-switcher.component.ts","src/app/html-builder/inspector/inspector.component.html","src/app/html-builder/inspector/inspector.component.ts","src/common/uploads/utils/download-file-from-url.ts","src/app/html-builder/live-preview/drag-and-drop/preview-drag-and-drop.directive.ts","src/app/html-builder/live-preview/drag-and-drop/element-resizer.directive.ts","src/app/html-builder/live-preview/context-box/context-box.component.ts","src/app/html-builder/live-preview/context-box/context-box.component.html","src/app/html-builder/live-preview/live-preview.component.ts","src/app/html-builder/live-preview/live-preview.component.html","src/app/html-builder/live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component.ts","src/app/html-builder/live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component.html","src/app/html-builder/main-loader/main-loader.component.ts","src/app/html-builder/main-loader/main-loader.component.html","src/app/html-builder/inspector/settings-panel/templates-panel/templates-panel.component.html","src/app/html-builder/inspector/settings-panel/templates-panel/templates-panel.component.ts","src/app/html-builder/themes.service.ts","src/app/html-builder/inspector/settings-panel/themes-panel/themes-panel.component.html","src/app/html-builder/inspector/settings-panel/themes-panel/themes-panel.component.ts","src/app/html-builder/html-builder/html-builder.component.html","src/app/html-builder/html-builder-routing.module.ts","src/app/html-builder/html-builder/html-builder.component.ts","src/app/html-builder/html-builder.module.ts","src/app/html-builder/elements/definitions/bootstrap.ts","src/app/html-builder/elements/definitions/base.ts","src/common/core/ui/skeleton/skeleton.component.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/radio.js","node_modules/ngx-color-picker/__ivy_ngcc__/fesm2015/ngx-color-picker.js","src/common/core/ui/overlay-panel/positions/right-position.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/sidenav.js","src/app/html-builder/elements/elements.service.ts","src/common/uploads/upload-queue/upload-queue-item.ts","src/common/uploads/validation/validations/allowed-extensions-validation.ts","src/common/uploads/validation/validations/blocked-extensions-validation.ts","src/common/uploads/validation/default-upload-validator.ts","src/common/uploads/upload-queue/upload-queue.service.ts","src/common/core/ui/skeleton/skeleton.module.ts","node_modules/html2canvas/dist/html2canvas.js"],"names":["ColorpickerPanelComponent","data","overlayPanelRef","this","color","getInitialColor","setTimeout","trigger","nativeElement","click","value","emitValue","replace","undefined","emitSelectedEvent","dispatch","state","subscriber","counter","period","next","schedule","extendStyles","dest","source","key","hasOwnProperty","toggleNativeDragInteractions","element","enable","userSelect","style","touchAction","webkitUserDrag","webkitTapHighlightColor","msUserSelect","webkitUserSelect","MozUserSelect","parseCssTimeUnitsToMs","multiplier","toLowerCase","indexOf","parseFloat","parseCssPropertyValue","computedStyle","name","getPropertyValue","split","map","part","trim","getMutableClientRect","clientRect","getBoundingClientRect","top","right","bottom","left","width","height","isInsideClientRect","x","y","adjustClientRect","isPointerNearClientRect","rect","threshold","pointerX","pointerY","xThreshold","yThreshold","ParentPositionTracker","_document","_viewportRuler","positions","Map","clear","elements","set","scrollPosition","getViewportScrollPosition","forEach","scrollTop","scrollLeft","event","target","cachedPosition","get","scrolledParentNode","documentElement","newTop","newLeft","viewportScrollPosition","topDifference","leftDifference","position","node","contains","deepCloneNode","clone","cloneNode","descendantsWithId","querySelectorAll","nodeName","removeAttribute","i","length","transferCanvasData","transferInputData","transferData","selector","callback","descendantElements","cloneElements","context","getContext","drawImage","_a","passiveEventListenerOptions","passive","activeEventListenerOptions","_config","_ngZone","_dragDropRegistry","_passiveTransform","_activeTransform","_moveEvents","Subject","_pointerMoveSubscription","Subscription","EMPTY","_pointerUpSubscription","_scrollSubscription","_resizeSubscription","_boundaryElement","_nativeInteractionsEnabled","_handles","_disabledHandles","Set","_direction","dragStartDelay","_disabled","beforeStarted","started","released","ended","entered","exited","dropped","moved","asObservable","_pointerDown","targetHandle","find","handle","has","disabled","_initializeDragSequence","_rootElement","_pointerMove","preventDefault","pointerPosition","_getPointerPositionOnPage","_hasStartedDragging","Math","abs","_pickupPositionOnPage","dragStartThreshold","Date","now","_dragStartTime","_getDragStartDelay","_endDragSequence","_dropContainer","isDragging","run","_startDragSequence","_previewRect","_preview","constrainedPointerPosition","_getConstrainedPointerPosition","_hasMoved","_lastKnownPointerPosition","_updatePointerDirectionDelta","_updateActiveDropContainer","activeTransform","_applyRootElementTransform","SVGElement","setAttribute","observers","distance","_getDragDistance","delta","_pointerDirectionDelta","_pointerUp","withRootElement","_parentPositions","registerDragItem","newValue","_toggleNativeDragInteractions","_placeholder","getPlaceholderElement","getRootElement","handles","template","_previewTemplate","_placeholderTemplate","rootElement","_removeRootElementListeners","runOutsideAngular","addEventListener","_initialTransform","_ownerSVGElement","ownerSVGElement","boundaryElement","unsubscribe","change","subscribe","_containInsideBoundaryOnResize","removeNode","_anchor","_destroyPreview","_destroyPlaceholder","removeDragItem","_removeSubscriptions","complete","transform","add","delete","direction","container","_previewRef","destroy","_placeholderRef","stopDragging","_rootElementTapHighlight","_stopScrolling","_animatePreviewToPlaceholder","then","_cleanupDragArtifacts","_cleanupCachedDimensions","isTouchEvent","_lastTouchEventTime","dropContainer","parent","parentNode","preview","_createPreviewElement","placeholder","_createPlaceholderElement","anchor","createComment","insertBefore","display","body","appendChild","replaceChild","documentRef","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","start","_initialContainer","_initialIndex","getItemIndex","cache","getScrollableParents","referenceElement","stopPropagation","isTouchSequence","isAuxiliaryMouseButton","button","isSyntheticEvent","draggable","type","pointerMove","pointerUp","scroll","scrollEvent","_updateOnScroll","_boundaryRect","previewTemplate","_pickupPositionInElement","matchSize","_getPointerPositionInElement","_pointerPositionAtLastDirectionChange","startDragging","currentIndex","isPointerOverContainer","_isOverContainer","item","previousIndex","previousContainer","drop","rawX","rawY","newContainer","_getSiblingContainerFromPosition","exit","enter","sortingDisabled","_startScrollingIfNecessary","_sortItem","getTransform","previewConfig","previewClass","rootRect","viewRef","viewContainer","createEmbeddedView","detectChanges","getRootNode","matchElementSize","pointerEvents","margin","zIndex","classList","Array","isArray","className","Promise","resolve","placeholderRect","duration","getComputedStyle","transitionedProperties","property","prop","propertyIndex","rawDurations","rawDelays","handler","propertyName","removeEventListener","clearTimeout","timeout","placeholderConfig","placeholderTemplate","elementRect","handleElement","referenceRect","point","targetTouches","_getViewportScrollPosition","pageX","pageY","touches","changedTouches","svgMatrix","getScreenCTM","svgPoint","createSVGPoint","matrixTransform","inverse","dropContainerLock","lockAxis","constrainPosition","pickupX","pickupY","boundaryRect","previewRect","minY","maxY","clamp","pointerPositionOnPage","positionSinceLastChange","changeX","changeY","pointerDirectionChangeThreshold","shouldEnable","currentPosition","pickupPosition","leftOverflow","rightOverflow","topOverflow","bottomOverflow","setFreeDragPosition","touch","mouse","scrollDifference","handleScroll","round","min","max","removeChild","rootNodes","nodeType","ELEMENT_NODE","wrapper","createElement","sourceRect","moveItemInArray","array","fromIndex","toIndex","from","clamp$1","to","autoScrollDisabled","enterPredicate","sorted","_isDragging","_itemPositions","_previousSwap","drag","overlaps","_siblings","_orientation","_activeSiblings","_viewportScrollSubscription","_verticalScrollDirection","_horizontalScrollDirection","_stopScrollTimers","_cachedShadowRoot","_startScrollInterval","scheduler","isNumeric","Observable","animationFrame","pipe","takeUntil","_scrollNode","incrementVerticalScroll","incrementHorizontalScroll","withScrollableParents","registerDropContainer","removeDropContainer","styles","_initialScrollSnap","msScrollSnapType","scrollSnapType","_cacheItems","sibling","_startReceiving","_listenToScrollEvents","index","newIndex","_draggables","_getItemIndexFromPointerPosition","activeDraggables","_activeDraggables","newPositionReference","splice","parentElement","_shouldEnterAsFirstChild","reference","unshift","push","_cacheItemPositions","_cacheParentPositions","_reset","items","previousItems","_withDropContainer","filter","every","connectedTo","slice","orientation","_scrollableElements","findIndex","reverse","currentItem","size","pointerDelta","_clientRect","siblings","isHorizontal","siblingAtNewPosition","newPosition","itemOffset","_getItemOffsetPx","siblingOffset","_getSiblingOffsetPx","oldOrder","isDraggedItem","offset","elementToOffset","scrollNode","verticalScrollDirection","horizontalScrollDirection","computedVertical","getVerticalScrollDirection","computedHorizontal","getHorizontalScrollDirection","scrollHeight","clientHeight","scrollWidth","clientWidth","getViewportSize","window","elementToMeasure","getVisibleElement","sort","a","b","_stopReceiving","immediateSibling","end","itemPositions","lastItemRect","firstItemRect","_","floor","_canReceive","elementFromPoint","_getShadowRoot","activeSiblings","_sortFromLastPointerPosition","isReceiving","shadowRoot","predicate","amount","scrollBy","activeCapturingEventOptions","capture","DragDropRegistry","_dropInstances","_dragInstances","_activeDragInstances","_globalListeners","_preventDefaultWhileDragging","startsWith","upEvent","e","options","config","_clearGlobalListeners","instance","ɵfac","t","ɵprov","factory","token","providedIn","DEFAULT_CONFIG","DragDrop","CDK_DROP_LIST_GROUP","CDK_DRAG_CONFIG","_uniqueIdCounter","CDK_DROP_LIST","CdkDropList","dragDrop","_changeDetectorRef","_dir","_group","_scrollDispatcher","_destroyed","id","_unsortedItems","_dropListRef","createDropList","_assignDefaults","_setupInputSyncSubscription","_handleEvents","_dropLists","_items","_syncItemsWithRef","_dragRef","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","dispose","ref","startWith","withDirection","correspondingDropList","list","console","warn","_scrollableParentsResolved","scrollableParents","getAncestorScrollContainers","scrollable","getElementRef","withOrientation","markForCheck","emit","draggingDisabled","listAutoScrollDisabled","listOrientation","withItems","getSortedItems","ɵdir","selectors","hostAttrs","hostVars","hostBindings","rf","ctx","inputs","outputs","exportAs","features","provide","useValue","useExisting","CDK_DRAG_PARENT","CDK_DRAG_HANDLE","CdkDragHandle","parentDrag","_stateChanges","_parentDrag","CDK_DRAG_PLACEHOLDER","CDK_DRAG_PREVIEW","CdkDragPreview","templateRef","_matchSize","CdkDrag","_viewContainerRef","_selfHandle","observer","subscription","movedEvent","createDrag","addItem","_syncInputs","reset","getFreeDragPosition","onStable","take","_updateRootElement","changes","tap","childHandleElements","rootElementSelector","withHandles","switchMap","merge","handleInstance","dragRef","disableHandle","enableHandle","freeDragPosition","rootSelectorChange","positionChange","firstChange","removeItem","getClosestMatchingAncestor","Error","boundary","dir","withBoundaryElement","_getBoundaryElement","withPlaceholderTemplate","withPreviewTemplate","contentQueries","dirIndex","_t","first","currentElement","matches","msMatchesSelector","DragDropModule","ɵmod","ɵinj","providers","imports","_c0","activeEventOptions","MAT_SLIDER_VALUE_ACCESSOR","MatSlider","multi","MatSliderChange","MatSliderBase","_elementRef","_MatSliderMixinBase","elementRef","_focusMonitor","tabIndex","_animationMode","super","_invert","_max","_min","_step","_thumbLabel","_tickInterval","_value","_vertical","input","valueChange","onTouched","_percent","_isSliding","_isActive","_tickIntervalPercent","_sliderDimensions","_controlValueAccessorChangeFn","_dirChangeSubscription","oldValue","getPointerPositionOnPage","_lastPointerEvent","_focusHostElement","_onMouseenter","_bindGlobalEvents","_updateValueFromPosition","_valueOnSlideStart","_pointerPositionOnStart","_emitInputEvent","_emitChangeEvent","pointerPositionOnStart","currentPointerPosition","_removeGlobalEvents","_windowBlur","parseInt","v","_calculatePercentage","_roundToDecimal","toString","pop","toFixed","displayWith","_blurHostElement","_clamp","vertical","invert","percent","_isMinValue","thumbLabel","scale","_shouldInvertMouseCoords","_getThumbGap","_getDirection","tickSize","shouldInvertAxis","_shouldInvertAxis","side","monitor","origin","stopMonitoring","_getSliderDimensions","_updateTickIntervalPercent","keyCode","_increment","defaultView","triggerEvent","document","isTouch","endEventName","_getWindow","numSteps","step","pos","exactValue","_calculateValue","closestValue","_createChangeEvent","tickInterval","trackSize","stepsPerTick","ceil","percentage","_sliderWrapper","focus","blur","fn","isDisabled","ɵcmp","viewQuery","_onFocus","_onBlur","$event","_onKeydown","_onKeyup","decls","vars","consts","_getTrackBackgroundStyles","_getTrackFillStyles","_getTicksContainerStyles","_getTicksStyles","_getThumbContainerStyles","displayValue","directives","encapsulation","changeDetection","clientX","clientY","MatSliderModule","nextId","CDK_ACCORDION","CdkAccordion","_openCloseAllActions","_multi","_openCloseAll","expanded","nextId$1","CdkAccordionItem","accordion","_expansionDispatcher","_openCloseAllSubscription","closed","opened","destroyed","expandedChange","_expanded","_removeUniqueSelectionListener","listen","accordionId","_subscribeToOpenCloseAllActions","notify","CdkAccordionModule","MatExpansionPanel_ng_template_5_Template","_c1","_c2","MatExpansionPanelHeader_span_4_Template","ctx_r0","_getExpandedState","_c3","_c4","MAT_ACCORDION","matExpansionAnimations","indicatorRotate","bodyExpansion","visibility","MatExpansionPanelContent","_template","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","_uniqueSelectionDispatcher","defaultOptions","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","distinctUntilChanged","fromState","toState","hideToggle","_togglePosition","togglePosition","displayMode","_lazyContent","_portal","ngOnDestroy","_body","focusedElement","activeElement","bodyElement","_hasSpacing","ngContentSelectors","animation","MatExpansionPanelActionRow","MatExpansionPanelHeader","panel","_element","_parentChangeSubscription","accordionHideToggleChange","_containsFocus","focusVia","expandedHeight","collapsedHeight","toggle","isExpanded","_isExpanded","_toggle","_handleHeaderKeydown","_handleHeaderFocus","_keydown","_getPanelId","_getHeaderHeight","_getTogglePosition","_showToggle","MatExpansionPanelTitle","MatAccordion","arguments","_ownHeaders","show","_headers","headers","header","notifyOnChanges","_keyManager","withWrap","manager","setFirstItemActive","setLastItemActive","onKeydown","updateActiveItem","ɵMatAccordion_BaseFactory","MatExpansionModule","params","actions","undo","redo","hasChildNodes","firstChild","cloned","oldNode","cssText","newNode","bind","UndoManager","commands","pointer","executedCommand","command","before","after","ActiveElement","isImage","ContextBoxes","localStorage","nodeIsHtmlOrBody","hideBox","getBox","showBox","remove","box","hover","selected","iframe","hoverBox","selectedBox","SelectedElement","contextBoxes","changed","BehaviorSubject","isIcon","isLink","isLayout","selectNode","canModify","querySelector","closest","match","repositionBox","locked","el","path","getDisplayName","BuilderDocumentActions","undoManager","contentChanged","addUndoCommand","wrapDomChanges","nextElementSibling","selectParent","hideBoxes","copiedNode","nextSibling","copyNode","pasteNode","subject","canInsert","parentParent","prev","previousElementSibling","MainLoaderService","loading$","loadedAtLeastOnce$","ReplaySubject","loading","delay","BuilderDocument","settings","mainLoader","loaded$","setChangedSubject","innerHTML","outerHTML","getBody","scrollIntoView","behavior","block","inline","link","newHref","getAttribute","tagName","useCapture","execCommand","queryCommandState","Object","assign","includeBootstrap","theme","html","addIframeCss","promises","head","href","endsWith","sheet","r","observable","all","share","dispatchEvent","Event","innerText","url","getAssetUrl","createLink","ActiveProject","builderDocument","projectUrl","projects","templates","toast","pages$","activePage$","saving","bindToBuilderDocumentChangeEvent","project","thumbnail","createThumbnail","getOuterHtml","payload","model","css","js","pages","page","request","update","response","open","pageName","curr","updateBuilderDocument","newPage","p","setActivePage","activeTemplate","setTemplate","newPages","save","location","reload","relative","getBaseUrl","getSiteUrl","entry","debounceTime","base","prepend","html2canvas","svgRendering","canvas","generateThumbnail","toDataURL","aceThemes","CodeEditorComponent","lazyLoader","activeProject","selectedElement","overlayRef","suppressChangeEvents","themes","activeEditor","contentsChange","loaded","subscriptions","initEditor","updateEditorContents","sub","selectNodeSource","bindToEditorChangeEvent","editor","html_beautify","setTheme","changeEditorMode","setEditorValue","shouldReload","getValue","getInnerHtml","setValue","close","language","loadAsset","ace","edit","editorEl","useTheme","$blockScrolling","Infinity","on","mode","getSession","setMode","switchType","closeEditor","CodeEditor","overlayPanel","breakpoints","isOpen","componentRef","afterLoaded","originX","originY","overlayX","overlayY","offsetX","offsetY","mobilePosition","hasBackdrop","isMobile$","baseFonts","fontWeights","fontAwesomeIconsList","InlineTextEditorComponent","fonts","weights","sizes","icons","editedNode","beforeDomNode","activePanel","togglePanel","makeNodesNotEditable","linkModel","icon","loadFontAwesome","updatePosition","editable","findAll","fromEvent","InlineTextEditor","LivePreviewContextMenuComponent","codeEditor","currentUser","cutNode","duplicateNode","canSelectParent","canSelectChild","selectFirstChild","moveSelected","selectChild","cut","copy","paste","duplicate","move","viewSourceCode","Keycodes","Keybinds","bindings","keybind","parseKeybindString","keybindString","executeBindings","binding","bindingMatches","toUpperCase","ctrlKey","ctrl","shiftKey","shift","parts","parsed","LinkEditorComponent","anchors$","hrefModel","closeAndEmitChanges","downloadName","resetModel","setUrl","setPageLink","setAnchor","setDownload","setEmail","LinkEditor","LivePreview","zone","inlineTextEditor","parsedProject","contextMenu","keybinds","linkEditor","dragging","activeWidth","onload","contentDocument","registerKeybinds","bindToIframeEvents","bindToUndoCommandExecuted","src","hammer","Hammer","Manager","doubleTap","Tap","taps","listenForHover","listenForClick","listenForDoubleClick","listenForContextMenu","listenOn","addWithPreventDefault","nodeIsEditable","isHtmlOrBody","getScrollTop","handleLinkClick","handleFormSubmitButtonClick","matched","showWysiwyg","device","LayoutPanel","containers","selectRowAndContainerUsing","rows","selectedContainer","selectContainer","row","createColumnNode","selectRow","cont","selectedRow","columns","getColumns","preset","col","span","nodeListToArray","children","column","getSpan","resizeColumn","addNewColumn","nodeIndex","getNodeIndex","childNodes","colsAfter","siblingIndex","colsBefore","inserted","getTotalSpan","widerThen","reduce","total","isColumn","nodeList","newSpan","operator","full","oldSpan","isRow","isContainer","rowIsSelected","containerIsSelected","InspectorFloatingPanel","component","positionStrategy","overlay","flexibleConnectedTo","withPositions","ElementsApi","http","getWithCache","InspectorDrawer","drawer","DragVisualHelper","renderer","setStyle","removeClass","addClass","Inspector","panelChanged","openPanel","activePanelIs","LivePreviewScroller","previewContainer","pointY","previewHeight","offsetHeight","scrollFrameUp","scrollFrameDown","stopScrolling","clearInterval","scrollDownTimeout","scrollUpTimeout","setInterval","setScrollTop","newScrollTop","BaseDragAndDrop","dragOverlay","scroller","initHammer","getDragHandles","pan","Pan","DIRECTION_ALL","handleDragStart","handleDrag","handleDragEnd","bodyBeforeDrag","livePreview","setDragElement","dragHelper","dragEl","createDropPlaceholder","center","repositionDragMirror","under","classes","sortColumns","repositionDropPlaceholder","hide","dropPlaceholder","showDragEl","len","child","coordinatesAboveNode","append","reposition","DragElementsDirective","findByName","dataset","createRange","createContextualFragment","custom_element_css","reloadCustomElementsCss","ElementsPanelComponent","categories","getAll","category","AttributesPanelComponent","customAttributes","hiddenOn","canHideOn","xs","sm","md","lg","onElementSelected","callElementOnAssign","hiddenClasses","float","entries","breakpoint","includes","addUndo","makeUndoCommand","onChange","defaultOnChange","func","oldVal","newVal","attr","attributes","onAssign","defaultOnAssign","keys","changeVisibility","changeElPosition","changeElId","baseGradients","GradientBackgroundPanelComponent","gradients","gradient","ImageBackgroundPanelComponent","modal","builderActions","uploadQueue","textures","backgroundRepeat","backgroundPosition","getStyle","applyStyle","uri","httpParams","diskPrefix","types","image","files","getImageUrl","fileEntry","uploadImage","BackgroundPanelComponent","backgroundImage","backgroundColor","setBackgroundButtonColor","gradientButton","valueChanged","applyBackgroundStyle","backgroundButton","openColorpickerPanel","openBackgroundPanel","openGradientPanel","removeBackground","ShadowsPanelComponent","sliders","resetProps","stringToProps","props","setColorButtonColor","propsToString","clearShadow","colorButton","spread","angle","cos","sin","inset","string","val","SideControlBorderComponent","active","SpacingPanelComponent","sliderValue","availableSides","enabledSides","spacing","resetSpacing","setSelectedElementSpacingValues","isSideEnabled","applySpacing","maybeResetAllSpacingValue","resetDisabledSideValues","generateSpacingCssValue","generateCssRuleName","allSpacingValuesEqual","ucFirst","generateBorderRadiusRuleName","charAt","toggleSide","applySpacingForEnabledSides","applySpacingToAllSides","GoogleFontsPanelComponent","originalFonts","filteredFonts","searchControl","fontPage","bindToSearchQuery","loadIntoDom","fontFamily","createPaginator","paginator","valueChanges","query","filtered","font","family","names","gFontsLink","compiled","join","rel","previousPage","nextPage","TextStylePanelComponent","getSelectedElementTextStyles","textStyleIs","currentColor","applyTextStyle","googleFontsOrigin","fontSize","textAlign","fontStyle","lineHeight","fontWeight","textDecoration","openGoogleFontsPanel","toggleTextStyle","BorderStyleControlsComponent","borderStyle","borderColor","setInitialBorderStyles","applyBorderColor","applyBorderStyle","InspectorPanelComponent","layout","inspector","ColumnPresetsComponent","customPanelOpen","customPresetIsValid","customSpan","spans","presetIsValid","selectPreset","validSpans","sum","toggleCustomPanel","layoutPanel","LayoutPanelComponent","loadContainers","oldArray","getNodeList","newArray","reorderDom","createUndoCommand","newOrder","reorder","PagesPanelComponent","fb","activePageControl","pageForm","group","title","description","keywords","hydrateUpdateModel","addPage","pageValue","getRawValue","setMetaTagValue","setTitleValue","updatePage","removePage","patchValue","getTitleValue","getMetaTagValue","disable","createNewPage","deleteSelectedPage","duplicateSelectedPage","updateSelectedPage","SettingsPanelComponent","inspectorDrawer","hydrateModels","hoverBoxEnabled","selectedBoxEnabled","autoSave","openTemplatesPanel","updateSettings","DeviceSwitcherComponent","visible","selectedIndex","setWidth","getWidthFromIndex","switchDevice","InspectorComponent","setOrigin","newWindow","baseUrl","activePage","deviceSwitcher","toggleVisibility","toggleCodeEditor","openPreview","downloadProject","openPublishProjectModal","toggleDeviceSwitcher","saveProject","PreviewDragAndDropDirective","DIRECTION_RIGHT","DIRECTION_LEFT","ElementResizerDirective","iframeBody","getIframe","previewWidth","contextBoxType","aspectRatio","maxWidth","maxHeight","newWidth","finalWidth","newHeight","finalHeight","resizeAndPreserveAspectRatio","oldWidth","oldHeight","ContextBoxComponent","openUploadImageModal","canModifyText","editNode","deleteNode","LivePreviewComponent","wheelSub","deltaY","DragVisualHelperComponent","MainLoaderComponent","opacity","TemplatesPanelComponent","templatesApi","perPage","pagination","bodyBold","ok","afterClosed","result","applyTemplate","finalize","Themes","ThemesPanelComponent","themesApi","applyTheme","routes","HtmlBuilderComponent","elementsApi","route","dragVisualHelper","projectApi","router","inspectorHidden","forkJoin","snapshot","setProject","init","getCustom","canOpenProjectInBuilder","navigate","setDrawer","setComponent","hasPermission","users","u","toggleInspector","canActivate","HtmlBuilderRoutingModule","forChild","HtmlBuilderModule","bootstrapElements","nodes","validChildren","previewScale","frameworks","text","canDrag","previousSibling","contents","TEXT_NODE","shape","selectedNode","baseElements","scaleDragPreview","SkeletonComponent","variant","dark","isDarkMode","enterDuration","MAT_RADIO_DEFAULT_OPTIONS","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MatRadioGroup","MatRadioChange","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_name","_selected","_isInitialized","_labelPosition","_required","_updateRadioButtonNames","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","checked","_radios","radio","_markForCheck","labelPosition","required","ɵMatRadioGroup_BaseFactory","MatRadioButton","MatRadioButtonBase","_MatRadioButtonMixinBase","_MatRadioButtonBase","radioGroup","_radioDispatcher","_providerOverride","_uniqueId","_checked","newCheckedState","_setDisabled","_color","_inputElement","focusOrigin","_touch","disableRipple","groupValueChanged","String","ariaLabel","ariaLabelledby","ariaDescribedby","changeDetector","focusMonitor","radioDispatcher","animationMode","providerOverride","_onInputChange","_onInputClick","_r0","inputId","_isRippleDisabled","MatRadioModule","ColorPickerComponent_div_2_Template","ctx_r1","cpUsePosition","arrowTop","ColorPickerComponent_div_3_Template","_r17","onColorChange","onDragStart","onDragEnd","ctx_r2","hueSliderColor","slider","s","ColorPickerComponent_button_8_Template","_r21","ctx_r20","onAddPresetColor","selectedColor","ctx_r3","cpAddColorButtonClass","cpPresetColors","cpMaxPresetColorsLength","cpAddColorButtonText","ColorPickerComponent_div_10_Template","ColorPickerComponent_div_20_input_6_Template","_r25","onAcceptColor","onAlphaInput","ctx_r22","cmykText","ColorPickerComponent_div_20_div_16_Template","ColorPickerComponent_div_20_Template","_r28","onCyanInput","onMagentaInput","onYellowInput","onBlackInput","ctx_r8","format","c","m","k","cpAlphaChannel","ColorPickerComponent_div_21_input_5_Template","_r39","ctx_r36","hslaText","ColorPickerComponent_div_21_div_13_Template","ColorPickerComponent_div_21_Template","_r42","onHueInput","onSaturationInput","onLightnessInput","ctx_r9","h","l","ColorPickerComponent_div_22_input_5_Template","_r51","ctx_r48","rgbaText","ColorPickerComponent_div_22_div_13_Template","ColorPickerComponent_div_22_Template","_r54","onRedInput","onGreenInput","onBlueInput","ctx_r10","g","ColorPickerComponent_div_23_input_3_Template","_r63","ctx_r60","hexAlpha","ColorPickerComponent_div_23_div_7_Template","ColorPickerComponent_div_23_Template","_r66","onHexInput","ctx_r11","hexText","ColorPickerComponent_div_24_input_3_Template","_r71","ctx_r69","ColorPickerComponent_div_24_Template","_r74","onValueInput","ctx_r12","ColorPickerComponent_div_25_Template","_r77","onFormatToggle","ColorPickerComponent_div_26_div_4_div_1_span_1_Template","_r85","color_r82","$implicit","onRemovePresetColor","ctx_r83","cpRemoveColorButtonClass","ColorPickerComponent_div_26_div_4_div_1_Template","_r88","setColorFromString","ctx_r81","cpAddColorButton","ColorPickerComponent_div_26_div_4_Template","ctx_r79","cpPresetColorsClass","ColorPickerComponent_div_26_div_5_Template","ctx_r80","cpPresetEmptyMessageClass","cpPresetEmptyMessage","ColorPickerComponent_div_26_Template","ctx_r14","cpPresetLabel","ColorPickerComponent_div_27_button_1_Template","_r92","onCancelColor","ctx_r89","cpCancelButtonClass","cpCancelButtonText","ColorPickerComponent_div_27_button_2_Template","_r94","ctx_r90","cpOKButtonClass","cpOKButtonText","ColorPickerComponent_div_27_Template","ctx_r15","cpCancelButton","cpOKButton","ColorFormats","Rgba","Hsva","Hsla","Cmyk","TextDirective","rg","numeric","inputChange","SliderDirective","elRef","dragEnd","dragStart","listenerMove","listenerStop","stop","setCursor","pageXOffset","pageYOffset","offsetWidth","getX","getY","rgX","rgY","mouseDown","touchStart","SliderPosition","SliderDimension","ColorPickerService","cpDialogDisplay","closeDialog","hsva","hsla","f","q","cmyk","rgba","d","allowHex8","hex","substr","colorString","stringParsers","re","parse","execResult","isNaN","parser","exec","rgbaToHsva","hsla2hsva","outputFormat","alphaChannel","hsva2hsla","denormalizeRGBA","hsvaToRgba","rgbaToHex","ColorPickerComponent","cdRef","service","isIE10","dialogArrowSize","dialogArrowOffset","dialogInputFields","HEX","RGBA","HSLA","CMYK","useRootViewContainer","sliderDimMax","hueSlider","cpWidth","alphaSlider","cpCmykEnabled","cpOutputFormat","listenerMouseDown","onMouseDown","listenerResize","onResize","openDialog","initialColor","updateColorPicker","setActive","directiveElementRef","setInitialColor","openColorPicker","closeColorPicker","cpHeight","cpFallbackColor","cpColorMode","cpDisableInput","cpIgnoredElements","cpSaveClickOutside","cpCloseClickOutside","cpUseRootViewContainer","cpPosition","cpPositionOffset","cpPositionRelativeToArrow","setColorMode","ua","navigator","userAgent","msie","substring","directiveInstance","fallbackColor","setPresetConfig","stringToHsva","sliderH","setDialogPosition","sliderDragEnd","outputColor","sliderDragStart","isDescendant","colorSelected","cmykChanged","cmykColor","colorChanged","colorCanceled","availableFormats","nextFormat","sliderChanged","validHex","valid","test","inputChanged","concat","presetColorsChanged","hidden","stateChanged","cmykInput","hue","lastOutput","cmykToRgb","normalizeCMYK","denormalizeCMYK","rgbaToCmyk","alphaSliderColor","alpha","transformNode","dialogHeight","dialogElement","boxDirective","createDialogBox","HTMLUnknownElement","boxParent","usePosition","usePositionX","usePositionY","winWidth","innerWidth","winHeight","innerHeight","handleEsc","handleEnter","onHueChange","onValueChange","onAlphaChange","ColorPickerDirective","injector","cfr","appRef","vcRef","_service","dialogCreated","ignoreChanges","viewAttachedToAppRef","cpToggle","cpDisabled","cpInputChange","cpToggleChange","cpSliderChange","cpSliderDragEnd","cpSliderDragStart","colorPickerOpen","colorPickerClose","colorPickerCancel","colorPickerSelect","colorPickerChange","cpCmykColorChange","cpPresetColorsChange","inputFocus","cmpRef","detachView","hostView","dialog","currentValue","colorPicker","changeDetectorRef","appInstance","componentTypes","NULL","viewContainerRef","compFactory","resolveComponentFactory","create","attachView","fromResolvedProviders","parentInjector","createComponent","setupDialog","ignore","ignored","handleClick","handleFocus","handleInput","ColorPickerModule","RIGHT_POSITION","MatDrawerContainer_div_0_Template","_r3","_onBackdropClicked","_isShowingBackdrop","MatDrawerContainer_mat_drawer_content_3_Template","MatSidenavContainer_div_0_Template","MatSidenavContainer_mat_sidenav_content_3_Template","_c5","matDrawerAnimations","transformDrawer","throwMatDuplicatedDrawerError","MAT_DRAWER_DEFAULT_AUTOSIZE","MAT_DRAWER_CONTAINER","MatDrawerContent","_container","scrollDispatcher","ngZone","_contentMarginChanges","MatDrawerContainer","_contentMargins","MatDrawer","_focusTrapFactory","_platform","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_position","_mode","_disableClose","_opened","_animationStarted","_animationEnd","_animationState","openedChange","_openedStream","o","_closedStream","onPositionChanged","_modeChanged","_takeFocus","_isFocusWithinDrawer","_restoreFocus","disableClose","_updateFocusTrapState","_autoFocus","autoFocus","_focusTrap","focusInitialElementWhenReady","hasMovedFocus","_openedVia","activeEl","isBrowser","openedVia","_setOpen","restoreFocus","enabled","_animationStartListener","_animationDoneListener","openedStart","closedStart","viewportRuler","defaultAutosize","_drawers","backdropClick","_doCheckSubject","_validateDrawers","updateContentMargins","_autosize","_start","_end","_backdropOverride","_userContent","_content","_allDrawers","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","_left","_getWidth","_right","_isPushed","_setContainerClass","onMicrotaskEmpty","isAdd","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_closeViaBackdropClick","autosize","MatSidenavContent","MatSidenavContainer","MatSidenav","_fixedInViewport","_fixedTopGap","_fixedBottomGap","ɵMatSidenav_BaseFactory","fixedInViewport","fixedTopGap","fixedBottomGap","ɵMatSidenavContainer_BaseFactory","MatSidenavModule","Elements","i18n","defaults","resizable","specialCases","pClasses","parentClasses","check","matchParent","isSpecialCase","checkForSpecialCases","class","RegExp","customElements","addElement","addCustomElements","customCss","eval","file","queueId","canceled$","processing$","uploadedResponse$","progress$","error$","customData","uploadedFile","completed","setProgress","eta","message","errorMessage","extensions","some","extension","DefaultUploadValidator","DEFAULT_MAX_FILE_SIZE_MB","showToast","validations","maxSize","getMaxFileSize","allowedExtensions","getAllowedExtensions","blockedExtensions","getBlockedExtensions","convertToBytes","getJson","UploadQueueService","api","defaultValidator","uploads$","totalProgress$","uploadsAdded$","count$","pending","queueItem","progress","upload","validator","uploadQueueItems","transformUploads","replacements","transformed","updateCount","mergeMap","uploadQueueItem","catchError","errResponse","handleUploadFailure","bubbleError","throwError","handleUploadEvent","willProcessFiles","COMPLETED","queueItemId","speed","totalBytes","completedBytes","updateTotalProgress","addError","cancel","activeUpload","validate","failed","PROGRESS","updateProgress","completeUpload","msg","errors","showLearnMoreButton","DefaultUpload","isAdmin","errorUpload","action","onAction","inProgress","SkeletonModule","module","exports","extendStatics","setPrototypeOf","__proto__","__extends","__","constructor","prototype","__assign","n","call","apply","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","rejected","done","__generator","label","sent","trys","ops","verb","Symbol","iterator","op","TypeError","Bounds","w","fromClientRect","parseBounds","toCodePoints","str","codePoints","charCodeAt","extra","fromCodePoint","_i","codeUnits","codePoint","fromCharCode","chars","lookup","Uint8Array","TokenType","view","buffer","view32","view16","slice16","Uint16Array","Trie","initialValue","errorValue","highStart","highValueIndex","ix","UTRIE2_DATA_BLOCK_LENGTH","UTRIE2_INDEX_1_OFFSET","UTRIE2_INDEX_2_BLOCK_LENGTH","SP","BA","HY","CL","CP","EX","IN","NS","OP","IS","NU","PO","PR","SY","AL","EB","EM","H2","H3","ID","JL","JV","JT","SA","UnicodeTrie","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","ArrayBuffer","bytes","Uint32Array","headerLength","ALPHABETICS","HARD_LINE_BREAKS","SPACE","PREFIX_POSTFIX","LINE_BREAKS","KOREAN_SYLLABLE_BLOCK","HYPHEN","isAdjacentWithSpaceIgnored","classTypes","current","previousNonSpaceClassType","_lineBreakAtIndex","indicies","forbiddenBreaks","beforeIndex","afterIndex","prevIndex","count","Break","lineBreak","isDigit","isHex","isWhiteSpace","isNameStartCodePoint","isNameCodePoint","isNonPrintableCodePoint","isValidEscape","c1","c2","isIdentifierStart","c3","isNumberStart","stringToNumber","sign","integers","int","fraction","fracd","frac","expsign","exponent","exp","pow","LEFT_PARENTHESIS_TOKEN","RIGHT_PARENTHESIS_TOKEN","COMMA_TOKEN","SUFFIX_MATCH_TOKEN","PREFIX_MATCH_TOKEN","COLUMN_TOKEN","DASH_MATCH_TOKEN","INCLUDE_MATCH_TOKEN","LEFT_CURLY_BRACKET_TOKEN","RIGHT_CURLY_BRACKET_TOKEN","SUBSTRING_MATCH_TOKEN","BAD_URL_TOKEN","BAD_STRING_TOKEN","CDO_TOKEN","CDC_TOKEN","COLON_TOKEN","SEMICOLON_TOKEN","LEFT_SQUARE_BRACKET_TOKEN","RIGHT_SQUARE_BRACKET_TOKEN","WHITESPACE_TOKEN","EOF_TOKEN","Tokenizer","write","chunk","read","tokens","consumeToken","consumeCodePoint","consumeStringToken","peekCodePoint","flags","consumeName","HASH_TOKEN","reconsumeCodePoint","consumeNumericToken","e1","e2","e3","consumeIdentLikeToken","a1","a2","a3","AT_KEYWORD_TOKEN","u1","u2","consumeUnicodeRangeToken","consumeWhiteSpace","DELIM_TOKEN","digits","questionMarks","start_1","digit","UNICODE_RANGE_TOKEN","endDigits","consumeUrlToken","FUNCTION_TOKEN","IDENT_TOKEN","URL_TOKEN","stringToken","STRING_TOKEN","consumeBadUrlRemnants","consumeEscapedCodePoint","consumeStringSlice","endingCodePoint","consumeNumber","repr","number","unit","DIMENSION_TOKEN","PERCENTAGE_TOKEN","NUMBER_TOKEN","hexCodePoint","Parser","_tokens","tokenizer","parseValue","parseComponentValue","parseValues","parseComponentValues","SyntaxError","reconsumeToken","consumeComponentValue","values","consumeSimpleBlock","consumeFunction","isEndingTokenFor","functionToken","cssFunction","FUNCTION","isDimensionToken","isNumberToken","isIdentToken","isStringToken","isIdentWithValue","nonWhiteSpace","nonFunctionArgSeparator","parseFunctionArgs","args","arg","isLength","isLengthPercentage","parseLengthPercentageTuple","ZERO_LENGTH","FIFTY_PERCENT","HUNDRED_PERCENT","getAbsoluteValueForTuple","tuple","getAbsoluteValue","PI","isAngle","parseNamedSide","ident","deg","colorFunction","SUPPORTED_COLOR_FUNCTIONS","pack","namedColor","COLORS","TRANSPARENT","isTransparent","asString","blue","green","red","getTokenColorValue","rgb","_b","hue2rgb","t1","t2","PropertyDescriptorParsingType","BACKGROUND_CLIP","hsl","saturation","lightness","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDERBLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSALMON","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","REBECCAPURPLE","RED","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","CSSImageType","CSSRadialShape","CSSRadialExtent","backgroundClip","prefix","LIST","PADDING_BOX","CONTENT_BOX","BORDER_BOX","TYPE_VALUE","parseColorStop","color$1","processColorStops","stops","lineLength","last","processStops","previous","stop_1","absoluteValue","gapBegin","stop_2","gapLength","gapValue","sqrt","findCorner","stat","corner","optimumDistance","optimumCorner","prefixLinearGradient","angle$1","firstToken","colorStop","LINEAR_GRADIENT","isGreenPixel","createForeignObjectSVG","xmlns","svg","createElementNS","foreignObject","setAttributeNS","loadSerializedSVG","img","Image","onerror","encodeURIComponent","XMLSerializer","serializeToString","FEATURES","range","testElement","TEST_HEIGHT","rangeBounds","rangeHeight","defineProperty","fetch","fillStyle","fillRect","greenImageSrc","getImageData","catch","crossOrigin","XMLHttpRequest","responseType","Logger","debug","getTime","info","instances","getInstance","error","CacheStorage","_caches","Cache","getOrigin","_link","protocol","hostname","port","isSameOrigin","_origin","setContext","_current","attachInstance","detachInstance","_options","_cache","addImage","isBlobImage","isRenderable","loadImage","useCORS","useProxy","_this","isInlineImage","SUPPORT_CORS_IMAGES","proxy","SUPPORT_CORS_XHR","allowTaint","isInlineBase64Image","imageTimeout","SUPPORT_RESPONSE_TYPE","xhr","status","reader_1","FileReader","readAsDataURL","timeout_1","ontimeout","send","INLINE_SVG","INLINE_BASE64","INLINE_IMG","SUPPORT_SVG_DRAWING","isSVG","prefixRadialGradient","CIRCLE","FARTHEST_CORNER","isColorStop","acc","ELLIPSE","CLOSEST_SIDE","FARTHEST_SIDE","CLOSEST_CORNER","RADIAL_GRADIENT","BACKGROUND_REPEAT","image_1","URL","imageFunction","SUPPORTED_IMAGE_FUNCTIONS","isAtPosition_1","backgroundOrigin","BACKGROUND_SIZE","parseBackgroundRepeat","NO_REPEAT","REPEAT_X","REPEAT_Y","REPEAT","BORDER_STYLE","backgroundSize","isBackgroundSizeInfoToken","borderColorForSide","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderRadiusForSide","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","FLOAT","borderStyleForSide","IDENT_VALUE","NONE","SOLID","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderWidthForSide","VALUE","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","bit","parseDisplayValue","LINE_BREAK","LEFT","RIGHT","INLINE_START","INLINE_END","letterSpacing","LIST_STYLE_POSITION","STRICT","NORMAL","TOKEN_VALUE","listStyleImage","LIST_STYLE_TYPE","listStylePosition","INSIDE","OUTSIDE","OVERFLOW","listStyleType","DISC","SQUARE","DECIMAL","CJK_DECIMAL","DECIMAL_LEADING_ZERO","LOWER_ROMAN","UPPER_ROMAN","LOWER_GREEK","LOWER_ALPHA","UPPER_ALPHA","ARABIC_INDIC","ARMENIAN","BENGALI","CAMBODIAN","CJK_EARTHLY_BRANCH","CJK_HEAVENLY_STEM","CJK_IDEOGRAPHIC","DEVANAGARI","ETHIOPIC_NUMERIC","GEORGIAN","GUJARATI","GURMUKHI","HEBREW","HIRAGANA","HIRAGANA_IROHA","JAPANESE_FORMAL","JAPANESE_INFORMAL","KANNADA","KATAKANA","KATAKANA_IROHA","KHMER","KOREAN_HANGUL_FORMAL","KOREAN_HANJA_FORMAL","KOREAN_HANJA_INFORMAL","LAO","LOWER_ARMENIAN","MALAYALAM","MONGOLIAN","MYANMAR","ORIYA","PERSIAN","SIMP_CHINESE_FORMAL","SIMP_CHINESE_INFORMAL","TAMIL","TELUGU","THAI","TIBETAN","TRAD_CHINESE_FORMAL","TRAD_CHINESE_INFORMAL","UPPER_ARMENIAN","DISCLOSURE_OPEN","DISCLOSURE_CLOSED","marginForSide","marginTop","marginRight","marginBottom","marginLeft","OVERFLOW_WRAP","overflow","HIDDEN","SCROLL","AUTO","VISIBLE","TEXT_ALIGN","overflowWrap","BREAK_WORD","paddingForSide","paddingTop","paddingRight","paddingBottom","paddingLeft","POSITION","CENTER","TEXT_TRANSFORM","RELATIVE","ABSOLUTE","FIXED","STICKY","STATIC","textShadow","shadow","VISIBILITY","textTransform","UPPERCASE","LOWERCASE","CAPITALIZE","transformFunction","SUPPORTED_TRANSFORM_FUNCTIONS","matrix","matrix3d","DEFAULT_VALUE","DEFAULT","transformOrigin","origins","WORD_BREAK","COLLAPSE","FONT_STYLE","wordBreak","BREAK_ALL","KEEP_ALL","auto","order","textDecorationColor","textDecorationLine","line","accumulator","results","fontVariant","PseudoElementType","OBLIQUE","ITALIC","content","counterIncrement","increments","increment","counterReset","resets","quotes","getQuote","depth","quote","boxShadow","CSSParsedDeclaration","declaration","cssFloat","overflowTuple","overflowX","overflowY","isVisible","isTransformed","isPositioned","isPositionedWithZIndex","isFloating","isInlineLevel","CSSParsedPseudoDeclaration","CSSParsedCounterDeclaration","descriptor","length_1","value_1","ElementContainer","textNodes","isHTMLElementNode","bounds","TextBounds","TextContainer","transform$1","textBounds","textList","bk","breaker","classType","isLetterNumber","letterNumber","forbiddenBreakpoints","lastEnd","nextIndex","words","SUPPORT_RANGE_BOUNDS","ownerDocument","setStart","setEnd","replacementNode","splitText","capitalize","p1","p2","ImageElementContainer","_super","currentSrc","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","CanvasElementContainer","SVGElementContainer","baseVal","LIElementContainer","OLElementContainer","reversed","CHECKBOX_BORDER_RADIUS","RADIO_BORDER_RADIUS","InputElementContainer","SelectElementContainer","option","TextareaElementContainer","parseColor","IFrameElementContainer","contentWindow","tree","parseTree","documentBackgroundColor","bodyBackgroundColor","LIST_OWNERS","parseNodeTree","root","childNode","nextNode","isTextNode","isElementNode","createContainer","createsRealStackingContext","createsStackingContext","isTextareaElement","isSVGElement","isSelectElement","isImageElement","isCanvasElement","isLIElement","isOLElement","isInputElement","isIFrameElement","isBodyElement","isSVGElementNode","isStyleElement","isScriptElement","CounterState","counters","getCounterValue","getCounterValues","canReset","counterNames","ROMAN_UPPER","createAdditiveCounter","symbols","fallback","suffix","createCounterText","integer","createCounterStyleWithSymbolResolver","codePointRangeLength","resolver","createCounterStyleFromRange","codePointRangeStart","codePointRangeEnd","createCounterStyleFromSymbols","createCJKCounter","numbers","multipliers","negativeSign","tmp","coefficient","appendSuffix","defaultSuffix","cjkSuffix","koreanSuffix","spaceSuffix","CJK_TEN_COEFFICIENTS","CJK_ZEROS","DocumentCloner","scrolledElements","quoteDepth","toIFrame","windowSize","createIFrameContainer","scrollX","scrollY","cloneWindow","documentClone","iframeLoad","iframeLoader","onclone","restoreNodeScroll","scrollTo","clonedReferenceElement","ready","serializeDoctype","doctype","restoreOwnerScroll","adoptNode","createElementClone","createCanvasClone","createStyleClone","cssRules","rule","textContent","inlineImages","clonedCanvas","clonedCtx","putImageData","createTextNode","styleBefore","styleAfter","createPseudoHideStyles","resolvePseudoContent","BEFORE","hasAttribute","ignoreElements","copyStyles","AFTER","copyCSSStyles","pseudoElt","anonymousReplacedElement","counterStyle","counterState","counterType","delim","counterStates","counterType_1","separator","PSEUDO_HIDE_ELEMENT_CLASS_BEFORE","PSEUDO_HIDE_ELEMENT_CLASS_AFTER","newClassName","baseValue","PathType","cloneIframeContainer","border","scrolling","onreadystatechange","interval","readyState","setProperty","internalSubset","publicId","systemId","createStyles","CORNER","equalPath","Vector","VECTOR","deltaX","lerp","BezierCurve","startControl","endControl","BEZIER_CURVE","subdivide","firstHalf","ab","bc","cd","abbc","bccd","isBezierCurve","BoundCurves","tlh","tlv","trh","trv","_c","brh","brv","_d","blh","blv","factors","maxFactor","topWidth","rightHeight","bottomWidth","leftHeight","topLeftBorderBox","getCurvePoints","TOP_LEFT","topRightBorderBox","TOP_RIGHT","bottomRightBorderBox","BOTTOM_RIGHT","bottomLeftBorderBox","BOTTOM_LEFT","topLeftPaddingBox","topRightPaddingBox","bottomRightPaddingBox","bottomLeftPaddingBox","topLeftContentBox","topRightContentBox","bottomRightContentBox","bottomLeftContentBox","r1","r2","kappa","ox","oy","xm","ym","calculateBorderBoxPath","curves","calculatePaddingBoxPath","TransformEffect","ClipEffect","StackingContext","inlineLevel","nonInlineLevel","negativeZIndex","zeroOrAutoZIndexOrTransformedOrOpacity","positiveZIndex","nonPositionedFloats","nonPositionedInlineLevel","ElementPaint","parentStack","effects","borderBox","paddingBox","getParentEffects","parseStackTree","stackingContext","realStackingContext","listItems","treatAsRealStackingContext","paintContainer","listOwnerItems","stack","order_1","index_1","index_2","processListItems","owner","numbering","listValue","createPathFromCurves","outer1","inner1","outer2","inner2","contentBox","calculateBackgroundRendering","intrinsicSize","backgroundPositioningArea","getBackgroundValueForIndex","backgroundPaintingArea","backgroundImageSize","calculateBackgroundSize","sizeWidth","sizeHeight","calculateBackgroundRepeatPath","isAuto","hasIntrinsicValue","intrinsicProportion","second","hasIntrinsicProportion","CONTAIN","COVER","hasIntrinsicWidth","hasIntrinsicHeight","hasIntrinsicDimensions","width_3","height_3","repeat","FontMetrics","_data","parseMetrics","padding","verticalAlign","baseline","offsetTop","middle","getMetrics","CanvasRenderer","_activeEffects","fontMetrics","translate","textBaseline","applyEffects","popEffect","effect","applyEffect","clip","restore","renderStack","globalAlpha","renderStackContent","renderNode","paint","renderNodeBackgroundAndBorders","renderNodeContent","renderTextWithLetterSpacing","fillText","letter","measureText","createFontStyle","renderTextNode","textShadows","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","renderReplacedElement","windowWidth","windowHeight","render","fill","beginPath","arc","isTextInputElement","canvasTextAlign","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","mask","paths","moveTo","lineTo","formatPath","closePath","bezierCurveTo","renderRepeat","pattern","resizeImage","renderBackgroundImage","_loop_1","this_1","x0","x1","y0","y1","gradient_1","top_1","rx","ry","radialGradient_1","midX","midY","invF","createPattern","radian","centerX","centerY","atan2","halfWidth","halfHeight","halfLineLength","yDiff","xDiff","createLinearGradient","addColorStop","createRadialGradient","renderBorder","curvePoints","borderSide","hasBackground","borders","borders_1","calculateBackgroundCurvedPaintingArea","deltaW","deltaH","borderBoxArea","maskOffset","shadowPaintingArea","ForeignObjectRenderer","loadSerializedSVG$1","parseColor$1","opts","instanceName","resourceOptions","windowBounds","documentCloner","clonedElement","bgColor","defaultBackgroundColor","renderOptions","random","logging","removeContainer","foreignObjectRendering","devicePixelRatio"],"mappings":"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AAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,MAE3E8Y,GAAW,CACXze,SAAU,CACN,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEJ2F,OAAQ,CACJ,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAGJyZ,GAAS,CACTpf,SAAU,CACN,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEJ2F,OAAQ,CACJ,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,eACA,eACA,eACA,eACA,eACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAGJsZ,GAAW,CACXjf,SAAU,CACN,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEJ2F,OAAQ,CACJ,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SA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","sourceRoot":"webpack:///","sourcesContent":["import {ChangeDetectionStrategy, Component, ElementRef, Inject, OnInit, Optional, ViewChild} from '@angular/core';\r\nimport {OverlayPanelRef} from '../overlay-panel/overlay-panel-ref';\r\nimport {OVERLAY_PANEL_DATA} from '../overlay-panel/overlay-panel-data';\r\nimport {ColorPickerService} from 'ngx-color-picker';\r\n\r\n@Component({\r\n templateUrl: './colorpicker-panel.component.html',\r\n styleUrls: ['./colorpicker-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n ColorPickerService,\r\n ]\r\n})\r\nexport class ColorpickerPanelComponent implements OnInit {\r\n @ViewChild('trigger', { static: true }) trigger: ElementRef<HTMLElement>;\r\n public color: string;\r\n\r\n constructor(\r\n @Inject(OVERLAY_PANEL_DATA) @Optional() public data: {color?: string},\r\n private overlayPanelRef: OverlayPanelRef,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.color = this.getInitialColor();\r\n\r\n // open color picker\r\n setTimeout(() => {\r\n this.trigger.nativeElement.click();\r\n });\r\n }\r\n\r\n public emitSelectedEvent(value: string) {\r\n this.color = value;\r\n // const rgba = 'rgba(' + hexToRgb(value).join(',') + ')';\r\n this.overlayPanelRef.emitValue(value);\r\n }\r\n\r\n private getInitialColor() {\r\n let color = (this.data && this.data.color) || null;\r\n if (color && color.replace(/ /g, '') === 'rgba(0,0,0,0)') color = undefined;\r\n return color;\r\n }\r\n}\r\n","<div class=\"trigger\" #trigger\r\n [colorPicker]=\"color\"\r\n [cpAlphaChannel]=\"'always'\"\r\n [cpOutputFormat]=\"'rgba'\"\r\n (colorPickerChange)=\"emitSelectedEvent($event)\"\r\n [cpDialogDisplay]=\"'inline'\"\r\n [cpToggle]=\"false\"\r\n></div>\r\n","import { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { isNumeric } from '../util/isNumeric';\nexport function interval(period = 0, scheduler = async) {\n if (!isNumeric(period) || period < 0) {\n period = 0;\n }\n if (!scheduler || typeof scheduler.schedule !== 'function') {\n scheduler = async;\n }\n return new Observable(subscriber => {\n subscriber.add(scheduler.schedule(dispatch, period, { subscriber, counter: 0, period }));\n return subscriber;\n });\n}\nfunction dispatch(state) {\n const { subscriber, counter, period } = state;\n subscriber.next(counter);\n this.schedule({ subscriber, counter: counter + 1, period }, period);\n}\n//# sourceMappingURL=interval.js.map","import { ɵɵdefineInjectable, ɵɵinject, NgZone, Injectable, Inject, InjectionToken, Directive, Input, EventEmitter, isDevMode, ElementRef, ChangeDetectorRef, Optional, SkipSelf, Output, TemplateRef, ViewContainerRef, Self, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ViewportRuler, ScrollDispatcher, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { normalizePassiveListenerOptions, _getShadowRoot } from '@angular/cdk/platform';\nimport { coerceBooleanProperty, coerceElement, coerceArray, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription, interval, animationFrameScheduler, Observable, merge } from 'rxjs';\nimport { takeUntil, startWith, map, take, tap, switchMap } from 'rxjs/operators';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Shallow-extends a stylesheet object with another stylesheet object.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/bidi';\nfunction extendStyles(dest, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n return dest;\n}\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nfunction toggleNativeDragInteractions(element, enable) {\n const userSelect = enable ? '' : 'none';\n extendStyles(element.style, {\n touchAction: enable ? '' : 'none',\n webkitUserDrag: enable ? '' : 'none',\n webkitTapHighlightColor: enable ? '' : 'transparent',\n userSelect: userSelect,\n msUserSelect: userSelect,\n webkitUserSelect: userSelect,\n MozUserSelect: userSelect\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value) {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nfunction getTransformTransitionDurationInMs(element) {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle, name) {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Gets a mutable version of an element's bounding `ClientRect`. */\nfunction getMutableClientRect(element) {\n const clientRect = element.getBoundingClientRect();\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height\n };\n}\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nfunction isInsideClientRect(clientRect, x, y) {\n const { top, bottom, left, right } = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nfunction adjustClientRect(clientRect, top, left) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nfunction isPointerNearClientRect(rect, threshold, pointerX, pointerY) {\n const { top, right, bottom, left, width, height } = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Keeps track of the scroll position and dimensions of the parents of an element. */\nclass ParentPositionTracker {\n constructor(_document, _viewportRuler) {\n this._document = _document;\n this._viewportRuler = _viewportRuler;\n /** Cached positions of the scrollable parent elements. */\n this.positions = new Map();\n }\n /** Clears the cached positions. */\n clear() {\n this.positions.clear();\n }\n /** Caches the positions. Should be called at the beginning of a drag sequence. */\n cache(elements) {\n this.clear();\n this.positions.set(this._document, {\n scrollPosition: this._viewportRuler.getViewportScrollPosition(),\n });\n elements.forEach(element => {\n this.positions.set(element, {\n scrollPosition: { top: element.scrollTop, left: element.scrollLeft },\n clientRect: getMutableClientRect(element)\n });\n });\n }\n /** Handles scrolling while a drag is taking place. */\n handleScroll(event) {\n const target = event.target;\n const cachedPosition = this.positions.get(target);\n if (!cachedPosition) {\n return null;\n }\n // Used when figuring out whether an element is inside the scroll parent. If the scrolled\n // parent is the `document`, we use the `documentElement`, because IE doesn't support\n // `contains` on the `document`.\n const scrolledParentNode = target === this._document ? target.documentElement : target;\n const scrollPosition = cachedPosition.scrollPosition;\n let newTop;\n let newLeft;\n if (target === this._document) {\n const viewportScrollPosition = this._viewportRuler.getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n }\n else {\n newTop = target.scrollTop;\n newLeft = target.scrollLeft;\n }\n const topDifference = scrollPosition.top - newTop;\n const leftDifference = scrollPosition.left - newLeft;\n // Go through and update the cached positions of the scroll\n // parents that are inside the element that was scrolled.\n this.positions.forEach((position, node) => {\n if (position.clientRect && target !== node && scrolledParentNode.contains(node)) {\n adjustClientRect(position.clientRect, topDifference, leftDifference);\n }\n });\n scrollPosition.top = newTop;\n scrollPosition.left = newLeft;\n return { top: topDifference, left: leftDifference };\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Creates a deep clone of an element. */\nfunction deepCloneNode(node) {\n const clone = node.cloneNode(true);\n const descendantsWithId = clone.querySelectorAll('[id]');\n const nodeName = node.nodeName.toLowerCase();\n // Remove the `id` to avoid having multiple elements with the same id on the page.\n clone.removeAttribute('id');\n for (let i = 0; i < descendantsWithId.length; i++) {\n descendantsWithId[i].removeAttribute('id');\n }\n if (nodeName === 'canvas') {\n transferCanvasData(node, clone);\n }\n else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {\n transferInputData(node, clone);\n }\n transferData('canvas', node, clone, transferCanvasData);\n transferData('input, textarea, select', node, clone, transferInputData);\n return clone;\n}\n/** Matches elements between an element and its clone and allows for their data to be cloned. */\nfunction transferData(selector, node, clone, callback) {\n const descendantElements = node.querySelectorAll(selector);\n if (descendantElements.length) {\n const cloneElements = clone.querySelectorAll(selector);\n for (let i = 0; i < descendantElements.length; i++) {\n callback(descendantElements[i], cloneElements[i]);\n }\n }\n}\n/** Transfers the data of one input element to another. */\nfunction transferInputData(source, clone) {\n clone.value = source.value;\n}\n/** Transfers the data of one canvas element to another. */\nfunction transferCanvasData(source, clone) {\n const context = clone.getContext('2d');\n if (context) {\n // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).\n // We can't do much about it so just ignore the error.\n try {\n context.drawImage(source, 0, 0);\n }\n catch (_a) { }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = normalizePassiveListenerOptions({ passive: false });\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n */\nconst MOUSE_EVENT_IGNORE_TIME = 800;\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n */\nclass DragRef {\n constructor(element, _config, _document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._config = _config;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n /**\n * CSS `transform` applied to the element when it isn't being dragged. We need a\n * passive transform in order for the dragged element to retain its new position\n * after the user has stopped dragging and because we need to know the relative\n * position in case they start dragging again. This corresponds to `element.style.transform`.\n */\n this._passiveTransform = { x: 0, y: 0 };\n /** CSS `transform` that is applied to the element while it's being dragged. */\n this._activeTransform = { x: 0, y: 0 };\n /** Emits when the item is being moved. */\n this._moveEvents = new Subject();\n /** Subscription to pointer movement events. */\n this._pointerMoveSubscription = Subscription.EMPTY;\n /** Subscription to the event that is dispatched when the user lifts their pointer. */\n this._pointerUpSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being scrolled. */\n this._scrollSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being resized. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Cached reference to the boundary element. */\n this._boundaryElement = null;\n /** Whether the native dragging interactions have been enabled on the root element. */\n this._nativeInteractionsEnabled = true;\n /** Elements that can be used to drag the draggable item. */\n this._handles = [];\n /** Registered handles that are currently disabled. */\n this._disabledHandles = new Set();\n /** Layout direction of the item. */\n this._direction = 'ltr';\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n this.dragStartDelay = 0;\n this._disabled = false;\n /** Emits as the drag sequence is being prepared. */\n this.beforeStarted = new Subject();\n /** Emits when the user starts dragging the item. */\n this.started = new Subject();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new Subject();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new Subject();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new Subject();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new Subject();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new Subject();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = this._moveEvents.asObservable();\n /** Handler for the `mousedown`/`touchstart` events. */\n this._pointerDown = (event) => {\n this.beforeStarted.next();\n // Delegate the event based on whether it started from a handle or the element itself.\n if (this._handles.length) {\n const targetHandle = this._handles.find(handle => {\n const target = event.target;\n return !!target && (target === handle || handle.contains(target));\n });\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n this._initializeDragSequence(targetHandle, event);\n }\n }\n else if (!this.disabled) {\n this._initializeDragSequence(this._rootElement, event);\n }\n };\n /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n this._pointerMove = (event) => {\n // Prevent the default action as early as possible in order to block\n // native actions like dragging the selected text or images with the mouse.\n event.preventDefault();\n const pointerPosition = this._getPointerPositionOnPage(event);\n if (!this._hasStartedDragging) {\n const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);\n const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);\n const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;\n // Only start dragging after the user has moved more than the minimum distance in either\n // direction. Note that this is preferrable over doing something like `skip(minimumDistance)`\n // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n // per pixel of movement (e.g. if the user moves their pointer quickly).\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);\n if (!isDelayElapsed) {\n this._endDragSequence(event);\n return;\n }\n // Prevent other drag sequences from starting while something in the container is still\n // being dragged. This can happen while we're waiting for the drop animation to finish\n // and can cause errors, because some elements might still be moving around.\n if (!this._dropContainer || !this._dropContainer.isDragging()) {\n this._hasStartedDragging = true;\n this._ngZone.run(() => this._startDragSequence(event));\n }\n }\n return;\n }\n // We only need the preview dimensions if we have a boundary element.\n if (this._boundaryElement) {\n // Cache the preview element rect if we haven't cached it already or if\n // we cached it too early before the element dimensions were computed.\n if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {\n this._previewRect = (this._preview || this._rootElement).getBoundingClientRect();\n }\n }\n const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);\n this._hasMoved = true;\n this._lastKnownPointerPosition = pointerPosition;\n this._updatePointerDirectionDelta(constrainedPointerPosition);\n if (this._dropContainer) {\n this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);\n }\n else {\n const activeTransform = this._activeTransform;\n activeTransform.x =\n constrainedPointerPosition.x - this._pickupPositionOnPage.x + this._passiveTransform.x;\n activeTransform.y =\n constrainedPointerPosition.y - this._pickupPositionOnPage.y + this._passiveTransform.y;\n this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n // Apply transform as attribute if dragging and svg element to work for IE\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n const appliedTransform = `translate(${activeTransform.x} ${activeTransform.y})`;\n this._rootElement.setAttribute('transform', appliedTransform);\n }\n }\n // Since this event gets fired for every pixel while dragging, we only\n // want to fire it if the consumer opted into it. Also we have to\n // re-enter the zone because we run all of the events on the outside.\n if (this._moveEvents.observers.length) {\n this._ngZone.run(() => {\n this._moveEvents.next({\n source: this,\n pointerPosition: constrainedPointerPosition,\n event,\n distance: this._getDragDistance(constrainedPointerPosition),\n delta: this._pointerDirectionDelta\n });\n });\n }\n };\n /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n this._pointerUp = (event) => {\n this._endDragSequence(event);\n };\n this.withRootElement(element);\n this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n _dragDropRegistry.registerDragItem(this);\n }\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._toggleNativeDragInteractions();\n }\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._placeholder;\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._rootElement;\n }\n /**\n * Gets the currently-visible element that represents the drag item.\n * While dragging this is the placeholder, otherwise it's the root element.\n */\n getVisibleElement() {\n return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();\n }\n /** Registers the handles that can be used to drag the element. */\n withHandles(handles) {\n this._handles = handles.map(handle => coerceElement(handle));\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, false));\n this._toggleNativeDragInteractions();\n return this;\n }\n /**\n * Registers the template that should be used for the drag preview.\n * @param template Template that from which to stamp out the preview.\n */\n withPreviewTemplate(template) {\n this._previewTemplate = template;\n return this;\n }\n /**\n * Registers the template that should be used for the drag placeholder.\n * @param template Template that from which to stamp out the placeholder.\n */\n withPlaceholderTemplate(template) {\n this._placeholderTemplate = template;\n return this;\n }\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n */\n withRootElement(rootElement) {\n const element = coerceElement(rootElement);\n if (element !== this._rootElement) {\n if (this._rootElement) {\n this._removeRootElementListeners(this._rootElement);\n }\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n });\n this._initialTransform = undefined;\n this._rootElement = element;\n }\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n this._ownerSVGElement = this._rootElement.ownerSVGElement;\n }\n return this;\n }\n /**\n * Element to which the draggable's position will be constrained.\n */\n withBoundaryElement(boundaryElement) {\n this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n this._resizeSubscription.unsubscribe();\n if (boundaryElement) {\n this._resizeSubscription = this._viewportRuler\n .change(10)\n .subscribe(() => this._containInsideBoundaryOnResize());\n }\n return this;\n }\n /** Removes the dragging functionality from the DOM element. */\n dispose() {\n this._removeRootElementListeners(this._rootElement);\n // Do this check before removing from the registry since it'll\n // stop being considered as dragged once it is removed.\n if (this.isDragging()) {\n // Since we move out the element to the end of the body while it's being\n // dragged, we have to make sure that it's removed if it gets destroyed.\n removeNode(this._rootElement);\n }\n removeNode(this._anchor);\n this._destroyPreview();\n this._destroyPlaceholder();\n this._dragDropRegistry.removeDragItem(this);\n this._removeSubscriptions();\n this.beforeStarted.complete();\n this.started.complete();\n this.released.complete();\n this.ended.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this._moveEvents.complete();\n this._handles = [];\n this._disabledHandles.clear();\n this._dropContainer = undefined;\n this._resizeSubscription.unsubscribe();\n this._parentPositions.clear();\n this._boundaryElement = this._rootElement = this._ownerSVGElement = this._placeholderTemplate =\n this._previewTemplate = this._anchor = null;\n }\n /** Checks whether the element is currently being dragged. */\n isDragging() {\n return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._rootElement.style.transform = this._initialTransform || '';\n this._activeTransform = { x: 0, y: 0 };\n this._passiveTransform = { x: 0, y: 0 };\n }\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param handle Handle element that should be disabled.\n */\n disableHandle(handle) {\n if (this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n }\n }\n /**\n * Enables a handle, if it has been disabled.\n * @param handle Handle element to be enabled.\n */\n enableHandle(handle) {\n this._disabledHandles.delete(handle);\n }\n /** Sets the layout direction of the draggable item. */\n withDirection(direction) {\n this._direction = direction;\n return this;\n }\n /** Sets the container that the item is part of. */\n _withDropContainer(container) {\n this._dropContainer = container;\n }\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n const position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n return { x: position.x, y: position.y };\n }\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value) {\n this._activeTransform = { x: 0, y: 0 };\n this._passiveTransform.x = value.x;\n this._passiveTransform.y = value.y;\n if (!this._dropContainer) {\n this._applyRootElementTransform(value.x, value.y);\n }\n return this;\n }\n /** Updates the item's sort order based on the last-known pointer position. */\n _sortFromLastPointerPosition() {\n const position = this._lastKnownPointerPosition;\n if (position && this._dropContainer) {\n this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);\n }\n }\n /** Unsubscribes from the global subscriptions. */\n _removeSubscriptions() {\n this._pointerMoveSubscription.unsubscribe();\n this._pointerUpSubscription.unsubscribe();\n this._scrollSubscription.unsubscribe();\n }\n /** Destroys the preview element and its ViewRef. */\n _destroyPreview() {\n if (this._preview) {\n removeNode(this._preview);\n }\n if (this._previewRef) {\n this._previewRef.destroy();\n }\n this._preview = this._previewRef = null;\n }\n /** Destroys the placeholder element and its ViewRef. */\n _destroyPlaceholder() {\n if (this._placeholder) {\n removeNode(this._placeholder);\n }\n if (this._placeholderRef) {\n this._placeholderRef.destroy();\n }\n this._placeholder = this._placeholderRef = null;\n }\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @param event Browser event object that ended the sequence.\n */\n _endDragSequence(event) {\n // Note that here we use `isDragging` from the service, rather than from `this`.\n // The difference is that the one from the service reflects whether a dragging sequence\n // has been initiated, whereas the one on `this` includes whether the user has passed\n // the minimum dragging threshold.\n if (!this._dragDropRegistry.isDragging(this)) {\n return;\n }\n this._removeSubscriptions();\n this._dragDropRegistry.stopDragging(this);\n this._toggleNativeDragInteractions();\n if (this._handles) {\n this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;\n }\n if (!this._hasStartedDragging) {\n return;\n }\n this.released.next({ source: this });\n if (this._dropContainer) {\n // Stop scrolling immediately, instead of waiting for the animation to finish.\n this._dropContainer._stopScrolling();\n this._animatePreviewToPlaceholder().then(() => {\n this._cleanupDragArtifacts(event);\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n });\n }\n else {\n // Convert the active transform into a passive one. This means that next time\n // the user starts dragging the item, its position will be calculated relatively\n // to the new passive transform.\n this._passiveTransform.x = this._activeTransform.x;\n this._passiveTransform.y = this._activeTransform.y;\n this._ngZone.run(() => {\n this.ended.next({\n source: this,\n distance: this._getDragDistance(this._getPointerPositionOnPage(event))\n });\n });\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n }\n }\n /** Starts the dragging sequence. */\n _startDragSequence(event) {\n if (isTouchEvent(event)) {\n this._lastTouchEventTime = Date.now();\n }\n this._toggleNativeDragInteractions();\n const dropContainer = this._dropContainer;\n if (dropContainer) {\n const element = this._rootElement;\n const parent = element.parentNode;\n const preview = this._preview = this._createPreviewElement();\n const placeholder = this._placeholder = this._createPlaceholderElement();\n const anchor = this._anchor = this._anchor || this._document.createComment('');\n // Insert an anchor node so that we can restore the element's position in the DOM.\n parent.insertBefore(anchor, element);\n // We move the element out at the end of the body and we make it hidden, because keeping it in\n // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n element.style.display = 'none';\n this._document.body.appendChild(parent.replaceChild(placeholder, element));\n getPreviewInsertionPoint(this._document).appendChild(preview);\n this.started.next({ source: this }); // Emit before notifying the container.\n dropContainer.start();\n this._initialContainer = dropContainer;\n this._initialIndex = dropContainer.getItemIndex(this);\n }\n else {\n this.started.next({ source: this });\n this._initialContainer = this._initialIndex = undefined;\n }\n // Important to run after we've called `start` on the parent container\n // so that it has had time to resolve its scrollable parents.\n this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);\n }\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @param referenceElement Element that started the drag sequence.\n * @param event Browser event object that started the sequence.\n */\n _initializeDragSequence(referenceElement, event) {\n // Always stop propagation for the event that initializes\n // the dragging sequence, in order to prevent it from potentially\n // starting another sequence for a draggable parent somewhere up the DOM tree.\n event.stopPropagation();\n const isDragging = this.isDragging();\n const isTouchSequence = isTouchEvent(event);\n const isAuxiliaryMouseButton = !isTouchSequence && event.button !== 0;\n const rootElement = this._rootElement;\n const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime &&\n this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n // events from firing on touch devices.\n if (event.target && event.target.draggable && event.type === 'mousedown') {\n event.preventDefault();\n }\n // Abort if the user is already dragging or is using a mouse button other than the primary one.\n if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent) {\n return;\n }\n // If we've got handles, we need to disable the tap highlight on the entire root element,\n // otherwise iOS will still add it, even though all the drag interactions on the handle\n // are disabled.\n if (this._handles.length) {\n this._rootElementTapHighlight = rootElement.style.webkitTapHighlightColor || '';\n rootElement.style.webkitTapHighlightColor = 'transparent';\n }\n this._hasStartedDragging = this._hasMoved = false;\n // Avoid multiple subscriptions and memory leaks when multi touch\n // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n this._removeSubscriptions();\n this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n this._scrollSubscription = this._dragDropRegistry.scroll.subscribe(scrollEvent => {\n this._updateOnScroll(scrollEvent);\n });\n if (this._boundaryElement) {\n this._boundaryRect = getMutableClientRect(this._boundaryElement);\n }\n // If we have a custom preview we can't know ahead of time how large it'll be so we position\n // it next to the cursor. The exception is when the consumer has opted into making the preview\n // the same size as the root element, in which case we do know the size.\n const previewTemplate = this._previewTemplate;\n this._pickupPositionInElement = previewTemplate && previewTemplate.template &&\n !previewTemplate.matchSize ? { x: 0, y: 0 } :\n this._getPointerPositionInElement(referenceElement, event);\n const pointerPosition = this._pickupPositionOnPage = this._lastKnownPointerPosition =\n this._getPointerPositionOnPage(event);\n this._pointerDirectionDelta = { x: 0, y: 0 };\n this._pointerPositionAtLastDirectionChange = { x: pointerPosition.x, y: pointerPosition.y };\n this._dragStartTime = Date.now();\n this._dragDropRegistry.startDragging(this, event);\n }\n /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n _cleanupDragArtifacts(event) {\n // Restore the element's visibility and insert it at its old position in the DOM.\n // It's important that we maintain the position, because moving the element around in the DOM\n // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n // while moving the existing elements in all other cases.\n this._rootElement.style.display = '';\n this._anchor.parentNode.replaceChild(this._rootElement, this._anchor);\n this._destroyPreview();\n this._destroyPlaceholder();\n this._boundaryRect = this._previewRect = undefined;\n // Re-enter the NgZone since we bound `document` events on the outside.\n this._ngZone.run(() => {\n const container = this._dropContainer;\n const currentIndex = container.getItemIndex(this);\n const pointerPosition = this._getPointerPositionOnPage(event);\n const distance = this._getDragDistance(this._getPointerPositionOnPage(event));\n const isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);\n this.ended.next({ source: this, distance });\n this.dropped.next({\n item: this,\n currentIndex,\n previousIndex: this._initialIndex,\n container: container,\n previousContainer: this._initialContainer,\n isPointerOverContainer,\n distance\n });\n container.drop(this, currentIndex, this._initialContainer, isPointerOverContainer, distance, this._initialIndex);\n this._dropContainer = this._initialContainer;\n });\n }\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n */\n _updateActiveDropContainer({ x, y }, { x: rawX, y: rawY }) {\n // Drop container that draggable has been moved into.\n let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n // If we couldn't find a new container to move the item into, and the item has left its\n // initial container, check whether the it's over the initial container. This handles the\n // case where two containers are connected one way and the user tries to undo dragging an\n // item into a new container.\n if (!newContainer && this._dropContainer !== this._initialContainer &&\n this._initialContainer._isOverContainer(x, y)) {\n newContainer = this._initialContainer;\n }\n if (newContainer && newContainer !== this._dropContainer) {\n this._ngZone.run(() => {\n // Notify the old container that the item has left.\n this.exited.next({ item: this, container: this._dropContainer });\n this._dropContainer.exit(this);\n // Notify the new container that the item has entered.\n this._dropContainer = newContainer;\n this._dropContainer.enter(this, x, y, newContainer === this._initialContainer &&\n // If we're re-entering the initial container and sorting is disabled,\n // put item the into its starting index to begin with.\n newContainer.sortingDisabled ? this._initialIndex : undefined);\n this.entered.next({\n item: this,\n container: newContainer,\n currentIndex: newContainer.getItemIndex(this)\n });\n });\n }\n this._dropContainer._startScrollingIfNecessary(rawX, rawY);\n this._dropContainer._sortItem(this, x, y, this._pointerDirectionDelta);\n this._preview.style.transform =\n getTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);\n }\n /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n */\n _createPreviewElement() {\n const previewConfig = this._previewTemplate;\n const previewClass = this.previewClass;\n const previewTemplate = previewConfig ? previewConfig.template : null;\n let preview;\n if (previewTemplate && previewConfig) {\n // Measure the element before we've inserted the preview\n // since the insertion could throw off the measurement.\n const rootRect = previewConfig.matchSize ? this._rootElement.getBoundingClientRect() : null;\n const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate, previewConfig.context);\n viewRef.detectChanges();\n preview = getRootNode(viewRef, this._document);\n this._previewRef = viewRef;\n if (previewConfig.matchSize) {\n matchElementSize(preview, rootRect);\n }\n else {\n preview.style.transform =\n getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);\n }\n }\n else {\n const element = this._rootElement;\n preview = deepCloneNode(element);\n matchElementSize(preview, element.getBoundingClientRect());\n }\n extendStyles(preview.style, {\n // It's important that we disable the pointer events on the preview, because\n // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n pointerEvents: 'none',\n // We have to reset the margin, because it can throw off positioning relative to the viewport.\n margin: '0',\n position: 'fixed',\n top: '0',\n left: '0',\n zIndex: `${this._config.zIndex || 1000}`\n });\n toggleNativeDragInteractions(preview, false);\n preview.classList.add('cdk-drag-preview');\n preview.setAttribute('dir', this._direction);\n if (previewClass) {\n if (Array.isArray(previewClass)) {\n previewClass.forEach(className => preview.classList.add(className));\n }\n else {\n preview.classList.add(previewClass);\n }\n }\n return preview;\n }\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @returns Promise that resolves when the animation completes.\n */\n _animatePreviewToPlaceholder() {\n // If the user hasn't moved yet, the transitionend event won't fire.\n if (!this._hasMoved) {\n return Promise.resolve();\n }\n const placeholderRect = this._placeholder.getBoundingClientRect();\n // Apply the class that adds a transition to the preview.\n this._preview.classList.add('cdk-drag-animating');\n // Move the preview to the placeholder position.\n this._preview.style.transform = getTransform(placeholderRect.left, placeholderRect.top);\n // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n // apply its style, we take advantage of the available info to figure out whether we need to\n // bind the event in the first place.\n const duration = getTransformTransitionDurationInMs(this._preview);\n if (duration === 0) {\n return Promise.resolve();\n }\n return this._ngZone.runOutsideAngular(() => {\n return new Promise(resolve => {\n const handler = ((event) => {\n if (!event || (event.target === this._preview && event.propertyName === 'transform')) {\n this._preview.removeEventListener('transitionend', handler);\n resolve();\n clearTimeout(timeout);\n }\n });\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler, duration * 1.5);\n this._preview.addEventListener('transitionend', handler);\n });\n });\n }\n /** Creates an element that will be shown instead of the current element while dragging. */\n _createPlaceholderElement() {\n const placeholderConfig = this._placeholderTemplate;\n const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n let placeholder;\n if (placeholderTemplate) {\n this._placeholderRef = placeholderConfig.viewContainer.createEmbeddedView(placeholderTemplate, placeholderConfig.context);\n this._placeholderRef.detectChanges();\n placeholder = getRootNode(this._placeholderRef, this._document);\n }\n else {\n placeholder = deepCloneNode(this._rootElement);\n }\n placeholder.classList.add('cdk-drag-placeholder');\n return placeholder;\n }\n /**\n * Figures out the coordinates at which an element was picked up.\n * @param referenceElement Element that initiated the dragging.\n * @param event Event that initiated the dragging.\n */\n _getPointerPositionInElement(referenceElement, event) {\n const elementRect = this._rootElement.getBoundingClientRect();\n const handleElement = referenceElement === this._rootElement ? null : referenceElement;\n const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n const point = isTouchEvent(event) ? event.targetTouches[0] : event;\n const scrollPosition = this._getViewportScrollPosition();\n const x = point.pageX - referenceRect.left - scrollPosition.left;\n const y = point.pageY - referenceRect.top - scrollPosition.top;\n return {\n x: referenceRect.left - elementRect.left + x,\n y: referenceRect.top - elementRect.top + y\n };\n }\n /** Determines the point of the page that was touched by the user. */\n _getPointerPositionOnPage(event) {\n const scrollPosition = this._getViewportScrollPosition();\n const point = isTouchEvent(event) ?\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`\n // to have a value, but Firefox in device emulation mode has a bug where both can be empty\n // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid\n // throwing an error. The value returned here will be incorrect, but since this only\n // breaks inside a developer tool and the value is only used for secondary information,\n // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.\n (event.touches[0] || event.changedTouches[0] || { pageX: 0, pageY: 0 }) : event;\n const x = point.pageX - scrollPosition.left;\n const y = point.pageY - scrollPosition.top;\n // if dragging SVG element, try to convert from the screen coordinate system to the SVG\n // coordinate system\n if (this._ownerSVGElement) {\n const svgMatrix = this._ownerSVGElement.getScreenCTM();\n if (svgMatrix) {\n const svgPoint = this._ownerSVGElement.createSVGPoint();\n svgPoint.x = x;\n svgPoint.y = y;\n return svgPoint.matrixTransform(svgMatrix.inverse());\n }\n }\n return { x, y };\n }\n /** Gets the pointer position on the page, accounting for any position constraints. */\n _getConstrainedPointerPosition(point) {\n const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n let { x, y } = this.constrainPosition ? this.constrainPosition(point, this) : point;\n if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n y = this._pickupPositionOnPage.y;\n }\n else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n x = this._pickupPositionOnPage.x;\n }\n if (this._boundaryRect) {\n const { x: pickupX, y: pickupY } = this._pickupPositionInElement;\n const boundaryRect = this._boundaryRect;\n const previewRect = this._previewRect;\n const minY = boundaryRect.top + pickupY;\n const maxY = boundaryRect.bottom - (previewRect.height - pickupY);\n const minX = boundaryRect.left + pickupX;\n const maxX = boundaryRect.right - (previewRect.width - pickupX);\n x = clamp(x, minX, maxX);\n y = clamp(y, minY, maxY);\n }\n return { x, y };\n }\n /** Updates the current drag delta, based on the user's current pointer position on the page. */\n _updatePointerDirectionDelta(pointerPositionOnPage) {\n const { x, y } = pointerPositionOnPage;\n const delta = this._pointerDirectionDelta;\n const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n // Amount of pixels the user has dragged since the last time the direction changed.\n const changeX = Math.abs(x - positionSinceLastChange.x);\n const changeY = Math.abs(y - positionSinceLastChange.y);\n // Because we handle pointer events on a per-pixel basis, we don't want the delta\n // to change for every pixel, otherwise anything that depends on it can look erratic.\n // To make the delta more consistent, we track how much the user has moved since the last\n // delta change and we only update it after it has reached a certain threshold.\n if (changeX > this._config.pointerDirectionChangeThreshold) {\n delta.x = x > positionSinceLastChange.x ? 1 : -1;\n positionSinceLastChange.x = x;\n }\n if (changeY > this._config.pointerDirectionChangeThreshold) {\n delta.y = y > positionSinceLastChange.y ? 1 : -1;\n positionSinceLastChange.y = y;\n }\n return delta;\n }\n /** Toggles the native drag interactions, based on how many handles are registered. */\n _toggleNativeDragInteractions() {\n if (!this._rootElement || !this._handles) {\n return;\n }\n const shouldEnable = this._handles.length > 0 || !this.isDragging();\n if (shouldEnable !== this._nativeInteractionsEnabled) {\n this._nativeInteractionsEnabled = shouldEnable;\n toggleNativeDragInteractions(this._rootElement, shouldEnable);\n }\n }\n /** Removes the manually-added event listeners from the root element. */\n _removeRootElementListeners(element) {\n element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n }\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n _applyRootElementTransform(x, y) {\n const transform = getTransform(x, y);\n // Cache the previous transform amount only after the first drag sequence, because\n // we don't want our own transforms to stack on top of each other.\n if (this._initialTransform == null) {\n this._initialTransform = this._rootElement.style.transform || '';\n }\n // Preserve the previous `transform` value, if there was one. Note that we apply our own\n // transform before the user's, because things like rotation can affect which direction\n // the element will be translated towards.\n this._rootElement.style.transform = this._initialTransform ?\n transform + ' ' + this._initialTransform : transform;\n }\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @param currentPosition Current position of the user's pointer.\n */\n _getDragDistance(currentPosition) {\n const pickupPosition = this._pickupPositionOnPage;\n if (pickupPosition) {\n return { x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y };\n }\n return { x: 0, y: 0 };\n }\n /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n _cleanupCachedDimensions() {\n this._boundaryRect = this._previewRect = undefined;\n this._parentPositions.clear();\n }\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n */\n _containInsideBoundaryOnResize() {\n let { x, y } = this._passiveTransform;\n if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {\n return;\n }\n const boundaryRect = this._boundaryElement.getBoundingClientRect();\n const elementRect = this._rootElement.getBoundingClientRect();\n // It's possible that the element got hidden away after dragging (e.g. by switching to a\n // different tab). Don't do anything in this case so we don't clear the user's position.\n if ((boundaryRect.width === 0 && boundaryRect.height === 0) ||\n (elementRect.width === 0 && elementRect.height === 0)) {\n return;\n }\n const leftOverflow = boundaryRect.left - elementRect.left;\n const rightOverflow = elementRect.right - boundaryRect.right;\n const topOverflow = boundaryRect.top - elementRect.top;\n const bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n // If the element has become wider than the boundary, we can't\n // do much to make it fit so we just anchor it to the left.\n if (boundaryRect.width > elementRect.width) {\n if (leftOverflow > 0) {\n x += leftOverflow;\n }\n if (rightOverflow > 0) {\n x -= rightOverflow;\n }\n }\n else {\n x = 0;\n }\n // If the element has become taller than the boundary, we can't\n // do much to make it fit so we just anchor it to the top.\n if (boundaryRect.height > elementRect.height) {\n if (topOverflow > 0) {\n y += topOverflow;\n }\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n }\n }\n else {\n y = 0;\n }\n if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n this.setFreeDragPosition({ y, x });\n }\n }\n /** Gets the drag start delay, based on the event type. */\n _getDragStartDelay(event) {\n const value = this.dragStartDelay;\n if (typeof value === 'number') {\n return value;\n }\n else if (isTouchEvent(event)) {\n return value.touch;\n }\n return value ? value.mouse : 0;\n }\n /** Updates the internal state of the draggable element when scrolling has occurred. */\n _updateOnScroll(event) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n const target = event.target;\n // ClientRect dimensions are based on the scroll position of the page and its parent node so\n // we have to update the cached boundary ClientRect if the user has scrolled. Check for\n // the `document` specifically since IE doesn't support `contains` on it.\n if (this._boundaryRect && (target === this._document ||\n (target !== this._boundaryElement && target.contains(this._boundaryElement)))) {\n adjustClientRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);\n }\n this._pickupPositionOnPage.x += scrollDifference.left;\n this._pickupPositionOnPage.y += scrollDifference.top;\n // If we're in free drag mode, we have to update the active transform, because\n // it isn't relative to the viewport like the preview inside a drop list.\n if (!this._dropContainer) {\n this._activeTransform.x -= scrollDifference.left;\n this._activeTransform.y -= scrollDifference.top;\n this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);\n }\n }\n }\n /** Gets the scroll position of the viewport. */\n _getViewportScrollPosition() {\n const cachedPosition = this._parentPositions.positions.get(this._document);\n return cachedPosition ? cachedPosition.scrollPosition :\n this._viewportRuler.getViewportScrollPosition();\n }\n}\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param x Desired position of the element along the X axis.\n * @param y Desired position of the element along the Y axis.\n */\nfunction getTransform(x, y) {\n // Round the transforms since some browsers will\n // blur the elements for sub-pixel transforms.\n return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n/** Clamps a value between a minimum and a maximum. */\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * Helper to remove a node from the DOM and to do all the necessary null checks.\n * @param node Node to be removed.\n */\nfunction removeNode(node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n/** Determines whether an event is a touch event. */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/** Gets the element into which the drag preview should be inserted. */\nfunction getPreviewInsertionPoint(documentRef) {\n // We can't use the body if the user is in fullscreen mode,\n // because the preview will render under the fullscreen element.\n // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n return documentRef.fullscreenElement ||\n documentRef.webkitFullscreenElement ||\n documentRef.mozFullScreenElement ||\n documentRef.msFullscreenElement ||\n documentRef.body;\n}\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n */\nfunction getRootNode(viewRef, _document) {\n const rootNodes = viewRef.rootNodes;\n if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {\n return rootNodes[0];\n }\n const wrapper = _document.createElement('div');\n rootNodes.forEach(node => wrapper.appendChild(node));\n return wrapper;\n}\n/**\n * Matches the target element's size to the source's size.\n * @param target Element that needs to be resized.\n * @param sourceRect Dimensions of the source element.\n */\nfunction matchElementSize(target, sourceRect) {\n target.style.width = `${sourceRect.width}px`;\n target.style.height = `${sourceRect.height}px`;\n target.style.transform = getTransform(sourceRect.left, sourceRect.top);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nfunction moveItemInArray(array, fromIndex, toIndex) {\n const from = clamp$1(fromIndex, array.length - 1);\n const to = clamp$1(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n const target = array[from];\n const delta = to < from ? -1 : 1;\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nfunction transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const from = clamp$1(currentIndex, currentArray.length - 1);\n const to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nfunction copyArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n/** Clamps a number between zero and a maximum. */\nfunction clamp$1(value, max) {\n return Math.max(0, Math.min(max, value));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Number of pixels to scroll for each frame when auto-scrolling an element.\n * The value comes from trying it out manually until it feels right.\n */\nconst AUTO_SCROLL_STEP = 2;\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n */\nclass DropListRef {\n constructor(element, _dragDropRegistry, _document, _ngZone, _viewportRuler) {\n this._dragDropRegistry = _dragDropRegistry;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n /** Whether starting a dragging sequence from this container is disabled. */\n this.disabled = false;\n /** Whether sorting items within the list is disabled. */\n this.sortingDisabled = false;\n /**\n * Whether auto-scrolling the view when the user\n * moves their pointer close to the edges is disabled.\n */\n this.autoScrollDisabled = false;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Emits right before dragging has started. */\n this.beforeStarted = new Subject();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new Subject();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new Subject();\n /** Emits when the user drops an item inside the container. */\n this.dropped = new Subject();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new Subject();\n /** Whether an item in the list is being dragged. */\n this._isDragging = false;\n /** Cache of the dimensions of all the items inside the container. */\n this._itemPositions = [];\n /**\n * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n * the pointer was moving in when the swap occured and whether the user's pointer continued to\n * overlap with the swapped item after the swapping occurred.\n */\n this._previousSwap = { drag: null, delta: 0, overlaps: false };\n /** Drop lists that are connected to the current one. */\n this._siblings = [];\n /** Direction in which the list is oriented. */\n this._orientation = 'vertical';\n /** Connected siblings that currently have a dragged item. */\n this._activeSiblings = new Set();\n /** Layout direction of the drop list. */\n this._direction = 'ltr';\n /** Subscription to the window being scrolled. */\n this._viewportScrollSubscription = Subscription.EMPTY;\n /** Vertical direction in which the list is currently scrolling. */\n this._verticalScrollDirection = 0 /* NONE */;\n /** Horizontal direction in which the list is currently scrolling. */\n this._horizontalScrollDirection = 0 /* NONE */;\n /** Used to signal to the current auto-scroll sequence when to stop. */\n this._stopScrollTimers = new Subject();\n /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\n this._cachedShadowRoot = null;\n /** Starts the interval that'll auto-scroll the element. */\n this._startScrollInterval = () => {\n this._stopScrolling();\n interval(0, animationFrameScheduler)\n .pipe(takeUntil(this._stopScrollTimers))\n .subscribe(() => {\n const node = this._scrollNode;\n if (this._verticalScrollDirection === 1 /* UP */) {\n incrementVerticalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (this._verticalScrollDirection === 2 /* DOWN */) {\n incrementVerticalScroll(node, AUTO_SCROLL_STEP);\n }\n if (this._horizontalScrollDirection === 1 /* LEFT */) {\n incrementHorizontalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (this._horizontalScrollDirection === 2 /* RIGHT */) {\n incrementHorizontalScroll(node, AUTO_SCROLL_STEP);\n }\n });\n };\n this.element = coerceElement(element);\n this._document = _document;\n this.withScrollableParents([this.element]);\n _dragDropRegistry.registerDropContainer(this);\n this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n }\n /** Removes the drop list functionality from the DOM element. */\n dispose() {\n this._stopScrolling();\n this._stopScrollTimers.complete();\n this._viewportScrollSubscription.unsubscribe();\n this.beforeStarted.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this.sorted.complete();\n this._activeSiblings.clear();\n this._scrollNode = null;\n this._parentPositions.clear();\n this._dragDropRegistry.removeDropContainer(this);\n }\n /** Whether an item from this list is currently being dragged. */\n isDragging() {\n return this._isDragging;\n }\n /** Starts dragging an item. */\n start() {\n const styles = coerceElement(this.element).style;\n this.beforeStarted.next();\n this._isDragging = true;\n // We need to disable scroll snapping while the user is dragging, because it breaks automatic\n // scrolling. The browser seems to round the value based on the snapping points which means\n // that we can't increment/decrement the scroll position.\n this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';\n styles.scrollSnapType = styles.msScrollSnapType = 'none';\n this._cacheItems();\n this._siblings.forEach(sibling => sibling._startReceiving(this));\n this._viewportScrollSubscription.unsubscribe();\n this._listenToScrollEvents();\n }\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item, pointerX, pointerY, index) {\n this.start();\n // If sorting is disabled, we want the item to return to its starting\n // position if the user is returning it to its initial container.\n let newIndex;\n if (index == null) {\n newIndex = this.sortingDisabled ? this._draggables.indexOf(item) : -1;\n if (newIndex === -1) {\n // We use the coordinates of where the item entered the drop\n // zone to figure out at which index it should be inserted.\n newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);\n }\n }\n else {\n newIndex = index;\n }\n const activeDraggables = this._activeDraggables;\n const currentIndex = activeDraggables.indexOf(item);\n const placeholder = item.getPlaceholderElement();\n let newPositionReference = activeDraggables[newIndex];\n // If the item at the new position is the same as the item that is being dragged,\n // it means that we're trying to restore the item to its initial position. In this\n // case we should use the next item from the list as the reference.\n if (newPositionReference === item) {\n newPositionReference = activeDraggables[newIndex + 1];\n }\n // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n // into another container and back again), we have to ensure that it isn't duplicated.\n if (currentIndex > -1) {\n activeDraggables.splice(currentIndex, 1);\n }\n // Don't use items that are being dragged as a reference, because\n // their element has been moved down to the bottom of the body.\n if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n const element = newPositionReference.getRootElement();\n element.parentElement.insertBefore(placeholder, element);\n activeDraggables.splice(newIndex, 0, item);\n }\n else if (this._shouldEnterAsFirstChild(pointerX, pointerY)) {\n const reference = activeDraggables[0].getRootElement();\n reference.parentNode.insertBefore(placeholder, reference);\n activeDraggables.unshift(item);\n }\n else {\n coerceElement(this.element).appendChild(placeholder);\n activeDraggables.push(item);\n }\n // The transform needs to be cleared so it doesn't throw off the measurements.\n placeholder.style.transform = '';\n // Note that the positions were already cached when we called `start` above,\n // but we need to refresh them since the amount of items has changed and also parent rects.\n this._cacheItemPositions();\n this._cacheParentPositions();\n this.entered.next({ item, container: this, currentIndex: this.getItemIndex(item) });\n }\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n exit(item) {\n this._reset();\n this.exited.next({ item, container: this });\n }\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param distance Distance the user has dragged since the start of the dragging sequence.\n * @param previousIndex Index of the item when dragging started.\n *\n * @breaking-change 11.0.0 `previousIndex` parameter to become required.\n */\n drop(item, currentIndex, previousContainer, isPointerOverContainer, distance, previousIndex) {\n this._reset();\n // @breaking-change 11.0.0 Remove this fallback logic once `previousIndex` is a required param.\n if (previousIndex == null) {\n previousIndex = previousContainer.getItemIndex(item);\n }\n this.dropped.next({ item,\n currentIndex,\n previousIndex,\n container: this,\n previousContainer,\n isPointerOverContainer,\n distance\n });\n }\n /**\n * Sets the draggable items that are a part of this list.\n * @param items Items that are a part of this list.\n */\n withItems(items) {\n const previousItems = this._draggables;\n this._draggables = items;\n items.forEach(item => item._withDropContainer(this));\n if (this.isDragging()) {\n const draggedItems = previousItems.filter(item => item.isDragging());\n // If all of the items being dragged were removed\n // from the list, abort the current drag sequence.\n if (draggedItems.every(item => items.indexOf(item) === -1)) {\n this._reset();\n }\n else {\n this._cacheItems();\n }\n }\n return this;\n }\n /** Sets the layout direction of the drop list. */\n withDirection(direction) {\n this._direction = direction;\n return this;\n }\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @param connectedTo Other containers that the current containers should be connected to.\n */\n connectedTo(connectedTo) {\n this._siblings = connectedTo.slice();\n return this;\n }\n /**\n * Sets the orientation of the container.\n * @param orientation New orientation for the container.\n */\n withOrientation(orientation) {\n this._orientation = orientation;\n return this;\n }\n /**\n * Sets which parent elements are can be scrolled while the user is dragging.\n * @param elements Elements that can be scrolled.\n */\n withScrollableParents(elements) {\n const element = coerceElement(this.element);\n // We always allow the current element to be scrollable\n // so we need to ensure that it's in the array.\n this._scrollableElements =\n elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();\n return this;\n }\n /** Gets the scrollable parents that are registered with this drop container. */\n getScrollableParents() {\n return this._scrollableElements;\n }\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n getItemIndex(item) {\n if (!this._isDragging) {\n return this._draggables.indexOf(item);\n }\n // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n // The rest of the logic still stands no matter what orientation we're in, however\n // we need to invert the array when determining the index.\n const items = this._orientation === 'horizontal' && this._direction === 'rtl' ?\n this._itemPositions.slice().reverse() : this._itemPositions;\n return findIndex(items, currentItem => currentItem.drag === item);\n }\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n */\n isReceiving() {\n return this._activeSiblings.size > 0;\n }\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n _sortItem(item, pointerX, pointerY, pointerDelta) {\n // Don't sort the item if sorting is disabled or it's out of range.\n if (this.sortingDisabled ||\n !isPointerNearClientRect(this._clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n return;\n }\n const siblings = this._itemPositions;\n const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n if (newIndex === -1 && siblings.length > 0) {\n return;\n }\n const isHorizontal = this._orientation === 'horizontal';\n const currentIndex = findIndex(siblings, currentItem => currentItem.drag === item);\n const siblingAtNewPosition = siblings[newIndex];\n const currentPosition = siblings[currentIndex].clientRect;\n const newPosition = siblingAtNewPosition.clientRect;\n const delta = currentIndex > newIndex ? 1 : -1;\n // How many pixels the item's placeholder should be offset.\n const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n // How many pixels all the other items should be offset.\n const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n // Save the previous order of the items before moving the item to its new index.\n // We use this to check whether an item has been moved as a result of the sorting.\n const oldOrder = siblings.slice();\n // Shuffle the array in place.\n moveItemInArray(siblings, currentIndex, newIndex);\n this.sorted.next({\n previousIndex: currentIndex,\n currentIndex: newIndex,\n container: this,\n item\n });\n siblings.forEach((sibling, index) => {\n // Don't do anything if the position hasn't changed.\n if (oldOrder[index] === sibling) {\n return;\n }\n const isDraggedItem = sibling.drag === item;\n const offset = isDraggedItem ? itemOffset : siblingOffset;\n const elementToOffset = isDraggedItem ? item.getPlaceholderElement() :\n sibling.drag.getRootElement();\n // Update the offset to reflect the new position.\n sibling.offset += offset;\n // Since we're moving the items with a `transform`, we need to adjust their cached\n // client rects to reflect their new position, as well as swap their positions in the cache.\n // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n // elements may be mid-animation which will give us a wrong result.\n if (isHorizontal) {\n // Round the transforms since some browsers will\n // blur the elements, for sub-pixel transforms.\n elementToOffset.style.transform = `translate3d(${Math.round(sibling.offset)}px, 0, 0)`;\n adjustClientRect(sibling.clientRect, 0, offset);\n }\n else {\n elementToOffset.style.transform = `translate3d(0, ${Math.round(sibling.offset)}px, 0)`;\n adjustClientRect(sibling.clientRect, offset, 0);\n }\n });\n // Note that it's important that we do this after the client rects have been adjusted.\n this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);\n this._previousSwap.drag = siblingAtNewPosition.drag;\n this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n }\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param pointerX User's pointer position along the x axis.\n * @param pointerY User's pointer position along the y axis.\n */\n _startScrollingIfNecessary(pointerX, pointerY) {\n if (this.autoScrollDisabled) {\n return;\n }\n let scrollNode;\n let verticalScrollDirection = 0 /* NONE */;\n let horizontalScrollDirection = 0 /* NONE */;\n // Check whether we should start scrolling any of the parent containers.\n this._parentPositions.positions.forEach((position, element) => {\n // We have special handling for the `document` below. Also this would be\n // nicer with a for...of loop, but it requires changing a compiler flag.\n if (element === this._document || !position.clientRect || scrollNode) {\n return;\n }\n if (isPointerNearClientRect(position.clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(element, position.clientRect, pointerX, pointerY);\n if (verticalScrollDirection || horizontalScrollDirection) {\n scrollNode = element;\n }\n }\n });\n // Otherwise check if we can start scrolling the viewport.\n if (!verticalScrollDirection && !horizontalScrollDirection) {\n const { width, height } = this._viewportRuler.getViewportSize();\n const clientRect = { width, height, top: 0, right: width, bottom: height, left: 0 };\n verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);\n horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n scrollNode = window;\n }\n if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection ||\n horizontalScrollDirection !== this._horizontalScrollDirection ||\n scrollNode !== this._scrollNode)) {\n this._verticalScrollDirection = verticalScrollDirection;\n this._horizontalScrollDirection = horizontalScrollDirection;\n this._scrollNode = scrollNode;\n if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n this._ngZone.runOutsideAngular(this._startScrollInterval);\n }\n else {\n this._stopScrolling();\n }\n }\n }\n /** Stops any currently-running auto-scroll sequences. */\n _stopScrolling() {\n this._stopScrollTimers.next();\n }\n /** Caches the positions of the configured scrollable parents. */\n _cacheParentPositions() {\n const element = coerceElement(this.element);\n this._parentPositions.cache(this._scrollableElements);\n // The list element is always in the `scrollableElements`\n // so we can take advantage of the cached `ClientRect`.\n this._clientRect = this._parentPositions.positions.get(element).clientRect;\n }\n /** Refreshes the position cache of the items and sibling containers. */\n _cacheItemPositions() {\n const isHorizontal = this._orientation === 'horizontal';\n this._itemPositions = this._activeDraggables.map(drag => {\n const elementToMeasure = drag.getVisibleElement();\n return { drag, offset: 0, clientRect: getMutableClientRect(elementToMeasure) };\n }).sort((a, b) => {\n return isHorizontal ? a.clientRect.left - b.clientRect.left :\n a.clientRect.top - b.clientRect.top;\n });\n }\n /** Resets the container to its initial state. */\n _reset() {\n this._isDragging = false;\n const styles = coerceElement(this.element).style;\n styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;\n // TODO(crisbeto): may have to wait for the animations to finish.\n this._activeDraggables.forEach(item => {\n const rootElement = item.getRootElement();\n if (rootElement) {\n rootElement.style.transform = '';\n }\n });\n this._siblings.forEach(sibling => sibling._stopReceiving(this));\n this._activeDraggables = [];\n this._itemPositions = [];\n this._previousSwap.drag = null;\n this._previousSwap.delta = 0;\n this._previousSwap.overlaps = false;\n this._stopScrolling();\n this._viewportScrollSubscription.unsubscribe();\n this._parentPositions.clear();\n }\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @param currentIndex Index of the item currently being dragged.\n * @param siblings All of the items in the list.\n * @param delta Direction in which the user is moving.\n */\n _getSiblingOffsetPx(currentIndex, siblings, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n const currentPosition = siblings[currentIndex].clientRect;\n const immediateSibling = siblings[currentIndex + delta * -1];\n let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n if (immediateSibling) {\n const start = isHorizontal ? 'left' : 'top';\n const end = isHorizontal ? 'right' : 'bottom';\n // Get the spacing between the start of the current item and the end of the one immediately\n // after it in the direction in which the user is dragging, or vice versa. We add it to the\n // offset in order to push the element to where it will be when it's inline and is influenced\n // by the `margin` of its siblings.\n if (delta === -1) {\n siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n }\n else {\n siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n }\n }\n return siblingOffset;\n }\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @param currentPosition Current position of the item.\n * @param newPosition Position of the item where the current item should be moved.\n * @param delta Direction in which the user is moving.\n */\n _getItemOffsetPx(currentPosition, newPosition, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n let itemOffset = isHorizontal ? newPosition.left - currentPosition.left :\n newPosition.top - currentPosition.top;\n // Account for differences in the item width/height.\n if (delta === -1) {\n itemOffset += isHorizontal ? newPosition.width - currentPosition.width :\n newPosition.height - currentPosition.height;\n }\n return itemOffset;\n }\n /**\n * Checks if pointer is entering in the first position\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n */\n _shouldEnterAsFirstChild(pointerX, pointerY) {\n if (!this._activeDraggables.length) {\n return false;\n }\n const itemPositions = this._itemPositions;\n const isHorizontal = this._orientation === 'horizontal';\n // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index\n // check if container is using some sort of \"reverse\" ordering (eg: flex-direction: row-reverse)\n const reversed = itemPositions[0].drag !== this._activeDraggables[0];\n if (reversed) {\n const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;\n return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;\n }\n else {\n const firstItemRect = itemPositions[0].clientRect;\n return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;\n }\n }\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n _getItemIndexFromPointerPosition(item, pointerX, pointerY, delta) {\n const isHorizontal = this._orientation === 'horizontal';\n return findIndex(this._itemPositions, ({ drag, clientRect }, _, array) => {\n if (drag === item) {\n // If there's only one item left in the container, it must be\n // the dragged item itself so we use it as a reference.\n return array.length < 2;\n }\n if (delta) {\n const direction = isHorizontal ? delta.x : delta.y;\n // If the user is still hovering over the same item as last time, their cursor hasn't left\n // the item after we made the swap, and they didn't change the direction in which they're\n // dragging, we don't consider it a direction swap.\n if (drag === this._previousSwap.drag && this._previousSwap.overlaps &&\n direction === this._previousSwap.delta) {\n return false;\n }\n }\n return isHorizontal ?\n // Round these down since most browsers report client rects with\n // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right) :\n pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);\n });\n }\n /** Caches the current items in the list and their positions. */\n _cacheItems() {\n this._activeDraggables = this._draggables.slice();\n this._cacheItemPositions();\n this._cacheParentPositions();\n }\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n _isOverContainer(x, y) {\n return isInsideClientRect(this._clientRect, x, y);\n }\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _getSiblingContainerFromPosition(item, x, y) {\n return this._siblings.find(sibling => sibling._canReceive(item, x, y));\n }\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param item Item that is being dragged into the list.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _canReceive(item, x, y) {\n if (!isInsideClientRect(this._clientRect, x, y) || !this.enterPredicate(item, this)) {\n return false;\n }\n const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y);\n // If there's no element at the pointer position, then\n // the client rect is probably scrolled out of the view.\n if (!elementFromPoint) {\n return false;\n }\n const nativeElement = coerceElement(this.element);\n // The `ClientRect`, that we're using to find the container over which the user is\n // hovering, doesn't give us any information on whether the element has been scrolled\n // out of the view or whether it's overlapping with other containers. This means that\n // we could end up transferring the item into a container that's invisible or is positioned\n // below another one. We use the result from `elementFromPoint` to get the top-most element\n // at the pointer position and to find whether it's one of the intersecting drop containers.\n return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);\n }\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param sibling Sibling in which dragging has started.\n */\n _startReceiving(sibling) {\n const activeSiblings = this._activeSiblings;\n if (!activeSiblings.has(sibling)) {\n activeSiblings.add(sibling);\n this._cacheParentPositions();\n this._listenToScrollEvents();\n }\n }\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param sibling Sibling whose dragging has stopped.\n */\n _stopReceiving(sibling) {\n this._activeSiblings.delete(sibling);\n this._viewportScrollSubscription.unsubscribe();\n }\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n */\n _listenToScrollEvents() {\n this._viewportScrollSubscription = this._dragDropRegistry.scroll.subscribe(event => {\n if (this.isDragging()) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n // Since we know the amount that the user has scrolled we can shift all of the\n // client rectangles ourselves. This is cheaper than re-measuring everything and\n // we can avoid inconsistent behavior where we might be measuring the element before\n // its position has changed.\n this._itemPositions.forEach(({ clientRect }) => {\n adjustClientRect(clientRect, scrollDifference.top, scrollDifference.left);\n });\n // We need two loops for this, because we want all of the cached\n // positions to be up-to-date before we re-sort the item.\n this._itemPositions.forEach(({ drag }) => {\n if (this._dragDropRegistry.isDragging(drag)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n drag._sortFromLastPointerPosition();\n }\n });\n }\n }\n else if (this.isReceiving()) {\n this._cacheParentPositions();\n }\n });\n }\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n _getShadowRoot() {\n if (!this._cachedShadowRoot) {\n const shadowRoot = _getShadowRoot(coerceElement(this.element));\n this._cachedShadowRoot = shadowRoot || this._document;\n }\n return this._cachedShadowRoot;\n }\n}\n/**\n * Finds the index of an item that matches a predicate function. Used as an equivalent\n * of `Array.prototype.findIndex` which isn't part of the standard Google typings.\n * @param array Array in which to look for matches.\n * @param predicate Function used to determine whether an item is a match.\n */\nfunction findIndex(array, predicate) {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Increments the vertical scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementVerticalScroll(node, amount) {\n if (node === window) {\n node.scrollBy(0, amount);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n node.scrollTop += amount;\n }\n}\n/**\n * Increments the horizontal scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementHorizontalScroll(node, amount) {\n if (node === window) {\n node.scrollBy(amount, 0);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n node.scrollLeft += amount;\n }\n}\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect, pointerY) {\n const { top, bottom, height } = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return 1 /* UP */;\n }\n else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return 2 /* DOWN */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect, pointerX) {\n const { left, right, width } = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return 1 /* LEFT */;\n }\n else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return 2 /* RIGHT */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param element Element for which we should calculate the scroll direction.\n * @param clientRect Bounding client rectangle of the element.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getElementScrollDirections(element, clientRect, pointerX, pointerY) {\n const computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n let verticalScrollDirection = 0 /* NONE */;\n let horizontalScrollDirection = 0 /* NONE */;\n // Note that we here we do some extra checks for whether the element is actually scrollable in\n // a certain direction and we only assign the scroll direction if it is. We do this so that we\n // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n if (computedVertical) {\n const scrollTop = element.scrollTop;\n if (computedVertical === 1 /* UP */) {\n if (scrollTop > 0) {\n verticalScrollDirection = 1 /* UP */;\n }\n }\n else if (element.scrollHeight - scrollTop > element.clientHeight) {\n verticalScrollDirection = 2 /* DOWN */;\n }\n }\n if (computedHorizontal) {\n const scrollLeft = element.scrollLeft;\n if (computedHorizontal === 1 /* LEFT */) {\n if (scrollLeft > 0) {\n horizontalScrollDirection = 1 /* LEFT */;\n }\n }\n else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n horizontalScrollDirection = 2 /* RIGHT */;\n }\n }\n return [verticalScrollDirection, horizontalScrollDirection];\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\n// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order\n// to avoid circular imports. If we were to reference them here, importing the registry into the\n// classes that are registering themselves will introduce a circular import.\nclass DragDropRegistry {\n constructor(_ngZone, _document) {\n this._ngZone = _ngZone;\n /** Registered drop container instances. */\n this._dropInstances = new Set();\n /** Registered drag item instances. */\n this._dragInstances = new Set();\n /** Drag item instances that are currently being dragged. */\n this._activeDragInstances = new Set();\n /** Keeps track of the event listeners that we've bound to the `document`. */\n this._globalListeners = new Map();\n /**\n * Emits the `touchmove` or `mousemove` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerMove = new Subject();\n /**\n * Emits the `touchend` or `mouseup` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerUp = new Subject();\n /** Emits when the viewport has been scrolled while the user is dragging an item. */\n this.scroll = new Subject();\n /**\n * Event listener that will prevent the default browser action while the user is dragging.\n * @param event Event whose default action should be prevented.\n */\n this._preventDefaultWhileDragging = (event) => {\n if (this._activeDragInstances.size) {\n event.preventDefault();\n }\n };\n this._document = _document;\n }\n /** Adds a drop container to the registry. */\n registerDropContainer(drop) {\n if (!this._dropInstances.has(drop)) {\n this._dropInstances.add(drop);\n }\n }\n /** Adds a drag item instance to the registry. */\n registerDragItem(drag) {\n this._dragInstances.add(drag);\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n if (this._dragInstances.size === 1) {\n this._ngZone.runOutsideAngular(() => {\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n this._document.addEventListener('touchmove', this._preventDefaultWhileDragging, activeCapturingEventOptions);\n });\n }\n }\n /** Removes a drop container from the registry. */\n removeDropContainer(drop) {\n this._dropInstances.delete(drop);\n }\n /** Removes a drag item instance from the registry. */\n removeDragItem(drag) {\n this._dragInstances.delete(drag);\n this.stopDragging(drag);\n if (this._dragInstances.size === 0) {\n this._document.removeEventListener('touchmove', this._preventDefaultWhileDragging, activeCapturingEventOptions);\n }\n }\n /**\n * Starts the dragging sequence for a drag instance.\n * @param drag Drag instance which is being dragged.\n * @param event Event that initiated the dragging.\n */\n startDragging(drag, event) {\n // Do not process the same drag twice to avoid memory leaks and redundant listeners\n if (this._activeDragInstances.has(drag)) {\n return;\n }\n this._activeDragInstances.add(drag);\n if (this._activeDragInstances.size === 1) {\n const isTouchEvent = event.type.startsWith('touch');\n const moveEvent = isTouchEvent ? 'touchmove' : 'mousemove';\n const upEvent = isTouchEvent ? 'touchend' : 'mouseup';\n // We explicitly bind __active__ listeners here, because newer browsers will default to\n // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n this._globalListeners\n .set(moveEvent, {\n handler: (e) => this.pointerMove.next(e),\n options: activeCapturingEventOptions\n })\n .set(upEvent, {\n handler: (e) => this.pointerUp.next(e),\n options: true\n })\n .set('scroll', {\n handler: (e) => this.scroll.next(e),\n // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n // the document. See https://github.com/angular/components/issues/17144.\n options: true\n })\n // Preventing the default action on `mousemove` isn't enough to disable text selection\n // on Safari so we need to prevent the selection event as well. Alternatively this can\n // be done by setting `user-select: none` on the `body`, however it has causes a style\n // recalculation which can be expensive on pages with a lot of elements.\n .set('selectstart', {\n handler: this._preventDefaultWhileDragging,\n options: activeCapturingEventOptions\n });\n this._ngZone.runOutsideAngular(() => {\n this._globalListeners.forEach((config, name) => {\n this._document.addEventListener(name, config.handler, config.options);\n });\n });\n }\n }\n /** Stops dragging a drag item instance. */\n stopDragging(drag) {\n this._activeDragInstances.delete(drag);\n if (this._activeDragInstances.size === 0) {\n this._clearGlobalListeners();\n }\n }\n /** Gets whether a drag item instance is currently being dragged. */\n isDragging(drag) {\n return this._activeDragInstances.has(drag);\n }\n ngOnDestroy() {\n this._dragInstances.forEach(instance => this.removeDragItem(instance));\n this._dropInstances.forEach(instance => this.removeDropContainer(instance));\n this._clearGlobalListeners();\n this.pointerMove.complete();\n this.pointerUp.complete();\n }\n /** Clears out the global event listeners from the `document`. */\n _clearGlobalListeners() {\n this._globalListeners.forEach((config, name) => {\n this._document.removeEventListener(name, config.handler, config.options);\n });\n this._globalListeners.clear();\n }\n}\nDragDropRegistry.ɵfac = function DragDropRegistry_Factory(t) { return new (t || DragDropRegistry)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DOCUMENT)); };\nDragDropRegistry.ɵprov = ɵɵdefineInjectable({ factory: function DragDropRegistry_Factory() { return new DragDropRegistry(ɵɵinject(NgZone), ɵɵinject(DOCUMENT)); }, token: DragDropRegistry, providedIn: \"root\" });\nDragDropRegistry.ctorParameters = () => [\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDropRegistry, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 5\n};\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\nclass DragDrop {\n constructor(_document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n }\n /**\n * Turns an element into a draggable item.\n * @param element Element to which to attach the dragging functionality.\n * @param config Object used to configure the dragging behavior.\n */\n createDrag(element, config = DEFAULT_CONFIG) {\n return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);\n }\n /**\n * Turns an element into a drop list.\n * @param element Element to which to attach the drop list functionality.\n */\n createDropList(element) {\n return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);\n }\n}\nDragDrop.ɵfac = function DragDrop_Factory(t) { return new (t || DragDrop)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵinject(DragDropRegistry)); };\nDragDrop.ɵprov = ɵɵdefineInjectable({ factory: function DragDrop_Factory() { return new DragDrop(ɵɵinject(DOCUMENT), ɵɵinject(NgZone), ɵɵinject(ViewportRuler), ɵɵinject(DragDropRegistry)); }, token: DragDrop, providedIn: \"root\" });\nDragDrop.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewportRuler },\n { type: DragDropRegistry }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDrop, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.ViewportRuler }, { type: DragDropRegistry }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST_GROUP = new InjectionToken('CdkDropListGroup');\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\nclass CdkDropListGroup {\n constructor() {\n /** Drop lists registered inside the group. */\n this._items = new Set();\n this._disabled = false;\n }\n /** Whether starting a dragging sequence from inside this group is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n ngOnDestroy() {\n this._items.clear();\n }\n}\nCdkDropListGroup.ɵfac = function CdkDropListGroup_Factory(t) { return new (t || CdkDropListGroup)(); };\nCdkDropListGroup.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDropListGroup, selectors: [[\"\", \"cdkDropListGroup\", \"\"]], inputs: { disabled: [\"cdkDropListGroupDisabled\", \"disabled\"] }, exportAs: [\"cdkDropListGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }])] });\nCdkDropListGroup.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDropListGroupDisabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDropListGroup, [{\n type: Directive,\n args: [{\n selector: '[cdkDropListGroup]',\n exportAs: 'cdkDropListGroup',\n providers: [{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }]\n }]\n }], function () { return []; }, { disabled: [{\n type: Input,\n args: ['cdkDropListGroupDisabled']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to configure the\n * behavior of the drag&drop-related components.\n */\nconst CDK_DRAG_CONFIG = new InjectionToken('CDK_DRAG_CONFIG');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Counter used to generate unique ids for drop zones. */\nlet _uniqueIdCounter = 0;\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST = new InjectionToken('CdkDropList');\nconst ɵ0 = undefined;\n/** Container that wraps a set of draggable items. */\nclass CdkDropList {\n constructor(\n /** Element that the drop list is attached to. */\n element, dragDrop, _changeDetectorRef, _dir, _group, \n /**\n * @deprecated _scrollDispatcher parameter to become required.\n * @breaking-change 11.0.0\n */\n _scrollDispatcher, config) {\n this.element = element;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._group = _group;\n this._scrollDispatcher = _scrollDispatcher;\n /** Emits when the list has been destroyed. */\n this._destroyed = new Subject();\n /**\n * Other draggable containers that this container is connected to and into which the\n * container's items can be transferred. Can either be references to other drop containers,\n * or their unique IDs.\n */\n this.connectedTo = [];\n /**\n * Unique ID for the drop zone. Can be used as a reference\n * in the `connectedTo` of another `CdkDropList`.\n */\n this.id = `cdk-drop-list-${_uniqueIdCounter++}`;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Emits when the user drops an item inside the container. */\n this.dropped = new EventEmitter();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new EventEmitter();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new EventEmitter();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new EventEmitter();\n /**\n * Keeps track of the items that are registered with this container. Historically we used to\n * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n * well which means that we can't handle cases like dragging the headers of a `mat-table`\n * correctly. What we do instead is to have the items register themselves with the container\n * and then we sort them based on their position in the DOM.\n */\n this._unsortedItems = new Set();\n this._dropListRef = dragDrop.createDropList(element);\n this._dropListRef.data = this;\n if (config) {\n this._assignDefaults(config);\n }\n this._dropListRef.enterPredicate = (drag, drop) => {\n return this.enterPredicate(drag.data, drop.data);\n };\n this._setupInputSyncSubscription(this._dropListRef);\n this._handleEvents(this._dropListRef);\n CdkDropList._dropLists.push(this);\n if (_group) {\n _group._items.add(this);\n }\n }\n /** Whether starting a dragging sequence from this container is disabled. */\n get disabled() {\n return this._disabled || (!!this._group && this._group.disabled);\n }\n set disabled(value) {\n // Usually we sync the directive and ref state right before dragging starts, in order to have\n // a single point of failure and to avoid having to use setters for everything. `disabled` is\n // a special case, because it can prevent the `beforeStarted` event from firing, which can lock\n // the user in a disabled state, so we also need to sync it as it's being set.\n this._dropListRef.disabled = this._disabled = coerceBooleanProperty(value);\n }\n /** Registers an items with the drop list. */\n addItem(item) {\n this._unsortedItems.add(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Removes an item from the drop list. */\n removeItem(item) {\n this._unsortedItems.delete(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Gets the registered items in the list, sorted by their position in the DOM. */\n getSortedItems() {\n return Array.from(this._unsortedItems).sort((a, b) => {\n const documentPosition = a._dragRef.getVisibleElement().compareDocumentPosition(b._dragRef.getVisibleElement());\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n }\n ngOnDestroy() {\n const index = CdkDropList._dropLists.indexOf(this);\n if (index > -1) {\n CdkDropList._dropLists.splice(index, 1);\n }\n if (this._group) {\n this._group._items.delete(this);\n }\n this._unsortedItems.clear();\n this._dropListRef.dispose();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n _setupInputSyncSubscription(ref) {\n if (this._dir) {\n this._dir.change\n .pipe(startWith(this._dir.value), takeUntil(this._destroyed))\n .subscribe(value => ref.withDirection(value));\n }\n ref.beforeStarted.subscribe(() => {\n const siblings = coerceArray(this.connectedTo).map(drop => {\n if (typeof drop === 'string') {\n const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);\n if (!correspondingDropList && isDevMode()) {\n console.warn(`CdkDropList could not find connected drop list with id \"${drop}\"`);\n }\n return correspondingDropList;\n }\n return drop;\n });\n if (this._group) {\n this._group._items.forEach(drop => {\n if (siblings.indexOf(drop) === -1) {\n siblings.push(drop);\n }\n });\n }\n // Note that we resolve the scrollable parents here so that we delay the resolution\n // as long as possible, ensuring that the element is in its final place in the DOM.\n // @breaking-change 11.0.0 Remove null check for _scrollDispatcher once it's required.\n if (!this._scrollableParentsResolved && this._scrollDispatcher) {\n const scrollableParents = this._scrollDispatcher\n .getAncestorScrollContainers(this.element)\n .map(scrollable => scrollable.getElementRef().nativeElement);\n this._dropListRef.withScrollableParents(scrollableParents);\n // Only do this once since it involves traversing the DOM and the parents\n // shouldn't be able to change without the drop list being destroyed.\n this._scrollableParentsResolved = true;\n }\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.sortingDisabled = coerceBooleanProperty(this.sortingDisabled);\n ref.autoScrollDisabled = coerceBooleanProperty(this.autoScrollDisabled);\n ref\n .connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef))\n .withOrientation(this.orientation);\n });\n }\n /** Handles events from the underlying DropListRef. */\n _handleEvents(ref) {\n ref.beforeStarted.subscribe(() => {\n this._syncItemsWithRef();\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: this,\n item: event.item.data,\n currentIndex: event.currentIndex\n });\n });\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: this,\n item: event.item.data\n });\n this._changeDetectorRef.markForCheck();\n });\n ref.sorted.subscribe(event => {\n this.sorted.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n container: this,\n item: event.item.data\n });\n });\n ref.dropped.subscribe(event => {\n this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n item: event.item.data,\n isPointerOverContainer: event.isPointerOverContainer,\n distance: event.distance\n });\n // Mark for check since all of these events run outside of change\n // detection and we're not guaranteed for something else to have triggered it.\n this._changeDetectorRef.markForCheck();\n });\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const { lockAxis, draggingDisabled, sortingDisabled, listAutoScrollDisabled, listOrientation } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;\n this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;\n this.orientation = listOrientation || 'vertical';\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n }\n /** Syncs up the registered drag items with underlying drop list ref. */\n _syncItemsWithRef() {\n this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));\n }\n}\nCdkDropList.ɵfac = function CdkDropList_Factory(t) { return new (t || CdkDropList)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST_GROUP, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8)); };\nCdkDropList.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDropList, selectors: [[\"\", \"cdkDropList\", \"\"], [\"cdk-drop-list\"]], hostAttrs: [1, \"cdk-drop-list\"], hostVars: 7, hostBindings: function CdkDropList_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n ɵngcc0.ɵɵclassProp(\"cdk-drop-list-disabled\", ctx.disabled)(\"cdk-drop-list-dragging\", ctx._dropListRef.isDragging())(\"cdk-drop-list-receiving\", ctx._dropListRef.isReceiving());\n } }, inputs: { connectedTo: [\"cdkDropListConnectedTo\", \"connectedTo\"], id: \"id\", enterPredicate: [\"cdkDropListEnterPredicate\", \"enterPredicate\"], disabled: [\"cdkDropListDisabled\", \"disabled\"], sortingDisabled: [\"cdkDropListSortingDisabled\", \"sortingDisabled\"], autoScrollDisabled: [\"cdkDropListAutoScrollDisabled\", \"autoScrollDisabled\"], orientation: [\"cdkDropListOrientation\", \"orientation\"], lockAxis: [\"cdkDropListLockAxis\", \"lockAxis\"], data: [\"cdkDropListData\", \"data\"] }, outputs: { dropped: \"cdkDropListDropped\", entered: \"cdkDropListEntered\", exited: \"cdkDropListExited\", sorted: \"cdkDropListSorted\" }, exportAs: [\"cdkDropList\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Prevent child drop lists from picking up the same group as their parent.\n { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },\n { provide: CDK_DROP_LIST, useExisting: CdkDropList },\n ])] });\n/** Keeps track of the drop lists that are currently on the page. */\nCdkDropList._dropLists = [];\nCdkDropList.ctorParameters = () => [\n { type: ElementRef },\n { type: DragDrop },\n { type: ChangeDetectorRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: CdkDropListGroup, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DROP_LIST_GROUP,] }, { type: SkipSelf }] },\n { type: ScrollDispatcher },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] }\n];\nCdkDropList.propDecorators = {\n connectedTo: [{ type: Input, args: ['cdkDropListConnectedTo',] }],\n data: [{ type: Input, args: ['cdkDropListData',] }],\n orientation: [{ type: Input, args: ['cdkDropListOrientation',] }],\n id: [{ type: Input }],\n lockAxis: [{ type: Input, args: ['cdkDropListLockAxis',] }],\n disabled: [{ type: Input, args: ['cdkDropListDisabled',] }],\n sortingDisabled: [{ type: Input, args: ['cdkDropListSortingDisabled',] }],\n enterPredicate: [{ type: Input, args: ['cdkDropListEnterPredicate',] }],\n autoScrollDisabled: [{ type: Input, args: ['cdkDropListAutoScrollDisabled',] }],\n dropped: [{ type: Output, args: ['cdkDropListDropped',] }],\n entered: [{ type: Output, args: ['cdkDropListEntered',] }],\n exited: [{ type: Output, args: ['cdkDropListExited',] }],\n sorted: [{ type: Output, args: ['cdkDropListSorted',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDropList, [{\n type: Directive,\n args: [{\n selector: '[cdkDropList], cdk-drop-list',\n exportAs: 'cdkDropList',\n providers: [\n // Prevent child drop lists from picking up the same group as their parent.\n { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },\n { provide: CDK_DROP_LIST, useExisting: CdkDropList },\n ],\n host: {\n 'class': 'cdk-drop-list',\n '[id]': 'id',\n '[class.cdk-drop-list-disabled]': 'disabled',\n '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()'\n }\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: CdkDropListGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DROP_LIST_GROUP]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc1.ScrollDispatcher }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DRAG_CONFIG]\n }] }]; }, { connectedTo: [{\n type: Input,\n args: ['cdkDropListConnectedTo']\n }], id: [{\n type: Input\n }], enterPredicate: [{\n type: Input,\n args: ['cdkDropListEnterPredicate']\n }], dropped: [{\n type: Output,\n args: ['cdkDropListDropped']\n }], entered: [{\n type: Output,\n args: ['cdkDropListEntered']\n }], exited: [{\n type: Output,\n args: ['cdkDropListExited']\n }], sorted: [{\n type: Output,\n args: ['cdkDropListSorted']\n }], disabled: [{\n type: Input,\n args: ['cdkDropListDisabled']\n }], sortingDisabled: [{\n type: Input,\n args: ['cdkDropListSortingDisabled']\n }], autoScrollDisabled: [{\n type: Input,\n args: ['cdkDropListAutoScrollDisabled']\n }], orientation: [{\n type: Input,\n args: ['cdkDropListOrientation']\n }], lockAxis: [{\n type: Input,\n args: ['cdkDropListLockAxis']\n }], data: [{\n type: Input,\n args: ['cdkDropListData']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * @docs-private\n */\nconst CDK_DRAG_PARENT = new InjectionToken('CDK_DRAG_PARENT');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_HANDLE = new InjectionToken('CdkDragHandle');\n/** Handle that can be used to drag a CdkDrag instance. */\nclass CdkDragHandle {\n constructor(element, parentDrag) {\n this.element = element;\n /** Emits when the state of the handle has changed. */\n this._stateChanges = new Subject();\n this._disabled = false;\n this._parentDrag = parentDrag;\n toggleNativeDragInteractions(element.nativeElement, false);\n }\n /** Whether starting to drag through this handle is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._stateChanges.next(this);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nCdkDragHandle.ɵfac = function CdkDragHandle_Factory(t) { return new (t || CdkDragHandle)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12)); };\nCdkDragHandle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragHandle, selectors: [[\"\", \"cdkDragHandle\", \"\"]], hostAttrs: [1, \"cdk-drag-handle\"], inputs: { disabled: [\"cdkDragHandleDisabled\", \"disabled\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }])] });\nCdkDragHandle.ctorParameters = () => [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DRAG_PARENT,] }, { type: Optional }, { type: SkipSelf }] }\n];\nCdkDragHandle.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDragHandleDisabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragHandle, [{\n type: Directive,\n args: [{\n selector: '[cdkDragHandle]',\n host: {\n 'class': 'cdk-drag-handle'\n },\n providers: [{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_DRAG_PARENT]\n }, {\n type: Optional\n }, {\n type: SkipSelf\n }] }]; }, { disabled: [{\n type: Input,\n args: ['cdkDragHandleDisabled']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PLACEHOLDER = new InjectionToken('CdkDragPlaceholder');\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\nclass CdkDragPlaceholder {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCdkDragPlaceholder.ɵfac = function CdkDragPlaceholder_Factory(t) { return new (t || CdkDragPlaceholder)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkDragPlaceholder.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragPlaceholder, selectors: [[\"ng-template\", \"cdkDragPlaceholder\", \"\"]], inputs: { data: \"data\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }])] });\nCdkDragPlaceholder.ctorParameters = () => [\n { type: TemplateRef }\n];\nCdkDragPlaceholder.propDecorators = {\n data: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragPlaceholder, [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkDragPlaceholder]',\n providers: [{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { data: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PREVIEW = new InjectionToken('CdkDragPreview');\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\nclass CdkDragPreview {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._matchSize = false;\n }\n /** Whether the preview should preserve the same size as the item that is being dragged. */\n get matchSize() { return this._matchSize; }\n set matchSize(value) { this._matchSize = coerceBooleanProperty(value); }\n}\nCdkDragPreview.ɵfac = function CdkDragPreview_Factory(t) { return new (t || CdkDragPreview)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkDragPreview.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDragPreview, selectors: [[\"ng-template\", \"cdkDragPreview\", \"\"]], inputs: { matchSize: \"matchSize\", data: \"data\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }])] });\nCdkDragPreview.ctorParameters = () => [\n { type: TemplateRef }\n];\nCdkDragPreview.propDecorators = {\n data: [{ type: Input }],\n matchSize: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDragPreview, [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkDragPreview]',\n providers: [{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { matchSize: [{\n type: Input\n }], data: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Element that can be moved inside a CdkDropList container. */\nclass CdkDrag {\n constructor(\n /** Element that the draggable is attached to. */\n element, \n /** Droppable container that the draggable is a part of. */\n dropContainer, _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef, _selfHandle) {\n this.element = element;\n this.dropContainer = dropContainer;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._selfHandle = _selfHandle;\n this._destroyed = new Subject();\n /** Emits when the user starts dragging the item. */\n this.started = new EventEmitter();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new EventEmitter();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new EventEmitter();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new EventEmitter();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new EventEmitter();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new EventEmitter();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = new Observable((observer) => {\n const subscription = this._dragRef.moved.pipe(map(movedEvent => ({\n source: this,\n pointerPosition: movedEvent.pointerPosition,\n event: movedEvent.event,\n delta: movedEvent.delta,\n distance: movedEvent.distance\n }))).subscribe(observer);\n return () => {\n subscription.unsubscribe();\n };\n });\n this._dragRef = dragDrop.createDrag(element, {\n dragStartThreshold: config && config.dragStartThreshold != null ?\n config.dragStartThreshold : 5,\n pointerDirectionChangeThreshold: config && config.pointerDirectionChangeThreshold != null ?\n config.pointerDirectionChangeThreshold : 5,\n zIndex: config === null || config === void 0 ? void 0 : config.zIndex\n });\n this._dragRef.data = this;\n if (config) {\n this._assignDefaults(config);\n }\n // Note that usually the container is assigned when the drop list is picks up the item, but in\n // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation\n // where there are no items on the first change detection pass, but the items get picked up as\n // soon as the user triggers another pass by dragging. This is a problem, because the item would\n // have to switch from standalone mode to drag mode in the middle of the dragging sequence which\n // is too late since the two modes save different kinds of information. We work around it by\n // assigning the drop container both from here and the list.\n if (dropContainer) {\n this._dragRef._withDropContainer(dropContainer._dropListRef);\n dropContainer.addItem(this);\n }\n this._syncInputs(this._dragRef);\n this._handleEvents(this._dragRef);\n }\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || (this.dropContainer && this.dropContainer.disabled);\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._dragRef.disabled = this._disabled;\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._dragRef.getPlaceholderElement();\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._dragRef.getRootElement();\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._dragRef.reset();\n }\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n return this._dragRef.getFreeDragPosition();\n }\n ngAfterViewInit() {\n // We need to wait for the zone to stabilize, in order for the reference\n // element to be in the proper place in the DOM. This is mostly relevant\n // for draggable elements inside portals since they get stamped out in\n // their original DOM position and then they get transferred to the portal.\n this._ngZone.onStable.asObservable()\n .pipe(take(1), takeUntil(this._destroyed))\n .subscribe(() => {\n this._updateRootElement();\n // Listen for any newly-added handles.\n this._handles.changes.pipe(startWith(this._handles), \n // Sync the new handles with the DragRef.\n tap((handles) => {\n const childHandleElements = handles\n .filter(handle => handle._parentDrag === this)\n .map(handle => handle.element);\n // Usually handles are only allowed to be a descendant of the drag element, but if\n // the consumer defined a different drag root, we should allow the drag element\n // itself to be a handle too.\n if (this._selfHandle && this.rootElementSelector) {\n childHandleElements.push(this.element);\n }\n this._dragRef.withHandles(childHandleElements);\n }), \n // Listen if the state of any of the handles changes.\n switchMap((handles) => {\n return merge(...handles.map(item => {\n return item._stateChanges.pipe(startWith(item));\n }));\n }), takeUntil(this._destroyed)).subscribe(handleInstance => {\n // Enabled/disable the handle that changed in the DragRef.\n const dragRef = this._dragRef;\n const handle = handleInstance.element.nativeElement;\n handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n });\n if (this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n });\n }\n ngOnChanges(changes) {\n const rootSelectorChange = changes['rootElementSelector'];\n const positionChange = changes['freeDragPosition'];\n // We don't have to react to the first change since it's being\n // handled in `ngAfterViewInit` where it needs to be deferred.\n if (rootSelectorChange && !rootSelectorChange.firstChange) {\n this._updateRootElement();\n }\n // Skip the first change since it's being handled in `ngAfterViewInit`.\n if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n }\n ngOnDestroy() {\n if (this.dropContainer) {\n this.dropContainer.removeItem(this);\n }\n this._destroyed.next();\n this._destroyed.complete();\n this._dragRef.dispose();\n }\n /** Syncs the root element with the `DragRef`. */\n _updateRootElement() {\n const element = this.element.nativeElement;\n const rootElement = this.rootElementSelector ?\n getClosestMatchingAncestor(element, this.rootElementSelector) : element;\n if (rootElement && rootElement.nodeType !== this._document.ELEMENT_NODE) {\n throw Error(`cdkDrag must be attached to an element node. ` +\n `Currently attached to \"${rootElement.nodeName}\".`);\n }\n this._dragRef.withRootElement(rootElement || element);\n }\n /** Gets the boundary element, based on the `boundaryElement` value. */\n _getBoundaryElement() {\n const boundary = this.boundaryElement;\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return getClosestMatchingAncestor(this.element.nativeElement, boundary);\n }\n const element = coerceElement(boundary);\n if (isDevMode() && !element.contains(this.element.nativeElement)) {\n throw Error('Draggable element is not inside of the node passed into cdkDragBoundary.');\n }\n return element;\n }\n /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n _syncInputs(ref) {\n ref.beforeStarted.subscribe(() => {\n if (!ref.isDragging()) {\n const dir = this._dir;\n const dragStartDelay = this.dragStartDelay;\n const placeholder = this._placeholderTemplate ? {\n template: this._placeholderTemplate.templateRef,\n context: this._placeholderTemplate.data,\n viewContainer: this._viewContainerRef\n } : null;\n const preview = this._previewTemplate ? {\n template: this._previewTemplate.templateRef,\n context: this._previewTemplate.data,\n matchSize: this._previewTemplate.matchSize,\n viewContainer: this._viewContainerRef\n } : null;\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.dragStartDelay = (typeof dragStartDelay === 'object' && dragStartDelay) ?\n dragStartDelay : coerceNumberProperty(dragStartDelay);\n ref.constrainPosition = this.constrainPosition;\n ref.previewClass = this.previewClass;\n ref\n .withBoundaryElement(this._getBoundaryElement())\n .withPlaceholderTemplate(placeholder)\n .withPreviewTemplate(preview);\n if (dir) {\n ref.withDirection(dir.value);\n }\n }\n });\n }\n /** Handles the events from the underlying `DragRef`. */\n _handleEvents(ref) {\n ref.started.subscribe(() => {\n this.started.emit({ source: this });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.released.subscribe(() => {\n this.released.emit({ source: this });\n });\n ref.ended.subscribe(event => {\n this.ended.emit({ source: this, distance: event.distance });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: event.container.data,\n item: this,\n currentIndex: event.currentIndex\n });\n });\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: event.container.data,\n item: this\n });\n });\n ref.dropped.subscribe(event => {\n this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n isPointerOverContainer: event.isPointerOverContainer,\n item: this,\n distance: event.distance\n });\n });\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const { lockAxis, dragStartDelay, constrainPosition, previewClass, boundaryElement, draggingDisabled, rootElementSelector } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.dragStartDelay = dragStartDelay || 0;\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n if (constrainPosition) {\n this.constrainPosition = constrainPosition;\n }\n if (previewClass) {\n this.previewClass = previewClass;\n }\n if (boundaryElement) {\n this.boundaryElement = boundaryElement;\n }\n if (rootElementSelector) {\n this.rootElementSelector = rootElementSelector;\n }\n }\n}\nCdkDrag.ɵfac = function CdkDrag_Factory(t) { return new (t || CdkDrag)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST, 12), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_HANDLE, 10)); };\nCdkDrag.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkDrag, selectors: [[\"\", \"cdkDrag\", \"\"]], contentQueries: function CdkDrag_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PREVIEW, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PLACEHOLDER, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_HANDLE, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._previewTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._placeholderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._handles = _t);\n } }, hostAttrs: [1, \"cdk-drag\"], hostVars: 4, hostBindings: function CdkDrag_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"cdk-drag-disabled\", ctx.disabled)(\"cdk-drag-dragging\", ctx._dragRef.isDragging());\n } }, inputs: { disabled: [\"cdkDragDisabled\", \"disabled\"], dragStartDelay: [\"cdkDragStartDelay\", \"dragStartDelay\"], lockAxis: [\"cdkDragLockAxis\", \"lockAxis\"], constrainPosition: [\"cdkDragConstrainPosition\", \"constrainPosition\"], previewClass: [\"cdkDragPreviewClass\", \"previewClass\"], boundaryElement: [\"cdkDragBoundary\", \"boundaryElement\"], rootElementSelector: [\"cdkDragRootElement\", \"rootElementSelector\"], data: [\"cdkDragData\", \"data\"], freeDragPosition: [\"cdkDragFreeDragPosition\", \"freeDragPosition\"] }, outputs: { started: \"cdkDragStarted\", released: \"cdkDragReleased\", ended: \"cdkDragEnded\", entered: \"cdkDragEntered\", exited: \"cdkDragExited\", dropped: \"cdkDragDropped\", moved: \"cdkDragMoved\" }, exportAs: [\"cdkDrag\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]), ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkDrag.ctorParameters = () => [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DROP_LIST,] }, { type: Optional }, { type: SkipSelf }] },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: DragDrop },\n { type: ChangeDetectorRef },\n { type: CdkDragHandle, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [CDK_DRAG_HANDLE,] }] }\n];\nCdkDrag.propDecorators = {\n _handles: [{ type: ContentChildren, args: [CDK_DRAG_HANDLE, { descendants: true },] }],\n _previewTemplate: [{ type: ContentChild, args: [CDK_DRAG_PREVIEW,] }],\n _placeholderTemplate: [{ type: ContentChild, args: [CDK_DRAG_PLACEHOLDER,] }],\n data: [{ type: Input, args: ['cdkDragData',] }],\n lockAxis: [{ type: Input, args: ['cdkDragLockAxis',] }],\n rootElementSelector: [{ type: Input, args: ['cdkDragRootElement',] }],\n boundaryElement: [{ type: Input, args: ['cdkDragBoundary',] }],\n dragStartDelay: [{ type: Input, args: ['cdkDragStartDelay',] }],\n freeDragPosition: [{ type: Input, args: ['cdkDragFreeDragPosition',] }],\n disabled: [{ type: Input, args: ['cdkDragDisabled',] }],\n constrainPosition: [{ type: Input, args: ['cdkDragConstrainPosition',] }],\n previewClass: [{ type: Input, args: ['cdkDragPreviewClass',] }],\n started: [{ type: Output, args: ['cdkDragStarted',] }],\n released: [{ type: Output, args: ['cdkDragReleased',] }],\n ended: [{ type: Output, args: ['cdkDragEnded',] }],\n entered: [{ type: Output, args: ['cdkDragEntered',] }],\n exited: [{ type: Output, args: ['cdkDragExited',] }],\n dropped: [{ type: Output, args: ['cdkDragDropped',] }],\n moved: [{ type: Output, args: ['cdkDragMoved',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkDrag, [{\n type: Directive,\n args: [{\n selector: '[cdkDrag]',\n exportAs: 'cdkDrag',\n host: {\n 'class': 'cdk-drag',\n '[class.cdk-drag-disabled]': 'disabled',\n '[class.cdk-drag-dragging]': '_dragRef.isDragging()'\n },\n providers: [{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_DROP_LIST]\n }, {\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_DRAG_CONFIG]\n }] }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: CdkDragHandle, decorators: [{\n type: Optional\n }, {\n type: Self\n }, {\n type: Inject,\n args: [CDK_DRAG_HANDLE]\n }] }]; }, { started: [{\n type: Output,\n args: ['cdkDragStarted']\n }], released: [{\n type: Output,\n args: ['cdkDragReleased']\n }], ended: [{\n type: Output,\n args: ['cdkDragEnded']\n }], entered: [{\n type: Output,\n args: ['cdkDragEntered']\n }], exited: [{\n type: Output,\n args: ['cdkDragExited']\n }], dropped: [{\n type: Output,\n args: ['cdkDragDropped']\n }], moved: [{\n type: Output,\n args: ['cdkDragMoved']\n }], disabled: [{\n type: Input,\n args: ['cdkDragDisabled']\n }], dragStartDelay: [{\n type: Input,\n args: ['cdkDragStartDelay']\n }], lockAxis: [{\n type: Input,\n args: ['cdkDragLockAxis']\n }], constrainPosition: [{\n type: Input,\n args: ['cdkDragConstrainPosition']\n }], previewClass: [{\n type: Input,\n args: ['cdkDragPreviewClass']\n }], boundaryElement: [{\n type: Input,\n args: ['cdkDragBoundary']\n }], rootElementSelector: [{\n type: Input,\n args: ['cdkDragRootElement']\n }], _handles: [{\n type: ContentChildren,\n args: [CDK_DRAG_HANDLE, { descendants: true }]\n }], _previewTemplate: [{\n type: ContentChild,\n args: [CDK_DRAG_PREVIEW]\n }], _placeholderTemplate: [{\n type: ContentChild,\n args: [CDK_DRAG_PLACEHOLDER]\n }], data: [{\n type: Input,\n args: ['cdkDragData']\n }], freeDragPosition: [{\n type: Input,\n args: ['cdkDragFreeDragPosition']\n }] }); })();\n/** Gets the closest ancestor of an element that matches a selector. */\nfunction getClosestMatchingAncestor(element, selector) {\n let currentElement = element.parentElement;\n while (currentElement) {\n // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.\n if (currentElement.matches ? currentElement.matches(selector) :\n currentElement.msMatchesSelector(selector)) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n return null;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass DragDropModule {\n}\nDragDropModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DragDropModule });\nDragDropModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DragDropModule_Factory(t) { return new (t || DragDropModule)(); }, providers: [\n DragDrop,\n ], imports: [CdkScrollableModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragDropModule, { declarations: function () { return [CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; }, exports: function () { return [CdkScrollableModule, CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragDropModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n exports: [\n CdkScrollableModule,\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n providers: [\n DragDrop,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CDK_DRAG_CONFIG, CDK_DRAG_HANDLE, CDK_DRAG_PLACEHOLDER, CDK_DRAG_PREVIEW, CDK_DROP_LIST_GROUP, CdkDrag, CdkDragHandle, CdkDragPlaceholder, CdkDragPreview, CdkDropList, CdkDropListGroup, DragDrop, DragDropModule, DragDropRegistry, DragRef, DropListRef, copyArrayItem, moveItemInArray, transferArrayItem, CDK_DROP_LIST as ɵangular_material_src_cdk_drag_drop_drag_drop_b, CDK_DRAG_PARENT as ɵangular_material_src_cdk_drag_drop_drag_drop_c };\n\n//# sourceMappingURL=drag-drop.js.map","import { DOCUMENT, CommonModule } from '@angular/common';\nimport { forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, Optional, Attribute, NgZone, Inject, Input, Output, ViewChild, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinColor, mixinDisabled, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, DOWN_ARROW, RIGHT_ARROW, UP_ARROW, LEFT_ARROW, HOME, END, PAGE_DOWN, PAGE_UP } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { Subscription } from 'rxjs';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/bidi';\nimport * as ɵngcc3 from '@angular/common';\n\nconst _c0 = [\"sliderWrapper\"];\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n/**\n * Visually, a 30px separation between tick marks looks best. This is very subjective but it is\n * the default separation we chose.\n */\nconst MIN_AUTO_TICK_SEPARATION = 30;\n/** The thumb gap size for a disabled slider. */\nconst DISABLED_THUMB_GAP = 7;\n/** The thumb gap size for a non-active slider at its minimum value. */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n/** The thumb gap size for an active slider at its minimum value. */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n/**\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n * @docs-private\n */\nconst MAT_SLIDER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlider),\n multi: true\n};\n/** A simple change event emitted by the MatSlider component. */\nclass MatSliderChange {\n}\n// Boilerplate for applying mixins to MatSlider.\n/** @docs-private */\nclass MatSliderBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatSliderMixinBase = mixinTabIndex(mixinColor(mixinDisabled(MatSliderBase), 'accent'));\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `<input type=\"range\">` element.\n */\nclass MatSlider extends _MatSliderMixinBase {\n constructor(elementRef, _focusMonitor, _changeDetectorRef, _dir, tabIndex, _ngZone, _document, _animationMode) {\n super(elementRef);\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._invert = false;\n this._max = 100;\n this._min = 0;\n this._step = 1;\n this._thumbLabel = false;\n this._tickInterval = 0;\n this._value = null;\n this._vertical = false;\n /** Event emitted when the slider value has changed. */\n this.change = new EventEmitter();\n /** Event emitted when the slider thumb moves. */\n this.input = new EventEmitter();\n /**\n * Emits when the raw value of the slider changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n this.onTouched = () => { };\n this._percent = 0;\n /**\n * Whether or not the thumb is sliding.\n * Used to determine if there should be a transition for the thumb and fill track.\n */\n this._isSliding = false;\n /**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n */\n this._isActive = false;\n /** The size of a tick interval as a percentage of the size of the track. */\n this._tickIntervalPercent = 0;\n /** The dimensions of the slider. */\n this._sliderDimensions = null;\n this._controlValueAccessorChangeFn = () => { };\n /** Subscription to the Directionality change EventEmitter. */\n this._dirChangeSubscription = Subscription.EMPTY;\n /** Called when the user has put their pointer down on the slider. */\n this._pointerDown = (event) => {\n // Don't do anything if the slider is disabled or the\n // user is using anything other than the main mouse button.\n if (this.disabled || this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n this._ngZone.run(() => {\n const oldValue = this.value;\n const pointerPosition = getPointerPositionOnPage(event);\n this._isSliding = true;\n this._lastPointerEvent = event;\n event.preventDefault();\n this._focusHostElement();\n this._onMouseenter(); // Simulate mouseenter in case this is a mobile device.\n this._bindGlobalEvents(event);\n this._focusHostElement();\n this._updateValueFromPosition(pointerPosition);\n this._valueOnSlideStart = this.value;\n this._pointerPositionOnStart = pointerPosition;\n // Emit a change and input event if the value changed.\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n });\n };\n /**\n * Called when the user has moved their pointer after\n * starting to drag. Bound on the document level.\n */\n this._pointerMove = (event) => {\n if (this._isSliding) {\n // Prevent the slide from selecting anything else.\n event.preventDefault();\n const oldValue = this.value;\n this._lastPointerEvent = event;\n this._updateValueFromPosition(getPointerPositionOnPage(event));\n // Native range elements always emit `input` events when the value changed while sliding.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n };\n /** Called when the user has lifted their pointer. Bound on the document level. */\n this._pointerUp = (event) => {\n if (this._isSliding) {\n const pointerPositionOnStart = this._pointerPositionOnStart;\n const currentPointerPosition = getPointerPositionOnPage(event);\n event.preventDefault();\n this._removeGlobalEvents();\n this._valueOnSlideStart = this._pointerPositionOnStart = this._lastPointerEvent = null;\n this._isSliding = false;\n if (this._valueOnSlideStart != this.value && !this.disabled &&\n pointerPositionOnStart && (pointerPositionOnStart.x !== currentPointerPosition.x ||\n pointerPositionOnStart.y !== currentPointerPosition.y)) {\n this._emitChangeEvent();\n }\n }\n };\n /** Called when the window has lost focus. */\n this._windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n };\n this._document = _document;\n this.tabIndex = parseInt(tabIndex) || 0;\n _ngZone.runOutsideAngular(() => {\n const element = elementRef.nativeElement;\n element.addEventListener('mousedown', this._pointerDown, activeEventOptions);\n element.addEventListener('touchstart', this._pointerDown, activeEventOptions);\n });\n }\n /** Whether the slider is inverted. */\n get invert() { return this._invert; }\n set invert(value) {\n this._invert = coerceBooleanProperty(value);\n }\n /** The maximum value that the slider can have. */\n get max() { return this._max; }\n set max(v) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /** The minimum value that the slider can have. */\n get min() { return this._min; }\n set min(v) {\n this._min = coerceNumberProperty(v, this._min);\n // If the value wasn't explicitly set by the user, set it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /** The values at which the thumb will snap. */\n get step() { return this._step; }\n set step(v) {\n this._step = coerceNumberProperty(v, this._step);\n if (this._step % 1 !== 0) {\n this._roundToDecimal = this._step.toString().split('.').pop().length;\n }\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\n /** Whether or not to show the thumb label. */\n get thumbLabel() { return this._thumbLabel; }\n set thumbLabel(value) { this._thumbLabel = coerceBooleanProperty(value); }\n /**\n * How often to show ticks. Relative to the step so that a tick always appears on a step.\n * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\n */\n get tickInterval() { return this._tickInterval; }\n set tickInterval(value) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n }\n else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, this._tickInterval);\n }\n else {\n this._tickInterval = 0;\n }\n }\n /** Value of the slider. */\n get value() {\n // If the value needs to be read and it is still uninitialized, initialize it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n return this._value;\n }\n set value(v) {\n if (v !== this._value) {\n let value = coerceNumberProperty(v);\n // While incrementing by a decimal we can end up with values like 33.300000000000004.\n // Truncate it to ensure that it matches the label and to make it easier to work with.\n if (this._roundToDecimal) {\n value = parseFloat(value.toFixed(this._roundToDecimal));\n }\n this._value = value;\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the slider is vertical. */\n get vertical() { return this._vertical; }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** The value to be used for display purposes. */\n get displayValue() {\n if (this.displayWith) {\n // Value is never null but since setters and getters cannot have\n // different types, the value getter is also typed to return null.\n return this.displayWith(this.value);\n }\n // Note that this could be improved further by rounding something like 0.999 to 1 or\n // 0.899 to 0.9, however it is very performance sensitive, because it gets called on\n // every change detection cycle.\n if (this._roundToDecimal && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundToDecimal);\n }\n return this.value || 0;\n }\n /** set focus to the host element */\n focus(options) {\n this._focusHostElement(options);\n }\n /** blur the host element */\n blur() {\n this._blurHostElement();\n }\n /** The percentage of the slider that coincides with the value. */\n get percent() { return this._clamp(this._percent); }\n /**\n * Whether the axis of the slider is inverted.\n * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\n */\n _shouldInvertAxis() {\n // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to\n // top. However from a y-axis standpoint this is inverted.\n return this.vertical ? !this.invert : this.invert;\n }\n /** Whether the slider is at its minimum value. */\n _isMinValue() {\n return this.percent === 0;\n }\n /**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n */\n _getThumbGap() {\n if (this.disabled) {\n return DISABLED_THUMB_GAP;\n }\n if (this._isMinValue() && !this.thumbLabel) {\n return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;\n }\n return 0;\n }\n /** CSS styles for the track background element. */\n _getTrackBackgroundStyles() {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${1 - this.percent}, 1` : `${1 - this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '-' : '';\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._getThumbGap()}px) scale3d(${scale})`\n };\n }\n /** CSS styles for the track fill element. */\n _getTrackFillStyles() {\n const percent = this.percent;\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${percent}, 1` : `${percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '' : '-';\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._getThumbGap()}px) scale3d(${scale})`,\n // iOS Safari has a bug where it won't re-render elements which start of as `scale(0)` until\n // something forces a style recalculation on it. Since we'll end up with `scale(0)` when\n // the value of the slider is 0, we can easily get into this situation. We force a\n // recalculation by changing the element's `display` when it goes from 0 to any other value.\n display: percent === 0 ? 'none' : ''\n };\n }\n /** CSS styles for the ticks container element. */\n _getTicksContainerStyles() {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the ticks container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '' : '-';\n let offset = this._tickIntervalPercent / 2 * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`\n };\n }\n /** CSS styles for the ticks element. */\n _getTicksStyles() {\n let tickSize = this._tickIntervalPercent * 100;\n let backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let axis = this.vertical ? 'Y' : 'X';\n // Depending on the direction we pushed the ticks container, push the ticks the opposite\n // direction to re-center them but clip off the end edge. In RTL languages we need to flip the\n // ticks 180 degrees so we're really cutting off the end edge abd not the start.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '-' : '';\n let rotate = !this.vertical && this._getDirection() == 'rtl' ? ' rotate(180deg)' : '';\n let styles = {\n 'backgroundSize': backgroundSize,\n // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.\n 'transform': `translateZ(0) translate${axis}(${sign}${tickSize / 2}%)${rotate}`\n };\n if (this._isMinValue() && this._getThumbGap()) {\n const shouldInvertAxis = this._shouldInvertAxis();\n let side;\n if (this.vertical) {\n side = shouldInvertAxis ? 'Bottom' : 'Top';\n }\n else {\n side = shouldInvertAxis ? 'Right' : 'Left';\n }\n styles[`padding${side}`] = `${this._getThumbGap()}px`;\n }\n return styles;\n }\n _getThumbContainerStyles() {\n const shouldInvertAxis = this._shouldInvertAxis();\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the thumb container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let invertOffset = (this._getDirection() == 'rtl' && !this.vertical) ? !shouldInvertAxis : shouldInvertAxis;\n let offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`\n };\n }\n /**\n * Whether mouse events should be converted to a slider position by calculating their distance\n * from the right or bottom edge of the slider as opposed to the top or left.\n */\n _shouldInvertMouseCoords() {\n const shouldInvertAxis = this._shouldInvertAxis();\n return (this._getDirection() == 'rtl' && !this.vertical) ? !shouldInvertAxis : shouldInvertAxis;\n }\n /** The language direction for this slider element. */\n _getDirection() {\n return (this._dir && this._dir.value == 'rtl') ? 'rtl' : 'ltr';\n }\n ngAfterViewInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe((origin) => {\n this._isActive = !!origin && origin !== 'keyboard';\n this._changeDetectorRef.detectChanges();\n });\n if (this._dir) {\n this._dirChangeSubscription = this._dir.change.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('mousedown', this._pointerDown, activeEventOptions);\n element.removeEventListener('touchstart', this._pointerDown, activeEventOptions);\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._dirChangeSubscription.unsubscribe();\n }\n _onMouseenter() {\n if (this.disabled) {\n return;\n }\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n _onFocus() {\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n _onBlur() {\n this.onTouched();\n }\n _onKeydown(event) {\n if (this.disabled || hasModifierKey(event)) {\n return;\n }\n const oldValue = this.value;\n switch (event.keyCode) {\n case PAGE_UP:\n this._increment(10);\n break;\n case PAGE_DOWN:\n this._increment(-10);\n break;\n case END:\n this.value = this.max;\n break;\n case HOME:\n this.value = this.min;\n break;\n case LEFT_ARROW:\n // NOTE: For a sighted user it would make more sense that when they press an arrow key on an\n // inverted slider the thumb moves in that direction. However for a blind user, nothing\n // about the slider indicates that it is inverted. They will expect left to be decrement,\n // regardless of how it appears on the screen. For speakers ofRTL languages, they probably\n // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for\n // RTL. For inverted sliders we prefer a good a11y experience to having it \"look right\" for\n // sighted users, therefore we do not swap the meaning.\n this._increment(this._getDirection() == 'rtl' ? 1 : -1);\n break;\n case UP_ARROW:\n this._increment(1);\n break;\n case RIGHT_ARROW:\n // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n this._increment(this._getDirection() == 'rtl' ? -1 : 1);\n break;\n case DOWN_ARROW:\n this._increment(-1);\n break;\n default:\n // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n // it.\n return;\n }\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n this._isSliding = true;\n event.preventDefault();\n }\n _onKeyup() {\n this._isSliding = false;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /**\n * Binds our global move and end events. They're bound at the document level and only while\n * dragging so that the user doesn't have to keep their pointer exactly over the slider\n * as they're swiping across the screen.\n */\n _bindGlobalEvents(triggerEvent) {\n // Note that we bind the events to the `document`, because it allows us to capture\n // drag cancel events where the user's pointer is outside the browser window.\n const document = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n const endEventName = isTouch ? 'touchend' : 'mouseup';\n document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n if (isTouch) {\n document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n const window = this._getWindow();\n if (typeof window !== 'undefined' && window) {\n window.addEventListener('blur', this._windowBlur);\n }\n }\n /** Removes any global event listeners that we may have added. */\n _removeGlobalEvents() {\n const document = this._document;\n document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n const window = this._getWindow();\n if (typeof window !== 'undefined' && window) {\n window.removeEventListener('blur', this._windowBlur);\n }\n }\n /** Increments the slider by the given number of steps (negative number decrements). */\n _increment(numSteps) {\n this.value = this._clamp((this.value || 0) + this.step * numSteps, this.min, this.max);\n }\n /** Calculate the new value from the new physical location. The value will always be snapped. */\n _updateValueFromPosition(pos) {\n if (!this._sliderDimensions) {\n return;\n }\n let offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let posComponent = this.vertical ? pos.y : pos.x;\n // The exact value is calculated from the event and used to find the closest snap value.\n let percent = this._clamp((posComponent - offset) / size);\n if (this._shouldInvertMouseCoords()) {\n percent = 1 - percent;\n }\n // Since the steps may not divide cleanly into the max value, if the user\n // slid to 0 or 100 percent, we jump to the min/max value. This approach\n // is slightly more intuitive than using `Math.ceil` below, because it\n // follows the user's pointer closer.\n if (percent === 0) {\n this.value = this.min;\n }\n else if (percent === 1) {\n this.value = this.max;\n }\n else {\n const exactValue = this._calculateValue(percent);\n // This calculation finds the closest step by finding the closest\n // whole number divisible by the step relative to the min.\n const closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n }\n /** Emits a change event if the current value is different from the last emitted value. */\n _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.value);\n this.valueChange.emit(this.value);\n this.change.emit(this._createChangeEvent());\n }\n /** Emits an input event when the current value is different from the last emitted value. */\n _emitInputEvent() {\n this.input.emit(this._createChangeEvent());\n }\n /** Updates the amount of space between ticks as a percentage of the width of the slider. */\n _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n if (this.tickInterval == 'auto') {\n let trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let pixelsPerStep = trackSize * this.step / (this.max - this.min);\n let stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let pixelsPerTick = stepsPerTick * this.step;\n this._tickIntervalPercent = pixelsPerTick / trackSize;\n }\n else {\n this._tickIntervalPercent = this.tickInterval * this.step / (this.max - this.min);\n }\n }\n /** Creates a slider change object from the specified value. */\n _createChangeEvent(value = this.value) {\n let event = new MatSliderChange();\n event.source = this;\n event.value = value;\n return event;\n }\n /** Calculates the percentage of the slider that a value is. */\n _calculatePercentage(value) {\n return ((value || 0) - this.min) / (this.max - this.min);\n }\n /** Calculates the value a percentage of the slider corresponds to. */\n _calculateValue(percentage) {\n return this.min + percentage * (this.max - this.min);\n }\n /** Return a number between two numbers. */\n _clamp(value, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Get the bounding client rect of the slider track element.\n * The track is used rather than the native element to ignore the extra space that the thumb can\n * take up.\n */\n _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\n }\n /**\n * Focuses the native element.\n * Currently only used to allow a blur event to fire but will be used with keyboard input later.\n */\n _focusHostElement(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Blurs the native element. */\n _blurHostElement() {\n this._elementRef.nativeElement.blur();\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * Registers a callback to be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the component is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n}\nMatSlider.ɵfac = function MatSlider_Factory(t) { return new (t || MatSlider)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵinjectAttribute('tabindex'), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatSlider.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSlider, selectors: [[\"mat-slider\"]], viewQuery: function MatSlider_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._sliderWrapper = _t.first);\n } }, hostAttrs: [\"role\", \"slider\", 1, \"mat-slider\", \"mat-focus-indicator\"], hostVars: 28, hostBindings: function MatSlider_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatSlider_focus_HostBindingHandler() { return ctx._onFocus(); })(\"blur\", function MatSlider_blur_HostBindingHandler() { return ctx._onBlur(); })(\"keydown\", function MatSlider_keydown_HostBindingHandler($event) { return ctx._onKeydown($event); })(\"keyup\", function MatSlider_keyup_HostBindingHandler() { return ctx._onKeyup(); })(\"mouseenter\", function MatSlider_mouseenter_HostBindingHandler() { return ctx._onMouseenter(); })(\"selectstart\", function MatSlider_selectstart_HostBindingHandler($event) { return $event.preventDefault(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"tabIndex\", ctx.tabIndex);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-valuemax\", ctx.max)(\"aria-valuemin\", ctx.min)(\"aria-valuenow\", ctx.value)(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n ɵngcc0.ɵɵclassProp(\"mat-slider-disabled\", ctx.disabled)(\"mat-slider-has-ticks\", ctx.tickInterval)(\"mat-slider-horizontal\", !ctx.vertical)(\"mat-slider-axis-inverted\", ctx._shouldInvertAxis())(\"mat-slider-invert-mouse-coords\", ctx._shouldInvertMouseCoords())(\"mat-slider-sliding\", ctx._isSliding)(\"mat-slider-thumb-label-showing\", ctx.thumbLabel)(\"mat-slider-vertical\", ctx.vertical)(\"mat-slider-min-value\", ctx._isMinValue())(\"mat-slider-hide-last-tick\", ctx.disabled || ctx._isMinValue() && ctx._getThumbGap() && ctx._shouldInvertAxis())(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { disabled: \"disabled\", color: \"color\", tabIndex: \"tabIndex\", invert: \"invert\", max: \"max\", min: \"min\", value: \"value\", step: \"step\", thumbLabel: \"thumbLabel\", tickInterval: \"tickInterval\", vertical: \"vertical\", displayWith: \"displayWith\" }, outputs: { change: \"change\", input: \"input\", valueChange: \"valueChange\" }, exportAs: [\"matSlider\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_SLIDER_VALUE_ACCESSOR]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 13, vars: 6, consts: [[1, \"mat-slider-wrapper\"], [\"sliderWrapper\", \"\"], [1, \"mat-slider-track-wrapper\"], [1, \"mat-slider-track-background\", 3, \"ngStyle\"], [1, \"mat-slider-track-fill\", 3, \"ngStyle\"], [1, \"mat-slider-ticks-container\", 3, \"ngStyle\"], [1, \"mat-slider-ticks\", 3, \"ngStyle\"], [1, \"mat-slider-thumb-container\", 3, \"ngStyle\"], [1, \"mat-slider-focus-ring\"], [1, \"mat-slider-thumb\"], [1, \"mat-slider-thumb-label\"], [1, \"mat-slider-thumb-label-text\"]], template: function MatSlider_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0, 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵelement(3, \"div\", 3);\n ɵngcc0.ɵɵelement(4, \"div\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"div\", 5);\n ɵngcc0.ɵɵelement(6, \"div\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 7);\n ɵngcc0.ɵɵelement(8, \"div\", 8);\n ɵngcc0.ɵɵelement(9, \"div\", 9);\n ɵngcc0.ɵɵelementStart(10, \"div\", 10);\n ɵngcc0.ɵɵelementStart(11, \"span\", 11);\n ɵngcc0.ɵɵtext(12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._getTrackBackgroundStyles());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._getTrackFillStyles());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._getTicksContainerStyles());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._getTicksStyles());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._getThumbContainerStyles());\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵtextInterpolate(ctx.displayValue);\n } }, directives: [ɵngcc3.NgStyle], styles: [\".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{background-repeat:repeat;background-clip:content-box;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\\\"\\\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatSlider.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusMonitor },\n { type: ChangeDetectorRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatSlider.propDecorators = {\n invert: [{ type: Input }],\n max: [{ type: Input }],\n min: [{ type: Input }],\n step: [{ type: Input }],\n thumbLabel: [{ type: Input }],\n tickInterval: [{ type: Input }],\n value: [{ type: Input }],\n displayWith: [{ type: Input }],\n vertical: [{ type: Input }],\n change: [{ type: Output }],\n input: [{ type: Output }],\n valueChange: [{ type: Output }],\n _sliderWrapper: [{ type: ViewChild, args: ['sliderWrapper',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSlider, [{\n type: Component,\n args: [{\n selector: 'mat-slider',\n exportAs: 'matSlider',\n providers: [MAT_SLIDER_VALUE_ACCESSOR],\n host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n '(keyup)': '_onKeyup()',\n '(mouseenter)': '_onMouseenter()',\n // On Safari starting to slide temporarily triggers text selection mode which\n // show the wrong cursor. We prevent it by stopping the `selectstart` event.\n '(selectstart)': '$event.preventDefault()',\n 'class': 'mat-slider mat-focus-indicator',\n 'role': 'slider',\n '[tabIndex]': 'tabIndex',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuenow]': 'value',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-slider-disabled]': 'disabled',\n '[class.mat-slider-has-ticks]': 'tickInterval',\n '[class.mat-slider-horizontal]': '!vertical',\n '[class.mat-slider-axis-inverted]': '_shouldInvertAxis()',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if mouse coordinates need to be inverted.\n '[class.mat-slider-invert-mouse-coords]': '_shouldInvertMouseCoords()',\n '[class.mat-slider-sliding]': '_isSliding',\n '[class.mat-slider-thumb-label-showing]': 'thumbLabel',\n '[class.mat-slider-vertical]': 'vertical',\n '[class.mat-slider-min-value]': '_isMinValue()',\n '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue() && _getThumbGap() && _shouldInvertAxis()',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"'\n },\n template: \"<div class=\\\"mat-slider-wrapper\\\" #sliderWrapper>\\n <div class=\\\"mat-slider-track-wrapper\\\">\\n <div class=\\\"mat-slider-track-background\\\" [ngStyle]=\\\"_getTrackBackgroundStyles()\\\"></div>\\n <div class=\\\"mat-slider-track-fill\\\" [ngStyle]=\\\"_getTrackFillStyles()\\\"></div>\\n </div>\\n <div class=\\\"mat-slider-ticks-container\\\" [ngStyle]=\\\"_getTicksContainerStyles()\\\">\\n <div class=\\\"mat-slider-ticks\\\" [ngStyle]=\\\"_getTicksStyles()\\\"></div>\\n </div>\\n <div class=\\\"mat-slider-thumb-container\\\" [ngStyle]=\\\"_getThumbContainerStyles()\\\">\\n <div class=\\\"mat-slider-focus-ring\\\"></div>\\n <div class=\\\"mat-slider-thumb\\\"></div>\\n <div class=\\\"mat-slider-thumb-label\\\">\\n <span class=\\\"mat-slider-thumb-label-text\\\">{{displayValue}}</span>\\n </div>\\n </div>\\n</div>\\n\",\n inputs: ['disabled', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{background-repeat:repeat;background-clip:content-box;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\\\"\\\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { change: [{\n type: Output\n }], input: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], invert: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], value: [{\n type: Input\n }], step: [{\n type: Input\n }], thumbLabel: [{\n type: Input\n }], tickInterval: [{\n type: Input\n }], vertical: [{\n type: Input\n }], displayWith: [{\n type: Input\n }], _sliderWrapper: [{\n type: ViewChild,\n args: ['sliderWrapper']\n }] }); })();\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/** Gets the coordinates of a touch or mouse event relative to the viewport. */\nfunction getPointerPositionOnPage(event) {\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n const point = isTouchEvent(event) ? (event.touches[0] || event.changedTouches[0]) : event;\n return { x: point.clientX, y: point.clientY };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSliderModule {\n}\nMatSliderModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSliderModule });\nMatSliderModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSliderModule_Factory(t) { return new (t || MatSliderModule)(); }, imports: [[CommonModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSliderModule, { declarations: function () { return [MatSlider]; }, imports: function () { return [CommonModule, MatCommonModule]; }, exports: function () { return [MatSlider, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSliderModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SLIDER_VALUE_ACCESSOR, MatSlider, MatSliderChange, MatSliderModule };\n\n//# sourceMappingURL=slider.js.map","import { InjectionToken, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, ChangeDetectorRef, Output, NgModule } from '@angular/core';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nlet nextId = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nclass CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId++}`;\n this._multi = false;\n }\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n get multi() { return this._multi; }\n set multi(multi) { this._multi = coerceBooleanProperty(multi); }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n this._openCloseAll(true);\n }\n /** Closes all enabled accordion items in an accordion where multi is enabled. */\n closeAll() {\n this._openCloseAll(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n _openCloseAll(expanded) {\n if (this.multi) {\n this._openCloseAllActions.next(expanded);\n }\n }\n}\nCdkAccordion.ɵfac = function CdkAccordion_Factory(t) { return new (t || CdkAccordion)(); };\nCdkAccordion.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkAccordion, selectors: [[\"cdk-accordion\"], [\"\", \"cdkAccordion\", \"\"]], inputs: { multi: \"multi\" }, exportAs: [\"cdkAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]), ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkAccordion.propDecorators = {\n multi: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordion, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion, [cdkAccordion]',\n exportAs: 'cdkAccordion',\n providers: [{ provide: CDK_ACCORDION, useExisting: CdkAccordion }]\n }]\n }], function () { return []; }, { multi: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each accordion item. */\nlet nextId$1 = 0;\nconst ɵ0 = undefined;\n/**\n * An basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nclass CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId$1++}`;\n this._expanded = false;\n this._disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => { };\n this._removeUniqueSelectionListener =\n _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion && !this.accordion.multi &&\n this.accordion.id === accordionId && this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Whether the AccordionItem is expanded. */\n get expanded() { return this._expanded; }\n set expanded(expanded) {\n expanded = coerceBooleanProperty(expanded);\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n }\n else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the AccordionItem is disabled. */\n get disabled() { return this._disabled; }\n set disabled(disabled) { this._disabled = coerceBooleanProperty(disabled); }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n}\nCdkAccordionItem.ɵfac = function CdkAccordionItem_Factory(t) { return new (t || CdkAccordionItem)(ɵngcc0.ɵɵdirectiveInject(CDK_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher)); };\nCdkAccordionItem.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkAccordionItem, selectors: [[\"cdk-accordion-item\"], [\"\", \"cdkAccordionItem\", \"\"]], inputs: { expanded: \"expanded\", disabled: \"disabled\" }, outputs: { closed: \"closed\", opened: \"opened\", destroyed: \"destroyed\", expandedChange: \"expandedChange\" }, exportAs: [\"cdkAccordionItem\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ])] });\nCdkAccordionItem.ctorParameters = () => [\n { type: CdkAccordion, decorators: [{ type: Optional }, { type: Inject, args: [CDK_ACCORDION,] }, { type: SkipSelf }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher }\n];\nCdkAccordionItem.propDecorators = {\n closed: [{ type: Output }],\n opened: [{ type: Output }],\n destroyed: [{ type: Output }],\n expandedChange: [{ type: Output }],\n expanded: [{ type: Input }],\n disabled: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordionItem, [{\n type: Directive,\n args: [{\n selector: 'cdk-accordion-item, [cdkAccordionItem]',\n exportAs: 'cdkAccordionItem',\n providers: [\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n { provide: CDK_ACCORDION, useValue: ɵ0 },\n ]\n }]\n }], function () { return [{ type: CdkAccordion, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CDK_ACCORDION]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }]; }, { closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], expanded: [{\n type: Input\n }], disabled: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkAccordionModule {\n}\nCdkAccordionModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CdkAccordionModule });\nCdkAccordionModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CdkAccordionModule_Factory(t) { return new (t || CdkAccordionModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkAccordionModule, { declarations: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkAccordionModule, [{\n type: NgModule,\n args: [{\n exports: [CdkAccordion, CdkAccordionItem],\n declarations: [CdkAccordion, CdkAccordionItem]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkAccordion, CdkAccordionItem, CdkAccordionModule, CDK_ACCORDION as ɵangular_material_src_cdk_accordion_accordion_a };\n\n//# sourceMappingURL=accordion.js.map","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Directive, TemplateRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, SkipSelf, Inject, ChangeDetectorRef, ViewContainerRef, Input, Output, ContentChild, ViewChild, Host, ElementRef, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y';\nimport { ENTER, hasModifierKey, SPACE, HOME, END } from '@angular/cdk/keycodes';\nimport { distinctUntilChanged, startWith, filter, take } from 'rxjs/operators';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/collections';\nimport * as ɵngcc2 from '@angular/cdk/portal';\nimport * as ɵngcc3 from '@angular/cdk/a11y';\nimport * as ɵngcc4 from '@angular/common';\n\nconst _c0 = [\"body\"];\nfunction MatExpansionPanel_ng_template_5_Template(rf, ctx) { }\nconst _c1 = [[[\"mat-expansion-panel-header\"]], \"*\", [[\"mat-action-row\"]]];\nconst _c2 = [\"mat-expansion-panel-header\", \"*\", \"mat-action-row\"];\nfunction MatExpansionPanelHeader_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 2);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@indicatorRotate\", ctx_r0._getExpandedState());\n} }\nconst _c3 = [[[\"mat-panel-title\"]], [[\"mat-panel-description\"]], \"*\"];\nconst _c4 = [\"mat-panel-title\", \"mat-panel-description\", \"*\"];\nconst MAT_ACCORDION = new InjectionToken('MAT_ACCORDION');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(0deg)' })),\n state('expanded', style({ transform: 'rotate(180deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),\n state('expanded', style({ height: '*', visibility: 'visible' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nclass MatExpansionPanelContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatExpansionPanelContent.ɵfac = function MatExpansionPanelContent_Factory(t) { return new (t || MatExpansionPanelContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nMatExpansionPanelContent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelContent, selectors: [[\"ng-template\", \"matExpansionPanelContent\", \"\"]] });\nMatExpansionPanelContent.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelContent, [{\n type: Directive,\n args: [{\n selector: 'ng-template[matExpansionPanelContent]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the defalt\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\nconst ɵ0 = undefined;\n/**\n * `<mat-expansion-panel>`\n *\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nclass MatExpansionPanel extends CdkAccordionItem {\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n /** Stream of body animation done events. */\n this._bodyAnimationDone = new Subject();\n this.accordion = accordion;\n this._document = _document;\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._bodyAnimationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n if (event.fromState !== 'void') {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n }\n else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n }\n });\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value) {\n this._hideToggle = coerceBooleanProperty(value);\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent) {\n // Render the content as soon as the panel becomes open.\n this.opened.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1)).subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._bodyAnimationDone.complete();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n}\nMatExpansionPanel.ɵfac = function MatExpansionPanel_Factory(t) { return new (t || MatExpansionPanel)(ɵngcc0.ɵɵdirectiveInject(MAT_ACCORDION, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8)); };\nMatExpansionPanel.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanel, selectors: [[\"mat-expansion-panel\"]], contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelContent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._lazyContent = _t.first);\n } }, viewQuery: function MatExpansionPanel_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._body = _t.first);\n } }, hostAttrs: [1, \"mat-expansion-panel\"], hostVars: 6, hostBindings: function MatExpansionPanel_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx.expanded)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-expansion-panel-spacing\", ctx._hasSpacing());\n } }, inputs: { disabled: \"disabled\", expanded: \"expanded\", hideToggle: \"hideToggle\", togglePosition: \"togglePosition\" }, outputs: { opened: \"opened\", closed: \"closed\", expandedChange: \"expandedChange\", afterExpand: \"afterExpand\", afterCollapse: \"afterCollapse\" }, exportAs: [\"matExpansionPanel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c2, decls: 7, vars: 4, consts: [[\"role\", \"region\", 1, \"mat-expansion-panel-content\", 3, \"id\"], [\"body\", \"\"], [1, \"mat-expansion-panel-body\"], [3, \"cdkPortalOutlet\"]], template: function MatExpansionPanel_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 0, 1);\n ɵngcc0.ɵɵlistener(\"@bodyExpansion.done\", function MatExpansionPanel_Template_div_animation_bodyExpansion_done_1_listener($event) { return ctx._bodyAnimationDone.next($event); });\n ɵngcc0.ɵɵelementStart(3, \"div\", 2);\n ɵngcc0.ɵɵprojection(4, 1);\n ɵngcc0.ɵɵtemplate(5, MatExpansionPanel_ng_template_5_Template, 0, 0, \"ng-template\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(6, 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"@bodyExpansion\", ctx._getExpandedState())(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"aria-labelledby\", ctx._headerId);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"cdkPortalOutlet\", ctx._portal);\n } }, directives: [ɵngcc2.CdkPortalOutlet], styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"], encapsulation: 2, data: { animation: [matExpansionAnimations.bodyExpansion] }, changeDetection: 0 });\nMatExpansionPanel.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [MAT_ACCORDION,] }] },\n { type: ChangeDetectorRef },\n { type: UniqueSelectionDispatcher },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] }\n];\nMatExpansionPanel.propDecorators = {\n hideToggle: [{ type: Input }],\n togglePosition: [{ type: Input }],\n afterExpand: [{ type: Output }],\n afterCollapse: [{ type: Output }],\n _lazyContent: [{ type: ContentChild, args: [MatExpansionPanelContent,] }],\n _body: [{ type: ViewChild, args: ['body',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanel, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel',\n exportAs: 'matExpansionPanel',\n template: \"<ng-content select=\\\"mat-expansion-panel-header\\\"></ng-content>\\n<div class=\\\"mat-expansion-panel-content\\\"\\n role=\\\"region\\\"\\n [@bodyExpansion]=\\\"_getExpandedState()\\\"\\n (@bodyExpansion.done)=\\\"_bodyAnimationDone.next($event)\\\"\\n [attr.aria-labelledby]=\\\"_headerId\\\"\\n [id]=\\\"id\\\"\\n #body>\\n <div class=\\\"mat-expansion-panel-body\\\">\\n <ng-content></ng-content>\\n <ng-template [cdkPortalOutlet]=\\\"_portal\\\"></ng-template>\\n </div>\\n <ng-content select=\\\"mat-action-row\\\"></ng-content>\\n</div>\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled', 'expanded'],\n outputs: ['opened', 'closed', 'expandedChange'],\n animations: [matExpansionAnimations.bodyExpansion],\n providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n { provide: MAT_ACCORDION, useValue: ɵ0 },\n ],\n host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()'\n },\n styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [MAT_ACCORDION]\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.UniqueSelectionDispatcher }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }]; }, { afterExpand: [{\n type: Output\n }], afterCollapse: [{\n type: Output\n }], hideToggle: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatExpansionPanelContent]\n }], _body: [{\n type: ViewChild,\n args: ['body']\n }] }); })();\nclass MatExpansionPanelActionRow {\n}\nMatExpansionPanelActionRow.ɵfac = function MatExpansionPanelActionRow_Factory(t) { return new (t || MatExpansionPanelActionRow)(); };\nMatExpansionPanelActionRow.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelActionRow, selectors: [[\"mat-action-row\"]], hostAttrs: [1, \"mat-action-row\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelActionRow, [{\n type: Directive,\n args: [{\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row'\n }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `<mat-expansion-panel-header>`\n *\n * This component corresponds to the header element of an `<mat-expansion-panel>`.\n */\nclass MatExpansionPanelHeader {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode) {\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n const accordionHideToggleChange = panel.accordion ?\n panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) :\n EMPTY;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription =\n merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] ||\n changes['disabled'] ||\n changes['togglePosition']);\n })))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n }\n else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin = 'program', options) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n}\nMatExpansionPanelHeader.ɵfac = function MatExpansionPanelHeader_Factory(t) { return new (t || MatExpansionPanelHeader)(ɵngcc0.ɵɵdirectiveInject(MatExpansionPanel, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatExpansionPanelHeader.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanelHeader, selectors: [[\"mat-expansion-panel-header\"]], hostAttrs: [\"role\", \"button\", 1, \"mat-expansion-panel-header\", \"mat-focus-indicator\"], hostVars: 15, hostBindings: function MatExpansionPanelHeader_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatExpansionPanelHeader_click_HostBindingHandler() { return ctx._toggle(); })(\"keydown\", function MatExpansionPanelHeader_keydown_HostBindingHandler($event) { return ctx._keydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.panel._headerId)(\"tabindex\", ctx.disabled ? 0 - 1 : 0)(\"aria-controls\", ctx._getPanelId())(\"aria-expanded\", ctx._isExpanded())(\"aria-disabled\", ctx.panel.disabled);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx._getHeaderHeight());\n ɵngcc0.ɵɵclassProp(\"mat-expanded\", ctx._isExpanded())(\"mat-expansion-toggle-indicator-after\", ctx._getTogglePosition() === \"after\")(\"mat-expansion-toggle-indicator-before\", ctx._getTogglePosition() === \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { expandedHeight: \"expandedHeight\", collapsedHeight: \"collapsedHeight\" }, ngContentSelectors: _c4, decls: 5, vars: 1, consts: [[1, \"mat-content\"], [\"class\", \"mat-expansion-indicator\", 4, \"ngIf\"], [1, \"mat-expansion-indicator\"]], template: function MatExpansionPanelHeader_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵprojection(3, 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, MatExpansionPanelHeader_span_4_Template, 1, 1, \"span\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._showToggle());\n } }, directives: [ɵngcc4.NgIf], styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}\\n\"], encapsulation: 2, data: { animation: [\n matExpansionAnimations.indicatorRotate,\n ] }, changeDetection: 0 });\nMatExpansionPanelHeader.ctorParameters = () => [\n { type: MatExpansionPanel, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: FocusMonitor },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,] }, { type: Optional }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatExpansionPanelHeader.propDecorators = {\n expandedHeight: [{ type: Input }],\n collapsedHeight: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelHeader, [{\n type: Component,\n args: [{\n selector: 'mat-expansion-panel-header',\n template: \"<span class=\\\"mat-content\\\">\\n <ng-content select=\\\"mat-panel-title\\\"></ng-content>\\n <ng-content select=\\\"mat-panel-description\\\"></ng-content>\\n <ng-content></ng-content>\\n</span>\\n<span [@indicatorRotate]=\\\"_getExpandedState()\\\" *ngIf=\\\"_showToggle()\\\"\\n class=\\\"mat-expansion-indicator\\\"></span>\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n matExpansionAnimations.indicatorRotate,\n ],\n host: {\n 'class': 'mat-expansion-panel-header mat-focus-indicator',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[style.height]': '_getHeaderHeight()',\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)'\n },\n styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}\\n\"]\n }]\n }], function () { return [{ type: MatExpansionPanel, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc3.FocusMonitor }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]\n }, {\n type: Optional\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { expandedHeight: [{\n type: Input\n }], collapsedHeight: [{\n type: Input\n }] }); })();\n/**\n * `<mat-panel-description>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\nclass MatExpansionPanelDescription {\n}\nMatExpansionPanelDescription.ɵfac = function MatExpansionPanelDescription_Factory(t) { return new (t || MatExpansionPanelDescription)(); };\nMatExpansionPanelDescription.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelDescription, selectors: [[\"mat-panel-description\"]], hostAttrs: [1, \"mat-expansion-panel-header-description\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelDescription, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description'\n }\n }]\n }], null, null); })();\n/**\n * `<mat-panel-title>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\nclass MatExpansionPanelTitle {\n}\nMatExpansionPanelTitle.ɵfac = function MatExpansionPanelTitle_Factory(t) { return new (t || MatExpansionPanelTitle)(); };\nMatExpansionPanelTitle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelTitle, selectors: [[\"mat-panel-title\"]], hostAttrs: [1, \"mat-expansion-panel-header-title\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionPanelTitle, [{\n type: Directive,\n args: [{\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title'\n }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive for a Material Design Accordion.\n */\nclass MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n this._hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n /** Whether the expansion indicator should be hidden. */\n get hideToggle() { return this._hideToggle; }\n set hideToggle(show) { this._hideToggle = coerceBooleanProperty(show); }\n ngAfterContentInit() {\n this._headers.changes\n .pipe(startWith(this._headers))\n .subscribe((headers) => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n const { keyCode } = event;\n const manager = this._keyManager;\n if (keyCode === HOME) {\n if (!hasModifierKey(event)) {\n manager.setFirstItemActive();\n event.preventDefault();\n }\n }\n else if (keyCode === END) {\n if (!hasModifierKey(event)) {\n manager.setLastItemActive();\n event.preventDefault();\n }\n }\n else {\n this._keyManager.onKeydown(event);\n }\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n}\nMatAccordion.ɵfac = function MatAccordion_Factory(t) { return ɵMatAccordion_BaseFactory(t || MatAccordion); };\nMatAccordion.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatAccordion, selectors: [[\"mat-accordion\"]], contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelHeader, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._headers = _t);\n } }, hostAttrs: [1, \"mat-accordion\"], hostVars: 2, hostBindings: function MatAccordion_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-accordion-multi\", ctx.multi);\n } }, inputs: { multi: \"multi\", displayMode: \"displayMode\", togglePosition: \"togglePosition\", hideToggle: \"hideToggle\" }, exportAs: [\"matAccordion\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatAccordion.propDecorators = {\n _headers: [{ type: ContentChildren, args: [MatExpansionPanelHeader, { descendants: true },] }],\n hideToggle: [{ type: Input }],\n displayMode: [{ type: Input }],\n togglePosition: [{ type: Input }]\n};\nconst ɵMatAccordion_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatAccordion);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatAccordion, [{\n type: Directive,\n args: [{\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n inputs: ['multi'],\n providers: [{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }],\n host: {\n class: 'mat-accordion',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if multiple panel support is enabled.\n '[class.mat-accordion-multi]': 'this.multi'\n }\n }]\n }], null, { displayMode: [{\n type: Input\n }], togglePosition: [{\n type: Input\n }], hideToggle: [{\n type: Input\n }], _headers: [{\n type: ContentChildren,\n args: [MatExpansionPanelHeader, { descendants: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatExpansionModule {\n}\nMatExpansionModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatExpansionModule });\nMatExpansionModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatExpansionModule_Factory(t) { return new (t || MatExpansionModule)(); }, imports: [[CommonModule, CdkAccordionModule, PortalModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatExpansionModule, { declarations: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; }, imports: function () { return [CommonModule, CdkAccordionModule, PortalModule]; }, exports: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatExpansionModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, CdkAccordionModule, PortalModule],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n declarations: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations, ɵ0 };\n\n//# sourceMappingURL=expansion.js.map","import {UndoCommandsList} from './undo-commands-list';\nimport commandParams from './undo-manager-types';\n\nexport class UndoCommand {\n constructor(private name: string, private params: commandParams) {\n const actions = UndoCommandsList[name](params);\n this.undo = actions.undo.bind(this);\n this.redo = actions.redo.bind(this);\n }\n\n /**\n * Will be implemented by command list.\n */\n public undo() {}\n\n /**\n * Will be implemented by command list.\n */\n public redo() {}\n}\n","import commandParams from './undo-manager-types';\n\nexport class UndoCommandsList {\n\n public static generic(params: commandParams) {\n return {\n undo: params.undo,\n redo: params.redo,\n };\n }\n\n public static domChanges(params: commandParams) {\n return {\n undo: () => {\n if ( ! params.node || ! params.node.parentElement) return;\n\n while (params.node.hasChildNodes()) params.node.removeChild(params.node.firstChild);\n\n const cloned = params.oldNode.cloneNode(true);\n while (cloned.hasChildNodes()) params.node.appendChild(cloned.firstChild);\n\n // copy inline styles and classes from old node, as parent node will not be replaced\n params.node.style.cssText = params.oldNode.style.cssText;\n params.node.className = params.oldNode.className;\n },\n redo: () => {\n if ( ! params.node || ! params.node.parentElement) return;\n\n while (params.node.hasChildNodes()) params.node.removeChild(params.node.firstChild);\n\n const cloned = params.newNode.cloneNode(true);\n while (cloned.hasChildNodes()) params.node.appendChild(cloned.firstChild);\n\n // copy inline styles and classes from old node, as parent node will not be replaced\n params.node.style.cssText = params.newNode.style.cssText;\n params.node.className = params.newNode.className;\n },\n };\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {UndoCommand} from \"./undo-command\";\nimport commandParams from \"./undo-manager-types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UndoManager {\n\n /**\n * Stack of undo/redo commands.\n */\n private commands: UndoCommand[] = [];\n\n /**\n * Current position of pointer in undo/redo stack.\n */\n private pointer = -1;\n\n public executedCommand = new EventEmitter();\n\n /**\n * Whether or not there's any undos left in the stack.\n */\n public canUndo() {\n return this.pointer !== -1;\n }\n\n /**\n * Whether or not there's any redos left in the stack.\n *\n * @return {Boolean}\n */\n public canRedo() {\n return this.pointer < (this.commands.length - 1);\n }\n\n /**\n * Execute undo function of command at current pointers position in stack.\n */\n public undo() {\n const command = this.commands[this.pointer];\n\n if (command) {\n command.undo();\n this.pointer -= 1;\n this.executedCommand.emit('undo');\n }\n }\n\n /**\n * Execute redo function of command at current pointers position in stack.\n */\n public redo() {\n const command = this.commands[this.pointer + 1];\n\n if (command) {\n command.redo();\n this.pointer += 1;\n this.executedCommand.emit('redo');\n }\n }\n\n /**\n * Add a new undo/redo command to the stack.\n */\n public add(name: string, params: commandParams) {\n // limit number of commands to 100\n if (this.commands.length > 100) {\n this.commands.splice(this.commands.length - 1, 1);\n }\n\n // make a new command\n const command = new UndoCommand(name, params);\n\n // push it onto the stack\n this.commands.push(command);\n\n // update pointer position\n this.pointer = this.commands.length - 1;\n\n return command;\n }\n\n /**\n * Wrap specified changes to dom in undo command.\n */\n public wrapDomChanges(parent: HTMLElement, callback: Function|null, options: {before?: HTMLElement, after?: HTMLElement} = {}) {\n if ( ! parent) return;\n\n const before = options.before || parent.cloneNode(true);\n\n callback && callback();\n\n const after = options.after || parent.cloneNode(true);\n\n this.add('domChanges', {\n oldNode: (before as HTMLElement),\n newNode: (after as HTMLElement),\n node: (parent as HTMLElement),\n });\n }\n}\n","import {BuilderElement} from '../elements/builder-element';\r\n\r\nexport class ActiveElement {\r\n public element: BuilderElement;\r\n public node: HTMLElement;\r\n public path: {node: HTMLElement, name: string}[];\r\n public parent: HTMLElement;\r\n public locked?: boolean;\r\n public isImage = false;\r\n}\r\n","import {ElementRef, Injectable} from '@angular/core';\nimport {Elements} from '../elements/elements.service';\nimport {LocalStorage} from '@common/core/services/local-storage.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ContextBoxes {\n private previewRect: ClientRect;\n private hoverBox: HTMLElement;\n private selectedBox: HTMLElement;\n\n constructor(\n private elements: Elements,\n private localStorage: LocalStorage\n ) {}\n\n public repositionBox(name: 'hover'|'selected', node: HTMLElement) {\n // hide context boxes depending on user settings\n if ( ! this.localStorage.get('settings.' + name + 'BoxEnabled', true)) return;\n\n if ( ! node || node.nodeType !== Node.ELEMENT_NODE || this.nodeIsHtmlOrBody(node)) {\n return this.hideBox(name);\n }\n\n const rect = node.getBoundingClientRect();\n\n if ( ! rect.width || ! rect.height) {\n this.hideBox(name);\n } else {\n this.getBox(name).style.top = rect.top + 'px';\n this.getBox(name).style.left = rect.left + 'px';\n this.getBox(name).style.height = rect.height + 'px';\n this.getBox(name).style.width = rect.width + 'px';\n this.showBox(name);\n }\n\n // active compact mode if node is not wide enough to fit all buttons\n if (rect.width < 85) {\n this.getBox(name).classList.add('compact-mode');\n } else {\n this.getBox(name).classList.remove('compact-mode');\n }\n\n // place context box toolbar on the bottom, if there's not enough space top\n if (parseInt(this.getBox(name).style.top) < 20) {\n this.getBox(name).classList.add('toolbar-bottom');\n } else {\n this.getBox(name).classList.remove('toolbar-bottom');\n }\n }\n\n public hideBox(name: 'hover'|'selected') {\n const box = this.getBox(name);\n box && box.classList.add('hidden');\n }\n\n public hideBoxes() {\n this.hideBox('selected');\n this.hideBox('hover');\n }\n\n public showBox(name: 'hover'|'selected') {\n this.getBox(name).classList.remove('hidden');\n }\n\n public set(hover: HTMLElement, selected: HTMLElement, iframe: ElementRef) {\n this.hoverBox = hover;\n this.selectedBox = selected;\n this.previewRect = iframe.nativeElement.getBoundingClientRect();\n }\n\n public getBox(name: 'hover'|'selected'): HTMLElement {\n return name === 'hover' ? this.hoverBox : this.selectedBox;\n }\n\n private nodeIsHtmlOrBody(node: HTMLElement) {\n if ( ! node) return false;\n return node.nodeName === 'BODY' || node.nodeName === 'HTML';\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ActiveElement} from './active-element';\nimport {Elements} from '../elements/elements.service';\nimport {ContextBoxes} from './context-boxes.service';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectedElement extends ActiveElement {\n public changed = new BehaviorSubject(null);\n public isIcon = false;\n public isLink = false;\n public isLayout = false;\n\n constructor(\n private elements: Elements,\n private contextBoxes: ContextBoxes,\n ) {\n super();\n }\n\n public selectParent() {\n this.selectNode(this.node.parentElement);\n }\n\n public canSelectParent() {\n if ( ! this.node) return false;\n const parent = this.node.parentElement;\n return parent && parent.nodeName.toLowerCase() !== 'body';\n }\n\n public selectFirstChild() {\n this.selectNode(this.node.firstChild as HTMLElement);\n }\n\n public canSelectChild() {\n if ( ! this.node) return false;\n return this.node.firstChild;\n }\n\n public getStyle(name: string): string {\n if ( ! this.node) return null;\n return window.getComputedStyle(this.node)[name];\n }\n\n /**\n * Check if specified property/style of this element can be modified.\n */\n public canModify(property: string) {\n return this.elements.canModify(property, this.element);\n }\n\n /**\n * Select specified node as active one in the builder.\n */\n public selectNode(node: HTMLElement) {\n if ( ! node || node.nodeType !== Node.ELEMENT_NODE || this.node === node) return;\n\n if (node.nodeName.toLowerCase() === 'html') {\n node = node.querySelector('body');\n }\n if (node.nodeName.toLowerCase() === 'path') {\n node = node.closest('svg') as any;\n }\n\n // if we haven't already stored a reference to passed in node, do it now\n if (node && this.node !== node) {\n this.node = node as HTMLElement;\n }\n\n // cache some more references about the node for later use\n this.element = this.elements.match(this.node, 'select', true);\n this.parent = this.node.parentElement;\n\n // position select box on top of the newly selected node\n this.contextBoxes.repositionBox('selected', this.node);\n\n // whether or not the new node is locked\n this.locked = typeof this.node.className === 'string' && this.node.className.indexOf('locked') > -1;\n\n this.isImage = this.node.nodeName.toLowerCase() === 'img';\n this.isIcon = this.elements.isIcon(this.node);\n this.isLink = this.elements.isLink(this.node);\n this.isLayout = this.elements.isLayout(this.node);\n\n // create an array from all parents of this node\n let el = this.node;\n this.path = [];\n while (el && el.nodeType === Node.ELEMENT_NODE && el.nodeName.toLowerCase() !== 'body') {\n this.path.unshift({node: el, name: this.elements.getDisplayName(this.elements.match(el), el)});\n el = el.parentElement;\n }\n\n this.changed.next(this);\n }\n\n public isHtmlOrBody() {\n return this.node.nodeName === 'BODY' || this.node.nodeName === 'HTML';\n }\n}\n","import {Injectable} from '@angular/core';\nimport {UndoManager} from './undo-manager/undo-manager.service';\nimport {Subject} from 'rxjs';\nimport {SelectedElement} from './live-preview/selected-element.service';\nimport {Elements} from './elements/elements.service';\nimport {ContextBoxes} from './live-preview/context-boxes.service';\nimport {changeSources} from './builder-document.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BuilderDocumentActions {\n public copiedNode: HTMLElement;\n public contentChanged = new Subject<string>();\n\n constructor(\n private undoManager: UndoManager,\n private selected: SelectedElement,\n private elements: Elements,\n private contextBoxes: ContextBoxes,\n ) {}\n\n public applyStyle(node: HTMLElement, name: string, value: string, addUndoCommand = true) {\n if (addUndoCommand) {\n this.undoManager.wrapDomChanges(node, () => {\n node.style[name] = value;\n this.contextBoxes.repositionBox('selected', node);\n this.contentChanged.next('builderDocument');\n });\n } else {\n node.style[name] = value;\n this.contextBoxes.repositionBox('selected', node);\n this.contentChanged.next('builderDocument');\n }\n }\n\n public cloneNode(node: HTMLElement): HTMLElement {\n const cloned = node.cloneNode(true) as HTMLElement;\n\n this.undoManager.wrapDomChanges(node.parentElement, () => {\n node.parentElement.insertBefore(cloned, node.nextElementSibling);\n this.contentChanged.next('nodeAdded');\n });\n\n return cloned as HTMLElement;\n }\n\n public removeNode(node: HTMLElement): HTMLElement {\n if ( ! node) return;\n\n this.undoManager.wrapDomChanges(node.parentElement, () => {\n if (this.selected.node === node) this.selected.selectParent();\n node.parentElement.removeChild(node);\n this.contentChanged.next('nodeRemoved');\n });\n\n this.contextBoxes.hideBoxes();\n\n return node;\n }\n\n public copyNode(node: HTMLElement) {\n if (node && node.nodeName != 'BODY') {\n this.copiedNode = node.cloneNode(true) as HTMLElement;\n }\n }\n\n public pasteNode(ref: HTMLElement, copiedNode?: HTMLElement) {\n if ( ! copiedNode) copiedNode = this.copiedNode;\n\n if (ref && copiedNode) {\n this.undoManager.wrapDomChanges(ref.parentElement, () => {\n // make sure we don't paste refs after body\n if (ref.nodeName == 'BODY') {\n ref.appendChild(copiedNode);\n } else {\n ref.parentElement.insertBefore(copiedNode, ref.nextSibling);\n }\n\n this.contextBoxes.hideBox('selected');\n });\n\n // add undo\n this.contentChanged.next('nodeAdded');\n }\n }\n\n public cutNode(node: HTMLElement) {\n if (node && node.nodeName != 'BODY') {\n this.copyNode(node);\n this.removeNode(node);\n }\n }\n\n public duplicateNode(node: HTMLElement) {\n const cloned = node.cloneNode(true) as HTMLElement;\n this.pasteNode(this.selected.node, cloned);\n }\n\n public setChangedSubject(subject: Subject<changeSources>) {\n this.contentChanged = subject;\n }\n\n /**\n * Move selected node by one element in the specified direction.\n */\n public moveSelected(dir: 'up'|'down') {\n if ( ! this.selected.node) return;\n\n if (dir === 'down') {\n const next = this.selected.node.nextElementSibling as HTMLElement;\n\n if (next) {\n // check if we can insert selected node into the next one\n if (this.elements.canInsert(next, this.selected.element)) {\n next.insertBefore(this.selected.node, next.firstChild);\n } else {\n next.parentElement.insertBefore(this.selected.node, next.nextElementSibling);\n }\n\n } else {\n const parentParent = this.selected.node.parentElement.parentElement as HTMLElement;\n\n if (this.elements.canInsert(parentParent, this.selected.element)) {\n parentParent.parentElement.insertBefore(this.selected.node, parentParent.nextElementSibling);\n }\n }\n } else if (dir === 'up') {\n const prev = this.selected.node.previousElementSibling as HTMLElement;\n\n if (prev) {\n // check if we can insert selected node into the prev one\n if (this.elements.canInsert(prev, this.selected.element)) {\n prev.appendChild(this.selected.node);\n } else {\n prev.parentElement.insertBefore(this.selected.node, prev);\n }\n } else {\n const parentParent = this.selected.node.parentElement.parentElement;\n\n if (this.elements.canInsert(parentParent, this.selected.element)) {\n parentParent.insertBefore(this.selected.node, this.selected.node.parentElement);\n }\n }\n }\n\n this.contextBoxes.repositionBox('selected', this.selected.node);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject} from 'rxjs';\nimport {delay, filter, take} from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MainLoaderService {\n public loading$ = new BehaviorSubject(true);\n public loadedAtLeastOnce$ = new ReplaySubject(1);\n\n constructor() {\n // wait 500ms until loader animation is complete\n this.loading$.pipe(filter(loading => !loading), take(1), delay(500))\n .subscribe(() => this.loadedAtLeastOnce$.next(true));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {from, Observable, ReplaySubject, Subject} from 'rxjs';\nimport {BuilderDocumentActions} from './builder-document-actions.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {ContextBoxes} from './live-preview/context-boxes.service';\nimport {BuilderTemplate} from '../shared/builder-types';\nimport {DomHelpers} from '../shared/dom-helpers.service';\nimport {randomString} from '@common/core/utils/random-string';\nimport {getProductionHtml} from './utils/parse-html-into-document';\nimport {MainLoaderService} from './main-loader/main-loader.service';\nimport {share} from 'rxjs/operators';\n\nexport type changeSources = 'builder' | 'codeEditor' | 'activeProject';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BuilderDocument {\n public document: Document;\n public baseUrl: string;\n public contentChanged = new Subject<changeSources>();\n public loaded$ = new ReplaySubject(1);\n private template: BuilderTemplate;\n\n constructor(\n public actions: BuilderDocumentActions,\n private settings: Settings,\n private contextBoxes: ContextBoxes,\n private mainLoader: MainLoaderService,\n ) {\n this.actions.setChangedSubject(this.contentChanged);\n }\n\n public getInnerHtml(): string {\n return this.document.documentElement.innerHTML;\n }\n\n public getOuterHtml(): string {\n return getProductionHtml(this.document.documentElement.outerHTML, this.template?.config);\n }\n\n public get(): Document {\n return this.document;\n }\n\n public getBody(): HTMLBodyElement {\n return this.document.body as HTMLBodyElement;\n }\n\n public focus() {\n const body = this.getBody();\n body && body.focus();\n }\n\n public getScrollTop(): number {\n if ( ! this.document.documentElement) return 0;\n return this.document.documentElement.scrollTop || this.getBody().scrollTop;\n }\n\n public scrollIntoView(node: HTMLElement) {\n if ( ! node) return;\n node.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'center'});\n }\n\n public elementFromPoint(x: number, y: number): HTMLElement {\n return this.document.elementFromPoint(x, y) as HTMLElement;\n }\n\n /**\n * Reload css from specified stylesheet link.\n */\n public reloadCustomElementsCss() {\n const link = this.find('#custom-elements-css');\n const newHref = link.getAttribute('href').split('?')[0] + '?=' + randomString(8);\n link.setAttribute('href', newHref);\n }\n\n public createElement(tagName: string): HTMLElement {\n return this.document.createElement(tagName);\n }\n\n public on(name: string, callback: Function, useCapture?: boolean) {\n this.document.addEventListener(name as any, callback as any, useCapture);\n }\n\n public find(selector: string): HTMLElement {\n return this.document.querySelector(selector) as HTMLElement;\n }\n\n public findAll(selector: string): NodeListOf<HTMLElement> {\n return this.document.querySelectorAll(selector) as NodeListOf<HTMLElement>;\n }\n\n public execCommand(name: string, value?: string) {\n return this.document.execCommand(name, null, value);\n }\n\n public queryCommandState(name: string): boolean {\n return this.document.queryCommandState(name);\n }\n\n public update(options: {html: string, template?: BuilderTemplate, theme?: boolean, source?: changeSources}): Observable<any> {\n this.mainLoader.loading$.next(true);\n\n options = Object.assign({}, {\n template: this.template,\n source: 'builderDocument'\n }, options);\n\n this.template = options.template || this.template;\n const config = {includeBootstrap: true, ...this.template?.config, theme: options.theme};\n\n this.contextBoxes.hideBoxes();\n this.document.body.scrollTop = 0;\n this.document.documentElement.innerHTML = getProductionHtml(options.html, config);\n this.addIframeCss();\n this.contentChanged.next(options.source);\n\n // wait until all css stylesheets are loaded\n const links = Array.from(this.document.head.querySelectorAll('link'));\n const promises = links.filter(link => link.href.endsWith('.css') && !link.sheet).map(link => {\n return new Promise(r => link.addEventListener('load', r));\n });\n\n const observable = from(Promise.all(promises)).pipe(share());\n observable.subscribe(() => {\n // fire window \"load\" event so loaders and other things are hidden when page is changed\n this.document.defaultView.dispatchEvent(new Event('load'));\n this.mainLoader.loading$.next(false);\n });\n return observable;\n }\n\n public getMetaTagValue(name: string) {\n const node = this.document.querySelector(`meta[name=${name}]`);\n return node && node.getAttribute('content');\n }\n\n public setMetaTagValue(name: string, value: string) {\n let node = this.document.querySelector(`meta[name=${name}]`);\n if ( ! node) {\n node = this.document.createElement('meta');\n this.document.head.appendChild(node);\n }\n\n node.setAttribute('name', name);\n node.setAttribute('content', value);\n }\n\n public getTitleValue() {\n const node = this.document.querySelector('title');\n return node && node.innerText;\n }\n\n public setTitleValue(value: string) {\n let node = this.document.querySelector('title');\n if ( ! node) {\n node = this.document.createElement('title');\n this.document.head.appendChild(node);\n }\n\n node.innerText = value;\n }\n\n /**\n * Set template that is currently applied to project.\n */\n public setTemplate(template: BuilderTemplate) {\n this.template = template;\n }\n\n /**\n * Add html builder iframe css to the document.\n */\n public addIframeCss() {\n const url = this.settings.getAssetUrl() + 'css/iframe.css';\n const link = DomHelpers.createLink(url, 'preview-css');\n this.document.head.appendChild(link);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BuilderDocument} from '../builder-document.service';\nimport * as html2canvas from 'html2canvas';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {LocalStorage} from '@common/core/services/local-storage.service';\nimport {ProjectUrl} from '../../shared/projects/project-url.service';\nimport {Projects} from '../../shared/projects/projects.service';\nimport {Theme} from '../../shared/themes/Theme';\nimport {BuilderPage, BuilderProject, BuilderTemplate} from '../../shared/builder-types';\nimport {Templates} from '../../shared/templates/templates.service';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {debounceTime, share, switchMap, tap} from 'rxjs/operators';\nimport {Settings} from '@common/core/config/settings.service';\nimport {FileEntry} from '@common/uploads/types/file-entry';\nimport {isAbsoluteUrl} from '@common/core/utils/is-absolute-url';\nimport {getProductionHtml} from '../utils/parse-html-into-document';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActiveProject {\n public activeTemplate: BuilderTemplate;\n public pages$ = new BehaviorSubject<BuilderPage[]>([]);\n public activePage$ = new BehaviorSubject<BuilderPage>(null);\n public project: BuilderProject;\n public saving = false;\n\n constructor(\n private settings: Settings,\n private builderDocument: BuilderDocument,\n public projectUrl: ProjectUrl,\n private projects: Projects,\n private templates: Templates,\n private toast: Toast,\n private localStorage: LocalStorage,\n ) {\n this.bindToBuilderDocumentChangeEvent();\n }\n\n public get(): BuilderProject {\n return this.project;\n }\n\n public save(options: {thumbnail?: boolean, params?: object} = {thumbnail: true}): Observable<{project: BuilderProject}> {\n this.saving = true;\n\n if (options.thumbnail) {\n this.createThumbnail();\n }\n\n if ( ! options.params) options.params = {};\n\n // update html of active page, so it's synced with the builder\n this.activePage$.value.html = this.builderDocument.getOuterHtml();\n\n const payload = Object.assign({}, options.params, {\n name: this.project.model.name,\n css: this.project.css,\n js: this.project.js,\n theme: this.project.model.theme,\n template: this.project.model.template,\n pages: this.pages$.value.map(page => {\n return {name: page.name, html: page.html};\n })\n });\n\n const request = this.projects.update(this.project.model.id, payload).pipe(share());\n\n request.subscribe(response => {\n this.project = response.project;\n this.saving = false;\n }, () => {\n this.saving = false;\n this.toast.open('Could not save project');\n });\n\n return request;\n }\n\n public setActivePage(pageName: string) {\n const page = this.pages$.value.find(curr => curr.name.toLowerCase() === pageName.toLowerCase());\n if (page) {\n this.activePage$.next(page);\n }\n return this;\n }\n\n public addPage(page: BuilderPage): Observable<any> {\n this.pages$.next([page, ...this.pages$.value]);\n this.activePage$.next(page);\n return this.updateBuilderDocument();\n }\n\n public updatePage(pageName: string, newPage: BuilderPage): ActiveProject {\n const pages = [...this.pages$.value];\n const i = pages.findIndex(page => page.name === pageName);\n pages[i] = newPage;\n this.pages$.next(pages);\n return this;\n }\n\n public removePage(page: BuilderPage) {\n const pages = [...this.pages$.value];\n const i = pages.findIndex(p => page.name === p.name);\n pages.splice(i, 1);\n this.pages$.next(pages);\n this.activePage$.next(pages[pages.length - 1]);\n this.updateBuilderDocument();\n }\n\n public setProject(project: BuilderProject) {\n this.project = project;\n this.pages$.next(project.pages);\n this.setActivePage('index');\n this.activeTemplate = project.template;\n this.builderDocument.setTemplate(this.activeTemplate);\n }\n\n public applyTemplate(name: string) {\n this.project.model.template = name;\n return this.templates.get(name).pipe(\n tap(response => {\n this.activeTemplate = response.template;\n const newPages = response.template.pages.map(page => {\n return {\n name: page.name,\n html: getProductionHtml(page.html, this.activeTemplate.config),\n };\n });\n this.pages$.next(newPages);\n this.setActivePage('index');\n this.updateBuilderDocument();\n }),\n switchMap(() => {\n return this.save({thumbnail: true})\n .pipe(tap(() => {\n this.builderDocument.document.body.scrollTop = 0;\n this.builderDocument.document.location.reload();\n }));\n }),\n );\n }\n\n public applyTheme(theme?: Theme): Observable<void> {\n this.project.model.theme = theme?.name || null;\n const request = this.save({thumbnail: false})\n .pipe(switchMap(() => this.updateBuilderDocument()), share());\n request.subscribe(() => this.toast.open('Theme applied'));\n return request;\n }\n\n public getBaseUrl(relative = false): string {\n if ( ! this.project) return '';\n return this.projectUrl.getBaseUrl(this.project.model, relative);\n }\n\n public getSiteUrl() {\n return this.projectUrl.getSiteUrl(this.project.model);\n }\n\n public getImageUrl(entry: FileEntry) {\n if (isAbsoluteUrl(entry.url)) {\n return entry.url;\n } else {\n const path = this.getBaseUrl(true) + 'images';\n // project will already have full project path as \"base url\", only need relative path from \"images\" folder\n return entry.url.replace(`storage/${path}`, 'images');\n }\n }\n\n public updateBuilderDocument(): Observable<void> {\n return this.builderDocument.update({\n html: this.activePage$.value.html,\n template: this.activeTemplate,\n source: 'activeProject',\n theme: !!this.project.model.theme,\n });\n }\n\n /**\n * Auto save and update project pages on builder document change event.\n */\n private bindToBuilderDocumentChangeEvent() {\n this.builderDocument.contentChanged.pipe(debounceTime(1000)).subscribe(source => {\n if (source === 'activeProject') return;\n\n this.activePage$.value.html = this.builderDocument.getOuterHtml();\n\n if (this.localStorage.get('settings.autoSave')) {\n this.save({thumbnail: false});\n }\n });\n }\n\n private createThumbnail() {\n const base = document.createElement('base');\n base.href = this.getBaseUrl();\n if ( ! this.builderDocument.document.head.querySelector('base')) {\n this.builderDocument.get().head.prepend(base);\n }\n (html2canvas as any)(this.builderDocument.get().documentElement, {svgRendering: true, height: 1000}).then(canvas => {\n base.remove();\n this.projects.generateThumbnail(this.project.model.id, canvas.toDataURL('image/png'))\n .subscribe(() => {}, () => {});\n });\n }\n}\n","export const aceThemes = ['chrome', 'clouds', 'crimson_editor', 'tomorrow_night', 'dawn',\r\n 'dreamweaver', 'eclipse', 'github', 'solarized_light', 'textmate', 'tomorrow',\r\n 'xcode', 'kuroir', 'katzen_milch', 'ambiance', 'chaos', 'clouds_midnight', 'cobalt',\r\n 'idle_fingers', 'kr_theme', 'merbivore', 'merbivore_soft', 'mono_industrial', 'monokai',\r\n 'pastel_on_dark', 'solarized_light', 'terminal', 'tomorrow_night_blue', 'tomorrow_night_bright',\r\n 'tomorrow_night_80s', 'twilight', 'vibrant_ink'];","<div class=\"toolbar\"\n cdkDrag\n cdkDragHandle\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragBoundary=\"body\"\n>\n <div class=\"input-container theme-select-container\">\n <select name=\"editor-theme\" id=\"editor-theme\" [(ngModel)]=\"theme\" (ngModelChange)=\"useTheme(theme)\">\n <option *ngFor=\"let theme of themes\" [ngValue]=\"theme\">{{theme}}</option>\n </select>\n </div>\n\n <div class=\"type-buttons\">\n <button type=\"button\" (click)=\"switchType('html')\" [class.active]=\"activeTypeIs('html')\" mat-button>HTML</button>\n <button type=\"button\" (click)=\"switchType('css')\" [class.active]=\"activeTypeIs('css')\" mat-button>CSS</button>\n <button type=\"button\" (click)=\"switchType('js')\" [class.active]=\"activeTypeIs('js')\" mat-button>JS</button>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" mat-icon-button (click)=\"closeEditor()\"><mat-icon svgIcon=\"close\"></mat-icon></button>\n </div>\n</div>\n\n<div class=\"editor-container\">\n <div class=\"editor\" #editor></div>\n</div>","import {Component, ElementRef, Inject, OnDestroy, OnInit, Optional, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {ActiveProject} from '../../projects/active-project';\nimport {aceThemes} from './ace-themes';\nimport {SelectedElement} from '../selected-element.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\nimport {LazyLoaderService} from '@common/core/utils/lazy-loader.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\n\ndeclare let ace: any;\ndeclare let html_beautify: Function;\n\n@Component({\n selector: 'code-editor',\n templateUrl: './code-editor.component.html',\n styleUrls: ['./code-editor.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CodeEditorComponent implements OnInit, OnDestroy {\n @ViewChild('editor', {static: true}) editorEl: ElementRef;\n\n private loading = false;\n\n private suppressChangeEvents = false;\n\n /**\n * Ace editor instance.\n */\n private editor;\n\n /**\n * Currently active editor theme.\n */\n public theme = 'chrome';\n\n public themes = aceThemes;\n\n private activeEditor: 'html'|'css'|'js' = 'html';\n\n private contentsChange = new Subject();\n /**\n * Subject for notifying the user that code editor has finished loading.\n */\n private loaded = new Subject();\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private lazyLoader: LazyLoaderService,\n private activeProject: ActiveProject,\n private selectedElement: SelectedElement,\n private builderDocument: BuilderDocument,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef,\n ) {}\n\n ngOnInit() {\n this.initEditor().then(() => {\n this.updateEditorContents(this.activeEditor);\n\n // select node html in the code editor when new node is selected in the builder\n const sub = this.selectedElement.changed.subscribe(() => {\n if (this.selectedElement.node) this.selectNodeSource(this.selectedElement.node);\n });\n\n this.bindToBuilderDocumentChangeEvent();\n this.bindToEditorChangeEvent();\n this.subscriptions.push(sub);\n\n setTimeout(() => {\n this.loaded.next(this);\n this.loaded.complete();\n });\n });\n }\n\n ngOnDestroy() {\n this.editor && this.editor.destroy();\n\n this.subscriptions.forEach(subscription => {\n subscription && subscription.unsubscribe();\n });\n }\n\n /**\n * Gets an observable that emits when code editor has finished loading.\n */\n public afterLoaded(): Observable<any> {\n return this.loaded.asObservable();\n }\n\n /**\n * Select source code of specified node in code editor.\n */\n public selectNodeSource(node: HTMLElement) {\n this.editor.find(html_beautify(node.outerHTML));\n }\n\n public useTheme(name: string) {\n this.editor.setTheme('ace/theme/' + name);\n }\n\n public switchType(name: 'html'|'css'|'js') {\n this.activeEditor = name;\n this.changeEditorMode(name);\n this.updateEditorContents(name);\n }\n\n /**\n * Update editor contents with specified content type.\n */\n private updateEditorContents(type: 'html'|'css'|'js') {\n if (type === 'html') {\n // replace multiple new lines with one\n const html = this.builderDocument.getOuterHtml().replace(/\\n\\s*\\n/g, '\\n');\n this.setEditorValue(html_beautify(html));\n } else if (type === 'css') {\n this.setEditorValue(this.activeProject.get().css);\n } else if (type === 'js') {\n this.setEditorValue(this.activeProject.get().js);\n }\n }\n\n /**\n * Update project html when code editor contents are changed by user.\n */\n private bindToEditorChangeEvent() {\n const sub = this.contentsChange.pipe(debounceTime(800)).subscribe(() => {\n let shouldReload = false;\n\n if (this.activeEditor === 'html') {\n this.builderDocument.update({html: this.editor.getValue(), source: 'codeEditor'});\n } else if (this.activeEditor === 'css') {\n this.activeProject.get().css = this.editor.getValue();\n shouldReload = true;\n } else if (this.activeEditor === 'js') {\n this.activeProject.get().js = this.editor.getValue();\n shouldReload = true;\n }\n\n if ( ! shouldReload) return;\n\n // reload custom css and js links, so changes are reflected in preview\n this.activeProject.save({thumbnail: false}).subscribe(() => {\n this.builderDocument.update({html: this.builderDocument.getInnerHtml(), source: 'codeEditor'});\n });\n });\n\n this.subscriptions.push(sub);\n }\n\n /**\n * Update code editor contents when live preview html is changed.\n */\n private bindToBuilderDocumentChangeEvent() {\n const sub = this.builderDocument.contentChanged\n .pipe(debounceTime(500))\n .subscribe(source => {\n // if dom change was initiated by code editor, bail to avoid infinite loops\n if (source === 'codeEditor') return;\n this.updateEditorContents(this.activeEditor);\n });\n\n this.subscriptions.push(sub);\n }\n\n private setEditorValue(value: string) {\n this.suppressChangeEvents = true;\n\n if (this.editor && this.editor.getValue() !== value) {\n this.editor.setValue(value, -1);\n }\n\n this.suppressChangeEvents = false;\n }\n\n public activeTypeIs(name: 'html'|'css'|'js') {\n return this.activeEditor === name;\n }\n\n public closeEditor() {\n this.overlayRef.close();\n }\n\n private initEditor(language: 'js'|'html'|'css' = 'html') {\n this.loading = true;\n\n return Promise.all([\n this.lazyLoader.loadAsset('js/ace/ace.js', {type: 'js'}),\n this.lazyLoader.loadAsset('js/beautify-html.js', {type: 'js'}),\n ]).then(() => {\n this.editor = ace.edit(this.editorEl.nativeElement);\n this.changeEditorMode(language);\n this.useTheme('chrome');\n this.editor.$blockScrolling = Infinity;\n this.loading = false;\n\n this.editor.on('change', () => {\n if (this.suppressChangeEvents) return;\n this.contentsChange.next();\n });\n });\n }\n\n private changeEditorMode(mode: 'js'|'html'|'css') {\n mode = mode === 'js' ? 'javascript' : mode as any;\n if (this.editor) {\n this.editor.getSession().setMode('ace/mode/' + mode);\n }\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {CodeEditorComponent} from './code-editor.component';\nimport {Observable} from 'rxjs';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CodeEditor {\n public overlayRef: OverlayPanelRef<CodeEditorComponent>;\n private origin: ElementRef;\n\n constructor(\n private overlayPanel: OverlayPanel,\n private breakpoints: BreakpointsService,\n ) {}\n\n public toggle() {\n if (this.overlayRef && this.overlayRef.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n public open(): Observable<CodeEditorComponent> {\n if (this.overlayRef && this.overlayRef.isOpen()) {\n return this.overlayRef.componentRef.instance.afterLoaded();\n }\n\n const rect = document.querySelector('live-preview').getBoundingClientRect();\n const width = rect.width - 50;\n const height = rect.height - 30;\n\n this.overlayRef = this.overlayPanel.open<CodeEditorComponent>(CodeEditorComponent, {\n position: [\n {originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 15, offsetY: 15},\n {originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 15, offsetY: 15}\n ],\n mobilePosition: 'center',\n hasBackdrop: this.breakpoints.isMobile$.value,\n width,\n height,\n origin: this.origin,\n });\n\n return this.overlayRef.componentRef.instance.afterLoaded();\n }\n\n public close() {\n if ( ! this.overlayRef) return;\n this.overlayRef.close();\n this.overlayRef = null;\n }\n\n public setOrigin(origin: ElementRef) {\n this.origin = origin;\n }\n}\n","export const baseFonts = [\r\n {name: 'Impact', css: 'Impact, Charcoal, sans-serif'},\r\n {name: 'Comic Sans', css: '\"Comic Sans MS\", cursive, sans-serif'},\r\n {name: 'Arial Black', css: '\"Arial Black\", Gadget, sans-serif'},\r\n {name: 'Century Gothic', css: 'Century Gothic, sans-serif'},\r\n {name: 'Courier New', css: '\"Courier New\", Courier, monospace'},\r\n {name: 'Lucida Sans', css: '\"Lucida Sans Unicode\", \"Lucida Grande\", sans-serif'},\r\n {name: 'Times New Roman', css: '\"Times New Roman\", Times, serif'},\r\n {name: 'Lucida Console', css: '\"Lucida Console\", Monaco, monospace'},\r\n {name: 'Andele Mono', css: '\"Andele Mono\", monospace, sans-serif'},\r\n {name: 'Verdana', css: 'Verdana, Geneva, sans-serif'},\r\n {name: 'Helvetica Neue', css: '\"Helvetica Neue\", Helvetica, Arial, sans-serif'}\r\n];\r\n\r\nexport const fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];","export const fontAwesomeIconsList = ['fa fa-ad','fa fa-address-book','fa fa-address-book','fa fa-address-card','fa fa-address-card','fa fa-adjust','fa fa-air-freshener','fa fa-align-center','fa fa-align-justify','fa fa-align-left','fa fa-align-right','fa fa-allergies','fa fa-ambulance','fa fa-american-sign-language-interpreting','fa fa-anchor','fa fa-angle-double-down','fa fa-angle-double-left','fa fa-angle-double-right','fa fa-angle-double-up','fa fa-angle-down','fa fa-angle-left','fa fa-angle-right','fa fa-angle-up','fa fa-angry','fa fa-angry','fa fa-ankh','fa fa-apple-alt','fa fa-archive','fa fa-archway','fa fa-arrow-alt-circle-down','fa fa-arrow-alt-circle-down','fa fa-arrow-alt-circle-left','fa fa-arrow-alt-circle-left','fa fa-arrow-alt-circle-right','fa fa-arrow-alt-circle-right','fa fa-arrow-alt-circle-up','fa fa-arrow-alt-circle-up','fa fa-arrow-circle-down','fa fa-arrow-circle-left','fa fa-arrow-circle-right','fa fa-arrow-circle-up','fa fa-arrow-down','fa fa-arrow-left','fa fa-arrow-right','fa fa-arrow-up','fa fa-arrows-alt','fa fa-arrows-alt-h','fa fa-arrows-alt-v','fa fa-assistive-listening-systems','fa fa-asterisk','fa fa-at','fa fa-atlas','fa fa-atom','fa fa-audio-description','fa fa-award','fa fa-baby','fa fa-baby-carriage','fa fa-backspace','fa fa-backward','fa fa-bacon','fa fa-bacteria','fa fa-bacterium','fa fa-bahai','fa fa-balance-scale','fa fa-balance-scale-left','fa fa-balance-scale-right','fa fa-ban','fa fa-band-aid','fa fa-barcode','fa fa-bars','fa fa-baseball-ball','fa fa-basketball-ball','fa fa-bath','fa fa-battery-empty','fa fa-battery-full','fa fa-battery-half','fa fa-battery-quarter','fa fa-battery-three-quarters','fa fa-bed','fa fa-beer','fa fa-bell','fa fa-bell','fa fa-bell-slash','fa fa-bell-slash','fa fa-bezier-curve','fa fa-bible','fa fa-bicycle','fa fa-biking','fa fa-binoculars','fa fa-biohazard','fa fa-birthday-cake','fa fa-blender','fa fa-blender-phone','fa fa-blind','fa fa-blog','fa fa-bold','fa fa-bolt','fa fa-bomb','fa fa-bone','fa fa-bong','fa fa-book','fa fa-book-dead','fa fa-book-medical','fa fa-book-open','fa fa-book-reader','fa fa-bookmark','fa fa-bookmark','fa fa-border-all','fa fa-border-none','fa fa-border-style','fa fa-bowling-ball','fa fa-box','fa fa-box-open','fa fa-box-tissue','fa fa-boxes','fa fa-braille','fa fa-brain','fa fa-bread-slice','fa fa-briefcase','fa fa-briefcase-medical','fa fa-broadcast-tower','fa fa-broom','fa fa-brush','fa fa-bug','fa fa-building','fa fa-building','fa fa-bullhorn','fa fa-bullseye','fa fa-burn','fa fa-bus','fa fa-bus-alt','fa fa-business-time','fa fa-calculator','fa fa-calendar','fa fa-calendar','fa fa-calendar-alt','fa fa-calendar-alt','fa fa-calendar-check','fa fa-calendar-check','fa fa-calendar-day','fa fa-calendar-minus','fa fa-calendar-minus','fa fa-calendar-plus','fa fa-calendar-plus','fa fa-calendar-times','fa fa-calendar-times','fa fa-calendar-week','fa fa-camera','fa fa-camera-retro','fa fa-campground','fa fa-candy-cane','fa fa-cannabis','fa fa-capsules','fa fa-car','fa fa-car-alt','fa fa-car-battery','fa fa-car-crash','fa fa-car-side','fa fa-caravan','fa fa-caret-down','fa fa-caret-left','fa fa-caret-right','fa fa-caret-square-down','fa fa-caret-square-down','fa fa-caret-square-left','fa fa-caret-square-left','fa fa-caret-square-right','fa fa-caret-square-right','fa fa-caret-square-up','fa fa-caret-square-up','fa fa-caret-up','fa fa-carrot','fa fa-cart-arrow-down','fa fa-cart-plus','fa fa-cash-register','fa fa-cat','fa fa-certificate','fa fa-chair','fa fa-chalkboard','fa fa-chalkboard-teacher','fa fa-charging-station','fa fa-chart-area','fa fa-chart-bar','fa fa-chart-bar','fa fa-chart-line','fa fa-chart-pie','fa fa-check','fa fa-check-circle','fa fa-check-circle','fa fa-check-double','fa fa-check-square','fa fa-check-square','fa fa-cheese','fa fa-chess','fa fa-chess-bishop','fa fa-chess-board','fa fa-chess-king','fa fa-chess-knight','fa fa-chess-pawn','fa fa-chess-queen','fa fa-chess-rook','fa fa-chevron-circle-down','fa fa-chevron-circle-left','fa fa-chevron-circle-right','fa fa-chevron-circle-up','fa fa-chevron-down','fa fa-chevron-left','fa fa-chevron-right','fa fa-chevron-up','fa fa-child','fa fa-church','fa fa-circle','fa fa-circle','fa fa-circle-notch','fa fa-city','fa fa-clinic-medical','fa fa-clipboard','fa fa-clipboard','fa fa-clipboard-check','fa fa-clipboard-list','fa fa-clock','fa fa-clock','fa fa-clone','fa fa-clone','fa fa-closed-captioning','fa fa-closed-captioning','fa fa-cloud','fa fa-cloud-download-alt','fa fa-cloud-meatball','fa fa-cloud-moon','fa fa-cloud-moon-rain','fa fa-cloud-rain','fa fa-cloud-showers-heavy','fa fa-cloud-sun','fa fa-cloud-sun-rain','fa fa-cloud-upload-alt','fa fa-cocktail','fa fa-code','fa fa-code-branch','fa fa-coffee','fa fa-cog','fa fa-cogs','fa fa-coins','fa fa-columns','fa fa-comment','fa fa-comment','fa fa-comment-alt','fa fa-comment-alt','fa fa-comment-dollar','fa fa-comment-dots','fa fa-comment-dots','fa fa-comment-medical','fa fa-comment-slash','fa fa-comments','fa fa-comments','fa fa-comments-dollar','fa fa-compact-disc','fa fa-compass','fa fa-compass','fa fa-compress','fa fa-compress-alt','fa fa-compress-arrows-alt','fa fa-concierge-bell','fa fa-cookie','fa fa-cookie-bite','fa fa-copy','fa fa-copy','fa fa-copyright','fa fa-copyright','fa fa-couch','fa fa-credit-card','fa fa-credit-card','fa fa-crop','fa fa-crop-alt','fa fa-cross','fa fa-crosshairs','fa fa-crow','fa fa-crown','fa fa-crutch','fa fa-cube','fa fa-cubes','fa fa-cut','fa fa-database','fa fa-deaf','fa fa-democrat','fa fa-desktop','fa fa-dharmachakra','fa fa-diagnoses','fa fa-dice','fa fa-dice-d20','fa fa-dice-d6','fa fa-dice-five','fa fa-dice-four','fa fa-dice-one','fa fa-dice-six','fa fa-dice-three','fa fa-dice-two','fa fa-digital-tachograph','fa fa-directions','fa fa-disease','fa fa-divide','fa fa-dizzy','fa fa-dizzy','fa fa-dna','fa fa-dog','fa fa-dollar-sign','fa fa-dolly','fa fa-dolly-flatbed','fa fa-donate','fa fa-door-closed','fa fa-door-open','fa fa-dot-circle','fa fa-dot-circle','fa fa-dove','fa fa-download','fa fa-drafting-compass','fa fa-dragon','fa fa-draw-polygon','fa fa-drum','fa fa-drum-steelpan','fa fa-drumstick-bite','fa fa-dumbbell','fa fa-dumpster','fa fa-dumpster-fire','fa fa-dungeon','fa fa-edit','fa fa-edit','fa fa-egg','fa fa-eject','fa fa-ellipsis-h','fa fa-ellipsis-v','fa fa-envelope','fa fa-envelope','fa fa-envelope-open','fa fa-envelope-open','fa fa-envelope-open-text','fa fa-envelope-square','fa fa-equals','fa fa-eraser','fa fa-ethernet','fa fa-euro-sign','fa fa-exchange-alt','fa fa-exclamation','fa fa-exclamation-circle','fa fa-exclamation-triangle','fa fa-expand','fa fa-expand-alt','fa fa-expand-arrows-alt','fa fa-external-link-alt','fa fa-external-link-square-alt','fa fa-eye','fa fa-eye','fa fa-eye-dropper','fa fa-eye-slash','fa fa-eye-slash','fa fa-fan','fa fa-fast-backward','fa fa-fast-forward','fa fa-faucet','fa fa-fax','fa fa-feather','fa fa-feather-alt','fa fa-female','fa fa-fighter-jet','fa fa-file','fa fa-file','fa fa-file-alt','fa fa-file-alt','fa fa-file-archive','fa fa-file-archive','fa fa-file-audio','fa fa-file-audio','fa fa-file-code','fa fa-file-code','fa fa-file-contract','fa fa-file-csv','fa fa-file-download','fa fa-file-excel','fa fa-file-excel','fa fa-file-export','fa fa-file-image','fa fa-file-image','fa fa-file-import','fa fa-file-invoice','fa fa-file-invoice-dollar','fa fa-file-medical','fa fa-file-medical-alt','fa fa-file-pdf','fa fa-file-pdf','fa fa-file-powerpoint','fa fa-file-powerpoint','fa fa-file-prescription','fa fa-file-signature','fa fa-file-upload','fa fa-file-video','fa fa-file-video','fa fa-file-word','fa fa-file-word','fa fa-fill','fa fa-fill-drip','fa fa-film','fa fa-filter','fa fa-fingerprint','fa fa-fire','fa fa-fire-alt','fa fa-fire-extinguisher','fa fa-first-aid','fa fa-fish','fa fa-fist-raised','fa fa-flag','fa fa-flag','fa fa-flag-checkered','fa fa-flag-usa','fa fa-flask','fa fa-flushed','fa fa-flushed','fa fa-folder','fa fa-folder','fa fa-folder-minus','fa fa-folder-open','fa fa-folder-open','fa fa-folder-plus','fa fa-font','fa fa-football-ball','fa fa-forward','fa fa-frog','fa fa-frown','fa fa-frown','fa fa-frown-open','fa fa-frown-open','fa fa-funnel-dollar','fa fa-futbol','fa fa-futbol','fa fa-gamepad','fa fa-gas-pump','fa fa-gavel','fa fa-gem','fa fa-gem','fa fa-genderless','fa fa-ghost','fa fa-gift','fa fa-gifts','fa fa-glass-cheers','fa fa-glass-martini','fa fa-glass-martini-alt','fa fa-glass-whiskey','fa fa-glasses','fa fa-globe','fa fa-globe-africa','fa fa-globe-americas','fa fa-globe-asia','fa fa-globe-europe','fa fa-golf-ball','fa fa-gopuram','fa fa-graduation-cap','fa fa-greater-than','fa fa-greater-than-equal','fa fa-grimace','fa fa-grimace','fa fa-grin','fa fa-grin','fa fa-grin-alt','fa fa-grin-alt','fa fa-grin-beam','fa fa-grin-beam','fa fa-grin-beam-sweat','fa fa-grin-beam-sweat','fa fa-grin-hearts','fa fa-grin-hearts','fa fa-grin-squint','fa fa-grin-squint','fa fa-grin-squint-tears','fa fa-grin-squint-tears','fa fa-grin-stars','fa fa-grin-stars','fa fa-grin-tears','fa fa-grin-tears','fa fa-grin-tongue','fa fa-grin-tongue','fa fa-grin-tongue-squint','fa fa-grin-tongue-squint','fa fa-grin-tongue-wink','fa fa-grin-tongue-wink','fa fa-grin-wink','fa fa-grin-wink','fa fa-grip-horizontal','fa fa-grip-lines','fa fa-grip-lines-vertical','fa fa-grip-vertical','fa fa-guitar','fa fa-h-square','fa fa-hamburger','fa fa-hammer','fa fa-hamsa','fa fa-hand-holding','fa fa-hand-holding-heart','fa fa-hand-holding-medical','fa fa-hand-holding-usd','fa fa-hand-holding-water','fa fa-hand-lizard','fa fa-hand-lizard','fa fa-hand-middle-finger','fa fa-hand-paper','fa fa-hand-paper','fa fa-hand-peace','fa fa-hand-peace','fa fa-hand-point-down','fa fa-hand-point-down','fa fa-hand-point-left','fa fa-hand-point-left','fa fa-hand-point-right','fa fa-hand-point-right','fa fa-hand-point-up','fa fa-hand-point-up','fa fa-hand-pointer','fa fa-hand-pointer','fa fa-hand-rock','fa fa-hand-rock','fa fa-hand-scissors','fa fa-hand-scissors','fa fa-hand-sparkles','fa fa-hand-spock','fa fa-hand-spock','fa fa-hands','fa fa-hands-helping','fa fa-hands-wash','fa fa-handshake','fa fa-handshake','fa fa-handshake-alt-slash','fa fa-handshake-slash','fa fa-hanukiah','fa fa-hard-hat','fa fa-hashtag','fa fa-hat-cowboy','fa fa-hat-cowboy-side','fa fa-hat-wizard','fa fa-hdd','fa fa-hdd','fa fa-head-side-cough','fa fa-head-side-cough-slash','fa fa-head-side-mask','fa fa-head-side-virus','fa fa-heading','fa fa-headphones','fa fa-headphones-alt','fa fa-headset','fa fa-heart','fa fa-heart','fa fa-heart-broken','fa fa-heartbeat','fa fa-helicopter','fa fa-highlighter','fa fa-hiking','fa fa-hippo','fa fa-history','fa fa-hockey-puck','fa fa-holly-berry','fa fa-home','fa fa-horse','fa fa-horse-head','fa fa-hospital','fa fa-hospital','fa fa-hospital-alt','fa fa-hospital-symbol','fa fa-hospital-user','fa fa-hot-tub','fa fa-hotdog','fa fa-hotel','fa fa-hourglass','fa fa-hourglass','fa fa-hourglass-end','fa fa-hourglass-half','fa fa-hourglass-start','fa fa-house-damage','fa fa-house-user','fa fa-hryvnia','fa fa-i-cursor','fa fa-ice-cream','fa fa-icicles','fa fa-icons','fa fa-id-badge','fa fa-id-badge','fa fa-id-card','fa fa-id-card','fa fa-id-card-alt','fa fa-igloo','fa fa-image','fa fa-image','fa fa-images','fa fa-images','fa fa-inbox','fa fa-indent','fa fa-industry','fa fa-infinity','fa fa-info','fa fa-info-circle','fa fa-italic','fa fa-jedi','fa fa-joint','fa fa-journal-whills','fa fa-kaaba','fa fa-key','fa fa-keyboard','fa fa-keyboard','fa fa-khanda','fa fa-kiss','fa fa-kiss','fa fa-kiss-beam','fa fa-kiss-beam','fa fa-kiss-wink-heart','fa fa-kiss-wink-heart','fa fa-kiwi-bird','fa fa-landmark','fa fa-language','fa fa-laptop','fa fa-laptop-code','fa fa-laptop-house','fa fa-laptop-medical','fa fa-laugh','fa fa-laugh','fa fa-laugh-beam','fa fa-laugh-beam','fa fa-laugh-squint','fa fa-laugh-squint','fa fa-laugh-wink','fa fa-laugh-wink','fa fa-layer-group','fa fa-leaf','fa fa-lemon','fa fa-lemon','fa fa-less-than','fa fa-less-than-equal','fa fa-level-down-alt','fa fa-level-up-alt','fa fa-life-ring','fa fa-life-ring','fa fa-lightbulb','fa fa-lightbulb','fa fa-link','fa fa-lira-sign','fa fa-list','fa fa-list-alt','fa fa-list-alt','fa fa-list-ol','fa fa-list-ul','fa fa-location-arrow','fa fa-lock','fa fa-lock-open','fa fa-long-arrow-alt-down','fa fa-long-arrow-alt-left','fa fa-long-arrow-alt-right','fa fa-long-arrow-alt-up','fa fa-low-vision','fa fa-luggage-cart','fa fa-lungs','fa fa-lungs-virus','fa fa-magic','fa fa-magnet','fa fa-mail-bulk','fa fa-male','fa fa-map','fa fa-map','fa fa-map-marked','fa fa-map-marked-alt','fa fa-map-marker','fa fa-map-marker-alt','fa fa-map-pin','fa fa-map-signs','fa fa-marker','fa fa-mars','fa fa-mars-double','fa fa-mars-stroke','fa fa-mars-stroke-h','fa fa-mars-stroke-v','fa fa-mask','fa fa-medal','fa fa-medkit','fa fa-meh','fa fa-meh','fa fa-meh-blank','fa fa-meh-blank','fa fa-meh-rolling-eyes','fa fa-meh-rolling-eyes','fa fa-memory','fa fa-menorah','fa fa-mercury','fa fa-meteor','fa fa-microchip','fa fa-microphone','fa fa-microphone-alt','fa fa-microphone-alt-slash','fa fa-microphone-slash','fa fa-microscope','fa fa-minus','fa fa-minus-circle','fa fa-minus-square','fa fa-minus-square','fa fa-mitten','fa fa-mobile','fa fa-mobile-alt','fa fa-money-bill','fa fa-money-bill-alt','fa fa-money-bill-alt','fa fa-money-bill-wave','fa fa-money-bill-wave-alt','fa fa-money-check','fa fa-money-check-alt','fa fa-monument','fa fa-moon','fa fa-moon','fa fa-mortar-pestle','fa fa-mosque','fa fa-motorcycle','fa fa-mountain','fa fa-mouse','fa fa-mouse-pointer','fa fa-mug-hot','fa fa-music','fa fa-network-wired','fa fa-neuter','fa fa-newspaper','fa fa-newspaper','fa fa-not-equal','fa fa-notes-medical','fa fa-object-group','fa fa-object-group','fa fa-object-ungroup','fa fa-object-ungroup','fa fa-oil-can','fa fa-om','fa fa-otter','fa fa-outdent','fa fa-pager','fa fa-paint-brush','fa fa-paint-roller','fa fa-palette','fa fa-pallet','fa fa-paper-plane','fa fa-paper-plane','fa fa-paperclip','fa fa-parachute-box','fa fa-paragraph','fa fa-parking','fa fa-passport','fa fa-pastafarianism','fa fa-paste','fa fa-pause','fa fa-pause-circle','fa fa-pause-circle','fa fa-paw','fa fa-peace','fa fa-pen','fa fa-pen-alt','fa fa-pen-fancy','fa fa-pen-nib','fa fa-pen-square','fa fa-pencil-alt','fa fa-pencil-ruler','fa fa-people-arrows','fa fa-people-carry','fa fa-pepper-hot','fa fa-percent','fa fa-percentage','fa fa-person-booth','fa fa-phone','fa fa-phone-alt','fa fa-phone-slash','fa fa-phone-square','fa fa-phone-square-alt','fa fa-phone-volume','fa fa-photo-video','fa fa-piggy-bank','fa fa-pills','fa fa-pizza-slice','fa fa-place-of-worship','fa fa-plane','fa fa-plane-arrival','fa fa-plane-departure','fa fa-plane-slash','fa fa-play','fa fa-play-circle','fa fa-play-circle','fa fa-plug','fa fa-plus','fa fa-plus-circle','fa fa-plus-square','fa fa-plus-square','fa fa-podcast','fa fa-poll','fa fa-poll-h','fa fa-poo','fa fa-poo-storm','fa fa-poop','fa fa-portrait','fa fa-pound-sign','fa fa-power-off','fa fa-pray','fa fa-praying-hands','fa fa-prescription','fa fa-prescription-bottle','fa fa-prescription-bottle-alt','fa fa-print','fa fa-procedures','fa fa-project-diagram','fa fa-pump-medical','fa fa-pump-soap','fa fa-puzzle-piece','fa fa-qrcode','fa fa-question','fa fa-question-circle','fa fa-question-circle','fa fa-quidditch','fa fa-quote-left','fa fa-quote-right','fa fa-quran','fa fa-radiation','fa fa-radiation-alt','fa fa-rainbow','fa fa-random','fa fa-receipt','fa fa-record-vinyl','fa fa-recycle','fa fa-redo','fa fa-redo-alt','fa fa-registered','fa fa-registered','fa fa-remove-format','fa fa-reply','fa fa-reply-all','fa fa-republican','fa fa-restroom','fa fa-retweet','fa fa-ribbon','fa fa-ring','fa fa-road','fa fa-robot','fa fa-rocket','fa fa-route','fa fa-rss','fa fa-rss-square','fa fa-ruble-sign','fa fa-ruler','fa fa-ruler-combined','fa fa-ruler-horizontal','fa fa-ruler-vertical','fa fa-running','fa fa-rupee-sign','fa fa-sad-cry','fa fa-sad-cry','fa fa-sad-tear','fa fa-sad-tear','fa fa-satellite','fa fa-satellite-dish','fa fa-save','fa fa-save','fa fa-school','fa fa-screwdriver','fa fa-scroll','fa fa-sd-card','fa fa-search','fa fa-search-dollar','fa fa-search-location','fa fa-search-minus','fa fa-search-plus','fa fa-seedling','fa fa-server','fa fa-shapes','fa fa-share','fa fa-share-alt','fa fa-share-alt-square','fa fa-share-square','fa fa-share-square','fa fa-shekel-sign','fa fa-shield-alt','fa fa-shield-virus','fa fa-ship','fa fa-shipping-fast','fa fa-shoe-prints','fa fa-shopping-bag','fa fa-shopping-basket','fa fa-shopping-cart','fa fa-shower','fa fa-shuttle-van','fa fa-sign','fa fa-sign-in-alt','fa fa-sign-language','fa fa-sign-out-alt','fa fa-signal','fa fa-signature','fa fa-sim-card','fa fa-sink','fa fa-sitemap','fa fa-skating','fa fa-skiing','fa fa-skiing-nordic','fa fa-skull','fa fa-skull-crossbones','fa fa-slash','fa fa-sleigh','fa fa-sliders-h','fa fa-smile','fa fa-smile','fa fa-smile-beam','fa fa-smile-beam','fa fa-smile-wink','fa fa-smile-wink','fa fa-smog','fa fa-smoking','fa fa-smoking-ban','fa fa-sms','fa fa-snowboarding','fa fa-snowflake','fa fa-snowflake','fa fa-snowman','fa fa-snowplow','fa fa-soap','fa fa-socks','fa fa-solar-panel','fa fa-sort','fa fa-sort-alpha-down','fa fa-sort-alpha-down-alt','fa fa-sort-alpha-up','fa fa-sort-alpha-up-alt','fa fa-sort-amount-down','fa fa-sort-amount-down-alt','fa fa-sort-amount-up','fa fa-sort-amount-up-alt','fa fa-sort-down','fa fa-sort-numeric-down','fa fa-sort-numeric-down-alt','fa fa-sort-numeric-up','fa fa-sort-numeric-up-alt','fa fa-sort-up','fa fa-spa','fa fa-space-shuttle','fa fa-spell-check','fa fa-spider','fa fa-spinner','fa fa-splotch','fa fa-spray-can','fa fa-square','fa fa-square','fa fa-square-full','fa fa-square-root-alt','fa fa-stamp','fa fa-star','fa fa-star','fa fa-star-and-crescent','fa fa-star-half','fa fa-star-half','fa fa-star-half-alt','fa fa-star-of-david','fa fa-star-of-life','fa fa-step-backward','fa fa-step-forward','fa fa-stethoscope','fa fa-sticky-note','fa fa-sticky-note','fa fa-stop','fa fa-stop-circle','fa fa-stop-circle','fa fa-stopwatch','fa fa-stopwatch-20','fa fa-store','fa fa-store-alt','fa fa-store-alt-slash','fa fa-store-slash','fa fa-stream','fa fa-street-view','fa fa-strikethrough','fa fa-stroopwafel','fa fa-subscript','fa fa-subway','fa fa-suitcase','fa fa-suitcase-rolling','fa fa-sun','fa fa-sun','fa fa-superscript','fa fa-surprise','fa fa-surprise','fa fa-swatchbook','fa fa-swimmer','fa fa-swimming-pool','fa fa-synagogue','fa fa-sync','fa fa-sync-alt','fa fa-syringe','fa fa-table','fa fa-table-tennis','fa fa-tablet','fa fa-tablet-alt','fa fa-tablets','fa fa-tachometer-alt','fa fa-tag','fa fa-tags','fa fa-tape','fa fa-tasks','fa fa-taxi','fa fa-teeth','fa fa-teeth-open','fa fa-temperature-high','fa fa-temperature-low','fa fa-tenge','fa fa-terminal','fa fa-text-height','fa fa-text-width','fa fa-th','fa fa-th-large','fa fa-th-list','fa fa-theater-masks','fa fa-thermometer','fa fa-thermometer-empty','fa fa-thermometer-full','fa fa-thermometer-half','fa fa-thermometer-quarter','fa fa-thermometer-three-quarters','fa fa-thumbs-down','fa fa-thumbs-down','fa fa-thumbs-up','fa fa-thumbs-up','fa fa-thumbtack','fa fa-ticket-alt','fa fa-times','fa fa-times-circle','fa fa-times-circle','fa fa-tint','fa fa-tint-slash','fa fa-tired','fa fa-tired','fa fa-toggle-off','fa fa-toggle-on','fa fa-toilet','fa fa-toilet-paper','fa fa-toilet-paper-slash','fa fa-toolbox','fa fa-tools','fa fa-tooth','fa fa-torah','fa fa-torii-gate','fa fa-tractor','fa fa-trademark','fa fa-traffic-light','fa fa-trailer','fa fa-train','fa fa-tram','fa fa-transgender','fa fa-transgender-alt','fa fa-trash','fa fa-trash-alt','fa fa-trash-alt','fa fa-trash-restore','fa fa-trash-restore-alt','fa fa-tree','fa fa-trophy','fa fa-truck','fa fa-truck-loading','fa fa-truck-monster','fa fa-truck-moving','fa fa-truck-pickup','fa fa-tshirt','fa fa-tty','fa fa-tv','fa fa-umbrella','fa fa-umbrella-beach','fa fa-underline','fa fa-undo','fa fa-undo-alt','fa fa-universal-access','fa fa-university','fa fa-unlink','fa fa-unlock','fa fa-unlock-alt','fa fa-upload','fa fa-user','fa fa-user','fa fa-user-alt','fa fa-user-alt-slash','fa fa-user-astronaut','fa fa-user-check','fa fa-user-circle','fa fa-user-circle','fa fa-user-clock','fa fa-user-cog','fa fa-user-edit','fa fa-user-friends','fa fa-user-graduate','fa fa-user-injured','fa fa-user-lock','fa fa-user-md','fa fa-user-minus','fa fa-user-ninja','fa fa-user-nurse','fa fa-user-plus','fa fa-user-secret','fa fa-user-shield','fa fa-user-slash','fa fa-user-tag','fa fa-user-tie','fa fa-user-times','fa fa-users','fa fa-users-cog','fa fa-users-slash','fa fa-utensil-spoon','fa fa-utensils','fa fa-vector-square','fa fa-venus','fa fa-venus-double','fa fa-venus-mars','fa fa-vial','fa fa-vials','fa fa-video','fa fa-video-slash','fa fa-vihara','fa fa-virus','fa fa-virus-slash','fa fa-viruses','fa fa-voicemail','fa fa-volleyball-ball','fa fa-volume-down','fa fa-volume-mute','fa fa-volume-off','fa fa-volume-up','fa fa-vote-yea','fa fa-vr-cardboard','fa fa-walking','fa fa-wallet','fa fa-warehouse','fa fa-water','fa fa-wave-square','fa fa-weight','fa fa-weight-hanging','fa fa-wheelchair','fa fa-wifi','fa fa-wind','fa fa-window-close','fa fa-window-close','fa fa-window-maximize','fa fa-window-maximize','fa fa-window-minimize','fa fa-window-minimize','fa fa-window-restore','fa fa-window-restore','fa fa-wine-bottle','fa fa-wine-glass','fa fa-wine-glass-alt','fa fa-won-sign','fa fa-wrench','fa fa-x-ray','fa fa-yen-sign','fa fa-yin-yang'];","<div class=\"toolbar\">\n <div class=\"controls-group flex-group\">\n <div class=\"input-container\">\n <select name=\"font-size\" id=\"font-size\" (change)=\"execCommand('fontSize', $event.target.value)\">\n <option *ngFor=\"let size of styles.sizes\" [ngValue]=\"size\">{{size}}</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <select name=\"font-family\" id=\"font-family\" (change)=\"execCommand('fontName', $event.target.value)\">\n <option *ngFor=\"let family of styles.fonts\" [ngValue]=\"family.css\">{{family.name}}</option>\n </select>\n </div>\n </div>\n\n <div class=\"controls-group\">\n <button class=\"italic\" mat-icon-button [matTooltip]=\"'Bold' | trans\" (click)=\"execCommand('bold')\" [class.active]=\"commandIsActive('bold')\"><mat-icon svgIcon=\"format-bold\"></mat-icon></button>\n <button class=\"italic\" mat-icon-button [matTooltip]=\"'Italic' | trans\" (click)=\"execCommand('italic')\" [class.active]=\"commandIsActive('italic')\"><mat-icon svgIcon=\"format-italic\"></mat-icon></button>\n <button class=\"underline\" mat-icon-button [matTooltip]=\"'Underline' | trans\" (click)=\"execCommand('underline')\" [class.active]=\"commandIsActive('underline')\"><mat-icon svgIcon=\"format-underlined\"></mat-icon></button>\n <button class=\"strike\" mat-icon-button [matTooltip]=\"'Strikethrough' | trans\" (click)=\"execCommand('strikethrough')\" [class.active]=\"commandIsActive('strikethrough')\"><mat-icon svgIcon=\"format-strikethrough\"></mat-icon></button>\n </div>\n\n <div class=\"controls-group\">\n <button mat-icon-button (click)=\"togglePanel('link')\" [class.active]=\"linkPanelIsOpen\" [matTooltip]=\"'Add Link' | trans\" [disabled]=\"!shouldEnableLinkBtn()\">\n <mat-icon svgIcon=\"link\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group text-align\">\n <button mat-icon-button (click)=\"execCommand('justifyLeft')\" [class.active]=\"commandIsActive('justifyLeft')\" [matTooltip]=\"'Align left' | trans\">\n <mat-icon svgIcon=\"format-align-left\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"execCommand('justifyCenter')\" [class.active]=\"commandIsActive('justifyCenter')\" [matTooltip]=\"'Align center' | trans\">\n <mat-icon svgIcon=\"format-align-center\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"execCommand('justifyRight')\" [class.active]=\"commandIsActive('justifyRight')\" [matTooltip]=\"'Align right' | trans\">\n <mat-icon svgIcon=\"format-align-right\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group\">\n <button mat-icon-button [matTooltip]=\"'Add Icon' | trans\" (click)=\"togglePanel('icons')\" [class.active]=\"iconsPanelIsOpen\"><mat-icon svgIcon=\"insert-emoticon\"></mat-icon></button>\n </div>\n</div>\n\n<form class=\"link-panel\" *ngIf=\"linkPanelIsOpen\" (ngSubmit)=\"createLink()\" ngNativeValidate>\n <div class=\"input-container\">\n <input type=\"url\" name=\"inline-editor-link\" [(ngModel)]=\"linkModel\" required placeholder=\"Enter url...\" trans-placeholder>\n </div>\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Add</button>\n</form>\n\n<div class=\"icons-panel\" *ngIf=\"iconsPanelIsOpen\">\n <button mat-icon-button (click)=\"insertIcon(icon)\" *ngFor=\"let icon of styles.icons\" [ngClass]=\"'fab ' + icon\"></button>\n</div>\n","import {Component, Inject, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {baseFonts, fontWeights} from '../../text-style-values';\nimport {fontAwesomeIconsList} from '../../font-awesome-icons-list';\nimport {Settings} from '@common/core/config/settings.service';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {DomHelpers} from '../../../shared/dom-helpers.service';\nimport {SelectedElement} from '../selected-element.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {OVERLAY_PANEL_DATA} from '@common/core/ui/overlay-panel/overlay-panel-data';\nimport {Elements} from '../../elements/elements.service';\nimport {EMPTY, from, fromEvent, Observable} from 'rxjs';\n\n@Component({\n selector: 'inline-text-editor',\n templateUrl: './inline-text-editor.component.html',\n styleUrls: ['./inline-text-editor.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class InlineTextEditorComponent implements OnInit, OnDestroy {\n public styles = {\n fonts: baseFonts,\n weights: fontWeights,\n sizes: [1, 2, 3, 4, 5, 6, 7],\n icons: fontAwesomeIconsList\n };\n\n /**\n * Model for link panel input field.\n */\n public linkModel: string;\n\n /**\n * Whether link panel is currently open.\n */\n public linkPanelIsOpen: boolean;\n\n /**\n * Whether icons panel is currently open.\n */\n public iconsPanelIsOpen: boolean;\n\n /**\n * Parent of editable node before any changes were made to it.\n */\n private beforeDomNode: HTMLElement;\n\n /**\n * Node that is being edited by the inline text editor.\n */\n private editedNode: HTMLElement;\n\n constructor(\n private builderDocument: BuilderDocument,\n private settings: Settings,\n private undoManager: UndoManager,\n private selectedElement: SelectedElement,\n private elements: Elements,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef,\n @Inject(OVERLAY_PANEL_DATA) public data: {activePanel?: 'icons'},\n ) {}\n\n ngOnInit() {\n this.editedNode = this.builderDocument.find('[contenteditable]');\n this.beforeDomNode = this.editedNode.parentElement.cloneNode(true) as HTMLElement;\n\n if (this.data.activePanel) {\n this.togglePanel(this.data.activePanel);\n }\n }\n\n ngOnDestroy() {\n this.makeNodesNotEditable();\n\n this.undoManager.wrapDomChanges(this.editedNode.parentElement, null, {before: this.beforeDomNode});\n this.builderDocument.contentChanged.next('builder');\n }\n\n /**\n * Execute specified command on current text selection.\n */\n public execCommand(command: string, value?: string) {\n this.builderDocument.execCommand(command, value);\n }\n\n /**\n * Check if specified command is active on current text selection.\n */\n public commandIsActive(command: string) {\n return this.builderDocument.queryCommandState(command);\n }\n\n /**\n * Create link from current text selection and link model.\n */\n public createLink() {\n this.execCommand('createLink', this.linkModel);\n this.linkModel = null;\n this.togglePanel('link');\n }\n\n public insertIcon(icon: string) {\n if (this.elements.isIcon(this.editedNode)) {\n let className = this.editedNode.getAttribute('class');\n className = className.replace(/fa fa.+?($| )/, icon + ' ').replace(/icon-.+? /, icon + ' ');\n this.editedNode.setAttribute('class', className);\n } else {\n this.execCommand('insertHtml', '<i class=\"' + icon + '\"></i>');\n }\n\n // if panel is opened via \"change icon\" button on inspector,\n // close the panel completely, otherwise just close icons dropdown\n if (this.data.activePanel === 'icons') {\n this.overlayRef.close();\n } else {\n this.togglePanel('icons');\n }\n }\n\n /**\n * Toggle visibility of specified panel.\n */\n public togglePanel(name: 'icons'|'link') {\n this[name + 'PanelIsOpen'] = !this[name + 'PanelIsOpen'];\n if (name === 'icons') {\n this.loadFontAwesome();\n }\n setTimeout(() => this.overlayRef.updatePosition());\n }\n\n /**\n * Remove \"contenteditable\" attribute from all nodes.\n */\n private makeNodesNotEditable() {\n const editable = this.builderDocument.findAll('[contenteditable]');\n\n for (let i = editable.length - 1; i >= 0; i--) {\n editable[i].removeAttribute('contenteditable');\n editable[i]['blur']();\n }\n }\n\n private loadFontAwesome(): Observable<any> {\n if (document.head.querySelector('#font-awesome')) {\n return EMPTY;\n }\n const link = DomHelpers.createLink('builder/font-awesome/font-awesome.min.css', 'font-awesome');\n const observable = fromEvent(link, 'load');\n document.head.appendChild(link);\n return observable;\n }\n\n public shouldEnableLinkBtn() {\n // prevent adding links <a> to button elements\n const node = this.selectedElement.node;\n return node && node.nodeName.toLowerCase() !== 'button';\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {InlineTextEditorComponent} from './inline-text-editor.component';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InlineTextEditor {\n public overlayRef: OverlayPanelRef<InlineTextEditorComponent>;\n\n constructor(\n private overlayPanel: OverlayPanel,\n ) {}\n\n public open(node: HTMLElement, params: {activePanel?: 'icons'} = {}) {\n this.close();\n this.overlayRef = this.overlayPanel.open(InlineTextEditorComponent, {\n data: params,\n origin: new ElementRef(node),\n hasBackdrop: false,\n position: [\n {originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetX: 380, offsetY: -10},\n {originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetX: 380, offsetY: 10},\n ]\n });\n\n node.setAttribute('contenteditable', 'true');\n node.focus();\n }\n\n public close() {\n this.overlayRef && this.overlayRef.close();\n }\n}\n","import {Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\nimport {SelectedElement} from '../selected-element.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {CodeEditor} from '../code-editor/code-editor.service';\nimport {CurrentUser} from '../../../../common/auth/current-user';\n\n@Component({\n selector: 'live-preview-context-menu',\n templateUrl: './live-preview-context-menu.component.html',\n styleUrls: ['./live-preview-context-menu.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LivePreviewContextMenuComponent {\n @ViewChild(MatMenuTrigger, {static: true}) trigger: MatMenuTrigger;\n @ViewChild('contextMenu', {static: true}) contextMenu;\n\n constructor(\n public undoManager: UndoManager,\n private codeEditor: CodeEditor,\n private builderDocument: BuilderDocument,\n public selected: SelectedElement,\n public currentUser: CurrentUser,\n ) {}\n\n public remove() {\n this.builderDocument.actions.removeNode(this.selected.node);\n }\n\n public undo() {\n this.undoManager.undo();\n }\n\n public redo() {\n this.undoManager.redo();\n }\n\n public copy() {\n this.builderDocument.actions.copyNode(this.selected.node);\n }\n\n public cut() {\n this.builderDocument.actions.cutNode(this.selected.node);\n }\n\n public paste() {\n this.builderDocument.actions.pasteNode(this.selected.node);\n }\n\n public canPaste() {\n return this.builderDocument.actions.copiedNode;\n }\n\n public duplicate() {\n this.builderDocument.actions.duplicateNode(this.selected.node);\n }\n\n public selectParent() {\n this.selected.selectParent();\n }\n\n public canSelectParent() {\n return this.selected.canSelectParent();\n }\n\n public canSelectChild() {\n return this.selected.canSelectChild();\n }\n\n public selectChild() {\n this.selected.selectFirstChild();\n }\n\n public viewSourceCode() {\n this.codeEditor.open().subscribe(editor => {\n setTimeout(() => editor.selectNodeSource(this.selected.node));\n });\n }\n\n public move(direction: 'up'|'down') {\n this.builderDocument.actions.moveSelected(direction);\n }\n}\n","<div #contextMenu class=\"context-menu\">\n\n <button class=\"context-menu-item\" [disabled]=\"!canSelectParent()\" (click)=\"selectParent()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"arrow-upward\"></mat-icon>\n <span trans>Select Parent</span>\n </button>\n <button class=\"context-menu-item\" [disabled]=\"!canSelectChild()\" (click)=\"selectChild()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"arrow-downward\"></mat-icon>\n <span trans>Select Child</span>\n </button>\n\n <div class=\"separator\"></div>\n\n <button class=\"context-menu-item\" (click)=\"cut()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"content-cut\"></mat-icon>\n <span trans>Cut</span>\n <span class=\"alt-text\">Ctrl+Shift+X</span>\n </button>\n <button class=\"context-menu-item\" (click)=\"copy()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"file-copy\"></mat-icon>\n <span trans>Copy</span>\n <span class=\"alt-text\">Ctrl+Shift+C</span>\n </button>\n <button class=\"context-menu-item\" [disabled]=\"!canPaste()\" (click)=\"paste()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"content-paste\"></mat-icon>\n <span trans>Paste</span>\n <span class=\"alt-text\">Ctrl+Shift+V</span>\n </button>\n <button class=\"context-menu-item\" (click)=\"remove()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"delete\"></mat-icon>\n <span trans>Delete</span>\n <span class=\"alt-text\">Del</span>\n </button>\n <button class=\"context-menu-item\" (click)=\"duplicate()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"flip-to-back\"></mat-icon>\n <span trans>Duplicate</span>\n </button>\n\n <button class=\"context-menu-item\" (click)=\"move('up')\">\n <mat-icon class=\"mat-icon\" svgIcon=\"keyboard-arrow-up\"></mat-icon>\n <span trans>Move Up</span>\n <span class=\"alt-text\">Arrow Up</span>\n </button>\n <button class=\"context-menu-item\" (click)=\"move('down')\">\n <mat-icon class=\"mat-icon\" svgIcon=\"keyboard-arrow-down\"></mat-icon>\n <span trans>Move Down</span>\n <span class=\"alt-text\">Arrow Down</span>\n </button>\n\n <div class=\"separator\"></div>\n\n <button class=\"context-menu-item\" [disabled]=\"!undoManager.canUndo()\" (click)=\"undo()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"undo\"></mat-icon>\n <span trans>Undo</span>\n <span class=\"alt-text\">Ctrl+Z</span>\n </button>\n <button class=\"context-menu-item\" [disabled]=\"!undoManager.canRedo()\" (click)=\"redo()\">\n <mat-icon class=\"mat-icon\" svgIcon=\"redo\"></mat-icon>\n <span trans>Redo</span>\n <span class=\"alt-text\">Ctrl+Y</span>\n </button>\n\n <div class=\"separator\"></div>\n\n <button class=\"context-menu-item\" (click)=\"viewSourceCode()\" [disabled]=\"!currentUser.hasPermission('editors.enable')\">\n <span class=\"indent\" trans>View Source</span>\n </button>\n</div>\n","export enum Keycodes {\r\n ENTER = 13,\r\n SPACE = 32,\r\n ESCAPE = 27,\r\n DELETE = 46,\r\n ARROW_UP = 38,\r\n ARROW_RIGHT = 39,\r\n ARROW_DOWN = 40,\r\n ARROW_LEFT = 37,\r\n S = 83,\r\n N = 78,\r\n A = 65,\r\n T = 84,\r\n B = 66,\r\n C = 67,\r\n O = 79,\r\n P = 80,\r\n R = 82,\r\n F = 70,\r\n Y = 89,\r\n Z = 90,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Keycodes } from './keycodes.enum';\r\nimport { fromEvent, Subscription } from 'rxjs';\r\nimport { DELETE } from '@angular/cdk/keycodes';\r\n\r\ninterface ParsedKeybind {\r\n ctrl: boolean;\r\n shift: boolean;\r\n key: string;\r\n}\r\n\r\n// TODO: refactor so keybinds are stored for a specific \"listenOn\" element instead of globally\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class Keybinds {\r\n private bindings = [];\r\n\r\n public add(keybind: string, callback: (e: KeyboardEvent) => void) {\r\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback});\r\n }\r\n\r\n public addWithPreventDefault(keybind: string, callback: Function) {\r\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback, preventDefault: true});\r\n }\r\n\r\n public listenOn(el: HTMLElement|Document): Subscription {\r\n return fromEvent(el, 'keydown').subscribe((e: KeyboardEvent) => {\r\n this.executeBindings(e);\r\n });\r\n }\r\n\r\n private executeBindings(e: KeyboardEvent) {\r\n this.bindings.forEach(binding => {\r\n if ( ! this.bindingMatches(binding.keybind, e)) return;\r\n if (binding.preventDefault && e.preventDefault) e.preventDefault();\r\n binding.callback(e);\r\n });\r\n }\r\n\r\n private bindingMatches(keybind: ParsedKeybind, e: KeyboardEvent) {\r\n return Keycodes[keybind.key.toUpperCase()] === e.keyCode && e.ctrlKey === keybind.ctrl && e.shiftKey === keybind.shift;\r\n }\r\n\r\n /**\r\n * Parse keybind string into object.\r\n */\r\n private parseKeybindString(keybind: string): ParsedKeybind {\r\n const parts = keybind.trim().split('+');\r\n const parsed = {ctrl: false, shift: false, key: ''};\r\n\r\n parts.forEach(part => {\r\n part = part.trim().toLowerCase();\r\n\r\n if (part === 'ctrl') {\r\n parsed.ctrl = true;\r\n } else if (part === 'shift') {\r\n parsed.shift = true;\r\n } else {\r\n parsed.key = part;\r\n }\r\n });\r\n\r\n return parsed;\r\n }\r\n}\r\n","<mat-tab-group color=\"accent\" [dynamicHeight]=\"true\" (selectedTabChange)=\"resetModel()\">\n <mat-tab>\n <ng-template mat-tab-label>\n <span trans>Url</span>\n </ng-template>\n\n <form (ngSubmit)=\"setUrl()\" ngNativeValidate>\n <div class=\"input-container\">\n <input type=\"url\" name=\"url\" [(ngModel)]=\"hrefModel\" placeholder=\"Enter website url...\" trans-placeholder required>\n </div>\n\n <div class=\"buttons\">\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button [disabled]=\"!hrefModel\" type=\"submit\" mat-raised-button color=\"accent\" trans>Change</button>\n </div>\n </form>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <span trans>Page</span>\n </ng-template>\n\n <mat-list role=\"list\">\n <mat-list-item class=\"page-list-item\" (click)=\"hrefModel = page.name\" [class.selected]=\"hrefModel === page.name\" role=\"listitem\" *ngFor=\"let page of activeProject.pages$ | async\">\n {{page.name}}\n </mat-list-item>\n </mat-list>\n\n <div class=\"buttons\">\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button [disabled]=\"!hrefModel\" (click)=\"setPageLink()\" mat-raised-button color=\"accent\" trans>Change</button>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <span trans>Anchor</span>\n </ng-template>\n\n <mat-list role=\"list\">\n <mat-list-item class=\"page-list-item\" (click)=\"hrefModel = anchor\" [class.selected]=\"hrefModel === anchor\" role=\"listitem\" *ngFor=\"let anchor of anchors$ | async\">\n {{anchor}}\n </mat-list-item>\n </mat-list>\n\n <div class=\"buttons\">\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button [disabled]=\"!hrefModel\" (click)=\"setAnchor()\" mat-raised-button color=\"accent\" trans>Change</button>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <span trans>Download</span>\n </ng-template>\n\n <form class=\"many-inputs\" (ngSubmit)=\"setDownload()\" ngNativeValidate>\n <div class=\"input-container\">\n <label for=\"name\" trans>Name</label>\n <input type=\"text\" id=\"name\" name=\"download\" [(ngModel)]=\"downloadName\" required>\n </div>\n\n <div class=\"input-container\">\n <label for=\"download\" trans>Url</label>\n <input type=\"url\" name=\"download\" id=\"download\" [(ngModel)]=\"hrefModel\" required>\n </div>\n\n <div class=\"buttons\">\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button [disabled]=\"!hrefModel\" type=\"submit\" mat-raised-button color=\"accent\" trans>Change</button>\n </div>\n </form>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <span trans>Email</span>\n </ng-template>\n\n <form (ngSubmit)=\"setEmail()\" ngNativeValidate>\n <div class=\"input-container\">\n <input type=\"email\" name=\"email\" [(ngModel)]=\"hrefModel\" placeholder=\"Enter email address...\" trans-placeholder required>\n </div>\n\n <div class=\"buttons\">\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button [disabled]=\"!hrefModel\" type=\"submit\" mat-raised-button color=\"accent\" trans>Change</button>\n </div>\n </form>\n </mat-tab>\n</mat-tab-group>\n","import {Component, Inject, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {ActiveProject} from '../../projects/active-project';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {OVERLAY_PANEL_DATA} from '@common/core/ui/overlay-panel/overlay-panel-data';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'link-editor',\n templateUrl: './link-editor.component.html',\n styleUrls: ['./link-editor.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LinkEditorComponent implements OnInit {\n public hrefModel: string;\n public downloadName: string;\n public anchors$ = new BehaviorSubject<string[]>([]);\n\n constructor(\n public activeProject: ActiveProject,\n private builderDocument: BuilderDocument,\n @Inject(OVERLAY_PANEL_DATA) @Optional() public data: {node: HTMLLinkElement},\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef,\n ) {}\n\n ngOnInit() {\n this.anchors$.next(Array.from(this.builderDocument.document.querySelectorAll('*[id]'))\n .map((el: HTMLElement) => el.id));\n }\n\n public setEmail() {\n this.data.node.href = 'mailto:' + this.hrefModel;\n this.closeAndEmitChanges();\n }\n\n public setDownload() {\n this.data.node.href = this.hrefModel;\n this.data.node.setAttribute('download', this.downloadName);\n this.closeAndEmitChanges();\n }\n\n public setPageLink() {\n this.data.node.href = this.hrefModel + '.html';\n this.closeAndEmitChanges();\n }\n\n public setAnchor() {\n this.data.node.href = '#' + this.hrefModel;\n this.closeAndEmitChanges();\n }\n\n public setUrl() {\n this.data.node.href = this.hrefModel;\n this.closeAndEmitChanges();\n }\n\n public closeAndEmitChanges() {\n this.close();\n this.builderDocument.contentChanged.next('builder');\n }\n\n public close() {\n this.overlayRef.close();\n }\n\n public resetModel() {\n this.hrefModel = null;\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {ConnectedPosition} from '@angular/cdk/overlay';\nimport {LinkEditorComponent} from './link-editor.component';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LinkEditor {\n public overlayRef: OverlayPanelRef<LinkEditorComponent>;\n\n constructor(\n private overlayPanel: OverlayPanel,\n private breakpoints: BreakpointsService,\n ) {}\n\n public open(node: HTMLLinkElement) {\n // on mobile sidebar is overlaid, so no offset is needed\n const offsetX = this.breakpoints.isMobile$.value ? 0 : 380;\n const bottom = [\n {originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 25, offsetX}, // bottom\n {originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 25, offsetX}, // bottom\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 25, offsetX}, // bottom\n {originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -25, offsetX}, // top\n ] as ConnectedPosition[];\n\n this.overlayRef = this.overlayPanel.open(LinkEditorComponent, {\n position: bottom,\n origin: new ElementRef(node),\n data: {node},\n });\n }\n\n public close() {\n this.overlayRef && this.overlayRef.close();\n }\n}\n","import {Injectable, NgZone} from '@angular/core';\nimport {Elements} from './elements/elements.service';\nimport {ActiveElement} from './live-preview/active-element';\nimport {UndoManager} from './undo-manager/undo-manager.service';\nimport {InlineTextEditor} from './live-preview/inline-text-editor/inline-text-editor.service';\nimport {ActiveProject} from './projects/active-project';\nimport {ContextMenu} from '@common/core/ui/context-menu/context-menu.service';\nimport {LivePreviewContextMenuComponent} from './live-preview/live-preview-context-menu/live-preview-context-menu.component';\nimport {Keybinds} from '@common/core/keybinds/keybinds.service';\nimport {SelectedElement} from './live-preview/selected-element.service';\nimport {ContextBoxes} from './live-preview/context-boxes.service';\nimport {BuilderDocument} from './builder-document.service';\nimport {LinkEditor} from './live-preview/link-editor/link-editor.service';\nimport {DomHelpers} from '../shared/dom-helpers.service';\nimport {randomString} from '../../common/core/utils/random-string';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LivePreview {\n\n /**\n * Whether element is currently being dragged in live preview.\n */\n dragging = false;\n\n /**\n * Element user's cursor is hovering over.\n */\n public hover = new ActiveElement();\n public iframe: HTMLIFrameElement;\n public activeWidth: 'phone'|'tablet'|'laptop'|'desktop' = 'desktop';\n\n constructor(\n private zone: NgZone,\n private elements: Elements,\n private undoManager: UndoManager,\n private inlineTextEditor: InlineTextEditor,\n private parsedProject: ActiveProject,\n private contextMenu: ContextMenu,\n private keybinds: Keybinds,\n public selected: SelectedElement,\n public contextBoxes: ContextBoxes,\n private builderDocument: BuilderDocument,\n public activeProject: ActiveProject,\n private linkEditor: LinkEditor,\n ) {}\n\n public init() {\n this.iframe.onload = () => {\n this.builderDocument.document = this.iframe.contentDocument;\n this.builderDocument.addIframeCss();\n this.builderDocument.loaded$.next(true);\n this.builderDocument.loaded$.complete();\n this.registerKeybinds();\n this.bindToIframeEvents();\n this.bindToUndoCommandExecuted();\n };\n\n this.iframe.src = `${this.activeProject.getBaseUrl()}?v=${randomString()}`;\n }\n\n private bindToUndoCommandExecuted() {\n this.undoManager.executedCommand.subscribe(() => {\n this.repositionBox('selected');\n this.hideBox('hover');\n });\n }\n\n private bindToIframeEvents() {\n const hammer = new Hammer.Manager(this.builderDocument.get()),\n doubleTap = new Hammer.Tap({event: 'double_tap', taps: 2});\n\n hammer.add(doubleTap);\n\n this.listenForHover();\n this.listenForClick();\n this.listenForDoubleClick(hammer);\n this.listenForContextMenu();\n this.keybinds.listenOn(this.builderDocument.get());\n\n this.builderDocument.on('scroll', e => {\n this.contextBoxes.hideBox('hover');\n if (this.selected.node) this.repositionBox('selected');\n this.inlineTextEditor.close();\n this.contextMenu.close();\n }, true);\n }\n\n private registerKeybinds() {\n this.keybinds.add('ctrl+shift+x', () => this.builderDocument.actions.cutNode(this.selected.node));\n this.keybinds.add('ctrl+shift+c', () => this.builderDocument.actions.copyNode(this.selected.node));\n this.keybinds.add('ctrl+shift+v', () => this.builderDocument.actions.pasteNode(this.selected.node));\n this.keybinds.add('ctrl+z', () => this.undoManager.undo());\n this.keybinds.add('ctrl+y', () => this.undoManager.redo());\n this.keybinds.addWithPreventDefault('arrow_up', () => this.builderDocument.actions.moveSelected('up'));\n this.keybinds.addWithPreventDefault('arrow_down', () => this.builderDocument.actions.moveSelected('down'));\n this.keybinds.add('delete', () => {\n if ( ! DomHelpers.nodeIsEditable(this.selected.node) && ! this.selected.isHtmlOrBody()) {\n this.builderDocument.actions.removeNode(this.selected.node);\n }\n });\n }\n\n private listenForHover() {\n this.builderDocument.document.addEventListener('mousemove', e => {\n this.zone.run(() => {\n if (this.dragging) return;\n\n let node = this.builderDocument.elementFromPoint(e.pageX, e.pageY - this.builderDocument.getScrollTop());\n if ( ! node || node === this.hover?.node) return;\n if (node.nodeName.toLowerCase() === 'path') {\n node = node.closest('svg') as any;\n }\n\n this.hover.node = node;\n\n this.hover.element = this.elements.match(this.hover.node, 'hover', true);\n\n this.repositionBox('hover');\n });\n });\n }\n\n private listenForContextMenu() {\n this.builderDocument.on('contextmenu', e => {\n this.zone.run(() => {\n e.preventDefault();\n this.selected.selectNode(e.target as HTMLElement);\n this.contextMenu.open(LivePreviewContextMenuComponent, e, {offsetX: 380});\n });\n });\n }\n\n private listenForClick() {\n this.builderDocument.document.addEventListener('click', e => {\n this.zone.run(() => {\n const node = e.target as HTMLElement;\n\n this.handleLinkClick(e);\n this.handleFormSubmitButtonClick(e);\n this.builderDocument.focus();\n\n // node is already selected, bail\n if (this.selected.node === node) return true;\n\n // node text is being edited, bail\n if (DomHelpers.nodeIsEditable(node)) return;\n\n // hide context menu\n this.contextMenu.close();\n\n // hide wysiwyg toolbar when clicked outside it\n this.inlineTextEditor.close();\n\n // hide link editor\n this.linkEditor.close();\n\n // select node\n this.selected.selectNode(node);\n });\n }, true);\n }\n\n private listenForDoubleClick(hammer: HammerManager) {\n hammer.on('double_tap', e => {\n this.zone.run(() => {\n const matched = this.elements.match(e.target);\n\n // node text is already being edited, bail\n if (DomHelpers.nodeIsEditable(e.target)) return;\n\n const canModify = matched.canModify || [];\n if (canModify.indexOf('text') > -1 && matched.showWysiwyg) {\n this.hideBox('selected');\n this.inlineTextEditor.open(e.target);\n }\n });\n });\n }\n\n private handleLinkClick(e: MouseEvent) {\n let node = e.target as HTMLElement;\n\n // clicked node is not a link\n if ( ! node.matches('a, a *')) return;\n\n // if element is not a link, find first link parent\n if (node.tagName.toLowerCase() !== 'a') {\n node = node.closest('a');\n }\n\n // get relative url of for the link\n const link = node as HTMLLinkElement;\n const href = link.href ? link.href.replace(this.iframe.src, '').replace(this.activeProject.getBaseUrl(), '') : '';\n\n // empty href attribute\n if ( ! href.trim()) return;\n\n // link just scrolls to a node on the page, bail\n if (href.indexOf('#') === 0) return;\n\n // link navigates to an external site, bail\n if (href.indexOf('//') > -1) return;\n\n // link navigates to a different page\n const pageName = href.replace('.html', '');\n\n e.preventDefault();\n e.stopPropagation();\n\n // TODO: need to sync with pages panel (need to refactor into some kind of global state)\n this.activeProject.setActivePage(pageName)\n .updateBuilderDocument();\n }\n\n private handleFormSubmitButtonClick(e: MouseEvent) {\n const node = e.target as HTMLElement;\n\n // clicked node is not a submit button\n if ( ! node.matches('button[type=submit], button[type=submit] *')) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n //\n }\n\n public repositionBox(name: 'hover'|'selected') {\n this.contextBoxes.repositionBox(name, this[name].node);\n }\n\n /**\n * Hide specified context box.\n */\n public hideBox(name: 'hover'|'selected') {\n this.contextBoxes.hideBox(name);\n }\n\n public getElementDisplayName(el: any, node: HTMLElement): string {\n return this.elements.getDisplayName(el, node);\n }\n\n /**\n * Set live preview with to specified device.\n */\n public setWidth(device: 'phone'|'tablet'|'laptop'|'desktop') {\n this.activeWidth = device;\n }\n\n public getIframe() {\n return this.iframe;\n }\n}\n","import {Injectable} from '@angular/core';\r\nimport {Columns, Container} from './layout-panel-types';\r\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\r\nimport {SelectedElement} from '../../live-preview/selected-element.service';\r\nimport {BuilderDocument} from '../../builder-document.service';\r\nimport {ContextBoxes} from '../../live-preview/context-boxes.service';\r\nimport {Elements} from '../../elements/elements.service';\r\nimport {randomString} from '@common/core/utils/random-string';\r\n\r\nconst CONTAINER_CLASS = '.container, .container-fluid';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LayoutPanel {\r\n\r\n /**\r\n * All existing containers in the live preview.\r\n */\r\n public containers: Container[] = [];\r\n\r\n /**\r\n * Currently selected row.\r\n */\r\n public selectedRow: {node: HTMLElement, columns: Columns, preset: number[]};\r\n\r\n public selectedContainer: Container;\r\n\r\n constructor(\r\n private builderDocument: BuilderDocument,\r\n private selected: SelectedElement,\r\n private undoManager: UndoManager,\r\n private contextBoxes: ContextBoxes,\r\n private elements: Elements,\r\n ) {\r\n this.selected.changed.subscribe(() => {\r\n this.selectRowAndContainerUsing(this.selected.node);\r\n });\r\n }\r\n\r\n /**\r\n * Load all containers from live preview.\r\n */\r\n public loadContainers() {\r\n this.containers = [];\r\n Array.from(this.builderDocument.findAll(CONTAINER_CLASS)).forEach((node: HTMLElement) => {\r\n const rows = Array.from(node.querySelectorAll('.row')) as HTMLElement[];\r\n this.containers.push({node, rows, id: randomString()});\r\n });\r\n\r\n if (this.selectedContainer) this.selectContainer(this.selectedContainer.node);\r\n }\r\n\r\n /**\r\n * Add a row before or after specified reference element.\r\n */\r\n public createRow(container: HTMLElement, ref: HTMLElement, dir: 'before'|'after'|'start') {\r\n const row = this.builderDocument.createElement('div');\r\n row.appendChild(this.createColumnNode(12));\r\n row.classList.add('row');\r\n\r\n if (dir === 'start') {\r\n if (ref) {\r\n ref.parentElement.insertBefore(row, ref);\r\n } else {\r\n container.appendChild(row);\r\n }\r\n } else {\r\n ref[dir](row);\r\n }\r\n\r\n this.selectRow(row);\r\n this.builderDocument.contentChanged.next('builder');\r\n }\r\n\r\n /**\r\n * Create new container node and add it to the container's list.\r\n */\r\n public createContainer(ref: HTMLElement, dir: 'before'|'after'|'start') {\r\n const row = this.builderDocument.createElement('div');\r\n row.appendChild(this.createColumnNode(12));\r\n row.classList.add('row');\r\n\r\n const container = this.builderDocument.createElement('div');\r\n container.classList.add('container');\r\n container.appendChild(row);\r\n\r\n if (dir === 'start') {\r\n const body = this.builderDocument.getBody();\r\n body && body.appendChild(container);\r\n } else {\r\n ref[dir](container);\r\n }\r\n\r\n this.builderDocument.contentChanged.next('builder');\r\n\r\n this.selectContainer(container);\r\n this.selected.selectNode(this.selectedContainer.node);\r\n }\r\n\r\n public selectContainer(container: Container|HTMLElement, selectRow = true) {\r\n if ( ! container) return;\r\n\r\n if (container['nodeType']) {\r\n this.selectedContainer = this.containers.find(cont => cont.node === container);\r\n } else {\r\n this.selectedContainer = container as Container;\r\n }\r\n\r\n if (this.selectedContainer && selectRow) {\r\n this.selectRow(this.selectedContainer.rows[0]);\r\n }\r\n }\r\n\r\n public rowIsSelected(node: HTMLElement) {\r\n return this.selectedRow && this.selectedRow.node === node;\r\n }\r\n\r\n public containerIsSelected(node: HTMLElement) {\r\n return this.selectedContainer && this.selectedContainer.node === node;\r\n }\r\n\r\n /**\r\n * Select specified row.\r\n */\r\n public selectRow(node: HTMLElement, selectNode = true) {\r\n if ( ! node) return;\r\n\r\n if (selectNode) this.selected.selectNode(node);\r\n\r\n const columns = this.getColumns(node),\r\n preset = columns.map(col => col.span);\r\n\r\n this.builderDocument.scrollIntoView(node);\r\n\r\n this.selectedRow = {node, columns, preset};\r\n }\r\n\r\n private getColumns(node: HTMLElement): Columns {\r\n const cols = this.nodeListToArray(node.children).filter(node => {\r\n return node.className.indexOf('col-') > -1;\r\n });\r\n\r\n return cols.map(column => {\r\n return {node: column, span: this.getSpan(column), id: randomString()};\r\n });\r\n }\r\n\r\n public selectColumn(node: HTMLElement) {\r\n this.selected.selectNode(node);\r\n this.builderDocument.scrollIntoView(node);\r\n }\r\n\r\n public applyPreset(preset: number[]) {\r\n const oldNode = this.selectedRow.node.cloneNode(true) as HTMLElement;\r\n\r\n // remove extra columns\r\n if (this.selectedRow.columns.length > preset.length) {\r\n const cols = this.selectedRow.columns.slice(preset.length);\r\n cols.forEach(col => col.node.remove());\r\n }\r\n\r\n preset.forEach((span, i) => {\r\n // resize existing columns\r\n if (this.selectedRow.columns[i]) {\r\n this.resizeColumn(this.selectedRow.columns[i].node, span);\r\n } else if (this.selectedRow.columns[i - 1]) {\r\n this.addNewColumn(this.selectedRow.columns[i - 1].node, span);\r\n\r\n // row is empty\r\n } else {\r\n this.selectedRow.node.appendChild(this.createColumnNode(span));\r\n }\r\n });\r\n\r\n this.undoManager.add('domChanges', {\r\n oldNode: oldNode,\r\n newNode: this.selectedRow.node.cloneNode(true) as HTMLElement,\r\n node: this.selectedRow.node,\r\n });\r\n\r\n this.selectRow(this.selectedRow.node);\r\n this.builderDocument.contentChanged.next('builder');\r\n this.contextBoxes.repositionBox('selected', this.selected.node);\r\n }\r\n\r\n /**\r\n * Insert new column before or after the given one.\r\n */\r\n public addNewColumn(node: HTMLElement, span: number, dir: 'before'|'after' = 'after') {\r\n const nodeIndex = this.getNodeIndex(this.selectedRow.columns, node),\r\n siblings = this.nodeListToArray(node.parentElement.childNodes),\r\n colsAfter = siblings.filter(siblingIndex => nodeIndex < siblingIndex),\r\n colsBefore = siblings.filter(siblingIndex => nodeIndex > siblingIndex);\r\n let inserted = false;\r\n\r\n // add new column without resizing other columns if there's enough space left\r\n if ((this.getTotalSpan(this.selectedRow.columns) + span) <= 12) {\r\n node[dir](this.createColumnNode(span));\r\n inserted = true;\r\n }\r\n\r\n // try to reduce the next column by one\r\n if ( ! inserted && this.widerThen(1, colsAfter[0])) {\r\n this.resizeColumn(colsAfter[0], 1, '-');\r\n node[dir](this.createColumnNode(span));\r\n inserted = true;\r\n } else if ( ! inserted && this.widerThen(1, node)) {\r\n this.resizeColumn(node, 1, '-');\r\n node['after'](this.createColumnNode(span));\r\n inserted = true;\r\n }\r\n\r\n // loop trough all columns after given one and\r\n // reduce the first one that's wider then one\r\n if ( ! inserted) {\r\n for (let i = 0; i < colsAfter.length; i++) {\r\n if (this.widerThen(1, colsAfter[i])) {\r\n this.resizeColumn(colsAfter[i], 1, '-');\r\n node[dir](this.createColumnNode(span));\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // loop trough all columns before given one and\r\n // reduce the first one that's wider then one\r\n if ( ! inserted) {\r\n for (let i = 0; i < colsBefore.length; i++) {\r\n if (this.widerThen(1, colsBefore[i])) {\r\n this.resizeColumn(colsBefore[i], 1, '-');\r\n node[dir](this.createColumnNode(span));\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.selectedRow.columns = this.getColumns(this.selectedRow.node);\r\n }\r\n\r\n /**\r\n * Get total span for specified row.\r\n */\r\n private getTotalSpan(columns: Columns): number {\r\n const spans = columns.map(col => this.getSpan(col.node));\r\n\r\n return spans.reduce((total, span) => {\r\n return total + span;\r\n });\r\n }\r\n\r\n /**\r\n * Create new column node of specified span.\r\n */\r\n private createColumnNode(span: number): HTMLElement {\r\n const col = this.builderDocument.createElement('div');\r\n col.className = 'col-sm-' + span;\r\n return col;\r\n }\r\n\r\n /**\r\n * Return whether given column is wider then\r\n * given number of spans or not.\r\n */\r\n private widerThen(span: number, node: HTMLElement) {\r\n if (this.isColumn(node)) {\r\n return this.getSpan(node) > span;\r\n }\r\n }\r\n\r\n /**\r\n * Check whether or not specified node is a column.\r\n */\r\n private isColumn(node: HTMLElement) {\r\n if (node && node.className) {\r\n return node.className.indexOf('col-') > -1;\r\n }\r\n }\r\n\r\n private getNodeIndex(nodeList: NodeList|Columns, node: Node) {\r\n for (let i = nodeList.length - 1; i >= 0; i--) {\r\n if (nodeList[i] === node) return i;\r\n }\r\n }\r\n\r\n /**\r\n * Resize passed in column in the DOM.\r\n */\r\n private resizeColumn(node: HTMLElement, newSpan: number, operator?: '+'|'-') {\r\n if ( ! newSpan) newSpan = 1;\r\n\r\n node.className = node.className.replace(/(col-[a-z]+-)([0-9]+)/, function(full, start, oldSpan) {\r\n if (operator) {\r\n return operator === '+' ? start + (parseInt(oldSpan) + newSpan) : start + (parseInt(oldSpan) - newSpan);\r\n }\r\n\r\n return start + newSpan;\r\n });\r\n }\r\n\r\n /**\r\n * Return given columns span.\r\n */\r\n private getSpan(node: HTMLElement): number {\r\n const matches = node.className.match(/col-[a-z]+-([0-9]+)/);\r\n return parseInt(matches ? matches[1] : null);\r\n }\r\n\r\n private nodeListToArray(nodeList: NodeListOf<Element>|HTMLCollection|any[]|NodeList) {\r\n const array = [];\r\n\r\n for (let i = 0; i < nodeList.length; i++) {\r\n array.push(nodeList[i]);\r\n }\r\n\r\n return array;\r\n }\r\n\r\n /**\r\n * Select row and container using specified node (column, row or container).\r\n */\r\n public selectRowAndContainerUsing(node: HTMLElement) {\r\n let row, container;\r\n\r\n if ( ! node || ! this.selected.isLayout) return;\r\n\r\n if (this.elements.isRow(this.selected.node)) {\r\n row = node;\r\n container = row.closest(CONTAINER_CLASS) as HTMLElement;\r\n }\r\n\r\n if (this.elements.isColumn(this.selected.node)) {\r\n row = node.closest('.row') as HTMLElement;\r\n if (row) {\r\n container = row.closest(CONTAINER_CLASS) as HTMLElement;\r\n }\r\n }\r\n\r\n if (this.elements.isContainer(this.selected.node)) {\r\n container = node;\r\n row = container.querySelector('.row');\r\n }\r\n\r\n if ( ! this.rowIsSelected(row)) {\r\n this.selectRow(row, false);\r\n }\r\n\r\n if ( ! this.containerIsSelected(container)) {\r\n this.selectContainer(container, false);\r\n }\r\n }\r\n}\r\n","import {ElementRef, Injectable} from '@angular/core';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {OverlayPanel} from '../../../common/core/ui/overlay-panel/overlay-panel.service';\nimport {OverlayPanelRef} from '../../../common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InspectorFloatingPanel {\n public overlayRef: OverlayPanelRef<any>;\n\n constructor(private overlayPanel: OverlayPanel) {}\n\n public open<T>(component: ComponentType<T>, origin: ElementRef): OverlayPanelRef<T> {\n this.close();\n\n const positionStrategy = this.overlayPanel.overlay.position().flexibleConnectedTo(origin)\n .withPositions([\n {originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 35},\n {originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: 35},\n ]);\n\n this.overlayRef = this.overlayPanel.open(component, {\n origin,\n positionStrategy,\n hasBackdrop: true,\n });\n\n return this.overlayRef;\n }\n\n public close() {\n if ( ! this.overlayRef) return;\n this.overlayRef.close();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpCacheClient} from '@common/core/http/http-cache-client';\nimport {BackendResponse} from '../../../common/core/types/backend-response';\nimport {BuilderElement} from './builder-element';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ElementsApi {\n constructor(private http: HttpCacheClient) {}\n\n public getCustom(): BackendResponse<BuilderElement[]> {\n return this.http.getWithCache('elements/custom');\n }\n}\n","import {Injectable} from '@angular/core';\nimport { MatDrawer } from \"@angular/material/sidenav\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InspectorDrawer {\n\n /**\n * Inspector drawer component instance.\n */\n private drawer: MatDrawer;\n\n /**\n * Currently active drawer panel.\n */\n public activePanel: 'templates' | 'themes' = null;\n\n /**\n * Toggle inspector drawer state.\n */\n public toggle(name: 'templates' | 'themes') {\n this.activePanel = name;\n this.drawer.toggle();\n }\n\n /**\n * Close inspector drawer.\n */\n public close() {\n this.activePanel = null;\n return this.drawer.close();\n }\n\n public setDrawer(drawer: MatDrawer) {\n this.drawer = drawer;\n }\n}\n","import {Injectable, NgZone} from '@angular/core';\nimport {DragVisualHelperComponent} from \"./drag-visual-helper.component\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DragVisualHelper {\n\n private component: DragVisualHelperComponent;\n\n private element;\n\n /**\n * DragVisualHelper Constructor.\n */\n constructor(private zone: NgZone) {}\n\n public getName() {\n return this.element && this.element.name;\n }\n\n public reposition(y: number, x: number) {\n //offset drag helper a bit, so it's in top right corner of cursor\n this.component.renderer.setStyle(this.component.el.nativeElement, 'top', y - 20 + 'px');\n this.component.renderer.setStyle(this.component.el.nativeElement, 'left', x + 21 + 'px');\n }\n\n public show(element: any) {\n this.zone.run(() => this.element = element);\n this.component.renderer.removeClass(this.component.el.nativeElement, 'hidden');\n }\n\n public hide() {\n this.component.renderer.addClass(this.component.el.nativeElement, 'hidden');\n }\n\n public setComponent(component: DragVisualHelperComponent) {\n this.component = component;\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\r\nimport {SelectedElement} from \"../live-preview/selected-element.service\";\r\nimport {Subject} from \"rxjs\";\r\n\r\ntype PanelNames = 'elements'|'inspector'|'pages'|'themes'|'settings'|'layout';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Inspector {\r\n\r\n private activePanel: PanelNames = 'elements';\r\n\r\n /**\r\n * Inspector sidebar host element.\r\n */\r\n public elementRef: ElementRef;\r\n\r\n public panelChanged: Subject<string> = new Subject();\r\n\r\n constructor(private selectedElement: SelectedElement) {\r\n this.selectedElement.changed.subscribe(() => {\r\n if ( ! this.selectedElement.node) return;\r\n\r\n if (this.selectedElement.isLayout) {\r\n this.openPanel('layout');\r\n } else {\r\n this.openPanel('inspector');\r\n }\r\n });\r\n }\r\n\r\n public togglePanel(name: PanelNames) {\r\n this.activePanel = name;\r\n this.panelChanged.next(name);\r\n }\r\n\r\n public openPanel(name: PanelNames) {\r\n if (this.activePanelIs(name)) return;\r\n this.activePanel = name;\r\n this.panelChanged.next(name);\r\n }\r\n\r\n public activePanelIs(name: PanelNames) {\r\n return this.activePanel === name;\r\n }\r\n\r\n public reset() {\r\n this.activePanel = 'elements';\r\n }\r\n}\r\n","import {BuilderDocument} from '../../builder-document.service';\n\nexport class LivePreviewScroller {\n private scrollDownTimeout;\n private scrollUpTimeout;\n private previewHeight: number;\n\n constructor(\n private builderDocument: BuilderDocument,\n private previewContainer: HTMLElement\n ) {}\n\n /**\n * Scroll iframe body when given y is above or below it.\n */\n public scroll(y: number) {\n const scrollTop = this.builderDocument.getScrollTop(),\n pointY = y + this.builderDocument.getScrollTop();\n\n if ( ! this.previewHeight) {\n this.previewHeight = this.previewContainer.offsetHeight;\n }\n\n if (pointY - scrollTop <= 80) {\n this.scrollFrameUp();\n } else if (pointY > scrollTop + this.previewHeight - 80) {\n this.scrollFrameDown();\n } else {\n this.stopScrolling();\n }\n }\n\n /**\n * Clear all scrolling intervals.\n */\n public stopScrolling() {\n clearInterval(this.scrollDownTimeout);\n return clearInterval(this.scrollUpTimeout);\n }\n\n /**\n * Scroll iframe down by 40 pixels.\n */\n private scrollFrameDown() {\n clearInterval(this.scrollDownTimeout);\n return this.scrollDownTimeout = setInterval(() => {\n return this.setScrollTop(this.builderDocument.getScrollTop() + 40);\n }, 40);\n }\n\n /**\n * Scroll iframe up by 40 pixels.\n */\n private scrollFrameUp() {\n clearInterval(this.scrollUpTimeout);\n return this.scrollUpTimeout = setInterval(() => {\n return this.setScrollTop(this.builderDocument.getScrollTop() - 40);\n }, 40);\n }\n\n /**\n * Set given scroll on iframe document element.\n */\n private setScrollTop(newScrollTop: number) {\n newScrollTop = Math.max(0, newScrollTop);\n this.builderDocument.document.documentElement.scrollTop = newScrollTop;\n }\n}\n","import { AfterContentInit, NgZone, Renderer2, Directive } from '@angular/core';\nimport {LivePreview} from '../../live-preview.service';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\nimport {Elements} from '../../elements/elements.service';\nimport {LivePreviewScroller} from './live-preview-scroller';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {SelectedElement} from '../selected-element.service';\nimport {DragVisualHelper} from './drag-visual-helper/drag-visual-helper.service';\nimport {DomHelpers} from '../../../shared/dom-helpers.service';\nimport {cursorInTopHalfOfNode} from '../../utils/cursor-in-top-half-of-node';\n\n@Directive()\nexport abstract class BaseDragAndDrop implements AfterContentInit {\n\n protected dragOverlay: HTMLElement;\n\n /**\n * Helper service for scrolling preview during drag and drop.\n */\n protected scroller: LivePreviewScroller;\n\n /**\n * Placeholder helper for element that is being dragged.\n */\n protected dropPlaceholder: HTMLElement;\n\n /**\n * Element that is being dragged currently.\n */\n protected dragEl: {element: any, node: HTMLElement};\n\n protected bodyBeforeDrag: HTMLBodyElement;\n\n protected abstract livePreview: LivePreview;\n protected abstract builderDocument: BuilderDocument;\n protected abstract selectedElement: SelectedElement;\n protected abstract zone: NgZone;\n protected abstract renderer: Renderer2;\n protected abstract undoManager: UndoManager;\n protected abstract elements: Elements;\n protected abstract dragHelper: DragVisualHelper;\n\n ngAfterContentInit() {\n this.dragOverlay = document.querySelector('.drag-overlay') as HTMLElement;\n const container = document.querySelector('live-preview') as HTMLElement;\n this.scroller = new LivePreviewScroller(this.builderDocument, container);\n\n this.zone.runOutsideAngular(() => {\n this.initHammer(this.getDragHandles());\n });\n }\n\n protected sortColumns?(node: HTMLElement, e: HammerInput);\n\n protected abstract setDragElement(e: HammerInput);\n\n protected abstract getDragHandles(): NodeListOf<Element>;\n\n protected initHammer(elements: NodeListOf<Element>) {\n for (let i = elements.length - 1; i >= 0; i--) {\n const hammer = new Hammer.Manager(elements[i]);\n const pan = new Hammer.Pan({direction: Hammer.DIRECTION_ALL, threshold: 0});\n hammer.add([pan]);\n\n hammer.on('panstart', e => this.handleDragStart(e));\n hammer.on('panmove', e => this.handleDrag(e));\n hammer.on('panend', e => this.handleDragEnd(e));\n }\n }\n\n protected handleDragStart(e: HammerInput) {\n if ( ! this.builderDocument.getBody()) return;\n this.bodyBeforeDrag = this.builderDocument.getBody().cloneNode(true) as HTMLBodyElement;\n\n this.builderDocument.getBody().classList.add('dragging');\n this.livePreview.dragging = true;\n this.livePreview.contextBoxes.hideBoxes();\n\n this.setDragElement(e);\n\n this.dragOverlay.style.display = 'block';\n\n this.dragHelper.show(this.dragEl.element);\n\n if (this.dragEl.element.name !== 'column') {\n this.renderer.setAttribute(this.dragEl.node, 'data-display', this.dragEl.node.style.display);\n this.createDropPlaceholder();\n this.renderer.setStyle(this.dragEl.node, 'display', 'none');\n }\n }\n\n protected handleDrag(e: HammerInput) {\n const x = e.center.x;\n const y = e.center.y;\n\n this.repositionDragMirror(y, x);\n\n // if we're not dragging over live preview yet, bail\n if (x <= 380) return;\n\n const under = this.builderDocument.elementFromPoint(x - 380, y) as HTMLElement;\n\n this.scroller.scroll(y);\n\n const classes = typeof this.dragEl.node.className === 'string' ? this.dragEl.node.className : '';\n\n if (classes && classes.match('col-')) {\n return this.sortColumns && this.sortColumns(under, e);\n } else {\n return this.repositionDropPlaceholder(under, x - 380, y);\n }\n }\n\n protected handleDragEnd(e: HammerInput) {\n this.scroller.stopScrolling();\n this.livePreview.dragging = false;\n this.builderDocument.getBody().classList.remove('dragging');\n\n this.dragHelper.hide();\n this.renderer.setStyle(this.dragOverlay, 'display', 'none');\n\n if (this.dragEl && this.dragEl.element.name !== 'column') {\n this.dropPlaceholder &&\n this.dropPlaceholder.parentElement &&\n this.dropPlaceholder.parentElement.replaceChild(this.dragEl.node, this.dropPlaceholder);\n this.showDragEl();\n this.dropPlaceholder.remove();\n this.dropPlaceholder = null;\n }\n\n // if node was not dragged into preview and appended to dom, bail\n if (!this.dragEl && !this.builderDocument.getBody().contains(this.dragEl.node)) return;\n\n this.selectedElement.selectNode(this.dragEl.node);\n this.undoManager.wrapDomChanges(this.builderDocument.getBody(), null, {before: this.bodyBeforeDrag});\n this.builderDocument.contentChanged.next('builder');\n }\n\n private showDragEl() {\n this.renderer.setStyle(this.dragEl.node, 'display', this.dragEl.node.getAttribute('data-display'));\n this.renderer.removeAttribute(this.dragEl.node, 'data-display');\n }\n\n /**\n * Append element user is currently dragging to the element users cursor is under.\n */\n protected repositionDropPlaceholder(node: HTMLElement, x: number, y: number) {\n if (!node || !this.dropPlaceholder) return;\n\n // check if we're not trying to drop a node inside its child or itself\n if (this.dragEl.node === node || this.dragEl.node.contains(node)) return;\n\n for (let i = 0, len = node.children.length; i < len; i++) {\n const child = node.children[i] as HTMLElement;\n if ( ! child.classList.contains('drop-placeholder')) {\n // If cursor is above any of the specified node's children\n // and we can insert element as specified node's child,\n // insert element before child that cursor is currently above and bail\n if (DomHelpers.coordinatesAboveNode(child, x, y) && this.elements.canInsert(node, this.dragEl.element)) {\n return node.insertBefore(this.dropPlaceholder, child);\n }\n }\n }\n\n if (this.elements.canInsert(node, this.dragEl.element)) {\n if (cursorInTopHalfOfNode(node, y)) {\n node.prepend(this.dropPlaceholder);\n } else {\n node.append(this.dropPlaceholder);\n }\n }\n }\n\n /**\n * Position drag mirror at specified coordinates.\n */\n protected repositionDragMirror(y: any, x: number) {\n this.dragHelper.reposition(y, x);\n }\n\n protected createDropPlaceholder() {\n this.dropPlaceholder = this.builderDocument.createElement('div');\n this.dropPlaceholder.classList.add('drop-placeholder');\n this.renderer.setStyle(this.dropPlaceholder, 'display', this.dragEl.node.getAttribute('data-display'));\n this.renderer.setStyle(this.dropPlaceholder, 'pointer-events', 'none');\n this.renderer.setStyle(this.dropPlaceholder, 'height', '50px');\n this.renderer.setStyle(\n this.dropPlaceholder,\n 'background',\n 'url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"6\"><rect width=\"6\" height=\"6\" fill=\"transparent\"/><path d=\"M0 6L6 0ZM7 5L5 7ZM-1 1L1 -1Z\" stroke=\"rgba(0, 0, 0, 0.2)\" stroke-width=\"2\"/></svg>\\')'\n );\n }\n}\n","export function cursorInTopHalfOfNode(node: HTMLElement, y: number) {\r\n const rect = node.getBoundingClientRect();\r\n const offset = rect.top;\r\n const height = rect.height;\r\n const loc = Math.abs(offset - y);\r\n return loc < height / 2;\r\n}\r\n","import {ContentChildren, Directive, ElementRef, NgZone, QueryList, Renderer2} from '@angular/core';\nimport {LivePreview} from '../../live-preview.service';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\nimport {Elements} from '../../elements/elements.service';\nimport {BaseDragAndDrop} from './base-drag-and-drop';\nimport {SelectedElement} from '../selected-element.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {ActiveProject} from '../../projects/active-project';\nimport {DragVisualHelper} from './drag-visual-helper/drag-visual-helper.service';\nimport {DomHelpers} from '../../../shared/dom-helpers.service';\n\n@Directive({\n selector: '[dragElements]'\n})\nexport class DragElementsDirective extends BaseDragAndDrop {\n @ContentChildren('dragElement') dragElements: QueryList<ElementRef>;\n\n constructor(\n protected livePreview: LivePreview,\n protected undoManager: UndoManager,\n protected elements: Elements,\n protected zone: NgZone,\n protected selectedElement: SelectedElement,\n protected builderDocument: BuilderDocument,\n protected activeProject: ActiveProject,\n protected renderer: Renderer2,\n protected dragHelper: DragVisualHelper,\n protected el: ElementRef<HTMLElement>,\n ) {\n super();\n }\n\n protected getDragHandles() {\n return this.el.nativeElement.querySelectorAll('.element-drag-handle');\n }\n\n protected setDragElement(e: HammerInput) {\n const el = this.elements.findByName((e.target.closest('.element') as HTMLElement).dataset.name);\n const node = document.createRange().createContextualFragment(el.html).firstChild as HTMLElement;\n this.dragEl = {node, element: el};\n }\n\n protected handleDragEnd(e: HammerInput) {\n super.handleDragEnd(e);\n\n if (this.dragEl.element.css) {\n const params = {thumbnail: false, params: {custom_element_css: this.dragEl.element.css}};\n this.activeProject.save(params).subscribe(() => {\n this.builderDocument.reloadCustomElementsCss();\n });\n }\n }\n}\n","<ng-container *ngIf=\"elements.loaded$ | async\">\n <section class=\"categories\" dragElements>\n <mat-accordion>\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngFor=\"let category of categories; index as index;\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>{{category}}</mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"elements-grid\">\n <div class=\"element element-drag-handle\" *ngFor=\"let element of getElementsForCategory(category)\" [attr.data-name]=\"element.name\">\n <mat-icon [svgIcon]=\"element.icon\"></mat-icon>\n <div class=\"name\" trans>{{element.name}}</div>\n </div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {Elements} from '../../elements/elements.service';\nimport { MatAccordion } from '@angular/material/expansion';\n\n@Component({\n selector: 'elements-panel',\n templateUrl: './elements-panel.component.html',\n styleUrls: ['./elements-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElementsPanelComponent {\n @ViewChild(MatAccordion, {static: true}) matAccordion: MatAccordion;\n\n public categories = ['components', 'layout', 'media', 'typography', 'buttons', 'forms'];\n\n constructor(public elements: Elements) {}\n\n public getElementsForCategory(name: string) {\n return this.elements.getAll().filter(el => el.category === name);\n }\n}\n","<div class=\"visibility-controls\">\n <button mat-icon-button (click)=\"changeVisibility('xs')\" [class.active]=\"hiddenOn.indexOf('xs') > -1\" [matTooltip]=\"'Hide on mobile' | trans\">\n <mat-icon svgIcon=\"phone-android\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"changeVisibility('sm')\" [class.active]=\"hiddenOn.indexOf('sm') > -1\" [matTooltip]=\"'Hide on tablet' | trans\">\n <mat-icon svgIcon=\"tablet-android\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"changeVisibility('md')\" [class.active]=\"hiddenOn.indexOf('md') > -1\" [matTooltip]=\"'Hide on laptop' | trans\">\n <mat-icon svgIcon=\"laptop-chromebook\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"changeVisibility('lg')\" [class.active]=\"hiddenOn.indexOf('lg') > -1\" [matTooltip]=\"'Hide on desktop' | trans\">\n <mat-icon svgIcon=\"desktop-windows\"></mat-icon>\n </button>\n</div>\n\n<div class=\"inputs\">\n <ng-container *ngFor=\"let key of getElAttributeKeys(customAttributes)\">\n <div class=\"input-container\">\n <label [for]=\"key\">{{key}}</label>\n\n <select [name]=\"key\" [id]=\"key\" *ngIf=\"!!customAttributes[key].list\" [ngModel]=\"customAttributes[key].value\" (ngModelChange)=\"callElementOnChange(key, $event)\">\n <option *ngFor=\"let listItem of customAttributes[key].list\" [ngValue]=\"listItem.value\">{{listItem.name}}</option>\n </select>\n\n <input [name]=\"key\" [id]=\"key\" *ngIf=\"customAttributes[key].text\" [ngModel]=\"customAttributes[key].value\" (ngModelChange)=\"callElementOnChange(key, $event)\">\n\n <textarea [name]=\"key\" [id]=\"key\" *ngIf=\"customAttributes[key].textarea\" [ngModel]=\"customAttributes[key].value\" (ngModelChange)=\"callElementOnChange(key, $event)\"></textarea>\n </div>\n </ng-container>\n\n <div class=\"input-container\">\n <label for=\"position\" trans>Position</label>\n <select name=\"position\" id=\"position\" [(ngModel)]=\"position\" (ngModelChange)=\"changeElPosition($event)\">\n <option value=\"none\" trans>None</option>\n <option value=\"pull-left\" trans>Left</option>\n <option value=\"pull-right\" trans>Right</option>\n <option value=\"center-block\" trans>Center</option>\n </select>\n </div>\n\n <div class=\"input-container\">\n <label for=\"id\" trans>ID</label>\n <input type=\"text\" name=\"id\" id=\"id\" [(ngModel)]=\"id\" (ngModelChange)=\"changeElId($event)\">\n </div>\n\n <mat-chip-list #chipList class=\"input-container\" [selectable]=\"false\">\n <label for=\"class\" trans>Class</label>\n <input placeholder=\"+New Class...\"\n trans-placeholder\n id=\"class\"\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addClass([$event.value]); $event.input.value = ''\"/>\n <ng-container *ngFor=\"let className of classes\">\n <mat-chip *ngIf=\"!shouldClassBeHidden(className)\" (removed)=\"removeClass([className])\" [removable]=\"true\">\n {{className}}\n <mat-icon svgIcon=\"cancel\" matChipRemove></mat-icon>\n </mat-chip>\n </ng-container>\n </mat-chip-list>\n</div>\n","import {Component, OnInit, Renderer2, ViewEncapsulation} from '@angular/core';\nimport {LivePreview} from '../../../live-preview.service';\nimport {UndoManager} from '../../../undo-manager/undo-manager.service';\nimport {ActiveElement} from '../../../live-preview/active-element';\nimport {SelectedElement} from '../../../live-preview/selected-element.service';\n\n@Component({\n selector: 'attributes-panel',\n templateUrl: './attributes-panel.component.html',\n styleUrls: ['./attributes-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AttributesPanelComponent implements OnInit {\n\n public customAttributes: object = {};\n\n /**\n * Selected element \"float\" position.\n */\n public position = 'none';\n\n /**\n * Selected element classes.\n */\n public classes: string[] = [];\n\n public hiddenOn: string[] = [];\n public canHideOn = {\n xs: 'd-sm-block',\n sm: 'd-md-block',\n md: 'd-lg-block',\n lg: 'd-xl-block',\n };\n\n /**\n * Selected element ID.\n */\n public id: string;\n\n constructor(\n private livePreview: LivePreview,\n private undoManager: UndoManager,\n private selectedElement: SelectedElement,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.selectedElement.changed.subscribe(() => {\n this.onElementSelected();\n });\n }\n\n private onElementSelected() {\n this.customAttributes = {};\n this.classes = [];\n this.hiddenOn = [];\n\n this.callElementOnAssign(this.selectedElement);\n\n if (!this.selectedElement.node || !this.selectedElement.node.classList) return;\n\n // set element classes\n for (let i = 0; i < this.selectedElement.node.classList.length; i++) {\n const className = this.selectedElement.node.classList[i],\n hiddenClasses = this.selectedElement.element.hiddenClasses;\n\n if (hiddenClasses && hiddenClasses.indexOf(className) > -1) continue;\n\n this.classes.push(className);\n }\n\n // set element id\n this.id = this.selectedElement.node.id;\n\n // set element position\n ['pull-left', 'pull-right', 'center-block'].forEach(float => {\n const className = this.selectedElement.node.className;\n if (typeof className === 'string' && className.indexOf(float) > -1) {\n this.position = float;\n } else {\n this.position = 'none';\n }\n });\n\n // set 'bootstrap' visibility\n if (this.selectedElement.node.classList.contains('d-none')) {\n Object.entries(this.canHideOn).forEach(([breakpoint, className]) => {\n if ( ! this.selectedElement.node.classList.value.includes(className)) {\n this.hiddenOn.push(breakpoint);\n }\n });\n }\n }\n\n /**\n * Add given float class to active html node\n * and remove all other ones present on it.\n */\n public changeElPosition(position: string) {\n this.removeClass(['pull-left', 'pull-right', 'center-block']);\n\n if (position && position !== 'none') {\n this.addClass([position]);\n }\n\n this.livePreview.repositionBox('selected');\n }\n\n /**\n * Change selected element ID to specifie one.\n */\n public changeElId(id: string) {\n this.selectedElement.node.id = id;\n }\n\n public changeVisibility(size: string) {\n const index = this.hiddenOn.indexOf(size);\n if (index > -1) {\n this.hiddenOn.splice(index, 1);\n } else {\n this.hiddenOn.push(size);\n }\n\n // add \"display: none\" style if we are hiding element on at least one breakpoint\n if (this.hiddenOn.length) {\n this.selectedElement.node.classList.add('d-none');\n } else {\n this.selectedElement.node.classList.remove('d-none');\n }\n\n // add classname to show element on every breakpoint that is not hidden\n Object.entries(this.canHideOn).forEach(([breakpoint, className]) => {\n if ( ! this.hiddenOn.length || this.hiddenOn.includes(breakpoint)) {\n this.selectedElement.node.classList.remove(className);\n } else {\n this.selectedElement.node.classList.add(className);\n }\n });\n\n this.livePreview.repositionBox('selected');\n }\n\n /**\n * Remove specified classes from active html node and from Inspector styles object.\n */\n public removeClass(classes: string[], addUndo = true) {\n classes.forEach(className => {\n const i = this.classes.indexOf(className);\n if (i > -1) {\n this.classes.splice(i, 1);\n }\n this.selectedElement.node.classList.remove(className);\n });\n\n if (addUndo) {\n this.undoManager.add('generic', {\n undo: () => {this.addClass(classes, false); },\n redo: () => {this.removeClass(classes, false); },\n });\n }\n\n this.livePreview.repositionBox('selected');\n }\n\n /**\n * Add given class to active html node and to inspector styles object.\n */\n public addClass(classes: string[], addUndo = true) {\n if (classes.length === 1 && ! classes[0].length) return;\n\n classes.forEach(className => {\n if (className && className.length && this.classes.indexOf(className) === -1) {\n this.classes.push(className);\n }\n\n this.selectedElement.node.classList.add(className);\n });\n\n if (addUndo) {\n this.undoManager.add('generic', {\n undo: () => {this.removeClass(classes, false); },\n redo: () => {this.addClass(classes, false); },\n });\n }\n\n this.livePreview.repositionBox('selected');\n }\n\n public callElementOnChange(key: string, newValue: string) {\n const oldValue = this.customAttributes[key].value;\n this.customAttributes[key].value = newValue;\n\n this.makeUndoCommand(this.customAttributes[key].onChange, oldValue, newValue);\n\n if (this.customAttributes[key].onChange) {\n this.customAttributes[key].onChange(this.livePreview, newValue);\n } else {\n this.defaultOnChange(this.customAttributes[key]);\n }\n\n this.livePreview.repositionBox('selected');\n }\n\n /**\n * Check if specified class should be hidden in inspector.\n */\n public shouldClassBeHidden(className: string): boolean {\n if (className.indexOf('d-') > -1) return true;\n if (className.indexOf('col-') > -1) return true;\n return false;\n }\n\n /**\n * Create an undo command for custom elements attributes\n */\n private makeUndoCommand(func: Function, oldVal: string, newVal: string) {\n this.undoManager.add('generic', {\n undo: () => {\n func(this.livePreview, oldVal);\n },\n redo: () => {\n func(this.livePreview, newVal);\n }\n });\n }\n\n /**\n * Fire specified element 'onAssign' callback.\n */\n private callElementOnAssign(selected: ActiveElement) {\n for (const attr in selected.element.attributes) {\n this.customAttributes[attr] = Object.assign({}, selected.element.attributes[attr]);\n\n if (this.customAttributes[attr].onAssign) {\n this.customAttributes[attr].onAssign(this.livePreview);\n } else {\n this.defaultOnAssign(this.customAttributes[attr]);\n }\n }\n }\n\n public getElAttributeKeys(el: object) {\n return Object.keys(el);\n }\n\n /**\n * Default on assign action for custom options dropdown.\n */\n private defaultOnAssign(attr: {list: any[], value: any}) {\n let first = null;\n\n for (let i = attr.list.length - 1; i >= 0; i--) {\n first = attr.list[i];\n\n if (this.selectedElement.node.className.indexOf(attr.list[i].value) > -1) {\n return attr.value = attr.list[i];\n }\n }\n\n // if we can't find any classes just set first\n // value on the select list as current value\n return attr.value = first;\n }\n\n\n /**\n * Default on change action for custom options dropdown.\n */\n private defaultOnChange(attr: {list: any[], value: any}) {\n for (let i = attr.list.length - 1; i >= 0; i--) {\n this.renderer.removeClass(this.selectedElement.node, attr.list[i].value);\n }\n\n this.renderer.addClass(this.selectedElement.node, attr.value);\n\n setTimeout(() => this.livePreview.repositionBox('selected'), 300);\n }\n}\n","export const baseGradients = [\r\n 'linear-gradient(to right, #959595 0%, #0D0D0D 46%, #010101 50%, #0A0A0A 53%, #4E4E4E 76%, #383838 87%, #1b1b1b 100%)',\r\n 'linear-gradient(to right, #FF0000 0%, #FFFF00 50%, #ff0000 100%)',\r\n 'linear-gradient(to right, #f6f8f9 0%, #E5EBEE 50%, #D7DEE3 51%, #f5f7f9 100%)',\r\n 'linear-gradient(to right, #008080 0%, #FFFFFF 25%, #05C1FF 50%, #FFFFFF 75%, #005757 100%)',\r\n 'linear-gradient(to right, #ff0000 0%, #000000 100%)',\r\n 'linear-gradient(to bottom, #93cede 0%,#75bdd1 41%, #49a5bf 100%)',\r\n 'linear-gradient(to right, #f8ffe8 0%, #E3F5AB 33%, #b7df2d 100%)',\r\n 'linear-gradient(to right, #b8e1fc 0%, #A9D2F3 10%, #90BAE4 25%, #90BCEA 37%, #90BFF0 50%, #6BA8E5 51%, #A2DAF5 83%, #bdf3fd 100%)',\r\n 'linear-gradient(to right, #f0b7a1 0%, #8C3310 50%, #752201 51%, #bf6e4e 100%)',\r\n 'linear-gradient(to right, #ff0000 0%, #FFFF00 25%, #05C1FF 50%, #FFFF00 75%, #ff0000 100%)',\r\n 'linear-gradient(to right, #ffb76b 0%, #FFA73D 50%, #FF7C00 51%, #ff7f04 100%)',\r\n 'linear-gradient(to right, #ffff00 0%, #05C1FF 50%, #ffff00 100%)',\r\n 'linear-gradient(to bottom, #febf01 0%,#febf01 100%)',\r\n 'linear-gradient(to bottom, #fcfff4 0%,#e9e9ce 100%)',\r\n 'linear-gradient(to bottom, #49c0f0 0%,#2cafe3 100%)',\r\n 'linear-gradient(to bottom, #cc0000 0%,#cc0000 100%)',\r\n 'linear-gradient(to bottom, #73880a 0%,#73880a 100%)',\r\n 'linear-gradient(to bottom, #627d4d 0%,#1f3b08 100%)',\r\n 'linear-gradient(to bottom, #b8c6df 0%,#6d88b7 100%)',\r\n 'linear-gradient(to bottom, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%)',\r\n 'linear-gradient(to bottom, #b8c6df 0%,#6d88b7 100%)',\r\n 'linear-gradient(to bottom, #ff3019 0%,#cf0404 100%)',\r\n 'linear-gradient(to bottom, #e570e7 0%,#c85ec7 47%,#a849a3 100%)',\r\n 'linear-gradient(to bottom, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%)',\r\n];","<div class=\"header\">\n <div class=\"name\" trans>Gradient Background</div>\n <button class=\"close-button no-style\" (click)=\"overlayRef.close()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<div class=\"previews\">\n <button class=\"preview no-style\" *ngFor=\"let gradient of gradients\" [style.background]=\"gradient\" (click)=\"emitSelectedEvent(gradient)\"></button>\n</div>\n","import {Component, Inject, Optional, ViewEncapsulation} from '@angular/core';\nimport {baseGradients} from '../../../../gradient-values';\nimport {OverlayPanelRef} from '../../../../../../common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Component({\n selector: 'gradient-background-panel',\n templateUrl: './gradient-background-panel.component.html',\n styleUrls: ['./gradient-background-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class GradientBackgroundPanelComponent {\n public gradients = baseGradients.slice();\n\n constructor(\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) { }\n\n public emitSelectedEvent(gradient: string) {\n this.overlayRef.emitValue(gradient);\n }\n}\n","<div class=\"header\">\r\n <div class=\"name\" trans>Image Background</div>\r\n <button class=\"close-button no-style\" (click)=\"overlayRef.close()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<button type=\"button\" class=\"upload-button\" mat-raised-button color=\"accent\" (click)=\"uploadImage()\" trans>Upload Image</button>\r\n\r\n<div class=\"separator\" trans>Textures</div>\r\n\r\n<div class=\"textures\">\r\n <button class=\"no-style texture\" *ngFor=\"let texture of textures; let index = index;\" (click)=\"emitSelectedEvent(getTextureUrl(index))\">\r\n <img [src]=\"getTextureUrl(index)\">\r\n </button>\r\n</div>\r\n\r\n<div class=\"separator\" trans>Image Properties</div>\r\n\r\n<div class=\"image-properties\">\r\n <div class=\"repeat property-panel\">\r\n <div class=\"title\" trans>Repeat</div>\r\n <mat-radio-group class=\"controls\" [(ngModel)]=\"backgroundRepeat\" (ngModelChange)=\"applyStyle('backgroundRepeat', backgroundRepeat)\">\r\n <mat-radio-button value=\"no-repeat\" trans>None</mat-radio-button>\r\n <mat-radio-button value=\"repeat-x\" trans>Horizontal</mat-radio-button>\r\n <mat-radio-button value=\"repeat-y\" trans>Vertical</mat-radio-button>\r\n <mat-radio-button value=\"repeat\" trans>All</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"position property-panel\">\r\n <div class=\"title\" trans>Position</div>\r\n <div class=\"controls\">\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'top left'\" (click)=\"applyStyle('backgroundPosition', 'top left')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'top center'\" (click)=\"applyStyle('backgroundPosition', 'top center')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'top right'\" (click)=\"applyStyle('backgroundPosition', 'top right')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'center center'\" (click)=\"applyStyle('backgroundPosition', 'center center')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'center right'\" (click)=\"applyStyle('backgroundPosition', 'center right')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'center left'\" (click)=\"applyStyle('backgroundPosition', 'center left')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'bottom left'\" (click)=\"applyStyle('backgroundPosition', 'bottom left')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'bottom center'\" (click)=\"applyStyle('backgroundPosition', 'bottom center')\"></button>\r\n <button class=\"no-style box\" [class.active]=\"backgroundPosition === 'bottom right'\" (click)=\"applyStyle('backgroundPosition', 'bottom right')\"></button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import {\n Component,\n EventEmitter,\n Inject,\n OnInit, Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {LivePreview} from '../../../../live-preview.service';\nimport {ActiveProject} from '../../../../projects/active-project';\nimport {BuilderDocumentActions} from '../../../../builder-document-actions.service';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {UploadInputTypes} from '@common/uploads/upload-input-config';\nimport {openUploadWindow} from '@common/uploads/utils/open-upload-window';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {OverlayPanelRef} from '../../../../../../common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Component({\n selector: 'image-background-panel',\n templateUrl: './image-background-panel.component.html',\n styleUrls: ['./image-background-panel.component.scss'],\n providers: [UploadQueueService],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ImageBackgroundPanelComponent implements OnInit {\n\n /**\n * List for rendering textures panel.\n */\n public textures = new Array(28);\n\n /**\n * Model for \"repeat\" radio group.\n */\n public backgroundRepeat = 'no-repeat';\n\n /**\n * Model for \"position\" buttons.\n */\n public backgroundPosition = 'top left';\n\n /**\n * ImageBackgroundPanelComponent Constructor.\n */\n constructor(\n private livePreview: LivePreview,\n private modal: Modal,\n private settings: Settings,\n private activeProject: ActiveProject,\n private builderActions: BuilderDocumentActions,\n private uploadQueue: UploadQueueService,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) {}\n\n public emitSelectedEvent(url: string) {\n this.overlayRef.emitValue(url);\n }\n\n ngOnInit() {\n this.backgroundRepeat = this.livePreview.selected.getStyle('backgroundRepeat');\n this.backgroundPosition = this.livePreview.selected.getStyle('backgroundPosition');\n }\n\n /**\n * Get absolute url for specified texture image.\n */\n public getTextureUrl(index: number): string {\n return this.settings.getAssetUrl() + 'images/textures/' + index + '.png';\n }\n\n /**\n * Apply specified style to selected element.\n */\n public applyStyle(name: string, value: string) {\n this[name] = value;\n this.builderActions.applyStyle(this.livePreview.selected.node, name, value);\n }\n\n public uploadImage() {\n const config = {uri: 'uploads/images', httpParams: {diskPrefix: this.activeProject.getBaseUrl(true) + 'images'}};\n openUploadWindow({types: [UploadInputTypes.image]}).then(files => {\n this.uploadQueue.start(files, config).subscribe(response => {\n this.emitSelectedEvent(this.activeProject.getImageUrl(response.fileEntry));\n });\n });\n }\n}\n","import {Component, ElementRef, OnInit, Renderer2, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {GradientBackgroundPanelComponent} from './gradient-background-panel/gradient-background-panel.component';\nimport {InspectorFloatingPanel} from '../../inspector-floating-panel.service';\nimport {ImageBackgroundPanelComponent} from './image-background-panel/image-background-panel.component';\nimport {SelectedElement} from '../../../live-preview/selected-element.service';\nimport {BuilderDocumentActions} from '../../../builder-document-actions.service';\nimport {UndoManager} from '../../../undo-manager/undo-manager.service';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\n\n@Component({\n selector: 'background-panel',\n templateUrl: './background-panel.component.html',\n styleUrls: ['./background-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BackgroundPanelComponent implements OnInit {\n @ViewChild('gradientButton', {static: true}) gradientButton: ElementRef;\n @ViewChild('backgroundButton', {static: true}) backgroundButton: ElementRef;\n\n public styles = {\n backgroundImage: '',\n backgroundColor: '',\n };\n\n constructor(\n private selectedElement: SelectedElement,\n private panel: InspectorFloatingPanel,\n private renderer: Renderer2,\n private builderActions: BuilderDocumentActions,\n private overlayPanel: OverlayPanel,\n private undoManager: UndoManager,\n ) {}\n\n ngOnInit() {\n this.selectedElement.changed.subscribe(() => {\n this.styles.backgroundImage = this.selectedElement.getStyle('backgroundImage');\n this.styles.backgroundColor = this.selectedElement.getStyle('backgroundColor');\n this.setBackgroundButtonColor();\n });\n }\n\n public openGradientPanel() {\n this.panel.open(GradientBackgroundPanelComponent, this.gradientButton).valueChanged().subscribe(gradient => {\n this.setBackgroundButtonColor();\n this.applyBackgroundStyle('backgroundImage', gradient);\n });\n }\n\n public openColorpickerPanel() {\n const currentColor = this.styles.backgroundColor;\n this.overlayPanel.open(\n ColorpickerPanelComponent,\n {position: RIGHT_POSITION, origin: this.gradientButton, data: {color: currentColor}}\n ).valueChanged().subscribe(color => {\n this.setBackgroundButtonColor();\n this.applyBackgroundStyle('backgroundColor', color, false);\n });\n }\n\n public openBackgroundPanel() {\n this.panel.open(ImageBackgroundPanelComponent, this.gradientButton).valueChanged().subscribe(url => {\n this.applyBackgroundStyle('backgroundImage', 'url(' + url + ')');\n });\n }\n\n private setBackgroundButtonColor() {\n if (this.styles.backgroundColor === 'rgba(0, 0, 0, 0)') return;\n this.renderer.setStyle(this.backgroundButton.nativeElement, 'backgroundColor', this.styles.backgroundColor);\n }\n\n public applyBackgroundStyle(type: string, value, addUndoCommand = true) {\n this.styles[type] = value;\n this.builderActions.applyStyle(this.selectedElement.node, type, this.styles[type], addUndoCommand);\n }\n\n public removeBackground() {\n this.styles.backgroundColor = '';\n this.styles.backgroundImage = '';\n\n this.undoManager.wrapDomChanges(this.selectedElement.node, () => {\n this.builderActions.applyStyle(this.selectedElement.node, 'backgroundImage', '', false);\n this.builderActions.applyStyle(this.selectedElement.node, 'backgroundColor', '', false);\n });\n }\n}\n","<div class=\"buttons\">\n <button class=\"no-style\" type=\"button\" (click)=\"openColorpickerPanel()\" #backgroundButton>\n <mat-icon svgIcon=\"format-color-fill\"></mat-icon>\n <span class=\"name\" trans>Color</span>\n </button>\n\n <button class=\"no-style image-button\" type=\"button\" (click)=\"openBackgroundPanel()\">\n <mat-icon svgIcon=\"image\"></mat-icon>\n <span class=\"name\" trans>Image</span>\n </button>\n\n <button class=\"no-style\" type=\"button\" (click)=\"openGradientPanel()\" #gradientButton>\n <mat-icon svgIcon=\"gradient\"></mat-icon>\n <span class=\"name\" trans>Gradient</span>\n </button>\n</div>\n\n<div class=\"remove-bg-container\">\n <button mat-button color=\"warn\" (click)=\"removeBackground()\" class=\"remove-bg-btn\" trans>Remove Background</button>\n</div>","\n<div class=\"sliders\">\n <div class=\"slider-container\" *ngFor=\"let slider of sliders\">\n <ng-container *ngIf=\"slider !== 'spread' || props.type === 'boxShadow'\">\n <div class=\"title\">{{slider}}</div>\n <div class=\"inner-container\">\n <mat-slider color=\"accent\" min=\"0\" [max]=\"slider == 'angle' ? 360 : 20\" step=\"1\" (input)=\"applyStyle(slider, $event.value, false)\" [(ngModel)]=\"props[slider]\"></mat-slider>\n <div class=\"input-container\">\n <input type=\"number\" [(ngModel)]=\"props[slider]\" min=\"1\" [max]=\"slider == 'angle' ? 360 : 20\">\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div class=\"types\">\n <button class=\"no-style color-button\" (click)=\"openColorpickerPanel()\" #colorButton trans>Color</button>\n\n <div class=\"input-container box-shadow\">\n <select name=\"shadow-type\" id=\"shadow-type\" [(ngModel)]=\"props.type\" (ngModelChange)=\"applyStyle('type', props.type)\">\n <option value=\"boxShadow\" trans>Box</option>\n <option value=\"textShadow\" trans>Text</option>\n </select>\n </div>\n\n <div class=\"input-container text-shadow\">\n <select name=\"shadow-inset\" id=\"shadow-inset\" [(ngModel)]=\"props.inset\" (ngModelChange)=\"applyStyle('inset', props.inset)\">\n <option [ngValue]=\"false\" trans>Outter</option>\n <option [ngValue]=\"true\" trans>Inner</option>\n </select>\n </div>\n</div>","import {Component, ElementRef, OnInit, Renderer2, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SelectedElement} from '../../../live-preview/selected-element.service';\nimport {BuilderDocumentActions} from '../../../builder-document-actions.service';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\n\n@Component({\n selector: 'shadows-panel',\n templateUrl: './shadows-panel.component.html',\n styleUrls: ['./shadows-panel.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ShadowsPanelComponent implements OnInit {\n @ViewChild('colorButton', {static: true}) colorButton: ElementRef;\n\n public props;\n\n public sliders = ['angle', 'distance', 'blur', 'spread'];\n\n constructor(\n private selectedElement: SelectedElement,\n private renderer: Renderer2,\n private overlay: OverlayPanel,\n private builderActions: BuilderDocumentActions,\n ) {\n this.resetProps();\n }\n\n ngOnInit() {\n this.selectedElement.changed.subscribe(() => {\n if (this.props.type === 'boxShadow') {\n this.stringToProps(this.selectedElement.getStyle('boxShadow'));\n } else {\n this.stringToProps(this.selectedElement.getStyle('textShadow'));\n }\n\n this.setColorButtonColor();\n });\n }\n\n public applyStyle(name: string, value: string, addUndoCommand = true) {\n this.props[name] = value;\n this.builderActions.applyStyle(this.selectedElement.node, this.props.type, this.propsToString(this.props), addUndoCommand);\n this.clearShadow(this.props.type === 'boxShadow' ? 'textShadow' : 'boxShadow');\n }\n\n public clearShadow(type: string) {\n this.builderActions.applyStyle(this.selectedElement.node, type, 'none', false);\n }\n\n public openColorpickerPanel() {\n this.overlay.open(\n ColorpickerPanelComponent,\n {origin: this.colorButton, position: RIGHT_POSITION, data: {color: this.props.color}}\n ).valueChanged().subscribe(color => {\n this.setColorButtonColor();\n this.applyStyle('color', color);\n });\n }\n\n private setColorButtonColor() {\n if (this.props.color === 'rgba(0, 0, 0, 0)') return;\n this.renderer.setStyle(this.colorButton.nativeElement, 'backgroundColor', this.props.color);\n }\n\n private propsToString(props: any) {\n const blur = Math.round(props.blur),\n spread = Math.round(props.spread),\n angle = parseInt(props.angle) * ((Math.PI) / 180),\n x = Math.round(props.distance * Math.cos(angle)),\n y = Math.round(props.distance * Math.sin(angle)),\n inset = props.inset && props.type === 'boxShadow' ? 'inset ' : '';\n let css = inset + x + 'px ' + y + 'px ' + blur + 'px ';\n\n // text shadows have no spread property\n if (props.type === 'boxShadow') {\n css += spread + 'px ';\n }\n\n return css + props.color;\n }\n\n private stringToProps(string: string) {\n if ( ! string || string === 'none') {\n return this.resetProps();\n }\n\n const array = string.replace(/, /g, ',').split(' ').map(val => {\n return val.indexOf('px') > -1 ? +val.replace('px', '') : val;\n });\n\n // text shadow\n if (array.length === 4) {\n this.props.color = array[0];\n this.props.angle = array[1];\n this.props.distance = array[2];\n this.props.blur = array[3];\n } else if (array.length === 5 || array.length === 6) {\n this.props.color = array[0];\n this.props.angle = array[1];\n this.props.distance = array[2];\n this.props.blur = array[3];\n this.props.spread = array[4];\n }\n }\n\n /**\n * Reset shadow props to default state.\n */\n private resetProps() {\n this.props = {\n type: 'boxShadow',\n inset: false,\n angle: 0,\n distance: 5,\n blur: 10,\n color: 'rgba(0, 0, 0, 0.5)',\n spread: 0\n };\n }\n}\n","import {ChangeDetectionStrategy, Component, Input, OnInit, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'side-control-border',\n templateUrl: './side-control-border.component.html',\n styleUrls: ['./side-control-border.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SideControlBorderComponent implements OnInit {\n\n @Input() type: string;\n\n @Input() active: boolean = false;\n\n constructor() {\n }\n\n ngOnInit() {\n }\n\n}\n","<span class=\"side-control-border-inner top-border\"\n [class.active]=\"active\"\n [class.enable]=\"type === 'top' || type === 'all'\"\n [class.enable-before]=\"type === 'top-left'\"\n [class.enable-after]=\"type === 'top-right'\"\n></span>\n\n<span class=\"side-control-border-inner left-border\"\n [class.active]=\"active\"\n [class.enable]=\"type === 'left' || type === 'all'\"\n [class.enable-before]=\"type === 'top-left'\"\n [class.enable-after]=\"type === 'bottom-left'\"\n></span>\n\n<span class=\"side-control-border-inner bottom-border\"\n [class.active]=\"active\"\n [class.enable]=\"type === 'bottom' || type === 'all'\"\n [class.enable-before]=\"type === 'bottom-left'\"\n [class.enable-after]=\"type === 'bottom-right'\"\n></span>\n\n<span class=\"side-control-border-inner right-border\"\n [class.active]=\"active\"\n [class.enable]=\"type === 'right' || type === 'all'\"\n [class.enable-before]=\"type === 'top-right'\"\n [class.enable-after]=\"type === 'bottom-right'\"\n></span>","import {Component, Input, OnInit, ViewEncapsulation} from '@angular/core';\nimport {LivePreview} from \"../../../live-preview.service\";\nimport {SelectedElement} from \"../../../live-preview/selected-element.service\";\nimport {BuilderDocumentActions} from \"../../../builder-document-actions.service\";\n\n@Component({\n selector: 'spacing-panel',\n templateUrl: './spacing-panel.component.html',\n styleUrls: ['./spacing-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SpacingPanelComponent implements OnInit {\n\n /**\n * Model for spacing slider.\n */\n public sliderValue = 0;\n\n /**\n * Maximum spacing value for slider.\n */\n @Input() max = 100;\n\n /**\n * Type of spacing that is being modified.\n */\n @Input() type: 'padding'|'margin'|'borderWidth'|'borderRadius' = 'padding';\n\n /**\n * All available spacing sides.\n */\n private readonly availableSides = ['top', 'right', 'bottom', 'left'];\n\n /**\n * Currently enabled spacing sides for slider.\n */\n public enabledSides: string[] = ['top', 'right', 'bottom', 'left'];\n\n /**\n * Spacing model for inputs.\n */\n public spacing = {all: 0, top: 0, left: 0, right: 0, bottom: 0};\n\n /**\n * SpacingPanelComponent Constructor.\n */\n constructor(private selected: SelectedElement, private builderActions: BuilderDocumentActions) {\n this.resetSpacing();\n }\n\n ngOnInit() {\n this.selected.changed.subscribe(() => {\n this.setSelectedElementSpacingValues();\n });\n }\n\n /**\n * Toggle specified spacing side state.\n */\n public toggleSide(name: string) {\n if (name === 'all') {\n if (this.enabledSides.length > 0) {\n this.enabledSides = [];\n } else {\n this.enabledSides = this.availableSides.slice();\n }\n } else {\n if (this.isSideEnabled(name)) {\n this.enabledSides.splice(this.enabledSides.indexOf(name), 1);\n } else {\n this.enabledSides.push(name);\n }\n }\n\n this.applySpacing();\n }\n\n /**\n * Check if specified spacing side is enabled.\n */\n public isSideEnabled(name: string) {\n if (name === 'all') return this.enabledSides.length === 4;\n return this.enabledSides.indexOf(name) > -1;\n }\n\n /**\n * Generate spacing css string and apply it to selected element.\n */\n public applySpacing(side?: string) {\n this.maybeResetAllSpacingValue();\n this.resetDisabledSideValues();\n\n const spacing = this.generateSpacingCssValue();\n this.builderActions.applyStyle(this.selected.node, this.type, spacing);\n this.sliderValue = side ? this.spacing[side] : 0;\n }\n\n /**\n * Reset \"all\" spacing value, if it is not equal to all side values.\n */\n private maybeResetAllSpacingValue() {\n this.availableSides.forEach(side => {\n if (this.spacing[side] !== this.spacing.all) {\n this.spacing.all = 0;\n }\n });\n }\n\n /**\n * Apply \"spacing.all\" value to all spacing sides.\n */\n public applySpacingToAllSides() {\n this.enabledSides = this.availableSides.slice();\n\n this.availableSides.forEach(side => {\n this.spacing[side] = this.spacing.all;\n });\n\n this.applySpacing('all');\n }\n\n /**\n * Apply specified spacing value to all enabled sides.\n */\n public applySpacingForEnabledSides(value: number) {\n this.resetSpacing();\n\n this.enabledSides.forEach(side => {\n this.spacing[side] = value;\n\n if (this.enabledSides.length === 4) {\n this.spacing.all = value;\n }\n });\n\n this.applySpacing();\n }\n\n /**\n * Set current spacing values of selected element on component.\n */\n private setSelectedElementSpacingValues() {\n this.availableSides.forEach(side => {\n this.spacing[side] = this.selected.getStyle(this.generateCssRuleName(side)).replace('px', '');\n });\n\n this.spacing.all = this.allSpacingValuesEqual() ? this.spacing.top : 0;\n }\n\n /**\n * Generate css rule name for specified spacing side.\n */\n private generateCssRuleName(side: string) {\n side = this.ucFirst(side);\n\n if (this.type === 'borderWidth') {\n return 'border' + side + 'Width';\n } else if (this.type === 'borderRadius') {\n return this.generateBorderRadiusRuleName(side);\n } else {\n return this.type + side;\n }\n }\n\n /**\n * Generate border radius rule name based on specified side.\n */\n private generateBorderRadiusRuleName(side: string) {\n side = side.toLowerCase();\n\n switch (side) {\n case 'top':\n return 'borderTopLeftRadius';\n case 'left':\n return 'borderTopRightRadius';\n case 'bottom':\n return 'borderBottomLeftRadius';\n case 'right':\n return 'borderBottomRightRadius';\n }\n }\n\n /**\n * Generate css value string for spacing.\n */\n private generateSpacingCssValue(): string {\n if (this.type === 'borderRadius') {\n return `${this.spacing.top}px ${this.spacing.left}px ${this.spacing.bottom}px ${this.spacing.right}px`;\n } else {\n return `${this.spacing.top}px ${this.spacing.right}px ${this.spacing.bottom}px ${this.spacing.left}px`;\n }\n }\n\n /**\n * Set spacing values of all disabled sides to zero.\n */\n private resetDisabledSideValues() {\n this.availableSides.forEach(side => {\n if (!this.isSideEnabled(side)) {\n this.spacing[side] = 0;\n }\n });\n }\n\n /**\n * Check if all spacing side values are equal.\n */\n private allSpacingValuesEqual() {\n return this.availableSides.filter(side => {\n return this.spacing[side] === this.spacing.top;\n }).length === 4;\n }\n\n /**\n * Reset spacing model to initial state.\n */\n private resetSpacing() {\n this.spacing = {top: 0, right: 0, bottom: 0, left: 0, all: 0};\n }\n\n /**\n * Uppercase first letter of specified string.\n */\n private ucFirst(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n}\n","<div class=\"side-controls\">\r\n <button class=\"no-style side-control all-control\" (click)=\"toggleSide('all')\">\r\n <side-control-border type=\"all\" [active]=\"isSideEnabled('all')\"></side-control-border>\r\n </button>\r\n\r\n <button class=\"no-style side-control top-control\" (click)=\"toggleSide('top')\">\r\n <side-control-border [type]=\"type === 'borderRadius' ? 'top-left' : 'top'\" [active]=\"isSideEnabled('top')\"></side-control-border>\r\n </button>\r\n <button class=\"no-style side-control right-control\" (click)=\"toggleSide('right')\">\r\n <side-control-border [type]=\"type === 'borderRadius' ? 'bottom-left' : 'right'\" [active]=\"isSideEnabled('right')\"></side-control-border>\r\n </button>\r\n <button class=\"no-style side-control bottom-control\" (click)=\"toggleSide('bottom')\">\r\n <side-control-border [type]=\"type === 'borderRadius' ? 'top-right' : 'bottom'\" [active]=\"isSideEnabled('bottom')\"></side-control-border>\r\n </button>\r\n <button class=\"no-style side-control left-control\" (click)=\"toggleSide('left')\">\r\n <side-control-border [type]=\"type === 'borderRadius' ? 'bottom-right' : 'left'\" [active]=\"isSideEnabled('left')\"></side-control-border>\r\n </button>\r\n</div>\r\n\r\n<mat-slider min=\"1\" [max]=\"max\" step=\"1\" color=\"accent\" (input)=\"applySpacingForEnabledSides($event.value)\" [value]=\"sliderValue\" [disabled]=\"!enabledSides.length\"></mat-slider>\r\n\r\n<ng-content></ng-content>\r\n\r\n<div class=\"side-inputs\">\r\n <div class=\"input-container all-input\">\r\n <input type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"spacing.all\" (ngModelChange)=\"applySpacingToAllSides()\">\r\n </div>\r\n\r\n <div class=\"side-inputs-inner\" [ngClass]=\"type\">\r\n <div class=\"input-container top-input\">\r\n <input type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"spacing.top\" (ngModelChange)=\"applySpacing('top')\">\r\n </div>\r\n <div class=\"input-container left-input\">\r\n <input type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"spacing.left\" (ngModelChange)=\"applySpacing('left')\">\r\n </div>\r\n <div class=\"input-container right-input\">\r\n <input type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"spacing.right\" (ngModelChange)=\"applySpacing('right')\">\r\n </div>\r\n <div class=\"input-container bottom-input\">\r\n <input type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"spacing.bottom\" (ngModelChange)=\"applySpacing('bottom')\">\r\n </div>\r\n </div>\r\n</div>","<div class=\"header\">\r\n <div class=\"name\" trans>Google Fonts</div>\r\n <button class=\"close-button no-style\" (click)=\"close()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<div class=\"input-container search\">\r\n <input type=\"search\" [formControl]=\"searchControl\" placeholder=\"Search...\" trans-placeholder>\r\n</div>\r\n\r\n<div class=\"fonts\">\r\n <button class=\"no-style font\" *ngFor=\"let font of filteredFonts[fontPage]\" [style.fontFamily]=\"font.family\" (click)=\"applyFont(font.family)\">{{font.family}}</button>\r\n</div>\r\n\r\n<div class=\"pagination\">\r\n <button class=\"no-style previous-page\" (click)=\"previousPage()\" [matTooltip]=\"'Previous Page' | trans\">\r\n <mat-icon svgIcon=\"keyboard-arrow-left\"></mat-icon>\r\n </button>\r\n\r\n <button class=\"no-style next-page\" (click)=\"nextPage()\" [matTooltip]=\"'Next Page' | trans\">\r\n <mat-icon svgIcon=\"keyboard-arrow-right\"></mat-icon>\r\n </button>\r\n</div>\r\n","import {Component, Inject, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {HttpCacheClient} from '@common/core/http/http-cache-client';\nimport {FormControl} from '@angular/forms';\nimport {BuilderDocument} from '../../../../builder-document.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {debounceTime, distinctUntilChanged} from 'rxjs/operators';\nimport {OverlayPanelRef} from '../../../../../../common/core/ui/overlay-panel/overlay-panel-ref';\nimport {SelectedElement} from '../../../../live-preview/selected-element.service';\n\n@Component({\n selector: 'google-fonts-panel',\n templateUrl: './google-fonts-panel.component.html',\n styleUrls: ['./google-fonts-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class GoogleFontsPanelComponent implements OnInit {\n\n public loading = false;\n\n public originalFonts = [];\n public filteredFonts = [];\n\n public searchControl = new FormControl();\n\n public fontPage = 0;\n\n constructor(\n private http: HttpCacheClient,\n private builderDocument: BuilderDocument,\n private settings: Settings,\n private selectedElement: SelectedElement,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef,\n ) {}\n\n ngOnInit() {\n this.getAll();\n this.bindToSearchQuery();\n }\n\n public close() {\n this.overlayRef.close();\n }\n\n public nextPage() {\n const nextPage = this.fontPage + 1;\n if (this.filteredFonts.length > nextPage) {\n this.fontPage++;\n this.loadIntoDom();\n }\n }\n\n public previousPage() {\n const previousPage = this.fontPage - 1;\n if (previousPage > 0) {\n this.fontPage--;\n this.loadIntoDom();\n }\n }\n\n public applyFont(fontFamily: string) {\n this.loadIntoDom([fontFamily], this.builderDocument.document.head);\n this.builderDocument.actions.applyStyle(this.selectedElement.node, 'fontFamily', fontFamily);\n }\n\n private getAll() {\n const key = this.settings.get('builder.google_fonts_api_key');\n this.http.get('https://www.googleapis.com/webfonts/v1/webfonts?sort=popularity&key=' + key)\n .subscribe(response => {\n this.originalFonts = this.createPaginator(response['items']);\n this.filteredFonts = this.originalFonts.slice();\n this.loadIntoDom();\n });\n }\n\n /**\n * Chunk array into 15 item chunks.\n */\n private createPaginator(fonts: any[]) {\n const paginator = [];\n\n while (fonts.length > 0) {\n paginator.push(fonts.splice(0, 15));\n }\n\n return paginator;\n }\n\n /**\n * Perform a search when user types into search input.\n */\n private bindToSearchQuery() {\n this.searchControl.valueChanges\n .pipe(debounceTime(100), distinctUntilChanged())\n .subscribe(query => {\n if ( ! query) this.filteredFonts = this.originalFonts;\n\n const filtered = [];\n this.originalFonts.forEach(page => {\n page.forEach(font => {\n if (font.family.toLowerCase().indexOf(query) > -1) {\n filtered.push(font);\n }\n });\n });\n\n this.filteredFonts = this.createPaginator(filtered);\n });\n }\n\n /**\n * Load given google fonts into the DOM.\n */\n private loadIntoDom(names: any[] = null, context: HTMLHeadElement = null) {\n let head = context || document.head;\n this.loading = true;\n\n // make a list of fonts to load\n if ( ! names) {\n names = this.filteredFonts[this.fontPage].map(font => font.family);\n }\n\n // load fonts either to main window or iframe\n if ( ! context) {\n const link = head.querySelector('#dynamic-fonts');\n link && link.remove();\n }\n\n const gFontsLink = head.querySelector('#dynamic-fonts') as HTMLLinkElement;\n let compiled = names.join('|').replace(/ /g, '+');\n\n if (gFontsLink) {\n gFontsLink.href += '|' + compiled;\n } else {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://fonts.googleapis.com/css?family='+compiled;\n link.id = 'dynamic-fonts';\n\n head.appendChild(link);\n }\n\n this.loading = false;\n }\n}\n","<div class=\"font-family-container\" #googleFontsOrigin>\n <div class=\"input-container\">\n <select name=\"font-family\" id=\"font-family\" [(ngModel)]=\"styles.fontFamily\" (ngModelChange)=\"applyTextStyle('fontFamily')\">\n <option value=\"\" trans>Font</option>\n <option [ngValue]=\"font.css\" *ngFor=\"let font of baseFonts\">{{font.name}}</option>\n </select>\n </div>\n\n <button class=\"no-style google-fonts-button\" type=\"button\" (click)=\"openGoogleFontsPanel()\" [matTooltip]=\"'Google fonts' | trans\">\n <mat-icon svgIcon=\"google-custom\"></mat-icon>\n </button>\n</div>\n\n<div class=\"text-decorations\">\n <div class=\"buttons\">\n <button class=\"no-style italic\" (click)=\"toggleTextStyle('fontStyle', 'italic')\" [class.active]=\"textStyleIs('fontStyle', 'italic')\">I</button>\n <button class=\"no-style underline\" (click)=\"toggleTextStyle('textDecoration', 'underline')\" [class.active]=\"textStyleIs('textDecoration', 'underline')\">U</button>\n <button class=\"no-style strike\" (click)=\"toggleTextStyle('textDecoration', 'line-through')\" [class.active]=\"textStyleIs('textDecoration', 'line-through')\">S</button>\n <button class=\"no-style overline\" (click)=\"toggleTextStyle('textDecoration', 'overline')\" [class.active]=\"textStyleIs('textDecoration', 'overline')\">O</button>\n </div>\n <div class=\"input-container\">\n <select id=\"font-weight\" name=\"font-weight\" [(ngModel)]=\"styles.fontWeight\" (ngModelChange)=\"applyTextStyle('fontWeight')\">\n <option *ngFor=\"let weight of fontWeights\" [value]=\"weight\">{{weight}}</option>\n </select>\n </div>\n</div>\n\n<div class=\"font-styles\">\n <div class=\"input-container font-size\">\n <input name=\"font-size\" type=\"number\" min=\"1\" max=\"999\" [(ngModel)]=\"styles.fontSize\" (ngModelChange)=\"applyTextStyle('fontSize')\" [matTooltip]=\"'font size' | trans\">\n </div>\n\n <div class=\"text-align\">\n <button class=\"no-style\" (click)=\"toggleTextStyle('textAlign', 'left')\" [class.active]=\"textStyleIs('textAlign', 'left')\" [matTooltip]=\"'align left' | trans\">\n <mat-icon svgIcon=\"format-align-left\"></mat-icon>\n </button>\n <button class=\"no-style\" (click)=\"toggleTextStyle('textAlign', 'center')\" [class.active]=\"textStyleIs('textAlign', 'center')\" [matTooltip]=\"'align center' | trans\">\n <mat-icon svgIcon=\"format-align-center\"></mat-icon>\n </button>\n <button class=\"no-style\" (click)=\"toggleTextStyle('textAlign', 'right')\" [class.active]=\"textStyleIs('textAlign', 'right')\" [matTooltip]=\"'align right' | trans\">\n <mat-icon svgIcon=\"format-align-right\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"text-color\" #origin (click)=\"openColorpickerPanel(origin)\" [style.backgroundColor]=\"styles.color\" [matTooltip]=\"'Text color' | trans\"></div>\n","import {Component, ElementRef, OnInit, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {baseFonts, fontWeights} from '../../../text-style-values';\nimport {InspectorFloatingPanel} from '../../inspector-floating-panel.service';\nimport {GoogleFontsPanelComponent} from './google-fonts-panel/google-fonts-panel.component';\nimport {SelectedElement} from '../../../live-preview/selected-element.service';\nimport {BuilderDocumentActions} from '../../../builder-document-actions.service';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\n\n@Component({\n selector: 'text-style-panel',\n templateUrl: './text-style-panel.component.html',\n styleUrls: ['./text-style-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TextStylePanelComponent implements OnInit {\n @ViewChild('googleFontsOrigin', {static: true}) googleFontsOrigin: ElementRef;\n\n public styles: any = {};\n public baseFonts: {name: string, css: string}[] = [];\n public fontWeights = fontWeights.slice();\n\n constructor(\n private selectedElement: SelectedElement,\n private panel: InspectorFloatingPanel,\n private builderActions: BuilderDocumentActions,\n private overlayPanel: OverlayPanel,\n ) {}\n\n ngOnInit() {\n this.selectedElement.changed.subscribe(() => {\n this.getSelectedElementTextStyles();\n });\n }\n\n public applyTextStyle(name: string, addUndoCommand = true) {\n let value = '' + this.styles[name];\n if (name === 'fontSize') {\n value += 'px';\n }\n this.builderActions.applyStyle(this.selectedElement.node, name, value, addUndoCommand);\n }\n\n /**\n * Toggle between specified style and \"initial\".\n */\n public toggleTextStyle(name: string, value: string) {\n if (this.textStyleIs(name, value)) {\n this.builderActions.applyStyle(this.selectedElement.node, name, 'initial');\n } else {\n this.builderActions.applyStyle(this.selectedElement.node, name, value);\n }\n }\n\n /**\n * Check if selected element's specified style equals given value.\n */\n public textStyleIs(name: string, value: string) {\n return this.selectedElement.getStyle(name).indexOf(value) > -1;\n }\n\n public openColorpickerPanel(origin: HTMLElement) {\n const currentColor = this.styles.color;\n this.overlayPanel.open(\n ColorpickerPanelComponent,\n {position: RIGHT_POSITION, origin: new ElementRef(origin), data: {color: currentColor}}\n ).valueChanged().subscribe(color => {\n this.styles.color = color;\n this.applyTextStyle('color', false);\n });\n }\n\n public openGoogleFontsPanel() {\n this.panel.open(GoogleFontsPanelComponent, this.googleFontsOrigin);\n }\n\n /**\n * Get current text styles of element selected in the builder.\n */\n private getSelectedElementTextStyles() {\n this.styles = {\n color: this.selectedElement.getStyle('color'),\n fontSize: this.selectedElement.getStyle('fontSize').replace('px', ''),\n textAlign: this.selectedElement.getStyle('textAlign'),\n fontStyle: this.selectedElement.getStyle('fontStyle'),\n fontFamily: this.selectedElement.getStyle('fontFamily'),\n lineHeight: this.selectedElement.getStyle('lineHeight'),\n fontWeight: this.selectedElement.getStyle('fontWeight'),\n textDecoration: this.selectedElement.getStyle('textDecoration')\n };\n\n // make sure current font is always shown in select,\n // event if it's google font and not base font\n this.baseFonts = baseFonts.slice();\n if ( ! this.baseFonts.includes(this.styles.fontFamily)) {\n this.baseFonts.push({name: this.styles.fontFamily.split(',')[0], css: this.styles.fontFamily});\n }\n }\n}\n","import {Component, ElementRef, OnInit, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SelectedElement} from '../../../live-preview/selected-element.service';\nimport {BuilderDocumentActions} from '../../../builder-document-actions.service';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\n\n@Component({\n selector: 'border-style-controls',\n templateUrl: './border-style-controls.component.html',\n styleUrls: ['./border-style-controls.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BorderStyleControlsComponent implements OnInit {\n @ViewChild('colorButton', {static: true}) colorButton: ElementRef;\n\n public borderStyle = 'none';\n public borderColor = '#eee';\n\n constructor(\n private selected: SelectedElement,\n private overlayPanel: OverlayPanel,\n private builderActions: BuilderDocumentActions,\n ) {}\n\n ngOnInit() {\n this.selected.changed.subscribe(() => {\n this.setInitialBorderStyles();\n });\n }\n\n /**\n * Apply border color to selected element.\n */\n public applyBorderColor(color: string) {\n this.borderColor = color;\n this.builderActions.applyStyle(this.selected.node, 'borderColor', color);\n }\n\n /**\n * Apply border style to selected element.\n */\n public applyBorderStyle() {\n this.builderActions.applyStyle(this.selected.node, 'borderStyle', this.borderStyle);\n }\n\n /**\n * Open color picker panel and update border color.\n */\n public openColorpickerPanel() {\n this.overlayPanel.open(\n ColorpickerPanelComponent,\n {position: RIGHT_POSITION, origin: this.colorButton, data: {color: this.borderColor}}\n ).valueChanged().subscribe(color => {\n this.applyBorderColor(color);\n });\n }\n\n /**\n * Set styles of selected element on component.\n */\n private setInitialBorderStyles() {\n this.borderStyle = this.selected.getStyle('borderStyle');\n this.borderColor = this.selected.getStyle('borderColor');\n }\n}\n","<button type=\"button\"\n class=\"no-style border-color\"\n [style.borderColor]=\"borderColor\"\n (click)=\"openColorpickerPanel()\"\n [matTooltip]=\"'Border Color' | trans\"\n #colorButton\n></button>\n\n<div class=\"input-container\">\n <select name=\"border-style\" id=\"border-style\" [(ngModel)]=\"borderStyle\" (ngModelChange)=\"applyBorderStyle()\">\n <option value=\"none\" trans>None</option>\n <option value=\"solid\" trans>Solid</option>\n <option value=\"dashed\" trans>Dashed</option>\n <option value=\"dotted\" trans>Dotted</option>\n <option value=\"double\" trans>Double</option>\n <option value=\"groove\" trans>Groove</option>\n <option value=\"ridge\" trans>Ridge</option>\n <option value=\"inset\" trans>Inset</option>\n <option value=\"outset\" trans>Outset</option>\n </select>\n</div>","<div class=\"breadcrumbs\" *ngIf=\"path.length\">\n <span class=\"crumb-container\" *ngFor=\"let item of path; last as last\" (mouseenter)=\"livePreview.repositionBox('hover')\" [class.last]=\"last\" (mouseleave)=\"livePreview.hideBox('hover')\">\n <button class=\"crumb no-style\" (click)=\"selected.selectNode(item.node)\">{{item.name}}</button>\n <mat-icon svgIcon=\"keyboard-arrow-right\" *ngIf=\"!last\"></mat-icon>\n </span>\n</div>\n\n<button class=\"edit-layout-button\" mat-raised-button (click)=\"openLayoutPanel()\" *ngIf=\"livePreview.selected.isLayout\" color=\"accent\" trans>Edit Layout</button>\n<button class=\"edit-layout-button\" mat-raised-button (click)=\"openUploadImageModal()\" *ngIf=\"livePreview.selected.isImage\" color=\"accent\" trans>Change Image</button>\n<button class=\"edit-layout-button\" mat-raised-button (click)=\"openLinkEditorModal()\" *ngIf=\"livePreview.selected.isLink\" color=\"accent\" trans>Change Link</button>\n<button class=\"edit-layout-button\" mat-raised-button (click)=\"openChangeIconPanel()\" *ngIf=\"livePreview.selected.isIcon\" color=\"accent\" trans>Change Icon</button>\n\n<mat-accordion>\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('attributes')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Attributes</mat-panel-title>\n </mat-expansion-panel-header>\n <attributes-panel class=\"panel-body\"></attributes-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('background')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Background</mat-panel-title>\n </mat-expansion-panel-header>\n <background-panel class=\"panel-body\"></background-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('shadows')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Shadows</mat-panel-title>\n </mat-expansion-panel-header>\n <shadows-panel class=\"panel-body\"></shadows-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('padding')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Padding</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel type=\"padding\" class=\"panel-body\"></spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('margin')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Margin</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel type=\"margin\" class=\"panel-body\"></spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('text')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Text Style</mat-panel-title>\n </mat-expansion-panel-header>\n <text-style-panel class=\"panel-body\"></text-style-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('box')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Border</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel type=\"borderWidth\" class=\"panel-body\">\n <border-style-controls></border-style-controls>\n </spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel class=\"category mat-elevation-z\" *ngIf=\"canModify('box')\">\n <mat-expansion-panel-header>\n <mat-panel-title trans>Border Roundness</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel type=\"borderRadius\" class=\"panel-body\" max=\"30\"></spacing-panel>\n </mat-expansion-panel>\n</mat-accordion>\n\n<no-results-message *ngIf=\"!selected.node\" svgImage=\"the-search.svg\">\n <span primary-text trans>Nothing is selected.</span>\n <span secondary-text trans>Click on any element on the right to inspect and modify it.</span>\n</no-results-message>\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {LivePreview} from '../../live-preview.service';\nimport {LayoutPanel} from '../layout-panel/layout-panel.service';\nimport {Inspector} from '../inspector.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {ActiveProject} from '../../projects/active-project';\nimport {LinkEditor} from '../../live-preview/link-editor/link-editor.service';\nimport {Elements} from '../../elements/elements.service';\nimport {SelectedElement} from '../../live-preview/selected-element.service';\nimport {openUploadWindow} from '@common/uploads/utils/open-upload-window';\nimport {UploadInputTypes} from '@common/uploads/upload-input-config';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {InlineTextEditor} from '../../live-preview/inline-text-editor/inline-text-editor.service';\n\n@Component({\n selector: 'inspector-panel',\n templateUrl: './inspector-panel.component.html',\n styleUrls: ['./inspector-panel.component.scss'],\n providers: [UploadQueueService],\n encapsulation: ViewEncapsulation.None,\n})\nexport class InspectorPanelComponent implements OnInit {\n public path = [];\n\n constructor(\n public livePreview: LivePreview,\n public selected: SelectedElement,\n private layout: LayoutPanel,\n private inspector: Inspector,\n private modal: Modal,\n private activeProject: ActiveProject,\n private linkEditor: LinkEditor,\n private elements: Elements,\n private uploadQueue: UploadQueueService,\n private inlineTextEditor: InlineTextEditor,\n ) {}\n\n ngOnInit() {\n this.selected.changed.subscribe(() => {\n if ( ! this.selected.path) { return; }\n this.path = this.selected.path.slice();\n });\n }\n\n /**\n * Check if specified property/style of this element can be modified.\n */\n public canModify(property: string) {\n return this.livePreview.selected.canModify(property);\n }\n\n /**\n * Open layout panel for currently selected element.\n */\n public openLayoutPanel() {\n this.layout.selectRowAndContainerUsing(this.livePreview.selected.node);\n this.inspector.openPanel('layout');\n }\n\n public openUploadImageModal() {\n const diskPrefix = this.activeProject.getBaseUrl(true) + 'images';\n const config = {uri: 'uploads/images', httpParams: {diskPrefix}};\n openUploadWindow({types: [UploadInputTypes.image]}).then(files => {\n this.uploadQueue.start(files, config).subscribe(response => {\n (this.livePreview.selected.node as HTMLImageElement).src = this.activeProject.getImageUrl(response.fileEntry);\n });\n });\n }\n\n public openLinkEditorModal() {\n this.linkEditor.open(this.livePreview.selected.node as HTMLLinkElement);\n }\n\n public openChangeIconPanel() {\n this.inlineTextEditor.open(this.livePreview.selected.node, {activePanel: 'icons'});\n }\n}\n","<div class=\"preset\" [class.active]=\"presetIsActive([12])\" (click)=\"selectPreset([12])\">\n <span class=\"col col-12\"></span>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([6,6])\" (click)=\"selectPreset([6,6])\">\n <div class=\"col col-6\"></div>\n <div class=\"col col-6\"></div>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([4,8])\" (click)=\"selectPreset([4,8])\">\n <div class=\"col col-4\"></div>\n <div class=\"col col-8\"></div>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([8,4])\" (click)=\"selectPreset([8,4])\">\n <div class=\"col col-8\"></div>\n <div class=\"col col-4\"></div>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([4,4,4])\" (click)=\"selectPreset([4,4,4])\">\n <div class=\"col col-4\"></div>\n <div class=\"col col-4\"></div>\n <div class=\"col col-4\"></div>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([3,3,3,3])\" (click)=\"selectPreset([3,3,3,3])\">\n <div class=\"col col-3\"></div>\n <div class=\"col col-3\"></div>\n <div class=\"col col-3\"></div>\n <div class=\"col col-3\"></div>\n</div>\n<div class=\"preset\" [class.active]=\"presetIsActive([2,2,2,2,2,2])\" (click)=\"selectPreset([2,2,2,2,2,2])\">\n <div class=\"col col-2\"></div>\n <div class=\"col col-2\"></div>\n <div class=\"col col-2\"></div>\n <div class=\"col col-2\"></div>\n <div class=\"col col-2\"></div>\n <div class=\"col col-2\"></div>\n</div>\n<button class=\"no-style preset custom-preset\" (click)=\"toggleCustomPanel()\">\n <span class=\"col col-12\" trans>Custom</span>\n</button>\n\n<div class=\"custom-span-panel input-container\" *ngIf=\"customPanelOpen\">\n <input type=\"text\" [(ngModel)]=\"customSpan\" (ngModelChange)=\"selectPresetFromCustomSpan()\" placeholder=\"4 + 4 + 4\">\n <div class=\"error\" *ngIf=\"!customPresetIsValid\" trans>This preset is not valid.</div>\n</div>\n","import {Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'column-presets',\n templateUrl: './column-presets.component.html',\n styleUrls: ['./column-presets.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ColumnPresetsComponent implements OnChanges {\n\n /**\n * Fired when new column preset is selected.\n */\n @Output() selected = new EventEmitter();\n\n /**\n * Current selected row column preset.\n */\n @Input() preset: number[];\n\n public customPanelOpen = false;\n\n public customSpan: string;\n\n public customPresetIsValid = true;\n\n ngOnChanges() {\n this.customSpan = this.preset.join(' + ');\n }\n\n public selectPreset(preset: number[]) {\n this.selected.emit(preset);\n }\n\n public selectPresetFromCustomSpan() {\n const customSpan = this.customSpan.split('+');\n const spans = customSpan.map(span => parseInt(span.trim()));\n\n if (this.presetIsValid(spans)) {\n this.selectPreset(spans);\n this.customPresetIsValid = true;\n } else {\n this.customPresetIsValid = false;\n }\n }\n\n /**\n * Toggle custom preset panel visibility.\n */\n public toggleCustomPanel() {\n this.customPanelOpen = !this.customPanelOpen;\n }\n\n /**\n * Check if specified preset is currently active.\n */\n public presetIsActive(preset: number[]) {\n return (this.preset.length === preset.length) && this.preset.every((element, index) => {\n return element === preset[index];\n });\n }\n\n /**\n * Check if specified column preset is valid.\n */\n private presetIsValid(preset: number[]) {\n const validSpans = preset.filter(span => span > 0 && span <= 12);\n return validSpans.length && validSpans.reduce((sum, x) => sum + x) === 12;\n }\n}\n","<mat-accordion class=\"containers\" cdkDropList (cdkDropListDropped)=\"reorder($event, 'container')\">\n <button class=\"no-style add-item-button\" (click)=\"layoutPanel.createContainer(null, 'start')\"><span trans>+ ADD CONTAINER</span></button>\n\n <div class=\"container-drag-wrapper\" cdkDrag [id]=\"container.id\" *ngFor=\"let container of layoutPanel.containers; index as index\">\n <mat-expansion-panel class=\"container-panel mat-elevation-z\" [expanded]=\"containerIsSelected(container)\" (opened)=\"onPanelOpen(container)\">\n <mat-expansion-panel-header class=\"drag-handle\" cdkDragHandle (mouseenter)=\"repositionHoverBox(container.node)\" (mouseleave)=\"hideHoverBox()\">\n <mat-panel-title class=\"name\">\n <span trans>Container</span> <span [innerHtml]=\"' '\"></span> <span>{{index + 1}}</span>\n <div *cdkDragPreview class=\"layout-drag-preview\">\n <span trans>Container</span> <span [innerHtml]=\"' '\"></span> <span>{{index + 1}}</span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"container-config\">\n <div class=\"rows\" cdkDropList (cdkDropListDropped)=\"reorder($event, 'row')\">\n <button class=\"no-style add-item-button\" (click)=\"layoutPanel.createRow(container.node, container.rows[0], 'start')\"><span trans>+ ADD ROW</span></button>\n\n <div class=\"row-drag-wrapper\" cdkDrag *ngFor=\"let row of container.rows; index as index\">\n <div class=\"row drag-handle\" cdkDragHandle (click)=\"layoutPanel.selectRow(row)\" [class.selected]=\"layoutPanel.rowIsSelected(row)\" (mouseenter)=\"repositionHoverBox(row)\" (mouseleave)=\"hideHoverBox()\">\n <div *cdkDragPreview class=\"layout-drag-preview\"><span trans>Row</span> {{index + 1}}</div>\n <div class=\"row-name\"><span trans>Row</span> {{index + 1}}</div>\n <div class=\"row-actions\">\n <button class=\"no-style\" [matTooltip]=\"'Modify' | trans\" (click)=\"openInspectorPanel(row)\">\n <mat-icon svgIcon=\"edit\"></mat-icon>\n </button>\n <button class=\"no-style\" [matTooltip]=\"'Clone' | trans\" (click)=\"cloneRow(row)\">\n <mat-icon svgIcon=\"file-copy\"></mat-icon>\n </button>\n <button class=\"no-style\" [matTooltip]=\"'Delete' | trans\" (click)=\"removeItem(row)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n </div>\n\n <button class=\"no-style add-item-button\" (click)=\"layoutPanel.createRow(container.node, row, 'after')\"><span trans>+ ADD ROW</span></button>\n </div>\n </div>\n\n <ng-container *ngIf=\"layoutPanel.selectedRow\">\n <column-presets [preset]=\"layoutPanel.selectedRow.preset\" (selected)=\"layoutPanel.applyPreset($event)\"></column-presets>\n\n <div class=\"current-columns\" cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"reorder($event, 'column')\">\n <div class=\"column column-helper column-drag-wrapper drag-handle\"\n cdkDrag\n *ngFor=\"let column of layoutPanel.selectedRow.columns\"\n [style.width]=\"widthFromSpan(column.span)\"\n (click)=\"layoutPanel.selectColumn(column.node)\"\n [id]=\"column.id\"\n [class.selected]=\"isSelected(column.node)\"\n (mouseenter)=\"repositionHoverBox(column.node)\"\n (mouseleave)=\"hideHoverBox()\"\n >\n <span>{{column.span}}</span>\n <div class=\"layout-drag-preview\" *cdkDragPreview>{{column.span}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n\n <mat-action-row>\n <button class=\"no-style\" [matTooltip]=\"'Modify' | trans\" (click)=\"openInspectorPanel(container.node)\">\n <mat-icon svgIcon=\"edit\"></mat-icon>\n </button>\n <button class=\"no-style\" [matTooltip]=\"'Clone' | trans\" (click)=\"cloneContainer(container)\">\n <mat-icon svgIcon=\"file-copy\"></mat-icon>\n </button>\n <button class=\"no-style\" [matTooltip]=\"'Delete' | trans\" (click)=\"removeItem(container.node)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <button class=\"no-style add-item-button hide-text\" (click)=\"layoutPanel.createContainer(container.node, 'after')\">\n <span trans>+ ADD CONTAINER</span>\n </button>\n </div>\n</mat-accordion>\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {LayoutPanel} from './layout-panel.service';\nimport {Container} from './layout-panel-types';\nimport {Inspector} from '../inspector.service';\nimport {SelectedElement} from '../../live-preview/selected-element.service';\nimport {ContextBoxes} from '../../live-preview/context-boxes.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\nimport {DomHelpers} from '../../../shared/dom-helpers.service';\nimport {LivePreview} from '../../live-preview.service';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\n\n@Component({\n selector: 'layout-panel',\n templateUrl: './layout-panel.component.html',\n styleUrls: ['./layout-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LayoutPanelComponent implements OnInit {\n constructor(\n private builderDocument: BuilderDocument,\n private selectedElement: SelectedElement,\n private contextBoxes: ContextBoxes,\n public layoutPanel: LayoutPanel,\n private inspector: Inspector,\n private livePreview: LivePreview,\n private undoManager: UndoManager,\n ) {}\n\n ngOnInit() {\n this.builderDocument.contentChanged.subscribe(e => {\n if ( ! this.inspector.activePanelIs('layout')) return;\n this.layoutPanel.loadContainers();\n });\n\n // reload container once layout panel is opened\n this.inspector.panelChanged.subscribe(name => {\n if (name !== 'layout') return;\n this.layoutPanel.loadContainers();\n });\n }\n\n public openInspectorPanel(node: HTMLElement) {\n this.selectedElement.selectNode(node);\n this.inspector.togglePanel('inspector');\n }\n\n public cloneContainer(container: Container) {\n const cloned = this.builderDocument.actions.cloneNode(container.node);\n this.layoutPanel.selectContainer(cloned);\n }\n\n public cloneRow(row: HTMLElement) {\n const cloned = this.builderDocument.actions.cloneNode(row);\n this.layoutPanel.selectRow(cloned, true);\n }\n\n public removeItem(node: HTMLElement) {\n this.builderDocument.actions.removeNode(node);\n }\n\n public repositionHoverBox(node: HTMLElement) {\n this.contextBoxes.repositionBox('hover', node);\n }\n\n public hideHoverBox() {\n this.contextBoxes.hideBox('hover');\n }\n\n public containerIsSelected(container: Container): boolean {\n if ( ! this.layoutPanel.selectedContainer) return false;\n return this.layoutPanel.selectedContainer.node === container.node;\n }\n\n /**\n * Called when container panel is opened.\n */\n public onPanelOpen(container: Container) {\n this.layoutPanel.selectedContainer = container;\n\n if (container.rows.length) {\n this.layoutPanel.selectRow(container.rows[0]);\n }\n }\n\n /**\n * Check if specified node is selected in live preview.\n */\n public isSelected(node: HTMLElement) {\n return this.selectedElement.node === node;\n }\n\n /**\n * Get width percentage from specified column span.\n */\n public widthFromSpan(span: number): string {\n return ((span * 100) / 12) + '%';\n }\n\n public reorder(e: CdkDragDrop<any>, type: 'container'|'row'|'column') {\n const oldArray = this.getNodeList(type),\n newArray = oldArray.slice();\n\n moveItemInArray(newArray, e.previousIndex, e.currentIndex);\n\n DomHelpers.reorderDom(newArray, oldArray);\n\n this.livePreview.repositionBox('selected');\n this.builderDocument.contentChanged.next('builder');\n\n this.createUndoCommand(oldArray, newArray);\n }\n\n private getNodeList(type: 'container'|'row'|'column') {\n switch (type) {\n case 'container':\n return this.layoutPanel.containers.map(container => container.node);\n case 'row':\n return this.layoutPanel.selectedContainer.rows;\n case 'column':\n return this.layoutPanel.selectedRow.columns.map(col => col.node);\n }\n }\n\n private createUndoCommand(oldOrder: HTMLElement[], newOrder: HTMLElement[]) {\n this.undoManager.add('generic', {\n undo: () => {\n DomHelpers.reorderDom(oldOrder, newOrder);\n this.livePreview.repositionBox('selected');\n },\n redo: () => {\n DomHelpers.reorderDom(newOrder, oldOrder);\n this.livePreview.repositionBox('selected');\n }\n });\n }\n}\n","<button class=\"new-page-button\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\" (click)=\"createNewPage()\">\r\n <mat-icon svgIcon=\"add\"></mat-icon>\r\n <span trans>New Page</span>\r\n</button>\r\n\r\n<div class=\"content-panel\">\r\n <div class=\"header\" trans>Active Page</div>\r\n\r\n <div class=\"input-container\">\r\n <select name=\"active-page\" id=\"active-page\" [formControl]=\"activePageControl\">\r\n <option [value]=\"page.name\" *ngFor=\"let page of activeProject.pages$ | async\">{{page.name}}</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"active-page-actions\">\r\n <button mat-button color=\"warn\" [disabled]=\"!canDeleteSelectedPage() || (loading$ | async)\" (click)=\"deleteSelectedPage()\" [matTooltip]=\"'Delete' | trans\" trans>Delete</button>\r\n <button mat-button color=\"accent\" [disabled]=\"loading$ | async\" (click)=\"duplicateSelectedPage()\" [matTooltip]=\"'Duplicate' | trans\" trans>Duplicate</button>\r\n </div>\r\n</div>\r\n\r\n<form class=\"page-options many-inputs content-panel\" (ngSubmit)=\"updateSelectedPage()\" [formGroup]=\"pageForm\" ngNativeValidate>\r\n <div class=\"header\" trans>Page SEO Options</div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"selected-page-name\" trans>Page Name</label>\r\n <input type=\"text\" name=\"selected-page-name\" id=\"selected-page-name\" formControlName=\"name\" required>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"selected-page-title\" trans>Page Title</label>\r\n <input type=\"text\" name=\"selected-page-title\" id=\"selected-page-title\" formControlName=\"title\">\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"selected-page-description\" trans>Page Description</label>\r\n <textarea type=\"text\" name=\"selected-page-description\" id=\"selected-page-description\" formControlName=\"description\"></textarea>\r\n </div>\r\n\r\n <div class=\"input-container\">\r\n <label for=\"selected-page-keywords\" trans>Page Keywords</label>\r\n <input type=\"text\" name=\"selected-page-keywords\" id=\"selected-page-keywords\" formControlName=\"keywords\">\r\n <p trans>Separate each one with a comma.</p>\r\n </div>\r\n\r\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Update</button>\r\n</form>\r\n","import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {ActiveProject} from '../../projects/active-project';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {Projects} from '../../../shared/projects/projects.service';\nimport {getProductionHtml} from '../../utils/parse-html-into-document';\nimport {BehaviorSubject} from 'rxjs';\nimport {FormBuilder, FormControl} from '@angular/forms';\nimport {BLANK_PAGE_SKELETON} from '../../../shared/crupdate-project-modal/blank-page-skeleton';\n\n@Component({\n selector: 'pages-panel',\n templateUrl: './pages-panel.component.html',\n styleUrls: ['./pages-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PagesPanelComponent implements OnInit {\n public loading$ = new BehaviorSubject(false);\n public activePageControl = new FormControl('index');\n public pageForm = this.fb.group({\n name: [''],\n title: [''],\n description: [''],\n keywords: [''],\n });\n\n constructor(\n public activeProject: ActiveProject,\n private projects: Projects,\n private toast: Toast,\n private builderDocument: BuilderDocument,\n private fb: FormBuilder,\n ) {}\n\n ngOnInit() {\n this.builderDocument.loaded$.subscribe(() => {\n this.activePageControl.valueChanges\n .subscribe(pageName => {\n // initial \"index\" page will be already loaded,\n // make sure to not reload it again needlessly\n if (pageName !== this.activeProject.activePage$.value.name) {\n this.activeProject.setActivePage(pageName);\n this.activeProject.updateBuilderDocument();\n }\n });\n\n this.activeProject.activePage$.subscribe(page => {\n if (page) {\n this.activePageControl.setValue(page.name);\n this.hydrateUpdateModel();\n }\n });\n });\n }\n\n public createNewPage() {\n this.loading$.next(true);\n\n let name = `page-${this.activeProject.pages$.value.length + 1}`;\n // make sure we don't duplicate page names\n if (this.activeProject.pages$.value.find(page => page.name === name)) {\n name += '-copy';\n }\n\n this.activeProject.addPage({name, html: getProductionHtml(BLANK_PAGE_SKELETON)})\n .subscribe(() => {\n this.hydrateUpdateModel();\n this.activeProject.save().subscribe(() => {\n this.activePageControl.setValue(this.activeProject.activePage$.value.name);\n this.loading$.next(false);\n this.toast.open('Page created');\n });\n });\n }\n\n public canDeleteSelectedPage() {\n return this.activeProject.activePage$.value?.name?.toLowerCase() !== 'index' &&\n this.activeProject.pages$.value.length > 1;\n }\n\n public updateSelectedPage() {\n this.loading$.next(true);\n\n const pageValue = this.pageForm.getRawValue();\n this.builderDocument.setMetaTagValue('keywords', pageValue.keywords);\n this.builderDocument.setTitleValue(pageValue.title);\n this.builderDocument.setMetaTagValue('description', pageValue.description);\n this.builderDocument.contentChanged.next('builder');\n\n const newPage = {...pageValue, html: this.builderDocument.getOuterHtml()};\n\n this.activeProject.updatePage(this.activeProject.activePage$.value.name, newPage)\n .save({thumbnail: false})\n .subscribe(() => {\n this.loading$.next(false);\n this.toast.open('Page updated');\n });\n }\n\n public deleteSelectedPage() {\n this.loading$.next(true);\n\n this.activeProject.removePage(this.activeProject.activePage$.value);\n\n this.activeProject.save({thumbnail: false}).subscribe(() => {\n this.loading$.next(false);\n this.toast.open('Page deleted');\n });\n }\n\n public duplicateSelectedPage() {\n this.loading$.next(true);\n\n this.activeProject.addPage({\n name: this.activeProject.activePage$.value.name + '-copy',\n html: this.builderDocument.getOuterHtml(),\n });\n\n this.activeProject.save({thumbnail: false}).subscribe(() => {\n this.loading$.next(false);\n this.toast.open('Page duplicated');\n });\n }\n\n private hydrateUpdateModel() {\n const pageName = this.activeProject.activePage$.value.name;\n this.pageForm.patchValue({\n name: pageName,\n title: this.builderDocument.getTitleValue(),\n description: this.builderDocument.getMetaTagValue('description'),\n keywords: this.builderDocument.getMetaTagValue('keywords'),\n });\n if (pageName === 'index') {\n this.pageForm.get('name').disable();\n } else {\n this.pageForm.get('name').enable();\n }\n }\n}\n","<div class=\"content-panel many-inputs\">\r\n <div class=\"header\" trans>Project Settings</div>\r\n\r\n <div class=\"input-container\">\r\n <div class=\"fake-label\" trans>Template</div>\r\n <div class=\"box\">\r\n <div class=\"fake-input\" (click)=\"openTemplatesPanel()\">\r\n <span *ngIf=\"activeProject.activeTemplate\">{{activeProject.activeTemplate.name}}</span>\r\n <span *ngIf=\"!activeProject.activeTemplate\" trans>None</span>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" (click)=\"openTemplatesPanel()\" trans>Change</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-container\" *ngIf=\"!activeProject.activeTemplate\">\r\n <div class=\"fake-label\" trans>Theme</div>\r\n <div class=\"box\">\r\n <div class=\"fake-input\" (click)=\"openThemesPanel()\">{{activeProject.get()?.model?.theme || 'None'}}</div>\r\n <button mat-raised-button color=\"accent\" (click)=\"openThemesPanel()\" trans>Change</button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"content-panel many-inputs\">\r\n <div class=\"header\" trans>Builder Settings</div>\r\n\r\n <div class=\"setting-container\">\r\n <mat-slide-toggle color=\"accent\" [(ngModel)]=\"settings.autoSave\" (ngModelChange)=\"updateSettings()\" trans>Auto Save</mat-slide-toggle>\r\n <p trans>Toggle auto saving of project when changes are made in the builder.</p>\r\n </div>\r\n\r\n <div class=\"setting-container\">\r\n <mat-slide-toggle color=\"accent\" [(ngModel)]=\"settings.hoverBoxEnabled\" (ngModelChange)=\"updateSettings()\" trans>Hover Box</mat-slide-toggle>\r\n <p trans>Toggle visibility of box that appears when hovering over elements in the builder.</p>\r\n </div>\r\n\r\n <div class=\"setting-container\">\r\n <mat-slide-toggle color=\"accent\" [(ngModel)]=\"settings.selectedBoxEnabled\" (ngModelChange)=\"updateSettings()\" trans>Selected Box</mat-slide-toggle>\r\n <p trans>Toggle visibility of box that appears when clicking on element in the builder.</p>\r\n </div>\r\n</div>\r\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Overlay} from '@angular/cdk/overlay';\nimport {Inspector} from '../inspector.service';\nimport {ActiveProject} from '../../projects/active-project';\nimport {InspectorDrawer} from '../inspector-drawer.service';\nimport {LocalStorage} from '@common/core/services/local-storage.service';\n\n@Component({\n selector: 'settings-panel',\n templateUrl: './settings-panel.component.html',\n styleUrls: ['./settings-panel.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SettingsPanelComponent implements OnInit {\n public settings: {\n selectedBoxEnabled: boolean,\n hoverBoxEnabled: boolean,\n autoSave: boolean,\n };\n\n constructor(\n private overlay: Overlay,\n private inspector: Inspector,\n public activeProject: ActiveProject,\n private inspectorDrawer: InspectorDrawer,\n private localStorage: LocalStorage,\n ) {}\n\n ngOnInit() {\n this.hydrateModels();\n }\n\n public openTemplatesPanel() {\n this.inspectorDrawer.toggle('templates');\n }\n\n public openThemesPanel() {\n this.inspectorDrawer.toggle('themes');\n }\n\n public updateSettings() {\n for (const key in this.settings) {\n this.localStorage.set('settings.' + key, this.settings[key]);\n }\n }\n\n private hydrateModels() {\n this.settings = {\n hoverBoxEnabled: this.localStorage.get('settings.hoverBoxEnabled', true),\n selectedBoxEnabled: this.localStorage.get('settings.selectedBoxEnabled', true),\n autoSave: this.localStorage.get('settings.autoSave', false),\n };\n }\n}\n","<mat-tab-group color=\"accent\" [dynamicHeight]=\"true\" [selectedIndex]=\"selectedIndex\" (selectedTabChange)=\"switchDevice($event)\" #tabs>\n <mat-tab>\n <ng-template mat-tab-label><mat-icon svgIcon=\"phone-android\"></mat-icon></ng-template>\n\n <div class=\"device-description\">\n <mat-icon svgIcon=\"phone-android\"></mat-icon>\n <div class=\"name\" trans>Phone</div>\n <div class=\"size\">768px and Smaller</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label><mat-icon svgIcon=\"tablet-android\"></mat-icon></ng-template>\n\n <div class=\"device-description\">\n <mat-icon svgIcon=\"tablet-android\"></mat-icon>\n <div class=\"name\" trans>Tablet</div>\n <div class=\"size\">768px - 992px</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label><mat-icon svgIcon=\"laptop-chromebook\"></mat-icon></ng-template>\n\n <div class=\"device-description\">\n <mat-icon svgIcon=\"laptop-chromebook\"></mat-icon>\n <div class=\"name\" trans>Laptop</div>\n <div class=\"size\">992px - 1200px</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label><mat-icon svgIcon=\"desktop-windows\"></mat-icon></ng-template>\n\n <div class=\"device-description\">\n <mat-icon svgIcon=\"desktop-windows\"></mat-icon>\n <div class=\"name\" trans>Desktop</div>\n <div class=\"size\">1200px and Larger</div>\n </div>\n </mat-tab>\n</mat-tab-group>\n","import {Component, HostBinding, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {state, style, animate, transition, trigger} from '@angular/animations';\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\nimport {LivePreview} from '../../live-preview.service';\nimport {ContextBoxes} from '../../live-preview/context-boxes.service';\n\n@Component({\n selector: 'device-switcher',\n templateUrl: './device-switcher.component.html',\n styleUrls: ['./device-switcher.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('toggleAnimation', [\n state('false', style({height: '0px', visibility: 'hidden'})),\n state('true', style({height: '*', visibility: 'visible'})),\n transition('true <=> false',\n animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\n ])\n ]\n})\nexport class DeviceSwitcherComponent {\n @ViewChild('tabs', {static: true}) tabs: MatTabGroup;\n @HostBinding('@toggleAnimation') private visible = false;\n\n public selectedIndex = 3;\n\n constructor(\n private livePreview: LivePreview,\n private contextBoxes: ContextBoxes,\n ) {}\n\n /**\n * Toggle visibility of device switcher.\n */\n public toggleVisibility() {\n this.visible = !this.visible;\n }\n\n /**\n * Change live preview width based on selected tab.\n */\n public switchDevice(e: MatTabChangeEvent) {\n this.selectedIndex = e.index;\n this.livePreview.setWidth(this.getWidthFromIndex(e.index));\n this.contextBoxes.hideBoxes();\n }\n\n /**\n * Get width for live preview from specified tab index.\n */\n private getWidthFromIndex(index: number): any {\n switch (index) {\n case 0: return 'phone';\n case 1: return 'tablet';\n case 2: return 'laptop';\n case 3: return 'desktop';\n }\n }\n}\n","<nav class=\"inspector-nav mat-elevation-z3\">\r\n <a class=\"back-button\" [matTooltip]=\"'Dashboard' | trans\" routerLink=\"/dashboard\">\r\n <mat-icon svgIcon=\"keyboard-arrow-left\"></mat-icon>\r\n </a>\r\n\r\n <div class=\"panel-nav\">\r\n <button mat-button class=\"panel-nav-item\" [class.active]=\"inspector.activePanelIs('layout')\" (click)=\"inspector.togglePanel('layout')\">\r\n <mat-icon svgIcon=\"web-design-custom\"></mat-icon>\r\n <span class=\"name\" trans>Layout</span>\r\n </button>\r\n <button mat-button class=\"panel-nav-item\" [class.active]=\"inspector.activePanelIs('elements')\" (click)=\"inspector.togglePanel('elements')\">\r\n <mat-icon svgIcon=\"puzzle-custom\"></mat-icon>\r\n <span class=\"name\" trans>Elements</span>\r\n </button>\r\n <button mat-button class=\"panel-nav-item\" [class.active]=\"inspector.activePanelIs('inspector')\" (click)=\"inspector.togglePanel('inspector')\">\r\n <mat-icon svgIcon=\"brush-custom\"></mat-icon>\r\n <span class=\"name\" trans>Inspector</span>\r\n </button>\r\n <button mat-button class=\"panel-nav-item\" [class.active]=\"inspector.activePanelIs('pages')\" (click)=\"inspector.togglePanel('pages')\">\r\n <mat-icon svgIcon=\"documents-custom\"></mat-icon>\r\n <span class=\"name\" trans>Pages</span>\r\n </button>\r\n <button mat-button class=\"panel-nav-item\" [class.active]=\"inspector.activePanelIs('settings')\" (click)=\"inspector.togglePanel('settings')\">\r\n <mat-icon svgIcon=\"settings-custom\"></mat-icon>\r\n <span class=\"name\" trans>Settings</span>\r\n </button>\r\n <button mat-button class=\"panel-nav-item\" (click)=\"toggleCodeEditor()\" [disabled]=\"!currentUser.hasPermission('editors.enable')\">\r\n <mat-icon svgIcon=\"source-code-custom\"></mat-icon>\r\n <span class=\"name\" trans>Code Edtr</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"panel-nav undo-nav\">\r\n <button class=\"panel-nav-item\" mat-button [disabled]=\"!undoManager.canUndo()\" (click)=\"undoManager.undo()\">\r\n <mat-icon svgIcon=\"undo\"></mat-icon>\r\n <span class=\"name\" trans>Undo</span>\r\n </button>\r\n <button class=\"panel-nav-item\" mat-button [disabled]=\"!undoManager.canRedo()\" (click)=\"undoManager.redo()\">\r\n <mat-icon svgIcon=\"redo\"></mat-icon>\r\n <span class=\"name\" trans>Redo</span>\r\n </button>\r\n </div>\r\n</nav>\r\n\r\n<div class=\"inspector-content\">\r\n <div class=\"panel-container\">\r\n <elements-panel [class.hidden]=\"!inspector.activePanelIs('elements')\"></elements-panel>\r\n <inspector-panel [class.hidden]=\"!inspector.activePanelIs('inspector')\"></inspector-panel>\r\n <layout-panel [class.hidden]=\"!inspector.activePanelIs('layout')\"></layout-panel>\r\n <pages-panel [class.hidden]=\"!inspector.activePanelIs('pages')\"></pages-panel>\r\n <settings-panel [class.hidden]=\"!inspector.activePanelIs('settings')\"></settings-panel>\r\n </div>\r\n\r\n <device-switcher #deviceSwitcher></device-switcher>\r\n\r\n <div class=\"actions\">\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"activeProject.saving\" color=\"accent\"></mat-progress-bar>\r\n <button (click)=\"openPreview()\" [disabled]=\"activeProject.saving\" mat-button [matTooltip]=\"'Preview' | trans\"><mat-icon svgIcon=\"visibility\"></mat-icon></button>\r\n <button (click)=\"downloadProject()\" [disabled]=\"!currentUser.hasPermission('projects.download')\" mat-button [matTooltip]=\"'Download' | trans\"><mat-icon svgIcon=\"file-download\"></mat-icon></button>\r\n <button (click)=\"openPublishProjectModal()\" [disabled]=\"!currentUser.hasPermission('projects.publish')\" mat-button [matTooltip]=\"'Publish' | trans\"><mat-icon svgIcon=\"publish\"></mat-icon></button>\r\n <button (click)=\"toggleDeviceSwitcher()\" mat-button [matTooltip]=\"'Change device' | trans\"><mat-icon svgIcon=\"phone-android\"></mat-icon></button>\r\n <button (click)=\"saveProject()\" [disabled]=\"activeProject.saving\" mat-button [matTooltip]=\"'Save project' | trans\"><mat-icon svgIcon=\"save\"></mat-icon></button>\r\n </div>\r\n</div>","import {Component, ElementRef, OnInit, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {Inspector} from './inspector.service';\nimport {UndoManager} from '../undo-manager/undo-manager.service';\nimport {CodeEditor} from '../live-preview/code-editor/code-editor.service';\nimport {ActiveProject} from '../projects/active-project';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {DeviceSwitcherComponent} from './device-switcher/device-switcher.component';\nimport {ContextBoxes} from '../live-preview/context-boxes.service';\nimport {Projects} from '../../shared/projects/projects.service';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {PublishProjectModalComponent} from '../../shared/projects/publish-project-modal/publish-project-modal.component';\nimport {Settings} from '@common/core/config/settings.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {downloadFileFromUrl} from '@common/uploads/utils/download-file-from-url';\n\n@Component({\n selector: 'inspector',\n templateUrl: './inspector.component.html',\n styleUrls: ['./inspector.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class InspectorComponent implements OnInit {\n @ViewChild('deviceSwitcher', {static: true}) private deviceSwitcher: DeviceSwitcherComponent;\n\n /**\n * InspectorComponent Constructor.\n */\n constructor(\n public inspector: Inspector,\n public undoManager: UndoManager,\n private codeEditor: CodeEditor,\n private projects: Projects,\n public activeProject: ActiveProject,\n private toast: Toast,\n private el: ElementRef,\n private settings: Settings,\n private contextBoxes: ContextBoxes,\n private modal: Modal,\n public currentUser: CurrentUser,\n ) {}\n\n ngOnInit() {\n this.codeEditor.setOrigin(this.el);\n this.inspector.elementRef = this.el;\n\n this.el.nativeElement.addEventListener('mouseenter', (e) => {\n this.contextBoxes.hideBox('hover');\n });\n }\n\n /**\n * Toggle code editor visibility.\n */\n public toggleCodeEditor() {\n this.codeEditor.toggle();\n }\n\n /**\n * Save project on the server.\n */\n public saveProject() {\n this.activeProject.save().subscribe(() => {\n this.toast.open('Project saved');\n });\n }\n\n /**\n * Open modal for publishing currently active project.\n */\n public openPublishProjectModal() {\n this.modal.open(PublishProjectModalComponent, {project: this.activeProject.get().model});\n }\n\n /**\n * Open active project preview in new window.\n */\n public openPreview() {\n const newWindow = window.open('loading', '_blank');\n this.activeProject.save().subscribe(() => {\n let baseUrl = this.activeProject.getSiteUrl();\n const activePage = this.activeProject.activePage$.value;\n if (activePage && activePage.name && activePage.name !== 'index') baseUrl += '/' + activePage.name;\n newWindow.location.replace(baseUrl);\n });\n }\n\n /**\n * Toggle visibility of device switcher panel.\n */\n public toggleDeviceSwitcher() {\n this.deviceSwitcher.toggleVisibility();\n }\n\n /**\n * Initiate download of currently active project.\n */\n public downloadProject() {\n this.activeProject.save({thumbnail: false}).subscribe(() => {\n downloadFileFromUrl(this.settings.getBaseUrl(true) + 'secure/projects/' + this.activeProject.get().model.id + '/download');\n });\n }\n}\n","/**\r\n * Download file from specified url.\r\n */\r\nexport function downloadFileFromUrl(url: string, name?: string) {\r\n const link = document.createElement('a');\r\n link.href = url;\r\n if (name) link.download = name;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n}\r\n","import {ContentChildren, Directive, ElementRef, NgZone, QueryList, Renderer2} from '@angular/core';\nimport {LivePreview} from '../../live-preview.service';\nimport {UndoManager} from '../../undo-manager/undo-manager.service';\nimport {Elements} from '../../elements/elements.service';\nimport {BaseDragAndDrop} from './base-drag-and-drop';\nimport {SelectedElement} from '../selected-element.service';\nimport {BuilderDocument} from '../../builder-document.service';\nimport {DragVisualHelper} from './drag-visual-helper/drag-visual-helper.service';\n\n@Directive({\n selector: '[previewDragAndDrop]'\n})\nexport class PreviewDragAndDropDirective extends BaseDragAndDrop {\n @ContentChildren('dragHandle') dragElements: QueryList<ElementRef>;\n\n constructor(\n protected livePreview: LivePreview,\n protected renderer: Renderer2,\n protected undoManager: UndoManager,\n protected elements: Elements,\n protected zone: NgZone,\n protected selectedElement: SelectedElement,\n protected builderDocument: BuilderDocument,\n protected dragHelper: DragVisualHelper,\n ) {\n super();\n }\n\n protected getDragHandles() {\n return document.querySelectorAll('.context-box-drag-handle');\n }\n\n protected setDragElement(e: HammerInput) {\n if (e.target.closest('.selected-box')) {\n this.dragEl = this.livePreview.selected;\n } else {\n this.dragEl = this.livePreview.hover;\n }\n }\n\n protected sortColumns(node: HTMLElement, e: HammerInput) {\n if ( ! node.parentElement) return;\n\n const className = node.parentElement.className;\n\n if (node === this.dragEl.node || node.parentElement !== this.dragEl.node.parentElement) return;\n\n // constrain column ordering withing row\n if (className && className.match('row')) {\n\n // switch column positions\n if (e.direction === Hammer.DIRECTION_RIGHT) {\n this.dragEl.node['before'](node);\n } else if (e.direction === Hammer.DIRECTION_LEFT) {\n this.dragEl.node['after'](node);\n }\n\n this.livePreview.repositionBox('selected');\n }\n }\n}\n","import {AfterViewInit, Directive, ElementRef, Input, NgZone} from '@angular/core';\nimport {SelectedElement} from '../selected-element.service';\nimport {ContextBoxes} from '../context-boxes.service';\nimport {LivePreview} from '../../live-preview.service';\n\nconst IFRAME_OFFSET = 380;\n\n@Directive({\n selector: '[elementResizer]'\n})\nexport class ElementResizerDirective implements AfterViewInit {\n @Input() contextBoxType: 'selected'|'hover';\n protected dragOverlay: HTMLElement;\n private node: HTMLElement;\n private aspectRatio: number;\n private previewWidth: number;\n private previewHeight: number;\n\n constructor(\n private zone: NgZone,\n private el: ElementRef<HTMLElement>,\n private contextBoxes: ContextBoxes,\n private livePreview: LivePreview,\n ) {}\n\n ngAfterViewInit(): void {\n this.dragOverlay = document.querySelector('.drag-overlay') as HTMLElement;\n\n // account for scrollbar\n const iframeBody = this.livePreview.getIframe().contentDocument.body;\n this.previewWidth = iframeBody.clientWidth - 20;\n this.previewHeight = iframeBody.scrollHeight - 20;\n\n this.zone.runOutsideAngular(() => {\n const hammer = new Hammer.Manager(this.el.nativeElement);\n const pan = new Hammer.Pan({direction: Hammer.DIRECTION_ALL, threshold: 0});\n hammer.add([pan]);\n\n hammer.on('panstart', e => this.handleDragStart(e));\n hammer.on('panmove', e => this.handleDrag(e));\n hammer.on('panend', e => this.handleDragEnd(e));\n });\n }\n\n private handleDragStart(e: HammerInput) {\n this.node = this.livePreview[this.contextBoxType].node;\n const rect = this.node.getBoundingClientRect();\n this.aspectRatio = rect.width / rect.height;\n this.dragOverlay.style.display = 'block';\n\n this.node.style.maxWidth = 'none';\n this.node.style.maxHeight = 'none';\n }\n\n private handleDrag(e: HammerInput) {\n const rect = this.node.getBoundingClientRect();\n const clientX = e.center.x - IFRAME_OFFSET;\n const minWidth = 10;\n const minHeight = 10;\n\n // trying to scroll (and resize) element beyond preview width, bail\n if (this.previewWidth <= clientX) {\n return;\n }\n\n // trying to scroll (and resize) element beyond preview body height, bail\n if (this.previewHeight <= e.center.y) {\n return;\n }\n\n // calc new width\n const newWidth = clientX - rect.left;\n let finalWidth = newWidth < minWidth ? minWidth : newWidth;\n\n // calc new height\n const newHeight = e.center.y - rect.top;\n let finalHeight = newHeight < minHeight ? minHeight : newHeight;\n\n // adjust aspect ratio\n if (this.livePreview[this.contextBoxType].isImage) {\n ({finalWidth, finalHeight} = this.resizeAndPreserveAspectRatio(finalWidth, finalHeight));\n }\n\n // if image was scaled lower then min width or min height, bail\n if (finalWidth < minWidth || finalHeight < minHeight) {\n return;\n }\n\n this.node.style.width = finalWidth + 'px';\n this.node.style.height = finalHeight + 'px';\n\n this.contextBoxes.repositionBox('selected', this.node);\n }\n\n private handleDragEnd(e: HammerInput) {\n this.dragOverlay.style.display = 'none';\n }\n\n public resizeAndPreserveAspectRatio(oldWidth: number, oldHeight: number) {\n let newWidth = oldWidth,\n newHeight = oldHeight;\n\n if (oldHeight * this.aspectRatio > oldWidth) {\n newHeight = oldWidth / this.aspectRatio;\n } else {\n newWidth = oldHeight * this.aspectRatio;\n }\n\n return {finalWidth: newWidth, finalHeight: newHeight};\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input\n} from '@angular/core';\nimport {ContextBoxes} from '../context-boxes.service';\nimport {SelectedElement} from '../selected-element.service';\nimport {BuilderDocumentActions} from '../../builder-document-actions.service';\nimport {InlineTextEditor} from '../inline-text-editor/inline-text-editor.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {Inspector} from '../../inspector/inspector.service';\nimport {ActiveProject} from '../../projects/active-project';\nimport {LivePreview} from '../../live-preview.service';\nimport {Elements} from '../../elements/elements.service';\nimport {LinkEditor} from '../link-editor/link-editor.service';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {UploadInputTypes} from '@common/uploads/upload-input-config';\nimport {openUploadWindow} from '@common/uploads/utils/open-upload-window';\n\n@Component({\n selector: 'context-box',\n templateUrl: './context-box.component.html',\n styleUrls: ['./context-box.component.scss'],\n providers: [UploadQueueService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContextBoxComponent {\n @Input() type: 'selected'|'hover' = 'hover';\n @HostBinding('class.type-selected') get typeSelected() {\n return this.type === 'selected';\n }\n\n constructor(\n public livePreview: LivePreview,\n private builderActions: BuilderDocumentActions,\n private selectedElement: SelectedElement,\n private inspector: Inspector,\n private modal: Modal,\n private activeProject: ActiveProject,\n private contextBoxes: ContextBoxes,\n private inlineTextEditor: InlineTextEditor,\n public el: ElementRef<HTMLElement>,\n private elements: Elements,\n private linkEditor: LinkEditor,\n private uploadQueue: UploadQueueService,\n ) {}\n\n public deleteNode() {\n this.builderActions.removeNode(this.livePreview[this.type].node);\n }\n\n public editNode() {\n const node = this.livePreview[this.type].node;\n if (this.elements.isLayout(node)) {\n this.inspector.openPanel('layout');\n } else if (this.elements.isImage(node)) {\n this.openUploadImageModal();\n } else if (this.elements.isLink(node)) {\n this.linkEditor.open(node as HTMLLinkElement);\n } else if (this.elements.isIcon(node)) {\n this.inlineTextEditor.open(node, {activePanel: 'icons'});\n } else if (this.elements.canModifyText(this.elements.match(node))) {\n this.contextBoxes.hideBoxes();\n this.inlineTextEditor.open(node);\n } else {\n this.selectedElement.selectNode(node);\n this.inspector.togglePanel('inspector');\n }\n }\n\n private openUploadImageModal() {\n const config = {uri: 'uploads/images', httpParams: {diskPrefix: this.activeProject.getBaseUrl(true) + 'images'}};\n openUploadWindow({types: [UploadInputTypes.image]}).then(files => {\n this.uploadQueue.start(files, config).subscribe(response => {\n (this.livePreview[this.type].node as HTMLImageElement).src = this.activeProject.getImageUrl(response.fileEntry);\n });\n });\n }\n}\n","<div [class.hidden]=\"type !== 'hover'\">\n <div class=\"context-box-toolbar\">\n <button class=\"no-style action-button edit-button\" (click)=\"editNode()\" title=\"Edit Element\">\n <mat-icon svgIcon=\"settings\" class=\"settings-icon\"></mat-icon>\n </button>\n <button type=\"button\" class=\"no-style action-button drag-button context-box-drag-handle\" title=\"Drag Element\">\n <mat-icon svgIcon=\"drag-indicator\" class=\"drag-icon\"></mat-icon>\n </button>\n <button class=\"no-style action-button delete-button\" (click)=\"deleteNode()\" title=\"Move Delete\">\n <mat-icon svgIcon=\"close\" class=\"delete-icon\"></mat-icon>\n </button>\n </div>\n\n <button class=\"no-style resize-button\" elementResizer [contextBoxType]=\"type\"></button>\n</div>\n","import {\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {LivePreview} from '../live-preview.service';\nimport {ContextBoxes} from './context-boxes.service';\nimport {ContextBoxComponent} from './context-box/context-box.component';\nimport {fromEvent, Subscription} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\n@Component({\n selector: 'live-preview',\n templateUrl: './live-preview.component.html',\n styleUrls: ['./live-preview.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LivePreviewComponent implements OnInit, OnDestroy {\n @ViewChild('iframe', {static: true}) iframe: ElementRef;\n @ViewChild('hoverBox', {static: true}) hoverBox: ContextBoxComponent;\n @ViewChild('selectedBox', {static: true}) selectedBox: ContextBoxComponent;\n @ViewChild('dragOverlay', {static: true}) dragOverlay: ElementRef<HTMLElement>;\n private wheelSub: Subscription;\n\n constructor(\n public livePreview: LivePreview,\n private contextBoxes: ContextBoxes,\n ) {}\n\n ngOnInit() {\n this.contextBoxes.set(this.hoverBox.el.nativeElement, this.selectedBox.el.nativeElement, this.iframe);\n this.livePreview.iframe = this.iframe.nativeElement;\n\n this.wheelSub = fromEvent(window, 'wheel')\n .pipe(filter(() => this.livePreview.dragging))\n .subscribe((e: WheelEvent) => {\n this.livePreview.iframe.contentDocument.documentElement.scrollTop += e.deltaY;\n });\n }\n\n ngOnDestroy() {\n this.wheelSub.unsubscribe();\n }\n}\n","<div class=\"width-container\" [ngClass]=\"livePreview.activeWidth\" previewDragAndDrop>\r\n <div class=\"highlights\">\r\n <context-box class=\"hidden\" type=\"hover\" #hoverBox></context-box>\r\n <context-box class=\"hidden\" type=\"selected\" #selectedBox></context-box>\r\n </div>\r\n <iframe #iframe></iframe>\r\n <div class=\"drag-overlay\" #dragOverlay></div>\r\n</div>","import {Component, ElementRef, Renderer2, ViewEncapsulation} from '@angular/core';\nimport {DragVisualHelper} from \"./drag-visual-helper.service\";\n\n@Component({\n selector: 'drag-visual-helper',\n templateUrl: './drag-visual-helper.component.html',\n styleUrls: ['./drag-visual-helper.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DragVisualHelperComponent {\n constructor(\n public renderer: Renderer2,\n public el: ElementRef,\n public dragHelper: DragVisualHelper,\n ) {}\n}","<div class=\"name\">{{dragHelper.getName()}}</div>","import {ChangeDetectionStrategy, Component, HostBinding, Input} from '@angular/core';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\n\n@Component({\n selector: 'main-loader',\n templateUrl: './main-loader.component.html',\n styleUrls: ['./main-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('visibility', [\n state('true', style({\n opacity: '1',\n display: '*',\n })),\n state('false', style({\n opacity: '0',\n display: 'none'\n })),\n transition('true => false', animate('500ms cubic-bezier(.4,0,.2,1)'))\n ]),\n ]\n})\nexport class MainLoaderComponent {\n @Input() @HostBinding('@visibility') visible = true;\n}\n","<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n<div class=\"loader-box-container\">\n <div class=\"loader-box\">\n <div class=\"left\">\n <skeleton variant=\"rect\"></skeleton>\n </div>\n <div class=\"right\">\n <skeleton variant=\"text\"></skeleton>\n <skeleton variant=\"text\"></skeleton>\n <skeleton variant=\"text\"></skeleton>\n </div>\n </div>\n <div class=\"loader-text\" trans>Loading</div>\n</div>\n","<div class=\"templates\">\n <div class=\"template\" *ngFor=\"let template of templates\" (click)=\"applyTemplate(template)\" [class.disabled]=\"mainLoader.loading$ | async\">\n <img [src]=\"getThumbnailUrl(template)\">\n <div class=\"name\">{{template?.config?.name || template.name}}</div>\n </div>\n</div>\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Settings} from '@common/core/config/settings.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {ActiveProject} from '../../../projects/active-project';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {InspectorDrawer} from '../../inspector-drawer.service';\nimport {BuilderTemplate} from '../../../../shared/builder-types';\nimport {Templates} from '../../../../shared/templates/templates.service';\nimport {ConfirmModalComponent} from '@common/core/ui/confirm-modal/confirm-modal.component';\nimport {finalize} from 'rxjs/operators';\nimport {MainLoaderService} from '../../../main-loader/main-loader.service';\n\n@Component({\n selector: 'templates-panel',\n templateUrl: './templates-panel.component.html',\n styleUrls: ['./templates-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TemplatesPanelComponent implements OnInit {\n public templates: BuilderTemplate[] = [];\n\n constructor(\n private templatesApi: Templates,\n private settings: Settings,\n private activeProject: ActiveProject,\n private modal: Modal,\n private toast: Toast,\n private inspectorDrawer: InspectorDrawer,\n public mainLoader: MainLoaderService,\n ) {}\n\n ngOnInit() {\n this.templatesApi.all({perPage: 25}).subscribe(response => {\n this.templates = response.pagination.data;\n });\n }\n\n public applyTemplate(template: BuilderTemplate) {\n this.modal.open(ConfirmModalComponent, {\n title: 'Apply Template',\n body: 'Are you sure you want to apply this template?',\n bodyBold: 'This will erase all the current contents of your project.',\n ok: 'Apply'\n }).afterClosed().subscribe(result => {\n if ( ! result) return;\n this.mainLoader.loading$.next(true);\n this.inspectorDrawer.close();\n\n this.activeProject.applyTemplate(template.name)\n .pipe(finalize(() => this.mainLoader.loading$.next(false)))\n .subscribe(() => {\n this.toast.open('Template applied');\n });\n });\n }\n\n /**\n * Get absolute url for specified template's thumbnail.\n */\n public getThumbnailUrl(template: BuilderTemplate) {\n return this.settings.getBaseUrl(true) + template.thumbnail;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpCacheClient} from '@common/core/http/http-cache-client';\nimport {Theme} from '../shared/themes/Theme';\nimport {Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Themes {\n\n /**\n * Themes API service constructor.\n */\n constructor(private http: HttpCacheClient) {}\n\n /**\n * Get all available themes.\n */\n public all(): Observable<{themes: Theme[]}> {\n return this.http.get('themes');\n }\n}\n","<div class=\"themes\">\n <button (click)=\"applyTheme()\" *ngIf=\"themeIsActive()\" class=\"remove-button\" mat-raised-button color=\"warn\" trans>Remove</button>\n\n <div class=\"theme\" *ngFor=\"let theme of themes\" (click)=\"applyTheme(theme)\" [class.disabled]=\"mainLoader.loading$ | async\" [class.active]=\"themeIsActive(theme)\">\n <img [src]=\"getThumbnailUrl(theme)\">\n <div class=\"name\">{{theme.name}}</div>\n </div>\n</div>\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Themes} from '../../../themes.service';\nimport {InspectorDrawer} from '../../inspector-drawer.service';\nimport {ActiveProject} from '../../../projects/active-project';\nimport {Theme} from '../../../../shared/themes/Theme';\nimport {Settings} from '../../../../../common/core/config/settings.service';\nimport {Toast} from '../../../../../common/core/ui/toast.service';\nimport {MainLoaderService} from '../../../main-loader/main-loader.service';\n\n@Component({\n selector: 'themes-panel',\n templateUrl: './themes-panel.component.html',\n styleUrls: ['./themes-panel.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ThemesPanelComponent implements OnInit {\n public themes: Theme[] = [];\n\n constructor(\n private themesApi: Themes,\n public mainLoader: MainLoaderService,\n private inspectorDrawer: InspectorDrawer,\n private activeProject: ActiveProject,\n private toast: Toast,\n private settings: Settings,\n ) {}\n\n ngOnInit() {\n this.themesApi.all().subscribe(response => {\n this.themes = response.themes;\n });\n }\n\n public applyTheme(theme?: Theme) {\n this.mainLoader.loading$.next(true);\n this.inspectorDrawer.close();\n this.activeProject.applyTheme(theme).subscribe(() => {\n this.mainLoader.loading$.next(false);\n });\n }\n\n /**\n * Get absolute url for specified theme's thumbnail.\n */\n public getThumbnailUrl(theme: Theme) {\n return this.settings.getBaseUrl(true) + '/' + theme.thumbnail;\n }\n\n /**\n * Check if specified theme is currently active.\n */\n public themeIsActive(theme?: Theme) {\n // check if any theme is active\n if ( ! theme) return this.activeProject.get().model.theme;\n\n // check if specified theme is active\n return this.activeProject.get().model.theme === theme.name;\n }\n}\n","<inspector [@bodyExpansion]=\"!inspectorHidden\"></inspector>\r\n\r\n<mat-drawer-container>\r\n <mat-drawer #inspectorDrawer>\r\n <templates-panel *ngIf=\"getInspectorDrawerPanel() === 'templates'\"></templates-panel>\r\n <themes-panel *ngIf=\"getInspectorDrawerPanel() === 'themes'\"></themes-panel>\r\n </mat-drawer>\r\n <mat-drawer-content>\r\n <live-preview></live-preview>\r\n </mat-drawer-content>\r\n</mat-drawer-container>\r\n\r\n<drag-visual-helper class=\"drag-helper\" #dragHelper></drag-visual-helper>\r\n\r\n<button type=\"button\" mat-mini-fab color=\"accent\" class=\"mobile-toggle-button\" (click)=\"toggleInspector()\">\r\n <mat-icon svgIcon=\"menu\"></mat-icon>\r\n</button>\r\n\r\n<main-loader [visible]=\"mainLoader.loading$ | async\" [class.partial]=\"mainLoader.loadedAtLeastOnce$ | async\"></main-loader>\r\n\r\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {HtmlBuilderComponent} from './html-builder/html-builder.component';\nimport {AuthGuard} from '@common/guards/auth-guard.service';\n\nconst routes: Routes = [\n {\n path: ':id',\n component: HtmlBuilderComponent,\n canActivate: [AuthGuard],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class HtmlBuilderRoutingModule {\n}\n","import {\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {Elements} from '../elements/elements.service';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {ActiveProject} from '../projects/active-project';\r\nimport {MatDrawer} from '@angular/material/sidenav';\r\nimport {InspectorDrawer} from '../inspector/inspector-drawer.service';\r\nimport {DragVisualHelperComponent} from '../live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component';\r\nimport {DragVisualHelper} from '../live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.service';\r\nimport {CodeEditor} from '../live-preview/code-editor/code-editor.service';\r\nimport {Inspector} from '../inspector/inspector.service';\r\nimport {InlineTextEditor} from '../live-preview/inline-text-editor/inline-text-editor.service';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\r\nimport {LivePreview} from '../live-preview.service';\r\nimport {ElementsApi} from '../elements/elements-api.service';\r\nimport {BuilderDocument} from '../builder-document.service';\r\nimport {forkJoin} from 'rxjs';\r\nimport {tap} from 'rxjs/operators';\r\nimport {Projects} from '../../shared/projects/projects.service';\r\nimport {OverlayPanel} from '../../../common/core/ui/overlay-panel/overlay-panel.service';\r\nimport {LinkEditor} from '../live-preview/link-editor/link-editor.service';\r\nimport {Modal} from '../../../common/core/ui/dialogs/modal.service';\r\nimport {ContextMenu} from '../../../common/core/ui/context-menu/context-menu.service';\r\nimport {LayoutPanel} from '../inspector/layout-panel/layout-panel.service';\r\nimport {MainLoaderService} from '../main-loader/main-loader.service';\r\nimport {InspectorFloatingPanel} from '../inspector/inspector-floating-panel.service';\r\nimport {UndoManager} from '../undo-manager/undo-manager.service';\r\nimport {CurrentUser} from '../../../common/auth/current-user';\r\n\r\n@Component({\r\n selector: 'html-builder',\r\n templateUrl: './html-builder.component.html',\r\n styleUrls: ['./html-builder.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n ActiveProject,\r\n LivePreview,\r\n BuilderDocument,\r\n Modal,\r\n OverlayPanel,\r\n LinkEditor,\r\n CodeEditor,\r\n ContextMenu,\r\n InlineTextEditor,\r\n LayoutPanel,\r\n MainLoaderService,\r\n InspectorFloatingPanel,\r\n UndoManager\r\n ],\r\n animations: [\r\n trigger('bodyExpansion', [\r\n state('false', style({height: '0px', visibility: 'hidden'})),\r\n state('true', style({height: '*', visibility: 'visible'})),\r\n transition('true <=> false',\r\n animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\r\n ])\r\n ]\r\n})\r\nexport class HtmlBuilderComponent implements OnInit, OnDestroy {\r\n @ViewChild('inspectorDrawer', {static: true}) drawer: MatDrawer;\r\n @ViewChild('dragHelper', {static: true}) dragHelper: DragVisualHelperComponent;\r\n @ViewChild('loaderEl', {static: true}) loaderEl: ElementRef;\r\n public inspectorHidden = false;\r\n\r\n constructor(\r\n private elements: Elements,\r\n private elementsApi: ElementsApi,\r\n private route: ActivatedRoute,\r\n private activeProject: ActiveProject,\r\n public inspectorDrawer: InspectorDrawer,\r\n private dragVisualHelper: DragVisualHelper,\r\n private codeEditor: CodeEditor,\r\n private inspector: Inspector,\r\n private inlineTextEditor: InlineTextEditor,\r\n private breakpoints: BreakpointsService,\r\n private builderDocument: BuilderDocument,\r\n private projectApi: Projects,\r\n private livePreview: LivePreview,\r\n public mainLoader: MainLoaderService,\r\n private currentUser: CurrentUser,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n forkJoin([\r\n this.projectApi.get(this.route.snapshot.params.id).pipe(tap(response => {\r\n this.activeProject.setProject(response.project);\r\n this.livePreview.init();\r\n })),\r\n this.elementsApi.getCustom().pipe(tap(r => this.elements.init(r))),\r\n this.builderDocument.loaded$,\r\n ]).subscribe(() => {\r\n if ( ! this.canOpenProjectInBuilder()) {\r\n this.router.navigate(['/dashboard']);\r\n }\r\n this.mainLoader.loading$.next(false);\r\n this.inspectorDrawer.setDrawer(this.drawer);\r\n this.dragVisualHelper.setComponent(this.dragHelper);\r\n });\r\n this.inspectorHidden = this.breakpoints.isMobile$.value;\r\n }\r\n\r\n private canOpenProjectInBuilder(): boolean {\r\n return this.currentUser.hasPermission('projects.update') ||\r\n !!this.activeProject.project.model.users.find(u => u.id === this.currentUser.get('id'));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.codeEditor.close();\r\n this.inspector.reset();\r\n this.inlineTextEditor.close();\r\n }\r\n\r\n public getInspectorDrawerPanel(): string {\r\n return this.inspectorDrawer.activePanel;\r\n }\r\n\r\n public toggleInspector() {\r\n this.inspectorHidden = !this.inspectorHidden;\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HtmlBuilderComponent} from './html-builder/html-builder.component';\nimport {HtmlBuilderRoutingModule} from './html-builder-routing.module';\nimport {InspectorComponent} from './inspector/inspector.component';\nimport {LivePreviewComponent} from './live-preview/live-preview.component';\nimport {PreviewDragAndDropDirective} from './live-preview/drag-and-drop/preview-drag-and-drop.directive';\nimport {ElementsPanelComponent} from './inspector/elements-panel/elements-panel.component';\nimport {InspectorPanelComponent} from './inspector/inspector-panel/inspector-panel.component';\nimport {AttributesPanelComponent} from './inspector/inspector-panel/attributes-panel/attributes-panel.component';\nimport {SpacingPanelComponent} from './inspector/inspector-panel/spacing-panel/spacing-panel.component';\nimport {BorderStyleControlsComponent} from './inspector/inspector-panel/border-style-controls/border-style-controls.component';\nimport {SideControlBorderComponent} from './inspector/inspector-panel/spacing-panel/side-control-border/side-control-border.component';\nimport {TextStylePanelComponent} from './inspector/inspector-panel/text-style-panel/text-style-panel.component';\nimport {BackgroundPanelComponent} from './inspector/inspector-panel/background-panel/background-panel.component';\nimport {GradientBackgroundPanelComponent} from './inspector/inspector-panel/background-panel/gradient-background-panel/gradient-background-panel.component';\nimport {GoogleFontsPanelComponent} from './inspector/inspector-panel/text-style-panel/google-fonts-panel/google-fonts-panel.component';\nimport {ImageBackgroundPanelComponent} from './inspector/inspector-panel/background-panel/image-background-panel/image-background-panel.component';\nimport {ShadowsPanelComponent} from './inspector/inspector-panel/shadows-panel/shadows-panel.component';\nimport {DragVisualHelperComponent} from './live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component';\nimport {LayoutPanelComponent} from './inspector/layout-panel/layout-panel.component';\nimport {ColumnPresetsComponent} from './inspector/layout-panel/column-presets/column-presets.component';\nimport {DragElementsDirective} from './live-preview/drag-and-drop/drag-elements.directive';\nimport {InlineTextEditorComponent} from './live-preview/inline-text-editor/inline-text-editor.component';\nimport {CodeEditorComponent} from './live-preview/code-editor/code-editor.component';\nimport {LivePreviewContextMenuComponent} from './live-preview/live-preview-context-menu/live-preview-context-menu.component';\nimport {PagesPanelComponent} from './inspector/pages-panel/pages-panel.component';\nimport {SettingsPanelComponent} from './inspector/settings-panel/settings-panel.component';\nimport {TemplatesPanelComponent} from './inspector/settings-panel/templates-panel/templates-panel.component';\nimport {ThemesPanelComponent} from './inspector/settings-panel/themes-panel/themes-panel.component';\nimport {ContextBoxComponent} from './live-preview/context-box/context-box.component';\nimport {LinkEditorComponent} from './live-preview/link-editor/link-editor.component';\nimport {DeviceSwitcherComponent} from './inspector/device-switcher/device-switcher.component';\nimport {MaterialModule} from '../material.module';\nimport {SharedModule} from '../shared/shared.module';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {MatSliderModule} from '@angular/material/slider';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\nimport {ReorderLayoutItemsDirective} from './inspector/layout-panel/reorder-layout-items.directive';\nimport {ElementResizerDirective} from './live-preview/drag-and-drop/element-resizer.directive';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport {NoResultsMessageModule} from '@common/core/ui/no-results-message/no-results-message.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MainLoaderComponent} from './main-loader/main-loader.component';\nimport {SkeletonModule} from '../../common/core/ui/skeleton/skeleton.module';\n\n@NgModule({\n imports: [\n CommonModule,\n SharedModule,\n MaterialModule,\n HtmlBuilderRoutingModule,\n TranslationsModule,\n LoadingIndicatorModule,\n NoResultsMessageModule,\n FormsModule,\n ReactiveFormsModule,\n SkeletonModule,\n\n // material\n MatSidenavModule,\n MatExpansionModule,\n MatSliderModule,\n MatChipsModule,\n PortalModule,\n OverlayModule,\n MatTabsModule,\n MatRadioModule,\n DragDropModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n ],\n declarations: [\n HtmlBuilderComponent,\n InspectorComponent,\n LivePreviewComponent,\n PreviewDragAndDropDirective,\n ElementsPanelComponent,\n InspectorPanelComponent,\n AttributesPanelComponent,\n SpacingPanelComponent,\n BorderStyleControlsComponent,\n SideControlBorderComponent,\n TextStylePanelComponent,\n BackgroundPanelComponent,\n GradientBackgroundPanelComponent,\n GoogleFontsPanelComponent,\n ImageBackgroundPanelComponent,\n ShadowsPanelComponent,\n DragVisualHelperComponent,\n LayoutPanelComponent,\n ColumnPresetsComponent,\n DragElementsDirective,\n InlineTextEditorComponent,\n CodeEditorComponent,\n LivePreviewContextMenuComponent,\n PagesPanelComponent,\n SettingsPanelComponent,\n TemplatesPanelComponent,\n ThemesPanelComponent,\n ContextBoxComponent,\n LinkEditorComponent,\n DeviceSwitcherComponent,\n ReorderLayoutItemsDirective,\n ElementResizerDirective,\n MainLoaderComponent,\n ]\n})\nexport class HtmlBuilderModule {\n}\n","import {LivePreview} from \"../../live-preview.service\";\r\nimport {selectNode} from '../../../../common/shared/appearance/utils/select-node';\r\n\r\nexport const bootstrapElements = [];\r\n\r\nbootstrapElements.push({\r\n name: 'page header',\r\n nodes: '*',\r\n 'class': 'page-header',\r\n html: '<div class=\"page-header\">' +\r\n '<h1>Example page header <small>Header subtext</small></h1>' +\r\n '</div>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'typography',\r\n previewScale: '0.4',\r\n icon: 'header-custom'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'progress bar',\r\n nodes: '*',\r\n 'class': 'progress',\r\n html: `<div class=\"progress\">\r\n <div class=\"progress-bar\" role=\"progressbar\" style=\"width: 50%\" aria-valuenow=\"50\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\r\n</div>`,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'components',\r\n icon: 'show-chart'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'list group',\r\n nodes: '*',\r\n 'class': 'list-group',\r\n html: `<ul class=\"list-group\">\r\n <li class=\"list-group-item\">Cras justo odio</li>\r\n <li class=\"list-group-item\">Dapibus ac facilisis in</li>\r\n <li class=\"list-group-item\">Morbi leo risus</li>\r\n <li class=\"list-group-item\">Porta ac consectetur ac</li>\r\n <li class=\"list-group-item\">Vestibulum at eros</li>\r\n</ul>`,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'components',\r\n icon: 'view-list',\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'card',\r\n nodes: '*',\r\n 'class': 'card',\r\n html: `<div class=\"card\" style=\"width: 18rem;\">\r\n <img src=\"https://via.placeholder.com/286x160?text=Placeholder%20Image\" class=\"card-img-top\" alt=\"\">\r\n <div class=\"card-body\">\r\n <h5 class=\"card-title\">Card title</h5>\r\n <p class=\"card-text\">Some quick example text to build on the card title and make up the bulk of the card's content.</p>\r\n <a href=\"#\" class=\"btn btn-primary\">Go somewhere</a>\r\n </div>\r\n</div>`,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'components',\r\n icon: 'crop-portrait'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'container',\r\n nodes: '*',\r\n 'class': 'container',\r\n html: '<div class=\"container\"></div>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'layout',\r\n dragHelper: true,\r\n icon: 'crop-square',\r\n attributes: {\r\n type: {\r\n list: [\r\n {name: 'Default', value: 'container'},\r\n {name: 'Wide', value: 'container-fluid'},\r\n ],\r\n value: 'container',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, size: string) {\r\n //strip any previously assigned size classes from the node\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(size);\r\n }\r\n }\r\n },\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'row',\r\n nodes: '*',\r\n frameworks: ['bootstrap'],\r\n 'class': 'row',\r\n html: '<section class=\"row\"><div class=\"col-md-4\"></div><div class=\"col-md-3\"></div><div class=\"col-md-5\"></div></section>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'layout',\r\n dragHelper: true,\r\n icon: 'view-stream'\r\n});\r\n\r\n\r\nbootstrapElements.push({\r\n name: 'alert',\r\n nodes: '*',\r\n 'class': 'well',\r\n html: `<div class=\"alert alert-primary\" role=\"alert\">\r\n A simple primary alert—check it out!\r\n</div>`,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'layout',\r\n icon: 'label'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'label',\r\n nodes: '*',\r\n 'class': 'label',\r\n html: '<span class=\"label label-success\">Label</span>',\r\n types: ['flow', 'phrasing'],\r\n validChildren: ['phrasing'],\r\n category: 'typography',\r\n hiddenClasses: ['label'],\r\n icon: 'label'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'column',\r\n nodes: '*',\r\n 'class': 'col-*',\r\n html: '<div class=\"col-sm-6\"></div>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n canModify: ['text', 'box', 'margin', 'padding', 'attributes']\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'button group',\r\n nodes: '*',\r\n 'class': 'btn-group',\r\n html: `<div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\r\n <button type=\"button\" class=\"btn btn-secondary\">Left</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">Middle</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">Right</button>\r\n</div>`,\r\n types: ['flow'],\r\n validChildren: ['button'],\r\n category: 'buttons',\r\n icon: 'view-column'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'button toolbar',\r\n nodes: '*',\r\n 'class': 'btn-toolbar',\r\n html: `<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\r\n <div class=\"btn-group mr-2\" role=\"group\" aria-label=\"First group\">\r\n <button type=\"button\" class=\"btn btn-secondary\">1</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">2</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">3</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">4</button>\r\n </div>\r\n <div class=\"btn-group mr-2\" role=\"group\" aria-label=\"Second group\">\r\n <button type=\"button\" class=\"btn btn-secondary\">5</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">6</button>\r\n <button type=\"button\" class=\"btn btn-secondary\">7</button>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Third group\">\r\n <button type=\"button\" class=\"btn btn-secondary\">8</button>\r\n </div>\r\n</div>`,\r\n types: ['flow'],\r\n validChildren: ['.btn-group'],\r\n category: 'buttons',\r\n icon: 'view-module'\r\n});\r\n\r\n\r\n// forms\r\n\r\nbootstrapElements.push({\r\n name: 'input field',\r\n nodes: ['input=text', 'input=email', 'input=password'],\r\n frameworks: ['bootstrap'],\r\n html: '<input type=\"text\" class=\"form-control\" placeholder=\"Text input\">',\r\n types: ['flow', 'phrasing', 'interactive', 'listed', 'labelable', 'submittable', 'resettable', 'reassociateable', 'form-associated'],\r\n validChildren: false,\r\n previewScale: '0.5',\r\n showWysiwyg: false,\r\n hiddenClasses: ['form-control'],\r\n category: 'forms',\r\n icon: 'power-input',\r\n attributes: {\r\n placeholder: {\r\n text: true,\r\n value: 'Text input',\r\n onAssign: function (livePreview: LivePreview) {\r\n this.value = livePreview.selected.node.getAttribute('placeholder');\r\n },\r\n onChange: function (livePreview: LivePreview, text: string) {\r\n livePreview.selected.node.setAttribute('placeholder', text);\r\n livePreview.repositionBox('selected');\r\n }\r\n },\r\n type: {\r\n list: [\r\n {name: 'Text', value: 'text'},\r\n {name: 'Password', value: 'password'},\r\n {name: 'Date', value: 'date'},\r\n {name: 'Email', value: 'email'},\r\n {name: 'Datetime', value: 'datetime'},\r\n {name: 'Datetime Local', value: 'datetime-local'},\r\n {name: 'Month', value: 'month'},\r\n {name: 'Time', value: 'time'},\r\n {name: 'Week', value: 'week'},\r\n {name: 'Number', value: 'number'},\r\n {name: 'Url', value: 'url'},\r\n {name: 'Search', value: 'search'},\r\n {name: 'Tel', value: 'tel'},\r\n {name: 'Color', value: 'color'},\r\n ],\r\n value: '',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.getAttribute('type') == this.list[i].value) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n\r\n return this.value = this.list[0].value;\r\n },\r\n onChange: function (livePreview: LivePreview, type: string) {\r\n livePreview.selected.node.setAttribute('type', type);\r\n }\r\n }\r\n },\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'text area',\r\n nodes: ['textarea'],\r\n frameworks: ['bootstrap'],\r\n html: '<textarea class=\"form-control\" rows=\"3\"></textarea>',\r\n types: ['flow', 'phrasing', 'interactive', 'listed', 'labelable', 'submittable', 'resettable', 'reassociateable', 'form-associated'],\r\n validChildren: false,\r\n previewScale: '0.5',\r\n showWysiwyg: false,\r\n hiddenClasses: ['form-control'],\r\n category: 'forms',\r\n icon: 'short-text',\r\n attributes: {\r\n rows: {\r\n text: true,\r\n value: 1,\r\n onAssign: function (livePreview: LivePreview) {\r\n this.value = livePreview.selected.node.getAttribute('rows');\r\n },\r\n onChange: function (livePreview: LivePreview, rows: string) {\r\n livePreview.selected.node.setAttribute('rows', rows);\r\n livePreview.repositionBox('selected');\r\n }\r\n },\r\n placeholder: {\r\n text: true,\r\n value: 'Placeholder...',\r\n onAssign: function (livePreview: LivePreview) {\r\n this.value = livePreview.selected.node.getAttribute('placeholder');\r\n },\r\n onChange: function (livePreview: LivePreview, text: string) {\r\n livePreview.selected.node.setAttribute('placeholder', text);\r\n livePreview.repositionBox('selected');\r\n }\r\n },\r\n },\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'checkbox',\r\n nodes: '*',\r\n frameworks: ['bootstrap'],\r\n 'class': 'form-check',\r\n html: `<div class=\"form-group form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\">\r\n <label class=\"form-check-label\" for=\"exampleCheck1\">Check me out</label>\r\n </div>`,\r\n types: ['flow', 'phrasing', 'interactive', 'listed', 'labelable', 'submittable', 'resettable', 'reassociateable', 'form-associated'],\r\n validChildren: false,\r\n category: 'forms',\r\n showWysiwyg: false,\r\n icon: 'check-box'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'input group',\r\n nodes: '*',\r\n 'class': 'input-group',\r\n html: `<div class=\"input-group\">\r\n <div class=\"input-group-prepend\">\r\n <div class=\"input-group-text\">@</div>\r\n </div>\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\r\n </div>`,\r\n types: ['flow'],\r\n validChildren: false,\r\n attributes: {\r\n size: {\r\n list: [\r\n {name: 'Medium', value: 'default'},\r\n {name: 'Large', value: 'input-group-lg'},\r\n {name: 'Small', value: 'input-group-sm'},\r\n ],\r\n value: 'default',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, size: string) {\r\n //strip any previously assigned size classes from the node\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(size);\r\n }\r\n }\r\n },\r\n showWysiwyg: false,\r\n category: 'forms',\r\n icon: 'view-list',\r\n hiddenClasses: ['input-group'],\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'form group',\r\n nodes: '*',\r\n frameworks: ['bootstrap'],\r\n 'class': 'form-group',\r\n html: '<div class=\"form-group\">' +\r\n '<label for=\"email\" class=\"control-label\">Email address</label>' +\r\n '<input type=\"email\" class=\"form-control\" id=\"email\" placeholder=\"Enter email\">' +\r\n '</div>',\r\n types: ['flow'],\r\n validChildren: false,\r\n attributes: {\r\n state: {\r\n list: [\r\n {name: 'None', value: 'default'},\r\n {name: 'Error', value: 'has-error'},\r\n {name: 'Success', value: 'has-success'},\r\n {name: 'Warning', value: 'has-warning'},\r\n ],\r\n value: 'default',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, size: string) {\r\n //strip any previously assigned size classes from the node\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(size);\r\n }\r\n }\r\n },\r\n showWysiwyg: false,\r\n category: 'forms',\r\n icon: 'view-headline',\r\n hiddenClasses: ['form-group']\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'link',\r\n frameworks: ['base', 'bootstrap'],\r\n nodes: ['a'],\r\n html: '<a href=\"#\">A simple hyperlink.</a>',\r\n types: ['flow', 'phrasing', 'interactive'],\r\n validChildren: ['flow'],\r\n category: 'typography',\r\n icon: 'link'\r\n});\r\n\r\n\r\nbootstrapElements.push({\r\n name: 'addon',\r\n nodes: '*',\r\n frameworks: ['bootstrap'],\r\n 'class': 'input-group-addon',\r\n html: false,\r\n canDrag: false,\r\n types: ['flow'],\r\n validChildren: false,\r\n canModify: ['text', 'attributes'],\r\n attributes: {\r\n side: {\r\n list: [\r\n {name: 'Left', value: 'left'},\r\n {name: 'Right', value: 'right'},\r\n ],\r\n value: false,\r\n onAssign: function (livePreview: LivePreview) {\r\n let i = 0, child;\r\n while((child = livePreview.selected.node.previousSibling as any) != null) i++;\r\n\r\n if ( ! i) {\r\n this.value = this.list[0].value;\r\n } else {\r\n this.value = this.list[1].value;\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, position: string) {\r\n const children = livePreview.selected.node.parentElement.childNodes;\r\n\r\n // insert input group addon either before first element of parent or after the last one\r\n if (position === 'right') {\r\n children[children.length - 1]['after'](livePreview.selected.node);\r\n } else {\r\n children[0]['before'](livePreview.selected.node);\r\n }\r\n }\r\n },\r\n contents: {\r\n list: [\r\n {name: 'Text', value: 'text'},\r\n {name: 'Checkbox', value: 'checkbox'},\r\n {name: 'Radio', value: 'radio'},\r\n {name: 'Button', value: 'button'},\r\n {name: 'Dropdown', value: 'dropdown'},\r\n ],\r\n onAssign: function (livePreview: LivePreview) {\r\n if ( ! livePreview.selected.node) return;\r\n let children = livePreview.selected.node.closest('.input-group-addon').childNodes;\r\n\r\n if (children[0].nodeType === Node.TEXT_NODE) {\r\n this.value = this.list[0].value;\r\n } else if (children[0]['type'] == 'checkbox') {\r\n this.value = this.list[1].value;\r\n } else if (children[0]['type'] == 'radio') {\r\n this.value = this.list[2].value;\r\n } else if (children[0].nodeName == 'BUTTON') {\r\n this.value = this.list[3].value;\r\n } else if (children.length > 1) {\r\n this.value = this.list[4].value;\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, contents: string) {\r\n\r\n //text\r\n if (contents == 'text') {\r\n livePreview.selected.node.classList.remove();\r\n livePreview.selected.node.classList.add('input-group-addon');\r\n livePreview.selected.node.innerHTML = '';\r\n livePreview.selected.node.innerText = '@';\r\n //checkbox\r\n } else if (contents == 'checkbox') {\r\n livePreview.selected.node.classList.remove();\r\n livePreview.selected.node.classList.add('input-group-addon');\r\n livePreview.selected.node.innerHTML = '<input type=\"checkbox\">';\r\n //radio\r\n } else if (contents == 'radio') {\r\n livePreview.selected.node.classList.remove();\r\n livePreview.selected.node.classList.add('input-group-addon');\r\n livePreview.selected.node.innerHTML = '<input type=\"radio\">';\r\n //button\r\n } else if (contents == 'button') {\r\n livePreview.selected.node.classList.remove();\r\n livePreview.selected.node.classList.add('input-group-btn');\r\n livePreview.selected.node.innerHTML = '<button class=\"btn btn-default\" type=\"button\">Go!</button>';\r\n //dropdown\r\n } else if (contents == 'dropdown') {\r\n livePreview.selected.node.classList.remove();\r\n livePreview.selected.node.classList.add('input-group-btn');\r\n livePreview.selected.node.innerHTML =\r\n '<button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Action <span class=\"caret\"></span></button>' +\r\n '<ul class=\"dropdown-menu\" role=\"menu\">' +\r\n '<li><a href=\"#\">Action</a></li>' +\r\n '<li><a href=\"#\">Another action</a></li>' +\r\n '<li><a href=\"#\">Something else here</a></li>' +\r\n '<li class=\"divider\"></li>' +\r\n '<li><a href=\"#\">Separated link</a></li>' +\r\n '</ul>';\r\n }\r\n }\r\n }\r\n },\r\n showWysiwyg: false,\r\n hiddenClasses: ['input-group-addon'],\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'select',\r\n nodes: ['select'],\r\n frameworks: ['bootstrap'],\r\n html: '<select class=\"form-control\">' +\r\n '<option>1</option>' +\r\n '<option>2</option>' +\r\n '<option>3</option>' +\r\n '<option>4</option>' +\r\n '<option>5</option>' +\r\n '</select>',\r\n types: ['flow', 'phrasing', 'interactive', 'listed', 'labelable', 'submittable', 'resettable', 'reassociateable', 'form-associated'],\r\n validChildren: false,\r\n attributes: {\r\n state: {\r\n value: 'none',\r\n list: [\r\n {name: 'None', value: 'none'},\r\n {name: 'Error', value: 'has-error'},\r\n {name: 'Success', value: 'has-success'},\r\n {name: 'Warning', value: 'has-warning'},\r\n ],\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, state: string) {\r\n //strip any previously assigned classes from the node\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(state);\r\n }\r\n }\r\n },\r\n previewScale: '0.5',\r\n showWysiwyg: false,\r\n category: 'forms',\r\n icon: 'arrow-drop-down'\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'image',\r\n nodes: ['img'],\r\n frameworks: ['bootstrap'],\r\n html: '<img src=\"/builder/images/default.jpg\" class=\"img-responsive\">',\r\n types: ['flow', 'phrasing', 'embedded', 'interactive', 'form-associated'],\r\n validChildren: false,\r\n category: 'media',\r\n icon: 'image',\r\n canModify: ['padding', 'margin', 'attributes', 'shadows', 'borders'],\r\n previewScale: '0.3',\r\n attributes: {\r\n shape: {\r\n list: [\r\n {name: 'Default', value: 'none'},\r\n {name: 'Rounded', value: 'img-rounded'},\r\n {name: 'Thumbnail', value: 'img-thumbnail'},\r\n {name: 'Circle', value: 'img-circle'},\r\n ],\r\n value: 'none',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, type: string) {\r\n //strip any previously assigned type classes from the icon\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(type);\r\n }\r\n }\r\n },\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'responsive video',\r\n nodes: '*',\r\n 'class': 'embed-responsive',\r\n frameworks: ['bootstrap'],\r\n html: '<div class=\"embed-responsive embed-responsive-16by9\"><iframe class=\"embed-responsive-item\" src=\"//www.youtube.com/embed/sENM2wA_FTg\"></iframe></div>',\r\n types: ['flow'],\r\n validChildren: false,\r\n category: 'media',\r\n icon: 'video-library',\r\n canModify: ['padding', 'margin', 'shadows', 'attributes'],\r\n attributes: {\r\n url: {\r\n text: true,\r\n value: '//www.youtube.com/embed/wGp0GAd1d1s',\r\n onAssign(livePreview: LivePreview) {\r\n let selectedNode = livePreview.selected.node as HTMLIFrameElement;\r\n if (selectedNode.nodeName.toLowerCase() !== 'iframe') {\r\n selectedNode = selectedNode.querySelector('iframe');\r\n }\r\n this.value = selectedNode.src;\r\n },\r\n onChange(livePreview: LivePreview, url: string) {\r\n let selectedNode = livePreview.selected.node as HTMLIFrameElement;\r\n if (selectedNode.nodeName.toLowerCase() !== 'iframe') {\r\n selectedNode = selectedNode.querySelector('iframe');\r\n }\r\n selectedNode.src = url;\r\n }\r\n }\r\n },\r\n hiddenClasses: ['embed-responsive', 'embed-responsive-16by9', 'preview-node', 'img-responsive'],\r\n});\r\n\r\nbootstrapElements.push({\r\n name: 'image grid',\r\n nodes: '*',\r\n 'class': 'image-grid',\r\n frameworks: ['bootstrap'],\r\n html: '<div class=\"row image-grid\">' +\r\n '<div class=\"col-xs-3\">' +\r\n '<a href=\"#\" class=\"thumbnail\">' +\r\n '<img src=\"/builder/images/default.jpg\">' +\r\n '</a>' +\r\n '</div>' +\r\n '<div class=\"col-xs-3\">' +\r\n '<a href=\"#\" class=\"thumbnail\">' +\r\n '<img src=\"/builder/images/default.jpg\">' +\r\n '</a>' +\r\n '</div>' +\r\n '<div class=\"col-xs-3\">' +\r\n '<a href=\"#\" class=\"thumbnail\">' +\r\n '<img src=\"/builder/images/default.jpg\">' +\r\n '</a>' +\r\n '</div>' +\r\n '<div class=\"col-xs-3\">' +\r\n '<a href=\"#\" class=\"thumbnail\">' +\r\n '<img src=\"/builder/images/default.jpg\">' +\r\n '</a>' +\r\n '</div>' +\r\n '</div>',\r\n types: ['flow'],\r\n validChildren: false,\r\n category: 'media',\r\n icon: 'grid-on',\r\n canModify: ['padding', 'margin', 'shadows', 'attributes'],\r\n previewScale: '0.2'\r\n});\r\n\r\n\r\n\r\n","import {LivePreview} from '../../live-preview.service';\r\n\r\nexport const baseElements = [];\r\n\r\nbaseElements.push({\r\n name: 'paragraph',\r\n frameworks: ['base'],\r\n nodes: ['p'],\r\n html: '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ' +\r\n 'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation' +\r\n 'ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in' +\r\n 'voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non' +\r\n 'proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>',\r\n types: ['flow'],\r\n validChildren: ['phrasing'],\r\n category: 'typography',\r\n icon: 'short-text'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'divider',\r\n frameworks: ['base'],\r\n nodes: ['hr'],\r\n html: '<hr>',\r\n types: ['flow'],\r\n validChildren: false,\r\n category: 'layout',\r\n dragHelper: true,\r\n icon: 'remove'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'marked text',\r\n frameworks: ['base'],\r\n nodes: ['mark'],\r\n html: '<mark>Marked Text</mark>',\r\n types: ['flow', 'phrasing'],\r\n validChildren: ['phrasing'],\r\n category: 'typography',\r\n icon: 'info'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'definition list',\r\n frameworks: ['base'],\r\n nodes: ['dl'],\r\n html: '<dl class=\"dl-horizontal\">' +\r\n '<dt>Description lists</dt>' +\r\n '<dd>A description list is perfect for defining terms.</dd>' +\r\n '<dt>Euismod</dt>' +\r\n '<dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>' +\r\n '<dd>Donec id elit non mi porta gravida at eget metus.</dd>' +\r\n '<dt>Malesuada porta</dt>' +\r\n '<dd>Etiam porta sem malesuada magna mollis euismod.</dd>' +\r\n '<dt>Felis euismod semper eget lacinia</dt>' +\r\n '<dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd>' +\r\n '</dl>',\r\n types: ['flow', 'sectioning root'],\r\n validChildren: ['dt', 'dd'],\r\n category: 'typography',\r\n previewScale: '0.4',\r\n scaleDragPreview: false,\r\n icon: 'view-list'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'blockqoute',\r\n frameworks: ['base'],\r\n nodes: ['blockqoute'],\r\n html: '<blockquote>' +\r\n '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>' +\r\n '<footer>Someone famous in <cite title=\"Source Title\">Source Title</cite></footer>' +\r\n '</blockquote>',\r\n types: ['flow', 'sectioning root'],\r\n validChildren: ['flow'],\r\n category: 'typography',\r\n previewScale: '0.5',\r\n scaleDragPreview: false,\r\n icon: 'format-quote'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'list item',\r\n frameworks: ['base'],\r\n nodes: ['li'],\r\n html: '<li>A basic list item</li>',\r\n types: ['li'],\r\n validChildren: ['flow'],\r\n});\r\n\r\nbaseElements.push({\r\n name: 'unordered list',\r\n frameworks: ['base'],\r\n nodes: ['ul'],\r\n html: '<ul><li>List item #1</li><li>List item #2</li><li>List item #3</li><ul>',\r\n types: ['flow'],\r\n validChildren: ['li'],\r\n category: 'typography',\r\n icon: 'format-list-bulleted'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'body',\r\n frameworks: ['base'],\r\n nodes: ['body'],\r\n html: false,\r\n draggable: false,\r\n showWysiwyg: false,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n});\r\n\r\nbaseElements.push({\r\n name: 'button',\r\n frameworks: ['base'],\r\n nodes: ['a', 'button'],\r\n html: '<a class=\"btn btn-success\">Click Me</a>',\r\n types: ['flow', 'phrasing', 'interactive', 'listed', 'labelable', 'submittable', 'reassociateable', 'form-associated'],\r\n validChildren: ['phrasing'],\r\n category: 'buttons',\r\n icon: 'button-custom'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'div container',\r\n nodes: ['div'],\r\n html: '<div></div>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n category: 'layout',\r\n dragHelper: true,\r\n icon: 'crop-landscape'\r\n});\r\n\r\nbaseElements.push({\r\n name: 'section',\r\n nodes: ['section'],\r\n html: '<section></section>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n});\r\n\r\nbaseElements.push({\r\n name: 'footer',\r\n nodes: ['footer'],\r\n html: '<footer></footer>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n});\r\n\r\nbaseElements.push({\r\n name: 'header',\r\n nodes: ['header'],\r\n html: '<header>Header Text</header>',\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n});\r\n\r\nbaseElements.push({\r\n name: 'heading',\r\n nodes: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\r\n frameworks: ['base'],\r\n html: '<h2>Heading</h2>',\r\n types: ['heading', 'flow'],\r\n validChildren: ['phrasing'],\r\n category: 'typography',\r\n icon: 'format-size',\r\n attributes: {\r\n types: {\r\n list: [\r\n {name: 'h1', value: 'h1'},\r\n {name: 'h2', value: 'h2'},\r\n {name: 'h3', value: 'h3'},\r\n {name: 'h4', value: 'h4'},\r\n {name: 'h5', value: 'h5'},\r\n {name: 'h6', value: 'h6'},\r\n ],\r\n value: 'h1',\r\n onAssign: function(livePreview: LivePreview) {\r\n let name = livePreview.selected.node.nodeName.toLowerCase();\r\n\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (name == this.list[i].value) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, value: any) {\r\n let newNode = document.createElement(value);\r\n newNode.innerHTML = livePreview.selected.node.innerHTML;\r\n livePreview.selected.node.parentElement.replaceChild(newNode, livePreview.selected.node);\r\n livePreview.selected.node = newNode;\r\n livePreview.repositionBox('selected');\r\n }\r\n }\r\n }\r\n});\r\n\r\nbaseElements.push({\r\n name: 'icon',\r\n nodes: ['i'],\r\n frameworks: ['base', 'bootstrap'],\r\n html: false,\r\n types: ['flow', 'phrasing'],\r\n validChildren: false,\r\n category: false,\r\n canDrag: true,\r\n canModify: ['text', 'attributes'],\r\n attributes: {\r\n size: {\r\n list: [\r\n {name: 'Default', value: 'default'},\r\n {name: 'Large', value: 'fa-lg'},\r\n {name: '2x', value: 'fa-2x'},\r\n {name: '3x', value: 'fa-3x'},\r\n {name: '4x', value: 'fa-4x'},\r\n {name: '5x', value: 'fa-5x'}\r\n ],\r\n value: 'default',\r\n onAssign: function (livePreview: LivePreview) {\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if (livePreview.selected.node.className.indexOf(this.list[i].value) > -1) {\r\n return this.value = this.list[i].value;\r\n }\r\n }\r\n },\r\n onChange: function (livePreview: LivePreview, size: string) {\r\n // strip any previously assigned size classes from the icon\r\n for (let i = this.list.length - 1; i >= 0; i--) {\r\n if ( ! this.list[i].value) continue;\r\n livePreview.selected.node.classList.remove(this.list[i].value);\r\n }\r\n\r\n livePreview.selected.node.classList.add(size);\r\n }\r\n }\r\n },\r\n dragHelper: true,\r\n});\r\n\r\nbaseElements.push({\r\n name: 'generic',\r\n nodes: ['em', 'strong', 'u', 's', 'small'],\r\n frameworks: ['base'],\r\n html: false,\r\n types: ['flow', 'phrasing'],\r\n validChildren: false,\r\n category: false,\r\n canDrag: false,\r\n canModify: ['text', 'attributes']\r\n});\r\n\r\nbaseElements.push({\r\n name: 'label',\r\n nodes: ['label'],\r\n frameworks: ['base'],\r\n html: false,\r\n types: ['flow', 'phrasing'],\r\n validChildren: false,\r\n category: false,\r\n canDrag: false,\r\n canModify: ['text', 'attributes']\r\n});\r\n\r\nbaseElements.push({\r\n name: 'svg',\r\n frameworks: ['base'],\r\n nodes: ['svg'],\r\n});\r\n","import {ChangeDetectionStrategy, Component, HostBinding, Input} from '@angular/core';\nimport {ThemeService} from '../../theme.service';\n\n@Component({\n selector: 'skeleton',\n templateUrl: './skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'aria-busy': 'true',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuetext': 'Loading...',\n 'role': 'progressbar',\n }\n})\nexport class SkeletonComponent {\n @Input() animation: 'pulsate' | 'wave' = 'wave';\n @Input() variant: 'avatar' | 'text' | 'rect' = 'text';\n @HostBinding('class.dark') dark = this.theme.isDarkMode();\n\n @HostBinding('class.pulsate') get pulsate() {\n return this.animation === 'pulsate';\n }\n\n @HostBinding('class.wave') get wave() {\n return this.animation === 'wave';\n }\n\n @HostBinding('class.avatar') get avatar() {\n return this.variant === 'avatar';\n }\n\n @HostBinding('class.text') get text() {\n return this.variant === 'text';\n }\n\n @HostBinding('class.rect') get rect() {\n return this.variant === 'rect';\n }\n\n constructor(private theme: ThemeService) {}\n}\n","import { InjectionToken, forwardRef, EventEmitter, Directive, ChangeDetectorRef, Output, Input, ContentChildren, ElementRef, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/collections';\nimport * as ɵngcc3 from '@angular/material/core';\n\nconst _c0 = [\"input\"];\nconst _c1 = function () { return { enterDuration: 150 }; };\nconst _c2 = [\"*\"];\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n providedIn: 'root',\n factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent'\n };\n}\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatRadioGroup),\n multi: true\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nclass MatRadioChange {\n constructor(\n /** The MatRadioButton that emits the change event. */\n source, \n /** The value of the MatRadioButton. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\nclass _MatRadioGroupBase {\n constructor(_changeDetector) {\n this._changeDetector = _changeDetector;\n /** Selected value for the radio group. */\n this._value = null;\n /** The HTML name attribute applied to radio buttons in this group. */\n this._name = `mat-radio-group-${nextUniqueId++}`;\n /** The currently selected radio button. Should match value. */\n this._selected = null;\n /** Whether the `value` has been set to its initial value. */\n this._isInitialized = false;\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n this._labelPosition = 'after';\n /** Whether the radio group is disabled. */\n this._disabled = false;\n /** Whether the radio group is required. */\n this._required = false;\n /** The method to be called in order to update ngModel */\n this._controlValueAccessorChangeFn = () => { };\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @docs-private\n */\n this.onTouched = () => { };\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\n this.change = new EventEmitter();\n }\n /** Name of the radio button group. All radio buttons inside this group will use this name. */\n get name() { return this._name; }\n set name(value) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition;\n }\n set labelPosition(v) {\n this._labelPosition = v === 'before' ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n /**\n * Value for the radio-group. Should equal the value of the selected radio button if there is\n * a corresponding radio button with a matching value. If there is not such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n get value() { return this._value; }\n set value(newValue) {\n if (this._value !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n _checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n /**\n * The currently selected radio button. If set to a new radio button, the radio group value\n * will be updated to match the new selected button.\n */\n get selected() { return this._selected; }\n set selected(selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n /** Whether the radio group is disabled */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /** Whether the radio group is required */\n get required() { return this._required; }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MatRadioGroup.\n this._isInitialized = true;\n }\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n _touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n _updateRadioButtonNames() {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n radio._markForCheck();\n });\n }\n }\n /** Updates the `selected` radio button from the internal _value state. */\n _updateSelectedRadioFromValue() {\n // If the value already matches the selected radio, do nothing.\n const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n if (this._radios && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value === radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent() {\n if (this._isInitialized) {\n this.change.emit(new MatRadioChange(this._selected, this._value));\n }\n }\n _markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\n}\n_MatRadioGroupBase.ɵfac = function _MatRadioGroupBase_Factory(t) { return new (t || _MatRadioGroupBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\n_MatRadioGroupBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatRadioGroupBase, inputs: { name: \"name\", labelPosition: \"labelPosition\", value: \"value\", selected: \"selected\", disabled: \"disabled\", required: \"required\", color: \"color\" }, outputs: { change: \"change\" } });\n_MatRadioGroupBase.ctorParameters = () => [\n { type: ChangeDetectorRef }\n];\n_MatRadioGroupBase.propDecorators = {\n change: [{ type: Output }],\n color: [{ type: Input }],\n name: [{ type: Input }],\n labelPosition: [{ type: Input }],\n value: [{ type: Input }],\n selected: [{ type: Input }],\n disabled: [{ type: Input }],\n required: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatRadioGroupBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { change: [{\n type: Output\n }], name: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], value: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], color: [{\n type: Input\n }] }); })();\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\nclass MatRadioGroup extends _MatRadioGroupBase {\n}\nMatRadioGroup.ɵfac = function MatRadioGroup_Factory(t) { return ɵMatRadioGroup_BaseFactory(t || MatRadioGroup); };\nMatRadioGroup.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatRadioGroup, selectors: [[\"mat-radio-group\"]], contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatRadioButton, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._radios = _t);\n } }, hostAttrs: [\"role\", \"radiogroup\", 1, \"mat-radio-group\"], exportAs: [\"matRadioGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatRadioGroup.propDecorators = {\n _radios: [{ type: ContentChildren, args: [forwardRef(() => MatRadioButton), { descendants: true },] }]\n};\nconst ɵMatRadioGroup_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatRadioGroup);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioGroup, [{\n type: Directive,\n args: [{\n selector: 'mat-radio-group',\n exportAs: 'matRadioGroup',\n providers: [\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-radio-group'\n }\n }]\n }], null, { _radios: [{\n type: ContentChildren,\n args: [forwardRef(() => MatRadioButton), { descendants: true }]\n }] }); })();\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\n// As per Material design specifications the selection control radio should use the accent color\n// palette by default. https://material.io/guidelines/components/selection-controls.html\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, _animationMode, _providerOverride) {\n super(elementRef);\n this._changeDetector = _changeDetector;\n this._focusMonitor = _focusMonitor;\n this._radioDispatcher = _radioDispatcher;\n this._animationMode = _animationMode;\n this._providerOverride = _providerOverride;\n this._uniqueId = `mat-radio-${++nextUniqueId}`;\n /** The unique ID for the radio button. */\n this.id = this._uniqueId;\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\n this.change = new EventEmitter();\n /** Whether this radio is checked. */\n this._checked = false;\n /** Value assigned to this radio. */\n this._value = null;\n /** Unregister function for _radioDispatcher */\n this._removeUniqueSelectionListener = () => { };\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n this._removeUniqueSelectionListener =\n _radioDispatcher.listen((id, name) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n });\n }\n /** Whether this radio button is checked. */\n get checked() { return this._checked; }\n set checked(value) {\n const newCheckedState = coerceBooleanProperty(value);\n if (this._checked !== newCheckedState) {\n this._checked = newCheckedState;\n if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n }\n else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n if (newCheckedState) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n /** The value of this radio button. */\n get value() { return this._value; }\n set value(value) {\n if (this._value !== value) {\n this._value = value;\n if (this.radioGroup !== null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n }\n set labelPosition(value) {\n this._labelPosition = value;\n }\n /** Whether the radio button is disabled. */\n get disabled() {\n return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n }\n set disabled(value) {\n this._setDisabled(coerceBooleanProperty(value));\n }\n /** Whether the radio button is required. */\n get required() {\n return this._required || (this.radioGroup && this.radioGroup.required);\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Theme color of the radio button. */\n get color() {\n return this._color ||\n (this.radioGroup && this.radioGroup.color) ||\n this._providerOverride && this._providerOverride.color || 'accent';\n }\n set color(newValue) { this._color = newValue; }\n /** ID of the native input element inside `<mat-radio-button>` */\n get inputId() { return `${this.id || this._uniqueId}-input`; }\n /** Focuses the radio button. */\n focus(options) {\n this._focusMonitor.focusVia(this._inputElement, 'keyboard', options);\n }\n /**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n }\n ngAfterViewInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe(focusOrigin => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup._touch();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._removeUniqueSelectionListener();\n }\n /** Dispatch change event with current value. */\n _emitChangeEvent() {\n this.change.emit(new MatRadioChange(this, this._value));\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /**\n * Triggered when the radio button received a click or the input recognized any change.\n * Clicking on a label element, will trigger a change event on the associated input.\n */\n _onInputChange(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\n }\n }\n /** Sets the disabled state and marks for check if a change occurred. */\n _setDisabled(value) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._changeDetector.markForCheck();\n }\n }\n}\n_MatRadioButtonBase.ɵfac = function _MatRadioButtonBase_Factory(t) { return new (t || _MatRadioButtonBase)(ɵngcc0.ɵɵdirectiveInject(_MatRadioGroupBase), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(String), ɵngcc0.ɵɵdirectiveInject(undefined)); };\n_MatRadioButtonBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatRadioButtonBase, viewQuery: function _MatRadioButtonBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n } }, inputs: { id: \"id\", checked: \"checked\", value: \"value\", labelPosition: \"labelPosition\", disabled: \"disabled\", required: \"required\", color: \"color\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"] }, outputs: { change: \"change\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n_MatRadioButtonBase.ctorParameters = () => [\n { type: _MatRadioGroupBase },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: FocusMonitor },\n { type: UniqueSelectionDispatcher },\n { type: String },\n { type: undefined }\n];\n_MatRadioButtonBase.propDecorators = {\n id: [{ type: Input }],\n name: [{ type: Input }],\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n ariaDescribedby: [{ type: Input, args: ['aria-describedby',] }],\n checked: [{ type: Input }],\n value: [{ type: Input }],\n labelPosition: [{ type: Input }],\n disabled: [{ type: Input }],\n required: [{ type: Input }],\n color: [{ type: Input }],\n change: [{ type: Output }],\n _inputElement: [{ type: ViewChild, args: ['input',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatRadioButtonBase, [{\n type: Directive\n }], function () { return [{ type: _MatRadioGroupBase }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String }, { type: undefined }]; }, { id: [{\n type: Input\n }], change: [{\n type: Output\n }], checked: [{\n type: Input\n }], value: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], color: [{\n type: Input\n }], name: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaDescribedby: [{\n type: Input,\n args: ['aria-describedby']\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }] }); })();\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\nclass MatRadioButton extends _MatRadioButtonBase {\n constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride) {\n super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride);\n }\n}\nMatRadioButton.ɵfac = function MatRadioButton_Factory(t) { return new (t || MatRadioButton)(ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_GROUP, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_DEFAULT_OPTIONS, 8)); };\nMatRadioButton.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatRadioButton, selectors: [[\"mat-radio-button\"]], hostAttrs: [1, \"mat-radio-button\"], hostVars: 17, hostBindings: function MatRadioButton_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatRadioButton_focus_HostBindingHandler() { return ctx._inputElement.nativeElement.focus(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", 0 - 1)(\"id\", ctx.id)(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n ɵngcc0.ɵɵclassProp(\"mat-radio-checked\", ctx.checked)(\"mat-radio-disabled\", ctx.disabled)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-primary\", ctx.color === \"primary\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\");\n } }, inputs: { disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, exportAs: [\"matRadioButton\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c2, decls: 13, vars: 19, consts: [[1, \"mat-radio-label\"], [\"label\", \"\"], [1, \"mat-radio-container\"], [1, \"mat-radio-outer-circle\"], [1, \"mat-radio-inner-circle\"], [\"type\", \"radio\", 1, \"mat-radio-input\", \"cdk-visually-hidden\", 3, \"id\", \"checked\", \"disabled\", \"tabIndex\", \"required\", \"change\", \"click\"], [\"input\", \"\"], [\"mat-ripple\", \"\", 1, \"mat-radio-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-radio-persistent-ripple\"], [1, \"mat-radio-label-content\"], [2, \"display\", \"none\"]], template: function MatRadioButton_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"label\", 0, 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵelement(3, \"div\", 3);\n ɵngcc0.ɵɵelement(4, \"div\", 4);\n ɵngcc0.ɵɵelementStart(5, \"input\", 5, 6);\n ɵngcc0.ɵɵlistener(\"change\", function MatRadioButton_Template_input_change_5_listener($event) { return ctx._onInputChange($event); })(\"click\", function MatRadioButton_Template_input_click_5_listener($event) { return ctx._onInputClick($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 7);\n ɵngcc0.ɵɵelement(8, \"div\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"div\", 9);\n ɵngcc0.ɵɵelementStart(10, \"span\", 10);\n ɵngcc0.ɵɵtext(11, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx.inputId);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"id\", ctx.inputId)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"tabIndex\", ctx.tabIndex)(\"required\", ctx.required);\n ɵngcc0.ɵɵattribute(\"name\", ctx.name)(\"value\", ctx.value)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", true)(\"matRippleRadius\", 20)(\"matRippleAnimation\", ɵngcc0.ɵɵpureFunction0(18, _c1));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-radio-label-before\", ctx.labelPosition == \"before\");\n } }, directives: [ɵngcc3.MatRipple], styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001)}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatRadioButton.ctorParameters = () => [\n { type: MatRadioGroup, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_GROUP,] }] },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: FocusMonitor },\n { type: UniqueSelectionDispatcher },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_DEFAULT_OPTIONS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioButton, [{\n type: Component,\n args: [{\n selector: 'mat-radio-button',\n template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n <!-- The actual 'radio' part of the control. -->\\n <div class=\\\"mat-radio-container\\\">\\n <div class=\\\"mat-radio-outer-circle\\\"></div>\\n <div class=\\\"mat-radio-inner-circle\\\"></div>\\n <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n [id]=\\\"inputId\\\"\\n [checked]=\\\"checked\\\"\\n [disabled]=\\\"disabled\\\"\\n [tabIndex]=\\\"tabIndex\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.value]=\\\"value\\\"\\n [required]=\\\"required\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n (change)=\\\"_onInputChange($event)\\\"\\n (click)=\\\"_onInputClick($event)\\\">\\n\\n <!-- The ripple comes after the input so that we can target it with a CSS\\n sibling selector when the input is focused. -->\\n <div mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n [matRippleTrigger]=\\\"label\\\"\\n [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n [matRippleCentered]=\\\"true\\\"\\n [matRippleRadius]=\\\"20\\\"\\n [matRippleAnimation]=\\\"{enterDuration: 150}\\\">\\n\\n <div class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></div>\\n </div>\\n </div>\\n\\n <!-- The label content for radio control. -->\\n <div class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n <!-- Add an invisible span so JAWS can read the label -->\\n <span style=\\\"display:none\\\"> </span>\\n <ng-content></ng-content>\\n </div>\\n</label>\\n\",\n inputs: ['disableRipple', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRadioButton',\n host: {\n 'class': 'mat-radio-button',\n '[class.mat-radio-checked]': 'checked',\n '[class.mat-radio-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-primary]': 'color === \"primary\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n // Needs to be -1 so the `focus` event still fires.\n '[attr.tabindex]': '-1',\n '[attr.id]': 'id',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n // Note: under normal conditions focus shouldn't land on this element, however it may be\n // programmatically set, for example inside of a focus trap, in this case we want to forward\n // the focus to the native element.\n '(focus)': '_inputElement.nativeElement.focus()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001)}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"]\n }]\n }], function () { return [{ type: MatRadioGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_GROUP]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_DEFAULT_OPTIONS]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatRadioModule {\n}\nMatRadioModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatRadioModule });\nMatRadioModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatRadioModule_Factory(t) { return new (t || MatRadioModule)(); }, imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatRadioModule, { declarations: function () { return [MatRadioGroup, MatRadioButton]; }, imports: function () { return [MatRippleModule, MatCommonModule]; }, exports: function () { return [MatRadioGroup, MatRadioButton, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRadioModule, [{\n type: NgModule,\n args: [{\n imports: [MatRippleModule, MatCommonModule],\n exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n declarations: [MatRadioGroup, MatRadioButton]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };\n\n//# sourceMappingURL=radio.js.map","import { EventEmitter, Directive, Input, Output, HostListener, ElementRef, Injectable, Component, ViewEncapsulation, ChangeDetectorRef, ViewChild, Injector, ReflectiveInjector, ComponentFactoryResolver, ApplicationRef, ViewContainerRef, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\n\nconst _c0 = [\"dialogPopup\"];\nconst _c1 = [\"hueSlider\"];\nconst _c2 = [\"alphaSlider\"];\nfunction ColorPickerComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\");\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassMapInterpolate1(\"arrow arrow-\", ctx_r1.cpUsePosition, \"\");\n ɵngcc0.ɵɵstyleProp(\"top\", ctx_r1.arrowTop, \"px\");\n} }\nfunction ColorPickerComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n const _r17 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 26);\n ɵngcc0.ɵɵlistener(\"newValue\", function ColorPickerComponent_div_3_Template_div_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r16 = ɵngcc0.ɵɵnextContext(); return ctx_r16.onColorChange($event); })(\"dragStart\", function ColorPickerComponent_div_3_Template_div_dragStart_0_listener() { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r18 = ɵngcc0.ɵɵnextContext(); return ctx_r18.onDragStart(\"saturation-lightness\"); })(\"dragEnd\", function ColorPickerComponent_div_3_Template_div_dragEnd_0_listener() { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r19 = ɵngcc0.ɵɵnextContext(); return ctx_r19.onDragEnd(\"saturation-lightness\"); });\n ɵngcc0.ɵɵelement(1, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx_r2.hueSliderColor);\n ɵngcc0.ɵɵproperty(\"rgX\", 1)(\"rgY\", 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"top\", ctx_r2.slider == null ? null : ctx_r2.slider.v, \"px\")(\"left\", ctx_r2.slider == null ? null : ctx_r2.slider.s, \"px\");\n} }\nfunction ColorPickerComponent_button_8_Template(rf, ctx) { if (rf & 1) {\n const _r21 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 27);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_button_8_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.onAddPresetColor($event, ctx_r20.selectedColor); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassMap(ctx_r3.cpAddColorButtonClass);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r3.cpPresetColors && ctx_r3.cpPresetColors.length >= ctx_r3.cpMaxPresetColorsLength);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.cpAddColorButtonText, \" \");\n} }\nfunction ColorPickerComponent_div_10_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 28);\n} }\nfunction ColorPickerComponent_div_20_input_6_Template(rf, ctx) { if (rf & 1) {\n const _r25 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 34);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_20_input_6_Template_input_keyup_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r24 = ɵngcc0.ɵɵnextContext(2); return ctx_r24.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_20_input_6_Template_input_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r26 = ɵngcc0.ɵɵnextContext(2); return ctx_r26.onAlphaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r22 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rg\", 1)(\"value\", ctx_r22.cmykText == null ? null : ctx_r22.cmykText.a);\n} }\nfunction ColorPickerComponent_div_20_div_16_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1, \"A\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ColorPickerComponent_div_20_Template(rf, ctx) { if (rf & 1) {\n const _r28 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 29);\n ɵngcc0.ɵɵelementStart(1, \"div\", 30);\n ɵngcc0.ɵɵelementStart(2, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_20_Template_input_keyup_enter_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r27 = ɵngcc0.ɵɵnextContext(); return ctx_r27.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_20_Template_input_newValue_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r29 = ɵngcc0.ɵɵnextContext(); return ctx_r29.onCyanInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_20_Template_input_keyup_enter_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r30 = ɵngcc0.ɵɵnextContext(); return ctx_r30.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_20_Template_input_newValue_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r31 = ɵngcc0.ɵɵnextContext(); return ctx_r31.onMagentaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_20_Template_input_keyup_enter_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r32 = ɵngcc0.ɵɵnextContext(); return ctx_r32.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_20_Template_input_newValue_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r33 = ɵngcc0.ɵɵnextContext(); return ctx_r33.onYellowInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_20_Template_input_keyup_enter_5_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r34 = ɵngcc0.ɵɵnextContext(); return ctx_r34.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_20_Template_input_newValue_5_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r35 = ɵngcc0.ɵɵnextContext(); return ctx_r35.onBlackInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ColorPickerComponent_div_20_input_6_Template, 1, 2, \"input\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 30);\n ɵngcc0.ɵɵelementStart(8, \"div\");\n ɵngcc0.ɵɵtext(9, \"C\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"div\");\n ɵngcc0.ɵɵtext(11, \"M\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"div\");\n ɵngcc0.ɵɵtext(13, \"Y\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(14, \"div\");\n ɵngcc0.ɵɵtext(15, \"K\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(16, ColorPickerComponent_div_20_div_16_Template, 2, 0, \"div\", 33);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"display\", ctx_r8.format !== 3 ? \"none\" : \"block\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r8.cmykText == null ? null : ctx_r8.cmykText.c);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r8.cmykText == null ? null : ctx_r8.cmykText.m);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r8.cmykText == null ? null : ctx_r8.cmykText.y);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r8.cmykText == null ? null : ctx_r8.cmykText.k);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r8.cpAlphaChannel !== \"disabled\");\n ɵngcc0.ɵɵadvance(10);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r8.cpAlphaChannel !== \"disabled\");\n} }\nfunction ColorPickerComponent_div_21_input_5_Template(rf, ctx) { if (rf & 1) {\n const _r39 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 34);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_21_input_5_Template_input_keyup_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r39); const ctx_r38 = ɵngcc0.ɵɵnextContext(2); return ctx_r38.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_21_input_5_Template_input_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r39); const ctx_r40 = ɵngcc0.ɵɵnextContext(2); return ctx_r40.onAlphaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r36 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rg\", 1)(\"value\", ctx_r36.hslaText == null ? null : ctx_r36.hslaText.a);\n} }\nfunction ColorPickerComponent_div_21_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1, \"A\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ColorPickerComponent_div_21_Template(rf, ctx) { if (rf & 1) {\n const _r42 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 35);\n ɵngcc0.ɵɵelementStart(1, \"div\", 30);\n ɵngcc0.ɵɵelementStart(2, \"input\", 36);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_21_Template_input_keyup_enter_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r41 = ɵngcc0.ɵɵnextContext(); return ctx_r41.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_21_Template_input_newValue_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r43 = ɵngcc0.ɵɵnextContext(); return ctx_r43.onHueInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_21_Template_input_keyup_enter_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r44 = ɵngcc0.ɵɵnextContext(); return ctx_r44.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_21_Template_input_newValue_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r45 = ɵngcc0.ɵɵnextContext(); return ctx_r45.onSaturationInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_21_Template_input_keyup_enter_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r46 = ɵngcc0.ɵɵnextContext(); return ctx_r46.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_21_Template_input_newValue_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r42); const ctx_r47 = ɵngcc0.ɵɵnextContext(); return ctx_r47.onLightnessInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, ColorPickerComponent_div_21_input_5_Template, 1, 2, \"input\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\", 30);\n ɵngcc0.ɵɵelementStart(7, \"div\");\n ɵngcc0.ɵɵtext(8, \"H\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"div\");\n ɵngcc0.ɵɵtext(10, \"S\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"div\");\n ɵngcc0.ɵɵtext(12, \"L\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(13, ColorPickerComponent_div_21_div_13_Template, 2, 0, \"div\", 33);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"display\", ctx_r9.format !== 2 ? \"none\" : \"block\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"rg\", 360)(\"value\", ctx_r9.hslaText == null ? null : ctx_r9.hslaText.h);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r9.hslaText == null ? null : ctx_r9.hslaText.s);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r9.hslaText == null ? null : ctx_r9.hslaText.l);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r9.cpAlphaChannel !== \"disabled\");\n ɵngcc0.ɵɵadvance(8);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r9.cpAlphaChannel !== \"disabled\");\n} }\nfunction ColorPickerComponent_div_22_input_5_Template(rf, ctx) { if (rf & 1) {\n const _r51 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 34);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_22_input_5_Template_input_keyup_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r51); const ctx_r50 = ɵngcc0.ɵɵnextContext(2); return ctx_r50.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_22_input_5_Template_input_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r51); const ctx_r52 = ɵngcc0.ɵɵnextContext(2); return ctx_r52.onAlphaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r48 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rg\", 1)(\"value\", ctx_r48.rgbaText == null ? null : ctx_r48.rgbaText.a);\n} }\nfunction ColorPickerComponent_div_22_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1, \"A\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ColorPickerComponent_div_22_Template(rf, ctx) { if (rf & 1) {\n const _r54 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 37);\n ɵngcc0.ɵɵelementStart(1, \"div\", 30);\n ɵngcc0.ɵɵelementStart(2, \"input\", 38);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_22_Template_input_keyup_enter_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r53 = ɵngcc0.ɵɵnextContext(); return ctx_r53.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_22_Template_input_newValue_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r55 = ɵngcc0.ɵɵnextContext(); return ctx_r55.onRedInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"input\", 38);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_22_Template_input_keyup_enter_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r56 = ɵngcc0.ɵɵnextContext(); return ctx_r56.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_22_Template_input_newValue_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r57 = ɵngcc0.ɵɵnextContext(); return ctx_r57.onGreenInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"input\", 38);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_22_Template_input_keyup_enter_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r58 = ɵngcc0.ɵɵnextContext(); return ctx_r58.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_22_Template_input_newValue_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r54); const ctx_r59 = ɵngcc0.ɵɵnextContext(); return ctx_r59.onBlueInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, ColorPickerComponent_div_22_input_5_Template, 1, 2, \"input\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\", 30);\n ɵngcc0.ɵɵelementStart(7, \"div\");\n ɵngcc0.ɵɵtext(8, \"R\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"div\");\n ɵngcc0.ɵɵtext(10, \"G\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"div\");\n ɵngcc0.ɵɵtext(12, \"B\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(13, ColorPickerComponent_div_22_div_13_Template, 2, 0, \"div\", 33);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"display\", ctx_r10.format !== 1 ? \"none\" : \"block\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"rg\", 255)(\"value\", ctx_r10.rgbaText == null ? null : ctx_r10.rgbaText.r);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 255)(\"value\", ctx_r10.rgbaText == null ? null : ctx_r10.rgbaText.g);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rg\", 255)(\"value\", ctx_r10.rgbaText == null ? null : ctx_r10.rgbaText.b);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r10.cpAlphaChannel !== \"disabled\");\n ɵngcc0.ɵɵadvance(8);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r10.cpAlphaChannel !== \"disabled\");\n} }\nfunction ColorPickerComponent_div_23_input_3_Template(rf, ctx) { if (rf & 1) {\n const _r63 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 34);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_23_input_3_Template_input_keyup_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r63); const ctx_r62 = ɵngcc0.ɵɵnextContext(2); return ctx_r62.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_23_input_3_Template_input_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r63); const ctx_r64 = ɵngcc0.ɵɵnextContext(2); return ctx_r64.onAlphaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r60 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rg\", 1)(\"value\", ctx_r60.hexAlpha);\n} }\nfunction ColorPickerComponent_div_23_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1, \"A\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ColorPickerComponent_div_23_Template(rf, ctx) { if (rf & 1) {\n const _r66 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 39);\n ɵngcc0.ɵɵelementStart(1, \"div\", 30);\n ɵngcc0.ɵɵelementStart(2, \"input\", 40);\n ɵngcc0.ɵɵlistener(\"blur\", function ColorPickerComponent_div_23_Template_input_blur_2_listener() { ɵngcc0.ɵɵrestoreView(_r66); const ctx_r65 = ɵngcc0.ɵɵnextContext(); return ctx_r65.onHexInput(null); })(\"keyup.enter\", function ColorPickerComponent_div_23_Template_input_keyup_enter_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r66); const ctx_r67 = ɵngcc0.ɵɵnextContext(); return ctx_r67.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_23_Template_input_newValue_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r66); const ctx_r68 = ɵngcc0.ɵɵnextContext(); return ctx_r68.onHexInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColorPickerComponent_div_23_input_3_Template, 1, 2, \"input\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"div\", 30);\n ɵngcc0.ɵɵelementStart(5, \"div\");\n ɵngcc0.ɵɵtext(6, \"Hex\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, ColorPickerComponent_div_23_div_7_Template, 2, 0, \"div\", 33);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"display\", ctx_r11.format !== 0 ? \"none\" : \"block\");\n ɵngcc0.ɵɵclassProp(\"hex-alpha\", ctx_r11.cpAlphaChannel === \"forced\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r11.hexText);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r11.cpAlphaChannel === \"forced\");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r11.cpAlphaChannel === \"forced\");\n} }\nfunction ColorPickerComponent_div_24_input_3_Template(rf, ctx) { if (rf & 1) {\n const _r71 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 34);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_24_input_3_Template_input_keyup_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r71); const ctx_r70 = ɵngcc0.ɵɵnextContext(2); return ctx_r70.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_24_input_3_Template_input_newValue_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r71); const ctx_r72 = ɵngcc0.ɵɵnextContext(2); return ctx_r72.onAlphaInput($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r69 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rg\", 1)(\"value\", ctx_r69.hslaText == null ? null : ctx_r69.hslaText.a);\n} }\nfunction ColorPickerComponent_div_24_Template(rf, ctx) { if (rf & 1) {\n const _r74 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 41);\n ɵngcc0.ɵɵelementStart(1, \"div\", 30);\n ɵngcc0.ɵɵelementStart(2, \"input\", 31);\n ɵngcc0.ɵɵlistener(\"keyup.enter\", function ColorPickerComponent_div_24_Template_input_keyup_enter_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r74); const ctx_r73 = ɵngcc0.ɵɵnextContext(); return ctx_r73.onAcceptColor($event); })(\"newValue\", function ColorPickerComponent_div_24_Template_input_newValue_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r74); const ctx_r75 = ɵngcc0.ɵɵnextContext(); return ctx_r75.onValueInput($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColorPickerComponent_div_24_input_3_Template, 1, 2, \"input\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"div\", 30);\n ɵngcc0.ɵɵelementStart(5, \"div\");\n ɵngcc0.ɵɵtext(6, \"V\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\");\n ɵngcc0.ɵɵtext(8, \"A\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"rg\", 100)(\"value\", ctx_r12.hslaText == null ? null : ctx_r12.hslaText.l);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.cpAlphaChannel !== \"disabled\");\n} }\nfunction ColorPickerComponent_div_25_Template(rf, ctx) { if (rf & 1) {\n const _r77 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 42);\n ɵngcc0.ɵɵelementStart(1, \"span\", 43);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_25_Template_span_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r77); const ctx_r76 = ɵngcc0.ɵɵnextContext(); return ctx_r76.onFormatToggle(0 - 1); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"span\", 43);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_25_Template_span_click_2_listener() { ɵngcc0.ɵɵrestoreView(_r77); const ctx_r78 = ɵngcc0.ɵɵnextContext(); return ctx_r78.onFormatToggle(1); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ColorPickerComponent_div_26_div_4_div_1_span_1_Template(rf, ctx) { if (rf & 1) {\n const _r85 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 50);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_26_div_4_div_1_span_1_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r85); const color_r82 = ɵngcc0.ɵɵnextContext().$implicit; const ctx_r84 = ɵngcc0.ɵɵnextContext(3); return ctx_r84.onRemovePresetColor($event, color_r82); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r83 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵclassMap(ctx_r83.cpRemoveColorButtonClass);\n} }\nfunction ColorPickerComponent_div_26_div_4_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r88 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 48);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_26_div_4_div_1_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r88); const color_r82 = ctx.$implicit; const ctx_r87 = ɵngcc0.ɵɵnextContext(3); return ctx_r87.setColorFromString(color_r82); });\n ɵngcc0.ɵɵtemplate(1, ColorPickerComponent_div_26_div_4_div_1_span_1_Template, 1, 3, \"span\", 49);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const color_r82 = ctx.$implicit;\n const ctx_r81 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"background-color\", color_r82);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r81.cpAddColorButton);\n} }\nfunction ColorPickerComponent_div_26_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtemplate(1, ColorPickerComponent_div_26_div_4_div_1_Template, 2, 3, \"div\", 47);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r79 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassMap(ctx_r79.cpPresetColorsClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r79.cpPresetColors);\n} }\nfunction ColorPickerComponent_div_26_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r80 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassMap(ctx_r80.cpPresetEmptyMessageClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r80.cpPresetEmptyMessage);\n} }\nfunction ColorPickerComponent_div_26_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 44);\n ɵngcc0.ɵɵelement(1, \"hr\");\n ɵngcc0.ɵɵelementStart(2, \"div\", 45);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, ColorPickerComponent_div_26_div_4_Template, 2, 4, \"div\", 46);\n ɵngcc0.ɵɵtemplate(5, ColorPickerComponent_div_26_div_5_Template, 2, 4, \"div\", 46);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r14.cpPresetLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r14.cpPresetColors == null ? null : ctx_r14.cpPresetColors.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r14.cpPresetColors == null ? null : ctx_r14.cpPresetColors.length) && ctx_r14.cpAddColorButton);\n} }\nfunction ColorPickerComponent_div_27_button_1_Template(rf, ctx) { if (rf & 1) {\n const _r92 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 53);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_27_button_1_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r92); const ctx_r91 = ɵngcc0.ɵɵnextContext(2); return ctx_r91.onCancelColor($event); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r89 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassMap(ctx_r89.cpCancelButtonClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r89.cpCancelButtonText);\n} }\nfunction ColorPickerComponent_div_27_button_2_Template(rf, ctx) { if (rf & 1) {\n const _r94 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 53);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_div_27_button_2_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r94); const ctx_r93 = ɵngcc0.ɵɵnextContext(2); return ctx_r93.onAcceptColor($event); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r90 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassMap(ctx_r90.cpOKButtonClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r90.cpOKButtonText);\n} }\nfunction ColorPickerComponent_div_27_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 51);\n ɵngcc0.ɵɵtemplate(1, ColorPickerComponent_div_27_button_1_Template, 2, 4, \"button\", 52);\n ɵngcc0.ɵɵtemplate(2, ColorPickerComponent_div_27_button_2_Template, 2, 4, \"button\", 52);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r15 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r15.cpCancelButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r15.cpOKButton);\n} }\nvar ColorFormats;\n(function (ColorFormats) {\n ColorFormats[ColorFormats[\"HEX\"] = 0] = \"HEX\";\n ColorFormats[ColorFormats[\"RGBA\"] = 1] = \"RGBA\";\n ColorFormats[ColorFormats[\"HSLA\"] = 2] = \"HSLA\";\n ColorFormats[ColorFormats[\"CMYK\"] = 3] = \"CMYK\";\n})(ColorFormats || (ColorFormats = {}));\nclass Rgba {\n constructor(r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n}\nclass Hsva {\n constructor(h, s, v, a) {\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n }\n}\nclass Hsla {\n constructor(h, s, l, a) {\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n }\n}\nclass Cmyk {\n constructor(c, m, y, k, a = 1) {\n this.c = c;\n this.m = m;\n this.y = y;\n this.k = k;\n this.a = a;\n }\n}\n\nfunction detectIE() {\n let ua = '';\n if (typeof navigator !== 'undefined') {\n ua = navigator.userAgent.toLowerCase();\n }\n const msie = ua.indexOf('msie ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n // Other browser\n return false;\n}\nclass TextDirective {\n constructor() {\n this.newValue = new EventEmitter();\n }\n inputChange(event) {\n const value = event.target.value;\n if (this.rg === undefined) {\n this.newValue.emit(value);\n }\n else {\n const numeric = parseFloat(value);\n this.newValue.emit({ v: numeric, rg: this.rg });\n }\n }\n}\nTextDirective.ɵfac = function TextDirective_Factory(t) { return new (t || TextDirective)(); };\nTextDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextDirective, selectors: [[\"\", \"text\", \"\"]], hostBindings: function TextDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"input\", function TextDirective_input_HostBindingHandler($event) { return ctx.inputChange($event); });\n } }, inputs: { rg: \"rg\", text: \"text\" }, outputs: { newValue: \"newValue\" } });\nTextDirective.propDecorators = {\n rg: [{ type: Input }],\n text: [{ type: Input }],\n newValue: [{ type: Output }],\n inputChange: [{ type: HostListener, args: ['input', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextDirective, [{\n type: Directive,\n args: [{\n selector: '[text]'\n }]\n }], function () { return []; }, { newValue: [{\n type: Output\n }], inputChange: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], rg: [{\n type: Input\n }], text: [{\n type: Input\n }] }); })();\nclass SliderDirective {\n constructor(elRef) {\n this.elRef = elRef;\n this.dragEnd = new EventEmitter();\n this.dragStart = new EventEmitter();\n this.newValue = new EventEmitter();\n this.listenerMove = (event) => this.move(event);\n this.listenerStop = () => this.stop();\n }\n mouseDown(event) {\n this.start(event);\n }\n touchStart(event) {\n this.start(event);\n }\n move(event) {\n event.preventDefault();\n this.setCursor(event);\n }\n start(event) {\n this.setCursor(event);\n event.stopPropagation();\n document.addEventListener('mouseup', this.listenerStop);\n document.addEventListener('touchend', this.listenerStop);\n document.addEventListener('mousemove', this.listenerMove);\n document.addEventListener('touchmove', this.listenerMove);\n this.dragStart.emit();\n }\n stop() {\n document.removeEventListener('mouseup', this.listenerStop);\n document.removeEventListener('touchend', this.listenerStop);\n document.removeEventListener('mousemove', this.listenerMove);\n document.removeEventListener('touchmove', this.listenerMove);\n this.dragEnd.emit();\n }\n getX(event) {\n const position = this.elRef.nativeElement.getBoundingClientRect();\n const pageX = (event.pageX !== undefined) ? event.pageX : event.touches[0].pageX;\n return pageX - position.left - window.pageXOffset;\n }\n getY(event) {\n const position = this.elRef.nativeElement.getBoundingClientRect();\n const pageY = (event.pageY !== undefined) ? event.pageY : event.touches[0].pageY;\n return pageY - position.top - window.pageYOffset;\n }\n setCursor(event) {\n const width = this.elRef.nativeElement.offsetWidth;\n const height = this.elRef.nativeElement.offsetHeight;\n const x = Math.max(0, Math.min(this.getX(event), width));\n const y = Math.max(0, Math.min(this.getY(event), height));\n if (this.rgX !== undefined && this.rgY !== undefined) {\n this.newValue.emit({ s: x / width, v: (1 - y / height), rgX: this.rgX, rgY: this.rgY });\n }\n else if (this.rgX === undefined && this.rgY !== undefined) {\n this.newValue.emit({ v: y / height, rgY: this.rgY });\n }\n else if (this.rgX !== undefined && this.rgY === undefined) {\n this.newValue.emit({ v: x / width, rgX: this.rgX });\n }\n }\n}\nSliderDirective.ɵfac = function SliderDirective_Factory(t) { return new (t || SliderDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nSliderDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SliderDirective, selectors: [[\"\", \"slider\", \"\"]], hostBindings: function SliderDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"mousedown\", function SliderDirective_mousedown_HostBindingHandler($event) { return ctx.mouseDown($event); })(\"touchstart\", function SliderDirective_touchstart_HostBindingHandler($event) { return ctx.touchStart($event); });\n } }, inputs: { rgX: \"rgX\", rgY: \"rgY\", slider: \"slider\" }, outputs: { dragEnd: \"dragEnd\", dragStart: \"dragStart\", newValue: \"newValue\" } });\nSliderDirective.ctorParameters = () => [\n { type: ElementRef }\n];\nSliderDirective.propDecorators = {\n rgX: [{ type: Input }],\n rgY: [{ type: Input }],\n slider: [{ type: Input }],\n dragEnd: [{ type: Output }],\n dragStart: [{ type: Output }],\n newValue: [{ type: Output }],\n mouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],\n touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SliderDirective, [{\n type: Directive,\n args: [{\n selector: '[slider]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { dragEnd: [{\n type: Output\n }], dragStart: [{\n type: Output\n }], newValue: [{\n type: Output\n }], mouseDown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], touchStart: [{\n type: HostListener,\n args: ['touchstart', ['$event']]\n }], rgX: [{\n type: Input\n }], rgY: [{\n type: Input\n }], slider: [{\n type: Input\n }] }); })();\nclass SliderPosition {\n constructor(h, s, v, a) {\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n }\n}\nclass SliderDimension {\n constructor(h, s, v, a) {\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n }\n}\n\nclass ColorPickerService {\n constructor() {\n this.active = null;\n }\n setActive(active) {\n if (this.active && this.active !== active && this.active.cpDialogDisplay !== 'inline') {\n this.active.closeDialog();\n }\n this.active = active;\n }\n hsva2hsla(hsva) {\n const h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n if (v === 0) {\n return new Hsla(h, 0, 0, a);\n }\n else if (s === 0 && v === 1) {\n return new Hsla(h, 1, 1, a);\n }\n else {\n const l = v * (2 - s) / 2;\n return new Hsla(h, v * s / (1 - Math.abs(2 * l - 1)), l, a);\n }\n }\n hsla2hsva(hsla) {\n const h = Math.min(hsla.h, 1), s = Math.min(hsla.s, 1);\n const l = Math.min(hsla.l, 1), a = Math.min(hsla.a, 1);\n if (l === 0) {\n return new Hsva(h, 0, 0, a);\n }\n else {\n const v = l + s * (1 - Math.abs(2 * l - 1)) / 2;\n return new Hsva(h, 2 * (v - l) / v, v, a);\n }\n }\n hsvaToRgba(hsva) {\n let r, g, b;\n const h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v, g = t, b = p;\n break;\n case 1:\n r = q, g = v, b = p;\n break;\n case 2:\n r = p, g = v, b = t;\n break;\n case 3:\n r = p, g = q, b = v;\n break;\n case 4:\n r = t, g = p, b = v;\n break;\n case 5:\n r = v, g = p, b = q;\n break;\n default:\n r = 0, g = 0, b = 0;\n }\n return new Rgba(r, g, b, a);\n }\n cmykToRgb(cmyk) {\n const r = (1 - cmyk.c) * (1 - cmyk.k);\n const g = (1 - cmyk.m) * (1 - cmyk.k);\n const b = (1 - cmyk.y) * (1 - cmyk.k);\n return new Rgba(r, g, b, cmyk.a);\n }\n rgbaToCmyk(rgba) {\n const k = 1 - Math.max(rgba.r, rgba.g, rgba.b);\n if (k === 1) {\n return new Cmyk(0, 0, 0, 1, rgba.a);\n }\n else {\n const c = (1 - rgba.r - k) / (1 - k);\n const m = (1 - rgba.g - k) / (1 - k);\n const y = (1 - rgba.b - k) / (1 - k);\n return new Cmyk(c, m, y, k, rgba.a);\n }\n }\n rgbaToHsva(rgba) {\n let h, s;\n const r = Math.min(rgba.r, 1), g = Math.min(rgba.g, 1);\n const b = Math.min(rgba.b, 1), a = Math.min(rgba.a, 1);\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n const v = max, d = max - min;\n s = (max === 0) ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n h = 0;\n }\n h /= 6;\n }\n return new Hsva(h, s, v, a);\n }\n rgbaToHex(rgba, allowHex8) {\n /* tslint:disable:no-bitwise */\n let hex = '#' + ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b).toString(16).substr(1);\n if (allowHex8) {\n hex += ((1 << 8) | Math.round(rgba.a * 255)).toString(16).substr(1);\n }\n /* tslint:enable:no-bitwise */\n return hex;\n }\n normalizeCMYK(cmyk) {\n return new Cmyk(cmyk.c / 100, cmyk.m / 100, cmyk.y / 100, cmyk.k / 100, cmyk.a);\n }\n denormalizeCMYK(cmyk) {\n return new Cmyk(Math.floor(cmyk.c * 100), Math.floor(cmyk.m * 100), Math.floor(cmyk.y * 100), Math.floor(cmyk.k * 100), cmyk.a);\n }\n denormalizeRGBA(rgba) {\n return new Rgba(Math.round(rgba.r * 255), Math.round(rgba.g * 255), Math.round(rgba.b * 255), rgba.a);\n }\n stringToHsva(colorString = '', allowHex8 = false) {\n let hsva = null;\n colorString = (colorString || '').toLowerCase();\n const stringParsers = [\n {\n re: /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult) {\n return new Rgba(parseInt(execResult[2], 10) / 255, parseInt(execResult[3], 10) / 255, parseInt(execResult[4], 10) / 255, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n }\n }, {\n re: /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n parse: function (execResult) {\n return new Hsla(parseInt(execResult[2], 10) / 360, parseInt(execResult[3], 10) / 100, parseInt(execResult[4], 10) / 100, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n }\n }\n ];\n if (allowHex8) {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})?$/,\n parse: function (execResult) {\n return new Rgba(parseInt(execResult[1], 16) / 255, parseInt(execResult[2], 16) / 255, parseInt(execResult[3], 16) / 255, parseInt(execResult[4] || 'FF', 16) / 255);\n }\n });\n }\n else {\n stringParsers.push({\n re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\n parse: function (execResult) {\n return new Rgba(parseInt(execResult[1], 16) / 255, parseInt(execResult[2], 16) / 255, parseInt(execResult[3], 16) / 255, 1);\n }\n });\n }\n stringParsers.push({\n re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\n parse: function (execResult) {\n return new Rgba(parseInt(execResult[1] + execResult[1], 16) / 255, parseInt(execResult[2] + execResult[2], 16) / 255, parseInt(execResult[3] + execResult[3], 16) / 255, 1);\n }\n });\n for (const key in stringParsers) {\n if (stringParsers.hasOwnProperty(key)) {\n const parser = stringParsers[key];\n const match = parser.re.exec(colorString), color = match && parser.parse(match);\n if (color) {\n if (color instanceof Rgba) {\n hsva = this.rgbaToHsva(color);\n }\n else if (color instanceof Hsla) {\n hsva = this.hsla2hsva(color);\n }\n return hsva;\n }\n }\n }\n return hsva;\n }\n outputFormat(hsva, outputFormat, alphaChannel) {\n if (outputFormat === 'auto') {\n outputFormat = hsva.a < 1 ? 'rgba' : 'hex';\n }\n switch (outputFormat) {\n case 'hsla':\n const hsla = this.hsva2hsla(hsva);\n const hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n if (hsva.a < 1 || alphaChannel === 'always') {\n return 'hsla(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%,' +\n hslaText.a + ')';\n }\n else {\n return 'hsl(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%)';\n }\n case 'rgba':\n const rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\n if (hsva.a < 1 || alphaChannel === 'always') {\n return 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' +\n Math.round(rgba.a * 100) / 100 + ')';\n }\n else {\n return 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n }\n default:\n const allowHex8 = (alphaChannel === 'always' || alphaChannel === 'forced');\n return this.rgbaToHex(this.denormalizeRGBA(this.hsvaToRgba(hsva)), allowHex8);\n }\n }\n}\nColorPickerService.ɵfac = function ColorPickerService_Factory(t) { return new (t || ColorPickerService)(); };\nColorPickerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColorPickerService, factory: ColorPickerService.ɵfac });\nColorPickerService.ctorParameters = () => [];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nclass ColorPickerComponent {\n constructor(elRef, cdRef, service) {\n this.elRef = elRef;\n this.cdRef = cdRef;\n this.service = service;\n this.isIE10 = false;\n this.dialogArrowSize = 10;\n this.dialogArrowOffset = 15;\n this.dialogInputFields = [\n ColorFormats.HEX,\n ColorFormats.RGBA,\n ColorFormats.HSLA,\n ColorFormats.CMYK\n ];\n this.useRootViewContainer = false;\n }\n handleEsc(event) {\n if (this.show && this.cpDialogDisplay === 'popup') {\n this.onCancelColor(event);\n }\n }\n handleEnter(event) {\n if (this.show && this.cpDialogDisplay === 'popup') {\n this.onAcceptColor(event);\n }\n }\n ngOnInit() {\n this.slider = new SliderPosition(0, 0, 0, 0);\n const hueWidth = this.hueSlider.nativeElement.offsetWidth || 140;\n const alphaWidth = this.alphaSlider.nativeElement.offsetWidth || 140;\n this.sliderDimMax = new SliderDimension(hueWidth, this.cpWidth, 130, alphaWidth);\n if (this.cpCmykEnabled) {\n this.format = ColorFormats.CMYK;\n }\n else if (this.cpOutputFormat === 'rgba') {\n this.format = ColorFormats.RGBA;\n }\n else if (this.cpOutputFormat === 'hsla') {\n this.format = ColorFormats.HSLA;\n }\n else {\n this.format = ColorFormats.HEX;\n }\n this.listenerMouseDown = (event) => { this.onMouseDown(event); };\n this.listenerResize = () => { this.onResize(); };\n this.openDialog(this.initialColor, false);\n }\n ngOnDestroy() {\n this.closeDialog();\n }\n ngAfterViewInit() {\n if (this.cpWidth !== 230 || this.cpDialogDisplay === 'inline') {\n const hueWidth = this.hueSlider.nativeElement.offsetWidth || 140;\n const alphaWidth = this.alphaSlider.nativeElement.offsetWidth || 140;\n this.sliderDimMax = new SliderDimension(hueWidth, this.cpWidth, 130, alphaWidth);\n this.updateColorPicker(false);\n this.cdRef.detectChanges();\n }\n }\n openDialog(color, emit = true) {\n this.service.setActive(this);\n if (!this.width) {\n this.cpWidth = this.directiveElementRef.nativeElement.offsetWidth;\n }\n if (!this.height) {\n this.height = 320;\n }\n this.setInitialColor(color);\n this.setColorFromString(color, emit);\n this.openColorPicker();\n }\n closeDialog() {\n this.closeColorPicker();\n }\n setupDialog(instance, elementRef, color, cpWidth, cpHeight, cpDialogDisplay, cpFallbackColor, cpColorMode, cpCmykEnabled, cpAlphaChannel, cpOutputFormat, cpDisableInput, cpIgnoredElements, cpSaveClickOutside, cpCloseClickOutside, cpUseRootViewContainer, cpPosition, cpPositionOffset, cpPositionRelativeToArrow, cpPresetLabel, cpPresetColors, cpPresetColorsClass, cpMaxPresetColorsLength, cpPresetEmptyMessage, cpPresetEmptyMessageClass, cpOKButton, cpOKButtonClass, cpOKButtonText, cpCancelButton, cpCancelButtonClass, cpCancelButtonText, cpAddColorButton, cpAddColorButtonClass, cpAddColorButtonText, cpRemoveColorButtonClass) {\n this.setInitialColor(color);\n this.setColorMode(cpColorMode);\n this.isIE10 = (detectIE() === 10);\n this.directiveInstance = instance;\n this.directiveElementRef = elementRef;\n this.cpDisableInput = cpDisableInput;\n this.cpCmykEnabled = cpCmykEnabled;\n this.cpAlphaChannel = cpAlphaChannel;\n this.cpOutputFormat = cpOutputFormat;\n this.cpDialogDisplay = cpDialogDisplay;\n this.cpIgnoredElements = cpIgnoredElements;\n this.cpSaveClickOutside = cpSaveClickOutside;\n this.cpCloseClickOutside = cpCloseClickOutside;\n this.useRootViewContainer = cpUseRootViewContainer;\n this.width = this.cpWidth = parseInt(cpWidth, 10);\n this.height = this.cpHeight = parseInt(cpHeight, 10);\n this.cpPosition = cpPosition;\n this.cpPositionOffset = parseInt(cpPositionOffset, 10);\n this.cpOKButton = cpOKButton;\n this.cpOKButtonText = cpOKButtonText;\n this.cpOKButtonClass = cpOKButtonClass;\n this.cpCancelButton = cpCancelButton;\n this.cpCancelButtonText = cpCancelButtonText;\n this.cpCancelButtonClass = cpCancelButtonClass;\n this.fallbackColor = cpFallbackColor || '#fff';\n this.setPresetConfig(cpPresetLabel, cpPresetColors);\n this.cpPresetColorsClass = cpPresetColorsClass;\n this.cpMaxPresetColorsLength = cpMaxPresetColorsLength;\n this.cpPresetEmptyMessage = cpPresetEmptyMessage;\n this.cpPresetEmptyMessageClass = cpPresetEmptyMessageClass;\n this.cpAddColorButton = cpAddColorButton;\n this.cpAddColorButtonText = cpAddColorButtonText;\n this.cpAddColorButtonClass = cpAddColorButtonClass;\n this.cpRemoveColorButtonClass = cpRemoveColorButtonClass;\n if (!cpPositionRelativeToArrow) {\n this.dialogArrowOffset = 0;\n }\n if (cpDialogDisplay === 'inline') {\n this.dialogArrowSize = 0;\n this.dialogArrowOffset = 0;\n }\n if (cpOutputFormat === 'hex' &&\n cpAlphaChannel !== 'always' && cpAlphaChannel !== 'forced') {\n this.cpAlphaChannel = 'disabled';\n }\n }\n setColorMode(mode) {\n switch (mode.toString().toUpperCase()) {\n case '1':\n case 'C':\n case 'COLOR':\n this.cpColorMode = 1;\n break;\n case '2':\n case 'G':\n case 'GRAYSCALE':\n this.cpColorMode = 2;\n break;\n case '3':\n case 'P':\n case 'PRESETS':\n this.cpColorMode = 3;\n break;\n default:\n this.cpColorMode = 1;\n }\n }\n setInitialColor(color) {\n this.initialColor = color;\n }\n setPresetConfig(cpPresetLabel, cpPresetColors) {\n this.cpPresetLabel = cpPresetLabel;\n this.cpPresetColors = cpPresetColors;\n }\n setColorFromString(value, emit = true, update = true) {\n let hsva;\n if (this.cpAlphaChannel === 'always' || this.cpAlphaChannel === 'forced') {\n hsva = this.service.stringToHsva(value, true);\n if (!hsva && !this.hsva) {\n hsva = this.service.stringToHsva(value, false);\n }\n }\n else {\n hsva = this.service.stringToHsva(value, false);\n }\n if (!hsva && !this.hsva) {\n hsva = this.service.stringToHsva(this.fallbackColor, false);\n }\n if (hsva) {\n this.hsva = hsva;\n this.sliderH = this.hsva.h;\n if (this.cpOutputFormat === 'hex' && this.cpAlphaChannel === 'disabled') {\n this.hsva.a = 1;\n }\n this.updateColorPicker(emit, update);\n }\n }\n onResize() {\n if (this.position === 'fixed') {\n this.setDialogPosition();\n }\n else if (this.cpDialogDisplay !== 'inline') {\n this.closeColorPicker();\n }\n }\n onDragEnd(slider) {\n this.directiveInstance.sliderDragEnd({ slider: slider, color: this.outputColor });\n }\n onDragStart(slider) {\n this.directiveInstance.sliderDragStart({ slider: slider, color: this.outputColor });\n }\n onMouseDown(event) {\n if (this.show &&\n !this.isIE10 && this.cpDialogDisplay === 'popup' &&\n event.target !== this.directiveElementRef.nativeElement &&\n !this.isDescendant(this.elRef.nativeElement, event.target) &&\n !this.isDescendant(this.directiveElementRef.nativeElement, event.target) &&\n this.cpIgnoredElements.filter((item) => item === event.target).length === 0) {\n if (this.cpSaveClickOutside) {\n this.directiveInstance.colorSelected(this.outputColor);\n }\n else {\n this.hsva = null;\n this.setColorFromString(this.initialColor, false);\n if (this.cpCmykEnabled) {\n this.directiveInstance.cmykChanged(this.cmykColor);\n }\n this.directiveInstance.colorChanged(this.initialColor);\n this.directiveInstance.colorCanceled();\n }\n if (this.cpCloseClickOutside) {\n this.closeColorPicker();\n }\n }\n }\n onAcceptColor(event) {\n event.stopPropagation();\n if (this.outputColor) {\n this.directiveInstance.colorSelected(this.outputColor);\n }\n if (this.cpDialogDisplay === 'popup') {\n this.closeColorPicker();\n }\n }\n onCancelColor(event) {\n this.hsva = null;\n event.stopPropagation();\n this.directiveInstance.colorCanceled();\n this.setColorFromString(this.initialColor, true);\n if (this.cpDialogDisplay === 'popup') {\n if (this.cpCmykEnabled) {\n this.directiveInstance.cmykChanged(this.cmykColor);\n }\n this.directiveInstance.colorChanged(this.initialColor, true);\n this.closeColorPicker();\n }\n }\n onFormatToggle(change) {\n const availableFormats = this.dialogInputFields.length -\n (this.cpCmykEnabled ? 0 : 1);\n const nextFormat = (((this.dialogInputFields.indexOf(this.format) + change) %\n availableFormats) + availableFormats) % availableFormats;\n this.format = this.dialogInputFields[nextFormat];\n }\n onColorChange(value) {\n this.hsva.s = value.s / value.rgX;\n this.hsva.v = value.v / value.rgY;\n this.updateColorPicker();\n this.directiveInstance.sliderChanged({\n slider: 'lightness',\n value: this.hsva.v,\n color: this.outputColor\n });\n this.directiveInstance.sliderChanged({\n slider: 'saturation',\n value: this.hsva.s,\n color: this.outputColor\n });\n }\n onHueChange(value) {\n this.hsva.h = value.v / value.rgX;\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n this.directiveInstance.sliderChanged({\n slider: 'hue',\n value: this.hsva.h,\n color: this.outputColor\n });\n }\n onValueChange(value) {\n this.hsva.v = value.v / value.rgX;\n this.updateColorPicker();\n this.directiveInstance.sliderChanged({\n slider: 'value',\n value: this.hsva.v,\n color: this.outputColor\n });\n }\n onAlphaChange(value) {\n this.hsva.a = value.v / value.rgX;\n this.updateColorPicker();\n this.directiveInstance.sliderChanged({\n slider: 'alpha',\n value: this.hsva.a,\n color: this.outputColor\n });\n }\n onHexInput(value) {\n if (value === null) {\n this.updateColorPicker();\n }\n else {\n if (value && value[0] !== '#') {\n value = '#' + value;\n }\n let validHex = /^#([a-f0-9]{3}|[a-f0-9]{6})$/gi;\n if (this.cpAlphaChannel === 'always') {\n validHex = /^#([a-f0-9]{3}|[a-f0-9]{6}|[a-f0-9]{8})$/gi;\n }\n const valid = validHex.test(value);\n if (valid) {\n if (value.length < 5) {\n value = '#' + value.substring(1)\n .split('')\n .map(c => c + c)\n .join('');\n }\n if (this.cpAlphaChannel === 'forced') {\n value += Math.round(this.hsva.a * 255).toString(16);\n }\n this.setColorFromString(value, true, false);\n }\n this.directiveInstance.inputChanged({\n input: 'hex',\n valid: valid,\n value: value,\n color: this.outputColor\n });\n }\n }\n onRedInput(value) {\n const rgba = this.service.hsvaToRgba(this.hsva);\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n rgba.r = value.v / value.rg;\n this.hsva = this.service.rgbaToHsva(rgba);\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'red',\n valid: valid,\n value: rgba.r,\n color: this.outputColor\n });\n }\n onBlueInput(value) {\n const rgba = this.service.hsvaToRgba(this.hsva);\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n rgba.b = value.v / value.rg;\n this.hsva = this.service.rgbaToHsva(rgba);\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'blue',\n valid: valid,\n value: rgba.b,\n color: this.outputColor\n });\n }\n onGreenInput(value) {\n const rgba = this.service.hsvaToRgba(this.hsva);\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n rgba.g = value.v / value.rg;\n this.hsva = this.service.rgbaToHsva(rgba);\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'green',\n valid: valid,\n value: rgba.g,\n color: this.outputColor\n });\n }\n onHueInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.hsva.h = value.v / value.rg;\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'hue',\n valid: valid,\n value: this.hsva.h,\n color: this.outputColor\n });\n }\n onValueInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.hsva.v = value.v / value.rg;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'value',\n valid: valid,\n value: this.hsva.v,\n color: this.outputColor\n });\n }\n onAlphaInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.hsva.a = value.v / value.rg;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'alpha',\n valid: valid,\n value: this.hsva.a,\n color: this.outputColor\n });\n }\n onLightnessInput(value) {\n const hsla = this.service.hsva2hsla(this.hsva);\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n hsla.l = value.v / value.rg;\n this.hsva = this.service.hsla2hsva(hsla);\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'lightness',\n valid: valid,\n value: hsla.l,\n color: this.outputColor\n });\n }\n onSaturationInput(value) {\n const hsla = this.service.hsva2hsla(this.hsva);\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n hsla.s = value.v / value.rg;\n this.hsva = this.service.hsla2hsva(hsla);\n this.sliderH = this.hsva.h;\n this.updateColorPicker();\n }\n this.directiveInstance.inputChanged({\n input: 'saturation',\n valid: valid,\n value: hsla.s,\n color: this.outputColor\n });\n }\n onCyanInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.cmyk.c = value.v;\n this.updateColorPicker(false, true, true);\n }\n this.directiveInstance.inputChanged({\n input: 'cyan',\n valid: true,\n value: this.cmyk.c,\n color: this.outputColor\n });\n }\n onMagentaInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.cmyk.m = value.v;\n this.updateColorPicker(false, true, true);\n }\n this.directiveInstance.inputChanged({\n input: 'magenta',\n valid: true,\n value: this.cmyk.m,\n color: this.outputColor\n });\n }\n onYellowInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.cmyk.y = value.v;\n this.updateColorPicker(false, true, true);\n }\n this.directiveInstance.inputChanged({\n input: 'yellow',\n valid: true,\n value: this.cmyk.y,\n color: this.outputColor\n });\n }\n onBlackInput(value) {\n const valid = !isNaN(value.v) && value.v >= 0 && value.v <= value.rg;\n if (valid) {\n this.cmyk.k = value.v;\n this.updateColorPicker(false, true, true);\n }\n this.directiveInstance.inputChanged({\n input: 'black',\n valid: true,\n value: this.cmyk.k,\n color: this.outputColor\n });\n }\n onAddPresetColor(event, value) {\n event.stopPropagation();\n if (!this.cpPresetColors.filter((color) => (color === value)).length) {\n this.cpPresetColors = this.cpPresetColors.concat(value);\n this.directiveInstance.presetColorsChanged(this.cpPresetColors);\n }\n }\n onRemovePresetColor(event, value) {\n event.stopPropagation();\n this.cpPresetColors = this.cpPresetColors.filter((color) => (color !== value));\n this.directiveInstance.presetColorsChanged(this.cpPresetColors);\n }\n // Private helper functions for the color picker dialog status\n openColorPicker() {\n if (!this.show) {\n this.show = true;\n this.hidden = true;\n setTimeout(() => {\n this.hidden = false;\n this.setDialogPosition();\n this.cdRef.detectChanges();\n }, 0);\n this.directiveInstance.stateChanged(true);\n if (!this.isIE10) {\n document.addEventListener('mousedown', this.listenerMouseDown);\n document.addEventListener('touchstart', this.listenerMouseDown);\n }\n window.addEventListener('resize', this.listenerResize);\n }\n }\n closeColorPicker() {\n if (this.show) {\n this.show = false;\n this.directiveInstance.stateChanged(false);\n if (!this.isIE10) {\n document.removeEventListener('mousedown', this.listenerMouseDown);\n document.removeEventListener('touchstart', this.listenerMouseDown);\n }\n window.removeEventListener('resize', this.listenerResize);\n if (!this.cdRef['destroyed']) {\n this.cdRef.detectChanges();\n }\n }\n }\n updateColorPicker(emit = true, update = true, cmykInput = false) {\n if (this.sliderDimMax) {\n if (this.cpColorMode === 2) {\n this.hsva.s = 0;\n }\n let hue, hsla, rgba;\n const lastOutput = this.outputColor;\n hsla = this.service.hsva2hsla(this.hsva);\n if (!this.cpCmykEnabled) {\n rgba = this.service.denormalizeRGBA(this.service.hsvaToRgba(this.hsva));\n }\n else {\n if (!cmykInput) {\n rgba = this.service.hsvaToRgba(this.hsva);\n this.cmyk = this.service.denormalizeCMYK(this.service.rgbaToCmyk(rgba));\n }\n else {\n rgba = this.service.cmykToRgb(this.service.normalizeCMYK(this.cmyk));\n this.hsva = this.service.rgbaToHsva(rgba);\n }\n rgba = this.service.denormalizeRGBA(rgba);\n this.sliderH = this.hsva.h;\n }\n hue = this.service.denormalizeRGBA(this.service.hsvaToRgba(new Hsva(this.sliderH || this.hsva.h, 1, 1, 1)));\n if (update) {\n this.hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n this.rgbaText = new Rgba(rgba.r, rgba.g, rgba.b, Math.round(rgba.a * 100) / 100);\n if (this.cpCmykEnabled) {\n this.cmykText = new Cmyk(this.cmyk.c, this.cmyk.m, this.cmyk.y, this.cmyk.k, Math.round(this.cmyk.a * 100) / 100);\n }\n const allowHex8 = this.cpAlphaChannel === 'always';\n this.hexText = this.service.rgbaToHex(rgba, allowHex8);\n this.hexAlpha = this.rgbaText.a;\n }\n if (this.cpOutputFormat === 'auto') {\n if (this.format !== ColorFormats.RGBA && this.format !== ColorFormats.CMYK) {\n if (this.hsva.a < 1) {\n this.format = this.hsva.a < 1 ? ColorFormats.RGBA : ColorFormats.HEX;\n }\n }\n }\n this.hueSliderColor = 'rgb(' + hue.r + ',' + hue.g + ',' + hue.b + ')';\n this.alphaSliderColor = 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n this.outputColor = this.service.outputFormat(this.hsva, this.cpOutputFormat, this.cpAlphaChannel);\n this.selectedColor = this.service.outputFormat(this.hsva, 'rgba', null);\n if (this.format !== ColorFormats.CMYK) {\n this.cmykColor = '';\n }\n else {\n if (this.cpAlphaChannel === 'always' || this.cpAlphaChannel === 'enabled' ||\n this.cpAlphaChannel === 'forced') {\n const alpha = Math.round(this.cmyk.a * 100) / 100;\n this.cmykColor = `cmyka(${this.cmyk.c},${this.cmyk.m},${this.cmyk.y},${this.cmyk.k},${alpha})`;\n }\n else {\n this.cmykColor = `cmyk(${this.cmyk.c},${this.cmyk.m},${this.cmyk.y},${this.cmyk.k})`;\n }\n }\n this.slider = new SliderPosition((this.sliderH || this.hsva.h) * this.sliderDimMax.h - 8, this.hsva.s * this.sliderDimMax.s - 8, (1 - this.hsva.v) * this.sliderDimMax.v - 8, this.hsva.a * this.sliderDimMax.a - 8);\n if (emit && lastOutput !== this.outputColor) {\n if (this.cpCmykEnabled) {\n this.directiveInstance.cmykChanged(this.cmykColor);\n }\n this.directiveInstance.colorChanged(this.outputColor);\n }\n }\n }\n // Private helper functions for the color picker dialog positioning\n setDialogPosition() {\n if (this.cpDialogDisplay === 'inline') {\n this.position = 'relative';\n }\n else {\n let position = 'static', transform = '', style;\n let parentNode = null, transformNode = null;\n let node = this.directiveElementRef.nativeElement.parentNode;\n const dialogHeight = this.dialogElement.nativeElement.offsetHeight;\n while (node !== null && node.tagName !== 'HTML') {\n style = window.getComputedStyle(node);\n position = style.getPropertyValue('position');\n transform = style.getPropertyValue('transform');\n if (position !== 'static' && parentNode === null) {\n parentNode = node;\n }\n if (transform && transform !== 'none' && transformNode === null) {\n transformNode = node;\n }\n if (position === 'fixed') {\n parentNode = transformNode;\n break;\n }\n node = node.parentNode;\n }\n const boxDirective = this.createDialogBox(this.directiveElementRef.nativeElement, (position !== 'fixed'));\n if (this.useRootViewContainer || (position === 'fixed' &&\n (!parentNode || parentNode instanceof HTMLUnknownElement))) {\n this.top = boxDirective.top;\n this.left = boxDirective.left;\n }\n else {\n if (parentNode === null) {\n parentNode = node;\n }\n const boxParent = this.createDialogBox(parentNode, (position !== 'fixed'));\n this.top = boxDirective.top - boxParent.top;\n this.left = boxDirective.left - boxParent.left;\n }\n if (position === 'fixed') {\n this.position = 'fixed';\n }\n let usePosition = this.cpPosition;\n if (this.cpPosition === 'auto') {\n let usePositionX = 'right';\n let usePositionY = 'bottom';\n const winWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n const winHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n if (this.left + this.cpWidth > winWidth) {\n usePositionX = 'left';\n }\n if (this.top + dialogHeight > winHeight) {\n usePositionY = 'top';\n }\n usePosition = usePositionX + '-' + usePositionY;\n }\n this.cpUsePosition = usePosition;\n if (usePosition === 'top') {\n this.arrowTop = dialogHeight - 1;\n this.top -= dialogHeight + this.dialogArrowSize;\n this.left += this.cpPositionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n }\n else if (usePosition === 'bottom') {\n this.top += boxDirective.height + this.dialogArrowSize;\n this.left += this.cpPositionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n }\n else if (usePosition === 'top-left' || usePosition === 'left-top') {\n this.top -= dialogHeight - boxDirective.height + boxDirective.height * this.cpPositionOffset / 100;\n this.left -= this.cpWidth + this.dialogArrowSize - 2 - this.dialogArrowOffset;\n }\n else if (usePosition === 'top-right' || usePosition === 'right-top') {\n this.top -= dialogHeight - boxDirective.height + boxDirective.height * this.cpPositionOffset / 100;\n this.left += boxDirective.width + this.dialogArrowSize - 2 - this.dialogArrowOffset;\n }\n else if (usePosition === 'left' || usePosition === 'bottom-left' || usePosition === 'left-bottom') {\n this.top += boxDirective.height * this.cpPositionOffset / 100 - this.dialogArrowOffset;\n this.left -= this.cpWidth + this.dialogArrowSize - 2;\n }\n else { // usePosition === 'right' || usePosition === 'bottom-right' || usePosition === 'right-bottom'\n this.top += boxDirective.height * this.cpPositionOffset / 100 - this.dialogArrowOffset;\n this.left += boxDirective.width + this.dialogArrowSize - 2;\n }\n }\n }\n // Private helper functions for the color picker dialog positioning and opening\n isDescendant(parent, child) {\n let node = child.parentNode;\n while (node !== null) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n createDialogBox(element, offset) {\n return {\n top: element.getBoundingClientRect().top + (offset ? window.pageYOffset : 0),\n left: element.getBoundingClientRect().left + (offset ? window.pageXOffset : 0),\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n }\n}\nColorPickerComponent.ɵfac = function ColorPickerComponent_Factory(t) { return new (t || ColorPickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ColorPickerService)); };\nColorPickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColorPickerComponent, selectors: [[\"color-picker\"]], viewQuery: function ColorPickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c0, true);\n ɵngcc0.ɵɵstaticViewQuery(_c1, true);\n ɵngcc0.ɵɵstaticViewQuery(_c2, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogElement = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.hueSlider = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.alphaSlider = _t.first);\n } }, hostBindings: function ColorPickerComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keyup.esc\", function ColorPickerComponent_keyup_esc_HostBindingHandler($event) { return ctx.handleEsc($event); }, false, ɵngcc0.ɵɵresolveDocument)(\"keyup.enter\", function ColorPickerComponent_keyup_enter_HostBindingHandler($event) { return ctx.handleEnter($event); }, false, ɵngcc0.ɵɵresolveDocument);\n } }, decls: 28, vars: 47, consts: [[1, \"color-picker\", 3, \"click\"], [\"dialogPopup\", \"\"], [3, \"class\", \"top\", 4, \"ngIf\"], [\"class\", \"saturation-lightness\", 3, \"slider\", \"rgX\", \"rgY\", \"background-color\", \"newValue\", \"dragStart\", \"dragEnd\", 4, \"ngIf\"], [1, \"hue-alpha\", \"box\"], [1, \"left\"], [1, \"selected-color-background\"], [1, \"selected-color\"], [\"type\", \"button\", 3, \"class\", \"disabled\", \"click\", 4, \"ngIf\"], [1, \"right\"], [\"style\", \"height: 16px;\", 4, \"ngIf\"], [1, \"hue\", 3, \"slider\", \"rgX\", \"newValue\", \"dragStart\", \"dragEnd\"], [\"hueSlider\", \"\"], [1, \"cursor\"], [1, \"value\", 3, \"slider\", \"rgX\", \"newValue\", \"dragStart\", \"dragEnd\"], [\"valueSlider\", \"\"], [1, \"alpha\", 3, \"slider\", \"rgX\", \"newValue\", \"dragStart\", \"dragEnd\"], [\"alphaSlider\", \"\"], [\"class\", \"cmyk-text\", 3, \"display\", 4, \"ngIf\"], [\"class\", \"hsla-text\", 3, \"display\", 4, \"ngIf\"], [\"class\", \"rgba-text\", 3, \"display\", 4, \"ngIf\"], [\"class\", \"hex-text\", 3, \"hex-alpha\", \"display\", 4, \"ngIf\"], [\"class\", \"value-text\", 4, \"ngIf\"], [\"class\", \"type-policy\", 4, \"ngIf\"], [\"class\", \"preset-area\", 4, \"ngIf\"], [\"class\", \"button-area\", 4, \"ngIf\"], [1, \"saturation-lightness\", 3, \"slider\", \"rgX\", \"rgY\", \"newValue\", \"dragStart\", \"dragEnd\"], [\"type\", \"button\", 3, \"disabled\", \"click\"], [2, \"height\", \"16px\"], [1, \"cmyk-text\"], [1, \"box\"], [\"type\", \"number\", \"pattern\", \"[0-9]*\", \"min\", \"0\", \"max\", \"100\", 3, \"text\", \"rg\", \"value\", \"keyup.enter\", \"newValue\"], [\"type\", \"number\", \"pattern\", \"[0-9]+([\\\\.,][0-9]{1,2})?\", \"min\", \"0\", \"max\", \"1\", \"step\", \"0.1\", 3, \"text\", \"rg\", \"value\", \"keyup.enter\", \"newValue\", 4, \"ngIf\"], [4, \"ngIf\"], [\"type\", \"number\", \"pattern\", \"[0-9]+([\\\\.,][0-9]{1,2})?\", \"min\", \"0\", \"max\", \"1\", \"step\", \"0.1\", 3, \"text\", \"rg\", \"value\", \"keyup.enter\", \"newValue\"], [1, \"hsla-text\"], [\"type\", \"number\", \"pattern\", \"[0-9]*\", \"min\", \"0\", \"max\", \"360\", 3, \"text\", \"rg\", \"value\", \"keyup.enter\", \"newValue\"], [1, \"rgba-text\"], [\"type\", \"number\", \"pattern\", \"[0-9]*\", \"min\", \"0\", \"max\", \"255\", 3, \"text\", \"rg\", \"value\", \"keyup.enter\", \"newValue\"], [1, \"hex-text\"], [3, \"text\", \"value\", \"blur\", \"keyup.enter\", \"newValue\"], [1, \"value-text\"], [1, \"type-policy\"], [1, \"type-policy-arrow\", 3, \"click\"], [1, \"preset-area\"], [1, \"preset-label\"], [3, \"class\", 4, \"ngIf\"], [\"class\", \"preset-color\", 3, \"backgroundColor\", \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"preset-color\", 3, \"click\"], [3, \"class\", \"click\", 4, \"ngIf\"], [3, \"click\"], [1, \"button-area\"], [\"type\", \"button\", 3, \"class\", \"click\", 4, \"ngIf\"], [\"type\", \"button\", 3, \"click\"]], template: function ColorPickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_Template_div_click_0_listener($event) { return $event.stopPropagation(); });\n ɵngcc0.ɵɵtemplate(2, ColorPickerComponent_div_2_Template, 1, 5, \"div\", 2);\n ɵngcc0.ɵɵtemplate(3, ColorPickerComponent_div_3_Template, 2, 8, \"div\", 3);\n ɵngcc0.ɵɵelementStart(4, \"div\", 4);\n ɵngcc0.ɵɵelementStart(5, \"div\", 5);\n ɵngcc0.ɵɵelement(6, \"div\", 6);\n ɵngcc0.ɵɵelement(7, \"div\", 7);\n ɵngcc0.ɵɵtemplate(8, ColorPickerComponent_button_8_Template, 2, 5, \"button\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"div\", 9);\n ɵngcc0.ɵɵtemplate(10, ColorPickerComponent_div_10_Template, 1, 0, \"div\", 10);\n ɵngcc0.ɵɵelementStart(11, \"div\", 11, 12);\n ɵngcc0.ɵɵlistener(\"newValue\", function ColorPickerComponent_Template_div_newValue_11_listener($event) { return ctx.onHueChange($event); })(\"dragStart\", function ColorPickerComponent_Template_div_dragStart_11_listener() { return ctx.onDragStart(\"hue\"); })(\"dragEnd\", function ColorPickerComponent_Template_div_dragEnd_11_listener() { return ctx.onDragEnd(\"hue\"); });\n ɵngcc0.ɵɵelement(13, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(14, \"div\", 14, 15);\n ɵngcc0.ɵɵlistener(\"newValue\", function ColorPickerComponent_Template_div_newValue_14_listener($event) { return ctx.onValueChange($event); })(\"dragStart\", function ColorPickerComponent_Template_div_dragStart_14_listener() { return ctx.onDragStart(\"value\"); })(\"dragEnd\", function ColorPickerComponent_Template_div_dragEnd_14_listener() { return ctx.onDragEnd(\"value\"); });\n ɵngcc0.ɵɵelement(16, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(17, \"div\", 16, 17);\n ɵngcc0.ɵɵlistener(\"newValue\", function ColorPickerComponent_Template_div_newValue_17_listener($event) { return ctx.onAlphaChange($event); })(\"dragStart\", function ColorPickerComponent_Template_div_dragStart_17_listener() { return ctx.onDragStart(\"alpha\"); })(\"dragEnd\", function ColorPickerComponent_Template_div_dragEnd_17_listener() { return ctx.onDragEnd(\"alpha\"); });\n ɵngcc0.ɵɵelement(19, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(20, ColorPickerComponent_div_20_Template, 17, 12, \"div\", 18);\n ɵngcc0.ɵɵtemplate(21, ColorPickerComponent_div_21_Template, 14, 10, \"div\", 19);\n ɵngcc0.ɵɵtemplate(22, ColorPickerComponent_div_22_Template, 14, 10, \"div\", 20);\n ɵngcc0.ɵɵtemplate(23, ColorPickerComponent_div_23_Template, 8, 7, \"div\", 21);\n ɵngcc0.ɵɵtemplate(24, ColorPickerComponent_div_24_Template, 9, 3, \"div\", 22);\n ɵngcc0.ɵɵtemplate(25, ColorPickerComponent_div_25_Template, 3, 0, \"div\", 23);\n ɵngcc0.ɵɵtemplate(26, ColorPickerComponent_div_26_Template, 6, 3, \"div\", 24);\n ɵngcc0.ɵɵtemplate(27, ColorPickerComponent_div_27_Template, 3, 2, \"div\", 25);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", !ctx.show ? \"none\" : \"block\")(\"visibility\", ctx.hidden ? \"hidden\" : \"visible\")(\"top\", ctx.top, \"px\")(\"left\", ctx.left, \"px\")(\"position\", ctx.position)(\"height\", ctx.cpHeight, \"px\")(\"width\", ctx.cpWidth, \"px\");\n ɵngcc0.ɵɵclassProp(\"open\", ctx.show);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.cpDialogDisplay == \"popup\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx.selectedColor);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.cpAddColorButton);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.cpAlphaChannel === \"disabled\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"display\", (ctx.cpColorMode || 1) === 1 ? \"block\" : \"none\");\n ɵngcc0.ɵɵproperty(\"rgX\", 1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"left\", ctx.slider == null ? null : ctx.slider.h, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"display\", (ctx.cpColorMode || 1) === 2 ? \"block\" : \"none\");\n ɵngcc0.ɵɵproperty(\"rgX\", 1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"right\", ctx.slider == null ? null : ctx.slider.v, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.cpAlphaChannel === \"disabled\" ? \"none\" : \"block\")(\"background-color\", ctx.alphaSliderColor);\n ɵngcc0.ɵɵproperty(\"rgX\", 1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"left\", ctx.slider == null ? null : ctx.slider.a, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.cpDisableInput && (ctx.cpColorMode || 1) === 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (ctx.cpPresetColors == null ? null : ctx.cpPresetColors.length) || ctx.cpAddColorButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.cpOKButton || ctx.cpCancelButton);\n } }, directives: [ɵngcc1.NgIf, SliderDirective, TextDirective, ɵngcc1.NgForOf], styles: [\".color-picker{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background-color:#fff;border:1px solid #777;cursor:default;height:auto;position:absolute;user-select:none;width:230px;z-index:1000}.color-picker *{box-sizing:border-box;font-size:11px;margin:0}.color-picker input{color:#000;font-size:13px;height:26px;min-width:0;text-align:center;width:0}.color-picker input:-moz-submit-invalid,.color-picker input:-moz-ui-invalid,.color-picker input:invalid{box-shadow:none}.color-picker input::-webkit-inner-spin-button,.color-picker input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.color-picker .arrow{border-style:solid;height:0;position:absolute;width:0;z-index:999999}.color-picker .arrow.arrow-top{border-color:#777 transparent transparent;border-width:10px 5px;left:8px}.color-picker .arrow.arrow-bottom{border-color:transparent transparent #777;border-width:10px 5px;left:8px;top:-20px}.color-picker .arrow.arrow-left-top,.color-picker .arrow.arrow-top-left{border-color:transparent transparent transparent #777;border-width:5px 10px;bottom:8px;right:-21px}.color-picker .arrow.arrow-right-top,.color-picker .arrow.arrow-top-right{border-color:transparent #777 transparent transparent;border-width:5px 10px;bottom:8px;left:-20px}.color-picker .arrow.arrow-bottom-left,.color-picker .arrow.arrow-left,.color-picker .arrow.arrow-left-bottom{border-color:transparent transparent transparent #777;border-width:5px 10px;right:-21px;top:8px}.color-picker .arrow.arrow-bottom-right,.color-picker .arrow.arrow-right,.color-picker .arrow.arrow-right-bottom{border-color:transparent #777 transparent transparent;border-width:5px 10px;left:-20px;top:8px}.color-picker .cursor{border:2px solid #222;border-radius:50%;cursor:default;height:16px;position:relative;width:16px}.color-picker .box{display:flex;padding:4px 8px}.color-picker .left{padding:16px 8px;position:relative}.color-picker .right{flex:1 1 auto;padding:12px 8px}.color-picker .button-area{padding:0 16px 16px;text-align:right}.color-picker .button-area button{margin-left:8px}.color-picker .preset-area{padding:4px 15px}.color-picker .preset-area .preset-label{color:#555;font-size:11px;overflow:hidden;padding:4px;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.color-picker .preset-area .preset-color{border:1px solid #a9a9a9;border-radius:25%;cursor:pointer;display:inline-block;height:18px;margin:4px 6px 8px;position:relative;width:18px}.color-picker .preset-area .preset-empty-message{font-style:italic;margin-bottom:8px;margin-top:4px;min-height:18px;text-align:center}.color-picker .hex-text{font-size:11px;padding:4px 8px;width:100%}.color-picker .hex-text .box{padding:0 24px 8px 8px}.color-picker .hex-text .box div{clear:left;color:#555;flex:1 1 auto;float:left;text-align:center}.color-picker .hex-text .box input{border:1px solid #a9a9a9;flex:1 1 auto;padding:1px}.color-picker .hex-alpha .box div:first-child,.color-picker .hex-alpha .box input:first-child{flex-grow:3;margin-right:8px}.color-picker .cmyk-text,.color-picker .hsla-text,.color-picker .rgba-text,.color-picker .value-text{font-size:11px;padding:4px 8px;width:100%}.color-picker .cmyk-text .box,.color-picker .hsla-text .box,.color-picker .rgba-text .box{padding:0 24px 8px 8px}.color-picker .value-text .box{padding:0 8px 8px}.color-picker .cmyk-text .box div,.color-picker .hsla-text .box div,.color-picker .rgba-text .box div,.color-picker .value-text .box div{color:#555;flex:1 1 auto;margin-right:8px;text-align:center}.color-picker .cmyk-text .box div:last-child,.color-picker .hsla-text .box div:last-child,.color-picker .rgba-text .box div:last-child,.color-picker .value-text .box div:last-child{margin-right:0}.color-picker .cmyk-text .box input,.color-picker .hsla-text .box input,.color-picker .rgba-text .box input,.color-picker .value-text .box input{border:1px solid #a9a9a9;flex:1;float:left;margin:0 8px 0 0;padding:1px}.color-picker .cmyk-text .box input:last-child,.color-picker .hsla-text .box input:last-child,.color-picker .rgba-text .box input:last-child,.color-picker .value-text .box input:last-child{margin-right:0}.color-picker .hue-alpha{align-items:center;margin-bottom:3px}.color-picker .hue{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC\\\");direction:ltr}.color-picker .hue,.color-picker .value{background-size:100% 100%;border:none;cursor:pointer;height:16px;margin-bottom:16px;width:100%}.color-picker .value{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAACTklEQVR42u3SYUcrABhA4U2SkmRJMmWSJklKJiWZZpKUJJskKUmaTFImKZOUzMySpGRmliRNJilJSpKSJEtmSpIpmWmSdO736/6D+x7OP3gUCoWCv1cqlSQlJZGcnExKSgqpqamkpaWRnp5ORkYGmZmZqFQqsrKyyM7OJicnh9zcXNRqNXl5eeTn56PRaCgoKKCwsJCioiK0Wi3FxcWUlJRQWlpKWVkZ5eXlVFRUUFlZiU6no6qqiurqampqaqitraWurg69Xk99fT0GgwGj0UhDQwONjY00NTXR3NxMS0sLra2ttLW10d7ejslkwmw209HRQWdnJ11dXXR3d9PT00Nvby99fX309/czMDDA4OAgFouFoaEhrFYrw8PDjIyMMDo6ytjYGDabjfHxcSYmJpicnGRqagq73c709DQzMzPMzs4yNzfH/Pw8DocDp9OJy+XC7XazsLDA4uIiS0tLLC8vs7KywurqKmtra3g8HrxeLz6fD7/fz/r6OhsbG2xubrK1tcX29jaBQICdnR2CwSC7u7vs7e2xv7/PwcEBh4eHHB0dcXx8zMnJCaenp5ydnXF+fs7FxQWXl5dcXV1xfX3Nzc0Nt7e33N3dEQqFuL+/5+HhgXA4TCQS4fHxkaenJ56fn3l5eeH19ZVoNMrb2xvv7+98fHwQi8WIx+N8fn6SSCT4+vri+/ubn58ffn9/+VcKgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsP4/WH8AmJ5Z6jHS4h8AAAAASUVORK5CYII=\\\");direction:rtl}.color-picker .alpha{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwYQlZMa3gAAAWVJREFUaN7tmEGO6jAQRCsOArHgBpyAJYGjcGocxAm4A2IHpmoWE0eBH+ezmFlNvU06shJ3W6VEelWMUQAIIF9f6qZpimsA1LYtS2uF51/u27YVAFZVRUkEoGHdPV/sIcbIEIIkUdI/9Xa7neyv61+SWFUVAVCSct00TWn2fv6u3+Ecfd3tXzy/0+nEUu+SPjo/kqzrmiQpScN6v98XewfA8/lMkiLJ2WxGSUopcT6fM6U0NX9/frfbjev1WtfrlZfLhYfDQQHG/AIOlnGwjINlHCxjHCzjYJm/TJWdCwquJXseFFzGwDNNeiKMOJTO8xQdDQaeB29+K9efeLaBo9J7vdvtJj1RjFFjfiv7qv95tjx/7leSQgh93e1ffMeIp6O+YQjho/N791t1XVOSSI7N//K+4/GoxWLBx+PB5/Op5XLJ+/3OlJJWqxU3m83ovv5iGf8KjYNlHCxjHCzjYBkHy5gf5gusvQU7U37jTAAAAABJRU5ErkJggg==\\\");background-size:100% 100%;border:none;cursor:pointer;direction:ltr;height:16px;width:100%}.color-picker .type-policy{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACewAAAnsB01CO3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVEiJ7ZY9axRRFIafsxMStrLQJpAgpBFhi+C9w1YSo00I6RZ/g9vZpBf/QOr4GyRgkSKNSrAadsZqQGwCkuAWyRZJsySwvhZ7N/vhzrgbLH3Ld8597jlzz50zJokyxXH8DqDVar0qi6v8BbItqSGpEcfxdlmsFWXkvX8AfAVWg3UKPEnT9GKujMzsAFgZsVaCN1VTQd77XUnrgE1kv+6935268WRpzrnHZvYRWC7YvC3pRZZl3wozqtVqiyH9IgjAspkd1Gq1xUJQtVrdB9ZKIAOthdg/Qc65LUk7wNIMoCVJO865rYFhkqjX6/d7vV4GPJwBMqofURS5JEk6FYBer/eeYb/Mo9WwFnPOvQbeAvfuAAK4BN4sAJtAG/gJIElmNuiJyba3EGNmZiPeZuEVmVell/Y/6N+CzDn3AXhEOOo7Hv/3BeAz8IzQkMPnJbuPx1wC+yYJ7/0nYIP5S/0FHKdp+rwCEEXRS/rf5Hl1Gtb2M0iSpCOpCZzPATmX1EySpHMLAsiy7MjMDoHrGSDXZnaYZdnRwBh7J91utwmczAA6CbG3GgPleX4jqUH/a1CktqRGnuc3hSCAMB32gKspkCtgb3KCQMmkjeP4WNJThrNNZval1WptTIsv7JtQ4tmIdRa8qSoEpWl6YWZNoAN0zKxZNPehpLSBZv2t+Q0CJ9lLnARQLAAAAABJRU5ErkJggg==\\\");background-position:50%;background-repeat:no-repeat;background-size:8px 16px;height:24px;position:absolute;right:12px;top:218px;width:16px}.color-picker .type-policy .type-policy-arrow{display:block;height:50%;width:100%}.color-picker .selected-color{border:1px solid #a9a9a9;border-radius:50%;height:40px;left:8px;position:absolute;top:16px;width:40px}.color-picker .selected-color-background{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC\\\");border-radius:50%;height:40px;width:40px}.color-picker .saturation-lightness{background-image:url(\\\"data:image/png;base64,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\\\");background-size:100% 100%;border:none;cursor:pointer;direction:ltr;height:130px;touch-action:manipulation;width:100%}.color-picker .cp-add-color-button-class{background:transparent;border:0;cursor:pointer;display:inline;margin:3px -3px;padding:0;position:absolute}.color-picker .cp-add-color-button-class:hover{text-decoration:underline}.color-picker .cp-add-color-button-class:disabled{color:#999;cursor:not-allowed}.color-picker .cp-add-color-button-class:disabled:hover{text-decoration:none}.color-picker .cp-remove-color-button-class{background:#fff;border-radius:50%;box-shadow:1px 1px 5px #333;cursor:pointer;display:block;height:10px;position:absolute;right:-5px;text-align:center;top:-5px;width:10px}.color-picker .cp-remove-color-button-class:before{bottom:3.5px;content:\\\"x\\\";display:inline-block;font-size:10px;position:relative}\"], encapsulation: 2 });\nColorPickerComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: ColorPickerService }\n];\nColorPickerComponent.propDecorators = {\n dialogElement: [{ type: ViewChild, args: ['dialogPopup', { static: true },] }],\n hueSlider: [{ type: ViewChild, args: ['hueSlider', { static: true },] }],\n alphaSlider: [{ type: ViewChild, args: ['alphaSlider', { static: true },] }],\n handleEsc: [{ type: HostListener, args: ['document:keyup.esc', ['$event'],] }],\n handleEnter: [{ type: HostListener, args: ['document:keyup.enter', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerComponent, [{\n type: Component,\n args: [{\n selector: 'color-picker',\n template: \"<div #dialogPopup class=\\\"color-picker\\\" [class.open]=\\\"show\\\" [style.display]=\\\"!show ? 'none' : 'block'\\\" [style.visibility]=\\\"hidden ? 'hidden' : 'visible'\\\" [style.top.px]=\\\"top\\\" [style.left.px]=\\\"left\\\" [style.position]=\\\"position\\\" [style.height.px]=\\\"cpHeight\\\" [style.width.px]=\\\"cpWidth\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <div *ngIf=\\\"cpDialogDisplay=='popup'\\\" class=\\\"arrow arrow-{{cpUsePosition}}\\\" [style.top.px]=\\\"arrowTop\\\"></div>\\n\\n <div *ngIf=\\\"(cpColorMode ||\\u00A01) === 1\\\" class=\\\"saturation-lightness\\\" [slider] [rgX]=\\\"1\\\" [rgY]=\\\"1\\\" [style.background-color]=\\\"hueSliderColor\\\" (newValue)=\\\"onColorChange($event)\\\" (dragStart)=\\\"onDragStart('saturation-lightness')\\\" (dragEnd)=\\\"onDragEnd('saturation-lightness')\\\">\\n <div class=\\\"cursor\\\" [style.top.px]=\\\"slider?.v\\\" [style.left.px]=\\\"slider?.s\\\"></div>\\n </div>\\n\\n <div class=\\\"hue-alpha box\\\">\\n <div class=\\\"left\\\">\\n <div class=\\\"selected-color-background\\\"></div>\\n\\n <div class=\\\"selected-color\\\" [style.background-color]=\\\"selectedColor\\\"></div>\\n\\n <button *ngIf=\\\"cpAddColorButton\\\" type=\\\"button\\\" class=\\\"{{cpAddColorButtonClass}}\\\" [disabled]=\\\"cpPresetColors && cpPresetColors.length >= cpMaxPresetColorsLength\\\" (click)=\\\"onAddPresetColor($event, selectedColor)\\\">\\n {{cpAddColorButtonText}}\\n </button>\\n </div>\\n\\n <div class=\\\"right\\\">\\n <div *ngIf=\\\"cpAlphaChannel==='disabled'\\\" style=\\\"height: 16px;\\\"></div>\\n\\n <div #hueSlider class=\\\"hue\\\" [slider] [rgX]=\\\"1\\\" [style.display]=\\\"(cpColorMode ||\\u00A01) === 1 ? 'block' : 'none'\\\" (newValue)=\\\"onHueChange($event)\\\" (dragStart)=\\\"onDragStart('hue')\\\" (dragEnd)=\\\"onDragEnd('hue')\\\">\\n <div class=\\\"cursor\\\" [style.left.px]=\\\"slider?.h\\\"></div>\\n </div>\\n\\n <div #valueSlider class=\\\"value\\\" [slider] [rgX]=\\\"1\\\" [style.display]=\\\"(cpColorMode ||\\u00A01) === 2 ? 'block': 'none'\\\" (newValue)=\\\"onValueChange($event)\\\" (dragStart)=\\\"onDragStart('value')\\\" (dragEnd)=\\\"onDragEnd('value')\\\">\\n <div class=\\\"cursor\\\" [style.right.px]=\\\"slider?.v\\\"></div>\\n </div>\\n\\n <div #alphaSlider class=\\\"alpha\\\" [slider] [rgX]=\\\"1\\\" [style.display]=\\\"cpAlphaChannel === 'disabled' ? 'none' : 'block'\\\" [style.background-color]=\\\"alphaSliderColor\\\" (newValue)=\\\"onAlphaChange($event)\\\" (dragStart)=\\\"onDragStart('alpha')\\\" (dragEnd)=\\\"onDragEnd('alpha')\\\">\\n <div class=\\\"cursor\\\" [style.left.px]=\\\"slider?.a\\\"></div>\\n </div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 1\\\" class=\\\"cmyk-text\\\" [style.display]=\\\"format !== 3 ? 'none' : 'block'\\\">\\n <div class=\\\"box\\\">\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"cmykText?.c\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onCyanInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"cmykText?.m\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onMagentaInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"cmykText?.y\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onYellowInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"cmykText?.k\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onBlackInput($event)\\\" />\\n <input *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [text] [rg]=\\\"1\\\" [value]=\\\"cmykText?.a\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onAlphaInput($event)\\\" />\\n </div>\\n\\n <div class=\\\"box\\\">\\n <div>C</div><div>M</div><div>Y</div><div>K</div><div *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" >A</div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 1 \\\" class=\\\"hsla-text\\\" [style.display]=\\\"format !== 2 ? 'none' : 'block'\\\">\\n <div class=\\\"box\\\">\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"360\\\" [text] [rg]=\\\"360\\\" [value]=\\\"hslaText?.h\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onHueInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"hslaText?.s\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onSaturationInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"hslaText?.l\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onLightnessInput($event)\\\" />\\n <input *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [text] [rg]=\\\"1\\\" [value]=\\\"hslaText?.a\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onAlphaInput($event)\\\" />\\n </div>\\n\\n <div class=\\\"box\\\">\\n <div>H</div><div>S</div><div>L</div><div *ngIf=\\\"cpAlphaChannel!=='disabled'\\\">A</div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 1 \\\" [style.display]=\\\"format !== 1 ? 'none' : 'block'\\\" class=\\\"rgba-text\\\">\\n <div class=\\\"box\\\">\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [text] [rg]=\\\"255\\\" [value]=\\\"rgbaText?.r\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onRedInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [text] [rg]=\\\"255\\\" [value]=\\\"rgbaText?.g\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onGreenInput($event)\\\" />\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [text] [rg]=\\\"255\\\" [value]=\\\"rgbaText?.b\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onBlueInput($event)\\\" />\\n <input *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [text] [rg]=\\\"1\\\" [value]=\\\"rgbaText?.a\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onAlphaInput($event)\\\" />\\n </div>\\n\\n <div class=\\\"box\\\">\\n <div>R</div><div>G</div><div>B</div><div *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" >A</div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 1\\\" class=\\\"hex-text\\\" [class.hex-alpha]=\\\"cpAlphaChannel==='forced'\\\"\\n [style.display]=\\\"format !== 0 ? 'none' : 'block'\\\">\\n <div class=\\\"box\\\">\\n <input [text] [value]=\\\"hexText\\\" (blur)=\\\"onHexInput(null)\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onHexInput($event)\\\"/>\\n <input *ngIf=\\\"cpAlphaChannel==='forced'\\\" type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [text] [rg]=\\\"1\\\" [value]=\\\"hexAlpha\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onAlphaInput($event)\\\"/>\\n </div>\\n\\n <div class=\\\"box\\\">\\n <div>Hex</div>\\n <div *ngIf=\\\"cpAlphaChannel==='forced'\\\">A</div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 2\\\" class=\\\"value-text\\\">\\n <div class=\\\"box\\\">\\n <input type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [text] [rg]=\\\"100\\\" [value]=\\\"hslaText?.l\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onValueInput($event)\\\" />\\n <input *ngIf=\\\"cpAlphaChannel!=='disabled'\\\" type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [text] [rg]=\\\"1\\\" [value]=\\\"hslaText?.a\\\" (keyup.enter)=\\\"onAcceptColor($event)\\\" (newValue)=\\\"onAlphaInput($event)\\\" />\\n </div>\\n\\n <div class=\\\"box\\\">\\n <div>V</div><div>A</div>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpDisableInput && (cpColorMode ||\\u00A01) === 1\\\" class=\\\"type-policy\\\">\\n <span class=\\\"type-policy-arrow\\\" (click)=\\\"onFormatToggle(-1)\\\"></span>\\n <span class=\\\"type-policy-arrow\\\" (click)=\\\"onFormatToggle(1)\\\"></span>\\n </div>\\n\\n <div *ngIf=\\\"cpPresetColors?.length || cpAddColorButton\\\" class=\\\"preset-area\\\">\\n <hr>\\n\\n <div class=\\\"preset-label\\\">{{cpPresetLabel}}</div>\\n\\n <div *ngIf=\\\"cpPresetColors?.length\\\" class=\\\"{{cpPresetColorsClass}}\\\">\\n <div *ngFor=\\\"let color of cpPresetColors\\\" class=\\\"preset-color\\\" [style.backgroundColor]=\\\"color\\\" (click)=\\\"setColorFromString(color)\\\">\\n <span *ngIf=\\\"cpAddColorButton\\\" class=\\\"{{cpRemoveColorButtonClass}}\\\" (click)=\\\"onRemovePresetColor($event, color)\\\"></span>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"!cpPresetColors?.length && cpAddColorButton\\\" class=\\\"{{cpPresetEmptyMessageClass}}\\\">{{cpPresetEmptyMessage}}</div>\\n </div>\\n\\n <div *ngIf=\\\"cpOKButton || cpCancelButton\\\" class=\\\"button-area\\\">\\n <button *ngIf=\\\"cpCancelButton\\\" type=\\\"button\\\" class=\\\"{{cpCancelButtonClass}}\\\" (click)=\\\"onCancelColor($event)\\\">{{cpCancelButtonText}}</button>\\n\\n <button *ngIf=\\\"cpOKButton\\\" type=\\\"button\\\" class=\\\"{{cpOKButtonClass}}\\\" (click)=\\\"onAcceptColor($event)\\\">{{cpOKButtonText}}</button>\\n </div>\\n</div>\\n\",\n encapsulation: ViewEncapsulation.None,\n styles: [\".color-picker{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background-color:#fff;border:1px solid #777;cursor:default;height:auto;position:absolute;user-select:none;width:230px;z-index:1000}.color-picker *{box-sizing:border-box;font-size:11px;margin:0}.color-picker input{color:#000;font-size:13px;height:26px;min-width:0;text-align:center;width:0}.color-picker input:-moz-submit-invalid,.color-picker input:-moz-ui-invalid,.color-picker input:invalid{box-shadow:none}.color-picker input::-webkit-inner-spin-button,.color-picker input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.color-picker .arrow{border-style:solid;height:0;position:absolute;width:0;z-index:999999}.color-picker .arrow.arrow-top{border-color:#777 transparent transparent;border-width:10px 5px;left:8px}.color-picker .arrow.arrow-bottom{border-color:transparent transparent #777;border-width:10px 5px;left:8px;top:-20px}.color-picker .arrow.arrow-left-top,.color-picker .arrow.arrow-top-left{border-color:transparent transparent transparent #777;border-width:5px 10px;bottom:8px;right:-21px}.color-picker .arrow.arrow-right-top,.color-picker .arrow.arrow-top-right{border-color:transparent #777 transparent transparent;border-width:5px 10px;bottom:8px;left:-20px}.color-picker .arrow.arrow-bottom-left,.color-picker .arrow.arrow-left,.color-picker .arrow.arrow-left-bottom{border-color:transparent transparent transparent #777;border-width:5px 10px;right:-21px;top:8px}.color-picker .arrow.arrow-bottom-right,.color-picker .arrow.arrow-right,.color-picker .arrow.arrow-right-bottom{border-color:transparent #777 transparent transparent;border-width:5px 10px;left:-20px;top:8px}.color-picker .cursor{border:2px solid #222;border-radius:50%;cursor:default;height:16px;position:relative;width:16px}.color-picker .box{display:flex;padding:4px 8px}.color-picker .left{padding:16px 8px;position:relative}.color-picker .right{flex:1 1 auto;padding:12px 8px}.color-picker .button-area{padding:0 16px 16px;text-align:right}.color-picker .button-area button{margin-left:8px}.color-picker .preset-area{padding:4px 15px}.color-picker .preset-area .preset-label{color:#555;font-size:11px;overflow:hidden;padding:4px;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.color-picker .preset-area .preset-color{border:1px solid #a9a9a9;border-radius:25%;cursor:pointer;display:inline-block;height:18px;margin:4px 6px 8px;position:relative;width:18px}.color-picker .preset-area .preset-empty-message{font-style:italic;margin-bottom:8px;margin-top:4px;min-height:18px;text-align:center}.color-picker .hex-text{font-size:11px;padding:4px 8px;width:100%}.color-picker .hex-text .box{padding:0 24px 8px 8px}.color-picker .hex-text .box div{clear:left;color:#555;flex:1 1 auto;float:left;text-align:center}.color-picker .hex-text .box input{border:1px solid #a9a9a9;flex:1 1 auto;padding:1px}.color-picker .hex-alpha .box div:first-child,.color-picker .hex-alpha .box input:first-child{flex-grow:3;margin-right:8px}.color-picker .cmyk-text,.color-picker .hsla-text,.color-picker .rgba-text,.color-picker .value-text{font-size:11px;padding:4px 8px;width:100%}.color-picker .cmyk-text .box,.color-picker .hsla-text .box,.color-picker .rgba-text .box{padding:0 24px 8px 8px}.color-picker .value-text .box{padding:0 8px 8px}.color-picker .cmyk-text .box div,.color-picker .hsla-text .box div,.color-picker .rgba-text .box div,.color-picker .value-text .box div{color:#555;flex:1 1 auto;margin-right:8px;text-align:center}.color-picker .cmyk-text .box div:last-child,.color-picker .hsla-text .box div:last-child,.color-picker .rgba-text .box div:last-child,.color-picker .value-text .box div:last-child{margin-right:0}.color-picker .cmyk-text .box input,.color-picker .hsla-text .box input,.color-picker .rgba-text .box input,.color-picker .value-text .box input{border:1px solid #a9a9a9;flex:1;float:left;margin:0 8px 0 0;padding:1px}.color-picker .cmyk-text .box input:last-child,.color-picker .hsla-text .box input:last-child,.color-picker .rgba-text .box input:last-child,.color-picker .value-text .box input:last-child{margin-right:0}.color-picker .hue-alpha{align-items:center;margin-bottom:3px}.color-picker .hue{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC\\\");direction:ltr}.color-picker .hue,.color-picker .value{background-size:100% 100%;border:none;cursor:pointer;height:16px;margin-bottom:16px;width:100%}.color-picker .value{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAACTklEQVR42u3SYUcrABhA4U2SkmRJMmWSJklKJiWZZpKUJJskKUmaTFImKZOUzMySpGRmliRNJilJSpKSJEtmSpIpmWmSdO736/6D+x7OP3gUCoWCv1cqlSQlJZGcnExKSgqpqamkpaWRnp5ORkYGmZmZqFQqsrKyyM7OJicnh9zcXNRqNXl5eeTn56PRaCgoKKCwsJCioiK0Wi3FxcWUlJRQWlpKWVkZ5eXlVFRUUFlZiU6no6qqiurqampqaqitraWurg69Xk99fT0GgwGj0UhDQwONjY00NTXR3NxMS0sLra2ttLW10d7ejslkwmw209HRQWdnJ11dXXR3d9PT00Nvby99fX309/czMDDA4OAgFouFoaEhrFYrw8PDjIyMMDo6ytjYGDabjfHxcSYmJpicnGRqagq73c709DQzMzPMzs4yNzfH/Pw8DocDp9OJy+XC7XazsLDA4uIiS0tLLC8vs7KywurqKmtra3g8HrxeLz6fD7/fz/r6OhsbG2xubrK1tcX29jaBQICdnR2CwSC7u7vs7e2xv7/PwcEBh4eHHB0dcXx8zMnJCaenp5ydnXF+fs7FxQWXl5dcXV1xfX3Nzc0Nt7e33N3dEQqFuL+/5+HhgXA4TCQS4fHxkaenJ56fn3l5eeH19ZVoNMrb2xvv7+98fHwQi8WIx+N8fn6SSCT4+vri+/ubn58ffn9/+VcKgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsP4/WH8AmJ5Z6jHS4h8AAAAASUVORK5CYII=\\\");direction:rtl}.color-picker .alpha{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwYQlZMa3gAAAWVJREFUaN7tmEGO6jAQRCsOArHgBpyAJYGjcGocxAm4A2IHpmoWE0eBH+ezmFlNvU06shJ3W6VEelWMUQAIIF9f6qZpimsA1LYtS2uF51/u27YVAFZVRUkEoGHdPV/sIcbIEIIkUdI/9Xa7neyv61+SWFUVAVCSct00TWn2fv6u3+Ecfd3tXzy/0+nEUu+SPjo/kqzrmiQpScN6v98XewfA8/lMkiLJ2WxGSUopcT6fM6U0NX9/frfbjev1WtfrlZfLhYfDQQHG/AIOlnGwjINlHCxjHCzjYJm/TJWdCwquJXseFFzGwDNNeiKMOJTO8xQdDQaeB29+K9efeLaBo9J7vdvtJj1RjFFjfiv7qv95tjx/7leSQgh93e1ffMeIp6O+YQjho/N791t1XVOSSI7N//K+4/GoxWLBx+PB5/Op5XLJ+/3OlJJWqxU3m83ovv5iGf8KjYNlHCxjHCzjYBkHy5gf5gusvQU7U37jTAAAAABJRU5ErkJggg==\\\");background-size:100% 100%;border:none;cursor:pointer;direction:ltr;height:16px;width:100%}.color-picker .type-policy{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACewAAAnsB01CO3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVEiJ7ZY9axRRFIafsxMStrLQJpAgpBFhi+C9w1YSo00I6RZ/g9vZpBf/QOr4GyRgkSKNSrAadsZqQGwCkuAWyRZJsySwvhZ7N/vhzrgbLH3Ld8597jlzz50zJokyxXH8DqDVar0qi6v8BbItqSGpEcfxdlmsFWXkvX8AfAVWg3UKPEnT9GKujMzsAFgZsVaCN1VTQd77XUnrgE1kv+6935268WRpzrnHZvYRWC7YvC3pRZZl3wozqtVqiyH9IgjAspkd1Gq1xUJQtVrdB9ZKIAOthdg/Qc65LUk7wNIMoCVJO865rYFhkqjX6/d7vV4GPJwBMqofURS5JEk6FYBer/eeYb/Mo9WwFnPOvQbeAvfuAAK4BN4sAJtAG/gJIElmNuiJyba3EGNmZiPeZuEVmVell/Y/6N+CzDn3AXhEOOo7Hv/3BeAz8IzQkMPnJbuPx1wC+yYJ7/0nYIP5S/0FHKdp+rwCEEXRS/rf5Hl1Gtb2M0iSpCOpCZzPATmX1EySpHMLAsiy7MjMDoHrGSDXZnaYZdnRwBh7J91utwmczAA6CbG3GgPleX4jqUH/a1CktqRGnuc3hSCAMB32gKspkCtgb3KCQMmkjeP4WNJThrNNZval1WptTIsv7JtQ4tmIdRa8qSoEpWl6YWZNoAN0zKxZNPehpLSBZv2t+Q0CJ9lLnARQLAAAAABJRU5ErkJggg==\\\");background-position:50%;background-repeat:no-repeat;background-size:8px 16px;height:24px;position:absolute;right:12px;top:218px;width:16px}.color-picker .type-policy .type-policy-arrow{display:block;height:50%;width:100%}.color-picker .selected-color{border:1px solid #a9a9a9;border-radius:50%;height:40px;left:8px;position:absolute;top:16px;width:40px}.color-picker .selected-color-background{background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC\\\");border-radius:50%;height:40px;width:40px}.color-picker .saturation-lightness{background-image:url(\\\"data:image/png;base64,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\\\");background-size:100% 100%;border:none;cursor:pointer;direction:ltr;height:130px;touch-action:manipulation;width:100%}.color-picker .cp-add-color-button-class{background:transparent;border:0;cursor:pointer;display:inline;margin:3px -3px;padding:0;position:absolute}.color-picker .cp-add-color-button-class:hover{text-decoration:underline}.color-picker .cp-add-color-button-class:disabled{color:#999;cursor:not-allowed}.color-picker .cp-add-color-button-class:disabled:hover{text-decoration:none}.color-picker .cp-remove-color-button-class{background:#fff;border-radius:50%;box-shadow:1px 1px 5px #333;cursor:pointer;display:block;height:10px;position:absolute;right:-5px;text-align:center;top:-5px;width:10px}.color-picker .cp-remove-color-button-class:before{bottom:3.5px;content:\\\"x\\\";display:inline-block;font-size:10px;position:relative}\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ColorPickerService }]; }, { handleEsc: [{\n type: HostListener,\n args: ['document:keyup.esc', ['$event']]\n }], handleEnter: [{\n type: HostListener,\n args: ['document:keyup.enter', ['$event']]\n }], dialogElement: [{\n type: ViewChild,\n args: ['dialogPopup', { static: true }]\n }], hueSlider: [{\n type: ViewChild,\n args: ['hueSlider', { static: true }]\n }], alphaSlider: [{\n type: ViewChild,\n args: ['alphaSlider', { static: true }]\n }] }); })();\n\nclass ColorPickerDirective {\n constructor(injector, cfr, appRef, vcRef, elRef, _service) {\n this.injector = injector;\n this.cfr = cfr;\n this.appRef = appRef;\n this.vcRef = vcRef;\n this.elRef = elRef;\n this._service = _service;\n this.dialogCreated = false;\n this.ignoreChanges = false;\n this.viewAttachedToAppRef = false;\n this.cpWidth = '230px';\n this.cpHeight = 'auto';\n this.cpToggle = false;\n this.cpDisabled = false;\n this.cpIgnoredElements = [];\n this.cpFallbackColor = '';\n this.cpColorMode = 'color';\n this.cpCmykEnabled = false;\n this.cpOutputFormat = 'auto';\n this.cpAlphaChannel = 'enabled';\n this.cpDisableInput = false;\n this.cpDialogDisplay = 'popup';\n this.cpSaveClickOutside = true;\n this.cpCloseClickOutside = true;\n this.cpUseRootViewContainer = false;\n this.cpPosition = 'auto';\n this.cpPositionOffset = '0%';\n this.cpPositionRelativeToArrow = false;\n this.cpOKButton = false;\n this.cpOKButtonText = 'OK';\n this.cpOKButtonClass = 'cp-ok-button-class';\n this.cpCancelButton = false;\n this.cpCancelButtonText = 'Cancel';\n this.cpCancelButtonClass = 'cp-cancel-button-class';\n this.cpPresetLabel = 'Preset colors';\n this.cpPresetColorsClass = 'cp-preset-colors-class';\n this.cpMaxPresetColorsLength = 6;\n this.cpPresetEmptyMessage = 'No colors added';\n this.cpPresetEmptyMessageClass = 'preset-empty-message';\n this.cpAddColorButton = false;\n this.cpAddColorButtonText = 'Add color';\n this.cpAddColorButtonClass = 'cp-add-color-button-class';\n this.cpRemoveColorButtonClass = 'cp-remove-color-button-class';\n this.cpInputChange = new EventEmitter(true);\n this.cpToggleChange = new EventEmitter(true);\n this.cpSliderChange = new EventEmitter(true);\n this.cpSliderDragEnd = new EventEmitter(true);\n this.cpSliderDragStart = new EventEmitter(true);\n this.colorPickerOpen = new EventEmitter(true);\n this.colorPickerClose = new EventEmitter(true);\n this.colorPickerCancel = new EventEmitter(true);\n this.colorPickerSelect = new EventEmitter(true);\n this.colorPickerChange = new EventEmitter(false);\n this.cpCmykColorChange = new EventEmitter(true);\n this.cpPresetColorsChange = new EventEmitter(true);\n }\n handleClick() {\n this.inputFocus();\n }\n handleFocus() {\n this.inputFocus();\n }\n handleInput(event) {\n this.inputChange(event);\n }\n ngOnDestroy() {\n if (this.cmpRef != null) {\n if (this.viewAttachedToAppRef) {\n this.appRef.detachView(this.cmpRef.hostView);\n }\n this.cmpRef.destroy();\n this.cmpRef = null;\n this.dialog = null;\n }\n }\n ngOnChanges(changes) {\n if (changes.cpToggle && !this.cpDisabled) {\n if (changes.cpToggle.currentValue) {\n this.openDialog();\n }\n else if (!changes.cpToggle.currentValue) {\n this.closeDialog();\n }\n }\n if (changes.colorPicker) {\n if (this.dialog && !this.ignoreChanges) {\n if (this.cpDialogDisplay === 'inline') {\n this.dialog.setInitialColor(changes.colorPicker.currentValue);\n }\n this.dialog.setColorFromString(changes.colorPicker.currentValue, false);\n if (this.cpUseRootViewContainer && this.cpDialogDisplay !== 'inline') {\n this.cmpRef.changeDetectorRef.detectChanges();\n }\n }\n this.ignoreChanges = false;\n }\n if (changes.cpPresetLabel || changes.cpPresetColors) {\n if (this.dialog) {\n this.dialog.setPresetConfig(this.cpPresetLabel, this.cpPresetColors);\n }\n }\n }\n openDialog() {\n if (!this.dialogCreated) {\n let vcRef = this.vcRef;\n this.dialogCreated = true;\n this.viewAttachedToAppRef = false;\n if (this.cpUseRootViewContainer && this.cpDialogDisplay !== 'inline') {\n const classOfRootComponent = this.appRef.componentTypes[0];\n const appInstance = this.injector.get(classOfRootComponent, Injector.NULL);\n if (appInstance !== Injector.NULL) {\n vcRef = appInstance.vcRef || appInstance.viewContainerRef || this.vcRef;\n if (vcRef === this.vcRef) {\n console.warn('You are using cpUseRootViewContainer, ' +\n 'but the root component is not exposing viewContainerRef!' +\n 'Please expose it by adding \\'public vcRef: ViewContainerRef\\' to the constructor.');\n }\n }\n else {\n this.viewAttachedToAppRef = true;\n }\n }\n const compFactory = this.cfr.resolveComponentFactory(ColorPickerComponent);\n if (this.viewAttachedToAppRef) {\n this.cmpRef = compFactory.create(this.injector);\n this.appRef.attachView(this.cmpRef.hostView);\n document.body.appendChild(this.cmpRef.hostView.rootNodes[0]);\n }\n else {\n const injector = ReflectiveInjector.fromResolvedProviders([], vcRef.parentInjector);\n this.cmpRef = vcRef.createComponent(compFactory, 0, injector, []);\n }\n this.cmpRef.instance.setupDialog(this, this.elRef, this.colorPicker, this.cpWidth, this.cpHeight, this.cpDialogDisplay, this.cpFallbackColor, this.cpColorMode, this.cpCmykEnabled, this.cpAlphaChannel, this.cpOutputFormat, this.cpDisableInput, this.cpIgnoredElements, this.cpSaveClickOutside, this.cpCloseClickOutside, this.cpUseRootViewContainer, this.cpPosition, this.cpPositionOffset, this.cpPositionRelativeToArrow, this.cpPresetLabel, this.cpPresetColors, this.cpPresetColorsClass, this.cpMaxPresetColorsLength, this.cpPresetEmptyMessage, this.cpPresetEmptyMessageClass, this.cpOKButton, this.cpOKButtonClass, this.cpOKButtonText, this.cpCancelButton, this.cpCancelButtonClass, this.cpCancelButtonText, this.cpAddColorButton, this.cpAddColorButtonClass, this.cpAddColorButtonText, this.cpRemoveColorButtonClass);\n this.dialog = this.cmpRef.instance;\n if (this.vcRef !== vcRef) {\n this.cmpRef.changeDetectorRef.detectChanges();\n }\n }\n else if (this.dialog) {\n this.dialog.openDialog(this.colorPicker);\n }\n }\n closeDialog() {\n if (this.dialog && this.cpDialogDisplay === 'popup') {\n this.dialog.closeDialog();\n }\n }\n cmykChanged(value) {\n this.cpCmykColorChange.emit(value);\n }\n stateChanged(state) {\n this.cpToggleChange.emit(state);\n if (state) {\n this.colorPickerOpen.emit(this.colorPicker);\n }\n else {\n this.colorPickerClose.emit(this.colorPicker);\n }\n }\n colorChanged(value, ignore = true) {\n this.ignoreChanges = ignore;\n this.colorPickerChange.emit(value);\n }\n colorSelected(value) {\n this.colorPickerSelect.emit(value);\n }\n colorCanceled() {\n this.colorPickerCancel.emit();\n }\n inputFocus() {\n const element = this.elRef.nativeElement;\n const ignored = this.cpIgnoredElements.filter((item) => item === element);\n if (!this.cpDisabled && !ignored.length) {\n if (typeof document !== 'undefined' && element === document.activeElement) {\n this.openDialog();\n }\n else if (!this.dialog || !this.dialog.show) {\n this.openDialog();\n }\n else {\n this.closeDialog();\n }\n }\n }\n inputChange(event) {\n if (this.dialog) {\n this.dialog.setColorFromString(event.target.value, true);\n }\n else {\n this.colorPicker = event.target.value;\n this.colorPickerChange.emit(this.colorPicker);\n }\n }\n inputChanged(event) {\n this.cpInputChange.emit(event);\n }\n sliderChanged(event) {\n this.cpSliderChange.emit(event);\n }\n sliderDragEnd(event) {\n this.cpSliderDragEnd.emit(event);\n }\n sliderDragStart(event) {\n this.cpSliderDragStart.emit(event);\n }\n presetColorsChanged(value) {\n this.cpPresetColorsChange.emit(value);\n }\n}\nColorPickerDirective.ɵfac = function ColorPickerDirective_Factory(t) { return new (t || ColorPickerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ApplicationRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColorPickerService)); };\nColorPickerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColorPickerDirective, selectors: [[\"\", \"colorPicker\", \"\"]], hostBindings: function ColorPickerDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerDirective_click_HostBindingHandler() { return ctx.handleClick(); })(\"focus\", function ColorPickerDirective_focus_HostBindingHandler() { return ctx.handleFocus(); })(\"input\", function ColorPickerDirective_input_HostBindingHandler($event) { return ctx.handleInput($event); });\n } }, inputs: { cpWidth: \"cpWidth\", cpHeight: \"cpHeight\", cpToggle: \"cpToggle\", cpDisabled: \"cpDisabled\", cpIgnoredElements: \"cpIgnoredElements\", cpFallbackColor: \"cpFallbackColor\", cpColorMode: \"cpColorMode\", cpCmykEnabled: \"cpCmykEnabled\", cpOutputFormat: \"cpOutputFormat\", cpAlphaChannel: \"cpAlphaChannel\", cpDisableInput: \"cpDisableInput\", cpDialogDisplay: \"cpDialogDisplay\", cpSaveClickOutside: \"cpSaveClickOutside\", cpCloseClickOutside: \"cpCloseClickOutside\", cpUseRootViewContainer: \"cpUseRootViewContainer\", cpPosition: \"cpPosition\", cpPositionOffset: \"cpPositionOffset\", cpPositionRelativeToArrow: \"cpPositionRelativeToArrow\", cpOKButton: \"cpOKButton\", cpOKButtonText: \"cpOKButtonText\", cpOKButtonClass: \"cpOKButtonClass\", cpCancelButton: \"cpCancelButton\", cpCancelButtonText: \"cpCancelButtonText\", cpCancelButtonClass: \"cpCancelButtonClass\", cpPresetLabel: \"cpPresetLabel\", cpPresetColorsClass: \"cpPresetColorsClass\", cpMaxPresetColorsLength: \"cpMaxPresetColorsLength\", cpPresetEmptyMessage: \"cpPresetEmptyMessage\", cpPresetEmptyMessageClass: \"cpPresetEmptyMessageClass\", cpAddColorButton: \"cpAddColorButton\", cpAddColorButtonText: \"cpAddColorButtonText\", cpAddColorButtonClass: \"cpAddColorButtonClass\", cpRemoveColorButtonClass: \"cpRemoveColorButtonClass\", colorPicker: \"colorPicker\", cpPresetColors: \"cpPresetColors\" }, outputs: { cpInputChange: \"cpInputChange\", cpToggleChange: \"cpToggleChange\", cpSliderChange: \"cpSliderChange\", cpSliderDragEnd: \"cpSliderDragEnd\", cpSliderDragStart: \"cpSliderDragStart\", colorPickerOpen: \"colorPickerOpen\", colorPickerClose: \"colorPickerClose\", colorPickerCancel: \"colorPickerCancel\", colorPickerSelect: \"colorPickerSelect\", colorPickerChange: \"colorPickerChange\", cpCmykColorChange: \"cpCmykColorChange\", cpPresetColorsChange: \"cpPresetColorsChange\" }, exportAs: [\"ngxColorPicker\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nColorPickerDirective.ctorParameters = () => [\n { type: Injector },\n { type: ComponentFactoryResolver },\n { type: ApplicationRef },\n { type: ViewContainerRef },\n { type: ElementRef },\n { type: ColorPickerService }\n];\nColorPickerDirective.propDecorators = {\n colorPicker: [{ type: Input }],\n cpWidth: [{ type: Input }],\n cpHeight: [{ type: Input }],\n cpToggle: [{ type: Input }],\n cpDisabled: [{ type: Input }],\n cpIgnoredElements: [{ type: Input }],\n cpFallbackColor: [{ type: Input }],\n cpColorMode: [{ type: Input }],\n cpCmykEnabled: [{ type: Input }],\n cpOutputFormat: [{ type: Input }],\n cpAlphaChannel: [{ type: Input }],\n cpDisableInput: [{ type: Input }],\n cpDialogDisplay: [{ type: Input }],\n cpSaveClickOutside: [{ type: Input }],\n cpCloseClickOutside: [{ type: Input }],\n cpUseRootViewContainer: [{ type: Input }],\n cpPosition: [{ type: Input }],\n cpPositionOffset: [{ type: Input }],\n cpPositionRelativeToArrow: [{ type: Input }],\n cpOKButton: [{ type: Input }],\n cpOKButtonText: [{ type: Input }],\n cpOKButtonClass: [{ type: Input }],\n cpCancelButton: [{ type: Input }],\n cpCancelButtonText: [{ type: Input }],\n cpCancelButtonClass: [{ type: Input }],\n cpPresetLabel: [{ type: Input }],\n cpPresetColors: [{ type: Input }],\n cpPresetColorsClass: [{ type: Input }],\n cpMaxPresetColorsLength: [{ type: Input }],\n cpPresetEmptyMessage: [{ type: Input }],\n cpPresetEmptyMessageClass: [{ type: Input }],\n cpAddColorButton: [{ type: Input }],\n cpAddColorButtonText: [{ type: Input }],\n cpAddColorButtonClass: [{ type: Input }],\n cpRemoveColorButtonClass: [{ type: Input }],\n cpInputChange: [{ type: Output }],\n cpToggleChange: [{ type: Output }],\n cpSliderChange: [{ type: Output }],\n cpSliderDragEnd: [{ type: Output }],\n cpSliderDragStart: [{ type: Output }],\n colorPickerOpen: [{ type: Output }],\n colorPickerClose: [{ type: Output }],\n colorPickerCancel: [{ type: Output }],\n colorPickerSelect: [{ type: Output }],\n colorPickerChange: [{ type: Output }],\n cpCmykColorChange: [{ type: Output }],\n cpPresetColorsChange: [{ type: Output }],\n handleClick: [{ type: HostListener, args: ['click',] }],\n handleFocus: [{ type: HostListener, args: ['focus',] }],\n handleInput: [{ type: HostListener, args: ['input', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerDirective, [{\n type: Directive,\n args: [{\n selector: '[colorPicker]',\n exportAs: 'ngxColorPicker'\n }]\n }], function () { return [{ type: ɵngcc0.Injector }, { type: ɵngcc0.ComponentFactoryResolver }, { type: ɵngcc0.ApplicationRef }, { type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ElementRef }, { type: ColorPickerService }]; }, { cpWidth: [{\n type: Input\n }], cpHeight: [{\n type: Input\n }], cpToggle: [{\n type: Input\n }], cpDisabled: [{\n type: Input\n }], cpIgnoredElements: [{\n type: Input\n }], cpFallbackColor: [{\n type: Input\n }], cpColorMode: [{\n type: Input\n }], cpCmykEnabled: [{\n type: Input\n }], cpOutputFormat: [{\n type: Input\n }], cpAlphaChannel: [{\n type: Input\n }], cpDisableInput: [{\n type: Input\n }], cpDialogDisplay: [{\n type: Input\n }], cpSaveClickOutside: [{\n type: Input\n }], cpCloseClickOutside: [{\n type: Input\n }], cpUseRootViewContainer: [{\n type: Input\n }], cpPosition: [{\n type: Input\n }], cpPositionOffset: [{\n type: Input\n }], cpPositionRelativeToArrow: [{\n type: Input\n }], cpOKButton: [{\n type: Input\n }], cpOKButtonText: [{\n type: Input\n }], cpOKButtonClass: [{\n type: Input\n }], cpCancelButton: [{\n type: Input\n }], cpCancelButtonText: [{\n type: Input\n }], cpCancelButtonClass: [{\n type: Input\n }], cpPresetLabel: [{\n type: Input\n }], cpPresetColorsClass: [{\n type: Input\n }], cpMaxPresetColorsLength: [{\n type: Input\n }], cpPresetEmptyMessage: [{\n type: Input\n }], cpPresetEmptyMessageClass: [{\n type: Input\n }], cpAddColorButton: [{\n type: Input\n }], cpAddColorButtonText: [{\n type: Input\n }], cpAddColorButtonClass: [{\n type: Input\n }], cpRemoveColorButtonClass: [{\n type: Input\n }], cpInputChange: [{\n type: Output\n }], cpToggleChange: [{\n type: Output\n }], cpSliderChange: [{\n type: Output\n }], cpSliderDragEnd: [{\n type: Output\n }], cpSliderDragStart: [{\n type: Output\n }], colorPickerOpen: [{\n type: Output\n }], colorPickerClose: [{\n type: Output\n }], colorPickerCancel: [{\n type: Output\n }], colorPickerSelect: [{\n type: Output\n }], colorPickerChange: [{\n type: Output\n }], cpCmykColorChange: [{\n type: Output\n }], cpPresetColorsChange: [{\n type: Output\n }], handleClick: [{\n type: HostListener,\n args: ['click']\n }], handleFocus: [{\n type: HostListener,\n args: ['focus']\n }], handleInput: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], colorPicker: [{\n type: Input\n }], cpPresetColors: [{\n type: Input\n }] }); })();\n\nclass ColorPickerModule {\n}\nColorPickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ColorPickerModule });\nColorPickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ColorPickerModule_Factory(t) { return new (t || ColorPickerModule)(); }, providers: [ColorPickerService], imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColorPickerModule, { declarations: function () { return [ColorPickerComponent, ColorPickerDirective, TextDirective, SliderDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ColorPickerDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n exports: [ColorPickerDirective],\n providers: [ColorPickerService],\n declarations: [ColorPickerComponent, ColorPickerDirective, TextDirective, SliderDirective],\n entryComponents: [ColorPickerComponent]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Cmyk, ColorPickerComponent, ColorPickerDirective, ColorPickerModule, ColorPickerService, Hsla, Hsva, Rgba, SliderDirective, TextDirective };\n\n//# sourceMappingURL=ngx-color-picker.js.map","import { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nexport const RIGHT_POSITION: ConnectedPosition[] = [\r\n {originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 5},\r\n {originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: 5},\r\n];\r\n","import { Platform, PlatformModule } from '@angular/cdk/platform';\nimport { CdkScrollable, ScrollDispatcher, ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, Inject, forwardRef, ElementRef, NgZone, EventEmitter, Optional, Input, HostBinding, Output, HostListener, QueryList, ContentChildren, ContentChild, ViewChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/a11y';\nimport * as ɵngcc3 from '@angular/cdk/platform';\nimport * as ɵngcc4 from '@angular/cdk/bidi';\nimport * as ɵngcc5 from '@angular/common';\n\nconst _c0 = [\"*\"];\nfunction MatDrawerContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatDrawerContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatDrawerContainer_mat_drawer_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-drawer-content\");\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c1 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c2 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatSidenavContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatSidenavContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatSidenavContainer_mat_sidenav_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-sidenav-content\", 3);\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c3 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c4 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nconst _c5 = \".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\";\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = function MatDrawerContent_Factory(t) { return new (t || MatDrawerContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatDrawerContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContent, selectors: [[\"mat-drawer-content\"]], hostAttrs: [1, \"mat-drawer-content\"], hostVars: 4, hostBindings: function MatDrawerContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatDrawerContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatDrawerContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatDrawerContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatDrawerContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContent, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _doc, \n /**\n * @deprecated `_container` parameter to be made required.\n * @breaking-change 10.0.0\n */\n _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange = \n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus();\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() { return this._position; }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() { return this._mode; }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() { return this._disableClose; }\n set disableClose(value) { this._disableClose = coerceBooleanProperty(value); }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value) { this._autoFocus = coerceBooleanProperty(value); }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() { return this._opened; }\n set opened(value) { this.toggle(coerceBooleanProperty(value)); }\n /** Event emitted when the drawer has started opening. */\n get openedStart() {\n return this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), map(() => { }));\n }\n /** Event emitted when the drawer has started closing. */\n get closedStart() {\n return this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), map(() => { }));\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this.autoFocus || !this._focusTrap) {\n return;\n }\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n var _a;\n const activeEl = (_a = this._doc) === null || _a === void 0 ? void 0 : _a.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n return this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n _setOpen(isOpen, restoreFocus, openedVia = 'program') {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener(event) {\n this._animationStarted.next(event);\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener(event) {\n this._animationEnd.next(event);\n }\n}\nMatDrawer.ɵfac = function MatDrawer_Factory(t) { return new (t || MatDrawer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8)); };\nMatDrawer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawer, selectors: [[\"mat-drawer\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"], hostVars: 12, hostBindings: function MatDrawer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) { return ctx._animationStartListener($event); })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) { return ctx._animationDoneListener($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n } }, inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", onPositionChanged: \"positionChanged\", openedStart: \"openedStart\", closedStart: \"closedStart\" }, exportAs: [\"matDrawer\"], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatDrawer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatDrawer.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusTrapFactory },\n { type: FocusMonitor },\n { type: Platform },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDrawerContainer, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DRAWER_CONTAINER,] }] }\n];\nMatDrawer.propDecorators = {\n position: [{ type: Input }],\n mode: [{ type: Input }],\n disableClose: [{ type: Input }],\n autoFocus: [{ type: Input }],\n opened: [{ type: Input }],\n _animationState: [{ type: HostBinding, args: ['@transform',] }],\n openedChange: [{ type: Output }],\n _openedStream: [{ type: Output, args: ['opened',] }],\n openedStart: [{ type: Output }],\n _closedStream: [{ type: Output, args: ['closed',] }],\n closedStart: [{ type: Output }],\n onPositionChanged: [{ type: Output, args: ['positionChanged',] }],\n _animationStartListener: [{ type: HostListener, args: ['@transform.start', ['$event'],] }],\n _animationDoneListener: [{ type: HostListener, args: ['@transform.done', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n template: \"<div class=\\\"mat-drawer-inner-container\\\">\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.FocusTrapFactory }, { type: ɵngcc2.FocusMonitor }, { type: ɵngcc3.Platform }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }]; }, { _animationState: [{\n type: HostBinding,\n args: ['@transform']\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], openedStart: [{\n type: Output\n }], closedStart: [{\n type: Output\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener: [{\n type: HostListener,\n args: ['@transform.start', ['$event']]\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener: [{\n type: HostListener,\n args: ['@transform.done', ['$event']]\n }] }); })();\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() { return this._start; }\n /** The drawer child with the `end` position. */\n get end() { return this._end; }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() { return this._autosize; }\n set autosize(value) { this._autosize = coerceBooleanProperty(value); }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n // @breaking-change 10.0.0 Remove `_container` check once container parameter is required.\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted.pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = function MatDrawerContainer_Factory(t) { return new (t || MatDrawerContainer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatDrawerContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContainer, selectors: [[\"mat-drawer-container\"]], contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawerContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawer, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, viewQuery: function MatDrawerContainer_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatDrawerContent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n } }, hostAttrs: [1, \"mat-drawer-container\"], hostVars: 2, hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, exportAs: [\"matDrawerContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }])], ngContentSelectors: _c2, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]], template: function MatDrawerContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵtemplate(0, MatDrawerContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatDrawerContainer_mat_drawer_content_3_Template, 2, 0, \"mat-drawer-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatDrawerContent], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatDrawerContainer.ctorParameters = () => [\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DRAWER_DEFAULT_AUTOSIZE,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatDrawerContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatDrawerContent,] }],\n _userContent: [{ type: ViewChild, args: [MatDrawerContent,] }],\n autosize: [{ type: Input }],\n hasBackdrop: [{ type: Input }],\n backdropClick: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContainer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-drawer\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-drawer-content\\\">\\n</ng-content>\\n<mat-drawer-content *ngIf=\\\"!_content\\\">\\n <ng-content></ng-content>\\n</mat-drawer-content>\\n\",\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc4.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { backdropClick: [{\n type: Output\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = function MatSidenavContent_Factory(t) { return new (t || MatSidenavContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatSidenavContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContent, selectors: [[\"mat-sidenav-content\"]], hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"], hostVars: 4, hostBindings: function MatSidenavContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatSidenavContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatSidenavContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatSidenavContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatSidenavContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContent, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n}\nMatSidenav.ɵfac = function MatSidenav_Factory(t) { return ɵMatSidenav_BaseFactory(t || MatSidenav); };\nMatSidenav.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenav, selectors: [[\"mat-sidenav\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"], hostVars: 17, hostBindings: function MatSidenav_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n } }, inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, exportAs: [\"matSidenav\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatSidenav_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatSidenav.propDecorators = {\n fixedInViewport: [{ type: Input }],\n fixedTopGap: [{ type: Input }],\n fixedBottomGap: [{ type: Input }]\n};\nconst ɵMatSidenav_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenav);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenav, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n template: \"<div class=\\\"mat-drawer-inner-container\\\">\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] }); })();\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = function MatSidenavContainer_Factory(t) { return ɵMatSidenavContainer_BaseFactory(t || MatSidenavContainer); };\nMatSidenavContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContainer, selectors: [[\"mat-sidenav-container\"]], contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenavContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenav, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"], hostVars: 2, hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, exportAs: [\"matSidenavContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [\"cdkScrollable\", \"\", 4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"], [\"cdkScrollable\", \"\"]], template: function MatSidenavContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵtemplate(0, MatSidenavContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatSidenavContainer_mat_sidenav_content_3_Template, 2, 0, \"mat-sidenav-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatSidenavContent, ɵngcc1.CdkScrollable], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatSidenavContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatSidenavContent,] }]\n};\nconst ɵMatSidenavContainer_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenavContainer);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContainer, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-sidenav\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-sidenav-content\\\">\\n</ng-content>\\n<mat-sidenav-content *ngIf=\\\"!_content\\\" cdkScrollable>\\n <ng-content></ng-content>\\n</mat-sidenav-content>\\n\",\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], null, { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSidenavModule });\nMatSidenavModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSidenavModule_Factory(t) { return new (t || MatSidenavModule)(); }, imports: [[\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ], CdkScrollableModule,\n MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSidenavModule, { declarations: function () { return [MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; }, imports: function () { return [CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule]; }, exports: function () { return [CdkScrollableModule,\n MatCommonModule, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError, MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a };\n\n//# sourceMappingURL=sidenav.js.map","import {Injectable} from '@angular/core';\r\nimport {baseElements} from './definitions/base';\r\nimport {bootstrapElements} from './definitions/bootstrap';\r\nimport {Translations} from '../../../common/core/translations/translations.service';\r\nimport {BuilderElement} from './builder-element';\r\nimport {ReplaySubject} from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Elements {\r\n public loaded$ = new ReplaySubject(1);\r\n\r\n private elements: BuilderElement[] = [];\r\n\r\n /**\r\n * Default element config.\r\n */\r\n private defaults = {\r\n name: 'Generic',\r\n canModify: ['padding', 'margin', 'box', 'text', 'attributes', 'float', 'shadows', 'background'],\r\n canDrag: true,\r\n showWysiwyg: true,\r\n attributes: {},\r\n previewScale: 1,\r\n scaleDragPreview: true,\r\n resizable: true,\r\n types: ['flow'],\r\n validChildren: ['flow'],\r\n };\r\n\r\n /**\r\n * Array of special cases conditions when selecting a DOM node.\r\n */\r\n private specialCases = [\r\n\r\n // if selecting label with parent with .checkbox should select parent instead.\r\n function(node, parent, classes, pClasses) {\r\n if (node.nodeName.toLowerCase() === 'label' && pClasses.indexOf('checkbox') > -1) {\r\n return node.parentElement;\r\n }\r\n },\r\n\r\n // if selecting .progress-bar, select parent instead\r\n function(node, parent, classes, pClasses) {\r\n if (classes.indexOf('progress-bar') > -1) {\r\n return node.parentElement;\r\n }\r\n },\r\n\r\n // if selecting .container-fluid with .navbar parent, select parent instead\r\n function(node, parent, classes, pClasses) {\r\n if (classes.indexOf('container-fluid') > -1 && pClasses.indexOf('navbar') > -1) {\r\n return node.parentElement;\r\n }\r\n },\r\n ];\r\n\r\n constructor(private i18n: Translations) {}\r\n\r\n public getAll() {\r\n return this.elements;\r\n }\r\n\r\n public findByName(name: string) {\r\n return this.elements.find(el => el.name === name);\r\n }\r\n\r\n public getDisplayName(el: BuilderElement, node: HTMLElement) {\r\n if ( ! el) return;\r\n\r\n if (el.name === 'div container') {\r\n if (node.id) {\r\n return node.id;\r\n } else if (node.classList[0]) {\r\n return node.classList[0];\r\n } else {\r\n return el.name;\r\n }\r\n } else {\r\n return el.name;\r\n }\r\n }\r\n\r\n public canModifyText(element: BuilderElement) {\r\n return this.canModify('text', element) && element.showWysiwyg;\r\n }\r\n\r\n /**\r\n * Check if specified property/style of this element can be modified.\r\n */\r\n public canModify(property: string, element: BuilderElement) {\r\n if ( ! element) return;\r\n return element.canModify.indexOf(property.toLowerCase()) > -1;\r\n }\r\n\r\n /**\r\n * Check if specified node is an image.\r\n */\r\n public isImage(node: HTMLElement): boolean {\r\n if ( ! node) return false;\r\n return node.nodeName.toLowerCase() === 'img';\r\n }\r\n\r\n /**\r\n * Check if specified node is a link.\r\n */\r\n public isLink(node: HTMLElement): boolean {\r\n if ( ! node) return false;\r\n return node.nodeName.toLowerCase() === 'a';\r\n }\r\n\r\n public isIcon(node: HTMLElement|SVGElement) {\r\n if ( ! node) return false;\r\n return node.nodeName.toLowerCase() === 'i' || node.classList.value.includes('icon-') || node.classList.contains('svg-inline--fa');\r\n }\r\n\r\n /**\r\n * Check if node is column, row, or container.\r\n */\r\n public isLayout(node: HTMLElement): boolean {\r\n if ( ! node) return false;\r\n return this.isColumn(node) || this.isRow(node) || this.isContainer(node);\r\n }\r\n\r\n public isContainer(node: HTMLElement): boolean {\r\n if (!node || !node.classList) return false;\r\n return node.classList.contains('container');\r\n }\r\n\r\n public isRow(node: HTMLElement): boolean {\r\n if ( ! node || ! node.classList) return false;\r\n return node.classList.contains('row');\r\n }\r\n\r\n public isColumn(node: HTMLElement): boolean {\r\n if ( ! node) return false;\r\n if ( ! node.className || typeof node.className !== 'string') return false;\r\n return node.className.indexOf('col-') > -1;\r\n }\r\n\r\n public checkForSpecialCases(node: HTMLElement): HTMLElement|boolean {\r\n if ( ! node ) return false;\r\n\r\n // cache some needed node properties\r\n const parent = node.parentElement,\r\n classes = node.nodeName,\r\n parentClasses = parent ? parent.nodeName : '';\r\n\r\n // test node against every special case until the end or until we find a match\r\n for (let i = 0; i < this.specialCases.length; i++) {\r\n const check = this.specialCases[i](node, parent, classes, parentClasses);\r\n if (check) return check;\r\n }\r\n }\r\n\r\n /**\r\n * Check if given node accepts currently active element as a child.\r\n */\r\n public canInsert(parent: HTMLElement, element: BuilderElement) {\r\n if (parent.nodeName.toLowerCase() === 'body') return true;\r\n if (parent.nodeName.toLowerCase() === 'html') return false;\r\n\r\n // match given node to an element in element repository\r\n const el = this.match(parent);\r\n\r\n // if we've got an element match and it has any valid children check\r\n // if specified child can be inserted into given node\r\n if (el && el.validChildren && element.types) {\r\n for (let i = el.validChildren.length - 1; i >= 0; i--) {\r\n if (element.types.indexOf(el.validChildren[i]) > -1) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Match specified DOM node to an element in the repository.\r\n */\r\n public match(node: HTMLElement, type = null, matchParent = true) {\r\n if ( ! node || ! node.nodeName) return false;\r\n\r\n const isSpecialCase = this.checkForSpecialCases(node),\r\n nodeName = node.nodeName.toLowerCase();\r\n\r\n if (isSpecialCase) {\r\n node = isSpecialCase as HTMLElement;\r\n }\r\n\r\n // find by class\r\n if (node.className) {\r\n for (let i = 0; i < this.elements.length; i++) {\r\n const element = this.elements[i];\r\n const classes = typeof node.className === 'string' ? node.className.toLowerCase().split(/\\s+/) : [];\r\n\r\n for (let i = 0; i < classes.length; i++) {\r\n\r\n // if element has no class we'll bail\r\n if ( ! element.class) continue;\r\n\r\n // if element and passed in node classes match exactly we'll just return current element\r\n if (classes[i] === element.class) {\r\n return element;\r\n }\r\n\r\n // if we didn't match an element by this time we'll try to do it using\r\n // a wildcard so we can match bootstrap columns and similar stuff\r\n if (element.class.indexOf('*') > -1 && classes[i].match(new RegExp(element.class.replace('*', '.*')))) {\r\n return element;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.elements.length; i++) {\r\n const element = this.elements[i];\r\n\r\n // find by name attribute\r\n if (node.dataset && node.dataset.name) {\r\n return this.findByName(node.dataset.name);\r\n }\r\n\r\n // find by input type\r\n if (node['type']) {\r\n const type = nodeName + '=' + node['type'];\r\n\r\n if (Array.isArray(element.nodes) && element.nodes.find(nodeName => nodeName === type)) {\r\n return element;\r\n }\r\n }\r\n\r\n // find by node name\r\n if (element.nodes.indexOf(nodeName) > -1) {\r\n // TODO: temp way to not match <a> as button if it does not have '.btn' class\r\n if (element.name.toLowerCase() !== 'button' || nodeName !== 'a' || node.classList.contains('btn')) {\r\n return element;\r\n }\r\n }\r\n }\r\n\r\n // if we've got no matches by this point and we've got\r\n // a true flag, will try to match this nodes parent instead\r\n if (matchParent) {\r\n return this.match(node.parentElement as HTMLElement, type, true);\r\n\r\n // if no true flag passed we'll just return a generic object\r\n } else {\r\n const className = node.className && node.className.split(/\\s+/)[0];\r\n const defaults = Object.assign({}, this.defaults);\r\n\r\n if (className) {\r\n defaults.name = className.replace('-', ' ');\r\n } else {\r\n defaults.name = node.nodeName.toLowerCase();\r\n }\r\n\r\n return defaults;\r\n }\r\n }\r\n\r\n /**\r\n * Register a new element with the builder.\r\n */\r\n public addElement(config) {\r\n // merge defaults and passed in element config objects\r\n const el = Object.assign({}, this.defaults, config);\r\n el.name = this.i18n.t(el.name);\r\n\r\n // element already exists\r\n if (this.elements.find(curr => curr.name === el.name)) return;\r\n\r\n // push newly created element to all elements object\r\n this.elements.push(el);\r\n }\r\n\r\n\r\n /**\r\n * Register all the base builder elements\r\n */\r\n public init(customElements: BuilderElement[]) {\r\n const elements = baseElements.concat(bootstrapElements);\r\n elements.forEach(element => this.addElement(element));\r\n this.addCustomElements(customElements);\r\n this.loaded$.next(true);\r\n this.loaded$.complete();\r\n }\r\n\r\n private addCustomElements(customElements: {html: string, css: string, config: string}[]) {\r\n let customCss = '';\r\n\r\n customElements.forEach(element => {\r\n const config = eval(element.config);\r\n config.html = element.html;\r\n config.css = element.css;\r\n\r\n this.addElement(config);\r\n\r\n customCss += \"\\n\" + config.css;\r\n });\r\n }\r\n}\r\n","import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\r\nimport { randomString } from '../../core/utils/random-string';\r\nimport { UploadedFile } from '../uploaded-file';\r\nimport { FileEntry } from '../types/file-entry';\r\nimport { UploadFileResponse } from '@common/uploads/uploads-api.service';\r\n\r\nexport interface UploadQueueItemProgress {\r\n percentage?: number;\r\n speed?: string;\r\n eta?: string;\r\n totalBytes?: number;\r\n completedBytes?: number;\r\n}\r\n\r\nexport class UploadQueueItem {\r\n id: string;\r\n canceled$: Subject<boolean> = new Subject();\r\n processing$ = new BehaviorSubject<boolean>(false);\r\n\r\n // file info (static)\r\n uploadedFile: UploadedFile;\r\n\r\n // backend response once file is uploaded\r\n uploadedResponse$ = new ReplaySubject<UploadFileResponse>(1);\r\n\r\n // uploaded file entry (only available on completed uploads)\r\n fileEntry: FileEntry;\r\n\r\n // upload progress information (will change)\r\n progress$ = new BehaviorSubject<UploadQueueItemProgress>({percentage: 0});\r\n\r\n error$ = new BehaviorSubject<string>(null);\r\n\r\n // custom data that can be attached to queue item\r\n public customData: object = {};\r\n\r\n get completed(): boolean {\r\n return !this.processing$.value && this.progress$.value.percentage === 100;\r\n }\r\n\r\n get inProgress(): boolean {\r\n return !this.error$.value && !this.completed;\r\n }\r\n\r\n constructor(file: UploadedFile, queueId?: string) {\r\n this.uploadedFile = file;\r\n this.id = queueId || randomString();\r\n }\r\n\r\n public cancel() {\r\n // cancelling before finalizing might cause infinite loop\r\n this.canceled$.next(true);\r\n this.finalize();\r\n }\r\n\r\n public complete() {\r\n this.setProgress({percentage: 100, eta: null});\r\n this.finalize();\r\n }\r\n\r\n public finalize() {\r\n this.uploadedResponse$.complete();\r\n this.canceled$.complete();\r\n this.progress$.complete();\r\n }\r\n\r\n public finishProcessing() {\r\n this.processing$.next(false);\r\n this.processing$.complete();\r\n }\r\n\r\n public addError(message: string) {\r\n this.error$.next(message);\r\n }\r\n\r\n public setProgress(data: Partial<UploadQueueItemProgress>) {\r\n this.progress$.next({\r\n ...this.progress$.value,\r\n ...data,\r\n });\r\n }\r\n}\r\n","import { UploadedFile } from '../../uploaded-file';\r\nimport { UploadValidation } from './upload-validation';\r\nimport { Translations } from '../../../core/translations/translations.service';\r\n\r\nexport class AllowedExtensionsValidation extends UploadValidation {\r\n constructor(\r\n protected params: {extensions: string[]},\r\n protected i18n: Translations\r\n ) {\r\n super();\r\n\r\n this.errorMessage = this.i18n.t(\r\n 'Only these file types are allowed: :extensions',\r\n {extensions: this.params.extensions.join(', ')}\r\n );\r\n }\r\n\r\n public fails(file: UploadedFile) {\r\n return ! this.params.extensions.some(extension => {\r\n return extension.toLowerCase() === file.extension.toLowerCase();\r\n });\r\n }\r\n}\r\n","import { UploadedFile } from '../../uploaded-file';\r\nimport { UploadValidation } from './upload-validation';\r\nimport {Translations} from '@common/core/translations/translations.service';\r\n\r\nexport class BlockedExtensionsValidation extends UploadValidation {\r\n constructor(\r\n protected params: {extensions: string[]},\r\n protected i18n: Translations\r\n ) {\r\n super();\r\n\r\n this.errorMessage = this.i18n.t(\r\n 'These file types are not allowed: :extensions',\r\n {extensions: this.params.extensions.join(', ')}\r\n );\r\n }\r\n\r\n public fails(file: UploadedFile) {\r\n return this.params.extensions.some(extension => {\r\n return extension === file.extension;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {UploadValidator} from './upload-validator';\r\nimport {FileSizeValidation} from './validations/file-size-validation';\r\nimport {AllowedExtensionsValidation} from './validations/allowed-extensions-validation';\r\nimport {BlockedExtensionsValidation} from './validations/blocked-extensions-validation';\r\nimport {convertToBytes} from '../../core/utils/convertToBytes';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DefaultUploadValidator extends UploadValidator {\r\n protected readonly DEFAULT_MAX_FILE_SIZE_MB = 8;\r\n public showToast = true;\r\n\r\n protected initValidations() {\r\n this.validations.push(\r\n new FileSizeValidation(\r\n {maxSize: this.getMaxFileSize()},\r\n this.i18n\r\n )\r\n );\r\n\r\n const allowedExtensions = this.getAllowedExtensions(),\r\n blockedExtensions = this.getBlockedExtensions();\r\n\r\n if (allowedExtensions && allowedExtensions.length) {\r\n this.validations.push(new AllowedExtensionsValidation(\r\n {extensions: allowedExtensions}, this.i18n\r\n ));\r\n }\r\n\r\n if (blockedExtensions && blockedExtensions.length) {\r\n this.validations.push(new BlockedExtensionsValidation(\r\n {extensions: blockedExtensions}, this.i18n\r\n ));\r\n }\r\n }\r\n\r\n protected getMaxFileSize(): number {\r\n return this.settings.get(\r\n 'uploads.max_size',\r\n convertToBytes(this.DEFAULT_MAX_FILE_SIZE_MB, 'MB')\r\n );\r\n }\r\n\r\n protected getAllowedExtensions() {\r\n return this.settings.getJson('uploads.allowed_extensions');\r\n }\r\n\r\n protected getBlockedExtensions() {\r\n return this.settings.getJson('uploads.blocked_extensions');\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {UploadQueueItem} from './upload-queue-item';\r\nimport {BehaviorSubject, EMPTY, from, ReplaySubject, Subject, throwError} from 'rxjs';\r\nimport {catchError, filter, map, mergeMap, takeUntil} from 'rxjs/operators';\r\nimport {UploadedFile} from '../uploaded-file';\r\nimport {UploadCompletedEvent, UploadEvent, UploadEventTypes, UploadProgressEvent} from '../utils/upload-progress-event';\r\nimport {UploadFileResponse, UploadsApiService} from '../uploads-api.service';\r\nimport {FileEntry} from '../types/file-entry';\r\nimport {UploadValidator} from '../validation/upload-validator';\r\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\r\nimport {DefaultUploadValidator} from '../validation/default-upload-validator';\r\nimport {BackendResponse} from '@common/core/types/backend-response';\r\nimport {Toast} from '@common/core/ui/toast.service';\r\nimport {HttpErrors, UPLOAD_FAIL_LEARN_MORE_LINK} from '@common/core/http/errors/http-errors.enum';\r\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\r\nimport {CurrentUser} from '@common/auth/current-user';\r\nimport {Settings} from '@common/core/config/settings.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UploadQueueService {\r\n public uploads$ = new BehaviorSubject<UploadQueueItem[]>([]);\r\n public totalProgress$ = new ReplaySubject<number>(1);\r\n public uploadsAdded$ = new Subject<UploadQueueItem[]>();\r\n public count$ = new BehaviorSubject<{pending: number, completed: number}>({pending: 0, completed: 0});\r\n\r\n constructor(\r\n private api: UploadsApiService,\r\n private defaultValidator: DefaultUploadValidator,\r\n private toast: Toast,\r\n private currentUser: CurrentUser,\r\n private settings: Settings,\r\n ) {}\r\n\r\n public isEmpty(): boolean {\r\n return !this.uploads$.value.length;\r\n }\r\n\r\n public getAllCompleted(): FileEntry[] {\r\n return this.uploads$.value\r\n .filter(queueItem => queueItem.completed)\r\n .map(queueItem => queueItem.fileEntry);\r\n }\r\n\r\n public updateTotalProgress() {\r\n const progress = this.uploads$.value.map(upload => upload.progress$.value.percentage || 0);\r\n this.totalProgress$.next(progress.reduce((p, c) => p + c, 0) / progress.length);\r\n }\r\n\r\n public totalProgress() {\r\n return this.totalProgress$.asObservable();\r\n }\r\n\r\n public start(files: UploadedFile[]|{[key: string]: UploadedFile}, config: UploadApiConfig = {}): BackendResponse<UploadFileResponse> {\r\n const validator = config.validator || this.defaultValidator;\r\n let uploadQueueItems = [] as UploadQueueItem[];\r\n\r\n // push new uploads onto existing queue\r\n if (Array.isArray(files)) {\r\n uploadQueueItems = this.transformUploads(files, validator);\r\n this.uploads$.next(this.uploads$.value.concat(uploadQueueItems));\r\n this.uploadsAdded$.next(uploadQueueItems);\r\n\r\n // replace existing uploads in the queue with new upload by specified upload ID\r\n } else {\r\n const replacements = this.uploads$.value.map(queueItem => {\r\n if (files[queueItem.id]) {\r\n const transformed = this.transformUploads([files[queueItem.id]], validator, queueItem.id)[0];\r\n uploadQueueItems.push(transformed);\r\n return transformed;\r\n } else {\r\n return queueItem;\r\n }\r\n });\r\n this.uploads$.next(replacements);\r\n }\r\n\r\n this.updateCount();\r\n\r\n return from(uploadQueueItems.filter(u => !u.error$.value))\r\n .pipe(\r\n mergeMap(uploadQueueItem => {\r\n return this.api.upload(uploadQueueItem.uploadedFile, config).pipe(\r\n catchError((errResponse: BackendErrorResponse) => {\r\n this.handleUploadFailure(errResponse, uploadQueueItem, validator);\r\n // if one item in the queue fails, either continue uploading other items\r\n // or immediately stop uploading and bubble up error to subscribers\r\n return config.bubbleError ? throwError(errResponse) : EMPTY;\r\n }),\r\n takeUntil(uploadQueueItem.canceled$),\r\n map(response => {\r\n this.handleUploadEvent(response, uploadQueueItem, config.willProcessFiles);\r\n // assign queue item ID to upload completed response so\r\n // file entry can be matched to specific upload queue item\r\n if (response.name === UploadEventTypes.COMPLETED) {\r\n response.body.queueItemId = uploadQueueItem.id;\r\n }\r\n return response;\r\n }),\r\n );\r\n }, 1),\r\n filter(e => e.name === UploadEventTypes.COMPLETED),\r\n map((e: UploadCompletedEvent) => e.body)\r\n );\r\n }\r\n\r\n public updateProgress(id: string, e: UploadProgressEvent) {\r\n const queueItem = this.find(id);\r\n if ( ! queueItem) return;\r\n\r\n queueItem.setProgress({\r\n eta: e.eta,\r\n speed: e.speed,\r\n percentage: e.progress,\r\n totalBytes: e.totalBytes,\r\n completedBytes: e.completedBytes,\r\n });\r\n\r\n this.updateTotalProgress();\r\n }\r\n\r\n public completeUpload(id: string, response: UploadFileResponse) {\r\n const queueItem = this.find(id);\r\n if ( ! queueItem) return;\r\n\r\n queueItem.uploadedResponse$.next(response);\r\n queueItem.fileEntry = response.fileEntry;\r\n queueItem.complete();\r\n this.updateTotalProgress();\r\n }\r\n\r\n public errorUpload(id: string, message?: string) {\r\n this.find(id).addError(message);\r\n }\r\n\r\n public reset() {\r\n this.uploads$.value.forEach(u => u.cancel());\r\n this.uploads$.next([]);\r\n }\r\n\r\n public remove(id: string) {\r\n const i = this.uploads$.value.findIndex(u => u.id === id),\r\n upload = this.uploads$.value[i];\r\n upload.completed ? upload.finalize() : upload.cancel();\r\n this.uploads$.value.splice(i, 1);\r\n this.uploads$.next(this.uploads$.value);\r\n }\r\n\r\n public find(id: string): UploadQueueItem {\r\n return this.uploads$.value.find(u => u.id === id);\r\n }\r\n\r\n /**\r\n * Transform specified files into upload queue items.\r\n */\r\n protected transformUploads(files: UploadedFile[], validator: UploadValidator, queueId?: string) {\r\n return files.map(file => {\r\n const activeUpload = new UploadQueueItem(file, queueId);\r\n\r\n // validate upload\r\n if (validator) {\r\n const result = validator.validate(file);\r\n if (result.failed) activeUpload.addError(result.errorMessage);\r\n }\r\n\r\n return activeUpload;\r\n });\r\n }\r\n\r\n protected handleUploadEvent(event: UploadEvent, upload: UploadQueueItem, willProcessFiles = false) {\r\n if (event.name === UploadEventTypes.PROGRESS) {\r\n // upload is considered complete when progress equals 100\r\n // but file processing for large files might take some time\r\n // after file is fully uploaded so we should only set\r\n // progress as 100 on final completed response\r\n if (event.progress === 100) {\r\n // TODO: implement processing functionality for chunked upploading\r\n event = {...event, progress: 99};\r\n if (willProcessFiles) {\r\n upload.processing$.next(true);\r\n }\r\n }\r\n this.updateProgress(upload.id, event);\r\n } else if (event.name === UploadEventTypes.COMPLETED) {\r\n this.completeUpload(upload.id, event.body);\r\n this.updateCount();\r\n }\r\n }\r\n\r\n protected handleUploadFailure(response: BackendErrorResponse, upload: UploadQueueItem, validator: UploadValidator) {\r\n let msg = response?.errors?.file,\r\n showLearnMoreButton = null;\r\n if ( ! msg) {\r\n msg = HttpErrors.DefaultUpload;\r\n showLearnMoreButton = this.currentUser.isAdmin() && !this.settings.get('site.hide_docs_buttons');\r\n }\r\n\r\n this.errorUpload(upload.id, msg);\r\n this.updateCount();\r\n this.updateTotalProgress();\r\n\r\n if (validator.showToast) {\r\n this.toast.open(msg, {action: showLearnMoreButton ? 'Learn More' : null})\r\n .onAction()\r\n .subscribe(() => {\r\n window.open(UPLOAD_FAIL_LEARN_MORE_LINK);\r\n });\r\n }\r\n }\r\n\r\n private updateCount() {\r\n const pending = this.uploads$.value.filter(u => u.inProgress).length;\r\n this.count$.next({pending, completed: this.uploads$.value.length - pending});\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SkeletonComponent} from './skeleton.component';\n\n@NgModule({\n declarations: [\n SkeletonComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkeletonComponent,\n ]\n})\nexport class SkeletonModule {\n}\n","/*!\n * html2canvas 1.0.0-rc.7 <https://html2canvas.hertzen.com>\n * Copyright (c) 2020 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.html2canvas = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\r\n\r\n function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n }\n\n var Bounds = /** @class */ (function () {\r\n function Bounds(x, y, w, h) {\r\n this.left = x;\r\n this.top = y;\r\n this.width = w;\r\n this.height = h;\r\n }\r\n Bounds.prototype.add = function (x, y, w, h) {\r\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\r\n };\r\n Bounds.fromClientRect = function (clientRect) {\r\n return new Bounds(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\r\n };\r\n return Bounds;\r\n }());\r\n var parseBounds = function (node) {\r\n return Bounds.fromClientRect(node.getBoundingClientRect());\r\n };\r\n var parseDocumentSize = function (document) {\r\n var body = document.body;\r\n var documentElement = document.documentElement;\r\n if (!body || !documentElement) {\r\n throw new Error(\"Unable to get document size\");\r\n }\r\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\r\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\r\n return new Bounds(0, 0, width, height);\r\n };\n\n /*\n * css-line-break 1.1.1 <https://github.com/niklasvh/css-line-break#readme>\n * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var toCodePoints = function (str) {\r\n var codePoints = [];\r\n var i = 0;\r\n var length = str.length;\r\n while (i < length) {\r\n var value = str.charCodeAt(i++);\r\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\r\n var extra = str.charCodeAt(i++);\r\n if ((extra & 0xfc00) === 0xdc00) {\r\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\r\n }\r\n else {\r\n codePoints.push(value);\r\n i--;\r\n }\r\n }\r\n else {\r\n codePoints.push(value);\r\n }\r\n }\r\n return codePoints;\r\n };\r\n var fromCodePoint = function () {\r\n var codePoints = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n codePoints[_i] = arguments[_i];\r\n }\r\n if (String.fromCodePoint) {\r\n return String.fromCodePoint.apply(String, codePoints);\r\n }\r\n var length = codePoints.length;\r\n if (!length) {\r\n return '';\r\n }\r\n var codeUnits = [];\r\n var index = -1;\r\n var result = '';\r\n while (++index < length) {\r\n var codePoint = codePoints[index];\r\n if (codePoint <= 0xffff) {\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n codePoint -= 0x10000;\r\n codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00);\r\n }\r\n if (index + 1 === length || codeUnits.length > 0x4000) {\r\n result += String.fromCharCode.apply(String, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n // Use a lookup table to find the index.\r\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\r\n for (var i = 0; i < chars.length; i++) {\r\n lookup[chars.charCodeAt(i)] = i;\r\n }\r\n var decode = function (base64) {\r\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\r\n if (base64[base64.length - 1] === '=') {\r\n bufferLength--;\r\n if (base64[base64.length - 2] === '=') {\r\n bufferLength--;\r\n }\r\n }\r\n var buffer = typeof ArrayBuffer !== 'undefined' &&\r\n typeof Uint8Array !== 'undefined' &&\r\n typeof Uint8Array.prototype.slice !== 'undefined'\r\n ? new ArrayBuffer(bufferLength)\r\n : new Array(bufferLength);\r\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\r\n for (i = 0; i < len; i += 4) {\r\n encoded1 = lookup[base64.charCodeAt(i)];\r\n encoded2 = lookup[base64.charCodeAt(i + 1)];\r\n encoded3 = lookup[base64.charCodeAt(i + 2)];\r\n encoded4 = lookup[base64.charCodeAt(i + 3)];\r\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\r\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\r\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\r\n }\r\n return buffer;\r\n };\r\n var polyUint16Array = function (buffer) {\r\n var length = buffer.length;\r\n var bytes = [];\r\n for (var i = 0; i < length; i += 2) {\r\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\r\n }\r\n return bytes;\r\n };\r\n var polyUint32Array = function (buffer) {\r\n var length = buffer.length;\r\n var bytes = [];\r\n for (var i = 0; i < length; i += 4) {\r\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\r\n }\r\n return bytes;\r\n };\n\n /** Shift size for getting the index-2 table offset. */\r\n var UTRIE2_SHIFT_2 = 5;\r\n /** Shift size for getting the index-1 table offset. */\r\n var UTRIE2_SHIFT_1 = 6 + 5;\r\n /**\r\n * Shift size for shifting left the index array values.\r\n * Increases possible data size with 16-bit index values at the cost\r\n * of compactability.\r\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\r\n */\r\n var UTRIE2_INDEX_SHIFT = 2;\r\n /**\r\n * Difference between the two shift sizes,\r\n * for getting an index-1 offset from an index-2 offset. 6=11-5\r\n */\r\n var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\r\n /**\r\n * The part of the index-2 table for U+D800..U+DBFF stores values for\r\n * lead surrogate code _units_ not code _points_.\r\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\r\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\r\n */\r\n var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\r\n /** Number of entries in a data block. 32=0x20 */\r\n var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\r\n /** Mask for getting the lower bits for the in-data-block offset. */\r\n var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\r\n var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\r\n /** Count the lengths of both BMP pieces. 2080=0x820 */\r\n var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\r\n /**\r\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\r\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\r\n */\r\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\r\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\r\n /**\r\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\r\n * Variable length, for code points up to highStart, where the last single-value range starts.\r\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\r\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\r\n *\r\n * The part of the index-2 table for supplementary code points starts\r\n * after this index-1 table.\r\n *\r\n * Both the index-1 table and the following part of the index-2 table\r\n * are omitted completely if there is only BMP data.\r\n */\r\n var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\r\n /**\r\n * Number of index-1 entries for the BMP. 32=0x20\r\n * This part of the index-1 table is omitted from the serialized form.\r\n */\r\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\r\n /** Number of entries in an index-2 block. 64=0x40 */\r\n var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\r\n /** Mask for getting the lower bits for the in-index-2-block offset. */\r\n var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\r\n var slice16 = function (view, start, end) {\r\n if (view.slice) {\r\n return view.slice(start, end);\r\n }\r\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\r\n };\r\n var slice32 = function (view, start, end) {\r\n if (view.slice) {\r\n return view.slice(start, end);\r\n }\r\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\r\n };\r\n var createTrieFromBase64 = function (base64) {\r\n var buffer = decode(base64);\r\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\r\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\r\n var headerLength = 24;\r\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\r\n var data = view32[5] === 2\r\n ? slice16(view16, (headerLength + view32[4]) / 2)\r\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\r\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\r\n };\r\n var Trie = /** @class */ (function () {\r\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\r\n this.initialValue = initialValue;\r\n this.errorValue = errorValue;\r\n this.highStart = highStart;\r\n this.highValueIndex = highValueIndex;\r\n this.index = index;\r\n this.data = data;\r\n }\r\n /**\r\n * Get the value for a code point as stored in the Trie.\r\n *\r\n * @param codePoint the code point\r\n * @return the value\r\n */\r\n Trie.prototype.get = function (codePoint) {\r\n var ix;\r\n if (codePoint >= 0) {\r\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\r\n // Ordinary BMP code point, excluding leading surrogates.\r\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\r\n // 16 bit data is stored in the index array itself.\r\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint <= 0xffff) {\r\n // Lead Surrogate Code Point. A Separate index section is stored for\r\n // lead surrogate code units and code points.\r\n // The main index has the code unit data.\r\n // For this function, we need the code point data.\r\n // Note: this expression could be refactored for slightly improved efficiency, but\r\n // surrogate code points will be so rare in practice that it's not worth it.\r\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint < this.highStart) {\r\n // Supplemental code point, use two-level lookup.\r\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\r\n ix = this.index[ix];\r\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\r\n ix = this.index[ix];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint <= 0x10ffff) {\r\n return this.data[this.highValueIndex];\r\n }\r\n }\r\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\r\n return this.errorValue;\r\n };\r\n return Trie;\r\n }());\n\n var base64 = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA';\n\n /* @flow */\r\n var LETTER_NUMBER_MODIFIER = 50;\r\n // Non-tailorable Line Breaking Classes\r\n var BK = 1; // Cause a line break (after)\r\n var CR = 2; // Cause a line break (after), except between CR and LF\r\n var LF = 3; // Cause a line break (after)\r\n var CM = 4; // Prohibit a line break between the character and the preceding character\r\n var NL = 5; // Cause a line break (after)\r\n var WJ = 7; // Prohibit line breaks before and after\r\n var ZW = 8; // Provide a break opportunity\r\n var GL = 9; // Prohibit line breaks before and after\r\n var SP = 10; // Enable indirect line breaks\r\n var ZWJ = 11; // Prohibit line breaks within joiner sequences\r\n // Break Opportunities\r\n var B2 = 12; // Provide a line break opportunity before and after the character\r\n var BA = 13; // Generally provide a line break opportunity after the character\r\n var BB = 14; // Generally provide a line break opportunity before the character\r\n var HY = 15; // Provide a line break opportunity after the character, except in numeric context\r\n var CB = 16; // Provide a line break opportunity contingent on additional information\r\n // Characters Prohibiting Certain Breaks\r\n var CL = 17; // Prohibit line breaks before\r\n var CP = 18; // Prohibit line breaks before\r\n var EX = 19; // Prohibit line breaks before\r\n var IN = 20; // Allow only indirect line breaks between pairs\r\n var NS = 21; // Allow only indirect line breaks before\r\n var OP = 22; // Prohibit line breaks after\r\n var QU = 23; // Act like they are both opening and closing\r\n // Numeric Context\r\n var IS = 24; // Prevent breaks after any and before numeric\r\n var NU = 25; // Form numeric expressions for line breaking purposes\r\n var PO = 26; // Do not break following a numeric expression\r\n var PR = 27; // Do not break in front of a numeric expression\r\n var SY = 28; // Prevent a break before; and allow a break after\r\n // Other Characters\r\n var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\r\n var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\r\n var CJ = 31; // Treat as NS or ID for strict or normal breaking.\r\n var EB = 32; // Do not break from following Emoji Modifier\r\n var EM = 33; // Do not break from preceding Emoji Base\r\n var H2 = 34; // Form Korean syllable blocks\r\n var H3 = 35; // Form Korean syllable blocks\r\n var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\r\n var ID = 37; // Break before or after; except in some numeric context\r\n var JL = 38; // Form Korean syllable blocks\r\n var JV = 39; // Form Korean syllable blocks\r\n var JT = 40; // Form Korean syllable blocks\r\n var RI = 41; // Keep pairs together. For pairs; break before and after other classes\r\n var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\r\n var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\r\n var BREAK_MANDATORY = '!';\r\n var BREAK_NOT_ALLOWED = '×';\r\n var BREAK_ALLOWED = '÷';\r\n var UnicodeTrie = createTrieFromBase64(base64);\r\n var ALPHABETICS = [AL, HL];\r\n var HARD_LINE_BREAKS = [BK, CR, LF, NL];\r\n var SPACE = [SP, ZW];\r\n var PREFIX_POSTFIX = [PR, PO];\r\n var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);\r\n var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\r\n var HYPHEN = [HY, BA];\r\n var codePointsToCharacterClasses = function (codePoints, lineBreak) {\r\n if (lineBreak === void 0) { lineBreak = 'strict'; }\r\n var types = [];\r\n var indicies = [];\r\n var categories = [];\r\n codePoints.forEach(function (codePoint, index) {\r\n var classType = UnicodeTrie.get(codePoint);\r\n if (classType > LETTER_NUMBER_MODIFIER) {\r\n categories.push(true);\r\n classType -= LETTER_NUMBER_MODIFIER;\r\n }\r\n else {\r\n categories.push(false);\r\n }\r\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\r\n // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\r\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\r\n indicies.push(index);\r\n return types.push(CB);\r\n }\r\n }\r\n if (classType === CM || classType === ZWJ) {\r\n // LB10 Treat any remaining combining mark or ZWJ as AL.\r\n if (index === 0) {\r\n indicies.push(index);\r\n return types.push(AL);\r\n }\r\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\r\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\r\n var prev = types[index - 1];\r\n if (LINE_BREAKS.indexOf(prev) === -1) {\r\n indicies.push(indicies[index - 1]);\r\n return types.push(prev);\r\n }\r\n indicies.push(index);\r\n return types.push(AL);\r\n }\r\n indicies.push(index);\r\n if (classType === CJ) {\r\n return types.push(lineBreak === 'strict' ? NS : ID);\r\n }\r\n if (classType === SA) {\r\n return types.push(AL);\r\n }\r\n if (classType === AI) {\r\n return types.push(AL);\r\n }\r\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\r\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\r\n // to take into account the actual line breaking properties for these characters.\r\n if (classType === XX) {\r\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\r\n return types.push(ID);\r\n }\r\n else {\r\n return types.push(AL);\r\n }\r\n }\r\n types.push(classType);\r\n });\r\n return [indicies, types, categories];\r\n };\r\n var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\r\n var current = classTypes[currentIndex];\r\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\r\n var i = currentIndex;\r\n while (i <= classTypes.length) {\r\n i++;\r\n var next = classTypes[i];\r\n if (next === b) {\r\n return true;\r\n }\r\n if (next !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n if (current === SP) {\r\n var i = currentIndex;\r\n while (i > 0) {\r\n i--;\r\n var prev = classTypes[i];\r\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\r\n var n = currentIndex;\r\n while (n <= classTypes.length) {\r\n n++;\r\n var next = classTypes[n];\r\n if (next === b) {\r\n return true;\r\n }\r\n if (next !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n if (prev !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n var previousNonSpaceClassType = function (currentIndex, classTypes) {\r\n var i = currentIndex;\r\n while (i >= 0) {\r\n var type = classTypes[i];\r\n if (type === SP) {\r\n i--;\r\n }\r\n else {\r\n return type;\r\n }\r\n }\r\n return 0;\r\n };\r\n var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\r\n if (indicies[index] === 0) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n var currentIndex = index - 1;\r\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n var beforeIndex = currentIndex - 1;\r\n var afterIndex = currentIndex + 1;\r\n var current = classTypes[currentIndex];\r\n // LB4 Always break after hard line breaks.\r\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\r\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\r\n var next = classTypes[afterIndex];\r\n if (current === CR && next === LF) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\r\n return BREAK_MANDATORY;\r\n }\r\n // LB6 Do not break before hard line breaks.\r\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB7 Do not break before spaces or zero width space.\r\n if (SPACE.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\r\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier.\r\n if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB11 Do not break before or after Word joiner and related characters.\r\n if (current === WJ || next === WJ) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB12 Do not break after NBSP and related characters.\r\n if (current === GL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\r\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\r\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB14 Do not break after ‘[’, even after spaces.\r\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB15 Do not break within ‘”[’, even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB17 Do not break within ‘——’, even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB18 Break after spaces.\r\n if (current === SP) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\r\n if (current === QU || next === QU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB20 Break before and after unresolved CB.\r\n if (next === CB || current === CB) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\r\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB21a Don't break after Hebrew + Hyphen.\r\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB21b Don’t break between Solidus and Hebrew letters.\r\n if (current === SY && next === HL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis.\r\n if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB23 Do not break between digits and letters.\r\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\r\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\r\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\r\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\r\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB25 Do not break between the following pairs of classes relevant to numbers:\r\n if (\r\n // (PR | PO) × ( OP | HY )? NU\r\n ([PR, PO].indexOf(current) !== -1 &&\r\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\r\n // ( OP | HY ) × NU\r\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\r\n // NU ×\t(NU | SY | IS)\r\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\r\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\r\n var prevIndex = currentIndex;\r\n while (prevIndex >= 0) {\r\n var type = classTypes[prevIndex];\r\n if (type === NU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n else if ([SY, IS].indexOf(type) !== -1) {\r\n prevIndex--;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\r\n if ([PR, PO].indexOf(next) !== -1) {\r\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\r\n while (prevIndex >= 0) {\r\n var type = classTypes[prevIndex];\r\n if (type === NU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n else if ([SY, IS].indexOf(type) !== -1) {\r\n prevIndex--;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n // LB26 Do not break a Korean syllable.\r\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\r\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\r\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB27 Treat a Korean Syllable Block the same as ID.\r\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\r\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB28 Do not break between alphabetics (“at”).\r\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\r\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\r\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) ||\r\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\r\n // indicators preceding the position of the break.\r\n if (current === RI && next === RI) {\r\n var i = indicies[currentIndex];\r\n var count = 1;\r\n while (i > 0) {\r\n i--;\r\n if (classTypes[i] === RI) {\r\n count++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n if (count % 2 !== 0) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n }\r\n // LB30b Do not break between an emoji base and an emoji modifier.\r\n if (current === EB && next === EM) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n return BREAK_ALLOWED;\r\n };\r\n var cssFormattedClasses = function (codePoints, options) {\r\n if (!options) {\r\n options = { lineBreak: 'normal', wordBreak: 'normal' };\r\n }\r\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\r\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\r\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\r\n }\r\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\r\n ? isLetterNumber.map(function (letterNumber, i) {\r\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\r\n })\r\n : undefined;\r\n return [indicies, classTypes, forbiddenBreakpoints];\r\n };\r\n var Break = /** @class */ (function () {\r\n function Break(codePoints, lineBreak, start, end) {\r\n this.codePoints = codePoints;\r\n this.required = lineBreak === BREAK_MANDATORY;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n Break.prototype.slice = function () {\r\n return fromCodePoint.apply(void 0, this.codePoints.slice(this.start, this.end));\r\n };\r\n return Break;\r\n }());\r\n var LineBreaker = function (str, options) {\r\n var codePoints = toCodePoints(str);\r\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\r\n var length = codePoints.length;\r\n var lastEnd = 0;\r\n var nextIndex = 0;\r\n return {\r\n next: function () {\r\n if (nextIndex >= length) {\r\n return { done: true, value: null };\r\n }\r\n var lineBreak = BREAK_NOT_ALLOWED;\r\n while (nextIndex < length &&\r\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\r\n BREAK_NOT_ALLOWED) { }\r\n if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {\r\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\r\n lastEnd = nextIndex;\r\n return { value: value, done: false };\r\n }\r\n return { done: true, value: null };\r\n },\r\n };\r\n };\n\n // https://www.w3.org/TR/css-syntax-3\r\n var TokenType;\r\n (function (TokenType) {\r\n TokenType[TokenType[\"STRING_TOKEN\"] = 0] = \"STRING_TOKEN\";\r\n TokenType[TokenType[\"BAD_STRING_TOKEN\"] = 1] = \"BAD_STRING_TOKEN\";\r\n TokenType[TokenType[\"LEFT_PARENTHESIS_TOKEN\"] = 2] = \"LEFT_PARENTHESIS_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_PARENTHESIS_TOKEN\"] = 3] = \"RIGHT_PARENTHESIS_TOKEN\";\r\n TokenType[TokenType[\"COMMA_TOKEN\"] = 4] = \"COMMA_TOKEN\";\r\n TokenType[TokenType[\"HASH_TOKEN\"] = 5] = \"HASH_TOKEN\";\r\n TokenType[TokenType[\"DELIM_TOKEN\"] = 6] = \"DELIM_TOKEN\";\r\n TokenType[TokenType[\"AT_KEYWORD_TOKEN\"] = 7] = \"AT_KEYWORD_TOKEN\";\r\n TokenType[TokenType[\"PREFIX_MATCH_TOKEN\"] = 8] = \"PREFIX_MATCH_TOKEN\";\r\n TokenType[TokenType[\"DASH_MATCH_TOKEN\"] = 9] = \"DASH_MATCH_TOKEN\";\r\n TokenType[TokenType[\"INCLUDE_MATCH_TOKEN\"] = 10] = \"INCLUDE_MATCH_TOKEN\";\r\n TokenType[TokenType[\"LEFT_CURLY_BRACKET_TOKEN\"] = 11] = \"LEFT_CURLY_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_CURLY_BRACKET_TOKEN\"] = 12] = \"RIGHT_CURLY_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"SUFFIX_MATCH_TOKEN\"] = 13] = \"SUFFIX_MATCH_TOKEN\";\r\n TokenType[TokenType[\"SUBSTRING_MATCH_TOKEN\"] = 14] = \"SUBSTRING_MATCH_TOKEN\";\r\n TokenType[TokenType[\"DIMENSION_TOKEN\"] = 15] = \"DIMENSION_TOKEN\";\r\n TokenType[TokenType[\"PERCENTAGE_TOKEN\"] = 16] = \"PERCENTAGE_TOKEN\";\r\n TokenType[TokenType[\"NUMBER_TOKEN\"] = 17] = \"NUMBER_TOKEN\";\r\n TokenType[TokenType[\"FUNCTION\"] = 18] = \"FUNCTION\";\r\n TokenType[TokenType[\"FUNCTION_TOKEN\"] = 19] = \"FUNCTION_TOKEN\";\r\n TokenType[TokenType[\"IDENT_TOKEN\"] = 20] = \"IDENT_TOKEN\";\r\n TokenType[TokenType[\"COLUMN_TOKEN\"] = 21] = \"COLUMN_TOKEN\";\r\n TokenType[TokenType[\"URL_TOKEN\"] = 22] = \"URL_TOKEN\";\r\n TokenType[TokenType[\"BAD_URL_TOKEN\"] = 23] = \"BAD_URL_TOKEN\";\r\n TokenType[TokenType[\"CDC_TOKEN\"] = 24] = \"CDC_TOKEN\";\r\n TokenType[TokenType[\"CDO_TOKEN\"] = 25] = \"CDO_TOKEN\";\r\n TokenType[TokenType[\"COLON_TOKEN\"] = 26] = \"COLON_TOKEN\";\r\n TokenType[TokenType[\"SEMICOLON_TOKEN\"] = 27] = \"SEMICOLON_TOKEN\";\r\n TokenType[TokenType[\"LEFT_SQUARE_BRACKET_TOKEN\"] = 28] = \"LEFT_SQUARE_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_SQUARE_BRACKET_TOKEN\"] = 29] = \"RIGHT_SQUARE_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"UNICODE_RANGE_TOKEN\"] = 30] = \"UNICODE_RANGE_TOKEN\";\r\n TokenType[TokenType[\"WHITESPACE_TOKEN\"] = 31] = \"WHITESPACE_TOKEN\";\r\n TokenType[TokenType[\"EOF_TOKEN\"] = 32] = \"EOF_TOKEN\";\r\n })(TokenType || (TokenType = {}));\r\n var FLAG_UNRESTRICTED = 1 << 0;\r\n var FLAG_ID = 1 << 1;\r\n var FLAG_INTEGER = 1 << 2;\r\n var FLAG_NUMBER = 1 << 3;\r\n var LINE_FEED = 0x000a;\r\n var SOLIDUS = 0x002f;\r\n var REVERSE_SOLIDUS = 0x005c;\r\n var CHARACTER_TABULATION = 0x0009;\r\n var SPACE$1 = 0x0020;\r\n var QUOTATION_MARK = 0x0022;\r\n var EQUALS_SIGN = 0x003d;\r\n var NUMBER_SIGN = 0x0023;\r\n var DOLLAR_SIGN = 0x0024;\r\n var PERCENTAGE_SIGN = 0x0025;\r\n var APOSTROPHE = 0x0027;\r\n var LEFT_PARENTHESIS = 0x0028;\r\n var RIGHT_PARENTHESIS = 0x0029;\r\n var LOW_LINE = 0x005f;\r\n var HYPHEN_MINUS = 0x002d;\r\n var EXCLAMATION_MARK = 0x0021;\r\n var LESS_THAN_SIGN = 0x003c;\r\n var GREATER_THAN_SIGN = 0x003e;\r\n var COMMERCIAL_AT = 0x0040;\r\n var LEFT_SQUARE_BRACKET = 0x005b;\r\n var RIGHT_SQUARE_BRACKET = 0x005d;\r\n var CIRCUMFLEX_ACCENT = 0x003d;\r\n var LEFT_CURLY_BRACKET = 0x007b;\r\n var QUESTION_MARK = 0x003f;\r\n var RIGHT_CURLY_BRACKET = 0x007d;\r\n var VERTICAL_LINE = 0x007c;\r\n var TILDE = 0x007e;\r\n var CONTROL = 0x0080;\r\n var REPLACEMENT_CHARACTER = 0xfffd;\r\n var ASTERISK = 0x002a;\r\n var PLUS_SIGN = 0x002b;\r\n var COMMA = 0x002c;\r\n var COLON = 0x003a;\r\n var SEMICOLON = 0x003b;\r\n var FULL_STOP = 0x002e;\r\n var NULL = 0x0000;\r\n var BACKSPACE = 0x0008;\r\n var LINE_TABULATION = 0x000b;\r\n var SHIFT_OUT = 0x000e;\r\n var INFORMATION_SEPARATOR_ONE = 0x001f;\r\n var DELETE = 0x007f;\r\n var EOF = -1;\r\n var ZERO = 0x0030;\r\n var a = 0x0061;\r\n var e = 0x0065;\r\n var f = 0x0066;\r\n var u = 0x0075;\r\n var z = 0x007a;\r\n var A = 0x0041;\r\n var E = 0x0045;\r\n var F = 0x0046;\r\n var U = 0x0055;\r\n var Z = 0x005a;\r\n var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\r\n var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\r\n var isHex = function (codePoint) {\r\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\r\n };\r\n var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\r\n var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\r\n var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\r\n var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\r\n var isWhiteSpace = function (codePoint) {\r\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE$1;\r\n };\r\n var isNameStartCodePoint = function (codePoint) {\r\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\r\n };\r\n var isNameCodePoint = function (codePoint) {\r\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\r\n };\r\n var isNonPrintableCodePoint = function (codePoint) {\r\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\r\n codePoint === LINE_TABULATION ||\r\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\r\n codePoint === DELETE);\r\n };\r\n var isValidEscape = function (c1, c2) {\r\n if (c1 !== REVERSE_SOLIDUS) {\r\n return false;\r\n }\r\n return c2 !== LINE_FEED;\r\n };\r\n var isIdentifierStart = function (c1, c2, c3) {\r\n if (c1 === HYPHEN_MINUS) {\r\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\r\n }\r\n else if (isNameStartCodePoint(c1)) {\r\n return true;\r\n }\r\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n var isNumberStart = function (c1, c2, c3) {\r\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n if (isDigit(c2)) {\r\n return true;\r\n }\r\n return c2 === FULL_STOP && isDigit(c3);\r\n }\r\n if (c1 === FULL_STOP) {\r\n return isDigit(c2);\r\n }\r\n return isDigit(c1);\r\n };\r\n var stringToNumber = function (codePoints) {\r\n var c = 0;\r\n var sign = 1;\r\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n if (codePoints[c] === HYPHEN_MINUS) {\r\n sign = -1;\r\n }\r\n c++;\r\n }\r\n var integers = [];\r\n while (isDigit(codePoints[c])) {\r\n integers.push(codePoints[c++]);\r\n }\r\n var int = integers.length ? parseInt(fromCodePoint.apply(void 0, integers), 10) : 0;\r\n if (codePoints[c] === FULL_STOP) {\r\n c++;\r\n }\r\n var fraction = [];\r\n while (isDigit(codePoints[c])) {\r\n fraction.push(codePoints[c++]);\r\n }\r\n var fracd = fraction.length;\r\n var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0;\r\n if (codePoints[c] === E || codePoints[c] === e) {\r\n c++;\r\n }\r\n var expsign = 1;\r\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n if (codePoints[c] === HYPHEN_MINUS) {\r\n expsign = -1;\r\n }\r\n c++;\r\n }\r\n var exponent = [];\r\n while (isDigit(codePoints[c])) {\r\n exponent.push(codePoints[c++]);\r\n }\r\n var exp = exponent.length ? parseInt(fromCodePoint.apply(void 0, exponent), 10) : 0;\r\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\r\n };\r\n var LEFT_PARENTHESIS_TOKEN = {\r\n type: TokenType.LEFT_PARENTHESIS_TOKEN\r\n };\r\n var RIGHT_PARENTHESIS_TOKEN = {\r\n type: TokenType.RIGHT_PARENTHESIS_TOKEN\r\n };\r\n var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN };\r\n var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN };\r\n var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN };\r\n var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN };\r\n var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN };\r\n var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN };\r\n var LEFT_CURLY_BRACKET_TOKEN = {\r\n type: TokenType.LEFT_CURLY_BRACKET_TOKEN\r\n };\r\n var RIGHT_CURLY_BRACKET_TOKEN = {\r\n type: TokenType.RIGHT_CURLY_BRACKET_TOKEN\r\n };\r\n var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN };\r\n var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN };\r\n var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN };\r\n var CDO_TOKEN = { type: TokenType.CDO_TOKEN };\r\n var CDC_TOKEN = { type: TokenType.CDC_TOKEN };\r\n var COLON_TOKEN = { type: TokenType.COLON_TOKEN };\r\n var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN };\r\n var LEFT_SQUARE_BRACKET_TOKEN = {\r\n type: TokenType.LEFT_SQUARE_BRACKET_TOKEN\r\n };\r\n var RIGHT_SQUARE_BRACKET_TOKEN = {\r\n type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN\r\n };\r\n var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN };\r\n var EOF_TOKEN = { type: TokenType.EOF_TOKEN };\r\n var Tokenizer = /** @class */ (function () {\r\n function Tokenizer() {\r\n this._value = [];\r\n }\r\n Tokenizer.prototype.write = function (chunk) {\r\n this._value = this._value.concat(toCodePoints(chunk));\r\n };\r\n Tokenizer.prototype.read = function () {\r\n var tokens = [];\r\n var token = this.consumeToken();\r\n while (token !== EOF_TOKEN) {\r\n tokens.push(token);\r\n token = this.consumeToken();\r\n }\r\n return tokens;\r\n };\r\n Tokenizer.prototype.consumeToken = function () {\r\n var codePoint = this.consumeCodePoint();\r\n switch (codePoint) {\r\n case QUOTATION_MARK:\r\n return this.consumeStringToken(QUOTATION_MARK);\r\n case NUMBER_SIGN:\r\n var c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\r\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\r\n var value = this.consumeName();\r\n return { type: TokenType.HASH_TOKEN, value: value, flags: flags };\r\n }\r\n break;\r\n case DOLLAR_SIGN:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return SUFFIX_MATCH_TOKEN;\r\n }\r\n break;\r\n case APOSTROPHE:\r\n return this.consumeStringToken(APOSTROPHE);\r\n case LEFT_PARENTHESIS:\r\n return LEFT_PARENTHESIS_TOKEN;\r\n case RIGHT_PARENTHESIS:\r\n return RIGHT_PARENTHESIS_TOKEN;\r\n case ASTERISK:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return SUBSTRING_MATCH_TOKEN;\r\n }\r\n break;\r\n case PLUS_SIGN:\r\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n break;\r\n case COMMA:\r\n return COMMA_TOKEN;\r\n case HYPHEN_MINUS:\r\n var e1 = codePoint;\r\n var e2 = this.peekCodePoint(0);\r\n var e3 = this.peekCodePoint(1);\r\n if (isNumberStart(e1, e2, e3)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n if (isIdentifierStart(e1, e2, e3)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\r\n this.consumeCodePoint();\r\n this.consumeCodePoint();\r\n return CDC_TOKEN;\r\n }\r\n break;\r\n case FULL_STOP:\r\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n break;\r\n case SOLIDUS:\r\n if (this.peekCodePoint(0) === ASTERISK) {\r\n this.consumeCodePoint();\r\n while (true) {\r\n var c = this.consumeCodePoint();\r\n if (c === ASTERISK) {\r\n c = this.consumeCodePoint();\r\n if (c === SOLIDUS) {\r\n return this.consumeToken();\r\n }\r\n }\r\n if (c === EOF) {\r\n return this.consumeToken();\r\n }\r\n }\r\n }\r\n break;\r\n case COLON:\r\n return COLON_TOKEN;\r\n case SEMICOLON:\r\n return SEMICOLON_TOKEN;\r\n case LESS_THAN_SIGN:\r\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\r\n this.peekCodePoint(1) === HYPHEN_MINUS &&\r\n this.peekCodePoint(2) === HYPHEN_MINUS) {\r\n this.consumeCodePoint();\r\n this.consumeCodePoint();\r\n return CDO_TOKEN;\r\n }\r\n break;\r\n case COMMERCIAL_AT:\r\n var a1 = this.peekCodePoint(0);\r\n var a2 = this.peekCodePoint(1);\r\n var a3 = this.peekCodePoint(2);\r\n if (isIdentifierStart(a1, a2, a3)) {\r\n var value = this.consumeName();\r\n return { type: TokenType.AT_KEYWORD_TOKEN, value: value };\r\n }\r\n break;\r\n case LEFT_SQUARE_BRACKET:\r\n return LEFT_SQUARE_BRACKET_TOKEN;\r\n case REVERSE_SOLIDUS:\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n break;\r\n case RIGHT_SQUARE_BRACKET:\r\n return RIGHT_SQUARE_BRACKET_TOKEN;\r\n case CIRCUMFLEX_ACCENT:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return PREFIX_MATCH_TOKEN;\r\n }\r\n break;\r\n case LEFT_CURLY_BRACKET:\r\n return LEFT_CURLY_BRACKET_TOKEN;\r\n case RIGHT_CURLY_BRACKET:\r\n return RIGHT_CURLY_BRACKET_TOKEN;\r\n case u:\r\n case U:\r\n var u1 = this.peekCodePoint(0);\r\n var u2 = this.peekCodePoint(1);\r\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\r\n this.consumeCodePoint();\r\n this.consumeUnicodeRangeToken();\r\n }\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n case VERTICAL_LINE:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return DASH_MATCH_TOKEN;\r\n }\r\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\r\n this.consumeCodePoint();\r\n return COLUMN_TOKEN;\r\n }\r\n break;\r\n case TILDE:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return INCLUDE_MATCH_TOKEN;\r\n }\r\n break;\r\n case EOF:\r\n return EOF_TOKEN;\r\n }\r\n if (isWhiteSpace(codePoint)) {\r\n this.consumeWhiteSpace();\r\n return WHITESPACE_TOKEN;\r\n }\r\n if (isDigit(codePoint)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n if (isNameStartCodePoint(codePoint)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) };\r\n };\r\n Tokenizer.prototype.consumeCodePoint = function () {\r\n var value = this._value.shift();\r\n return typeof value === 'undefined' ? -1 : value;\r\n };\r\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\r\n this._value.unshift(codePoint);\r\n };\r\n Tokenizer.prototype.peekCodePoint = function (delta) {\r\n if (delta >= this._value.length) {\r\n return -1;\r\n }\r\n return this._value[delta];\r\n };\r\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\r\n var digits = [];\r\n var codePoint = this.consumeCodePoint();\r\n while (isHex(codePoint) && digits.length < 6) {\r\n digits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n }\r\n var questionMarks = false;\r\n while (codePoint === QUESTION_MARK && digits.length < 6) {\r\n digits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n questionMarks = true;\r\n }\r\n if (questionMarks) {\r\n var start_1 = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\r\n var end = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start_1, end: end };\r\n }\r\n var start = parseInt(fromCodePoint.apply(void 0, digits), 16);\r\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\r\n this.consumeCodePoint();\r\n codePoint = this.consumeCodePoint();\r\n var endDigits = [];\r\n while (isHex(codePoint) && endDigits.length < 6) {\r\n endDigits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n }\r\n var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16);\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end };\r\n }\r\n else {\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: start };\r\n }\r\n };\r\n Tokenizer.prototype.consumeIdentLikeToken = function () {\r\n var value = this.consumeName();\r\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return this.consumeUrlToken();\r\n }\r\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.FUNCTION_TOKEN, value: value };\r\n }\r\n return { type: TokenType.IDENT_TOKEN, value: value };\r\n };\r\n Tokenizer.prototype.consumeUrlToken = function () {\r\n var value = [];\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF) {\r\n return { type: TokenType.URL_TOKEN, value: '' };\r\n }\r\n var next = this.peekCodePoint(0);\r\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\r\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\r\n if (stringToken.type === TokenType.STRING_TOKEN) {\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.URL_TOKEN, value: stringToken.value };\r\n }\r\n }\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\r\n return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) };\r\n }\r\n else if (isWhiteSpace(codePoint)) {\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) };\r\n }\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n else if (codePoint === QUOTATION_MARK ||\r\n codePoint === APOSTROPHE ||\r\n codePoint === LEFT_PARENTHESIS ||\r\n isNonPrintableCodePoint(codePoint)) {\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n else if (codePoint === REVERSE_SOLIDUS) {\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n value.push(this.consumeEscapedCodePoint());\r\n }\r\n else {\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n }\r\n else {\r\n value.push(codePoint);\r\n }\r\n }\r\n };\r\n Tokenizer.prototype.consumeWhiteSpace = function () {\r\n while (isWhiteSpace(this.peekCodePoint(0))) {\r\n this.consumeCodePoint();\r\n }\r\n };\r\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\r\n return;\r\n }\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n this.consumeEscapedCodePoint();\r\n }\r\n }\r\n };\r\n Tokenizer.prototype.consumeStringSlice = function (count) {\r\n var SLICE_STACK_SIZE = 60000;\r\n var value = '';\r\n while (count > 0) {\r\n var amount = Math.min(SLICE_STACK_SIZE, count);\r\n value += fromCodePoint.apply(void 0, this._value.splice(0, amount));\r\n count -= amount;\r\n }\r\n this._value.shift();\r\n return value;\r\n };\r\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\r\n var value = '';\r\n var i = 0;\r\n do {\r\n var codePoint = this._value[i];\r\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\r\n value += this.consumeStringSlice(i);\r\n return { type: TokenType.STRING_TOKEN, value: value };\r\n }\r\n if (codePoint === LINE_FEED) {\r\n this._value.splice(0, i);\r\n return BAD_STRING_TOKEN;\r\n }\r\n if (codePoint === REVERSE_SOLIDUS) {\r\n var next = this._value[i + 1];\r\n if (next !== EOF && next !== undefined) {\r\n if (next === LINE_FEED) {\r\n value += this.consumeStringSlice(i);\r\n i = -1;\r\n this._value.shift();\r\n }\r\n else if (isValidEscape(codePoint, next)) {\r\n value += this.consumeStringSlice(i);\r\n value += fromCodePoint(this.consumeEscapedCodePoint());\r\n i = -1;\r\n }\r\n }\r\n }\r\n i++;\r\n } while (true);\r\n };\r\n Tokenizer.prototype.consumeNumber = function () {\r\n var repr = [];\r\n var type = FLAG_INTEGER;\r\n var c1 = this.peekCodePoint(0);\r\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n if (c1 === FULL_STOP && isDigit(c2)) {\r\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n type = FLAG_NUMBER;\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n }\r\n c1 = this.peekCodePoint(0);\r\n c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\r\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n type = FLAG_NUMBER;\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n }\r\n return [stringToNumber(repr), type];\r\n };\r\n Tokenizer.prototype.consumeNumericToken = function () {\r\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\r\n var c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if (isIdentifierStart(c1, c2, c3)) {\r\n var unit = this.consumeName();\r\n return { type: TokenType.DIMENSION_TOKEN, number: number, flags: flags, unit: unit };\r\n }\r\n if (c1 === PERCENTAGE_SIGN) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.PERCENTAGE_TOKEN, number: number, flags: flags };\r\n }\r\n return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags };\r\n };\r\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\r\n var codePoint = this.consumeCodePoint();\r\n if (isHex(codePoint)) {\r\n var hex = fromCodePoint(codePoint);\r\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\r\n hex += fromCodePoint(this.consumeCodePoint());\r\n }\r\n if (isWhiteSpace(this.peekCodePoint(0))) {\r\n this.consumeCodePoint();\r\n }\r\n var hexCodePoint = parseInt(hex, 16);\r\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\r\n return REPLACEMENT_CHARACTER;\r\n }\r\n return hexCodePoint;\r\n }\r\n if (codePoint === EOF) {\r\n return REPLACEMENT_CHARACTER;\r\n }\r\n return codePoint;\r\n };\r\n Tokenizer.prototype.consumeName = function () {\r\n var result = '';\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (isNameCodePoint(codePoint)) {\r\n result += fromCodePoint(codePoint);\r\n }\r\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n result += fromCodePoint(this.consumeEscapedCodePoint());\r\n }\r\n else {\r\n this.reconsumeCodePoint(codePoint);\r\n return result;\r\n }\r\n }\r\n };\r\n return Tokenizer;\r\n }());\n\n var Parser = /** @class */ (function () {\r\n function Parser(tokens) {\r\n this._tokens = tokens;\r\n }\r\n Parser.create = function (value) {\r\n var tokenizer = new Tokenizer();\r\n tokenizer.write(value);\r\n return new Parser(tokenizer.read());\r\n };\r\n Parser.parseValue = function (value) {\r\n return Parser.create(value).parseComponentValue();\r\n };\r\n Parser.parseValues = function (value) {\r\n return Parser.create(value).parseComponentValues();\r\n };\r\n Parser.prototype.parseComponentValue = function () {\r\n var token = this.consumeToken();\r\n while (token.type === TokenType.WHITESPACE_TOKEN) {\r\n token = this.consumeToken();\r\n }\r\n if (token.type === TokenType.EOF_TOKEN) {\r\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\r\n }\r\n this.reconsumeToken(token);\r\n var value = this.consumeComponentValue();\r\n do {\r\n token = this.consumeToken();\r\n } while (token.type === TokenType.WHITESPACE_TOKEN);\r\n if (token.type === TokenType.EOF_TOKEN) {\r\n return value;\r\n }\r\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\r\n };\r\n Parser.prototype.parseComponentValues = function () {\r\n var values = [];\r\n while (true) {\r\n var value = this.consumeComponentValue();\r\n if (value.type === TokenType.EOF_TOKEN) {\r\n return values;\r\n }\r\n values.push(value);\r\n values.push();\r\n }\r\n };\r\n Parser.prototype.consumeComponentValue = function () {\r\n var token = this.consumeToken();\r\n switch (token.type) {\r\n case TokenType.LEFT_CURLY_BRACKET_TOKEN:\r\n case TokenType.LEFT_SQUARE_BRACKET_TOKEN:\r\n case TokenType.LEFT_PARENTHESIS_TOKEN:\r\n return this.consumeSimpleBlock(token.type);\r\n case TokenType.FUNCTION_TOKEN:\r\n return this.consumeFunction(token);\r\n }\r\n return token;\r\n };\r\n Parser.prototype.consumeSimpleBlock = function (type) {\r\n var block = { type: type, values: [] };\r\n var token = this.consumeToken();\r\n while (true) {\r\n if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) {\r\n return block;\r\n }\r\n this.reconsumeToken(token);\r\n block.values.push(this.consumeComponentValue());\r\n token = this.consumeToken();\r\n }\r\n };\r\n Parser.prototype.consumeFunction = function (functionToken) {\r\n var cssFunction = {\r\n name: functionToken.value,\r\n values: [],\r\n type: TokenType.FUNCTION\r\n };\r\n while (true) {\r\n var token = this.consumeToken();\r\n if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) {\r\n return cssFunction;\r\n }\r\n this.reconsumeToken(token);\r\n cssFunction.values.push(this.consumeComponentValue());\r\n }\r\n };\r\n Parser.prototype.consumeToken = function () {\r\n var token = this._tokens.shift();\r\n return typeof token === 'undefined' ? EOF_TOKEN : token;\r\n };\r\n Parser.prototype.reconsumeToken = function (token) {\r\n this._tokens.unshift(token);\r\n };\r\n return Parser;\r\n }());\r\n var isDimensionToken = function (token) { return token.type === TokenType.DIMENSION_TOKEN; };\r\n var isNumberToken = function (token) { return token.type === TokenType.NUMBER_TOKEN; };\r\n var isIdentToken = function (token) { return token.type === TokenType.IDENT_TOKEN; };\r\n var isStringToken = function (token) { return token.type === TokenType.STRING_TOKEN; };\r\n var isIdentWithValue = function (token, value) {\r\n return isIdentToken(token) && token.value === value;\r\n };\r\n var nonWhiteSpace = function (token) { return token.type !== TokenType.WHITESPACE_TOKEN; };\r\n var nonFunctionArgSeparator = function (token) {\r\n return token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN;\r\n };\r\n var parseFunctionArgs = function (tokens) {\r\n var args = [];\r\n var arg = [];\r\n tokens.forEach(function (token) {\r\n if (token.type === TokenType.COMMA_TOKEN) {\r\n if (arg.length === 0) {\r\n throw new Error(\"Error parsing function args, zero tokens for arg\");\r\n }\r\n args.push(arg);\r\n arg = [];\r\n return;\r\n }\r\n if (token.type !== TokenType.WHITESPACE_TOKEN) {\r\n arg.push(token);\r\n }\r\n });\r\n if (arg.length) {\r\n args.push(arg);\r\n }\r\n return args;\r\n };\r\n var isEndingTokenFor = function (token, type) {\r\n if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) {\r\n return true;\r\n }\r\n if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) {\r\n return true;\r\n }\r\n return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN;\r\n };\n\n var isLength = function (token) {\r\n return token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN;\r\n };\n\n var isLengthPercentage = function (token) {\r\n return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token);\r\n };\r\n var parseLengthPercentageTuple = function (tokens) {\r\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\r\n };\r\n var ZERO_LENGTH = {\r\n type: TokenType.NUMBER_TOKEN,\r\n number: 0,\r\n flags: FLAG_INTEGER\r\n };\r\n var FIFTY_PERCENT = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 50,\r\n flags: FLAG_INTEGER\r\n };\r\n var HUNDRED_PERCENT = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 100,\r\n flags: FLAG_INTEGER\r\n };\r\n var getAbsoluteValueForTuple = function (tuple, width, height) {\r\n var x = tuple[0], y = tuple[1];\r\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\r\n };\r\n var getAbsoluteValue = function (token, parent) {\r\n if (token.type === TokenType.PERCENTAGE_TOKEN) {\r\n return (token.number / 100) * parent;\r\n }\r\n if (isDimensionToken(token)) {\r\n switch (token.unit) {\r\n case 'rem':\r\n case 'em':\r\n return 16 * token.number; // TODO use correct font-size\r\n case 'px':\r\n default:\r\n return token.number;\r\n }\r\n }\r\n return token.number;\r\n };\n\n var DEG = 'deg';\r\n var GRAD = 'grad';\r\n var RAD = 'rad';\r\n var TURN = 'turn';\r\n var angle = {\r\n name: 'angle',\r\n parse: function (value) {\r\n if (value.type === TokenType.DIMENSION_TOKEN) {\r\n switch (value.unit) {\r\n case DEG:\r\n return (Math.PI * value.number) / 180;\r\n case GRAD:\r\n return (Math.PI / 200) * value.number;\r\n case RAD:\r\n return value.number;\r\n case TURN:\r\n return Math.PI * 2 * value.number;\r\n }\r\n }\r\n throw new Error(\"Unsupported angle type\");\r\n }\r\n };\r\n var isAngle = function (value) {\r\n if (value.type === TokenType.DIMENSION_TOKEN) {\r\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n var parseNamedSide = function (tokens) {\r\n var sideOrCorner = tokens\r\n .filter(isIdentToken)\r\n .map(function (ident) { return ident.value; })\r\n .join(' ');\r\n switch (sideOrCorner) {\r\n case 'to bottom right':\r\n case 'to right bottom':\r\n case 'left top':\r\n case 'top left':\r\n return [ZERO_LENGTH, ZERO_LENGTH];\r\n case 'to top':\r\n case 'bottom':\r\n return deg(0);\r\n case 'to bottom left':\r\n case 'to left bottom':\r\n case 'right top':\r\n case 'top right':\r\n return [ZERO_LENGTH, HUNDRED_PERCENT];\r\n case 'to right':\r\n case 'left':\r\n return deg(90);\r\n case 'to top left':\r\n case 'to left top':\r\n case 'right bottom':\r\n case 'bottom right':\r\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\r\n case 'to bottom':\r\n case 'top':\r\n return deg(180);\r\n case 'to top right':\r\n case 'to right top':\r\n case 'left bottom':\r\n case 'bottom left':\r\n return [HUNDRED_PERCENT, ZERO_LENGTH];\r\n case 'to left':\r\n case 'right':\r\n return deg(270);\r\n }\r\n return 0;\r\n };\r\n var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n var color = {\r\n name: 'color',\r\n parse: function (value) {\r\n if (value.type === TokenType.FUNCTION) {\r\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\r\n if (typeof colorFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\r\n }\r\n return colorFunction(value.values);\r\n }\r\n if (value.type === TokenType.HASH_TOKEN) {\r\n if (value.value.length === 3) {\r\n var r = value.value.substring(0, 1);\r\n var g = value.value.substring(1, 2);\r\n var b = value.value.substring(2, 3);\r\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\r\n }\r\n if (value.value.length === 4) {\r\n var r = value.value.substring(0, 1);\r\n var g = value.value.substring(1, 2);\r\n var b = value.value.substring(2, 3);\r\n var a = value.value.substring(3, 4);\r\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\r\n }\r\n if (value.value.length === 6) {\r\n var r = value.value.substring(0, 2);\r\n var g = value.value.substring(2, 4);\r\n var b = value.value.substring(4, 6);\r\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\r\n }\r\n if (value.value.length === 8) {\r\n var r = value.value.substring(0, 2);\r\n var g = value.value.substring(2, 4);\r\n var b = value.value.substring(4, 6);\r\n var a = value.value.substring(6, 8);\r\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\r\n }\r\n }\r\n if (value.type === TokenType.IDENT_TOKEN) {\r\n var namedColor = COLORS[value.value.toUpperCase()];\r\n if (typeof namedColor !== 'undefined') {\r\n return namedColor;\r\n }\r\n }\r\n return COLORS.TRANSPARENT;\r\n }\r\n };\r\n var isTransparent = function (color) { return (0xff & color) === 0; };\r\n var asString = function (color) {\r\n var alpha = 0xff & color;\r\n var blue = 0xff & (color >> 8);\r\n var green = 0xff & (color >> 16);\r\n var red = 0xff & (color >> 24);\r\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\r\n };\r\n var pack = function (r, g, b, a) {\r\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\r\n };\r\n var getTokenColorValue = function (token, i) {\r\n if (token.type === TokenType.NUMBER_TOKEN) {\r\n return token.number;\r\n }\r\n if (token.type === TokenType.PERCENTAGE_TOKEN) {\r\n var max = i === 3 ? 1 : 255;\r\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\r\n }\r\n return 0;\r\n };\r\n var rgb = function (args) {\r\n var tokens = args.filter(nonFunctionArgSeparator);\r\n if (tokens.length === 3) {\r\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\r\n return pack(r, g, b, 1);\r\n }\r\n if (tokens.length === 4) {\r\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\r\n return pack(r, g, b, a);\r\n }\r\n return 0;\r\n };\r\n function hue2rgb(t1, t2, hue) {\r\n if (hue < 0) {\r\n hue += 1;\r\n }\r\n if (hue >= 1) {\r\n hue -= 1;\r\n }\r\n if (hue < 1 / 6) {\r\n return (t2 - t1) * hue * 6 + t1;\r\n }\r\n else if (hue < 1 / 2) {\r\n return t2;\r\n }\r\n else if (hue < 2 / 3) {\r\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\r\n }\r\n else {\r\n return t1;\r\n }\r\n }\r\n var hsl = function (args) {\r\n var tokens = args.filter(nonFunctionArgSeparator);\r\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\r\n var h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(hue)) / (Math.PI * 2);\r\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\r\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\r\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\r\n if (s === 0) {\r\n return pack(l * 255, l * 255, l * 255, 1);\r\n }\r\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\r\n var t1 = l * 2 - t2;\r\n var r = hue2rgb(t1, t2, h + 1 / 3);\r\n var g = hue2rgb(t1, t2, h);\r\n var b = hue2rgb(t1, t2, h - 1 / 3);\r\n return pack(r * 255, g * 255, b * 255, a);\r\n };\r\n var SUPPORTED_COLOR_FUNCTIONS = {\r\n hsl: hsl,\r\n hsla: hsl,\r\n rgb: rgb,\r\n rgba: rgb\r\n };\r\n var COLORS = {\r\n ALICEBLUE: 0xf0f8ffff,\r\n ANTIQUEWHITE: 0xfaebd7ff,\r\n AQUA: 0x00ffffff,\r\n AQUAMARINE: 0x7fffd4ff,\r\n AZURE: 0xf0ffffff,\r\n BEIGE: 0xf5f5dcff,\r\n BISQUE: 0xffe4c4ff,\r\n BLACK: 0x000000ff,\r\n BLANCHEDALMOND: 0xffebcdff,\r\n BLUE: 0x0000ffff,\r\n BLUEVIOLET: 0x8a2be2ff,\r\n BROWN: 0xa52a2aff,\r\n BURLYWOOD: 0xdeb887ff,\r\n CADETBLUE: 0x5f9ea0ff,\r\n CHARTREUSE: 0x7fff00ff,\r\n CHOCOLATE: 0xd2691eff,\r\n CORAL: 0xff7f50ff,\r\n CORNFLOWERBLUE: 0x6495edff,\r\n CORNSILK: 0xfff8dcff,\r\n CRIMSON: 0xdc143cff,\r\n CYAN: 0x00ffffff,\r\n DARKBLUE: 0x00008bff,\r\n DARKCYAN: 0x008b8bff,\r\n DARKGOLDENROD: 0xb886bbff,\r\n DARKGRAY: 0xa9a9a9ff,\r\n DARKGREEN: 0x006400ff,\r\n DARKGREY: 0xa9a9a9ff,\r\n DARKKHAKI: 0xbdb76bff,\r\n DARKMAGENTA: 0x8b008bff,\r\n DARKOLIVEGREEN: 0x556b2fff,\r\n DARKORANGE: 0xff8c00ff,\r\n DARKORCHID: 0x9932ccff,\r\n DARKRED: 0x8b0000ff,\r\n DARKSALMON: 0xe9967aff,\r\n DARKSEAGREEN: 0x8fbc8fff,\r\n DARKSLATEBLUE: 0x483d8bff,\r\n DARKSLATEGRAY: 0x2f4f4fff,\r\n DARKSLATEGREY: 0x2f4f4fff,\r\n DARKTURQUOISE: 0x00ced1ff,\r\n DARKVIOLET: 0x9400d3ff,\r\n DEEPPINK: 0xff1493ff,\r\n DEEPSKYBLUE: 0x00bfffff,\r\n DIMGRAY: 0x696969ff,\r\n DIMGREY: 0x696969ff,\r\n DODGERBLUE: 0x1e90ffff,\r\n FIREBRICK: 0xb22222ff,\r\n FLORALWHITE: 0xfffaf0ff,\r\n FORESTGREEN: 0x228b22ff,\r\n FUCHSIA: 0xff00ffff,\r\n GAINSBORO: 0xdcdcdcff,\r\n GHOSTWHITE: 0xf8f8ffff,\r\n GOLD: 0xffd700ff,\r\n GOLDENROD: 0xdaa520ff,\r\n GRAY: 0x808080ff,\r\n GREEN: 0x008000ff,\r\n GREENYELLOW: 0xadff2fff,\r\n GREY: 0x808080ff,\r\n HONEYDEW: 0xf0fff0ff,\r\n HOTPINK: 0xff69b4ff,\r\n INDIANRED: 0xcd5c5cff,\r\n INDIGO: 0x4b0082ff,\r\n IVORY: 0xfffff0ff,\r\n KHAKI: 0xf0e68cff,\r\n LAVENDER: 0xe6e6faff,\r\n LAVENDERBLUSH: 0xfff0f5ff,\r\n LAWNGREEN: 0x7cfc00ff,\r\n LEMONCHIFFON: 0xfffacdff,\r\n LIGHTBLUE: 0xadd8e6ff,\r\n LIGHTCORAL: 0xf08080ff,\r\n LIGHTCYAN: 0xe0ffffff,\r\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\r\n LIGHTGRAY: 0xd3d3d3ff,\r\n LIGHTGREEN: 0x90ee90ff,\r\n LIGHTGREY: 0xd3d3d3ff,\r\n LIGHTPINK: 0xffb6c1ff,\r\n LIGHTSALMON: 0xffa07aff,\r\n LIGHTSEAGREEN: 0x20b2aaff,\r\n LIGHTSKYBLUE: 0x87cefaff,\r\n LIGHTSLATEGRAY: 0x778899ff,\r\n LIGHTSLATEGREY: 0x778899ff,\r\n LIGHTSTEELBLUE: 0xb0c4deff,\r\n LIGHTYELLOW: 0xffffe0ff,\r\n LIME: 0x00ff00ff,\r\n LIMEGREEN: 0x32cd32ff,\r\n LINEN: 0xfaf0e6ff,\r\n MAGENTA: 0xff00ffff,\r\n MAROON: 0x800000ff,\r\n MEDIUMAQUAMARINE: 0x66cdaaff,\r\n MEDIUMBLUE: 0x0000cdff,\r\n MEDIUMORCHID: 0xba55d3ff,\r\n MEDIUMPURPLE: 0x9370dbff,\r\n MEDIUMSEAGREEN: 0x3cb371ff,\r\n MEDIUMSLATEBLUE: 0x7b68eeff,\r\n MEDIUMSPRINGGREEN: 0x00fa9aff,\r\n MEDIUMTURQUOISE: 0x48d1ccff,\r\n MEDIUMVIOLETRED: 0xc71585ff,\r\n MIDNIGHTBLUE: 0x191970ff,\r\n MINTCREAM: 0xf5fffaff,\r\n MISTYROSE: 0xffe4e1ff,\r\n MOCCASIN: 0xffe4b5ff,\r\n NAVAJOWHITE: 0xffdeadff,\r\n NAVY: 0x000080ff,\r\n OLDLACE: 0xfdf5e6ff,\r\n OLIVE: 0x808000ff,\r\n OLIVEDRAB: 0x6b8e23ff,\r\n ORANGE: 0xffa500ff,\r\n ORANGERED: 0xff4500ff,\r\n ORCHID: 0xda70d6ff,\r\n PALEGOLDENROD: 0xeee8aaff,\r\n PALEGREEN: 0x98fb98ff,\r\n PALETURQUOISE: 0xafeeeeff,\r\n PALEVIOLETRED: 0xdb7093ff,\r\n PAPAYAWHIP: 0xffefd5ff,\r\n PEACHPUFF: 0xffdab9ff,\r\n PERU: 0xcd853fff,\r\n PINK: 0xffc0cbff,\r\n PLUM: 0xdda0ddff,\r\n POWDERBLUE: 0xb0e0e6ff,\r\n PURPLE: 0x800080ff,\r\n REBECCAPURPLE: 0x663399ff,\r\n RED: 0xff0000ff,\r\n ROSYBROWN: 0xbc8f8fff,\r\n ROYALBLUE: 0x4169e1ff,\r\n SADDLEBROWN: 0x8b4513ff,\r\n SALMON: 0xfa8072ff,\r\n SANDYBROWN: 0xf4a460ff,\r\n SEAGREEN: 0x2e8b57ff,\r\n SEASHELL: 0xfff5eeff,\r\n SIENNA: 0xa0522dff,\r\n SILVER: 0xc0c0c0ff,\r\n SKYBLUE: 0x87ceebff,\r\n SLATEBLUE: 0x6a5acdff,\r\n SLATEGRAY: 0x708090ff,\r\n SLATEGREY: 0x708090ff,\r\n SNOW: 0xfffafaff,\r\n SPRINGGREEN: 0x00ff7fff,\r\n STEELBLUE: 0x4682b4ff,\r\n TAN: 0xd2b48cff,\r\n TEAL: 0x008080ff,\r\n THISTLE: 0xd8bfd8ff,\r\n TOMATO: 0xff6347ff,\r\n TRANSPARENT: 0x00000000,\r\n TURQUOISE: 0x40e0d0ff,\r\n VIOLET: 0xee82eeff,\r\n WHEAT: 0xf5deb3ff,\r\n WHITE: 0xffffffff,\r\n WHITESMOKE: 0xf5f5f5ff,\r\n YELLOW: 0xffff00ff,\r\n YELLOWGREEN: 0x9acd32ff\r\n };\n\n var PropertyDescriptorParsingType;\r\n (function (PropertyDescriptorParsingType) {\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"VALUE\"] = 0] = \"VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"LIST\"] = 1] = \"LIST\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"IDENT_VALUE\"] = 2] = \"IDENT_VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"TYPE_VALUE\"] = 3] = \"TYPE_VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"TOKEN_VALUE\"] = 4] = \"TOKEN_VALUE\";\r\n })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {}));\n\n var BACKGROUND_CLIP;\r\n (function (BACKGROUND_CLIP) {\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"BORDER_BOX\"] = 0] = \"BORDER_BOX\";\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"PADDING_BOX\"] = 1] = \"PADDING_BOX\";\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"CONTENT_BOX\"] = 2] = \"CONTENT_BOX\";\r\n })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {}));\r\n var backgroundClip = {\r\n name: 'background-clip',\r\n initialValue: 'border-box',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.map(function (token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'padding-box':\r\n return BACKGROUND_CLIP.PADDING_BOX;\r\n case 'content-box':\r\n return BACKGROUND_CLIP.CONTENT_BOX;\r\n }\r\n }\r\n return BACKGROUND_CLIP.BORDER_BOX;\r\n });\r\n }\r\n };\n\n var backgroundColor = {\r\n name: \"background-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var parseColorStop = function (args) {\r\n var color$1 = color.parse(args[0]);\r\n var stop = args[1];\r\n return stop && isLengthPercentage(stop) ? { color: color$1, stop: stop } : { color: color$1, stop: null };\r\n };\r\n var processColorStops = function (stops, lineLength) {\r\n var first = stops[0];\r\n var last = stops[stops.length - 1];\r\n if (first.stop === null) {\r\n first.stop = ZERO_LENGTH;\r\n }\r\n if (last.stop === null) {\r\n last.stop = HUNDRED_PERCENT;\r\n }\r\n var processStops = [];\r\n var previous = 0;\r\n for (var i = 0; i < stops.length; i++) {\r\n var stop_1 = stops[i].stop;\r\n if (stop_1 !== null) {\r\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\r\n if (absoluteValue > previous) {\r\n processStops.push(absoluteValue);\r\n }\r\n else {\r\n processStops.push(previous);\r\n }\r\n previous = absoluteValue;\r\n }\r\n else {\r\n processStops.push(null);\r\n }\r\n }\r\n var gapBegin = null;\r\n for (var i = 0; i < processStops.length; i++) {\r\n var stop_2 = processStops[i];\r\n if (stop_2 === null) {\r\n if (gapBegin === null) {\r\n gapBegin = i;\r\n }\r\n }\r\n else if (gapBegin !== null) {\r\n var gapLength = i - gapBegin;\r\n var beforeGap = processStops[gapBegin - 1];\r\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\r\n for (var g = 1; g <= gapLength; g++) {\r\n processStops[gapBegin + g - 1] = gapValue * g;\r\n }\r\n gapBegin = null;\r\n }\r\n }\r\n return stops.map(function (_a, i) {\r\n var color = _a.color;\r\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\r\n });\r\n };\r\n var getAngleFromCorner = function (corner, width, height) {\r\n var centerX = width / 2;\r\n var centerY = height / 2;\r\n var x = getAbsoluteValue(corner[0], width) - centerX;\r\n var y = centerY - getAbsoluteValue(corner[1], height);\r\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\r\n };\r\n var calculateGradientDirection = function (angle, width, height) {\r\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\r\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\r\n var halfWidth = width / 2;\r\n var halfHeight = height / 2;\r\n var halfLineLength = lineLength / 2;\r\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\r\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\r\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\r\n };\r\n var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\r\n var findCorner = function (width, height, x, y, closest) {\r\n var corners = [[0, 0], [0, height], [width, 0], [width, height]];\r\n return corners.reduce(function (stat, corner) {\r\n var cx = corner[0], cy = corner[1];\r\n var d = distance(x - cx, y - cy);\r\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\r\n return {\r\n optimumCorner: corner,\r\n optimumDistance: d\r\n };\r\n }\r\n return stat;\r\n }, {\r\n optimumDistance: closest ? Infinity : -Infinity,\r\n optimumCorner: null\r\n }).optimumCorner;\r\n };\r\n var calculateRadius = function (gradient, x, y, width, height) {\r\n var rx = 0;\r\n var ry = 0;\r\n switch (gradient.size) {\r\n case CSSRadialExtent.CLOSEST_SIDE:\r\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\r\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n rx = Math.min(Math.abs(x), Math.abs(x - width));\r\n ry = Math.min(Math.abs(y), Math.abs(y - height));\r\n }\r\n break;\r\n case CSSRadialExtent.CLOSEST_CORNER:\r\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\r\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\r\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\r\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\r\n rx = distance(cx - x, (cy - y) / c);\r\n ry = c * rx;\r\n }\r\n break;\r\n case CSSRadialExtent.FARTHEST_SIDE:\r\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n rx = Math.max(Math.abs(x), Math.abs(x - width));\r\n ry = Math.max(Math.abs(y), Math.abs(y - height));\r\n }\r\n break;\r\n case CSSRadialExtent.FARTHEST_CORNER:\r\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\r\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\r\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\r\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\r\n rx = distance(cx - x, (cy - y) / c);\r\n ry = c * rx;\r\n }\r\n break;\r\n }\r\n if (Array.isArray(gradient.size)) {\r\n rx = getAbsoluteValue(gradient.size[0], width);\r\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\r\n }\r\n return [rx, ry];\r\n };\n\n var linearGradient = function (tokens) {\r\n var angle$1 = deg(180);\r\n var stops = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n if (i === 0) {\r\n var firstToken = arg[0];\r\n if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') {\r\n angle$1 = parseNamedSide(arg);\r\n return;\r\n }\r\n else if (isAngle(firstToken)) {\r\n angle$1 = angle.parse(firstToken);\r\n return;\r\n }\r\n }\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n });\r\n return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT };\r\n };\n\n var prefixLinearGradient = function (tokens) {\r\n var angle$1 = deg(180);\r\n var stops = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n if (i === 0) {\r\n var firstToken = arg[0];\r\n if (firstToken.type === TokenType.IDENT_TOKEN &&\r\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\r\n angle$1 = parseNamedSide(arg);\r\n return;\r\n }\r\n else if (isAngle(firstToken)) {\r\n angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360);\r\n return;\r\n }\r\n }\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n });\r\n return {\r\n angle: angle$1,\r\n stops: stops,\r\n type: CSSImageType.LINEAR_GRADIENT\r\n };\r\n };\n\n var testRangeBounds = function (document) {\r\n var TEST_HEIGHT = 123;\r\n if (document.createRange) {\r\n var range = document.createRange();\r\n if (range.getBoundingClientRect) {\r\n var testElement = document.createElement('boundtest');\r\n testElement.style.height = TEST_HEIGHT + \"px\";\r\n testElement.style.display = 'block';\r\n document.body.appendChild(testElement);\r\n range.selectNode(testElement);\r\n var rangeBounds = range.getBoundingClientRect();\r\n var rangeHeight = Math.round(rangeBounds.height);\r\n document.body.removeChild(testElement);\r\n if (rangeHeight === TEST_HEIGHT) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\r\n var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\r\n var testSVG = function (document) {\r\n var img = new Image();\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n return false;\r\n }\r\n img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";\r\n try {\r\n ctx.drawImage(img, 0, 0);\r\n canvas.toDataURL();\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n var isGreenPixel = function (data) {\r\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\r\n };\r\n var testForeignObject = function (document) {\r\n var canvas = document.createElement('canvas');\r\n var size = 100;\r\n canvas.width = size;\r\n canvas.height = size;\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n return Promise.reject(false);\r\n }\r\n ctx.fillStyle = 'rgb(0, 255, 0)';\r\n ctx.fillRect(0, 0, size, size);\r\n var img = new Image();\r\n var greenImageSrc = canvas.toDataURL();\r\n img.src = greenImageSrc;\r\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\r\n ctx.fillStyle = 'red';\r\n ctx.fillRect(0, 0, size, size);\r\n return loadSerializedSVG(svg)\r\n .then(function (img) {\r\n ctx.drawImage(img, 0, 0);\r\n var data = ctx.getImageData(0, 0, size, size).data;\r\n ctx.fillStyle = 'red';\r\n ctx.fillRect(0, 0, size, size);\r\n var node = document.createElement('div');\r\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\r\n node.style.height = size + \"px\";\r\n // Firefox 55 does not render inline <img /> tags\r\n return isGreenPixel(data)\r\n ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node))\r\n : Promise.reject(false);\r\n })\r\n .then(function (img) {\r\n ctx.drawImage(img, 0, 0);\r\n // Edge does not render background-images\r\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\r\n })\r\n .catch(function () { return false; });\r\n };\r\n var createForeignObjectSVG = function (width, height, x, y, node) {\r\n var xmlns = 'http://www.w3.org/2000/svg';\r\n var svg = document.createElementNS(xmlns, 'svg');\r\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\r\n svg.setAttributeNS(null, 'width', width.toString());\r\n svg.setAttributeNS(null, 'height', height.toString());\r\n foreignObject.setAttributeNS(null, 'width', '100%');\r\n foreignObject.setAttributeNS(null, 'height', '100%');\r\n foreignObject.setAttributeNS(null, 'x', x.toString());\r\n foreignObject.setAttributeNS(null, 'y', y.toString());\r\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\r\n svg.appendChild(foreignObject);\r\n foreignObject.appendChild(node);\r\n return svg;\r\n };\r\n var loadSerializedSVG = function (svg) {\r\n return new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n });\r\n };\r\n var FEATURES = {\r\n get SUPPORT_RANGE_BOUNDS() {\r\n var value = testRangeBounds(document);\r\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_SVG_DRAWING() {\r\n var value = testSVG(document);\r\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\r\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\r\n ? testForeignObject(document)\r\n : Promise.resolve(false);\r\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_CORS_IMAGES() {\r\n var value = testCORS();\r\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_RESPONSE_TYPE() {\r\n var value = testResponseType();\r\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_CORS_XHR() {\r\n var value = 'withCredentials' in new XMLHttpRequest();\r\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\r\n return value;\r\n }\r\n };\n\n var Logger = /** @class */ (function () {\r\n function Logger(_a) {\r\n var id = _a.id, enabled = _a.enabled;\r\n this.id = id;\r\n this.enabled = enabled;\r\n this.start = Date.now();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.debug.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n else {\r\n this.info.apply(this, args);\r\n }\r\n }\r\n };\r\n Logger.prototype.getTime = function () {\r\n return Date.now() - this.start;\r\n };\r\n Logger.create = function (options) {\r\n Logger.instances[options.id] = new Logger(options);\r\n };\r\n Logger.destroy = function (id) {\r\n delete Logger.instances[id];\r\n };\r\n Logger.getInstance = function (id) {\r\n var instance = Logger.instances[id];\r\n if (typeof instance === 'undefined') {\r\n throw new Error(\"No logger instance found with id \" + id);\r\n }\r\n return instance;\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.info = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.info.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n }\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.error = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.error.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n else {\r\n this.info.apply(this, args);\r\n }\r\n }\r\n };\r\n Logger.instances = {};\r\n return Logger;\r\n }());\n\n var CacheStorage = /** @class */ (function () {\r\n function CacheStorage() {\r\n }\r\n CacheStorage.create = function (name, options) {\r\n return (CacheStorage._caches[name] = new Cache(name, options));\r\n };\r\n CacheStorage.destroy = function (name) {\r\n delete CacheStorage._caches[name];\r\n };\r\n CacheStorage.open = function (name) {\r\n var cache = CacheStorage._caches[name];\r\n if (typeof cache !== 'undefined') {\r\n return cache;\r\n }\r\n throw new Error(\"Cache with key \\\"\" + name + \"\\\" not found\");\r\n };\r\n CacheStorage.getOrigin = function (url) {\r\n var link = CacheStorage._link;\r\n if (!link) {\r\n return 'about:blank';\r\n }\r\n link.href = url;\r\n link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\r\n return link.protocol + link.hostname + link.port;\r\n };\r\n CacheStorage.isSameOrigin = function (src) {\r\n return CacheStorage.getOrigin(src) === CacheStorage._origin;\r\n };\r\n CacheStorage.setContext = function (window) {\r\n CacheStorage._link = window.document.createElement('a');\r\n CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\r\n };\r\n CacheStorage.getInstance = function () {\r\n var current = CacheStorage._current;\r\n if (current === null) {\r\n throw new Error(\"No cache instance attached\");\r\n }\r\n return current;\r\n };\r\n CacheStorage.attachInstance = function (cache) {\r\n CacheStorage._current = cache;\r\n };\r\n CacheStorage.detachInstance = function () {\r\n CacheStorage._current = null;\r\n };\r\n CacheStorage._caches = {};\r\n CacheStorage._origin = 'about:blank';\r\n CacheStorage._current = null;\r\n return CacheStorage;\r\n }());\r\n var Cache = /** @class */ (function () {\r\n function Cache(id, options) {\r\n this.id = id;\r\n this._options = options;\r\n this._cache = {};\r\n }\r\n Cache.prototype.addImage = function (src) {\r\n var result = Promise.resolve();\r\n if (this.has(src)) {\r\n return result;\r\n }\r\n if (isBlobImage(src) || isRenderable(src)) {\r\n this._cache[src] = this.loadImage(src);\r\n return result;\r\n }\r\n return result;\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Cache.prototype.match = function (src) {\r\n return this._cache[src];\r\n };\r\n Cache.prototype.loadImage = function (key) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var isSameOrigin, useCORS, useProxy, src;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n isSameOrigin = CacheStorage.isSameOrigin(key);\r\n useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\r\n useProxy = !isInlineImage(key) &&\r\n !isSameOrigin &&\r\n typeof this._options.proxy === 'string' &&\r\n FEATURES.SUPPORT_CORS_XHR &&\r\n !useCORS;\r\n if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !useProxy && !useCORS) {\r\n return [2 /*return*/];\r\n }\r\n src = key;\r\n if (!useProxy) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.proxy(src)];\r\n case 1:\r\n src = _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n Logger.getInstance(this.id).debug(\"Added image \" + key.substring(0, 256));\r\n return [4 /*yield*/, new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\r\n if (isInlineBase64Image(src) || useCORS) {\r\n img.crossOrigin = 'anonymous';\r\n }\r\n img.src = src;\r\n if (img.complete === true) {\r\n // Inline XML images may fail to parse, throwing an Error later on\r\n setTimeout(function () { return resolve(img); }, 500);\r\n }\r\n if (_this._options.imageTimeout > 0) {\r\n setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\r\n }\r\n })];\r\n case 3: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n });\r\n };\r\n Cache.prototype.has = function (key) {\r\n return typeof this._cache[key] !== 'undefined';\r\n };\r\n Cache.prototype.keys = function () {\r\n return Promise.resolve(Object.keys(this._cache));\r\n };\r\n Cache.prototype.proxy = function (src) {\r\n var _this = this;\r\n var proxy = this._options.proxy;\r\n if (!proxy) {\r\n throw new Error('No proxy defined');\r\n }\r\n var key = src.substring(0, 256);\r\n return new Promise(function (resolve, reject) {\r\n var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n if (responseType === 'text') {\r\n resolve(xhr.response);\r\n }\r\n else {\r\n var reader_1 = new FileReader();\r\n reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\r\n reader_1.addEventListener('error', function (e) { return reject(e); }, false);\r\n reader_1.readAsDataURL(xhr.response);\r\n }\r\n }\r\n else {\r\n reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\r\n }\r\n };\r\n xhr.onerror = reject;\r\n xhr.open('GET', proxy + \"?url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\r\n if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\r\n xhr.responseType = responseType;\r\n }\r\n if (_this._options.imageTimeout) {\r\n var timeout_1 = _this._options.imageTimeout;\r\n xhr.timeout = timeout_1;\r\n xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\r\n }\r\n xhr.send();\r\n });\r\n };\r\n return Cache;\r\n }());\r\n var INLINE_SVG = /^data:image\\/svg\\+xml/i;\r\n var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\r\n var INLINE_IMG = /^data:image\\/.*/i;\r\n var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\r\n var isInlineImage = function (src) { return INLINE_IMG.test(src); };\r\n var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\r\n var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\r\n var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n var webkitGradient = function (tokens) {\r\n var angle = deg(180);\r\n var stops = [];\r\n var type = CSSImageType.LINEAR_GRADIENT;\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var firstToken = arg[0];\r\n if (i === 0) {\r\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\r\n type = CSSImageType.LINEAR_GRADIENT;\r\n return;\r\n }\r\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\r\n type = CSSImageType.RADIAL_GRADIENT;\r\n return;\r\n }\r\n }\r\n if (firstToken.type === TokenType.FUNCTION) {\r\n if (firstToken.name === 'from') {\r\n var color$1 = color.parse(firstToken.values[0]);\r\n stops.push({ stop: ZERO_LENGTH, color: color$1 });\r\n }\r\n else if (firstToken.name === 'to') {\r\n var color$1 = color.parse(firstToken.values[0]);\r\n stops.push({ stop: HUNDRED_PERCENT, color: color$1 });\r\n }\r\n else if (firstToken.name === 'color-stop') {\r\n var values = firstToken.values.filter(nonFunctionArgSeparator);\r\n if (values.length === 2) {\r\n var color$1 = color.parse(values[1]);\r\n var stop_1 = values[0];\r\n if (isNumberToken(stop_1)) {\r\n stops.push({\r\n stop: { type: TokenType.PERCENTAGE_TOKEN, number: stop_1.number * 100, flags: stop_1.flags },\r\n color: color$1\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return type === CSSImageType.LINEAR_GRADIENT\r\n ? {\r\n angle: (angle + deg(180)) % deg(360),\r\n stops: stops,\r\n type: type\r\n }\r\n : { size: size, shape: shape, stops: stops, position: position, type: type };\r\n };\n\n var CLOSEST_SIDE = 'closest-side';\r\n var FARTHEST_SIDE = 'farthest-side';\r\n var CLOSEST_CORNER = 'closest-corner';\r\n var FARTHEST_CORNER = 'farthest-corner';\r\n var CIRCLE = 'circle';\r\n var ELLIPSE = 'ellipse';\r\n var COVER = 'cover';\r\n var CONTAIN = 'contain';\r\n var radialGradient = function (tokens) {\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var stops = [];\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var isColorStop = true;\r\n if (i === 0) {\r\n var isAtPosition_1 = false;\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isAtPosition_1) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'center':\r\n position.push(FIFTY_PERCENT);\r\n return acc;\r\n case 'top':\r\n case 'left':\r\n position.push(ZERO_LENGTH);\r\n return acc;\r\n case 'right':\r\n case 'bottom':\r\n position.push(HUNDRED_PERCENT);\r\n return acc;\r\n }\r\n }\r\n else if (isLengthPercentage(token) || isLength(token)) {\r\n position.push(token);\r\n }\r\n }\r\n else if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case CIRCLE:\r\n shape = CSSRadialShape.CIRCLE;\r\n return false;\r\n case ELLIPSE:\r\n shape = CSSRadialShape.ELLIPSE;\r\n return false;\r\n case 'at':\r\n isAtPosition_1 = true;\r\n return false;\r\n case CLOSEST_SIDE:\r\n size = CSSRadialExtent.CLOSEST_SIDE;\r\n return false;\r\n case COVER:\r\n case FARTHEST_SIDE:\r\n size = CSSRadialExtent.FARTHEST_SIDE;\r\n return false;\r\n case CONTAIN:\r\n case CLOSEST_CORNER:\r\n size = CSSRadialExtent.CLOSEST_CORNER;\r\n return false;\r\n case FARTHEST_CORNER:\r\n size = CSSRadialExtent.FARTHEST_CORNER;\r\n return false;\r\n }\r\n }\r\n else if (isLength(token) || isLengthPercentage(token)) {\r\n if (!Array.isArray(size)) {\r\n size = [];\r\n }\r\n size.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n if (isColorStop) {\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n }\r\n });\r\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\r\n };\n\n var prefixRadialGradient = function (tokens) {\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var stops = [];\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var isColorStop = true;\r\n if (i === 0) {\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'center':\r\n position.push(FIFTY_PERCENT);\r\n return false;\r\n case 'top':\r\n case 'left':\r\n position.push(ZERO_LENGTH);\r\n return false;\r\n case 'right':\r\n case 'bottom':\r\n position.push(HUNDRED_PERCENT);\r\n return false;\r\n }\r\n }\r\n else if (isLengthPercentage(token) || isLength(token)) {\r\n position.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n else if (i === 1) {\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case CIRCLE:\r\n shape = CSSRadialShape.CIRCLE;\r\n return false;\r\n case ELLIPSE:\r\n shape = CSSRadialShape.ELLIPSE;\r\n return false;\r\n case CONTAIN:\r\n case CLOSEST_SIDE:\r\n size = CSSRadialExtent.CLOSEST_SIDE;\r\n return false;\r\n case FARTHEST_SIDE:\r\n size = CSSRadialExtent.FARTHEST_SIDE;\r\n return false;\r\n case CLOSEST_CORNER:\r\n size = CSSRadialExtent.CLOSEST_CORNER;\r\n return false;\r\n case COVER:\r\n case FARTHEST_CORNER:\r\n size = CSSRadialExtent.FARTHEST_CORNER;\r\n return false;\r\n }\r\n }\r\n else if (isLength(token) || isLengthPercentage(token)) {\r\n if (!Array.isArray(size)) {\r\n size = [];\r\n }\r\n size.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n if (isColorStop) {\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n }\r\n });\r\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\r\n };\n\n var CSSImageType;\r\n (function (CSSImageType) {\r\n CSSImageType[CSSImageType[\"URL\"] = 0] = \"URL\";\r\n CSSImageType[CSSImageType[\"LINEAR_GRADIENT\"] = 1] = \"LINEAR_GRADIENT\";\r\n CSSImageType[CSSImageType[\"RADIAL_GRADIENT\"] = 2] = \"RADIAL_GRADIENT\";\r\n })(CSSImageType || (CSSImageType = {}));\r\n var isLinearGradient = function (background) {\r\n return background.type === CSSImageType.LINEAR_GRADIENT;\r\n };\r\n var isRadialGradient = function (background) {\r\n return background.type === CSSImageType.RADIAL_GRADIENT;\r\n };\r\n var CSSRadialShape;\r\n (function (CSSRadialShape) {\r\n CSSRadialShape[CSSRadialShape[\"CIRCLE\"] = 0] = \"CIRCLE\";\r\n CSSRadialShape[CSSRadialShape[\"ELLIPSE\"] = 1] = \"ELLIPSE\";\r\n })(CSSRadialShape || (CSSRadialShape = {}));\r\n var CSSRadialExtent;\r\n (function (CSSRadialExtent) {\r\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_SIDE\"] = 0] = \"CLOSEST_SIDE\";\r\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_SIDE\"] = 1] = \"FARTHEST_SIDE\";\r\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_CORNER\"] = 2] = \"CLOSEST_CORNER\";\r\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_CORNER\"] = 3] = \"FARTHEST_CORNER\";\r\n })(CSSRadialExtent || (CSSRadialExtent = {}));\r\n var image = {\r\n name: 'image',\r\n parse: function (value) {\r\n if (value.type === TokenType.URL_TOKEN) {\r\n var image_1 = { url: value.value, type: CSSImageType.URL };\r\n CacheStorage.getInstance().addImage(value.value);\r\n return image_1;\r\n }\r\n if (value.type === TokenType.FUNCTION) {\r\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\r\n if (typeof imageFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\r\n }\r\n return imageFunction(value.values);\r\n }\r\n throw new Error(\"Unsupported image type\");\r\n }\r\n };\r\n function isSupportedImage(value) {\r\n return value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name];\r\n }\r\n var SUPPORTED_IMAGE_FUNCTIONS = {\r\n 'linear-gradient': linearGradient,\r\n '-moz-linear-gradient': prefixLinearGradient,\r\n '-ms-linear-gradient': prefixLinearGradient,\r\n '-o-linear-gradient': prefixLinearGradient,\r\n '-webkit-linear-gradient': prefixLinearGradient,\r\n 'radial-gradient': radialGradient,\r\n '-moz-radial-gradient': prefixRadialGradient,\r\n '-ms-radial-gradient': prefixRadialGradient,\r\n '-o-radial-gradient': prefixRadialGradient,\r\n '-webkit-radial-gradient': prefixRadialGradient,\r\n '-webkit-gradient': webkitGradient\r\n };\n\n var backgroundImage = {\r\n name: 'background-image',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return [];\r\n }\r\n return tokens.filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }).map(image.parse);\r\n }\r\n };\n\n var backgroundOrigin = {\r\n name: 'background-origin',\r\n initialValue: 'border-box',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.map(function (token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'padding-box':\r\n return 1 /* PADDING_BOX */;\r\n case 'content-box':\r\n return 2 /* CONTENT_BOX */;\r\n }\r\n }\r\n return 0 /* BORDER_BOX */;\r\n });\r\n }\r\n };\n\n var backgroundPosition = {\r\n name: 'background-position',\r\n initialValue: '0% 0%',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens)\r\n .map(function (values) { return values.filter(isLengthPercentage); })\r\n .map(parseLengthPercentageTuple);\r\n }\r\n };\n\n var BACKGROUND_REPEAT;\r\n (function (BACKGROUND_REPEAT) {\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT\"] = 0] = \"REPEAT\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"NO_REPEAT\"] = 1] = \"NO_REPEAT\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_X\"] = 2] = \"REPEAT_X\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_Y\"] = 3] = \"REPEAT_Y\";\r\n })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {}));\r\n var backgroundRepeat = {\r\n name: 'background-repeat',\r\n initialValue: 'repeat',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens)\r\n .map(function (values) {\r\n return values\r\n .filter(isIdentToken)\r\n .map(function (token) { return token.value; })\r\n .join(' ');\r\n })\r\n .map(parseBackgroundRepeat);\r\n }\r\n };\r\n var parseBackgroundRepeat = function (value) {\r\n switch (value) {\r\n case 'no-repeat':\r\n return BACKGROUND_REPEAT.NO_REPEAT;\r\n case 'repeat-x':\r\n case 'repeat no-repeat':\r\n return BACKGROUND_REPEAT.REPEAT_X;\r\n case 'repeat-y':\r\n case 'no-repeat repeat':\r\n return BACKGROUND_REPEAT.REPEAT_Y;\r\n case 'repeat':\r\n default:\r\n return BACKGROUND_REPEAT.REPEAT;\r\n }\r\n };\n\n var BACKGROUND_SIZE;\r\n (function (BACKGROUND_SIZE) {\r\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\r\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\r\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\r\n })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\r\n var backgroundSize = {\r\n name: 'background-size',\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\r\n }\r\n };\r\n var isBackgroundSizeInfoToken = function (value) {\r\n return isIdentToken(value) || isLengthPercentage(value);\r\n };\n\n var borderColorForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n }); };\r\n var borderTopColor = borderColorForSide('top');\r\n var borderRightColor = borderColorForSide('right');\r\n var borderBottomColor = borderColorForSide('bottom');\r\n var borderLeftColor = borderColorForSide('left');\n\n var borderRadiusForSide = function (side) { return ({\r\n name: \"border-radius-\" + side,\r\n initialValue: '0 0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) { return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); }\r\n }); };\r\n var borderTopLeftRadius = borderRadiusForSide('top-left');\r\n var borderTopRightRadius = borderRadiusForSide('top-right');\r\n var borderBottomRightRadius = borderRadiusForSide('bottom-right');\r\n var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n var BORDER_STYLE;\r\n (function (BORDER_STYLE) {\r\n BORDER_STYLE[BORDER_STYLE[\"NONE\"] = 0] = \"NONE\";\r\n BORDER_STYLE[BORDER_STYLE[\"SOLID\"] = 1] = \"SOLID\";\r\n })(BORDER_STYLE || (BORDER_STYLE = {}));\r\n var borderStyleForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-style\",\r\n initialValue: 'solid',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (style) {\r\n switch (style) {\r\n case 'none':\r\n return BORDER_STYLE.NONE;\r\n }\r\n return BORDER_STYLE.SOLID;\r\n }\r\n }); };\r\n var borderTopStyle = borderStyleForSide('top');\r\n var borderRightStyle = borderStyleForSide('right');\r\n var borderBottomStyle = borderStyleForSide('bottom');\r\n var borderLeftStyle = borderStyleForSide('left');\n\n var borderWidthForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-width\",\r\n initialValue: '0',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isDimensionToken(token)) {\r\n return token.number;\r\n }\r\n return 0;\r\n }\r\n }); };\r\n var borderTopWidth = borderWidthForSide('top');\r\n var borderRightWidth = borderWidthForSide('right');\r\n var borderBottomWidth = borderWidthForSide('bottom');\r\n var borderLeftWidth = borderWidthForSide('left');\n\n var color$1 = {\r\n name: \"color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var display = {\r\n name: 'display',\r\n initialValue: 'inline-block',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\r\n return bit | parseDisplayValue(token.value);\r\n }, 0 /* NONE */);\r\n }\r\n };\r\n var parseDisplayValue = function (display) {\r\n switch (display) {\r\n case 'block':\r\n return 2 /* BLOCK */;\r\n case 'inline':\r\n return 4 /* INLINE */;\r\n case 'run-in':\r\n return 8 /* RUN_IN */;\r\n case 'flow':\r\n return 16 /* FLOW */;\r\n case 'flow-root':\r\n return 32 /* FLOW_ROOT */;\r\n case 'table':\r\n return 64 /* TABLE */;\r\n case 'flex':\r\n case '-webkit-flex':\r\n return 128 /* FLEX */;\r\n case 'grid':\r\n case '-ms-grid':\r\n return 256 /* GRID */;\r\n case 'ruby':\r\n return 512 /* RUBY */;\r\n case 'subgrid':\r\n return 1024 /* SUBGRID */;\r\n case 'list-item':\r\n return 2048 /* LIST_ITEM */;\r\n case 'table-row-group':\r\n return 4096 /* TABLE_ROW_GROUP */;\r\n case 'table-header-group':\r\n return 8192 /* TABLE_HEADER_GROUP */;\r\n case 'table-footer-group':\r\n return 16384 /* TABLE_FOOTER_GROUP */;\r\n case 'table-row':\r\n return 32768 /* TABLE_ROW */;\r\n case 'table-cell':\r\n return 65536 /* TABLE_CELL */;\r\n case 'table-column-group':\r\n return 131072 /* TABLE_COLUMN_GROUP */;\r\n case 'table-column':\r\n return 262144 /* TABLE_COLUMN */;\r\n case 'table-caption':\r\n return 524288 /* TABLE_CAPTION */;\r\n case 'ruby-base':\r\n return 1048576 /* RUBY_BASE */;\r\n case 'ruby-text':\r\n return 2097152 /* RUBY_TEXT */;\r\n case 'ruby-base-container':\r\n return 4194304 /* RUBY_BASE_CONTAINER */;\r\n case 'ruby-text-container':\r\n return 8388608 /* RUBY_TEXT_CONTAINER */;\r\n case 'contents':\r\n return 16777216 /* CONTENTS */;\r\n case 'inline-block':\r\n return 33554432 /* INLINE_BLOCK */;\r\n case 'inline-list-item':\r\n return 67108864 /* INLINE_LIST_ITEM */;\r\n case 'inline-table':\r\n return 134217728 /* INLINE_TABLE */;\r\n case 'inline-flex':\r\n return 268435456 /* INLINE_FLEX */;\r\n case 'inline-grid':\r\n return 536870912 /* INLINE_GRID */;\r\n }\r\n return 0 /* NONE */;\r\n };\n\n var FLOAT;\r\n (function (FLOAT) {\r\n FLOAT[FLOAT[\"NONE\"] = 0] = \"NONE\";\r\n FLOAT[FLOAT[\"LEFT\"] = 1] = \"LEFT\";\r\n FLOAT[FLOAT[\"RIGHT\"] = 2] = \"RIGHT\";\r\n FLOAT[FLOAT[\"INLINE_START\"] = 3] = \"INLINE_START\";\r\n FLOAT[FLOAT[\"INLINE_END\"] = 4] = \"INLINE_END\";\r\n })(FLOAT || (FLOAT = {}));\r\n var float = {\r\n name: 'float',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (float) {\r\n switch (float) {\r\n case 'left':\r\n return FLOAT.LEFT;\r\n case 'right':\r\n return FLOAT.RIGHT;\r\n case 'inline-start':\r\n return FLOAT.INLINE_START;\r\n case 'inline-end':\r\n return FLOAT.INLINE_END;\r\n }\r\n return FLOAT.NONE;\r\n }\r\n };\n\n var letterSpacing = {\r\n name: 'letter-spacing',\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') {\r\n return 0;\r\n }\r\n if (token.type === TokenType.NUMBER_TOKEN) {\r\n return token.number;\r\n }\r\n if (token.type === TokenType.DIMENSION_TOKEN) {\r\n return token.number;\r\n }\r\n return 0;\r\n }\r\n };\n\n var LINE_BREAK;\r\n (function (LINE_BREAK) {\r\n LINE_BREAK[\"NORMAL\"] = \"normal\";\r\n LINE_BREAK[\"STRICT\"] = \"strict\";\r\n })(LINE_BREAK || (LINE_BREAK = {}));\r\n var lineBreak = {\r\n name: 'line-break',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (lineBreak) {\r\n switch (lineBreak) {\r\n case 'strict':\r\n return LINE_BREAK.STRICT;\r\n case 'normal':\r\n default:\r\n return LINE_BREAK.NORMAL;\r\n }\r\n }\r\n };\n\n var lineHeight = {\r\n name: 'line-height',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TOKEN_VALUE\r\n };\r\n var computeLineHeight = function (token, fontSize) {\r\n if (isIdentToken(token) && token.value === 'normal') {\r\n return 1.2 * fontSize;\r\n }\r\n else if (token.type === TokenType.NUMBER_TOKEN) {\r\n return fontSize * token.number;\r\n }\r\n else if (isLengthPercentage(token)) {\r\n return getAbsoluteValue(token, fontSize);\r\n }\r\n return fontSize;\r\n };\n\n var listStyleImage = {\r\n name: 'list-style-image',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\r\n return null;\r\n }\r\n return image.parse(token);\r\n }\r\n };\n\n var LIST_STYLE_POSITION;\r\n (function (LIST_STYLE_POSITION) {\r\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"INSIDE\"] = 0] = \"INSIDE\";\r\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"OUTSIDE\"] = 1] = \"OUTSIDE\";\r\n })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {}));\r\n var listStylePosition = {\r\n name: 'list-style-position',\r\n initialValue: 'outside',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (position) {\r\n switch (position) {\r\n case 'inside':\r\n return LIST_STYLE_POSITION.INSIDE;\r\n case 'outside':\r\n default:\r\n return LIST_STYLE_POSITION.OUTSIDE;\r\n }\r\n }\r\n };\n\n var LIST_STYLE_TYPE;\r\n (function (LIST_STYLE_TYPE) {\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"NONE\"] = -1] = \"NONE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISC\"] = 0] = \"DISC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CIRCLE\"] = 1] = \"CIRCLE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SQUARE\"] = 2] = \"SQUARE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL\"] = 3] = \"DECIMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_DECIMAL\"] = 4] = \"CJK_DECIMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL_LEADING_ZERO\"] = 5] = \"DECIMAL_LEADING_ZERO\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ROMAN\"] = 6] = \"LOWER_ROMAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ROMAN\"] = 7] = \"UPPER_ROMAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_GREEK\"] = 8] = \"LOWER_GREEK\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ALPHA\"] = 9] = \"LOWER_ALPHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ALPHA\"] = 10] = \"UPPER_ALPHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARABIC_INDIC\"] = 11] = \"ARABIC_INDIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARMENIAN\"] = 12] = \"ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"BENGALI\"] = 13] = \"BENGALI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CAMBODIAN\"] = 14] = \"CAMBODIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_EARTHLY_BRANCH\"] = 15] = \"CJK_EARTHLY_BRANCH\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_HEAVENLY_STEM\"] = 16] = \"CJK_HEAVENLY_STEM\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_IDEOGRAPHIC\"] = 17] = \"CJK_IDEOGRAPHIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DEVANAGARI\"] = 18] = \"DEVANAGARI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ETHIOPIC_NUMERIC\"] = 19] = \"ETHIOPIC_NUMERIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GEORGIAN\"] = 20] = \"GEORGIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GUJARATI\"] = 21] = \"GUJARATI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GURMUKHI\"] = 22] = \"GURMUKHI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HEBREW\"] = 22] = \"HEBREW\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA\"] = 23] = \"HIRAGANA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA_IROHA\"] = 24] = \"HIRAGANA_IROHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_FORMAL\"] = 25] = \"JAPANESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_INFORMAL\"] = 26] = \"JAPANESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KANNADA\"] = 27] = \"KANNADA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA\"] = 28] = \"KATAKANA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA_IROHA\"] = 29] = \"KATAKANA_IROHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KHMER\"] = 30] = \"KHMER\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANGUL_FORMAL\"] = 31] = \"KOREAN_HANGUL_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_FORMAL\"] = 32] = \"KOREAN_HANJA_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_INFORMAL\"] = 33] = \"KOREAN_HANJA_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LAO\"] = 34] = \"LAO\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ARMENIAN\"] = 35] = \"LOWER_ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MALAYALAM\"] = 36] = \"MALAYALAM\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MONGOLIAN\"] = 37] = \"MONGOLIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MYANMAR\"] = 38] = \"MYANMAR\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ORIYA\"] = 39] = \"ORIYA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"PERSIAN\"] = 40] = \"PERSIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_FORMAL\"] = 41] = \"SIMP_CHINESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_INFORMAL\"] = 42] = \"SIMP_CHINESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TAMIL\"] = 43] = \"TAMIL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TELUGU\"] = 44] = \"TELUGU\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"THAI\"] = 45] = \"THAI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TIBETAN\"] = 46] = \"TIBETAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_FORMAL\"] = 47] = \"TRAD_CHINESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_INFORMAL\"] = 48] = \"TRAD_CHINESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ARMENIAN\"] = 49] = \"UPPER_ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_OPEN\"] = 50] = \"DISCLOSURE_OPEN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_CLOSED\"] = 51] = \"DISCLOSURE_CLOSED\";\r\n })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {}));\r\n var listStyleType = {\r\n name: 'list-style-type',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (type) {\r\n switch (type) {\r\n case 'disc':\r\n return LIST_STYLE_TYPE.DISC;\r\n case 'circle':\r\n return LIST_STYLE_TYPE.CIRCLE;\r\n case 'square':\r\n return LIST_STYLE_TYPE.SQUARE;\r\n case 'decimal':\r\n return LIST_STYLE_TYPE.DECIMAL;\r\n case 'cjk-decimal':\r\n return LIST_STYLE_TYPE.CJK_DECIMAL;\r\n case 'decimal-leading-zero':\r\n return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;\r\n case 'lower-roman':\r\n return LIST_STYLE_TYPE.LOWER_ROMAN;\r\n case 'upper-roman':\r\n return LIST_STYLE_TYPE.UPPER_ROMAN;\r\n case 'lower-greek':\r\n return LIST_STYLE_TYPE.LOWER_GREEK;\r\n case 'lower-alpha':\r\n return LIST_STYLE_TYPE.LOWER_ALPHA;\r\n case 'upper-alpha':\r\n return LIST_STYLE_TYPE.UPPER_ALPHA;\r\n case 'arabic-indic':\r\n return LIST_STYLE_TYPE.ARABIC_INDIC;\r\n case 'armenian':\r\n return LIST_STYLE_TYPE.ARMENIAN;\r\n case 'bengali':\r\n return LIST_STYLE_TYPE.BENGALI;\r\n case 'cambodian':\r\n return LIST_STYLE_TYPE.CAMBODIAN;\r\n case 'cjk-earthly-branch':\r\n return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;\r\n case 'cjk-heavenly-stem':\r\n return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;\r\n case 'cjk-ideographic':\r\n return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;\r\n case 'devanagari':\r\n return LIST_STYLE_TYPE.DEVANAGARI;\r\n case 'ethiopic-numeric':\r\n return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;\r\n case 'georgian':\r\n return LIST_STYLE_TYPE.GEORGIAN;\r\n case 'gujarati':\r\n return LIST_STYLE_TYPE.GUJARATI;\r\n case 'gurmukhi':\r\n return LIST_STYLE_TYPE.GURMUKHI;\r\n case 'hebrew':\r\n return LIST_STYLE_TYPE.HEBREW;\r\n case 'hiragana':\r\n return LIST_STYLE_TYPE.HIRAGANA;\r\n case 'hiragana-iroha':\r\n return LIST_STYLE_TYPE.HIRAGANA_IROHA;\r\n case 'japanese-formal':\r\n return LIST_STYLE_TYPE.JAPANESE_FORMAL;\r\n case 'japanese-informal':\r\n return LIST_STYLE_TYPE.JAPANESE_INFORMAL;\r\n case 'kannada':\r\n return LIST_STYLE_TYPE.KANNADA;\r\n case 'katakana':\r\n return LIST_STYLE_TYPE.KATAKANA;\r\n case 'katakana-iroha':\r\n return LIST_STYLE_TYPE.KATAKANA_IROHA;\r\n case 'khmer':\r\n return LIST_STYLE_TYPE.KHMER;\r\n case 'korean-hangul-formal':\r\n return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;\r\n case 'korean-hanja-formal':\r\n return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;\r\n case 'korean-hanja-informal':\r\n return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;\r\n case 'lao':\r\n return LIST_STYLE_TYPE.LAO;\r\n case 'lower-armenian':\r\n return LIST_STYLE_TYPE.LOWER_ARMENIAN;\r\n case 'malayalam':\r\n return LIST_STYLE_TYPE.MALAYALAM;\r\n case 'mongolian':\r\n return LIST_STYLE_TYPE.MONGOLIAN;\r\n case 'myanmar':\r\n return LIST_STYLE_TYPE.MYANMAR;\r\n case 'oriya':\r\n return LIST_STYLE_TYPE.ORIYA;\r\n case 'persian':\r\n return LIST_STYLE_TYPE.PERSIAN;\r\n case 'simp-chinese-formal':\r\n return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;\r\n case 'simp-chinese-informal':\r\n return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;\r\n case 'tamil':\r\n return LIST_STYLE_TYPE.TAMIL;\r\n case 'telugu':\r\n return LIST_STYLE_TYPE.TELUGU;\r\n case 'thai':\r\n return LIST_STYLE_TYPE.THAI;\r\n case 'tibetan':\r\n return LIST_STYLE_TYPE.TIBETAN;\r\n case 'trad-chinese-formal':\r\n return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;\r\n case 'trad-chinese-informal':\r\n return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;\r\n case 'upper-armenian':\r\n return LIST_STYLE_TYPE.UPPER_ARMENIAN;\r\n case 'disclosure-open':\r\n return LIST_STYLE_TYPE.DISCLOSURE_OPEN;\r\n case 'disclosure-closed':\r\n return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;\r\n case 'none':\r\n default:\r\n return LIST_STYLE_TYPE.NONE;\r\n }\r\n }\r\n };\n\n var marginForSide = function (side) { return ({\r\n name: \"margin-\" + side,\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TOKEN_VALUE\r\n }); };\r\n var marginTop = marginForSide('top');\r\n var marginRight = marginForSide('right');\r\n var marginBottom = marginForSide('bottom');\r\n var marginLeft = marginForSide('left');\n\n var OVERFLOW;\r\n (function (OVERFLOW) {\r\n OVERFLOW[OVERFLOW[\"VISIBLE\"] = 0] = \"VISIBLE\";\r\n OVERFLOW[OVERFLOW[\"HIDDEN\"] = 1] = \"HIDDEN\";\r\n OVERFLOW[OVERFLOW[\"SCROLL\"] = 2] = \"SCROLL\";\r\n OVERFLOW[OVERFLOW[\"AUTO\"] = 3] = \"AUTO\";\r\n })(OVERFLOW || (OVERFLOW = {}));\r\n var overflow = {\r\n name: 'overflow',\r\n initialValue: 'visible',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).map(function (overflow) {\r\n switch (overflow.value) {\r\n case 'hidden':\r\n return OVERFLOW.HIDDEN;\r\n case 'scroll':\r\n return OVERFLOW.SCROLL;\r\n case 'auto':\r\n return OVERFLOW.AUTO;\r\n case 'visible':\r\n default:\r\n return OVERFLOW.VISIBLE;\r\n }\r\n });\r\n }\r\n };\n\n var OVERFLOW_WRAP;\r\n (function (OVERFLOW_WRAP) {\r\n OVERFLOW_WRAP[\"NORMAL\"] = \"normal\";\r\n OVERFLOW_WRAP[\"BREAK_WORD\"] = \"break-word\";\r\n })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {}));\r\n var overflowWrap = {\r\n name: 'overflow-wrap',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (overflow) {\r\n switch (overflow) {\r\n case 'break-word':\r\n return OVERFLOW_WRAP.BREAK_WORD;\r\n case 'normal':\r\n default:\r\n return OVERFLOW_WRAP.NORMAL;\r\n }\r\n }\r\n };\n\n var paddingForSide = function (side) { return ({\r\n name: \"padding-\" + side,\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'length-percentage'\r\n }); };\r\n var paddingTop = paddingForSide('top');\r\n var paddingRight = paddingForSide('right');\r\n var paddingBottom = paddingForSide('bottom');\r\n var paddingLeft = paddingForSide('left');\n\n var TEXT_ALIGN;\r\n (function (TEXT_ALIGN) {\r\n TEXT_ALIGN[TEXT_ALIGN[\"LEFT\"] = 0] = \"LEFT\";\r\n TEXT_ALIGN[TEXT_ALIGN[\"CENTER\"] = 1] = \"CENTER\";\r\n TEXT_ALIGN[TEXT_ALIGN[\"RIGHT\"] = 2] = \"RIGHT\";\r\n })(TEXT_ALIGN || (TEXT_ALIGN = {}));\r\n var textAlign = {\r\n name: 'text-align',\r\n initialValue: 'left',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (textAlign) {\r\n switch (textAlign) {\r\n case 'right':\r\n return TEXT_ALIGN.RIGHT;\r\n case 'center':\r\n case 'justify':\r\n return TEXT_ALIGN.CENTER;\r\n case 'left':\r\n default:\r\n return TEXT_ALIGN.LEFT;\r\n }\r\n }\r\n };\n\n var POSITION;\r\n (function (POSITION) {\r\n POSITION[POSITION[\"STATIC\"] = 0] = \"STATIC\";\r\n POSITION[POSITION[\"RELATIVE\"] = 1] = \"RELATIVE\";\r\n POSITION[POSITION[\"ABSOLUTE\"] = 2] = \"ABSOLUTE\";\r\n POSITION[POSITION[\"FIXED\"] = 3] = \"FIXED\";\r\n POSITION[POSITION[\"STICKY\"] = 4] = \"STICKY\";\r\n })(POSITION || (POSITION = {}));\r\n var position = {\r\n name: 'position',\r\n initialValue: 'static',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (position) {\r\n switch (position) {\r\n case 'relative':\r\n return POSITION.RELATIVE;\r\n case 'absolute':\r\n return POSITION.ABSOLUTE;\r\n case 'fixed':\r\n return POSITION.FIXED;\r\n case 'sticky':\r\n return POSITION.STICKY;\r\n }\r\n return POSITION.STATIC;\r\n }\r\n };\n\n var textShadow = {\r\n name: 'text-shadow',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n return [];\r\n }\r\n return parseFunctionArgs(tokens).map(function (values) {\r\n var shadow = {\r\n color: COLORS.TRANSPARENT,\r\n offsetX: ZERO_LENGTH,\r\n offsetY: ZERO_LENGTH,\r\n blur: ZERO_LENGTH\r\n };\r\n var c = 0;\r\n for (var i = 0; i < values.length; i++) {\r\n var token = values[i];\r\n if (isLength(token)) {\r\n if (c === 0) {\r\n shadow.offsetX = token;\r\n }\r\n else if (c === 1) {\r\n shadow.offsetY = token;\r\n }\r\n else {\r\n shadow.blur = token;\r\n }\r\n c++;\r\n }\r\n else {\r\n shadow.color = color.parse(token);\r\n }\r\n }\r\n return shadow;\r\n });\r\n }\r\n };\n\n var TEXT_TRANSFORM;\r\n (function (TEXT_TRANSFORM) {\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"NONE\"] = 0] = \"NONE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"LOWERCASE\"] = 1] = \"LOWERCASE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"UPPERCASE\"] = 2] = \"UPPERCASE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"CAPITALIZE\"] = 3] = \"CAPITALIZE\";\r\n })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {}));\r\n var textTransform = {\r\n name: 'text-transform',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (textTransform) {\r\n switch (textTransform) {\r\n case 'uppercase':\r\n return TEXT_TRANSFORM.UPPERCASE;\r\n case 'lowercase':\r\n return TEXT_TRANSFORM.LOWERCASE;\r\n case 'capitalize':\r\n return TEXT_TRANSFORM.CAPITALIZE;\r\n }\r\n return TEXT_TRANSFORM.NONE;\r\n }\r\n };\n\n var transform = {\r\n name: 'transform',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\r\n return null;\r\n }\r\n if (token.type === TokenType.FUNCTION) {\r\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\r\n if (typeof transformFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\r\n }\r\n return transformFunction(token.values);\r\n }\r\n return null;\r\n }\r\n };\r\n var matrix = function (args) {\r\n var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; });\r\n return values.length === 6 ? values : null;\r\n };\r\n // doesn't support 3D transforms at the moment\r\n var matrix3d = function (args) {\r\n var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; });\r\n var a1 = values[0], b1 = values[1], _a = values[2], _b = values[3], a2 = values[4], b2 = values[5], _c = values[6], _d = values[7], _e = values[8], _f = values[9], _g = values[10], _h = values[11], a4 = values[12], b4 = values[13], _j = values[14], _k = values[15];\r\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\r\n };\r\n var SUPPORTED_TRANSFORM_FUNCTIONS = {\r\n matrix: matrix,\r\n matrix3d: matrix3d\r\n };\n\n var DEFAULT_VALUE = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 50,\r\n flags: FLAG_INTEGER\r\n };\r\n var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\r\n var transformOrigin = {\r\n name: 'transform-origin',\r\n initialValue: '50% 50%',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n var origins = tokens.filter(isLengthPercentage);\r\n if (origins.length !== 2) {\r\n return DEFAULT;\r\n }\r\n return [origins[0], origins[1]];\r\n }\r\n };\n\n var VISIBILITY;\r\n (function (VISIBILITY) {\r\n VISIBILITY[VISIBILITY[\"VISIBLE\"] = 0] = \"VISIBLE\";\r\n VISIBILITY[VISIBILITY[\"HIDDEN\"] = 1] = \"HIDDEN\";\r\n VISIBILITY[VISIBILITY[\"COLLAPSE\"] = 2] = \"COLLAPSE\";\r\n })(VISIBILITY || (VISIBILITY = {}));\r\n var visibility = {\r\n name: 'visible',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (visibility) {\r\n switch (visibility) {\r\n case 'hidden':\r\n return VISIBILITY.HIDDEN;\r\n case 'collapse':\r\n return VISIBILITY.COLLAPSE;\r\n case 'visible':\r\n default:\r\n return VISIBILITY.VISIBLE;\r\n }\r\n }\r\n };\n\n var WORD_BREAK;\r\n (function (WORD_BREAK) {\r\n WORD_BREAK[\"NORMAL\"] = \"normal\";\r\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\r\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\r\n })(WORD_BREAK || (WORD_BREAK = {}));\r\n var wordBreak = {\r\n name: 'word-break',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (wordBreak) {\r\n switch (wordBreak) {\r\n case 'break-all':\r\n return WORD_BREAK.BREAK_ALL;\r\n case 'keep-all':\r\n return WORD_BREAK.KEEP_ALL;\r\n case 'normal':\r\n default:\r\n return WORD_BREAK.NORMAL;\r\n }\r\n }\r\n };\n\n var zIndex = {\r\n name: 'z-index',\r\n initialValue: 'auto',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN) {\r\n return { auto: true, order: 0 };\r\n }\r\n if (isNumberToken(token)) {\r\n return { auto: false, order: token.number };\r\n }\r\n throw new Error(\"Invalid z-index number parsed\");\r\n }\r\n };\n\n var opacity = {\r\n name: 'opacity',\r\n initialValue: '1',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isNumberToken(token)) {\r\n return token.number;\r\n }\r\n return 1;\r\n }\r\n };\n\n var textDecorationColor = {\r\n name: \"text-decoration-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var textDecorationLine = {\r\n name: 'text-decoration-line',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens\r\n .filter(isIdentToken)\r\n .map(function (token) {\r\n switch (token.value) {\r\n case 'underline':\r\n return 1 /* UNDERLINE */;\r\n case 'overline':\r\n return 2 /* OVERLINE */;\r\n case 'line-through':\r\n return 3 /* LINE_THROUGH */;\r\n case 'none':\r\n return 4 /* BLINK */;\r\n }\r\n return 0 /* NONE */;\r\n })\r\n .filter(function (line) { return line !== 0 /* NONE */; });\r\n }\r\n };\n\n var fontFamily = {\r\n name: \"font-family\",\r\n initialValue: '',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n var accumulator = [];\r\n var results = [];\r\n tokens.forEach(function (token) {\r\n switch (token.type) {\r\n case TokenType.IDENT_TOKEN:\r\n case TokenType.STRING_TOKEN:\r\n accumulator.push(token.value);\r\n break;\r\n case TokenType.NUMBER_TOKEN:\r\n accumulator.push(token.number.toString());\r\n break;\r\n case TokenType.COMMA_TOKEN:\r\n results.push(accumulator.join(' '));\r\n accumulator.length = 0;\r\n break;\r\n }\r\n });\r\n if (accumulator.length) {\r\n results.push(accumulator.join(' '));\r\n }\r\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\r\n }\r\n };\n\n var fontSize = {\r\n name: \"font-size\",\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'length'\r\n };\n\n var fontWeight = {\r\n name: 'font-weight',\r\n initialValue: 'normal',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isNumberToken(token)) {\r\n return token.number;\r\n }\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'bold':\r\n return 700;\r\n case 'normal':\r\n default:\r\n return 400;\r\n }\r\n }\r\n return 400;\r\n }\r\n };\n\n var fontVariant = {\r\n name: 'font-variant',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\r\n }\r\n };\n\n var FONT_STYLE;\r\n (function (FONT_STYLE) {\r\n FONT_STYLE[\"NORMAL\"] = \"normal\";\r\n FONT_STYLE[\"ITALIC\"] = \"italic\";\r\n FONT_STYLE[\"OBLIQUE\"] = \"oblique\";\r\n })(FONT_STYLE || (FONT_STYLE = {}));\r\n var fontStyle = {\r\n name: 'font-style',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (overflow) {\r\n switch (overflow) {\r\n case 'oblique':\r\n return FONT_STYLE.OBLIQUE;\r\n case 'italic':\r\n return FONT_STYLE.ITALIC;\r\n case 'normal':\r\n default:\r\n return FONT_STYLE.NORMAL;\r\n }\r\n }\r\n };\n\n var contains = function (bit, value) { return (bit & value) !== 0; };\n\n var content = {\r\n name: 'content',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return [];\r\n }\r\n return tokens;\r\n }\r\n };\n\n var counterIncrement = {\r\n name: 'counter-increment',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return null;\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return null;\r\n }\r\n var increments = [];\r\n var filtered = tokens.filter(nonWhiteSpace);\r\n for (var i = 0; i < filtered.length; i++) {\r\n var counter = filtered[i];\r\n var next = filtered[i + 1];\r\n if (counter.type === TokenType.IDENT_TOKEN) {\r\n var increment = next && isNumberToken(next) ? next.number : 1;\r\n increments.push({ counter: counter.value, increment: increment });\r\n }\r\n }\r\n return increments;\r\n }\r\n };\n\n var counterReset = {\r\n name: 'counter-reset',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var resets = [];\r\n var filtered = tokens.filter(nonWhiteSpace);\r\n for (var i = 0; i < filtered.length; i++) {\r\n var counter = filtered[i];\r\n var next = filtered[i + 1];\r\n if (isIdentToken(counter) && counter.value !== 'none') {\r\n var reset = next && isNumberToken(next) ? next.number : 0;\r\n resets.push({ counter: counter.value, reset: reset });\r\n }\r\n }\r\n return resets;\r\n }\r\n };\n\n var quotes = {\r\n name: 'quotes',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return null;\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return null;\r\n }\r\n var quotes = [];\r\n var filtered = tokens.filter(isStringToken);\r\n if (filtered.length % 2 !== 0) {\r\n return null;\r\n }\r\n for (var i = 0; i < filtered.length; i += 2) {\r\n var open_1 = filtered[i].value;\r\n var close_1 = filtered[i + 1].value;\r\n quotes.push({ open: open_1, close: close_1 });\r\n }\r\n return quotes;\r\n }\r\n };\r\n var getQuote = function (quotes, depth, open) {\r\n if (!quotes) {\r\n return '';\r\n }\r\n var quote = quotes[Math.min(depth, quotes.length - 1)];\r\n if (!quote) {\r\n return '';\r\n }\r\n return open ? quote.open : quote.close;\r\n };\n\n var boxShadow = {\r\n name: 'box-shadow',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n return [];\r\n }\r\n return parseFunctionArgs(tokens).map(function (values) {\r\n var shadow = {\r\n color: 0x000000ff,\r\n offsetX: ZERO_LENGTH,\r\n offsetY: ZERO_LENGTH,\r\n blur: ZERO_LENGTH,\r\n spread: ZERO_LENGTH,\r\n inset: false\r\n };\r\n var c = 0;\r\n for (var i = 0; i < values.length; i++) {\r\n var token = values[i];\r\n if (isIdentWithValue(token, 'inset')) {\r\n shadow.inset = true;\r\n }\r\n else if (isLength(token)) {\r\n if (c === 0) {\r\n shadow.offsetX = token;\r\n }\r\n else if (c === 1) {\r\n shadow.offsetY = token;\r\n }\r\n else if (c === 2) {\r\n shadow.blur = token;\r\n }\r\n else {\r\n shadow.spread = token;\r\n }\r\n c++;\r\n }\r\n else {\r\n shadow.color = color.parse(token);\r\n }\r\n }\r\n return shadow;\r\n });\r\n }\r\n };\n\n var CSSParsedDeclaration = /** @class */ (function () {\r\n function CSSParsedDeclaration(declaration) {\r\n this.backgroundClip = parse(backgroundClip, declaration.backgroundClip);\r\n this.backgroundColor = parse(backgroundColor, declaration.backgroundColor);\r\n this.backgroundImage = parse(backgroundImage, declaration.backgroundImage);\r\n this.backgroundOrigin = parse(backgroundOrigin, declaration.backgroundOrigin);\r\n this.backgroundPosition = parse(backgroundPosition, declaration.backgroundPosition);\r\n this.backgroundRepeat = parse(backgroundRepeat, declaration.backgroundRepeat);\r\n this.backgroundSize = parse(backgroundSize, declaration.backgroundSize);\r\n this.borderTopColor = parse(borderTopColor, declaration.borderTopColor);\r\n this.borderRightColor = parse(borderRightColor, declaration.borderRightColor);\r\n this.borderBottomColor = parse(borderBottomColor, declaration.borderBottomColor);\r\n this.borderLeftColor = parse(borderLeftColor, declaration.borderLeftColor);\r\n this.borderTopLeftRadius = parse(borderTopLeftRadius, declaration.borderTopLeftRadius);\r\n this.borderTopRightRadius = parse(borderTopRightRadius, declaration.borderTopRightRadius);\r\n this.borderBottomRightRadius = parse(borderBottomRightRadius, declaration.borderBottomRightRadius);\r\n this.borderBottomLeftRadius = parse(borderBottomLeftRadius, declaration.borderBottomLeftRadius);\r\n this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle);\r\n this.borderRightStyle = parse(borderRightStyle, declaration.borderRightStyle);\r\n this.borderBottomStyle = parse(borderBottomStyle, declaration.borderBottomStyle);\r\n this.borderLeftStyle = parse(borderLeftStyle, declaration.borderLeftStyle);\r\n this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth);\r\n this.borderRightWidth = parse(borderRightWidth, declaration.borderRightWidth);\r\n this.borderBottomWidth = parse(borderBottomWidth, declaration.borderBottomWidth);\r\n this.borderLeftWidth = parse(borderLeftWidth, declaration.borderLeftWidth);\r\n this.boxShadow = parse(boxShadow, declaration.boxShadow);\r\n this.color = parse(color$1, declaration.color);\r\n this.display = parse(display, declaration.display);\r\n this.float = parse(float, declaration.cssFloat);\r\n this.fontFamily = parse(fontFamily, declaration.fontFamily);\r\n this.fontSize = parse(fontSize, declaration.fontSize);\r\n this.fontStyle = parse(fontStyle, declaration.fontStyle);\r\n this.fontVariant = parse(fontVariant, declaration.fontVariant);\r\n this.fontWeight = parse(fontWeight, declaration.fontWeight);\r\n this.letterSpacing = parse(letterSpacing, declaration.letterSpacing);\r\n this.lineBreak = parse(lineBreak, declaration.lineBreak);\r\n this.lineHeight = parse(lineHeight, declaration.lineHeight);\r\n this.listStyleImage = parse(listStyleImage, declaration.listStyleImage);\r\n this.listStylePosition = parse(listStylePosition, declaration.listStylePosition);\r\n this.listStyleType = parse(listStyleType, declaration.listStyleType);\r\n this.marginTop = parse(marginTop, declaration.marginTop);\r\n this.marginRight = parse(marginRight, declaration.marginRight);\r\n this.marginBottom = parse(marginBottom, declaration.marginBottom);\r\n this.marginLeft = parse(marginLeft, declaration.marginLeft);\r\n this.opacity = parse(opacity, declaration.opacity);\r\n var overflowTuple = parse(overflow, declaration.overflow);\r\n this.overflowX = overflowTuple[0];\r\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\r\n this.overflowWrap = parse(overflowWrap, declaration.overflowWrap);\r\n this.paddingTop = parse(paddingTop, declaration.paddingTop);\r\n this.paddingRight = parse(paddingRight, declaration.paddingRight);\r\n this.paddingBottom = parse(paddingBottom, declaration.paddingBottom);\r\n this.paddingLeft = parse(paddingLeft, declaration.paddingLeft);\r\n this.position = parse(position, declaration.position);\r\n this.textAlign = parse(textAlign, declaration.textAlign);\r\n this.textDecorationColor = parse(textDecorationColor, declaration.textDecorationColor || declaration.color);\r\n this.textDecorationLine = parse(textDecorationLine, declaration.textDecorationLine);\r\n this.textShadow = parse(textShadow, declaration.textShadow);\r\n this.textTransform = parse(textTransform, declaration.textTransform);\r\n this.transform = parse(transform, declaration.transform);\r\n this.transformOrigin = parse(transformOrigin, declaration.transformOrigin);\r\n this.visibility = parse(visibility, declaration.visibility);\r\n this.wordBreak = parse(wordBreak, declaration.wordBreak);\r\n this.zIndex = parse(zIndex, declaration.zIndex);\r\n }\r\n CSSParsedDeclaration.prototype.isVisible = function () {\r\n return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE;\r\n };\r\n CSSParsedDeclaration.prototype.isTransparent = function () {\r\n return isTransparent(this.backgroundColor);\r\n };\r\n CSSParsedDeclaration.prototype.isTransformed = function () {\r\n return this.transform !== null;\r\n };\r\n CSSParsedDeclaration.prototype.isPositioned = function () {\r\n return this.position !== POSITION.STATIC;\r\n };\r\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\r\n return this.isPositioned() && !this.zIndex.auto;\r\n };\r\n CSSParsedDeclaration.prototype.isFloating = function () {\r\n return this.float !== FLOAT.NONE;\r\n };\r\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\r\n return (contains(this.display, 4 /* INLINE */) ||\r\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\r\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\r\n contains(this.display, 536870912 /* INLINE_GRID */) ||\r\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\r\n contains(this.display, 134217728 /* INLINE_TABLE */));\r\n };\r\n return CSSParsedDeclaration;\r\n }());\r\n var CSSParsedPseudoDeclaration = /** @class */ (function () {\r\n function CSSParsedPseudoDeclaration(declaration) {\r\n this.content = parse(content, declaration.content);\r\n this.quotes = parse(quotes, declaration.quotes);\r\n }\r\n return CSSParsedPseudoDeclaration;\r\n }());\r\n var CSSParsedCounterDeclaration = /** @class */ (function () {\r\n function CSSParsedCounterDeclaration(declaration) {\r\n this.counterIncrement = parse(counterIncrement, declaration.counterIncrement);\r\n this.counterReset = parse(counterReset, declaration.counterReset);\r\n }\r\n return CSSParsedCounterDeclaration;\r\n }());\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n var parse = function (descriptor, style) {\r\n var tokenizer = new Tokenizer();\r\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\r\n tokenizer.write(value);\r\n var parser = new Parser(tokenizer.read());\r\n switch (descriptor.type) {\r\n case PropertyDescriptorParsingType.IDENT_VALUE:\r\n var token = parser.parseComponentValue();\r\n return descriptor.parse(isIdentToken(token) ? token.value : descriptor.initialValue);\r\n case PropertyDescriptorParsingType.VALUE:\r\n return descriptor.parse(parser.parseComponentValue());\r\n case PropertyDescriptorParsingType.LIST:\r\n return descriptor.parse(parser.parseComponentValues());\r\n case PropertyDescriptorParsingType.TOKEN_VALUE:\r\n return parser.parseComponentValue();\r\n case PropertyDescriptorParsingType.TYPE_VALUE:\r\n switch (descriptor.format) {\r\n case 'angle':\r\n return angle.parse(parser.parseComponentValue());\r\n case 'color':\r\n return color.parse(parser.parseComponentValue());\r\n case 'image':\r\n return image.parse(parser.parseComponentValue());\r\n case 'length':\r\n var length_1 = parser.parseComponentValue();\r\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\r\n case 'length-percentage':\r\n var value_1 = parser.parseComponentValue();\r\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\r\n }\r\n }\r\n throw new Error(\"Attempting to parse unsupported css format type \" + descriptor.format);\r\n };\n\n var ElementContainer = /** @class */ (function () {\r\n function ElementContainer(element) {\r\n this.styles = new CSSParsedDeclaration(window.getComputedStyle(element, null));\r\n this.textNodes = [];\r\n this.elements = [];\r\n if (this.styles.transform !== null && isHTMLElementNode(element)) {\r\n // getBoundingClientRect takes transforms into account\r\n element.style.transform = 'none';\r\n }\r\n this.bounds = parseBounds(element);\r\n this.flags = 0;\r\n }\r\n return ElementContainer;\r\n }());\n\n var TextBounds = /** @class */ (function () {\r\n function TextBounds(text, bounds) {\r\n this.text = text;\r\n this.bounds = bounds;\r\n }\r\n return TextBounds;\r\n }());\r\n var parseTextBounds = function (value, styles, node) {\r\n var textList = breakText(value, styles);\r\n var textBounds = [];\r\n var offset = 0;\r\n textList.forEach(function (text) {\r\n if (styles.textDecorationLine.length || text.trim().length > 0) {\r\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length)));\r\n }\r\n else {\r\n var replacementNode = node.splitText(text.length);\r\n textBounds.push(new TextBounds(text, getWrapperBounds(node)));\r\n node = replacementNode;\r\n }\r\n }\r\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n node = node.splitText(text.length);\r\n }\r\n offset += text.length;\r\n });\r\n return textBounds;\r\n };\r\n var getWrapperBounds = function (node) {\r\n var ownerDocument = node.ownerDocument;\r\n if (ownerDocument) {\r\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\r\n wrapper.appendChild(node.cloneNode(true));\r\n var parentNode = node.parentNode;\r\n if (parentNode) {\r\n parentNode.replaceChild(wrapper, node);\r\n var bounds = parseBounds(wrapper);\r\n if (wrapper.firstChild) {\r\n parentNode.replaceChild(wrapper.firstChild, wrapper);\r\n }\r\n return bounds;\r\n }\r\n }\r\n return new Bounds(0, 0, 0, 0);\r\n };\r\n var getRangeBounds = function (node, offset, length) {\r\n var ownerDocument = node.ownerDocument;\r\n if (!ownerDocument) {\r\n throw new Error('Node has no owner document');\r\n }\r\n var range = ownerDocument.createRange();\r\n range.setStart(node, offset);\r\n range.setEnd(node, offset + length);\r\n return Bounds.fromClientRect(range.getBoundingClientRect());\r\n };\r\n var breakText = function (value, styles) {\r\n return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles);\r\n };\r\n var breakWords = function (str, styles) {\r\n var breaker = LineBreaker(str, {\r\n lineBreak: styles.lineBreak,\r\n wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak\r\n });\r\n var words = [];\r\n var bk;\r\n while (!(bk = breaker.next()).done) {\r\n if (bk.value) {\r\n words.push(bk.value.slice());\r\n }\r\n }\r\n return words;\r\n };\n\n var TextContainer = /** @class */ (function () {\r\n function TextContainer(node, styles) {\r\n this.text = transform$1(node.data, styles.textTransform);\r\n this.textBounds = parseTextBounds(this.text, styles, node);\r\n }\r\n return TextContainer;\r\n }());\r\n var transform$1 = function (text, transform) {\r\n switch (transform) {\r\n case TEXT_TRANSFORM.LOWERCASE:\r\n return text.toLowerCase();\r\n case TEXT_TRANSFORM.CAPITALIZE:\r\n return text.replace(CAPITALIZE, capitalize);\r\n case TEXT_TRANSFORM.UPPERCASE:\r\n return text.toUpperCase();\r\n default:\r\n return text;\r\n }\r\n };\r\n var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\r\n var capitalize = function (m, p1, p2) {\r\n if (m.length > 0) {\r\n return p1 + p2.toUpperCase();\r\n }\r\n return m;\r\n };\n\n var ImageElementContainer = /** @class */ (function (_super) {\r\n __extends(ImageElementContainer, _super);\r\n function ImageElementContainer(img) {\r\n var _this = _super.call(this, img) || this;\r\n _this.src = img.currentSrc || img.src;\r\n _this.intrinsicWidth = img.naturalWidth;\r\n _this.intrinsicHeight = img.naturalHeight;\r\n CacheStorage.getInstance().addImage(_this.src);\r\n return _this;\r\n }\r\n return ImageElementContainer;\r\n }(ElementContainer));\n\n var CanvasElementContainer = /** @class */ (function (_super) {\r\n __extends(CanvasElementContainer, _super);\r\n function CanvasElementContainer(canvas) {\r\n var _this = _super.call(this, canvas) || this;\r\n _this.canvas = canvas;\r\n _this.intrinsicWidth = canvas.width;\r\n _this.intrinsicHeight = canvas.height;\r\n return _this;\r\n }\r\n return CanvasElementContainer;\r\n }(ElementContainer));\n\n var SVGElementContainer = /** @class */ (function (_super) {\r\n __extends(SVGElementContainer, _super);\r\n function SVGElementContainer(img) {\r\n var _this = _super.call(this, img) || this;\r\n var s = new XMLSerializer();\r\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\r\n _this.intrinsicWidth = img.width.baseVal.value;\r\n _this.intrinsicHeight = img.height.baseVal.value;\r\n CacheStorage.getInstance().addImage(_this.svg);\r\n return _this;\r\n }\r\n return SVGElementContainer;\r\n }(ElementContainer));\n\n var LIElementContainer = /** @class */ (function (_super) {\r\n __extends(LIElementContainer, _super);\r\n function LIElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.value = element.value;\r\n return _this;\r\n }\r\n return LIElementContainer;\r\n }(ElementContainer));\n\n var OLElementContainer = /** @class */ (function (_super) {\r\n __extends(OLElementContainer, _super);\r\n function OLElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.start = element.start;\r\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\r\n return _this;\r\n }\r\n return OLElementContainer;\r\n }(ElementContainer));\n\n var CHECKBOX_BORDER_RADIUS = [\r\n {\r\n type: TokenType.DIMENSION_TOKEN,\r\n flags: 0,\r\n unit: 'px',\r\n number: 3\r\n }\r\n ];\r\n var RADIO_BORDER_RADIUS = [\r\n {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n flags: 0,\r\n number: 50\r\n }\r\n ];\r\n var reformatInputBounds = function (bounds) {\r\n if (bounds.width > bounds.height) {\r\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\r\n }\r\n else if (bounds.width < bounds.height) {\r\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\r\n }\r\n return bounds;\r\n };\r\n var getInputValue = function (node) {\r\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\r\n return value.length === 0 ? node.placeholder || '' : value;\r\n };\r\n var CHECKBOX = 'checkbox';\r\n var RADIO = 'radio';\r\n var PASSWORD = 'password';\r\n var INPUT_COLOR = 0x2a2a2aff;\r\n var InputElementContainer = /** @class */ (function (_super) {\r\n __extends(InputElementContainer, _super);\r\n function InputElementContainer(input) {\r\n var _this = _super.call(this, input) || this;\r\n _this.type = input.type.toLowerCase();\r\n _this.checked = input.checked;\r\n _this.value = getInputValue(input);\r\n if (_this.type === CHECKBOX || _this.type === RADIO) {\r\n _this.styles.backgroundColor = 0xdededeff;\r\n _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 0xa5a5a5ff;\r\n _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1;\r\n _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle =\r\n BORDER_STYLE.SOLID;\r\n _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];\r\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\r\n _this.bounds = reformatInputBounds(_this.bounds);\r\n }\r\n switch (_this.type) {\r\n case CHECKBOX:\r\n _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS;\r\n break;\r\n case RADIO:\r\n _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS;\r\n break;\r\n }\r\n return _this;\r\n }\r\n return InputElementContainer;\r\n }(ElementContainer));\n\n var SelectElementContainer = /** @class */ (function (_super) {\r\n __extends(SelectElementContainer, _super);\r\n function SelectElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n var option = element.options[element.selectedIndex || 0];\r\n _this.value = option ? option.text || '' : '';\r\n return _this;\r\n }\r\n return SelectElementContainer;\r\n }(ElementContainer));\n\n var TextareaElementContainer = /** @class */ (function (_super) {\r\n __extends(TextareaElementContainer, _super);\r\n function TextareaElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.value = element.value;\r\n return _this;\r\n }\r\n return TextareaElementContainer;\r\n }(ElementContainer));\n\n var parseColor = function (value) { return color.parse(Parser.create(value).parseComponentValue()); };\r\n var IFrameElementContainer = /** @class */ (function (_super) {\r\n __extends(IFrameElementContainer, _super);\r\n function IFrameElementContainer(iframe) {\r\n var _this = _super.call(this, iframe) || this;\r\n _this.src = iframe.src;\r\n _this.width = parseInt(iframe.width, 10) || 0;\r\n _this.height = parseInt(iframe.height, 10) || 0;\r\n _this.backgroundColor = _this.styles.backgroundColor;\r\n try {\r\n if (iframe.contentWindow &&\r\n iframe.contentWindow.document &&\r\n iframe.contentWindow.document.documentElement) {\r\n _this.tree = parseTree(iframe.contentWindow.document.documentElement);\r\n // http://www.w3.org/TR/css3-background/#special-backgrounds\r\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\r\n ? parseColor(getComputedStyle(iframe.contentWindow.document.documentElement)\r\n .backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n var bodyBackgroundColor = iframe.contentWindow.document.body\r\n ? parseColor(getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n _this.backgroundColor = isTransparent(documentBackgroundColor)\r\n ? isTransparent(bodyBackgroundColor)\r\n ? _this.styles.backgroundColor\r\n : bodyBackgroundColor\r\n : documentBackgroundColor;\r\n }\r\n }\r\n catch (e) { }\r\n return _this;\r\n }\r\n return IFrameElementContainer;\r\n }(ElementContainer));\n\n var LIST_OWNERS = ['OL', 'UL', 'MENU'];\r\n var parseNodeTree = function (node, parent, root) {\r\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\r\n nextNode = childNode.nextSibling;\r\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\r\n parent.textNodes.push(new TextContainer(childNode, parent.styles));\r\n }\r\n else if (isElementNode(childNode)) {\r\n var container = createContainer(childNode);\r\n if (container.styles.isVisible()) {\r\n if (createsRealStackingContext(childNode, container, root)) {\r\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n }\r\n else if (createsStackingContext(container.styles)) {\r\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\r\n }\r\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\r\n container.flags |= 8 /* IS_LIST_OWNER */;\r\n }\r\n parent.elements.push(container);\r\n if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) {\r\n parseNodeTree(childNode, container, root);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n var createContainer = function (element) {\r\n if (isImageElement(element)) {\r\n return new ImageElementContainer(element);\r\n }\r\n if (isCanvasElement(element)) {\r\n return new CanvasElementContainer(element);\r\n }\r\n if (isSVGElement(element)) {\r\n return new SVGElementContainer(element);\r\n }\r\n if (isLIElement(element)) {\r\n return new LIElementContainer(element);\r\n }\r\n if (isOLElement(element)) {\r\n return new OLElementContainer(element);\r\n }\r\n if (isInputElement(element)) {\r\n return new InputElementContainer(element);\r\n }\r\n if (isSelectElement(element)) {\r\n return new SelectElementContainer(element);\r\n }\r\n if (isTextareaElement(element)) {\r\n return new TextareaElementContainer(element);\r\n }\r\n if (isIFrameElement(element)) {\r\n return new IFrameElementContainer(element);\r\n }\r\n return new ElementContainer(element);\r\n };\r\n var parseTree = function (element) {\r\n var container = createContainer(element);\r\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n parseNodeTree(element, container, container);\r\n return container;\r\n };\r\n var createsRealStackingContext = function (node, container, root) {\r\n return (container.styles.isPositionedWithZIndex() ||\r\n container.styles.opacity < 1 ||\r\n container.styles.isTransformed() ||\r\n (isBodyElement(node) && root.styles.isTransparent()));\r\n };\r\n var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\r\n var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\r\n var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\r\n var isHTMLElementNode = function (node) {\r\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\r\n };\r\n var isSVGElementNode = function (element) {\r\n return typeof element.className === 'object';\r\n };\r\n var isLIElement = function (node) { return node.tagName === 'LI'; };\r\n var isOLElement = function (node) { return node.tagName === 'OL'; };\r\n var isInputElement = function (node) { return node.tagName === 'INPUT'; };\r\n var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\r\n var isSVGElement = function (node) { return node.tagName === 'svg'; };\r\n var isBodyElement = function (node) { return node.tagName === 'BODY'; };\r\n var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\r\n var isImageElement = function (node) { return node.tagName === 'IMG'; };\r\n var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\r\n var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\r\n var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\r\n var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\r\n var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\n\n var CounterState = /** @class */ (function () {\r\n function CounterState() {\r\n this.counters = {};\r\n }\r\n CounterState.prototype.getCounterValue = function (name) {\r\n var counter = this.counters[name];\r\n if (counter && counter.length) {\r\n return counter[counter.length - 1];\r\n }\r\n return 1;\r\n };\r\n CounterState.prototype.getCounterValues = function (name) {\r\n var counter = this.counters[name];\r\n return counter ? counter : [];\r\n };\r\n CounterState.prototype.pop = function (counters) {\r\n var _this = this;\r\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\r\n };\r\n CounterState.prototype.parse = function (style) {\r\n var _this = this;\r\n var counterIncrement = style.counterIncrement;\r\n var counterReset = style.counterReset;\r\n var canReset = true;\r\n if (counterIncrement !== null) {\r\n counterIncrement.forEach(function (entry) {\r\n var counter = _this.counters[entry.counter];\r\n if (counter && entry.increment !== 0) {\r\n canReset = false;\r\n counter[Math.max(0, counter.length - 1)] += entry.increment;\r\n }\r\n });\r\n }\r\n var counterNames = [];\r\n if (canReset) {\r\n counterReset.forEach(function (entry) {\r\n var counter = _this.counters[entry.counter];\r\n counterNames.push(entry.counter);\r\n if (!counter) {\r\n counter = _this.counters[entry.counter] = [];\r\n }\r\n counter.push(entry.reset);\r\n });\r\n }\r\n return counterNames;\r\n };\r\n return CounterState;\r\n }());\r\n var ROMAN_UPPER = {\r\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\r\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\r\n };\r\n var ARMENIAN = {\r\n integers: [\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 900,\r\n 800,\r\n 700,\r\n 600,\r\n 500,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'Ք',\r\n 'Փ',\r\n 'Ւ',\r\n 'Ց',\r\n 'Ր',\r\n 'Տ',\r\n 'Վ',\r\n 'Ս',\r\n 'Ռ',\r\n 'Ջ',\r\n 'Պ',\r\n 'Չ',\r\n 'Ո',\r\n 'Շ',\r\n 'Ն',\r\n 'Յ',\r\n 'Մ',\r\n 'Ճ',\r\n 'Ղ',\r\n 'Ձ',\r\n 'Հ',\r\n 'Կ',\r\n 'Ծ',\r\n 'Խ',\r\n 'Լ',\r\n 'Ի',\r\n 'Ժ',\r\n 'Թ',\r\n 'Ը',\r\n 'Է',\r\n 'Զ',\r\n 'Ե',\r\n 'Դ',\r\n 'Գ',\r\n 'Բ',\r\n 'Ա'\r\n ]\r\n };\r\n var HEBREW = {\r\n integers: [\r\n 10000,\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 19,\r\n 18,\r\n 17,\r\n 16,\r\n 15,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'י׳',\r\n 'ט׳',\r\n 'ח׳',\r\n 'ז׳',\r\n 'ו׳',\r\n 'ה׳',\r\n 'ד׳',\r\n 'ג׳',\r\n 'ב׳',\r\n 'א׳',\r\n 'ת',\r\n 'ש',\r\n 'ר',\r\n 'ק',\r\n 'צ',\r\n 'פ',\r\n 'ע',\r\n 'ס',\r\n 'נ',\r\n 'מ',\r\n 'ל',\r\n 'כ',\r\n 'יט',\r\n 'יח',\r\n 'יז',\r\n 'טז',\r\n 'טו',\r\n 'י',\r\n 'ט',\r\n 'ח',\r\n 'ז',\r\n 'ו',\r\n 'ה',\r\n 'ד',\r\n 'ג',\r\n 'ב',\r\n 'א'\r\n ]\r\n };\r\n var GEORGIAN = {\r\n integers: [\r\n 10000,\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 900,\r\n 800,\r\n 700,\r\n 600,\r\n 500,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'ჵ',\r\n 'ჰ',\r\n 'ჯ',\r\n 'ჴ',\r\n 'ხ',\r\n 'ჭ',\r\n 'წ',\r\n 'ძ',\r\n 'ც',\r\n 'ჩ',\r\n 'შ',\r\n 'ყ',\r\n 'ღ',\r\n 'ქ',\r\n 'ფ',\r\n 'ჳ',\r\n 'ტ',\r\n 'ს',\r\n 'რ',\r\n 'ჟ',\r\n 'პ',\r\n 'ო',\r\n 'ჲ',\r\n 'ნ',\r\n 'მ',\r\n 'ლ',\r\n 'კ',\r\n 'ი',\r\n 'თ',\r\n 'ჱ',\r\n 'ზ',\r\n 'ვ',\r\n 'ე',\r\n 'დ',\r\n 'გ',\r\n 'ბ',\r\n 'ა'\r\n ]\r\n };\r\n var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\r\n if (value < min || value > max) {\r\n return createCounterText(value, fallback, suffix.length > 0);\r\n }\r\n return (symbols.integers.reduce(function (string, integer, index) {\r\n while (value >= integer) {\r\n value -= integer;\r\n string += symbols.values[index];\r\n }\r\n return string;\r\n }, '') + suffix);\r\n };\r\n var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\r\n var string = '';\r\n do {\r\n if (!isNumeric) {\r\n value--;\r\n }\r\n string = resolver(value) + string;\r\n value /= codePointRangeLength;\r\n } while (value * codePointRangeLength >= codePointRangeLength);\r\n return string;\r\n };\r\n var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\r\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\r\n return ((value < 0 ? '-' : '') +\r\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\r\n return fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\r\n }) +\r\n suffix));\r\n };\r\n var createCounterStyleFromSymbols = function (value, symbols, suffix) {\r\n if (suffix === void 0) { suffix = '. '; }\r\n var codePointRangeLength = symbols.length;\r\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\r\n };\r\n var CJK_ZEROS = 1 << 0;\r\n var CJK_TEN_COEFFICIENTS = 1 << 1;\r\n var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\r\n var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\r\n var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\r\n if (value < -9999 || value > 9999) {\r\n return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);\r\n }\r\n var tmp = Math.abs(value);\r\n var string = suffix;\r\n if (tmp === 0) {\r\n return numbers[0] + string;\r\n }\r\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\r\n var coefficient = tmp % 10;\r\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\r\n string = numbers[coefficient] + string;\r\n }\r\n else if (coefficient > 1 ||\r\n (coefficient === 1 && digit === 0) ||\r\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\r\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\r\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\r\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\r\n }\r\n else if (coefficient === 1 && digit > 0) {\r\n string = multipliers[digit - 1] + string;\r\n }\r\n tmp = Math.floor(tmp / 10);\r\n }\r\n return (value < 0 ? negativeSign : '') + string;\r\n };\r\n var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\r\n var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\r\n var JAPANESE_NEGATIVE = 'マイナス';\r\n var KOREAN_NEGATIVE = '마이너스';\r\n var createCounterText = function (value, type, appendSuffix) {\r\n var defaultSuffix = appendSuffix ? '. ' : '';\r\n var cjkSuffix = appendSuffix ? '、' : '';\r\n var koreanSuffix = appendSuffix ? ', ' : '';\r\n var spaceSuffix = appendSuffix ? ' ' : '';\r\n switch (type) {\r\n case LIST_STYLE_TYPE.DISC:\r\n return '•' + spaceSuffix;\r\n case LIST_STYLE_TYPE.CIRCLE:\r\n return '◦' + spaceSuffix;\r\n case LIST_STYLE_TYPE.SQUARE:\r\n return '◾' + spaceSuffix;\r\n case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:\r\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n return string.length < 4 ? \"0\" + string : string;\r\n case LIST_STYLE_TYPE.CJK_DECIMAL:\r\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ROMAN:\r\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\r\n case LIST_STYLE_TYPE.UPPER_ROMAN:\r\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_GREEK:\r\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ALPHA:\r\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.UPPER_ALPHA:\r\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.ARABIC_INDIC:\r\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.ARMENIAN:\r\n case LIST_STYLE_TYPE.UPPER_ARMENIAN:\r\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ARMENIAN:\r\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\r\n case LIST_STYLE_TYPE.BENGALI:\r\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.CAMBODIAN:\r\n case LIST_STYLE_TYPE.KHMER:\r\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:\r\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\r\n case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:\r\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\r\n case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:\r\n case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:\r\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:\r\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.JAPANESE_INFORMAL:\r\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\r\n case LIST_STYLE_TYPE.JAPANESE_FORMAL:\r\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:\r\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\r\n case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:\r\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.DEVANAGARI:\r\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.GEORGIAN:\r\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.GUJARATI:\r\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.GURMUKHI:\r\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.HEBREW:\r\n return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.HIRAGANA:\r\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\r\n case LIST_STYLE_TYPE.HIRAGANA_IROHA:\r\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\r\n case LIST_STYLE_TYPE.KANNADA:\r\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.KATAKANA:\r\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\r\n case LIST_STYLE_TYPE.KATAKANA_IROHA:\r\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\r\n case LIST_STYLE_TYPE.LAO:\r\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.MONGOLIAN:\r\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.MYANMAR:\r\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.ORIYA:\r\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.PERSIAN:\r\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TAMIL:\r\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TELUGU:\r\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.THAI:\r\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TIBETAN:\r\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.DECIMAL:\r\n default:\r\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n }\r\n };\n\n var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\r\n var DocumentCloner = /** @class */ (function () {\r\n function DocumentCloner(element, options) {\r\n this.options = options;\r\n this.scrolledElements = [];\r\n this.referenceElement = element;\r\n this.counters = new CounterState();\r\n this.quoteDepth = 0;\r\n if (!element.ownerDocument) {\r\n throw new Error('Cloned element does not have an owner document');\r\n }\r\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement);\r\n }\r\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\r\n var _this = this;\r\n var iframe = createIFrameContainer(ownerDocument, windowSize);\r\n if (!iframe.contentWindow) {\r\n return Promise.reject(\"Unable to find iframe window\");\r\n }\r\n var scrollX = ownerDocument.defaultView.pageXOffset;\r\n var scrollY = ownerDocument.defaultView.pageYOffset;\r\n var cloneWindow = iframe.contentWindow;\r\n var documentClone = cloneWindow.document;\r\n /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\r\n if window url is about:blank, we can assign the url to current by writing onto the document\r\n */\r\n var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var onclone;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.scrolledElements.forEach(restoreNodeScroll);\r\n if (cloneWindow) {\r\n cloneWindow.scrollTo(windowSize.left, windowSize.top);\r\n if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\r\n (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\r\n documentClone.documentElement.style.top = -windowSize.top + 'px';\r\n documentClone.documentElement.style.left = -windowSize.left + 'px';\r\n documentClone.documentElement.style.position = 'absolute';\r\n }\r\n }\r\n onclone = this.options.onclone;\r\n if (typeof this.clonedReferenceElement === 'undefined') {\r\n return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\r\n }\r\n if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, documentClone.fonts.ready];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n if (typeof onclone === 'function') {\r\n return [2 /*return*/, Promise.resolve()\r\n .then(function () { return onclone(documentClone); })\r\n .then(function () { return iframe; })];\r\n }\r\n return [2 /*return*/, iframe];\r\n }\r\n });\r\n }); });\r\n documentClone.open();\r\n documentClone.write(serializeDoctype(document.doctype) + \"<html></html>\");\r\n // Chrome scrolls the parent document for some reason after the write to the cloned window???\r\n restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\r\n documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\r\n documentClone.close();\r\n return iframeLoad;\r\n };\r\n DocumentCloner.prototype.createElementClone = function (node) {\r\n if (isCanvasElement(node)) {\r\n return this.createCanvasClone(node);\r\n }\r\n /*\r\n if (isIFrameElement(node)) {\r\n return this.createIFrameClone(node);\r\n }\r\n */\r\n if (isStyleElement(node)) {\r\n return this.createStyleClone(node);\r\n }\r\n var clone = node.cloneNode(false);\r\n // @ts-ignore\r\n if (isImageElement(clone) && clone.loading === 'lazy') {\r\n // @ts-ignore\r\n clone.loading = 'eager';\r\n }\r\n return clone;\r\n };\r\n DocumentCloner.prototype.createStyleClone = function (node) {\r\n try {\r\n var sheet = node.sheet;\r\n if (sheet && sheet.cssRules) {\r\n var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\r\n if (rule && typeof rule.cssText === 'string') {\r\n return css + rule.cssText;\r\n }\r\n return css;\r\n }, '');\r\n var style = node.cloneNode(false);\r\n style.textContent = css;\r\n return style;\r\n }\r\n }\r\n catch (e) {\r\n // accessing node.sheet.cssRules throws a DOMException\r\n Logger.getInstance(this.options.id).error('Unable to access cssRules property', e);\r\n if (e.name !== 'SecurityError') {\r\n throw e;\r\n }\r\n }\r\n return node.cloneNode(false);\r\n };\r\n DocumentCloner.prototype.createCanvasClone = function (canvas) {\r\n if (this.options.inlineImages && canvas.ownerDocument) {\r\n var img = canvas.ownerDocument.createElement('img');\r\n try {\r\n img.src = canvas.toDataURL();\r\n return img;\r\n }\r\n catch (e) {\r\n Logger.getInstance(this.options.id).info(\"Unable to clone canvas contents, canvas is tainted\");\r\n }\r\n }\r\n var clonedCanvas = canvas.cloneNode(false);\r\n try {\r\n clonedCanvas.width = canvas.width;\r\n clonedCanvas.height = canvas.height;\r\n var ctx = canvas.getContext('2d');\r\n var clonedCtx = clonedCanvas.getContext('2d');\r\n if (clonedCtx) {\r\n if (ctx) {\r\n clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\r\n }\r\n else {\r\n clonedCtx.drawImage(canvas, 0, 0);\r\n }\r\n }\r\n return clonedCanvas;\r\n }\r\n catch (e) { }\r\n return clonedCanvas;\r\n };\r\n /*\r\n createIFrameClone(iframe: HTMLIFrameElement) {\r\n const tempIframe = <HTMLIFrameElement>iframe.cloneNode(false);\r\n const iframeKey = generateIframeKey();\r\n tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey);\r\n\n const {width, height} = parseBounds(iframe);\r\n\n this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(iframe, this.options)\r\n .then(documentElement => {\r\n return this.renderer(\r\n documentElement,\r\n {\r\n allowTaint: this.options.allowTaint,\r\n backgroundColor: '#ffffff',\r\n canvas: null,\r\n imageTimeout: this.options.imageTimeout,\r\n logging: this.options.logging,\r\n proxy: this.options.proxy,\r\n removeContainer: this.options.removeContainer,\r\n scale: this.options.scale,\r\n foreignObjectRendering: this.options.foreignObjectRendering,\r\n useCORS: this.options.useCORS,\r\n target: new CanvasRenderer(),\r\n width,\r\n height,\r\n x: 0,\r\n y: 0,\r\n windowWidth: documentElement.ownerDocument.defaultView.innerWidth,\r\n windowHeight: documentElement.ownerDocument.defaultView.innerHeight,\r\n scrollX: documentElement.ownerDocument.defaultView.pageXOffset,\r\n scrollY: documentElement.ownerDocument.defaultView.pageYOffset\r\n },\r\n );\r\n })\r\n .then(\r\n (canvas: HTMLCanvasElement) =>\r\n new Promise((resolve, reject) => {\r\n const iframeCanvas = document.createElement('img');\r\n iframeCanvas.onload = () => resolve(canvas);\r\n iframeCanvas.onerror = (event) => {\r\n // Empty iframes may result in empty \"data:,\" URLs, which are invalid from the <img>'s point of view\r\n // and instead of `onload` cause `onerror` and unhandled rejection warnings\r\n // https://github.com/niklasvh/html2canvas/issues/1502\r\n iframeCanvas.src == 'data:,' ? resolve(canvas) : reject(event);\r\n };\r\n iframeCanvas.src = canvas.toDataURL();\r\n if (tempIframe.parentNode && iframe.ownerDocument && iframe.ownerDocument.defaultView) {\r\n tempIframe.parentNode.replaceChild(\r\n copyCSSStyles(\r\n iframe.ownerDocument.defaultView.getComputedStyle(iframe),\r\n iframeCanvas\r\n ),\r\n tempIframe\r\n );\r\n }\r\n })\r\n );\r\n return tempIframe;\r\n }\r\n */\r\n DocumentCloner.prototype.cloneNode = function (node) {\r\n if (isTextNode(node)) {\r\n return document.createTextNode(node.data);\r\n }\r\n if (!node.ownerDocument) {\r\n return node.cloneNode(false);\r\n }\r\n var window = node.ownerDocument.defaultView;\r\n if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\r\n var clone = this.createElementClone(node);\r\n var style = window.getComputedStyle(node);\r\n var styleBefore = window.getComputedStyle(node, ':before');\r\n var styleAfter = window.getComputedStyle(node, ':after');\r\n if (this.referenceElement === node && isHTMLElementNode(clone)) {\r\n this.clonedReferenceElement = clone;\r\n }\r\n if (isBodyElement(clone)) {\r\n createPseudoHideStyles(clone);\r\n }\r\n var counters = this.counters.parse(new CSSParsedCounterDeclaration(style));\r\n var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\r\n for (var child = node.firstChild; child; child = child.nextSibling) {\r\n if (!isElementNode(child) ||\r\n (!isScriptElement(child) &&\r\n !child.hasAttribute(IGNORE_ATTRIBUTE) &&\r\n (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\r\n if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\r\n clone.appendChild(this.cloneNode(child));\r\n }\r\n }\r\n }\r\n if (before) {\r\n clone.insertBefore(before, clone.firstChild);\r\n }\r\n var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\r\n if (after) {\r\n clone.appendChild(after);\r\n }\r\n this.counters.pop(counters);\r\n if (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) {\r\n copyCSSStyles(style, clone);\r\n }\r\n //this.inlineAllImages(clone);\r\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\r\n this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\r\n }\r\n if ((isTextareaElement(node) || isSelectElement(node)) &&\r\n (isTextareaElement(clone) || isSelectElement(clone))) {\r\n clone.value = node.value;\r\n }\r\n return clone;\r\n }\r\n return node.cloneNode(false);\r\n };\r\n DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\r\n var _this = this;\r\n if (!style) {\r\n return;\r\n }\r\n var value = style.content;\r\n var document = clone.ownerDocument;\r\n if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\r\n return;\r\n }\r\n this.counters.parse(new CSSParsedCounterDeclaration(style));\r\n var declaration = new CSSParsedPseudoDeclaration(style);\r\n var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\r\n copyCSSStyles(style, anonymousReplacedElement);\r\n declaration.content.forEach(function (token) {\r\n if (token.type === TokenType.STRING_TOKEN) {\r\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n }\r\n else if (token.type === TokenType.URL_TOKEN) {\r\n var img = document.createElement('img');\r\n img.src = token.value;\r\n img.style.opacity = '1';\r\n anonymousReplacedElement.appendChild(img);\r\n }\r\n else if (token.type === TokenType.FUNCTION) {\r\n if (token.name === 'attr') {\r\n var attr = token.values.filter(isIdentToken);\r\n if (attr.length) {\r\n anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\r\n }\r\n }\r\n else if (token.name === 'counter') {\r\n var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\r\n if (counter && isIdentToken(counter)) {\r\n var counterState = _this.counters.getCounterValue(counter.value);\r\n var counterType = counterStyle && isIdentToken(counterStyle)\r\n ? listStyleType.parse(counterStyle.value)\r\n : LIST_STYLE_TYPE.DECIMAL;\r\n anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\r\n }\r\n }\r\n else if (token.name === 'counters') {\r\n var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\r\n if (counter && isIdentToken(counter)) {\r\n var counterStates = _this.counters.getCounterValues(counter.value);\r\n var counterType_1 = counterStyle && isIdentToken(counterStyle)\r\n ? listStyleType.parse(counterStyle.value)\r\n : LIST_STYLE_TYPE.DECIMAL;\r\n var separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : '';\r\n var text = counterStates\r\n .map(function (value) { return createCounterText(value, counterType_1, false); })\r\n .join(separator);\r\n anonymousReplacedElement.appendChild(document.createTextNode(text));\r\n }\r\n }\r\n }\r\n else if (token.type === TokenType.IDENT_TOKEN) {\r\n switch (token.value) {\r\n case 'open-quote':\r\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\r\n break;\r\n case 'close-quote':\r\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\r\n break;\r\n default:\r\n // safari doesn't parse string tokens correctly because of lack of quotes\r\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n }\r\n }\r\n });\r\n anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n var newClassName = pseudoElt === PseudoElementType.BEFORE\r\n ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\r\n : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n if (isSVGElementNode(clone)) {\r\n clone.className.baseValue += newClassName;\r\n }\r\n else {\r\n clone.className += newClassName;\r\n }\r\n return anonymousReplacedElement;\r\n };\r\n DocumentCloner.destroy = function (container) {\r\n if (container.parentNode) {\r\n container.parentNode.removeChild(container);\r\n return true;\r\n }\r\n return false;\r\n };\r\n return DocumentCloner;\r\n }());\r\n var PseudoElementType;\r\n (function (PseudoElementType) {\r\n PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\r\n PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\r\n })(PseudoElementType || (PseudoElementType = {}));\r\n var createIFrameContainer = function (ownerDocument, bounds) {\r\n var cloneIframeContainer = ownerDocument.createElement('iframe');\r\n cloneIframeContainer.className = 'html2canvas-container';\r\n cloneIframeContainer.style.visibility = 'hidden';\r\n cloneIframeContainer.style.position = 'fixed';\r\n cloneIframeContainer.style.left = '-10000px';\r\n cloneIframeContainer.style.top = '0px';\r\n cloneIframeContainer.style.border = '0';\r\n cloneIframeContainer.width = bounds.width.toString();\r\n cloneIframeContainer.height = bounds.height.toString();\r\n cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\r\n cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\r\n ownerDocument.body.appendChild(cloneIframeContainer);\r\n return cloneIframeContainer;\r\n };\r\n var iframeLoader = function (iframe) {\r\n return new Promise(function (resolve, reject) {\r\n var cloneWindow = iframe.contentWindow;\r\n if (!cloneWindow) {\r\n return reject(\"No window assigned for iframe\");\r\n }\r\n var documentClone = cloneWindow.document;\r\n cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = function () {\r\n cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = null;\r\n var interval = setInterval(function () {\r\n if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\r\n clearInterval(interval);\r\n resolve(iframe);\r\n }\r\n }, 50);\r\n };\r\n });\r\n };\r\n var copyCSSStyles = function (style, target) {\r\n // Edge does not provide value for cssText\r\n for (var i = style.length - 1; i >= 0; i--) {\r\n var property = style.item(i);\r\n // Safari shows pseudoelements if content is set\r\n if (property !== 'content') {\r\n target.style.setProperty(property, style.getPropertyValue(property));\r\n }\r\n }\r\n return target;\r\n };\r\n var serializeDoctype = function (doctype) {\r\n var str = '';\r\n if (doctype) {\r\n str += '<!DOCTYPE ';\r\n if (doctype.name) {\r\n str += doctype.name;\r\n }\r\n if (doctype.internalSubset) {\r\n str += doctype.internalSubset;\r\n }\r\n if (doctype.publicId) {\r\n str += \"\\\"\" + doctype.publicId + \"\\\"\";\r\n }\r\n if (doctype.systemId) {\r\n str += \"\\\"\" + doctype.systemId + \"\\\"\";\r\n }\r\n str += '>';\r\n }\r\n return str;\r\n };\r\n var restoreOwnerScroll = function (ownerDocument, x, y) {\r\n if (ownerDocument &&\r\n ownerDocument.defaultView &&\r\n (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\r\n ownerDocument.defaultView.scrollTo(x, y);\r\n }\r\n };\r\n var restoreNodeScroll = function (_a) {\r\n var element = _a[0], x = _a[1], y = _a[2];\r\n element.scrollLeft = x;\r\n element.scrollTop = y;\r\n };\r\n var PSEUDO_BEFORE = ':before';\r\n var PSEUDO_AFTER = ':after';\r\n var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\r\n var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\r\n var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n content: \\\"\\\" !important;\\n display: none !important;\\n}\";\r\n var createPseudoHideStyles = function (body) {\r\n createStyles(body, \".\" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + \"\\n .\" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);\r\n };\r\n var createStyles = function (body, styles) {\r\n var document = body.ownerDocument;\r\n if (document) {\r\n var style = document.createElement('style');\r\n style.textContent = styles;\r\n body.appendChild(style);\r\n }\r\n };\n\n var PathType;\r\n (function (PathType) {\r\n PathType[PathType[\"VECTOR\"] = 0] = \"VECTOR\";\r\n PathType[PathType[\"BEZIER_CURVE\"] = 1] = \"BEZIER_CURVE\";\r\n })(PathType || (PathType = {}));\r\n var equalPath = function (a, b) {\r\n if (a.length === b.length) {\r\n return a.some(function (v, i) { return v === b[i]; });\r\n }\r\n return false;\r\n };\r\n var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\r\n return path.map(function (point, index) {\r\n switch (index) {\r\n case 0:\r\n return point.add(deltaX, deltaY);\r\n case 1:\r\n return point.add(deltaX + deltaW, deltaY);\r\n case 2:\r\n return point.add(deltaX + deltaW, deltaY + deltaH);\r\n case 3:\r\n return point.add(deltaX, deltaY + deltaH);\r\n }\r\n return point;\r\n });\r\n };\n\n var Vector = /** @class */ (function () {\r\n function Vector(x, y) {\r\n this.type = PathType.VECTOR;\r\n this.x = x;\r\n this.y = y;\r\n }\r\n Vector.prototype.add = function (deltaX, deltaY) {\r\n return new Vector(this.x + deltaX, this.y + deltaY);\r\n };\r\n return Vector;\r\n }());\n\n var lerp = function (a, b, t) {\r\n return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\r\n };\r\n var BezierCurve = /** @class */ (function () {\r\n function BezierCurve(start, startControl, endControl, end) {\r\n this.type = PathType.BEZIER_CURVE;\r\n this.start = start;\r\n this.startControl = startControl;\r\n this.endControl = endControl;\r\n this.end = end;\r\n }\r\n BezierCurve.prototype.subdivide = function (t, firstHalf) {\r\n var ab = lerp(this.start, this.startControl, t);\r\n var bc = lerp(this.startControl, this.endControl, t);\r\n var cd = lerp(this.endControl, this.end, t);\r\n var abbc = lerp(ab, bc, t);\r\n var bccd = lerp(bc, cd, t);\r\n var dest = lerp(abbc, bccd, t);\r\n return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\r\n };\r\n BezierCurve.prototype.add = function (deltaX, deltaY) {\r\n return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\r\n };\r\n BezierCurve.prototype.reverse = function () {\r\n return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\r\n };\r\n return BezierCurve;\r\n }());\r\n var isBezierCurve = function (path) { return path.type === PathType.BEZIER_CURVE; };\n\n var BoundCurves = /** @class */ (function () {\r\n function BoundCurves(element) {\r\n var styles = element.styles;\r\n var bounds = element.bounds;\r\n var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\r\n var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\r\n var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\r\n var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\r\n var factors = [];\r\n factors.push((tlh + trh) / bounds.width);\r\n factors.push((blh + brh) / bounds.width);\r\n factors.push((tlv + blv) / bounds.height);\r\n factors.push((trv + brv) / bounds.height);\r\n var maxFactor = Math.max.apply(Math, factors);\r\n if (maxFactor > 1) {\r\n tlh /= maxFactor;\r\n tlv /= maxFactor;\r\n trh /= maxFactor;\r\n trv /= maxFactor;\r\n brh /= maxFactor;\r\n brv /= maxFactor;\r\n blh /= maxFactor;\r\n blv /= maxFactor;\r\n }\r\n var topWidth = bounds.width - trh;\r\n var rightHeight = bounds.height - brv;\r\n var bottomWidth = bounds.width - brh;\r\n var leftHeight = bounds.height - blv;\r\n var borderTopWidth = styles.borderTopWidth;\r\n var borderRightWidth = styles.borderRightWidth;\r\n var borderBottomWidth = styles.borderBottomWidth;\r\n var borderLeftWidth = styles.borderLeftWidth;\r\n var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\r\n var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\r\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\r\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\r\n this.topLeftBorderBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\r\n : new Vector(bounds.left, bounds.top);\r\n this.topRightBorderBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width, bounds.top);\r\n this.bottomRightBorderBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\r\n this.bottomLeftBorderBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left, bounds.top + bounds.height);\r\n this.topLeftPaddingBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\r\n this.topRightPaddingBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderLeftWidth ? 0 : trh - borderLeftWidth, trv - borderTopWidth, CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\r\n this.bottomRightPaddingBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth), Math.max(0, brh - borderRightWidth), brv - borderBottomWidth, CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\r\n this.bottomLeftPaddingBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + leftHeight, Math.max(0, blh - borderLeftWidth), blv - borderBottomWidth, CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\r\n this.topLeftContentBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\r\n this.topRightContentBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\r\n this.bottomRightContentBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n this.bottomLeftContentBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n }\r\n return BoundCurves;\r\n }());\r\n var CORNER;\r\n (function (CORNER) {\r\n CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\r\n CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\r\n CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\r\n CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\r\n })(CORNER || (CORNER = {}));\r\n var getCurvePoints = function (x, y, r1, r2, position) {\r\n var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\r\n var ox = r1 * kappa; // control point offset horizontal\r\n var oy = r2 * kappa; // control point offset vertical\r\n var xm = x + r1; // x-middle\r\n var ym = y + r2; // y-middle\r\n switch (position) {\r\n case CORNER.TOP_LEFT:\r\n return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\r\n case CORNER.TOP_RIGHT:\r\n return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\r\n case CORNER.BOTTOM_RIGHT:\r\n return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\r\n case CORNER.BOTTOM_LEFT:\r\n default:\r\n return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\r\n }\r\n };\r\n var calculateBorderBoxPath = function (curves) {\r\n return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\r\n };\r\n var calculateContentBoxPath = function (curves) {\r\n return [\r\n curves.topLeftContentBox,\r\n curves.topRightContentBox,\r\n curves.bottomRightContentBox,\r\n curves.bottomLeftContentBox\r\n ];\r\n };\r\n var calculatePaddingBoxPath = function (curves) {\r\n return [\r\n curves.topLeftPaddingBox,\r\n curves.topRightPaddingBox,\r\n curves.bottomRightPaddingBox,\r\n curves.bottomLeftPaddingBox\r\n ];\r\n };\n\n var TransformEffect = /** @class */ (function () {\r\n function TransformEffect(offsetX, offsetY, matrix) {\r\n this.type = 0 /* TRANSFORM */;\r\n this.offsetX = offsetX;\r\n this.offsetY = offsetY;\r\n this.matrix = matrix;\r\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\r\n }\r\n return TransformEffect;\r\n }());\r\n var ClipEffect = /** @class */ (function () {\r\n function ClipEffect(path, target) {\r\n this.type = 1 /* CLIP */;\r\n this.target = target;\r\n this.path = path;\r\n }\r\n return ClipEffect;\r\n }());\r\n var isTransformEffect = function (effect) {\r\n return effect.type === 0 /* TRANSFORM */;\r\n };\r\n var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\n\n var StackingContext = /** @class */ (function () {\r\n function StackingContext(container) {\r\n this.element = container;\r\n this.inlineLevel = [];\r\n this.nonInlineLevel = [];\r\n this.negativeZIndex = [];\r\n this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\r\n this.positiveZIndex = [];\r\n this.nonPositionedFloats = [];\r\n this.nonPositionedInlineLevel = [];\r\n }\r\n return StackingContext;\r\n }());\r\n var ElementPaint = /** @class */ (function () {\r\n function ElementPaint(element, parentStack) {\r\n this.container = element;\r\n this.effects = parentStack.slice(0);\r\n this.curves = new BoundCurves(element);\r\n if (element.styles.transform !== null) {\r\n var offsetX = element.bounds.left + element.styles.transformOrigin[0].number;\r\n var offsetY = element.bounds.top + element.styles.transformOrigin[1].number;\r\n var matrix = element.styles.transform;\r\n this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\r\n }\r\n if (element.styles.overflowX !== OVERFLOW.VISIBLE) {\r\n var borderBox = calculateBorderBoxPath(this.curves);\r\n var paddingBox = calculatePaddingBoxPath(this.curves);\r\n if (equalPath(borderBox, paddingBox)) {\r\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n }\r\n else {\r\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\r\n this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\r\n }\r\n }\r\n }\r\n ElementPaint.prototype.getParentEffects = function () {\r\n var effects = this.effects.slice(0);\r\n if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {\r\n var borderBox = calculateBorderBoxPath(this.curves);\r\n var paddingBox = calculatePaddingBoxPath(this.curves);\r\n if (!equalPath(borderBox, paddingBox)) {\r\n effects.push(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n }\r\n }\r\n return effects;\r\n };\r\n return ElementPaint;\r\n }());\r\n var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\r\n parent.container.elements.forEach(function (child) {\r\n var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\r\n var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\r\n var paintContainer = new ElementPaint(child, parent.getParentEffects());\r\n if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\r\n listItems.push(paintContainer);\r\n }\r\n var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\r\n if (treatAsRealStackingContext || createsStackingContext) {\r\n var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\r\n var stack = new StackingContext(paintContainer);\r\n if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\r\n var order_1 = child.styles.zIndex.order;\r\n if (order_1 < 0) {\r\n var index_1 = 0;\r\n parentStack.negativeZIndex.some(function (current, i) {\r\n if (order_1 > current.element.container.styles.zIndex.order) {\r\n index_1 = i;\r\n return false;\r\n }\r\n else if (index_1 > 0) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n parentStack.negativeZIndex.splice(index_1, 0, stack);\r\n }\r\n else if (order_1 > 0) {\r\n var index_2 = 0;\r\n parentStack.positiveZIndex.some(function (current, i) {\r\n if (order_1 >= current.element.container.styles.zIndex.order) {\r\n index_2 = i + 1;\r\n return false;\r\n }\r\n else if (index_2 > 0) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n parentStack.positiveZIndex.splice(index_2, 0, stack);\r\n }\r\n else {\r\n parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\r\n }\r\n }\r\n else {\r\n if (child.styles.isFloating()) {\r\n parentStack.nonPositionedFloats.push(stack);\r\n }\r\n else {\r\n parentStack.nonPositionedInlineLevel.push(stack);\r\n }\r\n }\r\n parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\r\n }\r\n else {\r\n if (child.styles.isInlineLevel()) {\r\n stackingContext.inlineLevel.push(paintContainer);\r\n }\r\n else {\r\n stackingContext.nonInlineLevel.push(paintContainer);\r\n }\r\n parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\r\n }\r\n if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\r\n processListItems(child, listOwnerItems);\r\n }\r\n });\r\n };\r\n var processListItems = function (owner, elements) {\r\n var numbering = owner instanceof OLElementContainer ? owner.start : 1;\r\n var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\r\n for (var i = 0; i < elements.length; i++) {\r\n var item = elements[i];\r\n if (item.container instanceof LIElementContainer &&\r\n typeof item.container.value === 'number' &&\r\n item.container.value !== 0) {\r\n numbering = item.container.value;\r\n }\r\n item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\r\n numbering += reversed ? -1 : 1;\r\n }\r\n };\r\n var parseStackingContexts = function (container) {\r\n var paintContainer = new ElementPaint(container, []);\r\n var root = new StackingContext(paintContainer);\r\n var listItems = [];\r\n parseStackTree(paintContainer, root, root, listItems);\r\n processListItems(paintContainer.container, listItems);\r\n return root;\r\n };\n\n var parsePathForBorder = function (curves, borderSide) {\r\n switch (borderSide) {\r\n case 0:\r\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\r\n case 1:\r\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\r\n case 2:\r\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\r\n case 3:\r\n default:\r\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\r\n }\r\n };\r\n var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\r\n var path = [];\r\n if (isBezierCurve(outer1)) {\r\n path.push(outer1.subdivide(0.5, false));\r\n }\r\n else {\r\n path.push(outer1);\r\n }\r\n if (isBezierCurve(outer2)) {\r\n path.push(outer2.subdivide(0.5, true));\r\n }\r\n else {\r\n path.push(outer2);\r\n }\r\n if (isBezierCurve(inner2)) {\r\n path.push(inner2.subdivide(0.5, true).reverse());\r\n }\r\n else {\r\n path.push(inner2);\r\n }\r\n if (isBezierCurve(inner1)) {\r\n path.push(inner1.subdivide(0.5, false).reverse());\r\n }\r\n else {\r\n path.push(inner1);\r\n }\r\n return path;\r\n };\n\n var paddingBox = function (element) {\r\n var bounds = element.bounds;\r\n var styles = element.styles;\r\n return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\r\n };\r\n var contentBox = function (element) {\r\n var styles = element.styles;\r\n var bounds = element.bounds;\r\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\r\n var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\r\n var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\r\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\r\n return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\r\n };\n\n var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\r\n if (backgroundOrigin === 0 /* BORDER_BOX */) {\r\n return element.bounds;\r\n }\r\n if (backgroundOrigin === 2 /* CONTENT_BOX */) {\r\n return contentBox(element);\r\n }\r\n return paddingBox(element);\r\n };\r\n var calculateBackgroundPaintingArea = function (backgroundClip, element) {\r\n if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {\r\n return element.bounds;\r\n }\r\n if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {\r\n return contentBox(element);\r\n }\r\n return paddingBox(element);\r\n };\r\n var calculateBackgroundRendering = function (container, index, intrinsicSize) {\r\n var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\r\n var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\r\n var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\r\n var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\r\n var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\r\n var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\r\n var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\r\n var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\r\n return [path, offsetX, offsetY, sizeWidth, sizeHeight];\r\n };\r\n var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\r\n var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\r\n var calculateBackgroundSize = function (size, _a, bounds) {\r\n var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\r\n var first = size[0], second = size[1];\r\n if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\r\n return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\r\n }\r\n var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\r\n if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\r\n if (hasIntrinsicValue(intrinsicProportion)) {\r\n var targetRatio = bounds.width / bounds.height;\r\n return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\r\n ? [bounds.width, bounds.width / intrinsicProportion]\r\n : [bounds.height * intrinsicProportion, bounds.height];\r\n }\r\n return [bounds.width, bounds.height];\r\n }\r\n var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\r\n var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\r\n var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\r\n // If the background-size is auto or auto auto:\r\n if (isAuto(first) && (!second || isAuto(second))) {\r\n // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\r\n if (hasIntrinsicWidth && hasIntrinsicHeight) {\r\n return [intrinsicWidth, intrinsicHeight];\r\n }\r\n // If the image has no intrinsic dimensions and has no intrinsic proportions,\r\n // it's rendered at the size of the background positioning area.\r\n if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\r\n return [bounds.width, bounds.height];\r\n }\r\n // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\r\n // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\r\n // The other dimension is computed using the specified dimension and the intrinsic proportions.\r\n if (hasIntrinsicDimensions && hasIntrinsicProportion) {\r\n var width_1 = hasIntrinsicWidth\r\n ? intrinsicWidth\r\n : intrinsicHeight * intrinsicProportion;\r\n var height_1 = hasIntrinsicHeight\r\n ? intrinsicHeight\r\n : intrinsicWidth / intrinsicProportion;\r\n return [width_1, height_1];\r\n }\r\n // If the image has only one intrinsic dimension but has no intrinsic proportions,\r\n // it's rendered using the specified dimension and the other dimension of the background positioning area.\r\n var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\r\n var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\r\n return [width_2, height_2];\r\n }\r\n // If the image has intrinsic proportions, it's stretched to the specified dimension.\r\n // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\r\n if (hasIntrinsicProportion) {\r\n var width_3 = 0;\r\n var height_3 = 0;\r\n if (isLengthPercentage(first)) {\r\n width_3 = getAbsoluteValue(first, bounds.width);\r\n }\r\n else if (isLengthPercentage(second)) {\r\n height_3 = getAbsoluteValue(second, bounds.height);\r\n }\r\n if (isAuto(first)) {\r\n width_3 = height_3 * intrinsicProportion;\r\n }\r\n else if (!second || isAuto(second)) {\r\n height_3 = width_3 / intrinsicProportion;\r\n }\r\n return [width_3, height_3];\r\n }\r\n // If the image has no intrinsic proportions, it's stretched to the specified dimension.\r\n // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\r\n // if there is one. If there is no such intrinsic dimension,\r\n // it becomes the corresponding dimension of the background positioning area.\r\n var width = null;\r\n var height = null;\r\n if (isLengthPercentage(first)) {\r\n width = getAbsoluteValue(first, bounds.width);\r\n }\r\n else if (second && isLengthPercentage(second)) {\r\n height = getAbsoluteValue(second, bounds.height);\r\n }\r\n if (width !== null && (!second || isAuto(second))) {\r\n height =\r\n hasIntrinsicWidth && hasIntrinsicHeight\r\n ? (width / intrinsicWidth) * intrinsicHeight\r\n : bounds.height;\r\n }\r\n if (height !== null && isAuto(first)) {\r\n width =\r\n hasIntrinsicWidth && hasIntrinsicHeight\r\n ? (height / intrinsicHeight) * intrinsicWidth\r\n : bounds.width;\r\n }\r\n if (width !== null && height !== null) {\r\n return [width, height];\r\n }\r\n throw new Error(\"Unable to calculate background-size for element\");\r\n };\r\n var getBackgroundValueForIndex = function (values, index) {\r\n var value = values[index];\r\n if (typeof value === 'undefined') {\r\n return values[0];\r\n }\r\n return value;\r\n };\r\n var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\r\n var x = _a[0], y = _a[1];\r\n var width = _b[0], height = _b[1];\r\n switch (repeat) {\r\n case BACKGROUND_REPEAT.REPEAT_X:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\r\n ];\r\n case BACKGROUND_REPEAT.REPEAT_Y:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\r\n ];\r\n case BACKGROUND_REPEAT.NO_REPEAT:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\r\n ];\r\n default:\r\n return [\r\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\r\n ];\r\n }\r\n };\n\n var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n var SAMPLE_TEXT = 'Hidden Text';\r\n var FontMetrics = /** @class */ (function () {\r\n function FontMetrics(document) {\r\n this._data = {};\r\n this._document = document;\r\n }\r\n FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\r\n var container = this._document.createElement('div');\r\n var img = this._document.createElement('img');\r\n var span = this._document.createElement('span');\r\n var body = this._document.body;\r\n container.style.visibility = 'hidden';\r\n container.style.fontFamily = fontFamily;\r\n container.style.fontSize = fontSize;\r\n container.style.margin = '0';\r\n container.style.padding = '0';\r\n body.appendChild(container);\r\n img.src = SMALL_IMAGE;\r\n img.width = 1;\r\n img.height = 1;\r\n img.style.margin = '0';\r\n img.style.padding = '0';\r\n img.style.verticalAlign = 'baseline';\r\n span.style.fontFamily = fontFamily;\r\n span.style.fontSize = fontSize;\r\n span.style.margin = '0';\r\n span.style.padding = '0';\r\n span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n container.appendChild(span);\r\n container.appendChild(img);\r\n var baseline = img.offsetTop - span.offsetTop + 2;\r\n container.removeChild(span);\r\n container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n container.style.lineHeight = 'normal';\r\n img.style.verticalAlign = 'super';\r\n var middle = img.offsetTop - container.offsetTop + 2;\r\n body.removeChild(container);\r\n return { baseline: baseline, middle: middle };\r\n };\r\n FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\r\n var key = fontFamily + \" \" + fontSize;\r\n if (typeof this._data[key] === 'undefined') {\r\n this._data[key] = this.parseMetrics(fontFamily, fontSize);\r\n }\r\n return this._data[key];\r\n };\r\n return FontMetrics;\r\n }());\n\n var MASK_OFFSET = 10000;\r\n var CanvasRenderer = /** @class */ (function () {\r\n function CanvasRenderer(options) {\r\n this._activeEffects = [];\r\n this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n this.ctx = this.canvas.getContext('2d');\r\n this.options = options;\r\n if (!options.canvas) {\r\n this.canvas.width = Math.floor(options.width * options.scale);\r\n this.canvas.height = Math.floor(options.height * options.scale);\r\n this.canvas.style.width = options.width + \"px\";\r\n this.canvas.style.height = options.height + \"px\";\r\n }\r\n this.fontMetrics = new FontMetrics(document);\r\n this.ctx.scale(this.options.scale, this.options.scale);\r\n this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY);\r\n this.ctx.textBaseline = 'bottom';\r\n this._activeEffects = [];\r\n Logger.getInstance(options.id).debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\r\n }\r\n CanvasRenderer.prototype.applyEffects = function (effects, target) {\r\n var _this = this;\r\n while (this._activeEffects.length) {\r\n this.popEffect();\r\n }\r\n effects.filter(function (effect) { return contains(effect.target, target); }).forEach(function (effect) { return _this.applyEffect(effect); });\r\n };\r\n CanvasRenderer.prototype.applyEffect = function (effect) {\r\n this.ctx.save();\r\n if (isTransformEffect(effect)) {\r\n this.ctx.translate(effect.offsetX, effect.offsetY);\r\n this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\r\n this.ctx.translate(-effect.offsetX, -effect.offsetY);\r\n }\r\n if (isClipEffect(effect)) {\r\n this.path(effect.path);\r\n this.ctx.clip();\r\n }\r\n this._activeEffects.push(effect);\r\n };\r\n CanvasRenderer.prototype.popEffect = function () {\r\n this._activeEffects.pop();\r\n this.ctx.restore();\r\n };\r\n CanvasRenderer.prototype.renderStack = function (stack) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var styles;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n styles = stack.element.container.styles;\r\n if (!styles.isVisible()) return [3 /*break*/, 2];\r\n this.ctx.globalAlpha = styles.opacity;\r\n return [4 /*yield*/, this.renderStackContent(stack)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderNode = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\r\n case 1:\r\n _a.sent();\r\n return [4 /*yield*/, this.renderNodeContent(paint)];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing) {\r\n var _this = this;\r\n if (letterSpacing === 0) {\r\n this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);\r\n }\r\n else {\r\n var letters = toCodePoints(text.text).map(function (i) { return fromCodePoint(i); });\r\n letters.reduce(function (left, letter) {\r\n _this.ctx.fillText(letter, left, text.bounds.top + text.bounds.height);\r\n return left + _this.ctx.measureText(letter).width;\r\n }, text.bounds.left);\r\n }\r\n };\r\n CanvasRenderer.prototype.createFontStyle = function (styles) {\r\n var fontVariant = styles.fontVariant\r\n .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\r\n .join('');\r\n var fontFamily = styles.fontFamily.join(', ');\r\n var fontSize = isDimensionToken(styles.fontSize)\r\n ? \"\" + styles.fontSize.number + styles.fontSize.unit\r\n : styles.fontSize.number + \"px\";\r\n return [\r\n [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\r\n fontFamily,\r\n fontSize\r\n ];\r\n };\r\n CanvasRenderer.prototype.renderTextNode = function (text, styles) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, font, fontFamily, fontSize;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\r\n this.ctx.font = font;\r\n text.textBounds.forEach(function (text) {\r\n _this.ctx.fillStyle = asString(styles.color);\r\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing);\r\n var textShadows = styles.textShadow;\r\n if (textShadows.length && text.text.trim().length) {\r\n textShadows\r\n .slice(0)\r\n .reverse()\r\n .forEach(function (textShadow) {\r\n _this.ctx.shadowColor = asString(textShadow.color);\r\n _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\r\n _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\r\n _this.ctx.shadowBlur = textShadow.blur.number;\r\n _this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);\r\n });\r\n _this.ctx.shadowColor = '';\r\n _this.ctx.shadowOffsetX = 0;\r\n _this.ctx.shadowOffsetY = 0;\r\n _this.ctx.shadowBlur = 0;\r\n }\r\n if (styles.textDecorationLine.length) {\r\n _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\r\n styles.textDecorationLine.forEach(function (textDecorationLine) {\r\n switch (textDecorationLine) {\r\n case 1 /* UNDERLINE */:\r\n // Draws a line at the baseline of the font\r\n // TODO As some browsers display the line as more than 1px if the font-size is big,\r\n // need to take that into account both in position and size\r\n var baseline = _this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\r\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\r\n break;\r\n case 2 /* OVERLINE */:\r\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\r\n break;\r\n case 3 /* LINE_THROUGH */:\r\n // TODO try and find exact position for line-through\r\n var middle = _this.fontMetrics.getMetrics(fontFamily, fontSize).middle;\r\n _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\r\n break;\r\n }\r\n });\r\n }\r\n });\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\r\n if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\r\n var box = contentBox(container);\r\n var path = calculatePaddingBoxPath(curves);\r\n this.path(path);\r\n this.ctx.save();\r\n this.ctx.clip();\r\n this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\r\n this.ctx.restore();\r\n }\r\n };\r\n CanvasRenderer.prototype.renderNodeContent = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var container, curves, styles, _i, _a, child, image, e_1, image, e_2, iframeRenderer, canvas, size, bounds, x, textBounds, img, image, url, e_3, bounds;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n this.applyEffects(paint.effects, 4 /* CONTENT */);\r\n container = paint.container;\r\n curves = paint.curves;\r\n styles = container.styles;\r\n _i = 0, _a = container.textNodes;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n child = _a[_i];\r\n return [4 /*yield*/, this.renderTextNode(child, styles)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4:\r\n if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\r\n _b.label = 5;\r\n case 5:\r\n _b.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, this.options.cache.match(container.src)];\r\n case 6:\r\n image = _b.sent();\r\n this.renderReplacedElement(container, curves, image);\r\n return [3 /*break*/, 8];\r\n case 7:\r\n e_1 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading image \" + container.src);\r\n return [3 /*break*/, 8];\r\n case 8:\r\n if (container instanceof CanvasElementContainer) {\r\n this.renderReplacedElement(container, curves, container.canvas);\r\n }\r\n if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\r\n _b.label = 9;\r\n case 9:\r\n _b.trys.push([9, 11, , 12]);\r\n return [4 /*yield*/, this.options.cache.match(container.svg)];\r\n case 10:\r\n image = _b.sent();\r\n this.renderReplacedElement(container, curves, image);\r\n return [3 /*break*/, 12];\r\n case 11:\r\n e_2 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading svg \" + container.svg.substring(0, 255));\r\n return [3 /*break*/, 12];\r\n case 12:\r\n if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\r\n iframeRenderer = new CanvasRenderer({\r\n id: this.options.id,\r\n scale: this.options.scale,\r\n backgroundColor: container.backgroundColor,\r\n x: 0,\r\n y: 0,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: container.width,\r\n height: container.height,\r\n cache: this.options.cache,\r\n windowWidth: container.width,\r\n windowHeight: container.height\r\n });\r\n return [4 /*yield*/, iframeRenderer.render(container.tree)];\r\n case 13:\r\n canvas = _b.sent();\r\n if (container.width && container.height) {\r\n this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\r\n }\r\n _b.label = 14;\r\n case 14:\r\n if (container instanceof InputElementContainer) {\r\n size = Math.min(container.bounds.width, container.bounds.height);\r\n if (container.type === CHECKBOX) {\r\n if (container.checked) {\r\n this.ctx.save();\r\n this.path([\r\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\r\n new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\r\n new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\r\n new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\r\n new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\r\n new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\r\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\r\n ]);\r\n this.ctx.fillStyle = asString(INPUT_COLOR);\r\n this.ctx.fill();\r\n this.ctx.restore();\r\n }\r\n }\r\n else if (container.type === RADIO) {\r\n if (container.checked) {\r\n this.ctx.save();\r\n this.ctx.beginPath();\r\n this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\r\n this.ctx.fillStyle = asString(INPUT_COLOR);\r\n this.ctx.fill();\r\n this.ctx.restore();\r\n }\r\n }\r\n }\r\n if (isTextInputElement(container) && container.value.length) {\r\n this.ctx.font = this.createFontStyle(styles)[0];\r\n this.ctx.fillStyle = asString(styles.color);\r\n this.ctx.textBaseline = 'middle';\r\n this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\r\n bounds = contentBox(container);\r\n x = 0;\r\n switch (container.styles.textAlign) {\r\n case TEXT_ALIGN.CENTER:\r\n x += bounds.width / 2;\r\n break;\r\n case TEXT_ALIGN.RIGHT:\r\n x += bounds.width;\r\n break;\r\n }\r\n textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\r\n this.ctx.save();\r\n this.path([\r\n new Vector(bounds.left, bounds.top),\r\n new Vector(bounds.left + bounds.width, bounds.top),\r\n new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\r\n new Vector(bounds.left, bounds.top + bounds.height)\r\n ]);\r\n this.ctx.clip();\r\n this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing);\r\n this.ctx.restore();\r\n this.ctx.textBaseline = 'bottom';\r\n this.ctx.textAlign = 'left';\r\n }\r\n if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\r\n if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\r\n img = container.styles.listStyleImage;\r\n if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18];\r\n image = void 0;\r\n url = img.url;\r\n _b.label = 15;\r\n case 15:\r\n _b.trys.push([15, 17, , 18]);\r\n return [4 /*yield*/, this.options.cache.match(url)];\r\n case 16:\r\n image = _b.sent();\r\n this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\r\n return [3 /*break*/, 18];\r\n case 17:\r\n e_3 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading list-style-image \" + url);\r\n return [3 /*break*/, 18];\r\n case 18: return [3 /*break*/, 20];\r\n case 19:\r\n if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) {\r\n this.ctx.font = this.createFontStyle(styles)[0];\r\n this.ctx.fillStyle = asString(styles.color);\r\n this.ctx.textBaseline = 'middle';\r\n this.ctx.textAlign = 'right';\r\n bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);\r\n this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing);\r\n this.ctx.textBaseline = 'bottom';\r\n this.ctx.textAlign = 'left';\r\n }\r\n _b.label = 20;\r\n case 20: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderStackContent = function (stack) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\r\n return __generator(this, function (_p) {\r\n switch (_p.label) {\r\n case 0: \r\n // https://www.w3.org/TR/css-position-3/#painting-order\r\n // 1. the background and borders of the element forming the stacking context.\r\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\r\n case 1:\r\n // https://www.w3.org/TR/css-position-3/#painting-order\r\n // 1. the background and borders of the element forming the stacking context.\r\n _p.sent();\r\n _i = 0, _a = stack.negativeZIndex;\r\n _p.label = 2;\r\n case 2:\r\n if (!(_i < _a.length)) return [3 /*break*/, 5];\r\n child = _a[_i];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 3:\r\n _p.sent();\r\n _p.label = 4;\r\n case 4:\r\n _i++;\r\n return [3 /*break*/, 2];\r\n case 5: \r\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n return [4 /*yield*/, this.renderNodeContent(stack.element)];\r\n case 6:\r\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n _p.sent();\r\n _b = 0, _c = stack.nonInlineLevel;\r\n _p.label = 7;\r\n case 7:\r\n if (!(_b < _c.length)) return [3 /*break*/, 10];\r\n child = _c[_b];\r\n return [4 /*yield*/, this.renderNode(child)];\r\n case 8:\r\n _p.sent();\r\n _p.label = 9;\r\n case 9:\r\n _b++;\r\n return [3 /*break*/, 7];\r\n case 10:\r\n _d = 0, _e = stack.nonPositionedFloats;\r\n _p.label = 11;\r\n case 11:\r\n if (!(_d < _e.length)) return [3 /*break*/, 14];\r\n child = _e[_d];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 12:\r\n _p.sent();\r\n _p.label = 13;\r\n case 13:\r\n _d++;\r\n return [3 /*break*/, 11];\r\n case 14:\r\n _f = 0, _g = stack.nonPositionedInlineLevel;\r\n _p.label = 15;\r\n case 15:\r\n if (!(_f < _g.length)) return [3 /*break*/, 18];\r\n child = _g[_f];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 16:\r\n _p.sent();\r\n _p.label = 17;\r\n case 17:\r\n _f++;\r\n return [3 /*break*/, 15];\r\n case 18:\r\n _h = 0, _j = stack.inlineLevel;\r\n _p.label = 19;\r\n case 19:\r\n if (!(_h < _j.length)) return [3 /*break*/, 22];\r\n child = _j[_h];\r\n return [4 /*yield*/, this.renderNode(child)];\r\n case 20:\r\n _p.sent();\r\n _p.label = 21;\r\n case 21:\r\n _h++;\r\n return [3 /*break*/, 19];\r\n case 22:\r\n _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\r\n _p.label = 23;\r\n case 23:\r\n if (!(_k < _l.length)) return [3 /*break*/, 26];\r\n child = _l[_k];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 24:\r\n _p.sent();\r\n _p.label = 25;\r\n case 25:\r\n _k++;\r\n return [3 /*break*/, 23];\r\n case 26:\r\n _m = 0, _o = stack.positiveZIndex;\r\n _p.label = 27;\r\n case 27:\r\n if (!(_m < _o.length)) return [3 /*break*/, 30];\r\n child = _o[_m];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 28:\r\n _p.sent();\r\n _p.label = 29;\r\n case 29:\r\n _m++;\r\n return [3 /*break*/, 27];\r\n case 30: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.mask = function (paths) {\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(0, 0);\r\n this.ctx.lineTo(this.canvas.width, 0);\r\n this.ctx.lineTo(this.canvas.width, this.canvas.height);\r\n this.ctx.lineTo(0, this.canvas.height);\r\n this.ctx.lineTo(0, 0);\r\n this.formatPath(paths.slice(0).reverse());\r\n this.ctx.closePath();\r\n };\r\n CanvasRenderer.prototype.path = function (paths) {\r\n this.ctx.beginPath();\r\n this.formatPath(paths);\r\n this.ctx.closePath();\r\n };\r\n CanvasRenderer.prototype.formatPath = function (paths) {\r\n var _this = this;\r\n paths.forEach(function (point, index) {\r\n var start = isBezierCurve(point) ? point.start : point;\r\n if (index === 0) {\r\n _this.ctx.moveTo(start.x, start.y);\r\n }\r\n else {\r\n _this.ctx.lineTo(start.x, start.y);\r\n }\r\n if (isBezierCurve(point)) {\r\n _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\r\n }\r\n });\r\n };\r\n CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\r\n this.path(path);\r\n this.ctx.fillStyle = pattern;\r\n this.ctx.translate(offsetX, offsetY);\r\n this.ctx.fill();\r\n this.ctx.translate(-offsetX, -offsetY);\r\n };\r\n CanvasRenderer.prototype.resizeImage = function (image, width, height) {\r\n if (image.width === width && image.height === height) {\r\n return image;\r\n }\r\n var canvas = this.canvas.ownerDocument.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\r\n return canvas;\r\n };\r\n CanvasRenderer.prototype.renderBackgroundImage = function (container) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var index, _loop_1, this_1, _i, _a, backgroundImage;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n index = container.styles.backgroundImage.length - 1;\r\n _loop_1 = function (backgroundImage) {\r\n var image, url, e_4, _a, path, x, y, width, height, pattern, _b, path, x, y, width, height, _c, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _d, path, left, top_1, width, height, position, x, y, _e, rx, ry, radialGradient_1, midX, midY, f, invF;\r\n return __generator(this, function (_f) {\r\n switch (_f.label) {\r\n case 0:\r\n if (!(backgroundImage.type === CSSImageType.URL)) return [3 /*break*/, 5];\r\n image = void 0;\r\n url = backgroundImage.url;\r\n _f.label = 1;\r\n case 1:\r\n _f.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this_1.options.cache.match(url)];\r\n case 2:\r\n image = _f.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_4 = _f.sent();\r\n Logger.getInstance(this_1.options.id).error(\"Error loading background-image \" + url);\r\n return [3 /*break*/, 4];\r\n case 4:\r\n if (image) {\r\n _a = calculateBackgroundRendering(container, index, [\r\n image.width,\r\n image.height,\r\n image.width / image.height\r\n ]), path = _a[0], x = _a[1], y = _a[2], width = _a[3], height = _a[4];\r\n pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\r\n this_1.renderRepeat(path, pattern, x, y);\r\n }\r\n return [3 /*break*/, 6];\r\n case 5:\r\n if (isLinearGradient(backgroundImage)) {\r\n _b = calculateBackgroundRendering(container, index, [null, null, null]), path = _b[0], x = _b[1], y = _b[2], width = _b[3], height = _b[4];\r\n _c = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _c[0], x0 = _c[1], x1 = _c[2], y0 = _c[3], y1 = _c[4];\r\n canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n ctx = canvas.getContext('2d');\r\n gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\r\n processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\r\n return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n });\r\n ctx.fillStyle = gradient_1;\r\n ctx.fillRect(0, 0, width, height);\r\n if (width > 0 && height > 0) {\r\n pattern = this_1.ctx.createPattern(canvas, 'repeat');\r\n this_1.renderRepeat(path, pattern, x, y);\r\n }\r\n }\r\n else if (isRadialGradient(backgroundImage)) {\r\n _d = calculateBackgroundRendering(container, index, [\r\n null,\r\n null,\r\n null\r\n ]), path = _d[0], left = _d[1], top_1 = _d[2], width = _d[3], height = _d[4];\r\n position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\r\n x = getAbsoluteValue(position[0], width);\r\n y = getAbsoluteValue(position[position.length - 1], height);\r\n _e = calculateRadius(backgroundImage, x, y, width, height), rx = _e[0], ry = _e[1];\r\n if (rx > 0 && rx > 0) {\r\n radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\r\n processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\r\n return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n });\r\n this_1.path(path);\r\n this_1.ctx.fillStyle = radialGradient_1;\r\n if (rx !== ry) {\r\n midX = container.bounds.left + 0.5 * container.bounds.width;\r\n midY = container.bounds.top + 0.5 * container.bounds.height;\r\n f = ry / rx;\r\n invF = 1 / f;\r\n this_1.ctx.save();\r\n this_1.ctx.translate(midX, midY);\r\n this_1.ctx.transform(1, 0, 0, f, 0, 0);\r\n this_1.ctx.translate(-midX, -midY);\r\n this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\r\n this_1.ctx.restore();\r\n }\r\n else {\r\n this_1.ctx.fill();\r\n }\r\n }\r\n }\r\n _f.label = 6;\r\n case 6:\r\n index--;\r\n return [2 /*return*/];\r\n }\r\n });\r\n };\r\n this_1 = this;\r\n _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\r\n _b.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n backgroundImage = _a[_i];\r\n return [5 /*yield**/, _loop_1(backgroundImage)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderBorder = function (color, side, curvePoints) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n this.path(parsePathForBorder(curvePoints, side));\r\n this.ctx.fillStyle = asString(color);\r\n this.ctx.fill();\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.applyEffects(paint.effects, 2 /* BACKGROUND_BORDERS */);\r\n styles = paint.container.styles;\r\n hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\r\n borders = [\r\n { style: styles.borderTopStyle, color: styles.borderTopColor },\r\n { style: styles.borderRightStyle, color: styles.borderRightColor },\r\n { style: styles.borderBottomStyle, color: styles.borderBottomColor },\r\n { style: styles.borderLeftStyle, color: styles.borderLeftColor }\r\n ];\r\n backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\r\n if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\r\n this.ctx.save();\r\n this.path(backgroundPaintingArea);\r\n this.ctx.clip();\r\n if (!isTransparent(styles.backgroundColor)) {\r\n this.ctx.fillStyle = asString(styles.backgroundColor);\r\n this.ctx.fill();\r\n }\r\n return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\r\n case 1:\r\n _a.sent();\r\n this.ctx.restore();\r\n styles.boxShadow\r\n .slice(0)\r\n .reverse()\r\n .forEach(function (shadow) {\r\n _this.ctx.save();\r\n var borderBoxArea = calculateBorderBoxPath(paint.curves);\r\n var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\r\n var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));\r\n if (shadow.inset) {\r\n _this.path(borderBoxArea);\r\n _this.ctx.clip();\r\n _this.mask(shadowPaintingArea);\r\n }\r\n else {\r\n _this.mask(borderBoxArea);\r\n _this.ctx.clip();\r\n _this.path(shadowPaintingArea);\r\n }\r\n _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\r\n _this.ctx.shadowOffsetY = shadow.offsetY.number;\r\n _this.ctx.shadowColor = asString(shadow.color);\r\n _this.ctx.shadowBlur = shadow.blur.number;\r\n _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\r\n _this.ctx.fill();\r\n _this.ctx.restore();\r\n });\r\n _a.label = 2;\r\n case 2:\r\n side = 0;\r\n _i = 0, borders_1 = borders;\r\n _a.label = 3;\r\n case 3:\r\n if (!(_i < borders_1.length)) return [3 /*break*/, 7];\r\n border = borders_1[_i];\r\n if (!(border.style !== BORDER_STYLE.NONE && !isTransparent(border.color))) return [3 /*break*/, 5];\r\n return [4 /*yield*/, this.renderBorder(border.color, side, paint.curves)];\r\n case 4:\r\n _a.sent();\r\n _a.label = 5;\r\n case 5:\r\n side++;\r\n _a.label = 6;\r\n case 6:\r\n _i++;\r\n return [3 /*break*/, 3];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.render = function (element) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var stack;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this.options.backgroundColor) {\r\n this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n this.ctx.fillRect(this.options.x - this.options.scrollX, this.options.y - this.options.scrollY, this.options.width, this.options.height);\r\n }\r\n stack = parseStackingContexts(element);\r\n return [4 /*yield*/, this.renderStack(stack)];\r\n case 1:\r\n _a.sent();\r\n this.applyEffects([], 2 /* BACKGROUND_BORDERS */);\r\n return [2 /*return*/, this.canvas];\r\n }\r\n });\r\n });\r\n };\r\n return CanvasRenderer;\r\n }());\r\n var isTextInputElement = function (container) {\r\n if (container instanceof TextareaElementContainer) {\r\n return true;\r\n }\r\n else if (container instanceof SelectElementContainer) {\r\n return true;\r\n }\r\n else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\r\n switch (clip) {\r\n case BACKGROUND_CLIP.BORDER_BOX:\r\n return calculateBorderBoxPath(curves);\r\n case BACKGROUND_CLIP.CONTENT_BOX:\r\n return calculateContentBoxPath(curves);\r\n case BACKGROUND_CLIP.PADDING_BOX:\r\n default:\r\n return calculatePaddingBoxPath(curves);\r\n }\r\n };\r\n var canvasTextAlign = function (textAlign) {\r\n switch (textAlign) {\r\n case TEXT_ALIGN.CENTER:\r\n return 'center';\r\n case TEXT_ALIGN.RIGHT:\r\n return 'right';\r\n case TEXT_ALIGN.LEFT:\r\n default:\r\n return 'left';\r\n }\r\n };\n\n var ForeignObjectRenderer = /** @class */ (function () {\r\n function ForeignObjectRenderer(options) {\r\n this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n this.ctx = this.canvas.getContext('2d');\r\n this.options = options;\r\n this.canvas.width = Math.floor(options.width * options.scale);\r\n this.canvas.height = Math.floor(options.height * options.scale);\r\n this.canvas.style.width = options.width + \"px\";\r\n this.canvas.style.height = options.height + \"px\";\r\n this.ctx.scale(this.options.scale, this.options.scale);\r\n this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY);\r\n Logger.getInstance(options.id).debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\r\n }\r\n ForeignObjectRenderer.prototype.render = function (element) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var svg, img;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n svg = createForeignObjectSVG(Math.max(this.options.windowWidth, this.options.width) * this.options.scale, Math.max(this.options.windowHeight, this.options.height) * this.options.scale, this.options.scrollX * this.options.scale, this.options.scrollY * this.options.scale, element);\r\n return [4 /*yield*/, loadSerializedSVG$1(svg)];\r\n case 1:\r\n img = _a.sent();\r\n if (this.options.backgroundColor) {\r\n this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\r\n }\r\n this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\r\n return [2 /*return*/, this.canvas];\r\n }\r\n });\r\n });\r\n };\r\n return ForeignObjectRenderer;\r\n }());\r\n var loadSerializedSVG$1 = function (svg) {\r\n return new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () {\r\n resolve(img);\r\n };\r\n img.onerror = reject;\r\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n });\r\n };\n\n var _this = undefined;\r\n var parseColor$1 = function (value) { return color.parse(Parser.create(value).parseComponentValue()); };\r\n var html2canvas = function (element, options) {\r\n if (options === void 0) { options = {}; }\r\n return renderElement(element, options);\r\n };\r\n if (typeof window !== 'undefined') {\r\n CacheStorage.setContext(window);\r\n }\r\n var renderElement = function (element, opts) { return __awaiter(_this, void 0, void 0, function () {\r\n var ownerDocument, defaultView, instanceName, _a, width, height, left, top, defaultResourceOptions, resourceOptions, defaultOptions, options, windowBounds, documentCloner, clonedElement, container, documentBackgroundColor, bodyBackgroundColor, bgColor, defaultBackgroundColor, backgroundColor, renderOptions, canvas, renderer, root, renderer;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n ownerDocument = element.ownerDocument;\r\n if (!ownerDocument) {\r\n throw new Error(\"Element is not attached to a Document\");\r\n }\r\n defaultView = ownerDocument.defaultView;\r\n if (!defaultView) {\r\n throw new Error(\"Document is not attached to a Window\");\r\n }\r\n instanceName = (Math.round(Math.random() * 1000) + Date.now()).toString(16);\r\n _a = isBodyElement(element) || isHTMLElement(element) ? parseDocumentSize(ownerDocument) : parseBounds(element), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\r\n defaultResourceOptions = {\r\n allowTaint: false,\r\n imageTimeout: 15000,\r\n proxy: undefined,\r\n useCORS: false\r\n };\r\n resourceOptions = __assign({}, defaultResourceOptions, opts);\r\n defaultOptions = {\r\n backgroundColor: '#ffffff',\r\n cache: opts.cache ? opts.cache : CacheStorage.create(instanceName, resourceOptions),\r\n logging: true,\r\n removeContainer: true,\r\n foreignObjectRendering: false,\r\n scale: defaultView.devicePixelRatio || 1,\r\n windowWidth: defaultView.innerWidth,\r\n windowHeight: defaultView.innerHeight,\r\n scrollX: defaultView.pageXOffset,\r\n scrollY: defaultView.pageYOffset,\r\n x: left,\r\n y: top,\r\n width: Math.ceil(width),\r\n height: Math.ceil(height),\r\n id: instanceName\r\n };\r\n options = __assign({}, defaultOptions, resourceOptions, opts);\r\n windowBounds = new Bounds(options.scrollX, options.scrollY, options.windowWidth, options.windowHeight);\r\n Logger.create({ id: instanceName, enabled: options.logging });\r\n Logger.getInstance(instanceName).debug(\"Starting document clone\");\r\n documentCloner = new DocumentCloner(element, {\r\n id: instanceName,\r\n onclone: options.onclone,\r\n ignoreElements: options.ignoreElements,\r\n inlineImages: options.foreignObjectRendering,\r\n copyStyles: options.foreignObjectRendering\r\n });\r\n clonedElement = documentCloner.clonedReferenceElement;\r\n if (!clonedElement) {\r\n return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\r\n }\r\n return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\r\n case 1:\r\n container = _b.sent();\r\n documentBackgroundColor = ownerDocument.documentElement\r\n ? parseColor$1(getComputedStyle(ownerDocument.documentElement).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n bodyBackgroundColor = ownerDocument.body\r\n ? parseColor$1(getComputedStyle(ownerDocument.body).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n bgColor = opts.backgroundColor;\r\n defaultBackgroundColor = typeof bgColor === 'string' ? parseColor$1(bgColor) : bgColor === null ? COLORS.TRANSPARENT : 0xffffffff;\r\n backgroundColor = element === ownerDocument.documentElement\r\n ? isTransparent(documentBackgroundColor)\r\n ? isTransparent(bodyBackgroundColor)\r\n ? defaultBackgroundColor\r\n : bodyBackgroundColor\r\n : documentBackgroundColor\r\n : defaultBackgroundColor;\r\n renderOptions = {\r\n id: instanceName,\r\n cache: options.cache,\r\n canvas: options.canvas,\r\n backgroundColor: backgroundColor,\r\n scale: options.scale,\r\n x: options.x,\r\n y: options.y,\r\n scrollX: options.scrollX,\r\n scrollY: options.scrollY,\r\n width: options.width,\r\n height: options.height,\r\n windowWidth: options.windowWidth,\r\n windowHeight: options.windowHeight\r\n };\r\n if (!options.foreignObjectRendering) return [3 /*break*/, 3];\r\n Logger.getInstance(instanceName).debug(\"Document cloned, using foreign object rendering\");\r\n renderer = new ForeignObjectRenderer(renderOptions);\r\n return [4 /*yield*/, renderer.render(clonedElement)];\r\n case 2:\r\n canvas = _b.sent();\r\n return [3 /*break*/, 5];\r\n case 3:\r\n Logger.getInstance(instanceName).debug(\"Document cloned, using computed rendering\");\r\n CacheStorage.attachInstance(options.cache);\r\n Logger.getInstance(instanceName).debug(\"Starting DOM parsing\");\r\n root = parseTree(clonedElement);\r\n CacheStorage.detachInstance();\r\n if (backgroundColor === root.styles.backgroundColor) {\r\n root.styles.backgroundColor = COLORS.TRANSPARENT;\r\n }\r\n Logger.getInstance(instanceName).debug(\"Starting renderer\");\r\n renderer = new CanvasRenderer(renderOptions);\r\n return [4 /*yield*/, renderer.render(root)];\r\n case 4:\r\n canvas = _b.sent();\r\n _b.label = 5;\r\n case 5:\r\n if (options.removeContainer === true) {\r\n if (!DocumentCloner.destroy(container)) {\r\n Logger.getInstance(instanceName).error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\r\n }\r\n }\r\n Logger.getInstance(instanceName).debug(\"Finished rendering\");\r\n Logger.destroy(instanceName);\r\n CacheStorage.destroy(instanceName);\r\n return [2 /*return*/, canvas];\r\n }\r\n });\r\n }); };\n\n return html2canvas;\n\n}));\n//# sourceMappingURL=html2canvas.js.map\n"]}