@ngstarter-ui/components 21.0.23 → 21.0.24

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.
@@ -1,6 +1,6 @@
1
1
  import { isPlatformBrowser } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, input, output, signal, computed, inject, PLATFORM_ID, ElementRef, DestroyRef, effect, untracked, afterEveryRender, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChildren, forwardRef, Directive } from '@angular/core';
3
+ import { InjectionToken, input, output, signal, computed, inject, PLATFORM_ID, ElementRef, DestroyRef, effect, untracked, afterEveryRender, ChangeDetectionStrategy, Component, contentChildren, forwardRef, Directive } from '@angular/core';
4
4
 
5
5
  let staticCapable;
6
6
  let prefersReducedMotion;
@@ -677,14 +677,14 @@ class DigitRoller {
677
677
  return ghost;
678
678
  }
679
679
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRoller, deps: [], target: i0.ɵɵFactoryTarget.Component });
680
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DigitRoller, isStandalone: true, selector: "ngs-digit-roller", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locales: { classPropertyName: "locales", publicName: "locales", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, opacityDuration: { classPropertyName: "opacityDuration", publicName: "opacityDuration", isSignal: true, isRequired: false, transformFunction: null }, transformTiming: { classPropertyName: "transformTiming", publicName: "transformTiming", isSignal: true, isRequired: false, transformFunction: null }, spinTiming: { classPropertyName: "spinTiming", publicName: "spinTiming", isSignal: true, isRequired: false, transformFunction: null }, opacityTiming: { classPropertyName: "opacityTiming", publicName: "opacityTiming", isSignal: true, isRequired: false, transformFunction: null }, spinEasing: { classPropertyName: "spinEasing", publicName: "spinEasing", isSignal: true, isRequired: false, transformFunction: null }, flipEasing: { classPropertyName: "flipEasing", publicName: "flipEasing", isSignal: true, isRequired: false, transformFunction: null }, trend: { classPropertyName: "trend", publicName: "trend", isSignal: true, isRequired: false, transformFunction: null }, continuous: { classPropertyName: "continuous", publicName: "continuous", isSignal: true, isRequired: false, transformFunction: null }, digits: { classPropertyName: "digits", publicName: "digits", isSignal: true, isRequired: false, transformFunction: null }, respectMotionPreference: { classPropertyName: "respectMotionPreference", publicName: "respectMotionPreference", isSignal: true, isRequired: false, transformFunction: null }, stagger: { classPropertyName: "stagger", publicName: "stagger", isSignal: true, isRequired: false, transformFunction: null }, colorOnIncrease: { classPropertyName: "colorOnIncrease", publicName: "colorOnIncrease", isSignal: true, isRequired: false, transformFunction: null }, colorOnDecrease: { classPropertyName: "colorOnDecrease", publicName: "colorOnDecrease", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationsStart: "animationsStart", animationsFinish: "animationsFinish" }, host: { properties: { "attr.data-animated": "animated()" }, classAttribute: "ngs-digit-roller" }, exportAs: ["ngsDigitRoller"], ngImport: i0, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}ngs-digit-roller{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}ngs-digit-roller .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}ngs-digit-roller .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}ngs-digit-roller .ngs-digit-roller__section{display:inline-flex;align-items:baseline}ngs-digit-roller .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}ngs-digit-roller .ngs-digit-roller__digit,ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal,ngs-digit-roller .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}ngs-digit-roller .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal{display:inline-block}ngs-digit-roller .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit-number,ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit,ngs-digit-roller[data-animated=false] .ngs-digit-roller__separator,ngs-digit-roller[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
680
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DigitRoller, isStandalone: true, selector: "ngs-digit-roller", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locales: { classPropertyName: "locales", publicName: "locales", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, opacityDuration: { classPropertyName: "opacityDuration", publicName: "opacityDuration", isSignal: true, isRequired: false, transformFunction: null }, transformTiming: { classPropertyName: "transformTiming", publicName: "transformTiming", isSignal: true, isRequired: false, transformFunction: null }, spinTiming: { classPropertyName: "spinTiming", publicName: "spinTiming", isSignal: true, isRequired: false, transformFunction: null }, opacityTiming: { classPropertyName: "opacityTiming", publicName: "opacityTiming", isSignal: true, isRequired: false, transformFunction: null }, spinEasing: { classPropertyName: "spinEasing", publicName: "spinEasing", isSignal: true, isRequired: false, transformFunction: null }, flipEasing: { classPropertyName: "flipEasing", publicName: "flipEasing", isSignal: true, isRequired: false, transformFunction: null }, trend: { classPropertyName: "trend", publicName: "trend", isSignal: true, isRequired: false, transformFunction: null }, continuous: { classPropertyName: "continuous", publicName: "continuous", isSignal: true, isRequired: false, transformFunction: null }, digits: { classPropertyName: "digits", publicName: "digits", isSignal: true, isRequired: false, transformFunction: null }, respectMotionPreference: { classPropertyName: "respectMotionPreference", publicName: "respectMotionPreference", isSignal: true, isRequired: false, transformFunction: null }, stagger: { classPropertyName: "stagger", publicName: "stagger", isSignal: true, isRequired: false, transformFunction: null }, colorOnIncrease: { classPropertyName: "colorOnIncrease", publicName: "colorOnIncrease", isSignal: true, isRequired: false, transformFunction: null }, colorOnDecrease: { classPropertyName: "colorOnDecrease", publicName: "colorOnDecrease", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationsStart: "animationsStart", animationsFinish: "animationsFinish" }, host: { properties: { "attr.data-animated": "animated()" }, classAttribute: "ngs-digit-roller" }, exportAs: ["ngsDigitRoller"], ngImport: i0, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}:host{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}:host .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}:host .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}:host .ngs-digit-roller__section{display:inline-flex;align-items:baseline}:host .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}:host .ngs-digit-roller__digit,:host .ngs-digit-roller__separator,:host .ngs-digit-roller__literal,:host .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}:host .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}:host .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}:host .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}:host .ngs-digit-roller__separator,:host .ngs-digit-roller__literal{display:inline-block}:host .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}:host[data-animated=false] .ngs-digit-roller__digit-number,:host[data-animated=false] .ngs-digit-roller__digit,:host[data-animated=false] .ngs-digit-roller__separator,:host[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
681
681
  }
682
682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DigitRoller, decorators: [{
683
683
  type: Component,
684
- args: [{ selector: 'ngs-digit-roller', exportAs: 'ngsDigitRoller', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
684
+ args: [{ selector: 'ngs-digit-roller', exportAs: 'ngsDigitRoller', changeDetection: ChangeDetectionStrategy.OnPush, host: {
685
685
  class: 'ngs-digit-roller',
686
686
  '[attr.data-animated]': 'animated()',
687
- }, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}ngs-digit-roller{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}ngs-digit-roller .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}ngs-digit-roller .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}ngs-digit-roller .ngs-digit-roller__section{display:inline-flex;align-items:baseline}ngs-digit-roller .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}ngs-digit-roller .ngs-digit-roller__digit,ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal,ngs-digit-roller .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}ngs-digit-roller .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}ngs-digit-roller .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}ngs-digit-roller .ngs-digit-roller__separator,ngs-digit-roller .ngs-digit-roller__literal{display:inline-block}ngs-digit-roller .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit-number,ngs-digit-roller[data-animated=false] .ngs-digit-roller__digit,ngs-digit-roller[data-animated=false] .ngs-digit-roller__separator,ngs-digit-roller[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
687
+ }, template: "<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n", styles: ["@layer properties;@property --_ngs-digit-roller-d{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --_ngs-digit-roller-d-opacity{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-d-width{syntax: \"<number>\"; inherits: false; initial-value: 0;}@property --_ngs-digit-roller-dx{syntax: \"<length>\"; inherits: true; initial-value: 0px;}:host{--ngs-digit-roller-mask-height: .25em;--ngs-digit-roller-mask-width: .5em;--ngs-digit-roller-min-digit-width: .6em;display:inline-block;position:relative;direction:ltr;isolation:isolate;line-height:1;white-space:nowrap}:host .ngs-digit-roller__number{--_ngs-digit-roller-width: 1;--_ngs-digit-roller-scale-x: calc( 1 + var(--_ngs-digit-roller-d-width) / var(--_ngs-digit-roller-width) );--_ngs-digit-roller-half-mask-height: round( nearest, calc(var(--ngs-digit-roller-mask-height) / 2), 1px );--_ngs-digit-roller-resolved-mask-height: calc(var(--_ngs-digit-roller-half-mask-height) * 2);--_ngs-digit-roller-scaled-mask-width: calc( var(--ngs-digit-roller-mask-width) / var(--_ngs-digit-roller-scale-x) );display:inline-block;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";position:relative;transform-origin:left top;transform:translate(var(--_ngs-digit-roller-dx)) scaleX(var(--_ngs-digit-roller-scale-x));margin:0 calc(-1 * var(--ngs-digit-roller-mask-width));-webkit-mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);mask-image:linear-gradient(to right,transparent 0,#000 var(--_ngs-digit-roller-scaled-mask-width),#000 calc(100% - var(--_ngs-digit-roller-scaled-mask-width)),transparent 100%),linear-gradient(to bottom,transparent 0,#000 var(--_ngs-digit-roller-resolved-mask-height),#000 calc(100% - var(--_ngs-digit-roller-resolved-mask-height)),transparent 100%),radial-gradient(at bottom right,#000 0,transparent 71%),radial-gradient(at bottom left,#000 0,transparent 71%),radial-gradient(at top left,#000 0,transparent 71%),radial-gradient(at top right,#000 0,transparent 71%);-webkit-mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);mask-size:100% calc(100% - var(--_ngs-digit-roller-resolved-mask-height) * 2),calc(100% - var(--_ngs-digit-roller-scaled-mask-width) * 2) 100%,var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height),var(--_ngs-digit-roller-scaled-mask-width) var(--_ngs-digit-roller-resolved-mask-height);-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}:host .ngs-digit-roller__number-inner{display:inline-flex;align-items:baseline;padding:var(--_ngs-digit-roller-half-mask-height) var(--ngs-digit-roller-mask-width);transform-origin:left top;transform:scaleX(calc(1 / var(--_ngs-digit-roller-scale-x))) translate(calc(-1 * var(--_ngs-digit-roller-dx)))}:host .ngs-digit-roller__section{display:inline-flex;align-items:baseline}:host .ngs-digit-roller__digit{display:inline-block;position:relative;height:calc(1em + var(--_ngs-digit-roller-resolved-mask-height, .25em));clip-path:inset(0 -.2em);vertical-align:top;--_ngs-digit-roller-c: var(--_ngs-digit-roller-current, 0) + var(--_ngs-digit-roller-d);--_ngs-digit-roller-len: 10}:host .ngs-digit-roller__digit,:host .ngs-digit-roller__separator,:host .ngs-digit-roller__literal,:host .ngs-digit-roller__ghost{opacity:calc(1 + var(--_ngs-digit-roller-d-opacity, 0))}:host .ngs-digit-roller__digit-number{display:inline-block;height:1em;line-height:1;text-align:center;min-width:var(--ngs-digit-roller-min-digit-width);padding:var(--_ngs-digit-roller-half-mask-height, .125em) 0;box-sizing:content-box;--_ngs-digit-roller-offset-raw: mod( var(--_ngs-digit-roller-len) + var(--_ngs-digit-roller-n) - mod(var(--_ngs-digit-roller-c), var(--_ngs-digit-roller-len)), var(--_ngs-digit-roller-len) );--_ngs-digit-roller-offset: calc( var(--_ngs-digit-roller-offset-raw) - var(--_ngs-digit-roller-len) * round(down, var(--_ngs-digit-roller-offset-raw) / (var(--_ngs-digit-roller-len) / 2), 1) );--_ngs-digit-roller-y: clamp(-100%, var(--_ngs-digit-roller-offset) * 100%, 100%);transform:translateY(var(--_ngs-digit-roller-y))}:host .ngs-digit-roller__digit-number[inert]{position:absolute;top:0;left:50%;transform:translate(-50%) translateY(var(--_ngs-digit-roller-y))}:host .ngs-digit-roller__digit:not(.ngs-digit-roller__digit--spinning) .ngs-digit-roller__digit-number[inert]{display:none}:host .ngs-digit-roller__separator,:host .ngs-digit-roller__literal{display:inline-block}:host .ngs-digit-roller__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}:host[data-animated=false] .ngs-digit-roller__digit-number,:host[data-animated=false] .ngs-digit-roller__digit,:host[data-animated=false] .ngs-digit-roller__separator,:host[data-animated=false] .ngs-digit-roller__literal{transition:none!important;animation:none!important}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){:root,:host{--_ngs-digit-roller-d: 0;--_ngs-digit-roller-dx: 0px}*,:before,:after,::backdrop{--_ngs-digit-roller-d-opacity: 0;--_ngs-digit-roller-d-width: 0}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
688
688
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], locales: [{ type: i0.Input, args: [{ isSignal: true, alias: "locales", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], opacityDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "opacityDuration", required: false }] }], transformTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "transformTiming", required: false }] }], spinTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinTiming", required: false }] }], opacityTiming: [{ type: i0.Input, args: [{ isSignal: true, alias: "opacityTiming", required: false }] }], spinEasing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinEasing", required: false }] }], flipEasing: [{ type: i0.Input, args: [{ isSignal: true, alias: "flipEasing", required: false }] }], trend: [{ type: i0.Input, args: [{ isSignal: true, alias: "trend", required: false }] }], continuous: [{ type: i0.Input, args: [{ isSignal: true, alias: "continuous", required: false }] }], digits: [{ type: i0.Input, args: [{ isSignal: true, alias: "digits", required: false }] }], respectMotionPreference: [{ type: i0.Input, args: [{ isSignal: true, alias: "respectMotionPreference", required: false }] }], stagger: [{ type: i0.Input, args: [{ isSignal: true, alias: "stagger", required: false }] }], colorOnIncrease: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorOnIncrease", required: false }] }], colorOnDecrease: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorOnDecrease", required: false }] }], animationsStart: [{ type: i0.Output, args: ["animationsStart"] }], animationsFinish: [{ type: i0.Output, args: ["animationsFinish"] }] } });
689
689
 
