@daffodil/design 0.89.0 → 0.91.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 (209) hide show
  1. package/README.md +1 -0
  2. package/accordion/index.d.ts +8 -5
  3. package/article/README.md +1 -1
  4. package/article/index.d.ts +20 -0
  5. package/article/src/article-theme.scss +10 -0
  6. package/button/index.d.ts +4 -4
  7. package/button/src/button/button-base.scss +3 -3
  8. package/button/src/button/raised/raised-theme.scss +6 -16
  9. package/card/README.md +0 -8
  10. package/card/index.d.ts +7 -41
  11. package/card/src/card-base-theme.scss +2 -5
  12. package/card/src/card-base.scss +2 -2
  13. package/checkbox/README.md +0 -0
  14. package/checkbox/index.d.ts +177 -0
  15. package/fesm2022/daffodil-design-accordion.mjs +23 -14
  16. package/fesm2022/daffodil-design-accordion.mjs.map +1 -1
  17. package/fesm2022/daffodil-design-article.mjs +129 -5
  18. package/fesm2022/daffodil-design-article.mjs.map +1 -1
  19. package/fesm2022/daffodil-design-button.mjs +24 -20
  20. package/fesm2022/daffodil-design-button.mjs.map +1 -1
  21. package/fesm2022/daffodil-design-card.mjs +16 -63
  22. package/fesm2022/daffodil-design-card.mjs.map +1 -1
  23. package/fesm2022/daffodil-design-checkbox.mjs +317 -0
  24. package/fesm2022/daffodil-design-checkbox.mjs.map +1 -0
  25. package/fesm2022/daffodil-design-form-field.mjs +55 -162
  26. package/fesm2022/daffodil-design-form-field.mjs.map +1 -1
  27. package/fesm2022/daffodil-design-form.mjs +62 -0
  28. package/fesm2022/daffodil-design-form.mjs.map +1 -0
  29. package/fesm2022/daffodil-design-image.mjs +12 -4
  30. package/fesm2022/daffodil-design-image.mjs.map +1 -1
  31. package/fesm2022/daffodil-design-modal.mjs +55 -56
  32. package/fesm2022/daffodil-design-modal.mjs.map +1 -1
  33. package/fesm2022/daffodil-design-notification.mjs +14 -50
  34. package/fesm2022/daffodil-design-notification.mjs.map +1 -1
  35. package/fesm2022/daffodil-design-paginator.mjs +6 -11
  36. package/fesm2022/daffodil-design-paginator.mjs.map +1 -1
  37. package/fesm2022/daffodil-design-quantity-field.mjs +3 -5
  38. package/fesm2022/daffodil-design-quantity-field.mjs.map +1 -1
  39. package/fesm2022/daffodil-design-radio.mjs +304 -0
  40. package/fesm2022/daffodil-design-radio.mjs.map +1 -0
  41. package/fesm2022/daffodil-design-select.mjs +2 -2
  42. package/fesm2022/daffodil-design-select.mjs.map +1 -1
  43. package/fesm2022/daffodil-design-sidebar.mjs +6 -36
  44. package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
  45. package/fesm2022/daffodil-design-switch.mjs +48 -105
  46. package/fesm2022/daffodil-design-switch.mjs.map +1 -1
  47. package/fesm2022/daffodil-design-tabs.mjs +22 -14
  48. package/fesm2022/daffodil-design-tabs.mjs.map +1 -1
  49. package/fesm2022/daffodil-design-tag.mjs +131 -0
  50. package/fesm2022/daffodil-design-tag.mjs.map +1 -0
  51. package/fesm2022/daffodil-design-toast.mjs +56 -55
  52. package/fesm2022/daffodil-design-toast.mjs.map +1 -1
  53. package/fesm2022/daffodil-design-tree.mjs +4 -13
  54. package/fesm2022/daffodil-design-tree.mjs.map +1 -1
  55. package/fesm2022/daffodil-design.mjs +250 -774
  56. package/fesm2022/daffodil-design.mjs.map +1 -1
  57. package/form/README.md +75 -0
  58. package/form/index.d.ts +27 -0
  59. package/form-field/README.md +49 -39
  60. package/form-field/index.d.ts +58 -76
  61. package/image/README.md +27 -19
  62. package/image/index.d.ts +6 -1
  63. package/index.d.ts +180 -424
  64. package/input/README.md +32 -12
  65. package/modal/README.md +106 -16
  66. package/modal/index.d.ts +50 -21
  67. package/native-select/README.md +52 -15
  68. package/notification/index.d.ts +7 -38
  69. package/package.json +1 -1
  70. package/paginator/index.d.ts +1 -7
  71. package/radio/README.md +52 -0
  72. package/radio/index.d.ts +160 -0
  73. package/scss/core/error/error-to-string.scss +6 -6
  74. package/scss/core/map/map-get/map-get.scss +3 -3
  75. package/scss/layout/_breakpoint.scss +1 -1
  76. package/scss/theme.scss +4 -4
  77. package/scss/theming/_color-palettes.scss +21 -7
  78. package/scss/theming/_configure-theme.scss +11 -10
  79. package/scss/theming/_daff-theme.scss +5 -14
  80. package/scss/theming/_get-base-color.scss +2 -2
  81. package/scss/theming/_get-palette.scss +2 -2
  82. package/scss/theming/_get-theme-mode.scss +3 -3
  83. package/scss/theming/_index.scss +2 -1
  84. package/scss/theming/contrast/_index.scss +1 -0
  85. package/scss/theming/contrast/max-contrast/max-contrast.scss +47 -0
  86. package/scss/theming/contrast/max-contrast/max-contrast.spec.scss +57 -0
  87. package/scss/theming/contrast/text-contrast/text-contrast.scss +22 -16
  88. package/scss/theming/contrast/text-contrast/text-contrast.spec.scss +57 -0
  89. package/scss/theming/create-theme/_create-theme.scss +330 -0
  90. package/scss/theming/create-theme/_create-theme.spec.scss +122 -0
  91. package/scss/theming/create-theme/_index.scss +1 -0
  92. package/scss/theming/get-font-colors/_get-font-colors.scss +36 -0
  93. package/scss/theming/get-font-colors/_get-font-colors.spec.scss +72 -0
  94. package/scss/typography/mixins/_font-weight.scss +8 -14
  95. package/select/README.md +107 -4
  96. package/sidebar/README.md +0 -8
  97. package/sidebar/index.d.ts +3 -15
  98. package/switch/README.md +19 -27
  99. package/switch/index.d.ts +18 -48
  100. package/switch/src/switch-theme.scss +26 -18
  101. package/tabs/index.d.ts +7 -4
  102. package/tag/README.md +87 -0
  103. package/tag/index.d.ts +71 -0
  104. package/tag/src/tag-theme.scss +137 -0
  105. package/textarea/README.md +35 -5
  106. package/tree/index.d.ts +0 -6
  107. package/tree/src/tree-theme.scss +0 -4
  108. package/accordion/examples/index.d.ts +0 -20
  109. package/article/examples/index.d.ts +0 -50
  110. package/breadcrumb/examples/index.d.ts +0 -10
  111. package/button/examples/index.d.ts +0 -67
  112. package/callout/examples/index.d.ts +0 -41
  113. package/card/examples/index.d.ts +0 -62
  114. package/card/src/card/raised/raised-theme.scss +0 -28
  115. package/checkbox/examples/index.d.ts +0 -32
  116. package/container/examples/index.d.ts +0 -16
  117. package/fesm2022/daffodil-design-accordion-examples.mjs +0 -50
  118. package/fesm2022/daffodil-design-accordion-examples.mjs.map +0 -1
  119. package/fesm2022/daffodil-design-article-examples.mjs +0 -134
  120. package/fesm2022/daffodil-design-article-examples.mjs.map +0 -1
  121. package/fesm2022/daffodil-design-breadcrumb-examples.mjs +0 -46
  122. package/fesm2022/daffodil-design-breadcrumb-examples.mjs.map +0 -1
  123. package/fesm2022/daffodil-design-button-examples.mjs +0 -178
  124. package/fesm2022/daffodil-design-button-examples.mjs.map +0 -1
  125. package/fesm2022/daffodil-design-callout-examples.mjs +0 -116
  126. package/fesm2022/daffodil-design-callout-examples.mjs.map +0 -1
  127. package/fesm2022/daffodil-design-card-examples.mjs +0 -168
  128. package/fesm2022/daffodil-design-card-examples.mjs.map +0 -1
  129. package/fesm2022/daffodil-design-checkbox-examples.mjs +0 -76
  130. package/fesm2022/daffodil-design-checkbox-examples.mjs.map +0 -1
  131. package/fesm2022/daffodil-design-container-examples.mjs +0 -41
  132. package/fesm2022/daffodil-design-container-examples.mjs.map +0 -1
  133. package/fesm2022/daffodil-design-form-field-examples.mjs +0 -96
  134. package/fesm2022/daffodil-design-form-field-examples.mjs.map +0 -1
  135. package/fesm2022/daffodil-design-hero-examples.mjs +0 -121
  136. package/fesm2022/daffodil-design-hero-examples.mjs.map +0 -1
  137. package/fesm2022/daffodil-design-image-examples.mjs +0 -58
  138. package/fesm2022/daffodil-design-image-examples.mjs.map +0 -1
  139. package/fesm2022/daffodil-design-input-examples.mjs +0 -108
  140. package/fesm2022/daffodil-design-input-examples.mjs.map +0 -1
  141. package/fesm2022/daffodil-design-list-examples.mjs +0 -77
  142. package/fesm2022/daffodil-design-list-examples.mjs.map +0 -1
  143. package/fesm2022/daffodil-design-loading-icon-examples.mjs +0 -44
  144. package/fesm2022/daffodil-design-loading-icon-examples.mjs.map +0 -1
  145. package/fesm2022/daffodil-design-media-gallery-examples.mjs +0 -104
  146. package/fesm2022/daffodil-design-media-gallery-examples.mjs.map +0 -1
  147. package/fesm2022/daffodil-design-menu-examples.mjs +0 -50
  148. package/fesm2022/daffodil-design-menu-examples.mjs.map +0 -1
  149. package/fesm2022/daffodil-design-modal-examples.mjs +0 -51
  150. package/fesm2022/daffodil-design-modal-examples.mjs.map +0 -1
  151. package/fesm2022/daffodil-design-native-select-examples.mjs +0 -71
  152. package/fesm2022/daffodil-design-native-select-examples.mjs.map +0 -1
  153. package/fesm2022/daffodil-design-navbar-examples.mjs +0 -88
  154. package/fesm2022/daffodil-design-navbar-examples.mjs.map +0 -1
  155. package/fesm2022/daffodil-design-notification-examples.mjs +0 -102
  156. package/fesm2022/daffodil-design-notification-examples.mjs.map +0 -1
  157. package/fesm2022/daffodil-design-paginator-examples.mjs +0 -59
  158. package/fesm2022/daffodil-design-paginator-examples.mjs.map +0 -1
  159. package/fesm2022/daffodil-design-progress-bar-examples.mjs +0 -57
  160. package/fesm2022/daffodil-design-progress-bar-examples.mjs.map +0 -1
  161. package/fesm2022/daffodil-design-quantity-field-examples.mjs +0 -85
  162. package/fesm2022/daffodil-design-quantity-field-examples.mjs.map +0 -1
  163. package/fesm2022/daffodil-design-radio-examples.mjs +0 -31
  164. package/fesm2022/daffodil-design-radio-examples.mjs.map +0 -1
  165. package/fesm2022/daffodil-design-select-examples.mjs +0 -117
  166. package/fesm2022/daffodil-design-select-examples.mjs.map +0 -1
  167. package/fesm2022/daffodil-design-sidebar-examples.mjs +0 -109
  168. package/fesm2022/daffodil-design-sidebar-examples.mjs.map +0 -1
  169. package/fesm2022/daffodil-design-sticky-examples.mjs +0 -25
  170. package/fesm2022/daffodil-design-sticky-examples.mjs.map +0 -1
  171. package/fesm2022/daffodil-design-switch-examples.mjs +0 -110
  172. package/fesm2022/daffodil-design-switch-examples.mjs.map +0 -1
  173. package/fesm2022/daffodil-design-tabs-examples.mjs +0 -115
  174. package/fesm2022/daffodil-design-tabs-examples.mjs.map +0 -1
  175. package/fesm2022/daffodil-design-text-snippet-examples.mjs +0 -25
  176. package/fesm2022/daffodil-design-text-snippet-examples.mjs.map +0 -1
  177. package/fesm2022/daffodil-design-textarea-examples.mjs +0 -66
  178. package/fesm2022/daffodil-design-textarea-examples.mjs.map +0 -1
  179. package/fesm2022/daffodil-design-toast-examples.mjs +0 -147
  180. package/fesm2022/daffodil-design-toast-examples.mjs.map +0 -1
  181. package/fesm2022/daffodil-design-tree-examples.mjs +0 -104
  182. package/fesm2022/daffodil-design-tree-examples.mjs.map +0 -1
  183. package/form-field/examples/index.d.ts +0 -18
  184. package/hero/examples/index.d.ts +0 -45
  185. package/image/examples/index.d.ts +0 -10
  186. package/input/examples/index.d.ts +0 -10
  187. package/list/examples/index.d.ts +0 -29
  188. package/loading-icon/examples/index.d.ts +0 -16
  189. package/media-gallery/examples/index.d.ts +0 -38
  190. package/menu/examples/index.d.ts +0 -20
  191. package/modal/examples/index.d.ts +0 -15
  192. package/native-select/examples/index.d.ts +0 -10
  193. package/navbar/examples/index.d.ts +0 -31
  194. package/notification/examples/index.d.ts +0 -12
  195. package/paginator/examples/index.d.ts +0 -26
  196. package/progress-bar/examples/index.d.ts +0 -10
  197. package/quantity-field/examples/index.d.ts +0 -30
  198. package/radio/examples/index.d.ts +0 -13
  199. package/select/examples/index.d.ts +0 -28
  200. package/sidebar/examples/index.d.ts +0 -10
  201. package/sticky/examples/index.d.ts +0 -10
  202. package/switch/examples/index.d.ts +0 -46
  203. package/tabs/examples/index.d.ts +0 -12
  204. package/text-snippet/examples/index.d.ts +0 -10
  205. package/textarea/examples/index.d.ts +0 -10
  206. package/toast/examples/index.d.ts +0 -56
  207. package/tree/examples/index.d.ts +0 -18
  208. /package/{form-field → form}/src/error-message/error-message-theme.scss +0 -0
  209. /package/{form-field → form}/src/hint/hint-theme.scss +0 -0
