@ngstarter-ui/components 21.0.23 → 21.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/ai/component-registry.json +14 -6
  2. package/fesm2022/ngstarter-ui-components-avatar.mjs +3 -3
  3. package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-badge.mjs +1 -2
  5. package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +0 -2
  7. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-button-toggle.mjs +1 -1
  9. package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-button.mjs +2 -2
  11. package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-calendar.mjs +1 -1
  13. package/fesm2022/ngstarter-ui-components-calendar.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-card-overlay.mjs +0 -1
  15. package/fesm2022/ngstarter-ui-components-card-overlay.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-card.mjs +7 -12
  17. package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-carousel.mjs +0 -3
  19. package/fesm2022/ngstarter-ui-components-carousel.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-chips.mjs +16 -19
  21. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  22. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +4 -1
  23. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
  24. package/fesm2022/ngstarter-ui-components-command-bar.mjs +2 -2
  25. package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -1
  26. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +4 -16
  27. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
  28. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs} +2 -2
  29. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs.map → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs.map} +1 -1
  30. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs} +2 -2
  31. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs.map → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs.map} +1 -1
  32. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs} +2 -2
  33. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs.map} +1 -1
  34. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs} +2 -2
  35. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs.map → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs.map} +1 -1
  36. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs} +2 -2
  37. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs.map → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs.map} +1 -1
  38. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs} +12 -13
  39. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs.map +1 -0
  40. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs} +2 -2
  41. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map} +1 -1
  42. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs} +2 -2
  43. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map} +1 -1
  44. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs} +2 -2
  45. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs.map → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs.map} +1 -1
  46. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs} +2 -2
  47. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs.map → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs.map} +1 -1
  48. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  49. package/fesm2022/ngstarter-ui-components-core.mjs +0 -9
  50. package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -1
  51. package/fesm2022/ngstarter-ui-components-country-select.mjs +11 -11
  52. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  53. package/fesm2022/ngstarter-ui-components-data-view.mjs +0 -3
  54. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
  55. package/fesm2022/ngstarter-ui-components-datepicker.mjs +27 -23
  56. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
  57. package/fesm2022/ngstarter-ui-components-dialog.mjs +0 -1
  58. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
  59. package/fesm2022/ngstarter-ui-components-digit-roller.mjs +4 -4
  60. package/fesm2022/ngstarter-ui-components-digit-roller.mjs.map +1 -1
  61. package/fesm2022/ngstarter-ui-components-drawer.mjs +15 -7
  62. package/fesm2022/ngstarter-ui-components-drawer.mjs.map +1 -1
  63. package/fesm2022/ngstarter-ui-components-empty-state.mjs +6 -6
  64. package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -1
  65. package/fesm2022/ngstarter-ui-components-expansion.mjs +6 -6
  66. package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -1
  67. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +0 -3
  68. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  69. package/fesm2022/ngstarter-ui-components-form-field.mjs +4 -4
  70. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
  71. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs} +2 -2
  72. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs.map → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs.map} +1 -1
  73. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs} +2 -2
  74. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs.map → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs.map} +1 -1
  75. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs} +2 -2
  76. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs.map → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs.map} +1 -1
  77. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs} +2 -2
  78. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs.map → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs.map} +1 -1
  79. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs} +2 -2
  80. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs.map → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs.map} +1 -1
  81. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs} +2 -2
  82. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs.map → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs.map} +1 -1
  83. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs} +2 -2
  84. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs.map → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs.map} +1 -1
  85. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +9 -9
  86. package/fesm2022/ngstarter-ui-components-form-renderer.mjs.map +1 -1
  87. package/fesm2022/ngstarter-ui-components-guided-tour.mjs +4 -5
  88. package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -1
  89. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs +2 -2
  90. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs.map +1 -1
  91. package/fesm2022/ngstarter-ui-components-icon.mjs +1 -1
  92. package/fesm2022/ngstarter-ui-components-icon.mjs.map +1 -1
  93. package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
  94. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  95. package/fesm2022/ngstarter-ui-components-marquee.mjs +78 -8
  96. package/fesm2022/ngstarter-ui-components-marquee.mjs.map +1 -1
  97. package/fesm2022/ngstarter-ui-components-notifications.mjs +4 -5
  98. package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -1
  99. package/package.json +1 -1
  100. package/types/ngstarter-ui-components-card.d.ts +1 -1
  101. package/types/ngstarter-ui-components-chips.d.ts +3 -3
  102. package/types/ngstarter-ui-components-datepicker.d.ts +6 -6
  103. package/types/ngstarter-ui-components-expansion.d.ts +2 -2
  104. package/types/ngstarter-ui-components-form-field.d.ts +2 -2
  105. package/types/ngstarter-ui-components-guided-tour.d.ts +1 -1
  106. package/types/ngstarter-ui-components-marquee.d.ts +19 -11
  107. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs.map +0 -1
@@ -1,15 +1,19 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, PLATFORM_ID, input, booleanAttribute, viewChild, TemplateRef, Component, Directive } from '@angular/core';
3
- import { isPlatformServer, NgTemplateOutlet } from '@angular/common';
2
+ import { inject, ElementRef, PLATFORM_ID, input, booleanAttribute, viewChild, Component, Directive } from '@angular/core';
3
+ import { isPlatformServer } from '@angular/common';
4
4
 
