@ngstarter-ui/components 21.0.21 → 21.0.23

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 (27) hide show
  1. package/ai/component-registry.json +18 -9
  2. package/fesm2022/ngstarter-ui-components-chips.mjs +9 -9
  3. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-datepicker.mjs +7 -2
  5. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-progress-bar.mjs +4 -4
  7. package/fesm2022/ngstarter-ui-components-progress-bar.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-sidenav.mjs +1 -4
  9. package/fesm2022/ngstarter-ui-components-sidenav.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-snack-bar.mjs +6 -6
  11. package/fesm2022/ngstarter-ui-components-snack-bar.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-sort.mjs +4 -4
  13. package/fesm2022/ngstarter-ui-components-sort.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-stepper.mjs +33 -10
  15. package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-table.mjs +10 -2
  17. package/fesm2022/ngstarter-ui-components-table.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-timepicker.mjs +43 -27
  19. package/fesm2022/ngstarter-ui-components-timepicker.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-tree.mjs +5 -3
  21. package/fesm2022/ngstarter-ui-components-tree.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/types/ngstarter-ui-components-sidenav.d.ts +0 -2
  24. package/types/ngstarter-ui-components-sort.d.ts +5 -5
  25. package/types/ngstarter-ui-components-stepper.d.ts +2 -2
  26. package/types/ngstarter-ui-components-table.d.ts +1 -1
  27. package/types/ngstarter-ui-components-timepicker.d.ts +8 -6
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, NgZone, Renderer2, input, numberAttribute, output, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, ElementRef, NgZone, Renderer2, input, numberAttribute, output, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
 
4
4
  class ProgressBar {
5
5
  _elementRef = inject(ElementRef);
@@ -42,11 +42,11 @@ class ProgressBar {
42
42
  }
43
43
  };
