@daffodil/design 0.81.0 → 0.82.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 (243) hide show
  1. package/accordion/README.md +44 -29
  2. package/accordion/accordion/accordion/accordion.component.d.ts +3 -0
  3. package/accordion/accordion/accordion-item/accordion-item.component.d.ts +23 -12
  4. package/accordion/accordion/accordion-item-title/accordion-item-title.directive.d.ts +3 -0
  5. package/accordion/accordion.d.ts +5 -0
  6. package/accordion/examples/disabled-accordion/disabled-accordion.component.d.ts +5 -0
  7. package/accordion/examples/initially-expanded-accordion/initially-expanded-accordion.component.d.ts +5 -0
  8. package/accordion/examples/public_api.d.ts +2 -0
  9. package/article/README.md +4 -3
  10. package/article/article.d.ts +3 -0
  11. package/article/src/article-theme.scss +25 -2
  12. package/breadcrumb/README.md +38 -28
  13. package/breadcrumb/breadcrumb/breadcrumb.component.d.ts +15 -2
  14. package/breadcrumb/breadcrumb-item/breadcrumb-item.directive.d.ts +18 -4
  15. package/breadcrumb/breadcrumb.d.ts +3 -0
  16. package/breadcrumb/examples/iterated-breadcrumb/iterated-breadcrumb.component.d.ts +6 -0
  17. package/breadcrumb/public_api.d.ts +2 -2
  18. package/button/README.md +43 -23
  19. package/button/button/basic/button.component.d.ts +5 -1
  20. package/button/button/button-base.directive.d.ts +11 -3
  21. package/button/button/button-sizable.directive.d.ts +1 -1
  22. package/button/button/raised/raised.component.d.ts +2 -0
  23. package/button/button/stroked/stroked.component.d.ts +5 -1
  24. package/button/button.d.ts +4 -2
  25. package/button/button.module.d.ts +1 -2
  26. package/button/examples/elevated-button/elevated-button.component.d.ts +6 -0
  27. package/button/examples/examples.d.ts +2 -1
  28. package/button/examples/public_api.d.ts +1 -0
  29. package/button/public_api.d.ts +0 -1
  30. package/button/src/button/basic/button-theme.scss +180 -80
  31. package/button/src/button/button-base.scss +26 -15
  32. package/button/src/button/flat/flat-theme.scss +144 -85
  33. package/button/src/button/raised/raised-theme.scss +2 -7
  34. package/button/src/button/stroked/stroked-theme.scss +126 -92
  35. package/button/src/button/underline/underline-theme.scss +112 -44
  36. package/callout/README.md +4 -3
  37. package/callout/callout.d.ts +3 -0
  38. package/card/README.md +6 -3
  39. package/card/card/basic/basic.component.d.ts +7 -0
  40. package/card/card/raised/raised.component.d.ts +7 -0
  41. package/card/card/stroked/stroked.component.d.ts +7 -0
  42. package/card/card-base.directive.d.ts +25 -0
  43. package/card/card.d.ts +18 -1
  44. package/card/card.module.d.ts +10 -8
  45. package/card/public_api.d.ts +6 -1
  46. package/card/src/card/raised/raised-theme.scss +30 -0
  47. package/card/src/card/stroked/stroked-theme.scss +46 -0
  48. package/card/src/card-base-theme.scss +126 -0
  49. package/card/src/card-base.scss +134 -0
  50. package/container/README.md +5 -3
  51. package/container/container.d.ts +3 -0
  52. package/core/colorable/colorable.d.ts +20 -14
  53. package/core/colorable/colorable.directive.d.ts +9 -6
  54. package/fesm2022/daffodil-design-accordion-examples.mjs +28 -4
  55. package/fesm2022/daffodil-design-accordion-examples.mjs.map +1 -1
  56. package/fesm2022/daffodil-design-accordion.mjs +56 -29
  57. package/fesm2022/daffodil-design-accordion.mjs.map +1 -1
  58. package/fesm2022/daffodil-design-article-examples.mjs +30 -30
  59. package/fesm2022/daffodil-design-article.mjs +14 -11
  60. package/fesm2022/daffodil-design-article.mjs.map +1 -1
  61. package/fesm2022/daffodil-design-breadcrumb-examples.mjs +24 -4
  62. package/fesm2022/daffodil-design-breadcrumb-examples.mjs.map +1 -1
  63. package/fesm2022/daffodil-design-breadcrumb.mjs +78 -40
  64. package/fesm2022/daffodil-design-breadcrumb.mjs.map +1 -1
  65. package/fesm2022/daffodil-design-button-examples.mjs +55 -33
  66. package/fesm2022/daffodil-design-button-examples.mjs.map +1 -1
  67. package/fesm2022/daffodil-design-button.mjs +79 -69
  68. package/fesm2022/daffodil-design-button.mjs.map +1 -1
  69. package/fesm2022/daffodil-design-callout-examples.mjs +12 -12
  70. package/fesm2022/daffodil-design-callout-examples.mjs.map +1 -1
  71. package/fesm2022/daffodil-design-callout.mjs +25 -22
  72. package/fesm2022/daffodil-design-callout.mjs.map +1 -1
  73. package/fesm2022/daffodil-design-card-examples.mjs +23 -21
  74. package/fesm2022/daffodil-design-card-examples.mjs.map +1 -1
  75. package/fesm2022/daffodil-design-card.mjs +140 -86
  76. package/fesm2022/daffodil-design-card.mjs.map +1 -1
  77. package/fesm2022/daffodil-design-checkbox-examples.mjs +6 -6
  78. package/fesm2022/daffodil-design-checkbox-examples.mjs.map +1 -1
  79. package/fesm2022/daffodil-design-container-examples.mjs +3 -3
  80. package/fesm2022/daffodil-design-container.mjs +10 -7
  81. package/fesm2022/daffodil-design-container.mjs.map +1 -1
  82. package/fesm2022/daffodil-design-hero-examples.mjs +12 -12
  83. package/fesm2022/daffodil-design-hero-examples.mjs.map +1 -1
  84. package/fesm2022/daffodil-design-hero.mjs +25 -22
  85. package/fesm2022/daffodil-design-hero.mjs.map +1 -1
  86. package/fesm2022/daffodil-design-image-examples.mjs +9 -9
  87. package/fesm2022/daffodil-design-image.mjs +36 -19
  88. package/fesm2022/daffodil-design-image.mjs.map +1 -1
  89. package/fesm2022/daffodil-design-input-examples.mjs +12 -12
  90. package/fesm2022/daffodil-design-link-set.mjs +19 -16
  91. package/fesm2022/daffodil-design-link-set.mjs.map +1 -1
  92. package/fesm2022/daffodil-design-list-examples.mjs +12 -12
  93. package/fesm2022/daffodil-design-list.mjs +13 -10
  94. package/fesm2022/daffodil-design-list.mjs.map +1 -1
  95. package/fesm2022/daffodil-design-loading-icon-examples.mjs +4 -4
  96. package/fesm2022/daffodil-design-loading-icon-examples.mjs.map +1 -1
  97. package/fesm2022/daffodil-design-loading-icon.mjs +11 -8
  98. package/fesm2022/daffodil-design-loading-icon.mjs.map +1 -1
  99. package/fesm2022/daffodil-design-media-gallery-examples.mjs +62 -13
  100. package/fesm2022/daffodil-design-media-gallery-examples.mjs.map +1 -1
  101. package/fesm2022/daffodil-design-media-gallery.mjs +165 -250
  102. package/fesm2022/daffodil-design-media-gallery.mjs.map +1 -1
  103. package/fesm2022/daffodil-design-menu-examples.mjs +6 -6
  104. package/fesm2022/daffodil-design-menu-examples.mjs.map +1 -1
  105. package/fesm2022/daffodil-design-menu.mjs +16 -16
  106. package/fesm2022/daffodil-design-modal-examples.mjs +7 -7
  107. package/fesm2022/daffodil-design-modal-examples.mjs.map +1 -1
  108. package/fesm2022/daffodil-design-modal.mjs +28 -25
  109. package/fesm2022/daffodil-design-modal.mjs.map +1 -1
  110. package/fesm2022/daffodil-design-navbar-examples.mjs +12 -12
  111. package/fesm2022/daffodil-design-navbar-examples.mjs.map +1 -1
  112. package/fesm2022/daffodil-design-navbar.mjs +10 -7
  113. package/fesm2022/daffodil-design-navbar.mjs.map +1 -1
  114. package/fesm2022/daffodil-design-notification-examples.mjs +15 -15
  115. package/fesm2022/daffodil-design-notification.mjs +22 -19
  116. package/fesm2022/daffodil-design-notification.mjs.map +1 -1
  117. package/fesm2022/daffodil-design-paginator-examples.mjs +6 -6
  118. package/fesm2022/daffodil-design-paginator.mjs +13 -7
  119. package/fesm2022/daffodil-design-paginator.mjs.map +1 -1
  120. package/fesm2022/daffodil-design-progress-bar-examples.mjs +9 -9
  121. package/fesm2022/daffodil-design-progress-bar.mjs +13 -10
  122. package/fesm2022/daffodil-design-progress-bar.mjs.map +1 -1
  123. package/fesm2022/daffodil-design-quantity-field-examples.mjs +12 -12
  124. package/fesm2022/daffodil-design-radio-examples.mjs +3 -3
  125. package/fesm2022/daffodil-design-sidebar-examples.mjs +14 -14
  126. package/fesm2022/daffodil-design-sidebar-examples.mjs.map +1 -1
  127. package/fesm2022/daffodil-design-sidebar.mjs +147 -53
  128. package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
  129. package/fesm2022/daffodil-design-switch-examples.mjs +15 -15
  130. package/fesm2022/daffodil-design-switch-examples.mjs.map +1 -1
  131. package/fesm2022/daffodil-design-switch.mjs +6 -3
  132. package/fesm2022/daffodil-design-switch.mjs.map +1 -1
  133. package/fesm2022/daffodil-design-tabs-examples.mjs +23 -17
  134. package/fesm2022/daffodil-design-tabs-examples.mjs.map +1 -1
  135. package/fesm2022/daffodil-design-tabs.mjs +66 -34
  136. package/fesm2022/daffodil-design-tabs.mjs.map +1 -1
  137. package/fesm2022/daffodil-design-text-snippet-examples.mjs +3 -3
  138. package/fesm2022/daffodil-design-text-snippet.mjs +4 -5
  139. package/fesm2022/daffodil-design-text-snippet.mjs.map +1 -1
  140. package/fesm2022/daffodil-design-toast-examples.mjs +40 -15
  141. package/fesm2022/daffodil-design-toast-examples.mjs.map +1 -1
  142. package/fesm2022/daffodil-design-toast.mjs +301 -245
  143. package/fesm2022/daffodil-design-toast.mjs.map +1 -1
  144. package/fesm2022/daffodil-design-tree-examples.mjs +6 -6
  145. package/fesm2022/daffodil-design-tree.mjs +13 -10
  146. package/fesm2022/daffodil-design-tree.mjs.map +1 -1
  147. package/fesm2022/daffodil-design-youtube-player.mjs +104 -0
  148. package/fesm2022/daffodil-design-youtube-player.mjs.map +1 -0
  149. package/fesm2022/daffodil-design.mjs +167 -155
  150. package/fesm2022/daffodil-design.mjs.map +1 -1
  151. package/hero/README.md +4 -3
  152. package/hero/hero.d.ts +3 -0
  153. package/image/README.md +4 -3
  154. package/image/image/image.component.d.ts +22 -1
  155. package/image/image.d.ts +3 -0
  156. package/link-set/README.md +4 -3
  157. package/link-set/link-set.d.ts +3 -0
  158. package/list/README.md +4 -3
  159. package/list/list.d.ts +3 -0
  160. package/loading-icon/README.md +10 -7
  161. package/loading-icon/loading-icon.d.ts +3 -0
  162. package/loading-icon/src/loading-icon-theme.scss +66 -38
  163. package/media-gallery/README.md +17 -8
  164. package/media-gallery/examples/iterated-media-gallery/iterated-media-gallery.component.d.ts +13 -0
  165. package/media-gallery/examples/media-gallery-with-video/media-gallery-with-video.component.d.ts +5 -0
  166. package/media-gallery/examples/public_api.d.ts +2 -0
  167. package/media-gallery/helpers/media-gallery-registration.interface.d.ts +1 -1
  168. package/media-gallery/media-gallery/media-gallery.component.d.ts +73 -11
  169. package/media-gallery/media-gallery.d.ts +4 -2
  170. package/media-gallery/media-gallery.module.d.ts +1 -2
  171. package/media-gallery/public_api.d.ts +0 -1
  172. package/media-gallery/src/media-gallery-theme.scss +30 -4
  173. package/media-gallery/thumbnail/thumbnail.directive.d.ts +29 -23
  174. package/menu/README.md +1 -2
  175. package/modal/README.md +3 -2
  176. package/modal/modal.d.ts +3 -0
  177. package/navbar/README.md +3 -2
  178. package/navbar/navbar.d.ts +3 -0
  179. package/notification/README.md +5 -4
  180. package/notification/notification.d.ts +3 -0
  181. package/package.json +1 -1
  182. package/paginator/README.md +3 -2
  183. package/paginator/paginator/paginator.component.d.ts +3 -0
  184. package/paginator/paginator.d.ts +3 -0
  185. package/progress-bar/README.md +3 -2
  186. package/progress-bar/progress-bar.d.ts +3 -0
  187. package/scss/theme.scss +36 -17
  188. package/scss/theming/_configure-theme.scss +2 -0
  189. package/scss/theming/_index.scss +1 -0
  190. package/scss/theming/_light-dark.scss +45 -0
  191. package/sidebar/README.md +20 -21
  192. package/sidebar/helper/sidebar-mode.d.ts +9 -15
  193. package/sidebar/sidebar/sidebar.component.d.ts +22 -7
  194. package/sidebar/sidebar-footer/sidebar-footer.component.d.ts +11 -0
  195. package/sidebar/sidebar-header/sidebar-header-title/sidebar-header-title.directive.d.ts +8 -0
  196. package/sidebar/sidebar-header/sidebar-header.component.d.ts +19 -1
  197. package/sidebar/sidebar-viewport/sidebar-viewport.component.d.ts +36 -15
  198. package/sidebar/sidebar-viewport-backdrop/sidebar-viewport-backdrop.component.d.ts +17 -0
  199. package/sidebar/sidebar.d.ts +3 -0
  200. package/switch/README.md +3 -2
  201. package/switch/switch.d.ts +3 -0
  202. package/tabs/README.md +33 -3
  203. package/tabs/tabs/tab/tab.component.d.ts +1 -1
  204. package/tabs/tabs/tab-label/tab-label.component.d.ts +6 -0
  205. package/tabs/tabs/tab-panel/tab-panel.component.d.ts +8 -0
  206. package/tabs/tabs/tabs.component.d.ts +21 -4
  207. package/tabs/tabs.d.ts +8 -2
  208. package/text-snippet/README.md +19 -1
  209. package/toast/README.md +21 -151
  210. package/toast/examples/dismissible-toast/dismissible-toast.component.d.ts +11 -0
  211. package/toast/examples/public_api.d.ts +2 -1
  212. package/toast/interfaces/toast-action.d.ts +22 -11
  213. package/toast/interfaces/toast-action.type.d.ts +10 -0
  214. package/toast/interfaces/toast.d.ts +11 -5
  215. package/toast/options/daff-toast-options.d.ts +2 -1
  216. package/toast/public_api.d.ts +2 -6
  217. package/toast/service/position.service.d.ts +9 -1
  218. package/toast/service/toast.service.d.ts +63 -0
  219. package/toast/toast/toast-config.d.ts +24 -1
  220. package/toast/toast/toast-provider.d.ts +16 -0
  221. package/toast/toast/toast-template.component.d.ts +1 -3
  222. package/toast/toast/toast.component.d.ts +20 -1
  223. package/toast/toast-actions/toast-actions.directive.d.ts +3 -0
  224. package/toast/toast-message/toast-message.directive.d.ts +3 -0
  225. package/toast/toast-title/toast-title.directive.d.ts +3 -0
  226. package/tree/README.md +6 -10
  227. package/tree/tree.d.ts +3 -0
  228. package/youtube-player/index.d.ts +1 -0
  229. package/youtube-player/public_api.d.ts +3 -0
  230. package/youtube-player/safe-url.pipe.d.ts +10 -0
  231. package/youtube-player/youtube-player.component.d.ts +23 -0
  232. package/youtube-player/youtube-player.d.ts +6 -0
  233. package/card/card/card.component.d.ts +0 -48
  234. package/card/src/card-theme-variants/basic-card.scss +0 -6
  235. package/card/src/card-theme-variants/linkable-card.scss +0 -16
  236. package/card/src/card-theme-variants/stroked-card.scss +0 -3
  237. package/card/src/card-theme.scss +0 -170
  238. package/media-gallery/media-renderer/media-renderer.component.d.ts +0 -29
  239. package/media-gallery/registry/media-gallery.registry.d.ts +0 -34
  240. package/media-gallery/thumbnail/thumbnail-compat.token.d.ts +0 -1
  241. package/media-gallery/thumbnail/thumbnail-registration.interface.d.ts +0 -9
  242. package/scss/theming/prebuilt/internal-theme.scss +0 -13
  243. package/toast/toast.module.d.ts +0 -19