@@ -1,6 +1,6 @@
1
- import { CommonModule } from '@angular/common';
1
+ import { NgOptimizedImage, CommonModule } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
+ import { input, EventEmitter, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
4
4
  import * as i1 from '@angular/platform-browser';
5
5
  import * as i2 from '@daffodil/design';
6
6
  import { DaffSkeletonableDirective } from '@daffodil/design';
@@ -73,6 +73,11 @@ class DaffImageComponent {
73
73
  }
74
74
  constructor(sanitizer) {
75
75
  this.sanitizer = sanitizer;
76
+ /**
77
+ * Whether the image should be treated as a priority image for loading.
78
+ * Priority images are loaded eagerly and not lazy-loaded.
79
+ */
80
+ this.priority = input(false, ...(ngDevMode ? [{ debugName: "priority" }] : []));
76
81
  /**
77
82
  * Emits when the image has loaded.
78
83
  */
@@ -98,7 +103,7 @@ class DaffImageComponent {
98
103
  return this.sanitizer.bypassSecurityTrustStyle(this.width + ' / ' + this.height);
99
104
  }
100
105
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffImageComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
101
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: DaffImageComponent, isStandalone: true, selector: "daff-image", inputs: { src: "src", alt: "alt", width: "width", height: "height" }, outputs: { load: "load" }, host: { properties: { "style.max-width": "width + \"px\"" } }, hostDirectives: [{ directive: i2.DaffSkeletonableDirective, inputs: ["skeleton", "skeleton"] }], ngImport: i0, template: "<img class=\"daff-image\" [src]=\"src\" [alt]=\"alt\" (load)=\"load.emit\" loading=\"lazy\" [style.aspectRatio]=\"_aspectRatio\"/>", styles: [":host{display:block;border-radius:inherit;position:relative;width:100%}:host.daff-skeleton{display:flex;position:relative;height:100%;width:100%;border-radius:0}:host.daff-skeleton: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-skeleton img{opacity:0}:host img{display:block;object-fit:cover;max-width:100%;max-height:100%;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
106
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: DaffImageComponent, isStandalone: true, selector: "daff-image", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: false, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: false, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: false, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: false, isRequired: false, transformFunction: null }, priority: { classPropertyName: "priority", publicName: "priority", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { load: "load" }, host: { properties: { "style.max-width": "width + \"px\"", "style.aspect-ratio": "_aspectRatio" } }, hostDirectives: [{ directive: i2.DaffSkeletonableDirective, inputs: ["skeleton", "skeleton"] }], ngImport: i0, template: "<img class=\"daff-image\"\n\t[ngSrc]=\"src\"\n\t[alt]=\"alt\"\n\tfill\n\t[priority]=\"priority\"\n\t(load)=\"load.emit\" />", styles: [":host{display:block;border-radius:inherit;position:relative;width:100%}:host.daff-skeleton{display:flex;position:relative;height:100%;width:100%;border-radius:0}:host.daff-skeleton: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-skeleton img{opacity:0}:host img{display:block;object-fit:cover;max-width:100%;max-height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
107
  }
103
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffImageComponent, decorators: [{
104
109
  type: Component,
@@ -109,7 +114,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
109
114
  },
110
115
  ], host: {
111
116
  '[style.max-width]': 'width + "px"',
112
- }, template: "<img class=\"daff-image\" [src]=\"src\" [alt]=\"alt\" (load)=\"load.emit\" loading=\"lazy\" [style.aspectRatio]=\"_aspectRatio\"/>", styles: [":host{display:block;border-radius:inherit;position:relative;width:100%}:host.daff-skeleton{display:flex;position:relative;height:100%;width:100%;border-radius:0}:host.daff-skeleton: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-skeleton img{opacity:0}:host img{display:block;object-fit:cover;max-width:100%;max-height:100%;width:100%}\n"] }]
117
+ '[style.aspect-ratio]': '_aspectRatio',
118
+ }, imports: [
119
+ NgOptimizedImage,
120
+ ], template: "<img class=\"daff-image\"\n\t[ngSrc]=\"src\"\n\t[alt]=\"alt\"\n\tfill\n\t[priority]=\"priority\"\n\t(load)=\"load.emit\" />", styles: [":host{display:block;border-radius:inherit;position:relative;width:100%}:host.daff-skeleton{display:flex;position:relative;height:100%;width:100%;border-radius:0}:host.daff-skeleton: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-skeleton img{opacity:0}:host img{display:block;object-fit:cover;max-width:100%;max-height:100%;width:100%}\n"] }]
113
121
  }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { src: [{
114
122
  type: Input
115
123
  }], alt: [{
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-design-image.mjs","sources":["../../../libs/design/image/src/image/image.component.ts","../../../libs/design/image/src/image/image.component.html","../../../libs/design/image/src/image.module.ts","../../../libs/design/image/src/image.ts","../../../libs/design/image/src/daffodil-design-image.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n Input,\n EventEmitter,\n OnInit,\n Output,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeStyle,\n} from '@angular/platform-browser';\n\nimport { DaffSkeletonableDirective } from '@daffodil/design';\n\nconst validateProperty = (object: Record<string, any>, prop: string) => {\n if (object[prop] === null || object[prop] === undefined || object[prop] === '') {\n throw new Error(`DaffImageComponent must have a defined ${prop} attribute.`);\n }\n};\n\nconst validateProperties = (object: Record<string, any>, props: string[]) => {\n const invalidProps = props.filter(prop => {\n try {\n validateProperty(object, prop);\n } catch(e) {\n return true;\n }\n return false;\n });\n\n if (invalidProps.length) {\n throw new Error(`DaffImageComponent must have the ${invalidProps.join(',')} attributes defined.`);\n }\n};\n\n@Component({\n selector: 'daff-image',\n templateUrl: './image.component.html',\n styleUrls: ['./image.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n host: {\n '[style.max-width]': 'width + \"px\"',\n },\n})\nexport class DaffImageComponent implements OnInit {\n private _src: string;\n\n /**\n * The URL of the image.\n */\n @Input()\n get src(): string {\n return this._src;\n }\n set src(value: string) {\n this._src = value;\n validateProperty(this, 'src');\n }\n\n private _alt: string;\n\n /**\n * The alternate text for the image.\n */\n @Input()\n get alt(): string {\n return this._alt;\n }\n set alt(value: string) {\n this._alt = value;\n validateProperty(this, 'alt');\n }\n\n private _width: number;\n\n /**\n * The width of the image.\n */\n @Input()\n get width(): number {\n return this._width;\n }\n set width(value: number) {\n this._width = value;\n validateProperty(this, 'width');\n }\n\n private _height: number;\n\n /**\n * The height of the image.\n */\n @Input()\n get height(): number {\n return this._height;\n }\n set height(value: number) {\n this._height = value;\n validateProperty(this, 'height');\n }\n\n /**\n * Emits when the image has loaded.\n */\n // TODO: rename event to not collide with native event (unless that's intentional)\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() load: EventEmitter<void> = new EventEmitter();\n\n /**\n * @docs-private\n */\n ngOnInit(): void {\n validateProperties(this, ['src', 'alt', 'width', 'height']);\n }\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * @docs-private\n */\n get _paddingTop(): any {\n if (!this.height || !this.width ) {\n return undefined;\n }\n\n return this.sanitizer.bypassSecurityTrustStyle('calc(' + this.height + ' / ' + this.width + ' * 100%)');\n }\n\n /**\n * @docs-private\n *\n * The aspect ratio of an image, based on the width and height set by the user.\n */\n get _aspectRatio(): SafeStyle {\n return this.sanitizer.bypassSecurityTrustStyle(this.width + ' / ' + this.height);\n }\n}\n","<img class=\"daff-image\" [src]=\"src\" [alt]=\"alt\" (load)=\"load.emit\" loading=\"lazy\" [style.aspectRatio]=\"_aspectRatio\"/>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffImageComponent } from './image/image.component';\n\n/**\n * @deprecated in favor of {@link DAFF_IMAGE_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n * */\n@NgModule({\n imports: [\n CommonModule,\n DaffImageComponent,\n ],\n exports: [\n DaffImageComponent,\n ],\n})\nexport class DaffImageModule { }\n","import { DaffImageComponent } from './image/image.component';\n\n/**\n * @docs-private\n */\nexport const DAFF_IMAGE_COMPONENTS = <const> [\n DaffImageComponent,\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-image.mjs","sources":["../../../libs/design/image/src/image/image.component.ts","../../../libs/design/image/src/image/image.component.html","../../../libs/design/image/src/image.module.ts","../../../libs/design/image/src/image.ts","../../../libs/design/image/src/daffodil-design-image.ts"],"sourcesContent":["import { NgOptimizedImage } from '@angular/common';\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n EventEmitter,\n OnInit,\n Output,\n input,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeStyle,\n} from '@angular/platform-browser';\n\nimport { DaffSkeletonableDirective } from '@daffodil/design';\n\nconst validateProperty = (object: Record<string, any>, prop: string) => {\n if (object[prop] === null || object[prop] === undefined || object[prop] === '') {\n throw new Error(`DaffImageComponent must have a defined ${prop} attribute.`);\n }\n};\n\nconst validateProperties = (object: Record<string, any>, props: string[]) => {\n const invalidProps = props.filter(prop => {\n try {\n validateProperty(object, prop);\n } catch(e) {\n return true;\n }\n return false;\n });\n\n if (invalidProps.length) {\n throw new Error(`DaffImageComponent must have the ${invalidProps.join(',')} attributes defined.`);\n }\n};\n\n@Component({\n selector: 'daff-image',\n templateUrl: './image.component.html',\n styleUrls: ['./image.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: DaffSkeletonableDirective,\n inputs: ['skeleton'],\n },\n ],\n host: {\n '[style.max-width]': 'width + \"px\"',\n '[style.aspect-ratio]': '_aspectRatio',\n },\n imports: [\n NgOptimizedImage,\n ],\n})\nexport class DaffImageComponent implements OnInit {\n private _src: string;\n\n /**\n * The URL of the image.\n */\n @Input()\n get src(): string {\n return this._src;\n }\n set src(value: string) {\n this._src = value;\n validateProperty(this, 'src');\n }\n\n private _alt: string;\n\n /**\n * The alternate text for the image.\n */\n @Input()\n get alt(): string {\n return this._alt;\n }\n set alt(value: string) {\n this._alt = value;\n validateProperty(this, 'alt');\n }\n\n private _width: number;\n\n /**\n * The width of the image.\n */\n @Input()\n get width(): number {\n return this._width;\n }\n set width(value: number) {\n this._width = value;\n validateProperty(this, 'width');\n }\n\n private _height: number;\n\n /**\n * The height of the image.\n */\n @Input()\n get height(): number {\n return this._height;\n }\n set height(value: number) {\n this._height = value;\n validateProperty(this, 'height');\n }\n\n /**\n * Whether the image should be treated as a priority image for loading.\n * Priority images are loaded eagerly and not lazy-loaded.\n */\n priority = input(false);\n\n /**\n * Emits when the image has loaded.\n */\n // TODO: rename event to not collide with native event (unless that's intentional)\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() load: EventEmitter<void> = new EventEmitter();\n\n /**\n * @docs-private\n */\n ngOnInit(): void {\n validateProperties(this, ['src', 'alt', 'width', 'height']);\n }\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * @docs-private\n */\n get _paddingTop(): any {\n if (!this.height || !this.width ) {\n return undefined;\n }\n\n return this.sanitizer.bypassSecurityTrustStyle('calc(' + this.height + ' / ' + this.width + ' * 100%)');\n }\n\n /**\n * @docs-private\n *\n * The aspect ratio of an image, based on the width and height set by the user.\n */\n get _aspectRatio(): SafeStyle {\n return this.sanitizer.bypassSecurityTrustStyle(this.width + ' / ' + this.height);\n }\n}\n","<img class=\"daff-image\"\n\t[ngSrc]=\"src\"\n\t[alt]=\"alt\"\n\tfill\n\t[priority]=\"priority\"\n\t(load)=\"load.emit\" />","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DaffImageComponent } from './image/image.component';\n\n/**\n * @deprecated in favor of {@link DAFF_IMAGE_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n * */\n@NgModule({\n imports: [\n CommonModule,\n DaffImageComponent,\n ],\n exports: [\n DaffImageComponent,\n ],\n})\nexport class DaffImageModule { }\n","import { DaffImageComponent } from './image/image.component';\n\n/**\n * @docs-private\n */\nexport const DAFF_IMAGE_COMPONENTS = <const> [\n DaffImageComponent,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -4,27 +4,16 @@ import { GlobalPositionStrategy, OverlayModule } from '@angular/cdk/overlay';
4
4
  import * as i4 from '@angular/cdk/portal';
5
5
  import { ComponentPortal, PortalModule, CdkPortalOutlet } from '@angular/cdk/portal';
6
6
  import * as i0 from '@angular/core';
7
- import { Injector, Injectable, EventEmitter, HostListener, HostBinding, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, Optional, Directive, Input, NgModule } from '@angular/core';
7
+ import { Injector, Injectable, signal, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, Optional, Directive, Input, NgModule } from '@angular/core';
8
8
  import { Subject } from 'rxjs';
9
+ import { take, delay } from 'rxjs/operators';
9
10
  import * as i3 from '@daffodil/design';
10
11
  import { daffFocusableElementsSelector, DaffOpenableDirective } from '@daffodil/design';
11
- import { trigger, state, transition, style, animate } from '@angular/animations';
12
- import { take } from 'rxjs/operators';
13
12
  import { CommonModule } from '@angular/common';
14
13
  import { FaIconComponent, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
15
14
  import { DaffIconButtonComponent, DaffButtonModule } from '@daffodil/design/button';
16
15
  import { faXmark } from '@fortawesome/free-solid-svg-icons';
17
16
 
18
- const daffFadeAnimations = {
19
- fade: trigger('fade', [
20
- state('open', style({ opacity: 1 })),
21
- state('closed', style({ opacity: 0 })),
22
- transition('open <=> closed', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),
23
- ]),
24
- };
25
-
26
- const getAnimationState = (open) => open ? 'open' : 'closed';
27
-
28
17
  class DaffModalService {
29
18
  constructor(overlay) {
30
19
  this.overlay = overlay;
@@ -44,12 +33,24 @@ class DaffModalService {
44
33
  _attachModalContent(component, modal) {
45
34
  modal.instance.attachContent(new ComponentPortal(component));
46
35
  }
47
- _createOverlayRef() {
36
+ _createPositionStrategy(position) {
37
+ // Horizontal position is always center
38
+ const strategy = new GlobalPositionStrategy().centerHorizontally();
39
+ // Handle vertical positioning
40
+ if (position?.vertical === 'top') {
41
+ strategy.top(position.offsetTop ?? '15vh');
42
+ }
43
+ else {
44
+ // Default to center
45
+ strategy.centerVertically();
46
+ }
47
+ return strategy;
48
+ }
49
+ _createOverlayRef(config) {
50
+ const positionStrategy = this._createPositionStrategy(config?.position);
48
51
  return this.overlay.create({
49
52
  hasBackdrop: true,
50
- positionStrategy: new GlobalPositionStrategy()
51
- .centerHorizontally()
52
- .centerVertically(),
53
+ positionStrategy,
53
54
  scrollStrategy: this.overlay.scrollStrategies.block(),
54
55
  });
55
56
  }
@@ -60,9 +61,14 @@ class DaffModalService {
60
61
  this._modals.delete(modal.modal.instance);
61
62
  modal.overlay.dispose();
62
63
  }
64
+ _closeAllModals() {
65
+ const modals = Array.from(this._modals.values());
66
+ modals.forEach((modal) => this.close(modal.modal.instance));
67
+ }
63
68
  open(component, configuration) {
69
+ this._closeAllModals();
64
70
  const config = { ...this.defaultConfiguration, ...configuration };
65
- const _ref = this._createOverlayRef();
71
+ const _ref = this._createOverlayRef(config);
66
72
  const _modal = this._attachModal(_ref);
67
73
  const _attachedModal = this._attachModalContent(component, _modal);
68
74
  if (configuration?.ariaLabelledBy) {
@@ -81,10 +87,10 @@ class DaffModalService {
81
87
  return modal.modal.instance;
82
88
  }
83
89
  close(component) {
84
- component.hide();
85
90
  const modal = this._modals.get(component);
86
91
  modal.overlay.detachBackdrop();
87
- component.closedAnimationCompleted$.pipe(take(1)).subscribe((e) => this._removeModal(modal));
92
+ component.closedAnimationCompleted$.pipe(take(1)).subscribe(() => this._removeModal(modal));
93
+ component.hide();
88
94
  }
89
95
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffModalService, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Injectable }); }
90
96
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffModalService }); }
@@ -93,7 +99,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
93
99
  type: Injectable
94
100
  }], ctorParameters: () => [{ type: i1.Overlay }] });
95
101
 
102
+ /* eslint-disable quote-props */
96
103
  class DaffModalComponent {
104
+ /**
105
+ * @docs-private
106
+ *
107
+ * By default, the `aria-labelledby` of the modal is set to the `id` of the modal title.
108
+ */
97
109
  get ariaLabelledBy() {
98
110
  return this._ariaLabelledBy;
99
111
  }
@@ -113,11 +125,8 @@ class DaffModalComponent {
113
125
  this.openDirective = openDirective;
114
126
  this._focusStack = _focusStack;
115
127
  this.changeDetector = changeDetector;
128
+ this.closing = signal(false, ...(ngDevMode ? [{ debugName: "closing" }] : []));
116
129
  this._ariaLabelledBy = null;
117
- /**
118
- * Event fired when the close animation is completed.
119
- */
120
- this.animationCompleted = new EventEmitter();
121
130
  /**
122
131
  * Private subject for closed animation completion events.
123
132
  */
@@ -125,7 +134,7 @@ class DaffModalComponent {
125
134
  /**
126
135
  * Observable that emits when the close animation is completed.
127
136
  */
128
- this.closedAnimationCompleted$ = this._closedAnimationCompleted.asObservable();
137
+ this.closedAnimationCompleted$ = this._closedAnimationCompleted.asObservable().pipe(delay(300));
129
138
  this.openDirective.stateless = false;
130
139
  }
131
140
  /**
@@ -151,52 +160,46 @@ class DaffModalComponent {
151
160
  }
152
161
  }
153
162
  /**
163
+ * @docs-private
164
+ *
154
165
  * Helper method to attach portable content to modal.
155
166
  */
156
167
  attachContent(portal) {
157
168
  const attachContent = this._portalOutlet.attachComponentPortal(portal);
158
169
  return attachContent;
159
170
  }
160
- /** Animation hook that controls the entrance and exit animations of the modal. */
161
- /**
162
- * @docs-private
163
- */
164
- get fadeState() {
165
- return getAnimationState(this.openDirective.open);
166
- }
167
171
  /**
168
- * Animation event that can used to hook into when
169
- * animations are fully completed. We use this in the DaffModalService
170
- * to determine when to actually remove the dynamically rendered element from the DOM
171
- * so that the animation does not clip as the element is removed.
172
+ * Tracks the open state of the modal.
172
173
  */
173
- animationDone(e) {
174
- this.animationCompleted.emit(e);
175
- if (e.toState === 'closed') {
176
- this._focusStack.pop();
177
- this._closedAnimationCompleted.next(e);
178
- this._closedAnimationCompleted.complete();
179
- }
180
- }
181
174
  get open() {
182
175
  return this.openDirective.open;
183
176
  }
184
177
  /**
185
- * Reveals the modal
178
+ * @docs-private
179
+ *
180
+ * Reveals the modal.
186
181
  */
187
182
  reveal() {
188
183
  this.openDirective.reveal();
189
184
  this.changeDetector.markForCheck();
190
185
  }
191
186
  /**
192
- * Hides the modal
187
+ * @docs-private
188
+ *
189
+ * Hides the modal.
193
190
  */
194
191
  hide() {
195
192
  this.openDirective.hide();
193
+ this.closing.set(true);
194
+ this._closedAnimationCompleted.next(true);
195
+ this._focusTrap?.destroy();
196
+ this._focusStack.pop();
196
197
  this.changeDetector.markForCheck();
197
198
  }
198
199
  /**
199
- * Toggles the visibility of the modal
200
+ * @docs-private
201
+ *
202
+ * Toggles the visibility of the modal.
200
203
  */
201
204
  toggle() {
202
205
  this.openDirective.toggle();
@@ -209,7 +212,7 @@ class DaffModalComponent {
209
212
  this._closedAnimationCompleted.complete();
210
213
  }
211
214
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffModalComponent, deps: [{ token: DaffModalService }, { token: i2.ConfigurableFocusTrapFactory }, { token: i0.ElementRef }, { token: i3.DaffOpenableDirective }, { token: i3.DaffFocusStackService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
212
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: DaffModalComponent, isStandalone: true, selector: "daff-modal", host: { attributes: { "role": "dialog", "aria-modal": "true" }, listeners: { "keydown.escape": "onEscape()", "@fade.done": "animationDone($event)" }, properties: { "attr.aria-labelledby": "ariaLabelledBy", "@fade": "this.fadeState" }, classAttribute: "daff-modal" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], hostDirectives: [{ directive: i3.DaffOpenableDirective, outputs: ["toggled", "toggled"] }], ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\n", styles: [".daff-modal{display:flex;flex-direction:column;justify-content:space-between;border-radius:.25rem;max-height:90vh;max-width:90vw;overflow:hidden;z-index:3}@media (min-width: 480px){.daff-modal{max-height:80vh;max-width:80vw}}.daff-modal>*{display:inherit;flex-direction:inherit;justify-content:inherit;border-radius:inherit;max-height:inherit;max-width:inherit;overflow:inherit;z-index:inherit}@media (min-width: 480px){.daff-modal>*{max-height:inherit;max-width:inherit}}.daff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;position:relative}.daff-modal-header .daff-modal-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;font-weight:500;line-height:1.5rem;margin:0;padding:0 2rem 0 0}.daff-modal-header__dismiss-button{position:absolute;right:7px;top:12px}.daff-modal-content{display:block;flex-grow:1;max-height:60vh;overflow-y:auto;padding:1.5rem}.daff-modal-actions{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;padding:1.5rem}.daff-modal-content+.daff-modal-actions{padding:0 1.5rem 1.5rem}.daff-modal-header+.daff-modal-content{padding-top:0}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: OverlayModule }], animations: [daffFadeAnimations.fade], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
215
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: DaffModalComponent, isStandalone: true, selector: "daff-modal", host: { attributes: { "role": "dialog", "aria-modal": "true" }, listeners: { "keydown.escape": "onEscape()" }, properties: { "attr.aria-labelledby": "ariaLabelledBy", "animate.enter": "\"opening\"", "class.closing": "closing()" }, classAttribute: "daff-modal" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], hostDirectives: [{ directive: i3.DaffOpenableDirective, outputs: ["toggled", "toggled"] }], ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\n", styles: [".daff-modal{display:flex;flex-direction:column;justify-content:space-between;border-radius:.25rem;max-height:90vh;max-width:90vw;overflow:hidden;z-index:3}.daff-modal.opening{animation:opening .3s}@keyframes opening{0%{opacity:0}to{opacity:1}}.daff-modal.closing{opacity:0;animation:closing .3s}@keyframes closing{0%{opacity:1}to{opacity:0}}@media (min-width: 480px){.daff-modal{max-height:80vh;max-width:80vw}}.daff-modal>*{display:inherit;flex-direction:inherit;justify-content:inherit;border-radius:inherit;max-height:inherit;max-width:inherit;overflow:inherit;z-index:inherit}@media (min-width: 480px){.daff-modal>*{max-height:inherit;max-width:inherit}}.daff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;position:relative}.daff-modal-header .daff-modal-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;font-weight:500;line-height:1.5rem;margin:0;padding:0 2rem 0 0}.daff-modal-header__dismiss-button{position:absolute;right:7px;top:12px}.daff-modal-content{display:block;flex-grow:1;max-height:60vh;overflow-y:auto;padding:1.5rem}.daff-modal-actions{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;padding:1.5rem}.daff-modal-content+.daff-modal-actions{padding:0 1.5rem 1.5rem}.daff-modal-header+.daff-modal-content{padding-top:0}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: OverlayModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
213
216
  }
214
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DaffModalComponent, decorators: [{
215
218
  type: Component,
@@ -222,19 +225,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
222
225
  'aria-modal': 'true',
223
226
  '[attr.aria-labelledby]': 'ariaLabelledBy',
224
227
  '(keydown.escape)': 'onEscape()',
225
- }, animations: [daffFadeAnimations.fade], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
228
+ '[animate.enter]': '"opening"',
229
+ '[class.closing]': 'closing()',
230
+ }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
226
231
  PortalModule,
227
232
  OverlayModule,
228
- ], template: "<ng-template cdkPortalOutlet></ng-template>\n", styles: [".daff-modal{display:flex;flex-direction:column;justify-content:space-between;border-radius:.25rem;max-height:90vh;max-width:90vw;overflow:hidden;z-index:3}@media (min-width: 480px){.daff-modal{max-height:80vh;max-width:80vw}}.daff-modal>*{display:inherit;flex-direction:inherit;justify-content:inherit;border-radius:inherit;max-height:inherit;max-width:inherit;overflow:inherit;z-index:inherit}@media (min-width: 480px){.daff-modal>*{max-height:inherit;max-width:inherit}}.daff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;position:relative}.daff-modal-header .daff-modal-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;font-weight:500;line-height:1.5rem;margin:0;padding:0 2rem 0 0}.daff-modal-header__dismiss-button{position:absolute;right:7px;top:12px}.daff-modal-content{display:block;flex-grow:1;max-height:60vh;overflow-y:auto;padding:1.5rem}.daff-modal-actions{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;padding:1.5rem}.daff-modal-content+.daff-modal-actions{padding:0 1.5rem 1.5rem}.daff-modal-header+.daff-modal-content{padding-top:0}\n"] }]
233
+ ], template: "<ng-template cdkPortalOutlet></ng-template>\n", styles: [".daff-modal{display:flex;flex-direction:column;justify-content:space-between;border-radius:.25rem;max-height:90vh;max-width:90vw;overflow:hidden;z-index:3}.daff-modal.opening{animation:opening .3s}@keyframes opening{0%{opacity:0}to{opacity:1}}.daff-modal.closing{opacity:0;animation:closing .3s}@keyframes closing{0%{opacity:1}to{opacity:0}}@media (min-width: 480px){.daff-modal{max-height:80vh;max-width:80vw}}.daff-modal>*{display:inherit;flex-direction:inherit;justify-content:inherit;border-radius:inherit;max-height:inherit;max-width:inherit;overflow:inherit;z-index:inherit}@media (min-width: 480px){.daff-modal>*{max-height:inherit;max-width:inherit}}.daff-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem;position:relative}.daff-modal-header .daff-modal-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;font-weight:500;line-height:1.5rem;margin:0;padding:0 2rem 0 0}.daff-modal-header__dismiss-button{position:absolute;right:7px;top:12px}.daff-modal-content{display:block;flex-grow:1;max-height:60vh;overflow-y:auto;padding:1.5rem}.daff-modal-actions{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;padding:1.5rem}.daff-modal-content+.daff-modal-actions{padding:0 1.5rem 1.5rem}.daff-modal-header+.daff-modal-content{padding-top:0}\n"] }]
229
234
  }], ctorParameters: () => [{ type: DaffModalService }, { type: i2.ConfigurableFocusTrapFactory }, { type: i0.ElementRef }, { type: i3.DaffOpenableDirective }, { type: i3.DaffFocusStackService }, { type: i0.ChangeDetectorRef }], propDecorators: { _portalOutlet: [{
230
235
  type: ViewChild,
231
236
  args: [CdkPortalOutlet, { static: true }]
232
- }], fadeState: [{
233
- type: HostBinding,
234
- args: ['@fade']
235
- }], animationDone: [{
236
- type: HostListener,
237
- args: ['@fade.done', ['$event']]
238
237
  }] } });