690
690
  class DigitRollerGroupDirective {
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-digit-roller.mjs","sources":["../../../projects/components/digit-roller/src/digit-roller-capabilities.ts","../../../projects/components/digit-roller/src/digit-roller-formatter.ts","../../../projects/components/digit-roller/src/digit-roller-group.token.ts","../../../projects/components/digit-roller/src/digit-roller.types.ts","../../../projects/components/digit-roller/src/digit-roller/digit-roller.ts","../../../projects/components/digit-roller/src/digit-roller/digit-roller.html","../../../projects/components/digit-roller/src/digit-roller-group.directive.ts","../../../projects/components/digit-roller/ngstarter-ui-components-digit-roller.ts"],"sourcesContent":["export interface DigitRollerCapabilityOptions {\n respectMotionPreference?: boolean;\n}\n\nlet staticCapable: boolean | undefined;\nlet prefersReducedMotion: boolean | undefined;\n\nfunction isStaticallyCapable(): boolean {\n if (staticCapable !== undefined) {\n return staticCapable;\n }\n\n staticCapable =\n typeof window !== 'undefined' &&\n typeof window.CSS !== 'undefined' &&\n typeof window.Element !== 'undefined' &&\n typeof window.Element.prototype.animate === 'function' &&\n typeof window.CSS.registerProperty === 'function' &&\n window.CSS.supports('width', 'calc(mod(2, 10) * 1px)') &&\n supportsLinearEasing();\n\n return staticCapable;\n}\n\nfunction getPrefersReducedMotion(): boolean {\n if (prefersReducedMotion !== undefined) {\n return prefersReducedMotion;\n }\n\n if (typeof window === 'undefined' || !window.matchMedia) {\n return false;\n }\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n prefersReducedMotion = mediaQuery.matches;\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', (event) => {\n prefersReducedMotion = event.matches;\n });\n }\n\n return prefersReducedMotion;\n}\n\nexport function resetDigitRollerCapabilityCache(): void {\n staticCapable = undefined;\n prefersReducedMotion = undefined;\n}\n\nexport function canAnimateDigitRoller(options: DigitRollerCapabilityOptions = {}): boolean {\n if (!isStaticallyCapable()) {\n return false;\n }\n\n return options.respectMotionPreference === false || !getPrefersReducedMotion();\n}\n\nfunction supportsLinearEasing(): boolean {\n try {\n document.createElement('div').animate({ opacity: 0 }, { easing: 'linear(0, 1)' });\n return true;\n } catch {\n return false;\n }\n}\n","import {\n DigitRollerFormattedNumber,\n DigitRollerNumberPart,\n} from './digit-roller.types';\n\nconst PRE_TYPES = new Set(['currency', 'literal', 'minusSign', 'plusSign', 'nan', 'infinity']);\nconst POST_TYPES = new Set(['percentSign', 'unit']);\n\nconst formatterCache = new Map<string, Intl.NumberFormat>();\n\nfunction getCachedFormatter(\n locales: string | string[] | undefined,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = JSON.stringify(locales) + ':' + JSON.stringify(options);\n let formatter = formatterCache.get(key);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locales, options);\n formatterCache.set(key, formatter);\n }\n\n return formatter;\n}\n\nexport interface DigitRollerGlyph {\n value: number;\n glyph: string;\n}\n\nexport function getDigitRollerGlyphs(\n locales?: string | string[],\n options: Intl.NumberFormatOptions = {},\n): DigitRollerGlyph[] {\n const formatter = getCachedFormatter(locales, {\n numberingSystem: options.numberingSystem,\n useGrouping: false,\n maximumFractionDigits: 0,\n });\n\n return Array.from({ length: 10 }, (_, value) => ({\n value,\n glyph: formatter.format(value),\n }));\n}\n\nfunction getDigitValueMap(\n locales?: string | string[],\n options: Intl.NumberFormatOptions = {},\n): Map<string, number> {\n return new Map(getDigitRollerGlyphs(locales, options).map(({ glyph, value }) => [glyph, value]));\n}\n\nexport function formatDigitRollerValue(\n value: number,\n options: Intl.NumberFormatOptions = {},\n locales?: string | string[],\n prefix = '',\n suffix = '',\n): DigitRollerFormattedNumber {\n const formatter = getCachedFormatter(locales, options);\n const digitValues = getDigitValueMap(locales, options);\n const parts = formatter.formatToParts(value);\n\n const pre: DigitRollerNumberPart[] = [];\n const rawInteger: Intl.NumberFormatPart[] = [];\n const fraction: DigitRollerNumberPart[] = [];\n const post: DigitRollerNumberPart[] = [];\n\n let seenInteger = false;\n let seenDecimal = false;\n\n for (const part of parts) {\n if (part.type === 'integer' || part.type === 'group') {\n seenInteger = true;\n rawInteger.push(part);\n } else if (part.type === 'decimal' || part.type === 'fraction') {\n seenDecimal = true;\n fraction.push({ type: part.type, value: part.value, key: '' });\n } else if (!seenInteger && PRE_TYPES.has(part.type)) {\n pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });\n } else if (seenInteger && POST_TYPES.has(part.type)) {\n post.push({ type: part.type, value: part.value, key: `post-${post.length}` });\n } else if (seenDecimal || seenInteger) {\n post.push({ type: part.type, value: part.value, key: `post-${post.length}` });\n } else {\n pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });\n }\n }\n\n if (prefix) {\n pre.unshift({ type: 'prefix', value: prefix, key: '__prefix' });\n }\n\n if (suffix) {\n post.push({ type: 'suffix', value: suffix, key: '__suffix' });\n }\n\n const splitInteger: Intl.NumberFormatPart[] = [];\n for (const part of rawInteger) {\n if (part.type === 'integer') {\n for (const char of part.value) {\n splitInteger.push({ type: 'integer', value: char });\n }\n } else {\n splitInteger.push(part);\n }\n }\n\n let digitIndex = 0;\n const reversedInteger: DigitRollerNumberPart[] = [];\n for (let i = splitInteger.length - 1; i >= 0; i--) {\n const part = splitInteger[i];\n if (part.type === 'integer') {\n reversedInteger.push({\n type: 'integer',\n value: part.value,\n key: `i${digitIndex}`,\n numericValue: digitValues.get(part.value) ?? Number(part.value),\n });\n digitIndex++;\n } else {\n reversedInteger.push({ type: 'group', value: part.value, key: `g${digitIndex}` });\n }\n }\n\n let fractionDigitIndex = 0;\n const keyedFraction: DigitRollerNumberPart[] = [];\n for (const part of fraction) {\n if (part.type === 'fraction') {\n for (const char of part.value) {\n keyedFraction.push({\n type: 'fraction',\n value: char,\n key: `f${++fractionDigitIndex}`,\n numericValue: digitValues.get(char) ?? Number(char),\n });\n }\n } else {\n keyedFraction.push({ ...part, key: 'decimal' });\n }\n }\n\n return { pre, integer: reversedInteger.reverse(), fraction: keyedFraction, post };\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface DigitRollerGroupMember {\n canGroupAnimateNow(): boolean;\n prepareGroupedUpdate(): void;\n queueGroupedAnimation(): void;\n}\n\nexport interface DigitRollerGroupCoordinator {\n requestGroupedUpdate(member: DigitRollerGroupMember, applyUpdate: () => void): boolean;\n}\n\nexport const DIGIT_ROLLER_GROUP = new InjectionToken<DigitRollerGroupCoordinator>('DIGIT_ROLLER_GROUP');\n","export interface DigitRollerNumberPart {\n type: string;\n value: string;\n key: string;\n numericValue?: number;\n}\n\nexport interface DigitRollerFormattedNumber {\n pre: DigitRollerNumberPart[];\n integer: DigitRollerNumberPart[];\n fraction: DigitRollerNumberPart[];\n post: DigitRollerNumberPart[];\n}\n\nexport const DIGIT_ROLLER_EMPTY_FORMATTED: DigitRollerFormattedNumber = {\n pre: [],\n integer: [],\n fraction: [],\n post: [],\n};\n\nexport type DigitRollerTrend = number | ((oldValue: number, value: number) => number);\n\nexport type DigitRollerTiming = Omit<KeyframeAnimationOptions, 'composite'>;\n\nexport type DigitRollerEasing = 'default' | 'spring' | 'overshoot' | (string & {});\n\nexport interface DigitRollerDigitConfig {\n max?: number;\n}\n\nexport type DigitRollerDigits = Record<number, DigitRollerDigitConfig>;\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { canAnimateDigitRoller } from '../digit-roller-capabilities';\nimport { getDigitRollerGlyphs, formatDigitRollerValue } from '../digit-roller-formatter';\nimport { DIGIT_ROLLER_GROUP } from '../digit-roller-group.token';\nimport {\n DIGIT_ROLLER_EMPTY_FORMATTED,\n DigitRollerDigits,\n DigitRollerEasing,\n DigitRollerFormattedNumber,\n DigitRollerTiming,\n DigitRollerTrend,\n} from '../digit-roller.types';\n\nconst SPIN_EASING =\n 'linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,' +\n '.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,' +\n '.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,' +\n '.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,' +\n '.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,' +\n '.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)';\n\nconst EASING_PRESETS: Record<string, string> = {\n default: SPIN_EASING,\n spring: SPIN_EASING,\n overshoot: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n};\n\n@Component({\n selector: 'ngs-digit-roller',\n exportAs: 'ngsDigitRoller',\n templateUrl: './digit-roller.html',\n styleUrl: './digit-roller.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-digit-roller',\n '[attr.data-animated]': 'animated()',\n },\n})\nexport class DigitRoller {\n value = input.required<number>();\n format = input<Intl.NumberFormatOptions>({});\n locales = input<string | string[] | undefined>(undefined);\n prefix = input('');\n suffix = input('');\n animated = input(true);\n\n duration = input<number | undefined>(undefined);\n opacityDuration = input<number | undefined>(undefined);\n transformTiming = input<DigitRollerTiming | undefined>(undefined);\n spinTiming = input<DigitRollerTiming | undefined>(undefined);\n opacityTiming = input<DigitRollerTiming | undefined>(undefined);\n\n spinEasing = input<DigitRollerEasing | undefined>(undefined);\n flipEasing = input<DigitRollerEasing | undefined>(undefined);\n trend = input<DigitRollerTrend | undefined>(undefined);\n\n continuous = input(false);\n digits = input<DigitRollerDigits>({});\n respectMotionPreference = input(true);\n stagger = input(0);\n colorOnIncrease = input<string | undefined>(undefined);\n colorOnDecrease = input<string | undefined>(undefined);\n\n animationsStart = output<void>();\n animationsFinish = output<void>();\n\n protected data = signal<DigitRollerFormattedNumber>(DIGIT_ROLLER_EMPTY_FORMATTED);\n protected digitGlyphs = computed(() => getDigitRollerGlyphs(this.locales(), this.format()));\n protected formattedPlainText = computed(() =>\n new Intl.NumberFormat(this.locales(), this.format()).format(this.value()),\n );\n protected effectiveSettings = computed(() => {\n const duration = this.duration() ?? 900;\n\n return {\n duration,\n opacityDuration: this.opacityDuration() ?? 450,\n spinEasing: this.resolveEasing(this.spinEasing()),\n flipEasing: this.resolveEasing(this.flipEasing()),\n transformTiming: this.transformTiming(),\n spinTiming: this.spinTiming(),\n opacityTiming: this.opacityTiming(),\n };\n });\n\n private platformId = inject(PLATFORM_ID);\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private destroyRef = inject(DestroyRef);\n private group = inject(DIGIT_ROLLER_GROUP, { optional: true });\n\n private prevRects = new Map<string, DOMRect>();\n private prevInnerHTML = new Map<string, string>();\n private prevDigitD = new Map<string, string>();\n private prevDigitCurrent = new Map<string, string>();\n private prevDigitValues = new Map<string, number>();\n private prevDigitOrder: string[] = [];\n private prevNumberLeft = 0;\n private prevNumberWidth = 0;\n private prevNumericValue = 0;\n\n private animCount = 0;\n private pending = false;\n private destroyed = false;\n private hasRenderedValue = false;\n private liveAnimations: Animation[] = [];\n private spinCount = new Map<HTMLElement, number>();\n private animationsFinishAbort?: AbortController;\n private pendingCanAnimate = false;\n private pendingHostFont = '';\n private pendingHostColor = '';\n private pendingKeyedEls: Array<{ el: HTMLElement; key: string; newRect: DOMRect }> = [];\n private pendingNumberRect: DOMRect | null = null;\n private pendingNumberOffsetWidth = 0;\n private isNearViewport = true;\n private viewportObserver?: IntersectionObserver;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.animationsFinishAbort?.abort();\n this.viewportObserver?.disconnect();\n\n for (const animation of this.liveAnimations) {\n try {\n animation.cancel();\n } catch {\n /* Animation cancellation can throw AbortError in some browsers. */\n }\n }\n\n this.liveAnimations = [];\n });\n\n effect(() => {\n const value = this.value();\n const format = this.format();\n const locales = this.locales();\n const prefix = this.prefix();\n const suffix = this.suffix();\n\n if (!this.hasRenderedValue) {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.prevNumericValue = value;\n this.hasRenderedValue = true;\n return;\n }\n\n const canAnimateThisUpdate =\n isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();\n\n if (canAnimateThisUpdate) {\n const handledByGroup = this.group?.requestGroupedUpdate(this, () => {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n });\n\n if (handledByGroup) {\n return;\n }\n\n this.snapshot();\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.pending = true;\n } else {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.prevNumericValue = value;\n }\n });\n\n if (isPlatformBrowser(this.platformId)) {\n if (typeof IntersectionObserver !== 'undefined') {\n this.viewportObserver = new IntersectionObserver(\n (entries) => {\n this.isNearViewport = entries[entries.length - 1].isIntersecting;\n },\n { rootMargin: '240px' },\n );\n this.viewportObserver.observe(this.elementRef.nativeElement);\n }\n\n afterEveryRender({\n earlyRead: () => {\n if (this.pending) {\n this.readAnimationState();\n }\n },\n write: () => {\n if (this.pending) {\n this.pending = false;\n this.fireAnimations();\n }\n },\n });\n }\n }\n\n canGroupAnimateNow(): boolean {\n return isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();\n }\n\n prepareGroupedUpdate(): void {\n this.snapshot();\n }\n\n queueGroupedAnimation(): void {\n this.pending = true;\n }\n\n private snapshot(): void {\n const host = this.elementRef.nativeElement;\n this.prevRects.clear();\n this.prevInnerHTML.clear();\n this.prevDigitD.clear();\n this.prevDigitCurrent.clear();\n this.prevDigitValues.clear();\n this.prevDigitOrder = [];\n\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n if (number) {\n const numberRect = number.getBoundingClientRect();\n this.prevNumberLeft = numberRect.left;\n this.prevNumberWidth = numberRect.width;\n }\n\n untracked(() => {\n [...this.data().integer, ...this.data().fraction].forEach((part) => {\n if (part.type === 'integer' || part.type === 'fraction') {\n this.prevDigitValues.set(part.key, this.getPartDigitValue(part));\n this.prevDigitOrder.push(part.key);\n }\n });\n });\n\n host.querySelectorAll<HTMLElement>('[data-key]').forEach((element) => {\n const key = element.getAttribute('data-key')!;\n this.prevRects.set(key, element.getBoundingClientRect());\n this.prevInnerHTML.set(key, element.innerHTML);\n\n if (element.classList.contains('ngs-digit-roller__digit')) {\n const styles = getComputedStyle(element);\n this.prevDigitD.set(key, styles.getPropertyValue('--_ngs-digit-roller-d').trim() || '0');\n this.prevDigitCurrent.set(\n key,\n (element.style.getPropertyValue('--_ngs-digit-roller-current') || '0').trim(),\n );\n }\n });\n }\n\n private readAnimationState(): void {\n if (this.destroyed || !this.canAnimateNow()) {\n this.pendingCanAnimate = false;\n return;\n }\n\n this.pendingCanAnimate = true;\n const host = this.elementRef.nativeElement;\n const hostStyles = getComputedStyle(host);\n\n this.pendingHostFont = hostStyles.font;\n this.pendingHostColor = hostStyles.color;\n this.pendingKeyedEls = [];\n\n host.querySelectorAll<HTMLElement>('[data-key]').forEach((element) => {\n this.pendingKeyedEls.push({\n el: element,\n key: element.getAttribute('data-key')!,\n newRect: element.getBoundingClientRect(),\n });\n });\n\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n this.pendingNumberRect = number ? number.getBoundingClientRect() : null;\n this.pendingNumberOffsetWidth = number ? number.offsetWidth : 0;\n }\n\n private fireAnimations(): void {\n if (this.destroyed) {\n return;\n }\n\n const host = this.elementRef.nativeElement;\n const newNumericValue = untracked(() => this.value());\n\n if (!this.pendingCanAnimate) {\n this.prevNumericValue = newNumericValue;\n return;\n }\n\n const settings = this.effectiveSettings();\n const duration = settings.duration;\n const opacityDuration = settings.opacityDuration;\n const trend = this.resolveTrend(this.prevNumericValue, newNumericValue);\n const staggerMs = this.stagger();\n\n const baseTransformTiming = settings.transformTiming ?? {\n duration,\n easing: settings.flipEasing,\n };\n const spinOptions: KeyframeAnimationOptions = {\n ...baseTransformTiming,\n easing: settings.spinEasing,\n ...(settings.spinTiming ?? {}),\n duration: settings.spinTiming?.duration ?? baseTransformTiming.duration,\n fill: 'none',\n composite: 'accumulate',\n };\n const flipOptions: KeyframeAnimationOptions = {\n ...baseTransformTiming,\n duration: baseTransformTiming.duration,\n fill: 'none',\n composite: 'accumulate',\n };\n const fadeOptions: KeyframeAnimationOptions = {\n duration: opacityDuration,\n easing: 'ease-out',\n fill: 'none',\n composite: 'accumulate',\n ...(settings.opacityTiming ?? {}),\n };\n\n const continuousStartPosition =\n this.continuous() && duration > 0 && trend !== 0 ? this.getContinuousStartPosition() : undefined;\n\n const batch: Animation[] = [];\n const newKeys = new Set<string>();\n let elementIndex = 0;\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n\n for (const { el, key, newRect } of this.pendingKeyedEls) {\n newKeys.add(key);\n const prevRect = this.prevRects.get(key);\n const staggerDelay = staggerMs > 0 ? elementIndex * staggerMs : 0;\n elementIndex++;\n\n if (el.classList.contains('ngs-digit-roller__digit')) {\n const digit = this.getDigitValue(key);\n const fromDigit = this.prevDigitValues.has(key) ? this.prevDigitValues.get(key)! : 0;\n const rawDelta = this.getTrendDelta(fromDigit, digit, trend, this.getDigitLength(key));\n const digitPosition = this.getDigitPosition(key);\n const isLowerUnchanged =\n this.continuous() &&\n rawDelta === 0 &&\n continuousStartPosition !== undefined &&\n digitPosition !== undefined &&\n continuousStartPosition >= digitPosition;\n const delta = isLowerUnchanged ? this.getDigitLength(key) * trend : rawDelta;\n\n if (delta !== 0 && duration > 0) {\n this.incrementSpin(el);\n const animation = el.animate(\n { '--_ngs-digit-roller-d': [-delta, 0] } as PropertyIndexedKeyframes,\n spinOptions,\n );\n batch.push(animation);\n animation.finished.then(() => this.decrementSpin(el)).catch(() => this.decrementSpin(el));\n }\n\n this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);\n } else {\n this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);\n }\n }\n\n let exitIndex = 0;\n this.prevRects.forEach((rect, key) => {\n if (newKeys.has(key)) {\n return;\n }\n\n const ghost = this.buildGhost(key, rect, this.pendingHostFont, this.pendingHostColor);\n host.appendChild(ghost);\n ghost.style.setProperty('--_ngs-digit-roller-d-opacity', '-0.999');\n\n const staggerDelay = staggerMs > 0 ? exitIndex * staggerMs : 0;\n exitIndex++;\n\n const animation = ghost.animate(\n { '--_ngs-digit-roller-d-opacity': [0.999, 0] } as PropertyIndexedKeyframes,\n this.addStaggerDelay(fadeOptions, staggerDelay),\n );\n batch.push(animation);\n animation.finished.then(() => ghost.remove()).catch(() => ghost.remove());\n });\n\n if (number && this.pendingNumberRect) {\n const rect = this.pendingNumberRect;\n const dx = this.prevNumberLeft - rect.left;\n const width = rect.width || this.pendingNumberOffsetWidth;\n const dWidth = this.prevNumberWidth - width;\n\n number.style.setProperty('--_ngs-digit-roller-width', String(width || this.prevNumberWidth || 1));\n\n if (Math.abs(dx) > 0.5 || Math.abs(dWidth) > 0.5) {\n batch.push(\n number.animate(\n {\n '--_ngs-digit-roller-dx': [`${dx}px`, '0px'],\n '--_ngs-digit-roller-d-width': [dWidth, 0],\n } as PropertyIndexedKeyframes,\n flipOptions,\n ),\n );\n }\n }\n\n if (duration > 0) {\n const colorIncrease = this.colorOnIncrease();\n const colorDecrease = this.colorOnDecrease();\n\n if (trend > 0 && colorIncrease) {\n batch.push(\n host.animate([{ color: colorIncrease }, { color: '' }], {\n duration: Math.max(duration, 400),\n easing: 'ease-out',\n fill: 'none',\n }),\n );\n } else if (trend < 0 && colorDecrease) {\n batch.push(\n host.animate([{ color: colorDecrease }, { color: '' }], {\n duration: Math.max(duration, 400),\n easing: 'ease-out',\n fill: 'none',\n }),\n );\n }\n }\n\n this.prevNumericValue = newNumericValue;\n\n if (batch.length === 0) {\n return;\n }\n\n this.liveAnimations.push(...batch);\n this.animCount++;\n\n if (this.animationsFinishAbort) {\n this.animationsFinishAbort.abort();\n } else {\n this.animationsStart.emit();\n }\n\n const finishController = new AbortController();\n this.animationsFinishAbort = finishController;\n\n Promise.allSettled(batch.map((animation) => animation.finished)).then(() => {\n const batchSet = new Set(batch);\n this.liveAnimations = this.liveAnimations.filter((animation) => !batchSet.has(animation));\n this.animCount--;\n\n if (this.animCount === 0 && !this.destroyed && this.animationsFinishAbort) {\n this.animationsFinish.emit();\n this.animationsFinishAbort = undefined;\n }\n });\n }\n\n private animatePositionOrFade(\n element: HTMLElement,\n prevRect: DOMRect | undefined,\n newRect: DOMRect,\n flipOptions: KeyframeAnimationOptions,\n fadeOptions: KeyframeAnimationOptions,\n staggerDelay: number,\n batch: Animation[],\n ): void {\n if (prevRect) {\n const dx = prevRect.left - newRect.left;\n\n if (Math.abs(dx) > 0.5) {\n batch.push(\n element.animate(\n [{ transform: `translateX(${dx}px)` }, { transform: 'translateX(0)' }],\n flipOptions,\n ),\n );\n }\n } else {\n batch.push(\n element.animate(\n { '--_ngs-digit-roller-d-opacity': [-0.9999, 0] } as PropertyIndexedKeyframes,\n this.addStaggerDelay(fadeOptions, staggerDelay),\n ),\n );\n }\n }\n\n private getDigitValue(key: string): number {\n const part = [...this.data().integer, ...this.data().fraction].find((item) => item.key === key);\n return part ? this.getPartDigitValue(part) : 0;\n }\n\n private getPartDigitValue(part: { value: string; numericValue?: number }): number {\n return part.numericValue ?? Number(part.value);\n }\n\n private resolveTrend(oldValue: number, newValue: number): number {\n const configured = this.trend();\n const trend =\n typeof configured === 'function'\n ? configured(oldValue, newValue)\n : (configured ?? Math.sign(newValue - oldValue));\n return Math.sign(trend);\n }\n\n private canAnimateNow(): boolean {\n const host = this.elementRef.nativeElement;\n\n return (\n canAnimateDigitRoller({ respectMotionPreference: this.respectMotionPreference() }) &&\n this.animated() &&\n host.ownerDocument.visibilityState === 'visible' &&\n this.isHostNearViewport(host)\n );\n }\n\n private isHostNearViewport(host: HTMLElement): boolean {\n if (this.viewportObserver) {\n return this.isNearViewport;\n }\n\n const rect = host.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n return false;\n }\n\n const windowRef = host.ownerDocument.defaultView;\n if (!windowRef) {\n return true;\n }\n\n const margin = 240;\n return (\n rect.bottom >= -margin &&\n rect.right >= -margin &&\n rect.top <= windowRef.innerHeight + margin &&\n rect.left <= windowRef.innerWidth + margin\n );\n }\n\n private resolveEasing(easing: DigitRollerEasing | undefined): string {\n return easing ? (EASING_PRESETS[easing] ?? easing) : SPIN_EASING;\n }\n\n private getContinuousStartPosition(): number | undefined {\n const current = new Map<string, number>();\n const currentOrder: string[] = [];\n\n untracked(() => {\n [...this.data().integer, ...this.data().fraction].forEach((part) => {\n if (part.type === 'integer' || part.type === 'fraction') {\n current.set(part.key, this.getPartDigitValue(part));\n currentOrder.push(part.key);\n }\n });\n });\n\n const firstChangedPrev = this.prevDigitOrder.find(\n (key) => current.get(key) !== this.prevDigitValues.get(key),\n );\n const firstChangedCurrent = currentOrder.find(\n (key) => current.get(key) !== this.prevDigitValues.get(key),\n );\n const start = Math.max(\n this.getDigitPosition(firstChangedPrev) ?? -Infinity,\n this.getDigitPosition(firstChangedCurrent) ?? -Infinity,\n );\n\n return Number.isFinite(start) ? start : undefined;\n }\n\n private getDigitPosition(key?: string): number | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.startsWith('i')) {\n return Number(key.slice(1));\n }\n\n if (key.startsWith('f')) {\n return -Number(key.slice(1));\n }\n\n return undefined;\n }\n\n private getDigitLength(key: string): number {\n if (!key.startsWith('i')) {\n return 10;\n }\n\n const position = Number(key.slice(1));\n const max = this.digits()[position]?.max;\n return max !== undefined ? max + 1 : 10;\n }\n\n protected digitLengthForKey(key: string): number {\n return this.getDigitLength(key);\n }\n\n protected digitGlyphsForKey(key: string): { value: number; glyph: string }[] {\n return this.digitGlyphs().slice(0, this.getDigitLength(key));\n }\n\n private addStaggerDelay(\n options: KeyframeAnimationOptions,\n staggerDelay: number,\n ): KeyframeAnimationOptions {\n const currentDelay = typeof options.delay === 'number' ? options.delay : 0;\n return { ...options, delay: currentDelay + staggerDelay };\n }\n\n private getTrendDelta(from: number, to: number, trend: number, length = 10): number {\n const diff = to - from;\n const resolvedTrend = trend || Math.sign(diff);\n\n if (resolvedTrend > 0 && to < from) {\n return length - from + to;\n }\n\n if (resolvedTrend < 0 && to > from) {\n return to - length - from;\n }\n\n return diff;\n }\n\n private incrementSpin(element: HTMLElement): void {\n const count = (this.spinCount.get(element) ?? 0) + 1;\n this.spinCount.set(element, count);\n\n if (count === 1) {\n element.classList.add('ngs-digit-roller__digit--spinning');\n }\n }\n\n private decrementSpin(element: HTMLElement): void {\n const count = Math.max(0, (this.spinCount.get(element) ?? 1) - 1);\n\n if (count === 0) {\n this.spinCount.delete(element);\n element.classList.remove('ngs-digit-roller__digit--spinning');\n } else {\n this.spinCount.set(element, count);\n }\n }\n\n private buildGhost(key: string, rect: DOMRect, font: string, color: string): HTMLElement {\n const ghost = document.createElement('span');\n ghost.style.cssText =\n `position:fixed;left:${rect.left}px;top:${rect.top}px;` +\n `width:${rect.width}px;height:${rect.height}px;` +\n `pointer-events:none;overflow:hidden;display:inline-flex;` +\n `align-items:center;font:${font};color:${color}`;\n ghost.className = 'ngs-digit-roller__ghost';\n\n const savedHTML = this.prevInnerHTML.get(key);\n if (savedHTML) {\n ghost.innerHTML = savedHTML;\n\n const savedD = this.prevDigitD.get(key);\n const savedCurrent = this.prevDigitCurrent.get(key);\n\n if (savedD !== undefined) {\n ghost.style.setProperty('--_ngs-digit-roller-d', savedD);\n }\n\n if (savedCurrent !== undefined) {\n ghost.style.setProperty('--_ngs-digit-roller-current', savedCurrent);\n }\n\n ghost.querySelectorAll<HTMLElement>('[inert]').forEach((element) => {\n element.style.display = 'none';\n });\n }\n\n return ghost;\n }\n}\n","<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n","import { contentChildren, Directive, forwardRef } from '@angular/core';\nimport { DigitRoller } from './digit-roller/digit-roller';\nimport {\n DIGIT_ROLLER_GROUP,\n DigitRollerGroupCoordinator,\n DigitRollerGroupMember,\n} from './digit-roller-group.token';\n\n@Directive({\n selector: '[ngsDigitRollerGroup]',\n providers: [\n {\n provide: DIGIT_ROLLER_GROUP,\n useExisting: forwardRef(() => DigitRollerGroupDirective),\n },\n ],\n})\nexport class DigitRollerGroupDirective implements DigitRollerGroupCoordinator {\n private children = contentChildren(DigitRoller, { descendants: true });\n private pendingUpdates = new Map<DigitRollerGroupMember, () => void>();\n private flushQueued = false;\n\n requestGroupedUpdate(member: DigitRollerGroupMember, applyUpdate: () => void): boolean {\n if (!member.canGroupAnimateNow()) {\n return false;\n }\n\n this.pendingUpdates.set(member, applyUpdate);\n\n if (!this.flushQueued) {\n this.flushQueued = true;\n queueMicrotask(() => this.flushGroupedUpdates());\n }\n\n return true;\n }\n\n private flushGroupedUpdates(): void {\n this.flushQueued = false;\n\n if (this.pendingUpdates.size === 0) {\n return;\n }\n\n const members = this.children().filter((child) => child.canGroupAnimateNow());\n\n for (const member of members) {\n member.prepareGroupedUpdate();\n }\n\n for (const applyUpdate of this.pendingUpdates.values()) {\n applyUpdate();\n }\n\n this.pendingUpdates.clear();\n\n for (const member of members) {\n member.queueGroupedAnimation();\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-digit-roller.mjs","sources":["../../../projects/components/digit-roller/src/digit-roller-capabilities.ts","../../../projects/components/digit-roller/src/digit-roller-formatter.ts","../../../projects/components/digit-roller/src/digit-roller-group.token.ts","../../../projects/components/digit-roller/src/digit-roller.types.ts","../../../projects/components/digit-roller/src/digit-roller/digit-roller.ts","../../../projects/components/digit-roller/src/digit-roller/digit-roller.html","../../../projects/components/digit-roller/src/digit-roller-group.directive.ts","../../../projects/components/digit-roller/ngstarter-ui-components-digit-roller.ts"],"sourcesContent":["export interface DigitRollerCapabilityOptions {\n respectMotionPreference?: boolean;\n}\n\nlet staticCapable: boolean | undefined;\nlet prefersReducedMotion: boolean | undefined;\n\nfunction isStaticallyCapable(): boolean {\n if (staticCapable !== undefined) {\n return staticCapable;\n }\n\n staticCapable =\n typeof window !== 'undefined' &&\n typeof window.CSS !== 'undefined' &&\n typeof window.Element !== 'undefined' &&\n typeof window.Element.prototype.animate === 'function' &&\n typeof window.CSS.registerProperty === 'function' &&\n window.CSS.supports('width', 'calc(mod(2, 10) * 1px)') &&\n supportsLinearEasing();\n\n return staticCapable;\n}\n\nfunction getPrefersReducedMotion(): boolean {\n if (prefersReducedMotion !== undefined) {\n return prefersReducedMotion;\n }\n\n if (typeof window === 'undefined' || !window.matchMedia) {\n return false;\n }\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n prefersReducedMotion = mediaQuery.matches;\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', (event) => {\n prefersReducedMotion = event.matches;\n });\n }\n\n return prefersReducedMotion;\n}\n\nexport function resetDigitRollerCapabilityCache(): void {\n staticCapable = undefined;\n prefersReducedMotion = undefined;\n}\n\nexport function canAnimateDigitRoller(options: DigitRollerCapabilityOptions = {}): boolean {\n if (!isStaticallyCapable()) {\n return false;\n }\n\n return options.respectMotionPreference === false || !getPrefersReducedMotion();\n}\n\nfunction supportsLinearEasing(): boolean {\n try {\n document.createElement('div').animate({ opacity: 0 }, { easing: 'linear(0, 1)' });\n return true;\n } catch {\n return false;\n }\n}\n","import {\n DigitRollerFormattedNumber,\n DigitRollerNumberPart,\n} from './digit-roller.types';\n\nconst PRE_TYPES = new Set(['currency', 'literal', 'minusSign', 'plusSign', 'nan', 'infinity']);\nconst POST_TYPES = new Set(['percentSign', 'unit']);\n\nconst formatterCache = new Map<string, Intl.NumberFormat>();\n\nfunction getCachedFormatter(\n locales: string | string[] | undefined,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = JSON.stringify(locales) + ':' + JSON.stringify(options);\n let formatter = formatterCache.get(key);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locales, options);\n formatterCache.set(key, formatter);\n }\n\n return formatter;\n}\n\nexport interface DigitRollerGlyph {\n value: number;\n glyph: string;\n}\n\nexport function getDigitRollerGlyphs(\n locales?: string | string[],\n options: Intl.NumberFormatOptions = {},\n): DigitRollerGlyph[] {\n const formatter = getCachedFormatter(locales, {\n numberingSystem: options.numberingSystem,\n useGrouping: false,\n maximumFractionDigits: 0,\n });\n\n return Array.from({ length: 10 }, (_, value) => ({\n value,\n glyph: formatter.format(value),\n }));\n}\n\nfunction getDigitValueMap(\n locales?: string | string[],\n options: Intl.NumberFormatOptions = {},\n): Map<string, number> {\n return new Map(getDigitRollerGlyphs(locales, options).map(({ glyph, value }) => [glyph, value]));\n}\n\nexport function formatDigitRollerValue(\n value: number,\n options: Intl.NumberFormatOptions = {},\n locales?: string | string[],\n prefix = '',\n suffix = '',\n): DigitRollerFormattedNumber {\n const formatter = getCachedFormatter(locales, options);\n const digitValues = getDigitValueMap(locales, options);\n const parts = formatter.formatToParts(value);\n\n const pre: DigitRollerNumberPart[] = [];\n const rawInteger: Intl.NumberFormatPart[] = [];\n const fraction: DigitRollerNumberPart[] = [];\n const post: DigitRollerNumberPart[] = [];\n\n let seenInteger = false;\n let seenDecimal = false;\n\n for (const part of parts) {\n if (part.type === 'integer' || part.type === 'group') {\n seenInteger = true;\n rawInteger.push(part);\n } else if (part.type === 'decimal' || part.type === 'fraction') {\n seenDecimal = true;\n fraction.push({ type: part.type, value: part.value, key: '' });\n } else if (!seenInteger && PRE_TYPES.has(part.type)) {\n pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });\n } else if (seenInteger && POST_TYPES.has(part.type)) {\n post.push({ type: part.type, value: part.value, key: `post-${post.length}` });\n } else if (seenDecimal || seenInteger) {\n post.push({ type: part.type, value: part.value, key: `post-${post.length}` });\n } else {\n pre.push({ type: part.type, value: part.value, key: `pre-${pre.length}` });\n }\n }\n\n if (prefix) {\n pre.unshift({ type: 'prefix', value: prefix, key: '__prefix' });\n }\n\n if (suffix) {\n post.push({ type: 'suffix', value: suffix, key: '__suffix' });\n }\n\n const splitInteger: Intl.NumberFormatPart[] = [];\n for (const part of rawInteger) {\n if (part.type === 'integer') {\n for (const char of part.value) {\n splitInteger.push({ type: 'integer', value: char });\n }\n } else {\n splitInteger.push(part);\n }\n }\n\n let digitIndex = 0;\n const reversedInteger: DigitRollerNumberPart[] = [];\n for (let i = splitInteger.length - 1; i >= 0; i--) {\n const part = splitInteger[i];\n if (part.type === 'integer') {\n reversedInteger.push({\n type: 'integer',\n value: part.value,\n key: `i${digitIndex}`,\n numericValue: digitValues.get(part.value) ?? Number(part.value),\n });\n digitIndex++;\n } else {\n reversedInteger.push({ type: 'group', value: part.value, key: `g${digitIndex}` });\n }\n }\n\n let fractionDigitIndex = 0;\n const keyedFraction: DigitRollerNumberPart[] = [];\n for (const part of fraction) {\n if (part.type === 'fraction') {\n for (const char of part.value) {\n keyedFraction.push({\n type: 'fraction',\n value: char,\n key: `f${++fractionDigitIndex}`,\n numericValue: digitValues.get(char) ?? Number(char),\n });\n }\n } else {\n keyedFraction.push({ ...part, key: 'decimal' });\n }\n }\n\n return { pre, integer: reversedInteger.reverse(), fraction: keyedFraction, post };\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface DigitRollerGroupMember {\n canGroupAnimateNow(): boolean;\n prepareGroupedUpdate(): void;\n queueGroupedAnimation(): void;\n}\n\nexport interface DigitRollerGroupCoordinator {\n requestGroupedUpdate(member: DigitRollerGroupMember, applyUpdate: () => void): boolean;\n}\n\nexport const DIGIT_ROLLER_GROUP = new InjectionToken<DigitRollerGroupCoordinator>('DIGIT_ROLLER_GROUP');\n","export interface DigitRollerNumberPart {\n type: string;\n value: string;\n key: string;\n numericValue?: number;\n}\n\nexport interface DigitRollerFormattedNumber {\n pre: DigitRollerNumberPart[];\n integer: DigitRollerNumberPart[];\n fraction: DigitRollerNumberPart[];\n post: DigitRollerNumberPart[];\n}\n\nexport const DIGIT_ROLLER_EMPTY_FORMATTED: DigitRollerFormattedNumber = {\n pre: [],\n integer: [],\n fraction: [],\n post: [],\n};\n\nexport type DigitRollerTrend = number | ((oldValue: number, value: number) => number);\n\nexport type DigitRollerTiming = Omit<KeyframeAnimationOptions, 'composite'>;\n\nexport type DigitRollerEasing = 'default' | 'spring' | 'overshoot' | (string & {});\n\nexport interface DigitRollerDigitConfig {\n max?: number;\n}\n\nexport type DigitRollerDigits = Record<number, DigitRollerDigitConfig>;\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterEveryRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n} from '@angular/core';\nimport { canAnimateDigitRoller } from '../digit-roller-capabilities';\nimport { getDigitRollerGlyphs, formatDigitRollerValue } from '../digit-roller-formatter';\nimport { DIGIT_ROLLER_GROUP } from '../digit-roller-group.token';\nimport {\n DIGIT_ROLLER_EMPTY_FORMATTED,\n DigitRollerDigits,\n DigitRollerEasing,\n DigitRollerFormattedNumber,\n DigitRollerTiming,\n DigitRollerTrend,\n} from '../digit-roller.types';\n\nconst SPIN_EASING =\n 'linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,' +\n '.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,' +\n '.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,' +\n '.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,' +\n '.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,' +\n '.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)';\n\nconst EASING_PRESETS: Record<string, string> = {\n default: SPIN_EASING,\n spring: SPIN_EASING,\n overshoot: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n};\n\n@Component({\n selector: 'ngs-digit-roller',\n exportAs: 'ngsDigitRoller',\n templateUrl: './digit-roller.html',\n styleUrl: './digit-roller.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngs-digit-roller',\n '[attr.data-animated]': 'animated()',\n },\n})\nexport class DigitRoller {\n value = input.required<number>();\n format = input<Intl.NumberFormatOptions>({});\n locales = input<string | string[] | undefined>(undefined);\n prefix = input('');\n suffix = input('');\n animated = input(true);\n\n duration = input<number | undefined>(undefined);\n opacityDuration = input<number | undefined>(undefined);\n transformTiming = input<DigitRollerTiming | undefined>(undefined);\n spinTiming = input<DigitRollerTiming | undefined>(undefined);\n opacityTiming = input<DigitRollerTiming | undefined>(undefined);\n\n spinEasing = input<DigitRollerEasing | undefined>(undefined);\n flipEasing = input<DigitRollerEasing | undefined>(undefined);\n trend = input<DigitRollerTrend | undefined>(undefined);\n\n continuous = input(false);\n digits = input<DigitRollerDigits>({});\n respectMotionPreference = input(true);\n stagger = input(0);\n colorOnIncrease = input<string | undefined>(undefined);\n colorOnDecrease = input<string | undefined>(undefined);\n\n animationsStart = output<void>();\n animationsFinish = output<void>();\n\n protected data = signal<DigitRollerFormattedNumber>(DIGIT_ROLLER_EMPTY_FORMATTED);\n protected digitGlyphs = computed(() => getDigitRollerGlyphs(this.locales(), this.format()));\n protected formattedPlainText = computed(() =>\n new Intl.NumberFormat(this.locales(), this.format()).format(this.value()),\n );\n protected effectiveSettings = computed(() => {\n const duration = this.duration() ?? 900;\n\n return {\n duration,\n opacityDuration: this.opacityDuration() ?? 450,\n spinEasing: this.resolveEasing(this.spinEasing()),\n flipEasing: this.resolveEasing(this.flipEasing()),\n transformTiming: this.transformTiming(),\n spinTiming: this.spinTiming(),\n opacityTiming: this.opacityTiming(),\n };\n });\n\n private platformId = inject(PLATFORM_ID);\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private destroyRef = inject(DestroyRef);\n private group = inject(DIGIT_ROLLER_GROUP, { optional: true });\n\n private prevRects = new Map<string, DOMRect>();\n private prevInnerHTML = new Map<string, string>();\n private prevDigitD = new Map<string, string>();\n private prevDigitCurrent = new Map<string, string>();\n private prevDigitValues = new Map<string, number>();\n private prevDigitOrder: string[] = [];\n private prevNumberLeft = 0;\n private prevNumberWidth = 0;\n private prevNumericValue = 0;\n\n private animCount = 0;\n private pending = false;\n private destroyed = false;\n private hasRenderedValue = false;\n private liveAnimations: Animation[] = [];\n private spinCount = new Map<HTMLElement, number>();\n private animationsFinishAbort?: AbortController;\n private pendingCanAnimate = false;\n private pendingHostFont = '';\n private pendingHostColor = '';\n private pendingKeyedEls: Array<{ el: HTMLElement; key: string; newRect: DOMRect }> = [];\n private pendingNumberRect: DOMRect | null = null;\n private pendingNumberOffsetWidth = 0;\n private isNearViewport = true;\n private viewportObserver?: IntersectionObserver;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.animationsFinishAbort?.abort();\n this.viewportObserver?.disconnect();\n\n for (const animation of this.liveAnimations) {\n try {\n animation.cancel();\n } catch {\n /* Animation cancellation can throw AbortError in some browsers. */\n }\n }\n\n this.liveAnimations = [];\n });\n\n effect(() => {\n const value = this.value();\n const format = this.format();\n const locales = this.locales();\n const prefix = this.prefix();\n const suffix = this.suffix();\n\n if (!this.hasRenderedValue) {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.prevNumericValue = value;\n this.hasRenderedValue = true;\n return;\n }\n\n const canAnimateThisUpdate =\n isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();\n\n if (canAnimateThisUpdate) {\n const handledByGroup = this.group?.requestGroupedUpdate(this, () => {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n });\n\n if (handledByGroup) {\n return;\n }\n\n this.snapshot();\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.pending = true;\n } else {\n untracked(() => this.data.set(formatDigitRollerValue(value, format, locales, prefix, suffix)));\n this.prevNumericValue = value;\n }\n });\n\n if (isPlatformBrowser(this.platformId)) {\n if (typeof IntersectionObserver !== 'undefined') {\n this.viewportObserver = new IntersectionObserver(\n (entries) => {\n this.isNearViewport = entries[entries.length - 1].isIntersecting;\n },\n { rootMargin: '240px' },\n );\n this.viewportObserver.observe(this.elementRef.nativeElement);\n }\n\n afterEveryRender({\n earlyRead: () => {\n if (this.pending) {\n this.readAnimationState();\n }\n },\n write: () => {\n if (this.pending) {\n this.pending = false;\n this.fireAnimations();\n }\n },\n });\n }\n }\n\n canGroupAnimateNow(): boolean {\n return isPlatformBrowser(this.platformId) && this.animated() && this.canAnimateNow();\n }\n\n prepareGroupedUpdate(): void {\n this.snapshot();\n }\n\n queueGroupedAnimation(): void {\n this.pending = true;\n }\n\n private snapshot(): void {\n const host = this.elementRef.nativeElement;\n this.prevRects.clear();\n this.prevInnerHTML.clear();\n this.prevDigitD.clear();\n this.prevDigitCurrent.clear();\n this.prevDigitValues.clear();\n this.prevDigitOrder = [];\n\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n if (number) {\n const numberRect = number.getBoundingClientRect();\n this.prevNumberLeft = numberRect.left;\n this.prevNumberWidth = numberRect.width;\n }\n\n untracked(() => {\n [...this.data().integer, ...this.data().fraction].forEach((part) => {\n if (part.type === 'integer' || part.type === 'fraction') {\n this.prevDigitValues.set(part.key, this.getPartDigitValue(part));\n this.prevDigitOrder.push(part.key);\n }\n });\n });\n\n host.querySelectorAll<HTMLElement>('[data-key]').forEach((element) => {\n const key = element.getAttribute('data-key')!;\n this.prevRects.set(key, element.getBoundingClientRect());\n this.prevInnerHTML.set(key, element.innerHTML);\n\n if (element.classList.contains('ngs-digit-roller__digit')) {\n const styles = getComputedStyle(element);\n this.prevDigitD.set(key, styles.getPropertyValue('--_ngs-digit-roller-d').trim() || '0');\n this.prevDigitCurrent.set(\n key,\n (element.style.getPropertyValue('--_ngs-digit-roller-current') || '0').trim(),\n );\n }\n });\n }\n\n private readAnimationState(): void {\n if (this.destroyed || !this.canAnimateNow()) {\n this.pendingCanAnimate = false;\n return;\n }\n\n this.pendingCanAnimate = true;\n const host = this.elementRef.nativeElement;\n const hostStyles = getComputedStyle(host);\n\n this.pendingHostFont = hostStyles.font;\n this.pendingHostColor = hostStyles.color;\n this.pendingKeyedEls = [];\n\n host.querySelectorAll<HTMLElement>('[data-key]').forEach((element) => {\n this.pendingKeyedEls.push({\n el: element,\n key: element.getAttribute('data-key')!,\n newRect: element.getBoundingClientRect(),\n });\n });\n\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n this.pendingNumberRect = number ? number.getBoundingClientRect() : null;\n this.pendingNumberOffsetWidth = number ? number.offsetWidth : 0;\n }\n\n private fireAnimations(): void {\n if (this.destroyed) {\n return;\n }\n\n const host = this.elementRef.nativeElement;\n const newNumericValue = untracked(() => this.value());\n\n if (!this.pendingCanAnimate) {\n this.prevNumericValue = newNumericValue;\n return;\n }\n\n const settings = this.effectiveSettings();\n const duration = settings.duration;\n const opacityDuration = settings.opacityDuration;\n const trend = this.resolveTrend(this.prevNumericValue, newNumericValue);\n const staggerMs = this.stagger();\n\n const baseTransformTiming = settings.transformTiming ?? {\n duration,\n easing: settings.flipEasing,\n };\n const spinOptions: KeyframeAnimationOptions = {\n ...baseTransformTiming,\n easing: settings.spinEasing,\n ...(settings.spinTiming ?? {}),\n duration: settings.spinTiming?.duration ?? baseTransformTiming.duration,\n fill: 'none',\n composite: 'accumulate',\n };\n const flipOptions: KeyframeAnimationOptions = {\n ...baseTransformTiming,\n duration: baseTransformTiming.duration,\n fill: 'none',\n composite: 'accumulate',\n };\n const fadeOptions: KeyframeAnimationOptions = {\n duration: opacityDuration,\n easing: 'ease-out',\n fill: 'none',\n composite: 'accumulate',\n ...(settings.opacityTiming ?? {}),\n };\n\n const continuousStartPosition =\n this.continuous() && duration > 0 && trend !== 0 ? this.getContinuousStartPosition() : undefined;\n\n const batch: Animation[] = [];\n const newKeys = new Set<string>();\n let elementIndex = 0;\n const number = host.querySelector<HTMLElement>('.ngs-digit-roller__number');\n\n for (const { el, key, newRect } of this.pendingKeyedEls) {\n newKeys.add(key);\n const prevRect = this.prevRects.get(key);\n const staggerDelay = staggerMs > 0 ? elementIndex * staggerMs : 0;\n elementIndex++;\n\n if (el.classList.contains('ngs-digit-roller__digit')) {\n const digit = this.getDigitValue(key);\n const fromDigit = this.prevDigitValues.has(key) ? this.prevDigitValues.get(key)! : 0;\n const rawDelta = this.getTrendDelta(fromDigit, digit, trend, this.getDigitLength(key));\n const digitPosition = this.getDigitPosition(key);\n const isLowerUnchanged =\n this.continuous() &&\n rawDelta === 0 &&\n continuousStartPosition !== undefined &&\n digitPosition !== undefined &&\n continuousStartPosition >= digitPosition;\n const delta = isLowerUnchanged ? this.getDigitLength(key) * trend : rawDelta;\n\n if (delta !== 0 && duration > 0) {\n this.incrementSpin(el);\n const animation = el.animate(\n { '--_ngs-digit-roller-d': [-delta, 0] } as PropertyIndexedKeyframes,\n spinOptions,\n );\n batch.push(animation);\n animation.finished.then(() => this.decrementSpin(el)).catch(() => this.decrementSpin(el));\n }\n\n this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);\n } else {\n this.animatePositionOrFade(el, prevRect, newRect, flipOptions, fadeOptions, staggerDelay, batch);\n }\n }\n\n let exitIndex = 0;\n this.prevRects.forEach((rect, key) => {\n if (newKeys.has(key)) {\n return;\n }\n\n const ghost = this.buildGhost(key, rect, this.pendingHostFont, this.pendingHostColor);\n host.appendChild(ghost);\n ghost.style.setProperty('--_ngs-digit-roller-d-opacity', '-0.999');\n\n const staggerDelay = staggerMs > 0 ? exitIndex * staggerMs : 0;\n exitIndex++;\n\n const animation = ghost.animate(\n { '--_ngs-digit-roller-d-opacity': [0.999, 0] } as PropertyIndexedKeyframes,\n this.addStaggerDelay(fadeOptions, staggerDelay),\n );\n batch.push(animation);\n animation.finished.then(() => ghost.remove()).catch(() => ghost.remove());\n });\n\n if (number && this.pendingNumberRect) {\n const rect = this.pendingNumberRect;\n const dx = this.prevNumberLeft - rect.left;\n const width = rect.width || this.pendingNumberOffsetWidth;\n const dWidth = this.prevNumberWidth - width;\n\n number.style.setProperty('--_ngs-digit-roller-width', String(width || this.prevNumberWidth || 1));\n\n if (Math.abs(dx) > 0.5 || Math.abs(dWidth) > 0.5) {\n batch.push(\n number.animate(\n {\n '--_ngs-digit-roller-dx': [`${dx}px`, '0px'],\n '--_ngs-digit-roller-d-width': [dWidth, 0],\n } as PropertyIndexedKeyframes,\n flipOptions,\n ),\n );\n }\n }\n\n if (duration > 0) {\n const colorIncrease = this.colorOnIncrease();\n const colorDecrease = this.colorOnDecrease();\n\n if (trend > 0 && colorIncrease) {\n batch.push(\n host.animate([{ color: colorIncrease }, { color: '' }], {\n duration: Math.max(duration, 400),\n easing: 'ease-out',\n fill: 'none',\n }),\n );\n } else if (trend < 0 && colorDecrease) {\n batch.push(\n host.animate([{ color: colorDecrease }, { color: '' }], {\n duration: Math.max(duration, 400),\n easing: 'ease-out',\n fill: 'none',\n }),\n );\n }\n }\n\n this.prevNumericValue = newNumericValue;\n\n if (batch.length === 0) {\n return;\n }\n\n this.liveAnimations.push(...batch);\n this.animCount++;\n\n if (this.animationsFinishAbort) {\n this.animationsFinishAbort.abort();\n } else {\n this.animationsStart.emit();\n }\n\n const finishController = new AbortController();\n this.animationsFinishAbort = finishController;\n\n Promise.allSettled(batch.map((animation) => animation.finished)).then(() => {\n const batchSet = new Set(batch);\n this.liveAnimations = this.liveAnimations.filter((animation) => !batchSet.has(animation));\n this.animCount--;\n\n if (this.animCount === 0 && !this.destroyed && this.animationsFinishAbort) {\n this.animationsFinish.emit();\n this.animationsFinishAbort = undefined;\n }\n });\n }\n\n private animatePositionOrFade(\n element: HTMLElement,\n prevRect: DOMRect | undefined,\n newRect: DOMRect,\n flipOptions: KeyframeAnimationOptions,\n fadeOptions: KeyframeAnimationOptions,\n staggerDelay: number,\n batch: Animation[],\n ): void {\n if (prevRect) {\n const dx = prevRect.left - newRect.left;\n\n if (Math.abs(dx) > 0.5) {\n batch.push(\n element.animate(\n [{ transform: `translateX(${dx}px)` }, { transform: 'translateX(0)' }],\n flipOptions,\n ),\n );\n }\n } else {\n batch.push(\n element.animate(\n { '--_ngs-digit-roller-d-opacity': [-0.9999, 0] } as PropertyIndexedKeyframes,\n this.addStaggerDelay(fadeOptions, staggerDelay),\n ),\n );\n }\n }\n\n private getDigitValue(key: string): number {\n const part = [...this.data().integer, ...this.data().fraction].find((item) => item.key === key);\n return part ? this.getPartDigitValue(part) : 0;\n }\n\n private getPartDigitValue(part: { value: string; numericValue?: number }): number {\n return part.numericValue ?? Number(part.value);\n }\n\n private resolveTrend(oldValue: number, newValue: number): number {\n const configured = this.trend();\n const trend =\n typeof configured === 'function'\n ? configured(oldValue, newValue)\n : (configured ?? Math.sign(newValue - oldValue));\n return Math.sign(trend);\n }\n\n private canAnimateNow(): boolean {\n const host = this.elementRef.nativeElement;\n\n return (\n canAnimateDigitRoller({ respectMotionPreference: this.respectMotionPreference() }) &&\n this.animated() &&\n host.ownerDocument.visibilityState === 'visible' &&\n this.isHostNearViewport(host)\n );\n }\n\n private isHostNearViewport(host: HTMLElement): boolean {\n if (this.viewportObserver) {\n return this.isNearViewport;\n }\n\n const rect = host.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n return false;\n }\n\n const windowRef = host.ownerDocument.defaultView;\n if (!windowRef) {\n return true;\n }\n\n const margin = 240;\n return (\n rect.bottom >= -margin &&\n rect.right >= -margin &&\n rect.top <= windowRef.innerHeight + margin &&\n rect.left <= windowRef.innerWidth + margin\n );\n }\n\n private resolveEasing(easing: DigitRollerEasing | undefined): string {\n return easing ? (EASING_PRESETS[easing] ?? easing) : SPIN_EASING;\n }\n\n private getContinuousStartPosition(): number | undefined {\n const current = new Map<string, number>();\n const currentOrder: string[] = [];\n\n untracked(() => {\n [...this.data().integer, ...this.data().fraction].forEach((part) => {\n if (part.type === 'integer' || part.type === 'fraction') {\n current.set(part.key, this.getPartDigitValue(part));\n currentOrder.push(part.key);\n }\n });\n });\n\n const firstChangedPrev = this.prevDigitOrder.find(\n (key) => current.get(key) !== this.prevDigitValues.get(key),\n );\n const firstChangedCurrent = currentOrder.find(\n (key) => current.get(key) !== this.prevDigitValues.get(key),\n );\n const start = Math.max(\n this.getDigitPosition(firstChangedPrev) ?? -Infinity,\n this.getDigitPosition(firstChangedCurrent) ?? -Infinity,\n );\n\n return Number.isFinite(start) ? start : undefined;\n }\n\n private getDigitPosition(key?: string): number | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.startsWith('i')) {\n return Number(key.slice(1));\n }\n\n if (key.startsWith('f')) {\n return -Number(key.slice(1));\n }\n\n return undefined;\n }\n\n private getDigitLength(key: string): number {\n if (!key.startsWith('i')) {\n return 10;\n }\n\n const position = Number(key.slice(1));\n const max = this.digits()[position]?.max;\n return max !== undefined ? max + 1 : 10;\n }\n\n protected digitLengthForKey(key: string): number {\n return this.getDigitLength(key);\n }\n\n protected digitGlyphsForKey(key: string): { value: number; glyph: string }[] {\n return this.digitGlyphs().slice(0, this.getDigitLength(key));\n }\n\n private addStaggerDelay(\n options: KeyframeAnimationOptions,\n staggerDelay: number,\n ): KeyframeAnimationOptions {\n const currentDelay = typeof options.delay === 'number' ? options.delay : 0;\n return { ...options, delay: currentDelay + staggerDelay };\n }\n\n private getTrendDelta(from: number, to: number, trend: number, length = 10): number {\n const diff = to - from;\n const resolvedTrend = trend || Math.sign(diff);\n\n if (resolvedTrend > 0 && to < from) {\n return length - from + to;\n }\n\n if (resolvedTrend < 0 && to > from) {\n return to - length - from;\n }\n\n return diff;\n }\n\n private incrementSpin(element: HTMLElement): void {\n const count = (this.spinCount.get(element) ?? 0) + 1;\n this.spinCount.set(element, count);\n\n if (count === 1) {\n element.classList.add('ngs-digit-roller__digit--spinning');\n }\n }\n\n private decrementSpin(element: HTMLElement): void {\n const count = Math.max(0, (this.spinCount.get(element) ?? 1) - 1);\n\n if (count === 0) {\n this.spinCount.delete(element);\n element.classList.remove('ngs-digit-roller__digit--spinning');\n } else {\n this.spinCount.set(element, count);\n }\n }\n\n private buildGhost(key: string, rect: DOMRect, font: string, color: string): HTMLElement {\n const ghost = document.createElement('span');\n ghost.style.cssText =\n `position:fixed;left:${rect.left}px;top:${rect.top}px;` +\n `width:${rect.width}px;height:${rect.height}px;` +\n `pointer-events:none;overflow:hidden;display:inline-flex;` +\n `align-items:center;font:${font};color:${color}`;\n ghost.className = 'ngs-digit-roller__ghost';\n\n const savedHTML = this.prevInnerHTML.get(key);\n if (savedHTML) {\n ghost.innerHTML = savedHTML;\n\n const savedD = this.prevDigitD.get(key);\n const savedCurrent = this.prevDigitCurrent.get(key);\n\n if (savedD !== undefined) {\n ghost.style.setProperty('--_ngs-digit-roller-d', savedD);\n }\n\n if (savedCurrent !== undefined) {\n ghost.style.setProperty('--_ngs-digit-roller-current', savedCurrent);\n }\n\n ghost.querySelectorAll<HTMLElement>('[inert]').forEach((element) => {\n element.style.display = 'none';\n });\n }\n\n return ghost;\n }\n}\n","<span class=\"ngs-digit-roller__number\" aria-hidden=\"true\">\n <span class=\"ngs-digit-roller__number-inner\">\n @if (data().pre.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--pre\">\n @for (part of data().pre; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--integer\">\n @for (part of data().integer; track part.key) {\n @if (part.type === 'integer') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n\n @if (data().fraction.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--fraction\">\n @for (part of data().fraction; track part.key) {\n @if (part.type === 'fraction') {\n <span\n class=\"ngs-digit-roller__digit\"\n [attr.data-key]=\"part.key\"\n [style.--_ngs-digit-roller-current]=\"part.numericValue\"\n [style.--_ngs-digit-roller-len]=\"digitLengthForKey(part.key)\"\n >\n @for (digit of digitGlyphsForKey(part.key); track digit.value) {\n <span\n class=\"ngs-digit-roller__digit-number\"\n [style.--_ngs-digit-roller-n]=\"digit.value\"\n [attr.inert]=\"digit.value !== part.numericValue ? '' : null\"\n >\n {{ digit.glyph }}\n </span>\n }\n </span>\n } @else {\n <span class=\"ngs-digit-roller__separator\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n }\n </span>\n }\n\n @if (data().post.length) {\n <span class=\"ngs-digit-roller__section ngs-digit-roller__section--post\">\n @for (part of data().post; track part.key) {\n <span class=\"ngs-digit-roller__literal\" [attr.data-key]=\"part.key\">{{ part.value }}</span>\n }\n </span>\n }\n </span>\n</span>\n\n<span class=\"ngs-digit-roller__sr-only\">{{ formattedPlainText() }}</span>\n","import { contentChildren, Directive, forwardRef } from '@angular/core';\nimport { DigitRoller } from './digit-roller/digit-roller';\nimport {\n DIGIT_ROLLER_GROUP,\n DigitRollerGroupCoordinator,\n DigitRollerGroupMember,\n} from './digit-roller-group.token';\n\n@Directive({\n selector: '[ngsDigitRollerGroup]',\n providers: [\n {\n provide: DIGIT_ROLLER_GROUP,\n useExisting: forwardRef(() => DigitRollerGroupDirective),\n },\n ],\n})\nexport class DigitRollerGroupDirective implements DigitRollerGroupCoordinator {\n private children = contentChildren(DigitRoller, { descendants: true });\n private pendingUpdates = new Map<DigitRollerGroupMember, () => void>();\n private flushQueued = false;\n\n requestGroupedUpdate(member: DigitRollerGroupMember, applyUpdate: () => void): boolean {\n if (!member.canGroupAnimateNow()) {\n return false;\n }\n\n this.pendingUpdates.set(member, applyUpdate);\n\n if (!this.flushQueued) {\n this.flushQueued = true;\n queueMicrotask(() => this.flushGroupedUpdates());\n }\n\n return true;\n }\n\n private flushGroupedUpdates(): void {\n this.flushQueued = false;\n\n if (this.pendingUpdates.size === 0) {\n return;\n }\n\n const members = this.children().filter((child) => child.canGroupAnimateNow());\n\n for (const member of members) {\n member.prepareGroupedUpdate();\n }\n\n for (const applyUpdate of this.pendingUpdates.values()) {\n applyUpdate();\n }\n\n this.pendingUpdates.clear();\n\n for (const member of members) {\n member.queueGroupedAnimation();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAIA,IAAI,aAAkC;AACtC,IAAI,oBAAyC;AAE7C,SAAS,mBAAmB,GAAA;AAC1B,IAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,QAAA,OAAO,aAAa;IACtB;IAEA,aAAa;QACX,OAAO,MAAM,KAAK,WAAW;AAC7B,YAAA,OAAO,MAAM,CAAC,GAAG,KAAK,WAAW;AACjC,YAAA,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW;YACrC,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,KAAK,UAAU;AACtD,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,gBAAgB,KAAK,UAAU;YACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;AACtD,YAAA,oBAAoB,EAAE;AAExB,IAAA,OAAO,aAAa;AACtB;AAEA,SAAS,uBAAuB,GAAA;AAC9B,IAAA,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,QAAA,OAAO,oBAAoB;IAC7B;IAEA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACvD,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC;AACxE,IAAA,oBAAoB,GAAG,UAAU,CAAC,OAAO;AAEzC,IAAA,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE;QACrD,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AAC9C,YAAA,oBAAoB,GAAG,KAAK,CAAC,OAAO;AACtC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,oBAAoB;AAC7B;SAEgB,+BAA+B,GAAA;IAC7C,aAAa,GAAG,SAAS;IACzB,oBAAoB,GAAG,SAAS;AAClC;AAEM,SAAU,qBAAqB,CAAC,OAAA,GAAwC,EAAE,EAAA;AAC9E,IAAA,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC1B,QAAA,OAAO,KAAK;IACd;IAEA,OAAO,OAAO,CAAC,uBAAuB,KAAK,KAAK,IAAI,CAAC,uBAAuB,EAAE;AAChF;AAEA,SAAS,oBAAoB,GAAA;AAC3B,IAAA,IAAI;QACF,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AACjF,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;;AC5DA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC9F,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6B;AAE3D,SAAS,kBAAkB,CACzB,OAAsC,EACtC,OAAiC,EAAA;AAEjC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IACnE,IAAI,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IAEvC,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;AACnD,QAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;IACpC;AAEA,IAAA,OAAO,SAAS;AAClB;SAOgB,oBAAoB,CAClC,OAA2B,EAC3B,UAAoC,EAAE,EAAA;AAEtC,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,qBAAqB,EAAE,CAAC;AACzB,KAAA,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM;QAC/C,KAAK;AACL,QAAA,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/B,KAAA,CAAC,CAAC;AACL;AAEA,SAAS,gBAAgB,CACvB,OAA2B,EAC3B,UAAoC,EAAE,EAAA;AAEtC,IAAA,OAAO,IAAI,GAAG,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAClG;SAEgB,sBAAsB,CACpC,KAAa,EACb,UAAoC,EAAE,EACtC,OAA2B,EAC3B,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,EAAE,EAAA;IAEX,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;IACtD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;IACtD,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;IAE5C,MAAM,GAAG,GAA4B,EAAE;IACvC,MAAM,UAAU,GAA4B,EAAE;IAC9C,MAAM,QAAQ,GAA4B,EAAE;IAC5C,MAAM,IAAI,GAA4B,EAAE;IAExC,IAAI,WAAW,GAAG,KAAK;IACvB,IAAI,WAAW,GAAG,KAAK;AAEvB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACpD,WAAW,GAAG,IAAI;AAClB,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YAC9D,WAAW,GAAG,IAAI;YAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChE;AAAO,aAAA,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAA,IAAA,EAAO,GAAG,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC;QAC5E;aAAO,IAAI,WAAW,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC;QAC/E;AAAO,aAAA,IAAI,WAAW,IAAI,WAAW,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC;QAC/E;aAAO;YACL,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAA,IAAA,EAAO,GAAG,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC;QAC5E;IACF;IAEA,IAAI,MAAM,EAAE;AACV,QAAA,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACjE;IAEA,IAAI,MAAM,EAAE;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAC/D;IAEA,MAAM,YAAY,GAA4B,EAAE;AAChD,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACrD;QACF;aAAO;AACL,YAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;IACF;IAEA,IAAI,UAAU,GAAG,CAAC;IAClB,MAAM,eAAe,GAA4B,EAAE;AACnD,IAAA,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACjD,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,eAAe,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,EAAE,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AACrB,gBAAA,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE,aAAA,CAAC;AACF,YAAA,UAAU,EAAE;QACd;aAAO;YACL,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,UAAU,CAAA,CAAE,EAAE,CAAC;QACnF;IACF;IAEA,IAAI,kBAAkB,GAAG,CAAC;IAC1B,MAAM,aAAa,GAA4B,EAAE;AACjD,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7B,aAAa,CAAC,IAAI,CAAC;AACjB,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,kBAAkB,CAAA,CAAE;oBAC/B,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;AACpD,iBAAA,CAAC;YACJ;QACF;aAAO;AACL,YAAA,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjD;IACF;AAEA,IAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE;AACnF;;ACpIO,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAA8B,oBAAoB,CAAC;;ACEhG,MAAM,4BAA4B,GAA+B;AACtE,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,IAAI,EAAE,EAAE;;;ACUV,MAAM,WAAW,GACf,oFAAoF;IACpF,sFAAsF;IACtF,uFAAuF;IACvF,qFAAqF;IACrF,oFAAoF;AACpF,IAAA,8CAA8C;AAEhD,MAAM,cAAc,GAA2B;AAC7C,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,SAAS,EAAE,mCAAmC;CAC/C;MAaY,WAAW,CAAA;AACtB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,MAAM,GAAG,KAAK,CAA2B,EAAE,6EAAC;AAC5C,IAAA,OAAO,GAAG,KAAK,CAAgC,SAAS,8EAAC;AACzD,IAAA,MAAM,GAAG,KAAK,CAAC,EAAE,6EAAC;AAClB,IAAA,MAAM,GAAG,KAAK,CAAC,EAAE,6EAAC;AAClB,IAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,+EAAC;AAEtB,IAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS,+EAAC;AAC/C,IAAA,eAAe,GAAG,KAAK,CAAqB,SAAS,sFAAC;AACtD,IAAA,eAAe,GAAG,KAAK,CAAgC,SAAS,sFAAC;AACjE,IAAA,UAAU,GAAG,KAAK,CAAgC,SAAS,iFAAC;AAC5D,IAAA,aAAa,GAAG,KAAK,CAAgC,SAAS,oFAAC;AAE/D,IAAA,UAAU,GAAG,KAAK,CAAgC,SAAS,iFAAC;AAC5D,IAAA,UAAU,GAAG,KAAK,CAAgC,SAAS,iFAAC;AAC5D,IAAA,KAAK,GAAG,KAAK,CAA+B,SAAS,4EAAC;AAEtD,IAAA,UAAU,GAAG,KAAK,CAAC,KAAK,iFAAC;AACzB,IAAA,MAAM,GAAG,KAAK,CAAoB,EAAE,6EAAC;AACrC,IAAA,uBAAuB,GAAG,KAAK,CAAC,IAAI,8FAAC;AACrC,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,8EAAC;AAClB,IAAA,eAAe,GAAG,KAAK,CAAqB,SAAS,sFAAC;AACtD,IAAA,eAAe,GAAG,KAAK,CAAqB,SAAS,sFAAC;IAEtD,eAAe,GAAG,MAAM,EAAQ;IAChC,gBAAgB,GAAG,MAAM,EAAQ;AAEvB,IAAA,IAAI,GAAG,MAAM,CAA6B,4BAA4B,2EAAC;AACvE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,kFAAC;AACjF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MACtC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,yFAC1E;AACS,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG;QAEvC,OAAO;YACL,QAAQ;AACR,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG;YAC9C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjD,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACjD,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;SACpC;AACH,IAAA,CAAC,wFAAC;AAEM,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtD,IAAA,SAAS,GAAG,IAAI,GAAG,EAAmB;AACtC,IAAA,aAAa,GAAG,IAAI,GAAG,EAAkB;AACzC,IAAA,UAAU,GAAG,IAAI,GAAG,EAAkB;AACtC,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAkB;AAC5C,IAAA,eAAe,GAAG,IAAI,GAAG,EAAkB;IAC3C,cAAc,GAAa,EAAE;IAC7B,cAAc,GAAG,CAAC;IAClB,eAAe,GAAG,CAAC;IACnB,gBAAgB,GAAG,CAAC;IAEpB,SAAS,GAAG,CAAC;IACb,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,KAAK;IACjB,gBAAgB,GAAG,KAAK;IACxB,cAAc,GAAgB,EAAE;AAChC,IAAA,SAAS,GAAG,IAAI,GAAG,EAAuB;AAC1C,IAAA,qBAAqB;IACrB,iBAAiB,GAAG,KAAK;IACzB,eAAe,GAAG,EAAE;IACpB,gBAAgB,GAAG,EAAE;IACrB,eAAe,GAA8D,EAAE;IAC/E,iBAAiB,GAAmB,IAAI;IACxC,wBAAwB,GAAG,CAAC;IAC5B,cAAc,GAAG,IAAI;AACrB,IAAA,gBAAgB;AAExB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;AAEnC,YAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE;AAC3C,gBAAA,IAAI;oBACF,SAAS,CAAC,MAAM,EAAE;gBACpB;AAAE,gBAAA,MAAM;;gBAER;YACF;AAEA,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AAC1B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAC5B;YACF;AAEA,YAAA,MAAM,oBAAoB,GACxB,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;YAE/E,IAAI,oBAAoB,EAAE;gBACxB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAK;oBACjE,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAChG,gBAAA,CAAC,CAAC;gBAEF,IAAI,cAAc,EAAE;oBAClB;gBACF;gBAEA,IAAI,CAAC,QAAQ,EAAE;gBACf,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;iBAAO;gBACL,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC/B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;gBAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,oBAAoB,CAC9C,CAAC,OAAO,KAAI;AACV,oBAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,cAAc;AAClE,gBAAA,CAAC,EACD,EAAE,UAAU,EAAE,OAAO,EAAE,CACxB;gBACD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAC9D;AAEA,YAAA,gBAAgB,CAAC;gBACf,SAAS,EAAE,MAAK;AACd,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,kBAAkB,EAAE;oBAC3B;gBACF,CAAC;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,wBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;wBACpB,IAAI,CAAC,cAAc,EAAE;oBACvB;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;IACtF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAc,2BAA2B,CAAC;QAC3E,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK;QACzC;QAEA,SAAS,CAAC,MAAK;YACb,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjE,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACvD,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAChE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAc,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACnE,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC;YAE9C,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;AACzD,gBAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACxC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC;gBACxF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,GAAG,EACH,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAC9E;YACH;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,GAAA;QACxB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAC9B;QACF;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEzC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK;AACxC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QAEzB,IAAI,CAAC,gBAAgB,CAAc,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,EAAE,EAAE,OAAO;AACX,gBAAA,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAE;AACtC,gBAAA,OAAO,EAAE,OAAO,CAAC,qBAAqB,EAAE;AACzC,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAc,2BAA2B,CAAC;AAC3E,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE,GAAG,IAAI;AACvE,QAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;IACjE;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1C,QAAA,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;YACvC;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAClC,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC;AACvE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;AAEhC,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAAC,eAAe,IAAI;YACtD,QAAQ;YACR,MAAM,EAAE,QAAQ,CAAC,UAAU;SAC5B;AACD,QAAA,MAAM,WAAW,GAA6B;AAC5C,YAAA,GAAG,mBAAmB;YACtB,MAAM,EAAE,QAAQ,CAAC,UAAU;AAC3B,YAAA,IAAI,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9B,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,IAAI,mBAAmB,CAAC,QAAQ;AACvE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,YAAY;SACxB;AACD,QAAA,MAAM,WAAW,GAA6B;AAC5C,YAAA,GAAG,mBAAmB;YACtB,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;AACtC,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,YAAY;SACxB;AACD,QAAA,MAAM,WAAW,GAA6B;AAC5C,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,IAAI,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC;SAClC;QAED,MAAM,uBAAuB,GAC3B,IAAI,CAAC,UAAU,EAAE,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,0BAA0B,EAAE,GAAG,SAAS;QAElG,MAAM,KAAK,GAAgB,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;QACjC,IAAI,YAAY,GAAG,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAc,2BAA2B,CAAC;AAE3E,QAAA,KAAK,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AACvD,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,YAAA,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,GAAG,YAAY,GAAG,SAAS,GAAG,CAAC;AACjE,YAAA,YAAY,EAAE;YAEd,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;gBACpD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,CAAC;AACpF,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACtF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAChD,gBAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,QAAQ,KAAK,CAAC;AACd,oBAAA,uBAAuB,KAAK,SAAS;AACrC,oBAAA,aAAa,KAAK,SAAS;oBAC3B,uBAAuB,IAAI,aAAa;AAC1C,gBAAA,MAAM,KAAK,GAAG,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ;gBAE5E,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;AAC/B,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AACtB,oBAAA,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,EAAE,uBAAuB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAA8B,EACpE,WAAW,CACZ;AACD,oBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACrB,oBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC3F;AAEA,gBAAA,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;YAClG;iBAAO;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;YAClG;QACF;QAEA,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;AACnC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACpB;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACrF,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,EAAE,QAAQ,CAAC;AAElE,YAAA,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC;AAC9D,YAAA,SAAS,EAAE;YAEX,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAC7B,EAAE,+BAA+B,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAA8B,EAC3E,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAChD;AACD,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;AAC3E,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,wBAAwB;AACzD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,GAAG,KAAK;AAE3C,YAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,2BAA2B,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;AAEjG,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE;AAChD,gBAAA,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,OAAO,CACZ;AACE,oBAAA,wBAAwB,EAAE,CAAC,CAAA,EAAG,EAAE,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;AAC5C,oBAAA,6BAA6B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;iBACf,EAC7B,WAAW,CACZ,CACF;YACH;QACF;AAEA,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAE5C,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;gBAC9B,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE;oBACtD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACjC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA,CAAC,CACH;YACH;AAAO,iBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;gBACrC,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE;oBACtD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACjC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA,CAAC,CACH;YACH;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;AAEvC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC7B;AAEA,QAAA,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE;AAC9C,QAAA,IAAI,CAAC,qBAAqB,GAAG,gBAAgB;QAE7C,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAK;AACzE,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzF,IAAI,CAAC,SAAS,EAAE;AAEhB,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACzE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,qBAAqB,CAC3B,OAAoB,EACpB,QAA6B,EAC7B,OAAgB,EAChB,WAAqC,EACrC,WAAqC,EACrC,YAAoB,EACpB,KAAkB,EAAA;QAElB,IAAI,QAAQ,EAAE;YACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;YAEvC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE;gBACtB,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,OAAO,CACb,CAAC,EAAE,SAAS,EAAE,CAAA,WAAA,EAAc,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EACtE,WAAW,CACZ,CACF;YACH;QACF;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,OAAO,CACb,EAAE,+BAA+B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAA8B,EAC7E,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAChD,CACF;QACH;IACF;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;AAC/F,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD;AAEQ,IAAA,iBAAiB,CAAC,IAA8C,EAAA;QACtE,OAAO,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAChD;IAEQ,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,MAAM,KAAK,GACT,OAAO,UAAU,KAAK;AACpB,cAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ;AAC/B,eAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QAE1C,QACE,qBAAqB,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAClF,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,KAAK,SAAS;AAChD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAEjC;AAEQ,IAAA,kBAAkB,CAAC,IAAiB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO,IAAI,CAAC,cAAc;QAC5B;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;QAChD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,MAAM,GAAG,GAAG;AAClB,QAAA,QACE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;AACtB,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;AACrB,YAAA,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,WAAW,GAAG,MAAM;YAC1C,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,UAAU,GAAG,MAAM;IAE9C;AAEQ,IAAA,aAAa,CAAC,MAAqC,EAAA;AACzD,QAAA,OAAO,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,WAAW;IAClE;IAEQ,0BAA0B,GAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;QACzC,MAAM,YAAY,GAAa,EAAE;QAEjC,SAAS,CAAC,MAAK;YACb,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjE,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACvD,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACnD,oBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAC/C,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAC5D;QACD,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAC3C,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAC5D;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EACpD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CACxD;AAED,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;IACnD;AAEQ,IAAA,gBAAgB,CAAC,GAAY,EAAA;QACnC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B;AAEA,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACvB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B;AAEA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG;AACxC,QAAA,OAAO,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE;IACzC;AAEU,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;IACjC;AAEU,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9D;IAEQ,eAAe,CACrB,OAAiC,EACjC,YAAoB,EAAA;AAEpB,QAAA,MAAM,YAAY,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;QAC1E,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,EAAE;IAC3D;IAEQ,aAAa,CAAC,IAAY,EAAE,EAAU,EAAE,KAAa,EAAE,MAAM,GAAG,EAAE,EAAA;AACxE,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI;QACtB,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE9C,IAAI,aAAa,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAClC,YAAA,OAAO,MAAM,GAAG,IAAI,GAAG,EAAE;QAC3B;QAEA,IAAI,aAAa,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAClC,YAAA,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI;QAC3B;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,OAAoB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AAElC,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mCAAmC,CAAC;QAC5D;IACF;AAEQ,IAAA,aAAa,CAAC,OAAoB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjE,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAmC,CAAC;QAC/D;aAAO;YACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QACpC;IACF;AAEQ,IAAA,UAAU,CAAC,GAAW,EAAE,IAAa,EAAE,IAAY,EAAE,KAAa,EAAA;QACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,KAAK,CAAC,KAAK,CAAC,OAAO;AACjB,YAAA,CAAA,oBAAA,EAAuB,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,CAAA,GAAA,CAAK;AACvD,gBAAA,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,MAAM,CAAA,GAAA,CAAK;gBAChD,CAAA,wDAAA,CAA0D;AAC1D,gBAAA,CAAA,wBAAA,EAA2B,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;AAClD,QAAA,KAAK,CAAC,SAAS,GAAG,yBAAyB;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,SAAS,EAAE;AACb,YAAA,KAAK,CAAC,SAAS,GAAG,SAAS;YAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;AAEnD,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC;YAC1D;AAEA,YAAA,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC9B,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,EAAE,YAAY,CAAC;YACtE;YAEA,KAAK,CAAC,gBAAgB,CAAc,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACjE,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAChC,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,OAAO,KAAK;IACd;uGAjoBW,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,07FCrDxB,64FAyEA,EAAA,MAAA,EAAA,CAAA,s3MAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDpBa,WAAW,EAAA,UAAA,EAAA,CAAA;kBAXvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,YAClB,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,sBAAsB,EAAE,YAAY;AACrC,qBAAA,EAAA,QAAA,EAAA,64FAAA,EAAA,MAAA,EAAA,CAAA,s3MAAA,CAAA,EAAA;;;MElCU,yBAAyB,CAAA;IAC5B,QAAQ,GAAG,eAAe,CAAC,WAAW,gFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;AAC9D,IAAA,cAAc,GAAG,IAAI,GAAG,EAAsC;IAC9D,WAAW,GAAG,KAAK;IAE3B,oBAAoB,CAAC,MAA8B,EAAE,WAAuB,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,cAAc,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAClD;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAExB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YAClC;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAE7E,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,CAAC,oBAAoB,EAAE;QAC/B;QAEA,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE;AACtD,YAAA,WAAW,EAAE;QACf;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAE3B,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,CAAC,qBAAqB,EAAE;QAChC;IACF;uGA1CW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAPzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACzD,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAGkC,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FADnC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACzD,yBAAA;AACF,qBAAA;AACF,iBAAA;AAEoC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AClBvE;;AAEG;;;;"}
@@ -46,17 +46,23 @@ class Drawer {
46
46
  positionStrategy: this.overlay.position().global().right('0').top('0').bottom('0'),
47
47
  scrollStrategy: this.overlay.scrollStrategies.block()
48
48
  });
