@ifsworld/granite-components 16.1.2 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +0 -2
  2. package/carousel/index.d.ts +45 -2
  3. package/date-picker/index.d.ts +123 -4
  4. package/fesm2022/ifsworld-granite-components-carousel.mjs +11 -11
  5. package/fesm2022/ifsworld-granite-components-carousel.mjs.map +1 -1
  6. package/fesm2022/ifsworld-granite-components-date-picker.mjs +40 -53
  7. package/fesm2022/ifsworld-granite-components-date-picker.mjs.map +1 -1
  8. package/fesm2022/ifsworld-granite-components-file-upload.mjs +10 -10
  9. package/fesm2022/ifsworld-granite-components-file-upload.mjs.map +1 -1
  10. package/fesm2022/ifsworld-granite-components-table.mjs +29 -29
  11. package/fesm2022/ifsworld-granite-components-table.mjs.map +1 -1
  12. package/fesm2022/ifsworld-granite-components-tooltip.mjs +23 -24
  13. package/fesm2022/ifsworld-granite-components-tooltip.mjs.map +1 -1
  14. package/fesm2022/ifsworld-granite-components.mjs +480 -564
  15. package/fesm2022/ifsworld-granite-components.mjs.map +1 -1
  16. package/file-upload/index.d.ts +99 -2
  17. package/index.d.ts +1981 -86
  18. package/package.json +8 -8
  19. package/table/index.d.ts +112 -4
  20. package/tooltip/index.d.ts +50 -3
  21. package/carousel/lib/carousel.component.d.ts +0 -34
  22. package/carousel/lib/carousel.module.d.ts +0 -10
  23. package/date-picker/lib/date-picker-base.d.ts +0 -34
  24. package/date-picker/lib/date-picker-trigger-for.directive.d.ts +0 -70
  25. package/date-picker/lib/date-picker.component.d.ts +0 -10
  26. package/date-picker/lib/date-picker.module.d.ts +0 -15
  27. package/date-picker/lib/date-range-picker.component.d.ts +0 -12
  28. package/file-upload/lib/directives/file-drag-and-drop.directive.d.ts +0 -18
  29. package/file-upload/lib/file-upload.component.d.ts +0 -51
  30. package/file-upload/lib/file-upload.constants.d.ts +0 -37
  31. package/file-upload/lib/file-upload.module.d.ts +0 -11
  32. package/file-upload/lib/file-upload.utils.d.ts +0 -1
  33. package/lib/arrange-grid/arrange-grid-item.component.d.ts +0 -30
  34. package/lib/arrange-grid/arrange-grid.component.d.ts +0 -58
  35. package/lib/arrange-grid/arrange-grid.module.d.ts +0 -9
  36. package/lib/avatar/avatar-default-status/avatar-default-status.component.d.ts +0 -15
  37. package/lib/avatar/avatar.component.d.ts +0 -23
  38. package/lib/avatar/avatar.component.public-types.d.ts +0 -7
  39. package/lib/avatar/avatar.module.d.ts +0 -11
  40. package/lib/avatar/custom-avatar-status.directive.d.ts +0 -9
  41. package/lib/avatar/empty-avatar/empty-avatar.component.d.ts +0 -7
  42. package/lib/badge/badge.component.d.ts +0 -19
  43. package/lib/badge/badge.module.d.ts +0 -8
  44. package/lib/badge/testing/badge.harness.d.ts +0 -21
  45. package/lib/button/button.component.d.ts +0 -38
  46. package/lib/button/button.module.d.ts +0 -7
  47. package/lib/card-list/card/card-avatar.component.d.ts +0 -5
  48. package/lib/card-list/card/card-content/card-actions.component.d.ts +0 -5
  49. package/lib/card-list/card/card-content/card-body.component.d.ts +0 -5
  50. package/lib/card-list/card/card-content/card-content.component.d.ts +0 -5
  51. package/lib/card-list/card/card-content/card-footer.component.d.ts +0 -5
  52. package/lib/card-list/card/card-content/card-header-subtitle.component.d.ts +0 -5
  53. package/lib/card-list/card/card-content/card-header-title.component.d.ts +0 -5
  54. package/lib/card-list/card/card-content/card-header.component.d.ts +0 -5
  55. package/lib/card-list/card/card.component.d.ts +0 -5
  56. package/lib/card-list/card-list.component.d.ts +0 -9
  57. package/lib/card-list/card-list.module.d.ts +0 -18
  58. package/lib/checkbox/checkbox-group.component.d.ts +0 -6
  59. package/lib/checkbox/checkbox.component.d.ts +0 -29
  60. package/lib/checkbox/checkbox.module.d.ts +0 -8
  61. package/lib/chips/chip-input.d.ts +0 -89
  62. package/lib/chips/chip-list.component.d.ts +0 -185
  63. package/lib/chips/chip.component.d.ts +0 -104
  64. package/lib/chips/chips.module.d.ts +0 -12
  65. package/lib/collapsible-group/collapsible-group-body.directive.d.ts +0 -7
  66. package/lib/collapsible-group/collapsible-group-header.directive.d.ts +0 -7
  67. package/lib/collapsible-group/collapsible-group.component.d.ts +0 -16
  68. package/lib/collapsible-group/collapsible-group.module.d.ts +0 -11
  69. package/lib/contacts/contact-item/contact-item.component.d.ts +0 -11
  70. package/lib/contacts/contact-item-default-status/contact-item-default-status.component.d.ts +0 -15
  71. package/lib/contacts/contact-item-title/contact-item-title.component.d.ts +0 -7
  72. package/lib/contacts/contacts-profile/contacts-profile.component.d.ts +0 -8
  73. package/lib/contacts/contacts-trigger/contacts-trigger-data.d.ts +0 -23
  74. package/lib/contacts/contacts-trigger/contacts-trigger-for.directive.d.ts +0 -69
  75. package/lib/contacts/contacts-types/contacts.component.private-types.d.ts +0 -8
  76. package/lib/contacts/contacts-types/contacts.component.public-types.d.ts +0 -30
  77. package/lib/contacts/contacts.component.d.ts +0 -29
  78. package/lib/contacts/contacts.module.d.ts +0 -17
  79. package/lib/contacts/custom-profile.directive.d.ts +0 -8
  80. package/lib/contacts/custom-status.directive.d.ts +0 -9
  81. package/lib/core/animation.d.ts +0 -23
  82. package/lib/core/client-environment.d.ts +0 -26
  83. package/lib/core/common-behaviors/disabled.d.ts +0 -10
  84. package/lib/core/core.module.d.ts +0 -12
  85. package/lib/core/devices/client-input-desktop.directive.d.ts +0 -9
  86. package/lib/core/devices/client-input-touch.directive.d.ts +0 -9
  87. package/lib/core/devices/client-output-desktop.directive.d.ts +0 -9
  88. package/lib/core/devices/client-output-touch.directive.d.ts +0 -9
  89. package/lib/core/hide-on-overflow.directive.d.ts +0 -21
  90. package/lib/core/overlay-base.d.ts +0 -16
  91. package/lib/core/overlay-position-config.d.ts +0 -12
  92. package/lib/core/overlay-trigger-for-base.directive.d.ts +0 -32
  93. package/lib/core/overlay.service.d.ts +0 -21
  94. package/lib/core/pipes/pure-pipes.module.d.ts +0 -7
  95. package/lib/core/pipes/title.pipe.d.ts +0 -7
  96. package/lib/core/radio-checkbox-base.d.ts +0 -8
  97. package/lib/core/services/names-utils-service.d.ts +0 -17
  98. package/lib/core/theme.library.d.ts +0 -38
  99. package/lib/core/types.d.ts +0 -2
  100. package/lib/grid/grid.component.d.ts +0 -75
  101. package/lib/grid/grid.module.d.ts +0 -8
  102. package/lib/icon/icon.component.d.ts +0 -13
  103. package/lib/icon/icon.module.d.ts +0 -7
  104. package/lib/input-field/input-field.component.d.ts +0 -48
  105. package/lib/input-field/input-field.module.d.ts +0 -10
  106. package/lib/label/label.component.d.ts +0 -10
  107. package/lib/label/label.module.d.ts +0 -8
  108. package/lib/menu/divider.directive.d.ts +0 -6
  109. package/lib/menu/menu-base.d.ts +0 -219
  110. package/lib/menu/menu-custom-template.directive.d.ts +0 -14
  111. package/lib/menu/menu-desktop-animations.d.ts +0 -12
  112. package/lib/menu/menu-errors.d.ts +0 -24
  113. package/lib/menu/menu-item.component.d.ts +0 -36
  114. package/lib/menu/menu-panel.d.ts +0 -23
  115. package/lib/menu/menu-positions.d.ts +0 -9
  116. package/lib/menu/menu-touch-animations.d.ts +0 -17
  117. package/lib/menu/menu-touch-close.component.d.ts +0 -5
  118. package/lib/menu/menu-touch-title.component.d.ts +0 -14
  119. package/lib/menu/menu-trigger-for.directive.d.ts +0 -200
  120. package/lib/menu/menu.component.d.ts +0 -6
  121. package/lib/menu/menu.module.d.ts +0 -18
  122. package/lib/menu/testing/menu.harness.d.ts +0 -68
  123. package/lib/menu/title.directive.d.ts +0 -5
  124. package/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.d.ts +0 -8
  125. package/lib/progress-bar/progress-bar-legend-base.d.ts +0 -8
  126. package/lib/progress-bar/progress-bar-legend-trigger-for.directive.d.ts +0 -18
  127. package/lib/progress-bar/progress-bar.component.d.ts +0 -28
  128. package/lib/progress-bar/progress-bar.model.d.ts +0 -11
  129. package/lib/progress-bar/progress-bar.module.d.ts +0 -14
  130. package/lib/radio-button/radio-button.component.d.ts +0 -34
  131. package/lib/radio-button/radio-button.module.d.ts +0 -8
  132. package/lib/radio-button/radio-group.component.d.ts +0 -6
  133. package/lib/toggle-switch/toggle-switch.component.d.ts +0 -29
  134. package/lib/toggle-switch/toggle-switch.module.d.ts +0 -7
  135. package/table/lib/cell/cell-align/cell-align-classes.directive.d.ts +0 -9
  136. package/table/lib/cell/cell.d.ts +0 -8
  137. package/table/lib/cell/table-data-cell.component.d.ts +0 -12
  138. package/table/lib/cell/table-header-cell.component.d.ts +0 -6
  139. package/table/lib/column/table-column.directive.d.ts +0 -23
  140. package/table/lib/column-size/column-size.directive.d.ts +0 -11
  141. package/table/lib/table-constants.library.d.ts +0 -6
  142. package/table/lib/table.component.d.ts +0 -26
  143. package/table/lib/table.model.d.ts +0 -6
  144. package/table/lib/table.module.d.ts +0 -16
  145. package/tooltip/lib/Services/granite-tooltip.service.d.ts +0 -10
  146. package/tooltip/lib/tooltip-constants.library.d.ts +0 -4
  147. package/tooltip/lib/tooltip-trigger-for.directive.d.ts +0 -39
  148. package/tooltip/lib/tooltip.component.d.ts +0 -7
  149. package/tooltip/lib/tooltip.module.d.ts +0 -9