239
238
 
240
239
  /* eslint-disable quote-props */
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-design-modal.mjs","sources":["../../../libs/design/modal/src/animations/modal-animation.ts","../../../libs/design/modal/src/animations/modal-animation-state.ts","../../../libs/design/modal/src/service/modal.service.ts","../../../libs/design/modal/src/modal/modal.component.ts","../../../libs/design/modal/src/modal/modal.component.html","../../../libs/design/modal/src/modal-actions/modal-actions.component.ts","../../../libs/design/modal/src/modal-close/modal-close.directive.ts","../../../libs/design/modal/src/modal-content/modal-content.component.ts","../../../libs/design/modal/src/modal-header/modal-header.component.ts","../../../libs/design/modal/src/modal-header/modal-header.component.html","../../../libs/design/modal/src/modal-title/modal-title.directive.ts","../../../libs/design/modal/src/modal.module.ts","../../../libs/design/modal/src/modal.ts","../../../libs/design/modal/src/daffodil-design-modal.ts"],"sourcesContent":["import {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\nexport const daffFadeAnimations: {\n readonly fade: AnimationTriggerMetadata;\n} = {\n fade: trigger('fade', [\n state('open', style({ opacity: 1 })),\n state('closed', style({ opacity: 0 })),\n transition('open <=> closed', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n ]),\n};\n","export const getAnimationState = (open: boolean) => open ? 'open' : 'closed';\n","import { AnimationEvent } from '@angular/animations';\nimport {\n OverlayRef,\n Overlay,\n GlobalPositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Injectable,\n Type,\n ComponentRef,\n Injector,\n} from '@angular/core';\nimport { take } from 'rxjs/operators';\n\nimport { DaffModal } from '../modal/modal';\nimport { DaffModalConfiguration } from '../modal/modal-config';\nimport { DaffModalComponent } from '../modal/modal.component';\n\n@Injectable()\nexport class DaffModalService {\n private _modals: Map<DaffModalComponent, DaffModal> = new Map();\n\n constructor(private overlay: Overlay) { }\n\n private defaultConfiguration: DaffModalConfiguration = {};\n\n private _attachModal(\n overlayRef: OverlayRef,\n ): ComponentRef<DaffModalComponent> {\n const modal = overlayRef.attach(\n new ComponentPortal(\n DaffModalComponent,\n undefined,\n Injector.create({\n providers: [{\n provide: DaffModalService,\n useValue: this,\n }],\n }),\n ),\n );\n modal.instance.reveal();\n return modal;\n }\n\n private _attachModalContent(\n component: Type<any>,\n modal: ComponentRef<DaffModalComponent>,\n ): void {\n modal.instance.attachContent(new ComponentPortal(component));\n }\n\n private _createOverlayRef(): OverlayRef {\n return this.overlay.create({\n hasBackdrop: true,\n positionStrategy: new GlobalPositionStrategy()\n .centerHorizontally()\n .centerVertically(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n }\n\n private _removeModal(modal: DaffModal) {\n if (!this._modals.has(modal.modal.instance)) {\n throw new Error(\n 'The Modal that you are trying to remove does not exist.',\n );\n }\n\n this._modals.delete(modal.modal.instance);\n\n modal.overlay.dispose();\n }\n\n open(\n component: Type<any>,\n configuration?: Partial<DaffModalConfiguration>,\n ): DaffModalComponent {\n const config = { ...this.defaultConfiguration, ...configuration };\n const _ref = this._createOverlayRef();\n const _modal = this._attachModal(_ref);\n const _attachedModal = this._attachModalContent(component, _modal);\n\n if (configuration?.ariaLabelledBy) {\n _modal.instance.ariaLabelledBy = configuration.ariaLabelledBy;\n }\n\n const modal: DaffModal = {\n modal: _modal,\n overlay: _ref,\n };\n\n this._modals.set(modal.modal.instance, modal);\n\n _ref\n .backdropClick()\n .subscribe(() =>\n config.onBackdropClicked\n ? config.onBackdropClicked()\n : this.close(modal.modal.instance),\n );\n return modal.modal.instance;\n }\n\n close(component: DaffModalComponent): void {\n component.hide();\n const modal = this._modals.get(component);\n\n modal.overlay.detachBackdrop();\n component.closedAnimationCompleted$.pipe(\n take(1),\n ).subscribe(\n (e: AnimationEvent) => this._removeModal(modal),\n );\n }\n}\n","/* eslint-disable quote-props */\nimport { AnimationEvent } from '@angular/animations';\nimport {\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n PortalModule,\n} from '@angular/cdk/portal';\nimport {\n Component,\n EventEmitter,\n HostBinding,\n ChangeDetectionStrategy,\n ViewChild,\n HostListener,\n ElementRef,\n AfterContentInit,\n AfterViewInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n OnDestroy,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport {\n DaffOpenable,\n DaffOpenableDirective,\n DaffFocusStackService,\n daffFocusableElementsSelector,\n} from '@daffodil/design';\n\nimport { daffFadeAnimations } from '../animations/modal-animation';\nimport { getAnimationState } from '../animations/modal-animation-state';\nimport { DaffModalService } from '../service/modal.service';\n\n@Component({\n selector: 'daff-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n hostDirectives: [{\n directive: DaffOpenableDirective,\n outputs: ['toggled'],\n }],\n host: {\n 'class': 'daff-modal',\n 'role': 'dialog',\n 'aria-modal': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n '(keydown.escape)': 'onEscape()',\n },\n animations: [daffFadeAnimations.fade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n PortalModule,\n OverlayModule,\n ],\n})\nexport class DaffModalComponent implements AfterContentInit, AfterViewInit, OnDestroy, DaffOpenable {\n private _ariaLabelledBy = null;\n\n get ariaLabelledBy() {\n return this._ariaLabelledBy;\n } set ariaLabelledBy(value: string) {\n this._ariaLabelledBy = value;\n }\n\n /**\n * The CDK Portal outlet used to portal content into the modal.\n */\n @ViewChild(CdkPortalOutlet, { static: true }) private _portalOutlet: CdkPortalOutlet;\n\n /**\n * Event fired when the close animation is completed.\n */\n animationCompleted: EventEmitter<any> = new EventEmitter<any>();\n\n /**\n * Private subject for closed animation completion events.\n */\n private _closedAnimationCompleted = new Subject<AnimationEvent>();\n\n /**\n * Observable that emits when the close animation is completed.\n */\n readonly closedAnimationCompleted$ = this._closedAnimationCompleted.asObservable();\n\n /**\n * @docs-private\n */\n onEscape() {\n this.modalService.close(this);\n }\n\n private _focusTrap: ConfigurableFocusTrap;\n\n constructor(\n private modalService: DaffModalService,\n private _focusTrapFactory: ConfigurableFocusTrapFactory,\n private elementRef: ElementRef<HTMLElement>,\n private openDirective: DaffOpenableDirective,\n private _focusStack: DaffFocusStackService,\n private changeDetector: ChangeDetectorRef,\n ) {\n this.openDirective.stateless = false;\n }\n\n /**\n * @docs-private\n */\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(\n this.elementRef.nativeElement,\n );\n this._focusStack.push();\n }\n\n /**\n * @docs-private\n */\n ngAfterViewInit() {\n const focusableChild = (<HTMLElement>this.elementRef.nativeElement.querySelector(\n daffFocusableElementsSelector)\n );\n\n if (focusableChild) {\n focusableChild.focus();\n } else {\n // There's a timing condition when computing HostBindings afterContentInit\n // so to allow the modal to be focused, we manually set the tabindex.\n this.elementRef.nativeElement.tabIndex = 0;\n (<HTMLElement>this.elementRef.nativeElement).focus();\n }\n }\n\n /**\n * Helper method to attach portable content to modal.\n */\n attachContent(portal: ComponentPortal<any>): any {\n const attachContent = this._portalOutlet.attachComponentPortal(portal);\n\n return attachContent;\n }\n\n /** Animation hook that controls the entrance and exit animations of the modal. */\n /**\n * @docs-private\n */\n @HostBinding('@fade') get fadeState(): string {\n return getAnimationState(this.openDirective.open);\n }\n\n /**\n * Animation event that can used to hook into when\n * animations are fully completed. We use this in the DaffModalService\n * to determine when to actually remove the dynamically rendered element from the DOM\n * so that the animation does not clip as the element is removed.\n */\n @HostListener('@fade.done', ['$event'])\n animationDone(e: AnimationEvent) {\n this.animationCompleted.emit(e);\n if (e.toState === 'closed') {\n this._focusStack.pop();\n this._closedAnimationCompleted.next(e);\n this._closedAnimationCompleted.complete();\n }\n }\n\n get open() {\n return this.openDirective.open;\n }\n\n /**\n * Reveals the modal\n */\n reveal() {\n this.openDirective.reveal();\n this.changeDetector.markForCheck();\n }\n\n /**\n * Hides the modal\n */\n hide() {\n this.openDirective.hide();\n this.changeDetector.markForCheck();\n }\n\n /**\n * Toggles the visibility of the modal\n */\n toggle() {\n this.openDirective.toggle();\n this.changeDetector.markForCheck();\n }\n\n /**\n * @docs-private\n */\n ngOnDestroy() {\n this._closedAnimationCompleted.complete();\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>\n","/* eslint-disable quote-props */\nimport {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\n\n@Component({\n selector: 'daff-modal-actions',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-actions',\n },\n})\nexport class DaffModalActionsComponent {}\n","/* eslint-disable quote-props */\nimport {\n Directive,\n Optional,\n} from '@angular/core';\n\nimport { DaffModalComponent } from '../modal/modal.component';\nimport { DaffModalService } from '../service/modal.service';\n\n/**\n * The DaffModalCloseDirective is a helper directive that passes a click\n * event to the button it's used with to close a modal. It needs to be\n * implemented with the `<button>` HTML element to work. This helps to\n * reduce code duplication.\n */\n@Directive({\n selector: 'button[daffModalClose]',\n host: {\n 'type': 'button',\n '(click)': 'onClick($event)',\n },\n})\n\nexport class DaffModalCloseDirective {\n constructor(\n private modalService: DaffModalService,\n @Optional() private modal: DaffModalComponent,\n ) {}\n\n /**\n * @docs-private\n */\n onClick(event: MouseEvent) {\n if(this.modal) {\n this.modalService.close(this.modal);\n }\n }\n}\n","/* eslint-disable quote-props */\nimport {\n Component,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\n@Component({\n selector: 'daff-modal-content',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-content',\n },\n})\nexport class DaffModalContentComponent {}\n","/* eslint-disable quote-props */\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n Input,\n} from '@angular/core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\n\nimport { DaffIconButtonComponent } from '@daffodil/design/button';\n\nimport { DaffModalCloseDirective } from '../modal-close/modal-close.directive';\n\n@Component({\n selector: 'daff-modal-header',\n templateUrl: './modal-header.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-header',\n },\n imports: [\n DaffIconButtonComponent,\n FaIconComponent,\n DaffModalCloseDirective,\n ],\n})\nexport class DaffModalHeaderComponent {\n faXmark = faXmark;\n\n /**\n * Whether or not a modal is dismissible.\n */\n @Input() dismissible = true;\n}\n","<ng-content select=\"[daffModalTitle]\"></ng-content>\n@if (dismissible) {\n\t<button daff-icon-button color=\"theme-contrast\"\n\t\tdaffModalClose\n\t\tclass=\"daff-modal-header__dismiss-button\"\n\t\taria-label=\"Close modal\">\n\t\t\t<fa-icon [icon]=\"faXmark\" size=\"lg\"></fa-icon>\n\t</button>\n}","import {\n Directive,\n Optional,\n} from '@angular/core';\n\nimport { DaffModalComponent } from '../modal/modal.component';\n\nlet modalTitleId = 0;\n\n/**\n * Title of a modal.\n */\n@Directive({\n selector: '[daffModalTitle]',\n host: {\n class: 'daff-modal-title',\n '[attr.id]': '_id',\n },\n})\n\nexport class DaffModalTitleDirective {\n private _id = '';\n\n constructor(@Optional() private modal: DaffModalComponent) {\n modalTitleId++;\n\n this._id = 'daff-modal-title-' + modalTitleId;\n\n /**\n * Sets the ariaLabelledBy of the modal to the id of the modal title.\n */\n if(this.modal) {\n this.modal.ariaLabelledBy = this._id;\n }\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\n\nimport { DaffButtonModule } from '@daffodil/design/button';\n\nimport { DaffModalComponent } from './modal/modal.component';\nimport { DaffModalActionsComponent } from './modal-actions/modal-actions.component';\nimport { DaffModalCloseDirective } from './modal-close/modal-close.directive';\nimport { DaffModalContentComponent } from './modal-content/modal-content.component';\nimport { DaffModalHeaderComponent } from './modal-header/modal-header.component';\nimport { DaffModalTitleDirective } from './modal-title/modal-title.directive';\nimport { DaffModalService } from './service/modal.service';\n\n/**\n * @deprecated in favor of {@link DAFF_MODAL_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n PortalModule,\n OverlayModule,\n DaffButtonModule,\n FontAwesomeModule,\n\n DaffModalComponent,\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n ],\n exports: [\n DaffModalComponent,\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n ],\n providers: [\n DaffModalService,\n ],\n})\nexport class DaffModalModule { }\n","import { DaffModalActionsComponent } from './modal-actions/modal-actions.component';\nimport { DaffModalCloseDirective } from './modal-close/modal-close.directive';\nimport { DaffModalContentComponent } from './modal-content/modal-content.component';\nimport { DaffModalHeaderComponent } from './modal-header/modal-header.component';\nimport { DaffModalTitleDirective } from './modal-title/modal-title.directive';\n\n/**\n * @docs-private\n */\nexport const DAFF_MODAL_COMPONENTS = <const> [\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DaffModalService","i2.DaffModalComponent","i1.DaffModalComponent"],"mappings":"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"}
1
+ {"version":3,"file":"daffodil-design-modal.mjs","sources":["../../../libs/design/modal/src/service/modal.service.ts","../../../libs/design/modal/src/modal/modal.component.ts","../../../libs/design/modal/src/modal/modal.component.html","../../../libs/design/modal/src/modal-actions/modal-actions.component.ts","../../../libs/design/modal/src/modal-close/modal-close.directive.ts","../../../libs/design/modal/src/modal-content/modal-content.component.ts","../../../libs/design/modal/src/modal-header/modal-header.component.ts","../../../libs/design/modal/src/modal-header/modal-header.component.html","../../../libs/design/modal/src/modal-title/modal-title.directive.ts","../../../libs/design/modal/src/modal.module.ts","../../../libs/design/modal/src/modal.ts","../../../libs/design/modal/src/daffodil-design-modal.ts"],"sourcesContent":["import {\n OverlayRef,\n Overlay,\n GlobalPositionStrategy,\n PositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Injectable,\n Type,\n ComponentRef,\n Injector,\n} from '@angular/core';\nimport { take } from 'rxjs/operators';\n\nimport { DaffModal } from '../modal/modal';\nimport {\n DaffModalConfiguration,\n DaffModalPosition,\n} from '../modal/modal-config';\nimport { DaffModalComponent } from '../modal/modal.component';\n\n@Injectable()\nexport class DaffModalService {\n private _modals: Map<DaffModalComponent, DaffModal> = new Map();\n\n constructor(private overlay: Overlay) { }\n\n private defaultConfiguration: DaffModalConfiguration = {};\n\n private _attachModal(\n overlayRef: OverlayRef,\n ): ComponentRef<DaffModalComponent> {\n const modal = overlayRef.attach(\n new ComponentPortal(\n DaffModalComponent,\n undefined,\n Injector.create({\n providers: [{\n provide: DaffModalService,\n useValue: this,\n }],\n }),\n ),\n );\n modal.instance.reveal();\n return modal;\n }\n\n private _attachModalContent(\n component: Type<any>,\n modal: ComponentRef<DaffModalComponent>,\n ): void {\n modal.instance.attachContent(new ComponentPortal(component));\n }\n\n private _createPositionStrategy(position?: DaffModalPosition): PositionStrategy {\n // Horizontal position is always center\n const strategy = new GlobalPositionStrategy().centerHorizontally();\n\n // Handle vertical positioning\n if (position?.vertical === 'top') {\n strategy.top(position.offsetTop ?? '15vh');\n } else {\n // Default to center\n strategy.centerVertically();\n }\n\n return strategy;\n }\n\n private _createOverlayRef(config?: Partial<DaffModalConfiguration>): OverlayRef {\n const positionStrategy = this._createPositionStrategy(config?.position);\n\n return this.overlay.create({\n hasBackdrop: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n }\n\n private _removeModal(modal: DaffModal) {\n if (!this._modals.has(modal.modal.instance)) {\n throw new Error(\n 'The Modal that you are trying to remove does not exist.',\n );\n }\n\n this._modals.delete(modal.modal.instance);\n\n modal.overlay.dispose();\n }\n\n private _closeAllModals(): void {\n const modals = Array.from(this._modals.values());\n modals.forEach((modal) => this.close(modal.modal.instance));\n }\n\n open(\n component: Type<any>,\n configuration?: Partial<DaffModalConfiguration>,\n ): DaffModalComponent {\n this._closeAllModals();\n const config = { ...this.defaultConfiguration, ...configuration };\n const _ref = this._createOverlayRef(config);\n const _modal = this._attachModal(_ref);\n const _attachedModal = this._attachModalContent(component, _modal);\n\n if (configuration?.ariaLabelledBy) {\n _modal.instance.ariaLabelledBy = configuration.ariaLabelledBy;\n }\n\n const modal: DaffModal = {\n modal: _modal,\n overlay: _ref,\n };\n\n this._modals.set(modal.modal.instance, modal);\n\n _ref\n .backdropClick()\n .subscribe(() =>\n config.onBackdropClicked\n ? config.onBackdropClicked()\n : this.close(modal.modal.instance),\n );\n return modal.modal.instance;\n }\n\n close(component: DaffModalComponent): void {\n const modal = this._modals.get(component);\n\n modal.overlay.detachBackdrop();\n component.closedAnimationCompleted$.pipe(\n take(1),\n ).subscribe(\n () => this._removeModal(modal),\n );\n\n component.hide();\n\n }\n}\n","/* eslint-disable quote-props */\nimport {\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n PortalModule,\n} from '@angular/cdk/portal';\nimport {\n Component,\n ChangeDetectionStrategy,\n ViewChild,\n ElementRef,\n AfterContentInit,\n AfterViewInit,\n ViewEncapsulation,\n ChangeDetectorRef,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\nimport {\n DaffOpenable,\n DaffOpenableDirective,\n DaffFocusStackService,\n daffFocusableElementsSelector,\n} from '@daffodil/design';\n\nimport { DaffModalService } from '../service/modal.service';\n\n@Component({\n selector: 'daff-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.scss'],\n hostDirectives: [{\n directive: DaffOpenableDirective,\n outputs: ['toggled'],\n }],\n host: {\n 'class': 'daff-modal',\n 'role': 'dialog',\n 'aria-modal': 'true',\n '[attr.aria-labelledby]': 'ariaLabelledBy',\n '(keydown.escape)': 'onEscape()',\n '[animate.enter]': '\"opening\"',\n '[class.closing]': 'closing()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n PortalModule,\n OverlayModule,\n ],\n})\nexport class DaffModalComponent implements AfterContentInit, AfterViewInit, OnDestroy, DaffOpenable {\n private closing = signal(false);\n\n private _ariaLabelledBy = null;\n\n /**\n * @docs-private\n *\n * By default, the `aria-labelledby` of the modal is set to the `id` of the modal title.\n */\n get ariaLabelledBy() {\n return this._ariaLabelledBy;\n } set ariaLabelledBy(value: string) {\n this._ariaLabelledBy = value;\n }\n\n /**\n * @docs-private\n *\n * The CDK Portal outlet used to portal content into the modal.\n */\n @ViewChild(CdkPortalOutlet, { static: true }) private _portalOutlet: CdkPortalOutlet;\n\n /**\n * Private subject for closed animation completion events.\n */\n private _closedAnimationCompleted = new Subject<boolean>();\n\n /**\n * Observable that emits when the close animation is completed.\n */\n readonly closedAnimationCompleted$ = this._closedAnimationCompleted.asObservable().pipe(delay(300));\n\n /**\n * @docs-private\n */\n onEscape() {\n this.modalService.close(this);\n }\n\n private _focusTrap: ConfigurableFocusTrap;\n\n constructor(\n private modalService: DaffModalService,\n private _focusTrapFactory: ConfigurableFocusTrapFactory,\n private elementRef: ElementRef<HTMLElement>,\n private openDirective: DaffOpenableDirective,\n private _focusStack: DaffFocusStackService,\n private changeDetector: ChangeDetectorRef,\n ) {\n this.openDirective.stateless = false;\n }\n\n /**\n * @docs-private\n */\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(\n this.elementRef.nativeElement,\n );\n this._focusStack.push();\n }\n\n /**\n * @docs-private\n */\n ngAfterViewInit() {\n const focusableChild = (<HTMLElement>this.elementRef.nativeElement.querySelector(\n daffFocusableElementsSelector)\n );\n\n if (focusableChild) {\n focusableChild.focus();\n } else {\n // There's a timing condition when computing HostBindings afterContentInit\n // so to allow the modal to be focused, we manually set the tabindex.\n this.elementRef.nativeElement.tabIndex = 0;\n (<HTMLElement>this.elementRef.nativeElement).focus();\n }\n }\n\n /**\n * @docs-private\n *\n * Helper method to attach portable content to modal.\n */\n attachContent(portal: ComponentPortal<any>): any {\n const attachContent = this._portalOutlet.attachComponentPortal(portal);\n\n return attachContent;\n }\n\n /**\n * Tracks the open state of the modal.\n */\n get open() {\n return this.openDirective.open;\n }\n\n /**\n * @docs-private\n *\n * Reveals the modal.\n */\n reveal() {\n this.openDirective.reveal();\n this.changeDetector.markForCheck();\n }\n\n /**\n * @docs-private\n *\n * Hides the modal.\n */\n hide() {\n this.openDirective.hide();\n this.closing.set(true);\n this._closedAnimationCompleted.next(true);\n this._focusTrap?.destroy();\n this._focusStack.pop();\n\n this.changeDetector.markForCheck();\n }\n\n /**\n * @docs-private\n *\n * Toggles the visibility of the modal.\n */\n toggle() {\n this.openDirective.toggle();\n this.changeDetector.markForCheck();\n }\n\n /**\n * @docs-private\n */\n ngOnDestroy() {\n this._closedAnimationCompleted.complete();\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>\n","/* eslint-disable quote-props */\nimport {\n ChangeDetectionStrategy,\n Component,\n} from '@angular/core';\n\n@Component({\n selector: 'daff-modal-actions',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-actions',\n },\n})\nexport class DaffModalActionsComponent {}\n","/* eslint-disable quote-props */\nimport {\n Directive,\n Optional,\n} from '@angular/core';\n\nimport { DaffModalComponent } from '../modal/modal.component';\nimport { DaffModalService } from '../service/modal.service';\n\n/**\n * The DaffModalCloseDirective is a helper directive that passes a click\n * event to the button it's used with to close a modal. It needs to be\n * implemented with the `<button>` HTML element to work. This helps to\n * reduce code duplication.\n */\n@Directive({\n selector: 'button[daffModalClose]',\n host: {\n 'type': 'button',\n '(click)': 'onClick($event)',\n },\n})\n\nexport class DaffModalCloseDirective {\n constructor(\n private modalService: DaffModalService,\n @Optional() private modal: DaffModalComponent,\n ) {}\n\n /**\n * @docs-private\n */\n onClick(event: MouseEvent) {\n if(this.modal) {\n this.modalService.close(this.modal);\n }\n }\n}\n","/* eslint-disable quote-props */\nimport {\n Component,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\n@Component({\n selector: 'daff-modal-content',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-content',\n },\n})\nexport class DaffModalContentComponent {}\n","/* eslint-disable quote-props */\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n Input,\n} from '@angular/core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faXmark } from '@fortawesome/free-solid-svg-icons';\n\nimport { DaffIconButtonComponent } from '@daffodil/design/button';\n\nimport { DaffModalCloseDirective } from '../modal-close/modal-close.directive';\n\n@Component({\n selector: 'daff-modal-header',\n templateUrl: './modal-header.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'daff-modal-header',\n },\n imports: [\n DaffIconButtonComponent,\n FaIconComponent,\n DaffModalCloseDirective,\n ],\n})\nexport class DaffModalHeaderComponent {\n faXmark = faXmark;\n\n /**\n * Whether or not a modal is dismissible.\n */\n @Input() dismissible = true;\n}\n","<ng-content select=\"[daffModalTitle]\"></ng-content>\n@if (dismissible) {\n\t<button daff-icon-button color=\"theme-contrast\"\n\t\tdaffModalClose\n\t\tclass=\"daff-modal-header__dismiss-button\"\n\t\taria-label=\"Close modal\">\n\t\t\t<fa-icon [icon]=\"faXmark\" size=\"lg\"></fa-icon>\n\t</button>\n}","import {\n Directive,\n Optional,\n} from '@angular/core';\n\nimport { DaffModalComponent } from '../modal/modal.component';\n\nlet modalTitleId = 0;\n\n/**\n * Title of a modal.\n */\n@Directive({\n selector: '[daffModalTitle]',\n host: {\n class: 'daff-modal-title',\n '[attr.id]': '_id',\n },\n})\n\nexport class DaffModalTitleDirective {\n private _id = '';\n\n constructor(@Optional() private modal: DaffModalComponent) {\n modalTitleId++;\n\n this._id = 'daff-modal-title-' + modalTitleId;\n\n /**\n * Sets the ariaLabelledBy of the modal to the id of the modal title.\n */\n if(this.modal) {\n this.modal.ariaLabelledBy = this._id;\n }\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\n\nimport { DaffButtonModule } from '@daffodil/design/button';\n\nimport { DaffModalComponent } from './modal/modal.component';\nimport { DaffModalActionsComponent } from './modal-actions/modal-actions.component';\nimport { DaffModalCloseDirective } from './modal-close/modal-close.directive';\nimport { DaffModalContentComponent } from './modal-content/modal-content.component';\nimport { DaffModalHeaderComponent } from './modal-header/modal-header.component';\nimport { DaffModalTitleDirective } from './modal-title/modal-title.directive';\nimport { DaffModalService } from './service/modal.service';\n\n/**\n * @deprecated in favor of {@link DAFF_MODAL_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n */\n@NgModule({\n imports: [\n CommonModule,\n PortalModule,\n OverlayModule,\n DaffButtonModule,\n FontAwesomeModule,\n\n DaffModalComponent,\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n ],\n exports: [\n DaffModalComponent,\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n ],\n providers: [\n DaffModalService,\n ],\n})\nexport class DaffModalModule { }\n","import { DaffModalActionsComponent } from './modal-actions/modal-actions.component';\nimport { DaffModalCloseDirective } from './modal-close/modal-close.directive';\nimport { DaffModalContentComponent } from './modal-content/modal-content.component';\nimport { DaffModalHeaderComponent } from './modal-header/modal-header.component';\nimport { DaffModalTitleDirective } from './modal-title/modal-title.directive';\n\n/**\n * @docs-private\n */\nexport const DAFF_MODAL_COMPONENTS = <const> [\n DaffModalHeaderComponent,\n DaffModalTitleDirective,\n DaffModalContentComponent,\n DaffModalActionsComponent,\n DaffModalCloseDirective,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DaffModalService","i2.DaffModalComponent","i1.DaffModalComponent"],"mappings":"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"}