@@ -1,11 +1,9 @@
1
+ import { NgTemplateOutlet, CommonModule } from '@angular/common';
1
2
  import * as i0 from '@angular/core';
2
- import { Injectable, TemplateRef, ViewContainerRef, Component, ChangeDetectionStrategy, Inject, ViewChild, Directive, HostBinding, HostListener, Input, NgModule } from '@angular/core';
3
- import * as i2 from '@daffodil/design';
3
+ import { isDevMode, Directive, Inject, Input, EventEmitter, contentChildren, computed, signal, ElementRef, Component, ChangeDetectionStrategy, HostBinding, Output, ViewChildren, NgModule } from '@angular/core';
4
+ import * as i1 from '@daffodil/design';
4
5
  import { DaffSelectableDirective, DaffArticleEncapsulatedDirective, DaffSkeletonableDirective } from '@daffodil/design';
5
6
  import { createSingleInjectionToken } from '@daffodil/core';
6
- import { BehaviorSubject, Subject } from 'rxjs';
7
- import { takeUntil } from 'rxjs/operators';
8
- import { CommonModule } from '@angular/common';
9
7
 
10
8
  const { token: DAFF_MEDIA_GALLERY_TOKEN,
11
9
  /**
@@ -13,279 +11,184 @@ const { token: DAFF_MEDIA_GALLERY_TOKEN,
13
11
  */
14
12
  provider: provideDaffMediaGalleryToken, } = createSingleInjectionToken('DAFF_MEDIA_GALLERY_TOKEN');
