@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
496 lines • 120 kB
JavaScript
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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