@ngneers/controls 0.0.1-pre5 → 0.0.1-pre7

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 (168) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +33 -33
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +22 -19
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-avatar.mjs +13 -13
  8. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-base.mjs +89 -64
  10. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-breadcrumb.mjs +19 -19
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button-group.mjs +8 -8
  14. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-button.mjs +15 -10
  16. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  17. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +56 -56
  20. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
  22. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-chip.mjs +7 -7
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
  26. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  27. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  28. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-dialog.mjs +38 -40
  30. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  32. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-drawer.mjs +29 -29
  34. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-edit-inplace.mjs +16 -16
  36. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  37. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  38. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  39. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  41. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  42. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  43. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  44. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-icon.mjs +111 -47
  46. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  48. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-field.mjs +16 -16
  50. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  52. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-input.mjs +6 -6
  54. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  56. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  58. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-menu.mjs +33 -33
  60. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-message.mjs +4 -4
  62. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-paginator.mjs +13 -13
  64. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-popover.mjs +21 -16
  66. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  68. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
  70. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  71. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  72. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-select-button.mjs +7 -7
  74. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-select.mjs +48 -47
  76. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-slider.mjs +11 -11
  78. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  80. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  81. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  82. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  83. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  84. package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
  85. package/fesm2022/ngneers-controls-table.mjs +1456 -82
  86. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  87. package/fesm2022/ngneers-controls-tabs.mjs +41 -40
  88. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  89. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  90. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  91. package/fesm2022/ngneers-controls-toast.mjs +19 -19
  92. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  93. package/fesm2022/ngneers-controls-toggle-button.mjs +10 -10
  94. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  95. package/fesm2022/ngneers-controls-tooltip.mjs +74 -38
  96. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  97. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  98. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  99. package/fesm2022/ngneers-controls-utils.mjs +1 -1
  100. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  101. package/package.json +34 -12
  102. package/types/ngneers-controls-accordion.d.ts +6 -4
  103. package/types/ngneers-controls-api-ng.d.ts +7 -2
  104. package/types/ngneers-controls-api-resize.d.ts +318 -0
  105. package/types/ngneers-controls-api.d.ts +2 -2
  106. package/types/ngneers-controls-base.d.ts +8 -0
  107. package/types/ngneers-controls-breadcrumb.d.ts +6 -4
  108. package/types/ngneers-controls-button.d.ts +13 -8
  109. package/types/ngneers-controls-calendar.d.ts +5 -1
  110. package/types/ngneers-controls-checkbox.d.ts +6 -4
  111. package/types/ngneers-controls-chip.d.ts +3 -1
  112. package/types/ngneers-controls-default-icons.d.ts +5 -0
  113. package/types/ngneers-controls-directives.d.ts +7 -1
  114. package/types/ngneers-controls-drawer.d.ts +7 -1
  115. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  116. package/types/ngneers-controls-filter.d.ts +52 -3
  117. package/types/ngneers-controls-i18n.d.ts +4 -0
  118. package/types/ngneers-controls-icon.d.ts +23 -40
  119. package/types/ngneers-controls-input-field.d.ts +7 -1
  120. package/types/ngneers-controls-item-view.d.ts +4 -2
  121. package/types/ngneers-controls-list-box.d.ts +5 -1
  122. package/types/ngneers-controls-menu.d.ts +4 -2
  123. package/types/ngneers-controls-message.d.ts +3 -1
  124. package/types/ngneers-controls-paginator.d.ts +4 -0
  125. package/types/ngneers-controls-popover.d.ts +2 -1
  126. package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
  127. package/types/ngneers-controls-scroller.d.ts +12 -2
  128. package/types/ngneers-controls-select.d.ts +11 -12
  129. package/types/ngneers-controls-spinner.d.ts +1 -1
  130. package/types/ngneers-controls-splitter.d.ts +29 -59
  131. package/types/ngneers-controls-table.d.ts +380 -24
  132. package/types/ngneers-controls-tabs.d.ts +4 -2
  133. package/types/ngneers-controls-tag.d.ts +3 -1
  134. package/types/ngneers-controls-toast.d.ts +5 -3
  135. package/types/ngneers-controls-toggle-button.d.ts +5 -3
  136. package/types/ngneers-controls-tooltip.d.ts +7 -1
  137. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  138. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
  139. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
  140. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
  141. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
  142. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
  143. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
  144. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
  145. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
  146. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
  147. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
  148. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
  149. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
  150. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
  151. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
  152. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
  153. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
  154. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
  155. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
  156. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
  157. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
  158. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
  159. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
  160. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
  161. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
  162. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
  163. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
  164. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
  165. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
  166. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
  167. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
  168. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-defer.mjs","sources":["../../src/defer/defer.ts","../../src/defer/defer.html","../../src/defer/ngneers-controls-defer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n effect,\r\n input,\r\n signal,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-defer',\r\n templateUrl: './defer.html',\r\n imports: [NgTemplateOutlet],\r\n providers: [provideSelf(NgnDefer)],\r\n host: {\r\n '[class.open]': 'open()',\r\n '[class.hidden]': '!open() && hiddenOnClosed()',\r\n '[aria-hidden]': '!open()',\r\n },\r\n styles: [\r\n `\r\n :host.hidden {\r\n visibility: hidden;\r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class NgnDefer<T> extends NgnBase<null> {\r\n protected readonly theme = null;\r\n public readonly lazyContent = input<TemplateRef<T> | undefined | null>(undefined);\r\n public readonly lazyContentContext = input<T | null>(null);\r\n public readonly open = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly hiddenOnClosed = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly hasBeenOpened = signal(false);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.open()) {\r\n this.hasBeenOpened.set(true);\r\n }\r\n });\r\n }\r\n}\r\n","@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-defer.mjs","sources":["../../src/defer/defer.ts","../../src/defer/defer.html","../../src/defer/ngneers-controls-defer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n effect,\r\n input,\r\n signal,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-defer',\r\n templateUrl: './defer.html',\r\n imports: [NgTemplateOutlet],\r\n providers: [provideSelf(NgnDefer)],\r\n host: {\r\n '[class.open]': 'open()',\r\n '[class.hidden]': '!open() && hiddenOnClosed()',\r\n '[aria-hidden]': '!open()',\r\n },\r\n styles: [\r\n `\r\n :host.hidden {\r\n visibility: hidden;\r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class NgnDefer<T> extends NgnBase<null> {\r\n protected readonly theme = null;\r\n public readonly lazyContent = input<TemplateRef<T> | undefined | null>(undefined);\r\n public readonly lazyContentContext = input<T | null>(null);\r\n public readonly open = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly hiddenOnClosed = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly hasBeenOpened = signal(false);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.open()) {\r\n this.hasBeenOpened.set(true);\r\n }\r\n });\r\n }\r\n}\r\n","@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -12,43 +12,43 @@ import { generateElementId } from '@ngneers/controls/utils-ng';
12
12
  import { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';
13
13
 
14
14
  class DialogTemplates extends NgnBase {
15
- _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : []));
15
+ _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : /* istanbul ignore next */ []));
16
16
  /**
17
17
  * The content of the dialog.
18
18
  * Can be a string, a component type, or a template reference.
19
19
  * Can also be set using an `<ng-template>` element with `#content` template reference variable.
20
20
  */
21
- content = input(null, ...(ngDevMode ? [{ debugName: "content" }] : []));
22
- contentTemplate = computed(() => this._userContentTemplate() ?? this.content(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : []));
21
+ content = input(null, ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
22
+ contentTemplate = computed(() => this._userContentTemplate() ?? this.content(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : /* istanbul ignore next */ []));
23
23
  _defaultHeaderTemplate = viewChild.required('defaultHeaderTemplate');
24
- _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : []));
24
+ _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : /* istanbul ignore next */ []));
25
25
  /**
26
26
  * Set a custom template for the header of the dialog.
27
27
  * Can also be set using an `<ng-template>` element with `#header` template reference variable.
28
28
  */