49
- this.overlayRef.backdropClick().subscribe(() => {
49
+ this.overlayRef.backdropClick()
50
+ .pipe(takeUntilDestroyed(this.destroyRef))
51
+ .subscribe(() => {
50
52
  this.close();
51
53
  });
52
- this.overlayRef.outsidePointerEvents().subscribe((event) => {
54
+ this.overlayRef.outsidePointerEvents()
55
+ .pipe(takeUntilDestroyed(this.destroyRef))
56
+ .subscribe((event) => {
53
57
  const target = event.target;
54
58
  if (target.closest('.ngs-drawer-ignore-outside-click')) {
55
59
  return;
56
60
  }
57
61
  this.close();
58
62
  });
59
- this.overlayRef.keydownEvents().subscribe(event => {
63
+ this.overlayRef.keydownEvents()
64
+ .pipe(takeUntilDestroyed(this.destroyRef))
65
+ .subscribe(event => {
60
66
  if (event.key === 'Escape') {
61
67
  this.close();
62
68
  }
@@ -93,21 +99,23 @@ class Drawer {
93
99
  return this._isOpen();
94
100
  }
95
101
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Drawer, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: Drawer, isStandalone: true, selector: "ngs-drawer", inputs: { initialIsOpen: { classPropertyName: "initialIsOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", opened: "opened" }, providers: [
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: Drawer, isStandalone: true, selector: "ngs-drawer", inputs: { initialIsOpen: { classPropertyName: "initialIsOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", opened: "opened" }, host: { classAttribute: "ngs-drawer" }, providers: [
97
103
  {
98
104
  provide: DRAWER,
99
105
  useExisting: forwardRef(() => Drawer),
100
106
  }
101
- ], viewQueries: [{ propertyName: "portal", first: true, predicate: ["portal"], descendants: true, isSignal: true }], exportAs: ["ngsDrawer"], ngImport: i0, template: "<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n", styles: [".ngs-drawer-container{--ngs-drawer-transition-duration: .15s;--ngs-drawer-transition: cubic-bezier(.4,0,.2,1);position:fixed;z-index:1040;top:0;right:0;max-width:90vw;bottom:0;transform:translate(100%);visibility:hidden;display:flex;flex-direction:column;min-height:0;pointer-events:auto}.ngs-drawer-container.open{transform:translate(0);visibility:visible;transition:transform .3s var(--ngs-drawer-transition),visibility 0s linear 0s}.ngs-drawer-container:not(.open){transition:transform .2s var(--ngs-drawer-transition),visibility 0s linear .2s}.ngs-drawer-content{background:var(--ngs-color-surface-container-lowest);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;outline:var(--ngs-dropdown-border);margin:1.75rem;display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden;border-radius:1rem;border:1px solid transparent}.drawer-backdrop{background:var(--ngs-overlay-backdrop-bg);opacity:0;transition:opacity .15s cubic-bezier(.4,0,.2,1)}.drawer-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-pane.pointer-events-none{pointer-events:none!important}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
107
+ ], viewQueries: [{ propertyName: "portal", first: true, predicate: ["portal"], descendants: true, isSignal: true }], exportAs: ["ngsDrawer"], ngImport: i0, template: "<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n", styles: [".ngs-drawer-container{--ngs-drawer-transition-duration: .15s;--ngs-drawer-transition: cubic-bezier(.4,0,.2,1);position:fixed;z-index:1040;top:0;right:0;max-width:90vw;bottom:0;transform:translate(100%);visibility:hidden;display:flex;flex-direction:column;min-height:0;pointer-events:auto}.ngs-drawer-container.open{transform:translate(0);visibility:visible;transition:transform .3s var(--ngs-drawer-transition),visibility 0s linear 0s}.ngs-drawer-container:not(.open){transition:transform .2s var(--ngs-drawer-transition),visibility 0s linear .2s}.ngs-drawer-container .ngs-drawer-content{background:var(--ngs-color-surface-container-lowest);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;outline:var(--ngs-dropdown-border);margin:1.75rem;display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden;border-radius:1rem;border:1px solid transparent}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
102
108
  }
103
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Drawer, decorators: [{
104
110
  type: Component,
105
- args: [{ selector: 'ngs-drawer', exportAs: 'ngsDrawer', standalone: true, providers: [
111
+ args: [{ selector: 'ngs-drawer', exportAs: 'ngsDrawer', providers: [
106
112
  {
107
113
  provide: DRAWER,
108
114
  useExisting: forwardRef(() => Drawer),
109
115
  }
110
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n", styles: [".ngs-drawer-container{--ngs-drawer-transition-duration: .15s;--ngs-drawer-transition: cubic-bezier(.4,0,.2,1);position:fixed;z-index:1040;top:0;right:0;max-width:90vw;bottom:0;transform:translate(100%);visibility:hidden;display:flex;flex-direction:column;min-height:0;pointer-events:auto}.ngs-drawer-container.open{transform:translate(0);visibility:visible;transition:transform .3s var(--ngs-drawer-transition),visibility 0s linear 0s}.ngs-drawer-container:not(.open){transition:transform .2s var(--ngs-drawer-transition),visibility 0s linear .2s}.ngs-drawer-content{background:var(--ngs-color-surface-container-lowest);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;outline:var(--ngs-dropdown-border);margin:1.75rem;display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden;border-radius:1rem;border:1px solid transparent}.drawer-backdrop{background:var(--ngs-overlay-backdrop-bg);opacity:0;transition:opacity .15s cubic-bezier(.4,0,.2,1)}.drawer-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-pane.pointer-events-none{pointer-events:none!important}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
116
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
117
+ 'class': 'ngs-drawer'
118
+ }, template: "<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n", styles: [".ngs-drawer-container{--ngs-drawer-transition-duration: .15s;--ngs-drawer-transition: cubic-bezier(.4,0,.2,1);position:fixed;z-index:1040;top:0;right:0;max-width:90vw;bottom:0;transform:translate(100%);visibility:hidden;display:flex;flex-direction:column;min-height:0;pointer-events:auto}.ngs-drawer-container.open{transform:translate(0);visibility:visible;transition:transform .3s var(--ngs-drawer-transition),visibility 0s linear 0s}.ngs-drawer-container:not(.open){transition:transform .2s var(--ngs-drawer-transition),visibility 0s linear .2s}.ngs-drawer-container .ngs-drawer-content{background:var(--ngs-color-surface-container-lowest);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;outline:var(--ngs-dropdown-border);margin:1.75rem;display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden;border-radius:1rem;border:1px solid transparent}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
111
119
  }], ctorParameters: () => [], propDecorators: { initialIsOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }], showBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackdrop", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], opened: [{ type: i0.Output, args: ["opened"] }], portal: [{ type: i0.ViewChild, args: ['portal', { isSignal: true }] }] } });
112
120
 
113
121
  class DrawerIgnoreOutsideClickDirective {
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-drawer.mjs","sources":["../../../projects/components/drawer/src/types.ts","../../../projects/components/drawer/src/drawer/drawer.ts","../../../projects/components/drawer/src/drawer/drawer.html","../../../projects/components/drawer/src/drawer-ignore-outside-click.directive.ts","../../../projects/components/drawer/ngstarter-ui-components-drawer.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const DRAWER = new InjectionToken('DRAWER');\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n forwardRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n Signal,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DRAWER } from '../types';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { timer } from 'rxjs';\n\n@Component({\n selector: 'ngs-drawer',\n exportAs: 'ngsDrawer',\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n standalone: true,\n providers: [\n {\n provide: DRAWER,\n useExisting: forwardRef(() => Drawer),\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Drawer implements OnDestroy {\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n private destroyRef = inject(DestroyRef);\n\n readonly initialIsOpen = input<boolean | undefined>(undefined, { alias: 'isOpen' });\n readonly showBackdrop = input(true);\n\n readonly closed = output<void>();\n readonly opened = output<void>();\n\n private internalIsOpen: WritableSignal<boolean> = signal(false);\n private overlayRef: OverlayRef | null = null;\n protected portal = viewChild.required<TemplateRef<any>>('portal');\n\n protected _isOpen: Signal<boolean> = computed(() => this.internalIsOpen());\n\n constructor() {\n effect(() => {\n const externalIsOpen = this.initialIsOpen();\n if (externalIsOpen !== undefined) {\n if (externalIsOpen) {\n this.open();\n } else {\n this.close();\n }\n }\n });\n }\n\n ngOnDestroy() {\n this.close();\n }\n\n open(): void {\n if (this.internalIsOpen()) {\n return;\n }\n\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n hasBackdrop: this.showBackdrop(),\n backdropClass: 'drawer-backdrop',\n positionStrategy: this.overlay.position().global().right('0').top('0').bottom('0'),\n scrollStrategy: this.overlay.scrollStrategies.block()\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.overlayRef.outsidePointerEvents().subscribe((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (target.closest('.ngs-drawer-ignore-outside-click')) {\n return;\n }\n\n this.close();\n });\n\n this.overlayRef.keydownEvents().subscribe(event => {\n if (event.key === 'Escape') {\n this.close();\n }\n });\n }\n\n const portal = new TemplatePortal(this.portal(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n if (!this.showBackdrop()) {\n this.overlayRef.hostElement.classList.add('pointer-events-none');\n }\n\n // Delay setting internalIsOpen to true to ensure the entry animation triggers\n setTimeout(() => {\n this.internalIsOpen.set(true);\n });\n\n this.opened.emit();\n }\n\n close(): void {\n if (!this.internalIsOpen()) {\n return;\n }\n\n this.internalIsOpen.set(false);\n\n timer(150)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.closed.emit();\n });\n }\n\n get isOpened(): boolean {\n return this._isOpen();\n }\n}\n","<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsDrawerIgnoreOutsideClick]',\n host: {\n 'class': 'ngs-drawer-ignore-outside-click'\n }\n})\nexport class DrawerIgnoreOutsideClickDirective {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAEa,MAAM,GAAG,IAAI,cAAc,CAAC,QAAQ;;MCsCpC,MAAM,CAAA;AACT,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAE9B,aAAa,GAAG,KAAK,CAAsB,SAAS,qFAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;AAC1E,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,mFAAC;IAE1B,MAAM,GAAG,MAAM,EAAQ;IACvB,MAAM,GAAG,MAAM,EAAQ;AAExB,IAAA,cAAc,GAA4B,MAAM,CAAC,KAAK,qFAAC;IACvD,UAAU,GAAsB,IAAI;AAClC,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAmB,QAAQ,CAAC;IAEvD,OAAO,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE1E,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,YAAA,IAAI,cAAc,KAAK,SAAS,EAAE;gBAChC,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,IAAI,EAAE;gBACb;qBAAO;oBACL,IAAI,CAAC,KAAK,EAAE;gBACd;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,gBAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AAChC,gBAAA,aAAa,EAAE,iBAAiB;gBAChC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAClF,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK;AACpD,aAAA,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;gBAC7C,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,CAAC,KAAiB,KAAI;AACrE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,gBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,EAAE;oBACtD;gBACF;gBAEA,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,KAAK,IAAG;AAChD,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAC1B,IAAI,CAAC,KAAK,EAAE;gBACd;AACF,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACvE,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAClE;;QAGA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAE9B,KAAK,CAAC,GAAG;AACN,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;uGAxGW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EATN;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,MAAM,CAAC;AACtC;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCH,yMASA,EAAA,MAAA,EAAA,CAAA,mpCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FD+Ba,MAAM,EAAA,UAAA,EAAA,CAAA;kBAflB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,QAAA,EACZ,WAAW,EAAA,UAAA,EAGT,IAAI,EAAA,SAAA,EACL;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC;AACtC;AACF,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yMAAA,EAAA,MAAA,EAAA,CAAA,mpCAAA,CAAA,EAAA;2YAeS,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME7CrD,iCAAiC,CAAA;uGAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE;AACV;AACF,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngstarter-ui-components-drawer.mjs","sources":["../../../projects/components/drawer/src/types.ts","../../../projects/components/drawer/src/drawer/drawer.ts","../../../projects/components/drawer/src/drawer/drawer.html","../../../projects/components/drawer/src/drawer-ignore-outside-click.directive.ts","../../../projects/components/drawer/ngstarter-ui-components-drawer.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const DRAWER = new InjectionToken('DRAWER');\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n forwardRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n Signal,\n TemplateRef,\n viewChild,\n ViewContainerRef, \n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DRAWER } from '../types';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { timer } from 'rxjs';\n\n@Component({\n selector: 'ngs-drawer',\n exportAs: 'ngsDrawer',\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n providers: [\n {\n provide: DRAWER,\n useExisting: forwardRef(() => Drawer),\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-drawer'\n }\n})\nexport class Drawer implements OnDestroy {\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n private destroyRef = inject(DestroyRef);\n\n readonly initialIsOpen = input<boolean | undefined>(undefined, { alias: 'isOpen' });\n readonly showBackdrop = input(true);\n\n readonly closed = output<void>();\n readonly opened = output<void>();\n\n private internalIsOpen: WritableSignal<boolean> = signal(false);\n private overlayRef: OverlayRef | null = null;\n protected portal = viewChild.required<TemplateRef<any>>('portal');\n\n protected _isOpen: Signal<boolean> = computed(() => this.internalIsOpen());\n\n constructor() {\n effect(() => {\n const externalIsOpen = this.initialIsOpen();\n if (externalIsOpen !== undefined) {\n if (externalIsOpen) {\n this.open();\n } else {\n this.close();\n }\n }\n });\n }\n\n ngOnDestroy() {\n this.close();\n }\n\n open(): void {\n if (this.internalIsOpen()) {\n return;\n }\n\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n hasBackdrop: this.showBackdrop(),\n backdropClass: 'drawer-backdrop',\n positionStrategy: this.overlay.position().global().right('0').top('0').bottom('0'),\n scrollStrategy: this.overlay.scrollStrategies.block()\n });\n\n this.overlayRef.backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.close();\n });\n\n this.overlayRef.outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (target.closest('.ngs-drawer-ignore-outside-click')) {\n return;\n }\n\n this.close();\n });\n\n this.overlayRef.keydownEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n if (event.key === 'Escape') {\n this.close();\n }\n });\n }\n\n const portal = new TemplatePortal(this.portal(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n if (!this.showBackdrop()) {\n this.overlayRef.hostElement.classList.add('pointer-events-none');\n }\n\n // Delay setting internalIsOpen to true to ensure the entry animation triggers\n setTimeout(() => {\n this.internalIsOpen.set(true);\n });\n\n this.opened.emit();\n }\n\n close(): void {\n if (!this.internalIsOpen()) {\n return;\n }\n\n this.internalIsOpen.set(false);\n\n timer(150)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.closed.emit();\n });\n }\n\n get isOpened(): boolean {\n return this._isOpen();\n }\n}\n","<ng-template #portal>\n <div\n class=\"ngs-drawer-container\"\n [class.open]=\"_isOpen()\">\n <div class=\"ngs-drawer-content\">\n <ng-content/>\n </div>\n </div>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsDrawerIgnoreOutsideClick]',\n host: {\n 'class': 'ngs-drawer-ignore-outside-click'\n }\n})\nexport class DrawerIgnoreOutsideClickDirective {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAEa,MAAM,GAAG,IAAI,cAAc,CAAC,QAAQ;;MCwCpC,MAAM,CAAA;AACT,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAE9B,aAAa,GAAG,KAAK,CAAsB,SAAS,qFAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;AAC1E,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,mFAAC;IAE1B,MAAM,GAAG,MAAM,EAAQ;IACvB,MAAM,GAAG,MAAM,EAAQ;AAExB,IAAA,cAAc,GAA4B,MAAM,CAAC,KAAK,qFAAC;IACvD,UAAU,GAAsB,IAAI;AAClC,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAmB,QAAQ,CAAC;IAEvD,OAAO,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE1E,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,YAAA,IAAI,cAAc,KAAK,SAAS,EAAE;gBAChC,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,IAAI,EAAE;gBACb;qBAAO;oBACL,IAAI,CAAC,KAAK,EAAE;gBACd;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,gBAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AAChC,gBAAA,aAAa,EAAE,iBAAiB;gBAChC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAClF,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK;AACpD,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1B,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,CAAC,CAAC;AAEJ,YAAA,IAAI,CAAC,UAAU,CAAC,oBAAoB;AACjC,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC/B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,gBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,EAAE;oBACtD;gBACF;gBAEA,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,CAAC,CAAC;AAEJ,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa;AAC1B,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,KAAK,IAAG;AACjB,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAC1B,IAAI,CAAC,KAAK,EAAE;gBACd;AACF,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACvE,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAClE;;QAGA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAE9B,KAAK,CAAC,GAAG;AACN,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;uGA9GW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAZN;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,MAAM,CAAC;AACtC;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCH,yMASA,EAAA,MAAA,EAAA,CAAA,w7BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDiCa,MAAM,EAAA,UAAA,EAAA,CAAA;kBAjBlB,SAAS;+BACE,YAAY,EAAA,QAAA,EACZ,WAAW,EAAA,SAAA,EAGV;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC;AACtC;AACF,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,yMAAA,EAAA,MAAA,EAAA,CAAA,w7BAAA,CAAA,EAAA;2YAeuD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME/CrD,iCAAiC,CAAA;uGAAjC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE;AACV;AACF,iBAAA;;;ACPD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngstarter-ui/components",
3
3
  "description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
4
- "version": "21.0.23",
4
+ "version": "21.0.24",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"