44
44
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ProgressBar, isStandalone: true, selector: "ngs-progress-bar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, bufferValue: { classPropertyName: "bufferValue", publicName: "bufferValue", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationEnd: "animationEnd" }, host: { attributes: { "role": "progressbar", "aria-valuemin": "0", "aria-valuemax": "100", "tabindex": "-1" }, properties: { "attr.aria-valuenow": "isIndeterminate() ? null : value()", "attr.mode": "mode()", "class.ngs-progress-bar-indeterminate": "isIndeterminate()", "style.--ngs-progress-bar-value": "value()", "style.--ngs-progress-bar-buffer-value": "bufferValue()" }, classAttribute: "ngs-progress-bar" }, exportAs: ["ngsProgressBar"], ngImport: i0, template: "@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n", styles: [".ngs-progress-bar{--ngs-progress-bar-height: 4px;--ngs-progress-bar-track-color: var(--ngs-color-surface-container-highest);--ngs-progress-bar-indicator-color: var(--ngs-color-primary);--ngs-progress-bar-animation-multiplier: 1;display:block;position:relative;height:var(--ngs-progress-bar-height);overflow:hidden;width:100%;transform:translateZ(0);transition:opacity .25s linear}.ngs-progress-bar[mode=query]{transform:rotate(180deg)}.ngs-progress-bar[mode=buffer] .ngs-progress-bar-track{background-image:radial-gradient(circle,var(--ngs-progress-bar-track-color) calc(var(--ngs-progress-bar-height) / 2),transparent 0);background-repeat:repeat-x;background-size:calc(var(--ngs-progress-bar-height) / 2 * 5) var(--ngs-progress-bar-height);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(.25s * var(--ngs-progress-bar-animation-multiplier)) infinite linear;background-color:transparent}.ngs-progress-bar-track,.ngs-progress-bar-buffer-bar,.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar{position:absolute;inset:0}.ngs-progress-bar-track{background:var(--ngs-progress-bar-track-color)}.ngs-progress-bar-buffer-bar{background:var(--ngs-progress-bar-track-color);opacity:.25;transform-origin:top left;transition:transform .25s linear}.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar{transform-origin:top left;transition:transform .25s linear}.ngs-progress-bar-inner{display:inline-block;position:absolute;width:100%;height:100%;background:var(--ngs-progress-bar-indicator-color)}.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar,.ngs-progress-bar[mode=query] .ngs-progress-bar-primary-bar{left:0;animation:ngs-progress-bar-primary-indeterminate-translate 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar .ngs-progress-bar-inner,.ngs-progress-bar[mode=query] .ngs-progress-bar-primary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-primary-indeterminate-scale 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar,.ngs-progress-bar[mode=query] .ngs-progress-bar-secondary-bar{left:0;display:block;animation:ngs-progress-bar-secondary-indeterminate-translate 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner,.ngs-progress-bar[mode=query] .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-secondary-indeterminate-scale 2s infinite linear}.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar,.ngs-progress-bar-buffer-bar{display:block}@keyframes ngs-progress-bar-primary-indeterminate-translate{0%{transform:translate(-145.166611%)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(-145.166611%)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(-61.495191%)}to{transform:translate(55.444446%)}}@keyframes ngs-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes ngs-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(-54.888891%)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(-17.236978%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(29.497274%)}to{transform:translate(105.388891%)}}@keyframes ngs-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:scaleX(.457104)}44.15%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-buffering{to{background-position:calc(var(--ngs-progress-bar-height) / 2 * -5) 0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
45
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ProgressBar, isStandalone: true, selector: "ngs-progress-bar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, bufferValue: { classPropertyName: "bufferValue", publicName: "bufferValue", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationEnd: "animationEnd" }, host: { attributes: { "role": "progressbar", "aria-valuemin": "0", "aria-valuemax": "100", "tabindex": "-1" }, properties: { "attr.aria-valuenow": "isIndeterminate() ? null : value()", "attr.mode": "mode()", "class.ngs-progress-bar-indeterminate": "isIndeterminate()", "style.--ngs-progress-bar-value": "value()", "style.--ngs-progress-bar-buffer-value": "bufferValue()" }, classAttribute: "ngs-progress-bar" }, exportAs: ["ngsProgressBar"], ngImport: i0, template: "@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n", styles: [":host{--ngs-progress-bar-height: 4px;--ngs-progress-bar-track-color: var(--ngs-color-surface-container-highest);--ngs-progress-bar-indicator-color: var(--ngs-color-primary);--ngs-progress-bar-animation-multiplier: 1;display:block;position:relative;height:var(--ngs-progress-bar-height);overflow:hidden;width:100%;transform:translateZ(0);transition:opacity .25s linear}:host[mode=query]{transform:rotate(180deg)}:host[mode=buffer] .ngs-progress-bar-track{background-image:radial-gradient(circle,var(--ngs-progress-bar-track-color) calc(var(--ngs-progress-bar-height) / 2),transparent 0);background-repeat:repeat-x;background-size:calc(var(--ngs-progress-bar-height) / 2 * 5) var(--ngs-progress-bar-height);background-position:left;flex:auto;transform:rotate(180deg);animation:ngs-linear-progress-buffering calc(.25s * var(--ngs-progress-bar-animation-multiplier)) infinite linear;background-color:transparent}:host .ngs-progress-bar-track,:host .ngs-progress-bar-buffer-bar,:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar{position:absolute;inset:0}:host .ngs-progress-bar-track{background:var(--ngs-progress-bar-track-color)}:host .ngs-progress-bar-buffer-bar{background:var(--ngs-progress-bar-track-color);opacity:.25;transform-origin:top left;transition:transform .25s linear}:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar{transform-origin:top left;transition:transform .25s linear}:host .ngs-progress-bar-inner{display:inline-block;position:absolute;width:100%;height:100%;background:var(--ngs-progress-bar-indicator-color)}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar,:host[mode=query] .ngs-progress-bar-primary-bar{left:0;animation:ngs-progress-bar-primary-indeterminate-translate 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar .ngs-progress-bar-inner,:host[mode=query] .ngs-progress-bar-primary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-primary-indeterminate-scale 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar,:host[mode=query] .ngs-progress-bar-secondary-bar{left:0;display:block;animation:ngs-progress-bar-secondary-indeterminate-translate 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner,:host[mode=query] .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-secondary-indeterminate-scale 2s infinite linear}:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar,:host .ngs-progress-bar-buffer-bar{display:block}@keyframes ngs-progress-bar-primary-indeterminate-translate{0%{transform:translate(-145.166611%)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(-145.166611%)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(-61.495191%)}to{transform:translate(55.444446%)}}@keyframes ngs-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes ngs-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(-54.888891%)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(-17.236978%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(29.497274%)}to{transform:translate(105.388891%)}}@keyframes ngs-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:scaleX(.457104)}44.15%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes ngs-linear-progress-buffering{to{background-position:calc(var(--ngs-progress-bar-height) / 2 * -5) 0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
46
  }
47
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ProgressBar, decorators: [{
48
48
  type: Component,
49
- args: [{ selector: 'ngs-progress-bar', exportAs: 'ngsProgressBar', host: {
49
+ args: [{ selector: 'ngs-progress-bar', exportAs: 'ngsProgressBar', changeDetection: ChangeDetectionStrategy.OnPush, host: {
50
50
  'role': 'progressbar',
51
51
  'aria-valuemin': '0',
52
52
  'aria-valuemax': '100',
@@ -57,7 +57,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
57
57
  '[class.ngs-progress-bar-indeterminate]': 'isIndeterminate()',
58
58
  '[style.--ngs-progress-bar-value]': 'value()',
59
59
  '[style.--ngs-progress-bar-buffer-value]': 'bufferValue()',
60
- }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n", styles: [".ngs-progress-bar{--ngs-progress-bar-height: 4px;--ngs-progress-bar-track-color: var(--ngs-color-surface-container-highest);--ngs-progress-bar-indicator-color: var(--ngs-color-primary);--ngs-progress-bar-animation-multiplier: 1;display:block;position:relative;height:var(--ngs-progress-bar-height);overflow:hidden;width:100%;transform:translateZ(0);transition:opacity .25s linear}.ngs-progress-bar[mode=query]{transform:rotate(180deg)}.ngs-progress-bar[mode=buffer] .ngs-progress-bar-track{background-image:radial-gradient(circle,var(--ngs-progress-bar-track-color) calc(var(--ngs-progress-bar-height) / 2),transparent 0);background-repeat:repeat-x;background-size:calc(var(--ngs-progress-bar-height) / 2 * 5) var(--ngs-progress-bar-height);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(.25s * var(--ngs-progress-bar-animation-multiplier)) infinite linear;background-color:transparent}.ngs-progress-bar-track,.ngs-progress-bar-buffer-bar,.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar{position:absolute;inset:0}.ngs-progress-bar-track{background:var(--ngs-progress-bar-track-color)}.ngs-progress-bar-buffer-bar{background:var(--ngs-progress-bar-track-color);opacity:.25;transform-origin:top left;transition:transform .25s linear}.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar{transform-origin:top left;transition:transform .25s linear}.ngs-progress-bar-inner{display:inline-block;position:absolute;width:100%;height:100%;background:var(--ngs-progress-bar-indicator-color)}.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar,.ngs-progress-bar[mode=query] .ngs-progress-bar-primary-bar{left:0;animation:ngs-progress-bar-primary-indeterminate-translate 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar .ngs-progress-bar-inner,.ngs-progress-bar[mode=query] .ngs-progress-bar-primary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-primary-indeterminate-scale 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar,.ngs-progress-bar[mode=query] .ngs-progress-bar-secondary-bar{left:0;display:block;animation:ngs-progress-bar-secondary-indeterminate-translate 2s infinite linear}.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner,.ngs-progress-bar[mode=query] .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-secondary-indeterminate-scale 2s infinite linear}.ngs-progress-bar-primary-bar,.ngs-progress-bar-secondary-bar,.ngs-progress-bar-buffer-bar{display:block}@keyframes ngs-progress-bar-primary-indeterminate-translate{0%{transform:translate(-145.166611%)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(-145.166611%)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(-61.495191%)}to{transform:translate(55.444446%)}}@keyframes ngs-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes ngs-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(-54.888891%)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(-17.236978%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(29.497274%)}to{transform:translate(105.388891%)}}@keyframes ngs-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:scaleX(.457104)}44.15%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-buffering{to{background-position:calc(var(--ngs-progress-bar-height) / 2 * -5) 0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
60
+ }, template: "@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n", styles: [":host{--ngs-progress-bar-height: 4px;--ngs-progress-bar-track-color: var(--ngs-color-surface-container-highest);--ngs-progress-bar-indicator-color: var(--ngs-color-primary);--ngs-progress-bar-animation-multiplier: 1;display:block;position:relative;height:var(--ngs-progress-bar-height);overflow:hidden;width:100%;transform:translateZ(0);transition:opacity .25s linear}:host[mode=query]{transform:rotate(180deg)}:host[mode=buffer] .ngs-progress-bar-track{background-image:radial-gradient(circle,var(--ngs-progress-bar-track-color) calc(var(--ngs-progress-bar-height) / 2),transparent 0);background-repeat:repeat-x;background-size:calc(var(--ngs-progress-bar-height) / 2 * 5) var(--ngs-progress-bar-height);background-position:left;flex:auto;transform:rotate(180deg);animation:ngs-linear-progress-buffering calc(.25s * var(--ngs-progress-bar-animation-multiplier)) infinite linear;background-color:transparent}:host .ngs-progress-bar-track,:host .ngs-progress-bar-buffer-bar,:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar{position:absolute;inset:0}:host .ngs-progress-bar-track{background:var(--ngs-progress-bar-track-color)}:host .ngs-progress-bar-buffer-bar{background:var(--ngs-progress-bar-track-color);opacity:.25;transform-origin:top left;transition:transform .25s linear}:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar{transform-origin:top left;transition:transform .25s linear}:host .ngs-progress-bar-inner{display:inline-block;position:absolute;width:100%;height:100%;background:var(--ngs-progress-bar-indicator-color)}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar,:host[mode=query] .ngs-progress-bar-primary-bar{left:0;animation:ngs-progress-bar-primary-indeterminate-translate 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-primary-bar .ngs-progress-bar-inner,:host[mode=query] .ngs-progress-bar-primary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-primary-indeterminate-scale 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar,:host[mode=query] .ngs-progress-bar-secondary-bar{left:0;display:block;animation:ngs-progress-bar-secondary-indeterminate-translate 2s infinite linear}:host.ngs-progress-bar-indeterminate .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner,:host[mode=query] .ngs-progress-bar-secondary-bar .ngs-progress-bar-inner{animation:ngs-progress-bar-secondary-indeterminate-scale 2s infinite linear}:host .ngs-progress-bar-primary-bar,:host .ngs-progress-bar-secondary-bar,:host .ngs-progress-bar-buffer-bar{display:block}@keyframes ngs-progress-bar-primary-indeterminate-translate{0%{transform:translate(-145.166611%)}20%{animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translate(-145.166611%)}59.15%{animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translate(-61.495191%)}to{transform:translate(55.444446%)}}@keyframes ngs-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes ngs-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translate(-54.888891%)}25%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translate(-17.236978%)}48.35%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translate(29.497274%)}to{transform:translate(105.388891%)}}@keyframes ngs-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:scaleX(.457104)}44.15%{animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes ngs-linear-progress-buffering{to{background-position:calc(var(--ngs-progress-bar-height) / 2 * -5) 0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
61
61
  }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], bufferValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bufferValue", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], animationEnd: [{ type: i0.Output, args: ["animationEnd"] }] } });
62
62
 
63
63
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-progress-bar.mjs","sources":["../../../projects/components/progress-bar/src/progress-bar/progress-bar.ts","../../../projects/components/progress-bar/src/progress-bar/progress-bar.html","../../../projects/components/progress-bar/ngstarter-ui-components-progress-bar.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n input,\n computed,\n AfterViewInit,\n OnDestroy,\n inject,\n ElementRef,\n NgZone,\n Renderer2,\n numberAttribute,\n output\n} from '@angular/core';\n\nexport type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer' | 'query';\n\n@Component({\n selector: 'ngs-progress-bar',\n templateUrl: './progress-bar.html',\n styleUrl: './progress-bar.scss',\n exportAs: 'ngsProgressBar',\n host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'tabindex': '-1',\n '[attr.aria-valuenow]': 'isIndeterminate() ? null : value()',\n '[attr.mode]': 'mode()',\n 'class': 'ngs-progress-bar',\n '[class.ngs-progress-bar-indeterminate]': 'isIndeterminate()',\n '[style.--ngs-progress-bar-value]': 'value()',\n '[style.--ngs-progress-bar-buffer-value]': 'bufferValue()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ProgressBar implements AfterViewInit, OnDestroy {\n private readonly _elementRef = inject(ElementRef);\n private readonly _ngZone = inject(NgZone);\n private readonly _renderer = inject(Renderer2);\n\n readonly color = input<string>('primary');\n readonly value = input(0, { transform: numberAttribute });\n readonly bufferValue = input(0, { transform: numberAttribute });\n readonly mode = input<ProgressBarMode>('determinate');\n\n readonly animationEnd = output<{\n value: number;\n}>();\n\n private _cleanupTransitionEnd?: () => void;\n\n readonly isIndeterminate = computed(() => {\n return this.mode() === 'indeterminate' || this.mode() === 'query';\n });\n\n readonly primaryBarTransform = computed(() => {\n return `scaleX(${this.isIndeterminate() ? 1 : this.value() / 100})`;\n });\n\n readonly bufferBarTransform = computed(() => {\n return `scaleX(${this.mode() === 'buffer' ? this.bufferValue() / 100 : 1})`;\n });\n\n /** @deprecated use bufferBarTransform instead */\n readonly bufferBarFlexBasis = computed(() => {\n return this.bufferBarTransform();\n });\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n this._cleanupTransitionEnd = this._renderer.listen(\n this._elementRef.nativeElement,\n 'transitionend',\n this._transitionendHandler\n );\n });\n }\n\n ngOnDestroy() {\n this._cleanupTransitionEnd?.();\n }\n\n private _transitionendHandler = (event: TransitionEvent) => {\n if (\n !event.target ||\n !(event.target as HTMLElement).classList.contains('ngs-progress-bar-primary-bar')\n ) {\n return;\n }\n\n if (this.mode() === 'determinate' || this.mode() === 'buffer') {\n this._ngZone.run(() => this.animationEnd.emit({ value: this.value() }));\n }\n };\n}\n","@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-progress-bar.mjs","sources":["../../../projects/components/progress-bar/src/progress-bar/progress-bar.ts","../../../projects/components/progress-bar/src/progress-bar/progress-bar.html","../../../projects/components/progress-bar/ngstarter-ui-components-progress-bar.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n AfterViewInit,\n OnDestroy,\n inject,\n ElementRef,\n NgZone,\n Renderer2,\n numberAttribute,\n output\n} from '@angular/core';\n\nexport type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer' | 'query';\n\n@Component({\n selector: 'ngs-progress-bar',\n exportAs: 'ngsProgressBar',\n templateUrl: './progress-bar.html',\n styleUrl: './progress-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'tabindex': '-1',\n '[attr.aria-valuenow]': 'isIndeterminate() ? null : value()',\n '[attr.mode]': 'mode()',\n 'class': 'ngs-progress-bar',\n '[class.ngs-progress-bar-indeterminate]': 'isIndeterminate()',\n '[style.--ngs-progress-bar-value]': 'value()',\n '[style.--ngs-progress-bar-buffer-value]': 'bufferValue()',\n },\n})\nexport class ProgressBar implements AfterViewInit, OnDestroy {\n private readonly _elementRef = inject(ElementRef);\n private readonly _ngZone = inject(NgZone);\n private readonly _renderer = inject(Renderer2);\n\n readonly color = input<string>('primary');\n readonly value = input(0, { transform: numberAttribute });\n readonly bufferValue = input(0, { transform: numberAttribute });\n readonly mode = input<ProgressBarMode>('determinate');\n\n readonly animationEnd = output<{\n value: number;\n }>();\n\n private _cleanupTransitionEnd?: () => void;\n\n readonly isIndeterminate = computed(() => {\n return this.mode() === 'indeterminate' || this.mode() === 'query';\n });\n\n readonly primaryBarTransform = computed(() => {\n return `scaleX(${this.isIndeterminate() ? 1 : this.value() / 100})`;\n });\n\n readonly bufferBarTransform = computed(() => {\n return `scaleX(${this.mode() === 'buffer' ? this.bufferValue() / 100 : 1})`;\n });\n\n /** @deprecated use bufferBarTransform instead */\n readonly bufferBarFlexBasis = computed(() => {\n return this.bufferBarTransform();\n });\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n this._cleanupTransitionEnd = this._renderer.listen(\n this._elementRef.nativeElement,\n 'transitionend',\n this._transitionendHandler\n );\n });\n }\n\n ngOnDestroy() {\n this._cleanupTransitionEnd?.();\n }\n\n private _transitionendHandler = (event: TransitionEvent) => {\n if (\n !event.target ||\n !(event.target as HTMLElement).classList.contains('ngs-progress-bar-primary-bar')\n ) {\n return;\n }\n\n if (this.mode() === 'determinate' || this.mode() === 'buffer') {\n this._ngZone.run(() => this.animationEnd.emit({ value: this.value() }));\n }\n };\n}\n","@if (mode() === 'buffer') {\n <div class=\"ngs-progress-bar-track\"></div>\n <div class=\"ngs-progress-bar-buffer-bar\" [style.transform]=\"bufferBarTransform()\"></div>\n} @else {\n <div class=\"ngs-progress-bar-track\"></div>\n}\n\n<div class=\"ngs-progress-bar-primary-bar\" [style.transform]=\"primaryBarTransform()\">\n <span class=\"ngs-progress-bar-inner\"></span>\n</div>\n\n@if (isIndeterminate()) {\n <div class=\"ngs-progress-bar-secondary-bar\">\n <span class=\"ngs-progress-bar-inner\"></span>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAoCa,WAAW,CAAA;AACL,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAErC,IAAA,KAAK,GAAG,KAAK,CAAS,SAAS,4EAAC;IAChC,KAAK,GAAG,KAAK,CAAC,CAAC,6EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;IAChD,WAAW,GAAG,KAAK,CAAC,CAAC,mFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACtD,IAAA,IAAI,GAAG,KAAK,CAAkB,aAAa,2EAAC;IAE5C,YAAY,GAAG,MAAM,EAE1B;AAEI,IAAA,qBAAqB;AAEpB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AACnE,IAAA,CAAC,sFAAC;AAEO,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,OAAO,UAAU,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;AACrE,IAAA,CAAC,0FAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QAC1C,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAA,CAAA,CAAG;AAC7E,IAAA,CAAC,yFAAC;;AAGO,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;AAClC,IAAA,CAAC,yFAAC;IAEF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAChD,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,eAAe,EACf,IAAI,CAAC,qBAAqB,CAC3B;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,IAAI;IAChC;AAEQ,IAAA,qBAAqB,GAAG,CAAC,KAAsB,KAAI;QACzD,IACE,CAAC,KAAK,CAAC,MAAM;YACb,CAAE,KAAK,CAAC,MAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EACjF;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;YAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE;AACF,IAAA,CAAC;uGA1DU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,4iCCpCxB,mhBAgBA,EAAA,MAAA,EAAA,CAAA,klIAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDoBa,WAAW,EAAA,UAAA,EAAA,CAAA;kBAnBvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,YAClB,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,eAAe,EAAE,GAAG;AACpB,wBAAA,eAAe,EAAE,KAAK;AACtB,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,sBAAsB,EAAE,oCAAoC;AAC5D,wBAAA,aAAa,EAAE,QAAQ;AACvB,wBAAA,OAAO,EAAE,kBAAkB;AAC3B,wBAAA,wCAAwC,EAAE,mBAAmB;AAC7D,wBAAA,kCAAkC,EAAE,SAAS;AAC7C,wBAAA,yCAAyC,EAAE,eAAe;AAC3D,qBAAA,EAAA,QAAA,EAAA,mhBAAA,EAAA,MAAA,EAAA,CAAA,klIAAA,CAAA,EAAA;;;AElCH;;AAEG;;;;"}
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, DestroyRef, NgZone, ElementRef, signal, computed, afterNextRender, effect, input, booleanAttribute, model, forwardRef, ChangeDetectionStrategy, Component, PLATFORM_ID, contentChildren, output, TemplateRef, ViewContainerRef, Directive } from '@angular/core';
2
+ import { InjectionToken, inject, DestroyRef, NgZone, ElementRef, signal, computed, afterNextRender, effect, input, booleanAttribute, model, forwardRef, ChangeDetectionStrategy, Component, contentChildren, output, TemplateRef, ViewContainerRef, Directive } from '@angular/core';
3
3
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { BreakpointObserver } from '@angular/cdk/layout';
5
5
  import { combineLatest, switchMap, of, distinctUntilChanged } from 'rxjs';