15
13
 
16
- const isGallery = (element) => !('gallery' in element);
17
- class DaffMediaGalleryRegistry {
18
- constructor() {
19
- this.galleries = {};
20
- }
14
+ let uniqueThumbnailId = 0;
15
+ /**
16
+ * A structural directive marking thumbnails for the `DaffMediaGalleryComponent`.
17
+ *
18
+ * ```html
19
+ * <ng-template daffThumbnail></ng-template>
20
+ * ```
21
+ */
22
+ class DaffThumbnailDirective {
21
23
  /**
22
- * @description
23
- * Adds a media element to the internal registry.
24
+ * The id of the thumbnail.
24
25
  */
25
- add(gallery, thumbnail) {
26
- if (this.galleries[gallery.name]) {
27
- let newGallery = this.galleries[gallery.name].getValue();
28
- if (thumbnail) {
29
- newGallery = {
30
- ...newGallery,
31
- thumbnails: [
32
- ...newGallery.thumbnails.filter(t => t !== thumbnail),
33
- thumbnail,
34
- ],
35
- };
36
- }
37
- this.galleries[gallery.name].next(newGallery);
38
- }
39
- else {
40
- this.galleries[gallery.name] = new BehaviorSubject({
41
- gallery,
42
- thumbnails: thumbnail ? [thumbnail] : [],
43
- });
44
- }
45
- if (this.galleries[gallery.name].getValue().thumbnails.length === 1) {
46
- thumbnail.select();
47
- }
26
+ get id() {
27
+ return this.gallery.id + '-thumbnail-' + uniqueThumbnailId;
48
28
  }
49
29
  /**
50
- * @description
51
- * Removes a thumbnail or gallery from the internal registry.
30
+ * The id of the thumbnail panel.
52
31
  */
53
- remove(element) {
54
- if (isGallery(element)) {
55
- this.removeGallery(element);
56
- }
57
- else {
58
- this.removeThumbnail(element);
59
- }
60
- }
61
- removeThumbnail(thumbnail) {
62
- if (!this.galleries[thumbnail.gallery.name]) {
63
- return;
64
- }
65
- const gallery = this.galleries[thumbnail.gallery.name].getValue();
66
- const index = gallery.thumbnails.indexOf(thumbnail);
67
- if (index === -1) {
68
- return;
69
- }
70
- this.galleries[thumbnail.gallery.name].next({
71
- ...gallery,
72
- thumbnails: [
73
- ...gallery.thumbnails.slice(0, index),
74
- ...gallery.thumbnails.slice(index + 1),
75
- ],
76
- });
77
- }
78
- removeGallery(gallery) {
79
- delete this.galleries[gallery.name];
32
+ get panelId() {
33
+ return this.id + '-el';
80
34
  }
81
35
  /**
82
- * @description
83
- * Selects a media element for a given gallery.
36
+ * @docs-private
84
37
  */
85
- select(thumbnail) {
86
- if (!this.galleries[thumbnail.gallery.name]) {
87
- return;
88
- }
89
- const gallery = this.galleries[thumbnail.gallery.name].getValue();
90
- const index = gallery.thumbnails.indexOf(thumbnail);
91
- if (thumbnail.selected || index === -1) {
92
- return;
93
- }
94
- this.galleries[thumbnail.gallery.name].next({
95
- ...gallery,
96
- thumbnails: [
97
- ...gallery.thumbnails.filter(m => m !== thumbnail).map(m => m.deselect()),
98
- thumbnail.select(),
99
- ],
100
- });
101
- }
102
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
103
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryRegistry, providedIn: 'root' }); }
104
- }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryRegistry, decorators: [{
106
- type: Injectable,
107
- args: [{ providedIn: 'root' }]
108
- }] });
109
-
110
- /**
111
- * Dynamically renders the selected `DaffThumbnailDirective` in a `daff-media-gallery` any time the selected thumbnail
112
- * changes.
113
- */
114
- class DaffMediaRendererComponent {
115
- constructor(componentFactoryResolver, registry, gallery) {
116
- this.componentFactoryResolver = componentFactoryResolver;
117
- this.registry = registry;
38
+ constructor(gallery, templateRef) {
118
39
  this.gallery = gallery;
40
+ this.templateRef = templateRef;
119
41
  /**
120
- * Private tracker for indicating when the component is destroyed.
42
+ * The file path to a thumbnail, presumably an image.
121
43
  */
122
- this._destroy$ = new Subject();
123
- }
124
- ngOnInit() {
125
- this.registry.galleries[this.gallery.name]
126
- .pipe(takeUntil(this._destroy$))
127
- .subscribe((gallery) => {
128
- /**
129
- * Clear out the slot for the dynamically rendered thumbnail
130
- */
131
- this.slot.clear();
132
- const _selectedThumbnail = gallery.thumbnails.filter(media => media.selected).shift();
133
- /**
134
- * If there's no selected media, render nothing.
135
- */
136
- if (!_selectedThumbnail) {
137
- return;
138
- }
139
- const _selectedThumbnailComponent = _selectedThumbnail.component;
140
- /**
141
- * Create the component to insert.
142
- */
143
- const component = this.componentFactoryResolver.resolveComponentFactory(_selectedThumbnailComponent.constructor);
144
- const componentRef = this.slot.createComponent(component);
145
- /**
146
- * Fill the component with it's values from the original component
147
- */
148
- component.inputs.forEach(input => {
149
- componentRef.instance[input.propName] = _selectedThumbnailComponent[input.propName];
150
- });
151
- /**
152
- * Trigger a change detection on the component tree, outside the cycle to address
153
- * the fact that the component was created outside a typical CD loop.
154
- */
155
- componentRef.changeDetectorRef.detectChanges();
156
- });
157
- }
158
- /**
159
- * Used to unsubscribe from the dynamic component.
160
- */
161
- ngOnDestroy() {
162
- this._destroy$.next(true);
163
- this._destroy$.unsubscribe();
164
- }
165
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaRendererComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: DaffMediaGalleryRegistry }, { token: DAFF_MEDIA_GALLERY_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
166
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DaffMediaRendererComponent, isStandalone: true, selector: "daff-media-renderer", viewQueries: [{ propertyName: "slot", first: true, predicate: TemplateRef, descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<ng-template></ng-template>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
167
- }
168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaRendererComponent, decorators: [{
169
- type: Component,
170
- args: [{
171
- selector: 'daff-media-renderer',
172
- template: '<ng-template></ng-template>',
173
- changeDetection: ChangeDetectionStrategy.OnPush,
174
- standalone: true,
175
- }]
176
- }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: DaffMediaGalleryRegistry }, { type: undefined, decorators: [{
177
- type: Inject,
178
- args: [DAFF_MEDIA_GALLERY_TOKEN]
179
- }] }], propDecorators: { slot: [{
180
- type: ViewChild,
181
- args: [TemplateRef, { static: true, read: ViewContainerRef }]
182
- }] } });
183
-
184
- const {
185
- /**
186
- * A multi provider injection token that marks a component as renderable for the `DaffMediaRendererComponent`.
187
- */
188
- token: daffThumbnailCompatToken,
189
- /**
190
- * Provider function for {@link daffThumbnailCompatToken}.
191
- */
192
- provider: provideDaffThumbnailCompatToken, } = createSingleInjectionToken('thumbnailCompatToken');
193
-
194
- /**
195
- * A directive marking thumbnails for the `DaffMediaRendererComponent`. Needs to be wrapped in a `daff-media-gallery` component
196
- * and needs to be placed on a component that is provided as a `daffThumbnailCompatToken`.
197
- */
198
- class DaffThumbnailDirective {
199
- constructor(component, registry, gallery, selectedDirective) {
200
- this.component = component;
201
- this.registry = registry;
202
- this.gallery = gallery;
203
- this.selectedDirective = selectedDirective;
44
+ this.thumbnailSrc = undefined;
204
45
  /**
205
- * Adds a class for styling a thumbnail
46
+ * The button label for the thumbnail.
206
47
  */
207
- this.class = true;
208
- }
209
- get selected() {
210
- return this.selectedDirective.selected;
211
- }
212
- select() {
213
- this.selectedDirective.select();
214
- return this;
215
- }
216
- deselect() {
217
- this.selectedDirective.deselect();
218
- return this;
48
+ this.label = undefined;
49
+ this.isVideo = false;
50
+ uniqueThumbnailId++;
219
51
  }
220
52
  /**
221
- * Adds a click event to trigger selection of the media element.
222
- *
223
- * @param event: MouseEvent
53
+ * @docs-private
224
54
  */
225
- onClick($event) {
226
- this.registry.select(this);
227
- }
228
55
  ngOnInit() {
229
- this.registry.add(this.gallery, this);
230
- }
231
- ngOnDestroy() {
232
- this.registry.remove(this);
56
+ if (!this.label && isDevMode()) {
57
+ console.warn('The thumbnail ' + this.id + ' is missing a label.');
58
+ }
233
59
  }
234
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffThumbnailDirective, deps: [{ token: daffThumbnailCompatToken }, { token: DaffMediaGalleryRegistry }, { token: DAFF_MEDIA_GALLERY_TOKEN }, { token: i2.DaffSelectableDirective }], target: i0.ɵɵFactoryTarget.Directive }); }
235
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.7", type: DaffThumbnailDirective, isStandalone: true, selector: "[daffThumbnail]", host: { listeners: { "click": "onClick($event)" }, properties: { "class.daff-thumbnail": "this.class" } }, hostDirectives: [{ directive: i2.DaffSelectableDirective, inputs: ["selected", "selected"], outputs: ["becameSelected", "becameSelected"] }], ngImport: i0 }); }
60
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffThumbnailDirective, deps: [{ token: DAFF_MEDIA_GALLERY_TOKEN }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
61
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: DaffThumbnailDirective, isStandalone: true, selector: "[daffThumbnail]", inputs: { thumbnailSrc: "thumbnailSrc", label: "label", isVideo: "isVideo" }, ngImport: i0 }); }
236
62
  }