29
- templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : []));
30
- headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : []));
29
+ templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : /* istanbul ignore next */ []));
30
+ headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
31
31
  _defaultFooterTemplate = viewChild.required('defaultFooterTemplate');
32
- _userFooterTemplate = contentChild('footer', ...(ngDevMode ? [{ debugName: "_userFooterTemplate" }] : []));
32
+ _userFooterTemplate = contentChild('footer', ...(ngDevMode ? [{ debugName: "_userFooterTemplate" }] : /* istanbul ignore next */ []));
33
33
  /**
34
34
  * Set a custom template for the footer of the dialog.
35
35
  * Can also be set using an `<ng-template>` element with `#footer` template reference variable.
36
36
  */
37
- templateFooter = input(null, ...(ngDevMode ? [{ debugName: "templateFooter" }] : []));
38
- footerTemplate = computed(() => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate(), ...(ngDevMode ? [{ debugName: "footerTemplate" }] : []));
37
+ templateFooter = input(null, ...(ngDevMode ? [{ debugName: "templateFooter" }] : /* istanbul ignore next */ []));
38
+ footerTemplate = computed(() => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate(), ...(ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []));
39
39
  /**
40
40
  * Types for the dialog templates.
41
41
  */
42
42
  templateTypes = templateTypesFn();