6
- import { DOCUMENT } from '@angular/common';
7
6
 
8
7
  const SIDENAV = new InjectionToken('SIDENAV');
9
8
 
@@ -112,8 +111,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
112
111
 
113
112
  class SidenavContainer {
114
113
  _ngZone = inject(NgZone);
115
- _document = inject(DOCUMENT);
116
- _platformId = inject(PLATFORM_ID);
117
114
  _isSettled = signal(false, ...(ngDevMode ? [{ debugName: "_isSettled" }] : /* istanbul ignore next */ []));
118
115
  _sidenavs = contentChildren(Sidenav, { ...(ngDevMode ? { debugName: "_sidenavs" } : /* istanbul ignore next */ {}), descendants: true });
119
116
  backdropClick = output();
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-sidenav.mjs","sources":["../../../projects/components/sidenav/src/types.ts","../../../projects/components/sidenav/src/sidenav/sidenav.ts","../../../projects/components/sidenav/src/sidenav/sidenav.html","../../../projects/components/sidenav/src/sidenav-container/sidenav-container.ts","../../../projects/components/sidenav/src/sidenav-container/sidenav-container.html","../../../projects/components/sidenav/src/sidenav-content/sidenav-content.ts","../../../projects/components/sidenav/src/sidenav-content/sidenav-content.html","../../../projects/components/sidenav/src/sidenav-collapsed.ts","../../../projects/components/sidenav/src/sidenav-expanded.ts","../../../projects/components/sidenav/ngstarter-ui-components-sidenav.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const SIDENAV = new InjectionToken('SIDENAV');\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n afterNextRender,\n signal,\n input,\n model,\n forwardRef,\n effect,\n DestroyRef,\n computed,\n NgZone,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { SIDENAV } from '../types';\nimport { combineLatest, switchMap, of, distinctUntilChanged } from 'rxjs';\n\nexport type SidenavMode = 'over' | 'push' | 'side';\nexport type SidenavPosition = 'start' | 'end';\n\n@Component({\n selector: 'ngs-sidenav',\n exportAs: 'ngsSidenav',\n standalone: true,\n imports: [],\n templateUrl: './sidenav.html',\n styleUrl: './sidenav.scss',\n providers: [\n {\n provide: SIDENAV,\n useExisting: forwardRef(() => Sidenav),\n }\n ],\n host: {\n 'class': 'ngs-sidenav',\n '[class.ngs-sidenav-closed]': '!opened()',\n '[class.ngs-sidenav-opened]': 'opened()',\n '[class.ngs-sidenav-push]': 'effectiveMode() === \"push\"',\n '[class.ngs-sidenav-side]': 'effectiveMode() === \"side\"',\n '[class.ngs-sidenav-over]': 'effectiveMode() === \"over\"',\n '[class.ngs-sidenav-end]': 'position() === \"end\"',\n '[class.is-settled]': '_isSettled()',\n '[class.is-collapsed]': 'collapsed()',\n '[attr.tabindex]': '-1',\n '(mouseenter)': 'isHovered.set(true)',\n '(mouseleave)': 'isHovered.set(false)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Sidenav {\n private _breakpointObserver = inject(BreakpointObserver);\n private _destroyRef = inject(DestroyRef);\n private _ngZone = inject(NgZone);\n _elementRef = inject(ElementRef);\n\n readonly isHovered = signal(false);\n protected _isSettled = signal(false);\n private _isBreakpointMatched = signal(false);\n\n private _previousOpened: boolean | null = null;\n\n /** Indicates whether the sidenav is in mobile (adaptive) mode. */\n isMobile = computed(() => this.adaptive() && this._isBreakpointMatched());\n\n effectiveMode = computed<SidenavMode>(() => {\n if (this.isMobile()) {\n return 'over';\n }\n return this.mode();\n });\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n combineLatest([\n toObservable(this.adaptive),\n toObservable(this.adaptiveBreakpoint)\n ]).pipe(\n switchMap(([adaptive, breakpoint]) => {\n if (!adaptive) {\n return of(false);\n }\n return this._breakpointObserver.observe(breakpoint).pipe(\n switchMap(result => of(result.matches))\n );\n }),\n distinctUntilChanged(),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe((matches) => {\n this._isBreakpointMatched.set(matches);\n if (matches) {\n this._previousOpened = this.opened();\n this.opened.set(false);\n } else {\n if (this._previousOpened !== null) {\n this.opened.set(this._previousOpened);\n this._previousOpened = null;\n }\n }\n });\n\n effect(() => {\n const isOpened = this.opened();\n const isMatched = this._isBreakpointMatched();\n if (!isMatched) {\n this._previousOpened = isOpened;\n }\n });\n }\n\n adaptive = input(true, {\n transform: booleanAttribute\n });\n adaptiveBreakpoint = input('(max-width: 991.98px)');\n opened = model(false);\n fixedWidth = input<number | string | null>(null);\n mode = input<SidenavMode>('over');\n position = input<SidenavPosition>('start');\n collapsed = input(false, {\n transform: booleanAttribute\n });\n disableClose = input(false, {\n transform: booleanAttribute\n });\n\n open(): Promise<void> {\n return this.toggle(true);\n }\n\n close(): Promise<void> {\n return this.toggle(false);\n }\n\n toggle(isOpen: boolean = !this.opened()): Promise<void> {\n this.opened.set(isOpen);\n return Promise.resolve();\n }\n}\n","<ng-content/>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n inject,\n input,\n NgZone,\n afterNextRender,\n signal,\n output,\n PLATFORM_ID,\n ViewEncapsulation\n} from '@angular/core';\nimport { Sidenav } from '../sidenav/sidenav';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n@Component({\n selector: 'ngs-sidenav-container',\n exportAs: 'ngsSidenavContainer',\n standalone: true,\n imports: [],\n templateUrl: './sidenav-container.html',\n styleUrl: './sidenav-container.scss',\n host: {\n 'class': 'ngs-sidenav-container',\n '[class.is-settled]': '_isSettled()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidenavContainer {\n private _ngZone = inject(NgZone);\n private _document = inject(DOCUMENT);\n private _platformId = inject(PLATFORM_ID);\n protected _isSettled = signal(false);\n\n _sidenavs = contentChildren(Sidenav, {descendants: true});\n\n readonly backdropClick = output();\n\n hasBackdrop = input(true, {\n transform: booleanAttribute\n });\n\n autoFocus = input<AutoFocusTarget | string | boolean>(true);\n\n autosize = input(false, {\n transform: booleanAttribute\n });\n\n fixedWidth = input<number | string | null>(null);\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n effect(() => {\n const sidenavs = this._sidenavs();\n sidenavs.forEach(sidenav => {\n if (sidenav.opened()) {\n this._focusSidenav(sidenav);\n }\n });\n });\n }\n\n private _focusSidenav(sidenav: Sidenav): void {\n const autoFocus = this.autoFocus();\n\n if (autoFocus === false) {\n return;\n }\n\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const element = sidenav._elementRef.nativeElement;\n\n if (autoFocus === 'dialog' || autoFocus === true) {\n element.focus();\n } else if (autoFocus === 'first-tabbable') {\n const firstTabbable = element.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n firstTabbable?.focus();\n } else if (typeof autoFocus === 'string' && autoFocus.length > 0) {\n const selectedElement = element.querySelector(autoFocus) as HTMLElement;\n selectedElement?.focus();\n }\n });\n });\n }\n\n _isShowingBackdrop(): boolean {\n const hasAdaptiveOver = this._sidenavs()?.some(sidenav =>\n sidenav.opened() &&\n (sidenav as any).adaptive() &&\n (sidenav as any)._isBreakpointMatched()\n );\n return (this.hasBackdrop() || hasAdaptiveOver) && this._sidenavs()?.some(sidenav => sidenav.opened() && (sidenav as any).effectiveMode() !== 'side');\n }\n\n _onBackdropClicked(): void {\n this.backdropClick.emit();\n this._sidenavs().forEach(sidenav => {\n if (sidenav.opened()) {\n if (!sidenav.disableClose()) {\n sidenav.close();\n }\n }\n });\n }\n\n _getContentMarginLeft(): string {\n if (!this.autosize()) {\n const startSidenav = this._sidenavs()?.find(\n s => s.position() === 'start' && s.opened()\n );\n\n if (startSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (startSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (startSidenav.mode() === 'push' || (startSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n // Logic for autosize would typically involve a MutationObserver or ResizeObserver\n // but the current implementation already uses functions in host bindings which are\n // re-evaluated on change detection.\n const startSidenav = this._sidenavs()?.find(\n s => s.position() === 'start' && s.opened()\n );\n\n if (startSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (startSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (startSidenav.mode() === 'push' || (startSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n\n _getContentMarginRight(): string {\n if (!this.autosize()) {\n const endSidenav = this._sidenavs()?.find(\n s => s.position() === 'end' && s.opened()\n );\n\n if (endSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (endSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (endSidenav.mode() === 'push' || (endSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n const endSidenav = this._sidenavs()?.find(\n s => s.position() === 'end' && s.opened()\n );\n\n if (endSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (endSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (endSidenav.mode() === 'push' || (endSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n}\n","<div class=\"ngs-sidenav-backdrop\"\n [class.ngs-sidenav-shown]=\"_isShowingBackdrop()\"\n (click)=\"_onBackdropClicked()\"></div>\n\n<ng-content select=\"ngs-sidenav\"/>\n<ng-content select=\"ngs-sidenav-content\"/>\n<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n afterNextRender,\n signal,\n NgZone,\n} from '@angular/core';\nimport { SidenavContainer } from '../sidenav-container/sidenav-container';\n\n@Component({\n selector: 'ngs-sidenav-content',\n exportAs: 'ngsSidenavContent',\n standalone: true,\n imports: [],\n templateUrl: './sidenav-content.html',\n styleUrl: './sidenav-content.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-sidenav-content',\n '[class.is-settled]': '_isSettled()',\n '[style.margin-left]': '_container._getContentMarginLeft()',\n '[style.margin-right]': '_container._getContentMarginRight()',\n },\n})\nexport class SidenavContent {\n private _ngZone = inject(NgZone);\n protected _container = inject(SidenavContainer);\n protected _isSettled = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n }\n}\n","<ng-content/>\n","import { Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SIDENAV } from './types';\nimport { Sidenav } from './sidenav/sidenav';\n\n@Directive({\n selector: '[ngsSidenavCollapsed]',\n exportAs: 'ngsSidenavCollapsed',\n standalone: true\n})\nexport class SidenavCollapsed {\n private _templateRef = inject(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _sidenav = inject<Sidenav>(SIDENAV);\n\n constructor() {\n effect(() => {\n const collapsed = this._sidenav.collapsed();\n const hovered = this._sidenav.isHovered();\n\n if (collapsed && !hovered) {\n if (this._viewContainerRef.length === 0) {\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n } else {\n this._viewContainerRef.clear();\n }\n });\n }\n}\n","import { Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SIDENAV } from './types';\nimport { Sidenav } from './sidenav/sidenav';\n\n@Directive({\n selector: '[ngsSidenavExpanded]',\n exportAs: 'ngsSidenavExpanded',\n standalone: true\n})\nexport class SidenavExpanded {\n private _templateRef = inject(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _sidenav = inject<Sidenav>(SIDENAV);\n\n constructor() {\n effect(() => {\n const collapsed = this._sidenav.collapsed();\n const hovered = this._sidenav.isHovered();\n\n if (!collapsed || (collapsed && hovered)) {\n if (this._viewContainerRef.length === 0) {\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n } else {\n this._viewContainerRef.clear();\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-sidenav.mjs","sources":["../../../projects/components/sidenav/src/types.ts","../../../projects/components/sidenav/src/sidenav/sidenav.ts","../../../projects/components/sidenav/src/sidenav/sidenav.html","../../../projects/components/sidenav/src/sidenav-container/sidenav-container.ts","../../../projects/components/sidenav/src/sidenav-container/sidenav-container.html","../../../projects/components/sidenav/src/sidenav-content/sidenav-content.ts","../../../projects/components/sidenav/src/sidenav-content/sidenav-content.html","../../../projects/components/sidenav/src/sidenav-collapsed.ts","../../../projects/components/sidenav/src/sidenav-expanded.ts","../../../projects/components/sidenav/ngstarter-ui-components-sidenav.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const SIDENAV = new InjectionToken('SIDENAV');\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n afterNextRender,\n signal,\n input,\n model,\n forwardRef,\n effect,\n DestroyRef,\n computed,\n NgZone,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { SIDENAV } from '../types';\nimport { combineLatest, switchMap, of, distinctUntilChanged } from 'rxjs';\n\nexport type SidenavMode = 'over' | 'push' | 'side';\nexport type SidenavPosition = 'start' | 'end';\n\n@Component({\n selector: 'ngs-sidenav',\n exportAs: 'ngsSidenav',\n standalone: true,\n imports: [],\n templateUrl: './sidenav.html',\n styleUrl: './sidenav.scss',\n providers: [\n {\n provide: SIDENAV,\n useExisting: forwardRef(() => Sidenav),\n }\n ],\n host: {\n 'class': 'ngs-sidenav',\n '[class.ngs-sidenav-closed]': '!opened()',\n '[class.ngs-sidenav-opened]': 'opened()',\n '[class.ngs-sidenav-push]': 'effectiveMode() === \"push\"',\n '[class.ngs-sidenav-side]': 'effectiveMode() === \"side\"',\n '[class.ngs-sidenav-over]': 'effectiveMode() === \"over\"',\n '[class.ngs-sidenav-end]': 'position() === \"end\"',\n '[class.is-settled]': '_isSettled()',\n '[class.is-collapsed]': 'collapsed()',\n '[attr.tabindex]': '-1',\n '(mouseenter)': 'isHovered.set(true)',\n '(mouseleave)': 'isHovered.set(false)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Sidenav {\n private _breakpointObserver = inject(BreakpointObserver);\n private _destroyRef = inject(DestroyRef);\n private _ngZone = inject(NgZone);\n _elementRef = inject(ElementRef);\n\n readonly isHovered = signal(false);\n protected _isSettled = signal(false);\n private _isBreakpointMatched = signal(false);\n\n private _previousOpened: boolean | null = null;\n\n /** Indicates whether the sidenav is in mobile (adaptive) mode. */\n isMobile = computed(() => this.adaptive() && this._isBreakpointMatched());\n\n effectiveMode = computed<SidenavMode>(() => {\n if (this.isMobile()) {\n return 'over';\n }\n return this.mode();\n });\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n combineLatest([\n toObservable(this.adaptive),\n toObservable(this.adaptiveBreakpoint)\n ]).pipe(\n switchMap(([adaptive, breakpoint]) => {\n if (!adaptive) {\n return of(false);\n }\n return this._breakpointObserver.observe(breakpoint).pipe(\n switchMap(result => of(result.matches))\n );\n }),\n distinctUntilChanged(),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe((matches) => {\n this._isBreakpointMatched.set(matches);\n if (matches) {\n this._previousOpened = this.opened();\n this.opened.set(false);\n } else {\n if (this._previousOpened !== null) {\n this.opened.set(this._previousOpened);\n this._previousOpened = null;\n }\n }\n });\n\n effect(() => {\n const isOpened = this.opened();\n const isMatched = this._isBreakpointMatched();\n if (!isMatched) {\n this._previousOpened = isOpened;\n }\n });\n }\n\n adaptive = input(true, {\n transform: booleanAttribute\n });\n adaptiveBreakpoint = input('(max-width: 991.98px)');\n opened = model(false);\n fixedWidth = input<number | string | null>(null);\n mode = input<SidenavMode>('over');\n position = input<SidenavPosition>('start');\n collapsed = input(false, {\n transform: booleanAttribute\n });\n disableClose = input(false, {\n transform: booleanAttribute\n });\n\n open(): Promise<void> {\n return this.toggle(true);\n }\n\n close(): Promise<void> {\n return this.toggle(false);\n }\n\n toggle(isOpen: boolean = !this.opened()): Promise<void> {\n this.opened.set(isOpen);\n return Promise.resolve();\n }\n}\n","<ng-content/>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n inject,\n input,\n NgZone,\n afterNextRender,\n signal,\n output,\n} from '@angular/core';\nimport { Sidenav } from '../sidenav/sidenav';\n\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n@Component({\n selector: 'ngs-sidenav-container',\n exportAs: 'ngsSidenavContainer',\n standalone: true,\n imports: [],\n templateUrl: './sidenav-container.html',\n styleUrl: './sidenav-container.scss',\n host: {\n 'class': 'ngs-sidenav-container',\n '[class.is-settled]': '_isSettled()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidenavContainer {\n private _ngZone = inject(NgZone);\n protected _isSettled = signal(false);\n\n _sidenavs = contentChildren(Sidenav, {descendants: true});\n\n readonly backdropClick = output();\n\n hasBackdrop = input(true, {\n transform: booleanAttribute\n });\n\n autoFocus = input<AutoFocusTarget | string | boolean>(true);\n\n autosize = input(false, {\n transform: booleanAttribute\n });\n\n fixedWidth = input<number | string | null>(null);\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n effect(() => {\n const sidenavs = this._sidenavs();\n sidenavs.forEach(sidenav => {\n if (sidenav.opened()) {\n this._focusSidenav(sidenav);\n }\n });\n });\n }\n\n private _focusSidenav(sidenav: Sidenav): void {\n const autoFocus = this.autoFocus();\n\n if (autoFocus === false) {\n return;\n }\n\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const element = sidenav._elementRef.nativeElement;\n\n if (autoFocus === 'dialog' || autoFocus === true) {\n element.focus();\n } else if (autoFocus === 'first-tabbable') {\n const firstTabbable = element.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n firstTabbable?.focus();\n } else if (typeof autoFocus === 'string' && autoFocus.length > 0) {\n const selectedElement = element.querySelector(autoFocus) as HTMLElement;\n selectedElement?.focus();\n }\n });\n });\n }\n\n _isShowingBackdrop(): boolean {\n const hasAdaptiveOver = this._sidenavs()?.some(sidenav =>\n sidenav.opened() &&\n (sidenav as any).adaptive() &&\n (sidenav as any)._isBreakpointMatched()\n );\n return (this.hasBackdrop() || hasAdaptiveOver) && this._sidenavs()?.some(sidenav => sidenav.opened() && (sidenav as any).effectiveMode() !== 'side');\n }\n\n _onBackdropClicked(): void {\n this.backdropClick.emit();\n this._sidenavs().forEach(sidenav => {\n if (sidenav.opened()) {\n if (!sidenav.disableClose()) {\n sidenav.close();\n }\n }\n });\n }\n\n _getContentMarginLeft(): string {\n if (!this.autosize()) {\n const startSidenav = this._sidenavs()?.find(\n s => s.position() === 'start' && s.opened()\n );\n\n if (startSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (startSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (startSidenav.mode() === 'push' || (startSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n // Logic for autosize would typically involve a MutationObserver or ResizeObserver\n // but the current implementation already uses functions in host bindings which are\n // re-evaluated on change detection.\n const startSidenav = this._sidenavs()?.find(\n s => s.position() === 'start' && s.opened()\n );\n\n if (startSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (startSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (startSidenav.mode() === 'push' || (startSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n\n _getContentMarginRight(): string {\n if (!this.autosize()) {\n const endSidenav = this._sidenavs()?.find(\n s => s.position() === 'end' && s.opened()\n );\n\n if (endSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (endSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (endSidenav.mode() === 'push' || (endSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n const endSidenav = this._sidenavs()?.find(\n s => s.position() === 'end' && s.opened()\n );\n\n if (endSidenav) {\n if (this.fixedWidth() !== null && this.fixedWidth() !== undefined) {\n return `${parseInt(this.fixedWidth() as string, 10)}px`;\n }\n\n if (endSidenav.collapsed()) {\n return 'var(--ngs-sidenav-collapsed-width)';\n }\n\n if (endSidenav.mode() === 'push' || (endSidenav as any).effectiveMode() === 'side') {\n return 'var(--ngs-sidenav-width)';\n }\n }\n\n return '0px';\n }\n}\n","<div class=\"ngs-sidenav-backdrop\"\n [class.ngs-sidenav-shown]=\"_isShowingBackdrop()\"\n (click)=\"_onBackdropClicked()\"></div>\n\n<ng-content select=\"ngs-sidenav\"/>\n<ng-content select=\"ngs-sidenav-content\"/>\n<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n afterNextRender,\n signal,\n NgZone,\n} from '@angular/core';\nimport { SidenavContainer } from '../sidenav-container/sidenav-container';\n\n@Component({\n selector: 'ngs-sidenav-content',\n exportAs: 'ngsSidenavContent',\n standalone: true,\n imports: [],\n templateUrl: './sidenav-content.html',\n styleUrl: './sidenav-content.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-sidenav-content',\n '[class.is-settled]': '_isSettled()',\n '[style.margin-left]': '_container._getContentMarginLeft()',\n '[style.margin-right]': '_container._getContentMarginRight()',\n },\n})\nexport class SidenavContent {\n private _ngZone = inject(NgZone);\n protected _container = inject(SidenavContainer);\n protected _isSettled = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this._isSettled.set(true);\n }, 100);\n });\n });\n }\n}\n","<ng-content/>\n","import { Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SIDENAV } from './types';\nimport { Sidenav } from './sidenav/sidenav';\n\n@Directive({\n selector: '[ngsSidenavCollapsed]',\n exportAs: 'ngsSidenavCollapsed',\n standalone: true\n})\nexport class SidenavCollapsed {\n private _templateRef = inject(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _sidenav = inject<Sidenav>(SIDENAV);\n\n constructor() {\n effect(() => {\n const collapsed = this._sidenav.collapsed();\n const hovered = this._sidenav.isHovered();\n\n if (collapsed && !hovered) {\n if (this._viewContainerRef.length === 0) {\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n } else {\n this._viewContainerRef.clear();\n }\n });\n }\n}\n","import { Directive, effect, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { SIDENAV } from './types';\nimport { Sidenav } from './sidenav/sidenav';\n\n@Directive({\n selector: '[ngsSidenavExpanded]',\n exportAs: 'ngsSidenavExpanded',\n standalone: true\n})\nexport class SidenavExpanded {\n private _templateRef = inject(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _sidenav = inject<Sidenav>(SIDENAV);\n\n constructor() {\n effect(() => {\n const collapsed = this._sidenav.collapsed();\n const hovered = this._sidenav.isHovered();\n\n if (!collapsed || (collapsed && hovered)) {\n if (this._viewContainerRef.length === 0) {\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n } else {\n this._viewContainerRef.clear();\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, viewChild, inject, ChangeDetectorRef, PLATFORM_ID, signal, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, TemplateRef, Injectable } from '@angular/core';
2
+ import { InjectionToken, viewChild, inject, ChangeDetectorRef, PLATFORM_ID, signal, EventEmitter, ChangeDetectionStrategy, Component, Injector, TemplateRef, Injectable } from '@angular/core';
3
3
  import { Subject } from 'rxjs';
4
4
  import { isPlatformBrowser } from '@angular/common';
5
5
  import { BasePortalOutlet, CdkPortalOutlet, TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
@@ -173,13 +173,13 @@ class SnackBarContainer extends BasePortalOutlet {
173
173
  this._onEnter.complete();
174
174
  }
175
175
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBarContainer, deps: [{ token: SnackBarConfig }], target: i0.ɵɵFactoryTarget.Component });
176
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: SnackBarContainer, isStandalone: true, selector: "ngs-snack-bar-container", host: { classAttribute: "snack-bar-container-host" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, isSignal: true }], exportAs: ["ngsSnackBarContainer"], usesInheritance: true, ngImport: i0, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [".snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}.snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}.snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}.snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){.snack-bar-container .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
176
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: SnackBarContainer, isStandalone: true, selector: "ngs-snack-bar-container", host: { classAttribute: "snack-bar-container-host" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, isSignal: true }], exportAs: ["ngsSnackBarContainer"], usesInheritance: true, ngImport: i0, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [":host .snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}:host .snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}:host .snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}:host .snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}:host .snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){:host .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
177
177
  }
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBarContainer, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'ngs-snack-bar-container', exportAs: 'ngsSnackBarContainer', standalone: true, imports: [CdkPortalOutlet], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
180
+ args: [{ selector: 'ngs-snack-bar-container', exportAs: 'ngsSnackBarContainer', standalone: true, imports: [CdkPortalOutlet], changeDetection: ChangeDetectionStrategy.OnPush, host: {
181
181
  'class': 'snack-bar-container-host'
182
- }, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [".snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}.snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}.snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}.snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){.snack-bar-container .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
182
+ }, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [":host .snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}:host .snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}:host .snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}:host .snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}:host .snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){:host .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
183
183
  }], ctorParameters: () => [{ type: SnackBarConfig }], propDecorators: { _portalOutlet: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkPortalOutlet), { isSignal: true }] }] } });
