@microsoft/windows-admin-center-sdk 2.508.0 → 2.510.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1025 -514
  2. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  3. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  4. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  5. package/angular/esm2015/src/controls/common/decorators/deprecation.decorators.js +1 -1
  6. package/angular/esm2015/src/controls/header/header.component.js +79 -32
  7. package/angular/esm2015/src/controls/layout/index.js +2 -1
  8. package/angular/esm2015/src/controls/layout/layout-config.js +69 -0
  9. package/angular/esm2015/src/controls/layout/layout-item.component.js +12 -4
  10. package/angular/esm2015/src/controls/layout/layout-responsive-window-manager.js +22 -0
  11. package/angular/esm2015/src/controls/layout/layout.component.js +402 -69
  12. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +8 -2
  13. package/angular/esm2015/src/controls/settings/settings.component.js +9 -3
  14. package/angular/esm2015/src/controls/split-view/split-view.component.js +1 -1
  15. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +950 -475
  16. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  17. package/angular/src/controls/header/header.component.d.ts +17 -5
  18. package/angular/src/controls/layout/index.d.ts +1 -0
  19. package/angular/src/controls/layout/layout-config.d.ts +53 -0
  20. package/angular/src/controls/layout/layout-item.component.d.ts +5 -1
  21. package/angular/src/controls/layout/layout-responsive-window-manager.d.ts +5 -0
  22. package/angular/src/controls/layout/layout.component.d.ts +95 -3
  23. package/angular/src/controls/property-grid/property-grid.component.d.ts +5 -1
  24. package/angular/src/controls/settings/settings.component.d.ts +9 -0
  25. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  26. package/e2e/assets/strings/de-DE/strings.json +1 -1
  27. package/e2e/assets/strings/es-ES/strings.json +1 -1
  28. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  29. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  30. package/e2e/assets/strings/it-IT/strings.json +1 -1
  31. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  32. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  33. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  34. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  35. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  36. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  37. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  38. package/e2e/assets/strings/strings.json +1 -1
  39. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  40. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  41. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  42. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  43. package/package.json +1 -1
  44. package/styles/css/main-v2.css +1 -1
@@ -8481,6 +8481,444 @@ const ɵEditableLayoutItemComponent_BaseFactory = /*@__PURE__*/ ɵɵgetInherited
8481
8481
  args: ['document:mousemove', ['$event']]
8482
8482
  }] }); })();
8483
8483
 
