@daffodil/design 0.92.3 → 0.93.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 (153) hide show
  1. package/accordion/README.md +4 -4
  2. package/breadcrumb/README.md +13 -35
  3. package/button/README.md +28 -50
  4. package/card/README.md +8 -22
  5. package/card/src/card/stroked/stroked-theme.scss +8 -1
  6. package/card/src/card-base-theme.scss +12 -1
  7. package/container/README.md +4 -26
  8. package/fesm2022/daffodil-design-accordion.mjs +15 -15
  9. package/fesm2022/daffodil-design-accordion.mjs.map +1 -1
  10. package/fesm2022/daffodil-design-article.mjs +30 -30
  11. package/fesm2022/daffodil-design-article.mjs.map +1 -1
  12. package/fesm2022/daffodil-design-breadcrumb.mjs +20 -20
  13. package/fesm2022/daffodil-design-breadcrumb.mjs.map +1 -1
  14. package/fesm2022/daffodil-design-button.mjs +37 -49
  15. package/fesm2022/daffodil-design-button.mjs.map +1 -1
  16. package/fesm2022/daffodil-design-callout.mjs +22 -22
  17. package/fesm2022/daffodil-design-callout.mjs.map +1 -1
  18. package/fesm2022/daffodil-design-card.mjs +31 -31
  19. package/fesm2022/daffodil-design-card.mjs.map +1 -1
  20. package/fesm2022/daffodil-design-checkbox.mjs +13 -13
  21. package/fesm2022/daffodil-design-checkbox.mjs.map +1 -1
  22. package/fesm2022/daffodil-design-container.mjs +7 -7
  23. package/fesm2022/daffodil-design-container.mjs.map +1 -1
  24. package/fesm2022/daffodil-design-form-field.mjs +13 -12
  25. package/fesm2022/daffodil-design-form-field.mjs.map +1 -1
  26. package/fesm2022/daffodil-design-form.mjs +9 -9
  27. package/fesm2022/daffodil-design-form.mjs.map +1 -1
  28. package/fesm2022/daffodil-design-hero.mjs +22 -22
  29. package/fesm2022/daffodil-design-hero.mjs.map +1 -1
  30. package/fesm2022/daffodil-design-image.mjs +8 -8
  31. package/fesm2022/daffodil-design-image.mjs.map +1 -1
  32. package/fesm2022/daffodil-design-input.mjs +12 -11
  33. package/fesm2022/daffodil-design-input.mjs.map +1 -1
  34. package/fesm2022/daffodil-design-link-set.mjs +16 -16
  35. package/fesm2022/daffodil-design-link-set.mjs.map +1 -1
  36. package/fesm2022/daffodil-design-list.mjs +20 -17
  37. package/fesm2022/daffodil-design-list.mjs.map +1 -1
  38. package/fesm2022/daffodil-design-loading-icon.mjs +7 -7
  39. package/fesm2022/daffodil-design-loading-icon.mjs.map +1 -1
  40. package/fesm2022/daffodil-design-media-gallery.mjs +13 -13
  41. package/fesm2022/daffodil-design-media-gallery.mjs.map +1 -1
  42. package/fesm2022/daffodil-design-menu.mjs +20 -20
  43. package/fesm2022/daffodil-design-menu.mjs.map +1 -1
  44. package/fesm2022/daffodil-design-modal.mjs +32 -26
  45. package/fesm2022/daffodil-design-modal.mjs.map +1 -1
  46. package/fesm2022/daffodil-design-native-select.mjs +5 -3
  47. package/fesm2022/daffodil-design-native-select.mjs.map +1 -1
  48. package/fesm2022/daffodil-design-navbar.mjs +9 -9
  49. package/fesm2022/daffodil-design-navbar.mjs.map +1 -1
  50. package/fesm2022/daffodil-design-notification.mjs +16 -16
  51. package/fesm2022/daffodil-design-notification.mjs.map +1 -1
  52. package/fesm2022/daffodil-design-paginator.mjs +8 -8
  53. package/fesm2022/daffodil-design-paginator.mjs.map +1 -1
  54. package/fesm2022/daffodil-design-progress-bar.mjs +10 -10
  55. package/fesm2022/daffodil-design-progress-bar.mjs.map +1 -1
  56. package/fesm2022/daffodil-design-quantity-field.mjs +13 -13
  57. package/fesm2022/daffodil-design-quantity-field.mjs.map +1 -1
  58. package/fesm2022/daffodil-design-radio.mjs +16 -16
  59. package/fesm2022/daffodil-design-radio.mjs.map +1 -1
  60. package/fesm2022/daffodil-design-select.mjs +11 -11
  61. package/fesm2022/daffodil-design-select.mjs.map +1 -1
  62. package/fesm2022/daffodil-design-sidebar.mjs +35 -29
  63. package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
  64. package/fesm2022/daffodil-design-spinner.mjs +7 -7
  65. package/fesm2022/daffodil-design-spinner.mjs.map +1 -1
  66. package/fesm2022/daffodil-design-switch.mjs +3 -3
  67. package/fesm2022/daffodil-design-switch.mjs.map +1 -1
  68. package/fesm2022/daffodil-design-tabs.mjs +17 -25
  69. package/fesm2022/daffodil-design-tabs.mjs.map +1 -1
  70. package/fesm2022/daffodil-design-tag.mjs +20 -20
  71. package/fesm2022/daffodil-design-tag.mjs.map +1 -1
  72. package/fesm2022/daffodil-design-testing.mjs +19 -0
  73. package/fesm2022/daffodil-design-testing.mjs.map +1 -0
  74. package/fesm2022/daffodil-design-text-snippet.mjs +3 -3
  75. package/fesm2022/daffodil-design-text-snippet.mjs.map +1 -1
  76. package/fesm2022/daffodil-design-textarea.mjs +3 -3
  77. package/fesm2022/daffodil-design-textarea.mjs.map +1 -1
  78. package/fesm2022/daffodil-design-toast.mjs +21 -21
  79. package/fesm2022/daffodil-design-toast.mjs.map +1 -1
  80. package/fesm2022/daffodil-design-tree.mjs +27 -25
  81. package/fesm2022/daffodil-design-tree.mjs.map +1 -1
  82. package/fesm2022/daffodil-design-youtube-player.mjs +22 -11
  83. package/fesm2022/daffodil-design-youtube-player.mjs.map +1 -1
  84. package/fesm2022/daffodil-design.mjs +110 -149
  85. package/fesm2022/daffodil-design.mjs.map +1 -1
  86. package/form/README.md +15 -6
  87. package/hero/README.md +14 -49
  88. package/image/README.md +6 -29
  89. package/input/README.md +8 -34
  90. package/list/README.md +29 -55
  91. package/list/src/list-theme.scss +16 -2
  92. package/media-gallery/README.md +36 -43
  93. package/menu/README.md +24 -55
  94. package/menu/src/menu-theme.scss +12 -2
  95. package/modal/README.md +15 -45
  96. package/native-select/README.md +8 -6
  97. package/navbar/README.md +18 -27
  98. package/notification/README.md +14 -49
  99. package/package.json +1 -1
  100. package/paginator/README.md +11 -31
  101. package/paginator/src/paginator-theme.scss +16 -2
  102. package/progress-bar/README.md +14 -41
  103. package/scss/global.scss +21 -2
  104. package/select/README.md +5 -6
  105. package/select/src/select-theme.scss +10 -2
  106. package/sidebar/README.md +1 -1
  107. package/spinner/README.md +15 -9
  108. package/switch/README.md +17 -6
  109. package/tabs/README.md +39 -39
  110. package/tag/README.md +24 -28
  111. package/textarea/README.md +9 -7
  112. package/toast/README.md +55 -52
  113. package/tree/README.md +12 -43
  114. package/tree/src/tree-theme.scss +8 -4
  115. package/{accordion/index.d.ts → types/daffodil-design-accordion.d.ts} +1 -1
  116. package/{button/index.d.ts → types/daffodil-design-button.d.ts} +7 -8
  117. package/{input/index.d.ts → types/daffodil-design-input.d.ts} +4 -1
  118. package/{list/index.d.ts → types/daffodil-design-list.d.ts} +4 -1
  119. package/{menu/index.d.ts → types/daffodil-design-menu.d.ts} +3 -3
  120. package/{modal/index.d.ts → types/daffodil-design-modal.d.ts} +11 -5
  121. package/{native-select/index.d.ts → types/daffodil-design-native-select.d.ts} +3 -1
  122. package/{sidebar/index.d.ts → types/daffodil-design-sidebar.d.ts} +9 -3
  123. package/{tabs/index.d.ts → types/daffodil-design-tabs.d.ts} +0 -6
  124. package/{tag/index.d.ts → types/daffodil-design-tag.d.ts} +9 -8
  125. package/types/daffodil-design-testing.d.ts +11 -0
  126. package/{tree/index.d.ts → types/daffodil-design-tree.d.ts} +2 -0
  127. package/{youtube-player/index.d.ts → types/daffodil-design-youtube-player.d.ts} +15 -0
  128. package/{index.d.ts → types/daffodil-design.d.ts} +17 -64
  129. /package/{article/index.d.ts → types/daffodil-design-article.d.ts} +0 -0
  130. /package/{breadcrumb/index.d.ts → types/daffodil-design-breadcrumb.d.ts} +0 -0
  131. /package/{callout/index.d.ts → types/daffodil-design-callout.d.ts} +0 -0
  132. /package/{card/index.d.ts → types/daffodil-design-card.d.ts} +0 -0
  133. /package/{checkbox/index.d.ts → types/daffodil-design-checkbox.d.ts} +0 -0
  134. /package/{container/index.d.ts → types/daffodil-design-container.d.ts} +0 -0
  135. /package/{form-field/index.d.ts → types/daffodil-design-form-field.d.ts} +0 -0
  136. /package/{form/index.d.ts → types/daffodil-design-form.d.ts} +0 -0
  137. /package/{hero/index.d.ts → types/daffodil-design-hero.d.ts} +0 -0
  138. /package/{image/index.d.ts → types/daffodil-design-image.d.ts} +0 -0
  139. /package/{link-set/index.d.ts → types/daffodil-design-link-set.d.ts} +0 -0
  140. /package/{loading-icon/index.d.ts → types/daffodil-design-loading-icon.d.ts} +0 -0
  141. /package/{media-gallery/index.d.ts → types/daffodil-design-media-gallery.d.ts} +0 -0
  142. /package/{navbar/index.d.ts → types/daffodil-design-navbar.d.ts} +0 -0
  143. /package/{notification/index.d.ts → types/daffodil-design-notification.d.ts} +0 -0
  144. /package/{paginator/index.d.ts → types/daffodil-design-paginator.d.ts} +0 -0
  145. /package/{progress-bar/index.d.ts → types/daffodil-design-progress-bar.d.ts} +0 -0
  146. /package/{quantity-field/index.d.ts → types/daffodil-design-quantity-field.d.ts} +0 -0
  147. /package/{radio/index.d.ts → types/daffodil-design-radio.d.ts} +0 -0
  148. /package/{select/index.d.ts → types/daffodil-design-select.d.ts} +0 -0
  149. /package/{spinner/index.d.ts → types/daffodil-design-spinner.d.ts} +0 -0
  150. /package/{switch/index.d.ts → types/daffodil-design-switch.d.ts} +0 -0
  151. /package/{text-snippet/index.d.ts → types/daffodil-design-text-snippet.d.ts} +0 -0
  152. /package/{textarea/index.d.ts → types/daffodil-design-textarea.d.ts} +0 -0
  153. /package/{toast/index.d.ts → types/daffodil-design-toast.d.ts} +0 -0