184
184
 
185
185
  class SimpleSnackBar {
@@ -190,13 +190,13 @@ class SimpleSnackBar {
190
190
  this.snackBarRef.dismiss();
191
191
  }
192
192
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SimpleSnackBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
193
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: SimpleSnackBar, isStandalone: true, selector: "ngs-simple-snack-bar", exportAs: ["ngsSimpleSnackBar"], ngImport: i0, template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-100);border-radius:var(--ngs-radius-xl);padding:0 calc(var(--spacing, .25rem) * 2.5);background:var(--ngs-color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1.5)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: SimpleSnackBar, isStandalone: true, selector: "ngs-simple-snack-bar", exportAs: ["ngsSimpleSnackBar"], ngImport: i0, template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-100);border-radius:.75rem;padding:0 calc(var(--spacing, .25rem) * 3);background:var(--ngs-color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
194
194
  }
195
195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SimpleSnackBar, decorators: [{
196
196
  type: Component,
197
197
  args: [{ selector: 'ngs-simple-snack-bar', exportAs: 'ngsSimpleSnackBar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
198
198
  Button
199
- ], template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-100);border-radius:var(--ngs-radius-xl);padding:0 calc(var(--spacing, .25rem) * 2.5);background:var(--ngs-color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1.5)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
199
+ ], template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-100);border-radius:.75rem;padding:0 calc(var(--spacing, .25rem) * 3);background:var(--ngs-color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
200
200
  }] });