237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffThumbnailDirective, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffThumbnailDirective, decorators: [{
238
64
  type: Directive,
239
65
  args: [{
240
66
  selector: '[daffThumbnail]',
241
- standalone: true,
242
- hostDirectives: [{
243
- directive: DaffSelectableDirective,
244
- inputs: ['selected'],
245
- outputs: ['becameSelected'],
246
- }],
247
67
  }]
248
- }], ctorParameters: () => [{ type: i0.Type, decorators: [{
249
- type: Inject,
250
- args: [daffThumbnailCompatToken]
251
- }] }, { type: DaffMediaGalleryRegistry }, { type: undefined, decorators: [{
68
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
252
69
  type: Inject,
253
70
  args: [DAFF_MEDIA_GALLERY_TOKEN]
254
- }] }, { type: i2.DaffSelectableDirective }], propDecorators: { class: [{
255
- type: HostBinding,
256
- args: ['class.daff-thumbnail']
257
- }], onClick: [{
258
- type: HostListener,
259
- args: ['click', ['$event']]
71
+ }] }, { type: i0.TemplateRef }], propDecorators: { thumbnailSrc: [{
72
+ type: Input
73
+ }], label: [{
74
+ type: Input
75
+ }], isVideo: [{
76
+ type: Input
260
77
  }] } });