@@ -68,10 +68,10 @@ class DaffThumbnailDirective {
68
68
  console.warn('The thumbnail ' + this.id + ' is missing a label.');
69
69
  }
70
70
  }
71
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffThumbnailDirective, deps: [{ token: DAFF_MEDIA_GALLERY_TOKEN }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
72
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.18", type: DaffThumbnailDirective, isStandalone: true, selector: "[daffThumbnail]", inputs: { thumbnailSrc: "thumbnailSrc", label: "label", isVideo: "isVideo" }, ngImport: i0 }); }
71
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffThumbnailDirective, deps: [{ token: DAFF_MEDIA_GALLERY_TOKEN }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
72
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: DaffThumbnailDirective, isStandalone: true, selector: "[daffThumbnail]", inputs: { thumbnailSrc: "thumbnailSrc", label: "label", isVideo: "isVideo" }, ngImport: i0 }); }
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffThumbnailDirective, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffThumbnailDirective, decorators: [{
75
75
  type: Directive,
76
76
  args: [{
77
77
  selector: '[daffThumbnail]',
@@ -130,7 +130,7 @@ class DaffMediaGalleryComponent {
130
130
  /**
131
131
  * @docs-private
132
132
  */
133
- this._thumbnails = contentChildren(DaffThumbnailDirective, ...(ngDevMode ? [{ debugName: "_thumbnails" }] : []));
133
+ this._thumbnails = contentChildren(DaffThumbnailDirective, ...(ngDevMode ? [{ debugName: "_thumbnails" }] : /* istanbul ignore next */ []));
134
134
  /**
135
135
  * @docs-private
136
136
  */
@@ -140,8 +140,8 @@ class DaffMediaGalleryComponent {
140
140
  return this._thumbnails().at(0);
141
141
  }
142
142
  return this._thumbnails().at(idx);
143
- }, ...(ngDevMode ? [{ debugName: "_selectedThumbnail" }] : []));
144
- this._selectedIndex = signal(null, ...(ngDevMode ? [{ debugName: "_selectedIndex" }] : []));
143
+ }, ...(ngDevMode ? [{ debugName: "_selectedThumbnail" }] : /* istanbul ignore next */ []));
144
+ this._selectedIndex = signal(null, ...(ngDevMode ? [{ debugName: "_selectedIndex" }] : /* istanbul ignore next */ []));
145
145
  uniqueGalleryId++;
146
146
  }
147
147
  /**
@@ -212,12 +212,12 @@ class DaffMediaGalleryComponent {
212
212
  this.focusSelected();
213
213
  }
214
214
  }
215
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryComponent, deps: [{ token: i1.DaffSkeletonableDirective }], target: i0.ɵɵFactoryTarget.Component }); }
216
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: DaffMediaGalleryComponent, isStandalone: true, selector: "daff-media-gallery", inputs: { id: "id" }, outputs: { elementChange: "elementChange" }, host: { properties: { "attr.id": "id" }, classAttribute: "daff-media-gallery" }, providers: [
215
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryComponent, deps: [{ token: i1.DaffSkeletonableDirective }], target: i0.ɵɵFactoryTarget.Component }); }
216
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DaffMediaGalleryComponent, isStandalone: true, selector: "daff-media-gallery", inputs: { id: "id" }, outputs: { elementChange: "elementChange" }, host: { properties: { "attr.id": "id" }, classAttribute: "daff-media-gallery" }, providers: [
217
217
  { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },
218
218
  ], queries: [{ propertyName: "_thumbnails", predicate: DaffThumbnailDirective, isSignal: true }], viewQueries: [{ propertyName: "_thumbnailButtons", predicate: ["thumbnailButtons"], descendants: true, read: ElementRef }], hostDirectives: [{ directive: i1.DaffArticleEncapsulatedDirective }, { directive: i1.DaffSkeletonableDirective, inputs: ["skeleton", "skeleton"] }], ngImport: i0, template: "<ng-content></ng-content>\n\n<div class=\"daff-media-gallery__thumbnails\" #thumbnailsEl role=\"tablist\">\n\t@if(skeleton) {\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t}\n\t@else {\n\t\t@for (thumbnail of _thumbnails(); track thumbnail; let index = $index) {\n\t\t\t<button \n\t\t\t\t#thumbnailButtons\n\t\t\t\tclass=\"daff-thumbnail\" \n\t\t\t\trole=\"tab\"\n\t\t\t\tdaffSelected\n\t\t\t\t[selected]=\"thumbnail === _selectedThumbnail()\"\n\t\t\t\tattr.aria-label=\"{{ thumbnail.label ?? 'Gallery Element ' + (index + 1) }}\"\n\t\t\t\t[attr.aria-selected]=\"thumbnail === _selectedThumbnail() ? 'true' : 'false'\"\n\t\t\t\t[attr.aria-controls]=\"thumbnail.selectedThumbnailId\"\n\t\t\t\t[attr.tabindex]=\"thumbnail === _selectedThumbnail() ? 0 : -1\"\n\t\t\t\t(click)=\"selectIndex(index)\"\n\t\t\t\t[attr.id]=\"thumbnail.id\" \n\t\t\t\t(keydown.arrowright)=\"next()\"\n\t\t\t\t(keydown.arrowleft)=\"previous()\">\n\t\t\t\t@if (thumbnail.thumbnailSrc) {\n\t\t\t\t\t<img [src]=\"thumbnail.thumbnailSrc\" aria-hidden=\"true\"/>\n\t\t\t\t}\n\t\t\t\t@if (thumbnail.isVideo) {\n\t\t\t\t\t<div class=\"daff-media-gallery__video-button\">\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n@let selectedEl = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"selectedEl?.selectedThumbnailId\">\n\t\t@if(selectedEl) {\n\t\t\t<ng-container *ngTemplateOutlet=\"selectedEl.templateRef\"></ng-container>\n\t\t}\n\t\t@else {\n\t\t\t<div class=\"daff-media-gallery__skeleton-placeholder\"></div>\n\t\t}\n</div>", styles: [":host(.daff-media-gallery){display:flex;flex-direction:column;gap:.5rem}@media(min-width:1024px){:host(.daff-media-gallery){flex-direction:row}}:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;display:flex;flex-direction:row;justify-content:center;align-items:center;height:4rem;width:4rem;max-width:100%;overflow:hidden;user-select:none;padding:0;position:relative;flex-shrink:0}@media(min-width:480px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{height:4.5rem;width:4.5rem}}@media(min-width:1024px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{flex-direction:column;height:5rem;width:5rem}}:host(.daff-media-gallery) ::ng-deep .daff-thumbnail img{display:block;width:100%}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative;height:4rem;width:4rem;border-radius:0}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail:before{animation-name:loading;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:alternate;content:\"\";height:4rem;width:4rem;position:absolute;top:0;left:0}@media(min-width:480px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative;height:4.5rem;width:4.5rem;border-radius:0}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail:before{animation-name:loading;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:alternate;content:\"\";height:4.5rem;width:4.5rem;position:absolute;top:0;left:0}@keyframes loading{0%{opacity:.5}to{opacity:1}}}@media(min-width:1024px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative;height:5rem;width:5rem;border-radius:0}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail:before{animation-name:loading;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:alternate;content:\"\";height:5rem;width:5rem;position:absolute;top:0;left:0}@keyframes loading{0%{opacity:.5}to{opacity:1}}}:host(.daff-media-gallery).daff-skeleton ::ng-deep img{opacity:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail{flex-grow:1;display:flex;position:relative;height:100%;width:100%;border-radius:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail:before{animation-name:loading;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:alternate;content:\"\";height:100%;width:100%;position:absolute;top:0;left:0}@keyframes loading{0%{opacity:.5}to{opacity:1}}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__skeleton-placeholder{height:16rem}@media(min-width:1024px){:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__skeleton-placeholder{height:30rem}}.daff-media-gallery__thumbnails{display:flex;flex-direction:row;flex-shrink:0;gap:.25rem;order:2;max-width:100%;overflow-x:auto}@media(min-width:1024px){.daff-media-gallery__thumbnails{max-height:29.5rem;flex-direction:column;overflow-y:auto;order:1}}.daff-media-gallery__selected-thumbnail{display:flex;align-items:center;justify-content:center;flex-grow:1;width:100%;order:1}@media(min-width:1024px){.daff-media-gallery__selected-thumbnail{order:2;margin:0}}.daff-media-gallery__video-button{width:2rem;height:2rem;border-radius:100%;position:absolute}.daff-media-gallery__video-button:after{content:\"\";position:absolute;width:.75rem;height:.75rem;left:60%;top:50%;transform:translate(-60%,-50%) rotate(90deg);clip-path:polygon(50% 15%,0% 100%,100% 100%);transition:all .4s ease-in-out}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: DaffSelectableDirective, selector: "[daffSelected]", inputs: ["selected"], outputs: ["becameSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
219
219
  }
220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryComponent, decorators: [{
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryComponent, decorators: [{
221
221
  type: Component,
222
222
  args: [{ selector: 'daff-media-gallery', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
223
223
  { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },
@@ -248,14 +248,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
248
248
  * @deprecated in favor of {@link DAFF_MEDIA_GALLERY_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.
249
249
  */