201
201
 
202
202
  class SnackBar {
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-snack-bar.mjs","sources":["../../../projects/components/snack-bar/src/snack-bar/snack-bar-config.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-ref.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.html","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.ts","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.html","../../../projects/components/snack-bar/src/snack-bar/snack-bar.service.ts","../../../projects/components/snack-bar/ngstarter-ui-components-snack-bar.ts"],"sourcesContent":["import { InjectionToken, ViewContainerRef, Injectable } from '@angular/core';\nimport { AriaLivePoliteness } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const SNACK_BAR_DATA = new InjectionToken<any>('SnackBarData');\n\n/** Injection token that can be used to specify default snack bar. */\nexport const SNACK_BAR_CONFIG = new InjectionToken<SnackBarConfig>('SnackBarConfig');\n\n/** Function to provide the snack bar configuration. */\nexport function provideSnackBarConfig(config: SnackBarConfig) {\n return {\n provide: SNACK_BAR_CONFIG,\n useValue: config,\n };\n}\n\nexport type SnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\nexport type SnackBarVerticalPosition = 'top' | 'bottom';\n\nexport class SnackBarConfig<D = any> {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n politeness?: AriaLivePoliteness = 'assertive';\n\n /** Message to be announced by the LiveAnnouncer. */\n announcementMessage?: string = '';\n\n /** The view container that should be used for the snack bar's origin. */\n viewContainerRef?: ViewContainerRef;\n\n /** The duration in milliseconds to wait before automatically closing the snack bar. */\n duration?: number = 0;\n\n /** Extra CSS classes to be added to the snack bar container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the snack bar. */\n direction?: Direction;\n\n /** The horizontal position to place the snack bar. */\n horizontalPosition?: SnackBarHorizontalPosition = 'center';\n\n /** The vertical position to place the snack bar. */\n verticalPosition?: SnackBarVerticalPosition = 'bottom';\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n}\n","import { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Injectable } from '@angular/core';\n\nexport class SnackBarRef<T> {\n /** The instance of the component making up the content of the snack bar. */\n instance!: T;\n\n /** Subject for notifying the user that the snack bar has been dismissed. */\n private readonly _afterDismissed = new Subject<void>();\n\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n constructor(public containerInstance: any, private _overlayRef: OverlayRef) {\n containerInstance._onExit.subscribe(() => {\n this._overlayRef.dispose();\n this._afterDismissed.next();\n this._afterDismissed.complete();\n });\n\n containerInstance._onEnter.subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n }\n\n /** Dismisses the snack bar. */\n dismiss(): void {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n }\n\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed(): Observable<void> {\n return this._afterDismissed.asObservable();\n }\n\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n OnDestroy,\n signal,\n PLATFORM_ID,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig } from '../snack-bar-config';\n\n@Component({\n selector: 'ngs-snack-bar-container',\n exportAs: 'ngsSnackBarContainer',\n templateUrl: './snack-bar-container.html',\n styleUrl: './snack-bar-container.scss',\n standalone: true,\n imports: [CdkPortalOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'snack-bar-container-host'\n }\n})\nexport class SnackBarContainer extends BasePortalOutlet implements OnDestroy {\n readonly _portalOutlet = viewChild.required(CdkPortalOutlet);\n private _cdr = inject(ChangeDetectorRef);\n private _platformId = inject(PLATFORM_ID);\n\n /** State of the snack bar animation. */\n readonly animationState = signal<'void' | 'visible' | 'hidden-top' | 'hidden-bottom'>('void');\n readonly leaving = signal(false);\n\n /** Event emitted when the snack bar exit animation is finished. */\n readonly _onExit = new EventEmitter<void>();\n\n /** Event emitted when the snack bar enter animation is finished. */\n readonly _onEnter = new EventEmitter<void>();\n\n constructor(public snackBarConfig: SnackBarConfig) {\n super();\n if (this.snackBarConfig.verticalPosition === 'top') {\n this.animationState.set('hidden-top');\n } else {\n this.animationState.set('hidden-bottom');\n }\n }\n\n /** Attach a component portal as content to this snack bar container. */\n override attachComponentPortal<T>(portal: ComponentPortal<T>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachComponentPortal(portal);\n }\n\n /** Attach a template portal as content to this snack bar container. */\n override attachTemplatePortal<C>(portal: TemplatePortal<C>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachTemplatePortal(portal);\n }\n\n /** Begin animation of snack bar entrance into view. */\n enter(): void {\n // Ensure we are not in leaving state\n this.leaving.set(false);\n\n if (!isPlatformBrowser(this._platformId)) {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n return;\n }\n\n // Use requestAnimationFrame to ensure the initial state (hidden-top/bottom)\n // is applied to the DOM before we change it to 'visible'.\n // We use two nested requestAnimationFrames to ensure at least one paint cycle has occurred.\n // The first rAF captures the current state, the second one allows for the state to be applied\n // and then triggers the transition.\n requestAnimationFrame(() => {\n // Force a reflow to ensure the initial styles are applied.\n // This is sometimes necessary in addition to rAF in some browsers/environments.\n if (typeof document !== 'undefined' && document.body) {\n void document.body.offsetHeight;\n }\n requestAnimationFrame(() => {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n });\n });\n }\n\n /** Begin animation of snack bar exit from view. */\n exit(): void {\n const initialState = this.animationState();\n const targetState = this.snackBarConfig.verticalPosition === 'top' ? 'hidden-top' : 'hidden-bottom';\n\n if (initialState === targetState) {\n this._onExit.emit();\n return;\n }\n\n // Mark as leaving to use faster transition timing\n this.leaving.set(true);\n this.animationState.set(targetState);\n this._cdr.markForCheck();\n }\n\n /** Handle end of transition. */\n onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName !== 'transform' && event.propertyName !== 'opacity') {\n return;\n }\n const state = this.animationState();\n if (state === 'visible' && event.propertyName === 'transform') {\n this._onEnter.emit();\n } else if ((state === 'hidden-top' || state === 'hidden-bottom')) {\n if (event.propertyName === 'opacity' || event.propertyName === 'transform') {\n this._onExit.emit();\n }\n }\n }\n\n /** Asserts that no content is already attached to the container. */\n private _assertNotAttached() {\n if (this._portalOutlet().hasAttached()) {\n throw Error('Attempting to attach snack bar content after content has already been attached.');\n }\n }\n\n ngOnDestroy() {\n this._onExit.complete();\n this._onEnter.complete();\n }\n}\n","<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SNACK_BAR_DATA } from '../snack-bar-config';\nimport { SnackBarRef } from '../snack-bar-ref';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-simple-snack-bar',\n exportAs: 'ngsSimpleSnackBar',\n templateUrl: './simple-snack-bar.html',\n styleUrl: './simple-snack-bar.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n Button\n ]\n})\nexport class SimpleSnackBar {\n readonly snackBarRef = inject(SnackBarRef);\n readonly data = inject(SNACK_BAR_DATA);\n\n /** Performs the action on the snack bar. */\n action(): void {\n this.snackBarRef.dismiss();\n }\n}\n","<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n TemplateRef,\n Type,\n inject,\n} from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig, SNACK_BAR_DATA, SNACK_BAR_CONFIG } from './snack-bar-config';\nimport { SnackBarRef } from './snack-bar-ref';\nimport { SnackBarContainer } from './snack-bar-container/snack-bar-container';\nimport { SimpleSnackBar } from './simple-snack-bar/simple-snack-bar';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackBar {\n private _overlay = inject(Overlay);\n private _injector = inject(Injector);\n private _parentSnackBar = inject(SnackBar, { optional: true, skipSelf: true });\n private _defaultConfig = inject(SNACK_BAR_CONFIG, { optional: true }) ?? new SnackBarConfig();\n\n /** Reference to the currently-opened snack bar. */\n private _openedSnackBarRef: SnackBarRef<any> | null = null;\n\n /**\n * Opens a snack bar with a message and an optional action.\n */\n open(message: string, action?: string, config?: SnackBarConfig): SnackBarRef<SimpleSnackBar> {\n const _config = { ...this._defaultConfig, ...config };\n _config.data = { message, action };\n\n return this.openFromComponent(SimpleSnackBar, _config);\n }\n\n /**\n * Opens a snack bar with a custom component.\n */\n openFromComponent<T>(component: Type<T>, config?: SnackBarConfig): SnackBarRef<T> {\n return this._attach(component, config) as SnackBarRef<T>;\n }\n\n /**\n * Opens a snack bar with a custom template.\n */\n openFromTemplate(template: TemplateRef<any>, config?: SnackBarConfig): SnackBarRef<any> {\n return this._attach(template, config);\n }\n\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss(): void {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n\n /**\n * Attaches the snack bar container and the appropriate content.\n */\n private _attach<T>(content: Type<T> | TemplateRef<T>, config?: SnackBarConfig): SnackBarRef<T | any> {\n const _config = { ...this._defaultConfig, ...config };\n const overlayRef = this._createOverlay(_config);\n const container = this._attachContainer(overlayRef, _config);\n const snackBarRef = new SnackBarRef<T | any>(container, overlayRef);\n\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null!, {\n $implicit: _config.data,\n snackBarRef,\n } as any);\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(_config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n snackBarRef.instance = contentRef.instance;\n }\n\n // If there is another snack bar already opened, dismiss it before showing the new one.\n if (this._openedSnackBarRef) {\n const oldSnackBarRef = this._openedSnackBarRef;\n oldSnackBarRef.afterDismissed().subscribe(() => {\n container.enter();\n });\n oldSnackBarRef.dismiss();\n } else {\n container.enter();\n }\n\n this._openedSnackBarRef = snackBarRef;\n snackBarRef.afterDismissed().subscribe(() => {\n if (this._openedSnackBarRef === snackBarRef) {\n this._openedSnackBarRef = null;\n }\n });\n\n if (_config.duration && _config.duration > 0) {\n setTimeout(() => snackBarRef.dismiss(), _config.duration);\n }\n\n return snackBarRef;\n }\n\n /**\n * Creates a new overlay and configures it for the snack bar.\n */\n private _createOverlay(config: SnackBarConfig): OverlayRef {\n const overlayConfig = new OverlayConfig({\n direction: config.direction,\n hasBackdrop: false,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n positionStrategy: this._overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n });\n\n // Custom positioning based on config\n const positionStrategy = this._overlay.position().global();\n\n if (config.horizontalPosition === 'start' || config.horizontalPosition === 'left') {\n positionStrategy.left('0');\n } else if (config.horizontalPosition === 'end' || config.horizontalPosition === 'right') {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n\n overlayConfig.positionStrategy = positionStrategy;\n\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Attaches the snack bar container to the overlay.\n */\n private _attachContainer(overlayRef: OverlayRef, config: SnackBarConfig): SnackBarContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: SnackBarConfig, useValue: config }],\n });\n\n const containerPortal = new ComponentPortal(SnackBarContainer, config.viewContainerRef, injector);\n const containerRef: ComponentRef<SnackBarContainer> = overlayRef.attach(containerPortal);\n\n return containerRef.instance;\n }\n\n /**\n * Creates an injector to be used inside of a snack bar component.\n */\n private _createInjector<T>(config: SnackBarConfig, snackBarRef: SnackBarRef<T>): Injector {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [\n { provide: SnackBarRef, useValue: snackBarRef },\n { provide: SNACK_BAR_DATA, useValue: config.data },\n ],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SnackBarConfig"],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-snack-bar.mjs","sources":["../../../projects/components/snack-bar/src/snack-bar/snack-bar-config.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-ref.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.html","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.ts","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.html","../../../projects/components/snack-bar/src/snack-bar/snack-bar.service.ts","../../../projects/components/snack-bar/ngstarter-ui-components-snack-bar.ts"],"sourcesContent":["import { InjectionToken, ViewContainerRef, Injectable } from '@angular/core';\nimport { AriaLivePoliteness } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const SNACK_BAR_DATA = new InjectionToken<any>('SnackBarData');\n\n/** Injection token that can be used to specify default snack bar. */\nexport const SNACK_BAR_CONFIG = new InjectionToken<SnackBarConfig>('SnackBarConfig');\n\n/** Function to provide the snack bar configuration. */\nexport function provideSnackBarConfig(config: SnackBarConfig) {\n return {\n provide: SNACK_BAR_CONFIG,\n useValue: config,\n };\n}\n\nexport type SnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\nexport type SnackBarVerticalPosition = 'top' | 'bottom';\n\nexport class SnackBarConfig<D = any> {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n politeness?: AriaLivePoliteness = 'assertive';\n\n /** Message to be announced by the LiveAnnouncer. */\n announcementMessage?: string = '';\n\n /** The view container that should be used for the snack bar's origin. */\n viewContainerRef?: ViewContainerRef;\n\n /** The duration in milliseconds to wait before automatically closing the snack bar. */\n duration?: number = 0;\n\n /** Extra CSS classes to be added to the snack bar container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the snack bar. */\n direction?: Direction;\n\n /** The horizontal position to place the snack bar. */\n horizontalPosition?: SnackBarHorizontalPosition = 'center';\n\n /** The vertical position to place the snack bar. */\n verticalPosition?: SnackBarVerticalPosition = 'bottom';\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n}\n","import { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Injectable } from '@angular/core';\n\nexport class SnackBarRef<T> {\n /** The instance of the component making up the content of the snack bar. */\n instance!: T;\n\n /** Subject for notifying the user that the snack bar has been dismissed. */\n private readonly _afterDismissed = new Subject<void>();\n\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n constructor(public containerInstance: any, private _overlayRef: OverlayRef) {\n containerInstance._onExit.subscribe(() => {\n this._overlayRef.dispose();\n this._afterDismissed.next();\n this._afterDismissed.complete();\n });\n\n containerInstance._onEnter.subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n }\n\n /** Dismisses the snack bar. */\n dismiss(): void {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n }\n\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed(): Observable<void> {\n return this._afterDismissed.asObservable();\n }\n\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n OnDestroy,\n signal,\n PLATFORM_ID,\n viewChild\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig } from '../snack-bar-config';\n\n@Component({\n selector: 'ngs-snack-bar-container',\n exportAs: 'ngsSnackBarContainer',\n templateUrl: './snack-bar-container.html',\n styleUrl: './snack-bar-container.scss',\n standalone: true,\n imports: [CdkPortalOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'snack-bar-container-host'\n }\n})\nexport class SnackBarContainer extends BasePortalOutlet implements OnDestroy {\n readonly _portalOutlet = viewChild.required(CdkPortalOutlet);\n private _cdr = inject(ChangeDetectorRef);\n private _platformId = inject(PLATFORM_ID);\n\n /** State of the snack bar animation. */\n readonly animationState = signal<'void' | 'visible' | 'hidden-top' | 'hidden-bottom'>('void');\n readonly leaving = signal(false);\n\n /** Event emitted when the snack bar exit animation is finished. */\n readonly _onExit = new EventEmitter<void>();\n\n /** Event emitted when the snack bar enter animation is finished. */\n readonly _onEnter = new EventEmitter<void>();\n\n constructor(public snackBarConfig: SnackBarConfig) {\n super();\n if (this.snackBarConfig.verticalPosition === 'top') {\n this.animationState.set('hidden-top');\n } else {\n this.animationState.set('hidden-bottom');\n }\n }\n\n /** Attach a component portal as content to this snack bar container. */\n override attachComponentPortal<T>(portal: ComponentPortal<T>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachComponentPortal(portal);\n }\n\n /** Attach a template portal as content to this snack bar container. */\n override attachTemplatePortal<C>(portal: TemplatePortal<C>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachTemplatePortal(portal);\n }\n\n /** Begin animation of snack bar entrance into view. */\n enter(): void {\n // Ensure we are not in leaving state\n this.leaving.set(false);\n\n if (!isPlatformBrowser(this._platformId)) {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n return;\n }\n\n // Use requestAnimationFrame to ensure the initial state (hidden-top/bottom)\n // is applied to the DOM before we change it to 'visible'.\n // We use two nested requestAnimationFrames to ensure at least one paint cycle has occurred.\n // The first rAF captures the current state, the second one allows for the state to be applied\n // and then triggers the transition.\n requestAnimationFrame(() => {\n // Force a reflow to ensure the initial styles are applied.\n // This is sometimes necessary in addition to rAF in some browsers/environments.\n if (typeof document !== 'undefined' && document.body) {\n void document.body.offsetHeight;\n }\n requestAnimationFrame(() => {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n });\n });\n }\n\n /** Begin animation of snack bar exit from view. */\n exit(): void {\n const initialState = this.animationState();\n const targetState = this.snackBarConfig.verticalPosition === 'top' ? 'hidden-top' : 'hidden-bottom';\n\n if (initialState === targetState) {\n this._onExit.emit();\n return;\n }\n\n // Mark as leaving to use faster transition timing\n this.leaving.set(true);\n this.animationState.set(targetState);\n this._cdr.markForCheck();\n }\n\n /** Handle end of transition. */\n onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName !== 'transform' && event.propertyName !== 'opacity') {\n return;\n }\n const state = this.animationState();\n if (state === 'visible' && event.propertyName === 'transform') {\n this._onEnter.emit();\n } else if ((state === 'hidden-top' || state === 'hidden-bottom')) {\n if (event.propertyName === 'opacity' || event.propertyName === 'transform') {\n this._onExit.emit();\n }\n }\n }\n\n /** Asserts that no content is already attached to the container. */\n private _assertNotAttached() {\n if (this._portalOutlet().hasAttached()) {\n throw Error('Attempting to attach snack bar content after content has already been attached.');\n }\n }\n\n ngOnDestroy() {\n this._onExit.complete();\n this._onEnter.complete();\n }\n}\n","<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SNACK_BAR_DATA } from '../snack-bar-config';\nimport { SnackBarRef } from '../snack-bar-ref';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-simple-snack-bar',\n exportAs: 'ngsSimpleSnackBar',\n templateUrl: './simple-snack-bar.html',\n styleUrl: './simple-snack-bar.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n Button\n ]\n})\nexport class SimpleSnackBar {\n readonly snackBarRef = inject(SnackBarRef);\n readonly data = inject(SNACK_BAR_DATA);\n\n /** Performs the action on the snack bar. */\n action(): void {\n this.snackBarRef.dismiss();\n }\n}\n","<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n TemplateRef,\n Type,\n inject,\n} from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig, SNACK_BAR_DATA, SNACK_BAR_CONFIG } from './snack-bar-config';\nimport { SnackBarRef } from './snack-bar-ref';\nimport { SnackBarContainer } from './snack-bar-container/snack-bar-container';\nimport { SimpleSnackBar } from './simple-snack-bar/simple-snack-bar';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackBar {\n private _overlay = inject(Overlay);\n private _injector = inject(Injector);\n private _parentSnackBar = inject(SnackBar, { optional: true, skipSelf: true });\n private _defaultConfig = inject(SNACK_BAR_CONFIG, { optional: true }) ?? new SnackBarConfig();\n\n /** Reference to the currently-opened snack bar. */\n private _openedSnackBarRef: SnackBarRef<any> | null = null;\n\n /**\n * Opens a snack bar with a message and an optional action.\n */\n open(message: string, action?: string, config?: SnackBarConfig): SnackBarRef<SimpleSnackBar> {\n const _config = { ...this._defaultConfig, ...config };\n _config.data = { message, action };\n\n return this.openFromComponent(SimpleSnackBar, _config);\n }\n\n /**\n * Opens a snack bar with a custom component.\n */\n openFromComponent<T>(component: Type<T>, config?: SnackBarConfig): SnackBarRef<T> {\n return this._attach(component, config) as SnackBarRef<T>;\n }\n\n /**\n * Opens a snack bar with a custom template.\n */\n openFromTemplate(template: TemplateRef<any>, config?: SnackBarConfig): SnackBarRef<any> {\n return this._attach(template, config);\n }\n\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss(): void {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n\n /**\n * Attaches the snack bar container and the appropriate content.\n */\n private _attach<T>(content: Type<T> | TemplateRef<T>, config?: SnackBarConfig): SnackBarRef<T | any> {\n const _config = { ...this._defaultConfig, ...config };\n const overlayRef = this._createOverlay(_config);\n const container = this._attachContainer(overlayRef, _config);\n const snackBarRef = new SnackBarRef<T | any>(container, overlayRef);\n\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null!, {\n $implicit: _config.data,\n snackBarRef,\n } as any);\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(_config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n snackBarRef.instance = contentRef.instance;\n }\n\n // If there is another snack bar already opened, dismiss it before showing the new one.\n if (this._openedSnackBarRef) {\n const oldSnackBarRef = this._openedSnackBarRef;\n oldSnackBarRef.afterDismissed().subscribe(() => {\n container.enter();\n });\n oldSnackBarRef.dismiss();\n } else {\n container.enter();\n }\n\n this._openedSnackBarRef = snackBarRef;\n snackBarRef.afterDismissed().subscribe(() => {\n if (this._openedSnackBarRef === snackBarRef) {\n this._openedSnackBarRef = null;\n }\n });\n\n if (_config.duration && _config.duration > 0) {\n setTimeout(() => snackBarRef.dismiss(), _config.duration);\n }\n\n return snackBarRef;\n }\n\n /**\n * Creates a new overlay and configures it for the snack bar.\n */\n private _createOverlay(config: SnackBarConfig): OverlayRef {\n const overlayConfig = new OverlayConfig({\n direction: config.direction,\n hasBackdrop: false,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n positionStrategy: this._overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n });\n\n // Custom positioning based on config\n const positionStrategy = this._overlay.position().global();\n\n if (config.horizontalPosition === 'start' || config.horizontalPosition === 'left') {\n positionStrategy.left('0');\n } else if (config.horizontalPosition === 'end' || config.horizontalPosition === 'right') {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n\n overlayConfig.positionStrategy = positionStrategy;\n\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Attaches the snack bar container to the overlay.\n */\n private _attachContainer(overlayRef: OverlayRef, config: SnackBarConfig): SnackBarContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: SnackBarConfig, useValue: config }],\n });\n\n const containerPortal = new ComponentPortal(SnackBarContainer, config.viewContainerRef, injector);\n const containerRef: ComponentRef<SnackBarContainer> = overlayRef.attach(containerPortal);\n\n return containerRef.instance;\n }\n\n /**\n * Creates an injector to be used inside of a snack bar component.\n */\n private _createInjector<T>(config: SnackBarConfig, snackBarRef: SnackBarRef<T>): Injector {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [\n { provide: SnackBarRef, useValue: snackBarRef },\n { provide: SNACK_BAR_DATA, useValue: config.data },\n ],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SnackBarConfig"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, model, input, output, Directive, inject, ChangeDetectorRef, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
2
+ import { InjectionToken, model, input, output, Directive, inject, ChangeDetectorRef, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import { Subject } from 'rxjs';
4
4
 
5
5
  const SORT = new InjectionToken('SORT');
@@ -109,14 +109,14 @@ class SortHeader {
109
109
  return active === this.id() ? direction : 'void';
110
110
  }
111
111
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SortHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: SortHeader, isStandalone: true, selector: "[ngs-sort-header]", inputs: { id: { classPropertyName: "id", publicName: "ngs-sort-header", isSignal: true, isRequired: false, transformFunction: null }, sortActionDescription: { classPropertyName: "sortActionDescription", publicName: "sortActionDescription", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ngs-sort-header-disabled": "_isDisabled()" }, classAttribute: "ngs-sort-header" }, exportAs: ["ngsSortHeader"], ngImport: i0, template: "<div class=\"ngs-sort-header-container\"\n [class.ngs-sort-header-sorted]=\"_isSorted()\">\n <div class=\"ngs-sort-header-button relative\"\n [attr.aria-label]=\"sortActionDescription()\"\n (click)=\"_handleClick()\">\n <ng-content />\n <div class=\"ngs-sort-header-arrow\"\n [class.ngs-sort-header-arrow-asc]=\"_getArrowState() === 'asc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'asc')\"\n [class.ngs-sort-header-arrow-desc]=\"_getArrowState() === 'desc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'desc')\"\n [class.ngs-sort-header-arrow-hint]=\"_getArrowState() === 'void' && !_isDisabled()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" class=\"ngs-sort-header-arrow-svg\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n </div>\n </div>\n</div>\n", styles: [".ngs-sort-header-container{display:flex;align-items:center;cursor:pointer;position:relative;justify-content:flex-start;-webkit-user-select:text;user-select:text}.ngs-sort-header-button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:flex;align-items:center;width:100%;text-align:inherit;justify-content:inherit;-webkit-user-select:text;user-select:text}.ngs-sort-header-arrow{display:flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing, .25rem) * .5);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1)}.ngs-sort-header-arrow.ngs-sort-header-arrow-asc{opacity:1;transform:translateY(0)}.ngs-sort-header-arrow.ngs-sort-header-arrow-desc{opacity:1;transform:translateY(0) rotate(180deg)}.ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}.ngs-sort-header:hover:not(.ngs-sort-header-disabled) .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:.54}.ngs-sort-header-arrow-svg{width:20px;height:20px;fill:currentColor}.ngs-sort-header-disabled,.ngs-sort-header-disabled .ngs-sort-header-button{cursor:default}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: SortHeader, isStandalone: true, selector: "[ngs-sort-header]", inputs: { id: { classPropertyName: "id", publicName: "ngs-sort-header", isSignal: true, isRequired: false, transformFunction: null }, sortActionDescription: { classPropertyName: "sortActionDescription", publicName: "sortActionDescription", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ngs-sort-header-disabled": "_isDisabled()" }, classAttribute: "ngs-sort-header" }, exportAs: ["ngsSortHeader"], ngImport: i0, template: "<div class=\"ngs-sort-header-container\"\n [class.ngs-sort-header-sorted]=\"_isSorted()\">\n <div class=\"ngs-sort-header-button relative\"\n [attr.aria-label]=\"sortActionDescription()\"\n (click)=\"_handleClick()\">\n <ng-content />\n <div class=\"ngs-sort-header-arrow\"\n [class.ngs-sort-header-arrow-asc]=\"_getArrowState() === 'asc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'asc')\"\n [class.ngs-sort-header-arrow-desc]=\"_getArrowState() === 'desc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'desc')\"\n [class.ngs-sort-header-arrow-hint]=\"_getArrowState() === 'void' && !_isDisabled()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" class=\"ngs-sort-header-arrow-svg\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n </div>\n </div>\n</div>\n", styles: [":host .ngs-sort-header-container{display:flex;align-items:center;cursor:pointer;position:relative;justify-content:flex-start;-webkit-user-select:text;user-select:text}:host .ngs-sort-header-button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:flex;align-items:center;width:100%;text-align:inherit;justify-content:inherit;-webkit-user-select:text;user-select:text}:host .ngs-sort-header-arrow{display:flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing, .25rem) * .5);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-asc{opacity:1;transform:translateY(0)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-desc{opacity:1;transform:translateY(0) rotate(180deg)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}:host:hover:not(.ngs-sort-header-disabled) .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:.54}:host .ngs-sort-header-arrow-svg{width:20px;height:20px;fill:currentColor}:host.ngs-sort-header-disabled{cursor:default}:host.ngs-sort-header-disabled .ngs-sort-header-button{cursor:default}:host.ngs-sort-header-disabled:hover .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
113
  }
114
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SortHeader, decorators: [{
115
115
  type: Component,
116
- args: [{ selector: '[ngs-sort-header]', exportAs: 'ngsSortHeader', host: {
116
+ args: [{ selector: '[ngs-sort-header]', exportAs: 'ngsSortHeader', changeDetection: ChangeDetectionStrategy.OnPush, host: {
117
117
  'class': 'ngs-sort-header',
118
118
  '[class.ngs-sort-header-disabled]': '_isDisabled()',
119
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [], template: "<div class=\"ngs-sort-header-container\"\n [class.ngs-sort-header-sorted]=\"_isSorted()\">\n <div class=\"ngs-sort-header-button relative\"\n [attr.aria-label]=\"sortActionDescription()\"\n (click)=\"_handleClick()\">\n <ng-content />\n <div class=\"ngs-sort-header-arrow\"\n [class.ngs-sort-header-arrow-asc]=\"_getArrowState() === 'asc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'asc')\"\n [class.ngs-sort-header-arrow-desc]=\"_getArrowState() === 'desc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'desc')\"\n [class.ngs-sort-header-arrow-hint]=\"_getArrowState() === 'void' && !_isDisabled()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" class=\"ngs-sort-header-arrow-svg\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n </div>\n </div>\n</div>\n", styles: [".ngs-sort-header-container{display:flex;align-items:center;cursor:pointer;position:relative;justify-content:flex-start;-webkit-user-select:text;user-select:text}.ngs-sort-header-button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:flex;align-items:center;width:100%;text-align:inherit;justify-content:inherit;-webkit-user-select:text;user-select:text}.ngs-sort-header-arrow{display:flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing, .25rem) * .5);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1)}.ngs-sort-header-arrow.ngs-sort-header-arrow-asc{opacity:1;transform:translateY(0)}.ngs-sort-header-arrow.ngs-sort-header-arrow-desc{opacity:1;transform:translateY(0) rotate(180deg)}.ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}.ngs-sort-header:hover:not(.ngs-sort-header-disabled) .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:.54}.ngs-sort-header-arrow-svg{width:20px;height:20px;fill:currentColor}.ngs-sort-header-disabled,.ngs-sort-header-disabled .ngs-sort-header-button{cursor:default}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
119
+ }, template: "<div class=\"ngs-sort-header-container\"\n [class.ngs-sort-header-sorted]=\"_isSorted()\">\n <div class=\"ngs-sort-header-button relative\"\n [attr.aria-label]=\"sortActionDescription()\"\n (click)=\"_handleClick()\">\n <ng-content />\n <div class=\"ngs-sort-header-arrow\"\n [class.ngs-sort-header-arrow-asc]=\"_getArrowState() === 'asc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'asc')\"\n [class.ngs-sort-header-arrow-desc]=\"_getArrowState() === 'desc' || (!_isDisabled() && _getArrowState() === 'void' && _getNextSortDirection() === 'desc')\"\n [class.ngs-sort-header-arrow-hint]=\"_getArrowState() === 'void' && !_isDisabled()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" class=\"ngs-sort-header-arrow-svg\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n </div>\n </div>\n</div>\n", styles: [":host .ngs-sort-header-container{display:flex;align-items:center;cursor:pointer;position:relative;justify-content:flex-start;-webkit-user-select:text;user-select:text}:host .ngs-sort-header-button{border:none;background:transparent;padding:0;font:inherit;color:inherit;cursor:pointer;display:flex;align-items:center;width:100%;text-align:inherit;justify-content:inherit;-webkit-user-select:text;user-select:text}:host .ngs-sort-header-arrow{display:flex;align-items:center;justify-content:center;margin-left:calc(var(--spacing, .25rem) * .5);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-asc{opacity:1;transform:translateY(0)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-desc{opacity:1;transform:translateY(0) rotate(180deg)}:host .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}:host:hover:not(.ngs-sort-header-disabled) .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:.54}:host .ngs-sort-header-arrow-svg{width:20px;height:20px;fill:currentColor}:host.ngs-sort-header-disabled{cursor:default}:host.ngs-sort-header-disabled .ngs-sort-header-button{cursor:default}:host.ngs-sort-header-disabled:hover .ngs-sort-header-arrow.ngs-sort-header-arrow-hint{opacity:0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
120
120
  }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngs-sort-header", required: false }] }], sortActionDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortActionDescription", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
121
121
 
122
122
  class SortModule {