8484
+ /**
8485
+ * It defines the number of breakpoints that WAC currently support.
8486
+ * add more scenarios when WAC is going to support scenarios like tablet etc.
8487
+ */
8488
+ var SmeResponsiveWindowBreakpointsValue;
8489
+ (function (SmeResponsiveWindowBreakpointsValue) {
8490
+ SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["Reflow"] = 399.98] = "Reflow";
8491
+ SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["PhoneDown"] = 767.98] = "PhoneDown";
8492
+ SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["PhoneUp"] = Number.MAX_SAFE_INTEGER] = "PhoneUp";
8493
+ })(SmeResponsiveWindowBreakpointsValue || (SmeResponsiveWindowBreakpointsValue = {}));
8494
+ /**
8495
+ * It defines the current supported scenario for window sizes.
8496
+ */
8497
+ var SmeResponsiveWindowBreakpoints;
8498
+ (function (SmeResponsiveWindowBreakpoints) {
8499
+ SmeResponsiveWindowBreakpoints["Reflow"] = "Reflow";
8500
+ SmeResponsiveWindowBreakpoints["PhoneDown"] = "PhoneDown";
8501
+ SmeResponsiveWindowBreakpoints["PhoneUp"] = "PhoneUp";
8502
+ })(SmeResponsiveWindowBreakpoints || (SmeResponsiveWindowBreakpoints = {}));
8503
+ // tslint:disable-next-line: directive-class-suffix
8504
+ class SmeResponsiveWindowManagerComponent {
8505
+ /**
8506
+ * The manager supports layout component and in the meantime listening to the window size change event.
8507
+ * @param layout the layout component.
8508
+ */
8509
+ constructor(layout) {
8510
+ this.layout = layout;
8511
+ /**
8512
+ * It defines whether the current window size is for super small window.
8513
+ */
8514
+ this.internalReflowMode = false;
8515
+ /**
8516
+ * It defines whether the current window size is phone down.
8517
+ */
8518
+ this.internalPhoneDown = false;
8519
+ /**
8520
+ * It defines whether the current window size is phone up.
8521
+ */
8522
+ this.internalPhoneUp = false;
8523
+ /**
8524
+ * It defines whether the current solution/tool is using css v2 to support responsive window.
8525
+ */
8526
+ this.internalCssV2 = false;
8527
+ /**
8528
+ * The array for subscription.
8529
+ */
8530
+ this.subscriptions = [];
8531
+ this.setIsCssV2Enabled();
8532
+ if (this.layout) {
8533
+ // on parent layout changes, re-emit the layout change to our event
8534
+ this.subscriptions.push(layout.layoutChanged.subscribe((() => this.onLayoutChanged())));
8535
+ // on window break point changes, emit the event about critical classes and styling updates signal.
8536
+ this.subscriptions.push(layout.windowBreakpointChanged.subscribe(() => this.onWindowBreakpointChanged()));
8537
+ this.deferredOnLayoutChanged();
8538
+ }
8539
+ }
8540
+ /**
8541
+ * Gets the current window responsive state.
8542
+ */
8543
+ get responsiveWindowState() {
8544
+ return this.internalResponsiveWindowMode;
8545
+ }
8546
+ /**
8547
+ * Sets the current window responsive state.
8548
+ */
8549
+ set responsiveWindowState(input) {
8550
+ var _a;
8551
+ const prevResponsiveWindowState = this.internalResponsiveWindowMode;
8552
+ this.internalResponsiveWindowMode = input;
8553
+ if (prevResponsiveWindowState !== this.internalResponsiveWindowMode) {
8554
+ (_a = this.layout) === null || _a === void 0 ? void 0 : _a.windowBreakpointChanged.emit();
8555
+ }
8556
+ }
8557
+ /**
8558
+ * Gets the value indicating whether css v2 should be used.
8559
+ */
8560
+ get cssV2() {
8561
+ return this.internalCssV2;
8562
+ }
8563
+ /**
8564
+ * It sets the value for whether the current tool/solution is using css v2 for window responsiveness.
8565
+ */
8566
+ set cssV2(input) {
8567
+ this.internalCssV2 = !!input;
8568
+ }
8569
+ /**
8570
+ * Gets the phone down mode.
8571
+ */
8572
+ get phoneDown() {
8573
+ return this.internalPhoneDown;
8574
+ }
8575
+ /**
8576
+ * Sets the phone down mode.
8577
+ */
8578
+ set phoneDown(input) {
8579
+ this.internalPhoneDown = !!input;
8580
+ }
8581
+ /**
8582
+ * Gets the phone up mode.
8583
+ */
8584
+ get phoneUp() {
8585
+ return this.internalPhoneUp;
8586
+ }
8587
+ /**
8588
+ * Set the phone up mode.
8589
+ */
8590
+ set phoneUp(input) {
8591
+ this.internalPhoneUp = !!input;
8592
+ }
8593
+ /**
8594
+ * Gets the reflow mode.
8595
+ */
8596
+ get reflowMode() {
8597
+ return this.internalReflowMode;
8598
+ }
8599
+ /**
8600
+ * Sets the reflow mode.
8601
+ */
8602
+ set reflowMode(input) {
8603
+ this.internalReflowMode = !!input;
8604
+ }
8605
+ /**
8606
+ * Gets the width of the window from the window object.
8607
+ * Should only be called on layout or window size change.
8608
+ */
8609
+ get width() {
8610
+ return window === null || window === void 0 ? void 0 : window.innerWidth;
8611
+ }
8612
+ /**
8613
+ * Gets the height of the window from the window object.
8614
+ * Should only be called on layout or window size change.
8615
+ */
8616
+ get height() {
8617
+ return window === null || window === void 0 ? void 0 : window.innerHeight;
8618
+ }
8619
+ /**
8620
+ * Gets the last known window responsive data.
8621
+ */
8622
+ get prevSize() {
8623
+ var _a, _b;
8624
+ if (((_a = this.internalPrevSize) === null || _a === void 0 ? void 0 : _a.width) === this.width && ((_b = this.internalPrevSize) === null || _b === void 0 ? void 0 : _b.height) === this.height) {
8625
+ return this.internalPrevSize;
8626
+ }
8627
+ else {
8628
+ return this.getSmeResponsiveWindowData();
8629
+ }
8630
+ }
8631
+ /**
8632
+ * Gets the window responsive break points.
8633
+ */
8634
+ get size() {
8635
+ const width = this.width;
8636
+ if (width <= SmeResponsiveWindowBreakpointsValue.Reflow) {
8637
+ this.reflowMode = true;
8638
+ this.phoneDown = false;
8639
+ this.phoneUp = false;
8640
+ this.responsiveWindowState = SmeResponsiveWindowBreakpoints.Reflow;
8641
+ }
8642
+ else if (width <= SmeResponsiveWindowBreakpointsValue.PhoneDown) {
8643
+ this.reflowMode = false;
8644
+ this.phoneDown = true;
8645
+ this.phoneUp = false;
8646
+ this.responsiveWindowState = SmeResponsiveWindowBreakpoints.PhoneDown;
8647
+ }
8648
+ else {
8649
+ this.reflowMode = false;
8650
+ this.phoneDown = false;
8651
+ this.phoneUp = true;
8652
+ this.responsiveWindowState = SmeResponsiveWindowBreakpoints.PhoneUp;
8653
+ }
8654
+ return this.responsiveWindowState;
8655
+ }
8656
+ /**
8657
+ * It sets whether the current solution/tool is using the css v2 for window responsiveness.
8658
+ */
8659
+ setIsCssV2Enabled() {
8660
+ this.cssV2 = this.isUsingCssV2();
8661
+ }
8662
+ /**
8663
+ * The implementation for checking whether the styles are being set.
8664
+ * @returns true if the current tool/solution is using css v2 for window responsiveness.
8665
+ */
8666
+ isUsingCssV2() {
8667
+ const head = document.getElementsByTagName('head')[0];
8668
+ const links = head.querySelectorAll('link');
8669
+ let cssV2 = true;
8670
+ // sme shell root would be containing style.css and either main.css or main-v2.css
8671
+ // thus as long as it is not main.css, should be using css-v2
8672
+ for (let i = 0; i < links.length; i++) {
8673
+ const link = links[i];
8674
+ if (link.href && link.href.includes('main.css')) {
8675
+ cssV2 = false;
8676
+ break;
8677
+ }
8678
+ }
8679
+ return cssV2;
8680
+ }
8681
+ /**
8682
+ * The functionality to update the core variables for window responsive data.
8683
+ * @returns The SmeResponsiveWindowData object
8684
+ */
8685
+ getSmeResponsiveWindowData() {
8686
+ // on window size or layout change, gets the width and height from the window object.
8687
+ const width = this.width;
8688
+ const height = this.height;
8689
+ // based on the window size information, calculates the core paramters.
8690
+ const size = this.size;
8691
+ // the 3 gets above sets these following 3 parameters.
8692
+ const reflowMode = this.reflowMode;
8693
+ const phoneDown = this.phoneDown;
8694
+ const phoneUp = this.phoneUp;
8695
+ // sets the object and return.
8696
+ this.internalPrevSize = {
8697
+ width: width,
8698
+ height: height,
8699
+ size: size,
8700
+ reflowMode: reflowMode,
8701
+ phoneDown: phoneDown,
8702
+ phoneUp: phoneUp
8703
+ };
8704
+ return this.internalPrevSize;
8705
+ }
8706
+ /**
8707
+ * On layout changed event handler, occurs every time the layout has been changed.
8708
+ */
8709
+ onLayoutChanged() {
8710
+ this.getSmeResponsiveWindowData();
8711
+ }
8712
+ /**
8713
+ * The deferred layout changed handler.
8714
+ */
8715
+ deferredOnLayoutChanged() {
8716
+ this.onLayoutChanged();
8717
+ }
8718
+ /**
8719
+ * To respond to a layout breakpoint changed event.
8720
+ * @returns void
8721
+ */
8722
+ onWindowBreakpointChanged() {
8723
+ return;
8724
+ }
8725
+ /**
8726
+ * Gets the parent element by html tag. By default, go up 10 levels for enhanced performance.
8727
+ * @param inputElement The input element.
8728
+ * @returns The targeted html element get by the html tag
8729
+ */
8730
+ getParentElementByTag(inputElement, parentHtmlTags = ['sme-pivot', 'sme-split-view', 'sme-settings-page'], levelExternal = 10, customKeywords, untilTagName) {
8731
+ if (!inputElement) {
8732
+ return undefined;
8733
+ }
8734
+ let level = levelExternal;
8735
+ let found = false;
8736
+ let parent = inputElement;
8737
+ while (level > 0 && !found) {
8738
+ if (parent) {
8739
+ parent = parent.parentElement;
8740
+ }
8741
+ const parentTagName = parent === null || parent === void 0 ? void 0 : parent.tagName.toLocaleLowerCase();
8742
+ if (untilTagName) {
8743
+ if (parentTagName === untilTagName.toLowerCase()) {
8744
+ return undefined;
8745
+ }
8746
+ }
8747
+ if (parentHtmlTags.includes(parentTagName) || (customKeywords !== undefined && (parentTagName === null || parentTagName === void 0 ? void 0 : parentTagName.includes(customKeywords)))) {
8748
+ found = true;
8749
+ return parent;
8750
+ }
8751
+ level -= 1;
8752
+ }
8753
+ return undefined;
8754
+ }
8755
+ /**
8756
+ * The core algorithm for adding and removing classes based on window size and window size settings.
8757
+ * @param settings the settings object
8758
+ * @param curSettings the current setting
8759
+ * @param element the html element for setting up classes.
8760
+ * @returns void.
8761
+ */
8762
+ updateClassArrayOnWindowSize(settings, curSettings, element) {
8763
+ if (!settings) {
8764
+ return;
8765
+ }
8766
+ settings = JSON.parse(JSON.stringify(settings));
8767
+ const phoneDown = JSON.parse(JSON.stringify(settings.phoneDown));
8768
+ const phoneUp = JSON.parse(JSON.stringify(settings.phoneUp));
8769
+ const reflow = JSON.parse(JSON.stringify(settings.reflow));
8770
+ let toBeRemovedClassList = [];
8771
+ let toBeAddedClassList = [];
8772
+ switch (curSettings) {
8773
+ case 'phoneUp':
8774
+ toBeAddedClassList = phoneUp;
8775
+ toBeRemovedClassList = phoneDown;
8776
+ toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, reflow);
8777
+ break;
8778
+ case 'phoneDown':
8779
+ toBeAddedClassList = phoneDown;
8780
+ toBeRemovedClassList = phoneUp;
8781
+ toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, reflow);
8782
+ break;
8783
+ case 'reflow':
8784
+ toBeAddedClassList = reflow;
8785
+ toBeRemovedClassList = phoneDown;
8786
+ toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, phoneUp);
8787
+ break;
8788
+ }
8789
+ toBeRemovedClassList = this.removeExistedItem(toBeRemovedClassList, toBeAddedClassList);
8790
+ for (let i = 0; i < toBeRemovedClassList.length; i++) {
8791
+ if (element.classList.contains(toBeRemovedClassList[i])) {
8792
+ element.classList.remove(toBeRemovedClassList[i]);
8793
+ }
8794
+ }
8795
+ for (let i = 0; i < toBeAddedClassList.length; i++) {
8796
+ if (!element.classList.contains(toBeAddedClassList[i])) {
8797
+ element.classList.add(toBeAddedClassList[i]);
8798
+ }
8799
+ }
8800
+ }
8801
+ /**
8802
+ * Merge two arrays with unique items.
8803
+ * @param arrayA the input array A
8804
+ * @param arrayB the input array B
8805
+ * @returns an array that contains unique items from array A and array B
8806
+ */
8807
+ uniqueArray(arrayA, arrayB) {
8808
+ if (arrayB && arrayB.length) {
8809
+ for (let i = 0; i < arrayB.length; i++) {
8810
+ if (!arrayA.includes(arrayB[i])) {
8811
+ arrayA.push(arrayB[i]);
8812
+ }
8813
+ }
8814
+ }
8815
+ return arrayA;
8816
+ }
8817
+ /**
8818
+ * Guarantees will not remove the classes that needs to be added.
8819
+ * @param toBeRemovedClassList the list of classes that needs to be removed.
8820
+ * @param toBeAddedClassList the list of classes that needs to be added.
8821
+ * @returns the list of classes that needs to be removed and doesn't overlap with the classes that needs to be added.
8822
+ */
8823
+ removeExistedItem(toBeRemovedClassList, toBeAddedClassList) {
8824
+ if (!toBeAddedClassList || !toBeAddedClassList.length) {
8825
+ return toBeRemovedClassList;
8826
+ }
8827
+ if (!toBeRemovedClassList || !toBeRemovedClassList.length) {
8828
+ return [];
8829
+ }
8830
+ const res = [];
8831
+ for (let i = 0; i < toBeRemovedClassList.length; i++) {
8832
+ if (!toBeAddedClassList.includes(toBeRemovedClassList[i])) {
8833
+ res.push(toBeRemovedClassList[i]);
8834
+ }
8835
+ }
8836
+ return res;
8837
+ }
8838
+ }
8839
+ /** @nocollapse */ SmeResponsiveWindowManagerComponent.ɵfac = function SmeResponsiveWindowManagerComponent_Factory(t) { return new (t || SmeResponsiveWindowManagerComponent)(ɵɵdirectiveInject(SME_LAYOUT_PROVIDER)); };
8840
+ /** @nocollapse */ SmeResponsiveWindowManagerComponent.ɵdir = ɵɵdefineDirective({ type: SmeResponsiveWindowManagerComponent });
8841
+ __decorate([
8842
+ Debounce$1(),
8843
+ __metadata("design:type", Function),
8844
+ __metadata("design:paramtypes", []),
8845
+ __metadata("design:returntype", void 0)
8846
+ ], SmeResponsiveWindowManagerComponent.prototype, "deferredOnLayoutChanged", null);
8847
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(SmeResponsiveWindowManagerComponent, [{
8848
+ type: Directive
8849
+ }], function () { return [{ type: undefined, decorators: [{
8850
+ type: Inject,
8851
+ args: [SME_LAYOUT_PROVIDER]
8852
+ }] }]; }, { deferredOnLayoutChanged: [] }); })();
8853
+
8854
+ var LayoutItemConfigPropertyWidthType;
8855
+ (function (LayoutItemConfigPropertyWidthType) {
8856
+ LayoutItemConfigPropertyWidthType["Percentage"] = "Percentage";
8857
+ LayoutItemConfigPropertyWidthType["Number"] = "Number";
8858
+ })(LayoutItemConfigPropertyWidthType || (LayoutItemConfigPropertyWidthType = {}));
8859
+ var LayoutItemConfigMode;
8860
+ (function (LayoutItemConfigMode) {
8861
+ LayoutItemConfigMode["Default"] = "Default";
8862
+ LayoutItemConfigMode["Custom"] = "Custom";
8863
+ })(LayoutItemConfigMode || (LayoutItemConfigMode = {}));
8864
+ var LayoutDrivenType;
8865
+ (function (LayoutDrivenType) {
8866
+ LayoutDrivenType["Default"] = "Default";
8867
+ LayoutDrivenType["ResponsiveWindowManager"] = "ResponsiveWindowManager";
8868
+ })(LayoutDrivenType || (LayoutDrivenType = {}));
8869
+ /**
8870
+ * The layout config generator.
8871
+ *
8872
+ * It determines the configurable width for the layout item.
8873
+ * Usage:
8874
+ *
8875
+ * const layoutConfigGenerator = new LayoutConfigGenerator();
8876
+ * layoutConfigGenerator.initialize([20, '100'])
8877
+ *
8878
+ * type number is used for pixel.
8879
+ * type string is used for percentage.
8880
+ */
8881
+ class LayoutConfigGenerator {
8882
+ /**
8883
+ * It initialized the layout configs for the layout component.
8884
+ *
8885
+ * @param phoneUp the layout config array for phone-up
8886
+ * @param phoneDown the layout config array for phone-down
8887
+ * @param reflow the layout config array for reflow
8888
+ * @returns
8889
+ */
8890
+ initialize(phoneUp, phoneDown, reflow) {
8891
+ const layoutConfig = {};
8892
+ this.parseConfig(layoutConfig, phoneUp, SmeResponsiveWindowBreakpoints.PhoneUp);
8893
+ this.parseConfig(layoutConfig, phoneDown, SmeResponsiveWindowBreakpoints.PhoneDown);
8894
+ this.parseConfig(layoutConfig, reflow, SmeResponsiveWindowBreakpoints.Reflow);
8895
+ console.log(layoutConfig);
8896
+ return layoutConfig;
8897
+ }
8898
+ parseConfig(layoutConfig, config, smeResponsiveWindowBreakpoints) {
8899
+ if (!config) {
8900
+ layoutConfig[smeResponsiveWindowBreakpoints] = {
8901
+ mode: LayoutItemConfigMode.Default
8902
+ };
8903
+ }
8904
+ else {
8905
+ layoutConfig[smeResponsiveWindowBreakpoints] = {
8906
+ mode: LayoutItemConfigMode.Custom,
8907
+ config: []
8908
+ };
8909
+ for (let i = 0; i <= config.length; i++) {
8910
+ layoutConfig[smeResponsiveWindowBreakpoints].config.push({
8911
+ width: {
8912
+ type: typeof config[i] === 'string' ?
8913
+ LayoutItemConfigPropertyWidthType.Percentage : LayoutItemConfigPropertyWidthType.Number,
8914
+ value: typeof config[i] === 'string' ? parseFloat(config[i]) : config[i]
8915
+ }
8916
+ });
8917
+ }
8918
+ }
8919
+ }
8920
+ }
8921
+
8484
8922
  class LayoutDefinitionComponent {
8485
8923
  constructor() {
8486
8924
  this.until = Number.MAX_VALUE;
@@ -8556,9 +8994,9 @@ class LayoutItemComponent extends CoreBaseComponent {
8556
8994
  }
8557
8995
  }
8558
8996
  /** @nocollapse */ LayoutItemComponent.ɵfac = function LayoutItemComponent_Factory(t) { return new (t || LayoutItemComponent)(ɵɵdirectiveInject(Injector)); };
8559
- /** @nocollapse */ LayoutItemComponent.ɵcmp = ɵɵdefineComponent({ type: LayoutItemComponent, selectors: [["sme-layout-item"]], hostVars: 6, hostBindings: function LayoutItemComponent_HostBindings(rf, ctx) { if (rf & 2) {
8560
- ɵɵstyleProp("width", ctx.width)("padding-right", ctx.paddingRight)("padding-bottom", ctx.paddingBottom);
8561
- } }, inputs: { columnSpan: "columnSpan", caption: "caption", maxWidth: "maxWidth" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c0$e, decls: 2, vars: 1, consts: [["class", "sme-font-family-bold sme-border-bottom-sm sme-border-bottom-color-base-40 sme-padding-bottom-xs sme-margin-vertical-sm", 4, "ngIf"], [1, "sme-font-family-bold", "sme-border-bottom-sm", "sme-border-bottom-color-base-40", "sme-padding-bottom-xs", "sme-margin-vertical-sm"]], template: function LayoutItemComponent_Template(rf, ctx) { if (rf & 1) {
8997
+ /** @nocollapse */ LayoutItemComponent.ɵcmp = ɵɵdefineComponent({ type: LayoutItemComponent, selectors: [["sme-layout-item"]], hostVars: 10, hostBindings: function LayoutItemComponent_HostBindings(rf, ctx) { if (rf & 2) {
8998
+ ɵɵstyleProp("width", ctx.width)("padding-right", ctx.paddingRight)("padding-bottom", ctx.paddingBottom)("flex", ctx.flex)("min-width", ctx.minWidth);
8999
+ } }, inputs: { columnSpan: "columnSpan", caption: "caption", customConfig: "customConfig", maxWidth: "maxWidth" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c0$e, decls: 2, vars: 1, consts: [["class", "sme-font-family-bold sme-border-bottom-sm sme-border-bottom-color-base-40 sme-padding-bottom-xs sme-margin-vertical-sm", 4, "ngIf"], [1, "sme-font-family-bold", "sme-border-bottom-sm", "sme-border-bottom-color-base-40", "sme-padding-bottom-xs", "sme-margin-vertical-sm"]], template: function LayoutItemComponent_Template(rf, ctx) { if (rf & 1) {
8562
9000
  ɵɵprojectionDef();
8563
9001
  ɵɵtemplate(0, LayoutItemComponent_div_0_Template, 2, 1, "div", 0);
8564
9002
  ɵɵprojection(1);
@@ -8580,14 +9018,41 @@ class LayoutItemComponent extends CoreBaseComponent {
8580
9018
  }], paddingBottom: [{
8581
9019
  type: HostBinding,
8582
9020
  args: ['style.paddingBottom']
9021
+ }], flex: [{
9022
+ type: HostBinding,
9023
+ args: ['style.flex']
9024
+ }], minWidth: [{
9025
+ type: HostBinding,
9026
+ args: ['style.min-width']
8583
9027
  }], columnSpan: [{
8584
9028
  type: Input
8585
9029
  }], caption: [{
8586
9030
  type: Input
9031
+ }], customConfig: [{
9032
+ type: Input
8587
9033
  }], maxWidth: [{
8588
9034
  type: Input
8589
9035
  }] }); })();
8590
9036
 
9037
+ class LayoutResponsiveWindowManager extends SmeResponsiveWindowManagerComponent {
9038
+ constructor() {
9039
+ super(...arguments);
9040
+ this.name = 'sme-layout';
9041
+ }
9042
+ onWindowSizeChanged() {
9043
+ if (!this.cssV2) {
9044
+ return;
9045
+ }
9046
+ // Can handle dynamic configuration, custom styling on different size of the window later on.
9047
+ }
9048
+ }
9049
+ __decorate([
9050
+ Yield$1(),
9051
+ __metadata("design:type", Function),
9052
+ __metadata("design:paramtypes", []),
9053
+ __metadata("design:returntype", void 0)
9054
+ ], LayoutResponsiveWindowManager.prototype, "onWindowSizeChanged", null);
9055
+
8591
9056
  const _c0$f = [[["sme-layout-item"]]];
8592
9057
  const _c1$6 = ["sme-layout-item"];
8593
9058
  /**
@@ -8596,18 +9061,64 @@ const _c1$6 = ["sme-layout-item"];
8596
9061
  class LayoutComponent extends CoreBaseComponent {
8597
9062
  constructor(injector, layout) {
8598
9063
  super(injector);
8599
- this.layout = layout;
9064
+ /**
9065
+ * The default horizontal space in between layout items.
9066
+ */
8600
9067
  this.itemHorizontalSpace = 32;
9068
+ /**
9069
+ * The default vertical space in between layout items.
9070
+ */
8601
9071
  this.itemVerticalSpace = 32;
9072
+ /**
9073
+ * If true, will always try to fill the whole row for each layout item.
9074
+ */
8602
9075
  this.tryToFillWholeRow = true;
9076
+ /**
9077
+ * The layout definition.
9078
+ */
8603
9079
  this.definition = {};
9080
+ /**
9081
+ * If false, it will not assign extra paddings to the right for the last layout item.
9082
+ */
8604
9083
  this.padLastItem = false;
9084
+ /**
9085
+ * If true, not extra right padding when there is only one item that uses the whole width of the row.
9086
+ */
8605
9087
  this.noExtraRightPaddingOneItemPerRow = true;
9088
+ /**
9089
+ * It determines whether the layout is for settings where it contains a left and right layout item.
9090
+ * If true, will apply special design for settings layout.
9091
+ * On phone-up, the left side navigation layout item will be using a fixed width by default 300px,
9092
+ * the right side layout item will be using the remaining width by default.
9093
+ *
9094
+ * On phone-down or 400% zoom, nothing is different from the regular settings page,
9095
+ * the left right layout will be transformed to top bottom layout.
9096
+ */
9097
+ this.layoutConfig = {
9098
+ [SmeResponsiveWindowBreakpoints.PhoneUp]: { 'mode': LayoutItemConfigMode.Default },
9099
+ [SmeResponsiveWindowBreakpoints.PhoneDown]: { 'mode': LayoutItemConfigMode.Default },
9100
+ [SmeResponsiveWindowBreakpoints.Reflow]: { 'mode': LayoutItemConfigMode.Default }
9101
+ };
9102
+ /**
9103
+ * Implementation of the Layout interface
9104
+ */
8606
9105
  this.layoutChanged = new EventEmitter();
8607
- this.subscriptions.push(this.layout.layoutChanged.subscribe(() => this.onLayoutChanged()));
8608
- setTimeout(() => {
8609
- this.updateLayout();
8610
- });
9106
+ /**
9107
+ * Implementation of the Layout interface
9108
+ */
9109
+ this.windowBreakpointChanged = new EventEmitter();
9110
+ this.columnCount = 1;
9111
+ this.columnSpanTotal = 0;
9112
+ this.layoutDrivenType = LayoutDrivenType.Default;
9113
+ this.stylePixel = 'px';
9114
+ if (layout) {
9115
+ this.layoutResponsiveWindowManager = new LayoutResponsiveWindowManager(layout);
9116
+ // on parent layout changes, re-emit the layout change to our event
9117
+ this.subscriptions.push(layout.layoutChanged.subscribe((() => this.onLayoutChanged())));
9118
+ // on window break point changes, emit the event about critical classes and styling updates signal.
9119
+ this.subscriptions.push(layout.windowBreakpointChanged.subscribe(() => this.onWindowBreakpointChanged()));
9120
+ this.deferredOnLayoutChanged();
9121
+ }
8611
9122
  }
8612
9123
  /**
8613
9124
  * The source name to use for logging
@@ -8618,15 +9129,48 @@ class LayoutComponent extends CoreBaseComponent {
8618
9129
  get currentLayoutDefinitionName() {
8619
9130
  return this.currentLayoutDefinition ? this.currentLayoutDefinition.name : '';
8620
9131
  }
9132
+ get currentLayoutDrivenType() {
9133
+ return this.layoutDrivenType;
9134
+ }
9135
+ get currentWindowBreakpoint() {
9136
+ var _a;
9137
+ return (_a = this.layoutResponsiveWindowManager) === null || _a === void 0 ? void 0 : _a.prevSize.size;
9138
+ }
9139
+ get currentLayoutItems() {
9140
+ return this.layoutItems;
9141
+ }
8621
9142
  ngAfterViewInit() {
8622
9143
  this.subscriptions.push(this.layoutItems.changes.subscribe(() => this.onLayoutChanged()));
8623
9144
  }
9145
+ /**
9146
+ * The open API for refreshing the control externally.
9147
+ */
9148
+ refresh() {
9149
+ this.resetFlex();
9150
+ this.onLayoutChanged();
9151
+ }
8624
9152
  /**
8625
9153
  * On layout changed event handler, occurs every time the layout has been changed.
8626
9154
  */
8627
9155
  onLayoutChanged() {
8628
9156
  this.updateLayout();
8629
9157
  }
9158
+ /**
9159
+ * The deferred layout changed handler.
9160
+ */
9161
+ deferredOnLayoutChanged() {
9162
+ this.onLayoutChanged();
9163
+ }
9164
+ /**
9165
+ * The on window breakpoint changed handler.
9166
+ * Adding yield for component to get ElementRef after initialization.
9167
+ */
9168
+ onWindowBreakpointChanged() {
9169
+ if (!this.layoutItems || !this.layoutItems.toArray()) {
9170
+ return;
9171
+ }
9172
+ this.layoutResponsiveWindowManager.onWindowSizeChanged();
9173
+ }
8630
9174
  // Adds classes listed to the root component
8631
9175
  // On phone down the flex start needs to be flex start to make sure no extra space being generated.
8632
9176
  getInitialHostClasses() {
@@ -8636,83 +9180,307 @@ class LayoutComponent extends CoreBaseComponent {
8636
9180
  }
8637
9181
  updateLayout() {
8638
9182
  setTimeout(() => {
8639
- var _a;
8640
- if (this.layoutItems) {
8641
- const layoutWidth = this.hostElement.nativeElement.clientWidth || Number.MAX_VALUE;
8642
- let columnCount = 1;
8643
- const layoutItems = this.layoutItems.toArray();
8644
- let columnSpanTotal = 0;
8645
- layoutItems.forEach(item => columnSpanTotal += item.columnSpan);
9183
+ if (!this.layoutItems) {
9184
+ return;
9185
+ }
9186
+ const layoutItems = this.layoutItems.toArray();
9187
+ this.getTotalColumnSpan(layoutItems);
9188
+ const currentWindowSize = this.layoutResponsiveWindowManager.prevSize.size;
9189
+ this.updateLayoutConfig(currentWindowSize);
9190
+ const layoutWidth = this.hostElement.nativeElement.clientWidth || Number.MAX_VALUE;
9191
+ if (this.layoutDrivenType === LayoutDrivenType.Default) {
8646
9192
  const definitions = this.definitions.toArray().sort((a, b) => a.until - b.until);
8647
9193
  const previousLayoutDefinition = this.currentLayoutDefinition;
8648
- this.currentLayoutDefinition = undefined;
8649
- for (let i = definitions.length - 1; i >= 0; i--) {
8650
- const definitionColumns = definitions[i].columns;
8651
- if (layoutWidth <= definitions[i].until || (this.tryToFillWholeRow && columnSpanTotal <= definitionColumns)) {
8652
- columnCount = definitionColumns;
8653
- this.currentLayoutDefinition = definitions[i];
8654
- }
8655
- }
9194
+ this.updateCurrentLayoutDefinition(definitions, layoutWidth);
8656
9195
  const itemHorizontalSpacePercentage = Math.round(this.itemHorizontalSpace * 100 / layoutWidth);
8657
9196
  const columnCountModifier = this.padLastItem ? 0 : 1;
8658
- const availableLayoutWidthPercentage = 100 - itemHorizontalSpacePercentage * (columnCount - columnCountModifier);
8659
- let percentageSoFar = 0;
8660
- let columnIndex = 0;
8661
- for (let i = 0; i < layoutItems.length; i++) {
8662
- let percentage = 0;
8663
- columnIndex += layoutItems[i].columnSpan;
8664
- if (columnIndex === columnCount) {
8665
- // If true, it means this layout item is the last one in the row.
8666
- // It ensures the last one in the row use rest of the percentage.
8667
- // Example: If it's a 3 column layout, the last one's percentage is 33.34%, not 33.33%
8668
- percentage = 100 - percentageSoFar;
9197
+ const availableLayoutWidthPercentage = 100 - itemHorizontalSpacePercentage * (this.columnCount - columnCountModifier);
9198
+ this.layoutDefinitionWithColumnSpanCalculation(layoutItems, availableLayoutWidthPercentage, itemHorizontalSpacePercentage);
9199
+ if (previousLayoutDefinition !== this.currentLayoutDefinition) {
9200
+ setTimeout(() => {
9201
+ this.layoutChanged.emit();
9202
+ });
9203
+ }
9204
+ }
9205
+ else if (this.layoutDrivenType === LayoutDrivenType.ResponsiveWindowManager) {
9206
+ let availableLayoutWidthInPixel = layoutWidth - this.itemHorizontalSpace;
9207
+ availableLayoutWidthInPixel = availableLayoutWidthInPixel > 0 ? availableLayoutWidthInPixel : 0;
9208
+ if (availableLayoutWidthInPixel <= 0) {
9209
+ return;
9210
+ }
9211
+ this.configDrivenCalculation(layoutItems, availableLayoutWidthInPixel);
9212
+ }
9213
+ });
9214
+ }
9215
+ updateLayoutConfig(currentWindowSize) {
9216
+ if (!currentWindowSize) {
9217
+ this.layoutDrivenType = LayoutDrivenType.Default;
9218
+ return;
9219
+ }
9220
+ const phoneUp = this.layoutConfig.PhoneUp;
9221
+ const phoneDown = this.layoutConfig.PhoneDown;
9222
+ const reflow = this.layoutConfig.Reflow;
9223
+ if (!phoneUp || !phoneDown || !reflow) {
9224
+ Logging.log({
9225
+ level: LogLevel.Debug,
9226
+ message: 'Invalid layout config has been passed in',
9227
+ source: 'DataTableComponent.onContentTablePressed'
9228
+ });
9229
+ const defaultMode = { 'mode': LayoutItemConfigMode.Default };
9230
+ if (!phoneUp) {
9231
+ this.layoutConfig.PhoneUp = defaultMode;
9232
+ }
9233
+ if (!phoneDown) {
9234
+ this.layoutConfig.PhoneDown = defaultMode;
9235
+ }
9236
+ if (!reflow) {
9237
+ this.layoutConfig.Reflow = defaultMode;
9238
+ }
9239
+ }
9240
+ const currentConfig = this.layoutConfig[currentWindowSize];
9241
+ if (currentConfig.mode === LayoutItemConfigMode.Default) {
9242
+ this.setLayoutDrivenType(LayoutDrivenType.Default);
9243
+ }
9244
+ else if (currentConfig.mode === LayoutItemConfigMode.Custom && currentConfig.config && currentConfig.config.length) {
9245
+ this.setLayoutDrivenType(LayoutDrivenType.ResponsiveWindowManager);
9246
+ this.currentLayoutItemConfig = currentConfig.config;
9247
+ }
9248
+ }
9249
+ resetFlex() {
9250
+ const layoutItems = this.layoutItems.toArray();
9251
+ for (let i = 0; i < layoutItems.length; i++) {
9252
+ const layoutItem = layoutItems[i];
9253
+ if (layoutItem.flex) {
9254
+ layoutItem.flex = undefined;
9255
+ }
9256
+ }
9257
+ }
9258
+ setLayoutDrivenType(layoutDrivenType) {
9259
+ if (this.layoutDrivenType === LayoutDrivenType.ResponsiveWindowManager && layoutDrivenType === LayoutDrivenType.Default) {
9260
+ this.resetFlex();
9261
+ }
9262
+ this.layoutDrivenType = layoutDrivenType;
9263
+ }
9264
+ getTotalColumnSpan(layoutItems) {
9265
+ this.columnSpanTotal = 0;
9266
+ layoutItems.forEach(item => this.columnSpanTotal += item.columnSpan);
9267
+ }
9268
+ updateCurrentLayoutDefinition(definitions, layoutWidth) {
9269
+ this.currentLayoutDefinition = undefined;
9270
+ for (let i = definitions.length - 1; i >= 0; i--) {
9271
+ const definitionColumns = definitions[i].columns;
9272
+ if (layoutWidth <= definitions[i].until || (this.tryToFillWholeRow && this.columnSpanTotal <= definitionColumns)) {
9273
+ this.columnCount = definitionColumns;
9274
+ this.currentLayoutDefinition = definitions[i];
9275
+ }
9276
+ }
9277
+ }
9278
+ layoutDefinitionWithColumnSpanCalculation(layoutItems, availableLayoutWidthPercentage, itemHorizontalSpacePercentage) {
9279
+ var _a;
9280
+ let percentageSoFar = 0;
9281
+ let columnIndex = 0;
9282
+ for (let i = 0; i < layoutItems.length; i++) {
9283
+ let percentage = 0;
9284
+ columnIndex += layoutItems[i].columnSpan;
9285
+ if (columnIndex === this.columnCount) {
9286
+ // If true, it means this layout item is the last one in the row.
9287
+ // It ensures the last one in the row use rest of the percentage.
9288
+ // Example: If it's a 3 column layout, the last one's percentage is 33.34%, not 33.33%
9289
+ percentage = 100 - percentageSoFar;
9290
+ percentageSoFar = 0;
9291
+ // 1 column and 1 layout item.
9292
+ if (columnIndex === 1 && this.columnCount === 1 && !this.noExtraRightPaddingOneItemPerRow) {
9293
+ layoutItems[i].paddingRight = '0px';
9294
+ }
9295
+ else {
9296
+ layoutItems[i].paddingRight = this.padLastItem ? this.itemHorizontalSpace + this.stylePixel : '0' + this.stylePixel;
9297
+ }
9298
+ columnIndex = 0;
9299
+ }
9300
+ else {
9301
+ const columnPercentage = Math.round(availableLayoutWidthPercentage * 100 / this.columnCount) / 100;
9302
+ percentage = layoutItems[i].columnSpan * (columnPercentage + itemHorizontalSpacePercentage);
9303
+ percentageSoFar += percentage;
9304
+ if (percentageSoFar > 100) {
9305
+ // put item on next row if it is too big
9306
+ if (percentage > 100) {
9307
+ percentage = 100;
9308
+ }
9309
+ percentageSoFar = 0;
9310
+ columnIndex = 0;
9311
+ layoutItems[i].paddingRight = this.padLastItem ? this.itemHorizontalSpace + this.stylePixel : '0' + this.stylePixel;
9312
+ }
9313
+ else {
9314
+ layoutItems[i].paddingRight = this.itemHorizontalSpace + this.stylePixel;
9315
+ }
9316
+ }
9317
+ if ((_a = this === null || this === void 0 ? void 0 : this.currentLayoutDefinition) === null || _a === void 0 ? void 0 : _a.addBottomPadding) {
9318
+ layoutItems[i].paddingBottom = this.itemVerticalSpace + this.stylePixel;
9319
+ }
9320
+ else {
9321
+ // If bottom padding already exists and currentLayoutDefinition.addBottomPadding is False
9322
+ // Remove the bottom padding.
9323
+ if (layoutItems[i].paddingBottom === this.itemVerticalSpace + this.stylePixel) {
9324
+ layoutItems[i].paddingBottom = '0' + this.stylePixel;
9325
+ }
9326
+ }
9327
+ layoutItems[i].width = percentage + '%';
9328
+ layoutItems[i].ready();
9329
+ }
9330
+ }
9331
+ configDrivenCalculation(layoutItems, availableLayoutWidthInPixel) {
9332
+ const isHybridMode = this.updateCustomConfig(layoutItems);
9333
+ if (isHybridMode) {
9334
+ this.configDrivenCalculationHybrid(layoutItems, availableLayoutWidthInPixel);
9335
+ }
9336
+ else {
9337
+ this.configDrivenCalculationDefault(layoutItems, availableLayoutWidthInPixel);
9338
+ }
9339
+ }
9340
+ /**
9341
+ * It deal with configurations that only has either percentage or number.
9342
+ * Aiming at performance optimization.
9343
+ *
9344
+ * @param layoutItems The layout item object array
9345
+ * @param availableLayoutWidthInPixel available width in pixel horizontally.
9346
+ */
9347
+ configDrivenCalculationDefault(layoutItems, availableLayoutWidthInPixel) {
9348
+ const defaultWidthForLayoutItemInPixel = 200;
9349
+ let widthUsedInPixel = 0;
9350
+ let percentageSoFar = 0;
9351
+ for (let i = 0; i < layoutItems.length; i++) {
9352
+ if (layoutItems[i].customConfig.width) {
9353
+ const widthObject = layoutItems[i].customConfig.width;
9354
+ const remainingWidthInPixel = availableLayoutWidthInPixel - widthUsedInPixel;
9355
+ if (widthObject.type === LayoutItemConfigPropertyWidthType.Percentage) {
9356
+ if (widthObject.value > 100 || widthObject.value < 0) {
9357
+ widthObject.value = 100;
9358
+ }
9359
+ const percentage = widthObject.value;
9360
+ percentageSoFar += percentage;
9361
+ const paddingRight = this.itemHorizontalSpace;
9362
+ layoutItems[i].paddingRight = paddingRight.toString().concat(this.stylePixel);
9363
+ layoutItems[i].width = percentage + '%';
9364
+ if (percentageSoFar > 100) {
8669
9365
  percentageSoFar = 0;
8670
- // 1 column and 1 layout item.
8671
- if (columnIndex === 1 && columnCount === 1 && !this.noExtraRightPaddingOneItemPerRow) {
8672
- layoutItems[i].paddingRight = '0px';
8673
- }
8674
- else {
8675
- layoutItems[i].paddingRight = this.padLastItem ? this.itemHorizontalSpace + 'px' : '0px';
8676
- }
8677
- columnIndex = 0;
9366
+ }
9367
+ }
9368
+ else if (widthObject.type === LayoutItemConfigPropertyWidthType.Number) {
9369
+ if (widthObject.value < 0) {
9370
+ widthObject.value =
9371
+ defaultWidthForLayoutItemInPixel <= remainingWidthInPixel ?
9372
+ defaultWidthForLayoutItemInPixel : remainingWidthInPixel;
9373
+ }
9374
+ widthUsedInPixel += widthObject.value;
9375
+ // how to determine if it is the last item in a row?
9376
+ const paddingRight = this.itemHorizontalSpace;
9377
+ widthUsedInPixel += paddingRight;
9378
+ layoutItems[i].paddingRight = paddingRight.toString().concat(this.stylePixel);
9379
+ layoutItems[i].width = widthObject.value + this.stylePixel;
9380
+ }
9381
+ else {
9382
+ Logging.log({
9383
+ level: LogLevel.Debug,
9384
+ message: 'Invalid width',
9385
+ source: 'LayoutComponent.configDrivenCalculationDefault'
9386
+ });
9387
+ }
9388
+ }
9389
+ else {
9390
+ Logging.log({
9391
+ level: LogLevel.Debug,
9392
+ message: 'Invalid width',
9393
+ source: 'LayoutComponent.configDrivenCalculationDefault'
9394
+ });
9395
+ }
9396
+ layoutItems[i].ready();
9397
+ }
9398
+ }
9399
+ /**
9400
+ * It deal with configurations that only has both percentage and number.
9401
+ * Aiming at performance optimization.
9402
+ *
9403
+ * @param layoutItems The layout item object array
9404
+ * @param availableLayoutWidthInPixel available width in pixel horizontally.
9405
+ */
9406
+ configDrivenCalculationHybrid(layoutItems, availableLayoutWidthInPixel) {
9407
+ const defaultWidthForLayoutItemInPixel = 200;
9408
+ let widthUsedInPixel = 0;
9409
+ for (let i = 0; i < layoutItems.length; i++) {
9410
+ if (layoutItems[i].customConfig.width) {
9411
+ const widthObject = layoutItems[i].customConfig.width;
9412
+ const remainingWidthInPixel = availableLayoutWidthInPixel - widthUsedInPixel;
9413
+ if (widthObject.type === LayoutItemConfigPropertyWidthType.Percentage) {
9414
+ if (widthObject.value > 100 || widthObject.value < 0) {
9415
+ widthObject.value = 100;
9416
+ }
9417
+ // how to determine if it is the last item in a row?
9418
+ const paddingRight = this.itemHorizontalSpace;
9419
+ widthUsedInPixel += paddingRight;
9420
+ layoutItems[i].paddingRight = paddingRight.toString().concat(this.stylePixel);
9421
+ let potentialWidthInPixel = (widthObject.value / 100) * remainingWidthInPixel;
9422
+ if (potentialWidthInPixel === 0) {
9423
+ widthUsedInPixel = 0;
9424
+ widthUsedInPixel += paddingRight;
9425
+ potentialWidthInPixel = (widthObject.value / 100) * (availableLayoutWidthInPixel - widthUsedInPixel);
8678
9426
  }
8679
9427
  else {
8680
- const columnPercentage = Math.round(availableLayoutWidthPercentage * 100 / columnCount) / 100;
8681
- percentage = layoutItems[i].columnSpan * (columnPercentage + itemHorizontalSpacePercentage);
8682
- percentageSoFar += percentage;
8683
- if (percentageSoFar > 100) {
8684
- // put item on next row if it is too big
8685
- if (percentage > 100) {
8686
- percentage = 100;
8687
- }
8688
- percentageSoFar = 0;
8689
- columnIndex = 0;
8690
- layoutItems[i].paddingRight = this.padLastItem ? this.itemHorizontalSpace + 'px' : '0px';
9428
+ if (potentialWidthInPixel >= remainingWidthInPixel) {
9429
+ potentialWidthInPixel = remainingWidthInPixel;
9430
+ // resets the used pixel for a new row.
9431
+ widthUsedInPixel = 0;
8691
9432
  }
8692
9433
  else {
8693
- layoutItems[i].paddingRight = this.itemHorizontalSpace + 'px';
9434
+ widthUsedInPixel += potentialWidthInPixel;
8694
9435
  }
9436
+ layoutItems[i].flex = '1 0 0';
9437
+ layoutItems[i].minWidth = defaultWidthForLayoutItemInPixel.toString().concat(this.stylePixel);
8695
9438
  }
8696
- if ((_a = this === null || this === void 0 ? void 0 : this.currentLayoutDefinition) === null || _a === void 0 ? void 0 : _a.addBottomPadding) {
8697
- layoutItems[i].paddingBottom = this.itemVerticalSpace + 'px';
8698
- }
8699
- else {
8700
- // If bottom padding already exists and currentLayoutDefinition.addBottomPadding is False
8701
- // Remove the bottom padding.
8702
- if (layoutItems[i].paddingBottom === this.itemVerticalSpace + 'px') {
8703
- layoutItems[i].paddingBottom = 0 + 'px';
8704
- }
9439
+ layoutItems[i].width = potentialWidthInPixel + this.stylePixel;
9440
+ }
9441
+ else if (widthObject.type === LayoutItemConfigPropertyWidthType.Number) {
9442
+ if (widthObject.value < 0) {
9443
+ widthObject.value =
9444
+ defaultWidthForLayoutItemInPixel <= remainingWidthInPixel ?
9445
+ defaultWidthForLayoutItemInPixel : remainingWidthInPixel;
8705
9446
  }
8706
- layoutItems[i].width = percentage + '%';
8707
- layoutItems[i].ready();
9447
+ widthUsedInPixel += widthObject.value;
9448
+ // how to determine if it is the last item in a row?
9449
+ const paddingRight = this.itemHorizontalSpace;
9450
+ widthUsedInPixel += paddingRight;
9451
+ layoutItems[i].paddingRight = paddingRight.toString().concat(this.stylePixel);
9452
+ layoutItems[i].width = widthObject.value + this.stylePixel;
8708
9453
  }
8709
- if (previousLayoutDefinition !== this.currentLayoutDefinition) {
8710
- setTimeout(() => {
8711
- this.layoutChanged.emit();
9454
+ else {
9455
+ Logging.log({
9456
+ level: LogLevel.Debug,
9457
+ message: 'Invalid width',
9458
+ source: 'LayoutComponent.configDrivenCalculationHybrid'
8712
9459
  });
8713
9460
  }
8714
9461
  }
8715
- });
9462
+ else {
9463
+ Logging.log({
9464
+ level: LogLevel.Debug,
9465
+ message: 'Invalid width',
9466
+ source: 'LayoutComponent.configDrivenCalculationHybrid'
9467
+ });
9468
+ }
9469
+ layoutItems[i].ready();
9470
+ }
9471
+ }
9472
+ updateCustomConfig(layoutItems) {
9473
+ const widthType = [];
9474
+ for (let i = 0; i < layoutItems.length; i++) {
9475
+ layoutItems[i].customConfig = this.currentLayoutItemConfig[i];
9476
+ if (!widthType.includes(layoutItems[i].customConfig.width.type)) {
9477
+ widthType.push(layoutItems[i].customConfig.width.type);
9478
+ }
9479
+ }
9480
+ if (widthType.length <= 1) {
9481
+ return false;
9482
+ }
9483
+ return true;
8716
9484
  }
8717
9485
  }
8718
9486
  /** @nocollapse */ LayoutComponent.ɵfac = function LayoutComponent_Factory(t) { return new (t || LayoutComponent)(ɵɵdirectiveInject(Injector), ɵɵdirectiveInject(SME_LAYOUT_PROVIDER)); };
@@ -8723,10 +9491,28 @@ class LayoutComponent extends CoreBaseComponent {
8723
9491
  let _t;
8724
9492
  ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.layoutItems = _t);
8725
9493
  ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.definitions = _t);
8726
- } }, inputs: { itemHorizontalSpace: "itemHorizontalSpace", itemVerticalSpace: "itemVerticalSpace", tryToFillWholeRow: "tryToFillWholeRow", definition: "definition", padLastItem: "padLastItem", noExtraRightPaddingOneItemPerRow: "noExtraRightPaddingOneItemPerRow" }, outputs: { layoutChanged: "layoutChanged" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c1$6, decls: 1, vars: 0, template: function LayoutComponent_Template(rf, ctx) { if (rf & 1) {
9494
+ } }, inputs: { itemHorizontalSpace: "itemHorizontalSpace", itemVerticalSpace: "itemVerticalSpace", tryToFillWholeRow: "tryToFillWholeRow", definition: "definition", padLastItem: "padLastItem", noExtraRightPaddingOneItemPerRow: "noExtraRightPaddingOneItemPerRow", layoutConfig: "layoutConfig" }, outputs: { layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c1$6, decls: 1, vars: 0, template: function LayoutComponent_Template(rf, ctx) { if (rf & 1) {
8727
9495
  ɵɵprojectionDef(_c0$f);
8728
9496
  ɵɵprojection(0);
8729
9497
  } }, encapsulation: 2 });
9498
+ __decorate([
9499
+ Debounce$1(),
9500
+ __metadata("design:type", Function),
9501
+ __metadata("design:paramtypes", []),
9502
+ __metadata("design:returntype", void 0)
9503
+ ], LayoutComponent.prototype, "refresh", null);
9504
+ __decorate([
9505
+ Debounce$1(),
9506
+ __metadata("design:type", Function),
9507
+ __metadata("design:paramtypes", []),
9508
+ __metadata("design:returntype", void 0)
9509
+ ], LayoutComponent.prototype, "deferredOnLayoutChanged", null);
9510
+ __decorate([
9511
+ Yield$1(),
9512
+ __metadata("design:type", Function),
9513
+ __metadata("design:paramtypes", []),
9514
+ __metadata("design:returntype", void 0)
9515
+ ], LayoutComponent.prototype, "onWindowBreakpointChanged", null);
8730
9516
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(LayoutComponent, [{
8731
9517
  type: Component,
8732
9518
  args: [{
@@ -8754,9 +9540,13 @@ class LayoutComponent extends CoreBaseComponent {
8754
9540
  type: Input
8755
9541
  }], noExtraRightPaddingOneItemPerRow: [{
8756
9542
  type: Input
9543
+ }], layoutConfig: [{
9544
+ type: Input
8757
9545
  }], layoutChanged: [{
8758
9546
  type: Output
8759
- }] }); })();
9547
+ }], windowBreakpointChanged: [{
9548
+ type: Output
9549
+ }], refresh: [], deferredOnLayoutChanged: [], onWindowBreakpointChanged: [] }); })();
8760
9550
 
8761
9551
  const _c0$g = [[["sme-editable-layout-item"]]];
8762
9552
  const _c1$7 = ["sme-editable-layout-item"];
@@ -24665,376 +25455,6 @@ __decorate([
24665
25455
  __metadata("design:returntype", void 0)
24666
25456
  ], DataTableAccessibilityManager.prototype, "focusInTableCell", null);
24667
25457
 
24668
- /**
24669
- * It defines the number of breakpoints that WAC currently support.
24670
- * add more scenarios when WAC is going to support scenarios like tablet etc.
24671
- */
24672
- var SmeResponsiveWindowBreakpointsValue;
24673
- (function (SmeResponsiveWindowBreakpointsValue) {
24674
- SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["Reflow"] = 399.98] = "Reflow";
24675
- SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["PhoneDown"] = 767.98] = "PhoneDown";
24676
- SmeResponsiveWindowBreakpointsValue[SmeResponsiveWindowBreakpointsValue["PhoneUp"] = Number.MAX_SAFE_INTEGER] = "PhoneUp";
24677
- })(SmeResponsiveWindowBreakpointsValue || (SmeResponsiveWindowBreakpointsValue = {}));
24678
- /**
24679
- * It defines the current supported scenario for window sizes.
24680
- */
24681
- var SmeResponsiveWindowBreakpoints;
24682
- (function (SmeResponsiveWindowBreakpoints) {
24683
- SmeResponsiveWindowBreakpoints["Reflow"] = "Reflow";
24684
- SmeResponsiveWindowBreakpoints["PhoneDown"] = "PhoneDown";
24685
- SmeResponsiveWindowBreakpoints["PhoneUp"] = "PhoneUp";
24686
- })(SmeResponsiveWindowBreakpoints || (SmeResponsiveWindowBreakpoints = {}));
24687
- // tslint:disable-next-line: directive-class-suffix
24688
- class SmeResponsiveWindowManagerComponent {
24689
- /**
24690
- * The manager supports layout component and in the meantime listening to the window size change event.
24691
- * @param layout the layout component.
24692
- */
24693
- constructor(layout) {
24694
- this.layout = layout;
24695
- /**
24696
- * It defines whether the current window size is for super small window.
24697
- */
24698
- this.internalReflowMode = false;
24699
- /**
24700
- * It defines whether the current window size is phone down.
24701
- */
24702
- this.internalPhoneDown = false;
24703
- /**
24704
- * It defines whether the current window size is phone up.
24705
- */
24706
- this.internalPhoneUp = false;
24707
- /**
24708
- * It defines whether the current solution/tool is using css v2 to support responsive window.
24709
- */
24710
- this.internalCssV2 = false;
24711
- /**
24712
- * The array for subscription.
24713
- */
24714
- this.subscriptions = [];
24715
- this.setIsCssV2Enabled();
24716
- if (this.layout) {
24717
- // on parent layout changes, re-emit the layout change to our event
24718
- this.subscriptions.push(layout.layoutChanged.subscribe((() => this.onLayoutChanged())));
24719
- // on window break point changes, emit the event about critical classes and styling updates signal.
24720
- this.subscriptions.push(layout.windowBreakpointChanged.subscribe(() => this.onWindowBreakpointChanged()));
24721
- this.deferredOnLayoutChanged();
24722
- }
24723
- }
24724
- /**
24725
- * Gets the current window responsive state.
24726
- */
24727
- get responsiveWindowState() {
24728
- return this.internalResponsiveWindowMode;
24729
- }
24730
- /**
24731
- * Sets the current window responsive state.
24732
- */
24733
- set responsiveWindowState(input) {
24734
- var _a;
24735
- const prevResponsiveWindowState = this.internalResponsiveWindowMode;
24736
- this.internalResponsiveWindowMode = input;
24737
- if (prevResponsiveWindowState !== this.internalResponsiveWindowMode) {
24738
- (_a = this.layout) === null || _a === void 0 ? void 0 : _a.windowBreakpointChanged.emit();
24739
- }
24740
- }
24741
- /**
24742
- * Gets the value indicating whether css v2 should be used.
24743
- */
24744
- get cssV2() {
24745
- return this.internalCssV2;
24746
- }
24747
- /**
24748
- * It sets the value for whether the current tool/solution is using css v2 for window responsiveness.
24749
- */
24750
- set cssV2(input) {
24751
- this.internalCssV2 = !!input;
24752
- }
24753
- /**
24754
- * Gets the phone down mode.
24755
- */
24756
- get phoneDown() {
24757
- return this.internalPhoneDown;
24758
- }
24759
- /**
24760
- * Sets the phone down mode.
24761
- */
24762
- set phoneDown(input) {
24763
- this.internalPhoneDown = !!input;
24764
- }
24765
- /**
24766
- * Gets the phone up mode.
24767
- */
24768
- get phoneUp() {
24769
- return this.internalPhoneUp;
24770
- }
24771
- /**
24772
- * Set the phone up mode.
24773
- */
24774
- set phoneUp(input) {
24775
- this.internalPhoneUp = !!input;
24776
- }
24777
- /**
24778
- * Gets the reflow mode.
24779
- */
24780
- get reflowMode() {
24781
- return this.internalReflowMode;
24782
- }
24783
- /**
24784
- * Sets the reflow mode.
24785
- */
24786
- set reflowMode(input) {
24787
- this.internalReflowMode = !!input;
24788
- }
24789
- /**
24790
- * Gets the width of the window from the window object.
24791
- * Should only be called on layout or window size change.
24792
- */
24793
- get width() {
24794
- return window === null || window === void 0 ? void 0 : window.innerWidth;
24795
- }
24796
- /**
24797
- * Gets the height of the window from the window object.
24798
- * Should only be called on layout or window size change.
24799
- */
24800
- get height() {
24801
- return window === null || window === void 0 ? void 0 : window.innerHeight;
24802
- }
24803
- /**
24804
- * Gets the last known window responsive data.
24805
- */
24806
- get prevSize() {
24807
- var _a, _b;
24808
- if (((_a = this.internalPrevSize) === null || _a === void 0 ? void 0 : _a.width) === this.width && ((_b = this.internalPrevSize) === null || _b === void 0 ? void 0 : _b.height) === this.height) {
24809
- return this.internalPrevSize;
24810
- }
24811
- else {
24812
- return this.getSmeResponsiveWindowData();
24813
- }
24814
- }
24815
- /**
24816
- * Gets the window responsive break points.
24817
- */
24818
- get size() {
24819
- const width = this.width;
24820
- if (width <= SmeResponsiveWindowBreakpointsValue.Reflow) {
24821
- this.reflowMode = true;
24822
- this.phoneDown = false;
24823
- this.phoneUp = false;
24824
- this.responsiveWindowState = SmeResponsiveWindowBreakpoints.Reflow;
24825
- }
24826
- else if (width <= SmeResponsiveWindowBreakpointsValue.PhoneDown) {
24827
- this.reflowMode = false;
24828
- this.phoneDown = true;
24829
- this.phoneUp = false;
24830
- this.responsiveWindowState = SmeResponsiveWindowBreakpoints.PhoneDown;
24831
- }
24832
- else {
24833
- this.reflowMode = false;
24834
- this.phoneDown = false;
24835
- this.phoneUp = true;
24836
- this.responsiveWindowState = SmeResponsiveWindowBreakpoints.PhoneUp;
24837
- }
24838
- return this.responsiveWindowState;
24839
- }
24840
- /**
24841
- * It sets whether the current solution/tool is using the css v2 for window responsiveness.
24842
- */
24843
- setIsCssV2Enabled() {
24844
- this.cssV2 = this.isUsingCssV2();
24845
- }
24846
- /**
24847
- * The implementation for checking whether the styles are being set.
24848
- * @returns true if the current tool/solution is using css v2 for window responsiveness.
24849
- */
24850
- isUsingCssV2() {
24851
- const head = document.getElementsByTagName('head')[0];
24852
- const links = head.querySelectorAll('link');
24853
- let cssV2 = true;
24854
- // sme shell root would be containing style.css and either main.css or main-v2.css
24855
- // thus as long as it is not main.css, should be using css-v2
24856
- for (let i = 0; i < links.length; i++) {
24857
- const link = links[i];
24858
- if (link.href && link.href.includes('main.css')) {
24859
- cssV2 = false;
24860
- break;
24861
- }
24862
- }
24863
- return cssV2;
24864
- }
24865
- /**
24866
- * The functionality to update the core variables for window responsive data.
24867
- * @returns The SmeResponsiveWindowData object
24868
- */
24869
- getSmeResponsiveWindowData() {
24870
- // on window size or layout change, gets the width and height from the window object.
24871
- const width = this.width;
24872
- const height = this.height;
24873
- // based on the window size information, calculates the core paramters.
24874
- const size = this.size;
24875
- // the 3 gets above sets these following 3 parameters.
24876
- const reflowMode = this.reflowMode;
24877
- const phoneDown = this.phoneDown;
24878
- const phoneUp = this.phoneUp;
24879
- // sets the object and return.
24880
- this.internalPrevSize = {
24881
- width: width,
24882
- height: height,
24883
- size: size,
24884
- reflowMode: reflowMode,
24885
- phoneDown: phoneDown,
24886
- phoneUp: phoneUp
24887
- };
24888
- return this.internalPrevSize;
24889
- }
24890
- /**
24891
- * On layout changed event handler, occurs every time the layout has been changed.
24892
- */
24893
- onLayoutChanged() {
24894
- this.getSmeResponsiveWindowData();
24895
- }
24896
- /**
24897
- * The deferred layout changed handler.
24898
- */
24899
- deferredOnLayoutChanged() {
24900
- this.onLayoutChanged();
24901
- }
24902
- /**
24903
- * To respond to a layout breakpoint changed event.
24904
- * @returns void
24905
- */
24906
- onWindowBreakpointChanged() {
24907
- return;
24908
- }
24909
- /**
24910
- * Gets the parent element by html tag. By default, go up 10 levels for enhanced performance.
24911
- * @param inputElement The input element.
24912
- * @returns The targeted html element get by the html tag
24913
- */
24914
- getParentElementByTag(inputElement, parentHtmlTags = ['sme-pivot', 'sme-split-view', 'sme-settings-page'], levelExternal = 10, customKeywords, untilTagName) {
24915
- if (!inputElement) {
24916
- return undefined;
24917
- }
24918
- let level = levelExternal;
24919
- let found = false;
24920
- let parent = inputElement;
24921
- while (level > 0 && !found) {
24922
- if (parent) {
24923
- parent = parent.parentElement;
24924
- }
24925
- const parentTagName = parent === null || parent === void 0 ? void 0 : parent.tagName.toLocaleLowerCase();
24926
- if (untilTagName) {
24927
- if (parentTagName === untilTagName.toLowerCase()) {
24928
- return undefined;
24929
- }
24930
- }
24931
- if (parentHtmlTags.includes(parentTagName) || (customKeywords !== undefined && (parentTagName === null || parentTagName === void 0 ? void 0 : parentTagName.includes(customKeywords)))) {
24932
- found = true;
24933
- return parent;
24934
- }
24935
- level -= 1;
24936
- }
24937
- return undefined;
24938
- }
24939
- /**
24940
- * The core algorithm for adding and removing classes based on window size and window size settings.
24941
- * @param settings the settings object
24942
- * @param curSettings the current setting
24943
- * @param element the html element for setting up classes.
24944
- * @returns void.
24945
- */
24946
- updateClassArrayOnWindowSize(settings, curSettings, element) {
24947
- if (!settings) {
24948
- return;
24949
- }
24950
- settings = JSON.parse(JSON.stringify(settings));
24951
- const phoneDown = JSON.parse(JSON.stringify(settings.phoneDown));
24952
- const phoneUp = JSON.parse(JSON.stringify(settings.phoneUp));
24953
- const reflow = JSON.parse(JSON.stringify(settings.reflow));
24954
- let toBeRemovedClassList = [];
24955
- let toBeAddedClassList = [];
24956
- switch (curSettings) {
24957
- case 'phoneUp':
24958
- toBeAddedClassList = phoneUp;
24959
- toBeRemovedClassList = phoneDown;
24960
- toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, reflow);
24961
- break;
24962
- case 'phoneDown':
24963
- toBeAddedClassList = phoneDown;
24964
- toBeRemovedClassList = phoneUp;
24965
- toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, reflow);
24966
- break;
24967
- case 'reflow':
24968
- toBeAddedClassList = reflow;
24969
- toBeRemovedClassList = phoneDown;
24970
- toBeRemovedClassList = this.uniqueArray(toBeRemovedClassList, phoneUp);
24971
- break;
24972
- }
24973
- toBeRemovedClassList = this.removeExistedItem(toBeRemovedClassList, toBeAddedClassList);
24974
- for (let i = 0; i < toBeRemovedClassList.length; i++) {
24975
- if (element.classList.contains(toBeRemovedClassList[i])) {
24976
- element.classList.remove(toBeRemovedClassList[i]);
24977
- }
24978
- }
24979
- for (let i = 0; i < toBeAddedClassList.length; i++) {
24980
- if (!element.classList.contains(toBeAddedClassList[i])) {
24981
- element.classList.add(toBeAddedClassList[i]);
24982
- }
24983
- }
24984
- }
24985
- /**
24986
- * Merge two arrays with unique items.
24987
- * @param arrayA the input array A
24988
- * @param arrayB the input array B
24989
- * @returns an array that contains unique items from array A and array B
24990
- */
24991
- uniqueArray(arrayA, arrayB) {
24992
- if (arrayB && arrayB.length) {
24993
- for (let i = 0; i < arrayB.length; i++) {
24994
- if (!arrayA.includes(arrayB[i])) {
24995
- arrayA.push(arrayB[i]);
24996
- }
24997
- }
24998
- }
24999
- return arrayA;
25000
- }
25001
- /**
25002
- * Guarantees will not remove the classes that needs to be added.
25003
- * @param toBeRemovedClassList the list of classes that needs to be removed.
25004
- * @param toBeAddedClassList the list of classes that needs to be added.
25005
- * @returns the list of classes that needs to be removed and doesn't overlap with the classes that needs to be added.
25006
- */
25007
- removeExistedItem(toBeRemovedClassList, toBeAddedClassList) {
25008
- if (!toBeAddedClassList || !toBeAddedClassList.length) {
25009
- return toBeRemovedClassList;
25010
- }
25011
- if (!toBeRemovedClassList || !toBeRemovedClassList.length) {
25012
- return [];
25013
- }
25014
- const res = [];
25015
- for (let i = 0; i < toBeRemovedClassList.length; i++) {
25016
- if (!toBeAddedClassList.includes(toBeRemovedClassList[i])) {
25017
- res.push(toBeRemovedClassList[i]);
25018
- }
25019
- }
25020
- return res;
25021
- }
25022
- }
25023
- /** @nocollapse */ SmeResponsiveWindowManagerComponent.ɵfac = function SmeResponsiveWindowManagerComponent_Factory(t) { return new (t || SmeResponsiveWindowManagerComponent)(ɵɵdirectiveInject(SME_LAYOUT_PROVIDER)); };
25024
- /** @nocollapse */ SmeResponsiveWindowManagerComponent.ɵdir = ɵɵdefineDirective({ type: SmeResponsiveWindowManagerComponent });
25025
- __decorate([
25026
- Debounce$1(),
25027
- __metadata("design:type", Function),
25028
- __metadata("design:paramtypes", []),
25029
- __metadata("design:returntype", void 0)
25030
- ], SmeResponsiveWindowManagerComponent.prototype, "deferredOnLayoutChanged", null);
25031
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(SmeResponsiveWindowManagerComponent, [{
25032
- type: Directive
25033
- }], function () { return [{ type: undefined, decorators: [{
25034
- type: Inject,
25035
- args: [SME_LAYOUT_PROVIDER]
25036
- }] }]; }, { deferredOnLayoutChanged: [] }); })();
25037
-
25038
25458
  class DataTableResponsiveWindowManager extends SmeResponsiveWindowManagerComponent {
25039
25459
  constructor() {
25040
25460
  super(...arguments);
@@ -38871,45 +39291,80 @@ class DialogModule {
38871
39291
  ConfirmationListDialogComponent], []);
38872
39292
  ɵɵsetComponentScope(DialogComponent, [NgIf, BackdropComponent, NgClass, TooltipDirective], []);
38873
39293
 
39294
+ function HeaderComponent_div_0_span_2_Template(rf, ctx) { if (rf & 1) {
39295
+ ɵɵelement(0, "span", 11);
39296
+ } if (rf & 2) {
39297
+ const ctx_r5 = ɵɵnextContext(2);
39298
+ ɵɵclassMap(ctx_r5.smeIconClassName ? ctx_r5.smeIconClassName : "");
39299
+ } }
39300
+ function HeaderComponent_div_0_span_3_Template(rf, ctx) { if (rf & 1) {
39301
+ ɵɵelement(0, "span", 12);
39302
+ } if (rf & 2) {
39303
+ const ctx_r6 = ɵɵnextContext(2);
39304
+ ɵɵstyleProp("background-image", ctx_r6.urlIcon);
39305
+ } }
39306
+ function HeaderComponent_div_0_ng_container_6_Template(rf, ctx) { if (rf & 1) {
39307
+ ɵɵelementContainer(0);
39308
+ } }
38874
39309
  function HeaderComponent_div_0_Template(rf, ctx) { if (rf & 1) {
38875
- ɵɵelementStart(0, "div", 3);
38876
- ɵɵelementStart(1, "h2", 4);
38877
- ɵɵtext(2);
39310
+ ɵɵelementStart(0, "div", 5);
39311
+ ɵɵelementStart(1, "span", 6);
39312
+ ɵɵtemplate(2, HeaderComponent_div_0_span_2_Template, 1, 2, "span", 7);
39313
+ ɵɵtemplate(3, HeaderComponent_div_0_span_3_Template, 1, 2, "span", 8);
39314
+ ɵɵelementStart(4, "span", 9);
39315
+ ɵɵtext(5);
39316
+ ɵɵelementEnd();
38878
39317
  ɵɵelementEnd();
38879
- ɵɵprojection(3);
39318
+ ɵɵtemplate(6, HeaderComponent_div_0_ng_container_6_Template, 1, 0, "ng-container", 10);
38880
39319
  ɵɵelementEnd();
38881
39320
  } if (rf & 2) {
38882
39321
  const ctx_r0 = ɵɵnextContext();
39322
+ const _r3 = ɵɵreference(4);
38883
39323
  ɵɵadvance(1);
38884
39324
  ɵɵproperty("ngClass", ctx_r0.level === "" ? "sme-font-h3" : ctx_r0.styleTo);
38885
39325
  ɵɵadvance(1);
39326
+ ɵɵproperty("ngIf", ctx_r0.smeIconClassName);
39327
+ ɵɵadvance(1);
39328
+ ɵɵproperty("ngIf", ctx_r0.urlIcon);
39329
+ ɵɵadvance(2);
38886
39330
  ɵɵtextInterpolate(ctx_r0.text);
39331
+ ɵɵadvance(1);
39332
+ ɵɵproperty("ngTemplateOutlet", _r3);
38887
39333
  } }
38888
39334
  function HeaderComponent_h2_1_Template(rf, ctx) { if (rf & 1) {
38889
- ɵɵelementStart(0, "h2", 5);
39335
+ ɵɵelementStart(0, "h2", 13);
38890
39336
  ɵɵtext(1);
38891
39337
  ɵɵelementEnd();
38892
39338
  } if (rf & 2) {
38893
39339
  const ctx_r1 = ɵɵnextContext();
38894
39340
  ɵɵproperty("ngClass", ctx_r1.level === "" ? "sme-font-h3" : ctx_r1.styleTo);
38895
39341
  ɵɵadvance(1);
38896
- ɵɵtextInterpolate1(" ", ctx_r1.text, " ");
39342
+ ɵɵtextInterpolate1(" ", ctx_r1.text, "\n");
39343
+ } }
39344
+ function HeaderComponent_div_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
39345
+ ɵɵelementContainer(0);
38897
39346
  } }