250
250
  class DaffMediaGalleryModule {
251
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
252
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule,
251
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
252
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule,
253
253
  DaffMediaGalleryComponent,
254
254
  DaffThumbnailDirective], exports: [DaffMediaGalleryComponent,
255
255
  DaffThumbnailDirective] }); }
256
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule] }); }
256
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule] }); }
257
257
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMediaGalleryModule, decorators: [{
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMediaGalleryModule, decorators: [{
259
259
  type: NgModule,
260
260
  args: [{
261
261
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-design-media-gallery.mjs","sources":["../../../libs/design/media-gallery/src/helpers/media-gallery-token.ts","../../../libs/design/media-gallery/src/thumbnail/thumbnail.directive.ts","../../../libs/design/media-gallery/src/media-gallery/media-gallery.component.ts","../../../libs/design/media-gallery/src/media-gallery/media-gallery.component.html","../../../libs/design/media-gallery/src/media-gallery.module.ts","../../../libs/design/media-gallery/src/media-gallery.ts","../../../libs/design/media-gallery/src/daffodil-design-media-gallery.ts"],"sourcesContent":["import { createSingleInjectionToken } from '@daffodil/core';\n\nimport { DaffMediaGalleryRegistration } from './media-gallery-registration.interface';\n\nexport const {\n token: DAFF_MEDIA_GALLERY_TOKEN,\n /**\n * Provider function for {@link DAFF_MEDIA_GALLERY_TOKEN}.\n */\n provider: provideDaffMediaGalleryToken,\n} = createSingleInjectionToken<DaffMediaGalleryRegistration>('DAFF_MEDIA_GALLERY_TOKEN');\n","import {\n Directive,\n Inject,\n Input,\n TemplateRef,\n OnInit,\n isDevMode,\n} from '@angular/core';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\n\nlet uniqueThumbnailId = 0;\n\n/**\n * DaffThumbnailDirective is a structural directive used to mark elements as thumbnails within the `DaffMediaGalleryComponent`.\n *\n * ```html\n * <ng-template daffThumbnail></ng-template>\n * ```\n */\n@Directive({\n selector: '[daffThumbnail]',\n})\nexport class DaffThumbnailDirective implements OnInit {\n\n private _increment = uniqueThumbnailId;\n\n /**\n * @docs-private\n *\n * The autogenerated unique id for a thumbnail.\n */\n get id(): string {\n return this.gallery.id + '-thumbnail-' + this._increment;\n }\n\n /**\n * @docs-private\n *\n * The unique id of the selected thumbnail.\n */\n get selectedThumbnailId(): string {\n return this.id + '-selected';\n }\n\n /**\n * The file path to a thumbnail, presumably an image.\n */\n @Input() thumbnailSrc = undefined;\n\n /**\n * Provides an accessible label for a thumbnail.\n */\n @Input() label: string = undefined;\n\n /** Indicates whether the thumbnail represents a video. */\n @Input() isVideo = false;\n\n constructor(\n /**\n * @docs-private\n */\n @Inject(DAFF_MEDIA_GALLERY_TOKEN) public gallery: DaffMediaGalleryRegistration,\n /**\n * @docs-private\n */\n public templateRef: TemplateRef<unknown>,\n ) {\n uniqueThumbnailId++;\n }\n\n /**\n * @docs-private\n */\n ngOnInit() {\n if(!this.label && isDevMode()) {\n console.warn('The thumbnail ' + this.id + ' is missing a label.');\n }\n }\n}\n","/* eslint-disable quote-props */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n QueryList,\n ViewChildren,\n ElementRef,\n Output,\n EventEmitter,\n contentChildren,\n signal,\n computed,\n Signal,\n} from '@angular/core';\n\nimport {\n DaffArticleEncapsulatedDirective,\n DaffSelectableDirective,\n DaffSkeletonableDirective,\n} from '@daffodil/design';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\nimport { DaffThumbnailDirective } from '../thumbnail/thumbnail.directive';\n\nlet uniqueGalleryId = 0;\n\n/**\n * The `DaffMediaGalleryComonent` is used to display a group of thumbnails in a gallery format.\n *\n * ```html\n * <daff-media-gallery>\n * <ng-template daffThumbnail thumbnailSrc=\"/thumbnail-path.jpg\" label=\"Your description\">\n * <daff-image src=\"/image-path.jpg\" alt=\"Your description\" width=\"100\" height=\"100\"></daff-image>\n * </ng-template>\n * </daff-media-gallery>\n * ```\n */\n@Component({\n selector: 'daff-media-gallery',\n templateUrl: './media-gallery.component.html',\n styleUrls: ['./media-gallery.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n\n { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },\n ],\n hostDirectives: [\n { directive: DaffArticleEncapsulatedDirective },\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n host: {\n 'class': 'daff-media-gallery',\n '[attr.id]': 'id',\n },\n imports: [\n DaffThumbnailDirective,\n NgTemplateOutlet,\n DaffSelectableDirective,\n ],\n})\nexport class DaffMediaGalleryComponent implements DaffMediaGalleryRegistration {\n /**\n * The internal ID of the gallery.\n */\n private _id = 'media-gallery-' + uniqueGalleryId;\n\n /**\n * Custom ID for the media gallery that overrides the auto-generated one. When using this input, it is your responsibility to ensure that the ID is unique.\n */\n @Input()\n get id() {\n return this._id;\n }\n set id(val: string | undefined | null) {\n if(!val){\n return;\n }\n this._id = val;\n };\n\n /**\n * An event indicating that the selected media gallery element has changed.\n */\n @Output() elementChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * @docs-private\n */\n _thumbnails = contentChildren(DaffThumbnailDirective);\n\n /**\n * @docs-private\n */\n @ViewChildren('thumbnailButtons', { read: ElementRef }) private _thumbnailButtons: QueryList<ElementRef<HTMLElement>>;\n\n /**\n * @docs-private\n */\n constructor(private skeletonDirective: DaffSkeletonableDirective) {\n uniqueGalleryId++;\n }\n\n /**\n * @docs-private\n *\n * Whether or not the component its currently displaying its skeleton state.\n */\n get skeleton() {\n return this.skeletonDirective.skeleton;\n }\n\n /**\n * @docs-private\n */\n _selectedThumbnail: Signal<DaffThumbnailDirective> = computed(() => {\n const idx = this._selectedIndex();\n if(!idx) {\n return this._thumbnails().at(0);\n }\n return this._thumbnails().at(idx);\n });\n\n private _selectedIndex = signal<number | null>(null);\n\n private focusSelected() {\n this._thumbnailButtons.get(this._selectedIndex())?.nativeElement.focus();\n }\n\n /**\n * Select a specific entry in the media gallery by its index.\n *\n * @param index The index to set, starting at 0.\n */\n selectIndex(index: number) {\n this._selectedIndex.set(index);\n this.elementChange.emit(index);\n }\n\n /**\n * Navigate to the next element in the list of thumbnails.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n next(focus: boolean = true) {\n this._selectedIndex.update((curr) => ((curr ?? 0) + 1 + this._thumbnails().length) % this._thumbnails().length);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Navigate to the previous element in the list of thumbnails.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n previous(focus: boolean = true) {\n this._selectedIndex.update((curr) => ((curr ?? 0) - 1 + this._thumbnails().length) % this._thumbnails().length);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Select the first element.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n selectFirst(focus: boolean = true) {\n this._selectedIndex.set(0);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Select the last element of the gallery.\n *\n * @param Whether to move focus to the newly selected item.\n */\n selectLast(focus: boolean = true) {\n this._selectedIndex.set(this._thumbnails().length - 1);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n}\n","<ng-content></ng-content>\n\n<div class=\"daff-media-gallery__thumbnails\" #thumbnailsEl role=\"tablist\">\n\t@if(skeleton) {\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t}\n\t@else {\n\t\t@for (thumbnail of _thumbnails(); track thumbnail; let index = $index) {\n\t\t\t<button \n\t\t\t\t#thumbnailButtons\n\t\t\t\tclass=\"daff-thumbnail\" \n\t\t\t\trole=\"tab\"\n\t\t\t\tdaffSelected\n\t\t\t\t[selected]=\"thumbnail === _selectedThumbnail()\"\n\t\t\t\tattr.aria-label=\"{{ thumbnail.label ?? 'Gallery Element ' + (index + 1) }}\"\n\t\t\t\t[attr.aria-selected]=\"thumbnail === _selectedThumbnail() ? 'true' : 'false'\"\n\t\t\t\t[attr.aria-controls]=\"thumbnail.selectedThumbnailId\"\n\t\t\t\t[attr.tabindex]=\"thumbnail === _selectedThumbnail() ? 0 : -1\"\n\t\t\t\t(click)=\"selectIndex(index)\"\n\t\t\t\t[attr.id]=\"thumbnail.id\" \n\t\t\t\t(keydown.arrowright)=\"next()\"\n\t\t\t\t(keydown.arrowleft)=\"previous()\">\n\t\t\t\t@if (thumbnail.thumbnailSrc) {\n\t\t\t\t\t<img [src]=\"thumbnail.thumbnailSrc\" aria-hidden=\"true\"/>\n\t\t\t\t}\n\t\t\t\t@if (thumbnail.isVideo) {\n\t\t\t\t\t<div class=\"daff-media-gallery__video-button\">\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n@let selectedEl = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"selectedEl?.selectedThumbnailId\">\n\t\t@if(selectedEl) {\n\t\t\t<ng-container *ngTemplateOutlet=\"selectedEl.templateRef\"></ng-container>\n\t\t}\n\t\t@else {\n\t\t\t<div class=\"daff-media-gallery__skeleton-placeholder\"></div>\n\t\t}\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffThumbnailDirective } from './thumbnail/thumbnail.directive';\n\n/**\n * @deprecated in favor of {@link DAFF_MEDIA_GALLERY_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n ],\n exports: [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n ],\n})\nexport class DaffMediaGalleryModule {}\n","import { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffThumbnailDirective } from './thumbnail/thumbnail.directive';\n\n/**\n * @docs-private\n */\nexport const DAFF_MEDIA_GALLERY_COMPONENTS = <const> [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\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":"daffodil-design-media-gallery.mjs","sources":["../../../libs/design/media-gallery/src/helpers/media-gallery-token.ts","../../../libs/design/media-gallery/src/thumbnail/thumbnail.directive.ts","../../../libs/design/media-gallery/src/media-gallery/media-gallery.component.ts","../../../libs/design/media-gallery/src/media-gallery/media-gallery.component.html","../../../libs/design/media-gallery/src/media-gallery.module.ts","../../../libs/design/media-gallery/src/media-gallery.ts","../../../libs/design/media-gallery/src/daffodil-design-media-gallery.ts"],"sourcesContent":["import { createSingleInjectionToken } from '@daffodil/core';\n\nimport { DaffMediaGalleryRegistration } from './media-gallery-registration.interface';\n\nexport const {\n token: DAFF_MEDIA_GALLERY_TOKEN,\n /**\n * Provider function for {@link DAFF_MEDIA_GALLERY_TOKEN}.\n */\n provider: provideDaffMediaGalleryToken,\n} = createSingleInjectionToken<DaffMediaGalleryRegistration>('DAFF_MEDIA_GALLERY_TOKEN');\n","import {\n Directive,\n Inject,\n Input,\n TemplateRef,\n OnInit,\n isDevMode,\n} from '@angular/core';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\n\nlet uniqueThumbnailId = 0;\n\n/**\n * DaffThumbnailDirective is a structural directive used to mark elements as thumbnails within the `DaffMediaGalleryComponent`.\n *\n * ```html\n * <ng-template daffThumbnail></ng-template>\n * ```\n */\n@Directive({\n selector: '[daffThumbnail]',\n})\nexport class DaffThumbnailDirective implements OnInit {\n\n private _increment = uniqueThumbnailId;\n\n /**\n * @docs-private\n *\n * The autogenerated unique id for a thumbnail.\n */\n get id(): string {\n return this.gallery.id + '-thumbnail-' + this._increment;\n }\n\n /**\n * @docs-private\n *\n * The unique id of the selected thumbnail.\n */\n get selectedThumbnailId(): string {\n return this.id + '-selected';\n }\n\n /**\n * The file path to a thumbnail, presumably an image.\n */\n @Input() thumbnailSrc = undefined;\n\n /**\n * Provides an accessible label for a thumbnail.\n */\n @Input() label: string = undefined;\n\n /** Indicates whether the thumbnail represents a video. */\n @Input() isVideo = false;\n\n constructor(\n /**\n * @docs-private\n */\n @Inject(DAFF_MEDIA_GALLERY_TOKEN) public gallery: DaffMediaGalleryRegistration,\n /**\n * @docs-private\n */\n public templateRef: TemplateRef<unknown>,\n ) {\n uniqueThumbnailId++;\n }\n\n /**\n * @docs-private\n */\n ngOnInit() {\n if(!this.label && isDevMode()) {\n console.warn('The thumbnail ' + this.id + ' is missing a label.');\n }\n }\n}\n","/* eslint-disable quote-props */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n QueryList,\n ViewChildren,\n ElementRef,\n Output,\n EventEmitter,\n contentChildren,\n signal,\n computed,\n Signal,\n} from '@angular/core';\n\nimport {\n DaffArticleEncapsulatedDirective,\n DaffSelectableDirective,\n DaffSkeletonableDirective,\n} from '@daffodil/design';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\nimport { DaffThumbnailDirective } from '../thumbnail/thumbnail.directive';\n\nlet uniqueGalleryId = 0;\n\n/**\n * The `DaffMediaGalleryComonent` is used to display a group of thumbnails in a gallery format.\n *\n * ```html\n * <daff-media-gallery>\n * <ng-template daffThumbnail thumbnailSrc=\"/thumbnail-path.jpg\" label=\"Your description\">\n * <daff-image src=\"/image-path.jpg\" alt=\"Your description\" width=\"100\" height=\"100\"></daff-image>\n * </ng-template>\n * </daff-media-gallery>\n * ```\n */\n@Component({\n selector: 'daff-media-gallery',\n templateUrl: './media-gallery.component.html',\n styleUrls: ['./media-gallery.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n\n { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },\n ],\n hostDirectives: [\n { directive: DaffArticleEncapsulatedDirective },\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n host: {\n 'class': 'daff-media-gallery',\n '[attr.id]': 'id',\n },\n imports: [\n DaffThumbnailDirective,\n NgTemplateOutlet,\n DaffSelectableDirective,\n ],\n})\nexport class DaffMediaGalleryComponent implements DaffMediaGalleryRegistration {\n /**\n * The internal ID of the gallery.\n */\n private _id = 'media-gallery-' + uniqueGalleryId;\n\n /**\n * Custom ID for the media gallery that overrides the auto-generated one. When using this input, it is your responsibility to ensure that the ID is unique.\n */\n @Input()\n get id() {\n return this._id;\n }\n set id(val: string | undefined | null) {\n if(!val){\n return;\n }\n this._id = val;\n };\n\n /**\n * An event indicating that the selected media gallery element has changed.\n */\n @Output() elementChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * @docs-private\n */\n _thumbnails = contentChildren(DaffThumbnailDirective);\n\n /**\n * @docs-private\n */\n @ViewChildren('thumbnailButtons', { read: ElementRef }) private _thumbnailButtons: QueryList<ElementRef<HTMLElement>>;\n\n /**\n * @docs-private\n */\n constructor(private skeletonDirective: DaffSkeletonableDirective) {\n uniqueGalleryId++;\n }\n\n /**\n * @docs-private\n *\n * Whether or not the component its currently displaying its skeleton state.\n */\n get skeleton() {\n return this.skeletonDirective.skeleton;\n }\n\n /**\n * @docs-private\n */\n _selectedThumbnail: Signal<DaffThumbnailDirective> = computed(() => {\n const idx = this._selectedIndex();\n if(!idx) {\n return this._thumbnails().at(0);\n }\n return this._thumbnails().at(idx);\n });\n\n private _selectedIndex = signal<number | null>(null);\n\n private focusSelected() {\n this._thumbnailButtons.get(this._selectedIndex())?.nativeElement.focus();\n }\n\n /**\n * Select a specific entry in the media gallery by its index.\n *\n * @param index The index to set, starting at 0.\n */\n selectIndex(index: number) {\n this._selectedIndex.set(index);\n this.elementChange.emit(index);\n }\n\n /**\n * Navigate to the next element in the list of thumbnails.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n next(focus: boolean = true) {\n this._selectedIndex.update((curr) => ((curr ?? 0) + 1 + this._thumbnails().length) % this._thumbnails().length);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Navigate to the previous element in the list of thumbnails.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n previous(focus: boolean = true) {\n this._selectedIndex.update((curr) => ((curr ?? 0) - 1 + this._thumbnails().length) % this._thumbnails().length);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Select the first element.\n *\n * @param focus Whether to move focus to the newly selected item.\n */\n selectFirst(focus: boolean = true) {\n this._selectedIndex.set(0);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n\n /**\n * Select the last element of the gallery.\n *\n * @param Whether to move focus to the newly selected item.\n */\n selectLast(focus: boolean = true) {\n this._selectedIndex.set(this._thumbnails().length - 1);\n this.elementChange.emit(this._selectedIndex());\n\n if(focus) {\n this.focusSelected();\n }\n }\n}\n","<ng-content></ng-content>\n\n<div class=\"daff-media-gallery__thumbnails\" #thumbnailsEl role=\"tablist\">\n\t@if(skeleton) {\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t\t<div class=\"daff-thumbnail\"></div>\n\t}\n\t@else {\n\t\t@for (thumbnail of _thumbnails(); track thumbnail; let index = $index) {\n\t\t\t<button \n\t\t\t\t#thumbnailButtons\n\t\t\t\tclass=\"daff-thumbnail\" \n\t\t\t\trole=\"tab\"\n\t\t\t\tdaffSelected\n\t\t\t\t[selected]=\"thumbnail === _selectedThumbnail()\"\n\t\t\t\tattr.aria-label=\"{{ thumbnail.label ?? 'Gallery Element ' + (index + 1) }}\"\n\t\t\t\t[attr.aria-selected]=\"thumbnail === _selectedThumbnail() ? 'true' : 'false'\"\n\t\t\t\t[attr.aria-controls]=\"thumbnail.selectedThumbnailId\"\n\t\t\t\t[attr.tabindex]=\"thumbnail === _selectedThumbnail() ? 0 : -1\"\n\t\t\t\t(click)=\"selectIndex(index)\"\n\t\t\t\t[attr.id]=\"thumbnail.id\" \n\t\t\t\t(keydown.arrowright)=\"next()\"\n\t\t\t\t(keydown.arrowleft)=\"previous()\">\n\t\t\t\t@if (thumbnail.thumbnailSrc) {\n\t\t\t\t\t<img [src]=\"thumbnail.thumbnailSrc\" aria-hidden=\"true\"/>\n\t\t\t\t}\n\t\t\t\t@if (thumbnail.isVideo) {\n\t\t\t\t\t<div class=\"daff-media-gallery__video-button\">\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</button>\n\t\t}\n\t}\n</div>\n@let selectedEl = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"selectedEl?.selectedThumbnailId\">\n\t\t@if(selectedEl) {\n\t\t\t<ng-container *ngTemplateOutlet=\"selectedEl.templateRef\"></ng-container>\n\t\t}\n\t\t@else {\n\t\t\t<div class=\"daff-media-gallery__skeleton-placeholder\"></div>\n\t\t}\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffThumbnailDirective } from './thumbnail/thumbnail.directive';\n\n/**\n * @deprecated in favor of {@link DAFF_MEDIA_GALLERY_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n ],\n exports: [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n ],\n})\nexport class DaffMediaGalleryModule {}\n","import { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffThumbnailDirective } from './thumbnail/thumbnail.directive';\n\n/**\n * @docs-private\n */\nexport const DAFF_MEDIA_GALLERY_COMPONENTS = <const> [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -104,10 +104,10 @@ class DaffMenuService {
104
104
  this._activator = activator;
105
105
  this.$_open.next(true);
106
106
  }
107
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
108
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuService }); }
107
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
108
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuService }); }
109
109
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuService, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuService, decorators: [{
111
111
  type: Injectable
112
112
  }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }] });