261
78
 
262
79
  let uniqueGalleryId = 0;
80
+ /**
81
+ * ```html
82
+ * <daff-media-gallery></daff-media-gallery>
83
+ * ```
84
+ */
263
85
  class DaffMediaGalleryComponent {
264
- constructor(registry) {
265
- this.registry = registry;
86
+ /**
87
+ * The id of the gallery.
88
+ */
89
+ get id() {
90
+ return this._id;
91
+ }
92
+ set id(val) {
93
+ if (!val) {
94
+ return;
95
+ }
96
+ this._id = val;
97
+ }
98
+ ;
99
+ /**
100
+ * @docs-private
101
+ */
102
+ constructor(skeletonDirective) {
103
+ this.skeletonDirective = skeletonDirective;
104
+ /**
105
+ * @docs-private
106
+ */
107
+ this.role = 'tablist';
266
108
  /**
109
+ * @docs-private
110
+ *
267
111
  * Adds a class for styling the media gallery
268
112
  */
269
113
  this.class = true;
270
114
  /**
271
- * The name of the gallery
115
+ * An event indicating that the selected media gallery element has changed.
116
+ */
117
+ this.elementChange = new EventEmitter();
118
+ /**
119
+ * @docs-private
120
+ */
121
+ this._thumbnails = contentChildren(DaffThumbnailDirective);
122
+ /**
123
+ * @docs-private
272
124
  */
273
- this.name = `${uniqueGalleryId}`;
125
+ this._selectedThumbnail = computed(() => {
126
+ const idx = this._selectedIndex();
127
+ if (!idx) {
128
+ return this._thumbnails().at(0);
129
+ }
130
+ return this._thumbnails().at(idx);
131
+ });
132
+ this._selectedIndex = signal(null);
274
133
  uniqueGalleryId++;
275
134
  }
276
- ngOnInit() {
277
- this.registry.add(this);
135
+ /**
136
+ * @docs-private
137
+ *
138
+ * Whether or not the component its currently displaying its skeleton state.
139
+ */
140
+ get skeleton() {
141
+ return this.skeletonDirective.skeleton;
142
+ }
143
+ focusSelected() {
144
+ this._thumbnailButtons.get(this._selectedIndex())?.nativeElement.focus();
278
145
  }
279
- ngOnDestroy() {
280
- this.registry.remove(this);
146
+ /**
147
+ * Select a specific entry in the media gallery by its index (starting at 0).
148
+ */
149
+ selectIndex(index) {
150
+ this._selectedIndex.set(index);
151
+ this.elementChange.emit(index);
281
152
  }
282
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryComponent, deps: [{ token: DaffMediaGalleryRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
283
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DaffMediaGalleryComponent, isStandalone: true, selector: "daff-media-gallery", inputs: { name: "name" }, host: { properties: { "class.daff-media-gallery": "this.class" } }, providers: [
153
+ /**
154
+ * Navigate to the next element in the list of thumbnails.
155
+ */
156
+ next(focus = true) {
157
+ this._selectedIndex.update((curr) => ((curr ?? 0) + 1 + this._thumbnails().length) % this._thumbnails().length);
158
+ this.elementChange.emit(this._selectedIndex());
159
+ this.focusSelected();
160
+ }
161
+ /**
162
+ * Navigate to the previous element in the list of thumbnails.
163
+ */
164
+ previous(focus = true) {
165
+ this._selectedIndex.update((curr) => ((curr ?? 0) - 1 + this._thumbnails().length) % this._thumbnails().length);
166
+ this.elementChange.emit(this._selectedIndex());
167
+ this.focusSelected();
168
+ }
169
+ /**
170
+ * Select the first element
171
+ */
172
+ selectFirst(focus = true) {
173
+ this._selectedIndex.set(0);
174
+ this.elementChange.emit(this._selectedIndex());
175
+ this.focusSelected();
176
+ }
177
+ /**
178
+ * Select the last element of the gallery.
179
+ */
180
+ selectLast(focus = true) {
181
+ this._selectedIndex.set(this._thumbnails().length - 1);
182
+ this.elementChange.emit(this._selectedIndex());
183
+ this.focusSelected();
184
+ }
185
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryComponent, deps: [{ token: i1.DaffSkeletonableDirective }], target: i0.ɵɵFactoryTarget.Component }); }
186
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: DaffMediaGalleryComponent, isStandalone: true, selector: "daff-media-gallery", inputs: { id: "id" }, outputs: { elementChange: "elementChange" }, host: { properties: { "attr.role": "this.role", "attr.id": "this.id", "class.daff-media-gallery": "this.class" } }, providers: [
284
187
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
285
188
  { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },
286
- ], hostDirectives: [{ directive: i2.DaffArticleEncapsulatedDirective }, { directive: i2.DaffSkeletonableDirective, inputs: ["skeleton", "skeleton"] }], ngImport: i0, template: "<div class=\"daff-media-gallery__thumbnails\">\n\t<ng-content select=\"[daffThumbnail]\"></ng-content>\n</div>\n<div class=\"daff-media-gallery__selected-thumbnail\">\n\t<daff-media-renderer></daff-media-renderer>\n</div>", styles: [":host(.daff-media-gallery){display:flex;flex-direction:column}@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:inline-block;height:64px;width:64px;margin:0 2px;max-width:100%;overflow:hidden;user-select:none}@media (min-width: 480px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{height:72px;width:72px}}@media (min-width: 1024px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{display:block;margin:0 0 4px;height:80px;width:80px}}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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:72px;width:72px;position:absolute;top:0;left:0}@media (min-width: 1024px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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:80px;width:80px;position:absolute;top:0;left:0}}:host(.daff-media-gallery).daff-skeleton ::ng-deep img{opacity:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail{display:flex;position:relative}: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}.daff-media-gallery__thumbnails{margin:0 -2px;max-height:100%;order:2}@media (min-width: 1024px){.daff-media-gallery__thumbnails{margin:0 8px 0 0;order:1}}.daff-media-gallery__selected-thumbnail{display:block;flex-grow:1;order:1;position:relative}@media (min-width: 1024px){.daff-media-gallery__selected-thumbnail{order:2}}\n"], dependencies: [{ kind: "component", type: DaffMediaRendererComponent, selector: "daff-media-renderer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
189
+ ], 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>\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.panelId\"\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 el = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"el?.panelId\">\n\t\t@if(el) {\n\t\t\t<ng-container *ngTemplateOutlet=\"el.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}: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}: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}}@media (min-width: 1024px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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}}:host(.daff-media-gallery).daff-skeleton ::ng-deep img{opacity:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail{display:flex;position:relative;flex-grow:1}: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}: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 }); }
287
190
  }
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryComponent, decorators: [{
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryComponent, decorators: [{
289
192
  type: Component,
290
193
  args: [{ selector: 'daff-media-gallery', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
291
194
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -297,36 +200,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
297
200
  inputs: ['skeleton'],
298
201
  },
299
202
  ], imports: [
300
- DaffMediaRendererComponent,
301
203
  DaffThumbnailDirective,
302
- ], template: "<div class=\"daff-media-gallery__thumbnails\">\n\t<ng-content select=\"[daffThumbnail]\"></ng-content>\n</div>\n<div class=\"daff-media-gallery__selected-thumbnail\">\n\t<daff-media-renderer></daff-media-renderer>\n</div>", styles: [":host(.daff-media-gallery){display:flex;flex-direction:column}@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:inline-block;height:64px;width:64px;margin:0 2px;max-width:100%;overflow:hidden;user-select:none}@media (min-width: 480px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{height:72px;width:72px}}@media (min-width: 1024px){:host(.daff-media-gallery) ::ng-deep .daff-thumbnail{display:block;margin:0 0 4px;height:80px;width:80px}}:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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:72px;width:72px;position:absolute;top:0;left:0}@media (min-width: 1024px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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:80px;width:80px;position:absolute;top:0;left:0}}:host(.daff-media-gallery).daff-skeleton ::ng-deep img{opacity:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail{display:flex;position:relative}: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}.daff-media-gallery__thumbnails{margin:0 -2px;max-height:100%;order:2}@media (min-width: 1024px){.daff-media-gallery__thumbnails{margin:0 8px 0 0;order:1}}.daff-media-gallery__selected-thumbnail{display:block;flex-grow:1;order:1;position:relative}@media (min-width: 1024px){.daff-media-gallery__selected-thumbnail{order:2}}\n"] }]
303
- }], ctorParameters: () => [{ type: DaffMediaGalleryRegistry }], propDecorators: { class: [{
204
+ NgTemplateOutlet,
205
+ DaffSelectableDirective,
206
+ ], template: "<ng-content></ng-content>\n\n<div class=\"daff-media-gallery__thumbnails\" #thumbnailsEl>\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.panelId\"\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 el = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"el?.panelId\">\n\t\t@if(el) {\n\t\t\t<ng-container *ngTemplateOutlet=\"el.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}: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}: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}}@media (min-width: 1024px){:host(.daff-media-gallery).daff-skeleton ::ng-deep .daff-thumbnail{display:flex;position:relative}: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}}:host(.daff-media-gallery).daff-skeleton ::ng-deep img{opacity:0}:host(.daff-media-gallery).daff-skeleton .daff-media-gallery__selected-thumbnail{display:flex;position:relative;flex-grow:1}: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}: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"] }]
207
+ }], ctorParameters: () => [{ type: i1.DaffSkeletonableDirective }], propDecorators: { role: [{
304
208
  type: HostBinding,
305
- args: ['class.daff-media-gallery']
306
- }], name: [{
209
+ args: ['attr.role']
210
+ }], id: [{
211
+ type: HostBinding,
212
+ args: ['attr.id']
213
+ }, {
307
214
  type: Input
215
+ }], class: [{
216
+ type: HostBinding,
217
+ args: ['class.daff-media-gallery']
218
+ }], elementChange: [{
219
+ type: Output
220
+ }], _thumbnailButtons: [{
221
+ type: ViewChildren,
222
+ args: ['thumbnailButtons', { read: ElementRef }]
308
223
  }] } });
