UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

496 lines 120 kB
import { __decorate, __metadata } from "tslib"; import { Component, EventEmitter, forwardRef, HostListener, Injector, NgZone, Output } from '@angular/core'; import { Debounce } from '@microsoft/windows-admin-center-sdk/core/base/decorators/debounce.decorators'; import { LogLevel } from '@microsoft/windows-admin-center-sdk/core/diagnostics/log-level'; import { Dom } from '@microsoft/windows-admin-center-sdk/core/dom/dom'; import { CoreBaseComponent } from '../common/base.component'; import { DisabledChangedEvent } from '../common/events/disabledChanged.event'; import { SME_LAYOUT_PROVIDER } from '../common/layout'; import * as i0 from "@angular/core"; import * as i1 from "../tooltip/tooltip-host.component"; const _c0 = ["*"]; const smeStylesDeprecatedSince = '8/01/18'; const smeStylesObsoleteSince = '12/10/18'; /** * This is the root component for every angular sme application. * It provides common styles, layout, and logic needed to make SME controls behave correctly. */ export class SmeUxComponent extends CoreBaseComponent { constructor(injector, ngZone) { super(injector); this.ngZone = ngZone; /** * It implements the ILayout interface. It's triggered when the layout is changed. * It's used to tell the child components to coordinate with the layout change. */ this.layoutChanged = new EventEmitter(); /** * Implementation of the Layout interface. It's only triggered when the window breakpoint defined has been changed. * This special breakpoint change event will be fired for control's special layout change. */ this.windowBreakpointChanged = new EventEmitter(); this.startDOMListener(); } /** * The source name to use for logging */ get logSourceName() { return 'SmeUxComponent'; } ngOnInit() { super.ngOnInit(); } /** * Starts listening to DOM mutations and reporting them to handlers */ startDOMListener() { // production configuration only listens to the disabled attribute. const configuration = { attributes: true, attributeFilter: ['disabled'], childList: false, subtree: true }; let mutationCallback = (mutations) => this.onProductionMutation(mutations); // configure more in depth listening for dev mode if (!MsftSme.self().Init.isProduction) { // configure the observer for dev mode configuration.childList = true; configuration.attributeFilter.push('class'); mutationCallback = (mutations) => this.onDebugMutation(mutations); } // Run outside of angular lifecycle to avoid triggering infinite changes to the DOM this.ngZone.runOutsideAngular(() => { const observer = new MutationObserver((mutations, obs) => mutationCallback(mutations, obs)); observer.observe(this.hostElement.nativeElement, configuration); }); } /** * Occurs when there are DOM mutations to examine * @param mutations the DOM mutations */ onProductionMutation(mutations) { mutations.forEach(mutation => { // listen to the disabled attribute on fieldsets if (mutation.type === 'attributes' && mutation.attributeName === 'disabled' && mutation.target.nodeType === 1 && mutation.target.nodeName === 'FIELDSET') { DisabledChangedEvent.dispatch(mutation.target); } }); } /** * Occurs when there are DOM mutations to examine in debug mode only * @param mutations the DOM mutations */ onDebugMutation(mutations) { SmeUxComponent.elementsAlreadyChecked.clear(); mutations.forEach(mutation => { if (mutation.addedNodes && mutation.addedNodes.length > 0) { this.checkNodes(mutation.addedNodes, mutation.type === 'childList'); } else if (mutation.attributeName) { const target = mutation.target; this.checkForDeprecation(target); if (mutation.type === 'childList') { this.checkForAccessibility(target); } } }); this.onProductionMutation(mutations); } /** * Checks a NodeList for lint issues recursively */ checkNodes(nodes, checkForAccessibility) { for (let i = 0; i < nodes.length; i++) { const node = nodes.item(i); if (node.nodeType === Node.ELEMENT_NODE) { const nodeElement = node; this.checkForDeprecation(nodeElement); if (nodeElement.childNodes && nodeElement.childNodes.length > 0) { // check if this element disabled node children check on it self const disableRecursiveCheck = this.getLintDisableSettings(nodeElement, SmeUxComponent.smeLintDisableSelf).disableRecursiveCheck; if (!disableRecursiveCheck) { this.checkNodes(nodeElement.childNodes, checkForAccessibility); } } if (checkForAccessibility) { this.checkForAccessibility(nodeElement); } } } } /** * Checks to see if an element is using deprecated styles or structure. * @param element the element to check */ checkForDeprecation(element) { if (this.shouldShowStyleLog(element)) { for (let i = 0; i < element.classList.length; i++) { const className = `.${element.classList.item(i)}`; // only ever check a particular class one time if (SmeUxComponent.classesAlreadyChecked.has(className)) { continue; } // mark this class as already checked. SmeUxComponent.classesAlreadyChecked.add(className); // check for an old deprecated class let options = SmeUxComponent.deprecatedClasses[className]; // check if this is a deprecated icon-win class if (MsftSme.isNullOrUndefined(options) && className.startsWith('.icon-win-')) { options = MsftSme.deepCopy(SmeUxComponent.deprecatedClasses['.icon-win']); options.alternateSignature = className.replace('.icon-win-', '.sme-icon-'); } let message; // if this is class is not deprecated, check if it is a unknown class if (MsftSme.isNullOrUndefined(options)) { // classes prefixed with 'sme' or 'ng' are considered 'known' if (!className.startsWith('.sme-') && !className.startsWith('.ng-')) { SmeUxComponent.classesAlreadyChecked.add(className); message = this.strings.MsftSmeShell.Angular.HtmlScanner.UnrecognizedClass.messageFormat.format(className); } } else if (options.obsolete) { if (!options.obsoleteSince) { // eslint-disable-next-line throw new SyntaxError(`obsolete option set on DeprecationSettings for "${className}", but has an invalid 'obsoleteSince' date.`); } // craft obsolete message from options. const alternateMessage = options.alternateSignature ? this.strings.MsftSmeShell.Angular.Decorators.Obsolete.alternateSignatureFormat .format(options.alternateSignature) : ''; message = this.strings.MsftSmeShell.Angular.Decorators.Obsolete.messageFormat .format(className, options.obsoleteSince, alternateMessage, options.message || ''); } else { if (!options.deprecatedSince) { // eslint-disable-next-line throw new SyntaxError(`DeprecationSettings for "${className}" has an invalid 'deprecatedSince' date.`); } // craft deprecated message from options. const alternateMessage = options.alternateSignature ? this.strings.MsftSmeShell.Angular.Decorators.Deprecated.alternateSignatureFormat .format(options.alternateSignature) : ''; message = this.strings.MsftSmeShell.Angular.Decorators.Deprecated.CssClass.messageFormat .format(className, options.deprecatedSince, alternateMessage, options.message || ''); } if (message) { this.log(message, LogLevel.Warning, { element: element }); } } } } /** * Check accessibility rules for the given element * @param element the element */ checkForAccessibility(element) { const hasDisableAccessibilityAncestor = Dom.getSpecificAncestor(element, el => this.getLintDisableSettings(el, SmeUxComponent.smeLintDisable).disableAccessibility); if (!hasDisableAccessibilityAncestor) { this.checkNoMixedUseZones(element); this.checkAnchorTagRequirements(element); this.checkNoDialogsInForms(element); this.checkNoInputsOutsideForms(element); } } /** * Checks that the given element and its children are not mixed use zones * A mixed use zone has a child that is a zone and a child that is a non-zone focusable element at the same level * @param element the element */ checkNoMixedUseZones(element) { Dom.getAllElements(element, el => Dom.isZone(el) && this.shouldShowAccessibilityLog(el)).forEach(el => { if (!SmeUxComponent.elementsAlreadyChecked.has(el)) { const nonZoneChild = Dom.getFirstElement(el, Dom.isFocusableNonZone, Dom.isZone, false); const zoneChild = Dom.getFirstElement(el, Dom.isZone, null, false); if (zoneChild && zoneChild !== el && nonZoneChild) { SmeUxComponent.elementsAlreadyChecked.add(el); this.log(this.strings.MsftSmeShell.Angular.Lint.Accessibility.MixedUseZone, LogLevel.Error, { element: el, nonZoneChild: nonZoneChild, zoneChild: zoneChild }); } } }); } /** * Checks any anchor tags on the element or it's children either have an href or a role and tabindex * @param element the element */ checkAnchorTagRequirements(element) { Dom.getAllElements(element, el => el.tagName === 'A' && this.shouldShowAccessibilityLog(el)).forEach(el => { if (!SmeUxComponent.elementsAlreadyChecked.has(el)) { const hasHref = el.attributes.getNamedItem('href'); const hasRole = el.attributes.getNamedItem('role'); const hasTabIndex = el.attributes.getNamedItem('tabindex'); if (!hasHref && !hasRole) { SmeUxComponent.elementsAlreadyChecked.add(el); this.log(this.strings.MsftSmeShell.Angular.Lint.Accessibility.AnchorRoleOrHref, LogLevel.Error, { element: el }); } if (!hasHref && !hasTabIndex) { SmeUxComponent.elementsAlreadyChecked.add(el); this.log(this.strings.MsftSmeShell.Angular.Lint.Accessibility.AnchorTabIndexOrHref, LogLevel.Error, { element: el }); } } }); } /** * Checks that the element or it's children are not forms outside of dialogs * @param element the element */ checkNoDialogsInForms(element) { const disableSelfSettings = this.getLintDisableSettings(element, SmeUxComponent.smeLintDisableSelf); if (!disableSelfSettings.disableAccessibility) { const trapWithinForm = Dom.getFirstElement(element, Dom.isInTrapWithinForm); if (trapWithinForm) { if (!SmeUxComponent.elementsAlreadyChecked.has(trapWithinForm)) { SmeUxComponent.elementsAlreadyChecked.add(trapWithinForm); this.log(this.strings.MsftSmeShell.Angular.Lint.Accessibility.DialogInForm, LogLevel.Error, { element: trapWithinForm }); } } } } /** * Checks that the element and its children are not inputs without form wrappers * @param element the element */ checkNoInputsOutsideForms(element) { Dom.getAllElements(element, el => Dom.isInputWithoutForm(el) && this.shouldShowAccessibilityLog(el)).forEach(el => { if (!SmeUxComponent.elementsAlreadyChecked.has(el)) { SmeUxComponent.elementsAlreadyChecked.add(el); this.log(this.strings.MsftSmeShell.Angular.Lint.Accessibility.InputWithoutForm, LogLevel.Error, { element: el }); } }); } /** * determines if accessibility error logging is enabled for the given element * @param element the element */ shouldShowAccessibilityLog(element) { const hasDisableAccessibilityAncestor = Dom.getSpecificAncestor(element, el => this.getLintDisableSettings(el, SmeUxComponent.smeLintDisable).disableAccessibility); const disableSelfSettings = this.getLintDisableSettings(element, SmeUxComponent.smeLintDisableSelf); return !hasDisableAccessibilityAncestor && !disableSelfSettings.disableAccessibility; } /** * determines if style warning logging is enabled for the given element * @param element the element */ shouldShowStyleLog(element) { const hasDisableStyleAncestor = Dom.getSpecificAncestor(element, el => this.getLintDisableSettings(el, SmeUxComponent.smeLintDisable).disableStyle); const disableSelfSettings = this.getLintDisableSettings(element, SmeUxComponent.smeLintDisableSelf); return !hasDisableStyleAncestor && !disableSelfSettings.disableStyle; } /** * Gets lint settings for the given element * @param element the element * @param lintAttribute the lint attribute to check 'sme-lint-disable' or 'sme-lint-disable-self' */ getLintDisableSettings(element, lintAttribute) { const lintSettings = { disableAccessibility: false, disableStyle: false, disableRecursiveCheck: false }; const smeLintDisable = element.attributes.getNamedItem(lintAttribute); if (smeLintDisable) { if (!MsftSme.isNullOrWhiteSpace(smeLintDisable.value)) { const rules = smeLintDisable.value.split(','); rules.forEach(rule => { switch (rule.trim()) { case 'accessibility': lintSettings.disableAccessibility = true; break; case 'style': lintSettings.disableStyle = true; break; case 'recursive': lintSettings.disableRecursiveCheck = true; break; } }); } else { // both enabled if attribute present but not given a value lintSettings.disableAccessibility = true; lintSettings.disableStyle = true; lintSettings.disableRecursiveCheck = true; } } return lintSettings; } /** * Gets the initial host classes to be applied to this element */ getInitialHostClasses() { return super.getInitialHostClasses().concat([ 'sme-ux' ]); } /** * Listen to window resizes and emit a debounced layout changed. */ onWindowResized() { this.layoutChanged.emit(); } } SmeUxComponent.elementsAlreadyChecked = new Set(); SmeUxComponent.classesAlreadyChecked = new Set(); SmeUxComponent.smeLintDisable = 'sme-lint-disable'; SmeUxComponent.smeLintDisableSelf = 'sme-lint-disable-self'; SmeUxComponent.deprecatedClasses = { /* eslint-disable max-len */ '.acceptable': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.alert': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-alert component', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.alert-danger': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-alert component', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.auto-flex-size': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-position-flex-auto', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-all': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-inset-sm .sme-border-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-bottom': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-bottom-sm .sme-border-bottom-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-horizontal': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-horizontal-sm .sme-border-horizontal-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-left': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-left-sm .sme-border-left-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-right': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-right-sm .sme-border-right-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-top': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-top-sm .sme-border-top-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.border-vertical': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-border-vertical-sm .sme-border-vertical-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.breadCrumb': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-alert component', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.break-word': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-ws-wrap', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.checkbox': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-form-field[type="checkbox"]', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-dark': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-color-alt', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-error': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-info': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-light': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-color-base', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-light-gray': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-color-base-90', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-success': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.color-warning': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.combobox': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-form-field[type="select"]', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.dashboard': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-layout-content-zone-padded sme-arrange-stack-h', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.delete-button': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.details-content': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.details-panel': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-property-grid', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.details-panel-container': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-property-grid', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.details-tab': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-property-grid and/or sme-pivot', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.details-wrapper': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-property-grid', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.disabled': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-disabled', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.error-cover': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.error-message': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.fixed-flex-size': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-position-flex-none', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.flex-layout': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-stack-h OR .sme-arrange-stack-v', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.font-bold': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'b OR .sme-font-emphasis OR sme-font-family-bold', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-buttons': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-control': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-controls': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-group': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-group-label': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-input': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.form-stretch': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.guided-pane-button': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.header-container': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.highlight': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'mark OR .sme-background-color-yellow', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.horizontal': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-stack-h', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.indent': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.input-file': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.invalid': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.item-list': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.modal-scrollable': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.multi-section': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.nav-tabs': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-pivot component', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.no-action-bar': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.no-scroll': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-overflow-hide', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.nowrap': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-stack-h OR .sme-arrange-stack-v', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.overflow-margins': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.overflow-tool': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.progress-cover': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.radio': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-form-field[type="radio"]', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.relative': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-layout-relative', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.relative-center': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-layout-absolute .sme-position-center', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.required-clue': { deprecatedSince: smeStylesDeprecatedSince, message: 'Please use sme-form-field components instead', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.reverse': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-stack-reversed', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.right-panel': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.rollup': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.rollup-status': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.rollup-title': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.rollup-value': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.searchbox': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-form-field[type="search"]', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.searchbox-action-bar': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-1': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-2': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-3': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-4': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-full': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-h-half': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-v-1': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-v-2': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-v-3': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.size-v-4': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.status-icon': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.stretch-absolute': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-layout-absolute .sme-position-inset-none', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.stretch-fixed': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-layout-fixed .sme-position-inset-none', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.stretch-vertical': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-position-stretch-v', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.stretch-width': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-position-stretch-h', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.svg-16px': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.table-indent': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.table-sm': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.thin': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-body': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-content': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-footer': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-header': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-layout': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tile-table': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tool-bar': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tool-container': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-layout-content-zone or sme-layout-content-zone-padded', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tool-header': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tool-header-box': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.tool-pane': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.toolbar': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-bar': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-bar-area': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-bar-background': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-bar-title': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-bar-value': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-chart': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-message': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-message-area': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.usage-message-title': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.vertical': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-stack-v', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.vertical-scroll-only': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-overflow-hide-x sme-arrange-overflow-auto-y', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.warning': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.white-space': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.wrap': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-arrange-wrapstack-h OR .sme-arrange-wrapstack-v', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.btn': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-button OR button', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.btn-primary': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: '.sme-button.sme-button-primary OR button.sme-button-primary', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, '.toggle-switch': { deprecatedSince: smeStylesDeprecatedSince, alternateSignature: 'sme-form-field[type="toggle-switch"]', obsolete: true, obsoleteSince: smeStylesObsoleteSince }, // Note icon win class deprecation is special. It is overridden on the fly for all of the icon-win classes. '.icon-win': { deprecatedSince: smeStylesDeprecatedSince, obsolete: true, obsoleteSince: smeStylesObsoleteSince } /* eslint-enable max-len */ }; /** @nocollapse */ SmeUxComponent.ɵfac = function SmeUxComponent_Factory(t) { return new (t || SmeUxComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.NgZone)); }; /** @nocollapse */ SmeUxComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SmeUxComponent, selectors: [["sme-ux"]], hostBindings: function SmeUxComponent_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("resize", function SmeUxComponent_resize_HostBindingHandler() { return ctx.onWindowResized(); }, false, i0.ɵɵresolveWindow); } }, outputs: { layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [i0.ɵɵProvidersFeature([ { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => SmeUxComponent)) } ]), i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, template: function SmeUxComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵelement(0, "sme-tooltip-host"); i0.ɵɵprojection(1); } }, dependencies: [i1.TooltipHostComponent], encapsulation: 2 }); __decorate([ Debounce(250), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], SmeUxComponent.prototype, "onWindowResized", null); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SmeUxComponent, [{ type: Component, args: [{ selector: 'sme-ux', template: '<sme-tooltip-host></sme-tooltip-host><ng-content></ng-content>', providers: [ { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => SmeUxComponent)) } ] }] }], function () { return [{ type: i0.Injector }, { type: i0.NgZone }]; }, { layoutChanged: [{ type: Output }], windowBreakpointChanged: [{ type: Output }], onWindowResized: [{ type: HostListener, args: ['window:resize'] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21lLXV4LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3V4L3NtZS11eC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFVLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFvQy9ELE1BQU0sd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0FBQzNDLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBRTFDOzs7R0FHRztBQVFILE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBMEpqRCxZQUFZLFFBQWtCLEVBQVUsTUFBYztRQUNsRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEb0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWR0RDs7O1dBR0c7UUFFSSxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBFOzs7V0FHRztRQUVJLDRCQUF1QixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBSTFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUEzSkQ7O09BRUc7SUFDSCxJQUFjLGFBQWE7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