38898
39347
  function HeaderComponent_div_2_Template(rf, ctx) { if (rf & 1) {
38899
- ɵɵelementStart(0, "div", 6);
38900
- ɵɵelementStart(1, "h3", 4);
39348
+ ɵɵelementStart(0, "div", 14);
39349
+ ɵɵelementStart(1, "h3", 6);
38901
39350
  ɵɵtext(2);
38902
39351
  ɵɵelementEnd();
38903
- ɵɵprojection(3, 1);
39352
+ ɵɵtemplate(3, HeaderComponent_div_2_ng_container_3_Template, 1, 0, "ng-container", 10);
38904
39353
  ɵɵelementEnd();
38905
39354
  } if (rf & 2) {
38906
39355
  const ctx_r2 = ɵɵnextContext();
39356
+ const _r3 = ɵɵreference(4);
38907
39357
  ɵɵadvance(1);
38908
39358
  ɵɵproperty("ngClass", ctx_r2.level !== "" ? ctx_r2.styleTo : "");
38909
39359
  ɵɵadvance(1);
38910
39360
  ɵɵtextInterpolate(ctx_r2.text);
39361
+ ɵɵadvance(1);
39362
+ ɵɵproperty("ngTemplateOutlet", _r3);
39363
+ } }
39364
+ function HeaderComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
39365
+ ɵɵprojection(0);
38911
39366
  } }