309
224
 
310
225
  /**
311
226
  * @deprecated in favor of {@link DAFF_MEDIA_GALLERY_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.
312
227
  */
313
228
  class DaffMediaGalleryModule {
314
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
315
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule,
229
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
230
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule,
316
231
  DaffMediaGalleryComponent,
317
- DaffThumbnailDirective,
318
- DaffMediaRendererComponent], exports: [DaffMediaGalleryComponent,
232
+ DaffThumbnailDirective], exports: [DaffMediaGalleryComponent,
319
233
  DaffThumbnailDirective] }); }
320
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule] }); }
234
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryModule, imports: [CommonModule] }); }
321
235
  }
322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DaffMediaGalleryModule, decorators: [{
236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: DaffMediaGalleryModule, decorators: [{
323
237
  type: NgModule,
324
238
  args: [{
325
239
  imports: [
326
240
  CommonModule,
327
241
  DaffMediaGalleryComponent,
328
242
  DaffThumbnailDirective,
329
- DaffMediaRendererComponent,
330
243
  ],
331
244
  exports: [
332
245
  DaffMediaGalleryComponent,
@@ -335,15 +248,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
335
248
  }]
336
249
  }] });
337
250
 
251
+ /**
252
+ * @docs-private
253
+ */
338
254
  const DAFF_MEDIA_GALLERY_COMPONENTS = [
339
255
  DaffMediaGalleryComponent,
340
256
  DaffThumbnailDirective,
341
- DaffMediaRendererComponent,
342
257
  ];
343
258
 
344
259
  /**
345
260
  * Generated bundle index. Do not edit.
346
261
  */
347
262
 
348
- export { DAFF_MEDIA_GALLERY_COMPONENTS, DaffMediaGalleryComponent, DaffMediaGalleryModule, DaffThumbnailDirective, daffThumbnailCompatToken };
263
+ export { DAFF_MEDIA_GALLERY_COMPONENTS, DaffMediaGalleryComponent, DaffMediaGalleryModule, DaffThumbnailDirective };
349
264
  //# sourceMappingURL=daffodil-design-media-gallery.mjs.map
@@ -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/registry/media-gallery.registry.ts","../../../libs/design/media-gallery/src/media-renderer/media-renderer.component.ts","../../../libs/design/media-gallery/src/thumbnail/thumbnail-compat.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 { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DaffThumbnailRegistration } from '../thumbnail/thumbnail-registration.interface';\n\nexport interface DaffMediaGalleryDict {\n [galleryName: string]: BehaviorSubject<DaffMediaGallery>;\n}\n\nexport interface DaffMediaGallery {\n gallery: DaffMediaGalleryRegistration;\n thumbnails: DaffThumbnailRegistration[];\n}\n\nexport const isGallery = (element: DaffThumbnailRegistration | DaffMediaGalleryRegistration): element is DaffMediaGalleryRegistration => !('gallery' in element);\n\n@Injectable({ providedIn: 'root' })\nexport class DaffMediaGalleryRegistry {\n galleries: DaffMediaGalleryDict = {};\n\n /**\n * @description\n * Adds a media element to the internal registry.\n */\n add(gallery: DaffMediaGalleryRegistration, thumbnail?: DaffThumbnailRegistration) {\n if(this.galleries[gallery.name]) {\n let newGallery = this.galleries[gallery.name].getValue();\n\n if(thumbnail) {\n newGallery = {\n ...newGallery,\n thumbnails: [\n ...newGallery.thumbnails.filter(t => t !== thumbnail),\n thumbnail,\n ],\n };\n }\n\n this.galleries[gallery.name].next(newGallery);\n } else {\n this.galleries[gallery.name] = new BehaviorSubject({\n gallery,\n thumbnails: thumbnail ? [thumbnail] : [],\n });\n }\n\n if(this.galleries[gallery.name].getValue().thumbnails.length === 1) {\n thumbnail.select();\n }\n }\n\n /**\n * @description\n * Removes a thumbnail or gallery from the internal registry.\n */\n remove(element: DaffThumbnailRegistration | DaffMediaGalleryRegistration) {\n if(isGallery(element)) {\n this.removeGallery(element);\n } else {\n this.removeThumbnail(element);\n }\n }\n\n private removeThumbnail(thumbnail: DaffThumbnailRegistration) {\n if(!this.galleries[thumbnail.gallery.name]) {\n return;\n }\n const gallery = this.galleries[thumbnail.gallery.name].getValue();\n const index = gallery.thumbnails.indexOf(thumbnail);\n\n if(index === -1) {\n return;\n }\n\n this.galleries[thumbnail.gallery.name].next({\n ...gallery,\n thumbnails: [\n ...gallery.thumbnails.slice(0, index),\n ...gallery.thumbnails.slice(index + 1),\n ],\n });\n }\n\n private removeGallery(gallery: DaffMediaGalleryRegistration) {\n delete this.galleries[gallery.name];\n }\n\n /**\n * @description\n * Selects a media element for a given gallery.\n */\n select(thumbnail: DaffThumbnailRegistration) {\n if(!this.galleries[thumbnail.gallery.name]) {\n return;\n }\n\n const gallery = this.galleries[thumbnail.gallery.name].getValue();\n const index = gallery.thumbnails.indexOf(thumbnail);\n\n if(thumbnail.selected || index === -1){\n return;\n }\n\n this.galleries[thumbnail.gallery.name].next({\n ...gallery,\n thumbnails: [\n ...gallery.thumbnails.filter(m => m !== thumbnail).map(m => m.deselect()),\n thumbnail.select(),\n ],\n });\n }\n}\n","import {\n Component,\n OnInit,\n ComponentFactoryResolver,\n Type,\n ViewChild,\n ViewContainerRef,\n TemplateRef,\n ChangeDetectionStrategy,\n OnDestroy,\n Inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\nimport { DaffMediaGalleryRegistry } from '../registry/media-gallery.registry';\n\n/**\n * Dynamically renders the selected `DaffThumbnailDirective` in a `daff-media-gallery` any time the selected thumbnail\n * changes.\n */\n@Component({\n selector: 'daff-media-renderer',\n template: '<ng-template></ng-template>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class DaffMediaRendererComponent implements OnInit, OnDestroy {\n\n /**\n * Private tracker for indicating when the component is destroyed.\n */\n private _destroy$ = new Subject();\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private registry: DaffMediaGalleryRegistry,\n @Inject(DAFF_MEDIA_GALLERY_TOKEN) private gallery: DaffMediaGalleryRegistration,\n ) {}\n\n /**\n * The slot that the \"component\" is rendered into.\n */\n @ViewChild(TemplateRef, { static: true, read: ViewContainerRef })\n slot: ViewContainerRef;\n\n ngOnInit() {\n this.registry.galleries[this.gallery.name]\n .pipe(takeUntil(this._destroy$))\n .subscribe((gallery) => {\n\n /**\n * Clear out the slot for the dynamically rendered thumbnail\n */\n this.slot.clear();\n\n const _selectedThumbnail = gallery.thumbnails.filter(media => media.selected).shift();\n\n /**\n * If there's no selected media, render nothing.\n */\n if(!_selectedThumbnail) {\n return;\n }\n\n const _selectedThumbnailComponent = _selectedThumbnail.component;\n\n /**\n * Create the component to insert.\n */\n const component = this.componentFactoryResolver.resolveComponentFactory(\n <Type<unknown>>_selectedThumbnailComponent.constructor,\n );\n const componentRef = this.slot.createComponent(component);\n\n /**\n * Fill the component with it's values from the original component\n */\n component.inputs.forEach(input => {\n componentRef.instance[input.propName] = _selectedThumbnailComponent[input.propName];\n });\n\n /**\n * Trigger a change detection on the component tree, outside the cycle to address\n * the fact that the component was created outside a typical CD loop.\n */\n componentRef.changeDetectorRef.detectChanges();\n });\n }\n\n /**\n * Used to unsubscribe from the dynamic component.\n */\n ngOnDestroy() {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n }\n}\n\n","import { createSingleInjectionToken } from '@daffodil/core';\n\nexport const {\n /**\n * A multi provider injection token that marks a component as renderable for the `DaffMediaRendererComponent`.\n */\n token: daffThumbnailCompatToken,\n /**\n * Provider function for {@link daffThumbnailCompatToken}.\n */\n provider: provideDaffThumbnailCompatToken,\n} = createSingleInjectionToken<unknown>('thumbnailCompatToken');\n","import {\n Directive,\n Inject,\n Type,\n HostBinding,\n HostListener,\n OnInit,\n OnDestroy,\n} from '@angular/core';\n\nimport { DaffSelectableDirective } from '@daffodil/design';\n\nimport { daffThumbnailCompatToken } from './thumbnail-compat.token';\nimport { DaffThumbnailRegistration } from './thumbnail-registration.interface';\nimport { DaffMediaGalleryRegistration } from '../helpers/media-gallery-registration.interface';\nimport { DAFF_MEDIA_GALLERY_TOKEN } from '../helpers/media-gallery-token';\nimport { DaffMediaGalleryRegistry } from '../registry/media-gallery.registry';\n\n/**\n * A directive marking thumbnails for the `DaffMediaRendererComponent`. Needs to be wrapped in a `daff-media-gallery` component\n * and needs to be placed on a component that is provided as a `daffThumbnailCompatToken`.\n */\n@Directive({\n selector: '[daffThumbnail]',\n standalone: true,\n hostDirectives: [{\n directive: DaffSelectableDirective,\n inputs: ['selected'],\n outputs: ['becameSelected'],\n }],\n})\nexport class DaffThumbnailDirective implements OnInit, OnDestroy, DaffThumbnailRegistration {\n constructor(\n @Inject(daffThumbnailCompatToken) public component: Type<unknown>,\n private registry: DaffMediaGalleryRegistry,\n @Inject(DAFF_MEDIA_GALLERY_TOKEN) public gallery: DaffMediaGalleryRegistration,\n private selectedDirective: DaffSelectableDirective,\n ) {}\n\n public get selected() {\n return this.selectedDirective.selected;\n }\n\n public select() {\n this.selectedDirective.select();\n return this;\n }\n\n public deselect() {\n this.selectedDirective.deselect();\n return this;\n }\n\n /**\n * Adds a class for styling a thumbnail\n */\n @HostBinding('class.daff-thumbnail') class = true;\n\n /**\n * Adds a click event to trigger selection of the media element.\n *\n * @param event: MouseEvent\n */\n @HostListener('click', ['$event']) onClick($event: MouseEvent) {\n this.registry.select(this);\n }\n\n ngOnInit(): void {\n this.registry.add(this.gallery, this);\n }\n\n ngOnDestroy(): void {\n this.registry.remove(this);\n }\n}\n","import {\n Component,\n HostBinding,\n ChangeDetectionStrategy,\n Input,\n OnInit,\n OnDestroy,\n} from '@angular/core';\n\nimport {\n DaffArticleEncapsulatedDirective,\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 { DaffMediaRendererComponent } from '../media-renderer/media-renderer.component';\nimport { DaffMediaGalleryRegistry } from '../registry/media-gallery.registry';\nimport { DaffThumbnailDirective } from '../thumbnail/thumbnail.directive';\n\nlet uniqueGalleryId = 0;\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 // eslint-disable-next-line @typescript-eslint/no-use-before-define\n { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },\n ],\n hostDirectives: [\n { directive: DaffArticleEncapsulatedDirective },\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n imports: [\n DaffMediaRendererComponent,\n DaffThumbnailDirective,\n ],\n})\nexport class DaffMediaGalleryComponent implements DaffMediaGalleryRegistration, OnInit, OnDestroy {\n /**\n * Adds a class for styling the media gallery\n */\n @HostBinding('class.daff-media-gallery') class = true;\n\n /**\n * The name of the gallery\n */\n @Input() name = `${uniqueGalleryId}`;\n\n constructor(private registry: DaffMediaGalleryRegistry) {\n uniqueGalleryId++;\n }\n\n ngOnInit() {\n this.registry.add(this);\n }\n\n ngOnDestroy() {\n this.registry.remove(this);\n }\n}\n","<div class=\"daff-media-gallery__thumbnails\">\n\t<ng-content select=\"[daffThumbnail]\"></ng-content>\n</div>\n<div class=\"daff-media-gallery__selected-thumbnail\">\n\t<daff-media-renderer></daff-media-renderer>\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffMediaRendererComponent } from './media-renderer/media-renderer.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 DaffMediaRendererComponent,\n ],\n exports: [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n ],\n})\nexport class DaffMediaGalleryModule {}\n","import { DaffMediaGalleryComponent } from './media-gallery/media-gallery.component';\nimport { DaffMediaRendererComponent } from './media-renderer/media-renderer.component';\nimport { DaffThumbnailDirective } from './thumbnail/thumbnail.directive';\n\nexport const DAFF_MEDIA_GALLERY_COMPONENTS = <const> [\n DaffMediaGalleryComponent,\n DaffThumbnailDirective,\n DaffMediaRendererComponent,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DaffMediaGalleryRegistry"],"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 * A structural directive marking thumbnails for 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 /**\n * The id of the thumbnail.\n */\n get id(): string {\n return this.gallery.id + '-thumbnail-' + uniqueThumbnailId;\n }\n\n /**\n * The id of the thumbnail panel.\n */\n get panelId(): string {\n return this.id + '-el';\n }\n\n /**\n * The file path to a thumbnail, presumably an image.\n */\n @Input() thumbnailSrc = undefined;\n\n\n /**\n * The button label for the thumbnail.\n */\n @Input() label: string = undefined;\n\n @Input() isVideo = false;\n\n /**\n * @docs-private\n */\n constructor(\n @Inject(DAFF_MEDIA_GALLERY_TOKEN) public gallery: DaffMediaGalleryRegistration,\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","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n HostBinding,\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 * ```html\n * <daff-media-gallery></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 // eslint-disable-next-line @typescript-eslint/no-use-before-define\n { provide: DAFF_MEDIA_GALLERY_TOKEN, useExisting: DaffMediaGalleryComponent },\n ],\n hostDirectives: [\n { directive: DaffArticleEncapsulatedDirective },\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n imports: [\n DaffThumbnailDirective,\n NgTemplateOutlet,\n DaffSelectableDirective,\n ],\n})\nexport class DaffMediaGalleryComponent implements DaffMediaGalleryRegistration {\n\n /**\n * @docs-private\n */\n @HostBinding('attr.role') role = 'tablist';\n\n /**\n * The internal id of the gallery.\n */\n private _id: string;\n\n /**\n * The id of the gallery.\n */\n @HostBinding('attr.id')\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 * @docs-private\n *\n * Adds a class for styling the media gallery\n */\n @HostBinding('class.daff-media-gallery') private class = true;\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\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 (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 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 this.focusSelected();\n }\n\n /**\n * Navigate to the previous element in the list of thumbnails.\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 this.focusSelected();\n }\n\n /**\n * Select the first element\n */\n selectFirst(focus: boolean = true) {\n this._selectedIndex.set(0);\n this.elementChange.emit(this._selectedIndex());\n this.focusSelected();\n }\n\n /**\n * Select the last element of the gallery.\n */\n selectLast(focus: boolean = true) {\n this._selectedIndex.set(this._thumbnails().length - 1);\n this.elementChange.emit(this._selectedIndex());\n this.focusSelected();\n }\n}\n","<ng-content></ng-content>\n\n<div class=\"daff-media-gallery__thumbnails\" #thumbnailsEl>\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.panelId\"\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 el = this._selectedThumbnail();\n<div \n\tclass=\"daff-media-gallery__selected-thumbnail\"\n\ttabindex=\"0\"\n\t#selectedThumbnail\n\trole=\"tabpanel\"\n\t[attr.id]=\"el?.panelId\">\n\t\t@if(el) {\n\t\t\t<ng-container *ngTemplateOutlet=\"el.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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"}