113
113
 
@@ -140,19 +140,19 @@ class DaffMenuActivatorDirective {
140
140
  this.cdRef = cdRef;
141
141
  this._destroyed$ = new Subject();
142
142
  this._defaultMenuId = daffNextMenuId();
143
- this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
143
+ this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
144
144
  /**
145
145
  * An optional ID for the activator.
146
146
  * When set, the menu's ID is derived as `${id}-menu`.
147
147
  */
148
- this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
148
+ this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
149
149
  /**
150
150
  * The resolved menu ID.
151
151
  */
152
152
  this.menuId = computed(() => {
153
153
  const id = this.id();
154
154
  return id ? `${id}-menu` : this._defaultMenuId;
155
- }, ...(ngDevMode ? [{ debugName: "menuId" }] : []));
155
+ }, ...(ngDevMode ? [{ debugName: "menuId" }] : /* istanbul ignore next */ []));
156
156
  this.service.open$.pipe(takeUntil(this._destroyed$)).subscribe((val) => {
157
157
  this._open = val;
158
158
  this.isOpen.set(this._open);
@@ -179,10 +179,10 @@ class DaffMenuActivatorDirective {
179
179
  event.preventDefault();
180
180
  this.service.open(this.viewContainerRef, this.daffMenuActivator, { menuId: this.menuId() });
181
181
  }
182
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuActivatorDirective, deps: [{ token: DaffMenuService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
183
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.18", type: DaffMenuActivatorDirective, isStandalone: true, selector: "[daffMenuActivator]", inputs: { daffMenuActivator: { classPropertyName: "daffMenuActivator", publicName: "daffMenuActivator", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-haspopup": "menu" }, listeners: { "click": "onClick($event)" }, properties: { "attr.aria-expanded": "ariaExpanded", "attr.aria-controls": "_open ? menuId() : null" } }, exportAs: ["daffMenuActivator"], ngImport: i0 }); }
182
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuActivatorDirective, deps: [{ token: DaffMenuService }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
183
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: DaffMenuActivatorDirective, isStandalone: true, selector: "[daffMenuActivator]", inputs: { daffMenuActivator: { classPropertyName: "daffMenuActivator", publicName: "daffMenuActivator", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-haspopup": "menu" }, listeners: { "click": "onClick($event)" }, properties: { "attr.aria-expanded": "ariaExpanded", "attr.aria-controls": "_open ? menuId() : null" } }, exportAs: ["daffMenuActivator"], ngImport: i0 }); }
184
184
  }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuActivatorDirective, decorators: [{
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuActivatorDirective, decorators: [{
186
186
  type: Directive,
187
187
  args: [{
188
188
  selector: '[daffMenuActivator]',
@@ -233,10 +233,10 @@ class DaffMenuItemComponent {
233
233
  focus() {
234
234
  this._elementRef.nativeElement.focus();
235
235
  }
236
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuItemComponent, deps: [{ token: i0.ElementRef }, { token: DaffMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
237
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: DaffMenuItemComponent, isStandalone: true, selector: "a[daff-menu-item],button[daff-menu-item]", host: { attributes: { "role": "menuitem" }, listeners: { "click": "onClick()" }, classAttribute: "daff-menu-item" }, providers: [provideDaffMenuItemToken(DaffMenuItemComponent)], queries: [{ propertyName: "_prefix", first: true, predicate: DaffPrefixDirective, descendants: true }], ngImport: i0, template: "@if (_prefix) {\n <ng-content select=\"[daffPrefix]\"></ng-content>\n}\n<ng-content></ng-content>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
236
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuItemComponent, deps: [{ token: i0.ElementRef }, { token: DaffMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
237
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DaffMenuItemComponent, isStandalone: true, selector: "a[daff-menu-item],button[daff-menu-item]", host: { attributes: { "role": "menuitem" }, listeners: { "click": "onClick()" }, classAttribute: "daff-menu-item" }, providers: [provideDaffMenuItemToken(DaffMenuItemComponent)], queries: [{ propertyName: "_prefix", first: true, predicate: DaffPrefixDirective, descendants: true }], ngImport: i0, template: "@if (_prefix) {\n <ng-content select=\"[daffPrefix]\"></ng-content>\n}\n<ng-content></ng-content>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
238
238
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuItemComponent, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuItemComponent, decorators: [{
240
240
  type: Component,
241
241
  args: [{ selector: 'a[daff-menu-item]' + ',' +
242
242
  'button[daff-menu-item]', host: {
@@ -285,7 +285,7 @@ class DaffMenuComponent {
285
285
  /**
286
286
  * @docs-private
287
287
  *
288
- * Handle keyboard navigation
288
+ * Handles keyboard navigation.
289
289
  */
290
290
  handleKeydown(event) {
291
291
  switch (event.key) {
@@ -321,10 +321,10 @@ class DaffMenuComponent {
321
321
  this._keyManager.setActiveItem(0);
322
322
  }
323
323
  }
324
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuComponent, deps: [{ token: i1$1.ConfigurableFocusTrapFactory }, { token: i0.ElementRef }, { token: DaffMenuService }, { token: DAFF_MENU_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
325
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: DaffMenuComponent, isStandalone: true, selector: "daff-menu", host: { attributes: { "tabindex": "0", "role": "menu" }, listeners: { "keydown": "handleKeydown($event)" }, properties: { "id": "config.menuId" }, classAttribute: "daff-menu" }, queries: [{ propertyName: "_items", predicate: DAFF_MENU_ITEM_TOKEN }], ngImport: i0, template: "<ng-content></ng-content>", styles: [".daff-menu{display:block;min-width:7rem;max-width:20rem;border-radius:.25rem;padding:.5rem}.daff-menu-item{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;gap:.5rem;font-size:1rem;line-height:1.25rem;border:none;border-radius:.25rem;margin:0;padding:.75rem 1rem;text-decoration:none;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
324
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuComponent, deps: [{ token: i1$1.ConfigurableFocusTrapFactory }, { token: i0.ElementRef }, { token: DaffMenuService }, { token: DAFF_MENU_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
325
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: DaffMenuComponent, isStandalone: true, selector: "daff-menu", host: { attributes: { "tabindex": "0", "role": "menu" }, listeners: { "keydown": "handleKeydown($event)" }, properties: { "id": "config.menuId" }, classAttribute: "daff-menu" }, queries: [{ propertyName: "_items", predicate: DAFF_MENU_ITEM_TOKEN }], ngImport: i0, template: "<ng-content></ng-content>", styles: [".daff-menu{display:block;min-width:7rem;max-width:20rem;border-radius:.25rem;padding:.5rem}.daff-menu-item{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;gap:.5rem;font-size:1rem;line-height:1.25rem;border:none;border-radius:.25rem;margin:0;padding:.75rem 1rem;text-decoration:none;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
326
326
  }
327
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuComponent, decorators: [{
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuComponent, decorators: [{
328
328
  type: Component,
329
329
  args: [{ selector: 'daff-menu', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
330
330
  class: 'daff-menu',
@@ -347,8 +347,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
347
347
  * @deprecated in favor of {@link DAFF_MENU_COMPONENTS} Deprecated in version 0.92.0. Will be removed in version 0.95.0.
348
348
  */
349
349
  class DaffMenuModule {
350
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
351
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuModule, imports: [CommonModule,
350
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
351
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuModule, imports: [CommonModule,
352
352
  OverlayModule,
353
353
  DaffMenuActivatorDirective,
354
354
  DaffMenuComponent,
@@ -357,12 +357,12 @@ class DaffMenuModule {
357
357
  DaffMenuComponent,
358
358
  DaffMenuItemComponent,
359
359
  DaffPrefixDirective] }); }
360
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuModule, providers: [
360
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuModule, providers: [
361
361
  DaffMenuService,
362
362
  ], imports: [CommonModule,
363
363
  OverlayModule] }); }
364
364
  }
365
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DaffMenuModule, decorators: [{
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DaffMenuModule, decorators: [{
366
366
  type: NgModule,
367
367
  args: [{
368
368
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-design-menu.mjs","sources":["../../../libs/design/menu/src/config/menu-config.ts","../../../libs/design/menu/src/helpers/create-overlay.ts","../../../libs/design/menu/src/services/menu.service.ts","../../../libs/design/menu/src/config/menu-id.ts","../../../libs/design/menu/src/menu-activator/menu-activator.component.ts","../../../libs/design/menu/src/menu-item/menu-item.token.ts","../../../libs/design/menu/src/menu-item/menu-item.component.ts","../../../libs/design/menu/src/menu-item/menu-item.component.html","../../../libs/design/menu/src/menu/menu.component.ts","../../../libs/design/menu/src/menu/menu.component.html","../../../libs/design/menu/src/menu.module.ts","../../../libs/design/menu/src/menu.ts","../../../libs/design/menu/src/daffodil-design-menu.ts"],"sourcesContent":["import { createConfigInjectionToken } from '@daffodil/core';\n\n/**\n * Configuration for a menu instance.\n */\nexport interface DaffMenuConfig {\n /**\n * A unique identifier for the menu instance.\n */\n menuId?: string;\n}\n\nconst daffMenuConfigDefault: DaffMenuConfig = {\n menuId: '',\n};\n\nexport const {\n /**\n * An injection token for the menu configuration.\n */\n token: DAFF_MENU_CONFIG,\n /**\n * Provider function for {@link DAFF_MENU_CONFIG}.\n */\n provider: provideDaffMenuConfig,\n} = createConfigInjectionToken<DaffMenuConfig>(daffMenuConfigDefault, 'DAFF_MENU_CONFIG');\n","import {\n Overlay,\n OverlayConfig,\n} from '@angular/cdk/overlay';\nimport { ElementRef } from '@angular/core';\n\nexport function daffMenuCreateOverlay(overlay: Overlay, element: ElementRef, config: OverlayConfig = {}) {\n return overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: overlay.scrollStrategies.block(),\n disposeOnNavigation: true,\n positionStrategy: overlay\n .position()\n .flexibleConnectedTo(element)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 0,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n ...config,\n });\n};\n","import {\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport {\n ComponentPortal,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n Injectable,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n map,\n Observable,\n} from 'rxjs';\n\nimport { DaffLazyComponent } from '@daffodil/design';\n\nimport {\n DAFF_MENU_CONFIG,\n DaffMenuConfig,\n} from '../config/menu-config';\nimport { daffMenuCreateOverlay } from '../helpers/create-overlay';\n\nexport type DaffMenuSlot = TemplateRef<unknown> | DaffLazyComponent | Type<unknown>;\n\n@Injectable()\nexport class DaffMenuService {\n protected _overlay: OverlayRef | null;\n private _activator: ViewContainerRef;\n\n private $_open: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public open$: Observable<boolean> = this.$_open.asObservable();\n\n constructor(\n protected overlay: Overlay,\n private injector: Injector,\n ) {}\n\n /**\n * @docs-private\n */\n protected async _createOverlay(activatorElement: ViewContainerRef, component: DaffMenuSlot, config?: DaffMenuConfig) {\n if (!this._overlay) {\n this._overlay = daffMenuCreateOverlay(this.overlay, activatorElement.element);\n if(typeof component === 'object' && (<DaffLazyComponent>component)?.import) {\n component = await (<DaffLazyComponent>component).import();\n }\n\n const injector = Injector.create({\n providers: [{ provide: DAFF_MENU_CONFIG, useValue: config }],\n parent: this.injector,\n });\n\n if(component instanceof Type) {\n this._overlay.attach(new ComponentPortal(<Type<unknown>>component, null, injector));\n } else if (component instanceof TemplateRef) {\n this._overlay.attach(new TemplatePortal(component, activatorElement, null, injector));\n }\n\n this._overlay.backdropClick().pipe(\n map(() => this.close()),\n ).subscribe();\n }\n }\n\n /**\n * @docs-private\n */\n protected _destroyOverlay() {\n if (this._overlay) {\n this._overlay.detach();\n this._overlay.dispose();\n this._overlay = null;\n }\n }\n\n close() {\n this._destroyOverlay();\n this.$_open.next(false);\n this._activator.element.nativeElement.focus();\n }\n\n open(activator: ViewContainerRef, component: DaffMenuSlot, config?: DaffMenuConfig) {\n if (this._overlay) {\n this._destroyOverlay();\n }\n this._createOverlay(activator, component, config);\n this._activator = activator;\n this.$_open.next(true);\n }\n}\n","let daffMenuUniqueId = 0;\n\n/**\n * Generates a unique menu ID for each menu instance.\n */\nexport const daffNextMenuId = (): string =>\n `daff-menu-${daffMenuUniqueId++}`;\n","import {\n ChangeDetectorRef,\n computed,\n Directive,\n input,\n Input,\n OnDestroy,\n signal,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n Subject,\n takeUntil,\n} from 'rxjs';\n\nimport { daffNextMenuId } from '../config/menu-id';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * Directive that triggers the menu to open/close. Applied to the button that activates the menu. The selector doubles as an input for the menu content to display.\n *\n * @example\n * ```html\n * <button [daffMenuActivator]=\"menu\">\n * Open Menu\n * </button>\n * ```\n */\n@Directive({\n selector: '[daffMenuActivator]',\n host: {\n '(click)': 'onClick($event)',\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'ariaExpanded',\n '[attr.aria-controls]': '_open ? menuId() : null',\n },\n exportAs: 'daffMenuActivator',\n})\nexport class DaffMenuActivatorDirective implements OnDestroy {\n\n private _destroyed$ = new Subject<boolean>();\n private _open: boolean;\n private _defaultMenuId = daffNextMenuId();\n readonly isOpen = signal(false);\n\n /**\n * The menu content to display when activated.\n */\n @Input() daffMenuActivator: Type<unknown> | TemplateRef<unknown>;\n\n /**\n * An optional ID for the activator.\n * When set, the menu's ID is derived as `${id}-menu`.\n */\n id = input<string>();\n\n /**\n * The resolved menu ID.\n */\n private menuId = computed(() => {\n const id = this.id();\n return id ? `${id}-menu` : this._defaultMenuId;\n });\n\n /**\n * @docs-private\n */\n get ariaExpanded() {\n return this._open ? 'true' : 'false';\n }\n\n constructor(\n private service: DaffMenuService,\n private viewContainerRef: ViewContainerRef,\n private cdRef: ChangeDetectorRef,\n ) {\n this.service.open$.pipe(\n takeUntil(this._destroyed$),\n ).subscribe((val: boolean) => {\n this._open = val;\n this.isOpen.set(this._open);\n this.cdRef.markForCheck();\n });\n }\n\n /**\n * @docs-private\n */\n ngOnDestroy(): void {\n this._destroyed$.next(true);\n this._destroyed$.complete();\n }\n\n /**\n * @docs-private\n */\n focus() {\n this.viewContainerRef.element.nativeElement.focus();\n }\n\n /**\n * @docs-private\n */\n onClick(event: MouseEvent) {\n event.preventDefault();\n this.service.open(this.viewContainerRef, this.daffMenuActivator, { menuId: this.menuId() });\n }\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\n\nimport { createSingletonInjectionToken } from '@daffodil/core';\n\n/**\n * Injection token/provider pair used to identify menu items.\n *\n * `DaffMenuComponent` uses `@ContentChildren(DAFF_MENU_ITEM_TOKEN)` to discover\n * its menu items. Use `provideDaffMenuItemToken` in component providers to register\n * custom directives and components as menu items alongside native `daff-menu-item` elements.\n */\nexport const {\n token: DAFF_MENU_ITEM_TOKEN,\n provider: provideDaffMenuItemToken,\n} = createSingletonInjectionToken<FocusableOption>('DAFF_MENU_ITEM_TOKEN');\n","/* eslint-disable quote-props */\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport {\n Component,\n ChangeDetectionStrategy,\n ContentChild,\n ElementRef,\n} from '@angular/core';\n\nimport { DaffPrefixDirective } from '@daffodil/design';\n\nimport { provideDaffMenuItemToken } from './menu-item.token';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * Individual clickable items within the menu. Applied to `<button>` or `<a>` elements.\n *\n * @example\n * ```\n * <a daff-menu-item href=\"/\">Settings</a>\n * <button daff-menu-item href=\"/\">Settings</button>\n * ```\n */\n@Component({\n selector:\n 'a[daff-menu-item]' + ',' +\n 'button[daff-menu-item]',\n templateUrl: './menu-item.component.html',\n host: {\n 'class': 'daff-menu-item',\n 'role': 'menuitem',\n '(click)': 'onClick()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideDaffMenuItemToken(DaffMenuItemComponent)],\n})\n\nexport class DaffMenuItemComponent implements FocusableOption {\n /**\n * @docs-private\n */\n @ContentChild(DaffPrefixDirective) _prefix: DaffPrefixDirective;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _menuService: DaffMenuService,\n ) {}\n\n /**\n * @docs-private\n */\n onClick() {\n this._menuService.close();\n }\n\n /**\n * Focus the menu item.\n */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\n","@if (_prefix) {\n <ng-content select=\"[daffPrefix]\"></ng-content>\n}\n<ng-content></ng-content>","/* eslint-disable quote-props */\nimport {\n ConfigurableFocusTrapFactory,\n ConfigurableFocusTrap,\n FocusKeyManager,\n FocusableOption,\n} from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n QueryList,\n ContentChildren,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {\n DAFF_MENU_CONFIG,\n DaffMenuConfig,\n} from '../config/menu-config';\nimport { DaffMenuItemComponent } from '../menu-item/menu-item.component';\nimport { DAFF_MENU_ITEM_TOKEN } from '../menu-item/menu-item.token';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * The floating panel that contains menu items.\n *\n * @example\n * ```html\n * <daff-menu>\n * <button daff-menu-item>\n * <fa-icon [icon]=\"faEdit\" daffPrefix></fa-icon>\n * Edit\n * </button>\n * <button daff-menu-item>\n * <fa-icon [icon]=\"faTrash\" daffPrefix></fa-icon>\n * Delete\n * </button>\n * <a href=\"/settings\" daff-menu-item>\n * <fa-icon [icon]=\"faCog\" daffPrefix></fa-icon>\n * Settings\n * </a>\n * </daff-menu>\n * ```\n */\n@Component({\n selector: 'daff-menu',\n templateUrl: './menu.component.html',\n styleUrl: './menu.component.scss',\n encapsulation: ViewEncapsulation.None, // Required to allow breadcrumb items to take on `.daff-menu-item` styles\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'daff-menu',\n 'tabindex': '0',\n 'role': 'menu',\n '[id]': 'config.menuId',\n '(keydown)': 'handleKeydown($event)',\n },\n imports: [\n DaffMenuItemComponent,\n ],\n})\nexport class DaffMenuComponent implements AfterContentInit, AfterViewInit {\n private _focusTrap: ConfigurableFocusTrap;\n private _keyManager: FocusKeyManager<unknown>; // Matches any component or directive that provides `DAFF_MENU_ITEM_TOKEN`, not just `DaffMenuItemComponent`.\n\n /**\n * @docs-private\n *\n * Content children that provide `DAFF_MENU_ITEM_TOKEN` are treated as menu items.\n * This includes both `daff-menu-item` components and any custom directives that also provide the token.\n */\n @ContentChildren(DAFF_MENU_ITEM_TOKEN) private _items: QueryList<FocusableOption>;\n\n constructor(\n private _focusTrapFactory: ConfigurableFocusTrapFactory,\n private _elementRef: ElementRef<HTMLElement>,\n private menuService: DaffMenuService,\n\n /**\n * @docs-private\n */\n @Inject(DAFF_MENU_CONFIG) public readonly config: DaffMenuConfig,\n ) {}\n\n /**\n * @docs-private\n *\n * Handle keyboard navigation\n */\n handleKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.menuService.close();\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'Home':\n case 'End':\n event.preventDefault();\n this._keyManager.onKeydown(event);\n break;\n }\n }\n\n /**\n * @docs-private\n */\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(\n this._elementRef.nativeElement,\n );\n\n this._keyManager = new FocusKeyManager(this._items)\n .withWrap()\n .withHomeAndEnd();\n }\n\n /**\n * @docs-private\n */\n ngAfterViewInit() {\n // Set focus to the first menu item when menu opens\n if (this._items.length > 0) {\n this._keyManager.setFirstItemActive();\n this._keyManager.setActiveItem(0);\n }\n }\n}\n","<ng-content></ng-content>","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffPrefixDirective } from '@daffodil/design';\n\nimport { DaffMenuComponent } from './menu/menu.component';\nimport { DaffMenuActivatorDirective } from './menu-activator/menu-activator.component';\nimport { DaffMenuItemComponent } from './menu-item/menu-item.component';\nimport { DaffMenuService } from './services/menu.service';\n\n/**\n * @deprecated in favor of {@link DAFF_MENU_COMPONENTS} Deprecated in version 0.92.0. Will be removed in version 0.95.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n DaffMenuActivatorDirective,\n DaffMenuComponent,\n DaffMenuItemComponent,\n DaffPrefixDirective,\n ],\n exports: [\n DaffMenuActivatorDirective,\n DaffMenuComponent,\n DaffMenuItemComponent,\n DaffPrefixDirective,\n ],\n providers: [\n DaffMenuService,\n ],\n})\n\nexport class DaffMenuModule {}\n","import { DaffMenuComponent } from './menu/menu.component';\nimport { DaffMenuActivatorDirective } from './menu-activator/menu-activator.component';\nimport { DaffMenuItemComponent } from './menu-item/menu-item.component';\n\n/**\n * @docs-private\n */\nexport const DAFF_MENU_COMPONENTS = <const> [\n DaffMenuComponent,\n DaffMenuActivatorDirective,\n DaffMenuItemComponent,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DaffMenuService"],"mappings":"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"}
1
+ {"version":3,"file":"daffodil-design-menu.mjs","sources":["../../../libs/design/menu/src/config/menu-config.ts","../../../libs/design/menu/src/helpers/create-overlay.ts","../../../libs/design/menu/src/services/menu.service.ts","../../../libs/design/menu/src/config/menu-id.ts","../../../libs/design/menu/src/menu-activator/menu-activator.component.ts","../../../libs/design/menu/src/menu-item/menu-item.token.ts","../../../libs/design/menu/src/menu-item/menu-item.component.ts","../../../libs/design/menu/src/menu-item/menu-item.component.html","../../../libs/design/menu/src/menu/menu.component.ts","../../../libs/design/menu/src/menu/menu.component.html","../../../libs/design/menu/src/menu.module.ts","../../../libs/design/menu/src/menu.ts","../../../libs/design/menu/src/daffodil-design-menu.ts"],"sourcesContent":["import { createConfigInjectionToken } from '@daffodil/core';\n\n/**\n * Configuration for a menu instance.\n */\nexport interface DaffMenuConfig {\n /**\n * A unique identifier for the menu instance.\n */\n menuId?: string;\n}\n\nconst daffMenuConfigDefault: DaffMenuConfig = {\n menuId: '',\n};\n\nexport const {\n /**\n * An injection token for the menu configuration.\n */\n token: DAFF_MENU_CONFIG,\n /**\n * Provider function for {@link DAFF_MENU_CONFIG}.\n */\n provider: provideDaffMenuConfig,\n} = createConfigInjectionToken<DaffMenuConfig>(daffMenuConfigDefault, 'DAFF_MENU_CONFIG');\n","import {\n Overlay,\n OverlayConfig,\n} from '@angular/cdk/overlay';\nimport { ElementRef } from '@angular/core';\n\nexport function daffMenuCreateOverlay(overlay: Overlay, element: ElementRef, config: OverlayConfig = {}) {\n return overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: overlay.scrollStrategies.block(),\n disposeOnNavigation: true,\n positionStrategy: overlay\n .position()\n .flexibleConnectedTo(element)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 0,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n ...config,\n });\n};\n","import {\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport {\n ComponentPortal,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n Injectable,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n map,\n Observable,\n} from 'rxjs';\n\nimport { DaffLazyComponent } from '@daffodil/design';\n\nimport {\n DAFF_MENU_CONFIG,\n DaffMenuConfig,\n} from '../config/menu-config';\nimport { daffMenuCreateOverlay } from '../helpers/create-overlay';\n\nexport type DaffMenuSlot = TemplateRef<unknown> | DaffLazyComponent | Type<unknown>;\n\n@Injectable()\nexport class DaffMenuService {\n protected _overlay: OverlayRef | null;\n private _activator: ViewContainerRef;\n\n private $_open: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public open$: Observable<boolean> = this.$_open.asObservable();\n\n constructor(\n protected overlay: Overlay,\n private injector: Injector,\n ) {}\n\n /**\n * @docs-private\n */\n protected async _createOverlay(activatorElement: ViewContainerRef, component: DaffMenuSlot, config?: DaffMenuConfig) {\n if (!this._overlay) {\n this._overlay = daffMenuCreateOverlay(this.overlay, activatorElement.element);\n if(typeof component === 'object' && (<DaffLazyComponent>component)?.import) {\n component = await (<DaffLazyComponent>component).import();\n }\n\n const injector = Injector.create({\n providers: [{ provide: DAFF_MENU_CONFIG, useValue: config }],\n parent: this.injector,\n });\n\n if(component instanceof Type) {\n this._overlay.attach(new ComponentPortal(<Type<unknown>>component, null, injector));\n } else if (component instanceof TemplateRef) {\n this._overlay.attach(new TemplatePortal(component, activatorElement, null, injector));\n }\n\n this._overlay.backdropClick().pipe(\n map(() => this.close()),\n ).subscribe();\n }\n }\n\n /**\n * @docs-private\n */\n protected _destroyOverlay() {\n if (this._overlay) {\n this._overlay.detach();\n this._overlay.dispose();\n this._overlay = null;\n }\n }\n\n close() {\n this._destroyOverlay();\n this.$_open.next(false);\n this._activator.element.nativeElement.focus();\n }\n\n open(activator: ViewContainerRef, component: DaffMenuSlot, config?: DaffMenuConfig) {\n if (this._overlay) {\n this._destroyOverlay();\n }\n this._createOverlay(activator, component, config);\n this._activator = activator;\n this.$_open.next(true);\n }\n}\n","let daffMenuUniqueId = 0;\n\n/**\n * Generates a unique menu ID for each menu instance.\n */\nexport const daffNextMenuId = (): string =>\n `daff-menu-${daffMenuUniqueId++}`;\n","import {\n ChangeDetectorRef,\n computed,\n Directive,\n input,\n Input,\n OnDestroy,\n signal,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n Subject,\n takeUntil,\n} from 'rxjs';\n\nimport { daffNextMenuId } from '../config/menu-id';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * Directive that triggers the menu to open/close. Applied to the button that activates the menu. The selector doubles as an input for the menu content to display.\n *\n * @example\n * ```html\n * <button [daffMenuActivator]=\"menu\">\n * Open Menu\n * </button>\n * ```\n */\n@Directive({\n selector: '[daffMenuActivator]',\n host: {\n '(click)': 'onClick($event)',\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'ariaExpanded',\n '[attr.aria-controls]': '_open ? menuId() : null',\n },\n exportAs: 'daffMenuActivator',\n})\nexport class DaffMenuActivatorDirective implements OnDestroy {\n\n private _destroyed$ = new Subject<boolean>();\n private _defaultMenuId = daffNextMenuId();\n protected _open: boolean;\n readonly isOpen = signal(false);\n\n /**\n * The menu content to display when activated.\n */\n @Input() daffMenuActivator: Type<unknown> | TemplateRef<unknown>;\n\n /**\n * An optional ID for the activator.\n * When set, the menu's ID is derived as `${id}-menu`.\n */\n id = input<string>();\n\n /**\n * The resolved menu ID.\n */\n protected menuId = computed(() => {\n const id = this.id();\n return id ? `${id}-menu` : this._defaultMenuId;\n });\n\n /**\n * @docs-private\n */\n get ariaExpanded() {\n return this._open ? 'true' : 'false';\n }\n\n constructor(\n private service: DaffMenuService,\n private viewContainerRef: ViewContainerRef,\n private cdRef: ChangeDetectorRef,\n ) {\n this.service.open$.pipe(\n takeUntil(this._destroyed$),\n ).subscribe((val: boolean) => {\n this._open = val;\n this.isOpen.set(this._open);\n this.cdRef.markForCheck();\n });\n }\n\n /**\n * @docs-private\n */\n ngOnDestroy(): void {\n this._destroyed$.next(true);\n this._destroyed$.complete();\n }\n\n /**\n * @docs-private\n */\n focus() {\n this.viewContainerRef.element.nativeElement.focus();\n }\n\n /**\n * @docs-private\n */\n onClick(event: MouseEvent) {\n event.preventDefault();\n this.service.open(this.viewContainerRef, this.daffMenuActivator, { menuId: this.menuId() });\n }\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\n\nimport { createSingletonInjectionToken } from '@daffodil/core';\n\n/**\n * Injection token/provider pair used to identify menu items.\n *\n * `DaffMenuComponent` uses `@ContentChildren(DAFF_MENU_ITEM_TOKEN)` to discover\n * its menu items. Use `provideDaffMenuItemToken` in component providers to register\n * custom directives and components as menu items alongside native `daff-menu-item` elements.\n */\nexport const {\n token: DAFF_MENU_ITEM_TOKEN,\n provider: provideDaffMenuItemToken,\n} = createSingletonInjectionToken<FocusableOption>('DAFF_MENU_ITEM_TOKEN');\n","/* eslint-disable quote-props */\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport {\n Component,\n ChangeDetectionStrategy,\n ContentChild,\n ElementRef,\n} from '@angular/core';\n\nimport { DaffPrefixDirective } from '@daffodil/design';\n\nimport { provideDaffMenuItemToken } from './menu-item.token';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * Individual clickable items within the menu. Applied to `<button>` or `<a>` elements.\n *\n * @example\n * ```\n * <a daff-menu-item href=\"/\">Settings</a>\n * <button daff-menu-item href=\"/\">Settings</button>\n * ```\n */\n@Component({\n selector:\n 'a[daff-menu-item]' + ',' +\n 'button[daff-menu-item]',\n templateUrl: './menu-item.component.html',\n host: {\n 'class': 'daff-menu-item',\n 'role': 'menuitem',\n '(click)': 'onClick()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [provideDaffMenuItemToken(DaffMenuItemComponent)],\n})\n\nexport class DaffMenuItemComponent implements FocusableOption {\n /**\n * @docs-private\n */\n @ContentChild(DaffPrefixDirective) _prefix: DaffPrefixDirective;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _menuService: DaffMenuService,\n ) {}\n\n /**\n * @docs-private\n */\n onClick() {\n this._menuService.close();\n }\n\n /**\n * Focus the menu item.\n */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\n","@if (_prefix) {\n <ng-content select=\"[daffPrefix]\"></ng-content>\n}\n<ng-content></ng-content>","/* eslint-disable quote-props */\nimport {\n ConfigurableFocusTrapFactory,\n ConfigurableFocusTrap,\n FocusKeyManager,\n FocusableOption,\n} from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n QueryList,\n ContentChildren,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport {\n DAFF_MENU_CONFIG,\n DaffMenuConfig,\n} from '../config/menu-config';\nimport { DaffMenuItemComponent } from '../menu-item/menu-item.component';\nimport { DAFF_MENU_ITEM_TOKEN } from '../menu-item/menu-item.token';\nimport { DaffMenuService } from '../services/menu.service';\n\n/**\n * The floating panel that contains menu items.\n *\n * @example\n * ```html\n * <daff-menu>\n * <button daff-menu-item>\n * <fa-icon [icon]=\"faEdit\" daffPrefix></fa-icon>\n * Edit\n * </button>\n * <button daff-menu-item>\n * <fa-icon [icon]=\"faTrash\" daffPrefix></fa-icon>\n * Delete\n * </button>\n * <a href=\"/settings\" daff-menu-item>\n * <fa-icon [icon]=\"faCog\" daffPrefix></fa-icon>\n * Settings\n * </a>\n * </daff-menu>\n * ```\n */\n@Component({\n selector: 'daff-menu',\n templateUrl: './menu.component.html',\n styleUrl: './menu.component.scss',\n encapsulation: ViewEncapsulation.None, // Required to allow breadcrumb items to take on `.daff-menu-item` styles\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'daff-menu',\n 'tabindex': '0',\n 'role': 'menu',\n '[id]': 'config.menuId',\n '(keydown)': 'handleKeydown($event)',\n },\n imports: [\n DaffMenuItemComponent,\n ],\n})\nexport class DaffMenuComponent implements AfterContentInit, AfterViewInit {\n private _focusTrap: ConfigurableFocusTrap;\n private _keyManager: FocusKeyManager<unknown>;\n /**\n * @docs-private\n *\n * Content children that provide `DAFF_MENU_ITEM_TOKEN` are treated as menu items.\n * This includes both `daff-menu-item` components and any custom directives that also provide the token.\n */\n @ContentChildren(DAFF_MENU_ITEM_TOKEN) private _items: QueryList<FocusableOption>;\n\n constructor(\n private _focusTrapFactory: ConfigurableFocusTrapFactory,\n private _elementRef: ElementRef<HTMLElement>,\n private menuService: DaffMenuService,\n\n /**\n * @docs-private\n */\n @Inject(DAFF_MENU_CONFIG) public readonly config: DaffMenuConfig,\n ) {}\n\n /**\n * @docs-private\n *\n * Handles keyboard navigation.\n */\n handleKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.menuService.close();\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'Home':\n case 'End':\n event.preventDefault();\n this._keyManager.onKeydown(event);\n break;\n }\n }\n\n /**\n * @docs-private\n */\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(\n this._elementRef.nativeElement,\n );\n\n this._keyManager = new FocusKeyManager(this._items)\n .withWrap()\n .withHomeAndEnd();\n }\n\n /**\n * @docs-private\n */\n ngAfterViewInit() {\n // Set focus to the first menu item when menu opens\n if (this._items.length > 0) {\n this._keyManager.setFirstItemActive();\n this._keyManager.setActiveItem(0);\n }\n }\n}\n","<ng-content></ng-content>","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffPrefixDirective } from '@daffodil/design';\n\nimport { DaffMenuComponent } from './menu/menu.component';\nimport { DaffMenuActivatorDirective } from './menu-activator/menu-activator.component';\nimport { DaffMenuItemComponent } from './menu-item/menu-item.component';\nimport { DaffMenuService } from './services/menu.service';\n\n/**\n * @deprecated in favor of {@link DAFF_MENU_COMPONENTS} Deprecated in version 0.92.0. Will be removed in version 0.95.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n DaffMenuActivatorDirective,\n DaffMenuComponent,\n DaffMenuItemComponent,\n DaffPrefixDirective,\n ],\n exports: [\n DaffMenuActivatorDirective,\n DaffMenuComponent,\n DaffMenuItemComponent,\n DaffPrefixDirective,\n ],\n providers: [\n DaffMenuService,\n ],\n})\n\nexport class DaffMenuModule {}\n","import { DaffMenuComponent } from './menu/menu.component';\nimport { DaffMenuActivatorDirective } from './menu-activator/menu-activator.component';\nimport { DaffMenuItemComponent } from './menu-item/menu-item.component';\n\n/**\n * @docs-private\n */\nexport const DAFF_MENU_COMPONENTS = <const> [\n DaffMenuComponent,\n DaffMenuActivatorDirective,\n DaffMenuItemComponent,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DaffMenuService"],"mappings":"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"}