38912
- const _c0$1d = ["*", "*"];
39367
+ const _c0$1d = ["*"];
38913
39368
  /**
38914
39369
  *
38915
39370
  * @smeDoc {@label Header @id sme-header}
@@ -38922,12 +39377,26 @@ const _c0$1d = ["*", "*"];
38922
39377
  * @file {@filename component.html @filepath ./examples/header-example.component.html}
38923
39378
  *
38924
39379
  */
38925
- class HeaderComponent {
38926
- constructor() {
39380
+ class HeaderComponent extends CoreBaseComponent {
39381
+ constructor(injector) {
39382
+ super(injector);
38927
39383
  this.styleTo = '';
38928
39384
  this.type = HeaderComponent.tool;
38929
39385
  this.text = '';
38930
39386
  this.level = '';
39387
+ if (this.smeIconClassName && this.urlIcon) {
39388
+ Logging.log({
39389
+ level: LogLevel.Warning,
39390
+ message: 'Either sme icon or url icon is accepted.',
39391
+ source: `${this.logSourceName}.constructor`
39392
+ });
39393
+ }
39394
+ }
39395
+ /**
39396
+ * The source name to use for logging
39397
+ */
39398
+ get logSourceName() {
39399
+ return 'HeaderComponent';
38931
39400
  }
38932
39401
  /**
38933
39402
  * The method run when the component is initialized
@@ -38950,14 +39419,6 @@ class HeaderComponent {
38950
39419
  this.styleTo = HeaderComponent.h4style;
38951
39420
  break;
38952
39421
  }
38953
- case '5': {
38954
- this.styleTo = HeaderComponent.h5style;
38955
- break;
38956
- }
38957
- case '6': {
38958
- this.styleTo = HeaderComponent.h6style;
38959
- break;
38960
- }
38961
39422
  default: {
38962
39423
  this.styleTo = '';
38963
39424
  }
@@ -38968,34 +39429,37 @@ HeaderComponent.tool = 'tool-header'; // default
38968
39429
  HeaderComponent.h1style = 'sme-font-h1';
38969
39430
  HeaderComponent.h2style = 'sme-font-h2';
38970
39431
  HeaderComponent.h3style = 'sme-font-h3';
38971
- HeaderComponent.h4style = 'sme-font-h4';
38972
- HeaderComponent.h5style = 'sme-font-h5';
38973
- HeaderComponent.h6style = 'sme-font-h6';
38974
- /** @nocollapse */ HeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(); };
38975
- /** @nocollapse */ HeaderComponent.ɵcmp = ɵɵdefineComponent({ type: HeaderComponent, selectors: [["sme-header"]], inputs: { type: "type", text: "text", level: "level" }, ngContentSelectors: _c0$1d, decls: 3, vars: 3, consts: [["class", "sme-position-flex-none sme-layout-tool-header", 4, "ngIf"], ["id", "sme-dialog-title", 3, "ngClass", 4, "ngIf"], ["class", "sme-position-flex-none sme-layout-settings-header", 4, "ngIf"], [1, "sme-position-flex-none", "sme-layout-tool-header"], [3, "ngClass"], ["id", "sme-dialog-title", 3, "ngClass"], [1, "sme-position-flex-none", "sme-layout-settings-header"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {
38976
- ɵɵprojectionDef(_c0$1d);
38977
- ɵɵtemplate(0, HeaderComponent_div_0_Template, 4, 2, "div", 0);
39432
+ HeaderComponent.h4style = 'sme-font-h4 sme-font-h4-no-spacing';
39433
+ /** @nocollapse */ HeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(ɵɵdirectiveInject(Injector)); };
39434
+ /** @nocollapse */ HeaderComponent.ɵcmp = ɵɵdefineComponent({ type: HeaderComponent, selectors: [["sme-header"]], inputs: { type: "type", text: "text", level: "level", smeIconClassName: "smeIconClassName", urlIcon: "urlIcon" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c0$1d, decls: 5, vars: 3, consts: [["class", "sme-layout-flex sme-position-flex-align-center sme-layout-tool-header", 4, "ngIf"], ["id", "sme-dialog-title", 3, "ngClass", 4, "ngIf"], ["class", "sme-position-flex-none sme-layout-settings-header", 4, "ngIf"], ["class", "sme-padding-left-xs"], ["contentTemplate", ""], [1, "sme-layout-flex", "sme-position-flex-align-center", "sme-layout-tool-header"], [3, "ngClass"], ["class", "sme-position-align-v-inline-middle sme-icon", 3, "class", 4, "ngIf"], ["class", "sme-position-align-v-inline-middle sme-url-icon", 3, "background-image", 4, "ngIf"], [1, "sme-position-align-v-inline-middle"], [4, "ngTemplateOutlet"], [1, "sme-position-align-v-inline-middle", "sme-icon"], [1, "sme-position-align-v-inline-middle", "sme-url-icon"], ["id", "sme-dialog-title", 3, "ngClass"], [1, "sme-position-flex-none", "sme-layout-settings-header"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {
39435
+ ɵɵprojectionDef();
39436
+ ɵɵtemplate(0, HeaderComponent_div_0_Template, 7, 5, "div", 0);
38978
39437
  ɵɵtemplate(1, HeaderComponent_h2_1_Template, 2, 2, "h2", 1);
38979
- ɵɵtemplate(2, HeaderComponent_div_2_Template, 4, 2, "div", 2);
39438
+ ɵɵtemplate(2, HeaderComponent_div_2_Template, 4, 3, "div", 2);
39439
+ ɵɵtemplate(3, HeaderComponent_ng_template_3_Template, 1, 0, "ng-template", 3, 4, ɵɵtemplateRefExtractor);
38980
39440
  } if (rf & 2) {
38981
39441
  ɵɵproperty("ngIf", ctx.type === "tool-header");
38982
39442
  ɵɵadvance(1);
38983
39443
  ɵɵproperty("ngIf", ctx.type === "dialog-header");
38984
39444
  ɵɵadvance(1);
38985
39445
  ɵɵproperty("ngIf", ctx.type === "settings-page-header");
38986
- } }, directives: [NgIf, NgClass], encapsulation: 2 });
39446
+ } }, directives: [NgIf, NgClass, NgTemplateOutlet], encapsulation: 2 });
38987
39447
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(HeaderComponent, [{
38988
39448
  type: Component,
38989
39449
  args: [{
38990
39450
  selector: 'sme-header',
38991
39451
  templateUrl: './header.component.html'
38992
39452
  }]
38993
- }], null, { type: [{
39453
+ }], function () { return [{ type: Injector }]; }, { type: [{
38994
39454
  type: Input
38995
39455
  }], text: [{
38996
39456
  type: Input
38997
39457
  }], level: [{
38998
39458
  type: Input
39459
+ }], smeIconClassName: [{
39460
+ type: Input
39461
+ }], urlIcon: [{
39462
+ type: Input
38999
39463
  }] }); })();
39000
39464
 
39001
39465
  class HeaderModule {
@@ -42602,6 +43066,10 @@ class PropertyGridComponent extends CoreBaseComponent {
42602
43066
  * Implementation of the Layout interface
42603
43067
  */
42604
43068
  this.layoutChanged = new EventEmitter();
43069
+ /**
43070
+ * Implementation of the Layout interface
43071
+ */
43072
+ this.windowBreakpointChanged = new EventEmitter();
42605
43073
  this.propertyGridResponsiveWindowManager = new PropertyGridResponsiveWindowManager();
42606
43074
  // old style supported sme-property-grid-arrange-vertical class. default to vertical orientation if this class is applied.
42607
43075
  const hasVerticalClass = this.hostElement.nativeElement.classList.contains('sme-property-grid-arrange-vertical');
@@ -42718,7 +43186,7 @@ class PropertyGridComponent extends CoreBaseComponent {
42718
43186
  ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.actionLinkTemplate = _t.first);
42719
43187
  ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.internalLinkTemplate = _t.first);
42720
43188
  ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.externalLinkTemplate = _t.first);
42721
- } }, inputs: { orientation: "orientation" }, outputs: { layoutChanged: "layoutChanged" }, features: [ɵɵProvidersFeature([
43189
+ } }, inputs: { orientation: "orientation" }, outputs: { layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [ɵɵProvidersFeature([
42722
43190
  { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => PropertyGridComponent)) }
42723
43191
  ]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature], decls: 16, vars: 6, consts: [[1, "sme-position-inset-none", "sme-position-stretch-h", 3, "padLastItem"], ["layout", ""], ["name", "narrow", 3, "until", "columns"], ["name", "medium", 3, "until", "columns", 4, "ngIf"], ["name", "wide", 3, "columns", 4, "ngIf"], [3, "columnSpan", "maxWidth", 4, "ngFor", "ngForOf"], ["readonlyTemplate", ""], ["actionLinkTemplate", ""], ["internalLinkTemplate", ""], ["externalLinkTemplate", ""], ["iconTemplate", ""], ["name", "medium", 3, "until", "columns"], ["name", "wide", 3, "columns"], [3, "columnSpan", "maxWidth"], ["tabindex", "0", "aria-live", "polite", "aria-atomic", "true", "smeTooltipZone", "", 1, "sme-property-grid-item"], ["zone", "smeTooltipZone"], [1, "sme-arrange-stack-h"], ["class", "sme-position-flex-none sme-icon sme-icon-info sme-info-bubble sme-margin-left-xs", "aria-hidden", "true", 3, "title", "tooltipZone", 4, "ngIf"], [1, "sme-screen-reader"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["aria-hidden", "true", 1, "sme-position-flex-none", "sme-icon", "sme-icon-info", "sme-info-bubble", "sme-margin-left-xs", 3, "title", "tooltipZone"], ["size", "extra-small", 3, "inline", "isBackgroundTransparent", 4, "ngIf"], [4, "ngIf"], ["size", "extra-small", 3, "inline", "isBackgroundTransparent"], [1, "read-only-template"], ["class", "sme-padding-right-xs", 4, "ngIf"], ["tabindex", "0", "role", "link", 1, "sme-link", "sme-focus-zone", "action-link-template", 3, "click"], [1, "sme-padding-right-xs"], ["role", "link", 1, "sme-link", "sme-focus-zone", 3, "routerLink"], ["role", "link", "target", "_blank", 1, "sme-link", "sme-focus-zone", 3, "href"], [1, "sme-icon", "sme-icon-openInNewWindow", "sme-margin-left-xs"], [3, "class", 4, "ngIf"], ["class", "sme-layout-inline-block sme-margin-right-xs ", "size", "16px", 3, "status", 4, "ngIf"], ["size", "16px", 1, "sme-layout-inline-block", "sme-margin-right-xs", 3, "status"]], template: function PropertyGridComponent_Template(rf, ctx) { if (rf & 1) {
42724
43192
  ɵɵelementStart(0, "sme-layout", 0, 1);
@@ -42778,6 +43246,8 @@ class PropertyGridComponent extends CoreBaseComponent {
42778
43246
  type: Input
42779
43247
  }], layoutChanged: [{
42780
43248
  type: Output
43249
+ }], windowBreakpointChanged: [{
43250
+ type: Output
42781
43251
  }] }); })();