43
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DialogTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
44
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: DialogTemplates, isStandalone: true, inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateFooter: { classPropertyName: "templateFooter", publicName: "templateFooter", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userFooterTemplate", first: true, predicate: ["footer"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultFooterTemplate", first: true, predicate: ["defaultFooterTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: DialogTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
44
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.10", type: DialogTemplates, isStandalone: true, inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateFooter: { classPropertyName: "templateFooter", publicName: "templateFooter", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userFooterTemplate", first: true, predicate: ["footer"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultFooterTemplate", first: true, predicate: ["defaultFooterTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DialogTemplates, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: DialogTemplates, decorators: [{
47
47
  type: Directive
48
48
  }], propDecorators: { _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], _defaultHeaderTemplate: [{ type: i0.ViewChild, args: ['defaultHeaderTemplate', { isSignal: true }] }], _userHeaderTemplate: [{ type: i0.ContentChild, args: ['header', { isSignal: true }] }], templateHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateHeader", required: false }] }], _defaultFooterTemplate: [{ type: i0.ViewChild, args: ['defaultFooterTemplate', { isSignal: true }] }], _userFooterTemplate: [{ type: i0.ContentChild, args: ['footer', { isSignal: true }] }], templateFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateFooter", required: false }] }] } });
49
49
 
