@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
@@ -16,15 +16,15 @@ const ACCORDION_CONTROL = new InjectionToken('AccordionControl');
16
16
  */
17
17
  class NgnAccordion extends NgnBase {
18
18
  theme = this.injectThemeTemplate(accordionControlTemplate, 'root');
19
- cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
20
- lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
19
+ cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
20
+ lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
21
21
  /**
22
22
  * Whether multiple panels can be expanded at once.
23
23
  */
24
- iconExpanded = input(...(ngDevMode ? [undefined, { debugName: "iconExpanded" }] : []));
25
- iconCollapsed = input(...(ngDevMode ? [undefined, { debugName: "iconCollapsed" }] : []));
26
- multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : {}), transform: booleanAttribute });
27
- expandedPanels = model([], ...(ngDevMode ? [{ debugName: "expandedPanels" }] : []));
24
+ iconExpanded = input(...(ngDevMode ? [undefined, { debugName: "iconExpanded" }] : /* istanbul ignore next */ []));
25
+ iconCollapsed = input(...(ngDevMode ? [undefined, { debugName: "iconCollapsed" }] : /* istanbul ignore next */ []));
26
+ multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
27
+ expandedPanels = model([], ...(ngDevMode ? [{ debugName: "expandedPanels" }] : /* istanbul ignore next */ []));
28
28
  togglePanel(panelId) {
29
29
  if (!this.multiple()) {
30
30
  if (this.expandedPanels().includes(panelId)) {
@@ -44,8 +44,8 @@ class NgnAccordion extends NgnBase {
44
44
  constructor() {
45
45
  super();
46
46
  }
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.0", type: NgnAccordion, isStandalone: true, selector: "ngn-accordion", inputs: { cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, iconExpanded: { classPropertyName: "iconExpanded", publicName: "iconExpanded", isSignal: true, isRequired: false, transformFunction: null }, iconCollapsed: { classPropertyName: "iconCollapsed", publicName: "iconCollapsed", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, expandedPanels: { classPropertyName: "expandedPanels", publicName: "expandedPanels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandedPanels: "expandedPanelsChange" }, providers: [
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.10", type: NgnAccordion, isStandalone: true, selector: "ngn-accordion", inputs: { cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, iconExpanded: { classPropertyName: "iconExpanded", publicName: "iconExpanded", isSignal: true, isRequired: false, transformFunction: null }, iconCollapsed: { classPropertyName: "iconCollapsed", publicName: "iconCollapsed", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, expandedPanels: { classPropertyName: "expandedPanels", publicName: "expandedPanels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandedPanels: "expandedPanelsChange" }, providers: [
49
49
  provideSelf(NgnAccordion),
50
50
  {
51
51
  provide: ACCORDION_CONTROL,
@@ -61,7 +61,7 @@ class NgnAccordion extends NgnBase {
61
61
  },
62
62
  ], usesInheritance: true, ngImport: i0, template: "<ng-content />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordion, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAccordion, decorators: [{
65
65
  type: Component,
66
66
  args: [{ selector: 'ngn-accordion', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
67
67
  provideSelf(NgnAccordion),
@@ -82,28 +82,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
82
82
 
83
83
  class AccordionTemplates extends NgnBase {
84
84
  _defaultHeaderTemplate = viewChild.required('defaultHeaderTemplate');
85
- _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : []));
85
+ _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : /* istanbul ignore next */ []));
86
86
  /**
87
87
  * Set a custom template for the header of the accordion panel.
88
88
  * Can also be set using an `<ng-template>` element with `#header` template reference variable.
89
89
  */
90
- templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : []));
91
- headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : []));
92
- _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : []));
90
+ templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : /* istanbul ignore next */ []));
91
+ headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
92
+ _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : /* istanbul ignore next */ []));
93
93
  /**
94
94
  * The required template for the content of the accordion panel.
95
95
  * Can also be set using an `<ng-template>` element with `#content` template reference variable.
96
96
  */