42782
43252
 
42783
43253
  class PropertyGridModule {
@@ -46987,6 +47457,10 @@ class SettingsComponent extends CoreBaseComponent {
46987
47457
  * Separator used in sticky header on top of Settings page
46988
47458
  */
46989
47459
  this.headerSeparator = '|';
47460
+ /**
47461
+ * The generator for layout config.
47462
+ */
47463
+ this.layoutConfigGenerator = new LayoutConfigGenerator();
46990
47464
  this.autoFocus = true;
46991
47465
  }
46992
47466
  /**
@@ -47007,6 +47481,7 @@ class SettingsComponent extends CoreBaseComponent {
47007
47481
  this.autoFocus = true;
47008
47482
  }), this.settingsForms.formRemoved().subscribe((form) => { MsftSme.remove(this.allForms, form); }));
47009
47483
  this.fullSettingsTitle = this.settingsTitle;
47484
+ this.currentLayoutConfig = this.layoutConfigGenerator.initialize([300, '100']);
47010
47485
  }
47011
47486
  ngOnDestroy() {
47012
47487
  super.ngOnDestroy();
@@ -47065,7 +47540,7 @@ class SettingsComponent extends CoreBaseComponent {
47065
47540
  }
47066
47541
  }
47067
47542
  /** @nocollapse */ SettingsComponent.ɵfac = function SettingsComponent_Factory(t) { return new (t || SettingsComponent)(ɵɵdirectiveInject(Injector)); };
47068
- /** @nocollapse */ SettingsComponent.ɵcmp = ɵɵdefineComponent({ type: SettingsComponent, selectors: [["sme-settings"]], inputs: { addPadding: "addPadding", backRoute: "backRoute", settingsTitle: "settingsTitle", selectedSettingsTitle: "selectedSettingsTitle" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c1$Q, decls: 12, vars: 8, consts: [[1, "sme-arrange-stack-v", "sme-layout-relative", "sme-arrange-overflow-auto-y-phone-up", "sme-position-stretch"], ["class", "sme-layout-tool-header sme-position-flex-none sme-arrange-ellipsis sme-padding-bottom-none sme-padding-left-md", 4, "ngIf"], [1, "sme-position-flex-auto", "sme-arrange-overflow-auto", 3, "padLastItem"], ["layout", ""], ["name", "narrow", 3, "until", "columns"], ["name", "wide", 3, "columns"], [3, "columnSpan", "ngClass"], [1, "sme-position-stretch", "sme-padding-left-xl", "sme-padding-top-xs", 3, "columnSpan"], [1, "sme-layout-tool-header", "sme-position-flex-none", "sme-arrange-ellipsis", "sme-padding-bottom-none", "sme-padding-left-md"], [1, "sme-font-h3", "sme-arrange-ellipsis", "sme-position-stretch-h", 3, "title"], ["class", "sme-padding-horizontal-sm sme-font-family-normal", 4, "ngIf"], ["class", "sme-font-family-normal", 4, "ngIf"], [1, "sme-padding-horizontal-sm", "sme-font-family-normal"], [1, "sme-font-family-normal"]], template: function SettingsComponent_Template(rf, ctx) { if (rf & 1) {
47543
+ /** @nocollapse */ SettingsComponent.ɵcmp = ɵɵdefineComponent({ type: SettingsComponent, selectors: [["sme-settings"]], inputs: { addPadding: "addPadding", backRoute: "backRoute", settingsTitle: "settingsTitle", selectedSettingsTitle: "selectedSettingsTitle" }, features: [ɵɵInheritDefinitionFeature], ngContentSelectors: _c1$Q, decls: 12, vars: 10, consts: [[1, "sme-arrange-stack-v", "sme-layout-relative", "sme-arrange-overflow-auto-y-phone-up", "sme-position-stretch"], ["class", "sme-layout-tool-header sme-position-flex-none sme-arrange-ellipsis sme-padding-bottom-none sme-padding-left-md", 4, "ngIf"], [1, "sme-position-flex-auto", "sme-arrange-overflow-auto", 3, "padLastItem", "layoutConfig", "itemHorizontalSpace"], ["layout", ""], ["name", "narrow", 3, "until", "columns"], ["name", "wide", 3, "columns"], [3, "columnSpan", "ngClass"], [1, "sme-position-stretch", "sme-padding-left-xl", "sme-padding-top-xs", 3, "columnSpan"], [1, "sme-layout-tool-header", "sme-position-flex-none", "sme-arrange-ellipsis", "sme-padding-bottom-none", "sme-padding-left-md"], [1, "sme-font-h3", "sme-arrange-ellipsis", "sme-position-stretch-h", 3, "title"], ["class", "sme-padding-horizontal-sm sme-font-family-normal", 4, "ngIf"], ["class", "sme-font-family-normal", 4, "ngIf"], [1, "sme-padding-horizontal-sm", "sme-font-family-normal"], [1, "sme-font-family-normal"]], template: function SettingsComponent_Template(rf, ctx) { if (rf & 1) {
47069
47544
  ɵɵprojectionDef(_c0$1u);
47070
47545
  ɵɵelementStart(0, "div", 0);
47071
47546
  ɵɵtemplate(1, SettingsComponent_div_1_Template, 5, 5, "div", 1);
@@ -47087,7 +47562,7 @@ class SettingsComponent extends CoreBaseComponent {
47087
47562
  ɵɵadvance(1);
47088
47563
  ɵɵproperty("ngIf", ctx.settingsTitle);
47089
47564
  ɵɵadvance(1);
47090
- ɵɵproperty("padLastItem", false);
47565
+ ɵɵproperty("padLastItem", false)("layoutConfig", ctx.currentLayoutConfig)("itemHorizontalSpace", 36);
47091
47566
  ɵɵadvance(2);
47092
47567
  ɵɵproperty("until", 768)("columns", 1);
47093
47568
  ɵɵadvance(1);
@@ -51970,5 +52445,5 @@ function getFullRouteParams(route) {
51970
52445
  * Generated bundle index. Do not edit.
51971
52446
  */
51972
52447
 
51973
- export { AccordionComponent, AccordionModule, AccordionPanelComponent, ActionBarComponent, ActionBarDirective, ActionButton, ActionButtonAsync, ActionButtonAsyncComponent, ActionButtonComponent, ActionButtonRendererComponent, ActionContainerComponent, ActionDropdown, ActionDropdownComponent, ActionDropdownRendererComponent, ActionItem, ActionItemComponent, ActionItemRendererComponent, ActionItemSeparator, ActionItemSeparatorComponent, ActionItemSeparatorRendererComponent, ActionMenuComponent, ActionsModule, ActiveConnectionService, ActiveDirectoryModule, ActiveDirectorySearchFormFieldComponent, ActiveDirectoryService, AlertBarComponent, AlertBarModule, AlertBarService, AlertSeverity, AppContextService, AppErrorHandler, ApplyMode, AriaLiveOptions, ArrayFormFieldComponent, ArrayFormFieldLoaderComponent, ArrayPropertySchemaFieldLoaderComponent, AuthorizationService, AutofocusDirective, AutofocusModule, AzureManagerService, BackdropComponent, BackdropModule, BackgroundExtensionRootComponent, BadgeBaseComponent, BadgeFeatureTypes, BadgeModule, BannerComponent, BannerModule, BaseComponent, BaseDialogComponent, BaseFormData, BasePropertiesForm, BasicFormLoaderComponent, BatchService, BooleanConverterPipe, BooleanConverterPipeModule, BreadcrumbComponent, BreadcrumbHeaderComponent, BreadcrumbHeaderModule, BreadcrumbModule, BreadcrumbSeparator, BugFixesFeatureBadgeComponent, ByteUnitConverterPipe, ByteUnitConverterPipeModule, CAPSLOCK_VALIDATOR, CalendarFormFieldComponent, CanDeactivateGuard, CapacityBarChartComponent, CapacityBase, CapacityDoughnutChartComponent, CapsLockValidatorDirective, ChartComponent, ChartModule, CheckboxFormFieldComponent, CheckboxFormFieldLoaderComponent, ChecklistFormFieldComponent, ChecklistFormFieldLoaderComponent, ChoiceDialogComponent, CimService, CimStreamService, ClampDirective, ClampModule, ClockFormFieldComponent, CodeFormFieldComponent, CodeFormFieldLoaderComponent, ColumnPickerService, ComboboxFormFieldComponent, ComboboxFormFieldLoaderComponent, ComingSoonBadgeComponent, CommonDialogsComponent, CommonSettingsComponent, CommonSettingsComponentBase, ConfirmationDialogComponent, ConfirmationListDialogComponent, ConnectionService, ConnectivityEnforcer, ConnectivityLevel, ContextDropdownComponent, ContextMenuComponent, ContextMenuDirective, ContextMenuModule, CoreServiceModule, CredSSPEnabledBadgeComponent, CredSSPManagerService, CriticalBadgeComponent, CustomBadgeComponent, DataOnlyFormFieldLoaderComponent, DataTableColumnComponent, DataTableColumnPickerExtension, DataTableComponent, DataTableModule, DataTableMultipleSelectMode, DataTableRenderedItemType, DataTableSortMode, DateConverterPipe, DateConverterPipeModule, DateFormFieldComponent, DateTimeFormFieldComponent, DateTimeRangeFormFieldComponent, DateTimeRangeOptionComponent, Debounce, DeleteColumnComponent, Deprecated, DetailsComponent, DetailsModule, DevGuardService, DialogChangeEvent, DialogCloseReason, DialogComponent, DialogContentComponent, DialogFooterComponent, DialogHeaderComponent, DialogMode, DialogModule, DialogService, DisabledChangedEvent, DisabledDirective, DisabledModule, DiscardDirective, DiscardModule, DocumentationComponent, DocumentationModule, DoughnutChartComponent, DoughnutChartModule, DropdownComponent, DropdownModule, DropdownService, DynamicActionItemComponent, DynamicComponentBase, EditableCollectionItem, EditableLayoutComponent, EditableLayoutItemComponent, ElectronService, EnumConverterPipe, EnumConverterPipeModule, ExperimentGuardService, ExtensionBrokerService, ExtensionDialogComponent, ExtensionRootModule, FeedbackBadgeComponent, FieldsetDirective, FileFormFieldComponent, FileFormFieldLoaderComponent, FileTransferService, FilterPipe, FilterPipeModule, FormAsyncValidatorBase, FormField, FormFieldAccessor, FormFieldAccessorDirective, FormFieldAsyncValidatorDirective, FormFieldComponent, FormFieldIsolatorComponent, FormFieldLayoutComponent, FormFieldOptionComponent, FormFieldOptionSubFormTemplateLoaderComponent, FormFieldOrientation, FormFieldTemplateDirective, FormFieldValidatorDirective, FormValidatorBase, FormWizardStepComponent, FormatPipe, FormatPipeModule, FrameService, GatewayService, GuardsModule, GuidedPaneComponent, GuidedPanelComponent, GuidedPanelModule, HeaderComponent, HeaderModule, HealthAlertSeverity, HighlightPipe, HighlightPipeModule, HorizontalBarChartComponent, HorizontalBarChartModule, HttpService, IconLayerComponent, IconModule, IdleComponent, IdleModule, ImprovementFeatureBadgeComponent, InputValidatorDirective, InstallationTypeGuardService, JobsService, JsonFormFieldComponent, JsonFormFieldLoaderComponent, LayeredIconComponent, LayoutComponent, LayoutDefinitionComponent, LayoutItemComponent, LayoutModule, LegendComponent, LegendEntryComponent, LegendModule, LifetimeService, LineChartComponent, LineChartModule, LineChartType, ListFormFieldComponent, LoadingWheelComponent, LoadingWheelModule, LoadingWheelSize, LocalDateConverterPipe, MachineNameValidatorDirective, MarkdownDirective, MarkdownModule, MasterViewComponent, MasterViewModule, MatchFieldValidatorDirective, MediaConversion2, MessageDialogComponent, Monaco, Navigation, NavigationService, NavigationTitle, NewBadgeComponent, NewFeatureBadgeComponent, NodeCredentialsFormComponent, NodeCredentialsFormModule, NodeService, NotificationService, NumberFormFieldComponent, NumberFormFieldLoaderComponent, ObjectDefaultFormFieldLoaderComponent, ObjectPropertySchemaFieldLoaderComponent, OptionsFormFieldComponent, OrderedListFormFieldComponent, OrderedListFormFieldLoaderComponent, PageAlertBarComponent, PageAlertBarModule, PanelControlComponent, PasswordFormFieldComponent, PasswordFormFieldLoaderComponent, PivotComponent, PivotModule, PivotTabComponent, PivotTabType, PowerShellService, PowerShellStreamService, PreviewBadgeComponent, PropertyGridComponent, PropertyGridItemComponent, PropertyGridModule, QueryDataItemPresetGenerator, QueryDataItemValueType, QueryDataOperand, QueryEditorComponent, QueryEditorModule, RadioGroupFormFieldComponent, RadioGroupFormFieldLoaderComponent, RatingRadioGroupFormFieldComponent, ReactiveForm, ReactiveFormAccessor, ReactiveFormWizardStepComponent, ReadonlyFormFieldComponent, RequiredTrimmedValidatorDirective, ResizerComponent, ResizerModule, ResourceService, RpcService, RpcShellService, SME_ASYNC_VALIDATORS, SME_FORM_FIELD_VALIDATION_ALERT_CONTAINER_PROVIDER, SME_LAYOUT_PROVIDER, SME_VALIDATORS, ScheduleRebootService, SchemaDataTypeStore, SchemaFieldContext, SchemaFieldHostComponent, SchemaFieldHostModule, SchemaFieldLoaderComponentBase, SchemaFormComponent, SchemaFormModule, SchemaPrimitiveType, SchemaUtilities, SearchFormFieldComponent, SecureExtensionDataService, SelectFormFieldDirective, SettingsComponent, SettingsContentComponent, SettingsFooterComponent, SettingsFormDirective, SettingsFormService, SettingsHeaderComponent, SettingsModule, SettingsNavigationComponent, SettingsPageComponent, SettingsService, SimplePropertySchemaFieldLoaderComponent, SliderFormFieldComponent, SliderFormFieldLoaderComponent, SmeExtensionService, SmeFormsModule, SmeInject, SmeInjectable, SmeInjectableBase, SmeInternalFormFieldComponent, SmeResponsiveWindowBreakpoints, SmeResponsiveWindowBreakpointsValue, SmeResponsiveWindowManagerComponent, SmeRouterLinkDirective, SmeRouterModule, SmeSchemaProperty, SmeTemplateOutletModule, SmeUxComponent, SmeUxModule, SnapInExtensionComponent, SnapInExtensionModule, SplitViewComponent, SplitViewContentComponent, SplitViewModule, SplitViewPaneComponent, StackedBarComponent, StackedHorizontalBarChartComponent, StatusIconComponent, StatusIconType, SvgDirective, SvgInlineDirective, SvgInlineResource, SvgModule, SvgResource, TabbedFormController, TabbedFormItemController, TabbedFormLoaderComponent, TabbedLineChartGroupComponent, TagService, TagsActionButtonComponent, TagsColumnComponent, TagsFormFieldComponent, TagsFormFieldLoaderComponent, TelemetryDirective, TelemetryDirectiveModule, TemplateDrivenWizardStepComponent, TemplateOutletDirective, TextFormFieldComponent, TextFormFieldLoaderComponent, TileComponent, TileContentComponent, TileDirectivesModule, TileImageDirective, TileModule, TileRadioGroupFormFieldComponent, TimeFormFieldComponent, ToggleSwitchFormFieldComponent, ToggleSwitchFormFieldLoaderComponent, ToolHeaderComponent, ToolHeaderModule, TooltipDirective, TooltipHostComponent, TooltipHostInstance, TooltipModule, TooltipPlacement, TooltipZoneDirective, TreeTableComponent, UserAliveService, UxExtensionRootComponent, ValidationAlertComponent, ValidationAlertSeverity, WarningBadgeComponent, WebsocketStreamService, WizardAsParent, WizardBuilder, WizardComponent, WizardModule, WizardNavigationInformation, WizardStage, WizardStep, WizardStepComponent, WorkItemService, YesNoConverterPipe, YesNoConverterPipeModule, Yield, alertDialog, getFullRouteParams, modalDialog };
52448
+ export { AccordionComponent, AccordionModule, AccordionPanelComponent, ActionBarComponent, ActionBarDirective, ActionButton, ActionButtonAsync, ActionButtonAsyncComponent, ActionButtonComponent, ActionButtonRendererComponent, ActionContainerComponent, ActionDropdown, ActionDropdownComponent, ActionDropdownRendererComponent, ActionItem, ActionItemComponent, ActionItemRendererComponent, ActionItemSeparator, ActionItemSeparatorComponent, ActionItemSeparatorRendererComponent, ActionMenuComponent, ActionsModule, ActiveConnectionService, ActiveDirectoryModule, ActiveDirectorySearchFormFieldComponent, ActiveDirectoryService, AlertBarComponent, AlertBarModule, AlertBarService, AlertSeverity, AppContextService, AppErrorHandler, ApplyMode, AriaLiveOptions, ArrayFormFieldComponent, ArrayFormFieldLoaderComponent, ArrayPropertySchemaFieldLoaderComponent, AuthorizationService, AutofocusDirective, AutofocusModule, AzureManagerService, BackdropComponent, BackdropModule, BackgroundExtensionRootComponent, BadgeBaseComponent, BadgeFeatureTypes, BadgeModule, BannerComponent, BannerModule, BaseComponent, BaseDialogComponent, BaseFormData, BasePropertiesForm, BasicFormLoaderComponent, BatchService, BooleanConverterPipe, BooleanConverterPipeModule, BreadcrumbComponent, BreadcrumbHeaderComponent, BreadcrumbHeaderModule, BreadcrumbModule, BreadcrumbSeparator, BugFixesFeatureBadgeComponent, ByteUnitConverterPipe, ByteUnitConverterPipeModule, CAPSLOCK_VALIDATOR, CalendarFormFieldComponent, CanDeactivateGuard, CapacityBarChartComponent, CapacityBase, CapacityDoughnutChartComponent, CapsLockValidatorDirective, ChartComponent, ChartModule, CheckboxFormFieldComponent, CheckboxFormFieldLoaderComponent, ChecklistFormFieldComponent, ChecklistFormFieldLoaderComponent, ChoiceDialogComponent, CimService, CimStreamService, ClampDirective, ClampModule, ClockFormFieldComponent, CodeFormFieldComponent, CodeFormFieldLoaderComponent, ColumnPickerService, ComboboxFormFieldComponent, ComboboxFormFieldLoaderComponent, ComingSoonBadgeComponent, CommonDialogsComponent, CommonSettingsComponent, CommonSettingsComponentBase, ConfirmationDialogComponent, ConfirmationListDialogComponent, ConnectionService, ConnectivityEnforcer, ConnectivityLevel, ContextDropdownComponent, ContextMenuComponent, ContextMenuDirective, ContextMenuModule, CoreServiceModule, CredSSPEnabledBadgeComponent, CredSSPManagerService, CriticalBadgeComponent, CustomBadgeComponent, DataOnlyFormFieldLoaderComponent, DataTableColumnComponent, DataTableColumnPickerExtension, DataTableComponent, DataTableModule, DataTableMultipleSelectMode, DataTableRenderedItemType, DataTableSortMode, DateConverterPipe, DateConverterPipeModule, DateFormFieldComponent, DateTimeFormFieldComponent, DateTimeRangeFormFieldComponent, DateTimeRangeOptionComponent, Debounce, DeleteColumnComponent, Deprecated, DetailsComponent, DetailsModule, DevGuardService, DialogChangeEvent, DialogCloseReason, DialogComponent, DialogContentComponent, DialogFooterComponent, DialogHeaderComponent, DialogMode, DialogModule, DialogService, DisabledChangedEvent, DisabledDirective, DisabledModule, DiscardDirective, DiscardModule, DocumentationComponent, DocumentationModule, DoughnutChartComponent, DoughnutChartModule, DropdownComponent, DropdownModule, DropdownService, DynamicActionItemComponent, DynamicComponentBase, EditableCollectionItem, EditableLayoutComponent, EditableLayoutItemComponent, ElectronService, EnumConverterPipe, EnumConverterPipeModule, ExperimentGuardService, ExtensionBrokerService, ExtensionDialogComponent, ExtensionRootModule, FeedbackBadgeComponent, FieldsetDirective, FileFormFieldComponent, FileFormFieldLoaderComponent, FileTransferService, FilterPipe, FilterPipeModule, FormAsyncValidatorBase, FormField, FormFieldAccessor, FormFieldAccessorDirective, FormFieldAsyncValidatorDirective, FormFieldComponent, FormFieldIsolatorComponent, FormFieldLayoutComponent, FormFieldOptionComponent, FormFieldOptionSubFormTemplateLoaderComponent, FormFieldOrientation, FormFieldTemplateDirective, FormFieldValidatorDirective, FormValidatorBase, FormWizardStepComponent, FormatPipe, FormatPipeModule, FrameService, GatewayService, GuardsModule, GuidedPaneComponent, GuidedPanelComponent, GuidedPanelModule, HeaderComponent, HeaderModule, HealthAlertSeverity, HighlightPipe, HighlightPipeModule, HorizontalBarChartComponent, HorizontalBarChartModule, HttpService, IconLayerComponent, IconModule, IdleComponent, IdleModule, ImprovementFeatureBadgeComponent, InputValidatorDirective, InstallationTypeGuardService, JobsService, JsonFormFieldComponent, JsonFormFieldLoaderComponent, LayeredIconComponent, LayoutComponent, LayoutConfigGenerator, LayoutDefinitionComponent, LayoutDrivenType, LayoutItemComponent, LayoutItemConfigMode, LayoutItemConfigPropertyWidthType, LayoutModule, LegendComponent, LegendEntryComponent, LegendModule, LifetimeService, LineChartComponent, LineChartModule, LineChartType, ListFormFieldComponent, LoadingWheelComponent, LoadingWheelModule, LoadingWheelSize, LocalDateConverterPipe, MachineNameValidatorDirective, MarkdownDirective, MarkdownModule, MasterViewComponent, MasterViewModule, MatchFieldValidatorDirective, MediaConversion2, MessageDialogComponent, Monaco, Navigation, NavigationService, NavigationTitle, NewBadgeComponent, NewFeatureBadgeComponent, NodeCredentialsFormComponent, NodeCredentialsFormModule, NodeService, NotificationService, NumberFormFieldComponent, NumberFormFieldLoaderComponent, ObjectDefaultFormFieldLoaderComponent, ObjectPropertySchemaFieldLoaderComponent, OptionsFormFieldComponent, OrderedListFormFieldComponent, OrderedListFormFieldLoaderComponent, PageAlertBarComponent, PageAlertBarModule, PanelControlComponent, PasswordFormFieldComponent, PasswordFormFieldLoaderComponent, PivotComponent, PivotModule, PivotTabComponent, PivotTabType, PowerShellService, PowerShellStreamService, PreviewBadgeComponent, PropertyGridComponent, PropertyGridItemComponent, PropertyGridModule, QueryDataItemPresetGenerator, QueryDataItemValueType, QueryDataOperand, QueryEditorComponent, QueryEditorModule, RadioGroupFormFieldComponent, RadioGroupFormFieldLoaderComponent, RatingRadioGroupFormFieldComponent, ReactiveForm, ReactiveFormAccessor, ReactiveFormWizardStepComponent, ReadonlyFormFieldComponent, RequiredTrimmedValidatorDirective, ResizerComponent, ResizerModule, ResourceService, RpcService, RpcShellService, SME_ASYNC_VALIDATORS, SME_FORM_FIELD_VALIDATION_ALERT_CONTAINER_PROVIDER, SME_LAYOUT_PROVIDER, SME_VALIDATORS, ScheduleRebootService, SchemaDataTypeStore, SchemaFieldContext, SchemaFieldHostComponent, SchemaFieldHostModule, SchemaFieldLoaderComponentBase, SchemaFormComponent, SchemaFormModule, SchemaPrimitiveType, SchemaUtilities, SearchFormFieldComponent, SecureExtensionDataService, SelectFormFieldDirective, SettingsComponent, SettingsContentComponent, SettingsFooterComponent, SettingsFormDirective, SettingsFormService, SettingsHeaderComponent, SettingsModule, SettingsNavigationComponent, SettingsPageComponent, SettingsService, SimplePropertySchemaFieldLoaderComponent, SliderFormFieldComponent, SliderFormFieldLoaderComponent, SmeExtensionService, SmeFormsModule, SmeInject, SmeInjectable, SmeInjectableBase, SmeInternalFormFieldComponent, SmeResponsiveWindowBreakpoints, SmeResponsiveWindowBreakpointsValue, SmeResponsiveWindowManagerComponent, SmeRouterLinkDirective, SmeRouterModule, SmeSchemaProperty, SmeTemplateOutletModule, SmeUxComponent, SmeUxModule, SnapInExtensionComponent, SnapInExtensionModule, SplitViewComponent, SplitViewContentComponent, SplitViewModule, SplitViewPaneComponent, StackedBarComponent, StackedHorizontalBarChartComponent, StatusIconComponent, StatusIconType, SvgDirective, SvgInlineDirective, SvgInlineResource, SvgModule, SvgResource, TabbedFormController, TabbedFormItemController, TabbedFormLoaderComponent, TabbedLineChartGroupComponent, TagService, TagsActionButtonComponent, TagsColumnComponent, TagsFormFieldComponent, TagsFormFieldLoaderComponent, TelemetryDirective, TelemetryDirectiveModule, TemplateDrivenWizardStepComponent, TemplateOutletDirective, TextFormFieldComponent, TextFormFieldLoaderComponent, TileComponent, TileContentComponent, TileDirectivesModule, TileImageDirective, TileModule, TileRadioGroupFormFieldComponent, TimeFormFieldComponent, ToggleSwitchFormFieldComponent, ToggleSwitchFormFieldLoaderComponent, ToolHeaderComponent, ToolHeaderModule, TooltipDirective, TooltipHostComponent, TooltipHostInstance, TooltipModule, TooltipPlacement, TooltipZoneDirective, TreeTableComponent, UserAliveService, UxExtensionRootComponent, ValidationAlertComponent, ValidationAlertSeverity, WarningBadgeComponent, WebsocketStreamService, WizardAsParent, WizardBuilder, WizardComponent, WizardModule, WizardNavigationInformation, WizardStage, WizardStep, WizardStepComponent, WorkItemService, YesNoConverterPipe, YesNoConverterPipeModule, Yield, alertDialog, getFullRouteParams, modalDialog };
51974
52449
  //# sourceMappingURL=microsoft-windows-admin-center-sdk-angular.js.map