5
5
  class Marquee {
6
6
  _elementRef = inject(ElementRef);
7
7
  _platformId = inject(PLATFORM_ID);
8
8
  _intersectionObserver;
9
+ _resizeObserver;
10
+ _mutationObserver;
11
+ _measureFrame = 0;
9
12
  reverse = input(false, { ...(ngDevMode ? { debugName: "reverse" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
10
13
  pauseOnHover = input(false, { ...(ngDevMode ? { debugName: "pauseOnHover" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
11
14
  isInView = false;
12
- template = viewChild.required(TemplateRef);
15
+ track = viewChild.required('track');
16
+ sourceItem = viewChild.required('sourceItem');
13
17
  get nativeElement() {
14
18
  return this._elementRef.nativeElement;
15
19
  }
@@ -21,7 +25,7 @@ class Marquee {
21
25
  this.nativeElement.style.setProperty('--ngs-marquee-pause', changes['pauseOnHover'].currentValue ? 'paused' : 'running');
22
26
  }
23
27
  }
24
- ngAfterContentInit() {
28
+ ngAfterViewInit() {
25
29
  if (isPlatformServer(this._platformId)) {
26
30
  return;
27
31
  }
@@ -36,21 +40,87 @@ class Marquee {
36
40
  }
37
41
  });
38
42
  this._intersectionObserver.observe(this.nativeElement);
43
+ if (typeof ResizeObserver !== 'undefined') {
44
+ this._resizeObserver = new ResizeObserver(() => {
45
+ this._queueRepeatMeasure();
46
+ });
47
+ this._resizeObserver.observe(this.nativeElement);
48
+ this._resizeObserver.observe(this.sourceItem().nativeElement);
49
+ }
50
+ if (typeof MutationObserver !== 'undefined') {
51
+ this._mutationObserver = new MutationObserver(() => {
52
+ this._queueRepeatMeasure();
53
+ });
54
+ this._mutationObserver.observe(this.sourceItem().nativeElement, {
55
+ attributes: true,
56
+ characterData: true,
57
+ childList: true,
58
+ subtree: true
59
+ });
60
+ }
61
+ this._queueRepeatMeasure();
39
62
  }
40
63
  ngOnDestroy() {
41
64
  if (this._intersectionObserver) {
42
65
  this._intersectionObserver.disconnect();
43
66
  }
67
+ if (this._resizeObserver) {
68
+ this._resizeObserver.disconnect();
69
+ }
70
+ if (this._mutationObserver) {
71
+ this._mutationObserver.disconnect();
72
+ }
73
+ if (this._measureFrame) {
74
+ cancelAnimationFrame(this._measureFrame);
75
+ }
76
+ }
77
+ _queueRepeatMeasure() {
78
+ if (this._measureFrame) {
79
+ cancelAnimationFrame(this._measureFrame);
80
+ }
81
+ this._measureFrame = requestAnimationFrame(() => {
82
+ this._measureFrame = 0;
83
+ this._syncRepeatItems();
84
+ });
85
+ }
86
+ _syncRepeatItems() {
87
+ const viewport = this.nativeElement.querySelector('.content');
88
+ const item = this.sourceItem().nativeElement;
89
+ if (!viewport) {
90
+ return;
91
+ }
92
+ const viewportWidth = viewport.getBoundingClientRect().width;
93
+ const itemWidth = item.getBoundingClientRect().width;
94
+ if (viewportWidth <= 0 || itemWidth <= 0) {
95
+ return;
96
+ }
97
+ const repeatGap = Math.max(0, viewportWidth - itemWidth);
98
+ this.nativeElement.style.setProperty('--ngs-marquee-item-width', `${itemWidth}px`);
99
+ this.nativeElement.style.setProperty('--ngs-marquee-repeat-gap', `${repeatGap}px`);
100
+ this._renderClone();
101
+ }
102
+ _renderClone() {
103
+ const track = this.track().nativeElement;
104
+ const sourceItem = this.sourceItem().nativeElement;
105
+ track.querySelectorAll('[data-ngs-marquee-clone]').forEach(clone => clone.remove());
106
+ track.appendChild(this._createItemClone(sourceItem));
107
+ }
108
+ _createItemClone(sourceItem) {
109
+ const clone = sourceItem.cloneNode(true);
110
+ clone.dataset['ngsMarqueeClone'] = 'true';
111
+ clone.setAttribute('aria-hidden', 'true');
112
+ clone.setAttribute('inert', '');
113
+ return clone;
44
114
  }
45
115
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Marquee, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: Marquee, isStandalone: true, selector: "ngs-marquee", inputs: { reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngs-marquee" }, viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], exportAs: ["ngsMarquee"], usesOnChanges: true, ngImport: i0, template: "<ng-template>\n <ng-content/>\n</ng-template>\n\n<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n</div>\n", styles: [":host{--ngs-marquee-animation-duration: 20s;--ngs-marquee-gap: calc(var(--spacing, .25rem) * 6);--ngs-marquee-reverse: ;--ngs-marquee-pause: running;display:block;width:100%}:host .content{width:100%;height:100%;display:flex;gap:var(--ngs-marquee-gap);overflow:hidden;padding:.5rem;flex-direction:row}:host .content .item{flex-direction:row;animation:ngs-marquee-animation var(--ngs-marquee-animation-duration) infinite linear var(--ngs-marquee-reverse)}:host .content .item{display:flex;gap:var(--ngs-marquee-gap);flex-shrink:0}:host .content:hover>.item{animation-play-state:var(--ngs-marquee-pause)}:host .content.out-of-view>.item{animation-play-state:paused}:host .invisible{width:0;height:0;display:none;pointer-events:none}@keyframes ngs-marquee-animation{0%{transform:translate(0)}to{transform:translate(calc(-100% - var(--ngs-marquee-gap)))}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
116
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: Marquee, isStandalone: true, selector: "ngs-marquee", inputs: { reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "ngs-marquee" }, viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true, isSignal: true }, { propertyName: "sourceItem", first: true, predicate: ["sourceItem"], descendants: true, isSignal: true }], exportAs: ["ngsMarquee"], usesOnChanges: true, ngImport: i0, template: "<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div #track class=\"track\">\n <div #sourceItem class=\"item\">\n <ng-content/>\n </div>\n </div>\n</div>\n", styles: [":host{--ngs-marquee-animation-duration: 20s;--ngs-marquee-gap: calc(var(--spacing, .25rem) * 6);--ngs-marquee-repeat-gap: var(--ngs-marquee-gap);--ngs-marquee-item-width: 0px;--ngs-marquee-reverse: ;--ngs-marquee-pause: running;display:block;width:100%}:host .content{width:100%;height:100%;overflow:hidden;padding:.5rem}:host .content .track{display:flex;gap:var(--ngs-marquee-repeat-gap);width:max-content;animation:ngs-marquee-animation var(--ngs-marquee-animation-duration) infinite linear var(--ngs-marquee-reverse);will-change:transform}:host .content .item{display:flex;flex-shrink:0;white-space:nowrap}:host .content:hover .track{animation-play-state:var(--ngs-marquee-pause)}:host .content.out-of-view .track{animation-play-state:paused}:host .invisible{width:0;height:0;display:none;pointer-events:none}@keyframes ngs-marquee-animation{0%{transform:translate(0)}to{transform:translate(calc((var(--ngs-marquee-item-width) + var(--ngs-marquee-repeat-gap)) * -1))}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
47
117
  }
48
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Marquee, decorators: [{
49
119
  type: Component,
50
- args: [{ selector: 'ngs-marquee', exportAs: 'ngsMarquee', imports: [NgTemplateOutlet], host: {
120
+ args: [{ selector: 'ngs-marquee', exportAs: 'ngsMarquee', host: {
51
121
  'class': 'ngs-marquee'
52
- }, template: "<ng-template>\n <ng-content/>\n</ng-template>\n\n<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n</div>\n", styles: [":host{--ngs-marquee-animation-duration: 20s;--ngs-marquee-gap: calc(var(--spacing, .25rem) * 6);--ngs-marquee-reverse: ;--ngs-marquee-pause: running;display:block;width:100%}:host .content{width:100%;height:100%;display:flex;gap:var(--ngs-marquee-gap);overflow:hidden;padding:.5rem;flex-direction:row}:host .content .item{flex-direction:row;animation:ngs-marquee-animation var(--ngs-marquee-animation-duration) infinite linear var(--ngs-marquee-reverse)}:host .content .item{display:flex;gap:var(--ngs-marquee-gap);flex-shrink:0}:host .content:hover>.item{animation-play-state:var(--ngs-marquee-pause)}:host .content.out-of-view>.item{animation-play-state:paused}:host .invisible{width:0;height:0;display:none;pointer-events:none}@keyframes ngs-marquee-animation{0%{transform:translate(0)}to{transform:translate(calc(-100% - var(--ngs-marquee-gap)))}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
53
- }], propDecorators: { reverse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverse", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], template: [{ type: i0.ViewChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
122
+ }, template: "<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div #track class=\"track\">\n <div #sourceItem class=\"item\">\n <ng-content/>\n </div>\n </div>\n</div>\n", styles: [":host{--ngs-marquee-animation-duration: 20s;--ngs-marquee-gap: calc(var(--spacing, .25rem) * 6);--ngs-marquee-repeat-gap: var(--ngs-marquee-gap);--ngs-marquee-item-width: 0px;--ngs-marquee-reverse: ;--ngs-marquee-pause: running;display:block;width:100%}:host .content{width:100%;height:100%;overflow:hidden;padding:.5rem}:host .content .track{display:flex;gap:var(--ngs-marquee-repeat-gap);width:max-content;animation:ngs-marquee-animation var(--ngs-marquee-animation-duration) infinite linear var(--ngs-marquee-reverse);will-change:transform}:host .content .item{display:flex;flex-shrink:0;white-space:nowrap}:host .content:hover .track{animation-play-state:var(--ngs-marquee-pause)}:host .content.out-of-view .track{animation-play-state:paused}:host .invisible{width:0;height:0;display:none;pointer-events:none}@keyframes ngs-marquee-animation{0%{transform:translate(0)}to{transform:translate(calc((var(--ngs-marquee-item-width) + var(--ngs-marquee-repeat-gap)) * -1))}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
123
+ }], propDecorators: { reverse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverse", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], track: [{ type: i0.ViewChild, args: ['track', { isSignal: true }] }], sourceItem: [{ type: i0.ViewChild, args: ['sourceItem', { isSignal: true }] }] } });
54
124
 
55
125
  class MarqueeItemDirective {
56
126
  _elementRef = inject(ElementRef);
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-marquee.mjs","sources":["../../../projects/components/marquee/src/marquee/marquee.ts","../../../projects/components/marquee/src/marquee/marquee.html","../../../projects/components/marquee/src/marquee-item.directive.ts","../../../projects/components/marquee/ngstarter-ui-components-marquee.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n input,\n viewChild,\n AfterContentInit,\n inject,\n PLATFORM_ID,\n booleanAttribute,\n OnChanges,\n SimpleChanges,\n OnDestroy,\n TemplateRef\n} from '@angular/core';\nimport { isPlatformServer, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'ngs-marquee',\n exportAs: 'ngsMarquee',\n imports: [NgTemplateOutlet],\n templateUrl: './marquee.html',\n styleUrl: './marquee.scss',\n host: {\n 'class': 'ngs-marquee'\n }\n})\nexport class Marquee implements AfterContentInit, OnChanges, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _platformId = inject(PLATFORM_ID);\n private _intersectionObserver?: IntersectionObserver;\n\n reverse = input(false, {\n transform: booleanAttribute\n });\n pauseOnHover = input(false, {\n transform: booleanAttribute\n });\n\n protected isInView = false;\n\n readonly template = viewChild.required(TemplateRef);\n\n protected get nativeElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['reverse']) {\n this.nativeElement.style.setProperty('--ngs-marquee-reverse', changes['reverse'].currentValue ? 'reverse' : '');\n }\n\n if (changes['pauseOnHover']) {\n this.nativeElement.style.setProperty('--ngs-marquee-pause', changes['pauseOnHover'].currentValue ? 'paused' : 'running');\n }\n }\n\n ngAfterContentInit(): void {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n this._intersectionObserver = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n if (!this.isInView) {\n this.isInView = true;\n }\n } else if (this.isInView) {\n this.isInView = false;\n }\n });\n this._intersectionObserver.observe(this.nativeElement);\n }\n\n ngOnDestroy(): void {\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n }\n }\n}\n","<ng-template>\n <ng-content/>\n</ng-template>\n\n<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n <div class=\"item\">\n <ng-template [ngTemplateOutlet]=\"template()\" />\n </div>\n</div>\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsMarqueeItem]',\n standalone: true\n})\nexport class MarqueeItemDirective {\n private _elementRef = inject(ElementRef);\n\n get nativeElement(): HTMLElement {\n return this._elementRef.nativeElement;\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-marquee.mjs","sources":["../../../projects/components/marquee/src/marquee/marquee.ts","../../../projects/components/marquee/src/marquee/marquee.html","../../../projects/components/marquee/src/marquee-item.directive.ts","../../../projects/components/marquee/ngstarter-ui-components-marquee.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n input,\n viewChild,\n AfterViewInit,\n inject,\n PLATFORM_ID,\n booleanAttribute,\n OnChanges,\n SimpleChanges,\n OnDestroy\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n@Component({\n selector: 'ngs-marquee',\n exportAs: 'ngsMarquee',\n templateUrl: './marquee.html',\n styleUrl: './marquee.scss',\n host: {\n 'class': 'ngs-marquee'\n }\n})\nexport class Marquee implements AfterViewInit, OnChanges, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _platformId = inject(PLATFORM_ID);\n private _intersectionObserver?: IntersectionObserver;\n private _resizeObserver?: ResizeObserver;\n private _mutationObserver?: MutationObserver;\n private _measureFrame = 0;\n\n reverse = input(false, {\n transform: booleanAttribute\n });\n pauseOnHover = input(false, {\n transform: booleanAttribute\n });\n\n protected isInView = false;\n\n readonly track = viewChild.required<ElementRef<HTMLElement>>('track');\n readonly sourceItem = viewChild.required<ElementRef<HTMLElement>>('sourceItem');\n\n protected get nativeElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['reverse']) {\n this.nativeElement.style.setProperty('--ngs-marquee-reverse', changes['reverse'].currentValue ? 'reverse' : '');\n }\n\n if (changes['pauseOnHover']) {\n this.nativeElement.style.setProperty('--ngs-marquee-pause', changes['pauseOnHover'].currentValue ? 'paused' : 'running');\n }\n }\n\n ngAfterViewInit(): void {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n this._intersectionObserver = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n if (!this.isInView) {\n this.isInView = true;\n }\n } else if (this.isInView) {\n this.isInView = false;\n }\n });\n this._intersectionObserver.observe(this.nativeElement);\n\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => {\n this._queueRepeatMeasure();\n });\n this._resizeObserver.observe(this.nativeElement);\n this._resizeObserver.observe(this.sourceItem().nativeElement);\n }\n\n if (typeof MutationObserver !== 'undefined') {\n this._mutationObserver = new MutationObserver(() => {\n this._queueRepeatMeasure();\n });\n this._mutationObserver.observe(this.sourceItem().nativeElement, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true\n });\n }\n\n this._queueRepeatMeasure();\n }\n\n ngOnDestroy(): void {\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n }\n\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n\n if (this._mutationObserver) {\n this._mutationObserver.disconnect();\n }\n\n if (this._measureFrame) {\n cancelAnimationFrame(this._measureFrame);\n }\n }\n\n private _queueRepeatMeasure(): void {\n if (this._measureFrame) {\n cancelAnimationFrame(this._measureFrame);\n }\n\n this._measureFrame = requestAnimationFrame(() => {\n this._measureFrame = 0;\n this._syncRepeatItems();\n });\n }\n\n private _syncRepeatItems(): void {\n const viewport = this.nativeElement.querySelector<HTMLElement>('.content');\n const item = this.sourceItem().nativeElement;\n\n if (!viewport) {\n return;\n }\n\n const viewportWidth = viewport.getBoundingClientRect().width;\n const itemWidth = item.getBoundingClientRect().width;\n\n if (viewportWidth <= 0 || itemWidth <= 0) {\n return;\n }\n\n const repeatGap = Math.max(0, viewportWidth - itemWidth);\n\n this.nativeElement.style.setProperty('--ngs-marquee-item-width', `${itemWidth}px`);\n this.nativeElement.style.setProperty('--ngs-marquee-repeat-gap', `${repeatGap}px`);\n this._renderClone();\n }\n\n private _renderClone(): void {\n const track = this.track().nativeElement;\n const sourceItem = this.sourceItem().nativeElement;\n\n track.querySelectorAll('[data-ngs-marquee-clone]').forEach(clone => clone.remove());\n\n track.appendChild(this._createItemClone(sourceItem));\n }\n\n private _createItemClone(sourceItem: HTMLElement): HTMLElement {\n const clone = sourceItem.cloneNode(true) as HTMLElement;\n\n clone.dataset['ngsMarqueeClone'] = 'true';\n clone.setAttribute('aria-hidden', 'true');\n clone.setAttribute('inert', '');\n\n return clone;\n }\n}\n","<div class=\"content\" [class.out-of-view]=\"!isInView\">\n <div #track class=\"track\">\n <div #sourceItem class=\"item\">\n <ng-content/>\n </div>\n </div>\n</div>\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsMarqueeItem]',\n standalone: true\n})\nexport class MarqueeItemDirective {\n private _elementRef = inject(ElementRef);\n\n get nativeElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -26,7 +26,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
26
26
  type: Directive,
27
27
  args: [{
28
28
  selector: '[ngsNotificationControlsDef]',
29
- standalone: true
30
29
  }]
31
30
  }] });
32
31
 
@@ -119,25 +118,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
119
118
  class Notification {
120
119
  isUnread = input(false, { ...(ngDevMode ? { debugName: "isUnread" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
121
120
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Notification, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: Notification, isStandalone: true, selector: "ngs-notification,[ngs-notification]", inputs: { isUnread: { classPropertyName: "isUnread", publicName: "isUnread", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-unread": "isUnread()" }, classAttribute: "ngs-notification" }, exportAs: ["ngsNotification"], ngImport: i0, template: "<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n", styles: [":host{--ngs-notification-padding: calc(var(--spacing, .25rem) * 5);--ngs-notification-gap: calc(var(--spacing, .25rem) * 4);--ngs-notification-bg: var(--ngs-color-surface-container-low);--ngs-notification-hover-bg: var(--ngs-color-surface-container);--ngs-notification-is-unread-bg: var(--ngs-color-primary-200);--ngs-notification-is-unread-hover-bg: var(--ngs-color-primary-300);display:flex;width:100%;position:relative;border-radius:var(--ngs-radius-xl);gap:var(--ngs-notification-gap);padding:var(--ngs-notification-padding)}:host .avatar{position:relative}:host .avatar:empty{display:none}:host .actor:empty{display:none}:host .message:empty{display:none}:host-context(ngs-notification-list.is-static){cursor:auto}:host-context(ngs-notification-list){background:var(--ngs-notification-bg);cursor:pointer}:host-context(ngs-notification-list).is-unread{background:var(--ngs-notification-is-unread-bg)}:host-context(ngs-notification-list:not(.is-static)):hover{background:var(--ngs-notification-hover-bg)}:host-context(ngs-notification-list:not(.is-static)).is-unread:hover{background:var(--ngs-notification-is-unread-hover-bg)}:host-context(html.dark){--ngs-notification-is-unread-bg: var(--ngs-color-neutral-950);--ngs-notification-is-unread-hover-bg: var(--ngs-color-neutral-900)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: Notification, isStandalone: true, selector: "ngs-notification,[ngs-notification]", inputs: { isUnread: { classPropertyName: "isUnread", publicName: "isUnread", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-unread": "isUnread()" }, classAttribute: "ngs-notification" }, exportAs: ["ngsNotification"], ngImport: i0, template: "<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n", styles: [":host{--ngs-notification-padding: calc(var(--spacing, .25rem) * 5);--ngs-notification-gap: calc(var(--spacing, .25rem) * 4);--ngs-notification-bg: var(--ngs-color-surface-container-lowest);--ngs-notification-hover-bg: var(--ngs-color-surface-container-low);--ngs-notification-is-unread-bg: var(--ngs-color-surface-container-low);--ngs-notification-is-unread-hover-bg: var(--ngs-color-surface-container);--ngs-notification-radius: .75rem;display:flex;width:100%;position:relative;border-radius:var(--ngs-notification-radius);gap:var(--ngs-notification-gap);padding:var(--ngs-notification-padding)}:host .avatar{position:relative}:host .avatar:empty{display:none}:host .actor:empty{display:none}:host .message:empty{display:none}:host-context(ngs-notification-list.is-static){cursor:auto}:host-context(ngs-notification-list){background:var(--ngs-notification-bg);cursor:pointer}:host-context(ngs-notification-list).is-unread{background:var(--ngs-notification-is-unread-bg)}:host-context(ngs-notification-list:not(.is-static)):hover{background:var(--ngs-notification-hover-bg)}:host-context(ngs-notification-list:not(.is-static)).is-unread:hover{background:var(--ngs-notification-is-unread-hover-bg)}:host-context(html.dark){--ngs-notification-is-unread-bg: var(--ngs-color-neutral-950);--ngs-notification-is-unread-hover-bg: var(--ngs-color-neutral-900)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
123
122
  }
124
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Notification, decorators: [{
125
124
  type: Component,
126
125
  args: [{ selector: 'ngs-notification,[ngs-notification]', exportAs: 'ngsNotification', imports: [], host: {
127
126
  'class': 'ngs-notification',
128
127
  '[class.is-unread]': 'isUnread()'
129
- }, template: "<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n", styles: [":host{--ngs-notification-padding: calc(var(--spacing, .25rem) * 5);--ngs-notification-gap: calc(var(--spacing, .25rem) * 4);--ngs-notification-bg: var(--ngs-color-surface-container-low);--ngs-notification-hover-bg: var(--ngs-color-surface-container);--ngs-notification-is-unread-bg: var(--ngs-color-primary-200);--ngs-notification-is-unread-hover-bg: var(--ngs-color-primary-300);display:flex;width:100%;position:relative;border-radius:var(--ngs-radius-xl);gap:var(--ngs-notification-gap);padding:var(--ngs-notification-padding)}:host .avatar{position:relative}:host .avatar:empty{display:none}:host .actor:empty{display:none}:host .message:empty{display:none}:host-context(ngs-notification-list.is-static){cursor:auto}:host-context(ngs-notification-list){background:var(--ngs-notification-bg);cursor:pointer}:host-context(ngs-notification-list).is-unread{background:var(--ngs-notification-is-unread-bg)}:host-context(ngs-notification-list:not(.is-static)):hover{background:var(--ngs-notification-hover-bg)}:host-context(ngs-notification-list:not(.is-static)).is-unread:hover{background:var(--ngs-notification-is-unread-hover-bg)}:host-context(html.dark){--ngs-notification-is-unread-bg: var(--ngs-color-neutral-950);--ngs-notification-is-unread-hover-bg: var(--ngs-color-neutral-900)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
128
+ }, template: "<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n", styles: [":host{--ngs-notification-padding: calc(var(--spacing, .25rem) * 5);--ngs-notification-gap: calc(var(--spacing, .25rem) * 4);--ngs-notification-bg: var(--ngs-color-surface-container-lowest);--ngs-notification-hover-bg: var(--ngs-color-surface-container-low);--ngs-notification-is-unread-bg: var(--ngs-color-surface-container-low);--ngs-notification-is-unread-hover-bg: var(--ngs-color-surface-container);--ngs-notification-radius: .75rem;display:flex;width:100%;position:relative;border-radius:var(--ngs-notification-radius);gap:var(--ngs-notification-gap);padding:var(--ngs-notification-padding)}:host .avatar{position:relative}:host .avatar:empty{display:none}:host .actor:empty{display:none}:host .message:empty{display:none}:host-context(ngs-notification-list.is-static){cursor:auto}:host-context(ngs-notification-list){background:var(--ngs-notification-bg);cursor:pointer}:host-context(ngs-notification-list).is-unread{background:var(--ngs-notification-is-unread-bg)}:host-context(ngs-notification-list:not(.is-static)):hover{background:var(--ngs-notification-hover-bg)}:host-context(ngs-notification-list:not(.is-static)).is-unread:hover{background:var(--ngs-notification-is-unread-hover-bg)}:host-context(html.dark){--ngs-notification-is-unread-bg: var(--ngs-color-neutral-950);--ngs-notification-is-unread-hover-bg: var(--ngs-color-neutral-900)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
130
129
  }], propDecorators: { isUnread: [{ type: i0.Input, args: [{ isSignal: true, alias: "isUnread", required: false }] }] } });
131
130
 
132
131
  class NotificationContent {
133
132
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NotificationContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
134
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: NotificationContent, isStandalone: true, selector: "ngs-notification-content,[ngs-notification-content]", host: { classAttribute: "ngs-notification-content" }, exportAs: ["ngsNotificationContent"], ngImport: i0, template: "<ng-content/>\n", styles: [":host{display:block;margin:calc(var(--spacing, .25rem) * 1) 0 calc(var(--spacing, .25rem) * 1) 0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
133
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: NotificationContent, isStandalone: true, selector: "ngs-notification-content,[ngs-notification-content]", host: { classAttribute: "ngs-notification-content" }, exportAs: ["ngsNotificationContent"], ngImport: i0, template: "<ng-content/>\n", styles: [":host{--ngs-notification-content-margin: calc(var(--spacing, .25rem) * 1.5) 0 calc(var(--spacing, .25rem) * 1.5) 0;display:block;margin:var(--ngs-notification-content-margin)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
135
134
  }
136
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NotificationContent, decorators: [{
137
136
  type: Component,
138
137
  args: [{ selector: 'ngs-notification-content,[ngs-notification-content]', exportAs: 'ngsNotificationContent', imports: [], host: {
139
138
  'class': 'ngs-notification-content'
140
- }, template: "<ng-content/>\n", styles: [":host{display:block;margin:calc(var(--spacing, .25rem) * 1) 0 calc(var(--spacing, .25rem) * 1) 0}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
139
+ }, template: "<ng-content/>\n", styles: [":host{--ngs-notification-content-margin: calc(var(--spacing, .25rem) * 1.5) 0 calc(var(--spacing, .25rem) * 1.5) 0;display:block;margin:var(--ngs-notification-content-margin)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
141
140
  }] });
142
141
 
143
142
  class NotificationPropsDirective {
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-notifications.mjs","sources":["../../../projects/components/notifications/src/notification-def.directive.ts","../../../projects/components/notifications/src/notification-controls-def.directive.ts","../../../projects/components/notifications/src/notification-list/notification-list.ts","../../../projects/components/notifications/src/notification-list/notification-list.html","../../../projects/components/notifications/src/notification-skeleton/notification-skeleton.ts","../../../projects/components/notifications/src/notification-skeleton/notification-skeleton.html","../../../projects/components/notifications/src/notification-time/notification-time.ts","../../../projects/components/notifications/src/notification-time/notification-time.html","../../../projects/components/notifications/src/notification-actor/notification-actor.ts","../../../projects/components/notifications/src/notification-actor/notification-actor.html","../../../projects/components/notifications/src/notification-message/notification-message.ts","../../../projects/components/notifications/src/notification-message/notification-message.html","../../../projects/components/notifications/src/notification/notification.ts","../../../projects/components/notifications/src/notification/notification.html","../../../projects/components/notifications/src/notification-content/notification-content.ts","../../../projects/components/notifications/src/notification-content/notification-content.html","../../../projects/components/notifications/src/notification-props.directive.ts","../../../projects/components/notifications/src/notification-avatar.directive.ts","../../../projects/components/notifications/ngstarter-ui-components-notifications.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationDef]',\n standalone: true\n})\nexport class NotificationDefDirective {\n readonly templateRef = inject(TemplateRef);\n ngsNotificationDef = input.required<string>();\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationControlsDef]',\n standalone: true\n})\nexport class NotificationControlsDefDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n AfterContentInit, booleanAttribute,\n Component,\n contentChild,\n contentChildren,\n input,\n TemplateRef\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NotificationDefDirective } from '../notification-def.directive';\nimport { NotificationControlsDefDirective } from '../notification-controls-def.directive';\nimport { NotificationInterface } from '../types';\n\n@Component({\n selector: 'ngs-notification-list',\n exportAs: 'ngsNotificationList',\n imports: [\n NgTemplateOutlet\n ],\n templateUrl: './notification-list.html',\n styleUrl: './notification-list.scss',\n host: {\n 'class': 'ngs-notification-list',\n '[class.is-static]': 'static()'\n }\n})\nexport class NotificationList<T extends NotificationInterface> implements AfterContentInit {\n readonly defs = contentChildren(NotificationDefDirective);\n readonly controlsDef = contentChild(NotificationControlsDefDirective);\n\n notifications = input<T[]>([]);\n static = input(true, {\n transform: booleanAttribute\n });\n\n protected _initialized = false;\n protected _defsMap = new Map<string, TemplateRef<any>>();\n\n get controlsTpl(): TemplateRef<any> {\n return this.controlsDef()?.templateRef as TemplateRef<any>;\n }\n\n ngAfterContentInit() {\n this.defs().forEach((def: NotificationDefDirective) => {\n this._defsMap.set(def.ngsNotificationDef(), def.templateRef);\n });\n this._initialized = true;\n }\n\n getNotificationTemplate(type: string): TemplateRef<any> {\n if (!this._defsMap.has(type)) {\n throw new Error(`Invalid type \"${type}\" for notification def`);\n }\n\n return this._defsMap.get(type) as TemplateRef<any>;\n }\n}\n","@if (_initialized) {\n @for (notification of notifications(); track notification) {\n <div class=\"notification\">\n <ng-container [ngTemplateOutlet]=\"getNotificationTemplate(notification.type)\"\n [ngTemplateOutletContext]=\"{ $implicit: notification }\" />\n @if (controlsDef()) {\n <div class=\"controls\">\n <ng-container [ngTemplateOutlet]=\"controlsTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: notification }\" />\n </div>\n }\n </div>\n }\n}\n","import { Component } from '@angular/core';\nimport { Skeleton } from '@ngstarter-ui/components/skeleton';\n\n@Component({\n selector: 'ngs-notification-skeleton',\n exportAs: 'ngsNotificationSkeleton',\n imports: [\n Skeleton\n ],\n templateUrl: './notification-skeleton.html',\n styleUrl: './notification-skeleton.scss',\n host: {\n 'class': 'ngs-notification-skeleton',\n }\n})\nexport class NotificationSkeleton {\n\n}\n","<div class=\"flex gap-3\">\n <ngs-skeleton roundedFull class=\"size-11\"/>\n <div class=\"grow flex flex-col gap-2\">\n <ngs-skeleton class=\"h-16\"/>\n <ngs-skeleton class=\"w-20 h-3\"/>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-time,[ngs-notification-time]',\n exportAs: 'ngsNotificationTime',\n imports: [],\n templateUrl: './notification-time.html',\n styleUrl: './notification-time.scss',\n host: {\n 'class': 'ngs-notification-time'\n }\n})\nexport class NotificationTime {\n\n}\n","<ng-content/>\n","import { Component, ElementRef, inject } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-actor,[ngs-notification-actor]',\n imports: [],\n templateUrl: './notification-actor.html',\n styleUrl: './notification-actor.scss',\n host: {\n 'class': 'ngs-notification-actor',\n '[class.as-link]': 'asLink'\n }\n})\nexport class NotificationActor {\n private elementRef = inject(ElementRef);\n\n protected get asLink() {\n return (this.elementRef.nativeElement as HTMLElement).tagName === 'A';\n }\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-message',\n exportAs: 'ngsNotificationMessage',\n imports: [],\n templateUrl: './notification-message.html',\n styleUrl: './notification-message.scss',\n host: {\n 'class': 'ngs-notification-message'\n }\n})\nexport class NotificationMessage {\n\n}\n","<ng-content/>\n","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification,[ngs-notification]',\n exportAs: 'ngsNotification',\n imports: [],\n templateUrl: './notification.html',\n styleUrl: './notification.scss',\n host: {\n 'class': 'ngs-notification',\n '[class.is-unread]': 'isUnread()'\n }\n})\nexport class Notification {\n isUnread = input(false, {\n transform: booleanAttribute\n });\n}\n","<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-content,[ngs-notification-content]',\n exportAs: 'ngsNotificationContent',\n imports: [],\n templateUrl: './notification-content.html',\n styleUrl: './notification-content.scss',\n host: {\n 'class': 'ngs-notification-content'\n }\n})\nexport class NotificationContent {\n\n}\n","<ng-content/>\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationProps]',\n exportAs: 'ngsNotificationProps',\n standalone: true,\n host: {\n 'class': 'ngs-notification-props',\n '[class.is-unread]': 'isUnread()',\n }\n})\nexport class NotificationPropsDirective {\n isUnread = input(false, {\n transform: booleanAttribute\n });\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationAvatar]',\n exportAs: 'ngsNotificationAvatar',\n host: {\n 'class': 'ngs-notification-avatar'\n }\n})\nexport class NotificationAvatarDirective {\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-notifications.mjs","sources":["../../../projects/components/notifications/src/notification-def.directive.ts","../../../projects/components/notifications/src/notification-controls-def.directive.ts","../../../projects/components/notifications/src/notification-list/notification-list.ts","../../../projects/components/notifications/src/notification-list/notification-list.html","../../../projects/components/notifications/src/notification-skeleton/notification-skeleton.ts","../../../projects/components/notifications/src/notification-skeleton/notification-skeleton.html","../../../projects/components/notifications/src/notification-time/notification-time.ts","../../../projects/components/notifications/src/notification-time/notification-time.html","../../../projects/components/notifications/src/notification-actor/notification-actor.ts","../../../projects/components/notifications/src/notification-actor/notification-actor.html","../../../projects/components/notifications/src/notification-message/notification-message.ts","../../../projects/components/notifications/src/notification-message/notification-message.html","../../../projects/components/notifications/src/notification/notification.ts","../../../projects/components/notifications/src/notification/notification.html","../../../projects/components/notifications/src/notification-content/notification-content.ts","../../../projects/components/notifications/src/notification-content/notification-content.html","../../../projects/components/notifications/src/notification-props.directive.ts","../../../projects/components/notifications/src/notification-avatar.directive.ts","../../../projects/components/notifications/ngstarter-ui-components-notifications.ts"],"sourcesContent":["import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationDef]',\n standalone: true\n})\nexport class NotificationDefDirective {\n readonly templateRef = inject(TemplateRef);\n ngsNotificationDef = input.required<string>();\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationControlsDef]',\n})\nexport class NotificationControlsDefDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n AfterContentInit, booleanAttribute,\n Component,\n contentChild,\n contentChildren,\n input,\n TemplateRef\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NotificationDefDirective } from '../notification-def.directive';\nimport { NotificationControlsDefDirective } from '../notification-controls-def.directive';\nimport { NotificationInterface } from '../types';\n\n@Component({\n selector: 'ngs-notification-list',\n exportAs: 'ngsNotificationList',\n imports: [\n NgTemplateOutlet\n ],\n templateUrl: './notification-list.html',\n styleUrl: './notification-list.scss',\n host: {\n 'class': 'ngs-notification-list',\n '[class.is-static]': 'static()'\n }\n})\nexport class NotificationList<T extends NotificationInterface> implements AfterContentInit {\n readonly defs = contentChildren(NotificationDefDirective);\n readonly controlsDef = contentChild(NotificationControlsDefDirective);\n\n notifications = input<T[]>([]);\n static = input(true, {\n transform: booleanAttribute\n });\n\n protected _initialized = false;\n protected _defsMap = new Map<string, TemplateRef<any>>();\n\n get controlsTpl(): TemplateRef<any> {\n return this.controlsDef()?.templateRef as TemplateRef<any>;\n }\n\n ngAfterContentInit() {\n this.defs().forEach((def: NotificationDefDirective) => {\n this._defsMap.set(def.ngsNotificationDef(), def.templateRef);\n });\n this._initialized = true;\n }\n\n getNotificationTemplate(type: string): TemplateRef<any> {\n if (!this._defsMap.has(type)) {\n throw new Error(`Invalid type \"${type}\" for notification def`);\n }\n\n return this._defsMap.get(type) as TemplateRef<any>;\n }\n}\n","@if (_initialized) {\n @for (notification of notifications(); track notification) {\n <div class=\"notification\">\n <ng-container [ngTemplateOutlet]=\"getNotificationTemplate(notification.type)\"\n [ngTemplateOutletContext]=\"{ $implicit: notification }\" />\n @if (controlsDef()) {\n <div class=\"controls\">\n <ng-container [ngTemplateOutlet]=\"controlsTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: notification }\" />\n </div>\n }\n </div>\n }\n}\n","import { Component } from '@angular/core';\nimport { Skeleton } from '@ngstarter-ui/components/skeleton';\n\n@Component({\n selector: 'ngs-notification-skeleton',\n exportAs: 'ngsNotificationSkeleton',\n imports: [\n Skeleton\n ],\n templateUrl: './notification-skeleton.html',\n styleUrl: './notification-skeleton.scss',\n host: {\n 'class': 'ngs-notification-skeleton',\n }\n})\nexport class NotificationSkeleton {\n\n}\n","<div class=\"flex gap-3\">\n <ngs-skeleton roundedFull class=\"size-11\"/>\n <div class=\"grow flex flex-col gap-2\">\n <ngs-skeleton class=\"h-16\"/>\n <ngs-skeleton class=\"w-20 h-3\"/>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-time,[ngs-notification-time]',\n exportAs: 'ngsNotificationTime',\n imports: [],\n templateUrl: './notification-time.html',\n styleUrl: './notification-time.scss',\n host: {\n 'class': 'ngs-notification-time'\n }\n})\nexport class NotificationTime {\n\n}\n","<ng-content/>\n","import { Component, ElementRef, inject } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-actor,[ngs-notification-actor]',\n imports: [],\n templateUrl: './notification-actor.html',\n styleUrl: './notification-actor.scss',\n host: {\n 'class': 'ngs-notification-actor',\n '[class.as-link]': 'asLink'\n }\n})\nexport class NotificationActor {\n private elementRef = inject(ElementRef);\n\n protected get asLink() {\n return (this.elementRef.nativeElement as HTMLElement).tagName === 'A';\n }\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-message',\n exportAs: 'ngsNotificationMessage',\n imports: [],\n templateUrl: './notification-message.html',\n styleUrl: './notification-message.scss',\n host: {\n 'class': 'ngs-notification-message'\n }\n})\nexport class NotificationMessage {\n\n}\n","<ng-content/>\n","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification,[ngs-notification]',\n exportAs: 'ngsNotification',\n imports: [],\n templateUrl: './notification.html',\n styleUrl: './notification.scss',\n host: {\n 'class': 'ngs-notification',\n '[class.is-unread]': 'isUnread()'\n }\n})\nexport class Notification {\n isUnread = input(false, {\n transform: booleanAttribute\n });\n}\n","<div class=\"avatar\">\n <ng-content select=\"[ngsNotificationAvatar]\"/>\n</div>\n<div class=\"grow\">\n <span class=\"message\">\n <ng-content select=\"ngs-notification-message,[ngs-notification-message]\"/>\n </span>\n <div class=\"content\">\n <ng-content select=\"ngs-notification-content,[ngs-notification-content]\"/>\n </div>\n <ng-content select=\"ngs-notification-time,[ngs-notification-time]\"/>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-notification-content,[ngs-notification-content]',\n exportAs: 'ngsNotificationContent',\n imports: [],\n templateUrl: './notification-content.html',\n styleUrl: './notification-content.scss',\n host: {\n 'class': 'ngs-notification-content'\n }\n})\nexport class NotificationContent {\n\n}\n","<ng-content/>\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationProps]',\n exportAs: 'ngsNotificationProps',\n standalone: true,\n host: {\n 'class': 'ngs-notification-props',\n '[class.is-unread]': 'isUnread()',\n }\n})\nexport class NotificationPropsDirective {\n isUnread = input(false, {\n transform: booleanAttribute\n });\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngsNotificationAvatar]',\n exportAs: 'ngsNotificationAvatar',\n host: {\n 'class': 'ngs-notification-avatar'\n }\n})\nexport class NotificationAvatarDirective {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
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.25",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"
@@ -24,7 +24,7 @@ declare class Card {
24
24
 
25
25
  declare class CardHeader {
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<CardHeader, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<CardHeader, "ngs-card-header", never, {}, {}, never, ["ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]", "ngs-card-title, [ngs-card-title], [ngsCardTitle]", "ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]", "*", "ngs-card-aside, [ngs-card-aside], [ngsCardAside]"], true, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<CardHeader, "ngs-card-header", ["ngsCardHeader"], {}, {}, never, ["ngs-card-avatar, [ngs-card-avatar], [ngsCardAvatar]", "ngs-card-title, [ngs-card-title], [ngsCardTitle]", "ngs-card-subtitle, [ngs-card-subtitle], [ngsCardSubtitle]", "*", "ngs-card-aside, [ngs-card-aside], [ngsCardAside]"], true, never>;
28
28
  }
29
29
 
30
30
  declare class CardTitle {
@@ -44,7 +44,7 @@ declare class ChipRow extends Chip {
44
44
  _startEditing(): void;
45
45
  private _stopEditing;
46
46
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipRow, never>;
47
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipRow, "ngs-chip-row", never, { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "edited": "edited"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
47
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipRow, "ngs-chip-row", ["ngsChipRow"], { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "edited": "edited"; }, never, ["ngs-chip-avatar, [ngsChipAvatar]", "ngs-chip-shape, [ngsChipShape]", "*", "ngs-chip-remove, [ngsChipRemove], [ngsChipControl], [ngsChipEdit]"], true, never>;
48
48
  }
49
49
 
50
50
  declare class ChipGrid implements ControlValueAccessor, AfterContentInit, FormFieldControl<any[]> {
@@ -95,7 +95,7 @@ declare class ChipGrid implements ControlValueAccessor, AfterContentInit, FormFi
95
95
  _registerInput(input: any): void;
96
96
  focus(): void;
97
97
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipGrid, never>;
98
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipGrid, "ngs-chip-grid", never, { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, ["_chips"], ["*"], true, never>;
98
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipGrid, "ngs-chip-grid", ["ngsChipGrid"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, ["_chips"], ["*"], true, never>;
99
99
  }
100
100
 
101
101
  declare class ChipOption extends Chip {
@@ -144,7 +144,7 @@ declare class ChipListbox implements ControlValueAccessor, AfterContentInit, OnD
144
144
 
145
145
  declare class ChipSet {
146
146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipSet, never>;
147
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipSet, "ngs-chip-set", never, {}, {}, never, ["*"], true, never>;
147
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipSet, "ngs-chip-set", ["ngsChipSet"], {}, {}, never, ["*"], true, never>;
148
148
  }
149
149
 
150
150
  declare class ChipAvatar {
@@ -6,7 +6,7 @@ import { FormFieldControl } from '@ngstarter-ui/components/form-field';
6
6
 
7
7
  declare class DatepickerActions {
8
8
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerActions, never>;
9
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerActions, "ngs-datepicker-actions", never, {}, {}, never, ["*"], true, never>;
9
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerActions, "ngs-datepicker-actions", ["ngsDatepickerActions"], {}, {}, never, ["*"], true, never>;
10
10
  }
11
11
 
12
12
  declare class DateRange<D> {
@@ -111,7 +111,7 @@ declare class DatepickerInput<D> implements ControlValueAccessor, OnDestroy, OnI
111
111
  private _formatValue;
112
112
  getConnectedOverlayOrigin(): ElementRef;
113
113
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerInput<any>, never>;
114
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DatepickerInput<any>, "input[ngsDatepicker]", never, { "ngsDatepicker": { "alias": "ngsDatepicker"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
114
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DatepickerInput<any>, "input[ngsDatepicker]", ["ngsDatepickerInput"], { "ngsDatepicker": { "alias": "ngsDatepicker"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
115
115
  }
116
116
 
117
117
  declare class StartDate<D> {
@@ -175,7 +175,7 @@ declare class DateRangeInput<D> implements OnDestroy, OnInit, FormFieldControl<D
175
175
  getConnectedOverlayOrigin(): ElementRef;
176
176
  focus(): void;
177
177
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateRangeInput<any>, never>;
178
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateRangeInput<any>, "ngs-date-range-input", never, { "rangePicker": { "alias": "rangePicker"; "required": true; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, ["_startInput", "_endInput"], ["input[ngsStartDate]", "input[ngsEndDate]"], true, never>;
178
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateRangeInput<any>, "ngs-date-range-input", ["ngsDateRangeInput"], { "rangePicker": { "alias": "rangePicker"; "required": true; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, ["_startInput", "_endInput"], ["input[ngsStartDate]", "input[ngsEndDate]"], true, never>;
179
179
  }
180
180
 
181
181
  declare class DatepickerToggleIcon {
@@ -247,7 +247,7 @@ declare class MonthView<D> {
247
247
  selectDate(date: D | null): void;
248
248
  handleHover(date: D | null): void;
249
249
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MonthView<any>, never>;
250
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MonthView<any>, "ngs-month-view", never, { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "rangePreviewDate": { "alias": "rangePreviewDate"; "required": false; "isSignal": true; }; "sharedRangePreview": { "alias": "sharedRangePreview"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "rangePreviewDateChange": "rangePreviewDateChange"; }, never, never, true, never>;
250
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MonthView<any>, "ngs-month-view", ["ngsMonthView"], { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "rangePreviewDate": { "alias": "rangePreviewDate"; "required": false; "isSignal": true; }; "sharedRangePreview": { "alias": "sharedRangePreview"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "rangePreviewDateChange": "rangePreviewDateChange"; }, never, never, true, never>;
251
251
  }
252
252
 
253
253
  declare class YearView<D> {
@@ -263,7 +263,7 @@ declare class YearView<D> {
263
263
  }[][]>;
264
264
  selectMonth(month: number): void;
265
265
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YearView<any>, never>;
266
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<YearView<any>, "ngs-year-view", never, { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "monthSelected": "monthSelected"; }, never, never, true, never>;
266
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<YearView<any>, "ngs-year-view", ["ngsYearView"], { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "monthSelected": "monthSelected"; }, never, never, true, never>;
267
267
  }
268
268
 
269
269
  declare class MultiYearView<D> {
@@ -279,7 +279,7 @@ declare class MultiYearView<D> {
279
279
  }[][]>;
280
280
  selectYear(year: number): void;
281
281
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiYearView<any>, never>;
282
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiYearView<any>, "ngs-multi-year-view", never, { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "yearSelected": "yearSelected"; }, never, never, true, never>;
282
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiYearView<any>, "ngs-multi-year-view", ["ngsMultiYearView"], { "activeDate": { "alias": "activeDate"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "yearSelected": "yearSelected"; }, never, never, true, never>;
283
283
  }
284
284
 
285
285
  /** Injection token for the DateAdapter's locale. */
@@ -47,7 +47,7 @@ declare class ExpansionPanelHeader {
47
47
  _toggle(): void;
48
48
  _getExpandedState(): string;
49
49
  static ɵfac: i0.ɵɵFactoryDeclaration<ExpansionPanelHeader, never>;
50
- static ɵcmp: i0.ɵɵComponentDeclaration<ExpansionPanelHeader, "ngs-expansion-panel-header", never, { "hideToggle": { "alias": "hideToggle"; "required": false; "isSignal": true; }; }, {}, never, ["ngs-panel-title", "ngs-panel-description", "*"], true, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExpansionPanelHeader, "ngs-expansion-panel-header", ["ngsExpansionPanelHeader"], { "hideToggle": { "alias": "hideToggle"; "required": false; "isSignal": true; }; }, {}, never, ["ngs-panel-title", "ngs-panel-description", "*"], true, never>;
51
51
  }
52
52
 
53
53
  declare class ExpansionPanelTitle {
@@ -62,7 +62,7 @@ declare class ExpansionPanelDescription {
62
62
 
63
63
  declare class ActionRow {
64
64
  static ɵfac: i0.ɵɵFactoryDeclaration<ActionRow, never>;
65
- static ɵcmp: i0.ɵɵComponentDeclaration<ActionRow, "ngs-action-row", never, {}, {}, never, ["*"], true, never>;
65
+ static ɵcmp: i0.ɵɵComponentDeclaration<ActionRow, "ngs-action-row", ["ngsActionRow"], {}, {}, never, ["*"], true, never>;
66
66
  }
67
67
 
68
68
  export { Accordion, ActionRow, ExpansionPanel, ExpansionPanelDescription, ExpansionPanelHeader, ExpansionPanelTitle };
@@ -27,12 +27,12 @@ declare abstract class FormFieldControl<T> {
27
27
  declare class Hint {
28
28
  align: i0.InputSignal<"start" | "end">;
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<Hint, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<Hint, "ngs-hint", never, { "align": { "alias": "align"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<Hint, "ngs-hint", ["ngsHint"], { "align": { "alias": "align"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
31
31
  }
32
32
 
33
33
  declare class Error {
34
34
  static ɵfac: i0.ɵɵFactoryDeclaration<Error, never>;
35
- static ɵcmp: i0.ɵɵComponentDeclaration<Error, "ngs-error", never, {}, {}, never, ["*"], true, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<Error, "ngs-error", ["ngsError"], {}, {}, never, ["*"], true, never>;
36
36
  }
37
37
 
38
38
  declare class Prefix {
@@ -220,7 +220,7 @@ declare class TourStep {
220
220
  protected readonly htmlContent: _angular_core.Signal<_angular_platform_browser.SafeHtml | null>;
221
221
  getArrowClasses(pos: ConnectedPosition | null): string;
222
222
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourStep, never>;
223
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TourStep, "ngs-tour-step", never, { "step": { "alias": "step"; "required": true; "isSignal": true; }; "isFirst": { "alias": "isFirst"; "required": false; "isSignal": true; }; "isLast": { "alias": "isLast"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "animateEnterClass": { "alias": "animateEnterClass"; "required": false; "isSignal": true; }; "animateLeaveClass": { "alias": "animateLeaveClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
223
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TourStep, "ngs-tour-step", ["ngsTourStep"], { "step": { "alias": "step"; "required": true; "isSignal": true; }; "isFirst": { "alias": "isFirst"; "required": false; "isSignal": true; }; "isLast": { "alias": "isLast"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "animateEnterClass": { "alias": "animateEnterClass"; "required": false; "isSignal": true; }; "animateLeaveClass": { "alias": "animateLeaveClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
224
224
  }
225
225
 
226
226
  export { TOUR_CONFIG, TOUR_STEP_COMPONENT, TourAnchorDirective, TourService, TourState, TourStep, provideTourConfig };
@@ -1,27 +1,35 @@
1
- import * as i0 from '@angular/core';
2
- import { AfterContentInit, OnChanges, OnDestroy, TemplateRef, SimpleChanges } from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit, OnChanges, OnDestroy, ElementRef, SimpleChanges } from '@angular/core';
3
3
 
4
- declare class Marquee implements AfterContentInit, OnChanges, OnDestroy {
4
+ declare class Marquee implements AfterViewInit, OnChanges, OnDestroy {
5
5
  private _elementRef;
6
6
  private _platformId;
7
7
  private _intersectionObserver?;
8
- reverse: i0.InputSignalWithTransform<boolean, unknown>;
9
- pauseOnHover: i0.InputSignalWithTransform<boolean, unknown>;
8
+ private _resizeObserver?;
9
+ private _mutationObserver?;
10
+ private _measureFrame;
11
+ reverse: _angular_core.InputSignalWithTransform<boolean, unknown>;
12
+ pauseOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
10
13
  protected isInView: boolean;
11
- readonly template: i0.Signal<TemplateRef<any>>;
14
+ readonly track: _angular_core.Signal<ElementRef<HTMLElement>>;
15
+ readonly sourceItem: _angular_core.Signal<ElementRef<HTMLElement>>;
12
16
  protected get nativeElement(): HTMLElement;
13
17
  ngOnChanges(changes: SimpleChanges): void;
14
- ngAfterContentInit(): void;
18
+ ngAfterViewInit(): void;
15
19
  ngOnDestroy(): void;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<Marquee, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<Marquee, "ngs-marquee", ["ngsMarquee"], { "reverse": { "alias": "reverse"; "required": false; "isSignal": true; }; "pauseOnHover": { "alias": "pauseOnHover"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
20
+ private _queueRepeatMeasure;
21
+ private _syncRepeatItems;
22
+ private _renderClone;
23
+ private _createItemClone;
24
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Marquee, never>;
25
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Marquee, "ngs-marquee", ["ngsMarquee"], { "reverse": { "alias": "reverse"; "required": false; "isSignal": true; }; "pauseOnHover": { "alias": "pauseOnHover"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
18
26
  }
19
27
 
20
28
  declare class MarqueeItemDirective {
21
29
  private _elementRef;
22
30
  get nativeElement(): HTMLElement;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<MarqueeItemDirective, never>;
24
- static ɵdir: i0.ɵɵDirectiveDeclaration<MarqueeItemDirective, "[ngsMarqueeItem]", never, {}, {}, never, never, true, never>;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MarqueeItemDirective, never>;
32
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MarqueeItemDirective, "[ngsMarqueeItem]", never, {}, {}, never, never, true, never>;
25
33
  }
26
34
 
27
35
  export { Marquee, MarqueeItemDirective };