50
50
  class PromptDialogBase {
51
- ngnPromptDialogResolveFn = input(...(ngDevMode ? [undefined, { debugName: "ngnPromptDialogResolveFn" }] : []));
51
+ ngnPromptDialogResolveFn = input(...(ngDevMode ? [undefined, { debugName: "ngnPromptDialogResolveFn" }] : /* istanbul ignore next */ []));
52
52
  constructor() {
53
53
  effect(() => {
54
54
  const fn = this.ngnPromptDialogResolveFn(); // trigger
@@ -60,10 +60,10 @@ class PromptDialogBase {
60
60
  fulfilPrompt(data) {
61
61
  this.ngnPromptDialogResolveFn()?.fn(data ?? null);
62
62
  }
63
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PromptDialogBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.0", type: PromptDialogBase, isStandalone: true, selector: "ng-component", inputs: { ngnPromptDialogResolveFn: { classPropertyName: "ngnPromptDialogResolveFn", publicName: "ngnPromptDialogResolveFn", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: PromptDialogBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.10", type: PromptDialogBase, isStandalone: true, selector: "ng-component", inputs: { ngnPromptDialogResolveFn: { classPropertyName: "ngnPromptDialogResolveFn", publicName: "ngnPromptDialogResolveFn", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PromptDialogBase, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: PromptDialogBase, decorators: [{
67
67
  type: Component,
68
68
  args: [{
69
69
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -83,30 +83,30 @@ class NgnDialog extends DialogTemplates {
83
83
  *
84
84
  * You probably want to react to openChange events from outside to update your variable accordingly.
85
85
  */
86
- open = model(true, ...(ngDevMode ? [{ debugName: "open" }] : []));
86
+ open = model(true, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
87
87
  /**
88
88
  * When `true`, the content will be loaded lazily when the dialog is opened for the first time.
89
89
  * Only applies when using a template for the content.
90
90
  */
91
- lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
91
+ lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
92
92
  /**
93
93
  * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.
94
94
  */
95
- cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
95
+ cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
96
96
  /**
97
97
  * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.
98
98
  * @default false
99
99
  */
100
- modal = input(false, { ...(ngDevMode ? { debugName: "modal" } : {}), transform: booleanAttribute });
100
+ modal = input(false, { ...(ngDevMode ? { debugName: "modal" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
101
101
  /**
102
102
  * When `true`, the dialog will automatically receive focus when opened.
103
103
  * @default modal()
104
104
  */
105
- autofocus = input(this.modal(), ...(ngDevMode ? [{ debugName: "autofocus" }] : []));
105
+ autofocus = input(this.modal(), ...(ngDevMode ? [{ debugName: "autofocus" }] : /* istanbul ignore next */ []));
106
106
  /**
107
107
  * The title of the dialog. Displayed in the default header template.
108
108
  */
109
- title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : []));
109
+ title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
110
110
  /**
111
111
  * Determines how the dialog can be closed by the user.
112
112
  * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.
@@ -114,23 +114,23 @@ class NgnDialog extends DialogTemplates {
114
114
  * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.
115
115
  * @default 'any'
116
116
  */
117
- closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : []));
117
+ closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : /* istanbul ignore next */ []));
118
118
  /**
119
119
  * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.
120
120
  */
121
- size = input({}, ...(ngDevMode ? [{ debugName: "size" }] : []));
121
+ size = input({}, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
122
122
  /**
123
123
  * Action buttons to be displayed in the footer of the dialog.
124
124
  */
125
- footerButtons = input(...(ngDevMode ? [undefined, { debugName: "footerButtons" }] : []));
125
+ footerButtons = input(...(ngDevMode ? [undefined, { debugName: "footerButtons" }] : /* istanbul ignore next */ []));
126
126
  /**
127
127
  * Whether the dialog is movable by dragging its header.
128
128
  */
129
- movable = input(false, ...(ngDevMode ? [{ debugName: "movable" }] : []));
129
+ movable = input(false, ...(ngDevMode ? [{ debugName: "movable" }] : /* istanbul ignore next */ []));
130
130
  /**
131
131
  * Whether the dialog is resizable.
132
132
  */
133
- resizable = input(false, ...(ngDevMode ? [{ debugName: "resizable" }] : []));
133
+ resizable = input(false, ...(ngDevMode ? [{ debugName: "resizable" }] : /* istanbul ignore next */ []));
134
134
  /**
135
135
  * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.
136
136
  */
@@ -140,7 +140,7 @@ class NgnDialog extends DialogTemplates {
140
140
  */
141
141
  closed = output();
142
142
  promptResult = output();
143
- _latestClickedButtonValue = signal(null, ...(ngDevMode ? [{ debugName: "_latestClickedButtonValue" }] : []));
143
+ _latestClickedButtonValue = signal(null, ...(ngDevMode ? [{ debugName: "_latestClickedButtonValue" }] : /* istanbul ignore next */ []));
144
144
  contentComponentInputs = computed(() => {
145
145
  const component = this.typedContent().component;
146
146
  if (!component || !(component.prototype instanceof PromptDialogBase)) {
@@ -163,16 +163,16 @@ class NgnDialog extends DialogTemplates {
163
163
  },
164
164
  },
165
165
  };
166
- }, ...(ngDevMode ? [{ debugName: "contentComponentInputs" }] : []));
166
+ }, ...(ngDevMode ? [{ debugName: "contentComponentInputs" }] : /* istanbul ignore next */ []));
167
167
  /**
168
168
  * How a modal dialog can be closed by the user.
169
169
  */
170
- modalClosedBy = computed(() => toModalCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "modalClosedBy" }] : []));
170
+ modalClosedBy = computed(() => toModalCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "modalClosedBy" }] : /* istanbul ignore next */ []));
171
171
  /**
172
172
  * How a popover dialog can be closed by the user.
173
173
  */
174
- popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "popoverClosedBy" }] : []));
175
- isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : []));
174
+ popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "popoverClosedBy" }] : /* istanbul ignore next */ []));
175
+ isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : /* istanbul ignore next */ []));
176
176
  typedContent = computed(() => {
177
177
  const content = this.contentTemplate();
178
178
  if (!content) {
@@ -187,7 +187,7 @@ class NgnDialog extends DialogTemplates {
187
187
  else {
188
188
  return { component: content };
189
189
  }
190
- }, ...(ngDevMode ? [{ debugName: "typedContent" }] : []));
190
+ }, ...(ngDevMode ? [{ debugName: "typedContent" }] : /* istanbul ignore next */ []));
191
191
  constructor() {
192
192
  super();
193
193
  afterRenderEffect(() => {
@@ -210,10 +210,8 @@ class NgnDialog extends DialogTemplates {
210
210
  */
211
211
  onCancel(event) {
212
212
  if (event instanceof KeyboardEvent) {
213
- // Modal dialogs handle this on their own
213
+ // Modal dialogs handle Escape via the native (cancel) event
214
214
  if (this.modal()) {
215
- this.cancelPrompt();
216
- this.setStateToClosed();
217
215
  return;
218
216
  }
219
217
  if (event.key !== 'Escape' || event.target.tagName !== 'DIALOG') {
@@ -285,10 +283,10 @@ class NgnDialog extends DialogTemplates {
285
283
  this.buttonClicked.emit(button);
286
284
  this._latestClickedButtonValue.set({ button });
287
285
  }
288
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
289
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnDialog, isStandalone: true, selector: "ngn-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, footerButtons: { classPropertyName: "footerButtons", publicName: "footerButtons", isSignal: true, isRequired: false, transformFunction: null }, movable: { classPropertyName: "movable", publicName: "movable", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", buttonClicked: "buttonClicked", closed: "closed", promptResult: "promptResult" }, providers: [provideSelf(NgnDialog)], viewQueries: [{ propertyName: "_dialogElement", first: true, predicate: ["dialog"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnMovable, selector: "[ngnMovable]", inputs: ["ngnMovable", "ngnMovableDragHandle", "ngnMovableChangeCursor", "ngnMovableLimitToViewport"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnActionButton, selector: "ngn-action-button", inputs: ["config"], outputs: ["clicked"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnResizable, selector: "[ngnResizable]", inputs: ["ngnResizable", "ngnResizableSizeLimits"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
287
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnDialog, isStandalone: true, selector: "ngn-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, footerButtons: { classPropertyName: "footerButtons", publicName: "footerButtons", isSignal: true, isRequired: false, transformFunction: null }, movable: { classPropertyName: "movable", publicName: "movable", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", buttonClicked: "buttonClicked", closed: "closed", promptResult: "promptResult" }, providers: [provideSelf(NgnDialog)], viewQueries: [{ propertyName: "_dialogElement", first: true, predicate: ["dialog"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnMovable, selector: "[ngnMovable]", inputs: ["ngnMovable", "ngnMovableDragHandle", "ngnMovableChangeCursor", "ngnMovableLimitToViewport"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnActionButton, selector: "ngn-action-button", inputs: ["config", "inline"], outputs: ["clicked"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnResizable, selector: "[ngnResizable]", inputs: ["ngnResizable", "ngnResizableSizeLimits"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
290
288
  }
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDialog, decorators: [{
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDialog, decorators: [{
292
290
  type: Component,
293
291
  args: [{ selector: 'ngn-dialog', imports: [
294
292
  NgTemplateOutlet,
@@ -301,7 +299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
301
299
  NgComponentOutlet,
302
300
  NgnIcon,
303
301
  NgnResizable,
304
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnDialog)], template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n" }]
302
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnDialog)], template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n" }]
305
303
  }], ctorParameters: () => [], propDecorators: { _dialogElement: [{ type: i0.ViewChild, args: ['dialog', { isSignal: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], modal: [{ type: i0.Input, args: [{ isSignal: true, alias: "modal", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], closeBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeBy", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], footerButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerButtons", required: false }] }], movable: [{ type: i0.Input, args: [{ isSignal: true, alias: "movable", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], buttonClicked: [{ type: i0.Output, args: ["buttonClicked"] }], closed: [{ type: i0.Output, args: ["closed"] }], promptResult: [{ type: i0.Output, args: ["promptResult"] }] } });
306
304
 
307
305
  function applyDialogConfig(dialogRef, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle this on their own\r\n if (this.modal()) {\r\n this.cancelPrompt();\r\n this.setStateToClosed();\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle Escape via the native (cancel) event\r\n if (this.modal()) {\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}