97
- templateContent = input(null, ...(ngDevMode ? [{ debugName: "templateContent" }] : []));
98
- contentTemplate = computed(() => this._userContentTemplate() ?? this.templateContent(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : []));
97
+ templateContent = input(null, ...(ngDevMode ? [{ debugName: "templateContent" }] : /* istanbul ignore next */ []));
98
+ contentTemplate = computed(() => this._userContentTemplate() ?? this.templateContent(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : /* istanbul ignore next */ []));
99
99
  /**
100
100
  * Types for the dialog templates.
101
101
  */
102
102
  templateTypes = templateTypesFn();
103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AccordionTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
104
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: AccordionTemplates, isStandalone: true, inputs: { templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateContent: { classPropertyName: "templateContent", publicName: "templateContent", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AccordionTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
104
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.10", type: AccordionTemplates, isStandalone: true, inputs: { templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateContent: { classPropertyName: "templateContent", publicName: "templateContent", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AccordionTemplates, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AccordionTemplates, decorators: [{
107
107
  type: Directive
108
108
  }], propDecorators: { _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 }] }], _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }], templateContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateContent", required: false }] }] } });
109
109
 
@@ -117,36 +117,36 @@ class NgnAccordionPanel extends AccordionTemplates {
117
117
  * The unique identifier for the accordion panel.
118
118
  * @default generateElementId()
119
119
  */
120
- panelId = input(generateElementId(), ...(ngDevMode ? [{ debugName: "panelId" }] : []));
120
+ panelId = input(generateElementId(), ...(ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []));
121
121
  /**
122
122
  * Whether to lazily load the content of the panel when expanded.
123
123
  * @default false
124
124
  */
125
- lazy = input(null, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
125
+ lazy = input(null, { ...(ngDevMode ? { debugName: "lazy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
126
126
  /**
127
127
  * Whether to cache the content of the panel when {@link lazy} is enabled and the panel is closed.
128
128
  * @default false
129
129
  */
130
- cache = input(null, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
130
+ cache = input(null, { ...(ngDevMode ? { debugName: "cache" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
131
131
  /**
132
132
  * The header text for the accordion panel.
133
133
  */
134
- header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : []));
134
+ header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : /* istanbul ignore next */ []));
135
135
  /**
136
136
  * Whether the accordion panel is disabled. Disabling will prevent user interaction,
137
137
  * but not automatically close the panel if it was already expanded, or is expanded programatically.
138
138
  * @default false
139
139
  */
140
- disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
140
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
141
141
  iconExpanded = this._accordionControl.iconExpanded;
142
142
  iconCollapsed = this._accordionControl.iconCollapsed;
143
143
  _contentViewChild = viewChild.required('content');
144
- expanded = computed(() => this._accordionControl.expandedPanels().includes(this.panelId()), ...(ngDevMode ? [{ debugName: "expanded" }] : []));
145
- headerId = computed(() => `${this.panelId()}-accordionpanel-header`, ...(ngDevMode ? [{ debugName: "headerId" }] : []));
146
- contentId = computed(() => `${this.panelId()}-accordionpanel-content`, ...(ngDevMode ? [{ debugName: "contentId" }] : []));
147
- afterTransitionExpanded = signal(false, ...(ngDevMode ? [{ debugName: "afterTransitionExpanded" }] : []));
148
- lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy(), ...(ngDevMode ? [{ debugName: "lazyInt" }] : []));
149
- cacheInt = computed(() => this.cache() ?? this._accordionControl.cache(), ...(ngDevMode ? [{ debugName: "cacheInt" }] : []));
144
+ expanded = computed(() => this._accordionControl.expandedPanels().includes(this.panelId()), ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
145
+ headerId = computed(() => `${this.panelId()}-accordionpanel-header`, ...(ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []));
146
+ contentId = computed(() => `${this.panelId()}-accordionpanel-content`, ...(ngDevMode ? [{ debugName: "contentId" }] : /* istanbul ignore next */ []));
147
+ afterTransitionExpanded = signal(false, ...(ngDevMode ? [{ debugName: "afterTransitionExpanded" }] : /* istanbul ignore next */ []));
148
+ lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy(), ...(ngDevMode ? [{ debugName: "lazyInt" }] : /* istanbul ignore next */ []));
149
+ cacheInt = computed(() => this.cache() ?? this._accordionControl.cache(), ...(ngDevMode ? [{ debugName: "cacheInt" }] : /* istanbul ignore next */ []));
150
150
  constructor() {
151
151
  super();
152
152
  afterRenderEffect(() => {
@@ -178,12 +178,12 @@ class NgnAccordionPanel extends AccordionTemplates {
178
178
  toggle() {
179
179
  this._accordionControl.togglePanel(this.panelId());
180
180
  }
181
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
182
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnAccordionPanel, isStandalone: true, selector: "ngn-accordion-panel", inputs: { panelId: { classPropertyName: "panelId", publicName: "panelId", 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 }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnAccordionPanel)], viewQueries: [{ propertyName: "_contentViewChild", first: true, predicate: ["content"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
181
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAccordionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
182
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnAccordionPanel, isStandalone: true, selector: "ngn-accordion-panel", inputs: { panelId: { classPropertyName: "panelId", publicName: "panelId", 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 }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnAccordionPanel)], viewQueries: [{ propertyName: "_contentViewChild", first: true, predicate: ["content"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'accordion-collapse' : 'accordion-expand'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
183
183
  }
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordionPanel, decorators: [{
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnAccordionPanel, decorators: [{
185
185
  type: Component,
186
- args: [{ selector: 'ngn-accordion-panel', imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnAccordionPanel)], template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n" }]
186
+ args: [{ selector: 'ngn-accordion-panel', imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnAccordionPanel)], template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'accordion-collapse' : 'accordion-expand'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n" }]
187
187
  }], ctorParameters: () => [], propDecorators: { panelId: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelId", required: false }] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], _contentViewChild: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
188
188
 
189
189
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-accordion.mjs","sources":["../../src/accordion/types.ts","../../src/accordion/accordion.ts","../../src/accordion/accordion.html","../../src/accordion/accordion-templates.ts","../../src/accordion/accordion-panel.ts","../../src/accordion/accordion-panel.html","../../src/accordion/ngneers-controls-accordion.ts"],"sourcesContent":["import { InjectionToken, type Signal } from '@angular/core';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\nexport type HeaderTemplateType = {\r\n $implicit: {\r\n panelId: string;\r\n text?: string;\r\n expanded: boolean;\r\n };\r\n};\r\nexport type AccordionControl = {\r\n expandedPanels: Signal<string[]>;\r\n togglePanel: (panelId: string) => void;\r\n lazy: Signal<boolean>;\r\n cache: Signal<boolean>;\r\n iconExpanded: Signal<IconType>;\r\n iconCollapsed: Signal<IconType>;\r\n};\r\n\r\nexport const ACCORDION_CONTROL = new InjectionToken<AccordionControl>('AccordionControl');\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\nimport { accordionControlTemplate } from '@ngneers/controls-themes/templates/accordion';\r\n\r\nimport { ACCORDION_CONTROL, type AccordionControl } from './types';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion',\r\n imports: [],\r\n templateUrl: './accordion.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n provideSelf(NgnAccordion),\r\n {\r\n provide: ACCORDION_CONTROL,\r\n deps: [NgnAccordion],\r\n useFactory: (accordion: NgnAccordion) =>\r\n <AccordionControl>{\r\n expandedPanels: accordion.expandedPanels,\r\n togglePanel: accordion.togglePanel.bind(accordion),\r\n lazy: accordion.lazy,\r\n cache: accordion.cache,\r\n iconExpanded: accordion.iconExpanded,\r\n iconCollapsed: accordion.iconCollapsed,\r\n },\r\n },\r\n ],\r\n})\r\nexport class NgnAccordion extends NgnBase<'accordion'> {\r\n protected readonly theme = this.injectThemeTemplate(accordionControlTemplate, 'root');\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether multiple panels can be expanded at once.\r\n */\r\n public readonly iconExpanded = input<IconType>();\r\n public readonly iconCollapsed = input<IconType>();\r\n public readonly multiple = input(false, { transform: booleanAttribute });\r\n public readonly expandedPanels = model<string[]>([]);\r\n\r\n public togglePanel(panelId: string) {\r\n if (!this.multiple()) {\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.set([]);\r\n return;\r\n }\r\n this.expandedPanels.set([panelId]);\r\n return;\r\n }\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.update(panels => panels.filter(id => id !== panelId));\r\n } else {\r\n this.expandedPanels.update(panels => [...panels, panelId]);\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<ng-content />\n","import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { HeaderTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class AccordionTemplates extends NgnBase<'accordionPanel'> {\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<HeaderTemplateType>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<HeaderTemplateType>>('header');\r\n /**\r\n * Set a custom template for the header of the accordion panel.\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<HeaderTemplateType> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The required template for the content of the accordion panel.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly templateContent = input<TemplateRef<unknown> | null>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.templateContent()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: HeaderTemplateType;\r\n }>();\r\n}\r\n","import { 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 inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { accordionPanelControlTemplate } from '@ngneers/controls-themes/templates/accordion-panel';\r\n\r\nimport { AccordionTemplates } from './accordion-templates';\r\nimport { ACCORDION_CONTROL } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion-panel',\r\n imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon],\r\n templateUrl: './accordion-panel.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnAccordionPanel)],\r\n})\r\nexport class NgnAccordionPanel extends AccordionTemplates {\r\n protected readonly theme = this.injectThemeTemplate(accordionPanelControlTemplate, 'root');\r\n\r\n private readonly _accordionControl = inject(ACCORDION_CONTROL);\r\n\r\n /**\r\n * The unique identifier for the accordion panel.\r\n * @default generateElementId()\r\n */\r\n public readonly panelId = input<string>(generateElementId());\r\n /**\r\n * Whether to lazily load the content of the panel when expanded.\r\n * @default false\r\n */\r\n public readonly lazy = input(null, { transform: booleanAttribute });\r\n /**\r\n * Whether to cache the content of the panel when {@link lazy} is enabled and the panel is closed.\r\n * @default false\r\n */\r\n public readonly cache = input(null, { transform: booleanAttribute });\r\n /**\r\n * The header text for the accordion panel.\r\n */\r\n public readonly header = input<string>();\r\n /**\r\n * Whether the accordion panel is disabled. Disabling will prevent user interaction,\r\n * but not automatically close the panel if it was already expanded, or is expanded programatically.\r\n * @default false\r\n */\r\n public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly iconExpanded = this._accordionControl.iconExpanded;\r\n protected readonly iconCollapsed = this._accordionControl.iconCollapsed;\r\n protected readonly _contentViewChild = viewChild.required<ElementRef<HTMLElement>>('content');\r\n\r\n protected readonly expanded = computed(() =>\r\n this._accordionControl.expandedPanels().includes(this.panelId())\r\n );\r\n\r\n protected readonly headerId = computed(() => `${this.panelId()}-accordionpanel-header`);\r\n protected readonly contentId = computed(() => `${this.panelId()}-accordionpanel-content`);\r\n\r\n protected readonly afterTransitionExpanded = signal<boolean>(false);\r\n\r\n protected readonly lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy());\r\n protected readonly cacheInt = computed(() => this.cache() ?? this._accordionControl.cache());\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (!this.lazyInt() || this.cacheInt()) {\r\n return;\r\n }\r\n if (this.expanded()) {\r\n this.afterTransitionExpanded.set(true);\r\n } else {\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this._contentViewChild()\r\n .nativeElement.getAnimations()\r\n .map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.afterTransitionExpanded.set(false);\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the expanded state of the accordion panel.\r\n */\r\n public toggle() {\r\n this._accordionControl.togglePanel(this.panelId());\r\n }\r\n}\r\n","<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\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-accordion.mjs","sources":["../../src/accordion/types.ts","../../src/accordion/accordion.ts","../../src/accordion/accordion.html","../../src/accordion/accordion-templates.ts","../../src/accordion/accordion-panel.ts","../../src/accordion/accordion-panel.html","../../src/accordion/ngneers-controls-accordion.ts"],"sourcesContent":["import { InjectionToken, type Signal } from '@angular/core';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\nexport type HeaderTemplateType = {\r\n $implicit: {\r\n panelId: string;\r\n text?: string;\r\n expanded: boolean;\r\n };\r\n};\r\nexport type AccordionControl = {\r\n expandedPanels: Signal<string[]>;\r\n togglePanel: (panelId: string) => void;\r\n lazy: Signal<boolean>;\r\n cache: Signal<boolean>;\r\n iconExpanded: Signal<IconType>;\r\n iconCollapsed: Signal<IconType>;\r\n};\r\n\r\nexport const ACCORDION_CONTROL = new InjectionToken<AccordionControl>('AccordionControl');\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\nimport { accordionControlTemplate } from '@ngneers/controls-themes/templates/accordion';\r\n\r\nimport { ACCORDION_CONTROL, type AccordionControl } from './types';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion',\r\n imports: [],\r\n templateUrl: './accordion.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n provideSelf(NgnAccordion),\r\n {\r\n provide: ACCORDION_CONTROL,\r\n deps: [NgnAccordion],\r\n useFactory: (accordion: NgnAccordion) =>\r\n <AccordionControl>{\r\n expandedPanels: accordion.expandedPanels,\r\n togglePanel: accordion.togglePanel.bind(accordion),\r\n lazy: accordion.lazy,\r\n cache: accordion.cache,\r\n iconExpanded: accordion.iconExpanded,\r\n iconCollapsed: accordion.iconCollapsed,\r\n },\r\n },\r\n ],\r\n})\r\nexport class NgnAccordion extends NgnBase<'accordion'> {\r\n protected readonly theme = this.injectThemeTemplate(accordionControlTemplate, 'root');\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether multiple panels can be expanded at once.\r\n */\r\n public readonly iconExpanded = input<IconType>();\r\n public readonly iconCollapsed = input<IconType>();\r\n public readonly multiple = input(false, { transform: booleanAttribute });\r\n public readonly expandedPanels = model<string[]>([]);\r\n\r\n public togglePanel(panelId: string) {\r\n if (!this.multiple()) {\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.set([]);\r\n return;\r\n }\r\n this.expandedPanels.set([panelId]);\r\n return;\r\n }\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.update(panels => panels.filter(id => id !== panelId));\r\n } else {\r\n this.expandedPanels.update(panels => [...panels, panelId]);\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<ng-content />\n","import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { HeaderTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class AccordionTemplates extends NgnBase<'accordionPanel'> {\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<HeaderTemplateType>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<HeaderTemplateType>>('header');\r\n /**\r\n * Set a custom template for the header of the accordion panel.\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<HeaderTemplateType> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The required template for the content of the accordion panel.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly templateContent = input<TemplateRef<unknown> | null>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.templateContent()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: HeaderTemplateType;\r\n }>();\r\n}\r\n","import { 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 inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { accordionPanelControlTemplate } from '@ngneers/controls-themes/templates/accordion-panel';\r\n\r\nimport { AccordionTemplates } from './accordion-templates';\r\nimport { ACCORDION_CONTROL } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion-panel',\r\n imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon],\r\n templateUrl: './accordion-panel.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnAccordionPanel)],\r\n})\r\nexport class NgnAccordionPanel extends AccordionTemplates {\r\n protected readonly theme = this.injectThemeTemplate(accordionPanelControlTemplate, 'root');\r\n\r\n private readonly _accordionControl = inject(ACCORDION_CONTROL);\r\n\r\n /**\r\n * The unique identifier for the accordion panel.\r\n * @default generateElementId()\r\n */\r\n public readonly panelId = input<string>(generateElementId());\r\n /**\r\n * Whether to lazily load the content of the panel when expanded.\r\n * @default false\r\n */\r\n public readonly lazy = input(null, { transform: booleanAttribute });\r\n /**\r\n * Whether to cache the content of the panel when {@link lazy} is enabled and the panel is closed.\r\n * @default false\r\n */\r\n public readonly cache = input(null, { transform: booleanAttribute });\r\n /**\r\n * The header text for the accordion panel.\r\n */\r\n public readonly header = input<string>();\r\n /**\r\n * Whether the accordion panel is disabled. Disabling will prevent user interaction,\r\n * but not automatically close the panel if it was already expanded, or is expanded programatically.\r\n * @default false\r\n */\r\n public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly iconExpanded = this._accordionControl.iconExpanded;\r\n protected readonly iconCollapsed = this._accordionControl.iconCollapsed;\r\n protected readonly _contentViewChild = viewChild.required<ElementRef<HTMLElement>>('content');\r\n\r\n protected readonly expanded = computed(() =>\r\n this._accordionControl.expandedPanels().includes(this.panelId())\r\n );\r\n\r\n protected readonly headerId = computed(() => `${this.panelId()}-accordionpanel-header`);\r\n protected readonly contentId = computed(() => `${this.panelId()}-accordionpanel-content`);\r\n\r\n protected readonly afterTransitionExpanded = signal<boolean>(false);\r\n\r\n protected readonly lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy());\r\n protected readonly cacheInt = computed(() => this.cache() ?? this._accordionControl.cache());\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (!this.lazyInt() || this.cacheInt()) {\r\n return;\r\n }\r\n if (this.expanded()) {\r\n this.afterTransitionExpanded.set(true);\r\n } else {\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this._contentViewChild()\r\n .nativeElement.getAnimations()\r\n .map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.afterTransitionExpanded.set(false);\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the expanded state of the accordion panel.\r\n */\r\n public toggle() {\r\n this._accordionControl.togglePanel(this.panelId());\r\n }\r\n}\r\n","<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'accordion-collapse' : 'accordion-expand'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ const defaultNgnConfig = {
36
36
  showOnFocus: true,
37
37
  hideOnTooltipHover: false,
38
38
  hideOnClick: true,
39
+ autoAriaMode: 'description',
39
40
  },
40
41
  },
41
42
  };
@@ -77,6 +78,8 @@ function provideNgnConfig(config) {
77
78
  defaultNgnConfig.defaults.tooltip.hideOnTooltipHover,
78
79
  hideOnClick: config?.defaults?.tooltip?.hideOnClick ??
79
80
  defaultNgnConfig.defaults.tooltip.hideOnClick,
81
+ autoAriaMode: config?.defaults?.tooltip?.autoAriaMode ??
82
+ defaultNgnConfig.defaults.tooltip.autoAriaMode,
80
83
  },
81
84
  },
82
85
  },
@@ -128,7 +131,7 @@ function elementsSizesSignal(element, active) {
128
131
  return elementsSizesSignalInt(element, active);
129
132
  }
130
133
  function elementsSizesSignalInt(element, active) {
131
- const sizeSignal = signal([], { ...(ngDevMode ? { debugName: "sizeSignal" } : {}), equal: (a, b) => JSON.stringify(a) === JSON.stringify(b) });
134
+ const sizeSignal = signal([], { ...(ngDevMode ? { debugName: "sizeSignal" } : /* istanbul ignore next */ {}), equal: (a, b) => JSON.stringify(a) === JSON.stringify(b) });
132
135
  let elements;
133
136
  afterRenderEffect(() => {
134
137
  resizeObserver.disconnect();
@@ -231,7 +234,7 @@ function domEventObservable(element, eventName, injector) {
231
234
  function domEventSignal(element, eventName, injector) {
232
235
  const inj = injector ?? inject(Injector);
233
236
  const res = runInInjectionContext(inj, () => {
234
- const sig = signal(null, ...(ngDevMode ? [{ debugName: "sig" }] : []));
237
+ const sig = signal(null, ...(ngDevMode ? [{ debugName: "sig" }] : /* istanbul ignore next */ []));
235
238
  domEventObservable(element, eventName, inj).subscribe(value => {
236
239
  sig.set(value);
237
240
  });
@@ -250,11 +253,11 @@ function domEventHandler(element, eventName, handler, injector) {
250
253
  const inj = injector ?? inject(Injector);
251
254
  const destroyRef = inj.get(DestroyRef);
252
255
  runInInjectionContext(inj, () => {
253
- const destroyed = signal(false, ...(ngDevMode ? [{ debugName: "destroyed" }] : []));
256
+ const destroyed = signal(false, ...(ngDevMode ? [{ debugName: "destroyed" }] : /* istanbul ignore next */ []));
254
257
  destroyRef.onDestroy(() => {
255
258
  destroyed.set(true);
256
259
  });
257
- const elSig = computed(() => (destroyed() ? null : getElement(element)), ...(ngDevMode ? [{ debugName: "elSig" }] : []));
260
+ const elSig = computed(() => (destroyed() ? null : getElement(element)), ...(ngDevMode ? [{ debugName: "elSig" }] : /* istanbul ignore next */ []));
258
261
  const elSigWithPrev = signalWithPrevious(elSig);
259
262
  effect(() => {
260
263
  const element = elSigWithPrev();
@@ -301,13 +304,13 @@ function injectThemeColors(controlName) {
301
304
  }
302
305
 
303
306
  class Platform {
304
- _deviceType = signal('desktop', ...(ngDevMode ? [{ debugName: "_deviceType" }] : []));
307
+ _deviceType = signal('desktop', ...(ngDevMode ? [{ debugName: "_deviceType" }] : /* istanbul ignore next */ []));
305
308
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
306
309
  windowSize = this.isBrowser
307
310
  ? elementSizeSignal(document.body)
308
311
  : signal({ width: 0, height: 0 });
309
- width = computed(() => this.windowSize().width, ...(ngDevMode ? [{ debugName: "width" }] : []));
310
- height = computed(() => this.windowSize().height, ...(ngDevMode ? [{ debugName: "height" }] : []));
312
+ width = computed(() => this.windowSize().width, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
313
+ height = computed(() => this.windowSize().height, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
311
314
  constructor() {
312
315
  const doc = inject(DOCUMENT);
313
316
  const win = doc.defaultView;
@@ -333,11 +336,11 @@ class Platform {
333
336
  }
334
337
  isTouchDevice = computed(() => {
335
338
  return this._deviceType() === 'mobile' || this._deviceType() === 'tablet';
336
- }, ...(ngDevMode ? [{ debugName: "isTouchDevice" }] : []));
337
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Platform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
338
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Platform });
339
+ }, ...(ngDevMode ? [{ debugName: "isTouchDevice" }] : /* istanbul ignore next */ []));
340
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: Platform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
341
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: Platform });
339
342
  }
340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Platform, decorators: [{
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: Platform, decorators: [{
341
344
  type: Injectable
342
345
  }], ctorParameters: () => [] });
343
346
 
@@ -542,7 +545,7 @@ class ThemeService {
542
545
  _config = inject(NGN_CONFIG);
543
546
  _loadedScopes = new Set();
544
547
  _document = inject(DOCUMENT);
545
- activeTheme = signal(this._config.theme?.preset, ...(ngDevMode ? [{ debugName: "activeTheme" }] : []));
548
+ activeTheme = signal(this._config.theme?.preset, ...(ngDevMode ? [{ debugName: "activeTheme" }] : /* istanbul ignore next */ []));
546
549
  constructor() {
547
550
  if (!this._config.theme?.preset && !this._config.theme?.lazyLoaded) {
548
551
  console.warn('No active theme found. Please provide a theme in the configuration or set lazyLoaded to true if you plan to load themes dynamically.');
@@ -613,10 +616,10 @@ class ThemeService {
613
616
  namePrefix: this._config.theme.namePrefix,
614
617
  });
615
618
  }
616
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
617
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ThemeService });
619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
620
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: ThemeService });
618
621
  }
619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ThemeService, decorators: [{
622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: ThemeService, decorators: [{
620
623
  type: Injectable
621
624
  }], ctorParameters: () => [] });
622
625
 
@@ -632,14 +635,14 @@ function provideNgnControls(config, ...features) {
632
635
  }
633
636
 
634
637
  class NgnTemplate {
635
- ngnTemplate = input.required(...(ngDevMode ? [{ debugName: "ngnTemplate" }] : []));
638
+ ngnTemplate = input.required(...(ngDevMode ? [{ debugName: "ngnTemplate" }] : /* istanbul ignore next */ []));
636
639
  static ngTemplateContextGuard(dir, ctx) {
637
640
  return true;
638
641
  }
639
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
640
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgnTemplate, isStandalone: true, selector: "ng-template[ngnTemplate]", inputs: { ngnTemplate: { classPropertyName: "ngnTemplate", publicName: "ngnTemplate", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
642
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
643
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", type: NgnTemplate, isStandalone: true, selector: "ng-template[ngnTemplate]", inputs: { ngnTemplate: { classPropertyName: "ngnTemplate", publicName: "ngnTemplate", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
641
644
  }
642
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnTemplate, decorators: [{
645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnTemplate, decorators: [{
643
646
  type: Directive,
644
647
  args: [{
645
648
  selector: 'ng-template[ngnTemplate]',