package/README.md CHANGED
@@ -44,8 +44,6 @@ Finally, add them in `src/styles.scss`:
44
44
 
45
45
  [StackBlitz Example](https://stackblitz.com/edit/angular-ivy-zcgdkv?file=src/app/app.component.html)
46
46
 
47
- **Note: currrently there's an issue with the _Ivy compiler_. To get the project to work, the Ivy Compiler must be set to disabled in `tsconfig.json`!**
48
-
49
47
  ### Support
50
48
 
51
49
  _Note: we only support our latest release. Beyond that we make no guarantees of continued support. Make sure to stay up to date._
@@ -1,2 +1,45 @@
1
- export * from './lib/carousel.module';
2
- export * from './lib/carousel.component';
1
+ import * as i0 from '@angular/core';
2
+ import { OnChanges, AfterViewInit, OnDestroy, TemplateRef, SimpleChanges } from '@angular/core';
3
+ import * as i3 from 'primeng/carousel';
4
+ import { CarouselResponsiveOptions, Carousel } from 'primeng/carousel';
5
+ import * as i2 from '@angular/common';
6
+ import * as i4 from '@ifsworld/granite-components';
7
+
8
+ declare class GraniteCarouselComponent<T> implements OnChanges, AfterViewInit, OnDestroy {
9
+ items: T[];
10
+ responsiveOptions: CarouselResponsiveOptions[];
11
+ numVisible: number;
12
+ numScroll: number;
13
+ circular: boolean;
14
+ prevButtonAriaLabel: string;
15
+ nextButtonAriaLabel: string;
16
+ shrinkToContent: boolean;
17
+ itemTemplateRef: TemplateRef<any>;
18
+ carousel: Carousel;
19
+ visibleItems: T[];
20
+ isOneItemVisible: boolean;
21
+ private cdr;
22
+ private resizeObserver;
23
+ ngOnChanges(changes: SimpleChanges): void;
24
+ ngAfterViewInit(): void;
25
+ onResize(): void;
26
+ onKeyDown(event: KeyboardEvent): void;
27
+ navForward(event: MouseEvent): void;
28
+ navBackward(event: MouseEvent): void;
29
+ ngOnDestroy(): void;
30
+ private triggerUpdate;
31
+ private handleResize;
32
+ private getDisplayItems;
33
+ private updateVisibleItems;
34
+ private updateNumVisibleBasedOnWidth;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteCarouselComponent<any>, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<GraniteCarouselComponent<any>, "granite-carousel", never, { "items": { "alias": "items"; "required": false; }; "responsiveOptions": { "alias": "responsiveOptions"; "required": false; }; "numVisible": { "alias": "numVisible"; "required": false; }; "numScroll": { "alias": "numScroll"; "required": false; }; "circular": { "alias": "circular"; "required": false; }; "prevButtonAriaLabel": { "alias": "prevButtonAriaLabel"; "required": false; }; "nextButtonAriaLabel": { "alias": "nextButtonAriaLabel"; "required": false; }; "shrinkToContent": { "alias": "shrinkToContent"; "required": false; }; }, {}, ["itemTemplateRef"], never, false, never>;
37
+ }
38
+
39
+ declare class GraniteCarouselModule {
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteCarouselModule, never>;
41
+ static ɵmod: i0.ɵɵNgModuleDeclaration<GraniteCarouselModule, [typeof GraniteCarouselComponent], [typeof i2.CommonModule, typeof i3.CarouselModule, typeof i4.GraniteButtonModule, typeof i4.GraniteIconModule], [typeof GraniteCarouselComponent]>;
42
+ static ɵinj: i0.ɵɵInjectorDeclaration<GraniteCarouselModule>;
43
+ }
44
+
45
+ export { GraniteCarouselComponent, GraniteCarouselModule };
@@ -1,4 +1,123 @@
1
- export * from './lib/date-picker.module';
2
- export * from './lib/date-picker.component';
3
- export * from './lib/date-range-picker.component';
4
- export * from './lib/date-picker-trigger-for.directive';
1
+ import * as i0 from '@angular/core';
2
+ import { OnInit, EventEmitter, TemplateRef, ElementRef, OnChanges, SimpleChanges, AfterContentInit, OnDestroy } from '@angular/core';
3
+ import { Direction } from '@angular/cdk/bidi';
4
+ import * as i8 from '@ifsworld/granite-components';
5
+ import { ClientInputInterface, ClientOutputInterface } from '@ifsworld/granite-components';
6
+ import { PrimeNG } from 'primeng/config';
7
+ import * as i9 from '@angular/cdk/a11y';
8
+ import { FocusOrigin } from '@angular/cdk/a11y';
9
+ import * as i4 from '@angular/common';
10
+ import * as i5 from '@angular/cdk/overlay';
11
+ import * as i6 from 'primeng/datepicker';
12
+ import * as i7 from '@angular/forms';
13
+
14
+ type PositionX = 'before' | 'after';
15
+ type PositionY = 'above' | 'below';
16
+ /** Base class with common functionality for date/date-range pickers. */
17
+ declare class _DatePickerBase implements OnInit {
18
+ minDate: Date | null;
19
+ maxDate: Date | null;
20
+ firstDayOfWeek: number;
21
+ readonly pickerClosed: EventEmitter<any>;
22
+ templateRef: TemplateRef<any>;
23
+ _elementRef: ElementRef<any>;
24
+ primeNG: PrimeNG;
25
+ xPosition: PositionX;
26
+ yPosition: PositionY;
27
+ direction: Direction;
28
+ /**
29
+ * Used for locating the panel in tests and setting the aria-control attribute
30
+ * for the picker trigger.
31
+ */
32
+ readonly panelId: string;
33
+ /** Client input device information */
34
+ clientInput: ClientInputInterface;
35
+ /** Client output device information */
36
+ clientOutput: ClientOutputInterface;
37
+ ngOnInit(): void;
38
+ _handleKeydown(event: KeyboardEvent): void;
39
+ static ɵfac: i0.ɵɵFactoryDeclaration<_DatePickerBase, never>;
40
+ static ɵdir: i0.ɵɵDirectiveDeclaration<_DatePickerBase, never, never, { "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; }; }, { "pickerClosed": "pickerClosed"; }, never, never, false, never>;
41
+ }
42
+
43
+ declare class GraniteDatePickerComponent extends _DatePickerBase {
44
+ selectedDate: Date | undefined;
45
+ readonly selectionChanged: EventEmitter<Date>;
46
+ dateSelectionChanged(newDate: Date): void;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<GraniteDatePickerComponent, "granite-date-picker", never, { "selectedDate": { "alias": "selectedDate"; "required": false; }; }, { "selectionChanged": "selectionChanged"; }, never, never, false, never>;
49
+ }
50
+
51
+ declare class GraniteDateRangePickerComponent extends _DatePickerBase implements OnChanges {
52
+ selectedDateRange: Date[];
53
+ readonly selectionChanged: EventEmitter<Date[]>;
54
+ _selectedDateRangeInternal: Date[];
55
+ ngOnChanges(changes: SimpleChanges): void;
56
+ dateRangeSelectionChanged(date: Date): void;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDateRangePickerComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<GraniteDateRangePickerComponent, "granite-date-range-picker", never, { "selectedDateRange": { "alias": "selectedDateRange"; "required": false; }; }, { "selectionChanged": "selectionChanged"; }, never, never, false, never>;
59
+ }
60
+
61
+ declare class GraniteDatePickerTriggerForDirective implements AfterContentInit, OnDestroy {
62
+ /** References the picker instance that the trigger is associated with. */
63
+ picker: GraniteDatePickerComponent | GraniteDateRangePickerComponent;
64
+ _clientInput: ClientInputInterface;
65
+ _clientOutput: ClientOutputInterface;
66
+ /** Whether the associated picker is open */
67
+ _isPickerOpen: boolean;
68
+ private _overlay;
69
+ private _element;
70
+ private _viewContainerRef;
71
+ private _outsideClickDispatcher;
72
+ private _dir;
73
+ private _focusMonitor;
74
+ private _pickerCloseSubscription;
75
+ private _portal;
76
+ private _overlayRef;
77
+ ngAfterContentInit(): void;
78
+ ngOnDestroy(): void;
79
+ isOpen(): boolean;
80
+ openPicker(): void;
81
+ /** Toggles the picker between the open and closed states. */
82
+ togglePicker(): void;
83
+ /** Close the associated picker */
84
+ closePicker(): void;
85
+ /** Handles key presses on the trigger. */
86
+ _handleKeydown(event: KeyboardEvent): void;
87
+ /** Handles click events on the trigger. */
88
+ _handleClick(): void;
89
+ /**
90
+ * Restores focus to the element that was focused before the picker was open.
91
+ */
92
+ _restoreFocus(origin?: FocusOrigin, options?: FocusOptions): void;
93
+ /**
94
+ * Returns strategy for positioning the overlay for desktop devices:
95
+ */
96
+ private _desktopPositionStrategy;
97
+ /**
98
+ * Sets the appropriate positions on a position strategy
99
+ * so the overlay connects with the trigger correctly.
100
+ * @param positionStrategy Strategy whose position to update.
101
+ */
102
+ private _setPosition;
103
+ /**
104
+ * Returns strategy for positioning the overlay depending on what type of
105
+ * device the picker is being shown on
106
+ */
107
+ private _positionStrategy;
108
+ /**
109
+ * Returns strategy for positioning the overlay for touch devices:
110
+ * Place centered in the screen.
111
+ */
112
+ private _touchPositionStrategy;
113
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerTriggerForDirective, never>;
114
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GraniteDatePickerTriggerForDirective, "[graniteDatePickerTriggerFor]", never, { "picker": { "alias": "graniteDatePickerTriggerFor"; "required": false; }; }, {}, never, never, false, never>;
115
+ }
116
+
117
+ declare class GraniteDatePickerModule {
118
+ static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerModule, never>;
119
+ static ɵmod: i0.ɵɵNgModuleDeclaration<GraniteDatePickerModule, [typeof GraniteDatePickerComponent, typeof GraniteDateRangePickerComponent, typeof GraniteDatePickerTriggerForDirective], [typeof i4.CommonModule, typeof i5.OverlayModule, typeof i6.DatePickerModule, typeof i7.FormsModule, typeof i8.GraniteIconModule, typeof i8.GraniteButtonModule, typeof i9.A11yModule], [typeof GraniteDatePickerComponent, typeof GraniteDateRangePickerComponent, typeof GraniteDatePickerTriggerForDirective]>;
120
+ static ɵinj: i0.ɵɵInjectorDeclaration<GraniteDatePickerModule>;
121
+ }
122
+
123
+ export { GraniteDatePickerComponent, GraniteDatePickerModule, GraniteDatePickerTriggerForDirective, GraniteDateRangePickerComponent };
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { HostListener, ViewChild, ContentChild, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, HostListener, ViewChild, ContentChild, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i2 from 'primeng/carousel';
@@ -9,8 +9,7 @@ import * as i4 from '@ifsworld/granite-components';
9
9
  import { GraniteButtonModule, GraniteIconModule } from '@ifsworld/granite-components';
10
10
 
11
11
  class GraniteCarouselComponent {
12
- constructor(cdr) {
13
- this.cdr = cdr;
12
+ constructor() {
14
13
  this.items = [];
15
14
  this.responsiveOptions = [
16
15
  {
@@ -37,6 +36,7 @@ class GraniteCarouselComponent {
37
36
  this.shrinkToContent = false;
38
37
  this.visibleItems = [];
39
38
  this.isOneItemVisible = false;
39
+ this.cdr = inject(ChangeDetectorRef);
40
40
  }
41
41
  ngOnChanges(changes) {
42
42
  if (changes['items'] && changes['items'].currentValue) {
@@ -124,13 +124,13 @@ class GraniteCarouselComponent {
124
124
  }
125
125
  this.updateVisibleItems();
126
126
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GraniteCarouselComponent, isStandalone: false, selector: "granite-carousel", inputs: { items: "items", responsiveOptions: "responsiveOptions", numVisible: "numVisible", numScroll: "numScroll", circular: "circular", prevButtonAriaLabel: "prevButtonAriaLabel", nextButtonAriaLabel: "nextButtonAriaLabel", shrinkToContent: "shrinkToContent" }, host: { listeners: { "window:resize": "onResize()" } }, queries: [{ propertyName: "itemTemplateRef", first: true, predicate: ["itemTemplate"], descendants: true }], viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"carousel-wrapper\">\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isBackwardNavDisabled()\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n (click)=\"navBackward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-left\"></granite-icon>\n </button>\n\n <p-carousel\n #carousel\n [value]=\"visibleItems\"\n [numVisible]=\"numVisible\"\n [numScroll]=\"numScroll\"\n [circular]=\"circular\"\n [responsiveOptions]=\"responsiveOptions\"\n [showNavigators]=\"false\"\n [showIndicators]=\"false\"\n [class.auto-width]=\"shrinkToContent\"\n [class.is-one-item]=\"isOneItemVisible\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div class=\"item-template-wrapper\" *ngIf=\"!item.placeholder\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplateRef; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-template>\n </p-carousel>\n\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isForwardNavDisabled()\"\n [attr.aria-label]=\"nextButtonAriaLabel\"\n (click)=\"navForward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-right\"></granite-icon>\n </button>\n</div>\n", styles: [":host{width:100%;overflow:hidden}.carousel-wrapper{display:flex;justify-content:center;align-items:center;gap:var(--granite-spacing-8);padding:var(--granite-spacing-8);width:100%;max-width:100%;overflow:hidden;box-sizing:border-box}p-carousel{flex:1;min-width:0}p-carousel .item-template-wrapper{margin:var(--granite-spacing-4)}.arrow-btn{width:calc(var(--granite-size-base-rem) * 2);height:calc(var(--granite-size-base-rem) * 2)}.arrow-btn granite-icon{font-size:var(--granite-font-size-body);position:relative;top:0}::ng-deep .auto-width .p-carousel-item{flex:0 0 auto!important}::ng-deep .is-one-item .p-carousel-item{flex:1 0 100%!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.Carousel, selector: "p-carousel", inputs: ["page", "numVisible", "numScroll", "responsiveOptions", "orientation", "verticalViewPortHeight", "contentClass", "indicatorsContentClass", "indicatorsContentStyle", "indicatorStyleClass", "indicatorStyle", "value", "circular", "showIndicators", "showNavigators", "autoplayInterval", "style", "styleClass", "prevButtonProps", "nextButtonProps"], outputs: ["onPage"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.GraniteButtonComponent, selector: "button[graniteButton], button[granitePrimaryButton], button[graniteFlatButton], button[graniteToolbarButton] ", inputs: ["disabled", "toggled"], exportAs: ["graniteButton"] }, { kind: "component", type: i4.GraniteIconComponent, selector: "granite-icon", inputs: ["fontIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: GraniteCarouselComponent, isStandalone: false, selector: "granite-carousel", inputs: { items: "items", responsiveOptions: "responsiveOptions", numVisible: "numVisible", numScroll: "numScroll", circular: "circular", prevButtonAriaLabel: "prevButtonAriaLabel", nextButtonAriaLabel: "nextButtonAriaLabel", shrinkToContent: "shrinkToContent" }, host: { listeners: { "window:resize": "onResize()" } }, queries: [{ propertyName: "itemTemplateRef", first: true, predicate: ["itemTemplate"], descendants: true }], viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"carousel-wrapper\">\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isBackwardNavDisabled()\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n (click)=\"navBackward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-left\"></granite-icon>\n </button>\n\n <p-carousel\n #carousel\n [value]=\"visibleItems\"\n [numVisible]=\"numVisible\"\n [numScroll]=\"numScroll\"\n [circular]=\"circular\"\n [responsiveOptions]=\"responsiveOptions\"\n [showNavigators]=\"false\"\n [showIndicators]=\"false\"\n [class.auto-width]=\"shrinkToContent\"\n [class.is-one-item]=\"isOneItemVisible\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div class=\"item-template-wrapper\" *ngIf=\"!item.placeholder\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplateRef; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-template>\n </p-carousel>\n\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isForwardNavDisabled()\"\n [attr.aria-label]=\"nextButtonAriaLabel\"\n (click)=\"navForward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-right\"></granite-icon>\n </button>\n</div>\n", styles: [":host{width:100%;overflow:hidden}.carousel-wrapper{display:flex;justify-content:center;align-items:center;gap:var(--granite-spacing-8);padding:var(--granite-spacing-8);width:100%;max-width:100%;overflow:hidden;box-sizing:border-box}p-carousel{flex:1;min-width:0}p-carousel .item-template-wrapper{margin:var(--granite-spacing-4)}.arrow-btn{width:calc(var(--granite-size-base-rem) * 2);height:calc(var(--granite-size-base-rem) * 2)}.arrow-btn granite-icon{font-size:var(--granite-font-size-body);position:relative;top:0}::ng-deep .auto-width .p-carousel-item{flex:0 0 auto!important}::ng-deep .is-one-item .p-carousel-item{flex:1 0 100%!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.Carousel, selector: "p-carousel", inputs: ["page", "numVisible", "numScroll", "responsiveOptions", "orientation", "verticalViewPortHeight", "contentClass", "indicatorsContentClass", "indicatorsContentStyle", "indicatorStyleClass", "indicatorStyle", "value", "circular", "showIndicators", "showNavigators", "autoplayInterval", "styleClass", "prevButtonProps", "nextButtonProps"], outputs: ["onPage"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.GraniteButtonComponent, selector: "button[graniteButton], button[granitePrimaryButton], button[graniteFlatButton], button[graniteToolbarButton] ", inputs: ["disabled", "toggled"], exportAs: ["graniteButton"] }, { kind: "component", type: i4.GraniteIconComponent, selector: "granite-icon", inputs: ["fontIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
129
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselComponent, decorators: [{
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselComponent, decorators: [{
131
131
  type: Component,
132
132
  args: [{ selector: 'granite-carousel', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"carousel-wrapper\">\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isBackwardNavDisabled()\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n (click)=\"navBackward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-left\"></granite-icon>\n </button>\n\n <p-carousel\n #carousel\n [value]=\"visibleItems\"\n [numVisible]=\"numVisible\"\n [numScroll]=\"numScroll\"\n [circular]=\"circular\"\n [responsiveOptions]=\"responsiveOptions\"\n [showNavigators]=\"false\"\n [showIndicators]=\"false\"\n [class.auto-width]=\"shrinkToContent\"\n [class.is-one-item]=\"isOneItemVisible\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div class=\"item-template-wrapper\" *ngIf=\"!item.placeholder\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplateRef; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-template>\n </p-carousel>\n\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isForwardNavDisabled()\"\n [attr.aria-label]=\"nextButtonAriaLabel\"\n (click)=\"navForward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-right\"></granite-icon>\n </button>\n</div>\n", styles: [":host{width:100%;overflow:hidden}.carousel-wrapper{display:flex;justify-content:center;align-items:center;gap:var(--granite-spacing-8);padding:var(--granite-spacing-8);width:100%;max-width:100%;overflow:hidden;box-sizing:border-box}p-carousel{flex:1;min-width:0}p-carousel .item-template-wrapper{margin:var(--granite-spacing-4)}.arrow-btn{width:calc(var(--granite-size-base-rem) * 2);height:calc(var(--granite-size-base-rem) * 2)}.arrow-btn granite-icon{font-size:var(--granite-font-size-body);position:relative;top:0}::ng-deep .auto-width .p-carousel-item{flex:0 0 auto!important}::ng-deep .is-one-item .p-carousel-item{flex:1 0 100%!important}\n"] }]
133
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { items: [{
133
+ }], propDecorators: { items: [{
134
134
  type: Input
135
135
  }], responsiveOptions: [{
136
136
  type: Input
@@ -158,17 +158,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
158
158
  }] } });
159
159
 
160
160
  class GraniteCarouselModule {
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
162
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselModule, declarations: [GraniteCarouselComponent], imports: [CommonModule,
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
162
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselModule, declarations: [GraniteCarouselComponent], imports: [CommonModule,
163
163
  CarouselModule,
164
164
  GraniteButtonModule,
165
165
  GraniteIconModule], exports: [GraniteCarouselComponent] }); }
166
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselModule, imports: [CommonModule,
166
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselModule, imports: [CommonModule,
167
167
  CarouselModule,
168
168
  GraniteButtonModule,
169
169
  GraniteIconModule] }); }
170
170
  }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GraniteCarouselModule, decorators: [{
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GraniteCarouselModule, decorators: [{
172
172
  type: NgModule,
173
173
  args: [{
174
174
  declarations: [GraniteCarouselComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"ifsworld-granite-components-carousel.mjs","sources":["../../../../libs/granite-components/carousel/src/lib/carousel.component.ts","../../../../libs/granite-components/carousel/src/lib/carousel.component.html","../../../../libs/granite-components/carousel/src/lib/carousel.module.ts","../../../../libs/granite-components/carousel/src/ifsworld-granite-components-carousel.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { Carousel, CarouselResponsiveOptions } from 'primeng/carousel';\n\n@Component({\n selector: 'granite-carousel',\n templateUrl: './carousel.component.html',\n styleUrl: './carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteCarouselComponent<T>\n implements OnChanges, AfterViewInit, OnDestroy\n{\n @Input()\n items: T[] = [];\n\n @Input()\n responsiveOptions: CarouselResponsiveOptions[] = [\n {\n breakpoint: '1024px',\n numVisible: 3,\n numScroll: 1,\n },\n {\n breakpoint: '768px',\n numVisible: 2,\n numScroll: 1,\n },\n {\n breakpoint: '560px',\n numVisible: 1,\n numScroll: 1,\n },\n ];\n\n @Input()\n numVisible: number = 1;\n\n @Input()\n numScroll: number = 1;\n\n @Input()\n circular: boolean = false;\n\n @Input()\n prevButtonAriaLabel: string = 'Previous page';\n\n @Input()\n nextButtonAriaLabel: string = 'Next page';\n\n @Input()\n shrinkToContent: boolean = false;\n\n @ContentChild('itemTemplate', { static: false })\n itemTemplateRef: TemplateRef<any>;\n\n @ViewChild('carousel')\n carousel: Carousel;\n\n visibleItems: T[] = [];\n isOneItemVisible: boolean = false;\n\n private resizeObserver: ResizeObserver;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['items'] && changes['items'].currentValue) {\n this.items = changes['items'].currentValue;\n this.triggerUpdate();\n }\n }\n\n ngAfterViewInit(): void {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n this.handleResize(entries);\n });\n\n this.resizeObserver.observe(this.carousel?.el?.nativeElement);\n }\n }\n\n @HostListener('window:resize')\n onResize(): void {\n this.triggerUpdate();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n const mouseEvent = new MouseEvent('click', { cancelable: true });\n if (event.key === 'ArrowRight') {\n this.navForward(mouseEvent);\n } else if (event.key === 'ArrowLeft') {\n this.navBackward(mouseEvent);\n }\n }\n\n navForward(event: MouseEvent): void {\n this.carousel?.navForward(event);\n }\n\n navBackward(event: MouseEvent): void {\n this.carousel?.navBackward(event);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private triggerUpdate(): void {\n if (this.carousel?.el?.nativeElement) {\n const containerWidth = this.carousel.el.nativeElement.offsetWidth;\n this.updateNumVisibleBasedOnWidth(containerWidth);\n } else {\n this.updateVisibleItems();\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]): void {\n entries.forEach((entry) => {\n if (entry.contentRect) {\n const containerWidth = entry.contentRect.width;\n this.updateNumVisibleBasedOnWidth(containerWidth);\n }\n });\n }\n\n private getDisplayItems(items: T[], numVisible: number): T[] {\n const placeholders = Array(Math.max(0, numVisible - items.length)).fill({\n placeholder: true,\n });\n\n return [...items, ...placeholders];\n }\n\n private updateVisibleItems(): void {\n if (!this.items || !this.carousel) return;\n\n const numVisible = this.carousel.numVisible || this.numVisible;\n this.visibleItems = this.getDisplayItems(this.items, numVisible);\n this.cdr.markForCheck();\n }\n\n private updateNumVisibleBasedOnWidth(containerWidth: number): void {\n if (!this.carousel) return;\n\n let matched: boolean = false;\n const sortedResponsiveOptions = [...this.responsiveOptions].sort(\n (a, b) => parseInt(a.breakpoint) - parseInt(b.breakpoint)\n );\n\n if (containerWidth) {\n for (const option of sortedResponsiveOptions) {\n const breakpoint = parseInt(option.breakpoint);\n\n if (containerWidth <= breakpoint) {\n this.carousel.numVisible = option.numVisible;\n this.isOneItemVisible = option.numVisible === 1;\n matched = true;\n break;\n }\n }\n }\n\n if (!matched) {\n this.carousel.numVisible = this.numVisible;\n }\n\n this.updateVisibleItems();\n }\n}\n","<div class=\"carousel-wrapper\">\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isBackwardNavDisabled()\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n (click)=\"navBackward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-left\"></granite-icon>\n </button>\n\n <p-carousel\n #carousel\n [value]=\"visibleItems\"\n [numVisible]=\"numVisible\"\n [numScroll]=\"numScroll\"\n [circular]=\"circular\"\n [responsiveOptions]=\"responsiveOptions\"\n [showNavigators]=\"false\"\n [showIndicators]=\"false\"\n [class.auto-width]=\"shrinkToContent\"\n [class.is-one-item]=\"isOneItemVisible\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div class=\"item-template-wrapper\" *ngIf=\"!item.placeholder\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplateRef; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-template>\n </p-carousel>\n\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isForwardNavDisabled()\"\n [attr.aria-label]=\"nextButtonAriaLabel\"\n (click)=\"navForward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-right\"></granite-icon>\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteCarouselComponent } from './carousel.component';\nimport { CarouselModule } from 'primeng/carousel';\nimport {\n GraniteIconModule,\n GraniteButtonModule,\n} from '@ifsworld/granite-components';\n\n@NgModule({\n declarations: [GraniteCarouselComponent],\n exports: [GraniteCarouselComponent],\n imports: [\n CommonModule,\n CarouselModule,\n GraniteButtonModule,\n GraniteIconModule,\n ],\n})\nexport class GraniteCarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifsworld-granite-components-carousel.mjs","sources":["../../../../libs/granite-components/carousel/src/lib/carousel.component.ts","../../../../libs/granite-components/carousel/src/lib/carousel.component.html","../../../../libs/granite-components/carousel/src/lib/carousel.module.ts","../../../../libs/granite-components/carousel/src/ifsworld-granite-components-carousel.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { Carousel, CarouselResponsiveOptions } from 'primeng/carousel';\n\n@Component({\n selector: 'granite-carousel',\n templateUrl: './carousel.component.html',\n styleUrl: './carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class GraniteCarouselComponent<T>\n implements OnChanges, AfterViewInit, OnDestroy\n{\n @Input()\n items: T[] = [];\n\n @Input()\n responsiveOptions: CarouselResponsiveOptions[] = [\n {\n breakpoint: '1024px',\n numVisible: 3,\n numScroll: 1,\n },\n {\n breakpoint: '768px',\n numVisible: 2,\n numScroll: 1,\n },\n {\n breakpoint: '560px',\n numVisible: 1,\n numScroll: 1,\n },\n ];\n\n @Input()\n numVisible: number = 1;\n\n @Input()\n numScroll: number = 1;\n\n @Input()\n circular: boolean = false;\n\n @Input()\n prevButtonAriaLabel: string = 'Previous page';\n\n @Input()\n nextButtonAriaLabel: string = 'Next page';\n\n @Input()\n shrinkToContent: boolean = false;\n\n @ContentChild('itemTemplate', { static: false })\n itemTemplateRef: TemplateRef<any>;\n\n @ViewChild('carousel')\n carousel: Carousel;\n\n visibleItems: T[] = [];\n isOneItemVisible: boolean = false;\n\n private cdr = inject(ChangeDetectorRef);\n private resizeObserver: ResizeObserver;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['items'] && changes['items'].currentValue) {\n this.items = changes['items'].currentValue;\n this.triggerUpdate();\n }\n }\n\n ngAfterViewInit(): void {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n this.handleResize(entries);\n });\n\n this.resizeObserver.observe(this.carousel?.el?.nativeElement);\n }\n }\n\n @HostListener('window:resize')\n onResize(): void {\n this.triggerUpdate();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n const mouseEvent = new MouseEvent('click', { cancelable: true });\n if (event.key === 'ArrowRight') {\n this.navForward(mouseEvent);\n } else if (event.key === 'ArrowLeft') {\n this.navBackward(mouseEvent);\n }\n }\n\n navForward(event: MouseEvent): void {\n this.carousel?.navForward(event);\n }\n\n navBackward(event: MouseEvent): void {\n this.carousel?.navBackward(event);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private triggerUpdate(): void {\n if (this.carousel?.el?.nativeElement) {\n const containerWidth = this.carousel.el.nativeElement.offsetWidth;\n this.updateNumVisibleBasedOnWidth(containerWidth);\n } else {\n this.updateVisibleItems();\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]): void {\n entries.forEach((entry) => {\n if (entry.contentRect) {\n const containerWidth = entry.contentRect.width;\n this.updateNumVisibleBasedOnWidth(containerWidth);\n }\n });\n }\n\n private getDisplayItems(items: T[], numVisible: number): T[] {\n const placeholders = Array(Math.max(0, numVisible - items.length)).fill({\n placeholder: true,\n });\n\n return [...items, ...placeholders];\n }\n\n private updateVisibleItems(): void {\n if (!this.items || !this.carousel) return;\n\n const numVisible = this.carousel.numVisible || this.numVisible;\n this.visibleItems = this.getDisplayItems(this.items, numVisible);\n this.cdr.markForCheck();\n }\n\n private updateNumVisibleBasedOnWidth(containerWidth: number): void {\n if (!this.carousel) return;\n\n let matched: boolean = false;\n const sortedResponsiveOptions = [...this.responsiveOptions].sort(\n (a, b) => parseInt(a.breakpoint) - parseInt(b.breakpoint)\n );\n\n if (containerWidth) {\n for (const option of sortedResponsiveOptions) {\n const breakpoint = parseInt(option.breakpoint);\n\n if (containerWidth <= breakpoint) {\n this.carousel.numVisible = option.numVisible;\n this.isOneItemVisible = option.numVisible === 1;\n matched = true;\n break;\n }\n }\n }\n\n if (!matched) {\n this.carousel.numVisible = this.numVisible;\n }\n\n this.updateVisibleItems();\n }\n}\n","<div class=\"carousel-wrapper\">\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isBackwardNavDisabled()\"\n [attr.aria-label]=\"prevButtonAriaLabel\"\n (click)=\"navBackward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-left\"></granite-icon>\n </button>\n\n <p-carousel\n #carousel\n [value]=\"visibleItems\"\n [numVisible]=\"numVisible\"\n [numScroll]=\"numScroll\"\n [circular]=\"circular\"\n [responsiveOptions]=\"responsiveOptions\"\n [showNavigators]=\"false\"\n [showIndicators]=\"false\"\n [class.auto-width]=\"shrinkToContent\"\n [class.is-one-item]=\"isOneItemVisible\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div class=\"item-template-wrapper\" *ngIf=\"!item.placeholder\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplateRef; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-template>\n </p-carousel>\n\n <button\n graniteFlatButton\n class=\"arrow-btn\"\n [disabled]=\"carousel.isForwardNavDisabled()\"\n [attr.aria-label]=\"nextButtonAriaLabel\"\n (click)=\"navForward($event)\"\n >\n <granite-icon fontIcon=\"icon-caret-right\"></granite-icon>\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraniteCarouselComponent } from './carousel.component';\nimport { CarouselModule } from 'primeng/carousel';\nimport {\n GraniteIconModule,\n GraniteButtonModule,\n} from '@ifsworld/granite-components';\n\n@NgModule({\n declarations: [GraniteCarouselComponent],\n exports: [GraniteCarouselComponent],\n imports: [\n CommonModule,\n CarouselModule,\n GraniteButtonModule,\n GraniteIconModule,\n ],\n})\nexport class GraniteCarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}