����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 18.220.98.157 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/public_html/public/client/ |
Upload File : |
{"version":3,"sources":["./node_modules/rxjs/_esm2015/internal/observable/interval.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/radio.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/slider.js","./node_modules/html2canvas/dist/html2canvas.js","./node_modules/ngx-color-picker/__ivy_ngcc__/fesm2015/ngx-color-picker.js","./src/app/html-builder/utils/get-node-id.ts","./src/app/html-builder/utils/find-nodes-by-id.ts","./src/app/html-builder/mutations/base-mutation.ts","./src/app/html-builder/utils/node-or-parent-editable.ts","./src/app/html-builder/mutations/dom/replace-node-content.ts","./src/common/shared/form-controls/google-font-selector/browser-safe-fonts.ts","./src/common/shared/form-controls/google-font-selector/google-font.service.ts","./src/common/shared/form-controls/google-font-selector/font-display-name.pipe.ts","./src/common/shared/form-controls/google-font-selector/google-font-selector.component.html","./src/common/shared/form-controls/google-font-selector/google-font-selector.component.ts","./src/app/html-builder/overlays/font-selector-overlay/font-selector-overlay.component.ts","./src/app/html-builder/overlays/font-selector-overlay/font-selector-overlay.component.html","./src/app/html-builder/utils/get-font-awesome-icon-list.ts","./src/app/html-builder/overlays/icon-selector-overlay/icon-selector-overlay.component.html","./src/app/html-builder/overlays/icon-selector-overlay/icon-selector-overlay.component.ts","./src/app/html-builder/sidebar/device-switcher/builder-breakpoint.ts","./src/app/html-builder/sidebar/builder-sidebar-panel.ts","./src/app/html-builder/live-preview/context-box/builder-context.ts","./src/app/html-builder/utils/add-id-to-pages.ts","./src/app/html-builder/builder-state.service.ts","./src/app/html-builder/utils/create-doc-from-html.ts","./src/app/html-builder/mutations/mutations.service.ts","./src/app/html-builder/overlays/link-editor/link-editor.component.html","./src/app/html-builder/overlays/link-editor/link-editor.component.ts","./src/app/html-builder/overlays/link-editor/link-editor.service.ts","./src/app/html-builder/overlays/builder-overlay.service.ts","./src/app/html-builder/overlays/inline-text-editor/inline-text-editor.component.html","./src/app/html-builder/overlays/inline-text-editor/inline-text-editor.component.ts","./src/app/html-builder/overlays/inline-text-editor/inline-text-editor.service.ts","./src/app/html-builder/elements/architect-element.ts","./src/app/html-builder/mutations/attributes/modify-attributes.ts","./src/app/html-builder/utils/fragment-from-string.ts","./src/app/html-builder/mutations/dom/rename-node.ts","./src/app/html-builder/live-preview/context-box/context-boxes.service.ts","./src/app/html-builder/mutations/attributes/replace-class.ts","./src/app/html-builder/utils/get-node-index.ts","./src/app/html-builder/mutations/dom/delete-node.ts","./src/app/html-builder/mutations/dom/clone-node.ts","./src/app/html-builder/utils/insert-node-at-index.ts","./src/app/html-builder/utils/add-id-to-node.ts","./src/app/html-builder/mutations/dom/insert-node.ts","./src/app/html-builder/mutations/dom/move-node.ts","./src/app/html-builder/builder-document-actions.service.ts","./src/app/html-builder/overlays/live-preview-context-menu/live-preview-context-menu.component.ts","./src/app/html-builder/overlays/live-preview-context-menu/live-preview-context-menu.component.html","./src/app/html-builder/utils/get-scroll-top.ts","./src/app/html-builder/projects/active-project.ts","./src/app/html-builder/live-preview.service.ts","./src/app/html-builder/elements/definitions/base.ts","./src/app/html-builder/utils/has-class.ts","./src/app/html-builder/elements/definitions/bootstrap.ts","./src/app/html-builder/sidebar/layout-panel/utils/create-column-node.ts","./src/app/html-builder/sidebar/layout-panel/utils/get-column-span.ts","./src/app/html-builder/sidebar/layout-panel/utils/get-row-columns.ts","./src/app/html-builder/mutations/layout/apply-row-preset.ts","./src/app/html-builder/sidebar/layout-panel/layout-panel.service.ts","./src/app/html-builder/elements/definitions/grid.ts","./src/app/html-builder/elements/definitions/table.ts","./src/app/html-builder/elements/definitions/form.ts","./src/app/html-builder/elements/definitions/image-header.ts","./src/app/html-builder/elements/definitions/jumbotron.ts","./src/app/html-builder/elements/definitions/user-profile.ts","./src/app/html-builder/elements/definitions/skill-list.ts","./src/app/html-builder/elements/definitions/service-list.ts","./src/app/html-builder/elements/definitions/pricing-table.ts","./src/app/html-builder/elements/definitions/navbar.ts","./src/app/html-builder/elements/definitions/media-object.ts","./src/app/html-builder/elements/definitions/material-box.ts","./src/app/html-builder/elements/element-defaults.ts","./src/app/html-builder/elements/elements.service.ts","./src/app/html-builder/overlays/code-editor/ace-themes.ts","./src/app/html-builder/overlays/code-editor/code-editor.component.html","./src/app/html-builder/overlays/code-editor/code-editor.component.ts","./src/app/html-builder/overlays/code-editor/code-editor.service.ts","./src/app/html-builder/live-preview/drag-and-drop/live-preview-scroller.ts","./src/app/html-builder/sidebar/device-switcher/device-switcher.component.html","./src/app/html-builder/sidebar/device-switcher/device-switcher.component.ts","./src/app/html-builder/utils/coords-above-node.ts","./src/app/html-builder/live-preview/drag-and-drop/base-drag-and-drop.ts","./src/app/html-builder/live-preview/drag-and-drop/drag-el-from-sidebar-to-preview.directive.ts","./src/app/html-builder/utils/reload-asset.ts","./src/app/html-builder/sidebar/elements-panel/elements-panel.component.html","./src/app/html-builder/sidebar/elements-panel/elements-panel.component.ts","./src/app/html-builder/sidebar/inspector-panel/spacing-panel/spacing-type.ts","./src/app/html-builder/mutations/attributes/set-id-attribute.ts","./src/app/html-builder/mutations/attributes/sync-el-classes.ts","./src/app/html-builder/mutations/attributes/change-visibility.ts","./src/app/html-builder/sidebar/inspector-panel/attributes-panel/element-controls/element-controls.component.html","./src/app/html-builder/sidebar/inspector-panel/attributes-panel/element-controls/element-controls.component.ts","./src/app/html-builder/sidebar/inspector-panel/attributes-panel/attributes-panel.component.ts","./src/app/html-builder/sidebar/inspector-panel/attributes-panel/attributes-panel.component.html","./src/app/html-builder/mutations/style/default-css-values.ts","./src/app/html-builder/mutations/style/set-style.ts","./src/app/html-builder/utils/style-equals.ts","./src/app/html-builder/mutations/style/background/set-bg-color.ts","./src/app/html-builder/mutations/style/background/set-bg-image.ts","./src/app/html-builder/sidebar/inspector-panel/background-panel/background-props.ts","./src/app/html-builder/mutations/style/background/reset-bg.ts","./src/common/shared/form-controls/background-selector/background-list.ts","./src/common/shared/form-controls/background-selector/background-selector-gradient/gradient-list.ts","./src/common/shared/form-controls/background-selector/background-selector-gradient/background-selector-gradient.component.html","./src/common/shared/form-controls/background-selector/background-selector-gradient/background-selector-gradient.component.ts","./src/common/shared/form-controls/background-selector/background-selector-img/background-selector-img.component.ts","./src/common/shared/form-controls/background-selector/background-selector-img/background-selector-img.component.html","./src/common/shared/form-controls/background-selector/label-from-filename.pipe.ts","./src/common/shared/form-controls/background-selector/background-selector.component.html","./src/common/shared/form-controls/background-selector/background-selector.component.ts","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/button-toggle.js","./src/common/shared/form-controls/background-selector/background-overlay/background-overlay.component.ts","./src/common/shared/form-controls/background-selector/background-overlay/background-overlay.component.html","./src/app/html-builder/sidebar/inspector-panel/background-panel/background-panel.component.ts","./src/app/html-builder/sidebar/inspector-panel/background-panel/background-panel.component.html","./src/app/html-builder/mutations/style/shadow/set-text-shadow.ts","./src/app/html-builder/mutations/style/shadow/set-box-shadow.ts","./src/common/core/utils/arrays-are-equal.ts","./src/app/html-builder/sidebar/inspector-panel/shadows-panel/shadow-panel-form/shadow-panel-form.component.html","./src/app/html-builder/sidebar/inspector-panel/shadows-panel/shadow-panel-form/shadow-panel-form.component.ts","./src/common/core/utils/objects-are-equal.ts","./src/app/html-builder/sidebar/inspector-panel/shadows-panel/shadows-panel.component.ts","./src/app/html-builder/sidebar/inspector-panel/shadows-panel/shadows-panel.component.html","./src/app/html-builder/mutations/style/spacing/set-padding.ts","./src/app/html-builder/mutations/style/spacing/set-margin.ts","./src/app/html-builder/mutations/style/border/set-border.ts","./src/app/html-builder/mutations/style/border/set-border-radius.ts","./src/app/html-builder/mutations/style/border/set-border-width.ts","./src/app/html-builder/sidebar/inspector-panel/spacing-panel/side-control-border/side-control-border.component.ts","./src/app/html-builder/sidebar/inspector-panel/spacing-panel/side-control-border/side-control-border.component.html","./src/app/html-builder/sidebar/inspector-panel/spacing-panel/spacing-panel.component.ts","./src/app/html-builder/sidebar/inspector-panel/spacing-panel/spacing-panel.component.html","./src/app/html-builder/mutations/style/text/set-text-style.ts","./src/app/html-builder/sidebar/inspector-panel/typography-panel/typography-panel.component.html","./src/app/html-builder/sidebar/inspector-panel/typography-panel/typography-panel.component.ts","./src/app/html-builder/mutations/style/border/set-border-color.ts","./src/app/html-builder/mutations/style/border/set-border-style.ts","./src/app/html-builder/sidebar/inspector-panel/border-style-controls/border-style-controls.component.ts","./src/app/html-builder/sidebar/inspector-panel/border-style-controls/border-style-controls.component.html","./src/app/html-builder/sidebar/inspector-panel/inspector-panel.component.html","./src/app/html-builder/sidebar/inspector-panel/inspector-panel.component.ts","./src/app/html-builder/sidebar/layout-panel/column-presets/custom-preset-validator.ts","./src/app/html-builder/sidebar/layout-panel/column-presets/column-presets.component.html","./src/app/html-builder/sidebar/layout-panel/column-presets/column-presets.component.ts","./src/app/html-builder/sidebar/layout-panel/layout-panel.component.html","./src/app/html-builder/sidebar/layout-panel/layout-panel.component.ts","./src/app/html-builder/utils/get-meta-tag-value.ts","./src/app/html-builder/utils/get-title-tag-value.ts","./src/app/html-builder/utils/set-meta-tag-value.ts","./src/app/html-builder/mutations/seo/update-seo-tags.ts","./src/app/html-builder/utils/set-title-tag-value.ts","./src/app/html-builder/sidebar/pages-panel/pages-panel.component.html","./src/app/html-builder/sidebar/pages-panel/pages-panel.component.ts","./src/app/html-builder/sidebar/builder-sidebar.component.html","./src/app/html-builder/sidebar/builder-sidebar.component.ts","./src/app/html-builder/live-preview/drag-and-drop/preview-drag-and-drop.directive.ts","./src/app/html-builder/mutations/style/resize-node.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.html","./src/app/html-builder/live-preview/context-box/context-box.component.ts","./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/html-builder-routing.module.ts","./src/app/html-builder/html-builder/html-builder.component.ts","./src/app/html-builder/html-builder/html-builder.component.html","./src/common/shared/form-controls/background-selector/background-selector.module.ts","./src/common/shared/form-controls/google-font-selector/google-font-selector.module.ts","./src/app/html-builder/html-builder.module.ts","./src/common/admin/appearance/appearance-image-input/appearance-image-upload-validator.ts","./src/common/core/keybinds/keycodes.enum.ts","./src/common/core/keybinds/keybinds.service.ts","./src/common/core/ui/chips/chip-input/chip-input.component.html","./src/common/core/ui/chips/chip-input/chip-input.component.ts","./src/common/core/ui/color-picker/color-picker-input/color-picker-input.module.ts","./src/common/core/ui/color-picker/colorpicker-panel.component.ts","./src/common/core/ui/color-picker/colorpicker-panel.component.html","./src/common/core/ui/overlay-panel/positions/right-position.ts","./src/common/core/ui/skeleton/skeleton.module.ts","./src/common/core/utils/remove-null-from-object.ts","./src/common/datatable/utils/filter-datatable-data.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"],"names":["dispatch","state","subscriber","counter","period","next","this","schedule","extendStyles","dest","source","key","hasOwnProperty","toggleNativeDragInteractions","element","enable","userSelect","style","touchAction","webkitUserDrag","webkitTapHighlightColor","msUserSelect","webkitUserSelect","MozUserSelect","toggleVisibility","styles","position","top","opacity","left","parseCssTimeUnitsToMs","value","multiplier","toLowerCase","indexOf","parseFloat","parseCssPropertyValue","computedStyle","name","getPropertyValue","split","map","part","trim","getMutableClientRect","clientRect","getBoundingClientRect","right","bottom","width","height","isInsideClientRect","x","y","adjustClientRect","isPointerNearClientRect","rect","threshold","pointerX","pointerY","xThreshold","yThreshold","ParentPositionTracker","constructor","_document","_viewportRuler","positions","Map","clear","cache","elements","set","scrollPosition","getViewportScrollPosition","forEach","scrollTop","scrollLeft","handleScroll","event","target","cachedPosition","get","scrolledParentNode","documentElement","newTop","newLeft","viewportScrollPosition","topDifference","leftDifference","node","contains","deepCloneNode","clone","cloneNode","descendantsWithId","querySelectorAll","nodeName","removeAttribute","i","length","transferCanvasData","transferInputData","transferData","selector","callback","descendantElements","cloneElements","cloneUniqueId","type","context","getContext","drawImage","_a","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","activeEventListenerOptions","DragRef","_config","_ngZone","_dragDropRegistry","_passiveTransform","_activeTransform","_moveEvents","Subject","_pointerMoveSubscription","Subscription","_pointerUpSubscription","_scrollSubscription","_resizeSubscription","_boundaryElement","_nativeInteractionsEnabled","_handles","_disabledHandles","Set","_direction","dragStartDelay","_disabled","beforeStarted","started","released","ended","entered","exited","dropped","moved","_pointerDown","targetHandle","find","handle","has","disabled","_initializeDragSequence","_rootElement","_pointerMove","pointerPosition","_getPointerPositionOnPage","_hasStartedDragging","Math","abs","_pickupPositionOnPage","dragStartThreshold","isDelayElapsed","Date","now","_dragStartTime","_getDragStartDelay","container","_dropContainer","_endDragSequence","isDragging","isReceiving","preventDefault","run","_startDragSequence","_previewRect","_preview","constrainedPointerPosition","_getConstrainedPointerPosition","_hasMoved","_lastKnownPointerPosition","_updatePointerDirectionDelta","_updateActiveDropContainer","activeTransform","_applyRootElementTransform","SVGElement","setAttribute","observers","distance","_getDragDistance","delta","_pointerDirectionDelta","_pointerUp","withRootElement","withParent","parentDragRef","_parentPositions","registerDragItem","newValue","coerceBooleanProperty","_toggleNativeDragInteractions","getPlaceholderElement","_placeholder","getRootElement","getVisibleElement","withHandles","handles","coerceElement","disabledHandles","add","withPreviewTemplate","template","_previewTemplate","withPlaceholderTemplate","_placeholderTemplate","rootElement","_removeRootElementListeners","runOutsideAngular","addEventListener","_initialTransform","undefined","_ownerSVGElement","ownerSVGElement","withBoundaryElement","boundaryElement","unsubscribe","change","subscribe","_containInsideBoundaryOnResize","parent","_parentDragRef","dispose","removeNode","_anchor","_destroyPreview","_destroyPlaceholder","removeDragItem","_removeSubscriptions","complete","reset","transform","disableHandle","enableHandle","delete","withDirection","direction","_withDropContainer","getFreeDragPosition","setFreeDragPosition","_sortFromLastPointerPosition","_previewRef","destroy","_placeholderRef","stopDragging","_rootElementTapHighlight","_stopScrolling","_animatePreviewToPlaceholder","then","_cleanupDragArtifacts","_cleanupCachedDimensions","isTouchEvent","_lastTouchEventTime","dropContainer","parentNode","preview","_createPreviewElement","placeholder","_createPlaceholderElement","anchor","createComment","shadowRoot","_getShadowRoot","insertBefore","body","appendChild","replaceChild","documentRef","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","getPreviewInsertionPoint","start","_initialContainer","_initialIndex","getItemIndex","getScrollableParents","referenceElement","stopPropagation","isTouchSequence","isAuxiliaryMouseButton","button","isSyntheticEvent","draggable","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","getTransformTransitionDurationInMs","handler","propertyName","removeEventListener","clearTimeout","timeout","setTimeout","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","touch","mouse","scrollDifference","_cachedShadowRoot","round","min","max","removeChild","rootNodes","nodeType","ELEMENT_NODE","wrapper","createElement","sourceRect","moveItemInArray","array","fromIndex","toIndex","from","clamp$1","to","DropListRef","autoScrollDisabled","autoScrollStep","enterPredicate","sortPredicate","sorted","_isDragging","_itemPositions","_previousSwap","drag","overlaps","_draggables","_siblings","_orientation","_activeSiblings","_viewportScrollSubscription","_verticalScrollDirection","_horizontalScrollDirection","_stopScrollTimers","_startScrollInterval","scheduler","async","isNumeric","Observable","interval","animationFrameScheduler","pipe","takeUntil","_scrollNode","scrollStep","incrementVerticalScroll","incrementHorizontalScroll","withScrollableParents","registerDropContainer","removeDropContainer","_draggingStarted","_notifyReceivingSiblings","index","newIndex","_getItemIndexFromPointerPosition","activeDraggables","_activeDraggables","newPositionReference","splice","parentElement","_shouldEnterAsFirstChild","reference","unshift","push","_cacheItemPositions","_cacheParentPositions","_reset","withItems","items","previousItems","filter","every","_cacheItems","connectedTo","slice","withOrientation","orientation","_scrollableElements","findIndex","reverse","currentItem","size","pointerDelta","_clientRect","siblings","isHorizontal","siblingAtNewPosition","newPosition","itemOffset","_getItemOffsetPx","siblingOffset","_getSiblingOffsetPx","oldOrder","sibling","isDraggedItem","offset","elementToOffset","scrollNode","verticalScrollDirection","horizontalScrollDirection","computedVertical","getVerticalScrollDirection","computedHorizontal","getHorizontalScrollDirection","scrollHeight","clientHeight","scrollWidth","clientWidth","getElementScrollDirections","getViewportSize","window","_initialScrollSnap","msScrollSnapType","scrollSnapType","_listenToScrollEvents","elementToMeasure","sort","a","b","_stopReceiving","immediateSibling","end","itemPositions","lastItemRect","firstItemRect","_","floor","_canReceive","elementFromPoint","nativeElement","_startReceiving","activeSiblings","draggedItems","predicate","amount","scrollBy","activeCapturingEventOptions","capture","DragDropRegistry","_dropInstances","_dragInstances","_activeDragInstances","_globalListeners","_draggingPredicate","_preventDefaultWhileDragging","_persistentTouchmoveListener","some","startsWith","e","options","config","_clearGlobalListeners","ngOnDestroy","instance","ɵfac","t","ɵngcc0","DOCUMENT","ɵprov","ɵɵdefineInjectable","factory","ɵɵinject","NgZone","token","providedIn","DEFAULT_CONFIG","DragDrop","createDrag","createDropList","ɵngcc1","ViewportRuler","CDK_DRAG_PARENT","InjectionToken","CDK_DROP_LIST_GROUP","CDK_DRAG_CONFIG","_uniqueIdCounter","CDK_DROP_LIST","CdkDropList","dragDrop","_changeDetectorRef","_scrollDispatcher","_dir","_group","_destroyed","id","EventEmitter","_unsortedItems","_dropListRef","data","_assignDefaults","_setupInputSyncSubscription","_handleEvents","_dropLists","_items","addItem","_syncItemsWithRef","removeItem","getSortedItems","_dragRef","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","ref","startWith","coerceArray","list","_scrollableParentsResolved","scrollableParents","getAncestorScrollContainers","scrollable","getElementRef","coerceNumberProperty","markForCheck","emit","draggingDisabled","listAutoScrollDisabled","listOrientation","ɵngcc2","ɵdir","selectors","hostAttrs","hostVars","hostBindings","rf","ctx","inputs","outputs","exportAs","features","provide","useValue","useExisting","CDK_DRAG_HANDLE","CdkDragHandle","parentDrag","_stateChanges","_parentDrag","CDK_DRAG_PLACEHOLDER","CDK_DRAG_PREVIEW","CdkDragPreview","templateRef","_matchSize","CdkDrag","_viewContainerRef","_selfHandle","observer","subscription","movedEvent","_syncInputs","ngAfterViewInit","onStable","take","_updateRootElement","changes","tap","childHandleElements","rootElementSelector","switchMap","merge","handleInstance","dragRef","freeDragPosition","ngOnChanges","rootSelectorChange","positionChange","firstChange","getClosestMatchingAncestor","_getBoundaryElement","boundary","dir","_b","contentQueries","dirIndex","_t","first","currentElement","matches","msMatchesSelector","DragDropModule","ɵmod","ɵinj","providers","imports","CdkScrollableModule","nextId","CDK_ACCORDION","CdkAccordion","_openCloseAllActions","_multi","multi","openAll","closeAll","nextId$1","CdkAccordionItem","accordion","_expansionDispatcher","_openCloseAllSubscription","closed","opened","destroyed","expandedChange","_expanded","_removeUniqueSelectionListener","listen","accordionId","expanded","_subscribeToOpenCloseAllActions","notify","toggle","close","open","CdkAccordionModule","_c0","MatExpansionPanel_ng_template_5_Template","_c1","_c2","MatExpansionPanelHeader_span_4_Template","ctx_r0","_getExpandedState","_c3","_c4","MAT_ACCORDION","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","indicatorRotate","trigger","transition","animate","bodyExpansion","visibility","MatExpansionPanelContent","_template","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","_uniqueSelectionDispatcher","_animationMode","defaultOptions","super","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","distinctUntilChanged","fromState","toState","hideToggle","_togglePosition","togglePosition","_hasSpacing","displayMode","ngAfterContentInit","_lazyContent","_portal","TemplatePortal","_containsFocus","_body","focusedElement","activeElement","bodyElement","ANIMATION_MODULE_TYPE","ɵcmp","viewQuery","ngContentSelectors","decls","vars","consts","$event","directives","encapsulation","animation","changeDetection","MatExpansionPanelActionRow","MatExpansionPanelHeader","panel","_element","_focusMonitor","_parentChangeSubscription","accordionHideToggleChange","EMPTY","focusVia","expandedHeight","collapsedHeight","_toggle","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","isExpanded","_keydown","keyCode","SPACE","ENTER","hasModifierKey","_handleHeaderKeydown","focus","origin","monitor","_handleHeaderFocus","stopMonitoring","ɵngcc3","ɵngcc4","MatExpansionPanelTitle","MatAccordion","arguments","_ownHeaders","QueryList","show","_headers","headers","header","notifyOnChanges","_keyManager","FocusKeyManager","withWrap","withHomeAndEnd","onKeydown","updateActiveItem","ɵMatAccordion_BaseFactory","MatExpansionModule","CommonModule","MatCommonModule","PortalModule","enterDuration","MAT_RADIO_DEFAULT_OPTIONS","color","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatRadioGroup","MatRadioChange","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_value","_name","_selected","_isInitialized","_labelPosition","_required","_controlValueAccessorChangeFn","onTouched","_updateRadioButtonNames","v","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","checked","selected","_touch","_radios","radio","_markForCheck","_emitChangeEvent","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","labelPosition","required","ɵMatRadioGroup_BaseFactory","MatRadioButton","MatRadioButtonBase","_elementRef","_MatRadioButtonMixinBase","mixinDisableRipple","mixinTabIndex","_MatRadioButtonBase","radioGroup","elementRef","_radioDispatcher","_providerOverride","tabIndex","_uniqueId","_checked","newCheckedState","_setDisabled","_color","_inputElement","ngOnInit","focusOrigin","_isRippleDisabled","disableRipple","_onInputClick","_onInputChange","groupValueChanged","String","ariaLabel","ariaLabelledby","ariaDescribedby","changeDetector","focusMonitor","radioDispatcher","animationMode","providerOverride","_r0","inputId","MatRadioModule","MatRippleModule","activeEventOptions","MAT_SLIDER_VALUE_ACCESSOR","MatSlider","MatSliderChange","MatSliderBase","_MatSliderMixinBase","mixinColor","mixinDisabled","_invert","_max","_min","_step","_thumbLabel","_tickInterval","_vertical","input","valueChange","_percent","_isSliding","_isActive","_tickIntervalPercent","_sliderDimensions","_dirChangeSubscription","oldValue","getPointerPositionOnPage","_lastPointerEvent","_focusHostElement","_onMouseenter","_bindGlobalEvents","_updateValueFromPosition","_valueOnSlideStart","_emitInputEvent","_removeGlobalEvents","_windowBlur","parseInt","_calculatePercentage","_roundToDecimal","toString","pop","toFixed","displayWith","blur","_blurHostElement","_clamp","_shouldInvertAxis","vertical","invert","_isMinValue","percent","_getThumbGap","thumbLabel","_getTrackBackgroundStyles","scale","_shouldInvertMouseCoords","_getTrackFillStyles","display","_getTicksContainerStyles","_getDirection","_getTicksStyles","tickSize","shouldInvertAxis","side","_getThumbContainerStyles","_getSliderDimensions","_updateTickIntervalPercent","_onFocus","_onBlur","_onKeydown","PAGE_UP","_increment","PAGE_DOWN","END","HOME","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","_onKeyup","_getWindow","defaultView","triggerEvent","document","isTouch","endEventName","numSteps","step","pos","exactValue","_calculateValue","closestValue","_createChangeEvent","tickInterval","trackSize","stepsPerTick","ceil","percentage","_sliderWrapper","valueText","displayValue","clientX","clientY","MatSliderModule","module","exports","extendStatics","d","Object","setPrototypeOf","__proto__","p","prototype","call","__extends","TypeError","__","create","__assign","assign","s","n","apply","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","rejected","result","done","__generator","f","g","label","sent","trys","ops","verb","Symbol","iterator","op","__spreadArray","pack","ar","l","concat","Bounds","w","h","fromClientRect","windowBounds","fromDOMRectList","domRectList","domRect","parseBounds","toCodePoints$1","str","codePoints","charCodeAt","extra","fromCodePoint$1","_i","fromCodePoint","codeUnits","codePoint","fromCharCode","chars$2","lookup$2","Uint8Array","i$2","view","buffer","view32","view16","slice16$1","Uint16Array","Trie$1","Trie","initialValue","errorValue","highStart","highValueIndex","ix","UTRIE2_DATA_BLOCK_LENGTH$1","UTRIE2_INDEX_1_OFFSET$1","UTRIE2_INDEX_2_BLOCK_LENGTH$1","SP","BA","HY","CL","CP","EX","IN","NS","OP","IS","NU","PO","PR","SY","AL","EB","EM","H2","H3","ID","JL","JV","JT","SA","ea_OP","BREAK_NOT_ALLOWED$1","BREAK_ALLOWED$1","UnicodeTrie$1","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","ArrayBuffer","bytes","decode$1","polyUint32Array$1","Uint32Array","polyUint16Array$1","headerLength","ALPHABETICS","HARD_LINE_BREAKS","SPACE$1","PREFIX_POSTFIX","LINE_BREAKS","KOREAN_SYLLABLE_BLOCK","HYPHEN","isAdjacentWithSpaceIgnored","classTypes","current","prev","previousNonSpaceClassType","_lineBreakAtIndex","indicies","forbiddenBreaks","beforeIndex","afterIndex","before","prevIndex","count","Break","lineBreak","HYPHEN_MINUS","PLUS_SIGN","EOF","isDigit","isHex","isWhiteSpace","isNameStartCodePoint","isLowerCaseLetter","isUpperCaseLetter","isLetter","isNonASCIICodePoint","isNameCodePoint","isNonPrintableCodePoint","isValidEscape","c1","c2","isIdentifierStart","c3","isNumberStart","stringToNumber","c","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","reconsumeCodePoint","consumeNumericToken","e1","e2","e3","consumeIdentLikeToken","a1","a2","a3","u1","u2","consumeUnicodeRangeToken","consumeWhiteSpace","shift","digits","questionMarks","digit","endDigits","consumeUrlToken","stringToken","consumeBadUrlRemnants","consumeEscapedCodePoint","consumeStringSlice","endingCodePoint","consumeNumber","repr","number","unit","hex","hexCodePoint","isSurrogateCodePoint","Parser","_tokens","tokenizer","parseValue","parseComponentValue","parseValues","parseComponentValues","SyntaxError","reconsumeToken","consumeComponentValue","values","consumeSimpleBlock","consumeFunction","block","isEndingTokenFor","functionToken","cssFunction","isDimensionToken","isNumberToken","isIdentToken","isStringToken","isIdentWithValue","nonWhiteSpace","nonFunctionArgSeparator","parseFunctionArgs","args","arg","Error","isLength","isLengthPercentage","parseLengthPercentageTuple","ZERO_LENGTH","FIFTY_PERCENT","HUNDRED_PERCENT","getAbsoluteValueForTuple","tuple","getAbsoluteValue","GRAD","TURN","angle","_context","PI","isAngle","parseNamedSide","ident","join","deg","color$1","colorFunction","SUPPORTED_COLOR_FUNCTIONS","r","substring","namedColor","COLORS","toUpperCase","TRANSPARENT","isTransparent","asString","alpha","blue","green","red","getTokenColorValue","rgb","hue2rgb","t1","t2","hue","hsl","saturation","lightness","hsla","rgba","parseColor","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","BACKGROUND_CLIP","backgroundClip","prefix","parse","PADDING_BOX","CONTENT_BOX","BORDER_BOX","backgroundColor","format","parseColorStop","stop","processColorStops","stops","lineLength","last","processStops","previous","stop_1","absoluteValue","gapBegin","stop_2","gapLength","gapValue","sqrt","findCorner","closest","reduce","stat","corner","optimumDistance","optimumCorner","Infinity","prefixLinearGradient","angle$1","firstToken","colorStop","CSSImageType","LINEAR_GRADIENT","CLOSEST_SIDE","FARTHEST_SIDE","CLOSEST_CORNER","FARTHEST_CORNER","CIRCLE","ELLIPSE","COVER","CONTAIN","prefixRadialGradient","shape","CSSRadialShape","CSSRadialExtent","isColorStop","acc","RADIAL_GRADIENT","image","image_1","url","URL","addImage","imageFunction","SUPPORTED_IMAGE_FUNCTIONS","isAtPosition_1","backgroundImage","isSupportedImage","backgroundOrigin","backgroundPosition","BACKGROUND_REPEAT","backgroundRepeat","parseBackgroundRepeat","NO_REPEAT","REPEAT_X","REPEAT_Y","REPEAT","BACKGROUND_SIZE","backgroundSize","isBackgroundSizeInfoToken","borderColorForSide","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderRadiusForSide","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","BORDER_STYLE","borderStyleForSide","NONE","DASHED","DOTTED","DOUBLE","SOLID","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderWidthForSide","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","bit","parseDisplayValue","FLOAT","float","LEFT","RIGHT","INLINE_START","INLINE_END","letterSpacing","LINE_BREAK","STRICT","NORMAL","lineHeight","computeLineHeight","fontSize","listStyleImage","LIST_STYLE_POSITION","listStylePosition","INSIDE","OUTSIDE","LIST_STYLE_TYPE","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","overflow","HIDDEN","SCROLL","CLIP","AUTO","VISIBLE","overflowWrap","paddingForSide","paddingTop","paddingRight","paddingBottom","paddingLeft","TEXT_ALIGN","textAlign","CENTER","POSITION","RELATIVE","ABSOLUTE","FIXED","STICKY","STATIC","textShadow","shadow","offsetX","offsetY","TEXT_TRANSFORM","textTransform","UPPERCASE","LOWERCASE","CAPITALIZE","transform$1","transformFunction","SUPPORTED_TRANSFORM_FUNCTIONS","matrix","matrix3d","DEFAULT_VALUE","DEFAULT","transformOrigin","origins","VISIBILITY","COLLAPSE","WORD_BREAK","wordBreak","BREAK_ALL","KEEP_ALL","auto","order","time","textDecorationColor","textDecorationLine","line","fontFamily","accumulator","results","fontWeight","fontVariant","FONT_STYLE","fontStyle","OBLIQUE","ITALIC","content","counterIncrement","increments","filtered","increment","counterReset","resets","quotes","getQuote","depth","quote","boxShadow","spread","inset","PAINT_ORDER_LAYER","paintOrder","FILL","STROKE","MARKERS","layers","webkitTextStrokeColor","webkitTextStrokeWidth","CSSParsedDeclaration","declaration","animationDuration","cssFloat","overflowTuple","overflowX","overflowY","textDecoration","isVisible","isTransformed","isPositioned","isPositionedWithZIndex","isFloating","isInlineLevel","CSSParsedPseudoDeclaration","CSSParsedCounterDeclaration","descriptor","parser","length_1","value_1","isDebugging","elementType","getAttribute","getElementDebugType","ElementContainer","textNodes","isHTMLElementNode","bounds","chars$1","lookup$1","i$1","slice16","UTRIE2_DATA_BLOCK_LENGTH","UTRIE2_INDEX_1_OFFSET","UTRIE2_INDEX_2_BLOCK_LENGTH","chars","lookup","L","V","LV","LVT","UnicodeTrie","_byteLength","decode","polyUint32Array","polyUint16Array","createTrieFromBase64","BREAK_NOT_ALLOWED","codePointToClass","_graphemeBreakAtIndex","_codePoints","countRI","GraphemeBreaker","toCodePoints","lastEnd","graphemeBreak","splitGraphemes","bk","breaker","graphemes","isGreenPixel","createForeignObjectSVG","xmlns","svg","createElementNS","foreignObject","setAttributeNS","loadSerializedSVG$1","img","Image","onload","onerror","src","encodeURIComponent","XMLSerializer","serializeToString","FEATURES","createRange","range","testElement","TEST_HEIGHT","selectNode","rangeBounds","rangeHeight","testRangeBounds","defineProperty","SUPPORT_RANGE_BOUNDS","wordSpacing","innerHTML","repeat","firstChild","textList","supports","text","setStart","setEnd","boundAhead","testIOSLineBreak","canvas","toDataURL","testSVG","fetch","fillStyle","fillRect","greenImageSrc","getImageData","catch","testForeignObject","crossOrigin","XMLHttpRequest","responseType","TextBounds","ownerDocument","wordSeparators","breakWords","types","indices","categories","classType","codePointsToCharacterClasses","isLetterNumber","letterNumber","cssFormattedClasses","forbiddenBreakpoints","nextIndex","LineBreaker","words","_loop_1","word_1","TextContainer","textBounds","breakText","SUPPORT_WORD_BREAKING","getRangeBounds","getClientRects","replacementNode","splitText","getWrapperBounds","parseTextBounds","replace","capitalize","m","p1","p2","ImageElementContainer","_super","_this","currentSrc","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","CanvasElementContainer","SVGElementContainer","baseVal","LIElementContainer","OLElementContainer","reversed","CHECKBOX_BORDER_RADIUS","RADIO_BORDER_RADIUS","CHECKBOX","RADIO","INPUT_COLOR","InputElementContainer","SelectElementContainer","option","selectedIndex","TextareaElementContainer","IFrameElementContainer","iframe","contentWindow","tree","parseTree","documentBackgroundColor","bodyBackgroundColor","LIST_OWNERS","parseNodeTree","root","childNode","nextNode","nextSibling","isTextNode","isElementNode","isSlotElement","assignedNodes","createContainer","createsRealStackingContext","createsStackingContext","tagName","isTextareaElement","isSVGElement","isSelectElement","isImageElement","isCanvasElement","isLIElement","isOLElement","isInputElement","isIFrameElement","isBodyElement","TEXT_NODE","isSVGElementNode","isStyleElement","isScriptElement","CounterState","counters","getCounterValue","getCounterValues","canReset","entry","counterNames","ROMAN_UPPER","createAdditiveCounter","symbols","fallback","suffix","createCounterText","string","integer","createCounterStyleWithSymbolResolver","codePointRangeLength","resolver","createCounterStyleFromRange","codePointRangeStart","codePointRangeEnd","createCounterStyleFromSymbols","createCJKCounter","numbers","multipliers","negativeSign","tmp","coefficient","CHINESE_INFORMAL_MULTIPLIERS","CHINESE_FORMAL_MULTIPLIERS","JAPANESE_NEGATIVE","KOREAN_NEGATIVE","appendSuffix","defaultSuffix","cjkSuffix","koreanSuffix","spaceSuffix","CJK_TEN_COEFFICIENTS","CJK_ZEROS","IGNORE_ATTRIBUTE","DocumentCloner","scrolledElements","quoteDepth","toIFrame","windowSize","createIFrameContainer","scrollX","pageXOffset","scrollY","pageYOffset","cloneWindow","documentClone","iframeLoad","iframeLoader","onclone","restoreNodeScroll","scrollTo","test","navigator","userAgent","logger","warn","clonedReferenceElement","fonts","ready","imagesReady","serializeDoctype","doctype","restoreOwnerScroll","adoptNode","createElementClone","createCanvasClone","createStyleClone","srcset","loading","sheet","cssRules","css","rule","cssText","textContent","error","inlineImages","info","clonedCanvas","clonedCtx","allowTaint","putImageData","gl","attribs","getContextAttributes","preserveDrawingBuffer","createTextNode","transitionProperty","styleBefore","styleAfter","createPseudoHideStyles","resolvePseudoContent","PseudoElementType","BEFORE","child","hasAttribute","ignoreElements","copyStyles","after","AFTER","copyCSSStyles","pseudoElt","anonymousReplacedElement","attr","counterStyle","counterState","counterType","delim","counterStates","counterType_1","separator","PSEUDO_HIDE_ELEMENT_CLASS_BEFORE","PSEUDO_HIDE_ELEMENT_CLASS_AFTER","newClassName","baseValue","cloneIframeContainer","border","scrolling","imageReady","all","images","setInterval","childNodes","readyState","clearInterval","ignoredStyleProperties","setProperty","internalSubset","publicId","systemId","PSEUDO_HIDE_ELEMENT_STYLE","createStyles","CacheStorage","getOrigin","link","_link","href","protocol","hostname","port","isSameOrigin","_origin","setContext","location","Cache","_options","_cache","isBlobImage","isRenderable","loadImage","match","useCORS","useProxy","isInlineImage","SUPPORT_CORS_IMAGES","proxy","SUPPORT_CORS_XHR","debug","isInlineBase64Image","imageTimeout","keys","SUPPORT_RESPONSE_TYPE","xhr","status","response","reader_1","FileReader","readAsDataURL","queryString","timeout_1","ontimeout","send","INLINE_SVG","INLINE_BASE64","INLINE_IMG","SUPPORT_SVG_DRAWING","isSVG","substr","PathType","equalPath","Vector","VECTOR","deltaX","deltaY","lerp","BezierCurve","startControl","endControl","BEZIER_CURVE","subdivide","firstHalf","ab","bc","cd","abbc","bccd","isBezierCurve","path","BoundCurves","tlh","tlv","trh","trv","_c","brh","brv","_d","blh","blv","factors","maxFactor","topWidth","rightHeight","bottomWidth","leftHeight","topLeftBorderDoubleOuterBox","getCurvePoints","CORNER","TOP_LEFT","topRightBorderDoubleOuterBox","TOP_RIGHT","bottomRightBorderDoubleOuterBox","BOTTOM_RIGHT","bottomLeftBorderDoubleOuterBox","BOTTOM_LEFT","topLeftBorderDoubleInnerBox","topRightBorderDoubleInnerBox","bottomRightBorderDoubleInnerBox","bottomLeftBorderDoubleInnerBox","topLeftBorderStroke","topRightBorderStroke","bottomRightBorderStroke","bottomLeftBorderStroke","topLeftBorderBox","topRightBorderBox","bottomRightBorderBox","bottomLeftBorderBox","topLeftPaddingBox","topRightPaddingBox","bottomRightPaddingBox","bottomLeftPaddingBox","topLeftContentBox","topRightContentBox","bottomRightContentBox","bottomLeftContentBox","r1","r2","kappa","ox","oy","xm","ym","calculateBorderBoxPath","curves","calculatePaddingBoxPath","TransformEffect","ClipEffect","OpacityEffect","isClipEffect","effect","StackingContext","inlineLevel","nonInlineLevel","negativeZIndex","zeroOrAutoZIndexOrTransformedOrOpacity","positiveZIndex","nonPositionedFloats","nonPositionedInlineLevel","ElementPaint","effects","borderBox","paddingBox","getEffects","inFlow","croplessEffects","parseStackTree","stackingContext","realStackingContext","listItems","treatAsRealStackingContext","paintContainer","listOwnerItems","parentStack","stack","order_1","index_1","index_2","processListItems","owner","numbering","listValue","parsePathForBorder","borderSide","createPathFromCurves","createStrokePathFromCurves","outer1","outer2","inner1","inner2","contentBox","calculateBackgroundRendering","intrinsicSize","backgroundPositioningArea","calculateBackgroundPositioningArea","getBackgroundValueForIndex","backgroundPaintingArea","calculateBackgroundPaintingArea","backgroundImageSize","calculateBackgroundSize","sizeWidth","sizeHeight","calculateBackgroundRepeatPath","isAuto","hasIntrinsicValue","intrinsicProportion","second","hasIntrinsicProportion","hasIntrinsicWidth","hasIntrinsicHeight","hasIntrinsicDimensions","width_3","height_3","SAMPLE_TEXT","FontMetrics","_data","parseMetrics","span","padding","verticalAlign","baseline","offsetTop","middle","getMetrics","Renderer","CanvasRenderer","_activeEffects","fontMetrics","translate","textBaseline","applyEffects","popEffect","applyEffect","save","isOpacityEffect","globalAlpha","isTransformEffect","clip","restore","renderStack","renderStackContent","renderNode","paint","renderNodeBackgroundAndBorders","renderNodeContent","renderTextWithLetterSpacing","fillText","letter","measureText","createFontStyle","variant","renderTextNode","font","paintOrderLayer","textShadows","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","strokeStyle","lineWidth","lineJoin","chrome","strokeText","renderReplacedElement","box","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","this_1","x0","x1","y0","y1","gradient_1","top_1","rx","ry","radialGradient_1","midX","midY","invF","createPattern","radian","centerX","centerY","atan2","getAngleFromCorner","sin","cos","halfWidth","halfHeight","halfLineLength","yDiff","xDiff","calculateGradientDirection","createLinearGradient","addColorStop","gradient","calculateRadius","createRadialGradient","renderSolidBorder","curvePoints","renderDoubleBorder","outerPaths","innerPaths","parsePathForBorderDoubleOuter","parsePathForBorderDoubleInner","hasBackground","borders","borders_1","calculateBackgroundCurvedPaintingArea","deltaW","deltaH","borderBoxArea","maskOffset","shadowPaintingArea","renderDashedDottedBorder","strokePaths","boxPaths","startX","startY","endX","endY","dashLength","spaceLength","useLineDash","numberOfDashes","minSpace","maxSpace","path1","path2","parsePathForBorderStroke","setLineDash","lineCap","stroke","calculateContentBoxPath","ForeignObjectRenderer","loadSerializedSVG","Logger","enabled","console","getTime","instances","Context","instanceName","instanceCount","logging","parseBackgroundColor","backgroundColorOverride","defaultBackgroundColor","opts","resourceOptions","contextOptions","windowOptions","foreignObjectRendering","cloneOptions","documentCloner","clonedElement","renderOptions","_q","_r","_s","_u","windowWidth","innerWidth","windowHeight","innerHeight","offsetWidth","offsetHeight","parseDocumentSize","devicePixelRatio","removeContainer","renderElement","ColorPickerComponent_div_2_Template","ctx_r1","cpUsePosition","arrowTop","ColorPickerComponent_div_3_Template","_r17","onColorChange","onDragStart","onDragEnd","ctx_r2","hueSliderColor","slider","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","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","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","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","_r86","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","inputChange","rg","numeric","SliderDirective","elRef","dragEnd","dragStart","listenerMove","move","listenerStop","mouseDown","touchStart","setCursor","getX","getY","rgX","rgY","SliderPosition","SliderDimension","ColorPickerService","active","setActive","cpDialogDisplay","closeDialog","hsva2hsla","hsva","hsla2hsva","hsvaToRgba","q","cmykToRgb","cmyk","rgbaToCmyk","rgbaToHsva","rgbaToHex","allowHex8","normalizeCMYK","denormalizeCMYK","denormalizeRGBA","stringToHsva","colorString","stringParsers","re","execResult","isNaN","exec","outputFormat","alphaChannel","ColorPickerComponent","cdRef","service","isIE10","dialogArrowSize","dialogArrowOffset","dialogInputFields","HEX","RGBA","HSLA","CMYK","useRootViewContainer","handleEsc","handleEnter","sliderDimMax","hueSlider","cpWidth","alphaSlider","cpCmykEnabled","cpOutputFormat","listenerMouseDown","onMouseDown","listenerResize","onResize","openDialog","initialColor","updateColorPicker","directiveElementRef","setInitialColor","openColorPicker","closeColorPicker","setupDialog","cpHeight","cpFallbackColor","cpColorMode","cpDisableInput","cpIgnoredElements","cpSaveClickOutside","cpCloseClickOutside","cpUseRootViewContainer","cpPosition","cpPositionOffset","cpPositionRelativeToArrow","cpTriggerElement","setColorMode","ua","msie","detectIE","directiveInstance","fallbackColor","setPresetConfig","mode","update","sliderH","setDialogPosition","sliderDragEnd","outputColor","sliderDragStart","isDescendant","colorSelected","cmykChanged","cmykColor","colorChanged","colorCanceled","availableFormats","nextFormat","sliderChanged","onHueChange","onValueChange","onAlphaChange","validHex","valid","inputChanged","presetColorsChanged","hidden","stateChanged","cmykInput","lastOutput","alphaSliderColor","transformNode","dialogHeight","dialogElement","boxDirective","createDialogBox","HTMLUnknownElement","boxParent","usePosition","elBounds","triggerElBounds","usePositionX","usePositionY","collisionTop","collisionBottom","collisionLeft","collisionRight","calculateAutoPositioning","ColorPickerDirective","injector","cfr","appRef","vcRef","_service","dialogCreated","ignoreChanges","viewAttachedToAppRef","cpToggle","cpDisabled","cpInputChange","cpToggleChange","cpSliderChange","cpSliderDragEnd","cpSliderDragStart","colorPickerOpen","colorPickerClose","colorPickerCancel","colorPickerSelect","colorPickerChange","cpCmykColorChange","cpPresetColorsChange","handleClick","inputFocus","handleFocus","handleInput","cmpRef","detachView","hostView","dialog","currentValue","colorPicker","changeDetectorRef","appInstance","componentTypes","Injector","viewContainerRef","compFactory","resolveComponentFactory","attachView","ReflectiveInjector","parentInjector","createComponent","ignore","ignored","ColorPickerModule","getNodeId","dataset","arId","findNodesById","ids","doc","findNodeById","BaseMutation","nodeOrId","new","old","nodeId","pageDoc","previewDoc","onInit","executeMutation","executed","undoMutation","execute","elId","nodeOrParentEditable","ReplaceNodeContent","el","oldContent","newContent","replaceContent","findEl","canReplace","BROWSER_SAFE_FONTS","family","category","GoogleFontService","lazyLoader","valueLists","googleFonts","google","families","loadAsset","FontDisplayNamePipe","GoogleFontSelectorComponent","activePage$","BehaviorSubject","chunkedFonts$","selectedFamily$","filters","query","from$","perPage","total$","to$","fonts$","combineLatest","page","chunkedFonts","allFonts","getAll","chunkFonts","fontSub","loadIntoDom","formSub","valueChanges","val","propagateChange","chunkSize","chunked","prevPage","nextPage","FontSelectorOverlayComponent","overlayRef","formControl","emitValue","icons","IconSelectorOverlayComponent","settings","allIcons","filteredIcons","searchControl","loadFontAwesome","styleSheets","includes","findSheet","CSSStyleRule","selectorText","endsWith","icon","getFontAwesomeIconList","getBaseUrl","BuilderBreakpoint","BuilderSidebarPanel","ContextType","addIdToPages","pages","BuilderStateService","breakpoint","Desktop","pages$","project$","inspectorPanel$","Elements","previewDocReloaded$","ReplaySubject","hover$","selected$","dragging$","resizing$","loading$","loadedAtLeastOnce$","delay","pageId","curr","html","dom","DOMParser","parseFromString","tw","createTreeWalker","NodeFilter","SHOW_ELEMENT","createDocFromHtml","Hover","hover","project","setActivePage","MutationsService","pointer","executed$","mutation","init","skipUndoStack","debounceFirst","debounceTimeout","pushOntoStack","canRedo","setPointer","undo","redo","newPointer","canUndo","LINK_TYPES","LinkEditorComponent","fb","linkTypes","anchors$","selectedType$","form","group","download","subject","gatherActivePageAnchors","hydrateForm","bindToSelectedTypeChange","skip","fileName","patchValue","submit","LinkEditor","overlayPanel","breakpoints","isMobile$","originX","originY","overlayX","overlayY","panelClass","BuilderOverlayService","component","originNode","inspectorEl","positionStrategy","overlay","flexibleConnectedTo","withPositions","hasBackdrop","InlineTextEditorComponent","mutations","linkEditor","currentState","getSelection","selectionSub","fromEvent","debounceTime","selection","anchorNode","fontName","bold","underline","strikethrough","italic","MutationObserver","addedNodes","attributeName","entries","lastCommand","observe","editableNode","attributes","childList","subtree","pickerSub","makeNodesNotEditable","disconnect","command","maybeExpandSelection","execCommand","iconBtn","afterClosed","insertIcon","panelRef","valueChanged","isCollapsed","anchorOffset","getRangeAt","modify","InlineTextEditor","EditableProp","ArchitectElControl","ElControlType","ArchitectElement","hiddenClasses","specificity","canEdit","Padding","Margin","Border","Attributes","Shadow","Background","defaultInspectorPanel","Inspector","canDrag","controls","resizable","contextMenu","contentCategories","allowedContent","allowedEls","ArchitectTextEl","editActionName","Text","ModifyAttributes","newProps","setLinkAttributes","props","changed","historyName","fragmentFromString","RenameNode","newName","changeNodeName","oldName","canChangeName","currentHtml","outerHTML","RegExp","fragment","replaceWith","ContextBoxes","nodeIsHtmlOrBody","hideBox","getBox","showBox","remove","Selected","hoverBox","selectedBox","ReplaceClass","oldClassName","replaceClass","newClass","oldClass","getNodeIndex","children","childId","DeleteNode","deletedEl","parentId","nodeIndex","canDelete","parentEl","CloneNode","cloneId","canClone","cloneEl","insertNodeAtIndex","prepend","currentNodeIndex","append","addIdToNode","recursive","InsertNode","newParent","canInsertInto","insertedEl","MoveNode","oldIndex","oldParentId","newParentId","canMoveNodeInto","BuilderDocumentActions","contextBoxes","getCloneId","hideBoxes","copiedNode","copyNode","nextElementSibling","canInsert","parentParent","previousElementSibling","childElementCount","LivePreviewContextMenuComponent","currentUser","actions","livePreview","cutNode","pasteNode","setSelectedContext","moveSelected","selectParent","selectChild","cut","copy","paste","duplicate","getScrollTop","ActiveProject","projectUrl","projects","toast","localStorage","saving","bindToBuilderDocumentChangeEvent","thumbnail","payload","createThumbnail","model","js","toPromise","relative","getProductionUrl","base","head","querySelector","html2canvas","generateThumbnail","LivePreview","zone","textEditor","parsedProject","keybinds","activeProject","onIframeLoad","srcdoc","buildSrcDoc","bindToUndoCommandExecuted","registerKeybinds","previewContainer","repositionBox","log","getDisplayName","contentDocument","addIframeCss","bindToIframeEvents","promises","hammer","Hammer","Manager","doubleTap","Tap","taps","listenForHover","listenForClick","listenForDoubleClick","listenForContextMenu","listenOn","setHoverContext","handleLinkClick","handleFormSubmitButtonClick","on","editAction","getAssetUrl","ParagraphEl","DividerEl","MarkedTextEl","DefinitionListEl","BlockquoteEl","ListItemEl","UnorderedListEl","BodyEl","ButtonEl","DivContainerEl","SectionEl","FooterEl","HeaderEl","HeadingEl","Select","defaultValue","onChange","IconEl","o","currentSize","class","GenericEl","LabelEl","SvgEl","hasClass","PageHeaderEl","ProgressBarEl","ListGroupEl","CardEl","AlertEl","BadgeEl","ButtonGroupEl","ButtonToolbarEl","InputFieldEl","Input","TextAreaEl","inputType","rows","CheckboxEl","InputGroupEl","FormGroupEl","LinkEl","AddonEl","SelectEl","ImageEl","uri","httpParams","diskPrefix","files","getImageUrl","fileEntry","ResponsiveVideoEl","ImageGridEl","createColumnNode","col","getColumnSpan","getRowColumns","row","ApplyRowPreset","rowId","preset","modifiedRow","applyPreset","originalRowContent","rowNode","columns","resizeColumn","addNewColumn","newSpan","operator","full","oldSpan","refIndex","colsAfter","getTotalSpan","colWiderThan","fitColumn","colsBefore","isColumn","colIds","totalSpan","colNode","CONTAINER_CLASS","LayoutPanel","containers","rowIds","nodes","getNodeIds","refId","scrollIntoView","selectedRow","LayoutEl","RowEl","ColumnEl","ContainerEl","selectRow","selectedContainer","cont","behavior","inline","Layout","selectActiveRowAndContainer","TableEl","currentType","TheadEl","TbodyEl","TrEl","TdEl","FormEl","action","ImageHeaderEl","JumbotronEl","UserProfileEl","SkillListEl","ServiceListEl","PricingTableEl","NavbarEl","MediaObjectEl","MaterialBoxEl","ELEMENT_DEFAULTS","i18n","categories$","matcher","customElements","fetchCustomEls","import","components","aceThemes","CodeEditorComponent","activeEditorTheme","editorThemes","activeEditor","initEditor","updateEditorContents","editor","setTheme","changeEditorMode","setEditorValue","getValue","setValue","language","ace","edit","editorEl","useTheme","$blockScrolling","getSession","setMode","reloadAssetsInBuilder","closeEditor","cssEl","cssUrl","pathname","jsEl","jsUrl","switchType","saveCustomCode","CodeEditor","isOpen","mobilePosition","LivePreviewScroller","bindMouseWheel","unbindMouseWheel","stopScrolling","pointY","previewHeight","scrollFrameUp","scrollFrameDown","scrollDownTimeout","scrollUpTimeout","wheelSub","setScrollTop","newScrollTop","DeviceSwitcherComponent","visible","getWidthFromIndex","Phone","Tablet","Laptop","switchDevice","coordsAboveNode","DRAG_EL_CLASS","BaseDragAndDrop","directiveHost","scroller","draggingCol","initHammer","getHammerElement","pan","Pan","DIRECTION_ALL","onDrag","previewOffset","setDragElement","dragData","oldParent","center","dragHelper","reposition","under","sortColumns","repositionDropHelper","shouldMutate","moveDropHelper","relativeY","helper","dropHelper","dragNode","DragElFromSidebarToPreviewDirective","custom_element_css","newHref","reloadAsset","ElementsPanelComponent","SpacingType","SetIdAttribute","newId","setId","SyncElClasses","classes","syncClasses","isInternalClass","ChangeVisibility","sm","allVisible","allHidden","ElementControlsComponent","controlType","control","createControl","addControl","AttributesPanelComponent","md","lg","xl","classControl","onElementSelected","emitEvent","changeVisibility","changeElId","DEFAULT_CSS_VALUES","backgroundAttachment","borderColor","borderStyle","borderRadius","borderWidth","SetStyle","setStyleProps","isTheSameValue","isDefaultValue","styleEquals","SetBgColor","SetBgImage","BACKGROUND_PROPS","ResetBg","oldProps","uploadedImgBg","configId","configLabel","flatColorBg","BACKGROUND_LIST","GRADIENT_LIST","BackgroundSelectorGradientComponent","overlayPanelRef","gradients","BackgroundSelectorImgComponent","uploadQueue","imgValidator","bgUrl","imgUploaded","selectedBg","validator","disk","LabelFromFilenamePipe","BackgroundSelectorComponent","backgrounds","selectedBg$","bg","setFlatColorBg","selectBackground","oldColor","newBg","BeColorPickerModule","MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","MAT_BUTTON_TOGGLE_GROUP","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","MatButtonToggleGroup","uniqueIdCounter","MatButtonToggleChange","_multiple","_onTouched","appearance","_buttonToggles","_selectionModel","multiple","_setSelectionByValue","SelectionModel","select","_syncButtonToggle","isUserInput","deferEvents","deselect","_updateModelValue","_isSelected","isSelected","_isPrechecked","_rawValue","_clearSelection","_selectValue","correspondingOption","MatButtonToggle","MatButtonToggleBase","_MatButtonToggleMixinBase","toggleGroup","defaultTabIndex","_isSingleSelector","parsedTabIndex","Number","buttonToggleGroup","_appearance","_buttonElement","_onButtonClick","newChecked","buttonId","MatButtonToggleModule","BackgroundOverlayComponent","compact","bgControl","initialValues","setBgPosition","BackgroundPanelComponent","previewBgColor$","previewBgImg$","updatePreviewColorAndImg","currentColor","getSelectedStyle","bgImage","openColorpickerPanel","openBackgroundPanel","resetBackground","SetTextShadow","SetBoxShadow","arraysAreEqual","arr1","arr2","DEFAULT_PROPS","ShadowPanelFormComponent","builderActions","sliderControls","activeColor$","disable","applyStyle","getSelectedElShadowProps","shadowValue","formValueAsShadowString","colorButton","strict","aProps","getOwnPropertyNames","bProps","propName","propA","propB","objectsAreEqual","shadowString","ShadowsPanelComponent","shadowTypeControl","activeType$","SetPadding","SetMargin","SetBorder","SetBorderRadius","SetBorderWidth","SideControlBorderComponent","SpacingPanelComponent","sliderMax","availableSides","sliderValue","enabledSides","spacing","cornersConnected$","sidesForm","updateOn","BorderRadius","sideValue","setSelectedElementSpacingValues","applySpacing","u","sideEnabled","getSpacingMutation","BorderWidth","generateCssRuleName","allSpacingValuesEqual","generateBorderRadiusRuleName","toggleSide","onSliderInput","onFormSubmit","toggleCornersConnected","SetTextStyle","TypographyPanelComponent","baseFonts","fontWeights","setSelectedElementTextStyles","openFontPicker","onFontSizeBlur","toggleTextStyle","SetBorderColor","SetBorderStyle","BorderStyleControlsComponent","builderOverlay","setInitialBorderStyles","applyBorderStyle","InspectorPanelComponent","spacingType","editableProp","contextType","presetStringToToArray","ColumnPresetsComponent","customPanelOpen","customPresetIsValid","customPresetControl","validSpans","sum","presetIsValid","customPreset","customInput","selectPreset","toggleCustomPanel","layoutPanel","LayoutPanelComponent","trackByFn","loadContainers","getNodeList","reorder","getMetaTagValue","getTitleTagValue","innerText","setMetaTagValue","UpdateSeoTags","tags","keywords","setTitleTagValue","title","description","PagesPanelComponent","activePageControl","pageForm","hydrateUpdateModel","addPage","pageValue","getRawValue","activePage","pageName","createNewPage","deleteSelectedPage","duplicateSelectedPage","updateSelectedPage","BuilderSidebarComponent","codeEditor","modal","inspectorPanel","setOrigin","settingsModalRef","newWindow","baseUrl","deviceSwitcher","PreviewDragAndDropDirective","nodeUnderCursor","ResizeNode","maxHeight","maxWidth","ElementResizerDirective","iframeBody","previewWidth","aspectRatio","newWidth","finalWidth","newHeight","finalHeight","resizeAndPreserveAspectRatio","oldWidth","oldHeight","ContextBoxComponent","showActions$","builder","hoverContextActions","selectedContextActions","LivePreviewComponent","dragOverlay","DragVisualHelperComponent","MainLoaderComponent","routes","HtmlBuilderComponent","route","inlineTextEditor","projectApi","router","inspectorHidden","forkJoin","snapshot","params","setProject","canOpenProjectInBuilder","navigate","hasPermission","users","toggleInspector","canActivate","HtmlBuilderRoutingModule","BackgroundSelectorModule","GoogleFontSelectorModule","HtmlBuilderModule","AppearanceImageUploadValidator","DEFAULT_MAX_SIZE_MB","validations","maxSize","Keycodes","Keybinds","bindings","keybind","parseKeybindString","keybindString","fireIfInputFocused","executeBindings","binding","bindingMatches","ctrlKey","ctrl","metaKey","shiftKey","parts","parsed","ChipInputComponent","emailsInput","selectMode","items$","suggestedValues$","suggestFn","bindToSearchControl","parseEmailsOnPaste","propagate","matAutocomplete","findValueIndex","inputEl","of","emails","clipboardData","getData","rangeCount","deleteFromDocument","email","addFromAutocomplete","ColorPickerInputModule","ColorpickerPanelComponent","getInitialColor","click","emitSelectedEvent","RIGHT_POSITION","SkeletonModule","removeNullFromObject","obj","filterDatatableData","dataStr","objectToStr","transformedFilter","filterPredicate","currentTerm","UploadQueueItem","file","queueId","canceled$","processing$","uploadedResponse$","progress$","error$","customData","uploadedFile","completed","finalize","setProgress","eta","message","AllowedExtensionsValidation","errorMessage","extensions","extension","BlockedExtensionsValidation","DefaultUploadValidator","DEFAULT_MAX_FILE_SIZE_MB","showToast","getMaxFileSize","allowedExtensions","getAllowedExtensions","blockedExtensions","getBlockedExtensions","convertToBytes","getJson","UploadQueueService","api","defaultValidator","uploads$","totalProgress$","uploadsAdded$","count$","pending","queueItem","progress","upload","asObservable","uploadQueueItems","transformUploads","replacements","transformed","updateCount","mergeMap","uploadQueueItem","catchError","errResponse","handleUploadFailure","bubbleError","throwError","E","handleUploadEvent","willProcessFiles","queueItemId","speed","totalBytes","completedBytes","updateTotalProgress","addError","cancel","activeUpload","validate","failed","updateProgress","completeUpload","msg","errors","showLearnMoreButton","isAdmin","errorUpload","onAction","inProgress"],"mappings":"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AAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpDkF,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,WAGJqW,GAAS,CACTvb,SAAU,CACN,IAAO,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC7G,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpDkF,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,WAGJkW,GAAW,CACXpb,SAAU,CACN,IAAO,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1G,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE5DkF,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,SACA,WAGJ8qB,GAAwB,SAAU93D,EAAOmX,EAAKC,EAAK2gD,EAASC,EAAUC,GACtE,OAAIj4D,EAAQmX,GAAOnX,EAAQoX,EAChB8gD,GAAkBl4D,EAAOg4D,EAAUC,EAAO7zD,OAAS,GAEtD2zD,EAA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","file":"953.f9f3e371f5129de909b4.js","sourcesContent":["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, 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 * Toggles whether an element is visible while preserving its dimensions.\n * @param element Element whose visibility to toggle\n * @param enable Whether the element should be visible.\n * @docs-private\n */\nfunction toggleVisibility(element, enable) {\n const styles = element.style;\n styles.position = enable ? '' : 'fixed';\n styles.top = styles.opacity = enable ? '' : '0';\n styles.left = enable ? '' : '-999em';\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// Counter for unique cloned radio button names.\nlet cloneUniqueId = 0;\n/** Transfers the data of one input element to another. */\nfunction transferInputData(source, clone) {\n // Browsers throw an error when assigning the value of a file input programmatically.\n if (clone.type !== 'file') {\n clone.value = source.value;\n }\n // Radio button `name` attributes must be unique for radio button groups\n // otherwise original radio buttons can lose their checked state\n // once the clone is inserted in the DOM.\n if (clone.type === 'radio' && clone.name) {\n clone.name = `mat-clone-${clone.name}-${cloneUniqueId++}`;\n }\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;\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 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 const container = this._dropContainer;\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 (!container || (!container.isDragging() && !container.isReceiving())) {\n // Prevent the default action as soon as the dragging sequence is considered as\n // \"started\" since waiting for the next event can allow the device to begin scrolling.\n event.preventDefault();\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 // We prevent the default action down here so that we know that dragging has started. This is\n // important for touch devices where doing this too early can unnecessarily block scrolling,\n // if there's a dragging delay.\n event.preventDefault();\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).withParent(_config.parentDragRef || null);\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 this._handles.forEach(handle => toggleNativeDragInteractions(handle, newValue));\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, this.disabled));\n this._toggleNativeDragInteractions();\n // Delete any lingering disabled handles that may have been destroyed. Note that we re-create\n // the set, rather than iterate over it and filter out the destroyed handles, because while\n // the ES spec allows for sets to be modified while they're being iterated over, some polyfills\n // use an array internally which may throw an error.\n const disabledHandles = new Set();\n this._disabledHandles.forEach(handle => {\n if (this._handles.indexOf(handle) > -1) {\n disabledHandles.add(handle);\n }\n });\n this._disabledHandles = disabledHandles;\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 /** Sets the parent ref that the ref is nested in. */\n withParent(parent) {\n this._parentDragRef = parent;\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 = this._parentDragRef = 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._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n toggleNativeDragInteractions(handle, true);\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 if (this._disabledHandles.has(handle)) {\n this._disabledHandles.delete(handle);\n toggleNativeDragInteractions(handle, this.disabled);\n }\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 // Needs to happen before the root element is moved.\n const shadowRoot = this._getShadowRoot();\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 toggleVisibility(element, false);\n this._document.body.appendChild(parent.replaceChild(placeholder, element));\n getPreviewInsertionPoint(this._document, shadowRoot).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 // Stop propagation if the item is inside another\n // draggable so we don't start multiple drag sequences.\n if (this._parentDragRef) {\n event.stopPropagation();\n }\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 toggleVisibility(this._rootElement, true);\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._initialIndex, this._initialContainer, isPointerOverContainer, distance);\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 * 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 === undefined) {\n this._cachedShadowRoot = _getShadowRoot(this._rootElement);\n }\n return this._cachedShadowRoot;\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, shadowRoot) {\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 shadowRoot ||\n 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 * 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 /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n this.autoScrollStep = 2;\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 /** Functions that is used to determine whether an item can be sorted into a particular index. */\n this.sortPredicate = () => 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 /** Draggable items in the container. */\n this._draggables = [];\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 const scrollStep = this.autoScrollStep;\n if (this._verticalScrollDirection === 1 /* UP */) {\n incrementVerticalScroll(node, -scrollStep);\n }\n else if (this._verticalScrollDirection === 2 /* DOWN */) {\n incrementVerticalScroll(node, scrollStep);\n }\n if (this._horizontalScrollDirection === 1 /* LEFT */) {\n incrementHorizontalScroll(node, -scrollStep);\n }\n else if (this._horizontalScrollDirection === 2 /* RIGHT */) {\n incrementHorizontalScroll(node, scrollStep);\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 this._draggingStarted();\n this._notifyReceivingSiblings();\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._draggingStarted();\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 // Notify siblings at the end so that the item has been inserted into the `activeDraggables`.\n this._notifyReceivingSiblings();\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 previousIndex Index of the item when dragging started.\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 */\n drop(item, currentIndex, previousIndex, previousContainer, isPointerOverContainer, distance) {\n this._reset();\n this.dropped.next({\n 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 || !this._clientRect ||\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 /** Starts the dragging sequence within the list. */\n _draggingStarted() {\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._viewportScrollSubscription.unsubscribe();\n this._listenToScrollEvents();\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 const index = 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 return (index === -1 || !this.sortPredicate(index, item, this)) ? -1 : index;\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 this._clientRect != null && 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 (!this._clientRect || !isInsideClientRect(this._clientRect, x, y) ||\n !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, items) {\n const activeSiblings = this._activeSiblings;\n if (!activeSiblings.has(sibling) && items.every(item => {\n // Note that we have to add an exception to the `enterPredicate` for items that started off\n // in this drop list. The drag ref has logic that allows an item to return to its initial\n // container, if it has left the initial container and none of the connected containers\n // allow it to enter. See `DragRef._updateActiveDropContainer` for more context.\n return this.enterPredicate(item, this) || this._draggables.indexOf(item) > -1;\n })) {\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 /** Notifies any siblings that may potentially receive the item. */\n _notifyReceivingSiblings() {\n const draggedItems = this._activeDraggables.filter(item => item.isDragging());\n this._siblings.forEach(sibling => sibling._startReceiving(this, draggedItems));\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 = [];\n /** Keeps track of the event listeners that we've bound to the `document`. */\n this._globalListeners = new Map();\n /**\n * Predicate function to check if an item is being dragged. Moved out into a property,\n * because it'll be called a lot and we don't want to create a new function every time.\n */\n this._draggingPredicate = (item) => item.isDragging();\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.length > 0) {\n event.preventDefault();\n }\n };\n /** Event listener for `touchmove` that is bound even if no dragging is happening. */\n this._persistentTouchmoveListener = (event) => {\n if (this._activeDragInstances.length > 0) {\n // Note that we only want to prevent the default action after dragging has actually started.\n // Usually this is the same time at which the item is added to the `_activeDragInstances`,\n // but it could be pushed back if the user has set up a drag delay or threshold.\n if (this._activeDragInstances.some(this._draggingPredicate)) {\n event.preventDefault();\n }\n this.pointerMove.next(event);\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._persistentTouchmoveListener, 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._persistentTouchmoveListener, 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.indexOf(drag) > -1) {\n return;\n }\n this._activeDragInstances.push(drag);\n if (this._activeDragInstances.length === 1) {\n const isTouchEvent = event.type.startsWith('touch');\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(isTouchEvent ? 'touchend' : 'mouseup', {\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 // We don't have to bind a move event for touch drag sequences, because\n // we already have a persistent global one bound from `registerDragItem`.\n if (!isTouchEvent) {\n this._globalListeners.set('mousemove', {\n handler: (e) => this.pointerMove.next(e),\n options: activeCapturingEventOptions\n });\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 const index = this._activeDragInstances.indexOf(drag);\n if (index > -1) {\n this._activeDragInstances.splice(index, 1);\n if (this._activeDragInstances.length === 0) {\n this._clearGlobalListeners();\n }\n }\n }\n /** Gets whether a drag item instance is currently being dragged. */\n isDragging(drag) {\n return this._activeDragInstances.indexOf(drag) > -1;\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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 * 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/**\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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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/**\n * Asserts that a particular node is an element.\n * @param node Node to be checked.\n * @param name Name to attach to the error message.\n */\nfunction assertElementNode(node, name) {\n if (node.nodeType !== 1) {\n throw Error(`${name} must be attached to an element node. ` +\n `Currently attached to \"${node.nodeName}\".`);\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/** 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, _scrollDispatcher, _dir, _group, config) {\n this.element = element;\n this._changeDetectorRef = _changeDetectorRef;\n this._scrollDispatcher = _scrollDispatcher;\n this._dir = _dir;\n this._group = _group;\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 /** Functions that is used to determine whether an item can be sorted into a particular index. */\n this.sortPredicate = () => 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 if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDropList');\n }\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._dropListRef.sortPredicate =\n (index, drag, drop) => {\n return this.sortPredicate(index, 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 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\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 if (!this._scrollableParentsResolved) {\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.autoScrollStep = coerceNumberProperty(this.autoScrollStep, 2);\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(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST_GROUP, 12), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8)); };\nCdkDropList.ɵdir = /*@__PURE__*/ ɵ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.ɵɵattribute(\"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\"], sortPredicate: [\"cdkDropListSortPredicate\", \"sortPredicate\"], disabled: [\"cdkDropListDisabled\", \"disabled\"], sortingDisabled: [\"cdkDropListSortingDisabled\", \"sortingDisabled\"], autoScrollDisabled: [\"cdkDropListAutoScrollDisabled\", \"autoScrollDisabled\"], orientation: [\"cdkDropListOrientation\", \"orientation\"], lockAxis: [\"cdkDropListLockAxis\", \"lockAxis\"], data: [\"cdkDropListData\", \"data\"], autoScrollStep: [\"cdkDropListAutoScrollStep\", \"autoScrollStep\"] }, 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: ScrollDispatcher },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: CdkDropListGroup, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DROP_LIST_GROUP,] }, { type: SkipSelf }] },\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 sortPredicate: [{ type: Input, args: ['cdkDropListSortPredicate',] }],\n autoScrollDisabled: [{ type: Input, args: ['cdkDropListAutoScrollDisabled',] }],\n autoScrollStep: [{ type: Input, args: ['cdkDropListAutoScrollStep',] }],\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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 '[attr.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: ɵngcc1.ScrollDispatcher }, { 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: 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 }], sortPredicate: [{\n type: Input,\n args: ['cdkDropListSortPredicate']\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 }], autoScrollStep: [{\n type: Input,\n args: ['cdkDropListAutoScrollStep']\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 `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 if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDragHandle');\n }\n this._parentDrag = parentDrag;\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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 */\nconst DRAG_HOST_CLASS = 'cdk-drag';\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, \n /**\n * @deprecated `_document` parameter no longer being used and will be removed.\n * @breaking-change 12.0.0\n */\n _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef, _selfHandle, _parentDrag) {\n this.element = element;\n this.dropContainer = dropContainer;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._selfHandle = _selfHandle;\n this._parentDrag = _parentDrag;\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 // We have to keep track of the drag instances in order to be able to match an element to\n // a drag instance. We can't go through the global registry of `DragRef`, because the root\n // element could be different.\n CdkDrag._dragInstances.push(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\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 const index = CdkDrag._dragInstances.indexOf(this);\n if (index > -1) {\n CdkDrag._dragInstances.splice(index, 1);\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 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n assertElementNode(rootElement, 'cdkDrag');\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 ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n !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 // This only needs to be resolved once.\n ref.beforeStarted.pipe(take(1)).subscribe(() => {\n var _a, _b;\n // If we managed to resolve a parent through DI, use it.\n if (this._parentDrag) {\n ref.withParent(this._parentDrag._dragRef);\n return;\n }\n // Otherwise fall back to resolving the parent by looking up the DOM. This can happen if\n // the item was projected into another item by something like `ngTemplateOutlet`.\n let parent = this.element.nativeElement.parentElement;\n while (parent) {\n // `classList` needs to be null checked, because IE doesn't have it on some elements.\n if ((_a = parent.classList) === null || _a === void 0 ? void 0 : _a.contains(DRAG_HOST_CLASS)) {\n ref.withParent(((_b = CdkDrag._dragInstances.find(drag => {\n return drag.element.nativeElement === parent;\n })) === null || _b === void 0 ? void 0 : _b._dragRef) || null);\n break;\n }\n parent = parent.parentElement;\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), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12)); };\nCdkDrag.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDrag, selectors: [[\"\", \"cdkDrag\", \"\"]], contentQueries: function CdkDrag_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PREVIEW, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PLACEHOLDER, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_HANDLE, 5);\n } if (rf & 2) {\n let _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._dragInstances = [];\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 { type: CdkDrag, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [CDK_DRAG_PARENT,] }] }\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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDrag, [{\n type: Directive,\n args: [{\n selector: '[cdkDrag]',\n exportAs: 'cdkDrag',\n host: {\n 'class': DRAG_HOST_CLASS,\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 }] }, { type: CdkDrag, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }, {\n type: Inject,\n args: [CDK_DRAG_PARENT]\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.ɵfac = function DragDropModule_Factory(t) { return new (t || DragDropModule)(); };\nDragDropModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DragDropModule });\nDragDropModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [\n DragDrop,\n ], imports: [CdkScrollableModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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(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\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_PARENT, CDK_DRAG_PLACEHOLDER, CDK_DRAG_PREVIEW, CDK_DROP_LIST, CDK_DROP_LIST_GROUP, CdkDrag, CdkDragHandle, CdkDragPlaceholder, CdkDragPreview, CdkDropList, CdkDropListGroup, DragDrop, DragDropModule, DragDropRegistry, DragRef, DropListRef, copyArrayItem, moveItemInArray, transferArrayItem };\n\n//# sourceMappingURL=drag-drop.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 if (this._multi) {\n this._openCloseAllActions.next(true);\n }\n }\n /** Closes all enabled accordion items in an accordion where multi is enabled. */\n closeAll() {\n this._openCloseAllActions.next(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n this._openCloseAllActions.complete();\n }\n}\nCdkAccordion.ɵfac = function CdkAccordion_Factory(t) { return new (t || CdkAccordion)(); };\nCdkAccordion.ɵdir = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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.ɵfac = function CdkAccordionModule_Factory(t) { return new (t || CdkAccordionModule)(); };\nCdkAccordionModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CdkAccordionModule });\nCdkAccordionModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkAccordionModule, [{\n type: NgModule,\n args: [{\n exports: [CdkAccordion, CdkAccordionItem],\n declarations: [CdkAccordion, CdkAccordionItem]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkAccordionModule, { declarations: [CdkAccordion, CdkAccordionItem], exports: [CdkAccordion, CdkAccordionItem] }); })();\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 { MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y';\nimport { distinctUntilChanged, startWith, filter, take } from 'rxjs/operators';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\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 = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelContent, selectors: [[\"ng-template\", \"matExpansionPanelContent\", \"\"]] });\nMatExpansionPanelContent.ctorParameters = () => [\n { type: TemplateRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 * 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 = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatExpansionPanel, selectors: [[\"mat-expansion-panel\"]], contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelContent, 5);\n } if (rf & 2) {\n let _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, 5);\n } if (rf & 2) {\n let _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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 }] }); })();\n/**\n * Actions of a `<mat-expansion-panel>`.\n */\nclass MatExpansionPanelActionRow {\n}\nMatExpansionPanelActionRow.ɵfac = function MatExpansionPanelActionRow_Factory(t) { return new (t || MatExpansionPanelActionRow)(); };\nMatExpansionPanelActionRow.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelActionRow, selectors: [[\"mat-action-row\"]], hostAttrs: [1, \"mat-action-row\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 * Header element of a `<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, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n }\n else {\n this._element.nativeElement.focus(options);\n }\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 = /*@__PURE__*/ ɵ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 ? -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}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\\\"\\\"}\\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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\\\"\\\"}\\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 * Description element of a `<mat-expansion-panel-header>`.\n */\nclass MatExpansionPanelDescription {\n}\nMatExpansionPanelDescription.ɵfac = function MatExpansionPanelDescription_Factory(t) { return new (t || MatExpansionPanelDescription)(); };\nMatExpansionPanelDescription.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelDescription, selectors: [[\"mat-panel-description\"]], hostAttrs: [1, \"mat-expansion-panel-header-description\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 * Title element of a `<mat-expansion-panel-header>`.\n */\nclass MatExpansionPanelTitle {\n}\nMatExpansionPanelTitle.ɵfac = function MatExpansionPanelTitle_Factory(t) { return new (t || MatExpansionPanelTitle)(); };\nMatExpansionPanelTitle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatExpansionPanelTitle, selectors: [[\"mat-panel-title\"]], hostAttrs: [1, \"mat-expansion-panel-header-title\"] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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().withHomeAndEnd();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n this._keyManager.onKeydown(event);\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._ownHeaders.destroy();\n }\n}\nMatAccordion.ɵfac = /*@__PURE__*/ function () { let ɵMatAccordion_BaseFactory; return function MatAccordion_Factory(t) { return (ɵMatAccordion_BaseFactory || (ɵMatAccordion_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAccordion)))(t || MatAccordion); }; }();\nMatAccordion.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAccordion, selectors: [[\"mat-accordion\"]], contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatExpansionPanelHeader, 5);\n } if (rf & 2) {\n let _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};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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.ɵfac = function MatExpansionModule_Factory(t) { return new (t || MatExpansionModule)(); };\nMatExpansionModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatExpansionModule });\nMatExpansionModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, MatCommonModule, CdkAccordionModule, PortalModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatExpansionModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, 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(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatExpansionModule, { declarations: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; }, imports: function () { return [CommonModule, MatCommonModule, CdkAccordionModule, PortalModule]; }, exports: function () { return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]; } }); })();\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 { InjectionToken, forwardRef, EventEmitter, Directive, ChangeDetectorRef, Output, Input, ContentChildren, ElementRef, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, NgModule } from '@angular/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceNumberProperty } 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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ function () { let ɵMatRadioGroup_BaseFactory; return function MatRadioGroup_Factory(t) { return (ɵMatRadioGroup_BaseFactory || (ɵMatRadioGroup_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatRadioGroup)))(t || MatRadioGroup); }; }();\nMatRadioGroup.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatRadioGroup, selectors: [[\"mat-radio-group\"]], contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatRadioButton, 5);\n } if (rf & 2) {\n let _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};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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, tabIndex) {\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 if (tabIndex) {\n this.tabIndex = coerceNumberProperty(tabIndex, 0);\n }\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, origin) {\n if (origin) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n }\n else {\n this._inputElement.nativeElement.focus(options);\n }\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 if (this.checked) {\n this.radioGroup.selected = this;\n }\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), ɵngcc0.ɵɵdirectiveInject(String)); };\n_MatRadioButtonBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatRadioButtonBase, viewQuery: function _MatRadioButtonBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n } if (rf & 2) {\n let _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 { type: String }\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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 }, { type: String }]; }, { 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, tabIndex) {\n super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex);\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), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatRadioButton.ɵcmp = /*@__PURE__*/ ɵ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\", null)(\"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, \"span\", 2);\n ɵngcc0.ɵɵelement(3, \"span\", 3);\n ɵngcc0.ɵɵelement(4, \"span\", 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, \"span\", 7);\n ɵngcc0.ɵɵelement(8, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"span\", 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;display:block;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;display:block;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}._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;top:0;left:0}.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 { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 <span class=\\\"mat-radio-container\\\">\\n <span class=\\\"mat-radio-outer-circle\\\"></span>\\n <span class=\\\"mat-radio-inner-circle\\\"></span>\\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 <span 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 <span class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></span>\\n </span>\\n </span>\\n\\n <!-- The label content for radio control. -->\\n <span 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 </span>\\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 removed since it causes some a11y issues (see #21266).\n '[attr.tabindex]': 'null',\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;display:block;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;display:block;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}._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;top:0;left:0}.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 }] }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\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.ɵfac = function MatRadioModule_Factory(t) { return new (t || MatRadioModule)(); };\nMatRadioModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatRadioModule });\nMatRadioModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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(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\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 { 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 = oldValue;\n // Emit a change and input event if the value changed.\n if (oldValue != this.value) {\n this._emitInputEvent();\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 event.preventDefault();\n this._removeGlobalEvents();\n this._isSliding = false;\n if (this._valueOnSlideStart != this.value && !this.disabled) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = this._lastPointerEvent = null;\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 && value !== this.min && value !== this.max) {\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 = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSlider, selectors: [[\"mat-slider\"]], viewQuery: function MatSlider_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._sliderWrapper = _t.first);\n } }, hostAttrs: [\"role\", \"slider\", 1, \"mat-slider\", \"mat-focus-indicator\"], hostVars: 29, 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-valuetext\", ctx.valueText == null ? ctx.displayValue : ctx.valueText)(\"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\", valueText: \"valueText\" }, 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;-webkit-print-color-adjust:exact;color-adjust:exact}.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 valueText: [{ 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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 // NVDA and Jaws appear to announce the `aria-valuenow` by calculating its percentage based\n // on its value between `aria-valuemin` and `aria-valuemax`. Due to how decimals are handled,\n // it can cause the slider to read out a very long value like 0.20000068 if the current value\n // is 0.2 with a min of 0 and max of 1. We work around the issue by setting `aria-valuetext`\n // to the same value that we set on the slider's thumb which will be truncated.\n '[attr.aria-valuetext]': 'valueText == null ? displayValue : valueText',\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;-webkit-print-color-adjust:exact;color-adjust:exact}.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 }], valueText: [{\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.ɵfac = function MatSliderModule_Factory(t) { return new (t || MatSliderModule)(); };\nMatSliderModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatSliderModule });\nMatSliderModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSliderModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSliderModule, { declarations: function () { return [MatSlider]; }, imports: function () { return [CommonModule, MatCommonModule]; }, exports: function () { return [MatSlider, MatCommonModule]; } }); })();\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","/*!\n * html2canvas 1.3.2 <https://html2canvas.hertzen.com>\n * Copyright (c) 2021 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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.html2canvas = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(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 }\r\n\r\n function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n }\n\n var Bounds = /** @class */ (function () {\n function Bounds(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n }\n Bounds.prototype.add = function (x, y, w, h) {\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\n };\n Bounds.fromClientRect = function (context, clientRect) {\n return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);\n };\n Bounds.fromDOMRectList = function (context, domRectList) {\n var domRect = domRectList[0];\n return domRect\n ? new Bounds(domRect.x + context.windowBounds.left, domRect.y + context.windowBounds.top, domRect.width, domRect.height)\n : Bounds.EMPTY;\n };\n Bounds.EMPTY = new Bounds(0, 0, 0, 0);\n return Bounds;\n }());\n var parseBounds = function (context, node) {\n return Bounds.fromClientRect(context, node.getBoundingClientRect());\n };\n var parseDocumentSize = function (document) {\n var body = document.body;\n var documentElement = document.documentElement;\n if (!body || !documentElement) {\n throw new Error(\"Unable to get document size\");\n }\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\n return new Bounds(0, 0, width, height);\n };\n\n /*\n * css-line-break 2.0.1 <https://github.com/niklasvh/css-line-break#readme>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var toCodePoints$1 = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint$1 = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$2 = 0; i$2 < chars$2.length; i$2++) {\n lookup$2[chars$2.charCodeAt(i$2)] = i$2;\n }\n var decode$1 = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$2[base64.charCodeAt(i)];\n encoded2 = lookup$2[base64.charCodeAt(i + 1)];\n encoded3 = lookup$2[base64.charCodeAt(i + 2)];\n encoded4 = lookup$2[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array$1 = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2$1 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1$1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT$1 = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;\n var slice16$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32$1 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64$1 = function (base64) {\n var buffer = decode$1(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16$1(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16$1(view16, (headerLength + view32[4]) / 2)\n : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie$1 = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n var base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\n\n /* @flow */\n var LETTER_NUMBER_MODIFIER = 50;\n // Non-tailorable Line Breaking Classes\n var BK = 1; // Cause a line break (after)\n var CR$1 = 2; // Cause a line break (after), except between CR and LF\n var LF$1 = 3; // Cause a line break (after)\n var CM = 4; // Prohibit a line break between the character and the preceding character\n var NL = 5; // Cause a line break (after)\n var WJ = 7; // Prohibit line breaks before and after\n var ZW = 8; // Provide a break opportunity\n var GL = 9; // Prohibit line breaks before and after\n var SP = 10; // Enable indirect line breaks\n var ZWJ$1 = 11; // Prohibit line breaks within joiner sequences\n // Break Opportunities\n var B2 = 12; // Provide a line break opportunity before and after the character\n var BA = 13; // Generally provide a line break opportunity after the character\n var BB = 14; // Generally provide a line break opportunity before the character\n var HY = 15; // Provide a line break opportunity after the character, except in numeric context\n var CB = 16; // Provide a line break opportunity contingent on additional information\n // Characters Prohibiting Certain Breaks\n var CL = 17; // Prohibit line breaks before\n var CP = 18; // Prohibit line breaks before\n var EX = 19; // Prohibit line breaks before\n var IN = 20; // Allow only indirect line breaks between pairs\n var NS = 21; // Allow only indirect line breaks before\n var OP = 22; // Prohibit line breaks after\n var QU = 23; // Act like they are both opening and closing\n // Numeric Context\n var IS = 24; // Prevent breaks after any and before numeric\n var NU = 25; // Form numeric expressions for line breaking purposes\n var PO = 26; // Do not break following a numeric expression\n var PR = 27; // Do not break in front of a numeric expression\n var SY = 28; // Prevent a break before; and allow a break after\n // Other Characters\n var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\n var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\n var CJ = 31; // Treat as NS or ID for strict or normal breaking.\n var EB = 32; // Do not break from following Emoji Modifier\n var EM = 33; // Do not break from preceding Emoji Base\n var H2 = 34; // Form Korean syllable blocks\n var H3 = 35; // Form Korean syllable blocks\n var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\n var ID = 37; // Break before or after; except in some numeric context\n var JL = 38; // Form Korean syllable blocks\n var JV = 39; // Form Korean syllable blocks\n var JT = 40; // Form Korean syllable blocks\n var RI$1 = 41; // Keep pairs together. For pairs; break before and after other classes\n var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\n var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\n var ea_OP = [0x2329, 0xff08];\n var BREAK_MANDATORY = '!';\n var BREAK_NOT_ALLOWED$1 = '×';\n var BREAK_ALLOWED$1 = '÷';\n var UnicodeTrie$1 = createTrieFromBase64$1(base64$1);\n var ALPHABETICS = [AL, HL];\n var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];\n var SPACE$1 = [SP, ZW];\n var PREFIX_POSTFIX = [PR, PO];\n var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);\n var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\n var HYPHEN = [HY, BA];\n var codePointsToCharacterClasses = function (codePoints, lineBreak) {\n if (lineBreak === void 0) { lineBreak = 'strict'; }\n var types = [];\n var indices = [];\n var categories = [];\n codePoints.forEach(function (codePoint, index) {\n var classType = UnicodeTrie$1.get(codePoint);\n if (classType > LETTER_NUMBER_MODIFIER) {\n categories.push(true);\n classType -= LETTER_NUMBER_MODIFIER;\n }\n else {\n categories.push(false);\n }\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n indices.push(index);\n return types.push(CB);\n }\n }\n if (classType === CM || classType === ZWJ$1) {\n // LB10 Treat any remaining combining mark or ZWJ as AL.\n if (index === 0) {\n indices.push(index);\n return types.push(AL);\n }\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\n var prev = types[index - 1];\n if (LINE_BREAKS.indexOf(prev) === -1) {\n indices.push(indices[index - 1]);\n return types.push(prev);\n }\n indices.push(index);\n return types.push(AL);\n }\n indices.push(index);\n if (classType === CJ) {\n return types.push(lineBreak === 'strict' ? NS : ID);\n }\n if (classType === SA) {\n return types.push(AL);\n }\n if (classType === AI) {\n return types.push(AL);\n }\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n // to take into account the actual line breaking properties for these characters.\n if (classType === XX) {\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n return types.push(ID);\n }\n else {\n return types.push(AL);\n }\n }\n types.push(classType);\n });\n return [indices, types, categories];\n };\n var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\n var current = classTypes[currentIndex];\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n var i = currentIndex;\n while (i <= classTypes.length) {\n i++;\n var next = classTypes[i];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (current === SP) {\n var i = currentIndex;\n while (i > 0) {\n i--;\n var prev = classTypes[i];\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n var n = currentIndex;\n while (n <= classTypes.length) {\n n++;\n var next = classTypes[n];\n if (next === b) {\n return true;\n }\n if (next !== SP) {\n break;\n }\n }\n }\n if (prev !== SP) {\n break;\n }\n }\n }\n return false;\n };\n var previousNonSpaceClassType = function (currentIndex, classTypes) {\n var i = currentIndex;\n while (i >= 0) {\n var type = classTypes[i];\n if (type === SP) {\n i--;\n }\n else {\n return type;\n }\n }\n return 0;\n };\n var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\n if (indicies[index] === 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n var currentIndex = index - 1;\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n return BREAK_NOT_ALLOWED$1;\n }\n var beforeIndex = currentIndex - 1;\n var afterIndex = currentIndex + 1;\n var current = classTypes[currentIndex];\n // LB4 Always break after hard line breaks.\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n var next = classTypes[afterIndex];\n if (current === CR$1 && next === LF$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n return BREAK_MANDATORY;\n }\n // LB6 Do not break before hard line breaks.\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB7 Do not break before spaces or zero width space.\n if (SPACE$1.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n return BREAK_ALLOWED$1;\n }\n // LB8a Do not break after a zero width joiner.\n if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // zwj emojis\n if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB11 Do not break before or after Word joiner and related characters.\n if (current === WJ || next === WJ) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12 Do not break after NBSP and related characters.\n if (current === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB14 Do not break after ‘[’, even after spaces.\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB15 Do not break within ‘”[’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB17 Do not break within ‘——’, even with intervening spaces.\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB18 Break after spaces.\n if (current === SP) {\n return BREAK_ALLOWED$1;\n }\n // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n if (current === QU || next === QU) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB20 Break before and after unresolved CB.\n if (next === CB || current === CB) {\n return BREAK_ALLOWED$1;\n }\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21a Don't break after Hebrew + Hyphen.\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB21b Don’t break between Solidus and Hebrew letters.\n if (current === SY && next === HL) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB22 Do not break before ellipsis.\n if (next === IN) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23 Do not break between digits and letters.\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB25 Do not break between the following pairs of classes relevant to numbers:\n if (\n // (PR | PO) × ( OP | HY )? NU\n ([PR, PO].indexOf(current) !== -1 &&\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n // ( OP | HY ) × NU\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n // NU ×\t(NU | SY | IS)\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n var prevIndex = currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n if ([PR, PO].indexOf(next) !== -1) {\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n while (prevIndex >= 0) {\n var type = classTypes[prevIndex];\n if (type === NU) {\n return BREAK_NOT_ALLOWED$1;\n }\n else if ([SY, IS].indexOf(type) !== -1) {\n prevIndex--;\n }\n else {\n break;\n }\n }\n }\n // LB26 Do not break a Korean syllable.\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB27 Treat a Korean Syllable Block the same as ID.\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB28 Do not break between alphabetics (“at”).\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n next === OP &&\n ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\n return BREAK_NOT_ALLOWED$1;\n }\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n // indicators preceding the position of the break.\n if (current === RI$1 && next === RI$1) {\n var i = indicies[currentIndex];\n var count = 1;\n while (i > 0) {\n i--;\n if (classTypes[i] === RI$1) {\n count++;\n }\n else {\n break;\n }\n }\n if (count % 2 !== 0) {\n return BREAK_NOT_ALLOWED$1;\n }\n }\n // LB30b Do not break between an emoji base and an emoji modifier.\n if (current === EB && next === EM) {\n return BREAK_NOT_ALLOWED$1;\n }\n return BREAK_ALLOWED$1;\n };\n var cssFormattedClasses = function (codePoints, options) {\n if (!options) {\n options = { lineBreak: 'normal', wordBreak: 'normal' };\n }\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\n }\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\n ? isLetterNumber.map(function (letterNumber, i) {\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n })\n : undefined;\n return [indicies, classTypes, forbiddenBreakpoints];\n };\n var Break = /** @class */ (function () {\n function Break(codePoints, lineBreak, start, end) {\n this.codePoints = codePoints;\n this.required = lineBreak === BREAK_MANDATORY;\n this.start = start;\n this.end = end;\n }\n Break.prototype.slice = function () {\n return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));\n };\n return Break;\n }());\n var LineBreaker = function (str, options) {\n var codePoints = toCodePoints$1(str);\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\n var length = codePoints.length;\n var lastEnd = 0;\n var nextIndex = 0;\n return {\n next: function () {\n if (nextIndex >= length) {\n return { done: true, value: null };\n }\n var lineBreak = BREAK_NOT_ALLOWED$1;\n while (nextIndex < length &&\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n BREAK_NOT_ALLOWED$1) { }\n if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n lastEnd = nextIndex;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n\n // https://www.w3.org/TR/css-syntax-3\n var FLAG_UNRESTRICTED = 1 << 0;\n var FLAG_ID = 1 << 1;\n var FLAG_INTEGER = 1 << 2;\n var FLAG_NUMBER = 1 << 3;\n var LINE_FEED = 0x000a;\n var SOLIDUS = 0x002f;\n var REVERSE_SOLIDUS = 0x005c;\n var CHARACTER_TABULATION = 0x0009;\n var SPACE = 0x0020;\n var QUOTATION_MARK = 0x0022;\n var EQUALS_SIGN = 0x003d;\n var NUMBER_SIGN = 0x0023;\n var DOLLAR_SIGN = 0x0024;\n var PERCENTAGE_SIGN = 0x0025;\n var APOSTROPHE = 0x0027;\n var LEFT_PARENTHESIS = 0x0028;\n var RIGHT_PARENTHESIS = 0x0029;\n var LOW_LINE = 0x005f;\n var HYPHEN_MINUS = 0x002d;\n var EXCLAMATION_MARK = 0x0021;\n var LESS_THAN_SIGN = 0x003c;\n var GREATER_THAN_SIGN = 0x003e;\n var COMMERCIAL_AT = 0x0040;\n var LEFT_SQUARE_BRACKET = 0x005b;\n var RIGHT_SQUARE_BRACKET = 0x005d;\n var CIRCUMFLEX_ACCENT = 0x003d;\n var LEFT_CURLY_BRACKET = 0x007b;\n var QUESTION_MARK = 0x003f;\n var RIGHT_CURLY_BRACKET = 0x007d;\n var VERTICAL_LINE = 0x007c;\n var TILDE = 0x007e;\n var CONTROL = 0x0080;\n var REPLACEMENT_CHARACTER = 0xfffd;\n var ASTERISK = 0x002a;\n var PLUS_SIGN = 0x002b;\n var COMMA = 0x002c;\n var COLON = 0x003a;\n var SEMICOLON = 0x003b;\n var FULL_STOP = 0x002e;\n var NULL = 0x0000;\n var BACKSPACE = 0x0008;\n var LINE_TABULATION = 0x000b;\n var SHIFT_OUT = 0x000e;\n var INFORMATION_SEPARATOR_ONE = 0x001f;\n var DELETE = 0x007f;\n var EOF = -1;\n var ZERO = 0x0030;\n var a = 0x0061;\n var e = 0x0065;\n var f = 0x0066;\n var u = 0x0075;\n var z = 0x007a;\n var A = 0x0041;\n var E = 0x0045;\n var F = 0x0046;\n var U = 0x0055;\n var Z = 0x005a;\n var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\n var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\n var isHex = function (codePoint) {\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\n };\n var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\n var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\n var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\n var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\n var isWhiteSpace = function (codePoint) {\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\n };\n var isNameStartCodePoint = function (codePoint) {\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\n };\n var isNameCodePoint = function (codePoint) {\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\n };\n var isNonPrintableCodePoint = function (codePoint) {\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\n codePoint === LINE_TABULATION ||\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\n codePoint === DELETE);\n };\n var isValidEscape = function (c1, c2) {\n if (c1 !== REVERSE_SOLIDUS) {\n return false;\n }\n return c2 !== LINE_FEED;\n };\n var isIdentifierStart = function (c1, c2, c3) {\n if (c1 === HYPHEN_MINUS) {\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\n }\n else if (isNameStartCodePoint(c1)) {\n return true;\n }\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\n return true;\n }\n return false;\n };\n var isNumberStart = function (c1, c2, c3) {\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n if (isDigit(c2)) {\n return true;\n }\n return c2 === FULL_STOP && isDigit(c3);\n }\n if (c1 === FULL_STOP) {\n return isDigit(c2);\n }\n return isDigit(c1);\n };\n var stringToNumber = function (codePoints) {\n var c = 0;\n var sign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n sign = -1;\n }\n c++;\n }\n var integers = [];\n while (isDigit(codePoints[c])) {\n integers.push(codePoints[c++]);\n }\n var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;\n if (codePoints[c] === FULL_STOP) {\n c++;\n }\n var fraction = [];\n while (isDigit(codePoints[c])) {\n fraction.push(codePoints[c++]);\n }\n var fracd = fraction.length;\n var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;\n if (codePoints[c] === E || codePoints[c] === e) {\n c++;\n }\n var expsign = 1;\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\n if (codePoints[c] === HYPHEN_MINUS) {\n expsign = -1;\n }\n c++;\n }\n var exponent = [];\n while (isDigit(codePoints[c])) {\n exponent.push(codePoints[c++]);\n }\n var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\n };\n var LEFT_PARENTHESIS_TOKEN = {\n type: 2 /* LEFT_PARENTHESIS_TOKEN */\n };\n var RIGHT_PARENTHESIS_TOKEN = {\n type: 3 /* RIGHT_PARENTHESIS_TOKEN */\n };\n var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };\n var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };\n var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };\n var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };\n var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };\n var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };\n var LEFT_CURLY_BRACKET_TOKEN = {\n type: 11 /* LEFT_CURLY_BRACKET_TOKEN */\n };\n var RIGHT_CURLY_BRACKET_TOKEN = {\n type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */\n };\n var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };\n var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };\n var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };\n var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };\n var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };\n var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };\n var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };\n var LEFT_SQUARE_BRACKET_TOKEN = {\n type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */\n };\n var RIGHT_SQUARE_BRACKET_TOKEN = {\n type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */\n };\n var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };\n var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };\n var Tokenizer = /** @class */ (function () {\n function Tokenizer() {\n this._value = [];\n }\n Tokenizer.prototype.write = function (chunk) {\n this._value = this._value.concat(toCodePoints$1(chunk));\n };\n Tokenizer.prototype.read = function () {\n var tokens = [];\n var token = this.consumeToken();\n while (token !== EOF_TOKEN) {\n tokens.push(token);\n token = this.consumeToken();\n }\n return tokens;\n };\n Tokenizer.prototype.consumeToken = function () {\n var codePoint = this.consumeCodePoint();\n switch (codePoint) {\n case QUOTATION_MARK:\n return this.consumeStringToken(QUOTATION_MARK);\n case NUMBER_SIGN:\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\n var value = this.consumeName();\n return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };\n }\n break;\n case DOLLAR_SIGN:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUFFIX_MATCH_TOKEN;\n }\n break;\n case APOSTROPHE:\n return this.consumeStringToken(APOSTROPHE);\n case LEFT_PARENTHESIS:\n return LEFT_PARENTHESIS_TOKEN;\n case RIGHT_PARENTHESIS:\n return RIGHT_PARENTHESIS_TOKEN;\n case ASTERISK:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return SUBSTRING_MATCH_TOKEN;\n }\n break;\n case PLUS_SIGN:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case COMMA:\n return COMMA_TOKEN;\n case HYPHEN_MINUS:\n var e1 = codePoint;\n var e2 = this.peekCodePoint(0);\n var e3 = this.peekCodePoint(1);\n if (isNumberStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isIdentifierStart(e1, e2, e3)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDC_TOKEN;\n }\n break;\n case FULL_STOP:\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n break;\n case SOLIDUS:\n if (this.peekCodePoint(0) === ASTERISK) {\n this.consumeCodePoint();\n while (true) {\n var c = this.consumeCodePoint();\n if (c === ASTERISK) {\n c = this.consumeCodePoint();\n if (c === SOLIDUS) {\n return this.consumeToken();\n }\n }\n if (c === EOF) {\n return this.consumeToken();\n }\n }\n }\n break;\n case COLON:\n return COLON_TOKEN;\n case SEMICOLON:\n return SEMICOLON_TOKEN;\n case LESS_THAN_SIGN:\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\n this.peekCodePoint(1) === HYPHEN_MINUS &&\n this.peekCodePoint(2) === HYPHEN_MINUS) {\n this.consumeCodePoint();\n this.consumeCodePoint();\n return CDO_TOKEN;\n }\n break;\n case COMMERCIAL_AT:\n var a1 = this.peekCodePoint(0);\n var a2 = this.peekCodePoint(1);\n var a3 = this.peekCodePoint(2);\n if (isIdentifierStart(a1, a2, a3)) {\n var value = this.consumeName();\n return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };\n }\n break;\n case LEFT_SQUARE_BRACKET:\n return LEFT_SQUARE_BRACKET_TOKEN;\n case REVERSE_SOLIDUS:\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n break;\n case RIGHT_SQUARE_BRACKET:\n return RIGHT_SQUARE_BRACKET_TOKEN;\n case CIRCUMFLEX_ACCENT:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return PREFIX_MATCH_TOKEN;\n }\n break;\n case LEFT_CURLY_BRACKET:\n return LEFT_CURLY_BRACKET_TOKEN;\n case RIGHT_CURLY_BRACKET:\n return RIGHT_CURLY_BRACKET_TOKEN;\n case u:\n case U:\n var u1 = this.peekCodePoint(0);\n var u2 = this.peekCodePoint(1);\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\n this.consumeCodePoint();\n this.consumeUnicodeRangeToken();\n }\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n case VERTICAL_LINE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return DASH_MATCH_TOKEN;\n }\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\n this.consumeCodePoint();\n return COLUMN_TOKEN;\n }\n break;\n case TILDE:\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\n this.consumeCodePoint();\n return INCLUDE_MATCH_TOKEN;\n }\n break;\n case EOF:\n return EOF_TOKEN;\n }\n if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n return WHITESPACE_TOKEN;\n }\n if (isDigit(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeNumericToken();\n }\n if (isNameStartCodePoint(codePoint)) {\n this.reconsumeCodePoint(codePoint);\n return this.consumeIdentLikeToken();\n }\n return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) };\n };\n Tokenizer.prototype.consumeCodePoint = function () {\n var value = this._value.shift();\n return typeof value === 'undefined' ? -1 : value;\n };\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\n this._value.unshift(codePoint);\n };\n Tokenizer.prototype.peekCodePoint = function (delta) {\n if (delta >= this._value.length) {\n return -1;\n }\n return this._value[delta];\n };\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\n var digits = [];\n var codePoint = this.consumeCodePoint();\n while (isHex(codePoint) && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var questionMarks = false;\n while (codePoint === QUESTION_MARK && digits.length < 6) {\n digits.push(codePoint);\n codePoint = this.consumeCodePoint();\n questionMarks = true;\n }\n if (questionMarks) {\n var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\n var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };\n }\n var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\n this.consumeCodePoint();\n codePoint = this.consumeCodePoint();\n var endDigits = [];\n while (isHex(codePoint) && endDigits.length < 6) {\n endDigits.push(codePoint);\n codePoint = this.consumeCodePoint();\n }\n var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };\n }\n else {\n return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };\n }\n };\n Tokenizer.prototype.consumeIdentLikeToken = function () {\n var value = this.consumeName();\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return this.consumeUrlToken();\n }\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 19 /* FUNCTION_TOKEN */, value: value };\n }\n return { type: 20 /* IDENT_TOKEN */, value: value };\n };\n Tokenizer.prototype.consumeUrlToken = function () {\n var value = [];\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF) {\n return { type: 22 /* URL_TOKEN */, value: '' };\n }\n var next = this.peekCodePoint(0);\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\n if (stringToken.type === 0 /* STRING_TOKEN */) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: stringToken.value };\n }\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n else if (isWhiteSpace(codePoint)) {\n this.consumeWhiteSpace();\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\n this.consumeCodePoint();\n return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\n }\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === QUOTATION_MARK ||\n codePoint === APOSTROPHE ||\n codePoint === LEFT_PARENTHESIS ||\n isNonPrintableCodePoint(codePoint)) {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n else if (codePoint === REVERSE_SOLIDUS) {\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n value.push(this.consumeEscapedCodePoint());\n }\n else {\n this.consumeBadUrlRemnants();\n return BAD_URL_TOKEN;\n }\n }\n else {\n value.push(codePoint);\n }\n }\n };\n Tokenizer.prototype.consumeWhiteSpace = function () {\n while (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n };\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\n return;\n }\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n this.consumeEscapedCodePoint();\n }\n }\n };\n Tokenizer.prototype.consumeStringSlice = function (count) {\n var SLICE_STACK_SIZE = 60000;\n var value = '';\n while (count > 0) {\n var amount = Math.min(SLICE_STACK_SIZE, count);\n value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));\n count -= amount;\n }\n this._value.shift();\n return value;\n };\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\n var value = '';\n var i = 0;\n do {\n var codePoint = this._value[i];\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\n value += this.consumeStringSlice(i);\n return { type: 0 /* STRING_TOKEN */, value: value };\n }\n if (codePoint === LINE_FEED) {\n this._value.splice(0, i);\n return BAD_STRING_TOKEN;\n }\n if (codePoint === REVERSE_SOLIDUS) {\n var next = this._value[i + 1];\n if (next !== EOF && next !== undefined) {\n if (next === LINE_FEED) {\n value += this.consumeStringSlice(i);\n i = -1;\n this._value.shift();\n }\n else if (isValidEscape(codePoint, next)) {\n value += this.consumeStringSlice(i);\n value += fromCodePoint$1(this.consumeEscapedCodePoint());\n i = -1;\n }\n }\n }\n i++;\n } while (true);\n };\n Tokenizer.prototype.consumeNumber = function () {\n var repr = [];\n var type = FLAG_INTEGER;\n var c1 = this.peekCodePoint(0);\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\n repr.push(this.consumeCodePoint());\n }\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n if (c1 === FULL_STOP && isDigit(c2)) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n c1 = this.peekCodePoint(0);\n c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\n type = FLAG_NUMBER;\n while (isDigit(this.peekCodePoint(0))) {\n repr.push(this.consumeCodePoint());\n }\n }\n return [stringToNumber(repr), type];\n };\n Tokenizer.prototype.consumeNumericToken = function () {\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\n var c1 = this.peekCodePoint(0);\n var c2 = this.peekCodePoint(1);\n var c3 = this.peekCodePoint(2);\n if (isIdentifierStart(c1, c2, c3)) {\n var unit = this.consumeName();\n return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };\n }\n if (c1 === PERCENTAGE_SIGN) {\n this.consumeCodePoint();\n return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };\n }\n return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };\n };\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\n var codePoint = this.consumeCodePoint();\n if (isHex(codePoint)) {\n var hex = fromCodePoint$1(codePoint);\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\n hex += fromCodePoint$1(this.consumeCodePoint());\n }\n if (isWhiteSpace(this.peekCodePoint(0))) {\n this.consumeCodePoint();\n }\n var hexCodePoint = parseInt(hex, 16);\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\n return REPLACEMENT_CHARACTER;\n }\n return hexCodePoint;\n }\n if (codePoint === EOF) {\n return REPLACEMENT_CHARACTER;\n }\n return codePoint;\n };\n Tokenizer.prototype.consumeName = function () {\n var result = '';\n while (true) {\n var codePoint = this.consumeCodePoint();\n if (isNameCodePoint(codePoint)) {\n result += fromCodePoint$1(codePoint);\n }\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\n result += fromCodePoint$1(this.consumeEscapedCodePoint());\n }\n else {\n this.reconsumeCodePoint(codePoint);\n return result;\n }\n }\n };\n return Tokenizer;\n }());\n\n var Parser = /** @class */ (function () {\n function Parser(tokens) {\n this._tokens = tokens;\n }\n Parser.create = function (value) {\n var tokenizer = new Tokenizer();\n tokenizer.write(value);\n return new Parser(tokenizer.read());\n };\n Parser.parseValue = function (value) {\n return Parser.create(value).parseComponentValue();\n };\n Parser.parseValues = function (value) {\n return Parser.create(value).parseComponentValues();\n };\n Parser.prototype.parseComponentValue = function () {\n var token = this.consumeToken();\n while (token.type === 31 /* WHITESPACE_TOKEN */) {\n token = this.consumeToken();\n }\n if (token.type === 32 /* EOF_TOKEN */) {\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\n }\n this.reconsumeToken(token);\n var value = this.consumeComponentValue();\n do {\n token = this.consumeToken();\n } while (token.type === 31 /* WHITESPACE_TOKEN */);\n if (token.type === 32 /* EOF_TOKEN */) {\n return value;\n }\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\n };\n Parser.prototype.parseComponentValues = function () {\n var values = [];\n while (true) {\n var value = this.consumeComponentValue();\n if (value.type === 32 /* EOF_TOKEN */) {\n return values;\n }\n values.push(value);\n values.push();\n }\n };\n Parser.prototype.consumeComponentValue = function () {\n var token = this.consumeToken();\n switch (token.type) {\n case 11 /* LEFT_CURLY_BRACKET_TOKEN */:\n case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:\n case 2 /* LEFT_PARENTHESIS_TOKEN */:\n return this.consumeSimpleBlock(token.type);\n case 19 /* FUNCTION_TOKEN */:\n return this.consumeFunction(token);\n }\n return token;\n };\n Parser.prototype.consumeSimpleBlock = function (type) {\n var block = { type: type, values: [] };\n var token = this.consumeToken();\n while (true) {\n if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {\n return block;\n }\n this.reconsumeToken(token);\n block.values.push(this.consumeComponentValue());\n token = this.consumeToken();\n }\n };\n Parser.prototype.consumeFunction = function (functionToken) {\n var cssFunction = {\n name: functionToken.value,\n values: [],\n type: 18 /* FUNCTION */\n };\n while (true) {\n var token = this.consumeToken();\n if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {\n return cssFunction;\n }\n this.reconsumeToken(token);\n cssFunction.values.push(this.consumeComponentValue());\n }\n };\n Parser.prototype.consumeToken = function () {\n var token = this._tokens.shift();\n return typeof token === 'undefined' ? EOF_TOKEN : token;\n };\n Parser.prototype.reconsumeToken = function (token) {\n this._tokens.unshift(token);\n };\n return Parser;\n }());\n var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };\n var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };\n var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };\n var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };\n var isIdentWithValue = function (token, value) {\n return isIdentToken(token) && token.value === value;\n };\n var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };\n var nonFunctionArgSeparator = function (token) {\n return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;\n };\n var parseFunctionArgs = function (tokens) {\n var args = [];\n var arg = [];\n tokens.forEach(function (token) {\n if (token.type === 4 /* COMMA_TOKEN */) {\n if (arg.length === 0) {\n throw new Error(\"Error parsing function args, zero tokens for arg\");\n }\n args.push(arg);\n arg = [];\n return;\n }\n if (token.type !== 31 /* WHITESPACE_TOKEN */) {\n arg.push(token);\n }\n });\n if (arg.length) {\n args.push(arg);\n }\n return args;\n };\n var isEndingTokenFor = function (token, type) {\n if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {\n return true;\n }\n if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {\n return true;\n }\n return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;\n };\n\n var isLength = function (token) {\n return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */;\n };\n\n var isLengthPercentage = function (token) {\n return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token);\n };\n var parseLengthPercentageTuple = function (tokens) {\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\n };\n var ZERO_LENGTH = {\n type: 17 /* NUMBER_TOKEN */,\n number: 0,\n flags: FLAG_INTEGER\n };\n var FIFTY_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var HUNDRED_PERCENT = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 100,\n flags: FLAG_INTEGER\n };\n var getAbsoluteValueForTuple = function (tuple, width, height) {\n var x = tuple[0], y = tuple[1];\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\n };\n var getAbsoluteValue = function (token, parent) {\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n return (token.number / 100) * parent;\n }\n if (isDimensionToken(token)) {\n switch (token.unit) {\n case 'rem':\n case 'em':\n return 16 * token.number; // TODO use correct font-size\n case 'px':\n default:\n return token.number;\n }\n }\n return token.number;\n };\n\n var DEG = 'deg';\n var GRAD = 'grad';\n var RAD = 'rad';\n var TURN = 'turn';\n var angle = {\n name: 'angle',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit) {\n case DEG:\n return (Math.PI * value.number) / 180;\n case GRAD:\n return (Math.PI / 200) * value.number;\n case RAD:\n return value.number;\n case TURN:\n return Math.PI * 2 * value.number;\n }\n }\n throw new Error(\"Unsupported angle type\");\n }\n };\n var isAngle = function (value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\n return true;\n }\n }\n return false;\n };\n var parseNamedSide = function (tokens) {\n var sideOrCorner = tokens\n .filter(isIdentToken)\n .map(function (ident) { return ident.value; })\n .join(' ');\n switch (sideOrCorner) {\n case 'to bottom right':\n case 'to right bottom':\n case 'left top':\n case 'top left':\n return [ZERO_LENGTH, ZERO_LENGTH];\n case 'to top':\n case 'bottom':\n return deg(0);\n case 'to bottom left':\n case 'to left bottom':\n case 'right top':\n case 'top right':\n return [ZERO_LENGTH, HUNDRED_PERCENT];\n case 'to right':\n case 'left':\n return deg(90);\n case 'to top left':\n case 'to left top':\n case 'right bottom':\n case 'bottom right':\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\n case 'to bottom':\n case 'top':\n return deg(180);\n case 'to top right':\n case 'to right top':\n case 'left bottom':\n case 'bottom left':\n return [HUNDRED_PERCENT, ZERO_LENGTH];\n case 'to left':\n case 'right':\n return deg(270);\n }\n return 0;\n };\n var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n var color$1 = {\n name: 'color',\n parse: function (context, value) {\n if (value.type === 18 /* FUNCTION */) {\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\n if (typeof colorFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\n }\n return colorFunction(context, value.values);\n }\n if (value.type === 5 /* HASH_TOKEN */) {\n if (value.value.length === 3) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\n }\n if (value.value.length === 4) {\n var r = value.value.substring(0, 1);\n var g = value.value.substring(1, 2);\n var b = value.value.substring(2, 3);\n var a = value.value.substring(3, 4);\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\n }\n if (value.value.length === 6) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\n }\n if (value.value.length === 8) {\n var r = value.value.substring(0, 2);\n var g = value.value.substring(2, 4);\n var b = value.value.substring(4, 6);\n var a = value.value.substring(6, 8);\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\n }\n }\n if (value.type === 20 /* IDENT_TOKEN */) {\n var namedColor = COLORS[value.value.toUpperCase()];\n if (typeof namedColor !== 'undefined') {\n return namedColor;\n }\n }\n return COLORS.TRANSPARENT;\n }\n };\n var isTransparent = function (color) { return (0xff & color) === 0; };\n var asString = function (color) {\n var alpha = 0xff & color;\n var blue = 0xff & (color >> 8);\n var green = 0xff & (color >> 16);\n var red = 0xff & (color >> 24);\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\n };\n var pack = function (r, g, b, a) {\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\n };\n var getTokenColorValue = function (token, i) {\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 16 /* PERCENTAGE_TOKEN */) {\n var max = i === 3 ? 1 : 255;\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\n }\n return 0;\n };\n var rgb = function (_context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n if (tokens.length === 3) {\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\n return pack(r, g, b, 1);\n }\n if (tokens.length === 4) {\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\n return pack(r, g, b, a);\n }\n return 0;\n };\n function hue2rgb(t1, t2, hue) {\n if (hue < 0) {\n hue += 1;\n }\n if (hue >= 1) {\n hue -= 1;\n }\n if (hue < 1 / 6) {\n return (t2 - t1) * hue * 6 + t1;\n }\n else if (hue < 1 / 2) {\n return t2;\n }\n else if (hue < 2 / 3) {\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\n }\n else {\n return t1;\n }\n }\n var hsl = function (context, args) {\n var tokens = args.filter(nonFunctionArgSeparator);\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\n var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\n if (s === 0) {\n return pack(l * 255, l * 255, l * 255, 1);\n }\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var t1 = l * 2 - t2;\n var r = hue2rgb(t1, t2, h + 1 / 3);\n var g = hue2rgb(t1, t2, h);\n var b = hue2rgb(t1, t2, h - 1 / 3);\n return pack(r * 255, g * 255, b * 255, a);\n };\n var SUPPORTED_COLOR_FUNCTIONS = {\n hsl: hsl,\n hsla: hsl,\n rgb: rgb,\n rgba: rgb\n };\n var parseColor = function (context, value) {\n return color$1.parse(context, Parser.create(value).parseComponentValue());\n };\n var COLORS = {\n ALICEBLUE: 0xf0f8ffff,\n ANTIQUEWHITE: 0xfaebd7ff,\n AQUA: 0x00ffffff,\n AQUAMARINE: 0x7fffd4ff,\n AZURE: 0xf0ffffff,\n BEIGE: 0xf5f5dcff,\n BISQUE: 0xffe4c4ff,\n BLACK: 0x000000ff,\n BLANCHEDALMOND: 0xffebcdff,\n BLUE: 0x0000ffff,\n BLUEVIOLET: 0x8a2be2ff,\n BROWN: 0xa52a2aff,\n BURLYWOOD: 0xdeb887ff,\n CADETBLUE: 0x5f9ea0ff,\n CHARTREUSE: 0x7fff00ff,\n CHOCOLATE: 0xd2691eff,\n CORAL: 0xff7f50ff,\n CORNFLOWERBLUE: 0x6495edff,\n CORNSILK: 0xfff8dcff,\n CRIMSON: 0xdc143cff,\n CYAN: 0x00ffffff,\n DARKBLUE: 0x00008bff,\n DARKCYAN: 0x008b8bff,\n DARKGOLDENROD: 0xb886bbff,\n DARKGRAY: 0xa9a9a9ff,\n DARKGREEN: 0x006400ff,\n DARKGREY: 0xa9a9a9ff,\n DARKKHAKI: 0xbdb76bff,\n DARKMAGENTA: 0x8b008bff,\n DARKOLIVEGREEN: 0x556b2fff,\n DARKORANGE: 0xff8c00ff,\n DARKORCHID: 0x9932ccff,\n DARKRED: 0x8b0000ff,\n DARKSALMON: 0xe9967aff,\n DARKSEAGREEN: 0x8fbc8fff,\n DARKSLATEBLUE: 0x483d8bff,\n DARKSLATEGRAY: 0x2f4f4fff,\n DARKSLATEGREY: 0x2f4f4fff,\n DARKTURQUOISE: 0x00ced1ff,\n DARKVIOLET: 0x9400d3ff,\n DEEPPINK: 0xff1493ff,\n DEEPSKYBLUE: 0x00bfffff,\n DIMGRAY: 0x696969ff,\n DIMGREY: 0x696969ff,\n DODGERBLUE: 0x1e90ffff,\n FIREBRICK: 0xb22222ff,\n FLORALWHITE: 0xfffaf0ff,\n FORESTGREEN: 0x228b22ff,\n FUCHSIA: 0xff00ffff,\n GAINSBORO: 0xdcdcdcff,\n GHOSTWHITE: 0xf8f8ffff,\n GOLD: 0xffd700ff,\n GOLDENROD: 0xdaa520ff,\n GRAY: 0x808080ff,\n GREEN: 0x008000ff,\n GREENYELLOW: 0xadff2fff,\n GREY: 0x808080ff,\n HONEYDEW: 0xf0fff0ff,\n HOTPINK: 0xff69b4ff,\n INDIANRED: 0xcd5c5cff,\n INDIGO: 0x4b0082ff,\n IVORY: 0xfffff0ff,\n KHAKI: 0xf0e68cff,\n LAVENDER: 0xe6e6faff,\n LAVENDERBLUSH: 0xfff0f5ff,\n LAWNGREEN: 0x7cfc00ff,\n LEMONCHIFFON: 0xfffacdff,\n LIGHTBLUE: 0xadd8e6ff,\n LIGHTCORAL: 0xf08080ff,\n LIGHTCYAN: 0xe0ffffff,\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\n LIGHTGRAY: 0xd3d3d3ff,\n LIGHTGREEN: 0x90ee90ff,\n LIGHTGREY: 0xd3d3d3ff,\n LIGHTPINK: 0xffb6c1ff,\n LIGHTSALMON: 0xffa07aff,\n LIGHTSEAGREEN: 0x20b2aaff,\n LIGHTSKYBLUE: 0x87cefaff,\n LIGHTSLATEGRAY: 0x778899ff,\n LIGHTSLATEGREY: 0x778899ff,\n LIGHTSTEELBLUE: 0xb0c4deff,\n LIGHTYELLOW: 0xffffe0ff,\n LIME: 0x00ff00ff,\n LIMEGREEN: 0x32cd32ff,\n LINEN: 0xfaf0e6ff,\n MAGENTA: 0xff00ffff,\n MAROON: 0x800000ff,\n MEDIUMAQUAMARINE: 0x66cdaaff,\n MEDIUMBLUE: 0x0000cdff,\n MEDIUMORCHID: 0xba55d3ff,\n MEDIUMPURPLE: 0x9370dbff,\n MEDIUMSEAGREEN: 0x3cb371ff,\n MEDIUMSLATEBLUE: 0x7b68eeff,\n MEDIUMSPRINGGREEN: 0x00fa9aff,\n MEDIUMTURQUOISE: 0x48d1ccff,\n MEDIUMVIOLETRED: 0xc71585ff,\n MIDNIGHTBLUE: 0x191970ff,\n MINTCREAM: 0xf5fffaff,\n MISTYROSE: 0xffe4e1ff,\n MOCCASIN: 0xffe4b5ff,\n NAVAJOWHITE: 0xffdeadff,\n NAVY: 0x000080ff,\n OLDLACE: 0xfdf5e6ff,\n OLIVE: 0x808000ff,\n OLIVEDRAB: 0x6b8e23ff,\n ORANGE: 0xffa500ff,\n ORANGERED: 0xff4500ff,\n ORCHID: 0xda70d6ff,\n PALEGOLDENROD: 0xeee8aaff,\n PALEGREEN: 0x98fb98ff,\n PALETURQUOISE: 0xafeeeeff,\n PALEVIOLETRED: 0xdb7093ff,\n PAPAYAWHIP: 0xffefd5ff,\n PEACHPUFF: 0xffdab9ff,\n PERU: 0xcd853fff,\n PINK: 0xffc0cbff,\n PLUM: 0xdda0ddff,\n POWDERBLUE: 0xb0e0e6ff,\n PURPLE: 0x800080ff,\n REBECCAPURPLE: 0x663399ff,\n RED: 0xff0000ff,\n ROSYBROWN: 0xbc8f8fff,\n ROYALBLUE: 0x4169e1ff,\n SADDLEBROWN: 0x8b4513ff,\n SALMON: 0xfa8072ff,\n SANDYBROWN: 0xf4a460ff,\n SEAGREEN: 0x2e8b57ff,\n SEASHELL: 0xfff5eeff,\n SIENNA: 0xa0522dff,\n SILVER: 0xc0c0c0ff,\n SKYBLUE: 0x87ceebff,\n SLATEBLUE: 0x6a5acdff,\n SLATEGRAY: 0x708090ff,\n SLATEGREY: 0x708090ff,\n SNOW: 0xfffafaff,\n SPRINGGREEN: 0x00ff7fff,\n STEELBLUE: 0x4682b4ff,\n TAN: 0xd2b48cff,\n TEAL: 0x008080ff,\n THISTLE: 0xd8bfd8ff,\n TOMATO: 0xff6347ff,\n TRANSPARENT: 0x00000000,\n TURQUOISE: 0x40e0d0ff,\n VIOLET: 0xee82eeff,\n WHEAT: 0xf5deb3ff,\n WHITE: 0xffffffff,\n WHITESMOKE: 0xf5f5f5ff,\n YELLOW: 0xffff00ff,\n YELLOWGREEN: 0x9acd32ff\n };\n\n var BACKGROUND_CLIP;\n (function (BACKGROUND_CLIP) {\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"BORDER_BOX\"] = 0] = \"BORDER_BOX\";\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"PADDING_BOX\"] = 1] = \"PADDING_BOX\";\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"CONTENT_BOX\"] = 2] = \"CONTENT_BOX\";\n })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {}));\n var backgroundClip = {\n name: 'background-clip',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return BACKGROUND_CLIP.PADDING_BOX;\n case 'content-box':\n return BACKGROUND_CLIP.CONTENT_BOX;\n }\n }\n return BACKGROUND_CLIP.BORDER_BOX;\n });\n }\n };\n\n var backgroundColor = {\n name: \"background-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var parseColorStop = function (context, args) {\n var color = color$1.parse(context, args[0]);\n var stop = args[1];\n return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null };\n };\n var processColorStops = function (stops, lineLength) {\n var first = stops[0];\n var last = stops[stops.length - 1];\n if (first.stop === null) {\n first.stop = ZERO_LENGTH;\n }\n if (last.stop === null) {\n last.stop = HUNDRED_PERCENT;\n }\n var processStops = [];\n var previous = 0;\n for (var i = 0; i < stops.length; i++) {\n var stop_1 = stops[i].stop;\n if (stop_1 !== null) {\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\n if (absoluteValue > previous) {\n processStops.push(absoluteValue);\n }\n else {\n processStops.push(previous);\n }\n previous = absoluteValue;\n }\n else {\n processStops.push(null);\n }\n }\n var gapBegin = null;\n for (var i = 0; i < processStops.length; i++) {\n var stop_2 = processStops[i];\n if (stop_2 === null) {\n if (gapBegin === null) {\n gapBegin = i;\n }\n }\n else if (gapBegin !== null) {\n var gapLength = i - gapBegin;\n var beforeGap = processStops[gapBegin - 1];\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\n for (var g = 1; g <= gapLength; g++) {\n processStops[gapBegin + g - 1] = gapValue * g;\n }\n gapBegin = null;\n }\n }\n return stops.map(function (_a, i) {\n var color = _a.color;\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\n });\n };\n var getAngleFromCorner = function (corner, width, height) {\n var centerX = width / 2;\n var centerY = height / 2;\n var x = getAbsoluteValue(corner[0], width) - centerX;\n var y = centerY - getAbsoluteValue(corner[1], height);\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\n };\n var calculateGradientDirection = function (angle, width, height) {\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var halfLineLength = lineLength / 2;\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\n };\n var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\n var findCorner = function (width, height, x, y, closest) {\n var corners = [\n [0, 0],\n [0, height],\n [width, 0],\n [width, height]\n ];\n return corners.reduce(function (stat, corner) {\n var cx = corner[0], cy = corner[1];\n var d = distance(x - cx, y - cy);\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\n return {\n optimumCorner: corner,\n optimumDistance: d\n };\n }\n return stat;\n }, {\n optimumDistance: closest ? Infinity : -Infinity,\n optimumCorner: null\n }).optimumCorner;\n };\n var calculateRadius = function (gradient, x, y, width, height) {\n var rx = 0;\n var ry = 0;\n switch (gradient.size) {\n case CSSRadialExtent.CLOSEST_SIDE:\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\n if (gradient.shape === CSSRadialShape.CIRCLE) {\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n rx = Math.min(Math.abs(x), Math.abs(x - width));\n ry = Math.min(Math.abs(y), Math.abs(y - height));\n }\n break;\n case CSSRadialExtent.CLOSEST_CORNER:\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\n if (gradient.shape === CSSRadialShape.CIRCLE) {\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n case CSSRadialExtent.FARTHEST_SIDE:\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\n if (gradient.shape === CSSRadialShape.CIRCLE) {\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\n }\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n rx = Math.max(Math.abs(x), Math.abs(x - width));\n ry = Math.max(Math.abs(y), Math.abs(y - height));\n }\n break;\n case CSSRadialExtent.FARTHEST_CORNER:\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\n if (gradient.shape === CSSRadialShape.CIRCLE) {\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\n }\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\n rx = distance(cx - x, (cy - y) / c);\n ry = c * rx;\n }\n break;\n }\n if (Array.isArray(gradient.size)) {\n rx = getAbsoluteValue(gradient.size[0], width);\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\n }\n return [rx, ry];\n };\n\n var linearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = angle.parse(context, firstToken);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT };\n };\n\n var prefixLinearGradient = function (context, tokens) {\n var angle$1 = deg(180);\n var stops = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n if (i === 0) {\n var firstToken = arg[0];\n if (firstToken.type === 20 /* IDENT_TOKEN */ &&\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\n angle$1 = parseNamedSide(arg);\n return;\n }\n else if (isAngle(firstToken)) {\n angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);\n return;\n }\n }\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n });\n return {\n angle: angle$1,\n stops: stops,\n type: CSSImageType.LINEAR_GRADIENT\n };\n };\n\n var webkitGradient = function (context, tokens) {\n var angle = deg(180);\n var stops = [];\n var type = CSSImageType.LINEAR_GRADIENT;\n var shape = CSSRadialShape.CIRCLE;\n var size = CSSRadialExtent.FARTHEST_CORNER;\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var firstToken = arg[0];\n if (i === 0) {\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\n type = CSSImageType.LINEAR_GRADIENT;\n return;\n }\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\n type = CSSImageType.RADIAL_GRADIENT;\n return;\n }\n }\n if (firstToken.type === 18 /* FUNCTION */) {\n if (firstToken.name === 'from') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: ZERO_LENGTH, color: color });\n }\n else if (firstToken.name === 'to') {\n var color = color$1.parse(context, firstToken.values[0]);\n stops.push({ stop: HUNDRED_PERCENT, color: color });\n }\n else if (firstToken.name === 'color-stop') {\n var values = firstToken.values.filter(nonFunctionArgSeparator);\n if (values.length === 2) {\n var color = color$1.parse(context, values[1]);\n var stop_1 = values[0];\n if (isNumberToken(stop_1)) {\n stops.push({\n stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags },\n color: color\n });\n }\n }\n }\n }\n });\n return type === CSSImageType.LINEAR_GRADIENT\n ? {\n angle: (angle + deg(180)) % deg(360),\n stops: stops,\n type: type\n }\n : { size: size, shape: shape, stops: stops, position: position, type: type };\n };\n\n var CLOSEST_SIDE = 'closest-side';\n var FARTHEST_SIDE = 'farthest-side';\n var CLOSEST_CORNER = 'closest-corner';\n var FARTHEST_CORNER = 'farthest-corner';\n var CIRCLE = 'circle';\n var ELLIPSE = 'ellipse';\n var COVER = 'cover';\n var CONTAIN = 'contain';\n var radialGradient = function (context, tokens) {\n var shape = CSSRadialShape.CIRCLE;\n var size = CSSRadialExtent.FARTHEST_CORNER;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n var isAtPosition_1 = false;\n isColorStop = arg.reduce(function (acc, token) {\n if (isAtPosition_1) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return acc;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return acc;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return acc;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n }\n }\n else if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = CSSRadialShape.CIRCLE;\n return false;\n case ELLIPSE:\n shape = CSSRadialShape.ELLIPSE;\n return false;\n case 'at':\n isAtPosition_1 = true;\n return false;\n case CLOSEST_SIDE:\n size = CSSRadialExtent.CLOSEST_SIDE;\n return false;\n case COVER:\n case FARTHEST_SIDE:\n size = CSSRadialExtent.FARTHEST_SIDE;\n return false;\n case CONTAIN:\n case CLOSEST_CORNER:\n size = CSSRadialExtent.CLOSEST_CORNER;\n return false;\n case FARTHEST_CORNER:\n size = CSSRadialExtent.FARTHEST_CORNER;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\n };\n\n var prefixRadialGradient = function (context, tokens) {\n var shape = CSSRadialShape.CIRCLE;\n var size = CSSRadialExtent.FARTHEST_CORNER;\n var stops = [];\n var position = [];\n parseFunctionArgs(tokens).forEach(function (arg, i) {\n var isColorStop = true;\n if (i === 0) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'center':\n position.push(FIFTY_PERCENT);\n return false;\n case 'top':\n case 'left':\n position.push(ZERO_LENGTH);\n return false;\n case 'right':\n case 'bottom':\n position.push(HUNDRED_PERCENT);\n return false;\n }\n }\n else if (isLengthPercentage(token) || isLength(token)) {\n position.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n else if (i === 1) {\n isColorStop = arg.reduce(function (acc, token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case CIRCLE:\n shape = CSSRadialShape.CIRCLE;\n return false;\n case ELLIPSE:\n shape = CSSRadialShape.ELLIPSE;\n return false;\n case CONTAIN:\n case CLOSEST_SIDE:\n size = CSSRadialExtent.CLOSEST_SIDE;\n return false;\n case FARTHEST_SIDE:\n size = CSSRadialExtent.FARTHEST_SIDE;\n return false;\n case CLOSEST_CORNER:\n size = CSSRadialExtent.CLOSEST_CORNER;\n return false;\n case COVER:\n case FARTHEST_CORNER:\n size = CSSRadialExtent.FARTHEST_CORNER;\n return false;\n }\n }\n else if (isLength(token) || isLengthPercentage(token)) {\n if (!Array.isArray(size)) {\n size = [];\n }\n size.push(token);\n return false;\n }\n return acc;\n }, isColorStop);\n }\n if (isColorStop) {\n var colorStop = parseColorStop(context, arg);\n stops.push(colorStop);\n }\n });\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\n };\n\n var CSSImageType;\n (function (CSSImageType) {\n CSSImageType[CSSImageType[\"URL\"] = 0] = \"URL\";\n CSSImageType[CSSImageType[\"LINEAR_GRADIENT\"] = 1] = \"LINEAR_GRADIENT\";\n CSSImageType[CSSImageType[\"RADIAL_GRADIENT\"] = 2] = \"RADIAL_GRADIENT\";\n })(CSSImageType || (CSSImageType = {}));\n var isLinearGradient = function (background) {\n return background.type === CSSImageType.LINEAR_GRADIENT;\n };\n var isRadialGradient = function (background) {\n return background.type === CSSImageType.RADIAL_GRADIENT;\n };\n var CSSRadialShape;\n (function (CSSRadialShape) {\n CSSRadialShape[CSSRadialShape[\"CIRCLE\"] = 0] = \"CIRCLE\";\n CSSRadialShape[CSSRadialShape[\"ELLIPSE\"] = 1] = \"ELLIPSE\";\n })(CSSRadialShape || (CSSRadialShape = {}));\n var CSSRadialExtent;\n (function (CSSRadialExtent) {\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_SIDE\"] = 0] = \"CLOSEST_SIDE\";\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_SIDE\"] = 1] = \"FARTHEST_SIDE\";\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_CORNER\"] = 2] = \"CLOSEST_CORNER\";\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_CORNER\"] = 3] = \"FARTHEST_CORNER\";\n })(CSSRadialExtent || (CSSRadialExtent = {}));\n var image = {\n name: 'image',\n parse: function (context, value) {\n if (value.type === 22 /* URL_TOKEN */) {\n var image_1 = { url: value.value, type: CSSImageType.URL };\n context.cache.addImage(value.value);\n return image_1;\n }\n if (value.type === 18 /* FUNCTION */) {\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\n if (typeof imageFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\n }\n return imageFunction(context, value.values);\n }\n throw new Error(\"Unsupported image type \" + value.type);\n }\n };\n function isSupportedImage(value) {\n return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&\n (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]));\n }\n var SUPPORTED_IMAGE_FUNCTIONS = {\n 'linear-gradient': linearGradient,\n '-moz-linear-gradient': prefixLinearGradient,\n '-ms-linear-gradient': prefixLinearGradient,\n '-o-linear-gradient': prefixLinearGradient,\n '-webkit-linear-gradient': prefixLinearGradient,\n 'radial-gradient': radialGradient,\n '-moz-radial-gradient': prefixRadialGradient,\n '-ms-radial-gradient': prefixRadialGradient,\n '-o-radial-gradient': prefixRadialGradient,\n '-webkit-radial-gradient': prefixRadialGradient,\n '-webkit-gradient': webkitGradient\n };\n\n var backgroundImage = {\n name: 'background-image',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens\n .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); })\n .map(function (value) { return image.parse(context, value); });\n }\n };\n\n var backgroundOrigin = {\n name: 'background-origin',\n initialValue: 'border-box',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.map(function (token) {\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'padding-box':\n return 1 /* PADDING_BOX */;\n case 'content-box':\n return 2 /* CONTENT_BOX */;\n }\n }\n return 0 /* BORDER_BOX */;\n });\n }\n };\n\n var backgroundPosition = {\n name: 'background-position',\n initialValue: '0% 0%',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) { return values.filter(isLengthPercentage); })\n .map(parseLengthPercentageTuple);\n }\n };\n\n var BACKGROUND_REPEAT;\n (function (BACKGROUND_REPEAT) {\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT\"] = 0] = \"REPEAT\";\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"NO_REPEAT\"] = 1] = \"NO_REPEAT\";\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_X\"] = 2] = \"REPEAT_X\";\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_Y\"] = 3] = \"REPEAT_Y\";\n })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {}));\n var backgroundRepeat = {\n name: 'background-repeat',\n initialValue: 'repeat',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens)\n .map(function (values) {\n return values\n .filter(isIdentToken)\n .map(function (token) { return token.value; })\n .join(' ');\n })\n .map(parseBackgroundRepeat);\n }\n };\n var parseBackgroundRepeat = function (value) {\n switch (value) {\n case 'no-repeat':\n return BACKGROUND_REPEAT.NO_REPEAT;\n case 'repeat-x':\n case 'repeat no-repeat':\n return BACKGROUND_REPEAT.REPEAT_X;\n case 'repeat-y':\n case 'no-repeat repeat':\n return BACKGROUND_REPEAT.REPEAT_Y;\n case 'repeat':\n default:\n return BACKGROUND_REPEAT.REPEAT;\n }\n };\n\n var BACKGROUND_SIZE;\n (function (BACKGROUND_SIZE) {\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\n })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\n var backgroundSize = {\n name: 'background-size',\n initialValue: '0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\n }\n };\n var isBackgroundSizeInfoToken = function (value) {\n return isIdentToken(value) || isLengthPercentage(value);\n };\n\n var borderColorForSide = function (side) { return ({\n name: \"border-\" + side + \"-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n }); };\n var borderTopColor = borderColorForSide('top');\n var borderRightColor = borderColorForSide('right');\n var borderBottomColor = borderColorForSide('bottom');\n var borderLeftColor = borderColorForSide('left');\n\n var borderRadiusForSide = function (side) { return ({\n name: \"border-radius-\" + side,\n initialValue: '0 0',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));\n }\n }); };\n var borderTopLeftRadius = borderRadiusForSide('top-left');\n var borderTopRightRadius = borderRadiusForSide('top-right');\n var borderBottomRightRadius = borderRadiusForSide('bottom-right');\n var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n var BORDER_STYLE;\n (function (BORDER_STYLE) {\n BORDER_STYLE[BORDER_STYLE[\"NONE\"] = 0] = \"NONE\";\n BORDER_STYLE[BORDER_STYLE[\"SOLID\"] = 1] = \"SOLID\";\n BORDER_STYLE[BORDER_STYLE[\"DASHED\"] = 2] = \"DASHED\";\n BORDER_STYLE[BORDER_STYLE[\"DOTTED\"] = 3] = \"DOTTED\";\n BORDER_STYLE[BORDER_STYLE[\"DOUBLE\"] = 4] = \"DOUBLE\";\n })(BORDER_STYLE || (BORDER_STYLE = {}));\n var borderStyleForSide = function (side) { return ({\n name: \"border-\" + side + \"-style\",\n initialValue: 'solid',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, style) {\n switch (style) {\n case 'none':\n return BORDER_STYLE.NONE;\n case 'dashed':\n return BORDER_STYLE.DASHED;\n case 'dotted':\n return BORDER_STYLE.DOTTED;\n case 'double':\n return BORDER_STYLE.DOUBLE;\n }\n return BORDER_STYLE.SOLID;\n }\n }); };\n var borderTopStyle = borderStyleForSide('top');\n var borderRightStyle = borderStyleForSide('right');\n var borderBottomStyle = borderStyleForSide('bottom');\n var borderLeftStyle = borderStyleForSide('left');\n\n var borderWidthForSide = function (side) { return ({\n name: \"border-\" + side + \"-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n }); };\n var borderTopWidth = borderWidthForSide('top');\n var borderRightWidth = borderWidthForSide('right');\n var borderBottomWidth = borderWidthForSide('bottom');\n var borderLeftWidth = borderWidthForSide('left');\n\n var color = {\n name: \"color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var direction = {\n name: 'direction',\n initialValue: 'ltr',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, direction) {\n switch (direction) {\n case 'rtl':\n return 1 /* RTL */;\n case 'ltr':\n default:\n return 0 /* LTR */;\n }\n }\n };\n\n var display = {\n name: 'display',\n initialValue: 'inline-block',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\n return bit | parseDisplayValue(token.value);\n }, 0 /* NONE */);\n }\n };\n var parseDisplayValue = function (display) {\n switch (display) {\n case 'block':\n case '-webkit-box':\n return 2 /* BLOCK */;\n case 'inline':\n return 4 /* INLINE */;\n case 'run-in':\n return 8 /* RUN_IN */;\n case 'flow':\n return 16 /* FLOW */;\n case 'flow-root':\n return 32 /* FLOW_ROOT */;\n case 'table':\n return 64 /* TABLE */;\n case 'flex':\n case '-webkit-flex':\n return 128 /* FLEX */;\n case 'grid':\n case '-ms-grid':\n return 256 /* GRID */;\n case 'ruby':\n return 512 /* RUBY */;\n case 'subgrid':\n return 1024 /* SUBGRID */;\n case 'list-item':\n return 2048 /* LIST_ITEM */;\n case 'table-row-group':\n return 4096 /* TABLE_ROW_GROUP */;\n case 'table-header-group':\n return 8192 /* TABLE_HEADER_GROUP */;\n case 'table-footer-group':\n return 16384 /* TABLE_FOOTER_GROUP */;\n case 'table-row':\n return 32768 /* TABLE_ROW */;\n case 'table-cell':\n return 65536 /* TABLE_CELL */;\n case 'table-column-group':\n return 131072 /* TABLE_COLUMN_GROUP */;\n case 'table-column':\n return 262144 /* TABLE_COLUMN */;\n case 'table-caption':\n return 524288 /* TABLE_CAPTION */;\n case 'ruby-base':\n return 1048576 /* RUBY_BASE */;\n case 'ruby-text':\n return 2097152 /* RUBY_TEXT */;\n case 'ruby-base-container':\n return 4194304 /* RUBY_BASE_CONTAINER */;\n case 'ruby-text-container':\n return 8388608 /* RUBY_TEXT_CONTAINER */;\n case 'contents':\n return 16777216 /* CONTENTS */;\n case 'inline-block':\n return 33554432 /* INLINE_BLOCK */;\n case 'inline-list-item':\n return 67108864 /* INLINE_LIST_ITEM */;\n case 'inline-table':\n return 134217728 /* INLINE_TABLE */;\n case 'inline-flex':\n return 268435456 /* INLINE_FLEX */;\n case 'inline-grid':\n return 536870912 /* INLINE_GRID */;\n }\n return 0 /* NONE */;\n };\n\n var FLOAT;\n (function (FLOAT) {\n FLOAT[FLOAT[\"NONE\"] = 0] = \"NONE\";\n FLOAT[FLOAT[\"LEFT\"] = 1] = \"LEFT\";\n FLOAT[FLOAT[\"RIGHT\"] = 2] = \"RIGHT\";\n FLOAT[FLOAT[\"INLINE_START\"] = 3] = \"INLINE_START\";\n FLOAT[FLOAT[\"INLINE_END\"] = 4] = \"INLINE_END\";\n })(FLOAT || (FLOAT = {}));\n var float = {\n name: 'float',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, float) {\n switch (float) {\n case 'left':\n return FLOAT.LEFT;\n case 'right':\n return FLOAT.RIGHT;\n case 'inline-start':\n return FLOAT.INLINE_START;\n case 'inline-end':\n return FLOAT.INLINE_END;\n }\n return FLOAT.NONE;\n }\n };\n\n var letterSpacing = {\n name: 'letter-spacing',\n initialValue: '0',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {\n return 0;\n }\n if (token.type === 17 /* NUMBER_TOKEN */) {\n return token.number;\n }\n if (token.type === 15 /* DIMENSION_TOKEN */) {\n return token.number;\n }\n return 0;\n }\n };\n\n var LINE_BREAK;\n (function (LINE_BREAK) {\n LINE_BREAK[\"NORMAL\"] = \"normal\";\n LINE_BREAK[\"STRICT\"] = \"strict\";\n })(LINE_BREAK || (LINE_BREAK = {}));\n var lineBreak = {\n name: 'line-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, lineBreak) {\n switch (lineBreak) {\n case 'strict':\n return LINE_BREAK.STRICT;\n case 'normal':\n default:\n return LINE_BREAK.NORMAL;\n }\n }\n };\n\n var lineHeight = {\n name: 'line-height',\n initialValue: 'normal',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n };\n var computeLineHeight = function (token, fontSize) {\n if (isIdentToken(token) && token.value === 'normal') {\n return 1.2 * fontSize;\n }\n else if (token.type === 17 /* NUMBER_TOKEN */) {\n return fontSize * token.number;\n }\n else if (isLengthPercentage(token)) {\n return getAbsoluteValue(token, fontSize);\n }\n return fontSize;\n };\n\n var listStyleImage = {\n name: 'list-style-image',\n initialValue: 'none',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n return image.parse(context, token);\n }\n };\n\n var LIST_STYLE_POSITION;\n (function (LIST_STYLE_POSITION) {\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"INSIDE\"] = 0] = \"INSIDE\";\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"OUTSIDE\"] = 1] = \"OUTSIDE\";\n })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {}));\n var listStylePosition = {\n name: 'list-style-position',\n initialValue: 'outside',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'inside':\n return LIST_STYLE_POSITION.INSIDE;\n case 'outside':\n default:\n return LIST_STYLE_POSITION.OUTSIDE;\n }\n }\n };\n\n var LIST_STYLE_TYPE;\n (function (LIST_STYLE_TYPE) {\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"NONE\"] = -1] = \"NONE\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISC\"] = 0] = \"DISC\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CIRCLE\"] = 1] = \"CIRCLE\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SQUARE\"] = 2] = \"SQUARE\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL\"] = 3] = \"DECIMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_DECIMAL\"] = 4] = \"CJK_DECIMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL_LEADING_ZERO\"] = 5] = \"DECIMAL_LEADING_ZERO\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ROMAN\"] = 6] = \"LOWER_ROMAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ROMAN\"] = 7] = \"UPPER_ROMAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_GREEK\"] = 8] = \"LOWER_GREEK\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ALPHA\"] = 9] = \"LOWER_ALPHA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ALPHA\"] = 10] = \"UPPER_ALPHA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARABIC_INDIC\"] = 11] = \"ARABIC_INDIC\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARMENIAN\"] = 12] = \"ARMENIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"BENGALI\"] = 13] = \"BENGALI\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CAMBODIAN\"] = 14] = \"CAMBODIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_EARTHLY_BRANCH\"] = 15] = \"CJK_EARTHLY_BRANCH\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_HEAVENLY_STEM\"] = 16] = \"CJK_HEAVENLY_STEM\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_IDEOGRAPHIC\"] = 17] = \"CJK_IDEOGRAPHIC\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DEVANAGARI\"] = 18] = \"DEVANAGARI\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ETHIOPIC_NUMERIC\"] = 19] = \"ETHIOPIC_NUMERIC\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GEORGIAN\"] = 20] = \"GEORGIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GUJARATI\"] = 21] = \"GUJARATI\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GURMUKHI\"] = 22] = \"GURMUKHI\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HEBREW\"] = 22] = \"HEBREW\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA\"] = 23] = \"HIRAGANA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA_IROHA\"] = 24] = \"HIRAGANA_IROHA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_FORMAL\"] = 25] = \"JAPANESE_FORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_INFORMAL\"] = 26] = \"JAPANESE_INFORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KANNADA\"] = 27] = \"KANNADA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA\"] = 28] = \"KATAKANA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA_IROHA\"] = 29] = \"KATAKANA_IROHA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KHMER\"] = 30] = \"KHMER\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANGUL_FORMAL\"] = 31] = \"KOREAN_HANGUL_FORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_FORMAL\"] = 32] = \"KOREAN_HANJA_FORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_INFORMAL\"] = 33] = \"KOREAN_HANJA_INFORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LAO\"] = 34] = \"LAO\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ARMENIAN\"] = 35] = \"LOWER_ARMENIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MALAYALAM\"] = 36] = \"MALAYALAM\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MONGOLIAN\"] = 37] = \"MONGOLIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MYANMAR\"] = 38] = \"MYANMAR\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ORIYA\"] = 39] = \"ORIYA\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"PERSIAN\"] = 40] = \"PERSIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_FORMAL\"] = 41] = \"SIMP_CHINESE_FORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_INFORMAL\"] = 42] = \"SIMP_CHINESE_INFORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TAMIL\"] = 43] = \"TAMIL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TELUGU\"] = 44] = \"TELUGU\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"THAI\"] = 45] = \"THAI\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TIBETAN\"] = 46] = \"TIBETAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_FORMAL\"] = 47] = \"TRAD_CHINESE_FORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_INFORMAL\"] = 48] = \"TRAD_CHINESE_INFORMAL\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ARMENIAN\"] = 49] = \"UPPER_ARMENIAN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_OPEN\"] = 50] = \"DISCLOSURE_OPEN\";\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_CLOSED\"] = 51] = \"DISCLOSURE_CLOSED\";\n })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {}));\n var listStyleType = {\n name: 'list-style-type',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, type) {\n switch (type) {\n case 'disc':\n return LIST_STYLE_TYPE.DISC;\n case 'circle':\n return LIST_STYLE_TYPE.CIRCLE;\n case 'square':\n return LIST_STYLE_TYPE.SQUARE;\n case 'decimal':\n return LIST_STYLE_TYPE.DECIMAL;\n case 'cjk-decimal':\n return LIST_STYLE_TYPE.CJK_DECIMAL;\n case 'decimal-leading-zero':\n return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;\n case 'lower-roman':\n return LIST_STYLE_TYPE.LOWER_ROMAN;\n case 'upper-roman':\n return LIST_STYLE_TYPE.UPPER_ROMAN;\n case 'lower-greek':\n return LIST_STYLE_TYPE.LOWER_GREEK;\n case 'lower-alpha':\n return LIST_STYLE_TYPE.LOWER_ALPHA;\n case 'upper-alpha':\n return LIST_STYLE_TYPE.UPPER_ALPHA;\n case 'arabic-indic':\n return LIST_STYLE_TYPE.ARABIC_INDIC;\n case 'armenian':\n return LIST_STYLE_TYPE.ARMENIAN;\n case 'bengali':\n return LIST_STYLE_TYPE.BENGALI;\n case 'cambodian':\n return LIST_STYLE_TYPE.CAMBODIAN;\n case 'cjk-earthly-branch':\n return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;\n case 'cjk-heavenly-stem':\n return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;\n case 'cjk-ideographic':\n return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;\n case 'devanagari':\n return LIST_STYLE_TYPE.DEVANAGARI;\n case 'ethiopic-numeric':\n return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;\n case 'georgian':\n return LIST_STYLE_TYPE.GEORGIAN;\n case 'gujarati':\n return LIST_STYLE_TYPE.GUJARATI;\n case 'gurmukhi':\n return LIST_STYLE_TYPE.GURMUKHI;\n case 'hebrew':\n return LIST_STYLE_TYPE.HEBREW;\n case 'hiragana':\n return LIST_STYLE_TYPE.HIRAGANA;\n case 'hiragana-iroha':\n return LIST_STYLE_TYPE.HIRAGANA_IROHA;\n case 'japanese-formal':\n return LIST_STYLE_TYPE.JAPANESE_FORMAL;\n case 'japanese-informal':\n return LIST_STYLE_TYPE.JAPANESE_INFORMAL;\n case 'kannada':\n return LIST_STYLE_TYPE.KANNADA;\n case 'katakana':\n return LIST_STYLE_TYPE.KATAKANA;\n case 'katakana-iroha':\n return LIST_STYLE_TYPE.KATAKANA_IROHA;\n case 'khmer':\n return LIST_STYLE_TYPE.KHMER;\n case 'korean-hangul-formal':\n return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;\n case 'korean-hanja-formal':\n return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;\n case 'korean-hanja-informal':\n return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;\n case 'lao':\n return LIST_STYLE_TYPE.LAO;\n case 'lower-armenian':\n return LIST_STYLE_TYPE.LOWER_ARMENIAN;\n case 'malayalam':\n return LIST_STYLE_TYPE.MALAYALAM;\n case 'mongolian':\n return LIST_STYLE_TYPE.MONGOLIAN;\n case 'myanmar':\n return LIST_STYLE_TYPE.MYANMAR;\n case 'oriya':\n return LIST_STYLE_TYPE.ORIYA;\n case 'persian':\n return LIST_STYLE_TYPE.PERSIAN;\n case 'simp-chinese-formal':\n return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;\n case 'simp-chinese-informal':\n return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;\n case 'tamil':\n return LIST_STYLE_TYPE.TAMIL;\n case 'telugu':\n return LIST_STYLE_TYPE.TELUGU;\n case 'thai':\n return LIST_STYLE_TYPE.THAI;\n case 'tibetan':\n return LIST_STYLE_TYPE.TIBETAN;\n case 'trad-chinese-formal':\n return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;\n case 'trad-chinese-informal':\n return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;\n case 'upper-armenian':\n return LIST_STYLE_TYPE.UPPER_ARMENIAN;\n case 'disclosure-open':\n return LIST_STYLE_TYPE.DISCLOSURE_OPEN;\n case 'disclosure-closed':\n return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;\n case 'none':\n default:\n return LIST_STYLE_TYPE.NONE;\n }\n }\n };\n\n var marginForSide = function (side) { return ({\n name: \"margin-\" + side,\n initialValue: '0',\n prefix: false,\n type: 4 /* TOKEN_VALUE */\n }); };\n var marginTop = marginForSide('top');\n var marginRight = marginForSide('right');\n var marginBottom = marginForSide('bottom');\n var marginLeft = marginForSide('left');\n\n var OVERFLOW;\n (function (OVERFLOW) {\n OVERFLOW[OVERFLOW[\"VISIBLE\"] = 0] = \"VISIBLE\";\n OVERFLOW[OVERFLOW[\"HIDDEN\"] = 1] = \"HIDDEN\";\n OVERFLOW[OVERFLOW[\"SCROLL\"] = 2] = \"SCROLL\";\n OVERFLOW[OVERFLOW[\"CLIP\"] = 3] = \"CLIP\";\n OVERFLOW[OVERFLOW[\"AUTO\"] = 4] = \"AUTO\";\n })(OVERFLOW || (OVERFLOW = {}));\n var overflow = {\n name: 'overflow',\n initialValue: 'visible',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (overflow) {\n switch (overflow.value) {\n case 'hidden':\n return OVERFLOW.HIDDEN;\n case 'scroll':\n return OVERFLOW.SCROLL;\n case 'clip':\n return OVERFLOW.CLIP;\n case 'auto':\n return OVERFLOW.AUTO;\n case 'visible':\n default:\n return OVERFLOW.VISIBLE;\n }\n });\n }\n };\n\n var overflowWrap = {\n name: 'overflow-wrap',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'break-word':\n return \"break-word\" /* BREAK_WORD */;\n case 'normal':\n default:\n return \"normal\" /* NORMAL */;\n }\n }\n };\n\n var paddingForSide = function (side) { return ({\n name: \"padding-\" + side,\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length-percentage'\n }); };\n var paddingTop = paddingForSide('top');\n var paddingRight = paddingForSide('right');\n var paddingBottom = paddingForSide('bottom');\n var paddingLeft = paddingForSide('left');\n\n var TEXT_ALIGN;\n (function (TEXT_ALIGN) {\n TEXT_ALIGN[TEXT_ALIGN[\"LEFT\"] = 0] = \"LEFT\";\n TEXT_ALIGN[TEXT_ALIGN[\"CENTER\"] = 1] = \"CENTER\";\n TEXT_ALIGN[TEXT_ALIGN[\"RIGHT\"] = 2] = \"RIGHT\";\n })(TEXT_ALIGN || (TEXT_ALIGN = {}));\n var textAlign = {\n name: 'text-align',\n initialValue: 'left',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textAlign) {\n switch (textAlign) {\n case 'right':\n return TEXT_ALIGN.RIGHT;\n case 'center':\n case 'justify':\n return TEXT_ALIGN.CENTER;\n case 'left':\n default:\n return TEXT_ALIGN.LEFT;\n }\n }\n };\n\n var POSITION;\n (function (POSITION) {\n POSITION[POSITION[\"STATIC\"] = 0] = \"STATIC\";\n POSITION[POSITION[\"RELATIVE\"] = 1] = \"RELATIVE\";\n POSITION[POSITION[\"ABSOLUTE\"] = 2] = \"ABSOLUTE\";\n POSITION[POSITION[\"FIXED\"] = 3] = \"FIXED\";\n POSITION[POSITION[\"STICKY\"] = 4] = \"STICKY\";\n })(POSITION || (POSITION = {}));\n var position = {\n name: 'position',\n initialValue: 'static',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, position) {\n switch (position) {\n case 'relative':\n return POSITION.RELATIVE;\n case 'absolute':\n return POSITION.ABSOLUTE;\n case 'fixed':\n return POSITION.FIXED;\n case 'sticky':\n return POSITION.STICKY;\n }\n return POSITION.STATIC;\n }\n };\n\n var textShadow = {\n name: 'text-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: COLORS.TRANSPARENT,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else {\n shadow.blur = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var TEXT_TRANSFORM;\n (function (TEXT_TRANSFORM) {\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"NONE\"] = 0] = \"NONE\";\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"LOWERCASE\"] = 1] = \"LOWERCASE\";\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"UPPERCASE\"] = 2] = \"UPPERCASE\";\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"CAPITALIZE\"] = 3] = \"CAPITALIZE\";\n })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {}));\n var textTransform = {\n name: 'text-transform',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, textTransform) {\n switch (textTransform) {\n case 'uppercase':\n return TEXT_TRANSFORM.UPPERCASE;\n case 'lowercase':\n return TEXT_TRANSFORM.LOWERCASE;\n case 'capitalize':\n return TEXT_TRANSFORM.CAPITALIZE;\n }\n return TEXT_TRANSFORM.NONE;\n }\n };\n\n var transform$1 = {\n name: 'transform',\n initialValue: 'none',\n prefix: true,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\n return null;\n }\n if (token.type === 18 /* FUNCTION */) {\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\n if (typeof transformFunction === 'undefined') {\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\n }\n return transformFunction(token.values);\n }\n return null;\n }\n };\n var matrix = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n return values.length === 6 ? values : null;\n };\n // doesn't support 3D transforms at the moment\n var matrix3d = function (args) {\n var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\n var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15];\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\n };\n var SUPPORTED_TRANSFORM_FUNCTIONS = {\n matrix: matrix,\n matrix3d: matrix3d\n };\n\n var DEFAULT_VALUE = {\n type: 16 /* PERCENTAGE_TOKEN */,\n number: 50,\n flags: FLAG_INTEGER\n };\n var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\n var transformOrigin = {\n name: 'transform-origin',\n initialValue: '50% 50%',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var origins = tokens.filter(isLengthPercentage);\n if (origins.length !== 2) {\n return DEFAULT;\n }\n return [origins[0], origins[1]];\n }\n };\n\n var VISIBILITY;\n (function (VISIBILITY) {\n VISIBILITY[VISIBILITY[\"VISIBLE\"] = 0] = \"VISIBLE\";\n VISIBILITY[VISIBILITY[\"HIDDEN\"] = 1] = \"HIDDEN\";\n VISIBILITY[VISIBILITY[\"COLLAPSE\"] = 2] = \"COLLAPSE\";\n })(VISIBILITY || (VISIBILITY = {}));\n var visibility = {\n name: 'visible',\n initialValue: 'none',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, visibility) {\n switch (visibility) {\n case 'hidden':\n return VISIBILITY.HIDDEN;\n case 'collapse':\n return VISIBILITY.COLLAPSE;\n case 'visible':\n default:\n return VISIBILITY.VISIBLE;\n }\n }\n };\n\n var WORD_BREAK;\n (function (WORD_BREAK) {\n WORD_BREAK[\"NORMAL\"] = \"normal\";\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\n })(WORD_BREAK || (WORD_BREAK = {}));\n var wordBreak = {\n name: 'word-break',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, wordBreak) {\n switch (wordBreak) {\n case 'break-all':\n return WORD_BREAK.BREAK_ALL;\n case 'keep-all':\n return WORD_BREAK.KEEP_ALL;\n case 'normal':\n default:\n return WORD_BREAK.NORMAL;\n }\n }\n };\n\n var zIndex = {\n name: 'z-index',\n initialValue: 'auto',\n prefix: false,\n type: 0 /* VALUE */,\n parse: function (_context, token) {\n if (token.type === 20 /* IDENT_TOKEN */) {\n return { auto: true, order: 0 };\n }\n if (isNumberToken(token)) {\n return { auto: false, order: token.number };\n }\n throw new Error(\"Invalid z-index number parsed\");\n }\n };\n\n var time = {\n name: 'time',\n parse: function (_context, value) {\n if (value.type === 15 /* DIMENSION_TOKEN */) {\n switch (value.unit.toLowerCase()) {\n case 's':\n return 1000 * value.number;\n case 'ms':\n return value.number;\n }\n }\n throw new Error(\"Unsupported time type\");\n }\n };\n\n var opacity = {\n name: 'opacity',\n initialValue: '1',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n return 1;\n }\n };\n\n var textDecorationColor = {\n name: \"text-decoration-color\",\n initialValue: 'transparent',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var textDecorationLine = {\n name: 'text-decoration-line',\n initialValue: 'none',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n return tokens\n .filter(isIdentToken)\n .map(function (token) {\n switch (token.value) {\n case 'underline':\n return 1 /* UNDERLINE */;\n case 'overline':\n return 2 /* OVERLINE */;\n case 'line-through':\n return 3 /* LINE_THROUGH */;\n case 'none':\n return 4 /* BLINK */;\n }\n return 0 /* NONE */;\n })\n .filter(function (line) { return line !== 0 /* NONE */; });\n }\n };\n\n var fontFamily = {\n name: \"font-family\",\n initialValue: '',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var accumulator = [];\n var results = [];\n tokens.forEach(function (token) {\n switch (token.type) {\n case 20 /* IDENT_TOKEN */:\n case 0 /* STRING_TOKEN */:\n accumulator.push(token.value);\n break;\n case 17 /* NUMBER_TOKEN */:\n accumulator.push(token.number.toString());\n break;\n case 4 /* COMMA_TOKEN */:\n results.push(accumulator.join(' '));\n accumulator.length = 0;\n break;\n }\n });\n if (accumulator.length) {\n results.push(accumulator.join(' '));\n }\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\n }\n };\n\n var fontSize = {\n name: \"font-size\",\n initialValue: '0',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'length'\n };\n\n var fontWeight = {\n name: 'font-weight',\n initialValue: 'normal',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isNumberToken(token)) {\n return token.number;\n }\n if (isIdentToken(token)) {\n switch (token.value) {\n case 'bold':\n return 700;\n case 'normal':\n default:\n return 400;\n }\n }\n return 400;\n }\n };\n\n var fontVariant = {\n name: 'font-variant',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\n }\n };\n\n var FONT_STYLE;\n (function (FONT_STYLE) {\n FONT_STYLE[\"NORMAL\"] = \"normal\";\n FONT_STYLE[\"ITALIC\"] = \"italic\";\n FONT_STYLE[\"OBLIQUE\"] = \"oblique\";\n })(FONT_STYLE || (FONT_STYLE = {}));\n var fontStyle = {\n name: 'font-style',\n initialValue: 'normal',\n prefix: false,\n type: 2 /* IDENT_VALUE */,\n parse: function (_context, overflow) {\n switch (overflow) {\n case 'oblique':\n return FONT_STYLE.OBLIQUE;\n case 'italic':\n return FONT_STYLE.ITALIC;\n case 'normal':\n default:\n return FONT_STYLE.NORMAL;\n }\n }\n };\n\n var contains = function (bit, value) { return (bit & value) !== 0; };\n\n var content = {\n name: 'content',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return [];\n }\n return tokens;\n }\n };\n\n var counterIncrement = {\n name: 'counter-increment',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var increments = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (counter.type === 20 /* IDENT_TOKEN */) {\n var increment = next && isNumberToken(next) ? next.number : 1;\n increments.push({ counter: counter.value, increment: increment });\n }\n }\n return increments;\n }\n };\n\n var counterReset = {\n name: 'counter-reset',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return [];\n }\n var resets = [];\n var filtered = tokens.filter(nonWhiteSpace);\n for (var i = 0; i < filtered.length; i++) {\n var counter = filtered[i];\n var next = filtered[i + 1];\n if (isIdentToken(counter) && counter.value !== 'none') {\n var reset = next && isNumberToken(next) ? next.number : 0;\n resets.push({ counter: counter.value, reset: reset });\n }\n }\n return resets;\n }\n };\n\n var duration = {\n name: 'duration',\n initialValue: '0s',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (context, tokens) {\n return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); });\n }\n };\n\n var quotes = {\n name: 'quotes',\n initialValue: 'none',\n prefix: true,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n if (tokens.length === 0) {\n return null;\n }\n var first = tokens[0];\n if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\n return null;\n }\n var quotes = [];\n var filtered = tokens.filter(isStringToken);\n if (filtered.length % 2 !== 0) {\n return null;\n }\n for (var i = 0; i < filtered.length; i += 2) {\n var open_1 = filtered[i].value;\n var close_1 = filtered[i + 1].value;\n quotes.push({ open: open_1, close: close_1 });\n }\n return quotes;\n }\n };\n var getQuote = function (quotes, depth, open) {\n if (!quotes) {\n return '';\n }\n var quote = quotes[Math.min(depth, quotes.length - 1)];\n if (!quote) {\n return '';\n }\n return open ? quote.open : quote.close;\n };\n\n var boxShadow = {\n name: 'box-shadow',\n initialValue: 'none',\n type: 1 /* LIST */,\n prefix: false,\n parse: function (context, tokens) {\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\n return [];\n }\n return parseFunctionArgs(tokens).map(function (values) {\n var shadow = {\n color: 0x000000ff,\n offsetX: ZERO_LENGTH,\n offsetY: ZERO_LENGTH,\n blur: ZERO_LENGTH,\n spread: ZERO_LENGTH,\n inset: false\n };\n var c = 0;\n for (var i = 0; i < values.length; i++) {\n var token = values[i];\n if (isIdentWithValue(token, 'inset')) {\n shadow.inset = true;\n }\n else if (isLength(token)) {\n if (c === 0) {\n shadow.offsetX = token;\n }\n else if (c === 1) {\n shadow.offsetY = token;\n }\n else if (c === 2) {\n shadow.blur = token;\n }\n else {\n shadow.spread = token;\n }\n c++;\n }\n else {\n shadow.color = color$1.parse(context, token);\n }\n }\n return shadow;\n });\n }\n };\n\n var PAINT_ORDER_LAYER;\n (function (PAINT_ORDER_LAYER) {\n PAINT_ORDER_LAYER[PAINT_ORDER_LAYER[\"FILL\"] = 0] = \"FILL\";\n PAINT_ORDER_LAYER[PAINT_ORDER_LAYER[\"STROKE\"] = 1] = \"STROKE\";\n PAINT_ORDER_LAYER[PAINT_ORDER_LAYER[\"MARKERS\"] = 2] = \"MARKERS\";\n })(PAINT_ORDER_LAYER || (PAINT_ORDER_LAYER = {}));\n var paintOrder = {\n name: 'paint-order',\n initialValue: 'normal',\n prefix: false,\n type: 1 /* LIST */,\n parse: function (_context, tokens) {\n var DEFAULT_VALUE = [PAINT_ORDER_LAYER.FILL, PAINT_ORDER_LAYER.STROKE, PAINT_ORDER_LAYER.MARKERS];\n var layers = [];\n tokens.filter(isIdentToken).forEach(function (token) {\n switch (token.value) {\n case 'stroke':\n layers.push(PAINT_ORDER_LAYER.STROKE);\n break;\n case 'fill':\n layers.push(PAINT_ORDER_LAYER.FILL);\n break;\n case 'markers':\n layers.push(PAINT_ORDER_LAYER.MARKERS);\n break;\n }\n });\n DEFAULT_VALUE.forEach(function (value) {\n if (layers.indexOf(value) === -1) {\n layers.push(value);\n }\n });\n return layers;\n }\n };\n\n var webkitTextStrokeColor = {\n name: \"-webkit-text-stroke-color\",\n initialValue: 'currentcolor',\n prefix: false,\n type: 3 /* TYPE_VALUE */,\n format: 'color'\n };\n\n var webkitTextStrokeWidth = {\n name: \"-webkit-text-stroke-width\",\n initialValue: '0',\n type: 0 /* VALUE */,\n prefix: false,\n parse: function (_context, token) {\n if (isDimensionToken(token)) {\n return token.number;\n }\n return 0;\n }\n };\n\n var CSSParsedDeclaration = /** @class */ (function () {\n function CSSParsedDeclaration(context, declaration) {\n var _a, _b;\n this.animationDuration = parse(context, duration, declaration.animationDuration);\n this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\n this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\n this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\n this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\n this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\n this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\n this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\n this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\n this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\n this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\n this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\n this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\n this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\n this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\n this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\n this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\n this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\n this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\n this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\n this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\n this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\n this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\n this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\n this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\n this.color = parse(context, color, declaration.color);\n this.direction = parse(context, direction, declaration.direction);\n this.display = parse(context, display, declaration.display);\n this.float = parse(context, float, declaration.cssFloat);\n this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\n this.fontSize = parse(context, fontSize, declaration.fontSize);\n this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\n this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\n this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\n this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\n this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\n this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\n this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\n this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\n this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\n this.marginTop = parse(context, marginTop, declaration.marginTop);\n this.marginRight = parse(context, marginRight, declaration.marginRight);\n this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\n this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\n this.opacity = parse(context, opacity, declaration.opacity);\n var overflowTuple = parse(context, overflow, declaration.overflow);\n this.overflowX = overflowTuple[0];\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\n this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\n this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\n this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\n this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\n this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\n this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\n this.position = parse(context, position, declaration.position);\n this.textAlign = parse(context, textAlign, declaration.textAlign);\n this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color);\n this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration);\n this.textShadow = parse(context, textShadow, declaration.textShadow);\n this.textTransform = parse(context, textTransform, declaration.textTransform);\n this.transform = parse(context, transform$1, declaration.transform);\n this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\n this.visibility = parse(context, visibility, declaration.visibility);\n this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\n this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\n this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\n this.zIndex = parse(context, zIndex, declaration.zIndex);\n }\n CSSParsedDeclaration.prototype.isVisible = function () {\n return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE;\n };\n CSSParsedDeclaration.prototype.isTransparent = function () {\n return isTransparent(this.backgroundColor);\n };\n CSSParsedDeclaration.prototype.isTransformed = function () {\n return this.transform !== null;\n };\n CSSParsedDeclaration.prototype.isPositioned = function () {\n return this.position !== POSITION.STATIC;\n };\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\n return this.isPositioned() && !this.zIndex.auto;\n };\n CSSParsedDeclaration.prototype.isFloating = function () {\n return this.float !== FLOAT.NONE;\n };\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\n return (contains(this.display, 4 /* INLINE */) ||\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\n contains(this.display, 536870912 /* INLINE_GRID */) ||\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\n contains(this.display, 134217728 /* INLINE_TABLE */));\n };\n return CSSParsedDeclaration;\n }());\n var CSSParsedPseudoDeclaration = /** @class */ (function () {\n function CSSParsedPseudoDeclaration(context, declaration) {\n this.content = parse(context, content, declaration.content);\n this.quotes = parse(context, quotes, declaration.quotes);\n }\n return CSSParsedPseudoDeclaration;\n }());\n var CSSParsedCounterDeclaration = /** @class */ (function () {\n function CSSParsedCounterDeclaration(context, declaration) {\n this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\n this.counterReset = parse(context, counterReset, declaration.counterReset);\n }\n return CSSParsedCounterDeclaration;\n }());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var parse = function (context, descriptor, style) {\n var tokenizer = new Tokenizer();\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\n tokenizer.write(value);\n var parser = new Parser(tokenizer.read());\n switch (descriptor.type) {\n case 2 /* IDENT_VALUE */:\n var token = parser.parseComponentValue();\n return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\n case 0 /* VALUE */:\n return descriptor.parse(context, parser.parseComponentValue());\n case 1 /* LIST */:\n return descriptor.parse(context, parser.parseComponentValues());\n case 4 /* TOKEN_VALUE */:\n return parser.parseComponentValue();\n case 3 /* TYPE_VALUE */:\n switch (descriptor.format) {\n case 'angle':\n return angle.parse(context, parser.parseComponentValue());\n case 'color':\n return color$1.parse(context, parser.parseComponentValue());\n case 'image':\n return image.parse(context, parser.parseComponentValue());\n case 'length':\n var length_1 = parser.parseComponentValue();\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\n case 'length-percentage':\n var value_1 = parser.parseComponentValue();\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\n case 'time':\n return time.parse(context, parser.parseComponentValue());\n }\n break;\n }\n };\n\n var elementDebuggerAttribute = 'data-html2canvas-debug';\n var getElementDebugType = function (element) {\n var attribute = element.getAttribute(elementDebuggerAttribute);\n switch (attribute) {\n case 'all':\n return 1 /* ALL */;\n case 'clone':\n return 2 /* CLONE */;\n case 'parse':\n return 3 /* PARSE */;\n case 'render':\n return 4 /* RENDER */;\n default:\n return 0 /* NONE */;\n }\n };\n var isDebugging = function (element, type) {\n var elementType = getElementDebugType(element);\n return elementType === 1 /* ALL */ || type === elementType;\n };\n\n var ElementContainer = /** @class */ (function () {\n function ElementContainer(context, element) {\n this.context = context;\n this.textNodes = [];\n this.elements = [];\n this.flags = 0;\n if (isDebugging(element, 3 /* PARSE */)) {\n debugger;\n }\n this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\n if (isHTMLElementNode(element)) {\n if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) {\n element.style.animationDuration = '0s';\n }\n if (this.styles.transform !== null) {\n // getBoundingClientRect takes transforms into account\n element.style.transform = 'none';\n }\n }\n this.bounds = parseBounds(this.context, element);\n if (isDebugging(element, 4 /* RENDER */)) {\n this.flags |= 16 /* DEBUG_RENDER */;\n }\n }\n return ElementContainer;\n }());\n\n /*\n * text-segmentation 1.0.2 <https://github.com/niklasvh/text-segmentation>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\n\n /*\n * utrie 1.0.1 <https://github.com/niklasvh/utrie>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i$1 = 0; i$1 < chars$1.length; i$1++) {\n lookup$1[chars$1.charCodeAt(i$1)] = i$1;\n }\n var decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = typeof ArrayBuffer !== 'undefined' &&\n typeof Uint8Array !== 'undefined' &&\n typeof Uint8Array.prototype.slice !== 'undefined'\n ? new ArrayBuffer(bufferLength)\n : new Array(bufferLength);\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup$1[base64.charCodeAt(i)];\n encoded2 = lookup$1[base64.charCodeAt(i + 1)];\n encoded3 = lookup$1[base64.charCodeAt(i + 2)];\n encoded4 = lookup$1[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n };\n var polyUint16Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 2) {\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n var polyUint32Array = function (buffer) {\n var length = buffer.length;\n var bytes = [];\n for (var i = 0; i < length; i += 4) {\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n }\n return bytes;\n };\n\n /** Shift size for getting the index-2 table offset. */\n var UTRIE2_SHIFT_2 = 5;\n /** Shift size for getting the index-1 table offset. */\n var UTRIE2_SHIFT_1 = 6 + 5;\n /**\n * Shift size for shifting left the index array values.\n * Increases possible data size with 16-bit index values at the cost\n * of compactability.\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n */\n var UTRIE2_INDEX_SHIFT = 2;\n /**\n * Difference between the two shift sizes,\n * for getting an index-1 offset from an index-2 offset. 6=11-5\n */\n var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n /**\n * The part of the index-2 table for U+D800..U+DBFF stores values for\n * lead surrogate code _units_ not code _points_.\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n */\n var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n /** Number of entries in a data block. 32=0x20 */\n var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n /** Mask for getting the lower bits for the in-data-block offset. */\n var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n /** Count the lengths of both BMP pieces. 2080=0x820 */\n var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n /**\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n */\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n /**\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n * Variable length, for code points up to highStart, where the last single-value range starts.\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n *\n * The part of the index-2 table for supplementary code points starts\n * after this index-1 table.\n *\n * Both the index-1 table and the following part of the index-2 table\n * are omitted completely if there is only BMP data.\n */\n var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n /**\n * Number of index-1 entries for the BMP. 32=0x20\n * This part of the index-1 table is omitted from the serialized form.\n */\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n /** Number of entries in an index-2 block. 64=0x40 */\n var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n /** Mask for getting the lower bits for the in-index-2-block offset. */\n var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n var slice16 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\n };\n var slice32 = function (view, start, end) {\n if (view.slice) {\n return view.slice(start, end);\n }\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\n };\n var createTrieFromBase64 = function (base64, _byteLength) {\n var buffer = decode(base64);\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n var headerLength = 24;\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\n var data = view32[5] === 2\n ? slice16(view16, (headerLength + view32[4]) / 2)\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n };\n var Trie = /** @class */ (function () {\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n this.initialValue = initialValue;\n this.errorValue = errorValue;\n this.highStart = highStart;\n this.highValueIndex = highValueIndex;\n this.index = index;\n this.data = data;\n }\n /**\n * Get the value for a code point as stored in the Trie.\n *\n * @param codePoint the code point\n * @return the value\n */\n Trie.prototype.get = function (codePoint) {\n var ix;\n if (codePoint >= 0) {\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\n // 16 bit data is stored in the index array itself.\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n // Note: this expression could be refactored for slightly improved efficiency, but\n // surrogate code points will be so rare in practice that it's not worth it.\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n ix = this.index[ix];\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n ix = this.index[ix];\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n return this.data[ix];\n }\n if (codePoint <= 0x10ffff) {\n return this.data[this.highValueIndex];\n }\n }\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\n return this.errorValue;\n };\n return Trie;\n }());\n\n /*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n // Use a lookup table to find the index.\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n var Prepend = 1;\n var CR = 2;\n var LF = 3;\n var Control = 4;\n var Extend = 5;\n var SpacingMark = 7;\n var L = 8;\n var V = 9;\n var T = 10;\n var LV = 11;\n var LVT = 12;\n var ZWJ = 13;\n var Extended_Pictographic = 14;\n var RI = 15;\n var toCodePoints = function (str) {\n var codePoints = [];\n var i = 0;\n var length = str.length;\n while (i < length) {\n var value = str.charCodeAt(i++);\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\n var extra = str.charCodeAt(i++);\n if ((extra & 0xfc00) === 0xdc00) {\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n }\n else {\n codePoints.push(value);\n i--;\n }\n }\n else {\n codePoints.push(value);\n }\n }\n return codePoints;\n };\n var fromCodePoint = function () {\n var codePoints = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n codePoints[_i] = arguments[_i];\n }\n if (String.fromCodePoint) {\n return String.fromCodePoint.apply(String, codePoints);\n }\n var length = codePoints.length;\n if (!length) {\n return '';\n }\n var codeUnits = [];\n var index = -1;\n var result = '';\n while (++index < length) {\n var codePoint = codePoints[index];\n if (codePoint <= 0xffff) {\n codeUnits.push(codePoint);\n }\n else {\n codePoint -= 0x10000;\n codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n }\n if (index + 1 === length || codeUnits.length > 0x4000) {\n result += String.fromCharCode.apply(String, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n };\n var UnicodeTrie = createTrieFromBase64(base64);\n var BREAK_NOT_ALLOWED = '×';\n var BREAK_ALLOWED = '÷';\n var codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); };\n var _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {\n var prevIndex = index - 2;\n var prev = classTypes[prevIndex];\n var current = classTypes[index - 1];\n var next = classTypes[index];\n // GB3 Do not break between a CR and LF\n if (current === CR && next === LF) {\n return BREAK_NOT_ALLOWED;\n }\n // GB4 Otherwise, break before and after controls.\n if (current === CR || current === LF || current === Control) {\n return BREAK_ALLOWED;\n }\n // GB5\n if (next === CR || next === LF || next === Control) {\n return BREAK_ALLOWED;\n }\n // Do not break Hangul syllable sequences.\n // GB6\n if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n return BREAK_NOT_ALLOWED;\n }\n // GB7\n if ((current === LV || current === V) && (next === V || next === T)) {\n return BREAK_NOT_ALLOWED;\n }\n // GB8\n if ((current === LVT || current === T) && next === T) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9 Do not break before extending characters or ZWJ.\n if (next === ZWJ || next === Extend) {\n return BREAK_NOT_ALLOWED;\n }\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a\n if (next === SpacingMark) {\n return BREAK_NOT_ALLOWED;\n }\n // GB9a\n if (current === Prepend) {\n return BREAK_NOT_ALLOWED;\n }\n // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n if (current === ZWJ && next === Extended_Pictographic) {\n while (prev === Extend) {\n prev = classTypes[--prevIndex];\n }\n if (prev === Extended_Pictographic) {\n return BREAK_NOT_ALLOWED;\n }\n }\n // GB12 Do not break within emoji flag sequences.\n // That is, do not break between regional indicator (RI) symbols\n // if there is an odd number of RI characters before the break point.\n if (current === RI && next === RI) {\n var countRI = 0;\n while (prev === RI) {\n countRI++;\n prev = classTypes[--prevIndex];\n }\n if (countRI % 2 === 0) {\n return BREAK_NOT_ALLOWED;\n }\n }\n return BREAK_ALLOWED;\n };\n var GraphemeBreaker = function (str) {\n var codePoints = toCodePoints(str);\n var length = codePoints.length;\n var index = 0;\n var lastEnd = 0;\n var classTypes = codePoints.map(codePointToClass);\n return {\n next: function () {\n if (index >= length) {\n return { done: true, value: null };\n }\n var graphemeBreak = BREAK_NOT_ALLOWED;\n while (index < length &&\n (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { }\n if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n lastEnd = index;\n return { value: value, done: false };\n }\n return { done: true, value: null };\n },\n };\n };\n var splitGraphemes = function (str) {\n var breaker = GraphemeBreaker(str);\n var graphemes = [];\n var bk;\n while (!(bk = breaker.next()).done) {\n if (bk.value) {\n graphemes.push(bk.value.slice());\n }\n }\n return graphemes;\n };\n\n var testRangeBounds = function (document) {\n var TEST_HEIGHT = 123;\n if (document.createRange) {\n var range = document.createRange();\n if (range.getBoundingClientRect) {\n var testElement = document.createElement('boundtest');\n testElement.style.height = TEST_HEIGHT + \"px\";\n testElement.style.display = 'block';\n document.body.appendChild(testElement);\n range.selectNode(testElement);\n var rangeBounds = range.getBoundingClientRect();\n var rangeHeight = Math.round(rangeBounds.height);\n document.body.removeChild(testElement);\n if (rangeHeight === TEST_HEIGHT) {\n return true;\n }\n }\n }\n return false;\n };\n var testIOSLineBreak = function (document) {\n var testElement = document.createElement('boundtest');\n testElement.style.width = '50px';\n testElement.style.display = 'block';\n testElement.style.fontSize = '12px';\n testElement.style.letterSpacing = '0px';\n testElement.style.wordSpacing = '0px';\n document.body.appendChild(testElement);\n var range = document.createRange();\n testElement.innerHTML = typeof ''.repeat === 'function' ? '👨'.repeat(10) : '';\n var node = testElement.firstChild;\n var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); });\n var offset = 0;\n var prev = {};\n // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\n var supports = textList.every(function (text, i) {\n range.setStart(node, offset);\n range.setEnd(node, offset + text.length);\n var rect = range.getBoundingClientRect();\n offset += text.length;\n var boundAhead = rect.x > prev.x || rect.y > prev.y;\n prev = rect;\n if (i === 0) {\n return true;\n }\n return boundAhead;\n });\n document.body.removeChild(testElement);\n return supports;\n };\n var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\n var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\n var testSVG = function (document) {\n var img = new Image();\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";\n try {\n ctx.drawImage(img, 0, 0);\n canvas.toDataURL();\n }\n catch (e) {\n return false;\n }\n return true;\n };\n var isGreenPixel = function (data) {\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\n };\n var testForeignObject = function (document) {\n var canvas = document.createElement('canvas');\n var size = 100;\n canvas.width = size;\n canvas.height = size;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return Promise.reject(false);\n }\n ctx.fillStyle = 'rgb(0, 255, 0)';\n ctx.fillRect(0, 0, size, size);\n var img = new Image();\n var greenImageSrc = canvas.toDataURL();\n img.src = greenImageSrc;\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n return loadSerializedSVG$1(svg)\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n var data = ctx.getImageData(0, 0, size, size).data;\n ctx.fillStyle = 'red';\n ctx.fillRect(0, 0, size, size);\n var node = document.createElement('div');\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\n node.style.height = size + \"px\";\n // Firefox 55 does not render inline <img /> tags\n return isGreenPixel(data)\n ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node))\n : Promise.reject(false);\n })\n .then(function (img) {\n ctx.drawImage(img, 0, 0);\n // Edge does not render background-images\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\n })\n .catch(function () { return false; });\n };\n var createForeignObjectSVG = function (width, height, x, y, node) {\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\n svg.setAttributeNS(null, 'width', width.toString());\n svg.setAttributeNS(null, 'height', height.toString());\n foreignObject.setAttributeNS(null, 'width', '100%');\n foreignObject.setAttributeNS(null, 'height', '100%');\n foreignObject.setAttributeNS(null, 'x', x.toString());\n foreignObject.setAttributeNS(null, 'y', y.toString());\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\n svg.appendChild(foreignObject);\n foreignObject.appendChild(node);\n return svg;\n };\n var loadSerializedSVG$1 = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n var FEATURES = {\n get SUPPORT_RANGE_BOUNDS() {\n var value = testRangeBounds(document);\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\n return value;\n },\n get SUPPORT_WORD_BREAKING() {\n var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\n Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value });\n return value;\n },\n get SUPPORT_SVG_DRAWING() {\n var value = testSVG(document);\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\n ? testForeignObject(document)\n : Promise.resolve(false);\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\n return value;\n },\n get SUPPORT_CORS_IMAGES() {\n var value = testCORS();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\n return value;\n },\n get SUPPORT_RESPONSE_TYPE() {\n var value = testResponseType();\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\n return value;\n },\n get SUPPORT_CORS_XHR() {\n var value = 'withCredentials' in new XMLHttpRequest();\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\n return value;\n }\n };\n\n var TextBounds = /** @class */ (function () {\n function TextBounds(text, bounds) {\n this.text = text;\n this.bounds = bounds;\n }\n return TextBounds;\n }());\n var parseTextBounds = function (context, value, styles, node) {\n var textList = breakText(value, styles);\n var textBounds = [];\n var offset = 0;\n textList.forEach(function (text) {\n if (styles.textDecorationLine.length || text.trim().length > 0) {\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\n if (!FEATURES.SUPPORT_WORD_BREAKING) {\n textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, createRange(node, offset, text.length).getClientRects())));\n }\n else {\n textBounds.push(new TextBounds(text, getRangeBounds(context, node, offset, text.length)));\n }\n }\n else {\n var replacementNode = node.splitText(text.length);\n textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\n node = replacementNode;\n }\n }\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\n node = node.splitText(text.length);\n }\n offset += text.length;\n });\n return textBounds;\n };\n var getWrapperBounds = function (context, node) {\n var ownerDocument = node.ownerDocument;\n if (ownerDocument) {\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\n wrapper.appendChild(node.cloneNode(true));\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.replaceChild(wrapper, node);\n var bounds = parseBounds(context, wrapper);\n if (wrapper.firstChild) {\n parentNode.replaceChild(wrapper.firstChild, wrapper);\n }\n return bounds;\n }\n }\n return Bounds.EMPTY;\n };\n var createRange = function (node, offset, length) {\n var ownerDocument = node.ownerDocument;\n if (!ownerDocument) {\n throw new Error('Node has no owner document');\n }\n var range = ownerDocument.createRange();\n range.setStart(node, offset);\n range.setEnd(node, offset + length);\n return range;\n };\n var getRangeBounds = function (context, node, offset, length) {\n return Bounds.fromClientRect(context, createRange(node, offset, length).getBoundingClientRect());\n };\n var breakText = function (value, styles) {\n return styles.letterSpacing !== 0 ? splitGraphemes(value) : breakWords(value, styles);\n };\n // https://drafts.csswg.org/css-text/#word-separator\n var wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\n var breakWords = function (str, styles) {\n var breaker = LineBreaker(str, {\n lineBreak: styles.lineBreak,\n wordBreak: styles.overflowWrap === \"break-word\" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak\n });\n var words = [];\n var bk;\n var _loop_1 = function () {\n if (bk.value) {\n var value = bk.value.slice();\n var codePoints = toCodePoints$1(value);\n var word_1 = '';\n codePoints.forEach(function (codePoint) {\n if (wordSeparators.indexOf(codePoint) === -1) {\n word_1 += fromCodePoint$1(codePoint);\n }\n else {\n if (word_1.length) {\n words.push(word_1);\n }\n words.push(fromCodePoint$1(codePoint));\n word_1 = '';\n }\n });\n if (word_1.length) {\n words.push(word_1);\n }\n }\n };\n while (!(bk = breaker.next()).done) {\n _loop_1();\n }\n return words;\n };\n\n var TextContainer = /** @class */ (function () {\n function TextContainer(context, node, styles) {\n this.text = transform(node.data, styles.textTransform);\n this.textBounds = parseTextBounds(context, this.text, styles, node);\n }\n return TextContainer;\n }());\n var transform = function (text, transform) {\n switch (transform) {\n case TEXT_TRANSFORM.LOWERCASE:\n return text.toLowerCase();\n case TEXT_TRANSFORM.CAPITALIZE:\n return text.replace(CAPITALIZE, capitalize);\n case TEXT_TRANSFORM.UPPERCASE:\n return text.toUpperCase();\n default:\n return text;\n }\n };\n var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\n var capitalize = function (m, p1, p2) {\n if (m.length > 0) {\n return p1 + p2.toUpperCase();\n }\n return m;\n };\n\n var ImageElementContainer = /** @class */ (function (_super) {\n __extends(ImageElementContainer, _super);\n function ImageElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n _this.src = img.currentSrc || img.src;\n _this.intrinsicWidth = img.naturalWidth;\n _this.intrinsicHeight = img.naturalHeight;\n _this.context.cache.addImage(_this.src);\n return _this;\n }\n return ImageElementContainer;\n }(ElementContainer));\n\n var CanvasElementContainer = /** @class */ (function (_super) {\n __extends(CanvasElementContainer, _super);\n function CanvasElementContainer(context, canvas) {\n var _this = _super.call(this, context, canvas) || this;\n _this.canvas = canvas;\n _this.intrinsicWidth = canvas.width;\n _this.intrinsicHeight = canvas.height;\n return _this;\n }\n return CanvasElementContainer;\n }(ElementContainer));\n\n var SVGElementContainer = /** @class */ (function (_super) {\n __extends(SVGElementContainer, _super);\n function SVGElementContainer(context, img) {\n var _this = _super.call(this, context, img) || this;\n var s = new XMLSerializer();\n var bounds = parseBounds(context, img);\n img.setAttribute('width', bounds.width + \"px\");\n img.setAttribute('height', bounds.height + \"px\");\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\n _this.intrinsicWidth = img.width.baseVal.value;\n _this.intrinsicHeight = img.height.baseVal.value;\n _this.context.cache.addImage(_this.svg);\n return _this;\n }\n return SVGElementContainer;\n }(ElementContainer));\n\n var LIElementContainer = /** @class */ (function (_super) {\n __extends(LIElementContainer, _super);\n function LIElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return LIElementContainer;\n }(ElementContainer));\n\n var OLElementContainer = /** @class */ (function (_super) {\n __extends(OLElementContainer, _super);\n function OLElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.start = element.start;\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\n return _this;\n }\n return OLElementContainer;\n }(ElementContainer));\n\n var CHECKBOX_BORDER_RADIUS = [\n {\n type: 15 /* DIMENSION_TOKEN */,\n flags: 0,\n unit: 'px',\n number: 3\n }\n ];\n var RADIO_BORDER_RADIUS = [\n {\n type: 16 /* PERCENTAGE_TOKEN */,\n flags: 0,\n number: 50\n }\n ];\n var reformatInputBounds = function (bounds) {\n if (bounds.width > bounds.height) {\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\n }\n else if (bounds.width < bounds.height) {\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\n }\n return bounds;\n };\n var getInputValue = function (node) {\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\n return value.length === 0 ? node.placeholder || '' : value;\n };\n var CHECKBOX = 'checkbox';\n var RADIO = 'radio';\n var PASSWORD = 'password';\n var INPUT_COLOR = 0x2a2a2aff;\n var InputElementContainer = /** @class */ (function (_super) {\n __extends(InputElementContainer, _super);\n function InputElementContainer(context, input) {\n var _this = _super.call(this, context, input) || this;\n _this.type = input.type.toLowerCase();\n _this.checked = input.checked;\n _this.value = getInputValue(input);\n if (_this.type === CHECKBOX || _this.type === RADIO) {\n _this.styles.backgroundColor = 0xdededeff;\n _this.styles.borderTopColor =\n _this.styles.borderRightColor =\n _this.styles.borderBottomColor =\n _this.styles.borderLeftColor =\n 0xa5a5a5ff;\n _this.styles.borderTopWidth =\n _this.styles.borderRightWidth =\n _this.styles.borderBottomWidth =\n _this.styles.borderLeftWidth =\n 1;\n _this.styles.borderTopStyle =\n _this.styles.borderRightStyle =\n _this.styles.borderBottomStyle =\n _this.styles.borderLeftStyle =\n BORDER_STYLE.SOLID;\n _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\n _this.bounds = reformatInputBounds(_this.bounds);\n }\n switch (_this.type) {\n case CHECKBOX:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n CHECKBOX_BORDER_RADIUS;\n break;\n case RADIO:\n _this.styles.borderTopRightRadius =\n _this.styles.borderTopLeftRadius =\n _this.styles.borderBottomRightRadius =\n _this.styles.borderBottomLeftRadius =\n RADIO_BORDER_RADIUS;\n break;\n }\n return _this;\n }\n return InputElementContainer;\n }(ElementContainer));\n\n var SelectElementContainer = /** @class */ (function (_super) {\n __extends(SelectElementContainer, _super);\n function SelectElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n var option = element.options[element.selectedIndex || 0];\n _this.value = option ? option.text || '' : '';\n return _this;\n }\n return SelectElementContainer;\n }(ElementContainer));\n\n var TextareaElementContainer = /** @class */ (function (_super) {\n __extends(TextareaElementContainer, _super);\n function TextareaElementContainer(context, element) {\n var _this = _super.call(this, context, element) || this;\n _this.value = element.value;\n return _this;\n }\n return TextareaElementContainer;\n }(ElementContainer));\n\n var IFrameElementContainer = /** @class */ (function (_super) {\n __extends(IFrameElementContainer, _super);\n function IFrameElementContainer(context, iframe) {\n var _this = _super.call(this, context, iframe) || this;\n _this.src = iframe.src;\n _this.width = parseInt(iframe.width, 10) || 0;\n _this.height = parseInt(iframe.height, 10) || 0;\n _this.backgroundColor = _this.styles.backgroundColor;\n try {\n if (iframe.contentWindow &&\n iframe.contentWindow.document &&\n iframe.contentWindow.document.documentElement) {\n _this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = iframe.contentWindow.document.body\n ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\n : COLORS.TRANSPARENT;\n _this.backgroundColor = isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? _this.styles.backgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor;\n }\n }\n catch (e) { }\n return _this;\n }\n return IFrameElementContainer;\n }(ElementContainer));\n\n var LIST_OWNERS = ['OL', 'UL', 'MENU'];\n var parseNodeTree = function (context, node, parent, root) {\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\n nextNode = childNode.nextSibling;\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\n parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\n }\n else if (isElementNode(childNode)) {\n if (isSlotElement(childNode) && childNode.assignedNodes) {\n childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });\n }\n else {\n var container = createContainer(context, childNode);\n if (container.styles.isVisible()) {\n if (createsRealStackingContext(childNode, container, root)) {\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n }\n else if (createsStackingContext(container.styles)) {\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\n }\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\n container.flags |= 8 /* IS_LIST_OWNER */;\n }\n parent.elements.push(container);\n childNode.slot;\n if (childNode.shadowRoot) {\n parseNodeTree(context, childNode.shadowRoot, container, root);\n }\n else if (!isTextareaElement(childNode) &&\n !isSVGElement(childNode) &&\n !isSelectElement(childNode)) {\n parseNodeTree(context, childNode, container, root);\n }\n }\n }\n }\n }\n };\n var createContainer = function (context, element) {\n if (isImageElement(element)) {\n return new ImageElementContainer(context, element);\n }\n if (isCanvasElement(element)) {\n return new CanvasElementContainer(context, element);\n }\n if (isSVGElement(element)) {\n return new SVGElementContainer(context, element);\n }\n if (isLIElement(element)) {\n return new LIElementContainer(context, element);\n }\n if (isOLElement(element)) {\n return new OLElementContainer(context, element);\n }\n if (isInputElement(element)) {\n return new InputElementContainer(context, element);\n }\n if (isSelectElement(element)) {\n return new SelectElementContainer(context, element);\n }\n if (isTextareaElement(element)) {\n return new TextareaElementContainer(context, element);\n }\n if (isIFrameElement(element)) {\n return new IFrameElementContainer(context, element);\n }\n return new ElementContainer(context, element);\n };\n var parseTree = function (context, element) {\n var container = createContainer(context, element);\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\n parseNodeTree(context, element, container, container);\n return container;\n };\n var createsRealStackingContext = function (node, container, root) {\n return (container.styles.isPositionedWithZIndex() ||\n container.styles.opacity < 1 ||\n container.styles.isTransformed() ||\n (isBodyElement(node) && root.styles.isTransparent()));\n };\n var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\n var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\n var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\n var isHTMLElementNode = function (node) {\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\n };\n var isSVGElementNode = function (element) {\n return typeof element.className === 'object';\n };\n var isLIElement = function (node) { return node.tagName === 'LI'; };\n var isOLElement = function (node) { return node.tagName === 'OL'; };\n var isInputElement = function (node) { return node.tagName === 'INPUT'; };\n var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\n var isSVGElement = function (node) { return node.tagName === 'svg'; };\n var isBodyElement = function (node) { return node.tagName === 'BODY'; };\n var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\n var isImageElement = function (node) { return node.tagName === 'IMG'; };\n var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\n var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\n var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\n var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\n var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\n var isSlotElement = function (node) { return node.tagName === 'SLOT'; };\n\n var CounterState = /** @class */ (function () {\n function CounterState() {\n this.counters = {};\n }\n CounterState.prototype.getCounterValue = function (name) {\n var counter = this.counters[name];\n if (counter && counter.length) {\n return counter[counter.length - 1];\n }\n return 1;\n };\n CounterState.prototype.getCounterValues = function (name) {\n var counter = this.counters[name];\n return counter ? counter : [];\n };\n CounterState.prototype.pop = function (counters) {\n var _this = this;\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\n };\n CounterState.prototype.parse = function (style) {\n var _this = this;\n var counterIncrement = style.counterIncrement;\n var counterReset = style.counterReset;\n var canReset = true;\n if (counterIncrement !== null) {\n counterIncrement.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n if (counter && entry.increment !== 0) {\n canReset = false;\n if (!counter.length) {\n counter.push(1);\n }\n counter[Math.max(0, counter.length - 1)] += entry.increment;\n }\n });\n }\n var counterNames = [];\n if (canReset) {\n counterReset.forEach(function (entry) {\n var counter = _this.counters[entry.counter];\n counterNames.push(entry.counter);\n if (!counter) {\n counter = _this.counters[entry.counter] = [];\n }\n counter.push(entry.reset);\n });\n }\n return counterNames;\n };\n return CounterState;\n }());\n var ROMAN_UPPER = {\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\n };\n var ARMENIAN = {\n integers: [\n 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\n 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'Ք',\n 'Փ',\n 'Ւ',\n 'Ց',\n 'Ր',\n 'Տ',\n 'Վ',\n 'Ս',\n 'Ռ',\n 'Ջ',\n 'Պ',\n 'Չ',\n 'Ո',\n 'Շ',\n 'Ն',\n 'Յ',\n 'Մ',\n 'Ճ',\n 'Ղ',\n 'Ձ',\n 'Հ',\n 'Կ',\n 'Ծ',\n 'Խ',\n 'Լ',\n 'Ի',\n 'Ժ',\n 'Թ',\n 'Ը',\n 'Է',\n 'Զ',\n 'Ե',\n 'Դ',\n 'Գ',\n 'Բ',\n 'Ա'\n ]\n };\n var HEBREW = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\n 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'י׳',\n 'ט׳',\n 'ח׳',\n 'ז׳',\n 'ו׳',\n 'ה׳',\n 'ד׳',\n 'ג׳',\n 'ב׳',\n 'א׳',\n 'ת',\n 'ש',\n 'ר',\n 'ק',\n 'צ',\n 'פ',\n 'ע',\n 'ס',\n 'נ',\n 'מ',\n 'ל',\n 'כ',\n 'יט',\n 'יח',\n 'יז',\n 'טז',\n 'טו',\n 'י',\n 'ט',\n 'ח',\n 'ז',\n 'ו',\n 'ה',\n 'ד',\n 'ג',\n 'ב',\n 'א'\n ]\n };\n var GEORGIAN = {\n integers: [\n 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\n 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\n ],\n values: [\n 'ჵ',\n 'ჰ',\n 'ჯ',\n 'ჴ',\n 'ხ',\n 'ჭ',\n 'წ',\n 'ძ',\n 'ც',\n 'ჩ',\n 'შ',\n 'ყ',\n 'ღ',\n 'ქ',\n 'ფ',\n 'ჳ',\n 'ტ',\n 'ს',\n 'რ',\n 'ჟ',\n 'პ',\n 'ო',\n 'ჲ',\n 'ნ',\n 'მ',\n 'ლ',\n 'კ',\n 'ი',\n 'თ',\n 'ჱ',\n 'ზ',\n 'ვ',\n 'ე',\n 'დ',\n 'გ',\n 'ბ',\n 'ა'\n ]\n };\n var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\n if (value < min || value > max) {\n return createCounterText(value, fallback, suffix.length > 0);\n }\n return (symbols.integers.reduce(function (string, integer, index) {\n while (value >= integer) {\n value -= integer;\n string += symbols.values[index];\n }\n return string;\n }, '') + suffix);\n };\n var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\n var string = '';\n do {\n if (!isNumeric) {\n value--;\n }\n string = resolver(value) + string;\n value /= codePointRangeLength;\n } while (value * codePointRangeLength >= codePointRangeLength);\n return string;\n };\n var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\n return ((value < 0 ? '-' : '') +\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\n return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\n }) +\n suffix));\n };\n var createCounterStyleFromSymbols = function (value, symbols, suffix) {\n if (suffix === void 0) { suffix = '. '; }\n var codePointRangeLength = symbols.length;\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\n };\n var CJK_ZEROS = 1 << 0;\n var CJK_TEN_COEFFICIENTS = 1 << 1;\n var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\n var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\n var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\n if (value < -9999 || value > 9999) {\n return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);\n }\n var tmp = Math.abs(value);\n var string = suffix;\n if (tmp === 0) {\n return numbers[0] + string;\n }\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\n var coefficient = tmp % 10;\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\n string = numbers[coefficient] + string;\n }\n else if (coefficient > 1 ||\n (coefficient === 1 && digit === 0) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\n }\n else if (coefficient === 1 && digit > 0) {\n string = multipliers[digit - 1] + string;\n }\n tmp = Math.floor(tmp / 10);\n }\n return (value < 0 ? negativeSign : '') + string;\n };\n var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\n var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\n var JAPANESE_NEGATIVE = 'マイナス';\n var KOREAN_NEGATIVE = '마이너스';\n var createCounterText = function (value, type, appendSuffix) {\n var defaultSuffix = appendSuffix ? '. ' : '';\n var cjkSuffix = appendSuffix ? '、' : '';\n var koreanSuffix = appendSuffix ? ', ' : '';\n var spaceSuffix = appendSuffix ? ' ' : '';\n switch (type) {\n case LIST_STYLE_TYPE.DISC:\n return '•' + spaceSuffix;\n case LIST_STYLE_TYPE.CIRCLE:\n return '◦' + spaceSuffix;\n case LIST_STYLE_TYPE.SQUARE:\n return '◾' + spaceSuffix;\n case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n return string.length < 4 ? \"0\" + string : string;\n case LIST_STYLE_TYPE.CJK_DECIMAL:\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\n case LIST_STYLE_TYPE.LOWER_ROMAN:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\n case LIST_STYLE_TYPE.UPPER_ROMAN:\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n case LIST_STYLE_TYPE.LOWER_GREEK:\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\n case LIST_STYLE_TYPE.LOWER_ALPHA:\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\n case LIST_STYLE_TYPE.UPPER_ALPHA:\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\n case LIST_STYLE_TYPE.ARABIC_INDIC:\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\n case LIST_STYLE_TYPE.ARMENIAN:\n case LIST_STYLE_TYPE.UPPER_ARMENIAN:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n case LIST_STYLE_TYPE.LOWER_ARMENIAN:\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\n case LIST_STYLE_TYPE.BENGALI:\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\n case LIST_STYLE_TYPE.CAMBODIAN:\n case LIST_STYLE_TYPE.KHMER:\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\n case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\n case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\n case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:\n case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\n case LIST_STYLE_TYPE.JAPANESE_INFORMAL:\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\n case LIST_STYLE_TYPE.JAPANESE_FORMAL:\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\n case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\n case LIST_STYLE_TYPE.DEVANAGARI:\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\n case LIST_STYLE_TYPE.GEORGIAN:\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n case LIST_STYLE_TYPE.GUJARATI:\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\n case LIST_STYLE_TYPE.GURMUKHI:\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\n case LIST_STYLE_TYPE.HEBREW:\n return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\n case LIST_STYLE_TYPE.HIRAGANA:\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\n case LIST_STYLE_TYPE.HIRAGANA_IROHA:\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\n case LIST_STYLE_TYPE.KANNADA:\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\n case LIST_STYLE_TYPE.KATAKANA:\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\n case LIST_STYLE_TYPE.KATAKANA_IROHA:\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\n case LIST_STYLE_TYPE.LAO:\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\n case LIST_STYLE_TYPE.MONGOLIAN:\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\n case LIST_STYLE_TYPE.MYANMAR:\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\n case LIST_STYLE_TYPE.ORIYA:\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\n case LIST_STYLE_TYPE.PERSIAN:\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\n case LIST_STYLE_TYPE.TAMIL:\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\n case LIST_STYLE_TYPE.TELUGU:\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\n case LIST_STYLE_TYPE.THAI:\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\n case LIST_STYLE_TYPE.TIBETAN:\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\n case LIST_STYLE_TYPE.DECIMAL:\n default:\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\n }\n };\n\n var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\n var DocumentCloner = /** @class */ (function () {\n function DocumentCloner(context, element, options) {\n this.context = context;\n this.options = options;\n this.scrolledElements = [];\n this.referenceElement = element;\n this.counters = new CounterState();\n this.quoteDepth = 0;\n if (!element.ownerDocument) {\n throw new Error('Cloned element does not have an owner document');\n }\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement);\n }\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\n var _this = this;\n var iframe = createIFrameContainer(ownerDocument, windowSize);\n if (!iframe.contentWindow) {\n return Promise.reject(\"Unable to find iframe window\");\n }\n var scrollX = ownerDocument.defaultView.pageXOffset;\n var scrollY = ownerDocument.defaultView.pageYOffset;\n var cloneWindow = iframe.contentWindow;\n var documentClone = cloneWindow.document;\n /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\n if window url is about:blank, we can assign the url to current by writing onto the document\n */\n var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\n var onclone, referenceElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.scrolledElements.forEach(restoreNodeScroll);\n if (cloneWindow) {\n cloneWindow.scrollTo(windowSize.left, windowSize.top);\n if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\n (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\n this.context.logger.warn('Unable to restore scroll position for cloned document');\n this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);\n }\n }\n onclone = this.options.onclone;\n referenceElement = this.clonedReferenceElement;\n if (typeof referenceElement === 'undefined') {\n return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\n }\n if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\n return [4 /*yield*/, documentClone.fonts.ready];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4];\n return [4 /*yield*/, imagesReady(documentClone)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n if (typeof onclone === 'function') {\n return [2 /*return*/, Promise.resolve()\n .then(function () { return onclone(documentClone, referenceElement); })\n .then(function () { return iframe; })];\n }\n return [2 /*return*/, iframe];\n }\n });\n }); });\n documentClone.open();\n documentClone.write(serializeDoctype(document.doctype) + \"<html></html>\");\n // Chrome scrolls the parent document for some reason after the write to the cloned window???\n restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\n documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\n documentClone.close();\n return iframeLoad;\n };\n DocumentCloner.prototype.createElementClone = function (node) {\n if (isDebugging(node, 2 /* CLONE */)) {\n debugger;\n }\n if (isCanvasElement(node)) {\n return this.createCanvasClone(node);\n }\n if (isStyleElement(node)) {\n return this.createStyleClone(node);\n }\n var clone = node.cloneNode(false);\n if (isImageElement(clone)) {\n if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\n clone.src = node.currentSrc;\n clone.srcset = '';\n }\n if (clone.loading === 'lazy') {\n clone.loading = 'eager';\n }\n }\n return clone;\n };\n DocumentCloner.prototype.createStyleClone = function (node) {\n try {\n var sheet = node.sheet;\n if (sheet && sheet.cssRules) {\n var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\n if (rule && typeof rule.cssText === 'string') {\n return css + rule.cssText;\n }\n return css;\n }, '');\n var style = node.cloneNode(false);\n style.textContent = css;\n return style;\n }\n }\n catch (e) {\n // accessing node.sheet.cssRules throws a DOMException\n this.context.logger.error('Unable to access cssRules property', e);\n if (e.name !== 'SecurityError') {\n throw e;\n }\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.createCanvasClone = function (canvas) {\n var _a;\n if (this.options.inlineImages && canvas.ownerDocument) {\n var img = canvas.ownerDocument.createElement('img');\n try {\n img.src = canvas.toDataURL();\n return img;\n }\n catch (e) {\n this.context.logger.info(\"Unable to inline canvas contents, canvas is tainted\", canvas);\n }\n }\n var clonedCanvas = canvas.cloneNode(false);\n try {\n clonedCanvas.width = canvas.width;\n clonedCanvas.height = canvas.height;\n var ctx = canvas.getContext('2d');\n var clonedCtx = clonedCanvas.getContext('2d');\n if (clonedCtx) {\n if (!this.options.allowTaint && ctx) {\n clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\n }\n else {\n var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl');\n if (gl) {\n var attribs = gl.getContextAttributes();\n if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) {\n this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas);\n }\n }\n clonedCtx.drawImage(canvas, 0, 0);\n }\n }\n return clonedCanvas;\n }\n catch (e) {\n this.context.logger.info(\"Unable to clone canvas as it is tainted\", canvas);\n }\n return clonedCanvas;\n };\n DocumentCloner.prototype.cloneNode = function (node) {\n if (isTextNode(node)) {\n return document.createTextNode(node.data);\n }\n if (!node.ownerDocument) {\n return node.cloneNode(false);\n }\n var window = node.ownerDocument.defaultView;\n if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n var clone = this.createElementClone(node);\n clone.style.transitionProperty = 'none';\n var style = window.getComputedStyle(node);\n var styleBefore = window.getComputedStyle(node, ':before');\n var styleAfter = window.getComputedStyle(node, ':after');\n if (this.referenceElement === node && isHTMLElementNode(clone)) {\n this.clonedReferenceElement = clone;\n }\n if (isBodyElement(clone)) {\n createPseudoHideStyles(clone);\n }\n var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (!isElementNode(child) ||\n (!isScriptElement(child) &&\n !child.hasAttribute(IGNORE_ATTRIBUTE) &&\n (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\n if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\n clone.appendChild(this.cloneNode(child));\n }\n }\n }\n if (before) {\n clone.insertBefore(before, clone.firstChild);\n }\n var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\n if (after) {\n clone.appendChild(after);\n }\n this.counters.pop(counters);\n if (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) {\n copyCSSStyles(style, clone);\n }\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\n this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\n }\n if ((isTextareaElement(node) || isSelectElement(node)) &&\n (isTextareaElement(clone) || isSelectElement(clone))) {\n clone.value = node.value;\n }\n return clone;\n }\n return node.cloneNode(false);\n };\n DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\n var _this = this;\n if (!style) {\n return;\n }\n var value = style.content;\n var document = clone.ownerDocument;\n if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\n return;\n }\n this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\n var declaration = new CSSParsedPseudoDeclaration(this.context, style);\n var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\n copyCSSStyles(style, anonymousReplacedElement);\n declaration.content.forEach(function (token) {\n if (token.type === 0 /* STRING_TOKEN */) {\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n else if (token.type === 22 /* URL_TOKEN */) {\n var img = document.createElement('img');\n img.src = token.value;\n img.style.opacity = '1';\n anonymousReplacedElement.appendChild(img);\n }\n else if (token.type === 18 /* FUNCTION */) {\n if (token.name === 'attr') {\n var attr = token.values.filter(isIdentToken);\n if (attr.length) {\n anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\n }\n }\n else if (token.name === 'counter') {\n var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\n if (counter && isIdentToken(counter)) {\n var counterState = _this.counters.getCounterValue(counter.value);\n var counterType = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : LIST_STYLE_TYPE.DECIMAL;\n anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\n }\n }\n else if (token.name === 'counters') {\n var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\n if (counter && isIdentToken(counter)) {\n var counterStates = _this.counters.getCounterValues(counter.value);\n var counterType_1 = counterStyle && isIdentToken(counterStyle)\n ? listStyleType.parse(_this.context, counterStyle.value)\n : LIST_STYLE_TYPE.DECIMAL;\n var separator = delim && delim.type === 0 /* STRING_TOKEN */ ? delim.value : '';\n var text = counterStates\n .map(function (value) { return createCounterText(value, counterType_1, false); })\n .join(separator);\n anonymousReplacedElement.appendChild(document.createTextNode(text));\n }\n }\n else ;\n }\n else if (token.type === 20 /* IDENT_TOKEN */) {\n switch (token.value) {\n case 'open-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\n break;\n case 'close-quote':\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\n break;\n default:\n // safari doesn't parse string tokens correctly because of lack of quotes\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\n }\n }\n });\n anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n var newClassName = pseudoElt === PseudoElementType.BEFORE\n ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\n : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\n if (isSVGElementNode(clone)) {\n clone.className.baseValue += newClassName;\n }\n else {\n clone.className += newClassName;\n }\n return anonymousReplacedElement;\n };\n DocumentCloner.destroy = function (container) {\n if (container.parentNode) {\n container.parentNode.removeChild(container);\n return true;\n }\n return false;\n };\n return DocumentCloner;\n }());\n var PseudoElementType;\n (function (PseudoElementType) {\n PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\n PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\n })(PseudoElementType || (PseudoElementType = {}));\n var createIFrameContainer = function (ownerDocument, bounds) {\n var cloneIframeContainer = ownerDocument.createElement('iframe');\n cloneIframeContainer.className = 'html2canvas-container';\n cloneIframeContainer.style.visibility = 'hidden';\n cloneIframeContainer.style.position = 'fixed';\n cloneIframeContainer.style.left = '-10000px';\n cloneIframeContainer.style.top = '0px';\n cloneIframeContainer.style.border = '0';\n cloneIframeContainer.width = bounds.width.toString();\n cloneIframeContainer.height = bounds.height.toString();\n cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\n cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\n ownerDocument.body.appendChild(cloneIframeContainer);\n return cloneIframeContainer;\n };\n var imageReady = function (img) {\n return new Promise(function (resolve) {\n if (img.complete) {\n resolve();\n return;\n }\n if (!img.src) {\n resolve();\n return;\n }\n img.onload = resolve;\n img.onerror = resolve;\n });\n };\n var imagesReady = function (document) {\n return Promise.all([].slice.call(document.images, 0).map(imageReady));\n };\n var iframeLoader = function (iframe) {\n return new Promise(function (resolve, reject) {\n var cloneWindow = iframe.contentWindow;\n if (!cloneWindow) {\n return reject(\"No window assigned for iframe\");\n }\n var documentClone = cloneWindow.document;\n cloneWindow.onload = iframe.onload = function () {\n cloneWindow.onload = iframe.onload = null;\n var interval = setInterval(function () {\n if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\n clearInterval(interval);\n resolve(iframe);\n }\n }, 50);\n };\n });\n };\n var ignoredStyleProperties = [\n 'all',\n 'd',\n 'content' // Safari shows pseudoelements if content is set\n ];\n var copyCSSStyles = function (style, target) {\n // Edge does not provide value for cssText\n for (var i = style.length - 1; i >= 0; i--) {\n var property = style.item(i);\n if (ignoredStyleProperties.indexOf(property) === -1) {\n target.style.setProperty(property, style.getPropertyValue(property));\n }\n }\n return target;\n };\n var serializeDoctype = function (doctype) {\n var str = '';\n if (doctype) {\n str += '<!DOCTYPE ';\n if (doctype.name) {\n str += doctype.name;\n }\n if (doctype.internalSubset) {\n str += doctype.internalSubset;\n }\n if (doctype.publicId) {\n str += \"\\\"\" + doctype.publicId + \"\\\"\";\n }\n if (doctype.systemId) {\n str += \"\\\"\" + doctype.systemId + \"\\\"\";\n }\n str += '>';\n }\n return str;\n };\n var restoreOwnerScroll = function (ownerDocument, x, y) {\n if (ownerDocument &&\n ownerDocument.defaultView &&\n (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\n ownerDocument.defaultView.scrollTo(x, y);\n }\n };\n var restoreNodeScroll = function (_a) {\n var element = _a[0], x = _a[1], y = _a[2];\n element.scrollLeft = x;\n element.scrollTop = y;\n };\n var PSEUDO_BEFORE = ':before';\n var PSEUDO_AFTER = ':after';\n var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\n var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\n var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n content: \\\"\\\" !important;\\n display: none !important;\\n}\";\n var createPseudoHideStyles = function (body) {\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);\n };\n var createStyles = function (body, styles) {\n var document = body.ownerDocument;\n if (document) {\n var style = document.createElement('style');\n style.textContent = styles;\n body.appendChild(style);\n }\n };\n\n var CacheStorage = /** @class */ (function () {\n function CacheStorage() {\n }\n CacheStorage.getOrigin = function (url) {\n var link = CacheStorage._link;\n if (!link) {\n return 'about:blank';\n }\n link.href = url;\n link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\n return link.protocol + link.hostname + link.port;\n };\n CacheStorage.isSameOrigin = function (src) {\n return CacheStorage.getOrigin(src) === CacheStorage._origin;\n };\n CacheStorage.setContext = function (window) {\n CacheStorage._link = window.document.createElement('a');\n CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\n };\n CacheStorage._origin = 'about:blank';\n return CacheStorage;\n }());\n var Cache = /** @class */ (function () {\n function Cache(context, _options) {\n this.context = context;\n this._options = _options;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._cache = {};\n }\n Cache.prototype.addImage = function (src) {\n var result = Promise.resolve();\n if (this.has(src)) {\n return result;\n }\n if (isBlobImage(src) || isRenderable(src)) {\n (this._cache[src] = this.loadImage(src)).catch(function () {\n // prevent unhandled rejection\n });\n return result;\n }\n return result;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Cache.prototype.match = function (src) {\n return this._cache[src];\n };\n Cache.prototype.loadImage = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var isSameOrigin, useCORS, useProxy, src;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isSameOrigin = CacheStorage.isSameOrigin(key);\n useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\n useProxy = !isInlineImage(key) &&\n !isSameOrigin &&\n !isBlobImage(key) &&\n typeof this._options.proxy === 'string' &&\n FEATURES.SUPPORT_CORS_XHR &&\n !useCORS;\n if (!isSameOrigin &&\n this._options.allowTaint === false &&\n !isInlineImage(key) &&\n !isBlobImage(key) &&\n !useProxy &&\n !useCORS) {\n return [2 /*return*/];\n }\n src = key;\n if (!useProxy) return [3 /*break*/, 2];\n return [4 /*yield*/, this.proxy(src)];\n case 1:\n src = _a.sent();\n _a.label = 2;\n case 2:\n this.context.logger.debug(\"Added image \" + key.substring(0, 256));\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = reject;\n //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\n if (isInlineBase64Image(src) || useCORS) {\n img.crossOrigin = 'anonymous';\n }\n img.src = src;\n if (img.complete === true) {\n // Inline XML images may fail to parse, throwing an Error later on\n setTimeout(function () { return resolve(img); }, 500);\n }\n if (_this._options.imageTimeout > 0) {\n setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\n }\n })];\n case 3: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n Cache.prototype.has = function (key) {\n return typeof this._cache[key] !== 'undefined';\n };\n Cache.prototype.keys = function () {\n return Promise.resolve(Object.keys(this._cache));\n };\n Cache.prototype.proxy = function (src) {\n var _this = this;\n var proxy = this._options.proxy;\n if (!proxy) {\n throw new Error('No proxy defined');\n }\n var key = src.substring(0, 256);\n return new Promise(function (resolve, reject) {\n var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n if (xhr.status === 200) {\n if (responseType === 'text') {\n resolve(xhr.response);\n }\n else {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\n reader_1.addEventListener('error', function (e) { return reject(e); }, false);\n reader_1.readAsDataURL(xhr.response);\n }\n }\n else {\n reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\n }\n };\n xhr.onerror = reject;\n var queryString = proxy.indexOf('?') > -1 ? '&' : '?';\n xhr.open('GET', \"\" + proxy + queryString + \"url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\n if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\n xhr.responseType = responseType;\n }\n if (_this._options.imageTimeout) {\n var timeout_1 = _this._options.imageTimeout;\n xhr.timeout = timeout_1;\n xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\n }\n xhr.send();\n });\n };\n return Cache;\n }());\n var INLINE_SVG = /^data:image\\/svg\\+xml/i;\n var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\n var INLINE_IMG = /^data:image\\/.*/i;\n var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\n var isInlineImage = function (src) { return INLINE_IMG.test(src); };\n var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\n var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\n var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n var PathType;\n (function (PathType) {\n PathType[PathType[\"VECTOR\"] = 0] = \"VECTOR\";\n PathType[PathType[\"BEZIER_CURVE\"] = 1] = \"BEZIER_CURVE\";\n })(PathType || (PathType = {}));\n var equalPath = function (a, b) {\n if (a.length === b.length) {\n return a.some(function (v, i) { return v === b[i]; });\n }\n return false;\n };\n var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\n return path.map(function (point, index) {\n switch (index) {\n case 0:\n return point.add(deltaX, deltaY);\n case 1:\n return point.add(deltaX + deltaW, deltaY);\n case 2:\n return point.add(deltaX + deltaW, deltaY + deltaH);\n case 3:\n return point.add(deltaX, deltaY + deltaH);\n }\n return point;\n });\n };\n\n var Vector = /** @class */ (function () {\n function Vector(x, y) {\n this.type = PathType.VECTOR;\n this.x = x;\n this.y = y;\n }\n Vector.prototype.add = function (deltaX, deltaY) {\n return new Vector(this.x + deltaX, this.y + deltaY);\n };\n return Vector;\n }());\n\n var lerp = function (a, b, t) {\n return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\n };\n var BezierCurve = /** @class */ (function () {\n function BezierCurve(start, startControl, endControl, end) {\n this.type = PathType.BEZIER_CURVE;\n this.start = start;\n this.startControl = startControl;\n this.endControl = endControl;\n this.end = end;\n }\n BezierCurve.prototype.subdivide = function (t, firstHalf) {\n var ab = lerp(this.start, this.startControl, t);\n var bc = lerp(this.startControl, this.endControl, t);\n var cd = lerp(this.endControl, this.end, t);\n var abbc = lerp(ab, bc, t);\n var bccd = lerp(bc, cd, t);\n var dest = lerp(abbc, bccd, t);\n return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\n };\n BezierCurve.prototype.add = function (deltaX, deltaY) {\n return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\n };\n BezierCurve.prototype.reverse = function () {\n return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\n };\n return BezierCurve;\n }());\n var isBezierCurve = function (path) { return path.type === PathType.BEZIER_CURVE; };\n\n var BoundCurves = /** @class */ (function () {\n function BoundCurves(element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\n var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\n var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\n var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\n var factors = [];\n factors.push((tlh + trh) / bounds.width);\n factors.push((blh + brh) / bounds.width);\n factors.push((tlv + blv) / bounds.height);\n factors.push((trv + brv) / bounds.height);\n var maxFactor = Math.max.apply(Math, factors);\n if (maxFactor > 1) {\n tlh /= maxFactor;\n tlv /= maxFactor;\n trh /= maxFactor;\n trv /= maxFactor;\n brh /= maxFactor;\n brv /= maxFactor;\n blh /= maxFactor;\n blv /= maxFactor;\n }\n var topWidth = bounds.width - trh;\n var rightHeight = bounds.height - brv;\n var bottomWidth = bounds.width - brh;\n var leftHeight = bounds.height - blv;\n var borderTopWidth = styles.borderTopWidth;\n var borderRightWidth = styles.borderRightWidth;\n var borderBottomWidth = styles.borderBottomWidth;\n var borderLeftWidth = styles.borderLeftWidth;\n var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\n this.topLeftBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3, tlh - borderLeftWidth / 3, tlv - borderTopWidth / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\n this.topRightBorderDoubleOuterBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 3, trh - borderRightWidth / 3, trv - borderTopWidth / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\n this.bottomRightBorderDoubleOuterBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 3, brv - borderBottomWidth / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.bottomLeftBorderDoubleOuterBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + leftHeight, blh - borderLeftWidth / 3, blv - borderBottomWidth / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\n this.topLeftBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3, tlh - (borderLeftWidth * 2) / 3, tlv - (borderTopWidth * 2) / 3, CORNER.TOP_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.topRightBorderDoubleInnerBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + (borderTopWidth * 2) / 3, trh - (borderRightWidth * 2) / 3, trv - (borderTopWidth * 2) / 3, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\n this.bottomRightBorderDoubleInnerBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - (borderRightWidth * 2) / 3, brv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.bottomLeftBorderDoubleInnerBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + leftHeight, blh - (borderLeftWidth * 2) / 3, blv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\n this.topLeftBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2, tlh - borderLeftWidth / 2, tlv - borderTopWidth / 2, CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\n this.topRightBorderStroke =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 2, trh - borderRightWidth / 2, trv - borderTopWidth / 2, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\n this.bottomRightBorderStroke =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 2, brv - borderBottomWidth / 2, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.bottomLeftBorderStroke =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + leftHeight, blh - borderLeftWidth / 2, blv - borderBottomWidth / 2, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\n this.topLeftBorderBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\n : new Vector(bounds.left, bounds.top);\n this.topRightBorderBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top);\n this.bottomRightBorderBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\n this.bottomLeftBorderBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left, bounds.top + bounds.height);\n this.topLeftPaddingBox =\n tlh > 0 || tlv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\n this.topRightPaddingBox =\n trh > 0 || trv > 0\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth), Math.max(0, trv - borderTopWidth), CORNER.TOP_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\n this.bottomRightPaddingBox =\n brh > 0 || brv > 0\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth), Math.max(0, brh - borderRightWidth), Math.max(0, brv - borderBottomWidth), CORNER.BOTTOM_RIGHT)\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\n this.bottomLeftPaddingBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth), Math.max(0, blh - borderLeftWidth), Math.max(0, blv - borderBottomWidth), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\n this.topLeftContentBox =\n tlh > 0 || tlv > 0\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)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\n this.topRightContentBox =\n trh > 0 || trv > 0\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)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\n this.bottomRightContentBox =\n brh > 0 || brv > 0\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)\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n this.bottomLeftContentBox =\n blh > 0 || blv > 0\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\n }\n return BoundCurves;\n }());\n var CORNER;\n (function (CORNER) {\n CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\n CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\n CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\n CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\n })(CORNER || (CORNER = {}));\n var getCurvePoints = function (x, y, r1, r2, position) {\n var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\n var ox = r1 * kappa; // control point offset horizontal\n var oy = r2 * kappa; // control point offset vertical\n var xm = x + r1; // x-middle\n var ym = y + r2; // y-middle\n switch (position) {\n case CORNER.TOP_LEFT:\n return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\n case CORNER.TOP_RIGHT:\n return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\n case CORNER.BOTTOM_RIGHT:\n return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\n case CORNER.BOTTOM_LEFT:\n default:\n return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\n }\n };\n var calculateBorderBoxPath = function (curves) {\n return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\n };\n var calculateContentBoxPath = function (curves) {\n return [\n curves.topLeftContentBox,\n curves.topRightContentBox,\n curves.bottomRightContentBox,\n curves.bottomLeftContentBox\n ];\n };\n var calculatePaddingBoxPath = function (curves) {\n return [\n curves.topLeftPaddingBox,\n curves.topRightPaddingBox,\n curves.bottomRightPaddingBox,\n curves.bottomLeftPaddingBox\n ];\n };\n\n var TransformEffect = /** @class */ (function () {\n function TransformEffect(offsetX, offsetY, matrix) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.matrix = matrix;\n this.type = 0 /* TRANSFORM */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return TransformEffect;\n }());\n var ClipEffect = /** @class */ (function () {\n function ClipEffect(path, target) {\n this.path = path;\n this.target = target;\n this.type = 1 /* CLIP */;\n }\n return ClipEffect;\n }());\n var OpacityEffect = /** @class */ (function () {\n function OpacityEffect(opacity) {\n this.opacity = opacity;\n this.type = 2 /* OPACITY */;\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\n }\n return OpacityEffect;\n }());\n var isTransformEffect = function (effect) {\n return effect.type === 0 /* TRANSFORM */;\n };\n var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\n var isOpacityEffect = function (effect) { return effect.type === 2 /* OPACITY */; };\n\n var StackingContext = /** @class */ (function () {\n function StackingContext(container) {\n this.element = container;\n this.inlineLevel = [];\n this.nonInlineLevel = [];\n this.negativeZIndex = [];\n this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\n this.positiveZIndex = [];\n this.nonPositionedFloats = [];\n this.nonPositionedInlineLevel = [];\n }\n return StackingContext;\n }());\n var ElementPaint = /** @class */ (function () {\n function ElementPaint(container, parent) {\n this.container = container;\n this.parent = parent;\n this.effects = [];\n this.curves = new BoundCurves(this.container);\n if (this.container.styles.opacity < 1) {\n this.effects.push(new OpacityEffect(this.container.styles.opacity));\n }\n if (this.container.styles.transform !== null) {\n var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\n var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\n var matrix = this.container.styles.transform;\n this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\n }\n if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n var borderBox = calculateBorderBoxPath(this.curves);\n var paddingBox = calculatePaddingBoxPath(this.curves);\n if (equalPath(borderBox, paddingBox)) {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n else {\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\n this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\n }\n }\n }\n ElementPaint.prototype.getEffects = function (target) {\n var inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(this.container.styles.position) === -1;\n var parent = this.parent;\n var effects = this.effects.slice(0);\n while (parent) {\n var croplessEffects = parent.effects.filter(function (effect) { return !isClipEffect(effect); });\n if (inFlow || parent.container.styles.position !== POSITION.STATIC || !parent.parent) {\n effects.unshift.apply(effects, croplessEffects);\n inFlow = [POSITION.ABSOLUTE, POSITION.FIXED].indexOf(parent.container.styles.position) === -1;\n if (parent.container.styles.overflowX !== OVERFLOW.VISIBLE) {\n var borderBox = calculateBorderBoxPath(parent.curves);\n var paddingBox = calculatePaddingBoxPath(parent.curves);\n if (!equalPath(borderBox, paddingBox)) {\n effects.unshift(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\n }\n }\n }\n else {\n effects.unshift.apply(effects, croplessEffects);\n }\n parent = parent.parent;\n }\n return effects.filter(function (effect) { return contains(effect.target, target); });\n };\n return ElementPaint;\n }());\n var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\n parent.container.elements.forEach(function (child) {\n var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\n var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\n var paintContainer = new ElementPaint(child, parent);\n if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\n listItems.push(paintContainer);\n }\n var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\n if (treatAsRealStackingContext || createsStackingContext) {\n var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\n var stack = new StackingContext(paintContainer);\n if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\n var order_1 = child.styles.zIndex.order;\n if (order_1 < 0) {\n var index_1 = 0;\n parentStack.negativeZIndex.some(function (current, i) {\n if (order_1 > current.element.container.styles.zIndex.order) {\n index_1 = i;\n return false;\n }\n else if (index_1 > 0) {\n return true;\n }\n return false;\n });\n parentStack.negativeZIndex.splice(index_1, 0, stack);\n }\n else if (order_1 > 0) {\n var index_2 = 0;\n parentStack.positiveZIndex.some(function (current, i) {\n if (order_1 >= current.element.container.styles.zIndex.order) {\n index_2 = i + 1;\n return false;\n }\n else if (index_2 > 0) {\n return true;\n }\n return false;\n });\n parentStack.positiveZIndex.splice(index_2, 0, stack);\n }\n else {\n parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\n }\n }\n else {\n if (child.styles.isFloating()) {\n parentStack.nonPositionedFloats.push(stack);\n }\n else {\n parentStack.nonPositionedInlineLevel.push(stack);\n }\n }\n parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\n }\n else {\n if (child.styles.isInlineLevel()) {\n stackingContext.inlineLevel.push(paintContainer);\n }\n else {\n stackingContext.nonInlineLevel.push(paintContainer);\n }\n parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\n }\n if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\n processListItems(child, listOwnerItems);\n }\n });\n };\n var processListItems = function (owner, elements) {\n var numbering = owner instanceof OLElementContainer ? owner.start : 1;\n var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\n for (var i = 0; i < elements.length; i++) {\n var item = elements[i];\n if (item.container instanceof LIElementContainer &&\n typeof item.container.value === 'number' &&\n item.container.value !== 0) {\n numbering = item.container.value;\n }\n item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\n numbering += reversed ? -1 : 1;\n }\n };\n var parseStackingContexts = function (container) {\n var paintContainer = new ElementPaint(container, null);\n var root = new StackingContext(paintContainer);\n var listItems = [];\n parseStackTree(paintContainer, root, root, listItems);\n processListItems(paintContainer.container, listItems);\n return root;\n };\n\n var parsePathForBorder = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderDoubleOuter = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox);\n }\n };\n var parsePathForBorderDoubleInner = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox);\n case 1:\n return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox);\n case 2:\n return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox);\n case 3:\n default:\n return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox);\n }\n };\n var parsePathForBorderStroke = function (curves, borderSide) {\n switch (borderSide) {\n case 0:\n return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);\n case 1:\n return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);\n case 2:\n return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);\n case 3:\n default:\n return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);\n }\n };\n var createStrokePathFromCurves = function (outer1, outer2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n return path;\n };\n var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\n var path = [];\n if (isBezierCurve(outer1)) {\n path.push(outer1.subdivide(0.5, false));\n }\n else {\n path.push(outer1);\n }\n if (isBezierCurve(outer2)) {\n path.push(outer2.subdivide(0.5, true));\n }\n else {\n path.push(outer2);\n }\n if (isBezierCurve(inner2)) {\n path.push(inner2.subdivide(0.5, true).reverse());\n }\n else {\n path.push(inner2);\n }\n if (isBezierCurve(inner1)) {\n path.push(inner1.subdivide(0.5, false).reverse());\n }\n else {\n path.push(inner1);\n }\n return path;\n };\n\n var paddingBox = function (element) {\n var bounds = element.bounds;\n var styles = element.styles;\n return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\n };\n var contentBox = function (element) {\n var styles = element.styles;\n var bounds = element.bounds;\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\n var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\n var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\n return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\n };\n\n var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\n if (backgroundOrigin === 0 /* BORDER_BOX */) {\n return element.bounds;\n }\n if (backgroundOrigin === 2 /* CONTENT_BOX */) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundPaintingArea = function (backgroundClip, element) {\n if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {\n return element.bounds;\n }\n if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {\n return contentBox(element);\n }\n return paddingBox(element);\n };\n var calculateBackgroundRendering = function (container, index, intrinsicSize) {\n var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\n var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\n var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\n var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\n var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\n var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\n var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\n var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\n return [path, offsetX, offsetY, sizeWidth, sizeHeight];\n };\n var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\n var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\n var calculateBackgroundSize = function (size, _a, bounds) {\n var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\n var first = size[0], second = size[1];\n if (!first) {\n return [0, 0];\n }\n if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\n return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\n }\n var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\n if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\n if (hasIntrinsicValue(intrinsicProportion)) {\n var targetRatio = bounds.width / bounds.height;\n return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\n ? [bounds.width, bounds.width / intrinsicProportion]\n : [bounds.height * intrinsicProportion, bounds.height];\n }\n return [bounds.width, bounds.height];\n }\n var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\n var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\n var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\n // If the background-size is auto or auto auto:\n if (isAuto(first) && (!second || isAuto(second))) {\n // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\n if (hasIntrinsicWidth && hasIntrinsicHeight) {\n return [intrinsicWidth, intrinsicHeight];\n }\n // If the image has no intrinsic dimensions and has no intrinsic proportions,\n // it's rendered at the size of the background positioning area.\n if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\n return [bounds.width, bounds.height];\n }\n // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\n // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\n // The other dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicDimensions && hasIntrinsicProportion) {\n var width_1 = hasIntrinsicWidth\n ? intrinsicWidth\n : intrinsicHeight * intrinsicProportion;\n var height_1 = hasIntrinsicHeight\n ? intrinsicHeight\n : intrinsicWidth / intrinsicProportion;\n return [width_1, height_1];\n }\n // If the image has only one intrinsic dimension but has no intrinsic proportions,\n // it's rendered using the specified dimension and the other dimension of the background positioning area.\n var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\n var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\n return [width_2, height_2];\n }\n // If the image has intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\n if (hasIntrinsicProportion) {\n var width_3 = 0;\n var height_3 = 0;\n if (isLengthPercentage(first)) {\n width_3 = getAbsoluteValue(first, bounds.width);\n }\n else if (isLengthPercentage(second)) {\n height_3 = getAbsoluteValue(second, bounds.height);\n }\n if (isAuto(first)) {\n width_3 = height_3 * intrinsicProportion;\n }\n else if (!second || isAuto(second)) {\n height_3 = width_3 / intrinsicProportion;\n }\n return [width_3, height_3];\n }\n // If the image has no intrinsic proportions, it's stretched to the specified dimension.\n // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\n // if there is one. If there is no such intrinsic dimension,\n // it becomes the corresponding dimension of the background positioning area.\n var width = null;\n var height = null;\n if (isLengthPercentage(first)) {\n width = getAbsoluteValue(first, bounds.width);\n }\n else if (second && isLengthPercentage(second)) {\n height = getAbsoluteValue(second, bounds.height);\n }\n if (width !== null && (!second || isAuto(second))) {\n height =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (width / intrinsicWidth) * intrinsicHeight\n : bounds.height;\n }\n if (height !== null && isAuto(first)) {\n width =\n hasIntrinsicWidth && hasIntrinsicHeight\n ? (height / intrinsicHeight) * intrinsicWidth\n : bounds.width;\n }\n if (width !== null && height !== null) {\n return [width, height];\n }\n throw new Error(\"Unable to calculate background-size for element\");\n };\n var getBackgroundValueForIndex = function (values, index) {\n var value = values[index];\n if (typeof value === 'undefined') {\n return values[0];\n }\n return value;\n };\n var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\n var x = _a[0], y = _a[1];\n var width = _b[0], height = _b[1];\n switch (repeat) {\n case BACKGROUND_REPEAT.REPEAT_X:\n return [\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\n ];\n case BACKGROUND_REPEAT.REPEAT_Y:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\n ];\n case BACKGROUND_REPEAT.NO_REPEAT:\n return [\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\n ];\n default:\n return [\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\n ];\n }\n };\n\n var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n var SAMPLE_TEXT = 'Hidden Text';\n var FontMetrics = /** @class */ (function () {\n function FontMetrics(document) {\n this._data = {};\n this._document = document;\n }\n FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\n var container = this._document.createElement('div');\n var img = this._document.createElement('img');\n var span = this._document.createElement('span');\n var body = this._document.body;\n container.style.visibility = 'hidden';\n container.style.fontFamily = fontFamily;\n container.style.fontSize = fontSize;\n container.style.margin = '0';\n container.style.padding = '0';\n body.appendChild(container);\n img.src = SMALL_IMAGE;\n img.width = 1;\n img.height = 1;\n img.style.margin = '0';\n img.style.padding = '0';\n img.style.verticalAlign = 'baseline';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = fontSize;\n span.style.margin = '0';\n span.style.padding = '0';\n span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.appendChild(span);\n container.appendChild(img);\n var baseline = img.offsetTop - span.offsetTop + 2;\n container.removeChild(span);\n container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\n container.style.lineHeight = 'normal';\n img.style.verticalAlign = 'super';\n var middle = img.offsetTop - container.offsetTop + 2;\n body.removeChild(container);\n return { baseline: baseline, middle: middle };\n };\n FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\n var key = fontFamily + \" \" + fontSize;\n if (typeof this._data[key] === 'undefined') {\n this._data[key] = this.parseMetrics(fontFamily, fontSize);\n }\n return this._data[key];\n };\n return FontMetrics;\n }());\n\n var Renderer = /** @class */ (function () {\n function Renderer(context, options) {\n this.context = context;\n this.options = options;\n }\n return Renderer;\n }());\n\n var MASK_OFFSET = 10000;\n var CanvasRenderer = /** @class */ (function (_super) {\n __extends(CanvasRenderer, _super);\n function CanvasRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this._activeEffects = [];\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n if (!options.canvas) {\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n }\n _this.fontMetrics = new FontMetrics(document);\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.ctx.textBaseline = 'bottom';\n _this._activeEffects = [];\n _this.context.logger.debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \") with scale \" + options.scale);\n return _this;\n }\n CanvasRenderer.prototype.applyEffects = function (effects) {\n var _this = this;\n while (this._activeEffects.length) {\n this.popEffect();\n }\n effects.forEach(function (effect) { return _this.applyEffect(effect); });\n };\n CanvasRenderer.prototype.applyEffect = function (effect) {\n this.ctx.save();\n if (isOpacityEffect(effect)) {\n this.ctx.globalAlpha = effect.opacity;\n }\n if (isTransformEffect(effect)) {\n this.ctx.translate(effect.offsetX, effect.offsetY);\n this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\n this.ctx.translate(-effect.offsetX, -effect.offsetY);\n }\n if (isClipEffect(effect)) {\n this.path(effect.path);\n this.ctx.clip();\n }\n this._activeEffects.push(effect);\n };\n CanvasRenderer.prototype.popEffect = function () {\n this._activeEffects.pop();\n this.ctx.restore();\n };\n CanvasRenderer.prototype.renderStack = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var styles;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n styles = stack.element.container.styles;\n if (!styles.isVisible()) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderStackContent(stack)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNode = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (contains(paint.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.renderNodeContent(paint)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) {\n var _this = this;\n if (letterSpacing === 0) {\n this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n else {\n var letters = splitGraphemes(text.text);\n letters.reduce(function (left, letter) {\n _this.ctx.fillText(letter, left, text.bounds.top + baseline);\n return left + _this.ctx.measureText(letter).width;\n }, text.bounds.left);\n }\n };\n CanvasRenderer.prototype.createFontStyle = function (styles) {\n var fontVariant = styles.fontVariant\n .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\n .join('');\n var fontFamily = styles.fontFamily.join(', ');\n var fontSize = isDimensionToken(styles.fontSize)\n ? \"\" + styles.fontSize.number + styles.fontSize.unit\n : styles.fontSize.number + \"px\";\n return [\n [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\n fontFamily,\n fontSize\n ];\n };\n CanvasRenderer.prototype.renderTextNode = function (text, styles) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder;\n var _this = this;\n return __generator(this, function (_c) {\n _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\n this.ctx.font = font;\n this.ctx.direction = styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr';\n this.ctx.textAlign = 'left';\n this.ctx.textBaseline = 'alphabetic';\n _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle;\n paintOrder = styles.paintOrder;\n text.textBounds.forEach(function (text) {\n paintOrder.forEach(function (paintOrderLayer) {\n switch (paintOrderLayer) {\n case PAINT_ORDER_LAYER.FILL:\n _this.ctx.fillStyle = asString(styles.color);\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n var textShadows = styles.textShadow;\n if (textShadows.length && text.text.trim().length) {\n textShadows\n .slice(0)\n .reverse()\n .forEach(function (textShadow) {\n _this.ctx.shadowColor = asString(textShadow.color);\n _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\n _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\n _this.ctx.shadowBlur = textShadow.blur.number;\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\n });\n _this.ctx.shadowColor = '';\n _this.ctx.shadowOffsetX = 0;\n _this.ctx.shadowOffsetY = 0;\n _this.ctx.shadowBlur = 0;\n }\n if (styles.textDecorationLine.length) {\n _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\n styles.textDecorationLine.forEach(function (textDecorationLine) {\n switch (textDecorationLine) {\n case 1 /* UNDERLINE */:\n // Draws a line at the baseline of the font\n // TODO As some browsers display the line as more than 1px if the font-size is big,\n // need to take that into account both in position and size\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\n break;\n case 2 /* OVERLINE */:\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\n break;\n case 3 /* LINE_THROUGH */:\n // TODO try and find exact position for line-through\n _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\n break;\n }\n });\n }\n break;\n case PAINT_ORDER_LAYER.STROKE:\n if (styles.webkitTextStrokeWidth && text.text.trim().length) {\n _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);\n _this.ctx.lineWidth = styles.webkitTextStrokeWidth;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.ctx.lineJoin = !!window.chrome ? 'miter' : 'round';\n _this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline);\n }\n _this.ctx.strokeStyle = '';\n _this.ctx.lineWidth = 0;\n _this.ctx.lineJoin = 'miter';\n break;\n }\n });\n });\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\n if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\n var box = contentBox(container);\n var path = calculatePaddingBoxPath(curves);\n this.path(path);\n this.ctx.save();\n this.ctx.clip();\n this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\n this.ctx.restore();\n }\n };\n CanvasRenderer.prototype.renderNodeContent = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var container, curves, styles, _i, _a, child, image, image, iframeRenderer, canvas, size, _b, fontFamily, fontSize, baseline, bounds, x, textBounds, img, image, url, fontFamily, bounds;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n this.applyEffects(paint.getEffects(4 /* CONTENT */));\n container = paint.container;\n curves = paint.curves;\n styles = container.styles;\n _i = 0, _a = container.textNodes;\n _c.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, this.renderTextNode(child, styles)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\n _c.label = 5;\n case 5:\n _c.trys.push([5, 7, , 8]);\n return [4 /*yield*/, this.context.cache.match(container.src)];\n case 6:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 8];\n case 7:\n _c.sent();\n this.context.logger.error(\"Error loading image \" + container.src);\n return [3 /*break*/, 8];\n case 8:\n if (container instanceof CanvasElementContainer) {\n this.renderReplacedElement(container, curves, container.canvas);\n }\n if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\n _c.label = 9;\n case 9:\n _c.trys.push([9, 11, , 12]);\n return [4 /*yield*/, this.context.cache.match(container.svg)];\n case 10:\n image = _c.sent();\n this.renderReplacedElement(container, curves, image);\n return [3 /*break*/, 12];\n case 11:\n _c.sent();\n this.context.logger.error(\"Error loading svg \" + container.svg.substring(0, 255));\n return [3 /*break*/, 12];\n case 12:\n if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\n iframeRenderer = new CanvasRenderer(this.context, {\n scale: this.options.scale,\n backgroundColor: container.backgroundColor,\n x: 0,\n y: 0,\n width: container.width,\n height: container.height\n });\n return [4 /*yield*/, iframeRenderer.render(container.tree)];\n case 13:\n canvas = _c.sent();\n if (container.width && container.height) {\n this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\n }\n _c.label = 14;\n case 14:\n if (container instanceof InputElementContainer) {\n size = Math.min(container.bounds.width, container.bounds.height);\n if (container.type === CHECKBOX) {\n if (container.checked) {\n this.ctx.save();\n this.path([\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\n new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\n new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\n new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\n new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\n new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\n ]);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n else if (container.type === RADIO) {\n if (container.checked) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\n this.ctx.fillStyle = asString(INPUT_COLOR);\n this.ctx.fill();\n this.ctx.restore();\n }\n }\n }\n if (isTextInputElement(container) && container.value.length) {\n _b = this.createFontStyle(styles), fontFamily = _b[0], fontSize = _b[1];\n baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\n bounds = contentBox(container);\n x = 0;\n switch (container.styles.textAlign) {\n case TEXT_ALIGN.CENTER:\n x += bounds.width / 2;\n break;\n case TEXT_ALIGN.RIGHT:\n x += bounds.width;\n break;\n }\n textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\n this.ctx.save();\n this.path([\n new Vector(bounds.left, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top),\n new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\n new Vector(bounds.left, bounds.top + bounds.height)\n ]);\n this.ctx.clip();\n this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline);\n this.ctx.restore();\n this.ctx.textBaseline = 'alphabetic';\n this.ctx.textAlign = 'left';\n }\n if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\n if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\n img = container.styles.listStyleImage;\n if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18];\n image = void 0;\n url = img.url;\n _c.label = 15;\n case 15:\n _c.trys.push([15, 17, , 18]);\n return [4 /*yield*/, this.context.cache.match(url)];\n case 16:\n image = _c.sent();\n this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\n return [3 /*break*/, 18];\n case 17:\n _c.sent();\n this.context.logger.error(\"Error loading list-style-image \" + url);\n return [3 /*break*/, 18];\n case 18: return [3 /*break*/, 20];\n case 19:\n if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) {\n fontFamily = this.createFontStyle(styles)[0];\n this.ctx.font = fontFamily;\n this.ctx.fillStyle = asString(styles.color);\n this.ctx.textBaseline = 'middle';\n this.ctx.textAlign = 'right';\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);\n this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2);\n this.ctx.textBaseline = 'bottom';\n this.ctx.textAlign = 'left';\n }\n _c.label = 20;\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderStackContent = function (stack) {\n return __awaiter(this, void 0, void 0, function () {\n var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\n return __generator(this, function (_p) {\n switch (_p.label) {\n case 0:\n if (contains(stack.element.container.flags, 16 /* DEBUG_RENDER */)) {\n debugger;\n }\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\n case 1:\n // https://www.w3.org/TR/css-position-3/#painting-order\n // 1. the background and borders of the element forming the stacking context.\n _p.sent();\n _i = 0, _a = stack.negativeZIndex;\n _p.label = 2;\n case 2:\n if (!(_i < _a.length)) return [3 /*break*/, 5];\n child = _a[_i];\n return [4 /*yield*/, this.renderStack(child)];\n case 3:\n _p.sent();\n _p.label = 4;\n case 4:\n _i++;\n return [3 /*break*/, 2];\n case 5: \n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n return [4 /*yield*/, this.renderNodeContent(stack.element)];\n case 6:\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\n _p.sent();\n _b = 0, _c = stack.nonInlineLevel;\n _p.label = 7;\n case 7:\n if (!(_b < _c.length)) return [3 /*break*/, 10];\n child = _c[_b];\n return [4 /*yield*/, this.renderNode(child)];\n case 8:\n _p.sent();\n _p.label = 9;\n case 9:\n _b++;\n return [3 /*break*/, 7];\n case 10:\n _d = 0, _e = stack.nonPositionedFloats;\n _p.label = 11;\n case 11:\n if (!(_d < _e.length)) return [3 /*break*/, 14];\n child = _e[_d];\n return [4 /*yield*/, this.renderStack(child)];\n case 12:\n _p.sent();\n _p.label = 13;\n case 13:\n _d++;\n return [3 /*break*/, 11];\n case 14:\n _f = 0, _g = stack.nonPositionedInlineLevel;\n _p.label = 15;\n case 15:\n if (!(_f < _g.length)) return [3 /*break*/, 18];\n child = _g[_f];\n return [4 /*yield*/, this.renderStack(child)];\n case 16:\n _p.sent();\n _p.label = 17;\n case 17:\n _f++;\n return [3 /*break*/, 15];\n case 18:\n _h = 0, _j = stack.inlineLevel;\n _p.label = 19;\n case 19:\n if (!(_h < _j.length)) return [3 /*break*/, 22];\n child = _j[_h];\n return [4 /*yield*/, this.renderNode(child)];\n case 20:\n _p.sent();\n _p.label = 21;\n case 21:\n _h++;\n return [3 /*break*/, 19];\n case 22:\n _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\n _p.label = 23;\n case 23:\n if (!(_k < _l.length)) return [3 /*break*/, 26];\n child = _l[_k];\n return [4 /*yield*/, this.renderStack(child)];\n case 24:\n _p.sent();\n _p.label = 25;\n case 25:\n _k++;\n return [3 /*break*/, 23];\n case 26:\n _m = 0, _o = stack.positiveZIndex;\n _p.label = 27;\n case 27:\n if (!(_m < _o.length)) return [3 /*break*/, 30];\n child = _o[_m];\n return [4 /*yield*/, this.renderStack(child)];\n case 28:\n _p.sent();\n _p.label = 29;\n case 29:\n _m++;\n return [3 /*break*/, 27];\n case 30: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.mask = function (paths) {\n this.ctx.beginPath();\n this.ctx.moveTo(0, 0);\n this.ctx.lineTo(this.canvas.width, 0);\n this.ctx.lineTo(this.canvas.width, this.canvas.height);\n this.ctx.lineTo(0, this.canvas.height);\n this.ctx.lineTo(0, 0);\n this.formatPath(paths.slice(0).reverse());\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.path = function (paths) {\n this.ctx.beginPath();\n this.formatPath(paths);\n this.ctx.closePath();\n };\n CanvasRenderer.prototype.formatPath = function (paths) {\n var _this = this;\n paths.forEach(function (point, index) {\n var start = isBezierCurve(point) ? point.start : point;\n if (index === 0) {\n _this.ctx.moveTo(start.x, start.y);\n }\n else {\n _this.ctx.lineTo(start.x, start.y);\n }\n if (isBezierCurve(point)) {\n _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\n }\n });\n };\n CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\n this.path(path);\n this.ctx.fillStyle = pattern;\n this.ctx.translate(offsetX, offsetY);\n this.ctx.fill();\n this.ctx.translate(-offsetX, -offsetY);\n };\n CanvasRenderer.prototype.resizeImage = function (image, width, height) {\n var _a;\n if (image.width === width && image.height === height) {\n return image;\n }\n var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document;\n var canvas = ownerDocument.createElement('canvas');\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n var ctx = canvas.getContext('2d');\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\n return canvas;\n };\n CanvasRenderer.prototype.renderBackgroundImage = function (container) {\n return __awaiter(this, void 0, void 0, function () {\n var index, _loop_1, this_1, _i, _a, backgroundImage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = container.styles.backgroundImage.length - 1;\n _loop_1 = function (backgroundImage) {\n var image, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position, x, y, _g, rx, ry, radialGradient_1, midX, midY, f, invF;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n if (!(backgroundImage.type === CSSImageType.URL)) return [3 /*break*/, 5];\n image = void 0;\n url = backgroundImage.url;\n _h.label = 1;\n case 1:\n _h.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this_1.context.cache.match(url)];\n case 2:\n image = _h.sent();\n return [3 /*break*/, 4];\n case 3:\n _h.sent();\n this_1.context.logger.error(\"Error loading background-image \" + url);\n return [3 /*break*/, 4];\n case 4:\n if (image) {\n _c = calculateBackgroundRendering(container, index, [\n image.width,\n image.height,\n image.width / image.height\n ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4];\n pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n return [3 /*break*/, 6];\n case 5:\n if (isLinearGradient(backgroundImage)) {\n _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4];\n _e = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4];\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\n processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\n return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n ctx.fillStyle = gradient_1;\n ctx.fillRect(0, 0, width, height);\n if (width > 0 && height > 0) {\n pattern = this_1.ctx.createPattern(canvas, 'repeat');\n this_1.renderRepeat(path, pattern, x, y);\n }\n }\n else if (isRadialGradient(backgroundImage)) {\n _f = calculateBackgroundRendering(container, index, [\n null,\n null,\n null\n ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4];\n position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\n x = getAbsoluteValue(position[0], width);\n y = getAbsoluteValue(position[position.length - 1], height);\n _g = calculateRadius(backgroundImage, x, y, width, height), rx = _g[0], ry = _g[1];\n if (rx > 0 && ry > 0) {\n radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\n processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\n return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\n });\n this_1.path(path);\n this_1.ctx.fillStyle = radialGradient_1;\n if (rx !== ry) {\n midX = container.bounds.left + 0.5 * container.bounds.width;\n midY = container.bounds.top + 0.5 * container.bounds.height;\n f = ry / rx;\n invF = 1 / f;\n this_1.ctx.save();\n this_1.ctx.translate(midX, midY);\n this_1.ctx.transform(1, 0, 0, f, 0, 0);\n this_1.ctx.translate(-midX, -midY);\n this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\n this_1.ctx.restore();\n }\n else {\n this_1.ctx.fill();\n }\n }\n }\n _h.label = 6;\n case 6:\n index--;\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n backgroundImage = _a[_i];\n return [5 /*yield**/, _loop_1(backgroundImage)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderSolidBorder = function (color, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.path(parsePathForBorder(curvePoints, side));\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.renderDoubleBorder = function (color, width, side, curvePoints) {\n return __awaiter(this, void 0, void 0, function () {\n var outerPaths, innerPaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(width < 3)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.renderSolidBorder(color, side, curvePoints)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n case 2:\n outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\n this.path(outerPaths);\n this.ctx.fillStyle = asString(color);\n this.ctx.fill();\n innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\n this.path(innerPaths);\n this.ctx.fill();\n return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\n return __awaiter(this, void 0, void 0, function () {\n var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.applyEffects(paint.getEffects(2 /* BACKGROUND_BORDERS */));\n styles = paint.container.styles;\n hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\n borders = [\n { style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth },\n { style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth },\n { style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth },\n { style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth }\n ];\n backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\n if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\n this.ctx.save();\n this.path(backgroundPaintingArea);\n this.ctx.clip();\n if (!isTransparent(styles.backgroundColor)) {\n this.ctx.fillStyle = asString(styles.backgroundColor);\n this.ctx.fill();\n }\n return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\n case 1:\n _a.sent();\n this.ctx.restore();\n styles.boxShadow\n .slice(0)\n .reverse()\n .forEach(function (shadow) {\n _this.ctx.save();\n var borderBoxArea = calculateBorderBoxPath(paint.curves);\n var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\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));\n if (shadow.inset) {\n _this.path(borderBoxArea);\n _this.ctx.clip();\n _this.mask(shadowPaintingArea);\n }\n else {\n _this.mask(borderBoxArea);\n _this.ctx.clip();\n _this.path(shadowPaintingArea);\n }\n _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\n _this.ctx.shadowOffsetY = shadow.offsetY.number;\n _this.ctx.shadowColor = asString(shadow.color);\n _this.ctx.shadowBlur = shadow.blur.number;\n _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\n _this.ctx.fill();\n _this.ctx.restore();\n });\n _a.label = 2;\n case 2:\n side = 0;\n _i = 0, borders_1 = borders;\n _a.label = 3;\n case 3:\n if (!(_i < borders_1.length)) return [3 /*break*/, 13];\n border = borders_1[_i];\n if (!(border.style !== BORDER_STYLE.NONE && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11];\n if (!(border.style === BORDER_STYLE.DASHED)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, BORDER_STYLE.DASHED)];\n case 4:\n _a.sent();\n return [3 /*break*/, 11];\n case 5:\n if (!(border.style === BORDER_STYLE.DOTTED)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, BORDER_STYLE.DOTTED)];\n case 6:\n _a.sent();\n return [3 /*break*/, 11];\n case 7:\n if (!(border.style === BORDER_STYLE.DOUBLE)) return [3 /*break*/, 9];\n return [4 /*yield*/, this.renderDoubleBorder(border.color, border.width, side, paint.curves)];\n case 8:\n _a.sent();\n return [3 /*break*/, 11];\n case 9: return [4 /*yield*/, this.renderSolidBorder(border.color, side, paint.curves)];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11:\n side++;\n _a.label = 12;\n case 12:\n _i++;\n return [3 /*break*/, 3];\n case 13: return [2 /*return*/];\n }\n });\n });\n };\n CanvasRenderer.prototype.renderDashedDottedBorder = function (color, width, side, curvePoints, style) {\n return __awaiter(this, void 0, void 0, function () {\n var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2;\n return __generator(this, function (_a) {\n this.ctx.save();\n strokePaths = parsePathForBorderStroke(curvePoints, side);\n boxPaths = parsePathForBorder(curvePoints, side);\n if (style === BORDER_STYLE.DASHED) {\n this.path(boxPaths);\n this.ctx.clip();\n }\n if (isBezierCurve(boxPaths[0])) {\n startX = boxPaths[0].start.x;\n startY = boxPaths[0].start.y;\n }\n else {\n startX = boxPaths[0].x;\n startY = boxPaths[0].y;\n }\n if (isBezierCurve(boxPaths[1])) {\n endX = boxPaths[1].end.x;\n endY = boxPaths[1].end.y;\n }\n else {\n endX = boxPaths[1].x;\n endY = boxPaths[1].y;\n }\n if (side === 0 || side === 2) {\n length = Math.abs(startX - endX);\n }\n else {\n length = Math.abs(startY - endY);\n }\n this.ctx.beginPath();\n if (style === BORDER_STYLE.DOTTED) {\n this.formatPath(strokePaths);\n }\n else {\n this.formatPath(boxPaths.slice(0, 2));\n }\n dashLength = width < 3 ? width * 3 : width * 2;\n spaceLength = width < 3 ? width * 2 : width;\n if (style === BORDER_STYLE.DOTTED) {\n dashLength = width;\n spaceLength = width;\n }\n useLineDash = true;\n if (length <= dashLength * 2) {\n useLineDash = false;\n }\n else if (length <= dashLength * 2 + spaceLength) {\n multiplier = length / (2 * dashLength + spaceLength);\n dashLength *= multiplier;\n spaceLength *= multiplier;\n }\n else {\n numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\n minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\n maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;\n spaceLength =\n maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)\n ? minSpace\n : maxSpace;\n }\n if (useLineDash) {\n if (style === BORDER_STYLE.DOTTED) {\n this.ctx.setLineDash([0, dashLength + spaceLength]);\n }\n else {\n this.ctx.setLineDash([dashLength, spaceLength]);\n }\n }\n if (style === BORDER_STYLE.DOTTED) {\n this.ctx.lineCap = 'round';\n this.ctx.lineWidth = width;\n }\n else {\n this.ctx.lineWidth = width * 2 + 1.1;\n }\n this.ctx.strokeStyle = asString(color);\n this.ctx.stroke();\n this.ctx.setLineDash([]);\n // dashed round edge gap\n if (style === BORDER_STYLE.DASHED) {\n if (isBezierCurve(boxPaths[0])) {\n path1 = boxPaths[3];\n path2 = boxPaths[0];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n if (isBezierCurve(boxPaths[1])) {\n path1 = boxPaths[1];\n path2 = boxPaths[2];\n this.ctx.beginPath();\n this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\n this.ctx.stroke();\n }\n }\n this.ctx.restore();\n return [2 /*return*/];\n });\n });\n };\n CanvasRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var stack;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);\n }\n stack = parseStackingContexts(element);\n return [4 /*yield*/, this.renderStack(stack)];\n case 1:\n _a.sent();\n this.applyEffects([]);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return CanvasRenderer;\n }(Renderer));\n var isTextInputElement = function (container) {\n if (container instanceof TextareaElementContainer) {\n return true;\n }\n else if (container instanceof SelectElementContainer) {\n return true;\n }\n else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\n return true;\n }\n return false;\n };\n var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\n switch (clip) {\n case BACKGROUND_CLIP.BORDER_BOX:\n return calculateBorderBoxPath(curves);\n case BACKGROUND_CLIP.CONTENT_BOX:\n return calculateContentBoxPath(curves);\n case BACKGROUND_CLIP.PADDING_BOX:\n default:\n return calculatePaddingBoxPath(curves);\n }\n };\n var canvasTextAlign = function (textAlign) {\n switch (textAlign) {\n case TEXT_ALIGN.CENTER:\n return 'center';\n case TEXT_ALIGN.RIGHT:\n return 'right';\n case TEXT_ALIGN.LEFT:\n default:\n return 'left';\n }\n };\n\n var ForeignObjectRenderer = /** @class */ (function (_super) {\n __extends(ForeignObjectRenderer, _super);\n function ForeignObjectRenderer(context, options) {\n var _this = _super.call(this, context, options) || this;\n _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\n _this.ctx = _this.canvas.getContext('2d');\n _this.options = options;\n _this.canvas.width = Math.floor(options.width * options.scale);\n _this.canvas.height = Math.floor(options.height * options.scale);\n _this.canvas.style.width = options.width + \"px\";\n _this.canvas.style.height = options.height + \"px\";\n _this.ctx.scale(_this.options.scale, _this.options.scale);\n _this.ctx.translate(-options.x, -options.y);\n _this.context.logger.debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\n return _this;\n }\n ForeignObjectRenderer.prototype.render = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var svg, img;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element);\n return [4 /*yield*/, loadSerializedSVG(svg)];\n case 1:\n img = _a.sent();\n if (this.options.backgroundColor) {\n this.ctx.fillStyle = asString(this.options.backgroundColor);\n this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\n }\n this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\n return [2 /*return*/, this.canvas];\n }\n });\n });\n };\n return ForeignObjectRenderer;\n }(Renderer));\n var loadSerializedSVG = function (svg) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () {\n resolve(img);\n };\n img.onerror = reject;\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\n });\n };\n\n var Logger = /** @class */ (function () {\n function Logger(_a) {\n var id = _a.id, enabled = _a.enabled;\n this.id = id;\n this.enabled = enabled;\n this.start = Date.now();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\n // eslint-disable-next-line no-console\n console.debug.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.prototype.getTime = function () {\n return Date.now() - this.start;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\n // eslint-disable-next-line no-console\n console.info.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') {\n // eslint-disable-next-line no-console\n console.warn.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.enabled) {\n // eslint-disable-next-line no-console\n if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\n // eslint-disable-next-line no-console\n console.error.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\n }\n else {\n this.info.apply(this, args);\n }\n }\n };\n Logger.instances = {};\n return Logger;\n }());\n\n var Context = /** @class */ (function () {\n function Context(options, windowBounds) {\n var _a;\n this.windowBounds = windowBounds;\n this.instanceName = \"#\" + Context.instanceCount++;\n this.logger = new Logger({ id: this.instanceName, enabled: options.logging });\n this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options);\n }\n Context.instanceCount = 1;\n return Context;\n }());\n\n var html2canvas = function (element, options) {\n if (options === void 0) { options = {}; }\n return renderElement(element, options);\n };\n if (typeof window !== 'undefined') {\n CacheStorage.setContext(window);\n }\n var renderElement = function (element, opts) { return __awaiter(void 0, void 0, void 0, function () {\n var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor, renderOptions, canvas, renderer, root, renderer;\n var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\n return __generator(this, function (_u) {\n switch (_u.label) {\n case 0:\n if (!element || typeof element !== 'object') {\n return [2 /*return*/, Promise.reject('Invalid element provided as first argument')];\n }\n ownerDocument = element.ownerDocument;\n if (!ownerDocument) {\n throw new Error(\"Element is not attached to a Document\");\n }\n defaultView = ownerDocument.defaultView;\n if (!defaultView) {\n throw new Error(\"Document is not attached to a Window\");\n }\n resourceOptions = {\n allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false,\n imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15000,\n proxy: opts.proxy,\n useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false\n };\n contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions);\n windowOptions = {\n windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth,\n windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight,\n scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset,\n scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset\n };\n windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);\n context = new Context(contextOptions, windowBounds);\n foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false;\n cloneOptions = {\n allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false,\n onclone: opts.onclone,\n ignoreElements: opts.ignoreElements,\n inlineImages: foreignObjectRendering,\n copyStyles: foreignObjectRendering\n };\n context.logger.debug(\"Starting document clone with size \" + windowBounds.width + \"x\" + windowBounds.height + \" scrolled to \" + -windowBounds.left + \",\" + -windowBounds.top);\n documentCloner = new DocumentCloner(context, element, cloneOptions);\n clonedElement = documentCloner.clonedReferenceElement;\n if (!clonedElement) {\n return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\n }\n return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\n case 1:\n container = _u.sent();\n _a = isBodyElement(clonedElement) || isHTMLElement(clonedElement)\n ? parseDocumentSize(clonedElement.ownerDocument)\n : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\n backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\n renderOptions = {\n canvas: opts.canvas,\n backgroundColor: backgroundColor,\n scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1,\n x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left,\n y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top,\n width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width),\n height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height)\n };\n if (!foreignObjectRendering) return [3 /*break*/, 3];\n context.logger.debug(\"Document cloned, using foreign object rendering\");\n renderer = new ForeignObjectRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(clonedElement)];\n case 2:\n canvas = _u.sent();\n return [3 /*break*/, 5];\n case 3:\n context.logger.debug(\"Document cloned, element located at \" + left + \",\" + top + \" with size \" + width + \"x\" + height + \" using computed rendering\");\n context.logger.debug(\"Starting DOM parsing\");\n root = parseTree(context, clonedElement);\n if (backgroundColor === root.styles.backgroundColor) {\n root.styles.backgroundColor = COLORS.TRANSPARENT;\n }\n context.logger.debug(\"Starting renderer for element at \" + renderOptions.x + \",\" + renderOptions.y + \" with size \" + renderOptions.width + \"x\" + renderOptions.height);\n renderer = new CanvasRenderer(context, renderOptions);\n return [4 /*yield*/, renderer.render(root)];\n case 4:\n canvas = _u.sent();\n _u.label = 5;\n case 5:\n if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) {\n if (!DocumentCloner.destroy(container)) {\n context.logger.error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\n }\n }\n context.logger.debug(\"Finished rendering\");\n return [2 /*return*/, canvas];\n }\n });\n }); };\n var parseBackgroundColor = function (context, element, backgroundColorOverride) {\n var ownerDocument = element.ownerDocument;\n // http://www.w3.org/TR/css3-background/#special-backgrounds\n var documentBackgroundColor = ownerDocument.documentElement\n ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)\n : COLORS.TRANSPARENT;\n var bodyBackgroundColor = ownerDocument.body\n ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor)\n : COLORS.TRANSPARENT;\n var defaultBackgroundColor = typeof backgroundColorOverride === 'string'\n ? parseColor(context, backgroundColorOverride)\n : backgroundColorOverride === null\n ? COLORS.TRANSPARENT\n : 0xffffffff;\n return element === ownerDocument.documentElement\n ? isTransparent(documentBackgroundColor)\n ? isTransparent(bodyBackgroundColor)\n ? defaultBackgroundColor\n : bodyBackgroundColor\n : documentBackgroundColor\n : defaultBackgroundColor;\n };\n\n return html2canvas;\n\n})));\n//# sourceMappingURL=html2canvas.js.map\n","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(-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 _r86 = ɵ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(_r86); 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() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r88); const color_r82 = restoredCtx.$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 calculateAutoPositioning(elBounds, triggerElBounds) {\n // Defaults\n let usePositionX = 'right';\n let usePositionY = 'bottom';\n // Calculate collisions\n const { height, width } = elBounds;\n const { top, left } = triggerElBounds;\n const bottom = top + triggerElBounds.height;\n const right = left + triggerElBounds.width;\n const collisionTop = top - height < 0;\n const collisionBottom = bottom + height > (window.innerHeight || document.documentElement.clientHeight);\n const collisionLeft = left - width < 0;\n const collisionRight = right + width > (window.innerWidth || document.documentElement.clientWidth);\n const collisionAll = collisionTop && collisionBottom && collisionLeft && collisionRight;\n // Generate X & Y position values\n if (collisionBottom) {\n usePositionY = 'top';\n }\n if (collisionTop) {\n usePositionY = 'bottom';\n }\n if (collisionLeft) {\n usePositionX = 'right';\n }\n if (collisionRight) {\n usePositionX = 'left';\n }\n // Choose the largest gap available\n if (collisionAll) {\n const postions = ['left', 'right', 'top', 'bottom'];\n return postions.reduce((prev, next) => elBounds[prev] > elBounds[next] ? prev : next);\n }\n if ((collisionLeft && collisionRight)) {\n if (collisionTop) {\n return 'bottom';\n }\n if (collisionBottom) {\n return 'top';\n }\n return top > bottom ? 'top' : 'bottom';\n }\n if ((collisionTop && collisionBottom)) {\n if (collisionLeft) {\n return 'right';\n }\n if (collisionRight) {\n return 'left';\n }\n return left > right ? 'left' : 'right';\n }\n return `${usePositionY}-${usePositionX}`;\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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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 = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ColorPickerService, factory: ColorPickerService.ɵfac });\nColorPickerService.ctorParameters = () => [];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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, cpTriggerElement) {\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 this.cpTriggerElement = cpTriggerElement;\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 const dialogBounds = this.dialogElement.nativeElement.getBoundingClientRect();\n const triggerBounds = this.cpTriggerElement.nativeElement.getBoundingClientRect();\n usePosition = calculateAutoPositioning(dialogBounds, triggerBounds);\n }\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 this.cpUsePosition = usePosition;\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 = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorPickerComponent, selectors: [[\"color-picker\"]], viewQuery: function ColorPickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c2, 7);\n } if (rf & 2) {\n let _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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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, this.elRef);\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 = /*@__PURE__*/ ɵ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(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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.ɵfac = function ColorPickerModule_Factory(t) { return new (t || ColorPickerModule)(); };\nColorPickerModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ColorPickerModule });\nColorPickerModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [ColorPickerService], imports: [[CommonModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵ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(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColorPickerModule, { declarations: function () { return [ColorPickerComponent, ColorPickerDirective, TextDirective, SliderDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ColorPickerDirective]; } }); })();\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","export function getNodeIds(nodes: NodeListOf<HTMLElement>): string[] {\n const ids = [];\n nodes.forEach(node => {\n ids.push(getNodeId(node));\n });\n return ids;\n}\n\nexport function getNodeId(node: HTMLElement): string | null {\n return node?.dataset?.arId || null;\n}\n","export function findNodesById(\n ids: string[],\n doc: Document\n): NodeListOf<HTMLElement> {\n const selector = ids\n .map(id => {\n return `[data-ar-id=\"${id}\"]`;\n })\n .join(',');\n return doc.querySelectorAll(selector);\n}\n\nexport function findNodeById(id: string, doc: Document): HTMLElement {\n return findNodesById([id], doc)[0];\n}\n","import {getNodeId} from '../utils/get-node-id';\nimport {findNodeById} from '../utils/find-nodes-by-id';\n\nexport abstract class BaseMutation {\n protected nodeId: string;\n protected pageDoc: Document;\n protected previewDoc: Document;\n changes: {new: any, old: any} = {\n new: null,\n old: null,\n };\n\n protected constructor(protected nodeOrId: HTMLElement | string) {\n this.nodeId =\n typeof nodeOrId === 'string' ? nodeOrId : getNodeId(nodeOrId);\n }\n\n init(pageDoc: Document, previewDoc: Document): this {\n // mutation will need to apply its operations to\n // page document as well as preview iframe document\n this.pageDoc = pageDoc;\n this.previewDoc = previewDoc;\n this.onInit();\n return this;\n }\n\n execute(): boolean {\n return [this.pageDoc, this.previewDoc]\n .map(doc => {\n return this.executeMutation(doc);\n })\n .some(executed => executed);\n }\n\n undo(): boolean {\n return [this.pageDoc, this.previewDoc]\n .map(doc => {\n return this.undoMutation(doc);\n })\n .every(executed => executed);\n }\n\n redo() {\n return this.execute();\n }\n\n protected findEl(doc: Document, elId?: string): HTMLElement {\n elId = elId || this.nodeId;\n return findNodeById(elId, doc);\n }\n\n protected abstract executeMutation(doc: Document): boolean;\n protected abstract undoMutation(doc: Document): boolean;\n protected onInit() {\n //\n }\n}\n","export function nodeOrParentEditable(node: HTMLElement): boolean {\n if (node?.hasAttribute('contenteditable')) return true;\n return node?.parentElement?.hasAttribute('contenteditable');\n}\n","import {BaseMutation} from '../base-mutation';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\n\nexport class ReplaceNodeContent extends BaseMutation {\n changes: {new: string; old: string};\n\n constructor(\n protected el: HTMLElement,\n oldContent: string,\n newContent: string\n ) {\n super(el);\n this.changes.new = newContent;\n this.changes.old = oldContent;\n }\n\n canReplace(el: HTMLElement) {\n return (\n this.changes.old !== this.changes.new &&\n !nodeOrParentEditable(el) &&\n !(el.nodeName === 'BODY' || el.nodeName === 'HTML')\n );\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.replaceContent(doc, this.changes.new);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.replaceContent(doc, this.changes.old);\n }\n\n protected replaceContent(doc: Document, content: string): boolean {\n const el = this.findEl(doc);\n if (!this.canReplace(el)) {\n return false;\n }\n el.innerHTML = content;\n return true;\n }\n}\n","import {FontConfig} from '@common/core/services/value-lists.service';\n\nexport const BROWSER_SAFE_FONTS: FontConfig[] = [\n {family: 'Impact, Charcoal, sans-serif', category: 'sans-serif'},\n {family: 'Arial, Helvetica Neue, Helvetica, sans-serif', category: 'serif'},\n {family: '\"Comic Sans MS\", cursive, sans-serif', category: 'Handwriting'},\n {family: 'Century Gothic, sans-serif', category: 'sans-serif'},\n {family: '\"Courier New\", Courier, monospace', category: 'monospace'},\n {family: '\"Lucida Sans Unicode\", \"Lucida Grande\", sans-serif', category: 'sans-serif'},\n {family: '\"Times New Roman\", Times, serif', category: 'serif'},\n {family: '\"Lucida Console\", Monaco, monospace', category: 'monospace'},\n {family: '\"Andele Mono\", monospace, sans-serif', category: 'sans-serif'},\n {family: 'Verdana, Geneva, sans-serif', category: 'sans-serif'},\n {family: '\"Helvetica Neue\", Helvetica, Arial, sans-serif', category: 'sans-serif'},\n];\n","import {Injectable} from '@angular/core';\nimport {map} from 'rxjs/operators';\nimport {LazyLoaderService} from '@common/core/utils/lazy-loader.service';\nimport {\n FontConfig,\n ValueLists,\n} from '@common/core/services/value-lists.service';\nimport {Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GoogleFontService {\n constructor(\n private lazyLoader: LazyLoaderService,\n private valueLists: ValueLists\n ) {}\n\n getAll(): Observable<FontConfig[]> {\n return this.valueLists\n .get(['googleFonts'])\n .pipe(map(r => r.googleFonts));\n }\n\n loadIntoDom(fonts: FontConfig[], id: string) {\n const googleFonts = fonts.filter(f => f.google);\n if (googleFonts?.length) {\n const families = fonts.map(f => `${f.family}:400`).join('|');\n this.lazyLoader.loadAsset(\n `https://fonts.googleapis.com/css?family=${families}&display=swap`,\n {type: 'css', id}\n );\n }\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'fontDisplayName',\n})\nexport class FontDisplayNamePipe implements PipeTransform {\n transform(fontFamily: string): string {\n if (!fontFamily) {\n return null;\n }\n return fontFamily.split(',')[0].replace(/\"/g, '').trim();\n }\n}\n","<form class=\"filters inline-inputs-container many-inputs\" [formGroup]=\"filters\">\n <div class=\"input-container\">\n <label for=\"font-selector-search\" class=\"hidden\" trans>Search</label>\n <input type=\"text\" id=\"font-selector-search\" formControlName=\"query\" placeholder=\"Search...\" />\n </div>\n <div class=\"input-container\">\n <label for=\"font-selector-category\" class=\"hidden\" trans>Category</label>\n <select id=\"font-selector-category\" formControlName=\"category\">\n <option [ngValue]=\"null\" trans>All Categories</option>\n <option value=\"serif\" trans>Serif</option>\n <option value=\"sans-serif\" trans>Sans Serif</option>\n <option value=\"display\" trans>Display</option>\n <option value=\"handwriting\" trans>Handwriting</option>\n <option value=\"monospace\" trans>monospace</option>\n </select>\n </div>\n</form>\n\n<div class=\"font-grid\">\n <div\n class=\"font\"\n *ngFor=\"let font of fonts$ | async\"\n (click)=\"selectFamily(font.family)\"\n [class.active]=\"(selectedFamily$ | async) === font.family\"\n >\n <div class=\"grid-item\" role=\"button\" matRipple>\n <div class=\"grid-content\">\n <svg viewBox=\"0 0 100 100\">\n <text x=\"50%\" y=\"50%\" [style.fontFamily]=\"font.family\">Aa</text>\n </svg>\n </div>\n </div>\n <div class=\"label\">{{ font.family | fontDisplayName }}</div>\n </div>\n</div>\n\n<div class=\"range-actions\">\n <div class=\"range-label\">\n {{ from$ | async }} - {{ to$ | async }} {{ 'of' | trans }} {{ total$ | async | number }}\n </div>\n <button\n type=\"button\"\n [disabled]=\"!havePrev()\"\n class=\"range-button\"\n (click)=\"prevPage()\"\n mat-icon-button\n >\n <mat-icon svgIcon=\"chevron-left\"></mat-icon>\n </button>\n <button\n type=\"button\"\n [disabled]=\"!haveNext()\"\n class=\"range-button\"\n (click)=\"nextPage()\"\n mat-icon-button\n >\n <mat-icon svgIcon=\"chevron-right\"></mat-icon>\n </button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {FontConfig} from '@common/core/services/value-lists.service';\nimport {BehaviorSubject, combineLatest, Observable, Subscription} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport {filterDatatableData} from '@common/datatable/utils/filter-datatable-data';\nimport {GoogleFontService} from '@common/shared/form-controls/google-font-selector/google-font.service';\nimport {BROWSER_SAFE_FONTS} from '@common/shared/form-controls/google-font-selector/browser-safe-fonts';\n\ntype propagateFn = (value: {family: string}) => void;\n\nexport interface GoogleFontSelectorValue {\n family: string;\n}\n\n@Component({\n selector: 'google-font-selector',\n templateUrl: './google-font-selector.component.html',\n styleUrls: ['./google-font-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: GoogleFontSelectorComponent,\n multi: true,\n },\n ],\n})\nexport class GoogleFontSelectorComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n activePage$ = new BehaviorSubject<number>(0);\n chunkedFonts$ = new BehaviorSubject<FontConfig[][]>(null);\n selectedFamily$ = new BehaviorSubject<string>(null);\n\n filters = new FormGroup({\n query: new FormControl(),\n category: new FormControl(null),\n });\n\n from$ = this.activePage$.pipe(map(p => p * this.perPage + 1));\n total$ = new BehaviorSubject<number>(1052);\n to$ = this.from$.pipe(\n map(from => Math.min(from + this.perPage - 1), this.total$.value)\n );\n\n fonts$: Observable<FontConfig[]> = combineLatest(\n this.activePage$,\n this.chunkedFonts$\n ).pipe(\n map(([page, chunkedFonts]) => {\n return chunkedFonts ? chunkedFonts[page] : [];\n })\n );\n\n private allFonts: FontConfig[];\n private perPage = 20;\n private fontSub: Subscription;\n private formSub: Subscription;\n private propagateChange: propagateFn;\n\n constructor(private googleFonts: GoogleFontService) {}\n\n ngOnInit() {\n this.allFonts = [...BROWSER_SAFE_FONTS];\n this.googleFonts.getAll().subscribe(fonts => {\n this.allFonts = [...this.allFonts, ...fonts];\n this.chunkFonts(this.allFonts);\n });\n\n this.fontSub = this.fonts$.subscribe(fonts => {\n this.loadIntoDom(fonts);\n });\n\n this.formSub = this.filters.valueChanges.subscribe(val => {\n let fonts = val.query?.length\n ? filterDatatableData(this.allFonts, val.query)\n : this.allFonts;\n fonts = val.category\n ? fonts.filter(\n f =>\n f.category.toLowerCase() ===\n val.category.toLowerCase()\n )\n : fonts;\n this.activePage$.next(0);\n this.chunkFonts(fonts);\n });\n }\n\n ngOnDestroy() {\n this.formSub.unsubscribe();\n this.fontSub.unsubscribe();\n }\n\n selectFamily(family: string) {\n this.selectedFamily$.next(family);\n this.propagateChange({family});\n }\n\n haveNext(): boolean {\n return this.chunkedFonts$.value?.length > this.activePage$.value + 1;\n }\n\n havePrev(): boolean {\n return this.activePage$.value > 0;\n }\n\n nextPage() {\n this.activePage$.next(this.activePage$.value + 1);\n }\n\n prevPage() {\n this.activePage$.next(this.activePage$.value - 1);\n }\n\n registerOnChange(fn: propagateFn) {\n this.propagateChange = fn;\n }\n\n writeValue(value: {family: string}) {\n this.selectedFamily$.next(value?.family);\n }\n\n registerOnTouched(fn: any) {}\n\n private chunkFonts(fonts: FontConfig[]) {\n const chunkSize = this.perPage;\n const chunked = [];\n for (let i = 0, len = fonts.length; i < len; i += chunkSize) {\n chunked.push(fonts.slice(i, i + chunkSize));\n }\n this.chunkedFonts$.next(chunked);\n this.total$.next(fonts.length);\n }\n\n private loadIntoDom(fonts: FontConfig[]) {\n this.googleFonts.loadIntoDom(fonts, 'google-font-selector');\n }\n}\n","import {Component, Inject, OnInit, Optional} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Component({\n selector: 'font-selector-overlay',\n templateUrl: './font-selector-overlay.component.html',\n styleUrls: ['./font-selector-overlay.component.scss'],\n host: {class: 'builder-overlay'},\n})\nexport class FontSelectorOverlayComponent implements OnInit {\n formControl = new FormControl();\n\n constructor(\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) {}\n\n ngOnInit() {\n this.formControl.valueChanges.subscribe(value => {\n this.overlayRef.emitValue(value);\n });\n }\n}\n","<div class=\"builder-overlay-header\">\n <div class=\"builder-overlay-title\" trans>Select a Font</div>\n <button type=\"button\" class=\"builder-overlay-close-btn\" (click)=\"overlayRef.close()\" mat-icon-button>\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n<google-font-selector class=\"builder-overlay-content\" [formControl]=\"formControl\"></google-font-selector>\n","const icons: IconConfig[] = [];\n\nexport interface IconConfig {\n icon: string;\n name: string;\n}\n\nexport function getFontAwesomeIconList() {\n if (icons.length) {\n return icons;\n }\n\n const sheet = findSheet();\n for (const key in sheet.cssRules) {\n const rule = sheet.cssRules[key];\n if (\n rule instanceof CSSStyleRule &&\n 'selectorText' in rule &&\n rule.selectorText.endsWith('::before')\n ) {\n const name = rule.selectorText\n .replace('::before', '')\n .replace('fa-', '')\n .replace('.', '');\n icons.push({\n icon: `fa fa-${name}`,\n name,\n });\n }\n }\n\n return icons;\n}\n\nfunction findSheet(): CSSStyleSheet {\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n if (sheet.href && sheet.href.includes('font-awesome')) {\n return sheet;\n }\n }\n}\n","<div class=\"builder-overlay-header\">\n <div class=\"builder-overlay-title\" trans>Select an Icon</div>\n <button\n type=\"button\"\n class=\"builder-overlay-close-btn\"\n (click)=\"overlayRef.close()\"\n mat-icon-button\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<div class=\"builder-overlay-content\">\n <div class=\"input-container search-container\">\n <input\n type=\"search\"\n [formControl]=\"searchControl\"\n placeholder=\"Search for icons...\"\n trans-placeholder\n />\n </div>\n <div class=\"icon-container\">\n <div class=\"auto-height-grid\">\n <ng-container *ngFor=\"let config of filteredIcons\">\n <div>\n <div class=\"grid-item\">\n <div class=\"grid-content\" matRipple (click)=\"selectIcon(config.icon)\">\n <div class=\"icon-item\" [ngClass]=\"'fab ' + config.icon\"></div>\n </div>\n </div>\n <div class=\"grid-label\">\n {{ config.name }}\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n Optional,\n} from '@angular/core';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {Settings} from '@common/core/config/settings.service';\nimport {LazyLoaderService} from '@common/core/utils/lazy-loader.service';\nimport {FormControl} from '@angular/forms';\nimport {filterDatatableData} from '@common/datatable/utils/filter-datatable-data';\nimport {\n getFontAwesomeIconList,\n IconConfig,\n} from '../../utils/get-font-awesome-icon-list';\n\n@Component({\n selector: 'icon-selector-overlay',\n templateUrl: './icon-selector-overlay.component.html',\n styleUrls: ['./icon-selector-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'builder-overlay'},\n})\nexport class IconSelectorOverlayComponent implements OnInit {\n allIcons: IconConfig[] = [];\n filteredIcons: IconConfig[] = [];\n\n searchControl = new FormControl();\n\n constructor(\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef,\n private settings: Settings,\n private lazyLoader: LazyLoaderService,\n private cd: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.loadFontAwesome().then(() => {\n this.allIcons = getFontAwesomeIconList();\n this.filteredIcons = [...this.allIcons];\n this.cd.markForCheck();\n });\n this.searchControl.valueChanges.subscribe(query => {\n if (query) {\n this.filteredIcons = filterDatatableData(this.allIcons, query);\n } else {\n this.filteredIcons = this.allIcons;\n }\n });\n }\n\n selectIcon(icon: string) {\n this.overlayRef.close(icon);\n }\n\n private loadFontAwesome(): Promise<any> {\n const url = `${this.settings.getBaseUrl()}/builder/font-awesome/font-awesome.min.css`;\n return this.lazyLoader.loadAsset(url, {type: 'css'});\n }\n}\n","export enum BuilderBreakpoint {\n Phone = 'phone',\n Tablet = 'tablet',\n Laptop = 'laptop',\n Desktop = 'desktop',\n}\n","export enum BuilderSidebarPanel {\n Elements = 'elements',\n Inspector = 'inspector',\n Pages = 'pages',\n Themes = 'themes',\n Layout = 'layout',\n}\n","import {ArchitectElement} from '../../elements/architect-element';\n\nexport enum ContextType {\n Selected = 'selected',\n Hover = 'hover',\n}\n\nexport interface HoverContext {\n el: ArchitectElement;\n node: HTMLElement;\n}\n\nexport interface SelectedContext extends HoverContext {\n path: {node: HTMLElement; name: string}[];\n}\n","import {BuilderPage} from '../../shared/builder-types';\nimport {randomString} from '@common/core/utils/random-string';\n\nexport function addIdToPages(pages: BuilderPage[]): BuilderPage[] {\n return pages.map(page => {\n page.id = page.id || randomString(10);\n return page;\n });\n}\n\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject} from 'rxjs';\nimport {DragVisualHelperComponent} from './live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component';\nimport {BuilderBreakpoint} from './sidebar/device-switcher/builder-breakpoint';\nimport {ArchitectElement} from './elements/architect-element';\nimport {BuilderSidebarPanel} from './sidebar/builder-sidebar-panel';\nimport {BuilderPage, BuilderProject} from '../shared/builder-types';\nimport {delay, filter, take} from 'rxjs/operators';\nimport {\n ContextType,\n HoverContext,\n SelectedContext,\n} from './live-preview/context-box/builder-context';\nimport {createDocFromHtml} from './utils/create-doc-from-html';\nimport {addIdToPages} from './utils/add-id-to-pages';\nimport {CssKey} from './mutations/style/default-css-values';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BuilderStateService {\n breakpoint: BuilderBreakpoint = BuilderBreakpoint.Desktop;\n\n // active project\n pages$ = new BehaviorSubject<BuilderPage[]>([]);\n activePage$ = new BehaviorSubject<BuilderPage>(null);\n project$ = new BehaviorSubject<BuilderProject>(null);\n\n // inspector\n inspectorPanel$ = new BehaviorSubject<BuilderSidebarPanel>(\n BuilderSidebarPanel.Elements\n );\n inspectorEl: HTMLElement;\n\n // live preview\n iframe: HTMLIFrameElement;\n previewContainer: HTMLElement;\n previewDoc: Document;\n previewDocReloaded$ = new ReplaySubject(1);\n\n hover$ = new BehaviorSubject<HoverContext>(null);\n get hover(): HoverContext {\n return this.hover$.value;\n }\n selected$ = new BehaviorSubject<SelectedContext>(null);\n get selected(): SelectedContext {\n return this.selected$.value;\n }\n\n // dragging el from inspector to builder and dragging el within builder\n dragging$ = new BehaviorSubject<boolean>(false);\n dragData: {el: ArchitectElement; node: HTMLElement};\n dragHelper: DragVisualHelperComponent;\n dropHelper: HTMLElement;\n dragOverlay: HTMLElement;\n\n // resizing node via bottom right corner\n resizing$ = new BehaviorSubject<boolean>(false);\n\n // inline text editor\n editableNode: HTMLElement;\n\n // main loader\n loading$ = new BehaviorSubject(true);\n loadedAtLeastOnce$ = new ReplaySubject(1);\n\n constructor() {\n // wait 500ms until loader animation is complete\n this.loading$\n .pipe(\n filter(loading => !loading),\n take(1),\n delay(500)\n )\n .subscribe(() => this.loadedAtLeastOnce$.next(true));\n }\n\n setActivePage(pageId: string) {\n const page = this.pages$.value.find(curr => curr.id === pageId);\n if (page) {\n if (!page.doc) {\n page.doc = createDocFromHtml(page.html);\n }\n this.activePage$.next(page);\n }\n }\n\n getContext(type: ContextType): SelectedContext | HoverContext {\n return type === ContextType.Hover ? this.hover : this.selected;\n }\n\n getSelectedStyle(prop: CssKey): string {\n if (!this.selected?.node) return null;\n return this.iframe.contentWindow.getComputedStyle(this.selected.node)[\n prop\n ];\n }\n\n setProject(project: BuilderProject) {\n this.project$.next(project);\n this.pages$.next(addIdToPages(project.pages));\n this.setActivePage(this.pages$.value[0].id);\n }\n}\n","import {randomString} from '@common/core/utils/random-string';\n\nexport function createDocFromHtml(html: string): Document {\n const dom = new DOMParser().parseFromString(html?.trim(), 'text/html');\n const tw = dom.createTreeWalker(\n dom.documentElement,\n NodeFilter.SHOW_ELEMENT\n );\n let next;\n while ((next = tw.nextNode())) {\n next.dataset.arId = randomString(10);\n }\n return dom;\n}\n","import {Injectable} from '@angular/core';\nimport {BaseMutation} from './base-mutation';\nimport {Subject} from 'rxjs';\nimport {BuilderStateService} from '../builder-state.service';\n\nconst DEBOUNCE_TIME = 800;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MutationsService {\n private stack: BaseMutation[] = [];\n private pointer = -1;\n canUndo: boolean;\n canRedo: boolean;\n executed$ = new Subject<BaseMutation>();\n\n private debounceFirst: BaseMutation;\n private debounceTimeout: any;\n\n constructor(private state: BuilderStateService) {\n this.state.activePage$.subscribe(() => {\n this.stack = [];\n });\n }\n\n execute(\n mutation: BaseMutation,\n options?: {skipUndoStack?: boolean}\n ): boolean {\n const pageDom = this.state.activePage$.value.doc;\n const executed = mutation\n .init(pageDom, this.state.previewDoc)\n .execute();\n\n if (executed) {\n this.executed$.next(mutation);\n }\n\n if (!options?.skipUndoStack) {\n if (!this.debounceFirst) {\n this.debounceFirst = mutation;\n }\n\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.debounceTimeout = setTimeout(() => {\n mutation.changes.old = this.debounceFirst.changes.old;\n this.debounceFirst = null;\n this.pushOntoStack(mutation);\n }, DEBOUNCE_TIME);\n }\n\n return executed;\n }\n\n pushOntoStack(mutation: BaseMutation) {\n // remove all stack items after new pointer (if pushing after undoing)\n if (this.canRedo) {\n this.stack = this.stack.slice(0, this.pointer + 1);\n }\n this.stack.push(mutation);\n this.setPointer(this.pointer + 1);\n }\n\n undo() {\n const mutation = this.stack[this.pointer];\n if (mutation) {\n mutation.undo();\n this.setPointer(this.pointer - 1);\n this.executed$.next(mutation);\n }\n }\n\n redo() {\n const mutation = this.stack[this.pointer + 1];\n if (mutation) {\n mutation.redo();\n this.setPointer(this.pointer + 1);\n this.executed$.next(mutation);\n }\n }\n\n private setPointer(newPointer: number) {\n this.pointer = newPointer;\n this.canUndo = this.pointer !== -1;\n this.canRedo = this.pointer < this.stack.length - 1;\n }\n}\n","<div class=\"modal-header\">\n <h2 class=\"modal-title\" mat-dialog-title trans>What do you want to link to?</h2>\n <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<form (ngSubmit)=\"submit()\" [formGroup]=\"form\" ngNativeValidate>\n <div class=\"mat-dialog-content\">\n <div class=\"link-type-selector\">\n <mat-radio-group [value]=\"selectedType$ | async\" (change)=\"selectedType$.next($event.value)\">\n <mat-radio-button class=\"link-radio\" *ngFor=\"let linkType of linkTypes\" [value]=\"linkType\">\n {{ linkType }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div class=\"link-type-form\" [ngSwitch]=\"selectedType$ | async\">\n <ng-container *ngSwitchCase=\"'none'\">\n <no-results-message svgIcon=\"link-off\">\n <span primary-text trans>No Link</span>\n <span secondary-text trans>Choose from the list of options to add a link.</span>\n </no-results-message>\n </ng-container>\n <ng-container *ngSwitchCase=\"'url'\">\n <div class=\"input-container\">\n <label for=\"link-editor-url\" trans>What's the web address (URL)?</label>\n <input\n type=\"url\"\n id=\"link-editor-url\"\n formControlName=\"href\"\n placeholder=\"Paste it here...\"\n trans-placeholder\n required\n />\n </div>\n <ng-container *ngTemplateOutlet=\"linkTargetOptions\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'page'\">\n <div class=\"input-container\">\n <label for=\"link-editor-page\" trans>Which page?</label>\n <select id=\"link-editor-page\" formControlName=\"href\">\n <option [value]=\"page.name\" *ngFor=\"let page of state.pages$ | async\">\n {{ page.name }}\n </option>\n </select>\n </div>\n <ng-container *ngTemplateOutlet=\"linkTargetOptions\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'anchor'\">\n <div class=\"anchor-description\">\n <h3 trans>Link to an anchor</h3>\n <p trans>Visitors that click this element will go directly to the anchor on the page.</p>\n </div>\n <div class=\"input-container\">\n <label for=\"link-editor-anchor\" trans>Which anchor on this page?</label>\n <select id=\"link-editor-anchor\" formControlName=\"href\">\n <option [value]=\"anchor\" *ngFor=\"let anchor of anchors$ | async\">{{ anchor }}</option>\n </select>\n </div>\n </ng-container>\n <div class=\"many-inputs\" *ngSwitchCase=\"'download'\">\n <div class=\"input-container\">\n <label for=\"link-editor-download-name\" trans>Download file name</label>\n <input type=\"text\" id=\"link-editor-download-name\" formControlName=\"download\" required />\n </div>\n <div class=\"input-container\">\n <label for=\"link-editor-download\" trans>Download url</label>\n <input\n type=\"url\"\n name=\"link-editor-download\"\n id=\"link-editor-download\"\n formControlName=\"href\"\n required\n />\n </div>\n </div>\n <div class=\"many-inputs\" *ngSwitchCase=\"'email'\">\n <div class=\"input-container\">\n <label for=\"link-editor-email\" trans>What's the email address?</label>\n <input\n type=\"email\"\n id=\"link-editor-email\"\n placeholder=\"Add it here...\"\n trans-placeholder\n formControlName=\"href\"\n required\n />\n </div>\n <div class=\"input-container\">\n <label for=\"link-editor-subject\" trans>What's the email subject?</label>\n <input\n type=\"text\"\n id=\"link-editor-subject\"\n placeholder=\"Add a subject here..\"\n trans-placeholder\n formControlName=\"subject\"\n required\n />\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #linkTargetOptions>\n <div class=\"more-options\">\n <label for=\"link-editor-target\" trans>How should it open?</label>\n <mat-radio-group id=\"link-editor-target\" formControlName=\"target\">\n <mat-radio-button class=\"link-radio\" value=\"_blank\" trans>New Window</mat-radio-button>\n <mat-radio-button class=\"link-radio\" value=\"\" trans>Same Window</mat-radio-button>\n </mat-radio-group>\n </div>\n </ng-template>\n\n <mat-dialog-actions>\n <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Done</button>\n </mat-dialog-actions>\n</form>\n","import {Component, Inject, OnInit, Optional} from '@angular/core';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BehaviorSubject} from 'rxjs';\nimport {FormBuilder} from '@angular/forms';\nimport {OVERLAY_PANEL_DATA} from '@common/core/ui/overlay-panel/overlay-panel-data';\nimport {skip} from 'rxjs/operators';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {removeNullFromObject} from '@common/core/utils/remove-null-from-object';\n\nconst LINK_TYPES = ['none', 'url', 'page', 'anchor', 'download', 'email'];\n\nexport interface LinkEditorValue {\n href: string;\n download?: string;\n target?: string;\n}\n\n@Component({\n selector: 'link-editor',\n templateUrl: './link-editor.component.html',\n styleUrls: ['./link-editor.component.scss'],\n})\nexport class LinkEditorComponent implements OnInit {\n linkTypes = LINK_TYPES;\n anchors$ = new BehaviorSubject<string[]>([]);\n selectedType$ = new BehaviorSubject<string>('url');\n form = this.fb.group({\n href: '',\n download: '',\n target: '',\n subject: '',\n });\n\n constructor(\n public state: BuilderStateService,\n private fb: FormBuilder,\n @Inject(OVERLAY_PANEL_DATA)\n @Optional()\n public data: {link?: HTMLLinkElement},\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) {}\n\n ngOnInit() {\n this.gatherActivePageAnchors();\n this.hydrateForm();\n this.bindToSelectedTypeChange();\n }\n\n submit() {\n const value = {...this.form.value};\n if (this.selectedType$.value === 'email') {\n value.href = `mailto:${value.href}?subject=${value.subject}`;\n } else if (this.selectedType$.value === 'page') {\n value.href += '.html';\n } else if (this.selectedType$.value === 'anchor') {\n value.href = `#${value.href}`;\n }\n delete value.subject;\n this.close(removeNullFromObject(value));\n }\n\n close(value?: LinkEditorValue) {\n this.overlayRef.close(value);\n }\n\n private gatherActivePageAnchors() {\n this.anchors$.next(\n Array.from(this.state.previewDoc.querySelectorAll('*[id]')).map(\n (el: HTMLElement) => el.id\n )\n );\n }\n\n private bindToSelectedTypeChange() {\n this.selectedType$.pipe(skip(1)).subscribe(() => {\n let href = '';\n if (this.selectedType$.value === 'page') {\n href = this.state.pages$.value[0].name;\n } else if (this.selectedType$.value === 'anchor') {\n href = this.anchors$.value[0];\n }\n this.form.reset({\n href,\n target: '',\n download: '',\n });\n });\n }\n\n private hydrateForm() {\n if (!this.data.link) return;\n let href = this.data.link.getAttribute('href') ?? '';\n\n if (this.data.link.getAttribute('download')) {\n this.selectedType$.next('download');\n const fileName = this.data.link.getAttribute('download');\n this.form.patchValue({href, download: fileName});\n } else if (href.startsWith('mailto:')) {\n this.selectedType$.next('email');\n href = href.split('?subject')[0].replace('mailto:', '');\n this.form.patchValue({href});\n } else if (href.startsWith('#')) {\n this.selectedType$.next('anchor');\n this.form.patchValue({href: href.replace('#', '')});\n } else if (href.endsWith('.html')) {\n this.selectedType$.next('page');\n this.form.patchValue({href: href.replace('.html', '')});\n } else {\n this.selectedType$.next('url');\n this.form.patchValue({href});\n }\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';\nimport {BuilderStateService} from '../../builder-state.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 private state: BuilderStateService\n ) {}\n\n open(\n origin: HTMLElement,\n link?: HTMLLinkElement\n ): OverlayPanelRef<LinkEditorComponent> {\n // on mobile sidebar is overlaid, so no offset is needed\n const offsetX =\n origin.ownerDocument !== this.state.previewDoc ||\n this.breakpoints.isMobile$.value\n ? 0\n : 380;\n const position = [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 25,\n offsetX,\n }, // bottom\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 25,\n offsetX,\n }, // bottom\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 25,\n offsetX,\n }, // bottom\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -25,\n offsetX,\n }, // top\n ] as ConnectedPosition[];\n\n return (this.overlayRef = this.overlayPanel.open(LinkEditorComponent, {\n position,\n panelClass: 'be-modal',\n data: {link},\n origin: new ElementRef(origin),\n }));\n }\n\n close() {\n this.overlayRef?.close();\n }\n}\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';\nimport {BuilderStateService} from '../builder-state.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BuilderOverlayService {\n overlayRef: OverlayPanelRef<any>;\n\n constructor(\n private overlayPanel: OverlayPanel,\n private state: BuilderStateService,\n ) {}\n\n open<T>(\n component: ComponentType<T>,\n data?: object,\n originNode?: HTMLElement\n ): OverlayPanelRef<T> {\n this.close();\n\n const origin = originNode\n ? new ElementRef(originNode)\n : new ElementRef(this.state.inspectorEl);\n\n const positionStrategy = this.overlayPanel.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 5,\n },\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: 5,\n },\n ]);\n\n this.overlayRef = this.overlayPanel.open(component, {\n origin,\n positionStrategy,\n hasBackdrop: true,\n data,\n });\n\n return this.overlayRef;\n }\n\n close() {\n if (!this.overlayRef) return;\n this.overlayRef.close();\n }\n}\n","<ng-container *ngIf=\"currentState | async as currentState\">\n <div class=\"toolbar-row first-row\">\n <div class=\"controls-group\">\n <div class=\"input-container font-family toolbar-btn\" [matTooltip]=\"'Font family'\">\n <div class=\"fake-input\" (click)=\"openFontPicker()\">\n {{ currentState.fontName | fontDisplayName }}\n </div>\n <mat-icon svgIcon=\"keyboard-arrow-down\"></mat-icon>\n </div>\n </div>\n\n <div class=\"controls-group\">\n <div class=\"input-container font-size toolbar-btn\" [matTooltip]=\"'Font size'\">\n <input\n type=\"number\"\n min=\"1\"\n max=\"99\"\n [value]=\"currentState.fontSize\"\n (change)=\"execCommand('fontSize', $event.target.value)\"\n id=\"inline-font-size\"\n />\n </div>\n </div>\n\n <div class=\"controls-group no-border-right\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n [matTooltip]=\"'Bold' | trans\"\n (click)=\"execCommand('bold')\"\n [class.active]=\"currentState.bold\"\n >\n <mat-icon svgIcon=\"format-bold\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n [matTooltip]=\"'Italic' | trans\"\n (click)=\"execCommand('italic')\"\n [class.active]=\"currentState.italic\"\n >\n <mat-icon svgIcon=\"format-italic\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n [matTooltip]=\"'Underline' | trans\"\n (click)=\"execCommand('underline')\"\n [class.active]=\"currentState.underline\"\n >\n <mat-icon svgIcon=\"format-underlined\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n [matTooltip]=\"'Strikethrough' | trans\"\n (click)=\"execCommand('strikethrough')\"\n [class.active]=\"currentState.strikethrough\"\n >\n <mat-icon svgIcon=\"format-strikethrough\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n #foreColorBtn\n (click)=\"openColorPicker('foreColor', foreColorBtn)\"\n [matTooltip]=\"'Color' | trans\"\n [matTooltipShowDelay]=\"300\"\n >\n <mat-icon svgIcon=\"format-color-text\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n #bgColorBtn\n (click)=\"openColorPicker('hiliteColor', bgColorBtn)\"\n [matTooltip]=\"'Highlight' | trans\"\n [matTooltipShowDelay]=\"300\"\n >\n <mat-icon svgIcon=\"format-color-fill\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"toolbar-row\">\n <div class=\"controls-group\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"openLinkEditor()\"\n [class.active]=\"currentState.link\"\n [matTooltip]=\"'Add Link' | trans\"\n [disabled]=\"!shouldEnableLinkBtn()\"\n >\n <mat-icon svgIcon=\"link\"></mat-icon>\n </button>\n <button\n mat-icon-button\n #iconBtn\n class=\"toolbar-btn\"\n [matTooltip]=\"'Add Icon' | trans\"\n (click)=\"openIconPicker()\"\n >\n <mat-icon svgIcon=\"insert-emoticon\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group text-align\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('JustifyLeft')\"\n [class.active]=\"currentState.textAlign === 'left'\"\n [matTooltip]=\"'Align left' | trans\"\n >\n <mat-icon svgIcon=\"format-align-left\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('justifyCenter')\"\n [class.active]=\"currentState.textAlign === 'center'\"\n [matTooltip]=\"'Align center' | trans\"\n >\n <mat-icon svgIcon=\"format-align-center\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('justifyRight')\"\n [class.active]=\"currentState.textAlign === 'right'\"\n [matTooltip]=\"'Align right' | trans\"\n >\n <mat-icon svgIcon=\"format-align-right\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('Outdent')\"\n [matTooltip]=\"'Decrease Indent' | trans\"\n >\n <mat-icon svgIcon=\"format-indent-decrease\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('Indent')\"\n [matTooltip]=\"'Increase Indent' | trans\"\n >\n <mat-icon svgIcon=\"format-indent-increase\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('insertUnorderedList')\"\n [matTooltip]=\"'Bulleted list' | trans\"\n [matTooltipShowDelay]=\"300\"\n >\n <mat-icon svgIcon=\"format-list-bulleted\"></mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('insertOrderedList')\"\n [matTooltip]=\"'Numbered list' | trans\"\n [matTooltipShowDelay]=\"300\"\n >\n <mat-icon svgIcon=\"format-list-numbered\"></mat-icon>\n </button>\n </div>\n\n <div class=\"controls-group no-border-right\">\n <button\n mat-icon-button\n class=\"toolbar-btn\"\n (click)=\"execCommand('removeFormat')\"\n [matTooltip]=\"'Remove format' | trans\"\n >\n <mat-icon svgIcon=\"format-clear\"></mat-icon>\n </button>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BehaviorSubject, fromEvent, Subscription} from 'rxjs';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ReplaceNodeContent} from '../../mutations/dom/replace-node-content';\nimport {LinkEditor} from '../link-editor/link-editor.service';\nimport {LinkEditorValue} from '../link-editor/link-editor.component';\nimport {GoogleFontSelectorValue} from '@common/shared/form-controls/google-font-selector/google-font-selector.component';\nimport {debounceTime, startWith} from 'rxjs/operators';\nimport {MatButton} from '@angular/material/button';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {FontSelectorOverlayComponent} from '../font-selector-overlay/font-selector-overlay.component';\nimport {IconSelectorOverlayComponent} from '../icon-selector-overlay/icon-selector-overlay.component';\nimport {BuilderOverlayService} from '../builder-overlay.service';\n\ninterface CurrentState {\n fontSize?: number;\n fontName?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n link?: boolean;\n textAlign?: string;\n color?: string;\n}\n\n@Component({\n selector: 'inline-text-editor',\n templateUrl: './inline-text-editor.component.html',\n styleUrls: ['./inline-text-editor.component.scss'],\n})\nexport class InlineTextEditorComponent implements OnInit, OnDestroy {\n @ViewChild('iconBtn', {read: ElementRef}) iconBtn: ElementRef<HTMLElement>;\n currentState = new BehaviorSubject<CurrentState>({});\n\n private lastCommand: {\n name: string;\n value: string | LinkEditorValue;\n };\n\n private oldContent: string;\n private observer: MutationObserver;\n private pickerSub: Subscription;\n private selectionSub: Subscription;\n\n constructor(\n private mutations: MutationsService,\n private state: BuilderStateService,\n private linkEditor: LinkEditor,\n private el: ElementRef<HTMLElement>,\n private panel: BuilderOverlayService,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) {}\n\n private selection(): Selection {\n return this.state.previewDoc.getSelection();\n }\n\n ngOnInit() {\n this.selectionSub = fromEvent(this.state.previewDoc, 'selectionchange')\n // won't fire without \"startWith\" until cursor is moved\n .pipe(debounceTime(500), startWith(null))\n .subscribe(() => {\n const parent = this.selection().anchorNode\n .parentNode as HTMLElement;\n const style = window.getComputedStyle(parent);\n this.currentState.next({\n fontSize: parseInt(style.fontSize),\n fontName: style.fontFamily,\n bold: parseInt(style.fontWeight) >= 500,\n underline: style.textDecoration.includes('underline'),\n color: style.color,\n strikethrough:\n style.textDecoration.includes('line-through'),\n italic: style.fontStyle === 'italic',\n textAlign: style.textAlign,\n });\n });\n\n const config = {attributes: true, childList: true, subtree: true};\n\n this.observer = new MutationObserver(mutations => {\n mutations.forEach(m => {\n const node = (m.addedNodes[0] || m.target) as HTMLElement;\n\n if (\n (m.addedNodes[0]?.nodeName === 'FONT' ||\n m.attributeName === 'size') &&\n node.getAttribute('size')\n ) {\n node.removeAttribute('size');\n node.style.fontSize = this.lastCommand.value + 'px';\n } else if (m.addedNodes[0]?.nodeName === 'A') {\n const v = this.lastCommand.value as LinkEditorValue;\n Object.entries(v).forEach(([prop, value]) => {\n node.setAttribute(prop, value);\n });\n }\n });\n });\n\n this.observer.observe(this.state.editableNode, config);\n\n this.oldContent = this.state.editableNode.innerHTML;\n }\n\n ngOnDestroy() {\n this.pickerSub?.unsubscribe();\n this.selectionSub?.unsubscribe();\n this.makeNodesNotEditable();\n this.observer.disconnect();\n this.mutations.execute(\n new ReplaceNodeContent(\n this.state.editableNode,\n this.oldContent,\n this.state.editableNode.innerHTML\n )\n );\n this.state.editableNode = null;\n }\n\n execCommand(command: string, value?: string | LinkEditorValue) {\n // these will operate on the whole \"contenteditable\" element\n if (\n !command.startsWith('justify') &&\n !command.endsWith('List') &&\n !command.endsWith('dent') &&\n command !== 'insertHtml'\n ) {\n this.maybeExpandSelection();\n }\n this.lastCommand = {name: command, value};\n if (command === 'createLink') {\n value = (value as LinkEditorValue).href;\n if (!value) {\n command = 'unlink';\n }\n }\n this.state.previewDoc.execCommand(command, false, value as string);\n }\n\n private makeNodesNotEditable() {\n const nodes =\n this.state.previewDoc.querySelectorAll('[contenteditable]');\n nodes.forEach((node: HTMLElement) => {\n node.removeAttribute('contenteditable');\n node.blur();\n });\n }\n\n shouldEnableLinkBtn() {\n // prevent adding links <a> to button elements\n const node = this.state.selected.node;\n return node && node.nodeName.toLowerCase() !== 'button';\n }\n\n openIconPicker() {\n this.panel\n .open(IconSelectorOverlayComponent, null, this.iconBtn.nativeElement)\n .afterClosed()\n .subscribe(icon => {\n if (icon) {\n this.insertIcon(icon);\n }\n });\n }\n\n openLinkEditor() {\n this.linkEditor\n .open(this.el.nativeElement)\n .afterClosed()\n .subscribe((value: LinkEditorValue) => {\n if (value) {\n this.execCommand('createLink', value);\n }\n });\n }\n\n openFontPicker() {\n const panelRef = this.panel.open(FontSelectorOverlayComponent, this.el);\n panelRef.valueChanged().subscribe((value: GoogleFontSelectorValue) => {\n panelRef.close();\n this.execCommand('fontName', value.family);\n });\n }\n\n private insertIcon(icon: string) {\n this.execCommand('insertHtml', '<span class=\"' + icon + '\"></span>');\n }\n\n openColorPicker(command: string, origin: MatButton) {\n this.pickerSub = this.panel\n .open(\n ColorpickerPanelComponent,\n {color: this.currentState.value.color},\n origin._elementRef.nativeElement,\n )\n .valueChanged()\n .subscribe(color => {\n this.execCommand(command, color);\n });\n }\n\n private maybeExpandSelection() {\n // if nothing is highlighted currently, bail\n const selection = this.selection();\n if (!selection.isCollapsed) return;\n\n // if caret is at the start, select all text content\n if (selection.anchorOffset === 0) {\n selection.getRangeAt(0).selectNode(selection.anchorNode);\n } else {\n // expand selection to word under caret\n selection.modify('move', 'backward', 'word');\n selection.modify('extend', 'forward', 'word');\n }\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';\nimport {BuilderStateService} from '../../builder-state.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InlineTextEditor {\n public overlayRef: OverlayPanelRef<InlineTextEditorComponent>;\n\n constructor(\n private overlayPanel: OverlayPanel,\n private state: BuilderStateService\n ) {}\n\n open(node: HTMLElement) {\n if (this.state.editableNode === node) {\n return;\n }\n this.state.editableNode = node;\n this.close();\n this.overlayRef = this.overlayPanel.open(InlineTextEditorComponent, {\n origin: new ElementRef(node),\n hasBackdrop: false,\n position: [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetX: 380,\n offsetY: -10,\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetX: 380,\n offsetY: 10,\n },\n ],\n });\n\n node.setAttribute('contenteditable', 'true');\n node.focus();\n }\n\n close() {\n this.overlayRef?.close();\n this.overlayRef = null;\n }\n}\n","import {Injector, ProviderToken} from '@angular/core';\nimport {InlineTextEditor} from '../overlays/inline-text-editor/inline-text-editor.service';\nimport {BuilderSidebarPanel} from '../sidebar/builder-sidebar-panel';\n\nexport enum EditableProp {\n Padding = 'padding',\n Margin = 'margin',\n Border = 'border',\n Text = 'text',\n Attributes = 'attributes',\n Shadow = 'shadow',\n Background = 'background',\n}\n\nexport interface ArchitectElControlConfig {\n label: string;\n type: ElControlType;\n defaultValue: string | ((node: HTMLElement) => string);\n inputType?: 'text' | 'number';\n options?: {key: string; value: string}[];\n onChange?: (node: HTMLElement, value: string) => void;\n}\n\nexport class ArchitectElControl implements Partial<ArchitectElControlConfig> {\n label: string;\n\n protected get<T>(token: ProviderToken<T>): T {\n return this.injector.get(token);\n }\n\n constructor(\n protected injector: Injector,\n config: ArchitectElControlConfig\n ) {\n Object.entries(config).forEach(([key, value]) => {\n this[key] = value;\n });\n }\n}\n\nexport enum ElControlType {\n Select = 'select',\n Input = 'input',\n}\n\nexport abstract class ArchitectElement {\n abstract name: string;\n icon?: string;\n category?: string;\n html?: string;\n css?: string;\n hiddenClasses?: string[] = [];\n editActionName?: string;\n specificity = 0;\n\n canEdit: EditableProp[] = [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Border,\n EditableProp.Attributes,\n EditableProp.Shadow,\n EditableProp.Background,\n ];\n defaultInspectorPanel = BuilderSidebarPanel.Inspector;\n canDrag = true;\n controls: any[] = [];\n resizable = true;\n contextMenu = true;\n contentCategories = ['flow'];\n allowedContent: string[] = ['flow'];\n allowedEls: typeof ArchitectElement[] = [];\n\n abstract matcher(node: HTMLElement): boolean | HTMLElement;\n editAction(node: HTMLElement) {}\n\n protected get<T>(token: ProviderToken<T>): T {\n return this.injector.get(token);\n }\n\n constructor(protected injector: Injector) {}\n}\n\nexport abstract class ArchitectTextEl extends ArchitectElement {\n editActionName = 'Edit Text';\n canEdit: EditableProp[] = [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Border,\n EditableProp.Attributes,\n EditableProp.Shadow,\n EditableProp.Background,\n EditableProp.Text,\n ];\n editAction(node: HTMLElement) {\n this.get(InlineTextEditor).open(node);\n }\n\n constructor(protected injector: Injector) {\n super(injector);\n }\n}\n","import {BaseMutation} from '../base-mutation';\n\nexport type NodeAttributes = Record<string, string>;\n\nexport class ModifyAttributes extends BaseMutation {\n static historyName = 'Changed Attributes';\n changes: {new: NodeAttributes; old: NodeAttributes};\n constructor(protected el: HTMLElement, newProps: NodeAttributes) {\n super(el);\n this.changes.new = newProps;\n }\n\n protected onInit() {\n const el = this.findEl(this.pageDoc);\n this.changes.old = {};\n Object.keys(this.changes.new).forEach(prop => {\n this.changes.old[prop] = el.getAttribute(prop);\n });\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.setLinkAttributes(doc, this.changes.new);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.setLinkAttributes(doc, this.changes.old);\n }\n\n protected setLinkAttributes(doc: Document, props: NodeAttributes) {\n const el = this.findEl(doc);\n return Object.entries(props)\n .map(([prop, value]) => {\n if (value !== el.getAttribute(prop)) {\n el.setAttribute(prop, value);\n return true;\n }\n })\n .some(changed => changed);\n }\n}\n","export function fragmentFromString(html: string) {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content;\n}\n\nexport function nodeFromString(html: string): HTMLElement {\n return fragmentFromString(html).firstChild as HTMLElement;\n}\n","import {BaseMutation} from '../base-mutation';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\nimport {fragmentFromString} from '../../utils/fragment-from-string';\n\nexport class RenameNode extends BaseMutation {\n changes: {new: string; old: string};\n\n constructor(\n protected el: HTMLElement,\n newName: string,\n ) {\n super(el);\n this.changes.new = newName.toUpperCase();\n }\n\n canChangeName(el: HTMLElement) {\n return (\n this.changes.new !== this.changes.old &&\n !nodeOrParentEditable(el) &&\n !(el.nodeName === 'BODY' || el.nodeName === 'HTML')\n );\n }\n\n protected onInit() {\n this.changes.old = this.el.nodeName;\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.changeNodeName(doc, this.changes.new, this.changes.old);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.changeNodeName(doc, this.changes.old, this.changes.new);\n }\n\n protected changeNodeName(doc: Document, newName: string, oldName: string): boolean {\n const el = this.findEl(doc);\n if (!this.canChangeName(el)) {\n return false;\n }\n let currentHtml = el.outerHTML;\n currentHtml = currentHtml.replace(\n RegExp('(^<' + oldName + ')|(' + oldName + '>$)', 'gi'),\n x => x.toUpperCase().replace(oldName, newName)\n );\n const fragment = fragmentFromString(currentHtml);\n el.replaceWith(fragment);\n return true;\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\nimport {ContextType} from './builder-context';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContextBoxes {\n private previewRect: ClientRect;\n hoverBox: HTMLElement;\n selectedBox: HTMLElement;\n\n repositionBox(name: ContextType, node: HTMLElement) {\n if (\n !node ||\n node.nodeType !== Node.ELEMENT_NODE ||\n this.nodeIsHtmlOrBody(node) ||\n nodeOrParentEditable(node)\n ) {\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 hideBox(name: ContextType) {\n const box = this.getBox(name);\n box?.classList.add('hidden');\n }\n\n hideBoxes() {\n this.hideBox(ContextType.Selected);\n this.hideBox(ContextType.Hover);\n }\n\n showBox(name: ContextType) {\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: ContextType): HTMLElement {\n return name === ContextType.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 {BaseMutation} from '../base-mutation';\n\nexport class ReplaceClass extends BaseMutation {\n static historyName = 'Replaced class';\n changes: {new: string; old: string};\n constructor(\n protected el: HTMLElement,\n newClassName: string,\n oldClassName: string\n ) {\n super(el);\n this.changes.new = newClassName;\n this.changes.old = oldClassName;\n }\n\n protected onInit() {\n //\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.replaceClass(doc, this.changes.new, this.changes.old);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.replaceClass(doc, this.changes.old, this.changes.new);\n }\n\n protected replaceClass(doc: Document, newClass: string, oldClass: string) {\n const el = this.findEl(doc);\n if (!el.classList.contains(newClass)) {\n el.classList.remove(oldClass);\n el.classList.add(newClass);\n return true;\n }\n }\n}\n","import {getNodeId} from './get-node-id';\n\nexport function getNodeIndex(child: HTMLElement): number {\n const children = child?.parentElement?.children;\n const childId = getNodeId(child);\n\n if (children) {\n for (let i = 0; i <= children.length; i++) {\n if (childId === getNodeId(children.item(i) as HTMLElement)) {\n return i;\n }\n }\n }\n\n return -1;\n}\n","import {BaseMutation} from '../base-mutation';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\nimport {getNodeIndex} from '../../utils/get-node-index';\n\nexport class DeleteNode extends BaseMutation {\n protected parentId: string;\n protected nodeIndex: number;\n protected deletedEl: HTMLElement;\n\n constructor(protected el: HTMLElement) {\n super(el);\n }\n\n static canDelete(el: HTMLElement) {\n return (\n el &&\n !nodeOrParentEditable(el) &&\n !(el.nodeName === 'BODY' || el.nodeName === 'HTML')\n );\n }\n\n protected onInit() {\n const el = this.findEl(this.pageDoc);\n if (el) {\n this.deletedEl = el.cloneNode(true) as HTMLElement;\n this.parentId = getNodeId(el.parentElement);\n this.nodeIndex = getNodeIndex(el);\n }\n }\n\n protected executeMutation(doc: Document): boolean {\n const el = this.findEl(doc);\n if (!DeleteNode.canDelete(el)) {\n return false;\n }\n el.remove();\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n const parentEl = this.findEl(doc, this.parentId);\n if (parentEl) {\n const i = this.nodeIndex > 0 ? this.nodeIndex - 1 : 0;\n // clone node again so we are not inserting the same one into both documents\n parentEl.children.item(i).after(this.deletedEl.cloneNode(true));\n return true;\n }\n }\n}\n","import {BaseMutation} from '../base-mutation';\nimport {randomString} from '@common/core/utils/random-string';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\n\nexport class CloneNode extends BaseMutation {\n protected cloneId: string;\n\n constructor(protected el: HTMLElement) {\n super(el);\n this.cloneId = randomString(10);\n }\n\n static canClone(el: HTMLElement) {\n return (\n !nodeOrParentEditable(el) &&\n !(el.nodeName === 'BODY' || el.nodeName === 'HTML')\n );\n }\n\n getCloneId(): string {\n return this.cloneId;\n }\n\n protected executeMutation(doc: Document): boolean {\n const el = this.findEl(doc);\n if (!CloneNode.canClone(el)) {\n return false;\n }\n const clone = el.cloneNode(true) as HTMLElement;\n clone.dataset.arId = this.cloneId;\n el.after(clone);\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n const cloneEl = this.findEl(doc, this.cloneId);\n if (cloneEl) {\n cloneEl.remove();\n return true;\n }\n }\n}\n","import {getNodeIndex} from './get-node-index';\nimport {getNodeId} from './get-node-id';\n\nexport function insertNodeAtIndex(\n el: HTMLElement,\n parentEl: HTMLElement,\n index: number,\n clone = true\n) {\n el = clone ? (el.cloneNode(true) as HTMLElement) : el;\n if (index < 0) {\n parentEl.prepend(el);\n } else {\n // if parent already contains this node and we're changing\n // node's index within parent, need to adjust index by one\n if (getNodeId(el.parentElement) === getNodeId(parentEl)) {\n const currentNodeIndex = getNodeIndex(el);\n if (currentNodeIndex > -1 && currentNodeIndex <= index) {\n index++;\n }\n }\n const ref = parentEl.children.item(index);\n if (ref) {\n ref.before(el);\n } else {\n parentEl.append(el);\n }\n }\n}\n","import {randomString} from '@common/core/utils/random-string';\n\nexport function addIdToNode(node: HTMLElement, recursive = false) {\n if (!node.dataset.arId) {\n node.dataset.arId = randomString(10);\n }\n if (recursive) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i] as HTMLElement;\n addIdToNode(child, true);\n child.dataset.arId = randomString(10);\n }\n }\n}\n","import {BaseMutation} from '../base-mutation';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {insertNodeAtIndex} from '../../utils/insert-node-at-index';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\nimport {addIdToNode} from '../../utils/add-id-to-node';\n\nexport class InsertNode extends BaseMutation {\n constructor(\n protected el: HTMLElement,\n protected newIndex: number,\n protected newParent: string\n ) {\n super(el);\n }\n\n static canInsertInto(el: HTMLElement) {\n return el && !nodeOrParentEditable(el) && el.nodeName !== 'HTML';\n }\n\n getNodeId(): string {\n return this.nodeId;\n }\n\n protected onInit() {\n if (!this.nodeId) {\n addIdToNode(this.el, true);\n }\n this.nodeId = getNodeId(this.el);\n }\n\n protected executeMutation(doc: Document): boolean {\n const parentEl = this.findEl(doc, this.newParent);\n if (!InsertNode.canInsertInto(parentEl)) {\n return false;\n }\n insertNodeAtIndex(this.el, parentEl, this.newIndex, true);\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n const insertedEl = this.findEl(doc);\n if (insertedEl) {\n insertedEl.remove();\n return true;\n }\n }\n}\n","import {BaseMutation} from '../base-mutation';\nimport {insertNodeAtIndex} from '../../utils/insert-node-at-index';\nimport {nodeOrParentEditable} from '../../utils/node-or-parent-editable';\n\nexport class MoveNode extends BaseMutation {\n changes: {\n new: {index: number; parentId: string};\n old: {index: number; parentId: string};\n };\n constructor(\n protected el: HTMLElement, // node being moved\n oldIndex: number,\n oldParentId: string,\n newIndex: number,\n newParentId: string\n ) {\n super(el);\n this.changes.new = {index: newIndex, parentId: newParentId};\n this.changes.old = {index: oldIndex, parentId: oldParentId};\n }\n\n static canMoveNodeInto(el: HTMLElement) {\n return el && !nodeOrParentEditable(el) && el.nodeName !== 'HTML';\n }\n\n protected executeMutation(doc: Document): boolean {\n const parentEl = this.findEl(doc, this.changes.new.parentId);\n const el = this.findEl(doc);\n if (!MoveNode.canMoveNodeInto(parentEl)) {\n return false;\n }\n insertNodeAtIndex(el, parentEl, this.changes.new.index, false);\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n const parentEl = this.findEl(doc, this.changes.old.parentId);\n const el = this.findEl(doc);\n if (!MoveNode.canMoveNodeInto(parentEl)) {\n return false;\n }\n insertNodeAtIndex(el, parentEl, this.changes.old.index, false);\n return true;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Elements} from './elements/elements.service';\nimport {ContextBoxes} from './live-preview/context-box/context-boxes.service';\nimport {MutationsService} from './mutations/mutations.service';\nimport {DeleteNode} from './mutations/dom/delete-node';\nimport {CloneNode} from './mutations/dom/clone-node';\nimport {getNodeId} from './utils/get-node-id';\nimport {InsertNode} from './mutations/dom/insert-node';\nimport {getNodeIndex} from './utils/get-node-index';\nimport {MoveNode} from './mutations/dom/move-node';\nimport {BuilderStateService} from './builder-state.service';\nimport {ContextType} from './live-preview/context-box/builder-context';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BuilderDocumentActions {\n copiedNode: HTMLElement;\n\n constructor(\n private state: BuilderStateService,\n private elements: Elements,\n private contextBoxes: ContextBoxes,\n private mutations: MutationsService\n ) {}\n\n cloneNode(node: HTMLElement): string {\n const mutation = new CloneNode(node);\n this.mutations.execute(mutation);\n return mutation.getCloneId();\n }\n\n removeNode(node: HTMLElement) {\n if (this.mutations.execute(new DeleteNode(node))) {\n if (this.state.selected?.node === node) {\n this.state.selected$.next(null);\n }\n this.contextBoxes.hideBoxes();\n }\n }\n\n copyNode(node: HTMLElement) {\n if (node && node.nodeName !== 'BODY') {\n this.copiedNode = node.cloneNode(true) as HTMLElement;\n }\n }\n\n pasteNode(ref: HTMLElement) {\n if (ref && this.copiedNode) {\n let parent: string;\n let index: number;\n // make sure we don't paste refs after body\n if (ref.nodeName === 'BODY') {\n parent = getNodeId(ref);\n index = 0;\n } else {\n parent = getNodeId(ref.parentElement);\n index = getNodeIndex(ref) + 1;\n }\n this.mutations.execute(\n new InsertNode(this.copiedNode, index, parent)\n );\n this.copiedNode = null;\n this.contextBoxes.hideBox(ContextType.Selected);\n }\n }\n\n cutNode(node: HTMLElement) {\n if (node && node.nodeName !== 'BODY') {\n this.copyNode(node);\n this.removeNode(node);\n }\n }\n\n moveSelected(dir: 'up' | 'down') {\n if (!this.state.selected.node) return;\n\n const oldIndex = getNodeIndex(this.state.selected.node);\n const oldParentId = getNodeId(this.state.selected.node.parentElement);\n let newIndex: number;\n let newParentId: string;\n\n if (dir === 'down') {\n const next = this.state.selected.node\n .nextElementSibling as HTMLElement;\n if (next) {\n if (this.elements.canInsert(next, this.state.selected.el)) {\n // into next node\n newIndex = 0;\n newParentId = getNodeId(next);\n } else {\n // after next node\n newIndex = getNodeIndex(next);\n newParentId = getNodeId(next.parentElement);\n }\n } else {\n const parentParent = this.state.selected.node.parentElement\n .parentElement as HTMLElement;\n if (\n this.elements.canInsert(\n parentParent,\n this.state.selected.el\n )\n ) {\n // after parent\n newIndex =\n getNodeIndex(this.state.selected.node.parentElement) +\n 1;\n newParentId = getNodeId(parentParent);\n }\n }\n } else if (dir === 'up') {\n const prev = this.state.selected.node\n .previousElementSibling as HTMLElement;\n if (prev) {\n // into previous\n if (this.elements.canInsert(prev, this.state.selected.el)) {\n newIndex = prev.childElementCount;\n newParentId = getNodeId(prev);\n } else {\n // before previous\n newIndex = getNodeIndex(prev);\n newParentId = getNodeId(prev.parentElement);\n }\n } else {\n const parentParent =\n this.state.selected.node.parentElement.parentElement;\n if (\n this.elements.canInsert(\n parentParent,\n this.state.selected.el\n )\n ) {\n // before parent\n newIndex = getNodeIndex(\n this.state.selected.node.parentElement\n );\n newParentId = getNodeId(parentParent);\n }\n }\n }\n\n if (newParentId) {\n this.mutations.execute(\n new MoveNode(\n this.state.selected.node,\n oldIndex,\n oldParentId,\n newIndex,\n newParentId\n )\n );\n }\n }\n}\n","import {Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatMenuTrigger} from '@angular/material/menu';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {BuilderDocumentActions} from '../../builder-document-actions.service';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {LivePreview} from '../../live-preview.service';\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 state: BuilderStateService,\n public currentUser: CurrentUser,\n private actions: BuilderDocumentActions,\n public mutations: MutationsService,\n private livePreview: LivePreview\n ) {}\n\n remove() {\n this.actions.removeNode(this.state.selected.node);\n }\n\n undo() {\n this.mutations.undo();\n }\n\n redo() {\n this.mutations.redo();\n }\n\n copy() {\n this.actions.copyNode(this.state.selected.node);\n }\n\n cut() {\n this.actions.cutNode(this.state.selected.node);\n }\n\n paste() {\n this.actions.pasteNode(this.state.selected.node);\n }\n\n canPaste() {\n return this.actions.copiedNode;\n }\n\n duplicate() {\n this.actions.cloneNode(this.state.selected.node);\n }\n\n selectParent() {\n this.livePreview.setSelectedContext(\n this.state.selected.node.parentElement\n );\n }\n\n canSelectParent(): boolean {\n const parent = this.state.selected?.node?.parentElement;\n return parent && parent.nodeName.toLowerCase() !== 'body';\n }\n\n canSelectChild(): boolean {\n return !!this.state.selected?.node?.firstChild;\n }\n\n selectChild() {\n this.livePreview.setSelectedContext(\n this.state.selected.node.firstChild as HTMLElement\n );\n }\n\n move(direction: 'up' | 'down') {\n this.actions.moveSelected(direction);\n }\n}\n","<div #contextMenu class=\"context-menu\">\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]=\"!mutations.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]=\"!mutations.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</div>\n","export function getScrollTop(doc: Document): number {\n if (!doc.documentElement) return 0;\n return doc.documentElement.scrollTop || doc.body.scrollTop;\n}\n","import {Injectable} from '@angular/core';\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 {BuilderProject} from '../../shared/builder-types';\nimport {debounceTime} from 'rxjs/operators';\nimport {BuilderStateService} from '../builder-state.service';\nimport {MutationsService} from '../mutations/mutations.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ActiveProject {\n saving = false;\n\n constructor(\n public projectUrl: ProjectUrl,\n private projects: Projects,\n private toast: Toast,\n private localStorage: LocalStorage,\n private state: BuilderStateService,\n private mutations: MutationsService\n ) {\n this.bindToBuilderDocumentChangeEvent();\n }\n\n save(\n thumbnail = true,\n payload: object = {}\n ): Promise<{project: BuilderProject} | void> {\n this.saving = true;\n\n if (thumbnail) {\n this.createThumbnail();\n }\n\n const project = this.state.project$.value;\n\n payload = {\n name: project.model.name,\n css: project.css,\n js: project.js,\n ...payload,\n pages: this.state.pages$.value.map(page => {\n return {\n name: page.name,\n html: page.doc\n ? page.doc.documentElement.outerHTML\n : page.html,\n };\n }),\n };\n\n return this.projects\n .update(project.model.id, payload)\n .toPromise()\n .then(\n response => {\n this.state.project$.next(response.project);\n this.saving = false;\n return response;\n },\n () => {\n this.saving = false;\n this.toast.open('Could not save project');\n }\n );\n }\n\n getBaseUrl(relative = false): string {\n if (!this.state.project$.value) return '';\n return this.projectUrl.getBaseUrl(\n this.state.project$.value.model,\n relative\n );\n }\n\n getProductionUrl() {\n return this.projectUrl.getProductionUrl(\n this.state.project$.value.model\n );\n }\n\n private bindToBuilderDocumentChangeEvent() {\n this.mutations.executed$.pipe(debounceTime(1000)).subscribe(() => {\n if (this.localStorage.get('settings.autoSave')) {\n this.save(false);\n }\n });\n }\n\n private createThumbnail() {\n const base = document.createElement('base');\n base.href = this.getBaseUrl();\n if (!this.state.previewDoc.head.querySelector('base')) {\n this.state.previewDoc.head.prepend(base);\n }\n const rect =\n this.state.previewDoc.documentElement.getBoundingClientRect();\n (html2canvas as any)(this.state.previewDoc.documentElement, {\n height: rect.height,\n width: rect.width,\n }).then(canvas => {\n base.remove();\n this.projects\n .generateThumbnail(\n this.state.project$.value.model.id,\n canvas.toDataURL('image/png')\n )\n .subscribe(\n () => {},\n () => {}\n );\n });\n }\n}\n","import {Injectable, NgZone} from '@angular/core';\nimport {Elements} from './elements/elements.service';\nimport {InlineTextEditor} from './overlays/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 './overlays/live-preview-context-menu/live-preview-context-menu.component';\nimport {Keybinds} from '@common/core/keybinds/keybinds.service';\nimport {ContextBoxes} from './live-preview/context-box/context-boxes.service';\nimport {LinkEditor} from './overlays/link-editor/link-editor.service';\nimport {BuilderDocumentActions} from './builder-document-actions.service';\nimport {BuilderStateService} from './builder-state.service';\nimport {nodeOrParentEditable} from './utils/node-or-parent-editable';\nimport {getScrollTop} from './utils/get-scroll-top';\nimport {MutationsService} from './mutations/mutations.service';\nimport {Settings} from '@common/core/config/settings.service';\nimport {findNodeById} from './utils/find-nodes-by-id';\nimport {ContextType, SelectedContext} from './live-preview/context-box/builder-context';\nimport {skip} from 'rxjs/operators';\nimport {createLinkEl} from './utils/create-link-el';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LivePreview {\n private hammer: HammerManager;\n constructor(\n public zone: NgZone,\n public elements: Elements,\n public textEditor: InlineTextEditor,\n public parsedProject: ActiveProject,\n public contextMenu: ContextMenu,\n public keybinds: Keybinds,\n public contextBoxes: ContextBoxes,\n public activeProject: ActiveProject,\n public linkEditor: LinkEditor,\n public actions: BuilderDocumentActions,\n public state: BuilderStateService,\n public mutations: MutationsService,\n public settings: Settings\n ) {}\n\n init() {\n this.state.iframe.onload = () => this.onIframeLoad();\n this.state.activePage$.subscribe(page => {\n this.state.iframe.srcdoc = this.buildSrcDoc(page.doc);\n });\n\n this.bindToUndoCommandExecuted();\n this.registerKeybinds();\n\n this.state.dragging$.pipe(skip(1)).subscribe(isDragging => {\n if (isDragging) {\n this.state.previewDoc.body.classList.add('dragging');\n } else {\n this.state.previewDoc.body.classList.remove('dragging');\n }\n });\n\n this.state.previewContainer.addEventListener(\n 'mouseleave',\n () => {\n this.contextBoxes.hideBox(ContextType.Hover);\n },\n {passive: true}\n );\n }\n\n repositionBox(type: ContextType) {\n const context = this.state.getContext(type);\n if (context) {\n this.contextBoxes.repositionBox(type, context.node);\n }\n }\n\n setHoverContext(node: HTMLElement) {\n if (node === this.state.hover$.value?.node) return;\n const match = this.elements.match(node);\n if (match) {\n this.state.hover$.next({\n el: match.el,\n node: match.node,\n });\n this.repositionBox(ContextType.Hover);\n }\n }\n\n setSelectedContext(node: HTMLElement | string) {\n if (typeof node === 'string') {\n node = findNodeById(node, this.state.previewDoc);\n }\n\n if (\n node?.nodeType !== Node.ELEMENT_NODE ||\n this.state.selected$.value?.node === node\n ) {\n return;\n }\n\n const match = this.elements.match(node);\n console.log(match);\n if (!match) return;\n\n const context: Partial<SelectedContext> = {\n path: [],\n };\n\n context.el = match.el;\n context.node = match.node;\n\n // create an array from all parents of this node\n let parentNode = context.node;\n while (\n parentNode?.nodeType === Node.ELEMENT_NODE &&\n parentNode.nodeName.toLowerCase() !== 'body'\n ) {\n context.path.unshift({\n node: parentNode,\n name: this.elements.getDisplayName(\n this.elements.match(parentNode)?.el,\n parentNode\n ),\n });\n parentNode = parentNode.parentElement;\n }\n\n this.state.selected$.next(context as SelectedContext);\n this.repositionBox(ContextType.Selected);\n this.state.inspectorPanel$.next(context.el.defaultInspectorPanel);\n }\n\n private onIframeLoad() {\n this.state.previewDoc = this.state.iframe.contentDocument;\n this.state.loading$.next(true);\n this.contextBoxes.hideBoxes();\n this.state.previewDoc.body.scrollTop = 0;\n this.addIframeCss();\n this.bindToIframeEvents();\n\n // wait until all css stylesheets are loaded\n const links = Array.from(\n this.state.previewDoc.head.querySelectorAll('link')\n );\n const promises = links\n .filter(link => link.href.endsWith('.css') && !link.sheet)\n .map(link => {\n return new Promise(r => link.addEventListener('load', r));\n });\n\n return Promise.all(promises).then(() => {\n this.state.loading$.next(false);\n this.state.previewDocReloaded$.next(true);\n });\n }\n\n private bindToUndoCommandExecuted() {\n this.mutations.executed$.subscribe(() => {\n this.repositionBox(ContextType.Selected);\n this.contextBoxes.hideBox(ContextType.Hover);\n });\n }\n\n private bindToIframeEvents() {\n if (this.hammer) {\n this.hammer.destroy();\n }\n this.hammer = new Hammer.Manager(this.state.previewDoc);\n const doubleTap = new Hammer.Tap({event: 'double_tap', taps: 2});\n\n this.hammer.add(doubleTap);\n\n this.listenForHover();\n this.listenForClick();\n this.listenForDoubleClick(this.hammer);\n this.listenForContextMenu();\n this.keybinds.listenOn(this.state.previewDoc);\n\n this.state.previewDoc.addEventListener(\n 'scroll',\n () => {\n this.contextBoxes.hideBox(ContextType.Hover);\n if (this.state.selected?.node) {\n this.repositionBox(ContextType.Selected);\n }\n this.textEditor.close();\n this.contextMenu.close();\n },\n true\n );\n }\n\n private registerKeybinds() {\n this.keybinds.add('ctrl+shift+x', () =>\n this.actions.cutNode(this.state.selected?.node)\n );\n this.keybinds.add('ctrl+shift+c', () =>\n this.actions.copyNode(this.state.selected?.node)\n );\n this.keybinds.add('ctrl+shift+v', () =>\n this.actions.pasteNode(this.state.selected?.node)\n );\n this.keybinds.add('ctrl+z', () => this.mutations.undo());\n this.keybinds.add('ctrl+y', () => this.mutations.redo());\n this.keybinds.add('arrow_up', e => {\n if (\n this.state.selected?.node &&\n !this.state.selected.node.getAttribute('contentEditable')\n ) {\n this.actions.moveSelected('up');\n e.preventDefault();\n }\n });\n this.keybinds.add('arrow_down', e => {\n if (\n this.state.selected?.node &&\n !this.state.selected.node.getAttribute('contentEditable')\n ) {\n this.actions.moveSelected('down');\n e.preventDefault();\n }\n });\n this.keybinds.add('delete', () => {\n this.actions.removeNode(this.state.selected?.node);\n });\n }\n\n private listenForHover() {\n this.state.previewDoc.addEventListener('mousemove', e => {\n this.zone.run(() => {\n if (this.state.dragging$.value) return;\n const node = this.state.previewDoc.elementFromPoint(\n e.pageX,\n e.pageY - getScrollTop(this.state.previewDoc)\n ) as HTMLElement;\n this.setHoverContext(node);\n });\n });\n }\n\n private listenForContextMenu() {\n this.state.previewDoc.addEventListener('contextmenu', e => {\n this.zone.run(() => {\n e.preventDefault();\n if (this.state.editableNode) return;\n this.setSelectedContext(e.target as HTMLElement);\n if (!this.state.selected.el.contextMenu) return;\n this.contextMenu.open(LivePreviewContextMenuComponent, e, {\n offsetX:\n this.state.inspectorEl.getBoundingClientRect().width,\n });\n });\n });\n }\n\n private listenForClick() {\n this.state.previewDoc.addEventListener(\n 'click',\n e => {\n this.zone.run(() => {\n const node = e.target as HTMLElement;\n\n this.handleLinkClick(e);\n this.handleFormSubmitButtonClick(e);\n\n this.state.previewDoc.body.focus();\n\n // node is already selected, bail\n if (this.state.selected?.node === node) return true;\n\n // node text is being edited, bail\n if (nodeOrParentEditable(node)) return;\n\n this.contextMenu.close();\n this.textEditor.close();\n this.linkEditor.close();\n\n this.setSelectedContext(node);\n });\n },\n true\n );\n }\n\n private listenForDoubleClick(hammer: HammerManager) {\n hammer.on('double_tap', e => {\n this.zone.run(() => {\n if (this.state.selected?.el?.editActionName) {\n this.state.selected.el.editAction(this.state.selected.node);\n }\n });\n });\n }\n\n private handleLinkClick(e: MouseEvent) {\n const node = e.target as HTMLElement;\n if (node.closest('a')) {\n e.preventDefault();\n e.stopPropagation();\n }\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 (\n !node.matches(\n 'input[type=submit], button[type=submit], button[type=submit] *'\n )\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n private addIframeCss() {\n if (this.state.previewDoc.head.querySelector('#preview-css')) return;\n const url = this.settings.getAssetUrl() + 'css/iframe.css';\n const link = createLinkEl(url, 'preview-css');\n this.state.previewDoc.head.appendChild(link);\n }\n\n private buildSrcDoc(doc: Document) {\n const base = doc.createElement('base');\n base.href = this.activeProject.getBaseUrl();\n doc.head.prepend(base);\n const outerHTML = doc.documentElement.outerHTML;\n base.remove();\n return outerHTML;\n }\n}\n","import {\n ArchitectElControl,\n ArchitectElement,\n ArchitectTextEl,\n EditableProp,\n ElControlType,\n} from '../architect-element';\nimport {IconSelectorOverlayComponent} from '../../overlays/icon-selector-overlay/icon-selector-overlay.component';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ModifyAttributes} from '../../mutations/attributes/modify-attributes';\nimport {BuilderOverlayService} from '../../overlays/builder-overlay.service';\nimport {RenameNode} from '../../mutations/dom/rename-node';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {ContextBoxes} from '../../live-preview/context-box/context-boxes.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\nimport {LivePreview} from '../../live-preview.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {ContextType} from '../../live-preview/context-box/builder-context';\n\nexport class ParagraphEl extends ArchitectTextEl {\n name = 'paragraph';\n html = `<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>`;\n contentCategories = ['flow'];\n allowedContent = ['phrasing'];\n category = 'typography';\n icon = 'short-text';\n matcher(node: HTMLElement) {\n return node.nodeName === 'P';\n }\n}\nexport class DividerEl extends ArchitectElement {\n name = 'divider';\n html = '<hr>';\n contentCategories = ['flow'];\n allowedContent = [];\n category = 'layout';\n icon = 'remove';\n matcher(node: HTMLElement) {\n return node.nodeName === 'HR';\n }\n}\nexport class MarkedTextEl extends ArchitectTextEl {\n name = 'marked text';\n html = '<mark>Marked Text</mark>';\n contentCategories = ['flow', 'phrasing'];\n allowedContent = ['phrasing'];\n category = 'typography';\n icon = 'info';\n matcher(node: HTMLElement) {\n return node.nodeName === 'MARK';\n }\n}\n\nexport class DefinitionListEl extends ArchitectElement {\n name = 'definition list';\n html = `<dl class=\"dl-horizontal\"><dt>Description lists</dt><dd>A description list is perfect for defining terms.</dd><dt>Euismod</dt><dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd><dd>Donec id elit non mi porta gravida at eget metus.</dd><dt>Malesuada porta</dt><dd>Etiam porta sem malesuada magna mollis euismod.</dd><dt>Felis euismod semper eget lacinia</dt><dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd></dl>`;\n contentCategories = ['flow', 'sectioning root'];\n allowedContent = ['dt', 'dd'];\n category = 'typography';\n icon = 'view-list';\n matcher(node: HTMLElement) {\n return node.nodeName === 'DL';\n }\n}\n\nexport class BlockquoteEl extends ArchitectTextEl {\n name = 'blockquote';\n html = `<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p><footer>Someone famous in <cite title=\"Source Title\">Source Title</cite></footer></blockquote>`;\n contentCategories = ['flow', 'sectioning root'];\n allowedContent = ['flow'];\n category = 'typography';\n icon = 'format-quote';\n matcher(node: HTMLElement) {\n return node.nodeName === 'BLOCKQUOTE';\n }\n}\n\nexport class ListItemEl extends ArchitectTextEl {\n name = 'list item';\n html = '<li>A basic list item</li>';\n contentCategories = ['li'];\n allowedContent = ['flow'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'LI';\n }\n}\n\nexport class UnorderedListEl extends ArchitectElement {\n name = 'unordered list';\n html =\n '<ul><li>List item #1</li><li>List item #2</li><li>List item #3</li><ul>';\n contentCategories = ['flow'];\n allowedContent = ['li'];\n category = 'typography';\n icon = 'format-list-bulleted';\n matcher(node: HTMLElement) {\n return node.nodeName === 'UL';\n }\n}\n\nexport class BodyEl extends ArchitectElement {\n name = 'body';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n contextMenu = false;\n matcher(node: HTMLElement) {\n if (node.nodeName === 'HTML') {\n return node.querySelector('body');\n }\n return node.nodeName === 'BODY';\n }\n}\n\nexport class ButtonEl extends ArchitectTextEl {\n name = 'button';\n html = '<a class=\"btn btn-success\">Click Me</a>';\n contentCategories = [\n 'flow',\n 'phrasing',\n 'interactive',\n 'listed',\n 'labelable',\n 'submittable',\n 'reassociateable',\n 'form-associated',\n ];\n allowedContent = ['phrasing'];\n category = 'buttons';\n icon = 'button-custom';\n matcher(node: HTMLElement) {\n return node.nodeName === 'BUTTON' || node.classList.contains('btn');\n }\n}\n\nexport class DivContainerEl extends ArchitectTextEl {\n name = 'div container';\n html = '<div></div>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'layout';\n icon = 'crop-landscape';\n matcher(node: HTMLElement) {\n return node.nodeName === 'DIV';\n }\n}\n\nexport class SectionEl extends ArchitectElement {\n name = 'section';\n html = '<section></section>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'SECTION';\n }\n}\n\nexport class FooterEl extends ArchitectElement {\n name = 'footer';\n html = '<footer></footer>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'FOOTER';\n }\n}\n\nexport class HeaderEl extends ArchitectElement {\n name = 'header';\n html = '<header>Header Text</header>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'HEADER';\n }\n}\n\nexport class HeadingEl extends ArchitectTextEl {\n name = 'heading';\n html = '<h2>Heading</h2>';\n contentCategories = ['heading', 'flow'];\n allowedContent = ['phrasing'];\n category = 'typography';\n icon = 'format-size';\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Type',\n type: ElControlType.Select,\n options: [\n {key: 'h1', value: 'h1'},\n {key: 'h2', value: 'h2'},\n {key: 'h3', value: 'h3'},\n {key: 'h4', value: 'h4'},\n {key: 'h5', value: 'h5'},\n {key: 'h6', value: 'h6'},\n ],\n defaultValue: (node: HTMLElement) => {\n return node.nodeName.toLowerCase() || 'h1';\n },\n onChange: (node: HTMLElement, value: string) => {\n const nodeId = getNodeId(node);\n const executed = this.get(MutationsService).execute(\n new RenameNode(node, value)\n );\n if (executed) {\n this.get(LivePreview).setSelectedContext(nodeId);\n this.get(ContextBoxes).repositionBox(\n ContextType.Selected,\n this.get(BuilderStateService).selected.node\n );\n }\n },\n }),\n ];\n matcher(node: HTMLElement) {\n return ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(node.nodeName);\n }\n}\n\nexport class IconEl extends ArchitectElement {\n name = 'icon';\n contentCategories = ['flow', 'phrasing'];\n allowedContent = [];\n canDrag = true;\n canEdit = [EditableProp.Attributes];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Size',\n type: ElControlType.Select,\n options: [\n {key: 'Default', value: 'default'},\n {key: 'Large', value: 'fa-lg'},\n {key: '2x', value: 'fa-2x'},\n {key: '3x', value: 'fa-3x'},\n {key: '4x', value: 'fa-4x'},\n {key: '5x', value: 'fa-5x'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n ];\n\n editActionName = 'Change Icon';\n editAction(node: HTMLElement) {\n this.get(BuilderOverlayService)\n .open(IconSelectorOverlayComponent, null, node)\n .afterClosed()\n .subscribe(icon => {\n if (icon) {\n let className = node.getAttribute('class');\n className = className\n .replace(/fa fa.+?($| )/, icon + ' ')\n .replace(/glyphicon glyphicon.+?($| )/, icon + ' ')\n .replace(/icon-.+? /, icon + ' ');\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n class: className,\n })\n );\n }\n });\n }\n matcher(node: HTMLElement) {\n return (\n node.nodeName === 'I' ||\n node.className.includes('icon-') ||\n node.classList.contains('svg-inline--fa')\n );\n }\n}\n\nexport class GenericEl extends ArchitectTextEl {\n name = 'generic';\n contentCategories = ['flow', 'phrasing'];\n allowedContent = [];\n canDrag = false;\n canEdit = [EditableProp.Text, EditableProp.Attributes];\n matcher(node: HTMLElement) {\n return ['EM', 'STRONG', 'U', 'S', 'SMALL'].includes(node.nodeName);\n }\n}\n\nexport class LabelEl extends ArchitectTextEl {\n name = 'label';\n contentCategories = ['fow', 'phrasing'];\n allowedContent = [];\n canDrag = false;\n canEdit = [EditableProp.Text, EditableProp.Attributes];\n matcher(node: HTMLElement) {\n return node.nodeName === 'LABEL';\n }\n}\n\nexport class SvgEl extends ArchitectElement {\n name = 'svg';\n matcher(node: HTMLElement) {\n return node.closest('svg') as unknown as HTMLElement;\n }\n}\n","export function hasClass(node: HTMLElement, className: string): boolean {\n if (!node || !node.classList) return false;\n return node.classList.contains(className);\n}\n","import {\n ArchitectElControl,\n ArchitectElement, ArchitectTextEl,\n EditableProp,\n ElControlType,\n} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\nimport {openUploadWindow} from '@common/uploads/utils/open-upload-window';\nimport {UploadInputTypes} from '@common/uploads/upload-input-config';\nimport {ActiveProject} from '../../projects/active-project';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {ContextBoxes} from '../../live-preview/context-box/context-boxes.service';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {\n ModifyAttributes,\n NodeAttributes,\n} from '../../mutations/attributes/modify-attributes';\nimport {LinkEditor} from '../../overlays/link-editor/link-editor.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\nimport {ContextType} from '../../live-preview/context-box/builder-context';\nimport {FileEntry} from '@common/uploads/types/file-entry';\nimport {isAbsoluteUrl} from '@common/core/utils/is-absolute-url';\n\nexport class PageHeaderEl extends ArchitectElement {\n name = 'page header';\n html = `<div class=\"page-header\"><h1>Example page header <small>Header subtext</small></h1></div>`;\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'typography';\n icon = 'header-custom';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'page-header');\n }\n}\n\nexport class ProgressBarEl extends ArchitectElement {\n name = 'progress bar';\n html = `<div class=\"progress\">\n<div class=\"progress-bar\" role=\"progressbar\" style=\"width: 50%\" aria-valuenow=\"50\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n</div>`;\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'components';\n icon = 'show-chart';\n specificity = 1;\n matcher(node: HTMLElement) {\n if (hasClass(node, 'progress')) {\n return node;\n } else if (hasClass(node.parentElement, 'progress')) {\n return node.parentElement;\n }\n }\n}\n\nexport class ListGroupEl extends ArchitectElement {\n name = 'list group';\n html = `<ul class=\"list-group\">\n<li class=\"list-group-item\">Cras justo odio</li>\n<li class=\"list-group-item\">Dapibus ac facilisis in</li>\n<li class=\"list-group-item\">Morbi leo risus</li>\n<li class=\"list-group-item\">Porta ac consectetur ac</li>\n<li class=\"list-group-item\">Vestibulum at eros</li>\n</ul>`;\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'components';\n icon = 'view-list';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'list-group');\n }\n}\n\nexport class CardEl extends ArchitectElement {\n name = 'card';\n html = `<div class=\"card\" style=\"width: 18rem;\">\n<img src=\"https://via.placeholder.com/286x160?text=Placeholder%20Image\" class=\"card-img-top\" alt=\"\">\n<div class=\"card-body\">\n<h5 class=\"card-title\">Card title</h5>\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>\n<a href=\"#\" class=\"btn btn-primary\">Go somewhere</a>\n</div>\n</div>`;\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'components';\n icon = 'crop-portrait';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'card');\n }\n}\n\nexport class AlertEl extends ArchitectTextEl {\n name = 'alert';\n html = `<div class=\"alert alert-primary\" role=\"alert\">\nA simple primary alert—check it out!\n</div>`;\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'layout';\n icon = 'label';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'well');\n }\n}\n\nexport class BadgeEl extends ArchitectTextEl {\n name = 'Badge';\n html = '<span class=\"label label-success\">Success</span>';\n contentCategories = ['flow', 'phrasing'];\n allowedContent = ['phrasing'];\n category = 'typography';\n hiddenClasses = ['label'];\n icon = 'label';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'label');\n }\n}\n\nexport class ButtonGroupEl extends ArchitectElement {\n name = 'button group';\n html = `<div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\n <button type=\"button\" class=\"btn btn-secondary\">Left</button>\n <button type=\"button\" class=\"btn btn-secondary\">Middle</button>\n <button type=\"button\" class=\"btn btn-secondary\">Right</button>\n</div>`;\n contentCategories = ['flow'];\n allowedContent = ['button'];\n category = 'buttons';\n icon = 'view-column';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'btn-group');\n }\n}\n\nexport class ButtonToolbarEl extends ArchitectElement {\n name = 'button toolbar';\n html = `<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\n <div class=\"btn-group mr-2\" role=\"group\" aria-label=\"First group\">\n <button type=\"button\" class=\"btn btn-secondary\">1</button>\n <button type=\"button\" class=\"btn btn-secondary\">2</button>\n <button type=\"button\" class=\"btn btn-secondary\">3</button>\n <button type=\"button\" class=\"btn btn-secondary\">4</button>\n </div>\n <div class=\"btn-group mr-2\" role=\"group\" aria-label=\"Second group\">\n <button type=\"button\" class=\"btn btn-secondary\">5</button>\n <button type=\"button\" class=\"btn btn-secondary\">6</button>\n <button type=\"button\" class=\"btn btn-secondary\">7</button>\n </div>\n <div class=\"btn-group\" role=\"group\" aria-label=\"Third group\">\n <button type=\"button\" class=\"btn btn-secondary\">8</button>\n </div>\n</div>`;\n contentCategories = ['flow'];\n allowedContent = ['.btn-group'];\n category = 'buttons';\n icon = 'view-module';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'btn-toolbar');\n }\n}\n\n// forms\n\nexport class InputFieldEl extends ArchitectElement {\n name = 'input field';\n html = '<input type=\"text\" class=\"form-control\" placeholder=\"Text input\">';\n contentCategories = [\n 'flow',\n 'phrasing',\n 'interactive',\n 'listed',\n 'labelable',\n 'submittable',\n 'resettable',\n 'reassociateable',\n 'form-associated',\n ];\n allowedContent = [];\n hiddenClasses = ['form-control'];\n category = 'forms';\n icon = 'power-input';\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Type',\n type: ElControlType.Select,\n options: [\n {key: 'Text', value: 'text'},\n {key: 'Password', value: 'password'},\n {key: 'Date', value: 'date'},\n {key: 'Email', value: 'email'},\n {key: 'Datetime', value: 'datetime'},\n {key: 'Datetime Local', value: 'datetime-local'},\n {key: 'Month', value: 'month'},\n {key: 'Time', value: 'time'},\n {key: 'Week', value: 'week'},\n {key: 'Number', value: 'number'},\n {key: 'Url', value: 'url'},\n {key: 'Search', value: 'search'},\n {key: 'Tel', value: 'tel'},\n {key: 'Color', value: 'color'},\n ],\n defaultValue(node: HTMLInputElement) {\n return node.type || this.options[0].value;\n },\n onChange(node: HTMLElement, value: string) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n type: value,\n })\n );\n },\n }),\n new ArchitectElControl(this.injector, {\n label: 'Placeholder',\n type: ElControlType.Input,\n defaultValue(node: HTMLInputElement) {\n return node.placeholder || 'Text input';\n },\n onChange(node: HTMLElement, value: string) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n placeholder: value,\n })\n );\n },\n }),\n ];\n specificity = 1;\n matcher(node: HTMLElement) {\n const excludedTypes = [\n 'button',\n 'checkbox',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit',\n ];\n return (\n node.nodeName === 'INPUT' &&\n !excludedTypes.includes((node as HTMLInputElement).type)\n );\n }\n}\n\nexport class TextAreaEl extends ArchitectElement {\n name = 'text area';\n html = '<textarea class=\"form-control\" rows=\"3\"></textarea>';\n contentCategories = [\n 'flow',\n 'phrasing',\n 'interactive',\n 'listed',\n 'labelable',\n 'submittable',\n 'resettable',\n 'reassociateable',\n 'form-associated',\n ];\n allowedContent = [];\n hiddenClasses = ['form-control'];\n category = 'forms';\n icon = 'short-text';\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Text Rows',\n type: ElControlType.Input,\n inputType: 'number',\n defaultValue(node: HTMLInputElement) {\n return node.getAttribute('rows') || '3';\n },\n onChange(node: HTMLElement, value: string) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n rows: value,\n })\n );\n },\n }),\n new ArchitectElControl(this.injector, {\n label: 'Placeholder',\n type: ElControlType.Input,\n defaultValue(node: HTMLInputElement) {\n return node.placeholder || 'Text input';\n },\n onChange(node: HTMLElement, value: string) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n placeholder: value,\n })\n );\n },\n }),\n ];\n specificity = 1;\n matcher(node: HTMLElement) {\n return node.nodeName === 'TEXTAREA';\n }\n}\n\nexport class CheckboxEl extends ArchitectElement {\n name = 'checkbox';\n html = `<div class=\"form-check\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckDefault\">\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\n Default checkbox\n </label>\n</div>`;\n contentCategories = [\n 'flow',\n 'phrasing',\n 'interactive',\n 'listed',\n 'labelable',\n 'submittable',\n 'resettable',\n 'reassociateable',\n 'form-associated',\n ];\n allowedContent = [];\n category = 'forms';\n icon = 'check-box';\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'form-check');\n }\n}\n\nexport class InputGroupEl extends ArchitectElement {\n name = 'input group';\n html = `<div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\">@</div>\n </div>\n <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n </div>`;\n contentCategories = ['flow'];\n allowedContent = [];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Size',\n type: ElControlType.Select,\n options: [\n {key: 'Medium', value: 'default'},\n {key: 'Large', value: 'input-group-lg'},\n {key: 'Small', value: 'input-group-sm'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n ];\n category = 'forms';\n icon = 'view-list';\n hiddenClasses = ['input-group'];\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'input-group');\n }\n}\n\nexport class FormGroupEl extends ArchitectElement {\n name = 'form group';\n html = `<div class=\"form-group\"><label for=\"email\" class=\"control-label\">Email address</label><input type=\"email\" class=\"form-control\" id=\"email\" placeholder=\"Enter email\"></div>`;\n contentCategories = ['flow'];\n allowedContent = [];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'State',\n type: ElControlType.Select,\n options: [\n {key: 'None', value: 'default'},\n {key: 'Error', value: 'has-error'},\n {key: 'Success', value: 'has-success'},\n {key: 'Warning', value: 'has-warning'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n ];\n category = 'forms';\n icon = 'view-headline';\n hiddenClasses = ['form-group'];\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'form-group');\n }\n}\n\nexport class LinkEl extends ArchitectTextEl {\n name = 'link';\n html = '<a href=\"#\">A simple hyperlink.</a>';\n contentCategories = ['flow', 'phrasing', 'interactive'];\n allowedContent = ['phrasing'];\n category = 'typography';\n icon = 'link';\n editActionName = 'Change Link';\n specificity = 1;\n editAction(node: HTMLLinkElement) {\n this.get(LinkEditor)\n .open(node, node)\n .valueChanged()\n .subscribe((value: NodeAttributes) => {\n if (value) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, value)\n );\n }\n });\n }\n matcher(node: HTMLElement) {\n return node.nodeName === 'A';\n }\n}\n\nexport class AddonEl extends ArchitectElement {\n name = 'addon';\n canDrag = false;\n contentCategories = ['flow'];\n allowedContent = [];\n canEdit = [EditableProp.Text, EditableProp.Attributes];\n hiddenClasses = ['input-group-addon'];\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'input-group-addon');\n }\n}\n\nexport class SelectEl extends ArchitectElement {\n name = 'select';\n html = `<select class=\"form-control\">\n<option>1</option>\n<option>2</option>\n<option>3</option>\n<option>4</option>\n<option>5</option>\n</select>`;\n contentCategories = [\n 'flow',\n 'phrasing',\n 'interactive',\n 'listed',\n 'labelable',\n 'submittable',\n 'resettable',\n 'reassociateable',\n 'form-associated',\n ];\n allowedContent = [];\n category = 'forms';\n icon = 'arrow-drop-down';\n specificity = 1;\n matcher(node: HTMLElement) {\n return node.nodeName === 'SELECT';\n }\n}\n\nexport class ImageEl extends ArchitectElement {\n name = 'image';\n html = `<img src=\"/assets/images/builder/default.jpg\" class=\"img-responsive\" alt=\"\">`;\n contentCategories = ['flow', 'phrasing', 'embedded', 'interactive', 'form-associated'];\n allowedContent = [];\n category = 'media';\n icon = 'image';\n canEdit = [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Attributes,\n EditableProp.Shadow,\n EditableProp.Border,\n ];\n editActionName = 'Change Image';\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Shape',\n type: ElControlType.Select,\n options: [\n {key: 'Default', value: 'none'},\n {key: 'Rounded', value: 'img-rounded'},\n {key: 'Thumbnail', value: 'img-thumbnail'},\n {key: 'Circle', value: 'img-circle'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n ];\n specificity = 1;\n matcher(node: HTMLElement) {\n return node.nodeName === 'IMG';\n }\n editAction(node: HTMLImageElement) {\n const diskPrefix = `${this.get(ActiveProject).getBaseUrl(true)}images`;\n const config = {uri: 'uploads/images', httpParams: {diskPrefix}};\n openUploadWindow({types: [UploadInputTypes.image]}).then(files => {\n this.get(UploadQueueService)\n .start(files, config)\n .subscribe(response => {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n src: this.getImageUrl(\n response.fileEntry\n ),\n })\n );\n this.get(ContextBoxes).hideBox(ContextType.Hover);\n });\n });\n }\n private getImageUrl(entry: FileEntry) {\n if (isAbsoluteUrl(entry.url)) {\n return entry.url;\n } else {\n const path = this.get(ActiveProject).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\nexport class ResponsiveVideoEl extends ArchitectElement {\n name = 'responsive video';\n html =\n '<div class=\"embed-responsive embed-responsive-16by9\"><iframe class=\"embed-responsive-item\" src=\"//www.youtube.com/embed/sENM2wA_FTg\"></iframe></div>';\n contentCategories = ['flow'];\n allowedContent = [];\n category = 'media';\n icon = 'video-library';\n canEdit = [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Shadow,\n EditableProp.Attributes,\n ];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Url',\n type: ElControlType.Input,\n defaultValue(node: HTMLInputElement) {\n return node.querySelector('iframe')?.src || '//www.youtube.com/embed/wGp0GAd1d1s';\n },\n onChange(node: HTMLElement, value: string) {\n const iframe = node.querySelector('iframe');\n this.get(MutationsService).execute(\n new ModifyAttributes(iframe, {\n src: value,\n })\n );\n },\n }),\n ];\n hiddenClasses = [\n 'embed-responsive',\n 'embed-responsive-16by9',\n 'preview-node',\n 'img-responsive',\n ];\n specificity = 1;\n matcher(node: HTMLElement) {\n return node.closest('.embed-responsive') as HTMLElement;\n }\n}\n\nexport class ImageGridEl extends ArchitectElement {\n name = 'image grid';\n html = `<div class=\"row image-grid\">\n <div class=\"col-xs-3\">\n <a href=\"#\" class=\"thumbnail\"><img src=\"/assets/images/builder/default.jpg\"></a>\n </div>\n <div class=\"col-xs-3\">\n <a href=\"#\" class=\"thumbnail\"><img src=\"/assets/images/builder/default.jpg\"></a>\n </div>\n <div class=\"col-xs-3\">\n <a href=\"#\" class=\"thumbnail\"><img src=\"/assets/images/builder/default.jpg\"></a>\n </div>\n <div class=\"col-xs-3\">\n <a href=\"#\" class=\"thumbnail\"><img src=\"/assets/images/builder/default.jpg\"></a>\n </div>\n</div>`;\n contentCategories = ['flow'];\n allowedContent = [];\n category = 'media';\n icon = 'grid-on';\n canEdit = [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Shadow,\n EditableProp.Attributes,\n ];\n specificity = 1;\n matcher(node: HTMLElement) {\n return hasClass(node, 'image-grid');\n }\n}\n","import {addIdToNode} from '../../../utils/add-id-to-node';\n\nexport function createColumnNode(span: number, doc: Document): HTMLElement {\n const col = doc.createElement('div');\n col.className = 'col-sm-' + span;\n addIdToNode(col, true);\n return col;\n}\n","export function getColumnSpan(node: HTMLElement): number {\n const matches = node.className.match(/col-[a-z]+-([0-9]+)/);\n return parseInt(matches ? matches[1] : null);\n}\n\n","import {getColumnSpan} from './get-column-span';\nimport {getNodeId} from '../../../utils/get-node-id';\nimport {Column} from '../layout-panel-types';\n\nexport function getRowColumns(row: HTMLElement): Column[] {\n return Array.from(row?.children || [])\n .filter(n => {\n return n.className.indexOf('col-') > -1;\n })\n .map((node: HTMLElement) => {\n return {\n span: getColumnSpan(node),\n id: getNodeId(node),\n };\n });\n}\n","import {BaseMutation} from '../base-mutation';\nimport {createColumnNode} from '../../sidebar/layout-panel/utils/create-column-node';\nimport {getNodeIndex} from '../../utils/get-node-index';\nimport {getColumnSpan} from '../../sidebar/layout-panel/utils/get-column-span';\nimport {findNodeById, findNodesById} from '../../utils/find-nodes-by-id';\nimport {Column} from '../../sidebar/layout-panel/layout-panel-types';\nimport {getRowColumns} from '../../sidebar/layout-panel/utils/get-row-columns';\n\nexport class ApplyRowPreset extends BaseMutation {\n private originalRowContent: string;\n private columns: Column[];\n\n constructor(protected rowId: string, protected preset: number[]) {\n super(rowId);\n }\n\n execute(): boolean {\n if (this.executeMutation(this.pageDoc)) {\n // replace row node with modified row clone from page document so that both\n // documents have the same node ids for row and all newly added children\n const modifiedRow = this.findEl(this.pageDoc, this.rowId).cloneNode(\n true\n );\n this.findEl(this.previewDoc, this.rowId).replaceWith(modifiedRow);\n return true;\n }\n return false;\n }\n\n protected executeMutation(doc: Document): boolean {\n this.applyPreset(this.preset, doc);\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n this.findEl(doc).innerHTML = this.originalRowContent;\n return true;\n }\n\n protected applyPreset(preset: number[], doc: Document) {\n const rowNode = this.findEl(doc, this.rowId);\n this.columns = getRowColumns(rowNode);\n this.originalRowContent = rowNode.innerHTML;\n\n // remove extra columns\n if (this.columns.length > preset.length) {\n const colIds = this.columns.slice(preset.length).map(c => c.id);\n findNodesById(colIds, doc).forEach(col => col.remove());\n }\n\n // resize existing columns\n preset.forEach((span, i) => {\n if (this.columns[i]) {\n const col = findNodeById(this.columns[i].id, doc);\n this.resizeColumn(col, span);\n } else if (this.columns[i - 1]) {\n const col = findNodeById(this.columns[i - 1].id, doc);\n this.addNewColumn(col, span, doc);\n } else {\n // row is empty\n rowNode.appendChild(createColumnNode(span, doc));\n }\n });\n }\n\n private resizeColumn(\n node: HTMLElement,\n newSpan: number,\n operator?: '+' | '-'\n ) {\n if (!newSpan) newSpan = 1;\n\n node.className = node.className.replace(\n /(col-[a-z]+-)([0-9]+)/,\n (full, start, oldSpan) => {\n if (operator) {\n return operator === '+'\n ? start + (parseInt(oldSpan) + newSpan)\n : start + (parseInt(oldSpan) - newSpan);\n }\n\n return start + newSpan;\n }\n );\n }\n\n protected addNewColumn(\n ref: HTMLElement,\n span: number,\n doc: Document\n ): void {\n const refIndex = getNodeIndex(ref);\n const siblings = Array.from(ref.parentElement.children);\n const colsAfter = siblings.slice(refIndex) as HTMLElement[];\n\n // add new column without resizing other columns if there's enough space left\n if (this.getTotalSpan(this.columns, doc) + span <= 12) {\n return ref.after(createColumnNode(span, doc));\n }\n\n // try to reduce the next column by one\n if (this.colWiderThan(1, colsAfter[0])) {\n this.resizeColumn(colsAfter[0], 1, '-');\n return ref.after(createColumnNode(span, doc));\n } else if (this.colWiderThan(1, ref)) {\n this.resizeColumn(ref, 1, '-');\n return ref.after(createColumnNode(span, doc));\n }\n\n // loop trough all columns after given one and\n // reduce the first one that's wider then one\n if (this.fitColumn(ref, colsAfter, span, doc)) {\n return;\n }\n\n // loop trough all columns before given one and\n // reduce the first one that's wider then one\n const colsBefore = siblings.slice(0, refIndex) as HTMLElement[];\n if (this.fitColumn(ref, colsBefore, span, doc)) {\n return;\n }\n }\n\n private fitColumn(\n ref: HTMLElement,\n columns: HTMLElement[],\n span: number,\n doc: Document\n ): boolean {\n for (const col of columns) {\n if (this.colWiderThan(1, col)) {\n this.resizeColumn(col, 1, '-');\n ref.after(createColumnNode(span, doc));\n return true;\n }\n }\n }\n\n private colWiderThan(span: number, node: HTMLElement) {\n if (this.isColumn(node)) {\n return getColumnSpan(node) > span;\n }\n }\n\n private isColumn(node: HTMLElement) {\n if (node?.className) {\n return node.className.indexOf('col-') > -1;\n }\n }\n\n private getTotalSpan(columns: Column[], doc: Document): number {\n const colIds = columns.map(c => c.id);\n let totalSpan = 0;\n findNodesById(colIds, doc).forEach(colNode => {\n totalSpan += getColumnSpan(colNode);\n });\n return totalSpan;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Container, Row} from './layout-panel-types';\nimport {getNodeId, getNodeIds} from '../../utils/get-node-id';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {\n ColumnEl,\n ContainerEl,\n LayoutEl,\n RowEl,\n} from '../../elements/definitions/grid';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {InsertNode} from '../../mutations/dom/insert-node';\nimport {createColumnNode} from './utils/create-column-node';\nimport {ApplyRowPreset} from '../../mutations/layout/apply-row-preset';\nimport {findNodeById} from '../../utils/find-nodes-by-id';\nimport {getRowColumns} from './utils/get-row-columns';\nimport {LivePreview} from '../../live-preview.service';\n\nconst CONTAINER_CLASS = '.container, .container-fluid';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutPanel {\n containers: Container[] = [];\n selectedRow: Row;\n selectedContainer: Container;\n\n constructor(\n private mutations: MutationsService,\n private state: BuilderStateService,\n private livePreview: LivePreview\n ) {}\n\n loadContainers() {\n this.containers = [];\n Array.from(\n this.state.previewDoc.querySelectorAll(CONTAINER_CLASS)\n ).forEach((node: HTMLElement) => {\n const rowIds = getNodeIds(node.querySelectorAll('.row'));\n this.containers.push({rows: rowIds, id: getNodeId(node)});\n });\n }\n\n createRow(parentId: string, index: number) {\n const row = this.state.previewDoc.createElement('div');\n row.appendChild(createColumnNode(12, this.state.previewDoc));\n row.classList.add('row');\n\n const mutation = new InsertNode(row, index, parentId);\n this.mutations.execute(mutation);\n this.livePreview.setSelectedContext(mutation.getNodeId());\n }\n\n createContainer(refId: string, index: number) {\n const row = this.state.previewDoc.createElement('div');\n row.appendChild(createColumnNode(12, this.state.previewDoc));\n row.classList.add('row');\n\n const container = this.state.previewDoc.createElement('div');\n container.classList.add('container');\n container.appendChild(row);\n\n const parentId = refId || getNodeId(this.state.previewDoc.body);\n const mutation = new InsertNode(container, index, parentId);\n this.mutations.execute(mutation);\n\n this.livePreview.setSelectedContext(mutation.getNodeId());\n }\n\n selectColumn(nodeId: string) {\n const node = findNodeById(nodeId, this.state.previewDoc);\n this.livePreview.setSelectedContext(node);\n this.scrollIntoView(node);\n }\n\n applyPreset(preset: number[]) {\n if (preset.join('+') !== this.selectedRow.preset.join('+')) {\n this.mutations.execute(\n new ApplyRowPreset(this.selectedRow.id, preset)\n );\n this.livePreview.setSelectedContext(this.selectedRow.id);\n }\n }\n\n selectActiveRowAndContainer() {\n if ( ! this.state.selected) return;\n const node = this.state.selected.node;\n const el = this.state.selected.el;\n let row: HTMLElement;\n let container: HTMLElement;\n\n if (!node || !(el instanceof LayoutEl)) return;\n\n if (el instanceof RowEl) {\n row = node;\n container = row.closest(CONTAINER_CLASS);\n } else if (el instanceof ColumnEl) {\n row = node.closest('.row');\n if (row) {\n container = row.closest(CONTAINER_CLASS);\n }\n } else if (el instanceof ContainerEl) {\n container = node;\n row = container.querySelector('.row');\n }\n\n if (this.selectedRow?.id !== getNodeId(row)) {\n this.selectRow(getNodeId(row));\n }\n\n if (this.selectedContainer?.id !== getNodeId(container)) {\n this.selectedContainer = this.containers.find(\n cont => cont.id === getNodeId(container)\n );\n }\n }\n\n selectRow(nodeId: string) {\n if (!nodeId) return;\n\n const node = findNodeById(nodeId, this.state.previewDoc);\n const columns = getRowColumns(node);\n const preset = columns.map(col => col.span);\n\n this.scrollIntoView(node);\n\n this.selectedRow = {id: nodeId, columns, preset};\n }\n\n private scrollIntoView(node: HTMLElement) {\n node?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n}\n","import {\n ArchitectElControl,\n ArchitectElement,\n EditableProp,\n ElControlType,\n} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\nimport {LayoutPanel} from '../../sidebar/layout-panel/layout-panel.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {BuilderSidebarPanel} from '../../sidebar/builder-sidebar-panel';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\n\nexport abstract class LayoutEl extends ArchitectElement {\n editActionName = 'Edit Layout';\n defaultInspectorPanel = BuilderSidebarPanel.Layout;\n specificity = 3;\n\n editAction(node: HTMLElement) {\n this.get(LayoutPanel).selectActiveRowAndContainer();\n this.get(BuilderStateService).inspectorPanel$.next(\n BuilderSidebarPanel.Layout\n );\n }\n}\n\nexport class ContainerEl extends LayoutEl {\n name = 'container';\n html = '<div class=\"container\"></div>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n category = 'layout';\n icon = 'crop-square';\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Type',\n type: ElControlType.Select,\n options: [\n {key: 'Default', value: 'container'},\n {key: 'Wide', value: 'container-fluid'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n ];\n\n matcher(node: HTMLElement) {\n return hasClass(node, 'container');\n }\n}\n\nexport class RowEl extends LayoutEl {\n name = 'row';\n html =\n '<section class=\"row\"><div class=\"col-md-4\"></div><div class=\"col-md-3\"></div><div class=\"col-md-5\"></div></section>';\n contentCategories = ['flow'];\n allowedEls = [ColumnEl];\n category = 'layout';\n icon = 'view-stream';\n matcher(node: HTMLElement) {\n return hasClass(node, 'row');\n }\n}\n\nexport class ColumnEl extends LayoutEl {\n name = 'column';\n html = '<div class=\"col-sm-6\"></div>';\n contentCategories = ['flow'];\n allowedContent = ['flow'];\n canEdit = [\n EditableProp.Text,\n EditableProp.Border,\n EditableProp.Margin,\n EditableProp.Padding,\n EditableProp.Attributes,\n ];\n matcher(node: HTMLElement) {\n for (let i = 0; i < node.classList.length; i++) {\n if (node.classList.item(i).match(/col-.*/)) {\n return true;\n }\n }\n return false;\n }\n}\n","import {\n ArchitectElControl,\n ArchitectElement,\n ArchitectTextEl,\n ElControlType,\n} from '../architect-element';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\n\nconst template = `<table class=\"table\">\n <thead>\n <tr>\n <th>#</th>\n <th>First Name</th>\n <th>Last Name</th>\n <th>Username</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>1</td>\n <td>Mark</td>\n <td>Otto</td>\n <td>@mdo</td>\n </tr>\n <tr>\n <td>2</td>\n <td>Jacob</td>\n <td>Thornton</td>\n <td>@fat</td>\n </tr>\n <tr>\n <td>3</td>\n <td>Larry</td>\n <td>the Bird</td>\n <td>@twitter</td>\n </tr>\n </tbody>\n</table>`;\n\nconst style = `\n.jumbotron {\n text-align: center;\n}\n\n.jumbotron p {\n margin: 20px 0 30px;\n}\n`;\n\nexport class TableEl extends ArchitectElement {\n name = 'table';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['coption', 'colgroup', 'thead', 'tbody', 'tfoot', 'tr'];\n category = 'typography';\n icon = 'border-all';\n specificity = 3;\n hiddenClasses = ['table'];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Type',\n type: ElControlType.Select,\n options: [\n {key: 'Basic', value: 'default'},\n {key: 'Striped', value: 'table-striped'},\n {key: 'Bordered', value: 'table-bordered'},\n {key: 'Hover', value: 'table-hover'},\n {key: 'Condensed', value: 'table-condensed'},\n {key: 'Responsive', value: 'table-responsive'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentType = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentType)\n );\n },\n }),\n ];\n matcher(node: HTMLElement) {\n return node.nodeName === 'TABLE';\n }\n}\n\nexport class TheadEl extends ArchitectTextEl {\n name = 'table head';\n html = '<tr>Table row content</tr>';\n contentCategories = ['thead'];\n allowedContent = ['tr'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'THEAD';\n }\n}\n\nexport class TbodyEl extends ArchitectTextEl {\n name = 'table body';\n html = '<tr>Table row content</tr>';\n contentCategories = ['tbody'];\n allowedContent = ['tr'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'TBODY';\n }\n}\n\nexport class TrEl extends ArchitectTextEl {\n name = 'table row';\n html = '<tr>Table row content</tr>';\n contentCategories = ['tr', 'th'];\n allowedContent = ['td'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'TR' || node.nodeName === 'TH';\n }\n}\n\nexport class TdEl extends ArchitectTextEl {\n name = 'table data cell';\n html = '<tr>Table data cell content</tr>';\n contentCategories = ['td'];\n allowedContent = ['flow'];\n matcher(node: HTMLElement) {\n return node.nodeName === 'TD';\n }\n}\n","import {\n ArchitectElControl,\n ArchitectElement,\n ElControlType\n} from '../architect-element';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\nimport {ModifyAttributes} from '../../mutations/attributes/modify-attributes';\n\nconst template = `<form method=\"POST\" action=\"default-form-handler\">\n <div class=\"control-group\">\n <div class=\"form-group floating-label-form-group controls mb-0 pb-2\">\n <label>Name</label>\n <input\n class=\"form-control\"\n id=\"name\"\n name=\"name\"\n type=\"text\"\n placeholder=\"Name\"\n required=\"required\"\n data-validation-required-message=\"Please enter your name.\"\n />\n </div>\n </div>\n <div class=\"control-group\">\n <div class=\"form-group floating-label-form-group controls mb-0 pb-2\">\n <label>Email Address</label>\n <input\n class=\"form-control\"\n id=\"email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"Email Address\"\n required=\"required\"\n data-validation-required-message=\"Please enter your email address.\"\n />\n </div>\n </div>\n <div class=\"control-group\">\n <div class=\"form-group floating-label-form-group controls mb-0 pb-2\">\n <label>Phone Number</label>\n <input\n class=\"form-control\"\n id=\"phone\"\n name=\"phone\"\n type=\"tel\"\n placeholder=\"Phone Number\"\n required=\"required\"\n data-validation-required-message=\"Please enter your phone number.\"\n />\n </div>\n </div>\n <div class=\"control-group\">\n <div class=\"form-group floating-label-form-group controls mb-0 pb-2\">\n <label>Message</label>\n <textarea\n class=\"form-control\"\n id=\"message\"\n name=\"message\"\n rows=\"5\"\n placeholder=\"Message\"\n required=\"required\"\n data-validation-required-message=\"Please enter a message.\"\n ></textarea>\n </div>\n </div>\n <div class=\"form-group\"><button class=\"btn btn-primary btn-xl\" type=\"submit\">Send</button></div>\n </form>`;\n\nexport class FormEl extends ArchitectElement {\n name = 'form';\n contentCategories = ['flow'];\n html = template;\n allowedContent = ['flow'];\n category = 'forms';\n icon = 'form-custom';\n specificity = 3;\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Layout',\n type: ElControlType.Select,\n options: [\n {key: 'Basic', value: 'default'},\n {key: 'Horizontal', value: 'form-horizonal'},\n {key: 'Inline', value: 'form-inline'},\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentSize = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentSize)\n );\n },\n }),\n new ArchitectElControl(this.injector, {\n label: 'Action',\n type: ElControlType.Input,\n defaultValue(node: HTMLFormElement) {\n return node.getAttribute('action') || 'default-form-handler';\n },\n onChange(node: HTMLFormElement, value: string) {\n this.get(MutationsService).execute(\n new ModifyAttributes(node, {\n action: value,\n })\n );\n },\n }),\n ];\n matcher(node: HTMLElement) {\n return node.nodeName === 'FORM';\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<header class=\"image-header\">\n<h3>Welcome to our studio!</h3>\n <h1>It's nice to meet you</h1>\n <p><a class=\"btn btn-primary btn-lg\" role=\"button\">Tell me more</a></p>\n</header>`;\n\nconst style = `\n.image-header {\n background-image: url(/builder/images/header-bg.jpg);\n background-position: center center;\n background-size: cover;\n text-align: center;\n padding: 300px 0 200px;\n color: #fff;\n}\n\n.image-header > h1 {\n font-size: 75px;\n font-weight: 700;\n margin-bottom: 50px;\n text-transform: uppercase;\n}\n\n.image-header > h3 {\n font-size: 40px;\n margin-bottom: 25px;\n font-style: italic;\n}\n\n.image-header > .btn-lg {\n padding: 20px 40px;\n font-size: 18px;\n}\n`;\n\nexport class ImageHeaderEl extends ArchitectElement {\n name = 'image header';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'image';\n specificity = 3;\n matcher(node: HTMLElement) {\n return hasClass(node, 'image-header');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"jumbotron\">\n<h1 class=\"display-4\">Hello, world!</h1>\n<p class=\"lead\">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>\n<hr class=\"my-4\">\n<p>It uses utility classes for typography and spacing to space content out within the larger container.</p>\n<a class=\"btn btn-primary btn-lg\" href=\"#\" role=\"button\">Learn more</a>\n</div>`;\n\nconst style = `\n.jumbotron {\n text-align: center;\n}\n\n.jumbotron p {\n margin: 20px 0 30px;\n}\n`;\n\nexport class JumbotronEl extends ArchitectElement {\n name = 'jumbotron';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'call-to-action';\n specificity = 3;\n hiddenClasses = ['jumbotron'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'jumbotron');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"user-profile\">\n<div class=\"col-md-8 col-lg-6\">\n<div class=\"well profile\">\n<div class=\"col-sm-12\">\n<div class=\"col-xs-12 col-sm-8\">\n<h2>Nicole Pearson</h2>\n<p><strong>About: </strong> Web Designer / UI. </p>\n<p><strong>Hobbies: </strong> Read, out with friends, listen to music, draw and learn new things. </p>\n<p><strong>Skills: </strong>\n<span class=\"label label-success\">html5</span>\n<span class=\"label label-success\">css3</span>\n<span class=\"label label-success\">jquery</span>\n<span class=\"label label-success\">bootstrap3</span>\n</p>\n</div>\n<div class=\"col-xs-12 col-sm-4 text-center\">\n<figure>\n<img src=\"http://www.localcrimenews.com/wp-content/uploads/2013/07/default-user-icon-profile.png\" alt=\"\" class=\"img-circle img-responsive\">\n<figcaption class=\"ratings\">\n<p>Ratings\n<a href=\"#\">\n<span class=\"fa fa-star\"></span>\n</a>\n<a href=\"#\">\n<span class=\"fa fa-star\"></span>\n</a>\n<a href=\"#\">\n<span class=\"fa fa-star\"></span>\n</a>\n<a href=\"#\">\n<span class=\"fa fa-star\"></span>\n</a>\n<a href=\"#\">\n<span class=\"fa fa-star-o\"></span>\n</a>\n</p>\n</figcaption>\n</figure>\n</div>\n</div>\n<div class=\"col-xs-12 divider text-center\">\n<div class=\"col-xs-12 col-sm-4 emphasis\">\n<h2><strong> 20,7K </strong></h2>\n<p><small>Followers</small></p>\n<button class=\"btn btn-success btn-block\"><span class=\"fa fa-plus-circle\"></span> Follow </button>\n</div>\n<div class=\"col-xs-12 col-sm-4 emphasis\">\n<h2><strong>245</strong></h2>\n<p><small>Following</small></p>\n<button class=\"btn btn-info btn-block\"><span class=\"fa fa-user\"></span> View Profile </button>\n</div>\n<div class=\"col-xs-12 col-sm-4 emphasis\">\n<h2><strong>43</strong></h2>\n<p><small>Snippets</small></p>\n<button class=\"btn btn-primary btn-block\"><span class=\"fa fa-gears\"></span> Options </button>\n</div>\n</div>\n</div>\n</div>\n</div>`;\n\nconst style = `\n.profile {\n min-height: 355px;\n display: inline-block;\n}\n.profile figcaption.ratings{\n margin-top:20px;\n}\n.profile figcaption.ratings a\n{ color:#f1c40f;\n font-size:11px;\n}\n.profile figcaption.ratings a:hover\n{ color:#f39c12;\n text-decoration:none;\n}\n.profile .divider {\n border-top:1px solid rgba(0,0,0,0.1);\n}\n.profile .emphasis {\n border-top: 4px solid transparent;\n}\n.profile .emphasis:hover {\n border-top: 4px solid #1abc9c;\n}\n.profile .emphasis h2 {\n margin-bottom:0;\n}\n.profile .label {\n font-weight: bold;\n padding: 3px 6px;\n font-size: 11.5px;\n}\n`;\n\nexport class UserProfileEl extends ArchitectElement {\n name = 'user profile';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'account-box';\n specificity = 3;\n hiddenClasses = ['profile'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'user-profile');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"row skills-list\">\n<div class=\"col-md-4\">\n <div>\n <img src=\"http://lorempixel.com/200/200/abstract/1/\" alt=\"Texto Alternativo\" class=\"img-circle img-thumbnail\">\n <h2>Webdesigner</h2>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua.\n </p>\n <a href=\"#\" class=\"btn btn-primary\" title=\"See more\">See works »</a>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div>\n <img src=\"http://lorempixel.com/200/200/abstract/2/\" alt=\"Texto Alternativo\" class=\"img-circle img-thumbnail\">\n <h2>Photographer</h2>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua.\n </p>\n <a href=\"#\" class=\"btn btn-primary\" title=\"See more\">See works »</a>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div>\n <img src=\"http://lorempixel.com/200/200/abstract/3/\" alt=\"Texto Alternativo\" class=\"img-circle img-thumbnail\">\n <h2>Copywriter</h2>\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua.\n </p>\n <a href=\"#\" class=\"btn btn-primary\" title=\"See more\">See works »</a>\n </div>\n </div>\n</div>`;\n\nconst style = `\n.skills-list {\n padding: 20px 0;\n text-align: center;\n}\n.skills-list > div > div{\n padding: 10px;\n border: 1px solid transparent;\n border-radius: 4px;\n transition: 0.2s;\n}\n.skills-list > div:hover > div{\n margin-top: -10px;\n border: 1px solid rgb(200, 200, 200);\n box-shadow: rgba(0, 0, 0, 0.1) 0px 5px 5px 2px;\n background: rgba(200, 200, 200, 0.1);\n transition: 0.5s;\n}\n\n.skills-list > div:hover img {\n border-radius: 50%;\n -webkit-transform: rotate(360deg);\n -moz-transform: rotate(360deg);\n -o-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n transform: rotate(360deg);\n}\n`;\n\nexport class SkillListEl extends ArchitectElement {\n name = 'skill list';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'build';\n specificity = 3;\n hiddenClasses = ['skills-list'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'skills-list');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"services-list\">\n<div class=\"row\">\n <div class=\"col-lg-3 col-md-6\">\n <div class=\"service-box\">\n <div class=\"service-icon\"><i class=\"fa fa-lightbulb-o\"></i></div>\n <h4>Generating ideas</h4>\n <p class=\"text-center\">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar velit nulla. Curabitur ullamcorper quis nisi nec aliquam. Quisque interdum efficitur augue.</p>\n </div>\n </div>\n\n <div class=\"col-lg-3 col-md-6\">\n <div class=\"service-box\">\n <div class=\"service-icon\"><i class=\"fa fa-keyboard-o\"></i></div>\n <h4>Prototype Model</h4>\n <p class=\"text-center\">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar velit nulla. Curabitur ullamcorper quis nisi nec aliquam. Quisque interdum efficitur augue.</p>\n </div>\n </div>\n\n <div class=\"col-lg-3 col-md-6\">\n <div class=\"service-box\">\n <div class=\"service-icon\"><i class=\"fa fa-code\"></i></div>\n <h4>Design and Code</h4>\n <p class=\"text-center\">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar velit nulla. Curabitur ullamcorper quis nisi nec aliquam. Quisque interdum efficitur augue.</p>\n </div>\n </div>\n\n <div class=\"col-lg-3 col-md-6\">\n <div class=\"service-box\">\n <div class=\"service-icon\"><i class=\"fa fa-rocket\"></i></div>\n <h4>Launching and Monitoring</h4>\n <p class=\"text-center\">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pulvinar velit nulla. Curabitur ullamcorper quis nisi nec aliquam. Quisque interdum efficitur augue.</p>\n </div>\n </div>\n</div>\n</div>`;\n\nconst style = `\n.services-list {\n text-align: center;\n background-color: #FCFCFC;\n padding: 30px;\n border: 1px solid #e0eded;\n}\n\n.services-list .service-box {\n background-color: #fff;\n border: 1px solid #e0eded;\n padding: 15px 0;\n}\n\n.services-list .service-icon {\n text-align: center;\n padding: 10px 0;\n}\n\n.services-list .fa {\n font-size: 64px;\n}\n`;\n\nexport class ServiceListEl extends ArchitectElement {\n name = 'service list';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'live-help';\n specificity = 3;\n hiddenClasses = ['services-list'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'services-list');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"row pricing-table\">\n <div class=\"col-sm-4\">\n <div class=\"panel panel-success\">\n <div class=\"panel-heading\">Basic</div>\n <div class=\"panel-body\">\n <h2>\n <div class=\"price\"><span class=\"dollar-sign\">$</span>5</div>\n <span class=\"time-period\">/ MO</span>\n </h2>\n </div>\n\n <ul class=\"list-group\">\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i> 10GB Storage</li>\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i>All Themes</li>\n <li class=\"list-group-item\"><i class=\"fa fa-times text-danger\"></i> Access to Tutorials</li>\n <li class=\"list-group-item\"><i class=\"fa fa-times text-danger\"></i> Auto Backup</li>\n <li class=\"list-group-item\"><i class=\"fa fa-times text-danger\"></i> Extended Security</li>\n </ul>\n\n <button class=\"btn btn-success\">sign up</button>\n </div>\n </div>\n <div class=\"col-sm-4\">\n <div class=\"panel panel-danger\">\n <div class=\"panel-heading\">Intermediate</div>\n <div class=\"panel-body\">\n <h2>\n <div class=\"price\"><span class=\"dollar-sign\">$</span>15</div>\n <span class=\"time-period\">/ MO</span>\n </h2>\n </div>\n\n <ul class=\"list-group\">\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i> 50GB Storage</li>\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i>All Themes</li>\n <li class=\"list-group-item\">\n <i class=\"fa fa-check text-success\"></i> Access to Tutorials\n </li>\n <li class=\"list-group-item\"><i class=\"fa fa-times text-success\"></i> Auto Backup</li>\n <li class=\"list-group-item\"><i class=\"fa fa-times text-success\"></i> Extended Security</li>\n </ul>\n\n <button class=\"btn btn-danger\">sign up</button>\n </div>\n </div>\n <div class=\"col-sm-4\">\n <div class=\"panel panel-info\">\n <div class=\"panel-heading\">Advanced</div>\n <div class=\"panel-body\">\n <h2>\n <div class=\"price\"><span class=\"dollar-sign\">$</span>99</div>\n <span class=\"time-period\">/ MO</span>\n </h2>\n </div>\n\n <ul class=\"list-group\">\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i> 100GB Storage</li>\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i>All Themes</li>\n <li class=\"list-group-item\">\n <i class=\"fa fa-check text-success\"></i> Access to Tutorials\n </li>\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i> Auto Backup</li>\n <li class=\"list-group-item\"><i class=\"fa fa-check text-success\"></i> Extended Security</li>\n </ul>\n\n <button class=\"btn btn-info\">sign up</button>\n </div>\n </div>\n</div>`;\n\nconst style = `\n.pricing-table .panel-heading {\n text-align: center;\n text-transform: uppercase;\n font-weight: bold;\n}\n\n.pricing-table .panel-body {\n background-color: #3F3F3F;\n color: #fff;\n text-align: center;\n}\n\n.pricing-table .panel-body .price {\n font-size: 40px;\n display: inline-block;\n}\n\n.pricing-table .price > .dollar-sign {\n vertical-align: super;\n font-size: 16px;\n}\n\n.pricing-table .time-period {\n color: #9f9f9f;\n font-size: 15px;\n font-weight: lighter;\n}\n\n.pricing-table .list-group {\n padding: 0 15px;\n}\n\n.pricing-table .list-group > .list-group-item {\n border-style: dotted;\n text-align: center;\n color: #808080;\n}\n\n.pricing-table .list-group-item > .fa {\n font-size: 13px;\n margin-right: 5px;\n}\n\n.pricing-table .btn {\n display: block;\n text-transform: uppercase;\n margin: 30px auto 20px;\n padding: 13px 35px 13px 35px;\n border-radius: 4px;\n}\n`;\n\nexport class PricingTableEl extends ArchitectElement {\n name = 'pricing table';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'monetization-on';\n specificity = 3;\n hiddenClasses = ['pricing-table'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'pricing-table');\n }\n}\n","import {\n ArchitectElControl,\n ArchitectElement,\n ElControlType\n} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ReplaceClass} from '../../mutations/attributes/replace-class';\n\nconst template = `<nav class=\"navbar navbar-expand-lg navbar-light bg-light\">\n<a class=\"navbar-brand\" href=\"#\">Architect</a>\n<button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n<span class=\"navbar-toggler-icon\"></span>\n</button>\n\n<div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">\n<ul class=\"navbar-nav mr-auto\">\n<li class=\"nav-item active\">\n<a class=\"nav-link\" href=\"#\">Home <span class=\"sr-only\">(current)</span></a>\n</li>\n<li class=\"nav-item\">\n<a class=\"nav-link\" href=\"#portfolio\">Portfolio</a>\n</li>\n<li class=\"nav-item\">\n<a class=\"nav-link\" href=\"#about\">About Us</a>\n</li>\n<li class=\"nav-item\">\n<a class=\"nav-link\" href=\"#team\">Team</a>\n</li>\n<li class=\"nav-item dropdown\">\n<a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"navbarDropdown\" role=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\nDropdown\n</a>\n<div class=\"dropdown-menu\" aria-labelledby=\"navbarDropdown\">\n<a class=\"dropdown-item\" href=\"#\">Action</a>\n<a class=\"dropdown-item\" href=\"#\">Another action</a>\n<div class=\"dropdown-divider\"></div>\n<a class=\"dropdown-item\" href=\"#\">Something else here</a>\n</div>\n</li>\n</ul>\n</div>\n</nav>`;\n\nexport class NavbarEl extends ArchitectElement {\n name = 'navbar';\n contentCategories = ['flow'];\n html = template;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'menu';\n specificity = 3;\n hiddenClasses = ['navbar'];\n controls = [\n new ArchitectElControl(this.injector, {\n label: 'Type',\n type: ElControlType.Select,\n options: [\n { key: 'default', value: 'default' },\n { key: 'fixed top', value: 'navbar-fixed-top' },\n ],\n defaultValue(node: HTMLElement) {\n const val = this.options.find(o =>\n node.classList.contains(o.value)\n );\n return (val || this.options[0]).value;\n },\n onChange(node: HTMLElement, value: string) {\n const currentType = this.options.find(o =>\n node.classList.contains(o.value)\n )?.value;\n this.get(MutationsService).execute(\n new ReplaceClass(node, value, currentType)\n );\n },\n }),\n ];\n matcher(node: HTMLElement) {\n return hasClass(node, 'navbar');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"media\">\n <a class=\"media-left\" href=\"#\">\n <img src=\"http://ironsummitmedia.github.io/startbootstrap-freelancer/img/profile.png\" />\n </a>\n <div class=\"media-body\">\n <h2 class=\"media-heading\">Media heading</h2>\n <p>\n Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin\n commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum\n nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n </p>\n <p>\n Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin\n commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum\n nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n </p>\n <p>\n Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin\n commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum\n nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n </p>\n </div>\n</div>`;\n\nexport class MediaObjectEl extends ArchitectElement {\n name = 'media object';\n contentCategories = ['flow'];\n html = template;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'perm-media';\n specificity = 3;\n hiddenClasses = ['media'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'media');\n }\n}\n","import {ArchitectElement} from '../architect-element';\nimport {hasClass} from '../../utils/has-class';\n\nconst template = `<div class=\"container\">\n <div class=\"row\">\n <div class=\"material-box col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <div class=\"box\">\n <div class=\"box-icon\">\n <span class=\"fa fa-4x fa-html5\"></span>\n </div>\n <div class=\"info\">\n <h4 class=\"text-center\">Title</h4>\n <p>\n Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti atque, tenetur quam\n aspernatur corporis at explicabo nulla dolore necessitatibus doloremque exercitationem\n sequi dolorem architecto perferendis quas aperiam debitis dolor soluta!\n </p>\n <a href=\"\" class=\"btn\">Link</a>\n </div>\n </div>\n </div>\n\n <div class=\"material-box col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <div class=\"box\">\n <div class=\"box-icon\">\n <span class=\"fa fa-4x fa-css3\"></span>\n </div>\n <div class=\"info\">\n <h4 class=\"text-center\">Title</h4>\n <p>\n Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corrupti atque, tenetur quam\n aspernatur corporis at explicabo nulla dolore necessitatibus doloremque exercitationem\n sequi dolorem architecto perferendis quas aperiam debitis dolor soluta!\n </p>\n <a href=\"\" class=\"btn\">Link</a>\n </div>\n </div>\n </div>\n </div>\n</div>`;\n\nconst style = `\n.material-box .box {\n border-radius: 3px;\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n padding: 10px 25px;\n text-align: right;\n display: block;\n margin-top: 60px;\n}\n.material-box .box-icon {\n background-color: #57a544;\n border-radius: 50%;\n display: table;\n height: 100px;\n margin: 0 auto;\n width: 100px;\n margin-top: -61px;\n}\n.material-box .box-icon span {\n color: #fff;\n display: table-cell;\n text-align: center;\n vertical-align: middle;\n}\n.material-box .info h4 {\n font-size: 26px;\n letter-spacing: 2px;\n text-transform: uppercase;\n}\n.material-box .info > p {\n color: #717171;\n font-size: 16px;\n padding-top: 10px;\n text-align: justify;\n}\n.material-box .info > a {\n background-color: #03a9f4;\n border-radius: 2px;\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n color: #fff;\n transition: all 0.5s ease 0s;\n}\n.material-box .info > a:hover {\n background-color: #0288d1;\n box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.16), 0 2px 5px 0 rgba(0, 0, 0, 0.12);\n color: #fff;\n transition: all 0.5s ease 0s;\n}\n`;\n\nexport class MaterialBoxEl extends ArchitectElement {\n name = 'material box';\n contentCategories = ['flow'];\n html = template;\n css = style;\n allowedContent = ['flow'];\n category = 'components';\n icon = 'photo-size-select-large';\n specificity = 3;\n hiddenClasses = ['material-box'];\n matcher(node: HTMLElement) {\n return hasClass(node, 'material-box');\n }\n}\n","import {EditableProp} from './architect-element';\nimport {BuilderSidebarPanel} from '../sidebar/builder-sidebar-panel';\n\nexport const ELEMENT_DEFAULTS = {\n name: 'Generic',\n canEdit: [\n EditableProp.Padding,\n EditableProp.Margin,\n EditableProp.Border,\n EditableProp.Text,\n EditableProp.Attributes,\n EditableProp.Shadow,\n EditableProp.Background,\n ],\n specificity: 0,\n canDrag: true,\n controls: [],\n resizable: true,\n contextMenu: true,\n contentCategories: ['flow'],\n allowedContent: ['flow'],\n allowedEls: [],\n hiddenClasses: [],\n defaultInspectorPanel: BuilderSidebarPanel.Inspector,\n};\n","import {Injectable, Injector} from '@angular/core';\nimport {Translations} from '@common/core/translations/translations.service';\nimport {ArchitectElement} from './architect-element';\nimport * as ArchitectElements from './definitions/all';\nimport {DivContainerEl} from './definitions/all';\nimport {ELEMENT_DEFAULTS} from './element-defaults';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {BehaviorSubject} from 'rxjs';\nimport {Settings} from '@common/core/config/settings.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Elements {\n elements: ArchitectElement[] = [];\n categories$ = new BehaviorSubject<string[]>([]);\n\n constructor(\n private i18n: Translations,\n private injector: Injector,\n private settings: Settings\n ) {}\n\n getDisplayName(el: ArchitectElement, node: HTMLElement) {\n if (!el) return;\n\n if (el instanceof DivContainerEl) {\n if (node.id) {\n return node.id;\n } else if (node.classList[0]) {\n return node.classList[0];\n } else {\n return el.name;\n }\n } else {\n return el.name;\n }\n }\n\n canInsert(parentNode: HTMLElement, child: ArchitectElement): boolean {\n if (parentNode.nodeName === 'BODY') return true;\n if (parentNode.nodeName === 'HTML') return false;\n\n const parentEl = this.match(parentNode)?.el;\n if (!parentEl) return;\n\n // check by architect element types\n if (parentEl.allowedEls.length) {\n return parentEl.allowedEls.some(el => child instanceof el);\n }\n\n // check by html content category\n if (parentEl.allowedContent && child.contentCategories) {\n return child.contentCategories.some(t =>\n parentEl.allowedContent.includes(t)\n );\n }\n }\n\n match(node: HTMLElement): {el: ArchitectElement; node: HTMLElement} | null {\n if (!node?.nodeName) return null;\n for (const el of this.elements) {\n const response = el.matcher?.(node);\n if (!!response) {\n return {el, node: response === true ? node : response};\n }\n }\n }\n\n async init() {\n const customElements = await this.fetchCustomEls();\n const categories: string[] = [];\n // first match custom elements, then bootstrap, then base ones\n this.elements = [...Object.values(ArchitectElements), ...customElements]\n .map((el: any) => {\n if (typeof el === 'function') {\n el = new el(this.injector);\n }\n el.name = this.i18n.t(el.name);\n if (el.category && !categories.includes(el.category)) {\n categories.push(el.category);\n }\n return el;\n })\n .sort((a, b) => (a.specificity < b.specificity ? 1 : -1));\n this.categories$.next(categories);\n }\n\n private async fetchCustomEls(): Promise<ArchitectElement[]> {\n const path = this.settings.getBaseUrl() + `/${AppHttpClient.prefix}/elements/custom`;\n\n try {\n const module = await import(/* webpackIgnore: true */ path);\n const components = [];\n Object.keys(module).forEach((key, index) => {\n if (!key.startsWith('style') && !key.startsWith('template')) {\n const component = new module[key](this.injector);\n component.html = module[`template${index}`];\n component.css = module[`style${index}`];\n Object.entries(ELEMENT_DEFAULTS).forEach(\n ([prop, value]) => {\n if (typeof component[prop] === 'undefined') {\n component[prop] = value;\n }\n }\n );\n components.push(component);\n }\n });\n return components;\n } catch (e) {\n return [];\n }\n }\n}\n","export const aceThemes = ['chrome', 'clouds', 'crimson_editor', 'tomorrow_night', 'dawn',\n 'dreamweaver', 'eclipse', 'github', 'solarized_light', 'textmate', 'tomorrow',\n 'xcode', 'kuroir', 'katzen_milch', 'ambiance', 'chaos', 'clouds_midnight', 'cobalt',\n 'idle_fingers', 'kr_theme', 'merbivore', 'merbivore_soft', 'mono_industrial', 'monokai',\n 'pastel_on_dark', 'solarized_light', 'terminal', 'tomorrow_night_blue', 'tomorrow_night_bright',\n 'tomorrow_night_80s', 'twilight', 'vibrant_ink'];","<div\n 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\n name=\"editor-theme\"\n id=\"editor-theme\"\n [(ngModel)]=\"activeEditorTheme\"\n (ngModelChange)=\"useTheme(activeEditorTheme)\"\n >\n <option *ngFor=\"let theme of editorThemes\" [ngValue]=\"theme\">{{ theme }}</option>\n </select>\n </div>\n\n <div class=\"type-buttons\">\n <button\n type=\"button\"\n (click)=\"switchType('css')\"\n [class.active]=\"activeTypeIs('css')\"\n mat-button\n >\n CSS\n </button>\n <button type=\"button\" (click)=\"switchType('js')\" [class.active]=\"activeTypeIs('js')\" mat-button>\n JS\n </button>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" mat-icon-button (click)=\"closeEditor()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"editor-container\">\n <div class=\"editor\" #editor></div>\n</div>\n\n<div class=\"footer\">\n <button type=\"button\" mat-button (click)=\"closeEditor()\" trans>Close</button>\n <button type=\"button\" mat-raised-button color=\"accent\" (click)=\"saveCustomCode()\" trans>\n Save\n </button>\n</div>\n","import {\n Component,\n ElementRef,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {aceThemes} from './ace-themes';\nimport {LazyLoaderService} from '@common/core/utils/lazy-loader.service';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {ActiveProject} from '../../projects/active-project';\nimport {BehaviorSubject} from 'rxjs';\nimport {randomString} from '@common/core/utils/random-string';\n\ndeclare let ace: any;\n\n@Component({\n selector: 'code-editor',\n templateUrl: './code-editor.component.html',\n styleUrls: ['./code-editor.component.scss'],\n})\nexport class CodeEditorComponent implements OnInit, OnDestroy {\n @ViewChild('editor', {static: true}) editorEl: ElementRef;\n\n private loading$ = new BehaviorSubject(false);\n\n private editor;\n activeEditorTheme = 'chrome';\n editorThemes = aceThemes;\n private activeEditor: 'css' | 'js' = 'css';\n\n private content = {\n css: '',\n js: '',\n };\n\n constructor(\n private lazyLoader: LazyLoaderService,\n private state: BuilderStateService,\n private activeProject: ActiveProject,\n @Inject(OverlayPanelRef) @Optional() public overlayRef: OverlayPanelRef\n ) {}\n\n ngOnInit() {\n this.initEditor().then(() => {\n this.content.css = this.state.project$.value.css;\n this.content.js = this.state.project$.value.js;\n this.updateEditorContents(this.activeEditor);\n });\n }\n\n ngOnDestroy() {\n this.editor && this.editor.destroy();\n }\n\n useTheme(name: string) {\n this.editor.setTheme('ace/theme/' + name);\n }\n\n switchType(name: 'css' | 'js') {\n this.activeEditor = name;\n this.changeEditorMode(name);\n this.updateEditorContents(name);\n }\n\n private updateEditorContents(type: 'css' | 'js') {\n if (type === 'css') {\n this.setEditorValue(this.content.css);\n } else if (type === 'js') {\n this.setEditorValue(this.content.js);\n }\n }\n\n private setEditorValue(value: string) {\n if (this.editor && this.editor.getValue() !== value) {\n this.editor.setValue(value, -1);\n }\n }\n\n activeTypeIs(name: 'css' | 'js') {\n return this.activeEditor === name;\n }\n\n closeEditor() {\n this.overlayRef.close();\n }\n\n private initEditor(language: 'js' | 'css' = 'css') {\n this.loading$.next(true);\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$.next(false);\n\n this.editor.on('change', () => {\n this.content[this.activeEditor] = this.editor.getValue();\n });\n });\n }\n\n private changeEditorMode(mode: 'js' | '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 async saveCustomCode() {\n this.loading$.next(true);\n await this.activeProject.save(false, {\n css: this.content.css,\n js: this.content.js,\n });\n this.reloadAssetsInBuilder();\n this.loading$.next(false);\n this.closeEditor();\n }\n\n private reloadAssetsInBuilder() {\n const cssEl = this.state.previewDoc.querySelector(\n '#custom-css'\n ) as HTMLLinkElement;\n const cssUrl = new URL(cssEl.href);\n cssEl.href = `${cssUrl.origin}${cssUrl.pathname}?${randomString(8)}`;\n\n const jsEl = this.state.previewDoc.querySelector(\n '#custom-js'\n ) as HTMLScriptElement;\n const jsUrl = new URL(jsEl.src);\n jsEl.src = `${jsUrl.origin}${jsUrl.pathname}?${randomString(8)}`;\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {CodeEditorComponent} from './code-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 CodeEditor {\n public overlayRef: OverlayPanelRef<CodeEditorComponent>;\n private origin: ElementRef;\n\n constructor(\n private overlayPanel: OverlayPanel,\n private breakpoints: BreakpointsService\n ) {}\n\n toggle() {\n if (this.overlayRef && this.overlayRef.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open() {\n if (this.overlayRef && this.overlayRef.isOpen()) {\n return;\n }\n\n const rect = document\n .querySelector('live-preview')\n .getBoundingClientRect();\n const width = rect.width - 50;\n const height = rect.height - 30;\n\n this.overlayRef = this.overlayPanel.open<CodeEditorComponent>(\n CodeEditorComponent,\n {\n position: [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 15,\n offsetY: 15,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: 15,\n offsetY: 15,\n },\n ],\n mobilePosition: 'center',\n hasBackdrop: this.breakpoints.isMobile$.value,\n width,\n height,\n origin: this.origin,\n }\n );\n }\n\n close() {\n if (!this.overlayRef) return;\n this.overlayRef.close();\n this.overlayRef = null;\n }\n\n setOrigin(origin: ElementRef) {\n this.origin = origin;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {fromEvent, Subscription} from 'rxjs';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {skip} from 'rxjs/operators';\nimport {getScrollTop} from '../../utils/get-scroll-top';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LivePreviewScroller {\n private scrollDownTimeout;\n private scrollUpTimeout;\n private previewHeight: number;\n private wheelSub: Subscription;\n\n constructor(private state: BuilderStateService) {\n this.state.dragging$.pipe(skip(1)).subscribe(isDragging => {\n if (isDragging) {\n this.bindMouseWheel();\n } else {\n this.unbindMouseWheel();\n this.stopScrolling();\n }\n });\n }\n\n scroll(y: number) {\n const scrollTop = getScrollTop(this.state.previewDoc);\n const pointY = y + scrollTop;\n\n if (!this.previewHeight) {\n this.previewHeight = this.state.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 stopScrolling() {\n clearInterval(this.scrollDownTimeout);\n return clearInterval(this.scrollUpTimeout);\n }\n\n bindMouseWheel() {\n if (this.wheelSub) return;\n this.wheelSub = fromEvent(window, 'wheel').subscribe(\n (e: WheelEvent) => {\n this.state.previewDoc.documentElement.scrollTop += e.deltaY;\n }\n );\n }\n\n unbindMouseWheel() {\n this.wheelSub?.unsubscribe();\n this.wheelSub = null;\n }\n\n private scrollFrameDown() {\n clearInterval(this.scrollDownTimeout);\n return (this.scrollDownTimeout = setInterval(() => {\n return this.setScrollTop(getScrollTop(this.state.previewDoc) + 40);\n }, 40));\n }\n\n private scrollFrameUp() {\n clearInterval(this.scrollUpTimeout);\n return (this.scrollUpTimeout = setInterval(() => {\n return this.setScrollTop(getScrollTop(this.state.previewDoc) - 40);\n }, 40));\n }\n\n private setScrollTop(newScrollTop: number) {\n newScrollTop = Math.max(0, newScrollTop);\n this.state.previewDoc.body.scrollTop = newScrollTop;\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 {\n Component,\n HostBinding,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {MatTabChangeEvent, MatTabGroup} from '@angular/material/tabs';\nimport {ContextBoxes} from '../../live-preview/context-box/context-boxes.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {BuilderBreakpoint} from './builder-breakpoint';\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(\n 'true <=> false',\n animate('225ms cubic-bezier(0.4,0.0,0.2,1)')\n ),\n ]),\n ],\n})\nexport class DeviceSwitcherComponent {\n @ViewChild('tabs', {static: true}) tabs: MatTabGroup;\n @HostBinding('@toggleAnimation') private visible = false;\n\n selectedIndex = 3;\n\n constructor(\n private state: BuilderStateService,\n private contextBoxes: ContextBoxes\n ) {}\n\n toggleVisibility() {\n this.visible = !this.visible;\n }\n\n switchDevice(e: MatTabChangeEvent) {\n this.selectedIndex = e.index;\n this.state.breakpoint = this.getWidthFromIndex(e.index);\n this.contextBoxes.hideBoxes();\n }\n\n getWidthFromIndex(index: number): BuilderBreakpoint {\n switch (index) {\n case 0:\n return BuilderBreakpoint.Phone;\n case 1:\n return BuilderBreakpoint.Tablet;\n case 2:\n return BuilderBreakpoint.Laptop;\n case 3:\n return BuilderBreakpoint.Desktop;\n }\n }\n}\n","export function coordsAboveNode(\n node: HTMLElement,\n x: number,\n y: number\n): boolean {\n if (node.nodeName === '#text') return;\n\n const offset = node.getBoundingClientRect();\n const width = node.offsetWidth;\n const height = node.offsetHeight;\n\n const box = [\n [offset.left, offset.top], // top left\n [offset.left + width, offset.top], // top right\n [offset.left + width, offset.top + height], // bottom right\n [offset.left, offset.top + height], // bottom left\n ];\n\n const beforePointY = box[0][1];\n const beforePointX = box[0][0];\n\n if (y < box[2][1]) {\n return y < beforePointY || x < beforePointX;\n }\n\n // x horizontal, y vertical\n\n return false;\n}\n","import {AfterContentInit, Directive, ElementRef, NgZone} from '@angular/core';\nimport {LivePreview} from '../../live-preview.service';\nimport {Elements} from '../../elements/elements.service';\nimport {LivePreviewScroller} from './live-preview-scroller';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {getNodeIndex} from '../../utils/get-node-index';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {ActiveProject} from '../../projects/active-project';\nimport {ContextBoxes} from '../context-box/context-boxes.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {coordsAboveNode} from '../../utils/coords-above-node';\n\nexport const DRAG_EL_CLASS = 'ar-drag-el';\nexport const BUILDER_DRAG_HANDLE_CLASS = 'builder-drag-handle';\n\n@Directive()\nexport abstract class BaseDragAndDrop implements AfterContentInit {\n protected previewOffset: number;\n protected draggingCol = false;\n\n protected oldIndex: number;\n protected oldParent: string;\n protected newIndex: number;\n protected newParent: string;\n\n constructor(\n protected livePreview: LivePreview,\n protected mutations: MutationsService,\n protected elements: Elements,\n protected zone: NgZone,\n protected directiveHost: ElementRef<HTMLElement>,\n protected activeProject: ActiveProject,\n protected contextBoxes: ContextBoxes,\n protected scroller: LivePreviewScroller,\n protected state: BuilderStateService,\n protected el: ElementRef<HTMLElement>\n ) {}\n\n ngAfterContentInit() {\n this.zone.runOutsideAngular(() => {\n this.initHammer();\n });\n }\n\n protected sortColumns?(node: HTMLElement, e: HammerInput);\n protected abstract setDragElement(e: HammerInput);\n protected abstract executeMutation();\n protected abstract getHammerElement(): HTMLElement;\n\n protected initHammer() {\n const hammer = new Hammer.Manager(this.getHammerElement());\n const pan = new Hammer.Pan({\n direction: Hammer.DIRECTION_ALL,\n threshold: 0,\n });\n hammer.add([pan]);\n hammer.on('panstart', e => this.onDragStart(e));\n hammer.on('panmove', e => this.onDrag(e));\n hammer.on('panend', e => this.onDragEnd(e));\n }\n\n protected onDragStart(e: HammerInput) {\n if (\n !this.state.previewDoc.body ||\n !e.target.closest('.' + BUILDER_DRAG_HANDLE_CLASS)\n ) {\n return;\n }\n\n this.previewOffset =\n this.state.previewContainer.getBoundingClientRect().x;\n\n this.contextBoxes.hideBoxes();\n this.setDragElement(e);\n this.draggingCol = this.state.dragData.el.name === 'column';\n\n this.oldIndex = getNodeIndex(this.state.dragData.node);\n this.oldParent = getNodeId(this.state.dragData.node?.parentElement);\n\n this.zone.run(() => this.state.dragging$.next(true));\n\n if (!this.draggingCol) {\n this.state.dragData.node.classList.add(DRAG_EL_CLASS);\n }\n }\n\n protected onDrag(e: HammerInput) {\n if (!this.state.dragging$.value) return;\n const x = e.center.x;\n const y = e.center.y;\n\n this.state.dragHelper.reposition(y, x);\n\n // if we're not dragging over live preview yet, bail\n if (x <= this.previewOffset) return;\n\n const under = this.state.previewDoc.elementFromPoint(\n x - this.previewOffset,\n y\n ) as HTMLElement;\n\n this.scroller.scroll(y);\n\n if (this.draggingCol) {\n return this?.sortColumns(under, e);\n } else {\n return this.repositionDropHelper(under, x - this.previewOffset, y);\n }\n }\n\n protected onDragEnd(e: HammerInput) {\n if (!this.state.dragging$.value) return;\n this.zone.run(() => this.state.dragging$.next(false));\n\n // make sure node was actually dragged into builder from inspector\n const shouldMutate: boolean =\n this.newIndex > -1 &&\n this.newIndex !== this.oldIndex &&\n !!this.newParent;\n\n if (this.state.dragData && !this.draggingCol) {\n this.state.dragData.node.classList.remove(DRAG_EL_CLASS);\n if (shouldMutate) {\n this.executeMutation();\n }\n }\n\n this.zone.run(() => {\n this.livePreview.setSelectedContext(\n getNodeId(this.state.dragData.node)\n );\n });\n }\n\n protected repositionDropHelper(node: HTMLElement, x: number, y: number) {\n if (!node) return;\n\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\n for (let i = 0, len = node.children.length; i < len; i++) {\n const child = node.children[i] as HTMLElement;\n if (\n coordsAboveNode(child, x, y) &&\n this.elements.canInsert(node, this.state.dragData.el)\n ) {\n this.newParent = getNodeId(node);\n this.moveDropHelper(child, 'above');\n return;\n }\n }\n\n const rect = node.getBoundingClientRect();\n const relativeY = y - rect.top;\n // if y is within element - 5px at top and bottom\n const cursorInCenter = relativeY > 5 && relativeY < rect.height - 5;\n\n // insert into the node, if it's empty\n if (\n node.childElementCount === 0 &&\n cursorInCenter &&\n this.elements.canInsert(node, this.state.dragData.el)\n ) {\n this.newParent = getNodeId(node);\n this.moveDropHelper(node, 'inside');\n return;\n }\n\n // insert above or below the node\n if (\n this.elements.canInsert(node.parentElement, this.state.dragData.el)\n ) {\n this.newParent = getNodeId(node.parentElement);\n const cursorInTopHalfOfNode = relativeY < rect.height / 2;\n if (cursorInTopHalfOfNode) {\n this.moveDropHelper(node, 'above');\n } else {\n this.moveDropHelper(node, 'below');\n }\n }\n }\n\n protected moveDropHelper(\n node: HTMLElement,\n position: 'below' | 'above' | 'inside'\n ) {\n const box = node.getBoundingClientRect();\n const helper = this.state.dropHelper;\n const parent = node.parentElement;\n helper.style.left = box.left + 'px';\n helper.style.width = box.width + 'px';\n\n if (position === 'inside') {\n helper.style.top = box.top + box.height / 2 + 'px';\n helper.classList.add('arrow-top');\n helper.classList.add('arrow-bottom');\n this.newIndex = 0;\n } else if (position === 'above') {\n helper.style.top = box.top + 'px';\n helper.classList.add('arrow-top');\n helper.classList.remove('arrow-bottom');\n this.newIndex = getNodeIndex(node);\n } else {\n helper.style.top = box.top + box.height + 'px';\n helper.classList.add('arrow-bottom');\n helper.classList.remove('arrow-top');\n this.newIndex = getNodeIndex(node) + 1;\n }\n\n // check if we're not trying to drop a node inside its child or itself\n const dragNode = this.state.dragData.node;\n if (\n dragNode === node ||\n dragNode === parent ||\n dragNode.contains(parent)\n ) {\n this.newIndex = null;\n this.newParent = null;\n }\n }\n}\n","import {ContentChildren, Directive, ElementRef, QueryList} from '@angular/core';\nimport {BaseDragAndDrop} from './base-drag-and-drop';\nimport {nodeFromString} from '../../utils/fragment-from-string';\nimport {InsertNode} from '../../mutations/dom/insert-node';\nimport {reloadAsset} from '../../utils/reload-asset';\n\n@Directive({\n selector: '[dragElFromSidebarToPreview]',\n})\nexport class DragElFromSidebarToPreviewDirective extends BaseDragAndDrop {\n @ContentChildren('dragElement') dragElements: QueryList<ElementRef>;\n\n protected setDragElement(e: HammerInput) {\n const name = (e.target.closest('.element') as HTMLElement).dataset.name;\n const element = this.elements.elements.find(el => el.name === name);\n const node = nodeFromString(element.html);\n this.state.dragData = {node, el: element};\n }\n\n protected getHammerElement() {\n return this.el.nativeElement;\n }\n\n protected executeMutation() {\n this.mutations.execute(\n new InsertNode(\n this.state.dragData.node,\n this.newIndex,\n this.newParent\n )\n );\n\n if (this.state.dragData.el.css) {\n this.activeProject\n .save(false, {custom_element_css: this.state.dragData.el.css})\n .then(() => {\n reloadAsset('#custom-elements-css', this.state.previewDoc);\n });\n }\n }\n}\n","import {randomString} from '@common/core/utils/random-string';\n\nexport function reloadAsset(selector: string, doc: Document) {\n const link = doc.querySelector(selector);\n const oldHref = link.getAttribute('href').split('?')[0];\n const newHref = `${oldHref}?=${randomString(8)}`;\n link.setAttribute('href', newHref);\n}\n","<section class=\"categories\" dragElFromSidebarToPreview>\n <mat-accordion>\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngFor=\"let category of elements.categories$ | async; index as index\"\n >\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\n class=\"element builder-drag-handle\"\n *ngFor=\"let element of getElementsForCategory(category)\"\n [attr.data-name]=\"element.name\"\n >\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","import {\n ChangeDetectionStrategy,\n Component,\n ViewChild,\n ViewEncapsulation,\n} 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 constructor(public elements: Elements) {}\n\n getElementsForCategory(name: string) {\n return this.elements.elements.filter(el => el.category === name);\n }\n}\n","export enum SpacingType {\n Padding = 'padding',\n Margin = 'margin',\n BorderWidth = 'borderWith',\n BorderRadius = 'borderRadius',\n}\n","import {BaseMutation} from '../base-mutation';\n\nexport class SetIdAttribute extends BaseMutation {\n static historyName = 'Change ID';\n changes: {new: string; old: string};\n constructor(protected el: HTMLElement, newId: string) {\n super(el);\n this.changes.new = newId;\n }\n\n protected onInit() {\n this.changes.old = this.el.id;\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.setId(doc, this.changes.new);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.setId(doc, this.changes.old);\n }\n\n protected setId(doc: Document, newId: string) {\n const el = this.findEl(doc);\n if (el.id !== newId) {\n el.id = newId;\n return true;\n }\n }\n}\n","import {BaseMutation} from '../base-mutation';\nimport {ArchitectElement} from '../../elements/architect-element';\n\nexport class SyncElClasses extends BaseMutation {\n static historyName = 'Synced classes';\n changes: {new: string[]; old: string[]};\n constructor(\n protected node: HTMLElement,\n protected el: ArchitectElement,\n classes: string[]\n ) {\n super(node);\n this.changes.new = classes;\n }\n\n protected onInit() {\n this.changes.old = Array.from(this.node.classList);\n }\n\n protected executeMutation(doc: Document): boolean {\n return this.syncClasses(doc, this.changes.new);\n }\n\n protected undoMutation(doc: Document): boolean {\n return this.syncClasses(doc, this.changes.old);\n }\n\n protected syncClasses(doc: Document, classes: string[]) {\n const el = this.findEl(doc);\n if (classes.join(' ') !== el.className) {\n el.classList.forEach(className => {\n if (!isInternalClass(className, this.el)) {\n el.classList.remove(className);\n }\n });\n el.classList.add(...classes);\n return true;\n }\n }\n}\n\nexport function isInternalClass(className: string, el: ArchitectElement) {\n // display utility class\n if (className.indexOf('d-') > -1) return true;\n // column utility class\n if (className.indexOf('col-') > -1) return true;\n return (el.hiddenClasses || []).includes(className);\n}\n","import {BaseMutation} from '../base-mutation';\n\nexport class ChangeVisibility extends BaseMutation {\n static historyName = 'Replaced class';\n constructor(\n protected el: HTMLElement,\n protected visibility: Record<string, boolean>\n ) {\n super(el);\n }\n\n protected executeMutation(doc: Document): boolean {\n const el = this.findEl(doc);\n\n // sm will have a different class on bootstrap, need to set it separately\n if (!this.visibility.sm) {\n el.classList.add('d-none');\n } else {\n el.classList.remove('d-none');\n }\n\n const allVisible = Object.values(this.visibility).every(v => v);\n const allHidden = Object.values(this.visibility).every(v => !v);\n\n Object.keys(this.visibility)\n .filter(key => key !== 'sm')\n .forEach(key => {\n // remove all visibility related classes (except \"d-none\")\n if (allVisible || allHidden) {\n el.classList.remove(`d-${key}-block`);\n el.classList.remove(`d-${key}-none`);\n } else {\n // set classes for each breakpoint separately\n if (this.visibility[key]) {\n el.classList.add(`d-${key}-block`);\n el.classList.remove(`d-${key}-none`);\n } else {\n el.classList.add(`d-${key}-none`);\n el.classList.remove(`d-${key}-block`);\n }\n }\n });\n\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n return false;\n }\n}\n","<ng-container [formGroup]=\"form\">\n <div class=\"input-container\" *ngFor=\"let control of controls\">\n <ng-container [ngSwitch]=\"control.type\">\n <ng-container *ngSwitchCase=\"controlType.Select\">\n <label [for]=\"control.label\">{{ control.label }}</label>\n <select [id]=\"control.label\" [formControlName]=\"control.label\">\n <option [value]=\"option.value\" *ngFor=\"let option of control.options\">\n {{ option.key }}\n </option>\n </select>\n </ng-container>\n <ng-container *ngSwitchCase=\"controlType.Input\">\n <label [for]=\"control.label\">{{ control.label }}</label>\n <input\n [type]=\"control.inputType\"\n min=\"0\"\n [id]=\"control.label\"\n [formControlName]=\"control.label\"\n />\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {\n ArchitectElControlConfig,\n ElControlType,\n} from '../../../../elements/architect-element';\nimport {skip, takeUntil} from 'rxjs/operators';\nimport {BuilderStateService} from '../../../../builder-state.service';\n\n@Component({\n selector: 'element-controls',\n templateUrl: './element-controls.component.html',\n styleUrls: ['./element-controls.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElementControlsComponent implements OnInit {\n form = this.fb.group({});\n controls: ArchitectElControlConfig[];\n controlType = ElControlType;\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private state: BuilderStateService\n ) {}\n\n ngOnInit() {\n this.state.selected$.subscribe(context => {\n this.form = this.fb.group({});\n if (context) {\n this.controls = context.el.controls;\n this.controls.forEach(control => {\n this.createControl(control);\n });\n }\n this.cd.markForCheck();\n });\n }\n\n private createControl(config: ArchitectElControlConfig) {\n const defaultValue =\n typeof config.defaultValue === 'function'\n ? config.defaultValue(this.state.selected.node)\n : config.defaultValue;\n const control = this.fb.control(defaultValue);\n this.form.addControl(config.label, control);\n control.valueChanges\n .pipe(takeUntil(this.state.selected$.pipe(skip(1))))\n .subscribe(value => {\n config.onChange(this.state.selected.node, value);\n });\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {LivePreview} from '../../../live-preview.service';\nimport {FormControl} from '@angular/forms';\nimport {MutationsService} from '../../../mutations/mutations.service';\nimport {SetIdAttribute} from '../../../mutations/attributes/set-id-attribute';\nimport {\n isInternalClass,\n SyncElClasses,\n} from '../../../mutations/attributes/sync-el-classes';\nimport {ChangeVisibility} from '../../../mutations/attributes/change-visibility';\nimport {BuilderStateService} from '../../../builder-state.service';\n\n@Component({\n selector: 'attributes-panel',\n templateUrl: './attributes-panel.component.html',\n styleUrls: ['./attributes-panel.component.scss'],\n})\nexport class AttributesPanelComponent implements OnInit {\n visibility: Record<string, boolean> = {\n sm: true,\n md: true,\n lg: true,\n xl: true,\n };\n\n id: string;\n classControl = new FormControl([]);\n\n constructor(\n private livePreview: LivePreview,\n private mutations: MutationsService,\n private state: BuilderStateService\n ) {}\n\n ngOnInit() {\n this.classControl.valueChanges.subscribe(value => {\n this.mutations.execute(\n new SyncElClasses(\n this.state.selected.node,\n this.state.selected.el,\n value\n )\n );\n });\n\n this.state.selected$.subscribe(() => {\n this.onElementSelected();\n });\n }\n\n changeElId(id: string) {\n this.mutations.execute(\n new SetIdAttribute(this.state.selected.node, id)\n );\n }\n\n changeVisibility(size: string) {\n this.visibility[size] = !this.visibility[size];\n this.mutations.execute(\n new ChangeVisibility(this.state.selected.node, this.visibility),\n {skipUndoStack: true}\n );\n }\n\n private onElementSelected() {\n if (!this.state.selected?.node?.classList) return;\n\n // set element classes\n this.classControl.setValue(\n Array.from(this.state.selected.node.classList).filter(\n c => !isInternalClass(c, this.state.selected.el)\n ),\n {emitEvent: false}\n );\n\n // set element id\n this.id = this.state.selected.node.id;\n\n // set 'bootstrap' visibility\n if (this.state.selected.node.classList.contains('d-none')) {\n Object.keys(this.visibility).forEach(key => {\n const className = key === 'sm' ? 'd-none' : `d-${key}-none`;\n this.visibility[key] =\n !this.state.selected.node.classList.value.includes(\n className\n );\n });\n }\n }\n}\n","<div class=\"visibility-controls\">\n <button\n mat-icon-button\n (click)=\"changeVisibility('sm')\"\n [class.active]=\"!visibility.sm\"\n [matTooltip]=\"(!visibility.sm ? 'Show on mobile' : 'Hide on mobile') | trans\"\n >\n <mat-icon svgIcon=\"phone-android\"></mat-icon>\n </button>\n <button\n mat-icon-button\n (click)=\"changeVisibility('md')\"\n [class.active]=\"!visibility.md\"\n [matTooltip]=\"(!visibility.md ? 'Show on tablet' : 'Hide on tablet') | trans\"\n >\n <mat-icon svgIcon=\"tablet-android\"></mat-icon>\n </button>\n <button\n mat-icon-button\n (click)=\"changeVisibility('lg')\"\n [class.active]=\"!visibility.lg\"\n [matTooltip]=\"(!visibility.lg ? 'Show on laptop' : 'Hide on laptop') | trans\"\n >\n <mat-icon svgIcon=\"laptop-chromebook\"></mat-icon>\n </button>\n <button\n mat-icon-button\n (click)=\"changeVisibility('xl')\"\n [class.active]=\"!visibility.xl\"\n [matTooltip]=\"(!visibility.xl ? 'Show on desktop' : 'Hide on desktop') | trans\"\n >\n <mat-icon svgIcon=\"desktop-windows\"></mat-icon>\n </button>\n</div>\n\n<div class=\"inputs\">\n <element-controls></element-controls>\n\n <div class=\"input-container\">\n <label for=\"id\" trans>Css ID</label>\n <input type=\"text\" name=\"id\" id=\"id\" [(ngModel)]=\"id\" (ngModelChange)=\"changeElId($event)\" />\n </div>\n\n <div class=\"input-container\">\n <label for=\"css-class\" trans>Css Class</label>\n <chip-input id=\"css-class\" [formControl]=\"classControl\"></chip-input>\n </div>\n</div>\n","import {CssStyle} from './css-style';\n\nexport type CssKey = keyof CssStyle;\nexport type CssValue = string;\n\nexport const DEFAULT_CSS_VALUES: Partial<Record<CssKey, CssValue>> = {\n backgroundRepeat: 'repeat',\n backgroundPosition: '0% 0%',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n backgroundAttachment: 'scroll',\n backgroundSize: 'auto',\n backgroundImage: 'none',\n color: null,\n\n // text styles\n fontStyle: 'normal',\n textAlign: 'start',\n textDecoration: 'none solid rgba(0, 0, 0, 0.87)',\n textDecorationLine: 'none',\n\n // shadow\n boxShadow: 'none',\n textShadow: 'none',\n\n // border\n borderColor: 'rgba(0, 0, 0, 0.87)',\n borderStyle: 'none',\n borderRadius: '0px',\n borderWidth: '0px',\n};\n","import {BaseMutation} from '../base-mutation';\nimport {CssKey, CssValue, DEFAULT_CSS_VALUES} from './default-css-values';\nimport {CssStyle} from './css-style';\nimport {styleEquals} from '../../utils/style-equals';\n\nexport abstract class SetStyle extends BaseMutation {\n changes: {new: CssStyle; old: CssStyle};\n constructor(newProps: CssStyle = {}, protected el: HTMLElement) {\n super(el);\n this.changes.new = newProps;\n }\n\n protected onInit() {\n const el = this.findEl(this.pageDoc);\n this.changes.old = {};\n Object.keys(this.changes.new).forEach(prop => {\n this.changes.old[prop] = el.style[prop];\n });\n }\n\n protected executeMutation(doc: Document) {\n return this.setStyleProps(doc, this.changes.new);\n }\n\n protected undoMutation(doc: Document) {\n return this.setStyleProps(doc, this.changes.old);\n }\n\n protected setStyleProps(doc: Document, props: CssStyle) {\n const el = this.findEl(doc);\n if (el) {\n return Object.keys(props)\n .map(prop => {\n const value = props[prop];\n if (this.isTheSameValue(el, prop as CssKey, value)) {\n return false;\n }\n el.style[prop] = this.isDefaultValue(prop as CssKey, value)\n ? null\n : value;\n return true;\n })\n .some(changed => changed);\n }\n }\n\n private isDefaultValue(prop: CssKey, value: CssValue): boolean {\n return DEFAULT_CSS_VALUES[prop] === value;\n }\n\n private isTheSameValue(el: HTMLElement, prop: CssKey, value: CssValue) {\n return styleEquals(el, prop, value);\n }\n}\n","import {CssKey, CssValue} from '../mutations/style/default-css-values';\n\nexport function styleEquals(node: HTMLElement, key: CssKey, value: CssValue) {\n return window.getComputedStyle(node)[key] === value;\n}\n","import {SetStyle} from '../set-style';\n\nexport class SetBgColor extends SetStyle {\n static historyName = 'Changed background color';\n constructor(private backgroundColor: string, el: HTMLElement) {\n super({backgroundColor}, el);\n }\n}\n","import {SetStyle} from '../set-style';\n\nexport class SetBgImage extends SetStyle {\n static historyName = 'Changed background image';\n}\n","import {CssKey} from '../../../mutations/style/default-css-values';\n\nexport const BACKGROUND_PROPS: CssKey[] = [\n 'backgroundRepeat',\n 'backgroundPosition',\n 'backgroundColor',\n 'backgroundAttachment',\n 'backgroundSize',\n 'backgroundImage',\n 'color',\n];\n","import {BaseMutation} from '../../base-mutation';\nimport {BACKGROUND_PROPS} from '../../../sidebar/inspector-panel/background-panel/background-props';\n\nexport class ResetBg extends BaseMutation {\n static historyName = 'Reset background';\n\n protected oldProps;\n\n constructor(el: HTMLElement) {\n super(el);\n this.oldProps = {};\n BACKGROUND_PROPS.forEach(prop => {\n this.oldProps[prop] = el.style[prop];\n });\n }\n\n protected onInit() {\n //\n }\n\n protected executeMutation(doc: Document) {\n const el = this.findEl(doc);\n if (el) {\n return BACKGROUND_PROPS.some(prop => {\n if (el.style[prop]) {\n el.style[prop] = null;\n return true;\n }\n });\n }\n }\n\n protected undoMutation(doc: Document) {\n const el = this.findEl(doc);\n if (el) {\n return Object.entries(this.oldProps).some(([prop, value]) => {\n if (el.style[prop] !== value) {\n el.style[prop] = value;\n return true;\n }\n });\n }\n }\n}\n","export interface BackgroundConfig {\n configId: string;\n backgroundColor?: string;\n backgroundAttachment?: string;\n backgroundSize?: string;\n backgroundRepeat?: string;\n backgroundPosition?: string;\n backgroundImage?: string;\n color?: string;\n configLabel?: string;\n}\n\nexport const uploadedImgBg = {\n configId: 'uploadedImg',\n configLabel: 'Image',\n backgroundSize: 'cover',\n repeat: 'no-repeat',\n position: 'center center',\n};\n\nexport const flatColorBg = {\n configId: 'flat',\n configLabel: 'Color',\n backgroundColor: 'rgb(209, 246, 255)',\n color: null,\n};\n\nexport const gradientBg = {\n configId: 'gradient',\n configLabel: 'Gradient',\n backgroundImage: 'linear-gradient(43deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%)'\n};\n\nexport const BACKGROUND_LIST: BackgroundConfig[] = [\n uploadedImgBg,\n flatColorBg,\n gradientBg,\n {\n configId: 'img1',\n backgroundColor: '#ffdd55',\n backgroundImage: 'svg-bgs/Angled-Focus.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img2',\n backgroundColor: '#220044',\n backgroundImage: 'svg-bgs/Circular-Focus.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img3',\n backgroundColor: '#000000',\n backgroundImage: 'svg-bgs/Farseeing-Eyeball.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img4',\n backgroundColor: '#ff0000',\n backgroundImage: 'svg-bgs/Canyon-Funnel.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img5',\n backgroundColor: '#11ddaa',\n backgroundImage: 'svg-bgs/Looney-Loops.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#000',\n },\n {\n configId: 'img6',\n backgroundColor: '#070014',\n backgroundImage: 'svg-bgs/Hurricane-Aperture.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img7',\n backgroundColor: '#ccffff',\n backgroundImage: 'svg-bgs/Icy-Explosion.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n color: '#000',\n },\n {\n configId: 'img8',\n backgroundColor: '#442233',\n backgroundImage: 'svg-bgs/Nuclear-Focalpoint.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img9',\n backgroundColor: '#ee5522;',\n backgroundImage: 'svg-bgs/Protruding-Squares.svg',\n color: '#fff',\n },\n {\n configId: 'img10',\n backgroundColor: '#fff',\n backgroundImage: 'svg-bgs/Alternating-Triangles.svg',\n color: '#000',\n },\n {\n configId: 'img11',\n backgroundColor: '#002200',\n backgroundImage: 'svg-bgs/Monstera-Patch.svg',\n color: '#fff',\n },\n {\n configId: 'img11',\n backgroundColor: '#aa3333',\n backgroundImage: 'svg-bgs/Confetti-Doodles.svg',\n color: '#fff',\n backgroundAttachment: 'fixed',\n },\n {\n configId: 'img12',\n backgroundColor: '#ffdd99',\n backgroundImage: 'svg-bgs/Threads-Ahead.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#000',\n },\n {\n configId: 'img13',\n backgroundColor: '#00bbff',\n backgroundImage: 'svg-bgs/Launch-Day.svg',\n backgroundAttachment: 'fixed',\n backgroundSize: 'cover',\n color: '#fff',\n },\n {\n configId: 'img14',\n backgroundImage: 'svg-bgs/Sprinkle.svg',\n },\n {\n configId: 'img15',\n backgroundImage: 'svg-bgs/Circuit-Board.svg',\n },\n {\n configId: 'img15',\n backgroundImage: 'svg-bgs/Snow.svg',\n },\n];\n","import { BackgroundConfig } from '@common/shared/form-controls/background-selector/background-list';\n\nexport const GRADIENT_LIST: BackgroundConfig[] = [\n {\n configId: 'grd1',\n backgroundImage: 'linear-gradient(45deg, #ff9a9e 0%, #fad0c4 99%, #fad0c4 100%)',\n },\n {\n configId: 'grd2',\n backgroundImage: 'linear-gradient(to right, #ff8177 0%, #ff867a 0%, #ff8c7f 21%, #f99185 52%, #cf556c 78%, #b12a5b 100%)',\n },\n {\n configId: 'grd3',\n backgroundImage: 'linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%)',\n },\n {\n configId: 'grd4',\n backgroundImage: 'linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%)',\n },\n {\n configId: 'grd5',\n backgroundImage: 'linear-gradient(to top, #30cfd0 0%, #330867 100%)',\n color: '#fff',\n },\n {\n configId: 'grd6',\n backgroundImage: 'linear-gradient(135deg, #FDEB71 10%, #F8D800 100%)',\n },\n {\n configId: 'grd7',\n backgroundImage: 'linear-gradient( 135deg, #F05F57 10%, #360940 100%)',\n },\n {\n configId: 'grd8',\n color: '#4158D0',\n backgroundImage: 'linear-gradient(43deg, #4158D0 0%, #C850C0 46%, #FFCC70 100%)',\n\n },\n {\n configId: 'grd9',\n color: '#FBAB7E',\n backgroundImage: 'linear-gradient(62deg, #FBAB7E 0%, #F7CE68 100%)',\n },\n {\n configId: 'grd10',\n color: '#21D4FD',\n backgroundImage: 'linear-gradient(19deg, #21D4FD 0%, #B721FF 100%)',\n },\n {\n configId: 'grd11',\n backgroundImage: 'linear-gradient( 109.5deg, rgba(76,221,242,1) 11.2%, rgba(92,121,255,1) 91.1% )',\n },\n {\n configId: 'grd12',\n backgroundImage: 'linear-gradient( 112.1deg, rgba(32,38,57,1) 11.4%, rgba(63,76,119,1) 70.2% )',\n color: '#fff',\n }\n];\n","<div class=\"auto-height-grid\">\n <div\n class=\"grid-item\"\n [class.active]=\"data.active?.configId === gradient.configId\"\n *ngFor=\"let gradient of gradients\"\n (click)=\"selectGradient(gradient)\"\n >\n <div class=\"grid-content\" [style.background-image]=\"gradient.backgroundImage\"></div>\n <div class=\"grid-label\"></div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Optional,\n} from '@angular/core';\nimport {GRADIENT_LIST} from '@common/shared/form-controls/background-selector/background-selector-gradient/gradient-list';\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 {BackgroundConfig} from '@common/shared/form-controls/background-selector/background-list';\n\n@Component({\n selector: 'background-selector-gradient',\n templateUrl: './background-selector-gradient.component.html',\n styleUrls: ['./background-selector-gradient.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BackgroundSelectorGradientComponent {\n gradients = GRADIENT_LIST;\n\n constructor(\n @Inject(OVERLAY_PANEL_DATA)\n @Optional()\n public data: {active?: BackgroundConfig},\n private overlayPanelRef: OverlayPanelRef\n ) {}\n\n selectGradient(gradient: BackgroundConfig) {\n this.overlayPanelRef.close(gradient);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Output,\n EventEmitter,\n Input,\n OnChanges,\n} from '@angular/core';\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 {AppearanceImageUploadValidator} from '@common/admin/appearance/appearance-image-input/appearance-image-upload-validator';\nimport {BackgroundUrlPipe} from '@common/core/ui/format-pipes/background-url.pipe';\nimport {\n BackgroundConfig,\n uploadedImgBg,\n} from '@common/shared/form-controls/background-selector/background-list';\n\n@Component({\n selector: 'background-selector-img',\n templateUrl: './background-selector-img.component.html',\n styleUrls: ['./background-selector-img.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BackgroundSelectorImgComponent implements OnChanges {\n @Output() imgUploaded = new EventEmitter<BackgroundConfig>();\n @Input() selectedBg: BackgroundConfig;\n\n ngOnChanges() {\n this.el.nativeElement.style.backgroundImage =\n this.selectedBg && this.selectedBg.configId === 'uploadedImg'\n ? this.bgUrl.transform(this.selectedBg.backgroundImage)\n : null;\n }\n\n constructor(\n private uploadQueue: UploadQueueService,\n private imgValidator: AppearanceImageUploadValidator,\n private el: ElementRef<HTMLElement>,\n private bgUrl: BackgroundUrlPipe\n ) {}\n\n @HostListener('click', ['$event.target'])\n openUploadDialog() {\n openUploadWindow({\n types: [UploadInputTypes.image],\n }).then(files => {\n this.uploadQueue\n .start(files, {\n validator: this.imgValidator,\n httpParams: {diskPrefix: 'biolink', disk: 'public'},\n })\n .subscribe(response => {\n this.imgUploaded.emit({\n ...uploadedImgBg,\n backgroundImage: response.fileEntry.url,\n });\n });\n });\n }\n}\n","<div class=\"icon-container\">\n <mat-icon svgIcon=\"add-photo-alternate\"></mat-icon>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'labelFromFilename'\n})\nexport class LabelFromFilenamePipe implements PipeTransform {\n\n transform(value: string): string {\n if (value) {\n return value.split('/').pop().split('.')[0].replace('-', ' ');\n }\n }\n}\n","<div class=\"auto-height-grid\">\n <ng-container *ngFor=\"let item of backgrounds\">\n <div>\n <div class=\"grid-item\" [class.active]=\"(selectedBg$ | async)?.id === item.configId\">\n <ng-container [ngSwitch]=\"item.configId\">\n <background-selector-img\n class=\"grid-content\"\n matRipple\n *ngSwitchCase=\"'uploadedImg'\"\n (imgUploaded)=\"selectBackground($event)\"\n [selectedBg]=\"selectedBg$ | async\"\n ></background-selector-img>\n <div\n *ngSwitchDefault\n class=\"grid-content\"\n matRipple\n [style.background-color]=\"item.color\"\n [style.background-image]=\"item.backgroundImage | backgroundUrl\"\n (click)=\"onBgClick(item, $event)\"\n ></div>\n </ng-container>\n </div>\n <div class=\"grid-label\">\n {{ item.configLabel || (item.backgroundImage | labelFromFilename) | trans }}\n </div>\n </div>\n </ng-container>\n</div>\n","import {ChangeDetectionStrategy, Component, ElementRef, Input} from '@angular/core';\nimport {\n BACKGROUND_LIST,\n BackgroundConfig,\n flatColorBg,\n} from '@common/shared/form-controls/background-selector/background-list';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\nimport {takeUntil} from 'rxjs/operators';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {BackgroundSelectorGradientComponent} from '@common/shared/form-controls/background-selector/background-selector-gradient/background-selector-gradient.component';\n\ntype propagateFn = (value: BackgroundConfig) => void;\n\n@Component({\n selector: 'background-selector',\n templateUrl: './background-selector.component.html',\n styleUrls: ['./background-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: BackgroundSelectorComponent,\n multi: true,\n },\n ],\n})\nexport class BackgroundSelectorComponent implements ControlValueAccessor {\n backgrounds = BACKGROUND_LIST;\n selectedBg$ = new BehaviorSubject<BackgroundConfig>(null);\n private propagateChange: propagateFn;\n\n constructor(private overlay: OverlayPanel) {}\n\n registerOnChange(fn: propagateFn) {\n this.propagateChange = fn;\n }\n\n writeValue(value: BackgroundConfig) {\n this.selectedBg$.next(value);\n }\n\n registerOnTouched(fn: any) {}\n\n onBgClick(bg: BackgroundConfig, e: MouseEvent) {\n if (bg.configId === 'flat') {\n this.setFlatColorBg(this.selectedBg$.value?.color);\n this.openColorPicker(e);\n } else if (bg.configId === 'gradient') {\n this.overlay\n .open(BackgroundSelectorGradientComponent, {\n origin: new ElementRef(e.target),\n position: RIGHT_POSITION,\n data: {active: this.selectedBg$.value},\n })\n .afterClosed()\n .subscribe(value => {\n if (value) {\n this.selectBackground(value);\n }\n });\n } else {\n this.selectBackground(bg);\n }\n }\n\n selectBackground(bg: BackgroundConfig) {\n // keep background color from \"simple color\" if\n // it's not specified explicitly for this background\n const oldColor = this.selectedBg$.value?.color;\n const newBg = {...bg};\n if ( ! newBg.color && oldColor) {\n newBg.color = oldColor;\n }\n this.propagateChange(newBg);\n this.selectedBg$.next(newBg);\n }\n\n private setFlatColorBg(color: string) {\n this.selectBackground({\n ...flatColorBg,\n color,\n });\n }\n\n private async openColorPicker(e: MouseEvent) {\n const {BeColorPickerModule} = await import(\n '@common/core/ui/color-picker/be-color-picker.module'\n );\n\n const overlayRef = this.overlay.open(\n BeColorPickerModule.components.panel,\n {\n origin: new ElementRef(e.target),\n position: RIGHT_POSITION,\n data: {color: this.selectedBg$.value?.color},\n }\n );\n\n overlayRef\n .valueChanged()\n .pipe(takeUntil(overlayRef.afterClosed()))\n .subscribe(color => {\n this.setFlatColorBg(color);\n });\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { InjectionToken, forwardRef, EventEmitter, Directive, ChangeDetectorRef, Optional, Inject, ContentChildren, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Attribute, ViewChild, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { mixinDisableRipple, MatCommonModule, MatRippleModule } from '@angular/material/core';\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 * default options for all button toggles within an app.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/material/core';\n\nconst _c0 = [\"button\"];\nconst _c1 = [\"*\"];\nconst MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS = new InjectionToken('MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS');\n/**\n * Injection token that can be used to reference instances of `MatButtonToggleGroup`.\n * It serves as alternative token to the actual `MatButtonToggleGroup` class which\n * could cause unnecessary retention of the class and its component metadata.\n */\nconst MAT_BUTTON_TOGGLE_GROUP = new InjectionToken('MatButtonToggleGroup');\n/**\n * Provider Expression that allows mat-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nconst MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatButtonToggleGroup),\n multi: true\n};\n// Counter used to generate unique IDs.\nlet uniqueIdCounter = 0;\n/** Change event object emitted by MatButtonToggle. */\nclass MatButtonToggleChange {\n constructor(\n /** The MatButtonToggle that emits the event. */\n source, \n /** The value assigned to the MatButtonToggle. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\nclass MatButtonToggleGroup {\n constructor(_changeDetector, defaultOptions) {\n this._changeDetector = _changeDetector;\n this._vertical = false;\n this._multiple = false;\n this._disabled = false;\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n this._controlValueAccessorChangeFn = () => { };\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n this._onTouched = () => { };\n this._name = `mat-button-toggle-group-${uniqueIdCounter++}`;\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n /** Event emitted when the group's value changes. */\n this.change = new EventEmitter();\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n /** `name` attribute for the underlying `input` element. */\n get name() { return this._name; }\n set name(value) {\n this._name = value;\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => {\n toggle.name = this._name;\n toggle._markForCheck();\n });\n }\n }\n /** Whether the toggle group is vertical. */\n get vertical() { return this._vertical; }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** Value of the toggle group. */\n get value() {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n if (this.multiple) {\n return selected.map(toggle => toggle.value);\n }\n return selected[0] ? selected[0].value : undefined;\n }\n set value(newValue) {\n this._setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n /** Selected button toggles in the group. */\n get selected() {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n return this.multiple ? selected : (selected[0] || null);\n }\n /** Whether multiple button toggles can be selected. */\n get multiple() { return this._multiple; }\n set multiple(value) {\n this._multiple = coerceBooleanProperty(value);\n }\n /** Whether multiple button toggle group is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => toggle._markForCheck());\n }\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple, undefined, false);\n }\n ngAfterContentInit() {\n this._selectionModel.select(...this._buttonToggles.filter(toggle => toggle.checked));\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent() {\n const selected = this.selected;\n const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;\n const event = new MatButtonToggleChange(source, this.value);\n this._controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n * @param deferEvents Whether to defer emitting the change events.\n */\n _syncButtonToggle(toggle, select, isUserInput = false, deferEvents = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n this.selected.checked = false;\n }\n if (this._selectionModel) {\n if (select) {\n this._selectionModel.select(toggle);\n }\n else {\n this._selectionModel.deselect(toggle);\n }\n }\n else {\n deferEvents = true;\n }\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however\n // the side-effect is that we may end up updating the model value out of sequence in others\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\n if (deferEvents) {\n Promise.resolve().then(() => this._updateModelValue(isUserInput));\n }\n else {\n this._updateModelValue(isUserInput);\n }\n }\n /** Checks whether a button toggle is selected. */\n _isSelected(toggle) {\n return this._selectionModel && this._selectionModel.isSelected(toggle);\n }\n /** Determines whether a button toggle should be checked on init. */\n _isPrechecked(toggle) {\n if (typeof this._rawValue === 'undefined') {\n return false;\n }\n if (this.multiple && Array.isArray(this._rawValue)) {\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\n }\n return toggle.value === this._rawValue;\n }\n /** Updates the selection state of the toggles in the group based on a value. */\n _setSelectionByValue(value) {\n this._rawValue = value;\n if (!this._buttonToggles) {\n return;\n }\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n this._clearSelection();\n value.forEach((currentValue) => this._selectValue(currentValue));\n }\n else {\n this._clearSelection();\n this._selectValue(value);\n }\n }\n /** Clears the selected toggles. */\n _clearSelection() {\n this._selectionModel.clear();\n this._buttonToggles.forEach(toggle => toggle.checked = false);\n }\n /** Selects a value if there's a toggle that corresponds to it. */\n _selectValue(value) {\n const correspondingOption = this._buttonToggles.find(toggle => {\n return toggle.value != null && toggle.value === value;\n });\n if (correspondingOption) {\n correspondingOption.checked = true;\n this._selectionModel.select(correspondingOption);\n }\n }\n /** Syncs up the group's value with the model and emits the change event. */\n _updateModelValue(isUserInput) {\n // Only emit the change event for user input.\n if (isUserInput) {\n this._emitChangeEvent();\n }\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n}\nMatButtonToggleGroup.ɵfac = function MatButtonToggleGroup_Factory(t) { return new (t || MatButtonToggleGroup)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, 8)); };\nMatButtonToggleGroup.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatButtonToggleGroup, selectors: [[\"mat-button-toggle-group\"]], contentQueries: function MatButtonToggleGroup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatButtonToggle, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._buttonToggles = _t);\n } }, hostAttrs: [\"role\", \"group\", 1, \"mat-button-toggle-group\"], hostVars: 5, hostBindings: function MatButtonToggleGroup_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled);\n ɵngcc0.ɵɵclassProp(\"mat-button-toggle-vertical\", ctx.vertical)(\"mat-button-toggle-group-appearance-standard\", ctx.appearance === \"standard\");\n } }, inputs: { appearance: \"appearance\", name: \"name\", vertical: \"vertical\", value: \"value\", multiple: \"multiple\", disabled: \"disabled\" }, outputs: { valueChange: \"valueChange\", change: \"change\" }, exportAs: [\"matButtonToggleGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\n { provide: MAT_BUTTON_TOGGLE_GROUP, useExisting: MatButtonToggleGroup },\n ])] });\nMatButtonToggleGroup.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,] }] }\n];\nMatButtonToggleGroup.propDecorators = {\n _buttonToggles: [{ type: ContentChildren, args: [forwardRef(() => MatButtonToggle), {\n // Note that this would technically pick up toggles\n // from nested groups, but that's not a case that we support.\n descendants: true\n },] }],\n appearance: [{ type: Input }],\n name: [{ type: Input }],\n vertical: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n multiple: [{ type: Input }],\n disabled: [{ type: Input }],\n change: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatButtonToggleGroup, [{\n type: Directive,\n args: [{\n selector: 'mat-button-toggle-group',\n providers: [\n MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\n { provide: MAT_BUTTON_TOGGLE_GROUP, useExisting: MatButtonToggleGroup },\n ],\n host: {\n 'role': 'group',\n 'class': 'mat-button-toggle-group',\n '[attr.aria-disabled]': 'disabled',\n '[class.mat-button-toggle-vertical]': 'vertical',\n '[class.mat-button-toggle-group-appearance-standard]': 'appearance === \"standard\"'\n },\n exportAs: 'matButtonToggleGroup'\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS]\n }] }]; }, { valueChange: [{\n type: Output\n }], change: [{\n type: Output\n }], appearance: [{\n type: Input\n }], name: [{\n type: Input\n }], vertical: [{\n type: Input\n }], value: [{\n type: Input\n }], multiple: [{\n type: Input\n }], disabled: [{\n type: Input\n }], _buttonToggles: [{\n type: ContentChildren,\n args: [forwardRef(() => MatButtonToggle), {\n // Note that this would technically pick up toggles\n // from nested groups, but that's not a case that we support.\n descendants: true\n }]\n }] }); })();\n// Boilerplate for applying mixins to the MatButtonToggle class.\n/** @docs-private */\nclass MatButtonToggleBase {\n}\nconst _MatButtonToggleMixinBase = mixinDisableRipple(MatButtonToggleBase);\n/** Single button inside of a toggle group. */\nclass MatButtonToggle extends _MatButtonToggleMixinBase {\n constructor(toggleGroup, _changeDetectorRef, _elementRef, _focusMonitor, defaultTabIndex, defaultOptions) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._focusMonitor = _focusMonitor;\n this._isSingleSelector = false;\n this._checked = false;\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n this.ariaLabelledby = null;\n this._disabled = false;\n /** Event emitted when the group value changes. */\n this.change = new EventEmitter();\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n this.buttonToggleGroup = toggleGroup;\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n /** Unique ID for the underlying `button` element. */\n get buttonId() { return `${this.id}-button`; }\n /** The appearance style of the button. */\n get appearance() {\n return this.buttonToggleGroup ? this.buttonToggleGroup.appearance : this._appearance;\n }\n set appearance(value) {\n this._appearance = value;\n }\n /** Whether the button is checked. */\n get checked() {\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\n }\n set checked(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this._checked) {\n this._checked = newValue;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\n }\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the button is disabled. */\n get disabled() {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n set disabled(value) { this._disabled = coerceBooleanProperty(value); }\n ngOnInit() {\n const group = this.buttonToggleGroup;\n this._isSingleSelector = group && !group.multiple;\n this.id = this.id || `mat-button-toggle-${uniqueIdCounter++}`;\n if (this._isSingleSelector) {\n this.name = group.name;\n }\n if (group) {\n if (group._isPrechecked(this)) {\n this.checked = true;\n }\n else if (group._isSelected(this) !== this._checked) {\n // As as side effect of the circular dependency between the toggle group and the button,\n // we may end up in a state where the button is supposed to be checked on init, but it\n // isn't, because the checked value was assigned too early. This can happen when Ivy\n // assigns the static input value before the `ngOnInit` has run.\n group._syncButtonToggle(this, this._checked);\n }\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n this._focusMonitor.stopMonitoring(this._elementRef);\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group._isSelected(this)) {\n group._syncButtonToggle(this, false, false, true);\n }\n }\n /** Focuses the button. */\n focus(options) {\n this._buttonElement.nativeElement.focus(options);\n }\n /** Checks the button toggle due to an interaction with the underlying native button. */\n _onButtonClick() {\n const newChecked = this._isSingleSelector ? true : !this._checked;\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup._onTouched();\n }\n }\n // Emit a change event when it's the single selector\n this.change.emit(new MatButtonToggleChange(this, this.value));\n }\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this._changeDetectorRef.markForCheck();\n }\n}\nMatButtonToggle.ɵfac = function MatButtonToggle_Factory(t) { return new (t || MatButtonToggle)(ɵngcc0.ɵɵdirectiveInject(MAT_BUTTON_TOGGLE_GROUP, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵinjectAttribute('tabindex'), ɵngcc0.ɵɵdirectiveInject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, 8)); };\nMatButtonToggle.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatButtonToggle, selectors: [[\"mat-button-toggle\"]], viewQuery: function MatButtonToggle_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._buttonElement = _t.first);\n } }, hostAttrs: [\"role\", \"presentation\", 1, \"mat-button-toggle\"], hostVars: 12, hostBindings: function MatButtonToggle_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatButtonToggle_focus_HostBindingHandler() { return ctx.focus(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-label\", null)(\"aria-labelledby\", null)(\"id\", ctx.id)(\"name\", null);\n ɵngcc0.ɵɵclassProp(\"mat-button-toggle-standalone\", !ctx.buttonToggleGroup)(\"mat-button-toggle-checked\", ctx.checked)(\"mat-button-toggle-disabled\", ctx.disabled)(\"mat-button-toggle-appearance-standard\", ctx.appearance === \"standard\");\n } }, inputs: { disableRipple: \"disableRipple\", ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], tabIndex: \"tabIndex\", appearance: \"appearance\", checked: \"checked\", disabled: \"disabled\", id: \"id\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], value: \"value\" }, outputs: { change: \"change\" }, exportAs: [\"matButtonToggle\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 6, vars: 9, consts: [[\"type\", \"button\", 1, \"mat-button-toggle-button\", \"mat-focus-indicator\", 3, \"id\", \"disabled\", \"click\"], [\"button\", \"\"], [1, \"mat-button-toggle-label-content\"], [1, \"mat-button-toggle-focus-overlay\"], [\"matRipple\", \"\", 1, \"mat-button-toggle-ripple\", 3, \"matRippleTrigger\", \"matRippleDisabled\"]], template: function MatButtonToggle_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function MatButtonToggle_Template_button_click_0_listener() { return ctx._onButtonClick(); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵprojection(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(4, \"span\", 3);\n ɵngcc0.ɵɵelement(5, \"span\", 4);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.buttonId)(\"disabled\", ctx.disabled || null);\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? -1 : ctx.tabIndex)(\"aria-pressed\", ctx.checked)(\"name\", ctx.name || null)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled);\n } }, directives: [ɵngcc2.MatRipple], styles: [\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:2px;-webkit-tap-highlight-color:transparent}.cdk-high-contrast-active .mat-button-toggle-standalone,.cdk-high-contrast-active .mat-button-toggle-group{outline:solid 1px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:4px}.cdk-high-contrast-active .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.cdk-high-contrast-active .mat-button-toggle-group-appearance-standard{outline:0}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:1}.cdk-high-contrast-active .mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:.5}.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{opacity:.04}.mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.12}.cdk-high-contrast-active .mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.5}@media(hover: none){.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 36px}.cdk-high-contrast-active .mat-button-toggle-checked .mat-button-toggle-focus-overlay{opacity:.5;height:0}.cdk-high-contrast-active .mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatButtonToggle.ctorParameters = () => [\n { type: MatButtonToggleGroup, decorators: [{ type: Optional }, { type: Inject, args: [MAT_BUTTON_TOGGLE_GROUP,] }] },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: FocusMonitor },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,] }] }\n];\nMatButtonToggle.propDecorators = {\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n _buttonElement: [{ type: ViewChild, args: ['button',] }],\n id: [{ type: Input }],\n name: [{ type: Input }],\n value: [{ type: Input }],\n tabIndex: [{ type: Input }],\n appearance: [{ type: Input }],\n checked: [{ type: Input }],\n disabled: [{ type: Input }],\n change: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatButtonToggle, [{\n type: Component,\n args: [{\n selector: 'mat-button-toggle',\n template: \"<button #button class=\\\"mat-button-toggle-button mat-focus-indicator\\\"\\n type=\\\"button\\\"\\n [id]=\\\"buttonId\\\"\\n [attr.tabindex]=\\\"disabled ? -1 : tabIndex\\\"\\n [attr.aria-pressed]=\\\"checked\\\"\\n [disabled]=\\\"disabled || null\\\"\\n [attr.name]=\\\"name || null\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n (click)=\\\"_onButtonClick()\\\">\\n <span class=\\\"mat-button-toggle-label-content\\\">\\n <ng-content></ng-content>\\n </span>\\n</button>\\n\\n<span class=\\\"mat-button-toggle-focus-overlay\\\"></span>\\n<span class=\\\"mat-button-toggle-ripple\\\" matRipple\\n [matRippleTrigger]=\\\"button\\\"\\n [matRippleDisabled]=\\\"this.disableRipple || this.disabled\\\">\\n</span>\\n\",\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matButtonToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disableRipple'],\n host: {\n '[class.mat-button-toggle-standalone]': '!buttonToggleGroup',\n '[class.mat-button-toggle-checked]': 'checked',\n '[class.mat-button-toggle-disabled]': 'disabled',\n '[class.mat-button-toggle-appearance-standard]': 'appearance === \"standard\"',\n 'class': 'mat-button-toggle',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.id]': 'id',\n '[attr.name]': 'null',\n '(focus)': 'focus()',\n 'role': 'presentation'\n },\n styles: [\".mat-button-toggle-standalone,.mat-button-toggle-group{position:relative;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:2px;-webkit-tap-highlight-color:transparent}.cdk-high-contrast-active .mat-button-toggle-standalone,.cdk-high-contrast-active .mat-button-toggle-group{outline:solid 1px}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border-radius:4px}.cdk-high-contrast-active .mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.cdk-high-contrast-active .mat-button-toggle-group-appearance-standard{outline:0}.mat-button-toggle-vertical{flex-direction:column}.mat-button-toggle-vertical .mat-button-toggle-label-content{display:block}.mat-button-toggle{white-space:nowrap;position:relative}.mat-button-toggle .mat-icon svg{vertical-align:top}.mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:1}.cdk-high-contrast-active .mat-button-toggle.cdk-keyboard-focused .mat-button-toggle-focus-overlay{opacity:.5}.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{opacity:.04}.mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.12}.cdk-high-contrast-active .mat-button-toggle-appearance-standard.cdk-keyboard-focused:not(.mat-button-toggle-disabled) .mat-button-toggle-focus-overlay{opacity:.5}@media(hover: none){.mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay{display:none}}.mat-button-toggle-label-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;line-height:36px;padding:0 16px;position:relative}.mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0 12px}.mat-button-toggle-label-content>*{vertical-align:middle}.mat-button-toggle-focus-overlay{border-radius:inherit;pointer-events:none;opacity:0;top:0;left:0;right:0;bottom:0;position:absolute}.mat-button-toggle-checked .mat-button-toggle-focus-overlay{border-bottom:solid 36px}.cdk-high-contrast-active .mat-button-toggle-checked .mat-button-toggle-focus-overlay{opacity:.5;height:0}.cdk-high-contrast-active .mat-button-toggle-checked.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{border-bottom:solid 500px}.mat-button-toggle .mat-button-toggle-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-button-toggle-button{border:0;background:none;color:inherit;padding:0;margin:0;font:inherit;outline:none;width:100%;cursor:pointer}.mat-button-toggle-disabled .mat-button-toggle-button{cursor:default}.mat-button-toggle-button::-moz-focus-inner{border:0}\\n\"]\n }]\n }], function () { return [{ type: MatButtonToggleGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_BUTTON_TOGGLE_GROUP]\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusMonitor }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS]\n }] }]; }, { ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], change: [{\n type: Output\n }], tabIndex: [{\n type: Input\n }], appearance: [{\n type: Input\n }], checked: [{\n type: Input\n }], disabled: [{\n type: Input\n }], id: [{\n type: Input\n }], name: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], _buttonElement: [{\n type: ViewChild,\n args: ['button']\n }], value: [{\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 MatButtonToggleModule {\n}\nMatButtonToggleModule.ɵfac = function MatButtonToggleModule_Factory(t) { return new (t || MatButtonToggleModule)(); };\nMatButtonToggleModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatButtonToggleModule });\nMatButtonToggleModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[MatCommonModule, MatRippleModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatButtonToggleModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, MatRippleModule],\n exports: [MatCommonModule, MatButtonToggleGroup, MatButtonToggle],\n declarations: [MatButtonToggleGroup, MatButtonToggle]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatButtonToggleModule, { declarations: function () { return [MatButtonToggleGroup, MatButtonToggle]; }, imports: function () { return [MatCommonModule, MatRippleModule]; }, exports: function () { return [MatCommonModule, MatButtonToggleGroup, MatButtonToggle]; } }); })();\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_BUTTON_TOGGLE_DEFAULT_OPTIONS, MAT_BUTTON_TOGGLE_GROUP, MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup, MatButtonToggleModule };\n\n//# sourceMappingURL=button-toggle.js.map","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding, Inject,\n OnInit, Optional,\n} from '@angular/core';\nimport {OverlayPanelRef} from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport {FormBuilder} from '@angular/forms';\nimport {OVERLAY_PANEL_DATA} from '@common/core/ui/overlay-panel/overlay-panel-data';\n\nexport interface BackgroundOverlayData {\n initialValues: Record<string, string>;\n}\n\n@Component({\n selector: 'background-overlay',\n templateUrl: './background-overlay.component.html',\n styleUrls: ['./background-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'builder-overlay'},\n})\nexport class BackgroundOverlayComponent implements OnInit {\n @HostBinding('class.compact') compact = true;\n\n bgControl = this.fb.control(null);\n form = this.fb.group({\n backgroundRepeat: null,\n backgroundPosition: null,\n backgroundColor: null,\n backgroundAttachment: null,\n backgroundSize: null,\n backgroundImage: null,\n color: null,\n configLabel: null,\n });\n\n constructor(\n public overlayPanelRef: OverlayPanelRef,\n @Inject(OVERLAY_PANEL_DATA) @Optional() public data: BackgroundOverlayData,\n private fb: FormBuilder\n ) {}\n\n ngOnInit() {\n this.form.patchValue(this.data.initialValues);\n this.bgControl.valueChanges.subscribe(v => this.form.patchValue(v));\n this.form.valueChanges.subscribe(value => {\n this.overlayPanelRef.emitValue(value);\n });\n }\n\n setBgPosition(value: string) {\n this.form.patchValue({backgroundPosition: value});\n }\n}\n","<div class=\"builder-overlay-header\">\n <div class=\"builder-overlay-title\" trans>Background</div>\n <button type=\"button\" class=\"builder-overlay-close-btn\" (click)=\"overlayPanelRef.close()\" mat-icon-button>\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<background-selector [formControl]=\"bgControl\"></background-selector>\n\n<div class=\"builder-overlay-header\" trans>Background Properties</div>\n\n<div class=\"image-properties\" [formGroup]=\"form\">\n <div class=\"property-row\">\n <div class=\"property-panel\">\n <div class=\"property-title\" trans>Repeat</div>\n <mat-radio-group class=\"controls\" formControlName=\"backgroundRepeat\">\n <mat-radio-button value=\"no-repeat\" trans>None</mat-radio-button>\n <mat-radio-button value=\"repeat-x\" trans>Horizontal</mat-radio-button>\n <mat-radio-button value=\"repeat-y\" trans>Vertical</mat-radio-button>\n <mat-radio-button value=\"repeat\" trans>All</mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div class=\"property-panel\">\n <div class=\"property-title\" trans>Size</div>\n <mat-radio-group class=\"controls\" formControlName=\"backgroundSize\">\n <mat-radio-button value=\"auto\" trans>Auto</mat-radio-button>\n <mat-radio-button value=\"contain\" trans>Contain</mat-radio-button>\n <mat-radio-button value=\"cover\" trans>Cover</mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div class=\"position property-panel\">\n <div class=\"property-title\" trans>Position</div>\n <div class=\"position-grid\">\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'top left'\"\n (click)=\"setBgPosition('top left')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'top center'\"\n (click)=\"setBgPosition('top center')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'top right'\"\n (click)=\"setBgPosition('top right')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'center center'\"\n (click)=\"setBgPosition('center center')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'center right'\"\n (click)=\"setBgPosition('center right')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'center left'\"\n (click)=\"setBgPosition('center left')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'bottom left'\"\n (click)=\"setBgPosition('bottom left')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'bottom center'\"\n (click)=\"setBgPosition('bottom center')\"\n ></button>\n <button\n class=\"no-style position-box\"\n [class.active]=\"form.get('backgroundPosition').value === 'bottom right'\"\n (click)=\"setBgPosition('bottom right')\"\n ></button>\n </div>\n </div>\n </div>\n\n <mat-button-toggle-group formControlName=\"backgroundAttachment\" class=\"attachment-toggle\">\n <mat-button-toggle value=\"fixed\">Fixed</mat-button-toggle>\n <mat-button-toggle value=\"scroll\">Not Fixed</mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n","import {AfterViewInit, Component, ViewEncapsulation} from '@angular/core';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {RIGHT_POSITION} from '@common/core/ui/overlay-panel/positions/right-position';\nimport {SetBgColor} from '../../../mutations/style/background/set-bg-color';\nimport {MutationsService} from '../../../mutations/mutations.service';\nimport {SetBgImage} from '../../../mutations/style/background/set-bg-image';\nimport {BackgroundUrlPipe} from '@common/core/ui/format-pipes/background-url.pipe';\nimport {ResetBg} from '../../../mutations/style/background/reset-bg';\nimport {\n BackgroundOverlayComponent,\n BackgroundOverlayData,\n} from '@common/shared/form-controls/background-selector/background-overlay/background-overlay.component';\nimport {BehaviorSubject} from 'rxjs';\nimport {BACKGROUND_PROPS} from './background-props';\nimport {BuilderOverlayService} from '../../../overlays/builder-overlay.service';\nimport {BuilderStateService} from '../../../builder-state.service';\nimport {CssKey} from '../../../mutations/style/default-css-values';\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 AfterViewInit {\n previewBgColor$ = new BehaviorSubject(null);\n previewBgImg$ = new BehaviorSubject(null);\n\n constructor(\n private state: BuilderStateService,\n private panel: BuilderOverlayService,\n private mutations: MutationsService,\n private bgUrl: BackgroundUrlPipe\n ) {}\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.state.selected$.subscribe(() => {\n this.updatePreviewColorAndImg();\n });\n });\n }\n\n openColorpickerPanel() {\n const currentColor = this.state.getSelectedStyle('backgroundColor');\n this.panel\n .open(ColorpickerPanelComponent, {\n position: RIGHT_POSITION,\n data: {color: currentColor},\n })\n .valueChanged()\n .subscribe((color: string) => {\n this.mutations.execute(\n new SetBgColor(color, this.state.selected.node)\n );\n this.updatePreviewColorAndImg();\n });\n }\n\n openBackgroundPanel() {\n const initialValues = {};\n BACKGROUND_PROPS.forEach(prop => {\n initialValues[prop] = this.state.getSelectedStyle(prop as CssKey);\n });\n\n this.panel\n .open(BackgroundOverlayComponent, {\n initialValues,\n } as BackgroundOverlayData)\n .valueChanged()\n .subscribe(value => {\n if (value.backgroundImage) {\n value.backgroundImage = this.bgUrl.transform(\n value.backgroundImage\n );\n }\n this.mutations.execute(\n new SetBgImage(value, this.state.selected.node)\n );\n this.updatePreviewColorAndImg();\n });\n }\n\n private updatePreviewColorAndImg() {\n this.previewBgColor$.next(this.state.getSelectedStyle('backgroundColor'));\n const bgImage = this.state.getSelectedStyle('backgroundImage');\n this.previewBgImg$.next(bgImage === 'none' ? null : bgImage);\n }\n\n resetBackground() {\n this.mutations.execute(new ResetBg(this.state.selected.node));\n }\n}\n","<button mat-stroked-button class=\"img-btn\" type=\"button\" (click)=\"openColorpickerPanel()\">\n <span class=\"img-btn-title\" trans>Color</span>\n <span\n class=\"img-btn-preview transparent-texture\"\n [style.background-color]=\"previewBgColor$ | async\"\n [class.no-value]=\"!(previewBgColor$ | async)\"\n >\n </span>\n</button>\n\n<button mat-stroked-button class=\"img-btn\" type=\"button\" (click)=\"openBackgroundPanel()\">\n <span class=\"img-btn-title\" trans>Image & Gradient</span>\n <span\n class=\"img-btn-preview transparent-texture\"\n [style.background-image]=\"previewBgImg$ | async\"\n [class.no-value]=\"(previewBgImg$ | async) === 'none'\"\n >\n </span>\n</button>\n\n<div class=\"remove-bg-container\">\n <button mat-button color=\"warn\" (click)=\"resetBackground()\" class=\"remove-bg-btn\" trans>\n Reset Background\n </button>\n</div>\n","import {SetStyle} from '../set-style';\n\nexport class SetTextShadow extends SetStyle {\n static historyName = 'Changed text shadow';\n constructor(private shadow: string, el: HTMLElement) {\n super({textShadow: shadow}, el);\n }\n}\n","import {SetStyle} from '../set-style';\n\nexport class SetBoxShadow extends SetStyle {\n static historyName = 'Changed box shadow';\n constructor(private shadow: string, el: HTMLElement) {\n super({boxShadow: shadow}, el);\n }\n}\n","export function arraysAreEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = arr1.length; i--;) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n","<div class=\"toggle-container\">\n <mat-slide-toggle [formControl]=\"enabled\" trans>Enable Shadow</mat-slide-toggle>\n</div>\n\n<div [formGroup]=\"form\">\n <div class=\"sliders\">\n <div class=\"slider-container\" *ngFor=\"let control of sliderControls\">\n <ng-container *ngIf=\"control !== 'spread' || type === 'box'\">\n <div class=\"title\">{{ control }}</div>\n <div class=\"inner-container\">\n <mat-slider\n color=\"accent\"\n min=\"0\"\n [max]=\"control == 'angle' ? 360 : 20\"\n step=\"1\"\n (input)=\"form.get(control).setValue($event.value)\"\n [formControlName]=\"control\"\n ></mat-slider>\n <div class=\"input-container\">\n <input\n type=\"number\"\n [formControlName]=\"control\"\n min=\"1\"\n [max]=\"control == 'angle' ? 360 : 20\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"many-inputs\">\n <div class=\"input-container\">\n <label for=\"shadow-panel-color\" trans>Color</label>\n <div\n role=\"button\"\n mat-ripple\n class=\"fake-input color-input transparent-texture\"\n [class.disabled]=\"form.get('color').disabled\"\n [style.background-color]=\"activeColor$ | async\"\n id=\"shadow-panel-color\"\n (click)=\"openColorPicker()\"\n #colorButton\n ></div>\n </div>\n\n <div class=\"input-container text-shadow\" *ngIf=\"type === 'box'\">\n <label for=\"shadow-inset\" trans>Type</label>\n <select id=\"shadow-inset\" formControlName=\"inset\">\n <option [ngValue]=\"false\" trans>Outer</option>\n <option [ngValue]=\"true\" trans>Inner</option>\n </select>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {BuilderDocumentActions} from '../../../../builder-document-actions.service';\nimport {MutationsService} from '../../../../mutations/mutations.service';\nimport {SetTextShadow} from '../../../../mutations/style/shadow/set-text-shadow';\nimport {SetBoxShadow} from '../../../../mutations/style/shadow/set-box-shadow';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {FormBuilder, FormControl} from '@angular/forms';\nimport {startWith} from 'rxjs/operators';\nimport {objectsAreEqual} from '@common/core/utils/objects-are-equal';\nimport {BuilderOverlayService} from '../../../../overlays/builder-overlay.service';\nimport {BuilderStateService} from '../../../../builder-state.service';\n\nconst DEFAULT_PROPS: ShadowProps = {\n inset: false,\n angle: '0',\n distance: '0',\n blur: '0',\n color: 'transparent',\n spread: '0',\n};\n\ninterface ShadowProps {\n inset?: boolean;\n angle?: string;\n distance?: string;\n blur?: string;\n color?: string;\n spread?: string;\n}\n\n@Component({\n selector: 'shadow-panel-form',\n templateUrl: './shadow-panel-form.component.html',\n styleUrls: ['./shadow-panel-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShadowPanelFormComponent implements OnInit {\n @ViewChild('colorButton') colorButton: ElementRef;\n @Input() type: 'box' | 'text';\n\n sliderControls = ['angle', 'distance', 'blur', 'spread'];\n form = this.fb.group(DEFAULT_PROPS);\n activeColor$ = this.form.get('color').valueChanges.pipe(startWith('#fff'));\n\n enabled = new FormControl(false);\n\n constructor(\n private state: BuilderStateService,\n private overlay: BuilderOverlayService,\n private builderActions: BuilderDocumentActions,\n private mutations: MutationsService,\n private fb: FormBuilder\n ) {}\n\n ngOnInit() {\n this.enabled.valueChanges.subscribe(enabled => {\n enabled\n ? this.form.enable({emitEvent: false})\n : this.form.disable({emitEvent: false});\n });\n\n this.form.valueChanges.subscribe(() => {\n this.applyStyle();\n });\n\n this.state.selected$.subscribe(() => {\n const props = this.getSelectedElShadowProps();\n if (props) {\n this.enabled.setValue(true);\n this.form.setValue(props, {emitEvent: false});\n } else {\n this.enabled.setValue(false);\n this.form.setValue(DEFAULT_PROPS, {emitEvent: false});\n }\n });\n }\n\n applyStyle() {\n const shadowValue = this.formValueAsShadowString();\n const mutation =\n this.type === 'text'\n ? new SetTextShadow(shadowValue, this.state.selected.node)\n : new SetBoxShadow(shadowValue, this.state.selected.node);\n this.mutations.execute(mutation);\n }\n\n openColorPicker() {\n this.overlay\n .open(\n ColorpickerPanelComponent,\n {color: this.form.value.color},\n this.colorButton.nativeElement\n )\n .valueChanged()\n .subscribe(color => {\n if (color) {\n this.form.patchValue({color});\n }\n });\n }\n\n private formValueAsShadowString(): string {\n const props = this.form.value;\n const blur = Math.round(props.blur);\n const spread = Math.round(props.spread);\n const angle = parseInt(props.angle) * (Math.PI / 180);\n const x = Math.round(props.distance * Math.cos(angle));\n const y = Math.round(props.distance * Math.sin(angle));\n const inset = props.inset && this.type === 'box' ? 'inset ' : '';\n const color =\n props.color === DEFAULT_PROPS.color\n ? 'rgba(0,0,0,0.5)'\n : props.color;\n\n if (objectsAreEqual(props, DEFAULT_PROPS)) {\n return 'none';\n }\n\n let css = inset + x + 'px ' + y + 'px ' + blur + 'px ';\n\n // text shadows have no spread property\n if (this.type === 'box') {\n css += spread + 'px ';\n }\n\n return css + color;\n }\n\n private getSelectedElShadowProps(): ShadowProps | null {\n const shadowString = this.state.getSelectedStyle(\n this.type === 'box' ? 'boxShadow' : 'textShadow'\n );\n\n if (!shadowString || shadowString === 'none') {\n return null;\n }\n\n const array = shadowString\n .replace(/, /g, ',')\n .split(' ')\n .map(val => {\n return val.indexOf('px') > -1 ? val.replace('px', '') : val;\n });\n\n const props: ShadowProps = {};\n\n // text shadow\n if (array.length === 4) {\n props.color = array[0];\n props.angle = array[1];\n props.distance = array[2];\n props.blur = array[3];\n props.inset = false;\n props.spread = '0px';\n // box shadow\n } else if (array.length === 5 || array.length === 6) {\n props.color = array[0];\n props.angle = array[1];\n props.distance = array[2];\n props.blur = array[3];\n props.spread = array[4];\n props.inset = false;\n } else {\n return null;\n }\n\n return props;\n }\n}\n","import {arraysAreEqual} from './arrays-are-equal';\n\nexport function objectsAreEqual(a: object, b: object, strict = true): boolean {\n const aProps = Object.getOwnPropertyNames(a);\n const bProps = Object.getOwnPropertyNames(b);\n\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n const propName = aProps[i];\n const propA = a[propName];\n const propB = b[propName];\n\n // variable types must match\n if (propA && propB && typeof propA == 'object' && typeof propB == 'object') {\n if (propA.constructor !== propB.constructor) return false;\n\n // compare arrays\n if (propA.constructor === Array) {\n return arraysAreEqual(a[propName], b[propName]);\n }\n }\n\n // If values of same property are not equal, objects are not equivalent\n if (strict) {\n if (propA !== propB) return false;\n } else {\n if (propA != propB) return false;\n }\n }\n\n // If we made it this far, objects\n // are considered equivalent\n return true;\n}\n","import {Component, OnInit} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {startWith} from 'rxjs/operators';\n\n@Component({\n selector: 'shadows-panel',\n templateUrl: './shadows-panel.component.html',\n styleUrls: ['./shadows-panel.component.scss'],\n})\nexport class ShadowsPanelComponent implements OnInit {\n shadowTypeControl = new FormControl('box');\n activeType$ = this.shadowTypeControl.valueChanges.pipe(startWith('box'));\n\n public ngOnInit(): void {}\n}\n","<mat-button-toggle-group [formControl]=\"shadowTypeControl\">\n <mat-button-toggle value=\"box\">Box</mat-button-toggle>\n <mat-button-toggle value=\"text\">Text</mat-button-toggle>\n</mat-button-toggle-group>\n\n<shadow-panel-form type=\"box\" [class.hidden]=\"(activeType$ | async) !== 'box'\"></shadow-panel-form>\n<shadow-panel-form type=\"text\" [class.hidden]=\"(activeType$ | async) !== 'text'\"></shadow-panel-form>\n","import {SetStyle} from '../set-style';\n\nexport class SetPadding extends SetStyle {\n static historyName = 'Changed padding';\n constructor(private padding: string, el: HTMLElement) {\n super({padding}, el);\n }\n}\n","import {SetStyle} from '../set-style';\n\nexport class SetMargin extends SetStyle {\n static historyName = 'Changed margin';\n constructor(private margin: string, el: HTMLElement) {\n super({margin}, el);\n }\n}\n","import {SetStyle} from '../set-style';\nimport {DEFAULT_CSS_VALUES} from '../default-css-values';\n\nexport class SetBorder extends SetStyle {\n protected onInit() {\n if (\n !this.changes.new.borderStyle &&\n getComputedStyle(this.el).borderStyle ===\n DEFAULT_CSS_VALUES.borderStyle\n ) {\n this.changes.new.borderStyle = 'solid';\n }\n super.onInit();\n }\n}\n","import {SetBorder} from './set-border';\n\nexport class SetBorderRadius extends SetBorder {\n static historyName = 'Changed border radius';\n constructor(private borderRadius: string, el: HTMLElement) {\n super({borderRadius}, el);\n }\n}\n","import {SetBorder} from './set-border';\n\nexport class SetBorderWidth extends SetBorder {\n static historyName = 'Changed border width';\n constructor(private borderWidth: string, el: HTMLElement) {\n super({borderWidth}, el);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n} 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 {\n @Input() type: string;\n @Input() active = false;\n}\n","<span\n 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\n 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\n 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\n 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>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ucFirst} from '@common/core/utils/uc-first';\nimport {MutationsService} from '../../../mutations/mutations.service';\nimport {SetPadding} from '../../../mutations/style/spacing/set-padding';\nimport {SpacingType} from './spacing-type';\nimport {SetMargin} from '../../../mutations/style/spacing/set-margin';\nimport {SetBorderRadius} from '../../../mutations/style/border/set-border-radius';\nimport {BehaviorSubject} from 'rxjs';\nimport {FormBuilder} from '@angular/forms';\nimport {MatSliderChange} from '@angular/material/slider';\nimport {SetBorderWidth} from '../../../mutations/style/border/set-border-width';\nimport {CssKey} from '../../../mutations/style/default-css-values';\nimport {BuilderStateService} from '../../../builder-state.service';\n\n@Component({\n selector: 'spacing-panel',\n templateUrl: './spacing-panel.component.html',\n styleUrls: ['./spacing-panel.component.scss'],\n})\nexport class SpacingPanelComponent implements OnInit {\n @Input() sliderMax = 100;\n @Input() type: SpacingType = SpacingType.Padding;\n get typeIsBorderRadius() {\n return this.type === SpacingType.BorderRadius;\n }\n\n private readonly availableSides = ['top', 'right', 'bottom', 'left'];\n\n sliderValue = 0;\n enabledSides: string[] = ['top', 'right', 'bottom', 'left'];\n spacing = {top: 0, left: 0, right: 0, bottom: 0};\n unit = 'px';\n cornersConnected$ = new BehaviorSubject(true);\n\n sidesForm = this.fb.group(\n {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n {updateOn: 'blur'}\n );\n\n constructor(\n private state: BuilderStateService,\n private mutations: MutationsService,\n private fb: FormBuilder\n ) {}\n\n ngOnInit() {\n // update all sides control when one of them changes, if they are connected.\n this.availableSides.forEach(side => {\n this.sidesForm.get(side).valueChanges.subscribe(sideValue => {\n const numeric = sideValue.replace(/^\\D+/g, '').trim();\n if (numeric !== sideValue) {\n if (numeric && numeric > -1) {\n this.sidesForm\n .get(side)\n .setValue(numeric, {emitEvent: false});\n if (this.cornersConnected$.value) {\n this.sidesForm.setValue(\n {\n top: numeric,\n right: numeric,\n left: numeric,\n bottom: numeric,\n },\n {emitEvent: false}\n );\n }\n } else {\n this.setSelectedElementSpacingValues();\n }\n }\n });\n });\n\n // apply spacing when either of the side control value changes\n this.sidesForm.valueChanges.subscribe(() => {\n this.applySpacing();\n });\n\n // on undo/redo get current el spacing\n this.mutations.executed$.subscribe(() => {\n this.setSelectedElementSpacingValues();\n });\n\n // on selected element change get new el spacing\n this.state.selected$.subscribe(() => {\n this.setSelectedElementSpacingValues();\n });\n }\n\n toggleCornersConnected() {\n this.cornersConnected$.next(!this.cornersConnected$.value);\n }\n\n applySpacing() {\n const u = this.unit;\n const v = this.sidesForm.value;\n const top = this.sideEnabled('top') ? v.top : 0;\n const right = this.sideEnabled('right') ? v.right : 0;\n const bottom = this.sideEnabled('bottom') ? v.bottom : 0;\n const left = this.sideEnabled('left') ? v.left : 0;\n const spacing =\n this.type === SpacingType.BorderRadius\n ? `${top}${u} ${left}${u} ${bottom}${u} ${right}${u}`\n : `${top}${u} ${right}${u} ${bottom}${u} ${left}${u}`;\n this.mutations.execute(this.getSpacingMutation(this.type, spacing));\n }\n\n toggleSide(name: string) {\n if (name === 'all') {\n this.enabledSides =\n this.enabledSides.length > 0 ? [] : [...this.availableSides];\n } else {\n if (this.sideEnabled(name)) {\n this.enabledSides.splice(this.enabledSides.indexOf(name), 1);\n } else {\n this.enabledSides.push(name);\n }\n }\n this.applySpacing();\n }\n\n sideEnabled(name: string) {\n if (name === 'all') return this.enabledSides.length === 4;\n return this.enabledSides.indexOf(name) > -1;\n }\n\n onSliderInput(e: MatSliderChange) {\n this.enabledSides.forEach(side => {\n this.sidesForm.get(side).setValue(e.value, {emitEvent: false});\n });\n this.applySpacing();\n }\n\n onFormSubmit() {\n (document.activeElement as HTMLElement).blur();\n // form will change and spacing get applied on blur\n }\n\n private getSpacingMutation(type: SpacingType, spacing: string) {\n const el = this.state.selected.node;\n switch (type) {\n case SpacingType.Padding:\n return new SetPadding(spacing, el);\n case SpacingType.Margin:\n return new SetMargin(spacing, el);\n case SpacingType.BorderRadius:\n return new SetBorderRadius(spacing, el);\n case SpacingType.BorderWidth:\n return new SetBorderWidth(spacing, el);\n }\n }\n\n private setSelectedElementSpacingValues() {\n this.availableSides.forEach(side => {\n const value = this.state.getSelectedStyle(\n this.generateCssRuleName(side) as CssKey\n )?.replace('px', '');\n this.sidesForm.get(side).setValue(value, {emitEvent: false});\n });\n this.cornersConnected$.next(this.allSpacingValuesEqual());\n if (this.cornersConnected$.value) {\n this.sliderValue = this.sidesForm.get('top').value;\n }\n }\n\n private allSpacingValuesEqual() {\n return (\n this.availableSides.filter(side => {\n return this.spacing[side] === this.spacing.top;\n }).length === 4\n );\n }\n\n private generateCssRuleName(side: string): CssKey {\n side = ucFirst(side);\n if (this.type === SpacingType.BorderWidth) {\n return `border${side}Width` as CssKey;\n } else if (this.type === SpacingType.BorderRadius) {\n return this.generateBorderRadiusRuleName(side);\n } else {\n return (this.type + side) as CssKey;\n }\n }\n\n private generateBorderRadiusRuleName(side: string) {\n side = side.toLowerCase();\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","<div class=\"side-controls\">\n <button class=\"no-style side-control all-control\" (click)=\"toggleSide('all')\">\n <side-control-border type=\"all\" [active]=\"sideEnabled('all')\"></side-control-border>\n </button>\n\n <button class=\"no-style side-control top-control\" (click)=\"toggleSide('top')\">\n <side-control-border\n [type]=\"typeIsBorderRadius ? 'top-left' : 'top'\"\n [active]=\"sideEnabled('top')\"\n ></side-control-border>\n </button>\n <button class=\"no-style side-control right-control\" (click)=\"toggleSide('right')\">\n <side-control-border\n [type]=\"typeIsBorderRadius ? 'bottom-left' : 'right'\"\n [active]=\"sideEnabled('right')\"\n ></side-control-border>\n </button>\n <button class=\"no-style side-control bottom-control\" (click)=\"toggleSide('bottom')\">\n <side-control-border\n [type]=\"typeIsBorderRadius ? 'top-right' : 'bottom'\"\n [active]=\"sideEnabled('bottom')\"\n ></side-control-border>\n </button>\n <button class=\"no-style side-control left-control\" (click)=\"toggleSide('left')\">\n <side-control-border\n [type]=\"typeIsBorderRadius ? 'bottom-right' : 'left'\"\n [active]=\"sideEnabled('left')\"\n ></side-control-border>\n </button>\n</div>\n\n<mat-slider\n min=\"1\"\n [max]=\"sliderMax\"\n step=\"1\"\n color=\"accent\"\n [value]=\"sliderValue\"\n (input)=\"onSliderInput($event)\"\n [disabled]=\"!enabledSides.length\"\n></mat-slider>\n\n<ng-content></ng-content>\n\n<form\n (ngSubmit)=\"onFormSubmit()\"\n class=\"side-inputs\"\n [class.border-radius]=\"typeIsBorderRadius\"\n [formGroup]=\"sidesForm\"\n>\n <div class=\"input-container top-input\">\n <input formControlName=\"top\" />\n <div class=\"measure-unit\">{{ unit }}</div>\n </div>\n <div class=\"input-container left-input\">\n <input formControlName=\"left\" />\n <div class=\"measure-unit\">{{ unit }}</div>\n </div>\n <button\n mat-icon-button\n class=\"connect-button\"\n [class.active]=\"cornersConnected$ | async\"\n type=\"button\"\n [matTooltip]=\"((cornersConnected$ | async) ? 'Set values separately' : 'Link values together') | trans\"\n (click)=\"toggleCornersConnected()\"\n >\n <mat-icon [svgIcon]=\"(cornersConnected$ | async) ? 'link' : 'link-off'\"></mat-icon>\n </button>\n <div class=\"input-container right-input\">\n <input formControlName=\"right\" />\n <div class=\"measure-unit\">{{ unit }}</div>\n </div>\n <div class=\"input-container bottom-input\">\n <input formControlName=\"bottom\" />\n <div class=\"measure-unit\">{{ unit }}</div>\n </div>\n <button type=\"submit\" class=\"hidden\"></button>\n</form>\n","import {SetStyle} from '../set-style';\n\nexport interface TypographyStyles {\n color?: string;\n backgroundColor?: string;\n fontSize?: string;\n textAlign?: string;\n fontStyle?: 'italic' | 'initial';\n fontFamily?: string;\n lineHeight?: string;\n fontWeight?: string;\n textDecorationLine?: string;\n}\n\nexport class SetTextStyle extends SetStyle {\n static historyName = 'Changed Text Style';\n constructor(\n protected newProps: Partial<TypographyStyles> = {},\n el: HTMLElement\n ) {\n super(newProps, el);\n }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"executeMutation()\" ngNativeValidate>\n <div class=\"many-inputs\">\n <div class=\"input-container font-family\">\n <label for=\"typography-font-family\" trans>Font</label>\n <div class=\"fake-input\" id=\"typography-font-family\" tabindex=\"0\" (click)=\"openFontPicker()\">\n {{ currentValue('fontFamily') | fontDisplayName }}\n </div>\n <mat-icon svgIcon=\"keyboard-arrow-down\"></mat-icon>\n </div>\n <div class=\"input-container font-size\">\n <label for=\"typography-font-size\" trans>Font Size (px)</label>\n <input type=\"number\" (blur)=\"onFontSizeBlur($event)\" min=\"1\" max=\"99\" formControlName=\"fontSize\" id=\"typography-font-size\" />\n </div>\n <div class=\"input-container font-weight\">\n <label for=\"typography-font-weight\" trans>Font Weight</label>\n <select formControlName=\"fontWeight\" id=\"typography-font-weight\">\n <option [value]=\"weight\" *ngFor=\"let weight of fontWeights\">{{ weight }}</option>\n </select>\n </div>\n </div>\n\n <div class=\"align-center decoration-row\">\n <button\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"'Italic' | trans\"\n (click)=\"toggleTextStyle('fontStyle', 'italic')\"\n [class.active]=\"currentValue('fontStyle') === 'italic'\"\n >\n <mat-icon svgIcon=\"format-italic\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"'Underline' | trans\"\n (click)=\"toggleTextStyle('textDecorationLine', 'underline')\"\n [class.active]=\"currentValue('textDecorationLine') === 'underline'\"\n >\n <mat-icon svgIcon=\"format-underlined\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n class=\"push-right\"\n [matTooltip]=\"'Line Through' | trans\"\n (click)=\"toggleTextStyle('textDecorationLine', 'line-through')\"\n [class.active]=\"currentValue('textDecorationLine') === 'line-through'\"\n >\n <mat-icon svgIcon=\"format-strikethrough\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"openColorPicker('color')\"\n [matTooltip]=\"'Color' | trans\"\n >\n <mat-icon svgIcon=\"format-color-text\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"openColorPicker('backgroundColor')\"\n [matTooltip]=\"'Background Color' | trans\"\n >\n <mat-icon svgIcon=\"format-color-fill\"></mat-icon>\n </button>\n </div>\n\n <div class=\"align-center\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"toggleTextStyle('textAlign', 'left')\"\n [class.active]=\"currentValue('textAlign') === 'left'\"\n [matTooltip]=\"'Align left' | trans\"\n >\n <mat-icon svgIcon=\"format-align-left\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"toggleTextStyle('textAlign', 'center')\"\n [class.active]=\"currentValue('textAlign') === 'center'\"\n [matTooltip]=\"'Align center' | trans\"\n >\n <mat-icon svgIcon=\"format-align-center\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"toggleTextStyle('textAlign', 'right')\"\n [class.active]=\"currentValue('textAlign') === 'right'\"\n [matTooltip]=\"'Align right' | trans\"\n >\n <mat-icon svgIcon=\"format-align-right\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"toggleTextStyle('textAlign', 'justify')\"\n [class.active]=\"currentValue('textAlign') === 'justify'\"\n [matTooltip]=\"'Align justify' | trans\"\n >\n <mat-icon svgIcon=\"format-align-justify\"></mat-icon>\n </button>\n </div>\n</form>\n","import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {BuilderDocumentActions} from '../../../builder-document-actions.service';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {BuilderStateService} from '../../../builder-state.service';\nimport {BuilderOverlayService} from '../../../overlays/builder-overlay.service';\nimport {MutationsService} from '../../../mutations/mutations.service';\nimport {FormBuilder} from '@angular/forms';\nimport {\n SetTextStyle,\n TypographyStyles,\n} from '../../../mutations/style/text/set-text-style';\nimport {\n CssKey,\n DEFAULT_CSS_VALUES,\n} from '../../../mutations/style/default-css-values';\nimport {FontSelectorOverlayComponent} from '../../../overlays/font-selector-overlay/font-selector-overlay.component';\nimport {GoogleFontSelectorValue} from '@common/shared/form-controls/google-font-selector/google-font-selector.component';\n\n@Component({\n selector: 'typography-panel',\n templateUrl: './typography-panel.component.html',\n styleUrls: ['./typography-panel.component.scss'],\n})\nexport class TypographyPanelComponent implements OnInit {\n @ViewChild('googleFontsOrigin', {static: true})\n googleFontsOrigin: ElementRef;\n\n public styles: any = {};\n public baseFonts: {name: string; css: string}[] = [];\n public fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\n\n form = this.fb.group({\n color: '',\n fontSize: this.fb.control('', {updateOn: 'submit'}),\n textAlign: '',\n fontStyle: '',\n fontFamily: '',\n lineHeight: '',\n fontWeight: '',\n backgroundColor: '',\n textDecorationLine: '',\n });\n\n constructor(\n private state: BuilderStateService,\n private builderActions: BuilderDocumentActions,\n private overlay: BuilderOverlayService,\n private mutations: MutationsService,\n private fb: FormBuilder\n ) {}\n\n ngOnInit() {\n this.mutations.executed$.subscribe(() => {\n this.setSelectedElementTextStyles();\n });\n this.state.selected$.subscribe(() => {\n this.setSelectedElementTextStyles();\n });\n this.form.valueChanges.subscribe(() => {\n this.executeMutation();\n });\n }\n\n executeMutation() {\n const values = {\n ...this.form.value,\n fontSize: this.form.value.fontSize + 'px',\n };\n this.mutations.execute(\n new SetTextStyle(values, this.state.selected.node)\n );\n }\n\n currentValue(prop: keyof TypographyStyles) {\n const values = this.form.value as TypographyStyles;\n return values[prop];\n }\n\n isDefaultValue(prop: keyof TypographyStyles): boolean {\n return DEFAULT_CSS_VALUES[prop] === this.form.value[prop];\n }\n\n toggleTextStyle(prop: keyof TypographyStyles, value: string) {\n this.form.patchValue({\n [prop]: this.form.value[prop] === value ? null : value,\n });\n }\n\n openColorPicker(prop: 'color' | 'backgroundColor') {\n const currentColor = this.form.value[prop];\n this.overlay\n .open(ColorpickerPanelComponent, {color: currentColor})\n .valueChanged()\n .subscribe(color => {\n this.form.patchValue({\n [prop]: color,\n });\n });\n }\n\n openFontPicker() {\n const panelRef = this.overlay.open(FontSelectorOverlayComponent);\n panelRef.valueChanged().subscribe((value: GoogleFontSelectorValue) => {\n panelRef.close();\n this.form.patchValue({\n fontFamily: value.family,\n });\n });\n }\n\n\n onFontSizeBlur(e: FocusEvent) {\n this.form.patchValue({\n fontSize: (e.target as HTMLSelectElement).value,\n });\n }\n\n private setSelectedElementTextStyles() {\n const values: TypographyStyles = {};\n Object.keys(this.form.value).forEach(prop => {\n const val = this.state.getSelectedStyle(prop as CssKey);\n values[prop] = prop === 'fontSize' ? parseInt(val) : val;\n });\n this.form.patchValue(values, {emitEvent: false});\n }\n}\n","import {SetBorder} from './set-border';\n\nexport class SetBorderColor extends SetBorder {\n static historyName = 'Changed border color';\n constructor(private borderColor: string, el: HTMLElement) {\n super({borderColor}, el);\n }\n}\n","import {SetBorder} from './set-border';\n\nexport class SetBorderStyle extends SetBorder {\n static historyName = 'Changed border style';\n constructor(private borderStyle: string, el: HTMLElement) {\n super({borderStyle}, el);\n }\n}\n","import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {ColorpickerPanelComponent} from '@common/core/ui/color-picker/colorpicker-panel.component';\nimport {MutationsService} from '../../../mutations/mutations.service';\nimport {SetBorderColor} from '../../../mutations/style/border/set-border-color';\nimport {BuilderOverlayService} from '../../../overlays/builder-overlay.service';\nimport {SetBorderStyle} from '../../../mutations/style/border/set-border-style';\nimport {BuilderStateService} from '../../../builder-state.service';\n\n@Component({\n selector: 'border-style-controls',\n templateUrl: './border-style-controls.component.html',\n styleUrls: ['./border-style-controls.component.scss'],\n})\nexport class BorderStyleControlsComponent implements OnInit {\n @ViewChild('colorButton', {static: true}) colorButton: ElementRef;\n\n borderStyle = 'none';\n borderColor = '#eee';\n\n constructor(\n private state: BuilderStateService,\n private builderOverlay: BuilderOverlayService,\n private mutations: MutationsService\n ) {}\n\n ngOnInit() {\n this.state.selected$.subscribe(() => {\n this.setInitialBorderStyles();\n });\n this.mutations.executed$.subscribe(() => {\n this.setInitialBorderStyles();\n });\n }\n\n applyBorderStyle() {\n this.mutations.execute(\n new SetBorderStyle(this.borderStyle, this.state.selected.node)\n );\n }\n\n openColorPicker() {\n this.builderOverlay\n .open(ColorpickerPanelComponent, {\n color: this.borderColor,\n })\n .valueChanged()\n .subscribe(color => {\n this.borderColor = color;\n this.mutations.execute(\n new SetBorderColor(color, this.state.selected.node)\n );\n });\n }\n\n private setInitialBorderStyles() {\n this.borderStyle = this.state.getSelectedStyle('borderStyle');\n this.borderColor = this.state.getSelectedStyle('borderColor');\n }\n}\n","<button\n type=\"button\"\n class=\"no-style border-color\"\n [style.borderColor]=\"borderColor\"\n (click)=\"openColorPicker()\"\n [matTooltip]=\"'Border Color' | trans\"\n #colorButton\n></button>\n\n<div class=\"input-container\">\n <select\n name=\"border-style\"\n id=\"border-style\"\n [(ngModel)]=\"borderStyle\"\n (ngModelChange)=\"applyBorderStyle()\"\n >\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>\n","<div class=\"breadcrumbs\" *ngIf=\"path.length\">\n <span\n class=\"crumb-container\"\n *ngFor=\"let item of path; last as last\"\n (mouseenter)=\"contextBoxes.repositionBox(contextType.Hover, item.node)\"\n [class.last]=\"last\"\n (mouseleave)=\"contextBoxes.hideBox(contextType.Hover)\"\n >\n <button class=\"crumb no-style\" (click)=\"livePreview.setSelectedContext(item.node)\">{{ item.name }}</button>\n <mat-icon svgIcon=\"keyboard-arrow-right\" *ngIf=\"!last\"></mat-icon>\n </span>\n</div>\n\n<ng-container *ngIf=\"state.selected?.el?.editActionName as actionName\">\n <button\n class=\"edit-layout-button\"\n mat-flat-button\n (click)=\"state.selected.el.editAction(state.selected.node)\"\n color=\"accent\"\n trans\n >\n {{ actionName }}\n </button>\n</ng-container>\n\n<mat-accordion>\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Attributes)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Settings</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\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Background)\"\n >\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\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Shadow)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Shadow</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\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Padding)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Padding</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel [type]=\"spacingType.Padding\" class=\"panel-body\"></spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Margin)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Margin</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel [type]=\"spacingType.Margin\" class=\"panel-body\"></spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Text)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Typography</mat-panel-title>\n </mat-expansion-panel-header>\n <typography-panel class=\"panel-body\"></typography-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Border)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Border</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel [type]=\"spacingType.BorderWidth\" class=\"panel-body\">\n <border-style-controls></border-style-controls>\n </spacing-panel>\n </mat-expansion-panel>\n\n <mat-expansion-panel\n class=\"category mat-elevation-z\"\n *ngIf=\"canEdit(editableProp.Border)\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title trans>Border Roundness</mat-panel-title>\n </mat-expansion-panel-header>\n <spacing-panel\n [type]=\"spacingType.BorderRadius\"\n class=\"panel-body\"\n sliderMax=\"30\"\n ></spacing-panel>\n </mat-expansion-panel>\n</mat-accordion>\n\n<no-results-message *ngIf=\"!state.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 {SpacingType} from './spacing-panel/spacing-type';\nimport {EditableProp} from '../../elements/architect-element';\nimport {ContextBoxes} from '../../live-preview/context-box/context-boxes.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {ContextType} from '../../live-preview/context-box/builder-context';\n\n@Component({\n selector: 'inspector-panel',\n templateUrl: './inspector-panel.component.html',\n styleUrls: ['./inspector-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class InspectorPanelComponent implements OnInit {\n spacingType = SpacingType;\n editableProp = EditableProp;\n contextType = ContextType;\n path: {node: HTMLElement; name: string}[] = [];\n\n constructor(\n public livePreview: LivePreview,\n public contextBoxes: ContextBoxes,\n public state: BuilderStateService\n ) {}\n\n ngOnInit() {\n this.state.selected$.subscribe(context => {\n this.path = context?.path.slice() || [];\n });\n }\n\n canEdit(property: EditableProp): boolean {\n if (!this.state.selected?.el) return false;\n return this.state.selected.el.canEdit.includes(property);\n }\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nexport function customPresetValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const spans = presetStringToToArray(control.value);\n if (!presetIsValid(spans)) {\n return {customPreset: {preset: control.value}};\n } else {\n return null;\n }\n };\n}\n\nexport function presetStringToToArray(preset: string): number[] {\n const customSpan = preset.split('+');\n return customSpan.map(span => parseInt(span.trim()));\n}\n\nfunction presetIsValid(preset: number[]): boolean {\n const validSpans = preset.filter(span => span > 0 && span <= 12);\n return validSpans.length && validSpans.reduce((sum, x) => sum + x) === 12;\n}\n","<div class=\"preset-grid\">\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\n class=\"preset\"\n [class.active]=\"presetIsActive([3, 3, 3, 3])\"\n (click)=\"selectPreset([3, 3, 3, 3])\"\n >\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\n class=\"preset\"\n [class.active]=\"presetIsActive([2, 2, 2, 2, 2, 2])\"\n (click)=\"selectPreset([2, 2, 2, 2, 2, 2])\"\n >\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</div>\n\n<form\n class=\"custom-span-panel input-container\"\n (ngSubmit)=\"applyCustomPreset()\"\n ngNativeValidate\n *ngIf=\"customPanelOpen\"\n>\n <input\n #customInput\n type=\"text\"\n [formControl]=\"customPresetControl\"\n (blur)=\"applyCustomPreset()\"\n placeholder=\"4 + 4 + 4\"\n required\n minlength=\"3\"\n pattern=\"[1-9\\+ ]+\"\n />\n <div class=\"error\" *ngIf=\"customPresetControl.errors?.customPreset\" trans>\n This preset is not valid. Added values should equal 12.\n </div>\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {\n customPresetValidator,\n presetStringToToArray,\n} from './custom-preset-validator';\n\n@Component({\n selector: 'column-presets',\n templateUrl: './column-presets.component.html',\n styleUrls: ['./column-presets.component.scss'],\n})\nexport class ColumnPresetsComponent implements OnChanges {\n @Input() preset: number[];\n @Output() selected = new EventEmitter<number[]>();\n @ViewChild('customInput') customInput: ElementRef<HTMLInputElement>;\n\n customPanelOpen = false;\n customPresetIsValid = true;\n\n customPresetControl = new FormControl('', customPresetValidator());\n\n ngOnChanges() {\n this.customPresetControl.reset(this.preset.join(' + '));\n }\n\n selectPreset(preset: number[]) {\n this.preset = preset;\n this.selected.emit(preset);\n }\n\n presetIsActive(preset: number[]) {\n return (\n this.preset.length === preset.length &&\n this.preset.every((element, index) => {\n return element === preset[index];\n })\n );\n }\n\n toggleCustomPanel() {\n if (this.customPanelOpen) {\n this.customPanelOpen = false;\n } else {\n this.customPanelOpen = true;\n setTimeout(() => {\n this.customInput.nativeElement.focus();\n });\n }\n }\n\n applyCustomPreset() {\n if (this.customPresetControl.valid) {\n this.selectPreset(\n presetStringToToArray(this.customPresetControl.value)\n );\n this.customPanelOpen = false;\n }\n }\n}\n","<mat-accordion class=\"containers\" cdkDropList (cdkDropListDropped)=\"reorder($event, 'container')\">\n <button class=\"no-style add-item-button\" (click)=\"layoutPanel.createContainer(null, 0)\">\n <span trans>+ ADD CONTAINER</span>\n </button>\n\n <div\n class=\"container-drag-wrapper\"\n cdkDrag\n [id]=\"container.id\"\n *ngFor=\"let container of layoutPanel.containers; index as containerIndex; trackBy: trackByFn\"\n >\n <mat-expansion-panel\n class=\"container-panel mat-elevation-z\"\n [expanded]=\"containerIsSelected(container)\"\n (opened)=\"onPanelOpen(container)\"\n >\n <mat-expansion-panel-header\n class=\"drag-handle\"\n cdkDragHandle\n (mouseenter)=\"repositionHoverBox(container.id)\"\n (mouseleave)=\"hideHoverBox()\"\n >\n <mat-panel-title class=\"name\">\n <span trans>Container</span> <span [innerHtml]=\"' '\"></span>\n <span>{{ containerIndex + 1 }}</span>\n <div *cdkDragPreview class=\"layout-drag-preview\">\n <span trans>Container</span> <span [innerHtml]=\"' '\"></span>\n <span>{{ containerIndex + 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.id, 0)\">\n <span trans>+ ADD ROW</span>\n </button>\n\n <div\n class=\"row-drag-wrapper\"\n cdkDrag\n *ngFor=\"let row of container.rows; index as rowIndex\"\n >\n <div\n class=\"row\"\n cdkDragHandle\n [class.selected]=\"layoutPanel.selectedRow?.id === row\"\n (mouseenter)=\"repositionHoverBox(row)\"\n (mouseleave)=\"hideHoverBox()\"\n >\n <div *cdkDragPreview class=\"layout-drag-preview\">\n <span trans>Row</span> {{ rowIndex + 1 }}\n </div>\n <div class=\"row-name\" (click)=\"livePreview.setSelectedContext(row)\">\n <span trans>Row</span> {{ rowIndex + 1 }}\n </div>\n <div class=\"row-actions\">\n <button\n class=\"no-style row-action\"\n [matTooltip]=\"'Modify' | trans\"\n (click)=\"openInspectorPanel(row)\"\n >\n <mat-icon svgIcon=\"edit\"></mat-icon>\n </button>\n <button\n class=\"no-style row-action\"\n [matTooltip]=\"'Clone' | trans\"\n (click)=\"cloneRow(row)\"\n >\n <mat-icon svgIcon=\"file-copy\"></mat-icon>\n </button>\n <button\n class=\"no-style row-action\"\n [matTooltip]=\"'Delete' | trans\"\n (click)=\"removeItem(row)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n </div>\n\n <button\n class=\"no-style add-item-button\"\n (click)=\"layoutPanel.createRow(container.id, rowIndex + 1)\"\n >\n <span trans>+ ADD ROW</span>\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"layoutPanel.selectedRow\">\n <column-presets\n [preset]=\"layoutPanel.selectedRow.preset\"\n (selected)=\"layoutPanel.applyPreset($event)\"\n ></column-presets>\n\n <div\n class=\"current-columns\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"reorder($event, 'column')\"\n >\n <div\n 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.id)\"\n [id]=\"column.id\"\n [class.selected]=\"isSelected(column.id)\"\n (mouseenter)=\"repositionHoverBox(column.id)\"\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\n class=\"no-style\"\n [matTooltip]=\"'Modify' | trans\"\n (click)=\"openInspectorPanel(container.id)\"\n >\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.id)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <button\n class=\"no-style add-item-button hide-text\"\n (click)=\"layoutPanel.createContainer(container.id, containerIndex)\"\n >\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 {ContextBoxes} from '../../live-preview/context-box/context-boxes.service';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport {BuilderDocumentActions} from '../../builder-document-actions.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {BuilderSidebarPanel} from '../builder-sidebar-panel';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {MoveNode} from '../../mutations/dom/move-node';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {distinctUntilChanged} from 'rxjs/operators';\nimport {combineLatest} from 'rxjs';\nimport {findNodeById} from '../../utils/find-nodes-by-id';\nimport {LivePreview} from '../../live-preview.service';\nimport {ContextType} from '../../live-preview/context-box/builder-context';\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 trackByFn = (i: number, container: Container) => container.id;\n\n constructor(\n private contextBoxes: ContextBoxes,\n public layoutPanel: LayoutPanel,\n private actions: BuilderDocumentActions,\n public state: BuilderStateService,\n private mutations: MutationsService,\n public livePreview: LivePreview\n ) {}\n\n ngOnInit() {\n this.mutations.executed$.subscribe(() => {\n if (\n this.state.inspectorPanel$.value === BuilderSidebarPanel.Layout\n ) {\n this.layoutPanel.loadContainers();\n // row layout might have changed on mutation\n this.layoutPanel.selectRow(this.layoutPanel.selectedRow?.id);\n }\n });\n\n combineLatest([\n this.state.inspectorPanel$.pipe(distinctUntilChanged()),\n this.state.selected$,\n ]).subscribe(() => {\n if (\n this.state.inspectorPanel$.value === BuilderSidebarPanel.Layout\n ) {\n this.layoutPanel.selectActiveRowAndContainer();\n }\n });\n\n this.state.previewDocReloaded$.subscribe(() => {\n this.layoutPanel.loadContainers();\n });\n }\n\n openInspectorPanel(nodeId: string) {\n this.livePreview.setSelectedContext(\n findNodeById(nodeId, this.state.previewDoc)\n );\n this.state.inspectorPanel$.next(BuilderSidebarPanel.Inspector);\n }\n\n cloneContainer(container: Container) {\n const cloneId = this.actions.cloneNode(\n findNodeById(container.id, this.state.previewDoc)\n );\n this.livePreview.setSelectedContext(cloneId);\n }\n\n cloneRow(nodeId: string) {\n const cloneId = this.actions.cloneNode(\n findNodeById(nodeId, this.state.previewDoc)\n );\n this.livePreview.setSelectedContext(\n findNodeById(cloneId, this.state.previewDoc)\n );\n }\n\n removeItem(nodeId: string) {\n this.actions.removeNode(findNodeById(nodeId, this.state.previewDoc));\n }\n\n repositionHoverBox(nodeId: string) {\n this.contextBoxes.repositionBox(\n ContextType.Hover,\n findNodeById(nodeId, this.state.previewDoc)\n );\n }\n\n hideHoverBox() {\n this.contextBoxes.hideBox(ContextType.Hover);\n }\n\n containerIsSelected(container: Container): boolean {\n if (!this.layoutPanel.selectedContainer) return false;\n return this.layoutPanel.selectedContainer.id === container.id;\n }\n\n onPanelOpen(container: Container) {\n if (this.layoutPanel.selectedContainer?.id !== container.id) {\n this.layoutPanel.selectedContainer = container;\n this.livePreview.setSelectedContext(container.rows[0]);\n }\n }\n\n isSelected(nodeId: string) {\n return getNodeId(this.state.selected?.node) === nodeId;\n }\n\n widthFromSpan(span: number): string {\n return (span * 100) / 12 + '%';\n }\n\n reorder(e: CdkDragDrop<any>, type: 'container' | 'row' | 'column') {\n const nodeList = this.getNodeList(type);\n const nodeId = nodeList[e.previousIndex];\n const node = findNodeById(nodeId, this.state.previewDoc);\n const parentId = getNodeId(node.parentElement);\n this.mutations.execute(\n new MoveNode(\n node,\n e.previousIndex,\n parentId,\n e.currentIndex,\n parentId\n )\n );\n }\n\n private getNodeList(type: 'container' | 'row' | 'column'): string[] {\n switch (type) {\n case 'container':\n return this.layoutPanel.containers.map(c => c.id);\n case 'row':\n return this.layoutPanel.selectedContainer.rows;\n case 'column':\n return this.layoutPanel.selectedRow.columns.map(c => c.id);\n }\n }\n}\n","export function getMetaTagValue(tagName: string, doc: Document) {\n const node = doc.querySelector(`meta[name=${tagName}]`);\n return node && node.getAttribute('content');\n}\n","export function getTitleTagValue(doc: Document) {\n const node = doc.querySelector('title');\n return node && node.innerText;\n}\n\n","export function setMetaTagValue(tagName: string, value: string, doc: Document) {\n let node = doc.querySelector(`meta[name=${tagName}]`);\n if (!node) {\n node = doc.createElement('meta');\n doc.head.appendChild(node);\n }\n node.setAttribute('name', tagName);\n node.setAttribute('content', value);\n}\n","import {BaseMutation} from '../base-mutation';\nimport {PageSeoValues} from '../../sidebar/pages-panel/page-seo-values';\nimport {setMetaTagValue} from '../../utils/set-meta-tag-value';\nimport {setTitleTagValue} from '../../utils/set-title-tag-value';\n\nexport class UpdateSeoTags extends BaseMutation {\n constructor(protected tags: PageSeoValues) {\n super(null);\n }\n\n protected executeMutation(doc: Document): boolean {\n setMetaTagValue('keywords', this.tags.keywords, doc);\n setTitleTagValue(this.tags.title, doc);\n setMetaTagValue('description', this.tags.description, doc);\n return true;\n }\n\n protected undoMutation(doc: Document): boolean {\n return false;\n }\n}\n","export function setTitleTagValue(value: string, doc: Document) {\n let node = doc.querySelector('title');\n if (!node) {\n node = doc.createElement('title');\n doc.head.appendChild(node);\n }\n node.innerText = value;\n}\n","<button\n class=\"new-page-button\"\n mat-raised-button\n color=\"accent\"\n [disabled]=\"loading$ | async\"\n (click)=\"createNewPage()\"\n>\n <mat-icon svgIcon=\"add\"></mat-icon>\n <span trans>New Page</span>\n</button>\n\n<div class=\"content-panel\">\n <div class=\"header\" trans>Active Page</div>\n\n <div class=\"input-container\">\n <select name=\"active-page\" id=\"active-page\" [formControl]=\"activePageControl\">\n <option [ngValue]=\"page.id\" *ngFor=\"let page of state.pages$ | async\">\n {{ page.name }}\n </option>\n </select>\n </div>\n\n <div class=\"active-page-actions\">\n <button\n mat-button\n color=\"warn\"\n [disabled]=\"!canDeleteSelectedPage() || (loading$ | async)\"\n (click)=\"deleteSelectedPage()\"\n [matTooltip]=\"'Delete' | trans\"\n trans\n >\n Delete\n </button>\n <button\n mat-button\n color=\"accent\"\n [disabled]=\"loading$ | async\"\n (click)=\"duplicateSelectedPage()\"\n [matTooltip]=\"'Duplicate' | trans\"\n trans\n >\n Duplicate\n </button>\n </div>\n</div>\n\n<form\n class=\"page-options many-inputs content-panel\"\n (ngSubmit)=\"updateSelectedPage()\"\n [formGroup]=\"pageForm\"\n ngNativeValidate\n>\n <div class=\"header\" trans>Page SEO Options</div>\n\n <div class=\"input-container\">\n <label for=\"selected-page-name\" trans>Page Name</label>\n <input\n type=\"text\"\n name=\"selected-page-name\"\n id=\"selected-page-name\"\n formControlName=\"name\"\n required\n />\n </div>\n\n <div class=\"input-container\">\n <label for=\"selected-page-title\" trans>Page Title</label>\n <input\n type=\"text\"\n name=\"selected-page-title\"\n id=\"selected-page-title\"\n formControlName=\"title\"\n />\n </div>\n\n <div class=\"input-container\">\n <label for=\"selected-page-description\" trans>Page Description</label>\n <textarea\n type=\"text\"\n name=\"selected-page-description\"\n id=\"selected-page-description\"\n formControlName=\"description\"\n ></textarea>\n </div>\n\n <div class=\"input-container\">\n <label for=\"selected-page-keywords\" trans>Page Keywords</label>\n <input\n type=\"text\"\n name=\"selected-page-keywords\"\n id=\"selected-page-keywords\"\n formControlName=\"keywords\"\n />\n <p trans>Separate each one with a comma.</p>\n </div>\n\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Update</button>\n</form>\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {Toast} from '@common/core/ui/toast.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';\nimport {getMetaTagValue} from '../../utils/get-meta-tag-value';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {getTitleTagValue} from '../../utils/get-title-tag-value';\nimport {PageSeoValues} from './page-seo-values';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {UpdateSeoTags} from '../../mutations/seo/update-seo-tags';\nimport {take} from 'rxjs/operators';\nimport {BuilderPage} from '../../../shared/builder-types';\nimport {addIdToPages} from '../../utils/add-id-to-pages';\nimport {LivePreview} from '../../live-preview.service';\nimport {ActiveProject} from '../../projects/active-project';\n\n@Component({\n selector: 'pages-panel',\n templateUrl: './pages-panel.component.html',\n styleUrls: ['./pages-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PagesPanelComponent implements OnInit {\n loading$ = new BehaviorSubject(false);\n activePageControl = new FormControl();\n pageForm = this.fb.group({\n name: [''],\n title: [''],\n description: [''],\n keywords: [''],\n });\n\n constructor(\n private projects: Projects,\n private toast: Toast,\n private fb: FormBuilder,\n public state: BuilderStateService,\n private mutations: MutationsService,\n private livePreview: LivePreview,\n private activeProject: ActiveProject\n ) {}\n\n ngOnInit() {\n this.state.previewDocReloaded$.pipe(take(1)).subscribe(() => {\n this.activePageControl.valueChanges.subscribe(pageId => {\n // initial \"index\" page will be already loaded,\n // make sure to not reload it again needlessly\n if (pageId !== this.state.activePage$.value.id) {\n this.state.setActivePage(pageId);\n }\n });\n\n this.state.activePage$.subscribe(page => {\n if (page) {\n this.activePageControl.setValue(page.id);\n this.hydrateUpdateModel();\n }\n });\n });\n }\n\n async createNewPage() {\n this.loading$.next(true);\n\n let name = `page-${this.state.pages$.value.length + 1}`;\n // make sure we don't duplicate page names\n if (this.state.pages$.value.find(page => page.name === name)) {\n name += '-copy';\n }\n\n await this.addPage({\n name,\n html: getProductionHtml(BLANK_PAGE_SKELETON),\n });\n\n this.hydrateUpdateModel();\n await this.activeProject.save();\n this.activePageControl.setValue(this.state.activePage$.value.id);\n this.loading$.next(false);\n this.toast.open('Page created');\n }\n\n canDeleteSelectedPage() {\n return (\n this.state.activePage$.value?.name?.toLowerCase() !== 'index' &&\n this.state.pages$.value.length > 1\n );\n }\n\n updateSelectedPage() {\n this.loading$.next(true);\n\n const pageValue = this.pageForm.getRawValue() as PageSeoValues;\n this.mutations.execute(new UpdateSeoTags(pageValue), {\n skipUndoStack: true,\n });\n\n const pages = [...this.state.pages$.value];\n const i = pages.findIndex(\n page => page.id === this.state.activePage$.value.id\n );\n pages[i].html = this.state.activePage$.value.doc.documentElement.outerHTML;\n this.state.pages$.next(pages);\n\n this.activeProject.save(false).then(() => {\n this.loading$.next(false);\n this.toast.open('Page updated');\n });\n }\n\n deleteSelectedPage() {\n this.loading$.next(true);\n\n const page = this.state.activePage$.value;\n const pages = this.state.pages$.value;\n this.state.pages$.next(pages.filter(p => p.id !== page.id));\n this.activePageControl.setValue(pages[pages.length - 1].id);\n\n this.activeProject.save(false).then(() => {\n this.loading$.next(false);\n this.toast.open('Page deleted');\n });\n }\n\n duplicateSelectedPage() {\n this.loading$.next(true);\n\n const activePage = this.state.activePage$.value;\n this.addPage({\n name: activePage.name + '-copy',\n html: activePage.doc.documentElement.outerHTML,\n });\n\n this.activeProject.save(false).then(() => {\n this.loading$.next(false);\n this.toast.open('Page duplicated');\n });\n }\n\n private addPage(page: BuilderPage) {\n this.state.pages$.next(\n addIdToPages([page, ...this.state.pages$.value])\n );\n this.activePageControl.setValue(page.id);\n }\n\n private hydrateUpdateModel() {\n const pageName = this.state.activePage$.value.name;\n this.pageForm.patchValue({\n name: pageName,\n title: getTitleTagValue(this.state.previewDoc),\n description: getMetaTagValue('description', this.state.previewDoc),\n keywords: getMetaTagValue('keywords', this.state.previewDoc),\n });\n if (pageName === 'index') {\n this.pageForm.get('name').disable();\n } else {\n this.pageForm.get('name').enable();\n }\n }\n}\n","<ng-container *ngIf=\"state.inspectorPanel$ | async as activePanel\">\n <nav class=\"inspector-nav mat-elevation-z3\">\n <a class=\"back-button\" [matTooltip]=\"'Dashboard' | trans\" routerLink=\"/dashboard\">\n <mat-icon svgIcon=\"keyboard-arrow-left\"></mat-icon>\n </a>\n\n <div class=\"panel-nav\">\n <button\n mat-button\n class=\"panel-nav-item\"\n [class.active]=\"activePanel === inspectorPanel.Layout\"\n (click)=\"state.inspectorPanel$.next(inspectorPanel.Layout)\"\n >\n <mat-icon svgIcon=\"web-design-custom\"></mat-icon>\n <span class=\"name\" trans>Layout</span>\n </button>\n <button\n mat-button\n class=\"panel-nav-item\"\n [class.active]=\"activePanel === inspectorPanel.Elements\"\n (click)=\"state.inspectorPanel$.next(inspectorPanel.Elements)\"\n >\n <mat-icon svgIcon=\"puzzle-custom\"></mat-icon>\n <span class=\"name\" trans>Elements</span>\n </button>\n <button\n mat-button\n class=\"panel-nav-item\"\n [class.active]=\"activePanel === inspectorPanel.Inspector\"\n (click)=\"state.inspectorPanel$.next(inspectorPanel.Inspector)\"\n >\n <mat-icon svgIcon=\"brush-custom\"></mat-icon>\n <span class=\"name\" trans>Inspector</span>\n </button>\n <button\n mat-button\n class=\"panel-nav-item\"\n [class.active]=\"activePanel === inspectorPanel.Pages\"\n (click)=\"state.inspectorPanel$.next(inspectorPanel.Pages)\"\n >\n <mat-icon svgIcon=\"documents-custom\"></mat-icon>\n <span class=\"name\" trans>Pages</span>\n </button>\n <button\n mat-button\n class=\"panel-nav-item\"\n [class.active]=\"!!settingsModalRef\"\n (click)=\"openProjectSettingsModal()\"\n >\n <mat-icon svgIcon=\"settings-custom\"></mat-icon>\n <span class=\"name\" trans>Settings</span>\n </button>\n <button\n mat-button\n class=\"panel-nav-item\"\n (click)=\"toggleCodeEditor()\"\n [disabled]=\"!currentUser.hasPermission('editors.enable')\"\n >\n <mat-icon svgIcon=\"source-code-custom\"></mat-icon>\n <span class=\"name\" trans>Code Edtr</span>\n </button>\n </div>\n </nav>\n\n <div class=\"inspector-content\">\n <div class=\"panel-container\">\n <elements-panel [class.hidden]=\"activePanel !== inspectorPanel.Elements\"></elements-panel>\n <inspector-panel [class.hidden]=\"activePanel !== inspectorPanel.Inspector\"></inspector-panel>\n <layout-panel [class.hidden]=\"activePanel !== inspectorPanel.Layout\"></layout-panel>\n <pages-panel [class.hidden]=\"activePanel !== inspectorPanel.Pages\"></pages-panel>\n </div>\n\n <device-switcher></device-switcher>\n\n <div class=\"actions\">\n <mat-progress-bar\n mode=\"indeterminate\"\n *ngIf=\"activeProject.saving\"\n color=\"accent\"\n ></mat-progress-bar>\n\n <button\n mat-button\n [matTooltip]=\"'Undo' | trans\"\n [disabled]=\"!mutations.canUndo\"\n (click)=\"mutations.undo()\"\n >\n <mat-icon svgIcon=\"undo\"></mat-icon>\n </button>\n <button\n mat-button\n [matTooltip]=\"'Redo' | trans\"\n [disabled]=\"!mutations.canRedo\"\n (click)=\"mutations.redo()\"\n >\n <mat-icon svgIcon=\"redo\"></mat-icon>\n </button>\n\n <button (click)=\"toggleDeviceSwitcher()\" mat-button [matTooltip]=\"'Change device' | trans\">\n <mat-icon svgIcon=\"phone-android\"></mat-icon>\n </button>\n <button\n (click)=\"openPreview()\"\n [disabled]=\"activeProject.saving\"\n mat-button\n [matTooltip]=\"'Preview' | trans\"\n >\n <mat-icon svgIcon=\"visibility\"></mat-icon>\n </button>\n <button\n (click)=\"saveProject()\"\n [disabled]=\"activeProject.saving\"\n mat-button\n [matTooltip]=\"'Save project' | trans\"\n >\n <mat-icon svgIcon=\"save\"></mat-icon>\n </button>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n ElementRef,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CodeEditor} from '../overlays/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-box/context-boxes.service';\nimport {Projects} from '../../shared/projects/projects.service';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {Settings} from '@common/core/config/settings.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {MutationsService} from '../mutations/mutations.service';\nimport {BuilderStateService} from '../builder-state.service';\nimport {BuilderSidebarPanel} from './builder-sidebar-panel';\nimport {ContextType} from '../live-preview/context-box/builder-context';\nimport {ProjectSettingsModalComponent} from '../../shared/projects/project-settings-modal/project-settings-modal.component';\nimport {MatDialogRef} from '@angular/material/dialog';\n\n@Component({\n selector: 'builder-sidebar',\n templateUrl: './builder-sidebar.component.html',\n styleUrls: ['./builder-sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BuilderSidebarComponent implements OnInit {\n @ViewChild(DeviceSwitcherComponent, {static: false})\n private deviceSwitcher: DeviceSwitcherComponent;\n inspectorPanel = BuilderSidebarPanel;\n settingsModalRef: MatDialogRef<ProjectSettingsModalComponent>;\n\n constructor(\n public mutations: MutationsService,\n private codeEditor: CodeEditor,\n private projects: Projects,\n public activeProject: ActiveProject,\n public state: BuilderStateService,\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.state.inspectorEl = this.el.nativeElement;\n }\n\n toggleCodeEditor() {\n this.codeEditor.toggle();\n }\n\n async saveProject() {\n await this.activeProject.save();\n this.toast.open('Project saved');\n }\n\n openProjectSettingsModal() {\n this.settingsModalRef = this.modal.open(ProjectSettingsModalComponent, {\n project: this.state.project$.value.model,\n });\n this.settingsModalRef.afterClosed().subscribe(project => {\n this.settingsModalRef = null;\n if (project) {\n this.state.project$.next({\n ...this.state.project$.value,\n model: project,\n });\n }\n });\n }\n\n async openPreview() {\n const newWindow = window.open('loading', '_blank');\n await this.activeProject.save();\n let baseUrl = this.activeProject.getProductionUrl();\n const activePage = this.state.activePage$.value;\n if (activePage && activePage.name && activePage.name !== 'index')\n baseUrl += '/' + activePage.name;\n newWindow.location.replace(baseUrl);\n }\n\n toggleDeviceSwitcher() {\n this.deviceSwitcher.toggleVisibility();\n }\n}\n","import {Directive, Input} from '@angular/core';\nimport {BaseDragAndDrop} from './base-drag-and-drop';\nimport {MoveNode} from '../../mutations/dom/move-node';\nimport {getNodeIndex} from '../../utils/get-node-index';\nimport {getNodeId} from '../../utils/get-node-id';\nimport {ContextType} from '../context-box/builder-context';\n\n@Directive({\n selector: '[previewDragAndDrop]',\n})\nexport class PreviewDragAndDropDirective extends BaseDragAndDrop {\n @Input() contextType: ContextType;\n\n protected executeMutation() {\n const el = this.state.dragData.node;\n this.mutations.execute(\n new MoveNode(\n el,\n this.oldIndex,\n this.oldParent,\n this.newIndex,\n this.newParent\n )\n );\n }\n\n protected getHammerElement(): HTMLElement {\n return this.el.nativeElement;\n }\n\n protected setDragElement(e: HammerInput) {\n const context = this.state.getContext(this.contextType);\n this.state.dragData = {el: context.el, node: context.node};\n }\n\n protected sortColumns(nodeUnderCursor: HTMLElement, e: HammerInput) {\n if (!nodeUnderCursor.parentElement) return;\n\n const className = nodeUnderCursor.parentElement.className;\n\n if (\n nodeUnderCursor === this.state.dragData.node ||\n nodeUnderCursor.parentElement !==\n this.state.dragData.node.parentElement\n )\n return;\n\n // constrain column ordering withing row\n if (className?.match('row')) {\n const parentId = getNodeId(nodeUnderCursor.parentElement);\n this.mutations.execute(\n new MoveNode(\n this.state.hover.node,\n getNodeIndex(this.state.hover.node),\n parentId,\n getNodeIndex(nodeUnderCursor),\n parentId\n )\n );\n }\n }\n}\n","import {SetStyle} from './set-style';\n\ninterface ResizeProps {\n width: string;\n height: string;\n maxWidth?: string;\n maxHeight?: string;\n [index: number]: string;\n}\n\nexport class ResizeNode extends SetStyle {\n static historyName = 'Resized';\n constructor(protected newProps: ResizeProps, el: HTMLElement) {\n super(newProps, el);\n }\n\n protected onInit() {\n this.newProps.maxHeight = 'none';\n this.newProps.maxWidth = 'none';\n super.onInit();\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n NgZone,\n} from '@angular/core';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {ImageEl} from '../../elements/definitions/bootstrap';\nimport {LivePreview} from '../../live-preview.service';\nimport {MutationsService} from '../../mutations/mutations.service';\nimport {ResizeNode} from '../../mutations/style/resize-node';\nimport {ContextType} from '../context-box/builder-context';\nimport {take} from 'rxjs/operators';\n\n@Directive({\n selector: '[elementResizer]',\n})\nexport class ElementResizerDirective implements AfterViewInit {\n @Input() contextType: ContextType;\n private node: HTMLElement;\n private aspectRatio: number;\n private previewWidth: number;\n private previewHeight: number;\n private previewOffset: number;\n\n constructor(\n private zone: NgZone,\n private el: ElementRef<HTMLElement>,\n private state: BuilderStateService,\n private livePreview: LivePreview,\n private mutations: MutationsService\n ) {}\n\n ngAfterViewInit(): void {\n // account for scrollbar\n this.state.previewDocReloaded$.pipe(take(1)).subscribe(() => {\n const iframeBody = this.state.iframe.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({\n direction: Hammer.DIRECTION_ALL,\n threshold: 0,\n });\n hammer.add([pan]);\n\n hammer.on('panstart', e => this.onDragStart(e));\n hammer.on('panmove', e => this.onDrag(e));\n hammer.on('panend', e => this.onDragEnd(e));\n });\n });\n }\n\n private onDragStart(e: HammerInput) {\n this.previewOffset =\n this.state.previewContainer.getBoundingClientRect().x;\n this.node = this.state.getContext(this.contextType).node;\n const rect = this.node.getBoundingClientRect();\n this.aspectRatio = rect.width / rect.height;\n this.zone.run(() => this.state.resizing$.next(true));\n }\n\n private onDrag(e: HammerInput) {\n const rect = this.node.getBoundingClientRect();\n const clientX = e.center.x - this.previewOffset;\n const minWidth = 10;\n const minHeight = 10;\n\n // trying to scroll (and resize) element beyond preview width or height\n if (this.previewWidth <= clientX || 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.state.getContext(this.contextType).el instanceof ImageEl) {\n ({finalWidth, finalHeight} = this.resizeAndPreserveAspectRatio(\n finalWidth,\n finalHeight\n ));\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.mutations.execute(\n new ResizeNode(\n {\n width: `${finalWidth}px`,\n height: `${finalHeight}px`,\n },\n this.node\n )\n );\n this.livePreview.repositionBox(this.contextType);\n }\n\n private onDragEnd(e: HammerInput) {\n this.zone.run(() => this.state.resizing$.next(false));\n }\n\n private resizeAndPreserveAspectRatio(oldWidth: number, oldHeight: number) {\n let newWidth = oldWidth;\n let 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","<ng-container *ngIf=\"showActions$ | async\">\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\n type=\"button\"\n class=\"no-style action-button drag-button builder-drag-handle\"\n previewDragAndDrop\n [contextType]=\"type\"\n title=\"Drag Element\"\n >\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 [contextType]=\"type\"></button>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n} from '@angular/core';\nimport {BuilderDocumentActions} from '../../builder-document-actions.service';\nimport {LivePreview} from '../../live-preview.service';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {BuilderStateService} from '../../builder-state.service';\nimport {BuilderSidebarPanel} from '../../sidebar/builder-sidebar-panel';\nimport {ContextType} from './builder-context';\nimport {map} from 'rxjs/operators';\nimport {ContextBoxes} from './context-boxes.service';\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 implements AfterViewInit {\n @Input() type: ContextType = ContextType.Hover;\n @HostBinding('class.type-selected') get typeSelected() {\n return this.type === 'selected';\n }\n\n showActions$ = this.state.project$.pipe(\n map(project => {\n const settings = project?.model?.settings?.builder as Record<\n string,\n boolean\n >;\n return this.type === ContextType.Hover\n ? settings?.hoverContextActions ?? true\n : settings?.selectedContextActions ?? false;\n })\n );\n\n constructor(\n private builderActions: BuilderDocumentActions,\n public el: ElementRef<HTMLElement>,\n private state: BuilderStateService,\n private livePreview: LivePreview,\n private contextBoxes: ContextBoxes\n ) {}\n\n ngAfterViewInit() {\n if (this.type === ContextType.Selected) {\n this.el.nativeElement.addEventListener('mouseenter', () => {\n this.contextBoxes.hideBox(ContextType.Hover);\n });\n }\n }\n\n deleteNode() {\n this.builderActions.removeNode(this.state.getContext(this.type).node);\n }\n\n editNode() {\n const context = this.state.getContext(this.type);\n if (this.type === ContextType.Hover) {\n this.livePreview.setSelectedContext(context.node);\n }\n if (context.el.editActionName) {\n context.el.editAction(context.node);\n } else {\n this.state.inspectorPanel$.next(BuilderSidebarPanel.Inspector);\n }\n }\n}\n","import {\n Component,\n ElementRef,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ContextBoxes} from './context-box/context-boxes.service';\nimport {ContextBoxComponent} from './context-box/context-box.component';\nimport {BuilderStateService} from '../builder-state.service';\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 {\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 @ViewChild('dropHelper', {static: true}) dropHelper: ElementRef<HTMLElement>;\n\n constructor(\n public state: BuilderStateService,\n private contextBoxes: ContextBoxes,\n private el: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit() {\n this.contextBoxes.set(\n this.hoverBox.el.nativeElement,\n this.selectedBox.el.nativeElement,\n this.iframe\n );\n this.state.iframe = this.iframe.nativeElement;\n this.state.dragOverlay = this.dragOverlay.nativeElement;\n this.state.dropHelper = this.dropHelper.nativeElement;\n this.state.previewContainer = this.el.nativeElement;\n }\n}\n","<div class=\"width-container\" [ngClass]=\"state.breakpoint\">\n <div class=\"highlights\">\n <context-box class=\"hidden\" type=\"hover\" #hoverBox></context-box>\n <context-box class=\"hidden\" type=\"selected\" #selectedBox></context-box>\n </div>\n <iframe #iframe></iframe>\n <div\n class=\"drag-overlay\"\n [class.hidden]=\"!(state.dragging$ | async) && !(state.resizing$ | async)\"\n #dragOverlay\n ></div>\n <div class=\"drop-helper\" [class.hidden]=\"!(state.dragging$ | async)\" #dropHelper></div>\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {BuilderStateService} from '../../../builder-state.service';\nimport {skip} from 'rxjs/operators';\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 implements OnInit {\n @HostBinding('class.hidden') hidden = true;\n\n constructor(\n public el: ElementRef,\n public state: BuilderStateService,\n private cd: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.state.dragging$.pipe(skip(1)).subscribe(isDragging => {\n this.hidden = !isDragging;\n this.cd.markForCheck();\n });\n }\n\n reposition(y: number, x: number) {\n // offset drag helper a bit, so it's in top right corner of cursor\n this.el.nativeElement.style.top = y - 20 + 'px';\n this.el.nativeElement.style.left = x + 21 + 'px';\n }\n}\n","<div class=\"name\">{{state.dragData?.el?.name}}</div>\n","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","<div class=\"loader-box-container\">\n <div class=\"loader-box\">\n <div class=\"lds-grid\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n </div>\n <div class=\"loader-text\" trans>Loading</div>\n</div>\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 {\n AfterViewInit,\n Component,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Elements} from '../elements/elements.service';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {ActiveProject} from '../projects/active-project';\nimport {DragVisualHelperComponent} from '../live-preview/drag-and-drop/drag-visual-helper/drag-visual-helper.component';\nimport {CodeEditor} from '../overlays/code-editor/code-editor.service';\nimport {InlineTextEditor} from '../overlays/inline-text-editor/inline-text-editor.service';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {BreakpointsService} from '@common/core/ui/breakpoints.service';\nimport {LivePreview} from '../live-preview.service';\nimport {forkJoin} from 'rxjs';\nimport {take, tap} from 'rxjs/operators';\nimport {Projects} from '../../shared/projects/projects.service';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {LinkEditor} from '../overlays/link-editor/link-editor.service';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {ContextMenu} from '@common/core/ui/context-menu/context-menu.service';\nimport {LayoutPanel} from '../sidebar/layout-panel/layout-panel.service';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {MutationsService} from '../mutations/mutations.service';\nimport {BuilderDocumentActions} from '../builder-document-actions.service';\nimport {LivePreviewScroller} from '../live-preview/drag-and-drop/live-preview-scroller';\nimport {BuilderStateService} from '../builder-state.service';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {BuilderOverlayService} from '../overlays/builder-overlay.service';\n\n@Component({\n selector: 'html-builder',\n templateUrl: './html-builder.component.html',\n styleUrls: ['./html-builder.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n ActiveProject,\n LivePreview,\n BuilderDocumentActions,\n Modal,\n OverlayPanel,\n LinkEditor,\n CodeEditor,\n ContextMenu,\n InlineTextEditor,\n LayoutPanel,\n BuilderOverlayService,\n MutationsService,\n LivePreviewScroller,\n BuilderStateService,\n Elements,\n UploadQueueService,\n ],\n animations: [\n trigger('bodyExpansion', [\n state('false', style({height: '0px', visibility: 'hidden'})),\n state('true', style({height: '*', visibility: 'visible'})),\n transition(\n 'true <=> false',\n animate('225ms cubic-bezier(0.4,0.0,0.2,1)')\n ),\n ]),\n ],\n})\nexport class HtmlBuilderComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('dragHelper')\n dragHelper: DragVisualHelperComponent;\n inspectorHidden = false;\n\n constructor(\n private elements: Elements,\n private route: ActivatedRoute,\n private codeEditor: CodeEditor,\n private inlineTextEditor: InlineTextEditor,\n private breakpoints: BreakpointsService,\n private projectApi: Projects,\n private livePreview: LivePreview,\n private currentUser: CurrentUser,\n private router: Router,\n public state: BuilderStateService\n ) {}\n\n ngOnInit() {\n forkJoin([\n this.projectApi.get(this.route.snapshot.params.id).pipe(\n tap(response => {\n this.state.setProject(response.project);\n this.livePreview.init();\n })\n ),\n this.elements.init(),\n this.state.previewDocReloaded$.pipe(take(1)),\n ]).subscribe(() => {\n if (!this.canOpenProjectInBuilder()) {\n this.router.navigate(['/dashboard']);\n }\n });\n this.inspectorHidden = this.breakpoints.isMobile$.value;\n }\n\n ngAfterViewInit() {\n this.state.dragHelper = this.dragHelper;\n }\n\n private canOpenProjectInBuilder(): boolean {\n return (\n this.currentUser.hasPermission('projects.update') ||\n !!this.state.project$.value.model.users.find(\n u => u.id === this.currentUser.get('id')\n )\n );\n }\n\n ngOnDestroy() {\n this.codeEditor.close();\n this.inlineTextEditor.close();\n }\n\n toggleInspector() {\n this.inspectorHidden = !this.inspectorHidden;\n }\n}\n","<builder-sidebar [@bodyExpansion]=\"!inspectorHidden\"></builder-sidebar>\n\n<live-preview></live-preview>\n\n<drag-visual-helper #dragHelper></drag-visual-helper>\n\n<button\n type=\"button\"\n mat-mini-fab\n color=\"accent\"\n class=\"mobile-toggle-button\"\n (click)=\"toggleInspector()\"\n>\n <mat-icon svgIcon=\"menu\"></mat-icon>\n</button>\n\n<main-loader\n [visible]=\"state.loading$ | async\"\n [class.partial]=\"state.loadedAtLeastOnce$ | async\"\n></main-loader>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BackgroundSelectorComponent} from '@common/shared/form-controls/background-selector/background-selector.component';\nimport {MatRippleModule} from '@angular/material/core';\nimport {FormatPipesModule} from '@common/core/ui/format-pipes/format-pipes.module';\nimport {LabelFromFilenamePipe} from '@common/shared/form-controls/background-selector/label-from-filename.pipe';\nimport {BackgroundSelectorImgComponent} from '@common/shared/form-controls/background-selector/background-selector-img/background-selector-img.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {BackgroundSelectorGradientComponent} from '@common/shared/form-controls/background-selector/background-selector-gradient/background-selector-gradient.component';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {BackgroundOverlayComponent} from '@common/shared/form-controls/background-selector/background-overlay/background-overlay.component';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\n\n@NgModule({\n declarations: [\n BackgroundSelectorComponent,\n LabelFromFilenamePipe,\n BackgroundSelectorImgComponent,\n BackgroundSelectorGradientComponent,\n BackgroundOverlayComponent,\n ],\n imports: [\n CommonModule,\n TranslationsModule,\n MatRippleModule,\n FormatPipesModule,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n MatRadioModule,\n MatButtonToggleModule,\n ],\n exports: [BackgroundSelectorComponent, BackgroundOverlayComponent],\n})\nexport class BackgroundSelectorModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {GoogleFontSelectorComponent} from '@common/shared/form-controls/google-font-selector/google-font-selector.component';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatRippleModule} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {FontDisplayNamePipe} from '@common/shared/form-controls/google-font-selector/font-display-name.pipe';\n\n@NgModule({\n declarations: [GoogleFontSelectorComponent, FontDisplayNamePipe],\n imports: [\n CommonModule,\n TranslationsModule,\n ReactiveFormsModule,\n FormsModule,\n MatRippleModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [GoogleFontSelectorComponent, FontDisplayNamePipe],\n})\nexport class GoogleFontSelectorModule {}\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 {LivePreviewComponent} from './live-preview/live-preview.component';\nimport {PreviewDragAndDropDirective} from './live-preview/drag-and-drop/preview-drag-and-drop.directive';\nimport {ElementsPanelComponent} from './sidebar/elements-panel/elements-panel.component';\nimport {InspectorPanelComponent} from './sidebar/inspector-panel/inspector-panel.component';\nimport {AttributesPanelComponent} from './sidebar/inspector-panel/attributes-panel/attributes-panel.component';\nimport {SpacingPanelComponent} from './sidebar/inspector-panel/spacing-panel/spacing-panel.component';\nimport {BorderStyleControlsComponent} from './sidebar/inspector-panel/border-style-controls/border-style-controls.component';\nimport {SideControlBorderComponent} from './sidebar/inspector-panel/spacing-panel/side-control-border/side-control-border.component';\nimport {BackgroundPanelComponent} from './sidebar/inspector-panel/background-panel/background-panel.component';\nimport {ShadowsPanelComponent} from './sidebar/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 './sidebar/layout-panel/layout-panel.component';\nimport {ColumnPresetsComponent} from './sidebar/layout-panel/column-presets/column-presets.component';\nimport {DragElFromSidebarToPreviewDirective} from './live-preview/drag-and-drop/drag-el-from-sidebar-to-preview.directive';\nimport {InlineTextEditorComponent} from './overlays/inline-text-editor/inline-text-editor.component';\nimport {CodeEditorComponent} from './overlays/code-editor/code-editor.component';\nimport {LivePreviewContextMenuComponent} from './overlays/live-preview-context-menu/live-preview-context-menu.component';\nimport {PagesPanelComponent} from './sidebar/pages-panel/pages-panel.component';\nimport {ContextBoxComponent} from './live-preview/context-box/context-box.component';\nimport {LinkEditorComponent} from './overlays/link-editor/link-editor.component';\nimport {DeviceSwitcherComponent} from './sidebar/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 {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 {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';\nimport {ColorPickerInputModule} from '@common/core/ui/color-picker/color-picker-input/color-picker-input.module';\nimport {BackgroundSelectorModule} from '@common/shared/form-controls/background-selector/background-selector.module';\nimport {GoogleFontSelectorModule} from '@common/shared/form-controls/google-font-selector/google-font-selector.module';\nimport {FontSelectorOverlayComponent} from './overlays/font-selector-overlay/font-selector-overlay.component';\nimport {IconSelectorOverlayComponent} from './overlays/icon-selector-overlay/icon-selector-overlay.component';\nimport {MatRippleModule} from '@angular/material/core';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {ShadowPanelFormComponent} from './sidebar/inspector-panel/shadows-panel/shadow-panel-form/shadow-panel-form.component';\nimport {BuilderSidebarComponent} from './sidebar/builder-sidebar.component';\nimport {ElementControlsComponent} from './sidebar/inspector-panel/attributes-panel/element-controls/element-controls.component';\nimport {ChipsModule} from '@common/core/ui/chips/chips.module';\nimport {SvgImageModule} from '@common/core/ui/svg-image/svg-image.module';\nimport {TypographyPanelComponent} from './sidebar/inspector-panel/typography-panel/typography-panel.component';\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 ColorPickerInputModule,\n BackgroundSelectorModule,\n GoogleFontSelectorModule,\n ChipsModule,\n SvgImageModule,\n\n // material\n MatExpansionModule,\n MatSliderModule,\n MatChipsModule,\n PortalModule,\n OverlayModule,\n MatTabsModule,\n MatRadioModule,\n DragDropModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatRippleModule,\n MatButtonToggleModule,\n ],\n declarations: [\n HtmlBuilderComponent,\n BuilderSidebarComponent,\n LivePreviewComponent,\n PreviewDragAndDropDirective,\n ElementsPanelComponent,\n InspectorPanelComponent,\n AttributesPanelComponent,\n SpacingPanelComponent,\n BorderStyleControlsComponent,\n TypographyPanelComponent,\n SideControlBorderComponent,\n BackgroundPanelComponent,\n FontSelectorOverlayComponent,\n ShadowsPanelComponent,\n DragVisualHelperComponent,\n LayoutPanelComponent,\n ColumnPresetsComponent,\n DragElFromSidebarToPreviewDirective,\n InlineTextEditorComponent,\n CodeEditorComponent,\n LivePreviewContextMenuComponent,\n PagesPanelComponent,\n ContextBoxComponent,\n LinkEditorComponent,\n DeviceSwitcherComponent,\n ElementResizerDirective,\n MainLoaderComponent,\n IconSelectorOverlayComponent,\n ShadowPanelFormComponent,\n ElementControlsComponent,\n ],\n})\nexport class HtmlBuilderModule {}\n","import { Injectable } from '@angular/core';\nimport {UploadValidator} from '@common/uploads/validation/upload-validator';\nimport {FileSizeValidation} from '@common/uploads/validation/validations/file-size-validation';\nimport {convertToBytes} from '@common/core/utils/convertToBytes';\nimport {FileTypeValidation} from '@common/uploads/validation/validations/file-type-validation';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppearanceImageUploadValidator extends UploadValidator {\n protected readonly DEFAULT_MAX_SIZE_MB = 5;\n\n protected initValidations() {\n const validations = [\n new FileSizeValidation(\n {maxSize: convertToBytes(this.DEFAULT_MAX_SIZE_MB, 'MB')},\n this.i18n\n ),\n new FileTypeValidation({types: ['image']}, this.i18n),\n ];\n\n this.validations.push(...validations);\n }\n}\n","export enum Keycodes {\n ENTER = 13,\n SPACE = 32,\n ESCAPE = 27,\n DELETE = 46,\n ARROW_UP = 38,\n ARROW_RIGHT = 39,\n ARROW_DOWN = 40,\n ARROW_LEFT = 37,\n BACKSPACE = 8,\n TAB = 9,\n S = 83,\n N = 78,\n A = 65,\n T = 84,\n B = 66,\n C = 67,\n O = 79,\n P = 80,\n R = 82,\n F = 70,\n Y = 89,\n Z = 90,\n}\n","import {Injectable} from '@angular/core';\nimport {Keycodes} from './keycodes.enum';\nimport {fromEvent, Subscription} from 'rxjs';\n\ninterface ParsedKeybind {\n ctrl: boolean;\n shift: boolean;\n key: string;\n}\n\n// TODO: refactor so keybinds are stored for a specific \"listenOn\" element instead of globally\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Keybinds {\n private bindings = [];\n\n public add(keybinds: string|string[], callback: (e: KeyboardEvent) => void) {\n if ( ! Array.isArray(keybinds)) {\n keybinds = [keybinds];\n }\n keybinds.forEach(keybind => {\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback});\n });\n }\n\n public addWithPreventDefault(keybind: string, callback: Function) {\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback, preventDefault: true});\n }\n\n public listenOn(el: HTMLElement|Document, options: {fireIfInputFocused?: boolean} = {}): Subscription {\n return fromEvent(el, 'keydown').subscribe((e: KeyboardEvent) => {\n if (options.fireIfInputFocused || !['input', 'select'].includes(document.activeElement.nodeName.toLowerCase())) {\n this.executeBindings(e);\n }\n });\n }\n\n private executeBindings(e: KeyboardEvent) {\n this.bindings.forEach(binding => {\n if ( ! this.bindingMatches(binding.keybind, e)) return;\n if (binding.preventDefault && e.preventDefault) e.preventDefault();\n binding.callback(e);\n });\n }\n\n private bindingMatches(keybind: ParsedKeybind, e: KeyboardEvent) {\n return Keycodes[keybind.key.toUpperCase()] === e.keyCode &&\n (e.ctrlKey === keybind.ctrl || e.metaKey === keybind.ctrl) &&\n e.shiftKey === keybind.shift;\n }\n\n /**\n * Parse keybind string into object.\n */\n private parseKeybindString(keybind: string): ParsedKeybind {\n const parts = keybind.trim().split('+');\n const parsed = {ctrl: false, shift: false, key: ''};\n\n parts.forEach(part => {\n part = part.trim().toLowerCase();\n\n if (part === 'ctrl') {\n parsed.ctrl = true;\n } else if (part === 'shift') {\n parsed.shift = true;\n } else {\n parsed.key = part;\n }\n });\n\n return parsed;\n }\n}\n","<mat-chip-list #chipList [selectable]=\"false\">\n <mat-chip\n *ngFor=\"let item of items$ | async; index as i\"\n [selectable]=\"false\"\n [removable]=\"!selectMode\"\n (removed)=\"remove(i)\"\n >\n {{displayChipValue(item)}}\n <mat-icon matChipRemove svgIcon=\"cancel\"></mat-icon>\n </mat-chip>\n <input [placeholder]=\"placeholder | trans\"\n *ngIf=\"!selectMode\"\n #inputEl\n [type]=\"type\"\n class=\"mat-chip-input mat-input-element\"\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n [matAutocomplete]=\"auto\"\n [matAutocompleteConnectedTo]=\"{elementRef: el}\"\n [formControl]=\"formControl\"\n (matChipInputTokenEnd)=\"addFromChipInput($event.value)\" />\n</mat-chip-list>\n\n<mat-autocomplete class=\"chip-input-autocomplete-panel\" #auto=\"matAutocomplete\" (optionSelected)=\"addFromAutocomplete($event.option.value)\" [autoActiveFirstOption]=\"true\">\n <mat-option *ngFor=\"let value of suggestedValues$ | async\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\n</mat-autocomplete>\n\n<ng-template #selectModeTemplate let-suggestions=\"suggestions\">\n <mat-option *ngFor=\"let value of suggestions\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\n</ng-template>\n","import {\n AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, OnInit, TemplateRef, ViewChild, ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {MatAutocomplete} from '@angular/material/autocomplete';\nimport {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {Model} from '../../../types/models/model';\n\ntype ChipValue = 'string' | Model;\n\n@Component({\n selector: 'chip-input',\n templateUrl: './chip-input.component.html',\n styleUrls: ['./chip-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: ChipInputComponent,\n multi: true,\n }]\n})\nexport class ChipInputComponent implements ControlValueAccessor, OnInit, AfterViewInit {\n @Input() placeholder: string;\n @Input() type = 'text';\n @Input() emailsInput = false;\n @Input() suggestFn: (query: string) => Observable<ChipValue[]>;\n @Input() @HostBinding('class.select-mode') selectMode = false;\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\n @ViewChild('inputEl') inputEl: ElementRef<HTMLInputElement>;\n @ViewChild('selectModeTemplate') selectModeTemplate: TemplateRef<any>;\n\n public formControl = new FormControl();\n\n public propagateChange: (items: ChipValue[]) => void;\n public items$ = new BehaviorSubject<ChipValue[]>([]);\n public suggestedValues$ = new BehaviorSubject<ChipValue[]>([]);\n @Input() set suggestedValues(values: ChipValue[]) {\n this.suggestedValues$.next(values);\n }\n\n constructor(\n public el: ElementRef<HTMLElement>,\n ) {}\n\n ngOnInit() {\n if (this.suggestFn) {\n this.bindToSearchControl();\n }\n if (this.selectMode) {\n // TODO: implement\n }\n }\n\n ngAfterViewInit() {\n if (this.emailsInput) {\n this.parseEmailsOnPaste();\n }\n }\n\n public remove(index: number) {\n const items = [...this.items$.value];\n items.splice(index, 1);\n this.items$.next(items);\n this.propagateChange(this.items$.value);\n }\n\n public addFromChipInput(value: ChipValue, propagate = true) {\n if (value && !this.matAutocomplete.isOpen && !this.selectMode) {\n this.add(value, propagate);\n }\n }\n\n public addFromAutocomplete(value: ChipValue, propagate = true) {\n this.add(value, propagate);\n }\n\n private add(value: ChipValue, propagate = true) {\n value = (typeof value === 'string' ? value.trim() : value) as ChipValue;\n const duplicate = this.findValueIndex(value) > -1;\n if (value && !duplicate) {\n this.items$.next([...this.items$.value, value]);\n if (propagate) {\n this.propagateChange(this.items$.value);\n }\n }\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n this.formControl.setValue(null);\n this.suggestedValues$.next([]);\n }\n\n private findValueIndex(value: ChipValue) {\n if (typeof value === 'string') {\n return this.items$.value.indexOf(value);\n } else {\n return this.items$.value.findIndex(v => (v as Model).id === value.id);\n }\n }\n\n public writeValue(value: ChipValue[] = []) {\n this.items$.next(value || []);\n // if (value && value.length) {\n // value.forEach(item => this.add(item, false));\n // } else if (this.items$.value.length) {\n // while (this.items$.value.length !== 0) {\n // this.remove(0);\n // }\n // }\n }\n\n public registerOnChange(fn: (items: ChipValue[]) => void) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n\n private bindToSearchControl() {\n this.formControl.valueChanges.pipe(\n debounceTime(150),\n distinctUntilChanged(),\n switchMap(query => query ? this.suggestFn(query) : of([])),\n catchError(() => of([])),\n ).subscribe(values => {\n const filtered = values.filter(v => this.findValueIndex(v) === -1);\n this.suggestedValues$.next(filtered);\n });\n }\n\n public displayChipValue(value: ChipValue): string {\n return typeof value === 'object' ? value.name : value;\n }\n\n private parseEmailsOnPaste() {\n this.inputEl.nativeElement.addEventListener('paste', e => {\n const paste = (e.clipboardData || window['clipboardData']).getData('text');\n const emails = paste.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\n if (emails) {\n e.preventDefault();\n const selection = window.getSelection();\n if (selection.rangeCount) {\n selection.deleteFromDocument();\n emails.forEach(email => this.add(email));\n }\n }\n });\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ColorPickerInputComponent} from '@common/core/ui/color-picker/color-picker-input/color-picker-input.component';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {MatIconModule} from '@angular/material/icon';\nimport { MatRippleModule } from '@angular/material/core';\n\n\n@NgModule({\n declarations: [ColorPickerInputComponent],\n imports: [CommonModule, TranslationsModule, MatIconModule, MatRippleModule],\n exports: [ColorPickerInputComponent],\n})\nexport class ColorPickerInputModule {}\n","import {ChangeDetectionStrategy, Component, ElementRef, Inject, OnInit, Optional, ViewChild} from '@angular/core';\nimport {OverlayPanelRef} from '../overlay-panel/overlay-panel-ref';\nimport {OVERLAY_PANEL_DATA} from '../overlay-panel/overlay-panel-data';\nimport {ColorPickerService} from 'ngx-color-picker';\n\n@Component({\n templateUrl: './colorpicker-panel.component.html',\n styleUrls: ['./colorpicker-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n ColorPickerService,\n ]\n})\nexport class ColorpickerPanelComponent implements OnInit {\n @ViewChild('trigger', { static: true }) trigger: ElementRef<HTMLElement>;\n public color: string;\n\n constructor(\n @Inject(OVERLAY_PANEL_DATA) @Optional() public data: {color?: string},\n private overlayPanelRef: OverlayPanelRef,\n ) {}\n\n ngOnInit() {\n this.color = this.getInitialColor();\n\n // open color picker\n setTimeout(() => {\n this.trigger.nativeElement.click();\n });\n }\n\n public emitSelectedEvent(value: string) {\n this.color = value;\n // const rgba = 'rgba(' + hexToRgb(value).join(',') + ')';\n this.overlayPanelRef.emitValue(value);\n }\n\n private getInitialColor() {\n let color = (this.data && this.data.color) || null;\n if (color && color.replace(/ /g, '') === 'rgba(0,0,0,0)') color = undefined;\n return color;\n }\n}\n","<div class=\"trigger\" #trigger\n [colorPicker]=\"color\"\n [cpAlphaChannel]=\"'always'\"\n [cpOutputFormat]=\"'rgba'\"\n (colorPickerChange)=\"emitSelectedEvent($event)\"\n [cpDialogDisplay]=\"'inline'\"\n [cpToggle]=\"false\"\n></div>\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nexport const RIGHT_POSITION: ConnectedPosition[] = [\n {originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 5},\n {originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: 5},\n];\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","export function removeNullFromObject<T>(obj: T): T {\n const copy = {...obj};\n Object.keys(copy).forEach(key => {\n if (copy[key] == null || copy[key] === '') {\n delete copy[key];\n }\n });\n return copy;\n}\n","export function filterDatatableData<T = object>(data: T[], filter: string): T[] {\n return data.filter(obj => filterPredicate(obj as any, filter));\n}\n/**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\nfunction filterPredicate(data: object|string, filter: string): boolean {\n // Transform the data into a lowercase string of all property values.\n const dataStr = typeof data === 'string' ? data : objectToStr(data);\n\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n\n return dataStr.indexOf(transformedFilter) !== -1;\n}\n\nexport function objectToStr(obj: object) {\n return Object.keys(obj).reduce((currentTerm: string, key: string) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n const term = (obj[key] && typeof obj[key] === 'object') ?\n objectToStr(obj[key]) :\n obj[key];\n return currentTerm + term + '◬';\n }, '').toLowerCase();\n}\n","import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\nimport { randomString } from '../../core/utils/random-string';\nimport { UploadedFile } from '../uploaded-file';\nimport { FileEntry } from '../types/file-entry';\nimport { UploadFileResponse } from '@common/uploads/uploads-api.service';\n\nexport interface UploadQueueItemProgress {\n percentage?: number;\n speed?: string;\n eta?: string;\n totalBytes?: number;\n completedBytes?: number;\n}\n\nexport class UploadQueueItem {\n id: string;\n canceled$: Subject<boolean> = new Subject();\n processing$ = new BehaviorSubject<boolean>(false);\n\n // file info (static)\n uploadedFile: UploadedFile;\n\n // backend response once file is uploaded\n uploadedResponse$ = new ReplaySubject<UploadFileResponse>(1);\n\n // uploaded file entry (only available on completed uploads)\n fileEntry: FileEntry;\n\n // upload progress information (will change)\n progress$ = new BehaviorSubject<UploadQueueItemProgress>({percentage: 0});\n\n error$ = new BehaviorSubject<string>(null);\n\n // custom data that can be attached to queue item\n public customData: object = {};\n\n get completed(): boolean {\n return !this.processing$.value && this.progress$.value.percentage === 100;\n }\n\n get inProgress(): boolean {\n return !this.error$.value && !this.completed;\n }\n\n constructor(file: UploadedFile, queueId?: string) {\n this.uploadedFile = file;\n this.id = queueId || randomString();\n }\n\n public cancel() {\n // cancelling before finalizing might cause infinite loop\n this.canceled$.next(true);\n this.finalize();\n }\n\n public complete() {\n this.setProgress({percentage: 100, eta: null});\n this.finalize();\n }\n\n public finalize() {\n this.uploadedResponse$.complete();\n this.canceled$.complete();\n this.progress$.complete();\n }\n\n public finishProcessing() {\n this.processing$.next(false);\n this.processing$.complete();\n }\n\n public addError(message: string) {\n this.error$.next(message);\n }\n\n public setProgress(data: Partial<UploadQueueItemProgress>) {\n this.progress$.next({\n ...this.progress$.value,\n ...data,\n });\n }\n}\n","import { UploadedFile } from '../../uploaded-file';\nimport { UploadValidation } from './upload-validation';\nimport { Translations } from '../../../core/translations/translations.service';\n\nexport class AllowedExtensionsValidation extends UploadValidation {\n constructor(\n protected params: {extensions: string[]},\n protected i18n: Translations\n ) {\n super();\n\n this.errorMessage = this.i18n.t(\n 'Only these file types are allowed: :extensions',\n {extensions: this.params.extensions.join(', ')}\n );\n }\n\n public fails(file: UploadedFile) {\n return ! this.params.extensions.some(extension => {\n return extension.toLowerCase() === file.extension.toLowerCase();\n });\n }\n}\n","import { UploadedFile } from '../../uploaded-file';\nimport { UploadValidation } from './upload-validation';\nimport {Translations} from '@common/core/translations/translations.service';\n\nexport class BlockedExtensionsValidation extends UploadValidation {\n constructor(\n protected params: {extensions: string[]},\n protected i18n: Translations\n ) {\n super();\n\n this.errorMessage = this.i18n.t(\n 'These file types are not allowed: :extensions',\n {extensions: this.params.extensions.join(', ')}\n );\n }\n\n public fails(file: UploadedFile) {\n return this.params.extensions.some(extension => {\n return extension === file.extension;\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {UploadValidator} from './upload-validator';\nimport {FileSizeValidation} from './validations/file-size-validation';\nimport {AllowedExtensionsValidation} from './validations/allowed-extensions-validation';\nimport {BlockedExtensionsValidation} from './validations/blocked-extensions-validation';\nimport {convertToBytes} from '../../core/utils/convertToBytes';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefaultUploadValidator extends UploadValidator {\n protected readonly DEFAULT_MAX_FILE_SIZE_MB = 8;\n public showToast = true;\n\n protected initValidations() {\n this.validations.push(\n new FileSizeValidation(\n {maxSize: this.getMaxFileSize()},\n this.i18n\n )\n );\n\n const allowedExtensions = this.getAllowedExtensions(),\n blockedExtensions = this.getBlockedExtensions();\n\n if (allowedExtensions && allowedExtensions.length) {\n this.validations.push(new AllowedExtensionsValidation(\n {extensions: allowedExtensions}, this.i18n\n ));\n }\n\n if (blockedExtensions && blockedExtensions.length) {\n this.validations.push(new BlockedExtensionsValidation(\n {extensions: blockedExtensions}, this.i18n\n ));\n }\n }\n\n protected getMaxFileSize(): number {\n return this.settings.get(\n 'uploads.max_size',\n convertToBytes(this.DEFAULT_MAX_FILE_SIZE_MB, 'MB')\n );\n }\n\n protected getAllowedExtensions() {\n return this.settings.getJson('uploads.allowed_extensions');\n }\n\n protected getBlockedExtensions() {\n return this.settings.getJson('uploads.blocked_extensions');\n }\n}\n","import {Injectable} from '@angular/core';\nimport {UploadQueueItem} from './upload-queue-item';\nimport {BehaviorSubject, EMPTY, from, ReplaySubject, Subject, throwError} from 'rxjs';\nimport {catchError, filter, map, mergeMap, takeUntil} from 'rxjs/operators';\nimport {UploadedFile} from '../uploaded-file';\nimport {UploadCompletedEvent, UploadEvent, UploadEventTypes, UploadProgressEvent} from '../utils/upload-progress-event';\nimport {UploadFileResponse, UploadsApiService} from '../uploads-api.service';\nimport {FileEntry} from '../types/file-entry';\nimport {UploadValidator} from '../validation/upload-validator';\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\nimport {DefaultUploadValidator} from '../validation/default-upload-validator';\nimport {BackendResponse} from '@common/core/types/backend-response';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {HttpErrors, UPLOAD_FAIL_LEARN_MORE_LINK} from '@common/core/http/errors/http-errors.enum';\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {Settings} from '@common/core/config/settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadQueueService {\n public uploads$ = new BehaviorSubject<UploadQueueItem[]>([]);\n public totalProgress$ = new ReplaySubject<number>(1);\n public uploadsAdded$ = new Subject<UploadQueueItem[]>();\n public count$ = new BehaviorSubject<{pending: number, completed: number}>({pending: 0, completed: 0});\n\n constructor(\n private api: UploadsApiService,\n private defaultValidator: DefaultUploadValidator,\n private toast: Toast,\n private currentUser: CurrentUser,\n private settings: Settings,\n ) {}\n\n public isEmpty(): boolean {\n return !this.uploads$.value.length;\n }\n\n public getAllCompleted(): FileEntry[] {\n return this.uploads$.value\n .filter(queueItem => queueItem.completed)\n .map(queueItem => queueItem.fileEntry);\n }\n\n public updateTotalProgress() {\n const progress = this.uploads$.value.map(upload => upload.progress$.value.percentage || 0);\n this.totalProgress$.next(progress.reduce((p, c) => p + c, 0) / progress.length);\n }\n\n public totalProgress() {\n return this.totalProgress$.asObservable();\n }\n\n public start(files: UploadedFile[]|{[key: string]: UploadedFile}, config: UploadApiConfig = {}): BackendResponse<UploadFileResponse> {\n const validator = config.validator || this.defaultValidator;\n let uploadQueueItems = [] as UploadQueueItem[];\n\n // push new uploads onto existing queue\n if (Array.isArray(files)) {\n uploadQueueItems = this.transformUploads(files, validator);\n this.uploads$.next(this.uploads$.value.concat(uploadQueueItems));\n this.uploadsAdded$.next(uploadQueueItems);\n\n // replace existing uploads in the queue with new upload by specified upload ID\n } else {\n const replacements = this.uploads$.value.map(queueItem => {\n if (files[queueItem.id]) {\n const transformed = this.transformUploads([files[queueItem.id]], validator, queueItem.id)[0];\n uploadQueueItems.push(transformed);\n return transformed;\n } else {\n return queueItem;\n }\n });\n this.uploads$.next(replacements);\n }\n\n this.updateCount();\n\n return from(uploadQueueItems.filter(u => !u.error$.value))\n .pipe(\n mergeMap(uploadQueueItem => {\n return this.api.upload(uploadQueueItem.uploadedFile, config).pipe(\n catchError((errResponse: BackendErrorResponse) => {\n this.handleUploadFailure(errResponse, uploadQueueItem, validator);\n // if one item in the queue fails, either continue uploading other items\n // or immediately stop uploading and bubble up error to subscribers\n return config.bubbleError ? throwError(errResponse) : EMPTY;\n }),\n takeUntil(uploadQueueItem.canceled$),\n map(response => {\n this.handleUploadEvent(response, uploadQueueItem, config.willProcessFiles);\n // assign queue item ID to upload completed response so\n // file entry can be matched to specific upload queue item\n if (response.name === UploadEventTypes.COMPLETED) {\n response.body.queueItemId = uploadQueueItem.id;\n }\n return response;\n }),\n );\n }, 1),\n filter(e => e.name === UploadEventTypes.COMPLETED),\n map((e: UploadCompletedEvent) => e.body)\n );\n }\n\n public updateProgress(id: string, e: UploadProgressEvent) {\n const queueItem = this.find(id);\n if ( ! queueItem) return;\n\n queueItem.setProgress({\n eta: e.eta,\n speed: e.speed,\n percentage: e.progress,\n totalBytes: e.totalBytes,\n completedBytes: e.completedBytes,\n });\n\n this.updateTotalProgress();\n }\n\n public completeUpload(id: string, response: UploadFileResponse) {\n const queueItem = this.find(id);\n if ( ! queueItem) return;\n\n queueItem.uploadedResponse$.next(response);\n queueItem.fileEntry = response.fileEntry;\n queueItem.complete();\n this.updateTotalProgress();\n }\n\n public errorUpload(id: string, message?: string) {\n this.find(id).addError(message);\n }\n\n public reset() {\n this.uploads$.value.forEach(u => u.cancel());\n this.uploads$.next([]);\n }\n\n public remove(id: string) {\n const i = this.uploads$.value.findIndex(u => u.id === id),\n upload = this.uploads$.value[i];\n upload.completed ? upload.finalize() : upload.cancel();\n this.uploads$.value.splice(i, 1);\n this.uploads$.next(this.uploads$.value);\n }\n\n public find(id: string): UploadQueueItem {\n return this.uploads$.value.find(u => u.id === id);\n }\n\n /**\n * Transform specified files into upload queue items.\n */\n protected transformUploads(files: UploadedFile[], validator: UploadValidator, queueId?: string) {\n return files.map(file => {\n const activeUpload = new UploadQueueItem(file, queueId);\n\n // validate upload\n if (validator) {\n const result = validator.validate(file);\n if (result.failed) activeUpload.addError(result.errorMessage);\n }\n\n return activeUpload;\n });\n }\n\n protected handleUploadEvent(event: UploadEvent, upload: UploadQueueItem, willProcessFiles = false) {\n if (event.name === UploadEventTypes.PROGRESS) {\n // upload is considered complete when progress equals 100\n // but file processing for large files might take some time\n // after file is fully uploaded so we should only set\n // progress as 100 on final completed response\n if (event.progress === 100) {\n // TODO: implement processing functionality for chunked upploading\n event = {...event, progress: 99};\n if (willProcessFiles) {\n upload.processing$.next(true);\n }\n }\n this.updateProgress(upload.id, event);\n } else if (event.name === UploadEventTypes.COMPLETED) {\n this.completeUpload(upload.id, event.body);\n this.updateCount();\n }\n }\n\n protected handleUploadFailure(response: BackendErrorResponse, upload: UploadQueueItem, validator: UploadValidator) {\n let msg = response?.errors?.file,\n showLearnMoreButton = null;\n if ( ! msg) {\n msg = HttpErrors.DefaultUpload;\n showLearnMoreButton = this.currentUser.isAdmin() && !this.settings.get('site.hide_docs_buttons');\n }\n\n this.errorUpload(upload.id, msg);\n this.updateCount();\n this.updateTotalProgress();\n\n if (validator.showToast) {\n this.toast.open(msg, {action: showLearnMoreButton ? 'Learn More' : null})\n .onAction()\n .subscribe(() => {\n window.open(UPLOAD_FAIL_LEARN_MORE_LINK);\n });\n }\n }\n\n private updateCount() {\n const pending = this.uploads$.value.filter(u => u.inProgress).length;\n this.count$.next({pending, completed: this.uploads$.value.length - pending});\n }\n}\n"],"sourceRoot":"webpack:///"}